smashercosmo

27 июня 2016, Helsinki, Finland

# Понедельник 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

Пока обеденный перерыв, закрою тему Финляндии. Несколько советов, если вдруг решите сюда перебираться:

13:21

1. Если у вас нет вышки, но рекомендую собрать максимум документов, включая переведенную и нотариально-заверенную трудовую...

13:23

а также рекомендации с прошлых мест работы (естественно также на английском языке)

13:24

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

13:25
Филиал @abroadunderhood в @jsunderhood в этот понедельник.

Для разогрева)

Филиал @abroadunderhood в @jsunderhood в этот понедельник.

13:27

2. Второе, что лично меня удивило по приезду это то что никто мне не сообщил, что помимо налога 25-27% нужно еще платить пенсионный взнос...

13:31

а это, в среднем, 200 евро + страховка квартиры + страховка на случай потери работы.

13:33

3. Ну и в-третьих если вы не живете в центре и ленитесь гонять на работу на велике, то будьте готовы также отваливать 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 человек-линтер? :D
16:48

Вот да, из последнего: у нас ушел разработчик, который единолично отвечал за код API. Соответственно нам пришлось разбираться что там и как.

16:49

Первое что я сделал, это прикрутил туда eslint c airbnb конфигом. Eslint нашел 17000 ошибок. Из них 7000 он пофиксил автоматически.

16:51

3000 ошибок я пофиксил с помощью разных 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 Я такой же. Но я ж как лучше хочу — чтобы они тоже научились говно в коде видеть. @hellrider911
17:19

А теперь расскажите про себя? Кто еще такой же псих, как я и @sapegin и как вы с этим живете?

17:20

Мешает вам это по жизни или помогает? Пытаетесь ли как-то с этим бороться или принимаете, как неотъемлемую часть своей личности?

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
Думал, я один такой поехавший.

А я в свое время, когда еще верстал, менял значения отступов на более красивые. Т.е. если в макете 31px - делал 30) twitter.com/NUM13RU/status…

18:42
@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:55
Hyperterm: coming soon to a time-sharing operating system near you. pic.twitter.com/TkMXJXrRuc
7: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);

8:09

По началу была проблема с логированием. redux-logger показывал вот такое pic.twitter.com/3C1f6FCIaY

8:15

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

8:16

Но со временем github.com/evgenyrodionov… стал очень гибким. Поэтому там в доках внизу рецепт от меня, как подружить его с redux-batch-actions.

8:19

После этих нехитрых манипуляций лог выглядит следующим образом pic.twitter.com/c0CcazDXg1

8:22

Как видите, сразу понятно, что вообще происходит, в отличие от подхода с одним экшеном, когда большая часть логики остается за кадром.

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:21

github.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:28

Ok, приведу самый простой пример. у вас есть такой connect:
connect({prop1, prop2, prop3} => ({prop1, prop2, prop3}))(Component)

9:34

И есть три экшена: первый меняет 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 перехватываем на уровне стора батчи, напускаем на них существующий редюсер, возвращаем стейт.
Весь батчинг в 3 строчки

12:10
@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:37

dependency 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:01

c 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:43

redux нас учит, что мутировать стейт - это плохо, поэтому и фильмы будут про то, что от мутаций в общем-то одни проблемы)

18:46
@jsunderhood муха и муха 2?

да, очень хотел включить в список, как минимум первую часть) но потом все же решил, что это как-то слишком очевидно.

@jsunderhood муха и муха 2?

18:48

Тема благодатная, поэтому вместо обещаных двух, будет четыре)

18:49
@jsunderhood «Человеческая многоножка» идеально подходит для представления редьюсеров.

Аххахахххах) Но мне кажется это скорее больше про Elm и Cerebral.

@jsunderhood «Человеческая многоножка» идеально подходит для представления редьюсеров.

18:50
@jsunderhood Штальц сегодня, кстати, проводил аналогию с реальным миром Вот бы ему этот фильм показать.

Can 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…

18:54

Итак первая в нашем хит-параде: роковая Наташа Хенстридж в мужененавистнической "Особи" kinopoisk.ru/film/4769/

18:56

Под номером два шедевр от Гильермо дель Торро, когда он ещё не скатился во всякую попсню) kinopoisk.ru/film/4923/

18:58

Оба фильма сняты в 90-ые - золотые годы фантастики. И сделаны на порядок более захватывающе и изобретательней, чем все современные поделки.

19:00

Тепер то, что наверняка прошло мимо ваших радаров.

19:05

kinopoisk.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 Жадность — это плохо. В том числе жадность до информации.
youtube.com/watch?v=4f6Wmy…
10:24

Никого не хочу обидеть, но все андерхуды безусловно вносят свою лепту в этот информационный марафон))

10:29
@AntonyKapustin @jsunderhood И как это помогает? Сижу в опенспейсе, почитываю твиттер и прочие интернеты. Иногда даже видео смотрю.
10:30
@jsunderhood у меня все просто. Есть браузер для соц сетей, браузер для деловой переписки и чатов, и браузер для верстки и тестирования:)

А что мешает в браузере для верстки открыть вкладку твиттера?

@jsunderhood у меня все просто. Есть браузер для соц сетей, браузер для деловой переписки и чатов, и браузер для верстки и тестирования:)

10:34

Хочу также уточнить, что я прекрасно понимаю, что это очередное психическое отклонение, впрочем довольно распространенное.

10:46

Поэтому логические доводы вроде "ссылка ещё всплывет" или "ничего по-настоящему нового и не придумали" в данном случае не очень работают.

10:48
@jsunderhood можно сесть на проект с легаси кодом. И забыть про мониторинг. 👻
10:51

Кстати да) В моем случае действительно побеждает перфекционизм. Я забываю обо всем, кроме того, что хочу сделать красоту из этой страхоты.

10:52
@jsunderhood учи фундаментальные вещи, а не поверхностный хайп, и ты увидишь что, наоборот, очень мало чего-то стоящего нового.
10:53

Поэтому меня, конечно, восхищают и пугают такие люди, как sokra)

10:56

Sokra несколько лет каждый день в одиночку сидит и фигачит свой 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 я, кстати, устроил шаббат, чтобы доказать, что отказ от технологий — плохо и оно идёт от лени
habrahabr.ru/post/232789/
12:12
@jsunderhood даже если себя как следует занять чем-то?

  • Мысль о том, чтобы не колоться вызывает у меня ужас
  • Даже если себя как следует занять чем-то?
  • 12:18
    @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-barash
    13:10
    JavaScript for cats jsforcats.com

    Специально для @catunderhood :)

    JavaScript for cats jsforcats.com

    15:28
    @jsunderhood Артемий Лебедев как раз как будто для тебя написал:
    tema.livejournal.com/2277618.html
    19:02

    Так, в конце дня хотелось бы как раз поговорить о всяких техниках, которые помогают бороться с прокрастинацией и информационной зависимостью

    19:40

    Ответ на вопрос, какими пользуюсь лично я, очень простой: никакими.

    19:40
    @jsunderhood ...но мне лень.
    19:41

    Более того, все GTD приемы, статьи, советы, наоборот, вызывают у меня какую-то иррациональную неприязнь.

    19:43

    А когда в очередной статье я вижу, что-то вроде "возьмите лист бумаги и разделите его на 4 части" у меня начинается аллергическая реакция.

    19:44

    Я пробовал заводить календари, всякие туду-листы, перепробовал кучу приложений - со мной почему-то ничего не работает.

    19:45

    Единственное, что дало хотя бы какой-то эффект - это pomodoro. Хотя и его не надолго хватило.

    19:46
    @jsunderhood Habitica?

    Расскажи поподробней, что такое и в чем фишка?

    @jsunderhood Habitica?

    19:49
    @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:14

    gist.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 там все просто, если знать нужные слова :)
    Что такое Data driven design знаете?

    14:41
    @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:15
    What 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:54

    Este четко разделяет бизнесс-логику и view-layer, react-boilerplate, наоборот, компонует react-контейнеры вместе с redux-специфичным кодом.

    9:58

    Первый подход мне импонирует в большей степени, потому что связь между контейнером и ветками стейта - один ко многим, а не один к одному.

    10:01

    Теперь расскажите о себе, какая у вас обычно стартовая точка в новом проекте? Самописная, сторонняя или вообще всегда с нуля все начинаете?

    10:04
    @jsunderhood если JS то беру стартер паки, а потом чищу от всего. Если Java то юзаю Spring Initializr
    10:11
    @jsunderhood В текущих проектах расширенный redux ducks, но сейчас ещё больше расширяем организацию кода.
    10:11
    @jsunderhood Всё своё, вдохновляюсь чужими решениями, ищу идеальную структуру. Сейчас так: medium.com/front-end-hack…
    10:11
    @jsunderhood а тем временем #alibaba #group пилит альтернативу #RN alibaba.github.io/weex/index.html
    10: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 it
    13:39
    @roman01la @jsunderhood ерунда. Для этого есть вычитка и прогонка докладов и зеркало. Важно желание. Остальные качества есть у каждого.
    13:43
    @jsunderhood это называется синдром самозванца pic.twitter.com/NKVElvhmzg
    13:45

    Мне, как перфекционисту, кажется, что я должен идеально знать тему, по которой я делаю выступление. Ибо иначе первый же вопрос - и провал :)

    13:46
    @jsunderhood мне не нравится в этом волнение то, что оно притупляет процесс азартной и непринужденной передачи информации
    13:47
    @roman01la @jsunderhood лучше перед @pepelsbey
    Он ещё и правильный фидбек даст
    И вообще стоит начинать с @webstandards_ru
    Лучший вариант
    13:47
    @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

    у @gritzko: "How to write your own swarm.js"

    19:48

    у @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/168648012
    9: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/AJl8DZS8Eo
    15:07
    Я вот тоже очень люблю ВООБЩЕ ВСЁ обновлять. Всегда. Везде.

    У меня вот есть еще, например, такая тема: ужасно люблю обновлять пакеты) Прям физическое удовольствие от этого испытываю.

    16:58
    @alexfedoseev @mistadikay @jsunderhood у меня на это всегда вопрос: работает? - тогда не надо. 👻
    16:58
    Это я

    У меня вот есть еще, например, такая тема: ужасно люблю обновлять пакеты) Прям физическое удовольствие от этого испытываю.

    16:58
    @taujavarob ну вообще да, но иногда мистер Обсессивно-Компульсивное Расстройство побеждает здравый смысл 🙈 @alexfedoseev @jsunderhood
    16:59
    @mistadikay @alexfedoseev @jsunderhood тогда спасает кто-то разумный свыше. Он спрашивает: работает? - тогда не надо.
    16:59
    @taujavarob скажи честно, тебе просто очень нравится писать фразу «работает? - тогда не надо.» @alexfedoseev @jsunderhood
    16:59
    @taujavarob Ясно. Итог тредика: если хотите своему проекту долгих лет, обновляйте зависимости регулярно @jsunderhood
    17: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/uZTyYEI9R3
    19: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

    github.com

    gist.github.com

    other