# Понедельник 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:40Koajs, 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 >много работаю @ ни в чем себе не отказываю
13:13
Мне кажется, или эти две вещи не совместимы? :D Разве, что если увлечений др. нету.
@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 как у вас дела с аудитами безопасности?
11:02
Полагаетесь только на Bug bounty?
В общем, как я и обещал. Расскажу про опыт внедрения новых технологий в проекты с большим объемом кода. И пользователей.
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:242. Простые вещи в сложных проектах становятся сложными.
Это может казаться очевидным, но мы часто про это забываем.
Похожая ситуация происходит со многими вещами. Например, хранением онлайнов. Мы уже 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 Нет жизни без реакта, смирись.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:14All stars.
20:15I 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/…
А далее идет рассказ о том, почему я не тороплюсь лоббировать React, хотя очень его люблю.
21:10@jsunderhood можно вопрос по реалтайму в ВК? Почему вы лонг полинг юзаете, а не веб сокеты?
Во-первых, балансировка websocket-соединений — это то еще удовольствие. deepstream.io/blog/load-bala…
@jsunderhood можно вопрос по реалтайму в ВК? Почему вы лонг полинг юзаете, а не веб сокеты?
21:12
Во-вторых, websocket-ы это дуплексный канал обмена сообщениями. Нам нужно только в одну сторону.
21:13А между тем, это websocket-ы это TCP-соединение, а значит вся инфраструктура внезапно должна научиться в сырое TCP-соединение. Но зачем?
21:14Работает отлично — и прекрасно себя чувствует! Может быть разве что сделаем SSE, чтобы избежать оверхеда на реконнекты.
21:15SSE — 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:51Shadow 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."
10:00
New short blog post. staltz.com/react-could-lo…
Так, стартануть холивар 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
@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
Решили отписаться от коллективных твиттеров? это эффект @jsunderhood12: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 твитов
Во-первых, в Исландии красиво. Вот вам привет оттуда. 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@jsunderhood Spasibo ;-)12:54
И на самом деле, оригинальная формулировка имеет ряд фундаментальных проблем.
13:01Достаточно подробно фундаментальные проблемы FRP описаны в дипломной работе автора Elm. seas.harvard.edu/sites/default/…
13:01Но зачем тогда я про это рассказываю? Там есть ряд интересных идей, которые потерялись в Elm (например) по разным причинам.
13:02Ядро всей идеи, это некий тип Behaviour a, где a — это любой тип.
13:04Behaviour a = T => a. То есть это функция от времени, которая возвращает значение типа «а».
13:11Behaviour — это что-то вроде 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:03Event — это список состоящий из пар (T, a). То есть: Event -> [(T, a)]. T это действительное число. Время должно возрастать слева направо.
18:05Я вчера оговорился, когда сказал, что Behavior a — это что-то вроде Observable, на самом деле именно Event a — это почти что Observable.
18:14А у меня в голове сидели Signal из Elm. В общем, зря вас запутал.
18:15Event — это тот же стрим данных. Есть два отличия: у них нет конца, два события могут случиться в одно и то же время. Время непрерывно.
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
- https://github.com/VKCOM
- https://github.com/MohammadYounes/rtlcss
- https://github.com/VKCOM/gulp-portal
- https://github.com/VKCOM/graph-cache-less
- https://github.com/VKCOM/graph-cache
- https://github.com/facebookarchive/fb-flo
- https://github.com/twitter/finagle
- https://github.com/web-standards-ru/web-standards-up/blob/master/2016-08-25_jsconfis.md
- https://github.com/web-standards-ru/web-standards-up/blob/master/2016-08-26_jsconfis.md
- https://github.com/Samsung/jerryscript
- https://github.com/mysamai/mysam
- https://github.com/gelisam/frp-zoo
en.wikipedia.org
- https://en.wikipedia.org/wiki/KISS_principle
- https://en.wikipedia.org/wiki/IKEA_effect
- https://en.wikipedia.org/wiki/Illusory_superiority
- https://en.wikipedia.org/wiki/Optimism_bias
- https://en.wikipedia.org/wiki/Stroop_effect
- https://en.wikipedia.org/wiki/Impostor_syndrome
- https://en.wikipedia.org/wiki/In-group_favoritism
- https://en.wikipedia.org/wiki/Braid_(video_game)
other
- https://www.youtube.com/watch?v=qseu-ZaGoes
- https://www.youtube.com/watch?v=1zj7M1LnJV4
- https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0
- https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
- http://t3js.org/
- https://www.change.org/p/%D0%B4%D0%BE%D0%B1%D1%8C%D1%91%D0%BC%D1%81%D1%8F-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D1%81%D0%B0%D0%B9%D1%82%D0%B0-%D0%B2%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5-%D0%B4%D0%BB%D1%8F-%D0%BD%D0%B5%D0%B7%D1%80%D1%8F%D1%87%D0%B8%D1%85-%D0%BB%D1%8E%D0%B4%D0%B5%D0%B9
- https://hackerone.com/vkcom
- https://medium.com/@hoffa/400-000-github-repositories-1-billion-files-14-terabytes-of-code-spaces-or-tabs-7cfe0b5dd7fd#.7w2so1xgy
- https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4#.u7hkznhh4
- https://medium.com/@andrestaltz/why-i-cannot-say-frp-but-i-just-did-d5ffaa23973b#.55mryii6z
- https://deepstream.io/blog/load-balancing-websocket-connections/?utm_source=webopsweekly&utm_medium=email
- https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events
- https://ponyfoo.com/articles/stop-breaking-the-web
- https://www.ampproject.org/
- https://begriffs.com/posts/2015-07-22-essence-of-frp.html
- https://begriffs.com/posts/2016-07-27-tikhon-on-frp.html
- http://paperpaper.ru/coder-wanted/
- https://vk.com/spb_frontend
- http://slack.spb-frontend.ru/
- https://youarenotsosmart.com/2011/03/25/the-sunk-cost-fallacy/
- https://en.m.wikipedia.org/wiki/Group_attribution_error
- http://jenna.is/at-jsconfis.pdf
- http://slides.com/davidkhourshid/rxcss#/
- https://speakerdeck.com/smashingmag/dirty-tricks-from-the-dark-corners-of-front-end
- https://developer.pebble.com/blog/2016/08/15/introducing-rockyjs-watchfaces/
- https://www.seas.harvard.edu/sites/default/files/files/archived/Czaplicki.pdf
- http://reactivex.io/documentation/observable.html
- http://www.flapjax-lang.org/
- https://chrome.google.com/webstore/detail/fpkknkljclfencbdbgkenhalefipecmb