Skip to content

Instantly share code, notes, and snippets.

View mitallast's full-sized avatar

Alexey Korchevsky mitallast

View GitHub Profile
package org.mitallast.queue;
public class ProcessTest {
public static void main(String... args) throws Exception {
long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
Process vipsthumbnail = Runtime.getRuntime()
.exec("vipsthumbnail", new String[]{"cats.jpg", "-o", "cats.resized.vips.jpg", "--size", "x100"});
vipsthumbnail.waitFor();
}
package org.mitallast.queue;
import org.bytedeco.javacpp.Loader;
import org.bytedeco.javacpp.opencv_core.Mat;
import org.bytedeco.javacpp.opencv_core.Size;
import static org.bytedeco.javacpp.opencv_imgcodecs.imread;
import static org.bytedeco.javacpp.opencv_imgcodecs.imwrite;
import static org.bytedeco.javacpp.opencv_imgproc.CV_INTER_AREA;
import static org.bytedeco.javacpp.opencv_imgproc.resize;
@mitallast
mitallast / Main.java
Created July 29, 2017 07:24
example tarantool java
import org.tarantool.SocketChannelProvider;
import org.tarantool.TarantoolClient;
import org.tarantool.TarantoolClientConfig;
import org.tarantool.TarantoolClientImpl;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;
import java.util.List;
@mitallast
mitallast / 1 Введение.md
Last active June 24, 2017 13:04
Waves blockchain whitepaper on russian

1 Введение

Гипотеза:

«Каждое возможное применение технологии blockchain будет опробовано, но цифровая наличность p2p останется наиболее используемым приложением»,

  • Райан Чарльз.

«Убийственное применение технологии blockchain является самой блочной цепью». Общая мудрость.

С момента своего создания технология blockchain чревата разногласиями по сравнению с ее наиболее естественным применением - переносом стоимости с использованием сетевого токена. Децентрализованные деньги - это новаторское развитие, но технология blockchain не может быть сведена к одному. Будучи по существу распределенной базой данных, блок-цепочка допускает различные типы распределенных записей регистров, характер которых зависит от их интерпретации пользователями блочной цепи.

@mitallast
mitallast / dotted-version-vectors.md
Last active April 20, 2017 16:11
Vector Clocks Revisited Part 2: Dotted Version Vectors

Vector Clocks Revisited Part 2: Dotted Version Vectors

В моем предыдущем блоге я писал о Vnode Version Vectors и о том, как они упрощают взаимодействие с Riak, сохраняя при этом небольшой размер логических часов. Я также упомянул о проблеме с «sibling explosion». Сегодняшнее сообщение в блоге будет более подробно описывать проблему sibling explosion и то, как Riak и некоторые ведущие исследователи распределенных систем собрались вместе, чтобы решить эту проблему, используя Dotted Version Vectors.

@mitallast
mitallast / Vector Clocks Revisited.md
Created April 19, 2017 20:14
Vector Clocks Revisited

Vector Clocks Revisited

В нашей повседневной жизни мы используем понятие времени, чтобы упорядочивать события: вставать перед завтраком, есть перед работой и т.д. Как показывает превосходная статья ACM, время может быть сложным в распределенной системе.

Это первый из трех постов в блоге об изменениях логических часов Riak. Они занимают много места: более 3 лет. Если вы предпочитаете смотреть talk, то есть отличная «Brief History Of Time (In Riak)» Шона Криббса из

@mitallast
mitallast / index.md
Last active April 19, 2017 12:54
Clocks Are Bad

Clocks Are Bad, Or, Welcome to the Wonderful World of Distributed Systems

Недавний email tread в списке рассылки пользователей Riak выделил один из основных недостатков распределенных систем: согласованность часов.

Первое письмо:

Иногда, riak не сохраняет объект, который я пытаюсь сохранить.
Я запустил tcpdump на узле, получающем запрос, чтобы убедиться,

что он получает http-пакеты с правильным JSON от клиента.

@mitallast
mitallast / docker-compose.yml
Last active November 14, 2016 12:38
elastic cluster via docker compose
version: '2'
services:
sense:
image: areneleau/sense
ports:
- "127.0.0.1:5601:5601"
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
elastic-master:
image: elasticsearch:2.4.1
val group = 1
val count = 1000
val total = ....
val futures = 0 until total by count map { offset ⇒
Future {
vk.groups.getMembers
.groupId(group.abs.toString)
.count(count)
.offset(offset)
.execute()
case class Semigroup(x: Map[Long, Long]) {
// {1->1, 2->2} |+| {1->1, 2->4, 3->3} == {1->2, 2->6, 3->3}
def |+|(y: Map[Long, Long]): Map[Long, Long] = x.keys.toSet.union(y.keys.toSet)
.map { k => k -> (x.getOrDefault(k, 0) + y.getOrDefault(k, 0)) }.toMap
// {1->1, 2->2} |*| 2 == {1->2, 2->4}
def |*|(y: Int): Map[Long, Long] = x.map { case (k, v) ⇒ k → v * y }
}
implicit def map2Semigroup(x: Map[Long, Long]): Semigroup = Semigroup(x)