thought_sync

29 августа 2016, Saint Petersburg, Russia

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

Привет, меня зовут Слава (@thought_sync). Я работаю fullstack-разработчиком в VK и занимаюсь сообщениями.

10:43

И кажется, вы будете слушать меня целую неделю.

10:44

Я думаю, что начать можно с сессии Ask Me Anything (задай мне любой вопрос). А дальше поговорим на тему новых технологий и больших компаний.

10:46
@jsunderhood только вчера посмотрел видео от fb про flux и они рассказывают о всех тех проблемах, что вижу в ВК сейчас. Why?

К сожалению, ничего не понял

@jsunderhood только вчера посмотрел видео от fb про flux и они рассказывают о всех тех проблемах, что вижу в ВК сейчас. Why?

10:49
@jsunderhood @thought_sync Fullstack? То есть PHP там всё-таки поменяли на ноду? :-)

нет) просто я еще умею и в PHP, как и все разработчики, которые занимаются непосредственно сайтом

@jsunderhood @thought_sync Fullstack? То есть PHP там всё-таки поменяли на ноду? :-)

10:55
@jsunderhood fullstack - в vk нет деления на front и back?

как я и сказал, нет, деления нет

@jsunderhood fullstack - в vk нет деления на front и back?

10:55
@jsunderhood расскажи что под капотом редизайна вк. Полностью перелопатили технологии и архитектуру или просто пара фишек и стили?

я немного рассказывал про это на @pitercss, вот тут (youtube.com/watch?v=qseu-Z…), если есть конкретные вопросы, пишите

@jsunderhood расскажи что под капотом редизайна вк. Полностью перелопатили технологии и архитектуру или просто пара фишек и стили?

11:01
@jsunderhood расскажи о себе. Какой опыт, образование, предпочтения, стремления. Как проходило собеседование в ВК (если не NDA). Спасибо.

Ну давай, попробую.

@jsunderhood расскажи о себе. Какой опыт, образование, предпочтения, стремления. Как проходило собеседование в ВК (если не NDA). Спасибо.

11:06

Я закончил ГУАП, кафедру программирования. Соосновал @paperpaper_ru, работал в @ResumUP и EPAM.

11:17

Так же я один из организаторов @spb_frontend, иногда выступаю на конференциях. Люблю опенсорс и функциональное программирование.

11:19

Собеседование в ВК проходило обычно, никаких особенностей. Мне написал HR, техническое собеседование, тестовое задание. И все.

11:22
@jsunderhood какой феил запомнился лично от тебя и были ли они вообще ? :)

про такое я лучше расскажу в баре на дринкапах @spb_frontend)

@jsunderhood какой феил запомнился лично от тебя и были ли они вообще ? :)

11:29
@jsunderhood а что было на тестовом?

Нужно было изобразить минимальную реализацию чатов и сделать сниппеты, как в слаке.

@jsunderhood а что было на тестовом?

11:32
@iamstarkov @jsunderhood прошу прощения, вышло действительно сумбурно. Надеюсь, сумел разъяснить, что я имел ввиду pic.twitter.com/wQEZODiMLY

Flux не решает всех этих проблем, это просто способ управления внешним стейтом.

@iamstarkov @jsunderhood прошу прощения, вышло действительно сумбурно. Надеюсь, сумел разъяснить, что я имел ввиду pic.twitter.com/wQEZODiMLY

11:35

Когда разработчики FB такое говорят, они лукавят. Там еще очень много всего, помимо Flux и React. Но объяснить это в твиттере сложновато.

11:36
@jsunderhood Это за сколько времени?

1,5 каледарных недели. У меня ушло где-то 5 вечеров.

@jsunderhood Это за сколько времени?

11:37
@jsunderhood @paperpaper_ru О! Слава, все забываю спросить. А расскажи, как вы запускали "Бумагу"?

Первую версию я закодил за сутки (может 1,5) где-то, до этого неделю думали над дизайном и названием.

@jsunderhood @paperpaper_ru О! Слава, все забываю спросить. А расскажи, как вы запускали "Бумагу"?

11:39

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

11:40

Koajs, wp, hhvm, hack, docker, varnish. Целый зоопарк. Но все умещается на 1 сервере.

11:41
@jsunderhood как тебе EPAM?

Я работал там всего полгода, мой проект был по сути outstaffing для NY Times, но для меня скучный. Поэтому ушел.

@jsunderhood как тебе EPAM?

11:57

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

11:57
@jsunderhood А VK небольшая компания?

Если брать группу веб-разработчиков, то нас где-то 30. Всего разработчиков наверное около 70, вместе с админами.

@jsunderhood А VK небольшая компания?

12:01

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

12:02
@jsunderhood что со счетчиком сообщений? его вообще чинить пытались?

Обязательно починим, есть план и понимание как это сделать, но это к сожалению не быстро.

@jsunderhood что со счетчиком сообщений? его вообще чинить пытались?

12:04

Это, кстати, хороший пример задачи, которая решается за пару часов на обычном проекте.

12:05

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

12:05
@jsunderhood а в чем сложность (просто любопытно).

race conditions и количество кода

@jsunderhood а в чем сложность (просто любопытно).

12:14
@jsunderhood поделитесь решением потом? Вообще, у команды ВК есть какой-то тех. блог, где вы рассказываете о своих находках и решениях?

у нас есть блог на хабре, но вот писать туда времени нет, по крайней мере пока

@jsunderhood поделитесь решением потом? Вообще, у команды ВК есть какой-то тех. блог, где вы рассказываете о своих находках и решениях?

12:16
@jsunderhood а сейчас что-то еще пишешь в Бумагу или просто являешься одним из основатеелй и держишь какой-то процент ?

очень редко в экстренных ситуациях

@jsunderhood а сейчас что-то еще пишешь в Бумагу или просто являешься одним из основатеелй и держишь какой-то процент ?

12:24
@jsunderhood чем занимаешься помимо разработки ?

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

@jsunderhood чем занимаешься помимо разработки ?

12:41

учиться программировать конечно, еще немного увлекаюсь machine learning и computer science в общем

12:43
@jsunderhood звучит как отмазка, про много чем :)

так и есть!

@jsunderhood звучит как отмазка, про много чем :)

12:43
@jsunderhood @spb_frontend что любишь из функционального программирования, что практикуешь?

надо сказать haskell перевернул мое отношение к статической типизации, а LISP сильно повлиял в универе.

@jsunderhood @spb_frontend что любишь из функционального программирования, что практикуешь?

12:45

не могу сказать, что практикую haskell, но ФП — это образ мысли, а не конкретный язык.

12:46

могу кстати посоветовать классный курс по FP от @headinthebox edx.org/course/introdu…

12:47

и классную статью про то, зачем вообще ФП нужно cs.kent.ac.uk/people/staff/d…

12:47
@jsunderhood применяешь ли вот это всё в фронте vk.com?

как я и говорил, это скорее про образ мыслей, так что в каком-то смысле да.

@jsunderhood применяешь ли вот это всё в фронте vk.com?

12:51

на практике, очень полезно понимание принципов на которых построен react и redux. Так как это очень мощные абстракции.

12:52

а еще очень полезно понимать про чистый код/сайдэффекты. Когда чего следует избегать.

12:53
@jsunderhood пробовали ли что-нибудь в vk.com делать на erlang?

не думаю, но точно не знаю

@jsunderhood пробовали ли что-нибудь в vk.com делать на erlang?

12:54
@jsunderhood почему #reactjs не популярен среди заказчиков на фриланс-биржах?

да кто ж их знает?

@jsunderhood почему #reactjs не популярен среди заказчиков на фриланс-биржах?

12:55
@jsunderhood Расскажи как свое время распределяешь и поддерживаешь эффективность? Соцсети нафиг, онли работа или уже на скиле успеваешь все?

соцсети нафиг в моем случае как-то очень сложно реализовать 😅

@jsunderhood Расскажи как свое время распределяешь и поддерживаешь эффективность? Соцсети нафиг, онли работа или уже на скиле успеваешь все?

13:01

ни в чем себе не отказываю и много работаю

13:01
@jsunderhood >много работаю @ ни в чем себе не отказываю
Мне кажется, или эти две вещи не совместимы? :D Разве, что если увлечений др. нету.

Считайте меня очень скучным человеком. Если вы геймер, музыкант, фотограф и велосипедист — попробуйте полифазный сон

@jsunderhood >много работаю @ ни в чем себе не отказываю
Мне кажется, или эти две вещи не совместимы? :D Разве, что если увлечений др. нету.

13:13
@jsunderhood как при этом с людьми общаться?

Не знаю, решение этих проблем я оставлю разработчикам-велосипедистам-музкантам. А я скучный, поэтому все успеваю)

@jsunderhood как при этом с людьми общаться?

13:16

Так, я пойду все-таки поработаю. Но вы пишите, я позже отвечу.

13:17
@AlexWayfer @jsunderhood Игры вполне кому-то заменяют хобби.

иногда, вот сейчас пытаюсь допроходить No Man's Sky.

@AlexWayfer @jsunderhood Игры вполне кому-то заменяют хобби.

13:27
@jsunderhood можно ли использовать React в wordpress проектах, такой вот нубский вопрос)))

Конечно можно, почему нет? Просто инициализируешь, я вот использовал странную комбинацию t3js + react

@jsunderhood можно ли использовать React в wordpress проектах, такой вот нубский вопрос)))

15:14

t3js очень простой фреймворк, неплохо работает как штука для инициализации реакт-компонент на странице t3js.org

15:16
@jsunderhood почему вк не вкладывается в open source?

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

@jsunderhood почему вк не вкладывается в open source?

15:16

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

15:17

Все-таки поддержка опенсорс-проектов требует большого количества сил и мотивации.

15:18

Но что-то можно найти вот тут: github.com/VKCOM.

15:18
@jsunderhood А вне России о вас знают как о разработчиках? Пишете статьи на англ, выступаете на конференции?

Насчет узнавания: зависит. Вот на jsconfis выяснилось, что в Словении про нас знаю, а в Штатах не слышали совсем.

@jsunderhood А вне России о вас знают как о разработчиках? Пишете статьи на англ, выступаете на конференции?

15:29

но на зарубежных конференциях не выступаем совсем, на местных иногда (highload++, itnonstop, stachka).

15:30

Так что там понятное дело про наш опыт никто ничего не знает. Но надеюсь со временем мы это изменим.

15:31
@jsunderhood каков средний возраст разработчиков у Вас ?

Сложно сказать, думаю 25 лет где-то. Вообще, у нас очень молодой коллектив.

@jsunderhood каков средний возраст разработчиков у Вас ?

15:32

И что, ни одного вопроса про редизайн? Вы меня удивили. Серьезно.

17:57
@jsunderhood да нам Паша уже все объяснил, чего спрашивать

Нет, ну с Павлом я и правда тягаться не стану.

@jsunderhood да нам Паша уже все объяснил, чего спрашивать

17:59
@jsunderhood насколько разработчики участвовали в новом дизайне, просто верстали, что дают, или обсуждали?

Конечно, участвовали. В принципе, работая в VK, ты не просто человек, который кодит фичи и фиксит баги.

@jsunderhood насколько разработчики участвовали в новом дизайне, просто верстали, что дают, или обсуждали?

18:02

Многие решения ты принимаешь сам, всегда участвуешь в обсуждении. И всегда сам несешь ответственность за свои решения.

18:03

Раз уж спросили про обсуждения, расскажу немного про рабочий процесс.

18:04

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

18:05

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

18:06

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

18:07

Очень много всего остается на твое усмотрение. И ты всегда понимаешь, что если не ты, то никто.

18:08
@jsunderhood так, а что если если два человека имеют разные точки зрения, а решение принято нужно? decision overhead, вот это все?

Вы идете к человеку, которому доверяете оба.

@jsunderhood так, а что если если два человека имеют разные точки зрения, а решение принято нужно? decision overhead, вот это все?

18:29
@jsunderhood Случайного человека же не наймешь на такую ответственную работу. Каким образом выявляются нужные кач-ва? Требования огого?

Нужно много знать и много уметь. Требования высокие, но мы все время ищем сотрудников.

@jsunderhood Случайного человека же не наймешь на такую ответственную работу. Каким образом выявляются нужные кач-ва? Требования огого?

18:35
@jsunderhood ++ сюда же, как распределятся работа между людьми. Или любой, кого наняли может взять какую захочет, которая доступна?

Сильных ограничений по тому, какие задачи брать нет. Но есть зона ответственности и она в приоритете.

@jsunderhood ++ сюда же, как распределятся работа между людьми. Или любой, кого наняли может взять какую захочет, которая доступна?

18:37

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

18:37
@jsunderhood кул, а как насчёт обратной ситуации, вы в двоем что-то порешали быстро, как другие узнают о вашем решении?

Если эти два человека уверены в своем решении, то на продакшене. 😆

@jsunderhood кул, а как насчёт обратной ситуации, вы в двоем что-то порешали быстро, как другие узнают о вашем решении?

18:38
@jsunderhood еще вопрос:) что бы посовещаться,нужно ли в календаре создавать митинг, букать переговорку или можно просто взять и поговорить?

Просто пишешь в общий чат и все.

@jsunderhood еще вопрос:) что бы посовещаться,нужно ли в календаре создавать митинг, букать переговорку или можно просто взять и поговорить?

18:51

Или подходишь к человеку и совещаешься.

18:52
@jsunderhood @unima9000 а что такое "зона ответственности" у вас? И как это с командным владением кода соотносится?

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

@jsunderhood @unima9000 а что такое "зона ответственности" у вас? И как это с командным владением кода соотносится?

19:02
@jsunderhood а кстати говоря, что нужно что бы продавить фичу? нужны доказательства в виде user research?

мы быстро меняемся, пилим, смотрим метрики, корректируем/выпиливаем

@jsunderhood а кстати говоря, что нужно что бы продавить фичу? нужны доказательства в виде user research?

19:03
@jsunderhood много обоснованной критики пришло? И как вы на неё реагируете?

Пример, петиция от людей с нарушениями зрения (change.org/p/%D0%B4%D0%BE…).

@jsunderhood много обоснованной критики пришло? И как вы на неё реагируете?

19:13

Мы приняли меры и теперь внимательнее относимся к этой стороне разработки.

19:13

В общем, вы продолжайте если что задавать вопросы, но завтра начну говорить на другую тему.

19:50

Расскажу о том, как работать с хипстерским стеком, прийти в компанию, где ничего этого нет и не облажаться!

19:51

# Вторник 32 твита

Так привет, я вернулся, но сегодня буду отвечать не на все вопросы.

10:59
@jsunderhood вот интересно: twitter.com/tjournal/statu…

Мы исправили сразу же после обращения, никакой опасности для пользователей нет. Бывает.

@jsunderhood вот интересно: twitter.com/tjournal/statu…

11:00
@jsunderhood как у вас дела с аудитами безопасности?
Полагаетесь только на Bug bounty?

Не могу точно сказать, не обладаю достаточной инфой. Но на h1 мы есть hackerone.com/vkcom

@jsunderhood как у вас дела с аудитами безопасности?
Полагаетесь только на Bug bounty?

11:02

В общем, как я и обещал. Расскажу про опыт внедрения новых технологий в проекты с большим объемом кода. И пользователей.

11:37

Постараюсь не флудить сильно много в ленту, выдавать аналитику порционно.

11:39

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

12:37
@jsunderhood ну методологий насколько afaik не было. Был каскад. Были ли какие-то проблемы или никаких вообще? Производительность интересна.

Проблемы как у всех: specificity wars, повторяющийся код. Пробелм с производительностью от этого не было.

@jsunderhood ну методологий насколько afaik не было. Был каскад. Были ли какие-то проблемы или никаких вообще? Производительность интересна.

12:48

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

12:49

Задач много, кода меняется много. Было две версии сайта, основной и его форк — редизайн.

12:50

На уровне кода вносить изменения трудно, а вот на уровне инфраструктуры не очень.

13:01

Когда я пришел, я тут же предложил пилить gulp и postcss. Ребята уже собирали LESS, но использовали для этого самописную либу на PHP.

13:10

Казалось бы, простая задача. Но вот тут дал о себе знать масштаб проекта. Оказалось, что полная пересборка LESS занимает около 5 минут.

13:20

Когда ты приходишь в такие проекты и видишь, что многое сделано не так, как ты видел в how-to на github, это кажется неправильным.

13:30

На практике, это правда только отчасти. Я начал сталкиваться с разными нюансами, с которыми не сталкивался до этого.

13:40

Хотя опыт создания инфраструктуры сборки у меня достаточно большой.

13:41

Во-первых, коллеги привыкли что у них собирается все достаточно быстро. Все потому что на PHP был написан еще и персистентный кэш.

13:50

Пришлось писать персистентный кэш для LESS. Причем кэш, который умеет в граф зависимостей. Это было больно.

14:00

Далее при обновлении страницы запрос локальным апачем редиректился на css, а дальше через вызов CLI LESS рендерился файл (если он менялся).

14:10
@jsunderhood а у вас есть поддержка RTL и «зеркальная» версия сайта? Как справляетесь?

Да есть, используем rtlcss github.com/MohammadYounes…

@jsunderhood а у вас есть поддержка RTL и «зеркальная» версия сайта? Как справляетесь?

14:13

Получалось, что схема многопоточная. А вот нода не очень. Пришлось писать распараллеливание сборки для gulp.

14:20

Чтобы уметь пересобирать на запрос все так же быстро как апач (а точнее в 2 раза быстрее).

14:21

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

14:21

А далее, времени на все это было очень мало. Поэтому код получился не очень. В итоге, спустя год получилось нормально все это оформить.

14:24

Из этого получился набор пакетов: github.com/VKCOM/gulp-por…, github.com/VKCOM/graph-ca…, github.com/VKCOM/graph-ca…

14:24

Первый распараллеливает почти любой пайплайн для gulp. Еще два нужны для персистентного кэша, но интеграцию в gulp еще не заопенсорсили.

14:24

Из всего этого я вынес два урока:

14:24

2. Простые вещи в сложных проектах становятся сложными.
Это может казаться очевидным, но мы часто про это забываем.

14:24

Похожая ситуация происходит со многими вещами. Например, хранением онлайнов. Мы уже 2 месяца переписываем их.

14:25

Но из-за бешеной нагрузки (порядка 10 ^ 7 qps) и количества кода (и неявных вещей в нем) постоянно откатываемся.

14:25

Хотя в обычном проекте, это решилось бы использованием redis с ttl.

14:25

Такие дела, вернусь поздно вечером, расскажу про человеческий аспект внедрения инноваций.

14:28
@jsunderhood а у вас разработчики только в РФ?)

да, более того, только в СПБ

@jsunderhood а у вас разработчики только в РФ?)

14:28

# Среда 97 твитов

@jsunderhood не дождался. Пошёл спать. 😳

сорян, я вчера поставил новый Deus Ex...

@jsunderhood не дождался. Пошёл спать. 😳

10:21

Теперь немного о внедрении технологий с точки зрения коллектива.

10:56

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

10:56

Да и как правило, вы не понимаете еще деталей и причин тех или иных решений.

10:57

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

10:57

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

10:57

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

10:57

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

10:58

В нашем случае ускорилась сборка в несколько раз, появилась поддержка live-reload (github.com/facebookarchiv…).

10:58

И это самая простая часть. Сложная часть — поддержка.

10:59

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

10:59

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

10:59

В чем-то это похоже на поддержку опенсорс-проектов, поэтому если у вас есть такой опыт, поверьте он не заменим.

10:59

Поэтом сразу готовьтесь: на вас будет сыпаться море багов, жалоб, что ничего не работает. И все будут ждать, что все почините вы.

11:00

А если случилось так, что ваш инструмент запорол деплой, потому что им кто-то не так пользовался — все равно виноватым получитесь вы.

11:00

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

11:00

Поэтому и относиться к инфраструктуре нужно так, как будто это просто продукт для пользователей.

11:00

Нужно следить за его удобством, понятностью и стабильностью.

11:00

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

11:01

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

11:01

Как вы заметили, я люблю длинные истории. Вам интересно, или уже никто не читает?

11:02

Немного поработал, если меня опять не затянет Deus Ex, то постараюсь выдать еще немного аналитики. На этот раз на тему фреймворков.

17:09

А именно, есть ли жизнь без React, как жить без фреймворка и почему это не всегда плохо.

17:10
@jsunderhood VanillaJS - сила, React - могила!
17:36

Мнение автора может не совпадать с мнением людей, которых он ретвитит. А может совпадать.

17:37
@perkovec24 @jsunderhood хм. Всегда думал что React написан на React. 👻
18:52

Еще вот вам совет, если хотите продать коллегам технологию, убедите их сходить на конференцию, где ее будут продавать.

18:55

Продавать технологии со сцены легче!

18:55

Кстати, тем, кто еще не видел. Табы против пробелов. medium.com/@hoffa/400-000…

18:58
@jsunderhood @felipehoffa go хипстеры совсем? или там нельзя пробелами?)

я думаю в go — go fmt

@jsunderhood @felipehoffa go хипстеры совсем? или там нельзя пробелами?)

19:02
@jsunderhood ситник продал @PostCSS ?

В баре =)

@jsunderhood ситник продал @PostCSS ?

19:35
@jsunderhood Нет жизни без реакта, смирись.
19:46

У нас в VK нет JS-фреймворка. Для большинства из вас это звучит как признание в слабоумии.

19:53

Но вряд ли вы знаете, что, например, Chrome DevTools (а это по сути большое веб-приложение) тоже не использует фреймворки.

19:53

По крайней мере по состоянию на лето прошлого года.

19:53

Как я уже и говорил, я один из организаторов @spb_frontend и год назад у нас был один из разработчиков девтулов.

19:54

В своём выступлении он, в том числе, призывал не бояться писать приложения без фреймворка.

19:54

Если задуматься, то зачем нужен фреймворк?

19:55

Унификация стиля и архитектуры, набор понятных ограничений, абстрагирование от рутиных операций.

19:55

Фреймворк помогает быстро стартовать, но очень редко фреймворки переживают быстрое масштабирование.

19:55

В какой-то момент набор ограничений фреймворка перестает подходить для вашего проекта.

19:56

Хороший пример фейла фреймворка при масштабировании: twitter и rails. Не знаю помните ли вы, как часто и надолго ложился твиттер.

19:58

При масштабировании остается два варианта: городить костыли, либо дописывать/переписывать фреймворка под себя.

19:59

Мне кажется именно поэтому сейчас так популярен стек-конструктор react + redux + whatever.

19:59

Потому что в ситуации с react + redux у вас есть набор низкоуровневых абстракций, а дальше вы можете кастомизировать все под свои нужды.

19:59

При этом новички на небольших проектах стремятся следовать моде.

19:59

Тогда как новичкам бы может лучше подошел какой-нибудь полноценный фреймворк, вроде Ember.js.

20:00

Но в react + redux они получают в лоб от количества решений и абстракций, который нагородили другие. Фреймворки защищают от такого.

20:01

Если вы разрабатываете приложение, где не все ренедерится на клиенте — как интегрироваться с сервером. Популярное решение — REST.

20:02

Но что если вам надо присылать куски HTML с серверва по абсолютно разным причинам. От legacy до улучшения производительности?

20:03

Если вы используете фреймворк — возникает вопрос, как он вообще будет работать, если вы больше не используете REST?

20:04

Скорее всего, вы сможете научить фреймворк работать с кусками HTML с сервера через какое-нибудь грубое вмешательство.

20:05

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

20:06

И что делать если вы переросли свой фреймворк? Необязательно сразу писать свой.

20:07
@jsunderhood ну да. ge - вместо тысячи фреймворков pic.twitter.com/eywqcSe6OM

У нас далеко, не все идеально. Но мы работаем над собой =)

@jsunderhood ну да. ge - вместо тысячи фреймворков pic.twitter.com/eywqcSe6OM

20:08
@jsunderhood какой-то некорректный пример про твиттер и рельсы. Мы же о фронте говорим, как тут можно умудриться положить сервера??

Легко, попробуйте работать через REST с нормализованными данными на масштабах ВК.

@jsunderhood какой-то некорректный пример про твиттер и рельсы. Мы же о фронте говорим, как тут можно умудриться положить сервера??

20:10
Dissecting some of the most insidious, persistent #WebComponents FUD in an effort to curb stomp it once and for all: backalleycoder.com/2016/08/26/dem…

А пока я тут философствую на отвлеченный темы, можете, например почитать дискуссию про Web Components versus React

Dissecting some of the most insidious, persistent #WebComponents FUD in an effort to curb stomp it once and for all: backalleycoder.com/2016/08/26/dem…

20:13

Дискуссия на повышеных тонах. Я бы сказал.

20:14

All stars.

20:15
I see these googlers screaming about web components and "3 second load on 3G" meanwhile Inbox for gmail on 176Mbps! pic.twitter.com/ZrGXz0SxsO

Кстати, если вы пропустили «дискуссию» про getting on Polymer high horse с участием других звезд

I see these googlers screaming about web components and "3 second load on 3G" meanwhile Inbox for gmail on 176Mbps! pic.twitter.com/ZrGXz0SxsO

20:23

Минут со времени последней JS-драмы: 0.

20:24

Через полчаса я начну в очередной раз ломать ваш любимый сайт и продолжу.

20:25
@jsunderhood А Файрфоксовские инструменты используют Реакт и Редакс. Как Вконтакте и Фейсбук, да ;-)

Ну и какими инструментами пользуетесь вы? ;-)

@jsunderhood А Файрфоксовские инструменты используют Реакт и Редакс. Как Вконтакте и Фейсбук, да ;-)

20:37

Продолжим.

21:04

Я не хочу сказать, что фреймворки это плохо. Просто хочу пояснить, что есть случаи, когда без них нормально.

21:04

Иногда отсутствие фреймворка позволяет быть более гибким и эффективным.

21:04

Но все же, ваше доморощенное решение должно обрасти единой архитектурой и обязательно системой компонентов. Без нее никуда.

21:05

Система компонетов, менеджмент состоянием приложения и протокол взаимодействия с сервером.

21:06

Быстрее разработка, меньше багов, меньше копипасты.

21:06

Поэтому в какой-то момент, вы напишите свой фреймворк. Если такое случилось — не пугайтесь, это нормально.

21:07

Когда у него оформиться структура, вы сможете написать мануалы, инструменты. Люди с разным уровнем навыков смогут писать код в одном стиле.

21:07

А потом вы заопенсорсите свой фреймворк и его начнут использовать другие люди. Потом все повториться. JS fatigue FTW
medium.com/@ericclemmons/…

21:08

А далее идет рассказ о том, почему я не тороплюсь лоббировать React, хотя очень его люблю.

21:10
@jsunderhood можно вопрос по реалтайму в ВК? Почему вы лонг полинг юзаете, а не веб сокеты?

Во-первых, балансировка websocket-соединений — это то еще удовольствие. deepstream.io/blog/load-bala…

@jsunderhood можно вопрос по реалтайму в ВК? Почему вы лонг полинг юзаете, а не веб сокеты?

21:12

Во-вторых, websocket-ы это дуплексный канал обмена сообщениями. Нам нужно только в одну сторону.

21:13

А между тем, это websocket-ы это TCP-соединение, а значит вся инфраструктура внезапно должна научиться в сырое TCP-соединение. Но зачем?

21:14

Работает отлично — и прекрасно себя чувствует! Может быть разве что сделаем SSE, чтобы избежать оверхеда на реконнекты.

21:15

SSE — Server Sent Events. Хорошая, но забытая технология. developer.mozilla.org/en-US/docs/Web…

21:17

Вопрос, все заснули и лучше завтра? Или продолжить нудеть?

21:23

Еще скажу важную вещь: лучше иметь серверный рендеринг и не иметь клиентского рендеринга, чем наоборот.

21:25

Не ломайте интернет, как говорится. ponyfoo.com/articles/stop-…

21:26

Это мое лично ощущение, но современные фронтенд-фреймворки подталиквают вас к тому, чтобы не иметь серверного рендеринга. Пример: ember.js.

21:27

Это не значит, что он плохой. Но мне не нравится этот трейдофф.

21:28
@jsunderhood какое-то надуманное противостояние ИМХО. Кто конкретно хейтит фреймворки и говорит, что WC выход. 1/
21:29
@lapanoid @jsunderhood wc не нужно просто

вот и поговорили

@lapanoid @jsunderhood wc не нужно просто

21:29
@jsunderhood а что по поводу библиотек? Chrome Dev Tools использую d3

Используем конечно, highcharts вот мы даже денег платим.

@jsunderhood а что по поводу библиотек? Chrome Dev Tools использую d3

21:31

Не так много как большинство проектов. Но куда ж без велосипедов в инновациях?

21:32

В общем, нудеть буду все-таки завтра. Но вы пишите вопросы, любые. Постараюсь ответить.

21:37
@jsunderhood расскажи что сам думаешь про веб-компоненты? я читал про полимер и меня вдохновило, это же круто, все нативно )

Сначала они не замечают вас, потом они смеются над вами, потом они ненавидят вас. А потом вы победили.

@jsunderhood расскажи что сам думаешь про веб-компоненты? я читал про полимер и меня вдохновило, это же круто, все нативно )

21:49

Это шутка, на самом деле я не знаю. Polymer мне не нравится. Первый раз, когда я увидел спеку, я только поморщился.

21:50

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

21:51

Shadow DOM крутая фича, изоляция есть. Мне кажется они точно пригодятся, но не знаю насчет WC как альтернативу React.

21:52

Хороший пример использования WC — AMP ampproject.org.

21:53

Ну и WC проще сделать каким-то общим знаменателем для разных фреймворков.

21:54

. @lapanoid @andreypopp в 90-х правильным казалась Java, стоит быть open-minded ;-)

21:56

В общем, тогда увидимся завтра. Хотите взорвать себе мозг? Посмотрите оригинальный доклад про FRP. begriffs.com/posts/2015-07-…

22:06

Про него наверное тоже поговорим и про ФП, послезавтра думаю.

22:07

# Четверг 40 твитов

@jsunderhood не соглашусь. На мой взгляд, это просто хороший маркетинг фейсбука и бессонные ночи Дениса.

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

@jsunderhood не соглашусь. На мой взгляд, это просто хороший маркетинг фейсбука и бессонные ночи Дениса.

5:36
@jsunderhood замолвлю слово за ембер, ember-fastboot.com еще не до конца готово, но активно развивается

Опять же, не хочу никого обидеть, но выглядит это как костыль. Но время покажет.

@jsunderhood замолвлю слово за ембер, ember-fastboot.com еще не до конца готово, но активно развивается

8:34
@jsunderhood может есть какая-то своя либа для работы с (v)DOM?

Слава богу нет, решим идти в vDOM — возьмем готовую.

@jsunderhood может есть какая-то своя либа для работы с (v)DOM?

8:35
@jsunderhood а что на счет shadow DOM v1, мб есть желание куда-то внедрить? Если да, то куда?

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

@jsunderhood а что на счет shadow DOM v1, мб есть желание куда-то внедрить? Если да, то куда?

8:40

. @twenty @freiksenet_ru то ли дело Angular 2: ненужные абстракции, высокий порог входа, втащили RxJS, по дефолту разработка на TypeScript

8:41
@PMarinchenko @jsunderhood у меня, ребят, для вас плохие новости: MVC — это единственный способ программирования интерфейсов.

Лады, я пошел. Лучше буду дальше нудеть.

@PMarinchenko @jsunderhood у меня, ребят, для вас плохие новости: MVC — это единственный способ программирования интерфейсов.

8:45
@webholt @safinalexey @twenty @freiksenet_ru @jsunderhood Я писал на джаве и не прочь вновь, если нужно, а реакт даже пробовать противно

Господа, на вкус и цвет, товарищей нет, давайте закончим холивар. Мы вашу точку зрения поняли.

@webholt @safinalexey @twenty @freiksenet_ru @jsunderhood Я писал на джаве и не прочь вновь, если нужно, а реакт даже пробовать противно

9:15

Заявлять, что есть 1 правильный способ что-то делать — это не правильно. У всего есть и минусы и плюсы.

9:15
"React could love Web Components."
New short blog post. staltz.com/react-could-lo…

Тем временем, вести с полей интернет-баталий

"React could love Web Components."
New short blog post. staltz.com/react-could-lo…

10:00

Так, стартануть холивар React против всех: done.

10:09
@jsunderhood было всегда интересно, зачем у вас на продакшене сыпется лог в консоль?

Потому что можем!

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

10:44

Кстати, небольшое объявление, пока вы не остыли. Ребятам в @paperpaper_ru нужен кодер. paperpaper.ru/coder-wanted/

10:58

Там полный набор всех возможных технологий на любой вкус. Я старался.

10:59

Вопрос к залу? Как вы боритесь со стихийным рефакторингом? Когда одно тянет другое, третье и так далее?

18:14

Как себя останавливаете?

18:14
@jsunderhood нагадую собі, що цей код буде ревьювити хтось з колег і згадую день коли ревювила пул реквест на 6к стрічок

Хорошая попытка, но кому жалко ревьюера?

@jsunderhood нагадую собі, що цей код буде ревьювити хтось з колег і згадую день коли ревювила пул реквест на 6к стрічок

18:22

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

22:12

Ну во-первых, где тебе еще заплатят за то, чтобы написать свой собственный React?

22:12

Это шутка.

22:13

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

22:14

Предположим у вас работает 30 человек и вы хотите переехать на React? Еще у вас много кода, поэтому все сразу вы переписать один не сможете.

22:16

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

22:16

Но если вы не получите консенсус с остальными разработчиками, то вы эффективно отрежете их от разработки этого куска проекта.

22:19

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

22:19

Это нормальная человеческая психология. Даже банальный шаг компиляции JS добавляет концептуальной нагрузки.

22:20

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

22:21

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

22:21

Если вы пришли и сразу вкрутили React + Flow и Webpack (даже если вас никто не остановил). Не удивляйтесь, что вы внезапно остались одни.

22:23

Потому что при неравномерном насыщении проекта хипстерскими технологиями, концептуально простая часть выигрывает. В нее не надо вникать.

22:25

Именно поэтому, очень важно проводить внедрение новых вещей постепенно. Давая людям ознакомиться с ними и привыкнуть к новому.

22:26

В итоге, вы достигаете консенсуса на уровне идей и постепенно внедряете новое. Иногда это может занять многие месяцы.

22:28

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

22:34

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

22:36

Поэтому всегда думайте о своих коллегах и берегите их мотивацию, когда смотрите в сторону, например, ClojureScript или Elm.

22:37

Если решились, делайте маленькими шажками и продумайте стратегию евангелизирования этой идеи внутри компании.

22:39

Ну и всегда старайтесь keep it simple stupid. en.wikipedia.org/wiki/KISS_prin…

22:41

На @jsconfis был хороший доклад от @annthurium (Pivoting to React at Scale), посмотрите когда выйдет видео, если эта тема интересна.

22:44

А вообще, идея про это рассказать родилась в разговоре с @andreypopp на дринкапе @spb_frontend.

22:57

Вступайте к нам в группу, мы периодически ходим в бар. Легко заполняем Union в будний день. vk.com/spb_frontend

22:58

Ну и приходите к нам в слак, у нас там помогают с вопросами и обсуждают фронтенд и не только. slack.spb-frontend.ru

22:59

# Пятница 33 твита

@jsunderhood Короче, если коллегам ничего не интересно за окном и раньше трава была зеленее, то Реакт не нужен.

История была про то, что максимализм (aka я сейчас все перепишу тут на реакт) зачастую вредит

@jsunderhood Короче, если коллегам ничего не интересно за окном и раньше трава была зеленее, то Реакт не нужен.

8:52
@jsunderhood Короче офисная политика победила техническую выгоду.

Разработка — в первую очередь про людей, а потом уже технологии. Это работа в команде. Смиритесь.

@jsunderhood Короче офисная политика победила техническую выгоду.

8:53
@sapegin @jsunderhood

Попробуйте как-нибудь такое провернуть, потом поделитесь опытом.

@sapegin @jsunderhood

8:54
@jsunderhood какие-то так себе коллеги, если новые модные технологии могут ранить мотивацию

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

@jsunderhood какие-то так себе коллеги, если новые модные технологии могут ранить мотивацию

8:55

У человека, который смотрит на всю эту байду с cljs, например, может возникнуть другое мнение. И кто из вас прав — сложный вопрос.

8:56
@jsunderhood Никто не просил переписывать. Вконтакте большая команда, можно пробовать новое а не клепать велосипеды. Яндекс с ПХП какой-то.

Все что я говорил относится не к ВК, а к любой компании, в которой я работал с коллективом больше 3 человек.

@jsunderhood Никто не просил переписывать. Вконтакте большая команда, можно пробовать новое а не клепать велосипеды. Яндекс с ПХП какой-то.

8:57

А вы будучи не в курсе ситуации делаете поспешные выводы. Более того, никто не говорил, что мы не пробуем новое.

8:58
@jsunderhood Никто не спорит. Не значит что нужно жить в своем мирке и делать свои велосипеды постоянно.

Никто и не спорит, не значит, что нужно просто забить на людей и играть с технологиями.

@jsunderhood Никто не спорит. Не значит что нужно жить в своем мирке и делать свои велосипеды постоянно.

8:58
@jsunderhood и в итоге в вк этим не кто не занялся и у вас каждый разработчик пишет свой костыль?

Нет, это не рассказ про ВК.

@jsunderhood и в итоге в вк этим не кто не занялся и у вас каждый разработчик пишет свой костыль?

9:01
@jsunderhood Размер команды и компании никогда мне не мешал выбирать самые лучшие инструменты и пользоватся ими.

У меня иной опыт, вот им и делюсь.

@jsunderhood Размер команды и компании никогда мне не мешал выбирать самые лучшие инструменты и пользоватся ими.

9:01

Такая история происходила, например, в EPAM на проекте с NYT. Хотя людей было всего 5. Это нормально.

9:02

В общем, свои измышления на тему работы в коллективе, я видимо закончу.

9:30

Подытожу их серией интересных ссылок с одного из докладов на @jsconfis. Про распространенные заблуждения разработчиков.

9:32

Часика так через пол.

9:32

Поскидываю ссылки из доклада @zeigenvector про то, как ваш мозг мешает вам писать хорошее ПО.

10:08

Иногда мы не хотим использовать в чужой код, потому что слишком верим в свой. Это называется «эффект ИКЕИ». en.wikipedia.org/wiki/IKEA_effe…

10:10

Считаете себя лучше большинства? Это нормально и называется «иллюзия превосходства». en.wikipedia.org/wiki/Illusory_…

10:14

Почему вы всегда пропускаете дедлайн? Вы жертва optimism bias. en.wikipedia.org/wiki/Optimism_…

10:25

Продолжаете пилить фичу, потому что уже вложили в нее много сил, но ей никто не пользуется? Это sunk cost fallacy. youarenotsosmart.com/2011/03/25/the…

10:40

Видели плохого программиста на PHP и считаете всех остальных такими же? Это group attribution error. en.m.wikipedia.org/wiki/Group_att…

11:00

Иногда ваш мозг принимает решение за вас, быстрее чем вы можете среагировать. Это «эффект Струпа». en.wikipedia.org/wiki/Stroop_ef…

11:10

Иногда вам кажется, что вы глупее, чем люди о вас думают? Это «синдром притворщика». en.wikipedia.org/wiki/Impostor_…

11:25

Кажется, что ваши коллеги по (проекту, React-у, Angular-у) знают как надо лучше других? Это in-group favoritism. en.wikipedia.org/wiki/In-group_…

11:35

Видео доклада пока нет, но есть слайды. jenna.is/at-jsconfis.pdf

11:50

А еще есть моя трансляция с обоих дней @jsconfis с обоих дней. github.com/web-standards-… github.com/web-standards-…

11:51
@jsunderhood может быть у кого-то из подписчиков есть опыт борьбы с «синдромом самозванца»?

Есть кто?

@jsunderhood может быть у кого-то из подписчиков есть опыт борьбы с «синдромом самозванца»?

11:56
@jabher @jsunderhood соседство по палате
12:11
Решили отписаться от коллективных твиттеров? это эффект @jsunderhood
12:12

Теперь поработаю, и к вечеру еще поделюсь своими впечатлениями о @jsconfis. Если коротко — лучшая конференция, на которой я был.

12:15
@lapanoid Нет, речь была не об этом. Автор говорил как они не берут никаких новых технологий, тк коллег хватит кондрашка. @lambdadmitry

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

@lapanoid Нет, речь была не об этом. Автор говорил как они не берут никаких новых технологий, тк коллег хватит кондрашка. @lambdadmitry

16:38

И обязательно учитывать их при составлении плана обновления стека, например.

16:39
Веточка про рационализацию плохих программистов и плохого технического менеджмента, ок twitter.com/jsunderhood/st…

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

Веточка про рационализацию плохих программистов и плохого технического менеджмента, ок twitter.com/jsunderhood/st…

16:41

Молчу уже про формулировку. «Плохие программисты», «плохой менеджмент». Надо быть добрее и думать о других людях лучше.

16:42

# Суббота 59 твитов

Я проснулся и вот теперь хочу рассказать вам про мой первый #jsconf.

8:55

Во-первых, в Исландии красиво. Вот вам привет оттуда. pic.twitter.com/gQpoR4ZbYn

9:13

Во-вторых, вот мы с людьми с @jsconfis на леднике. pic.twitter.com/qOy6ZRO9jY

9:14

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

9:21

На заметку тем, кто организует конференции. Там были доклады 30 минут с перерывами по 15. Это спасало, когда спикер забывал про тайминг.

9:22

Все равно оставался зазор хотя бы в 5 минут.

9:23

По докладам. Было 2 потока. Поэтому поделюсь тем, что видел.

9:23

Из 1 дня запомнился просто космический доклад про реактивное программирование и css-переменные. slides.com/davidkhourshid…

9:25

Серьезно, посмотрите. Это просто бомба. Декларативная природа CSS, анимации и rxjs — это просто гремучая смесь.

9:27

Потом был прикольный доклад про Bluetooth API в браузере. От @chromakode, без стримов тоже не обошлось, на этот раз было про xstream.

9:32

Еще был супер доклад от @smashingmag про грязные трюки в CSS. Очень смешно и главное жизненно. speakerdeck.com/smashingmag/di…

9:35

Мой любимый: если хочется вставить в письмо картинку, чтобы она отображалась всегда — представьте ее таблицей. Пиксель = ячейка.

9:36

Второй день начался с супер доклада от Pebble, как они запустили JS на часах с ограничениями памяти в 64кб. pic.twitter.com/PcAm9oWL2J

9:39

Вот их блогпост, по мотивам которого видимо был доклад. developer.pebble.com/blog/2016/08/1…

9:39
@jsunderhood похоже на Норильск /jk

Может быть, но возду чище)

@jsunderhood похоже на Норильск /jk

9:40

Оказалось, что (неожиданно) Samsung запили JerryScript, который может запускать с такими ограничениями памяти. github.com/Samsung/jerrys…

9:41

Еще был интересный, но не очень технический доклад про MySam. AI на JS. github.com/mysamai/mysam

9:42

Ну и доклад от @zeigenvector, который я уже скидывал.

9:43
@jsunderhood ну может первый день смотреть на голые камни и красиво :D

Контр-пруф под этим твиттом.

@jsunderhood ну может первый день смотреть на голые камни и красиво :D

9:49

Еще все хвалили доклад @am3thyst Recreating art masterpieces with JavaScript, но я не был. Буду смотреть и вам советую.

9:56

Еще скажу про вечеринки. Первую делали Mozilla и они устроили конкурс верстки вслепую. Было весело.

10:00

Вторую делал Bloomberg, она была с викингами, весело, но не так как в первый день.

10:00
@jsunderhood pic.twitter.com/xwjpOVQNRZ

Видео оттуда. Сюда залить не могу(

@jsunderhood pic.twitter.com/xwjpOVQNRZ

10:05

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

10:13

Думал о том, чтобы немного рассказать про FRP. Но это уже не модно, потому что Elm от этого отказался.

10:33

Более того, никто до сих пор так и не понял, что значит FRP. Есть примерно 3 точки зрения medium.com/@andrestaltz/w…

10:33

Или могу рассказать про Original FRP или Denotative, Continuous-Time Programming (DCTP)?

10:36

Это конечно, странный формат для твиттера. Но попробую.

12:38

Жил был дядька, звали его Conal Elliot и выпустил он в 1997 году статью, она называлась Functional Reactive Animation вместе с Paul Hudak.

12:41

Никто ее особо тогда не заметил, но почему-то спустя лет так 15 оказалось, что вся эта фигня подходит не только для анимаций, но и для UI.

12:41

После выхода статьи появилось много всяких ответвлений вроде: real-time frp, arrowized frp и так далее.

12:48

Но как только термин попал в наш фронтенд все, как обычно, начали называть этим термином все подряд. Хотите подробности, ссылка чуть ниже.

12:49

И на самом деле, оригинальная формулировка имеет ряд фундаментальных проблем.

13:01

Достаточно подробно фундаментальные проблемы FRP описаны в дипломной работе автора Elm. seas.harvard.edu/sites/default/…

13:01

Но зачем тогда я про это рассказываю? Там есть ряд интересных идей, которые потерялись в Elm (например) по разным причинам.

13:02

Ядро всей идеи, это некий тип Behaviour a, где a — это любой тип.

13:04

Behaviour a = T => a. То есть это функция от времени, которая возвращает значение типа «а».

13:11

Behaviour — это что-то вроде Observable, но только без отмены подписки и бесконечный в обе стороны. reactivex.io/documentation/…

13:11

Более того, и это важно, время в Behaviour непрерывно, то есть может быть дробью.

13:13

То есть, в DCTP ваша программа рисующая интерфейс это «Behaviour UI».

13:15

Функция, которая получает на вход время, а возвращает интерфейс. В абсолютно любой момент времени.

13:16

Насчет идеи программы, как функции есть хороший доклад @andrestaltz youtube.com/watch?v=1zj7M1…

13:17

Но в отличие от DCTP в Elm, к примеру. Есть (был) аналог behaviour = signal. Но он дискретный.

13:18

Почему это важно? Любые дискретные данные — это потеря информации. Они не «идеальны».

13:19

К примеру, есть растровая графика и векторная. Векторная графика — это полная информация, растровая — это потеря исходной информации.

13:20

Гораздо удобнее работать именно с векторной графикой, потому что не нужно делать предположений о характеристиках монитора заранее.

13:21

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

13:21

Чуть больше можно почитать в классической статье Why Functional Programming Matters. cs.kent.ac.uk/people/staff/d…

13:32

Непрерывное время, как явный аргумент вашей программы кажется довольно элегантной идеей.

13:33

Таким образом вы декларативно можете описывать процессы, которые зависят от времени. Увеличивая их инкапсуляцию.

13:34

Это легко себе представить на примере анимации. Обычно синхронизировать две анимации сложно, здесь это явное следствие архитектуры.

13:37

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

13:39

Когда я думаю про это, всегда вспоминаю замечательную игры Braid. en.wikipedia.org/wiki/Braid_(vi…

13:39

Определить трансформацию над временем легко. «timeTrans :: Behavior UI -> Behavior T -> Behavior UI».

13:43

Это функция, которая принимает Behavior UI и T, а возвращает новый Behavior, в котором время себя ведет согласно второму аргументу.

13:44
@jsunderhood ui же не только от времени зависит, от действий пользователя, и проч сайд эффектов, что с ними?

Для реакции на внешние события, нужно вводить специальный тип Event, который добавляет реактивность.

@jsunderhood ui же не только от времени зависит, от действий пользователя, и проч сайд эффектов, что с ними?

13:46

Но пока я прервусь, если есть вопросы — задавайте.

13:46

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

Это функция, которая принимает Behavior UI и T, а возвращает новый Behavior, в котором время себя ведет согласно второму аргументу.

К сожалению, немного выпал из интернета, не успел закончить. В предыдущих сериях:

Это функция, которая принимает Behavior UI и T, а возвращает новый Behavior, в котором время себя ведет согласно второму аргументу.

18:00

У нас есть система, которая умеет моделировать себя относительно исходного состояния и времени.

18:01

Осталось понять, как она меняется? Для этого нужно ввести новый тип Event.

18:03

Event — это список состоящий из пар (T, a). То есть: Event -> [(T, a)]. T это действительное число. Время должно возрастать слева направо.

18:05

Я вчера оговорился, когда сказал, что Behavior a — это что-то вроде Observable, на самом деле именно Event a — это почти что Observable.

18:14

А у меня в голове сидели Signal из Elm. В общем, зря вас запутал.

18:15

Event — это тот же стрим данных. Есть два отличия: у них нет конца, два события могут случиться в одно и то же время. Время непрерывно.

18:15

Дальше мы можем определить функцию: switcher :: Behavior a -> Event (Behavior a) -> Behavior a.

18:16

Напомню, что мы думаем о программе, как о Behavior UI. То есть функции от времени, которая возвращает UI.

18:17

Теперь предеположим у нас есть Event UserInteraction.

18:18

Это поток событий, которые генерирует пользователь. Клики, скролл, любые взаимодействия.

18:20

Дальше, предположим у нас есть функция, которая умеет конвертировать Event UserIntercation -> Event (Behvaior UI).

18:35

Назовем ее foldp. Если вы понимаете о чем я. ;-)

18:36

Тогда программа: Program :: Behavior UI -> Event (Behavior UI) -> Behavior UI.

18:37

Вот мы и научились реагировать на внешние сигналы. Наша программа зависит от времени и действий пользователя.

18:38

Те, кто знаком с Elm должны узнать похожие вещи.

18:39

Собственно, вопрос — зачем вам это все знать? Дело в том, что отсюда растут ноги и Elm и Redux.

18:41

Само по себе DCTP не очень практично, это описано в работе создателя Elm (продублирую ссылку). seas.harvard.edu/sites/default/…

18:43

Если что, ее легко читать, не пугайтесь формата PDF.

18:43

Но идеи, которое оно порадило, такие как Concurrent FRP вполне применимы в реальном мире.

18:44

Если кратко, то основная проблема DCTP – компьютеры дискретные, проблемы с конкуррентностью вычислений и сложность реализации.

18:45

Но по выразительности, это, наверное, самая мощная формулировка FRP. Так что знать ее интересно.

18:46

Есть 1 пример реализации Original FRP на JS: Flapjax. flapjax-lang.org

18:52

А вот репозиторий со сравнениями разных библиотек с разными типами FRP. github.com/gelisam/frp-zoo

18:52

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

19:00

Вот еще 1 видео про FRP, может быть оно покажется чуть проще. begriffs.com/posts/2016-07-…

19:02

В общем, мое дежурство подходит к концу. Последнее, что предлагаю сделать: поговорить про accessibility.

19:05

Мы в последние несколько месяцев довольно много занимаемся этим вопросом, поэтому если у вас есть вопросы — задавайте, до полуночи отвечу)

19:05
@jsunderhood хорошие тулзы для "сканирования" сайтов с советами где и как улучшить accessibility ?

Проблема в том, что как выяснилось a11y сложно мониторить автоматически.

@jsunderhood хорошие тулзы для "сканирования" сайтов с советами где и как улучшить accessibility ?

19:16

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

19:17
@jsunderhood хотел спросить субъективное мнение о профессиональном выгорании, как избежать, к чему стремиться, как развиваться...?

Занимайтесь чем-то кроме программирования. Отдыхайте на выходных. Ездите в отпуск несколько раз в год.

@jsunderhood хотел спросить субъективное мнение о профессиональном выгорании, как избежать, к чему стремиться, как развиваться...?

19:19

Ну видимо, на этом все. Эту неделю с вами был я, @thought_sync. Надеюсь было не слишком скучно.

21:45

github.com

en.wikipedia.org

other


@Zmoki