Ускоряем реализацию fs2 стримов для reactive-streams

Если вы, как и я, не в восторге от текущих инструментов для коммуникации с MongoDB, и меньшим злом выбрали для себя выбрали MongoDB Reactive Streams Java Driver, в надежде на существующую интеграцию reactive-streams с fs2, то вероятно, вас ждет разочарование. Официальная интеграция оооооооооооооооооооооооочень медленная. Если вы не собираетесь запускать ваше добро на JS, то возможно вам пригодится мое решение: https://github.com/dokwork/fast-reactive-fs2.
Просто оставлю результат замеров здесь:

Benchmark                                      Mode  Cnt      Score      Error  Units
ReadOneMillionNumbers.dokworkStreamSubscriber  avgt   25     39.377 ±    2.749  ms/op
ReadOneMillionNumbers.fs2StreamSubscriber      avgt   25  11189.737 ± 2213.225  ms/op

Разбор реализации актора из книги FP in Scala

cover of the book В книге Functional Programming in Scala, в главе Purely functional parallelism, в конечной реализации Par[a], авторы ссылаются на акторную модель вычислений и приводят в пример ее реализацию: Actor.scala. В основе реализации приводимого актора лежат идеи Non-intrusive MPSC node-based queue, которые не могут не вызывать восторга! В своей статье хочу попытаться разъяснить для себя и всех, кому это будет интересно, эти идеи.

Шаблонные проекты с Giter8

Надоело копировать build.sbt, plugins.sbt, .travis.yml и прочие шаблонные файлы каждый раз, когда садитесь за новый проект? Тогда у меня для вас есть хорошая новость: забудьте об этом и встречайте giter8!

Состояния java.lang.Thread на граблях и примерах

Каждый java разработчик знает что такое поток, как его запустить и, возможно, поменять ему приоритет или даже сделать его демоном. Сегодня этих поверхностных знаний зачастую достаточно для того, чтобы успешно справляться со своими повседневными задачами, в которых крутые фреймворки всеми силами пытаются скрыть от нас нюансы многопоточности. Но иногда жизнь заставляет спустится на дно  на уровень ниже и познакомиться с нюансами работы с потоками более детально.

В этой статье, по мере решения простых задач, через серию проб и ошибок, мы рассмотрим некоторые нюансы при работе с классом Thread в java, поговорим о том, какие у потоков бывают состояния и при каких условиях поток переходит из одного состояния в другое.

Навигация по истории в терминале

Маленький хак упрощающий навигацию в Linux. Размещаем инструкции в ~/.bashrc:
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
и навигация по истории учитывает набранные до курсора символы.