# Понедельник 121 твит
Всем привет из дождливой Финляндии. На этой недели с вами Владислав (@smashercosmo) - разработчик и киноманьяк.
9:24Немного о себе: фронтендом занимаюсь около 10 лет, большую часть времени жил и работал в Питере, некоторое время провел в Азии
9:26Последний год живу и работаю в Финляндии. В плане стека: все, что ныне модно. React, redux, css-modules и т. д.
9:27@jsunderhood @smashercosmo что посмотреть?
Про кино обязательно будет) Каждый в этом твиттере так или иначе свои фетиши проталкивает.
@jsunderhood @smashercosmo что посмотреть?
9:29
Не смотря на то, что полтора года я весь в реакте, до этого два года был погружен в ангуляр.
9:31И в отличие от многих нежно люблю и то, и другое)
9:31Теперь немного о планах на эту неделю: к сожалению, мне не удалось придумать тему на каждый день, так как многое уже обсуждено и обговорено.
9:32Но в целом о разработке будет мало. Будем обсуждать фрустрации и девиации разработчиков, так как у меня кажется есть практически все :)
9:35Это и боязнь публичных выступлений, и патологический перфекционизм, и растерянность от количества информации и технологий... и т. д.
9:36Кстати, эта неделя в @jsunderhood можно сказать мое первое публичное выступление, а также своеобразный акт шоковой терапии)
9:38Но и о разработке тоже, конечно же, будет. Буду говорит про redux, не смотря на то, что кажется, что там уже говорить особо не о чем.
9:40Есть ряд вещей относительно редукса, которые, либо вообще еще не обсуждались в этом твиттере, либо прошли вскользь.
9:42@jsunderhood Например то, что он редакс?
Как-то на работе прижилось) Типа как php - тоже пиэйчпи, но в народе - пэхапэ.
@jsunderhood Например то, что он редакс?
9:47
Тем не менее сегодня день лайтовый: знакомство, рассказ о том, чем занимаюсь в данный момент, прием предложений о чем хотелось бы поговорить
9:53Если кому-то интересно, могу рассказать о жизни в Финляндии, хотя @toivonens вроде как довольно полно раскрыла тему в прошлый раз.
9:54@jsunderhood то есть Редакc, Экшн-криэйтор, и Реакт-КомпОнент?10:08
@sapegin @iamale_ru @webholt @jsunderhood надо обсудить почему redux надо заменить на mobx.10:08
@jsunderhood Раскажи с перспективы “js комьюнити Финляндии”10:11
@toivonens @jsunderhood а оно есть? я только @VilleImmonen знаю. Ну и @freiksenet еще
Ну как минимум еще @andrestaltz
@toivonens @jsunderhood а оно есть? я только @VilleImmonen знаю. Ну и @freiksenet еще
10:14
Я мало что знаю про js комьюнити Финляндии. Есть ежемесячная HelsinkiJS которую курируют ребята из России - Подсечин Олег и Корнеюшкин Антон
10:15Если хотите там выступить пишите им. Не знаю их твиттеров, но вот фейсбуки facebook.com/korenyushkin facebook.com/oleg.podsechin
10:16@jsunderhood Как минимум еще Petka Antonov который сделал bluebird, Juho Vepsalainen @survivejs, @olegpodsechin и многие другие кого забыл.10:18
HelsinkiJS очень камерная и уютная. Докладов обычно не много - от 4 до 6. Но зато халявное пиво :)
10:20Вообще с разработчиками тут все плохо. Не в смысле, что они плохие, а в смысле, что их очень мало.
10:24Поэтому разработчики из России тут нарасхват. У нас например все программисты из России. Питер Челябинск Волгоград. Ещё чувак из Узбекистана
10:27@jsunderhood Да ладно, их очень много на душу населения.
Мой тех. дир. (финн) говорит, что очень сложно и долго искать местных. Те, что есть - уже пристроены.
@jsunderhood Да ладно, их очень много на душу населения.
10:30
У нас до этого было еще двое - из Ганы) Т.е. кроме тех. дира вообще ни одного финна в IT-команде.
10:34@jsunderhood Ну везде хорошие программисты уже с работой.
Ну понятно, что дефицит кадров в отрасли еще долгое время будет актуален. Отличие лишь в степени перевеса спроса.
@jsunderhood Ну везде хорошие программисты уже с работой.
10:38
@freiksenet_ru @jsunderhood У нас больше 10% точно, штук 6-7 (не считала пока). Мне не нравится, для интеграции очень плохо.
Да, я бы тоже предпочел, чтобы англоговорящих разработчиков было больше. Не обязательно местных.
@freiksenet_ru @jsunderhood У нас больше 10% точно, штук 6-7 (не считала пока). Мне не нравится, для интеграции очень плохо.
10:41
Вообще Хельсинки имхо - один из лучших городов. Здесь комфортно, безопасно, экологично. А хочется треша/угара - 3 часа на поезде до Питера.
10:54Также Финляндия - это один из немногих европейских вариантов переезда для разработчиков без высшего образования :)
10:57@jsunderhood в Хельсинки уныло, я весь город за 2 часа обошёл
Кому что) Я, живя в Питере, вообще не понимал, как можно жить не в Питере и не в центре. Сейчас живу почти в лесу.
@jsunderhood в Хельсинки уныло, я весь город за 2 часа обошёл
11:02
@jsunderhood @safinalexey человек меняется. Очередная гормональная перестройка где-то в районе 30 лет происходит. 👻
Ну вот она самая у меня и произошла)
@jsunderhood @safinalexey человек меняется. Очередная гормональная перестройка где-то в районе 30 лет происходит. 👻
11:06
Кстати, к нам только что присоединился @olegpodsechin. Давайте, зададим ему вопросы про js-коммьюнити в Финляндии. @toivonens
11:09Пишите вопросы, а мне пока что нужно немного поработать. Следующий выход на связь - часа через два.
11:10@jsunderhood задавайте!11:13
Авторы @ceounderhood @jsunderhood @sexsecrethood @cssunderhood, прорекламируйте @catunderhood пожалуйста! Ведь важны все аспекты жизни :-)
Код, секс и котики - наше всё!
Авторы @ceounderhood @jsunderhood @sexsecrethood @cssunderhood, прорекламируйте @catunderhood пожалуйста! Ведь важны все аспекты жизни :-)
11:20
@webholt @jsunderhood А linux выкак кличете - линакс?
Отличный пример, кстати)
@webholt @jsunderhood А linux выкак кличете - линакс?
11:32
@VintizerKh @jsunderhood И не нужно быть таким серьёзным) У нас вот babel бабелем зовут. И хочешь ты или нет, но привыкаешь)
Все, круг замкнулся. Человек, начавший тред, завершает тред :)
@VintizerKh @jsunderhood И не нужно быть таким серьёзным) У нас вот babel бабелем зовут. И хочешь ты или нет, но привыкаешь)
11:46
Друзья-фронтендеры, а подскажите чем можно строить такие графики? news.yandex.ru/quotes/2002.ht… С полосой снизу, изменением масштаба etc
Нужна помощь сообщества. Я никак не помогу - на дух не переношу визуализацию данных :)
Друзья-фронтендеры, а подскажите чем можно строить такие графики? news.yandex.ru/quotes/2002.ht… С полосой снизу, изменением масштаба etc
11:53
@jsunderhood highcharts.com/stock/demo/yax…
Ответ на вопрос из этого твита twitter.com/sergeybelove/s… // cc @sergeybelove
@jsunderhood highcharts.com/stock/demo/yax…
12:06
Пока обеденный перерыв, закрою тему Финляндии. Несколько советов, если вдруг решите сюда перебираться:
13:211. Если у вас нет вышки, но рекомендую собрать максимум документов, включая переведенную и нотариально-заверенную трудовую...
13:23а также рекомендации с прошлых мест работы (естественно также на английском языке)
13:24Ваша основная задача - это подтвердить свою квалификацию и опыт. И годится любой документ, который добавляет вам дополнительных очков.
13:25Филиал @abroadunderhood в @jsunderhood в этот понедельник.
Для разогрева)
Филиал @abroadunderhood в @jsunderhood в этот понедельник.
13:27
2. Второе, что лично меня удивило по приезду это то что никто мне не сообщил, что помимо налога 25-27% нужно еще платить пенсионный взнос...
13:31а это, в среднем, 200 евро + страховка квартиры + страховка на случай потери работы.
13:333. Ну и в-третьих если вы не живете в центре и ленитесь гонять на работу на велике, то будьте готовы также отваливать 100евро за проездной)
13:38@jsunderhood У меня есть в/о. Но я подавалась на визу, где оно не нужно, поэтому не показывала диплом.
На самом деле оно "не нужно, но желательно". в/о в любом случае играет роль при принятии решения.
@jsunderhood У меня есть в/о. Но я подавалась на визу, где оно не нужно, поэтому не показывала диплом.
13:43
@jsunderhood про это написано на сайте налоговой, если воспользоваться их калькулятором
Вот что значит полагаться на hr-агентство и не провести полный ресерч самому :)
@jsunderhood про это написано на сайте налоговой, если воспользоваться их калькулятором
13:45
@jsunderhood страховку насчет потери работы можно не делать же13:45
@jsunderhood Я не делала, тк не вижу в ней смысла. Мы тут по рабочему пермиту и не можем быть безработными (иногда можем, но это детали).13:48
Все, про Финляндию, наверное, закончили. Есть еще вопросы - пишите в личку. Но лучше спрашивайте у @freiksenet_ru и @toivonens.
13:51@jsunderhood @toivonens почему именно Финляндия? Как занесло? Дальше в Европу не?
Именно по причине отсутствия диплома) Сейчас-то я его наконец-то вымучил, поэтому может и свалю куда-нибудь еще.
@jsunderhood @toivonens почему именно Финляндия? Как занесло? Дальше в Европу не?
16:34
Рабочий день закончен, поэтому начинаем наш хит-парад фрустраций/девиаций разработчиков. И первым пунктом в этом списке - перфекционизм.
16:36Вначале расскажу о себе: я перфекционизмом страдаю сколько себя помню. Причем проявляется он довольно выборочно.
16:37Например, могу несколько дней просидеть в бардаке, но при этом книжки на полках обязательно должны быть выстроены по высоте)
16:38Однако в отношении кода, эта черта дает о себе знать ощутимей всего: все должно быть откомментировано, оттестировано + жесткий code style.
16:41@jsunderhood обожаю сортировать вещи, иногда задумавшись могу отсортировать салат, например.16:43
Мои code review довольно частно вызывают болезненный негатив) Коллеги жалуются, что я очень сильно придираюсь и не даю нормально работать.
16:44@jsunderhood запятая не там, переменную не так обозвал?
Да, все именно так и происходит (( Ничего не могу поделать: сразу вижу такие вещи и не могу пропустить такой PR.
@jsunderhood запятая не там, переменную не так обозвал?
16:47
@hellrider911 @jsunderhood человек-линтер? :D16:48
Вот да, из последнего: у нас ушел разработчик, который единолично отвечал за код API. Соответственно нам пришлось разбираться что там и как.
16:49Первое что я сделал, это прикрутил туда eslint c airbnb конфигом. Eslint нашел 17000 ошибок. Из них 7000 он пофиксил автоматически.
16:513000 ошибок я пофиксил с помощью разных codemode-ов, а остальное ручками-ручками :) сидел трое суток примерно.
16:52@jsunderhood то есть вместо того, что бы реально разобраться с кодом, вы первым делом фиксили 10к ошибок с пробелами и скобочками?16:56
Во-первых, не мы, а я) Это была исключительно личная инициатива. Во-вторых, в нерабочее время, так как понимаю, что это в общем моя проблема
16:58@operatino @jsunderhood правильно сделали, читабельность же повысили бесплатно
Да действительно. Прежде чем разбираться с чужим legacy-кодом нужно привести его к тому виду, к которому глаз привык
@operatino @jsunderhood правильно сделали, читабельность же повысили бесплатно
17:00
@jsunderhood Это же можно автоматизировать
К сожалению, не все ( Но то, что можно, у нас автоматизировано, иначе бы я совсем окочурился.
@jsunderhood Это же можно автоматизировать
17:03
@jsunderhood автофиксинг и кодмоды не поломали ничего кстати?
Как ни странно нет) у нас где-то около 500 тестов на API было написано - все прошли.
@jsunderhood автофиксинг и кодмоды не поломали ничего кстати?
17:05
В общем-то я и не утверждаю, что это все ok) Так или иначе это психическое отклонение. Которое может принести проекту и вред, и благо.
17:08Главный минус всего этого, это конечно сильно увеличивающиеся временные затраты. В целом я на задачу трачу в два раза больше времени.
17:14Главный же плюс: после меня практически не остается технического долга и сильно облегчается передача проекта другим разработчикам.
17:16@jsunderhood говорят, что это может быть признаком аутизма17:17
@jsunderhood Я такой же. Но я ж как лучше хочу — чтобы они тоже научились говно в коде видеть. @hellrider91117:19
Мешает вам это по жизни или помогает? Пытаетесь ли как-то с этим бороться или принимаете, как неотъемлемую часть своей личности?
17:23@jsunderhood @sapegin между вашим подходом и скоростью выбираю скорость. Но последнее время сомневаюсь в верности подхода)17:32
Поэтому мне лучше всего работается с моим полным антиподом. Он отвечает за скорость, я за качество. Хотя порой готовы поубивать друг-друга)
17:33@jsunderhood знать, в какую сторону «отклонена» своя личность — уже само по себе полезно :-) Зачем бороться? )17:39
@jsunderhood не на любую часть кода нужно тратить равное количество сил: есть API и публичные компоненты, а есть код на раз.
Перфекционист не мыслит такими категориями) Этот код "на раз" будет потом месяц ему укоризненно сниться.
@jsunderhood не на любую часть кода нужно тратить равное количество сил: есть API и публичные компоненты, а есть код на раз.
17:42
@jsunderhood перфекционизм не к месту ОЧЕНЬ вредит17:43
@jsunderhood есть здоровый перфекционизм, но это и рядом не стоит с тем, о чем вы пишете. :O
Все так :( Поэтому приходится учиться, как использовать эту особенность личности максимально эффективно.
@jsunderhood есть здоровый перфекционизм, но это и рядом не стоит с тем, о чем вы пишете. :O
17:46
@jsunderhood это признак болезни. Нездоровый человек не может эффективно работать.
Все мы больны в той или иной степени. Вон @andrey_sitnik вообще любит женщин связывать :)
@jsunderhood это признак болезни. Нездоровый человек не может эффективно работать.
17:50
@jsunderhood @andrey_sitnik но он же их развязывает потом. :)17:51
@jsunderhood выравниваю вещи по углам/осям/направляющим (хотя это ближе к @cssunderhood )
А я в свое время, когда еще верстал, менял значения отступов на более красивые. Т.е. если в макете 31px - делал 30)
@jsunderhood выравниваю вещи по углам/осям/направляющим (хотя это ближе к @cssunderhood )
17:55
@jsunderhood до сих пор так делаю :\
Приятно осознавать, что ты не единственных псих на этой планете)
@jsunderhood до сих пор так делаю :\
18:01
@jsunderhood нас уже трое18:02
@jsunderhood @dimaip что если у вас есть на решение задачи час, а с перфекционизмом там работы на два часа?
Ну на самом деле, у меня не на столько запущенный случай, что в случае чего, я не смогу наступить себе на горло.
@jsunderhood @dimaip что если у вас есть на решение задачи час, а с перфекционизмом там работы на два часа?
18:05
@id2473 @jsunderhood @NUM13RU у нас на проекте действует правило, что все отступы кратны 4, если нет веских технических причин к обратному
Отличное правило!
@id2473 @jsunderhood @NUM13RU у нас на проекте действует правило, что все отступы кратны 4, если нет веских технических причин к обратному
18:06
@jsunderhood @NUM13RU @cssunderhood у меня однажды заказчик отказывался принимать макет, тк отступы отличались на 1-2px 👿
Да, нездоровый перфекционизм встречается не только у разработчиков, но и у заказчиков)
@jsunderhood @NUM13RU @cssunderhood у меня однажды заказчик отказывался принимать макет, тк отступы отличались на 1-2px 👿
18:15
В общем, нет однозначного ответа на вопрос, стоит ли как-то с этим бороться или, наоборот, принять, как часть себя.
18:19Это такая болячка, которая хоть и доставляет определенные неудобства, но без неё ведь это будешь уже не ты, а кто-то другой.
18:21Помните Чендлера, который удалил свой третий сосок, а потом сокрушался, что это был его источник силы?) Вот с перфекционизмом та же тема :)
18:33@jsunderhood @sapegin я привожу к единому стилю только те файлы, которые затрагивает фича — так потихоньку весь проект перепишется.
Да, это самый правильный подход. Если только все остальные члены команды делают то же самое.
@jsunderhood @sapegin я привожу к единому стилю только те файлы, которые затрагивает фича — так потихоньку весь проект перепишется.
18:34
@jsunderhood @NUM13RU @cssunderhood а мне 31 больше нравится, и как быть? Что красивее 30 или 31?;)
Может это у вас какой-то другой вид отклонения? Антиперфекционизм? :)
@jsunderhood @NUM13RU @cssunderhood а мне 31 больше нравится, и как быть? Что красивее 30 или 31?;)
18:36
Думал, я один такой поехавший.18:42А я в свое время, когда еще верстал, менял значения отступов на более красивые. Т.е. если в макете 31px - делал 30) twitter.com/NUM13RU/status…
@jsunderhood Всегда так делала :-)18:52
Пора потихонечку заканчивать этот насыщенный день, так как вечерний кинопросмотр - это святое)
18:54Сейчас еще отвечу на некоторые вопросы, на которые обещал ответить, посоветую хорошего кина вам в ленту и распрощаюсь до завтра.
18:56@jsunderhood привет. У меня 2 вопроса: 1. С какого уровня скиллов(опыта) переходишь в класс "разработчиков нарасхват", о котором ты упомянул
Ну на самом деле в некоторых конторах и джуниоры нарасхват. Им проще самим тебя обучить, чем брать человека с опытом
@jsunderhood привет. У меня 2 вопроса: 1. С какого уровня скиллов(опыта) переходишь в класс "разработчиков нарасхват", о котором ты упомянул
19:00
@webholt @jsunderhood да тебе все лишь бы паяльник кому-нибудь куда-нибудь пристроить! >:O
Для таких как @webholt есть @sexsecrethood :)
@webholt @jsunderhood да тебе все лишь бы паяльник кому-нибудь куда-нибудь пристроить! >:O
19:02
@alexpipinov @jsunderhood залезу на час в твиттере, и вместо перфекционирования буду прокрастенировать :-)
Об этом мы безусловно тоже поговорим на этой неделе)
@alexpipinov @jsunderhood залезу на час в твиттере, и вместо перфекционирования буду прокрастенировать :-)
19:03
@jsunderhood Второй давний вопрос: сколько по времени займет развитие джуниора фронтенда до нормально профи? Я слышал 1.5 года. Ваше мнение)
Мы никогда не перестаем учится. Я каждый новый год считаю себя прошлогоднего джуниором.
@jsunderhood Второй давний вопрос: сколько по времени займет развитие джуниора фронтенда до нормально профи? Я слышал 1.5 года. Ваше мнение)
19:06
@jsunderhood Я в каждый момент времени себя текущего считаю джуниором.
Да, точно, скорее так) И это, кстати, тоже одна из фрустраций, о которой мы поговорим на этой неделе.
@jsunderhood Я в каждый момент времени себя текущего считаю джуниором.
19:14
На этой неделе, в конце каждого дня буду советовать вам два фильма, релевантные теме обсуждения.
19:15Один из них будет более-менее известным, другой - из тех, что вы вряд ли когда-либо посмотрите :)
19:15Итак, первый фильм на тему перфекционизма, который вы все уже, наверняка, посмотрели (а если нет, то пора бы) это kinopoisk.ru/film/725190/
19:18Он конечно страшно манипулятивный, и дергает за очевидные ниточки, но пока смотришь, хочешь, чтобы это никогда не заканчивалось)
19:20Второй фильм это представитель испанской новой волны, которая началась в Испании после смерти Франко kinopoisk.ru/film/16985/.
19:29Кино, конечно, не самое простое для восприятия. Но также по-своему раскрывает тему нездорового перфекционизма.
19:35Перед просмотром почитайте немного про "мовиду мадриленью" - так называется это временной период культурной революции в Испании.
19:36@PMarinchenko @jsunderhood спасибо) А тебе не пишут из-за границы? Сделай профиль на linkedin и заполни. Устанешь отбиваться.
вот кстати +100500
@PMarinchenko @jsunderhood спасибо) А тебе не пишут из-за границы? Сделай профиль на linkedin и заполни. Устанешь отбиваться.
19:38
На этом на сегодня все. Завтра будет более технический день и много, оооочень много редакса/редукса )
19:41Главный мой челендж на завтра - это как посоветовать два фильма на тему редакса O_o
19:43@jsunderhood Один популярный, другой, который многие не захотят смотреть? Зелёный слоник и 2g1c.
Зеленый слоник - великое кино!) А воспоминания о втором сейчас вот вспыли как... ну вот как оно самое. НУ ЗАЧЕМ????
@jsunderhood Один популярный, другой, который многие не захотят смотреть? Зелёный слоник и 2g1c.
19:52
. @jsunderhood Есть мнение, что к моменту когда ты закончишь читать этот твит, это будет кто-то другой21:08Это такая болячка, которая хоть и доставляет определенные неудобства, но без неё ведь это будешь уже не ты, а кто-то другой.
. @jsunderhood У меня на проекте прекомит хук, который проверяет файлы комита линтерами
Да, у нас тоже. Но это не панацея. Есть вещи, которые не проверить линтерами.
. @jsunderhood У меня на проекте прекомит хук, который проверяет файлы комита линтерами
21:10
@jsunderhood @toivonens вроде неплохой подкаст на тему MobX frontflip.me/2016/06/15/why…22:13
# Вторник 96 твитов
Huomenta, дамы и господа) Сегодня много говорим про redux, поэтому для начала опрос про ваши с ним отношения
5:54Для тех, кто вообще не в теме - задание: пока я еду на работу, посмотрите Данины курсы egghead.io/courses/gettin… egghead.io/courses/buildi…
6:17Итак, надеюсь, курс все успели пройти. Так что начинаем. И первое, о чем хотелось бы поговорить, это взаимоотношения экшенов и редьюсеров.
7:48Есть два разных подхода: один канонический, пропагандируемый @dan_abramov: отношение между экшенами и редюсерами - many-to-many.
7:51Т.е. редюсер может обрабатывать много различных экшенов, даже если логически эти экшены в большей степени отвечают за другую часть стейта
7:53Приведу пример: у нас при логине вместе с данными юзера (email, token..) так же приходит список сохраненных поисковых запросов этого юзера.
7:55Hyperterm: coming soon to a time-sharing operating system near you. pic.twitter.com/TkMXJXrRuc7:55![]()
Это поисковые запросы должны хранится в отдельном куске стейта - queries, а данные юзера соответственно - в user или auth.
7:56При каноническом подходе, мы диспатчим один экшен USER_LOGIN_SUCCESS, который обрабатывается редьюсерами user и queries.
7:57@jsunderhood экшены не отвечают за часть стейта, а сообщают, что же произошло. Как на это реагировать - не их дело.
Естественно, но так или иначе они привязаны к определенным частям бизнес-логики приложения
@jsunderhood экшены не отвечают за часть стейта, а сообщают, что же произошло. Как на это реагировать - не их дело.
7:59
Тем не менее, нам этот подход оказался не удобен. Потому что мы хотим понимать, что конкретно происходит в приложении.
8:01Т.е. мы хотим видеть в логах, что не только юзер залогинился, но и произошло еще много сопутствующих действий.
8:02Поэтому мы диспатчим экшены группами и каждый экшен обрабатывается своим редьюсером.
8:04Для группового диспатча мы используем пакет github.com/tshelburne/red…. Можно диспатчить и по одному, но это вызывает ненужные перерисовки.
8:06У нас переопределен dispatch, поэтому мы можем делать так:
const actions = [action1, action2, action3];
dispatch(...actions);
По началу была проблема с логированием. redux-logger показывал вот такое pic.twitter.com/3C1f6FCIaY
payload из массива с тремя элементами это как раз та самая группа из трех экшенов, которые мы хотим продиспатчить.
8:16Но со временем github.com/evgenyrodionov… стал очень гибким. Поэтому там в доках внизу рецепт от меня, как подружить его с redux-batch-actions.
8:19После этих нехитрых манипуляций лог выглядит следующим образом pic.twitter.com/c0CcazDXg1
Как видите, сразу понятно, что вообще происходит, в отличие от подхода с одним экшеном, когда большая часть логики остается за кадром.
8:23Расскажите теперь о себе? Какие у ваших редюсеров и экшенов отношения? Хочется втянуть в дискуссию @dan_abramov
8:24Я пока ненадолго отвалю - нужно немного поработать)
8:25Еще немного по поводу группового диспатча: альтернативный способ избавится от лишних перерисовок это github.com/tappleby/redux…
9:08Идея проста: мы оборачиваем подписку на стор в debounce: подписчики будут оповещены только один раз для нескольких экшенов, вызваных подряд.
9:17@jsunderhood а мне казалось, что connect из react-redux сам по себе достаточно умный и оптимизированный
Нет, connect подписывает компонент на стор. На каждое изменение стора будет вызван connect.
@jsunderhood а мне казалось, что connect из react-redux сам по себе достаточно умный и оптимизированный
9:18
Какой способ лучше не понятно: дебаунсить подписку или диспатчить группу. Нам нравится второй, потому что появляется доп. логика в логах.
9:21github.com/reactjs/redux/… вот длинная дискуссия в redux репозитории по поводу нативной имплементации группового диспатча.
9:22@jsunderhood а вот этот код тогда что делает? github.com/reactjs/react-…
ммм... проверяет изменились ли пропсы. это никак не связано с тем, о чем я говорю. сейчас объясню подробней.
@jsunderhood а вот этот код тогда что делает? github.com/reactjs/react-…
9:24
Еще раз: представьте, что у вас 10 компонентов обернутых в connect. И вы диспатчите 10 экшенов подряд. connect будет вызван 100 раз.
9:27Потому что каждый connect для каждого экшена должен проверить изменились ли пропсы и нужно ли перерендрить дочерний компонент.
9:28Ok, приведу самый простой пример. у вас есть такой connect:
connect({prop1, prop2, prop3} => ({prop1, prop2, prop3}))(Component)
И есть три экшена: первый меняет prop1, второй - prop2, третий - prop3
9:35Если вызвать эти экшены друг за другом, то компонент будет перерендрен 3 раз, а если задиспатчить группой, то только один раз.
9:36@jsunderhood мы обернули подписки в requestAnimationFrame
Да, это отличное решение. Но нам группировка больше нравится с визуальной точки зрения.
@jsunderhood мы обернули подписки в requestAnimationFrame
9:37
@jsunderhood а разве setState не асинхронный? Значит, он забатчит несколько вызовов подряд, а потом обновит DOM
setState асинхронный и обновление дома батчится это правда. но ведь куча другой работы перед этим проделывается.
@jsunderhood а разве setState не асинхронный? Значит, он забатчит несколько вызовов подряд, а потом обновит DOM
9:45
@jsunderhood расскажи мне плиз, вы пробовали делать nested connectors?
Когда в иерархии не только родитель подписывается на стор?
Да, у нас очень разветвленное дерево коннектов. В том числе в списках (один айтем - один коннект).
@jsunderhood расскажи мне плиз, вы пробовали делать nested connectors?
9:47
Когда в иерархии не только родитель подписывается на стор?
@jsunderhood в общем, хочу увидеть пруф, что эти обертки вокруг subscribe реально помогают. Сейчас в это верится с трудом
Помогают точно, вопрос в том насколько велика эта разница в перфомансе. Может сделаешь бенчмарк?
@jsunderhood в общем, хочу увидеть пруф, что эти обертки вокруг subscribe реально помогают. Сейчас в это верится с трудом
9:53
@jsunderhood как вы боролись с тем, что чайлд видит старые данные из стора? Т.е. порядок подписок не гарантируется?
Ни разу с таким не сталкивались, как ни странно. Есть пример, демонстрирующий проблему?
@jsunderhood как вы боролись с тем, что чайлд видит старые данные из стора? Т.е. порядок подписок не гарантируется?
10:00
@jsunderhood пожалуйста: requirebin.com/?gist=01de742a… Я только не придумал как измерять скорость, кроме субъективного "не лагает"
ммм... а зачем измерять время, которое ушло на диспатч 10-ти экшенов? Тут что-то другое мерять нужно.
@jsunderhood пожалуйста: requirebin.com/?gist=01de742a… Я только не придумал как измерять скорость, кроме субъективного "не лагает"
10:32
@jsunderhood да, к примеру так. Такой сценарий: родитель передает чайлду параметр, по которому чайлд делает "запрос" в стор
Но ведь они потом все равно синхронизируются, когда выполняется лисенер родителя.
@jsunderhood да, к примеру так. Такой сценарий: родитель передает чайлду параметр, по которому чайлд делает "запрос" в стор
10:49
@jsunderhood в том-то и дело, что нет :\
но ведь новое значение передается в ownProps ребенка, что должно спровоцировать у него новый вызов коннекта, не?
@jsunderhood в том-то и дело, что нет :\
11:29
@mr_mig_by @jsunderhood Это решается ReactDOM.unstable_batchedUpdates. Пример есть в тестах connect.11:36
@jsunderhood редюсеры максимально примитивные, разве что не используем богомерзкие символы, все же охота сериализовать экшоны
О_о сериализовывать экшены это как?
@jsunderhood редюсеры максимально примитивные, разве что не используем богомерзкие символы, все же охота сериализовать экшоны
12:10
@jsunderhood перехватываем на уровне стора батчи, напускаем на них существующий редюсер, возвращаем стейт.
Весь батчинг в 3 строчки
Да, redux-batch-actions так и работает
@jsunderhood перехватываем на уровне стора батчи, напускаем на них существующий редюсер, возвращаем стейт.
12:10
Весь батчинг в 3 строчки
@jsunderhood например пихать их куда-нибудь на сервер в виде безопасного JSON.
ммм... экшены? может все-таки стейт?
@jsunderhood например пихать их куда-нибудь на сервер в виде безопасного JSON.
12:13
@jsunderhood Не, стейт хранить это харам. Храним только экшоны (например как в дев-тулс сделано), с временным оффсетом. time travel
Я не понимаю ((( зачем где-то хранить экшены? Типа как лог?
@jsunderhood Не, стейт хранить это харам. Храним только экшоны (например как в дев-тулс сделано), с временным оффсетом. time travel
12:18
Hello fellow JS developers! We're starting a shared Twitter account initiative for local community members to get to know each other better.14:54
The original idea of shared Twitter accounts initially was brought up by a Russian speaking JS community @jsunderhood.14:54
Рабочий день закончен и я снова с вами. День был не простой, поэтому во второй половине дня был не очень активен. Сейчас реабилитируюсь.
16:34Продолжаем говорить про redux. Хочу обсудить еще один паттерн, который мы активно используем в редаксе - это dependency injection.
16:36Да, да, тот самый dependency injection, который ввел в моду angular. Правда с меньшей долей магии, но с не меньшей пользой для дела.
16:37dependency injection используют action creators, когда им нужно получить доступ к каким-то дополнительным функциям/объектам.
16:40Например, после логина пользователя нужно отправить запрос к google analytics. объект analytics внедряется в AC и там уже используется.
16:43@jsunderhood Во фронтэнде. Потому что вдруг узнали, что так вообще можно. Для прочих ничего нового не появилось)
Это да) Паттерн безусловно не нов.
@jsunderhood Во фронтэнде. Потому что вдруг узнали, что так вообще можно. Для прочих ничего нового не появилось)
16:45
Теперь объясню, как все это работает и, главное, зачем это нужно.
16:45Если вы используете redux-thunk, то, помимо возможности диспатчить ассинхронные экшены, вы нахаляву получаете механизм для DI.
16:49@jsunderhood без примера кода не очень понятно. Это про redux-thunk?
Сейчас все будет)
@jsunderhood без примера кода не очень понятно. Это про redux-thunk?
16:49
С недавнего времени redux-thunk позволяет передать в action creator дополнительный аргумент, помимо dispatch и getState.
16:51Используется это следующим образом: gist.github.com/smashercosmo/7…
16:52Если нужно передать несколько зависимостей, но всегда можно использовать объект gist.github.com/smashercosmo/f…
16:55Эти доп. объекты будут доступны в любом AC. Если какому-то AC это не нужно, то аргумент (или отдельные свойства) просто опускаются.
16:57Зачем это нужно? Ведь можно просто сделать require('./api'), require('./analytics') и точно также использовать внутри AC.
16:59Да, можно. До тех пор пока не встанет вопрос о тестировании ваших action creators.
17:00Понятно, что в тестах вы не хотите делать запросы к реальному API или как-то дергать google analytics и другие сервисы.
17:01c dependency injection все становится очень просто gist.github.com/smashercosmo/6…
17:05@jsunderhood круто, когда мы начинали проект, redux-thunk этого еще не умел, пришлось написать свою миддлвару из 6 строк кода.
Мы, на самом деле тоже не используем для этого redux-thunk. Чуть позже объясню почему.
@jsunderhood круто, когда мы начинали проект, redux-thunk этого еще не умел, пришлось написать свою миддлвару из 6 строк кода.
17:06
Если вы не практикуете такой подход, то для переопределения зависимостей в тестах придется использовать например github.com/jhnns/rewire
17:10@jsunderhood ты прям пересказываешь мой ход мыслей примерно месячной давности) Сам делал кастомный thunk с DI и контролем завершенности.17:16
@jsunderhood еще плюс DI в том, что на сервере можно подсунуть другую имплементацию с тем же внешним API.17:31
Сорри, отвлекся. Продолжаем. Первая проблема, которая возникает такой реализации DI - это динамические зависимости.
17:36Т.е. зависимости, которые на момент инициализации стора еще сами не загружены и не проинициализированы. Например, те же google analytics.
17:37В этом случае самым простым решением будет передать в DI функцию gist.github.com/smashercosmo/2…
17:41Но, согласитесь, выглядит это не очень красиво и требует дополнительных знаний о типе зависимости.
17:42Поэтому лучше написать свой кастомный middleware, который будет сам все это разруливать gist.github.com/smashercosmo/d…
17:48Изначально, этот подход был реализован в github.com/este/este, но потом они почему-то это выпилили ((
17:50@jsunderhood так и с require все можно тестировать с rewrite и sinon
Что такое rewrite? Может rewire?
@jsunderhood так и с require все можно тестировать с rewrite и sinon
18:12
@jsunderhood да rewire, и никакие Dep injection кроме require не нужны
Это да. Но как только в дело вступает babel, начинаются проблемы github.com/speedskater/ba…
@jsunderhood да rewire, и никакие Dep injection кроме require не нужны
18:18
К тому же подход DI он какой-то более straightforward и с меньшим количеством магии. Просто передаешь в функцию все, что тебе нужно.
18:20@jsunderhood Встречал подобное, остановился в итоге на proxyquire, что все решило. Dep injection выглядит как over engineering.18:22
Но вообще, конечно, оба подхода имеют право на жизнь. Каждый выбирает то, с чем ему комфортней иметь дело.
18:22Ладно, я начинаю потихонечку с вами прощаться. Поэтому сейчас, как и было обещано, будет список фильмов про redux :)
18:43redux нас учит, что мутировать стейт - это плохо, поэтому и фильмы будут про то, что от мутаций в общем-то одни проблемы)
18:46@jsunderhood муха и муха 2?
да, очень хотел включить в список, как минимум первую часть) но потом все же решил, что это как-то слишком очевидно.
@jsunderhood муха и муха 2?
18:48
Тема благодатная, поэтому вместо обещаных двух, будет четыре)
18:49@jsunderhood «Человеческая многоножка» идеально подходит для представления редьюсеров.
Аххахахххах) Но мне кажется это скорее больше про Elm и Cerebral.
@jsunderhood «Человеческая многоножка» идеально подходит для представления редьюсеров.
18:50
@jsunderhood Штальц сегодня, кстати, проводил аналогию с реальным миром Вот бы ему этот фильм показать.18:54Can you see Cycle.js in that? Pucks are pure functions, side effects on the edges, and the board is dataflow!
twitter.com/verge/status/7…
Итак первая в нашем хит-параде: роковая Наташа Хенстридж в мужененавистнической "Особи" kinopoisk.ru/film/4769/
18:56Под номером два шедевр от Гильермо дель Торро, когда он ещё не скатился во всякую попсню) kinopoisk.ru/film/4923/
18:58Оба фильма сняты в 90-ые - золотые годы фантастики. И сделаны на порядок более захватывающе и изобретательней, чем все современные поделки.
19:00Тепер то, что наверняка прошло мимо ваших радаров.
19:05kinopoisk.ru/film/817556/ - романтический инди-ужастик. Не совсем про мутантов, но мутации присутствуют)
19:05И завершении - Тод Браунинг со своей в большей степени грустной, нежели страшной историей kinopoisk.ru/film/8430/
19:13На этом прощаюсь. Завтра опять будем говорить за жизнь. Тема: прокрастинация и информационная наркомания)
19:15@jsunderhood хоть в какой-то теме почувствую себя экспертом )19:18
Кстати, воспользуюсь положением и попрошу помощи сообщества: посоветуйте, как лучше всего искать утечки памяти в ноде?
20:27А то у нас после последней выливки за сутки потребление памяти вырастает до 30gb. И вообще не врубаемся в чем дело (
20:28# Среда 77 твитов
Давайте потихоньку начинать, хотя день сегодня чрезвычайно напряженный. Поэтому основная активность будет ближе к вечеру.
10:04Сегодня говорим о прокрастинации и информационной наркомании. Специально объединил, так как для меня первое - это прямое следствие второго.
10:06Один из моих главных психозов - это боязнь пропустить что-нибудь важное, нужное, интересное: статью, доклад, твит, гифку и т. д.
10:08Мне кажется, что если я что-то не прочитаю или не посмотрю, то больше никогда в жизни эта упущенная информация до меня не дойдет)
10:10Поэтому я непрерывно мониторю и твиттер, и rss и даже ленту на гитхабе) И на это всё, конечно, уходит чудовищное количество времени.
10:11@jsunderhood Да ну, ссылки много раз повторяются. Иногда так с энного раза открываешь то, что игнорировал раньше, и даже интересно.
Я тоже это себе повторяю. А потом думаю, а вдруг какая-то одна (самая важная!) ссылка больше нигде не всплывет?)
@jsunderhood Да ну, ссылки много раз повторяются. Иногда так с энного раза открываешь то, что игнорировал раньше, и даже интересно.
10:14
@jsunderhood я использую OneNote. Там вся жизнь ) если надо, я могу снова стать профи в Java, потому что там все сохранено (багфиксы и тд)
Проблема не в том, что хранить негде, а в том, что пропустить страшно)
@jsunderhood я использую OneNote. Там вся жизнь ) если надо, я могу снова стать профи в Java, потому что там все сохранено (багфиксы и тд)
10:16
Учитывая как быстро развивается та среда, где мы все работаем, кажется что если не мониторить все это непрерывно - будешь все время в хвосте
10:21Тренды, подходы, методологии, новые фреймворки, новые библиотеки, новые возможности браузеров... и хочется быть в курсе всего-всего-всего.
10:23@jsunderhood доктор прокрастинатолог прописал мне open space офис от таких недугов.10:24
@jsunderhood @PMarinchenko страх надо выбивать. Эффективно: уничтожить все свои закладки. Перед отпуском. А после отпуска снова… копить. 👻10:24
@jsunderhood кстати, вот статья о том, как веб-сервисы способствуют развитию таких бзиков намеренно ради денег: habr.ru/post/301786/10:24
@jsunderhood Жадность — это плохо. В том числе жадность до информации.10:24
youtube.com/watch?v=4f6Wmy…
Никого не хочу обидеть, но все андерхуды безусловно вносят свою лепту в этот информационный марафон))
10:29@AntonyKapustin @jsunderhood И как это помогает? Сижу в опенспейсе, почитываю твиттер и прочие интернеты. Иногда даже видео смотрю.10:30
@jsunderhood у меня все просто. Есть браузер для соц сетей, браузер для деловой переписки и чатов, и браузер для верстки и тестирования:)
А что мешает в браузере для верстки открыть вкладку твиттера?
@jsunderhood у меня все просто. Есть браузер для соц сетей, браузер для деловой переписки и чатов, и браузер для верстки и тестирования:)
10:34
Хочу также уточнить, что я прекрасно понимаю, что это очередное психическое отклонение, впрочем довольно распространенное.
10:46Поэтому логические доводы вроде "ссылка ещё всплывет" или "ничего по-настоящему нового и не придумали" в данном случае не очень работают.
10:48@jsunderhood можно сесть на проект с легаси кодом. И забыть про мониторинг. 👻10:51
Кстати да) В моем случае действительно побеждает перфекционизм. Я забываю обо всем, кроме того, что хочу сделать красоту из этой страхоты.
10:52@jsunderhood учи фундаментальные вещи, а не поверхностный хайп, и ты увидишь что, наоборот, очень мало чего-то стоящего нового.10:53
Поэтому меня, конечно, восхищают и пугают такие люди, как sokra)
10:56Sokra несколько лет каждый день в одиночку сидит и фигачит свой webpack с невероятной продуктивностью. Почему? Он не в твиттере :)
10:57@8gene @jsunderhood вот щас очень интересно. Расскажите о фундаментальных вещах во фронтенде.11:10
@twenty @jsunderhood например, FRP. Все эти флуксы - это просто разные топологии frp-network-a, причем очень примитивные и деградированные.11:13
@twenty @jsunderhood правильно, идея фундаментальная, реализации несущественны. Анализируешь задачу, выбираешь реализацию, или пишешь свою11:19
@8gene @jsunderhood херасе несущественны. Идея понимается несоизмеримо быстрее, чем конкретная реализация.11:19
O_o почему сексистские??? Мы ж сегодня вроде про прокрастинацию и информационную наркоманию. twitter.com/chorna_kiwka/s…
11:58@jsunderhood А не наоборот? Информационнпя наркомания — эдакая зона комфорта. О новом читать интересно, а текущая работа далеко не всегда.12:04
я имел в виду, что информационная наркомания это как раз одна из причин прокрастинации: сидишь и колешь себе дозу за дозой, твит за твитом)
12:04@jsunderhood сексизм сегодня у нас, но всё похоже. Раньше в css писали expressions, теперь css пишут в js... Ну вы понимаете12:05
Мысль о том, чтобы устроить себе цифровой шаббат, как в свое время @andrey_sitnik сделал, вызывает у меня глубочайший неподдельный ужас.
12:09@jsunderhood я, кстати, устроил шаббат, чтобы доказать, что отказ от технологий — плохо и оно идёт от лени12:12
habrahabr.ru/post/232789/
@jsunderhood даже если себя как следует занять чем-то?
@jsunderhood ого, я то думал это просто метафора)
Нет) я действительно себя очень некомфортно чувствую, если на какое-то время оказываюсь вне информационного потока.
@jsunderhood ого, я то думал это просто метафора)
12:22
@jsunderhood переехал в новую квартиру, месяц был без интернета, пока подключали. Как результат - начал высыпаться, все успевать.12:22
@jsunderhood я чувствую лёгкие симптомы паники, если понимаю, что забыл взять фильм/код/книгу в самолёт. Хотя после Шаббата стало легче.12:23
@jsunderhood, кажется попахивает зависимостью. Это уже не оч хорошо.
Не попахивает, а откровенно смердит)
@jsunderhood, кажется попахивает зависимостью. Это уже не оч хорошо.
12:27
Но опять же, как и в случае с перфекционизмом, кажется, что, во-первых, у подобного отклонения есть свои плюсы: прежде всего знания конечно
12:32А во-вторых, опять же думаешь, что вот убери эту твою особенность, излечись, стань от всего этого независим и будет уже другой человек
12:36Но совершенно не понятно, понравится ли тебе этот другой? Больше ли ты приобретешь от такого изменения, чем потеряешь?
12:36у Оливера Сакса в его самой известной книге есть история о человеке, который стал лечится от синдрома Туррета
12:42в итоге после медикаментозной терапии у него в значительной степени (возможно даже полностью) уменьшились частота и сила приступов
12:44Тем не менее он с грустью признал, что после всего этого стал видеть мир и чувствовать его совершенно по-другому. Менее ярко и эмоционально.
12:46@jsunderhood, всё правильно. Наши зависимости, фобии, вирусы, паразиты — это и есть мы: esquire.ru/david-barash13:10
JavaScript for cats jsforcats.com
Специально для @catunderhood :)
JavaScript for cats jsforcats.com
15:28
@jsunderhood Артемий Лебедев как раз как будто для тебя написал:19:02
tema.livejournal.com/2277618.html
Так, в конце дня хотелось бы как раз поговорить о всяких техниках, которые помогают бороться с прокрастинацией и информационной зависимостью
19:40Ответ на вопрос, какими пользуюсь лично я, очень простой: никакими.
19:40@jsunderhood ...но мне лень.19:41
Более того, все GTD приемы, статьи, советы, наоборот, вызывают у меня какую-то иррациональную неприязнь.
19:43А когда в очередной статье я вижу, что-то вроде "возьмите лист бумаги и разделите его на 4 части" у меня начинается аллергическая реакция.
19:44Я пробовал заводить календари, всякие туду-листы, перепробовал кучу приложений - со мной почему-то ничего не работает.
19:45Единственное, что дало хотя бы какой-то эффект - это pomodoro. Хотя и его не надолго хватило.
19:46@jsunderhood а дедлайны получается соблюдать?
Да, но в жертву идет личное время (
@jsunderhood а дедлайны получается соблюдать?
19:50
@jsunderhood лучше всего помогают звездюли.19:52
@jsunderhood -> тогда, возможно, причина неприживаемости у вас todo-инструментов в использовании их для работы. Попробуйте их для личного.19:55
@jsunderhood как с курением - бросить не курить, а покупать. Не бороться с соцсетями, а просто не набирать в адресной строке урлы. Помогает19:55
@jsunderhood типа TODO list оформленный в виде рпг. Забиваешь себе квесты, уровень их сложности
Выполняешь, получаешь опыт и денежки.
Не, такое точно не сработает. Pomodoro выстрелил именно за счет своей просты.
@jsunderhood типа TODO list оформленный в виде рпг. Забиваешь себе квесты, уровень их сложности
20:04
Выполняешь, получаешь опыт и денежки.
*простоты)
20:04@jsunderhood Хорошая статься про прокрастинацию habrahabr.ru/post/298192/ мне помогла.20:19
@jsunderhood кстати, помогает режим дня +GTD (в Evernote). Вас коробит, а у меня бзик на системы, всегда их делаю pic.twitter.com/N8PVfbZpjd
Это круто. Но я так никогда не смогу)
@jsunderhood кстати, помогает режим дня +GTD (в Evernote). Вас коробит, а у меня бзик на системы, всегда их делаю pic.twitter.com/N8PVfbZpjd
20:24
@artvolkov @jsunderhood в рабочем браузере разлогинен во всех соц.сетях. Позволяет избежать внезапных порывов что-то посмотреть. Логин. лень20:50
@jsunderhood то сразу вспомнил, что за задачи есть и начал над ними работать. А так, сидишь себе, а там дел вагон, что и не вспомнишь.21:36
@jsunderhood к слову о борьбе. Единственное, что помогает это иметь список дел на виду. Чтобы когда отвлекся от тви, и глянул на него...21:36
Так, пора бы уже отходить ко сну. Силы остались только на то, чтобы согласно традиции этой недели, отправить вам пару фильмов в ленту.
22:05Сегодня говорили о прокрастинации, поэтому первое кино про главного прокрастинатора всех времен и народов kinopoisk.ru/film/555/ ))
22:07Так же обсуждали информационную зависимость. Конкретно про нее фильмов не снимают, к сожалению, ну или они еще не попали в мою фильмотеку.
22:11Поэтому будет кино про зависимость другую, но не менее неприятную kinopoisk.ru/film/21254/
22:13@jsunderhood техника проста. Автоматическое создание списка урлов на основе сканирование своих подписок. Автоматом разбивка его по тегам.
Хочу ретвитнуть весь этот тред. Это действительно очень здравая мысль. Может выйти хороший pet project.
@jsunderhood техника проста. Автоматическое создание списка урлов на основе сканирование своих подписок. Автоматом разбивка его по тегам.
22:14
@jsunderhood сравнение как урлов так и содержимого чтобы не создавать дубли.22:15
@jsunderhood создание ежедневного отчёта заданной длительностью (5 минут или 30 минут)22:16
@jsunderhood под длительностью подразумевается примерное время чтения этого отчёта.22:16
@jsunderhood короче - у вас должен быть смарт секретарь. Ему всё и делегируйте.22:16
@jsunderhood создание недельного отчёта заданной длительностью. А также местного, квартального и годового.22:16
@jsunderhood в настоящее время смарт-секретарь никем не реализован. Это то и печально. 😳 а так идея отличная. Имхо. 👍🏻22:16
# Четверг 37 твитов
Всем привет. Сегодня начинаем поздно, так как уволился API разработчик и двум несчастным фронтам нужно срочно постигать тонкости rethinkdb)
13:24Кстати (пользуюсь служебным положением): нам в Финляндию нужен API разработчик: nodejs 6, rethinkdb, solr. Пишите, если интересно.
13:26Сегодня у нас технический день. Продолжаем говорить про redux и его друзей.
13:29И первое тема на сегодня это - собственно работа со стейтом приложения: от его организации до способов манипуляции.
13:36У меня например совершенно перевернулся мир когда у Дэна в уроке увидел, что можно combineReducers использовать не только для root-редьюсера
13:41Казалось бы невероятно очевидная вещь, но которая почему-то за пол года использования redux никому не пришла в голову :)
13:42Вон он тот самый урок egghead.io/lessons/javasc… - после его просмотра наша работа со стейтом упростилась в два раза.
13:50На всякий случай объясню в чем суть: очевидно, что чем более стейт плоский, тем легче с ним работать, т.е. желательно убрать всю вложенность
13:53Т.е. изменить единицу на двойку гораздо проще в структуре вида {a: 1}, чем в структуре вида {a: {b: {c: [{d: 1}]}}}
13:56@jsunderhood теряется логичность (обычно данные имеют иерархичную природу) и нужно придумывать нелепые имена ключам
В redux нам не нужно придумывать имена ключам. Нам достаточно держать плоскими лишь части стейта. Сейчас объясню.
@jsunderhood теряется логичность (обычно данные имеют иерархичную природу) и нужно придумывать нелепые имена ключам
14:04
За каждую часть нашего стейта отвечает определенный редьюсер. Т.е. стейт должен быть плоским на уровне приложения, а на уровне редьюсера.
14:07Вот пример стейта не плоского - gist.github.com/anonymous/0496… каждый редьюсер вынужден работать с вложенной структурой.
14:14gist.github.com/anonymous/7c8f… - вот пример стейта плоского. на уровне приложения структура та же. Но каждый редьюсер работает с простым объектом.
14:24@jsunderhood посмотрите на ECS паттерн, пораскиньте мозгами, и поймёте, на сколько это всё круто и удобно :)
Первый раз вижу подобную аббревиатуру) Расскажешь поподробней что такое с чем едят?
@jsunderhood посмотрите на ECS паттерн, пораскиньте мозгами, и поймёте, на сколько это всё круто и удобно :)
14:25
*не на уровне приложения
14:27Второй инструмент, который помогает уплощать стейт это небезызвестный (хотя может кому-то и неизвестный) github.com/paularmstrong/…
14:38@jsunderhood Entity-Component-System: en.wikipedia.org/wiki/Entity_co…
Всю свою карьеру на это смотрю и облизываюсь.
А можно простыми словами для людей без master degree in computer science?)
@jsunderhood Entity-Component-System: en.wikipedia.org/wiki/Entity_co…
14:39
Всю свою карьеру на это смотрю и облизываюсь.
@jsunderhood там все просто, если знать нужные слова :)
Что такое Data driven design знаете?
Это что-то все из области гейм-дева, коим я никогда не занимался ((
@jsunderhood там все просто, если знать нужные слова :)
14:41
Что такое Data driven design знаете?
@jsunderhood суть ECS: одна огромная таблица (id, comp1, ..., compN) + всё есть entity = (id + components) + на каждый чих функция14:42
Так вот, про normalizr - библиотека для выстраивания вложенных сущностей на одном уровне. Связь между сущностями сохраняется по id.
14:48Мы сами пока что в проект не внедрили (хотя ручки чешутся) - ждем, когда смерджат мой PR позволяющий добавлять сущностям дефолтные значения.
14:51Если есть какие-то вопросы про работу со стейтом или сами хотите чем-то поделиться - пишите, я ненадолго вернусь к работе.
15:01@jsunderhood поведение каждого "объекта" собирается из данных (!), и потом каждый аспект обрабатывается отдельной функцией
все равно ничего не понятно. можно какой-то хотя бы примерный пруф оф концепт. пусть даже на jQuery.
@jsunderhood поведение каждого "объекта" собирается из данных (!), и потом каждый аспект обрабатывается отдельной функцией
15:30
@mr_mig_by @ALF_er @jsunderhood Большие монолитные с-мы накапливают внутреннее напряжениее и соотв. имеют предел масшатабирования.18:25
Продолжаем говорить про стейт. Ещё один плюс плоского стейта в том, что в общем-то отпадает надобность в библиотеках для иммутабельности.
18:41Можно спокойно использовать plain js structures, потому что манипуляции производятся над отдельными ветками стейта. Остальные неизменны.
18:43Мы долгое время использовали ImmutableJS, потом отказались от него в пользу seamless-immutable, теперь думаем вообще вернуться к plain js.
18:44Структурирование стейта через композицию редьюсеров - это в некотором смысле тот же structure sharing, что и в ImmutableJS.
18:47Если после выполнения какого-то редьюсера, его стейт не изменился, то он вернет просто текующее состояние своей ветки в дереве стейта.
18:50@jsunderhood А вот это очень интересно. Самого Иммутабл порядком утомил.
Да Immutable порядком утомляет. В особенности, когда возникает необходимость интеграции c third-party виджетами.
@jsunderhood А вот это очень интересно. Самого Иммутабл порядком утомил.
18:55
Тут либо нужно использовать Record структуры (со своими ограничениями), либо использовать reselect.
18:57Типичная дрочка на архитектуру и неважные аспекты реализации. Всё от безделия и отсутствия реальных проблем. twitter.com/jsunderhood/st…
Wat?
Типичная дрочка на архитектуру и неважные аспекты реализации. Всё от безделия и отсутствия реальных проблем. twitter.com/jsunderhood/st…
19:00
@jsunderhood А чем Реселект тут поможет?
На уровне коннекта данные трансформируются в plain js c помощью селекторов. А редьюсерах да - set, get, mergeIn итд
@jsunderhood А чем Реселект тут поможет?
19:27
@jsunderhood Хм. А разве тру-вей — это не Иммутабл до самого конца?
Ну, смысла в иммутабельности во вьюхе особо нет, как мне кажется
@jsunderhood Хм. А разве тру-вей — это не Иммутабл до самого конца?
20:15
Всем привет из дождливой Финляндии. На этой недели с вами Владислав (@smashercosmo) - разработчик и киноманьяк.
Все твиты, ссылки и кино-рекоммендации за неделю можно будет найти здесь - jsunderhood.ru/smashercosmo
Всем привет из дождливой Финляндии. На этой недели с вами Владислав (@smashercosmo) - разработчик и киноманьяк.
20:26
@jsunderhood эй, я твою вьюху мутабил!20:28
@mr_mig_by @jsunderhood Слава, все потому, что ты отказался писать со мной игруху. vasir.net/blog/game-deve… вот тут пример хороший.20:49
# Пятница 80 твитов
Всем привет. Сегодня еще часик-два продолжаем вчерашнюю тему, а потом вновь открываем наш центр психологической помощи разработчикам)
8:59Вчера говорили о плоском стейте, о том что правильная его организация в общем-то избавляет от необходимости использования immutable-структур
9:01Вот вам еще две дискуссии о том, использовать или не использовать Immutable: github.com/este/este/issu…, github.com/mxstbr/react-b…
9:04Кстати, эти дискуссии идут в репах лучших на данный момент react/redux бойлерплейтах.
9:15What I'm seeing is Boilerplate Fatigue. People taking other people's setups as gospel. Don't start your project with a boilerplate.
Сейчас расскажу о них поподробней, но при этом помните, что:
What I'm seeing is Boilerplate Fatigue. People taking other people's setups as gospel. Don't start your project with a boilerplate.
9:15
Сперва este (кстати сам автор произносит это название, как "эште") - она (мне кажется, что это именно она :)) совершенно прекрасна.
9:21Там есть все: полная изоморфность и универсальность (включая react-native), интернационализация, бессерверная разработка и много чего ещё.
9:25Я настояетельно рекомендую почитать в este историю комитов за последний год: очень здорово видна эволюция подходов, идей в react/redux стеке
9:28@jsunderhood «изоморфность и универсальность» — масло масляное.
Да, наверное. По изоморфностью я имел в виду browser + server, под универсальностью - browser + native.
@jsunderhood «изоморфность и универсальность» — масло масляное.
9:33
react-boilerplate - более молодой и более (прости господи) хипстерский проект :)
9:39Там всякие модные штуки вроде сервис-воркеров, прогрессивных веб-приложений + генераторы кода, webpack2, ngrok-тунель, асинхронные роуты итд
9:44@jsunderhood когда там уже откроется горячая линия психологической помощи разработчикам которым нечего делать ?9:49
Тем не менее в react-boilerplate пока что отсутствует SSR, интернационализация, а react-native и подавно (хотя рано или поздно все запилят)
9:52@taujavarob @jsunderhood изоморфность — это устаревший термин для универсальности, расширенный фейковой нативностью.9:53
Но главное (принципиальное!) отличие между este и react-boilerplate - в способе организации кода приложения на уровне файлов.
9:54Este четко разделяет бизнесс-логику и view-layer, react-boilerplate, наоборот, компонует react-контейнеры вместе с redux-специфичным кодом.
9:58Первый подход мне импонирует в большей степени, потому что связь между контейнером и ветками стейта - один ко многим, а не один к одному.
10:01Теперь расскажите о себе, какая у вас обычно стартовая точка в новом проекте? Самописная, сторонняя или вообще всегда с нуля все начинаете?
10:04@jsunderhood если JS то беру стартер паки, а потом чищу от всего. Если Java то юзаю Spring Initializr10:11
@jsunderhood В текущих проектах расширенный redux ducks, но сейчас ещё больше расширяем организацию кода.10:11
@jsunderhood Всё своё, вдохновляюсь чужими решениями, ищу идеальную структуру. Сейчас так: medium.com/front-end-hack…10:11
@jsunderhood а тем временем #alibaba #group пилит альтернативу #RN alibaba.github.io/weex/index.html10:42
@jsunderhood взял старый проект, обновил зависимости, впилил новые хотелки — весь старт10:42
@jsunderhood всегда с нуля, иначе будет соблазн использовать что-то, по причине, что оно уже было, а не по причине, что оно надо11:08
@jsunderhood кстати. Новая статья. 👻 twitter.com/javascriptdail…
Да сколько ж можно уже?) Библиотеке год, а они всё интродукции пишут.
@jsunderhood кстати. Новая статья. 👻 twitter.com/javascriptdail…
11:17
@jsunderhood наш человек писал. 👻
whatever) пусть бы написал статью: "Redux advanced technics") Статей, курсов и уроков для новичков выше крыши.
@jsunderhood наш человек писал. 👻
11:23
@jsunderhood год? А цикл признания библиотеки? Вначале как закладка. Потом ознакомление. Потом попробую на примерах. Через год применю. Так?11:33
@taujavarob @jsunderhood Всего год? А пиарят и везде используют так, словно уже лет 5 в ходу.11:40
Ну что мы все про redux, да про redux. Давайте опять покопаемся во фрустрированных мозгах разработчиков.
13:17Тема: боязнь публичных выступлений и депресняк от того что "все вокруг такие умные, знают страшные аббревиатуры, а ты фигачишь сайт-визитку"
13:30Традиционно начну с себя: я очень боюсь выступать публично. Вплоть до того, что от волнения у меня начинается предобморочное состояние :)
13:32@jsunderhood фигня. Обычно те, кто разбрасываемся аббревиатурами и терминами — наименее полезны в обществе. Это не только о разработчиках.13:33
Даже пока я веду @jsunderhood эту неделю каждый день у меня начинается с мысли что"вот сегодня-то точно что-то пойдет не так и выйдет лажа")
13:38@jsunderhood наверное все боятся выступать публично.Я стараюсь делать вид,что не боюсь и концентрируюсь на рассказе.Fake it till you make it13:39
@roman01la @jsunderhood ерунда. Для этого есть вычитка и прогонка докладов и зеркало. Важно желание. Остальные качества есть у каждого.13:43
@jsunderhood это называется синдром самозванца pic.twitter.com/NKVElvhmzg13:45![]()
Мне, как перфекционисту, кажется, что я должен идеально знать тему, по которой я делаю выступление. Ибо иначе первый же вопрос - и провал :)
13:46@jsunderhood мне не нравится в этом волнение то, что оно притупляет процесс азартной и непринужденной передачи информации13:47
@roman01la @jsunderhood лучше перед @pepelsbey13:47
Он ещё и правильный фидбек даст
И вообще стоит начинать с @webstandards_ru
Лучший вариант
@SilentImp @roman01la @jsunderhood @pepelsbey, например,прочитать доклад перед коллегами на работе, потом можно на PiterCSS, а дальше больше13:52
Ну чего, есть тут еще кто-то, кто ооочень хочет выступать, но страшно боится?) Может устроить отдельный митап специально для таких как мы?
13:58@jsunderhood я раньше боялась вопросов на публичных выступлениях, со временем стеснение и паника прошли
Так а были случаи, когда вопрос из зала реально ставил в тупик? Как выходила из ситуации?
@jsunderhood я раньше боялась вопросов на публичных выступлениях, со временем стеснение и паника прошли
14:01
@jsunderhood пару месяцев назад Дан Абрамов писал что у него был панический приступ перед выступлением. - скверная штука. Имхо.
Я вообще специалист по паническим атакам)
@jsunderhood пару месяцев назад Дан Абрамов писал что у него был панический приступ перед выступлением. - скверная штука. Имхо.
14:38
@jsunderhood Скажи: «не знаю» или типа того. Я однажды таким вопросом сам поставил докладчика в тупик. Мне до стх пор стыдно вспоминать.14:38
@jsunderhood иногда приходилось "лить воду", но ИМХО, это очень плохой вариант, который не всегда прокатит14:39
@jsunderhood обычно у зрителей нет задачи завалить выступающего, просто уточнить что-то14:39
@jsunderhood главное рассказывать то, что важно и интересно самому. Ну и подготовиться как следует, 3-4 прогона со зрителями хорошо помогают14:39
@jsunderhood подготовка доклада - это ведь идеальные условия для глубокого изучения темы, стимул разобраться в деталях, на которые забиваешь14:40
@jsunderhood когда я первый раз выступал, я забыл вообще весь доклад)), как первоклассник на уроке литературы, забывший стихотворение18:17
@jsunderhood @SatiataOff Просто отвечаешь "я не знаю"18:17
@jsunderhood мне, наоборот, больше всего интересны в докладах вопросы из зала ) провал - это когда вопросов вообще нету18:17
Еще хотел поговорить о том, что (не знаю, как у других), но мне порой бывает страшно подступиться к чему-то кажущемуся невероятно сложным
19:10К чему-то, что со стороны представляется какой-то запредельной магией, а люди, этим овладевшие, кажутся чародеями 50-го уровня.
19:11Например, я когда слушаю доклады @gritzko, мне кажется, что человек вещает из какой-то далекой галактики, куда мне никогда не долететь :)
19:14Именно поэтому, мой любимый тип статей, это статьи из серии "How to make your own...", которые разрушают магию и объясняют в чем фокус.
19:22Например, тот же React. Мне кажется до сих пор для многих словосочетание "виртуальный дом" представляется каким-то мощным заклинанием.
19:27Но прочитываешь вот такую статью например medium.com/@deathmood/how… и такой типа "ээ, и все что ли? так просто что ли? а где волшебство блин?"
19:30@jsunderhood я вот до сих пор не использую это все, потому что страшно! Особенно после знакомства с монстром ангуляра
Для укрощения монстра ангуляра есть вот такое - teropa.info/build-your-own…. И сразу понимаешь всю механику фреймворка.
@jsunderhood я вот до сих пор не использую это все, потому что страшно! Особенно после знакомства с монстром ангуляра
19:35
@jsunderhood ух ты, у меня тоже! Мне вот эта статья по этому нравится про Реакт: hackflow.com/blog/2015/03/0…19:36
Поэтому, пользуясь тем, что мне на неделю вручен столь громогласный рупор, хотелось бы реквестировать у сообщества следующие статьи:
19:47у @andrey_sitnik: "How to write your own PostCSS"
19:49у @RReverser: "How to write your own Babel"
19:49Так, продолжайте список, что я еще забыл?
19:53Нам нужно больше статей и докладов не о том, как пользоваться какой-то технологией, а о том, как она работает изнутри.
19:55@jsunderhood думаю это один из лучших проектов на тему: hangouts.readthesource.io Изучают исходный код вместе с авторами.20:28
@AnroyPaul @jsunderhood да. Там всего ничего - 600 страниц поди текста. Как раз для начала. 👻
Бггг)
@AnroyPaul @jsunderhood да. Там всего ничего - 600 страниц поди текста. Как раз для начала. 👻
20:30
@jsunderhood @_deathmood дело в том что многим просто некогда читать. Им надо писать код. И побольше кода. И быстрее. Поспать и писать код.20:30
И вот еще классическая серия статей от @alex_young dailyjs.com/2010/12/02/fra… было очень актуально и полезно во времена jQuery-активности
20:51В этой серии по сути с нуля пишется jQuery-подобная библиотека. В те времена это стало настоящим откровением.
20:53Ой, да, кстати (не знаю правда, кто у нас главный спец), напишите кто-нибудь статью: "How to write your own RxJS"
20:59Вот тоже из серии "How to write your own..." github.com/thejameskyle/t… - простой копилятор с супер-подробным описанием и коментариями
21:36@jsunderhood свой первый SPA в 2009 писал полностью на virtual Dom. Это же классика Javascript.
ммм... хм... какое-то весьма сомнительное утверждение
@jsunderhood свой первый SPA в 2009 писал полностью на virtual Dom. Это же классика Javascript.
22:07
И в догонку еще одна "how to write your own.."-подобная штука: github.com/iamdustan/tiny… - простой рендерер для реакта (пошагово, с коментами)
22:33Перед сном отправлю всякого странного кина вам в ленту)
23:39Сегодня в том числе говорили о страхе публичных выступлений и фильмов на эту тему много, но что-то все не то, что хочется советовать)
23:40Поэтому будут два совершенно сумасшедших фильма про теле-шоу (ну а чо, теле-шоу вполне себе выступления и вполне себе публичные :)
23:42Под номером один - дикий треш от "Странного Эла" Янковича - kinopoisk.ru/film/7402/
23:44Первая половина фильма - концентрат очень плохого юмора, зато потом градус безумия вырастает просто до необозримых высот и начинается ржака)
23:48Второе кино еще более странное и не менее безумное - kinopoisk.ru/film/745818/ - чувство перманентной неловкости при просмотре вам обеспечено
23:54# Суббота 4 твита
@jsunderhood try working with a feature-based architecture on a project, and I guarantee you'll love it! It's amazing!9:43
@jsunderhood Могу ли я указать вам на? vimeo.com/1686480129:43
@lapanoid @jsunderhood Haha yeah, studied Russian in school for two years but it's hard!12:32
@jsunderhood хоть вопрос не мне, но крик души просто. Будь честен, не знаешь - скажи не знаю, главное чтоб не как баба - воду лить ни о чем23:54
# Воскресенье 31 твит
Моя смена в этом твиттере потихоньку подходит к концу и, вроде как, все что хотел, я с вами обсудил и всем, что меня волновало, поделился.
14:26Если вдруг я забыл упомянуть какие-то фобии и психозы разработчиков - смело пишите мне об этом. Успеем за оставшиеся шесть часов обсудить)
14:29У меня вот есть еще, например, такая тема: ужасно люблю обновлять пакеты) Прям физическое удовольствие от этого испытываю.
14:32И если какая-то зависимость в проекте не обновлена до последней версии - то сразу как-то тревожно и неспокойно на душе :)
14:33@jsunderhood такая же фигня) Но вообще, по-моему это тоже своеобразное психическое расстройство :)14:45
Кстати, по поводу обновления пакетов, кто-нибудь в проекте использует npm shrinkwrap. Если нет - расскажите почему?
14:48@mistadikay @jsunderhood лично у меня никаких тревог! pic.twitter.com/AJl8DZS8Eo15:07![]()
Я вот тоже очень люблю ВООБЩЕ ВСЁ обновлять. Всегда. Везде.16:58У меня вот есть еще, например, такая тема: ужасно люблю обновлять пакеты) Прям физическое удовольствие от этого испытываю.
@alexfedoseev @mistadikay @jsunderhood у меня на это всегда вопрос: работает? - тогда не надо. 👻16:58
Это я16:58У меня вот есть еще, например, такая тема: ужасно люблю обновлять пакеты) Прям физическое удовольствие от этого испытываю.
@taujavarob ну вообще да, но иногда мистер Обсессивно-Компульсивное Расстройство побеждает здравый смысл 🙈 @alexfedoseev @jsunderhood16:59
@mistadikay @alexfedoseev @jsunderhood тогда спасает кто-то разумный свыше. Он спрашивает: работает? - тогда не надо.16:59
@taujavarob скажи честно, тебе просто очень нравится писать фразу «работает? - тогда не надо.» @alexfedoseev @jsunderhood16:59
@taujavarob Ясно. Итог тредика: если хотите своему проекту долгих лет, обновляйте зависимости регулярно @jsunderhood17:00
@boriscoder @jsunderhood хм. - у нас на проекте jquery 1.4. Работает!17:01
Так никто и не ответил, пользуется ли кто-то в проекте шринкврапом? Мы стали пользовать после того, как свежий npm install все нафиг поломал
17:06@jsunderhood пользуемся. очень бесит большой дифф после обновления пакетов :( приходится сторонней тулой новый шринкврап получать.17:10
@jsunderhood очень глючная эта тема, не столь обязаловка, сколько необходимость. Хотя мне помогает просто снять ^ в package.json
А в чем именно глюки?
@jsunderhood очень глючная эта тема, не столь обязаловка, сколько необходимость. Хотя мне помогает просто снять ^ в package.json
17:11
"Хотя мне помогает просто снять ^ в package.json" - у нас так и было и все равно все накрылось после npm install @me_mrsum
17:13@jsunderhood что-то вроде "детских граблей", добавляешь пакет и он не приходит – потому что забыл обновить shrinkwrap, да и diff не огонь17:14
@jsunderhood хотя, я видел как ребята правят шринкврап руками>_<, а то вдруг чего пойдёт не так. Вообщем боль17:15
@jsunderhood пользуемся. Но боль в том, что на разных операционных системах разные опциональные пакеты. И билд на CI может падать.18:19
Твиттер расставляет приоритеты @cssunderhood @jsunderhood pic.twitter.com/uZTyYEI9R319:54![]()
Ну что же, буду потихонечку с вами прощаться и подводить итоги этой недели.
20:22На этой неделе мы много говорили про redux, а также обсуждали наши маленькие ненормальности и профессиональные психические недуги)
20:27В качестве резюме хотел бы сказать следующее: любите свои болячки, заключите с ними перемирие и увидите: они могут стать вам полезными.
20:29Подобно Халку, мы должны пытаться обратить наши закидоны и сдвиги себе во благо и миру на пользу.
20:38И, так же как и Халка, у нас естественно не всегда будет это получаться :)
20:38Так же спасибо всем, кто придумал и поддерживает проект @jsunderhood. Это правда был крутой экспириенс, хотя и сложный и весьма стрессовый.
20:41Мой твиттер - @smashercosmo. О разработке практически не пишу, но если хотите периодически получать необычного кина себе в ленту - welcome.
20:44Ну и в качестве прощального твита поделюсь с вами самым лучшим на свете фильмом о девиациях kinopoisk.ru/film/746480/. На этом всё. Пока-пока)
20:50# Ссылки
www.kinopoisk.ru
- http://www.kinopoisk.ru/film/725190/
- http://www.kinopoisk.ru/film/16985/
- http://www.kinopoisk.ru/film/4769/
- http://www.kinopoisk.ru/film/4923/
- http://www.kinopoisk.ru/film/817556/
- http://www.kinopoisk.ru/film/8430/
- http://www.kinopoisk.ru/film/555/
- http://www.kinopoisk.ru/film/21254/
- http://www.kinopoisk.ru/film/7402/
- http://www.kinopoisk.ru/film/745818/
- http://www.kinopoisk.ru/film/746480/
github.com
- https://github.com/tshelburne/redux-batched-actions
- https://github.com/evgenyrodionov/redux-logger
- https://github.com/tappleby/redux-batched-subscribe
- https://github.com/reactjs/redux/pull/1813
- https://github.com/jhnns/rewire
- https://github.com/este/este
- https://github.com/speedskater/babel-plugin-rewire/issues/137
- https://github.com/paularmstrong/normalizr
- https://github.com/este/este/issues/626
- https://github.com/mxstbr/react-boilerplate/issues/441
- https://github.com/thejameskyle/the-super-tiny-compiler
- https://github.com/iamdustan/tiny-react-renderer
gist.github.com
- https://gist.github.com/smashercosmo/7dccd4822b555c57bb5807a4ba6052da
- https://gist.github.com/smashercosmo/f5c14adc59a4c30a195384613af0bd53
- https://gist.github.com/smashercosmo/6b4568cbc0a19a29550334ce0ea95ebb
- https://gist.github.com/smashercosmo/29e5f970454da25b7610a66f0117e41b
- https://gist.github.com/smashercosmo/d7f2feff3d6d805c824c8fe301980af4
- https://gist.github.com/anonymous/04967a6efd23a0976f7bed9f916204d9
- https://gist.github.com/anonymous/7c8f15e317f5f02ae03b3b5956cd0d32
other
- https://www.facebook.com/korenyushkin
- https://www.facebook.com/oleg.podsechin
- http://www.paul.sladen.org/pronunciation/
- http://frontflip.me/2016/06/15/why-mobx-and-not-redux.html
- https://egghead.io/courses/getting-started-with-redux
- https://egghead.io/courses/building-react-applications-with-idiomatic-redux
- https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape
- https://habr.ru/post/301786/
- https://www.youtube.com/watch?v=4f6Wmyw3V9c
- https://habrahabr.ru/post/232789/
- https://habrahabr.ru/post/298192/
- https://esquire.ru/david-barash
- http://tema.livejournal.com/2277618.html
- https://jsunderhood.ru/smashercosmo
- http://vasir.net/blog/game-development/how-to-build-entity-component-system-in-javascript
- https://medium.com/front-end-hacking/structuring-react-and-redux-applications-255361d24f84#.vl4chp8f5
- https://medium.com/@deathmood/how-to-write-your-own-virtual-dom-ee74acc13060#.a54n2dhhu
- https://alibaba.github.io/weex/index.html
- http://teropa.info/build-your-own-angular/
- http://hackflow.com/blog/2015/03/08/boiling-react-down-to-few-lines-in-jquery/
- http://hangouts.readthesource.io/
- http://dailyjs.com/2010/12/02/framework-review/
- https://vimeo.com/168648012