# Понедельник 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:25Javascript 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:25Rx это всего лишь Observable + Linq(aka lodash, ramda, etc) + Schedulers Мы постараемся сделать Observalbe with Disposable.
13:28после того как реализуем свой вариант Observable сравним с Promises
13:28Observable должны поддерживать 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));
};
Но у нас асинхронность и наш 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:48Elm - прекрасный язык, который компилируется в 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 medium.com/@collardeau/in… medium.com/@collardeau/in… medium.com/@collardeau/pa…
13:03Много кто знает но все же классная книга о FP в JS github.com/MostlyAdequate… и ее перевод на русский github.com/MostlyAdequate…
13:04Gitbook книга об Elm elm-tutorial.org/index.html
13:05Ну и про PureScript leanpub.com/purescript/read
13:06Javascript не так беден на функциональные библиотеки 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:15Elm архитектура в Javascript github.com/xgrommx/elm-ar…
13:16Много различных способов, как разрулить асинхронность github.com/thalesmello/ex…
13:17Рисуем, увеличиваем и тягаем график вместе с Rx xgrommx.github.io/rx-draw
13:20React+Rx и попытки сделать реактивный Flux github.com/xgrommx/react-…
13:21Многообещающая и многоперспективная библиотека сделанная по всем канонам функционального программирования github.com/cujojs/most
13:22React+most и снова попытка запилить реактивный Flux + полная функциональщина с Ramda jsbin.com/musonu/7/edit?…
13:25# Воскресенье 1 твит
Наверное вынужден с вами попрощаться. Сорри, что так мало писал, но все же для меня был это интересный опыт =)
22:02# Ссылки
github.com
- https://github.com/xgrommx/awesome-functional-programming
- https://github.com/foxdonut/adventures-reactive-web-dev
- https://github.com/xgrommx/elm-ecosystem
- https://github.com/xgrommx/purescript-ecosystem
- https://github.com/Reactive-Extensions/RxJS/tree/master/src/modular
- https://github.com/xgrommx/awesome-redux
- https://github.com/MostlyAdequate/mostly-adequate-guide
- https://github.com/MostlyAdequate/mostly-adequate-guide-ru
- https://github.com/xgrommx/awesome-functional-programming#javascript
- https://github.com/xgrommx/angular-frp
- https://github.com/xgrommx/elm-architecture
- https://github.com/thalesmello/exploring-async
- https://github.com/xgrommx/react-rx-flux
- https://github.com/cujojs/most
jsbin.com
- https://jsbin.com/xisiko/1/edit?css,output
- https://jsbin.com/zixolew/21/edit?js,console
- https://jsbin.com/qebehe/1/edit?js,console
- https://jsbin.com/qebehe/2/edit?js,console
- https://jsbin.com/qebehe/3/edit?js,console
- https://jsbin.com/qebehe/4/edit?js,console
- https://jsbin.com/qebehe/5/edit?js,console
- https://jsbin.com/qebehe/6/edit?js,console
- https://jsbin.com/qebehe/7/edit?js,console
- https://jsbin.com/qebehe/8/edit?js,console
- https://jsbin.com/qebehe/9/edit?js,console
- https://jsbin.com/qebehe/14/edit?js,console
- https://jsbin.com/paqega/8/edit?js,output
- https://jsbin.com/musonu/7/edit?js,output
xgrommx.github.io
- http://xgrommx.github.io/rx-book/content/resources/reactive_libraries/index.html#libraries
- http://xgrommx.github.io/rx-book/content/resources/reactive_libraries/rx.html
- http://xgrommx.github.io/rx-book/content/resources/articles/index.html#rx
- http://xgrommx.github.io/rx-book/content/resources/presentations/index.html#rx
- http://xgrommx.github.io/rx-book/content/resources/video/index.html
- http://xgrommx.github.io/rx-book
- http://xgrommx.github.io/rx-draw
other
- http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/
- https://ponyfoo.com/articles/proposal-draft-for-flatten-and-flatmap
- http://matt.might.net/articles/by-example-continuation-passing-style/
- https://curiosity-driven.org/monads-in-javascript
- https://bjpelc.wordpress.com/2015/02/06/an-introduction-to-functional-programming-in-javascript/
- https://medium.com/@collardeau/intro-to-functional-programming-concepts-in-javascript-b0650773139c#.obar9jojr
- https://medium.com/@collardeau/intro-to-functional-programming-concepts-in-javascript-part-2-f45228c49eed#.5imt28gzo
- https://medium.com/@collardeau/part-3-an-intro-to-functional-programming-concepts-in-javascript-febf9368ffe6#.j3r88oi19
- http://www.elm-tutorial.org/index.html
- https://leanpub.com/purescript/read
- http://www.slideshare.net/ScottWlaschin/fp-patterns-buildstufflt
- http://scott.sauyet.com/Javascript/Talk/FunctionalProgramming