xgrommx

15 февраля 2016

# Понедельник 7 твитов

Всем привет! на этой неделе с вами я, попробуем потравмировать мозг функциональщиной и реактивщиной!)

10:06

Очень интересно наскольк вы увлекались frp, fp, etc.

10:21

Начнем с небольших ресурсов, может пригодятся вам github.com/xgrommx/awesom…

12:56

У кого какой опыт с рективными либами типа Rx, Bacon, flyd, Kefir, Most etc?

13:09

А тем временем релизнул Kotlin офигенная альтернатива для Java и не нестолько сложный как Scala blog.jetbrains.com/kotlin/2016/02…

13:11

Осознать почти всю мощь combineLatest из Rx в одно прикольном примере jsbin.com/xisiko/1/edit?…

15:26

Подписывайтесь на мой канал, ставьте лайки, делайте репосты, рассказывайте друзьям :D

11:25

# Вторник 41 твит

Есть кто живой?)

10:26

Давайте поговорим кому какой стиль лучше fluent или compose + point-free?

11:25

Javascript next принес много интересного, но вот это тоже весьма полезно ponyfoo.com/articles/propo… и моя поделка jsbin.com/zixolew/21/edi…

12:57

Попишем свой обзервабл в реалтайме?) Это будет эксперимент в твиттере =)

13:00

Для начала почитайте про continuation monad matt.might.net/articles/by-ex… curiosity-driven.org/monads-in-java…

13:19

Если вы работали с lodash/ramda, то вы почти понимаете как работают Observable. Observable = Collection + Time.

13:23

Если говорить простыми словами, то Observable ограничиваются лишь их временем жизни.

13:25

Rx это всего лишь Observable + Linq(aka lodash, ramda, etc) + Schedulers Мы постараемся сделать Observalbe with Disposable.

13:28

после того как реализуем свой вариант Observable сравним с Promises

13:28

Observable должны поддерживать lazy evaluation и push collection style. А значит нам нужен метод типа value как в lodash

13:33

Зная все это мы реализуем простой интерфейс для нас jsbin.com/qebehe/1/edit?… без сигнализатора о ошибках и завершении и поговорим о контракте

13:38

Насколько мы знаем в обычном итераторе есть hasNext, currentValue и isDone мы должны постоянно опрашивать есть ли данные (это схематично)

13:42

Представте себе, что вам не надо опрашивать о завершении, а это сделает за вас интерфейс.

13:43

Мы знаем, что isDone будет возвращать false и потом true, а на основе hasNext и currentValue мы будем получать значения.

13:46

Теперь давайте попробуем вывернуть это все зеркально.

13:46

Таким образом мы получим интерфейс Observable. pic.twitter.com/25w5WRPKsi

13:51

Добавим недостающие реализации в наш Observable jsbin.com/qebehe/2/edit?… Теперь мы знаем когда наша коллекция завершиться и бросит ошибку

13:54

Добавим возможность нашему Observable работать с массивом jsbin.com/qebehe/3/edit?…

14:12

Используя continuation monad реализуем превый метод - map jsbin.com/qebehe/4/edit?…

14:17

Опрос! Если интересно, я продолжу дальше. Нет, ну ок =)

14:18

Давайте еще реализуем filter и reduce и поговорим о бесконечных коллекциях и как их завершать по ограничителям

14:27

Вот фильтр и уже живая цепочка вычислений, пока без reduce но о нем позже ибо у него есть суперпозиция оператора jsbin.com/qebehe/5/edit?…

14:32

До сих пор мы использовали конечные коллекции, но что если у нас сокет и прочее, у которого не известно когда он завершиться?

14:34

Нам нужна такая ф-ция которая будет завершать действие нашего Observable. Ее мы назовем dispose и напишем Disposable интерфейс

14:38

Реализовавши этот простой интерфейс и простейший враппер для таймера мы получим возможность прерывать выполнение jsbin.com/qebehe/6/edit?…

14:44

Я нарошно сделал завершения Observable в interval просто показать что мы получим, на деле так делать не стоит и я покажу как это сделать.

14:48

Насколько мы знаем чтобы что-то ограничить нам нужны ф-ции ограничители, поговорим о take, takeWhile, takeUntil

14:48

Вот он! take(n) оператор. Его суть закончить Observable когда он вернет n значений. jsbin.com/qebehe/7/edit?…

14:55

И тут мы поговорим о первом правиле, всегда очищайте ресурсы в своих операторах

14:56

Я думаю что я как-то смог заинтересовать вас и мы двигаемся дальше. Об takeWhile отличие только что там предикат jsbin.com/qebehe/8/edit?…

15:06

На ошибки в коде или слабую оптимизацию не обращайте внимание, я пишу код в реалтайме с каждым твитом

15:08

Что-же нас ждет много еще интересного, но сейчас подискутируем, что было не понятно?

15:09

Пришло время научится ограничивать один Observable другим, для этого мы реализуем три оператора (нужен один) остальные в помощь

15:43

У нас есть один O который через 3 секунды завершит основной O jsbin.com/qebehe/9/edit?…

16:03

Теперь представим себе ситуацию что у нас есть [[1,2,3], [4,5,6], [7,8,9]] и мы хотим обработать каждый из массивов и сделать линейный

16:05

Для этого есть оператор flatMap Имея Array<Array<T>> мы получим Array<T> А теперь вспомним что Observable = Collection + Time

16:07

По сути теперь нам нужен оператор flatMap что сделает Observable<Observable<T>> в Observable<T>

16:08

В случае с Array это просто Array.prototype.flatMap = function(f) {
return [].concat.apply([], this.map(f));
};

16:11

Но у нас асинхронность и наш flatMap будет немного другим

16:12

Спустя какое-то время у нас есть flatMap = map + mergeAll вот как раз mergeAll объединяет Observable без порядка jsbin.com/qebehe/14/edit…

16:46

И вот простой пример Drag and Drop (Disposable я позаимствовал с оф репозитория) jsbin.com/paqega/8/edit?…

22:48

# Среда 24 твита

Список всех реактивных библиотек xgrommx.github.io/rx-book/conten…

12:44

Очень много чего, где используется Rx xgrommx.github.io/rx-book/conten…

12:44

Много статей по Rx xgrommx.github.io/rx-book/conten…

12:46

Презентации по Rx xgrommx.github.io/rx-book/conten…

12:46

Тематические видео по реактивному программированию xgrommx.github.io/rx-book/conten…

12:47

Очень классная подборка с экспериментами над разными реактивными и функциональными библиотеками и языками github.com/foxdonut/adven…

12:48

Elm - прекрасный язык, который компилируется в JS github.com/xgrommx/elm-ec…

12:49

Хотите более функциональный язык - вот PureScript, который тоже компилируется в JS github.com/xgrommx/puresc…

12:50

Вводная для начинающих, которые хотят понять функциональное програмирование bjpelc.wordpress.com/2015/02/06/an-… больше тут github.com/xgrommx/awesom…

12:52

Еще раз убедился, твиттер это не то место где можно вести нормальные беседы :)

13:00

Думаю не стоит представлять, но вот все о Redux github.com/xgrommx/awesom… :D

13:01

Много кто знает но все же классная книга о FP в JS github.com/MostlyAdequate… и ее перевод на русский github.com/MostlyAdequate…

13:04

Gitbook книга об Elm elm-tutorial.org/index.html

13:05

Ну и про PureScript leanpub.com/purescript/read

13:06

Javascript не так беден на функциональные библиотеки github.com/xgrommx/awesom… :)

13:08

Пожалуй две супер презентации об FP slideshare.net/ScottWlaschin/… scott.sauyet.com/Javascript/Tal…

13:12

Больше фана! Мои забавы с ангуляром и несколькими реактивными библиотеками Kefir, Rx, Bacon, Asyncplify github.com/xgrommx/angula…

13:15

Elm архитектура в Javascript github.com/xgrommx/elm-ar…

13:16

Много различных способов, как разрулить асинхронность github.com/thalesmello/ex…

13:17

Рисуем, увеличиваем и тягаем график вместе с Rx xgrommx.github.io/rx-draw

13:20

React+Rx и попытки сделать реактивный Flux github.com/xgrommx/react-…

13:21

Многообещающая и многоперспективная библиотека сделанная по всем канонам функционального программирования github.com/cujojs/most

13:22

React+most и снова попытка запилить реактивный Flux + полная функциональщина с Ramda jsbin.com/musonu/7/edit?…

13:25

# Воскресенье 1 твит

Наверное вынужден с вами попрощаться. Сорри, что так мало писал, но все же для меня был это интересный опыт =)

22:02

github.com

jsbin.com

xgrommx.github.io

other