# Понедельник 26 твитов
Привет, на этой неделе с вами Никита @NikitaDyumin. Fullstack JavaScript. Челябинск.
10:03поговорим об изучении\обучении JS, собеседованиях (с обеих сторон), разделении труда на фронтенде
10:06кроме того, либы и фреймворки в продакшене; кровавый энтерпрайз, легаси; новости JS; FRP как видят его Bacon и Rx, Функциональный JS
10:09Работаю в международных командах, в разных часовых поясах. Agile. Scrum. Можно и об этом поговорить, если интересно.
10:18@jsunderhood как проводите DSM?
Корпоративный мессенжер или Skype. Язык - английский.
@jsunderhood как проводите DSM?
10:58
@jsunderhood Скайп? А на слаку переехать не думали? @mike1pol
Нужды, вроде нет. Скайп - крайне редко, в основном, Webex, был GoToMeeting, вполне удобно, неплохо интегрируется
@jsunderhood Скайп? А на слаку переехать не думали? @mike1pol
11:08
@jsunderhood тут скорей интересно как проходит согласование времени DSM
Если есть китайцы и европейцы, то выбора практически нет - наш день. Если есть австралийцы, европейцам совсем тяжко.
@jsunderhood тут скорей интересно как проходит согласование времени DSM
11:13
@jsunderhood Расскажи, как тебе удается внедрять FRP в продакшн? Коллеги соглашаются поддерживать функциональный код?
Весьма успешно, в гордом одиночестве. Но есть коллеги, которые разделяют мои симпатии к Bacon.js и Rx.
@jsunderhood Расскажи, как тебе удается внедрять FRP в продакшн? Коллеги соглашаются поддерживать функциональный код?
11:25
@jsunderhood Про собеседования интересно, сейчас сам их прохожу)
Собеседования на JS - нечто особенное. Предлагаю рассказать о своем опыте прохождения. Может, и проведения.
@jsunderhood Про собеседования интересно, сейчас сам их прохожу)
11:27
Интересно, что до сих пор многие собеседования концентрируются на знании самого JS и его особенностей, а не алгоритмах, структурах данных..
11:31@jsunderhood Да, особенное. Пришёл на собеседование. Убедились, что у нас с собеседующим нет вопросов друг к другу. Вышел на работу.
Давно? Надолго?
@jsunderhood Да, особенное. Пришёл на собеседование. Убедились, что у нас с собеседующим нет вопросов друг к другу. Вышел на работу.
11:32
@jsunderhood провожу собеседования. Даю задачи на js (на размышление и алгоритмы), говорю об индустрии, классические архитектуры обсуждаем.
можно примеры задач? задачи на бумажечке или за компом? Просишь рассказать что-нибудь о предыдущих зачах? Challanges
@jsunderhood провожу собеседования. Даю задачи на js (на размышление и алгоритмы), говорю об индустрии, классические архитектуры обсуждаем.
12:28
@jsunderhood Я пробовал все, если что у меня есть xgrommx.github.io/rx-book
Спасибо. Полезно. Подобную книгу я бы начал с обозначения проблемы.
@jsunderhood Я пробовал все, если что у меня есть xgrommx.github.io/rx-book
12:38
@jsunderhood Были случаи, когда приходилось кого-то будить для решения срочного вопроса?
я о таких не знаю, обычно на любой стороне света есть кто-то кто может решить проблему.
@jsunderhood Были случаи, когда приходилось кого-то будить для решения срочного вопроса?
14:10
Важно вам, как нанимателю, чтобы у кандидата был блог\публичный репозиторий? Кандидаты, важна публичная активность компании?
14:20@Bardty ... а потом - у нас вот тут звиздец из джейквери. Переделаешь его вот так как на собеседовании говорили? @jsunderhood
Надо полагать, так бывает. И, я бы сказал, это нормально.
@Bardty ... а потом - у нас вот тут звиздец из джейквери. Переделаешь его вот так как на собеседовании говорили? @jsunderhood
14:25
Сколько собеседований на одну вакансию считаете нормальным? Какие считаете обязательными, какие можно комбинировать? Сколько по времени?
15:13@jsunderhood А какое решение обычно предлагают?Ну или так:
var step=(next,clb)=>(s)=>(log(s),next(clb));
foo(step(bar, step(baz, log)));
Печально, но часто делают вроде такого:
setTimeout(foo, 101);
setTimeout(bar, 202);
setTimeout(baz, 303);
@jsunderhood А какое решение обычно предлагают?
Ну или так:
15:49
var step=(next,clb)=>(s)=>(log(s),next(clb));
foo(step(bar, step(baz, log)));
@jsunderhood @vladimore это нужно делать для того, что бы показать заинтересованность или точно знать, куда идёшь?
Важно понимать, что собеседования - двунаправленный процесс - ты узнаешь о компании, она о тебе
@jsunderhood @vladimore это нужно делать для того, что бы показать заинтересованность или точно знать, куда идёшь?
15:52
@jsunderhood предварительное по скайпу минут 30, после тестовое задание 1 день и уже потом в офисе (обычно в районе часа)
Какого рода задания на дом?
@jsunderhood предварительное по скайпу минут 30, после тестовое задание 1 день и уже потом в офисе (обычно в районе часа)
15:53
@mista_k @jsunderhood Код немного упоротый, но общая мысль такая: Если A и B уже пришли, их можно показать, не дожидаясь C
На читаемость кода я бы обращал внимание. Но да, не надо ждать всех событий, достаточно соблюдать очередность
@mista_k @jsunderhood Код немного упоротый, но общая мысль такая: Если A и B уже пришли, их можно показать, не дожидаясь C
17:35
@jsunderhood 3, hr - отсев не адекватов, техническое, программ менеджер - деньги
Как на счет тимлида или команды, чтобы определить сможете ли вместе работать? Характер, способность общаться и т.п.
@jsunderhood 3, hr - отсев не адекватов, техническое, программ менеджер - деньги
18:35
@jsunderhood это ещё не самый плохой вариант. Хуже, когда спрашивают про библиотеки и фреймворки
Назовите методы обхода массива из underscore? Назовите не менее 8 популярных либ, реализующих наследование? :D
@jsunderhood это ещё не самый плохой вариант. Хуже, когда спрашивают про библиотеки и фреймворки
18:45
@jsunderhood а когда необходимы алгоритмы в фронтенде?
Алгоритмическое мышление. Бывает, пока про замыкания спрашивают, упускают, что человек не может массив развернуть.
@jsunderhood а когда необходимы алгоритмы в фронтенде?
18:49
@NikitaDyumin @jsunderhood не забудь попрощаться с читателями. архив за неделю jsunderhood.ru/NikitaDyumin/
Теперь уже точно конец недели. Спасибо еще раз. Всё былое тут: jsunderhood.ru/NikitaDyumin/
@NikitaDyumin @jsunderhood не забудь попрощаться с читателями. архив за неделю jsunderhood.ru/NikitaDyumin/
3:19
# Вторник 77 твитов
Но ведь вопрос был в том, чтобы знать какие-то либы, кроме языка, в es6 тоже не все есть
@hey_daniil @_elergy_
@jsunderhood на 100+ Спрашиваем основы - события, dom, xhr, cors. Стандартный набор из learn.js.ru. Результаты печальные.
т.е. все-таки знание JS и веба, не навыки программировать или способность рассуждать?
@jsunderhood на 100+ Спрашиваем основы - события, dom, xhr, cors. Стандартный набор из learn.js.ru. Результаты печальные.
5:08
книги.. это мне нравится. Часто отвечают?
@krasivieglaza
@jsunderhood, все так спрашивают про замыкания, будто в этом весь яваскрипт и разработка в целом.
Не зная о замыканиях, долго бы думали над таким?
jsfiddle.net/et1jgpfy/
Hint: попереключайте Babel<>JS
@jsunderhood, все так спрашивают про замыкания, будто в этом весь яваскрипт и разработка в целом.
5:17
@_elergy_ @jsunderhood инвесторы захотят забрать назад свои деньги как только узнают что там юзают var
только const, только хардкор?
@_elergy_ @jsunderhood инвесторы захотят забрать назад свои деньги как только узнают что там юзают var
5:17
@jsunderhood мне,как нанимателю,важно,чтобы работник решал поставленные задачи.И личные репы роли не играют
А если рассматривать личные репозитории, как индикатор того, что кандидат хочет и пытается развиваться?
@jsunderhood мне,как нанимателю,важно,чтобы работник решал поставленные задачи.И личные репы роли не играют
5:18
@jsunderhood я часто провожу собеседования. Вопросы задаются просто как способ узнать как человек мыслит. На них нет правильных ответов.
Звучит отлично. Но как кандидат я бы напугался: что если, я мыслю *неправильно*?
@jsunderhood я часто провожу собеседования. Вопросы задаются просто как способ узнать как человек мыслит. На них нет правильных ответов.
5:20
@mr_mig_by @jsunderhood не знаю как у вас там, но если я дам наш нормальный таск, то за результатом можно через пару недель приходить.
Пример нормального таска?
@mr_mig_by @jsunderhood не знаю как у вас там, но если я дам наш нормальный таск, то за результатом можно через пару недель приходить.
5:21
@NikitaDyumin @iamstarkov @jsunderhood а они разве должны быть лучше?
нет, конечно, просто в моем случае, был отбор агенством, были сеньорные cv, 10+ лет стажа в мега проектах
@NikitaDyumin @iamstarkov @jsunderhood а они разве должны быть лучше?
5:29
@Bardty @jsunderhood не нужно выдумывать что-то с потолка, когда в нашей работе и так хватает проблем и можно спросить про их решения
@Bardty @jsunderhood не нужно выдумывать что-то с потолка, когда в нашей работе и так хватает проблем и можно спросить про их решения
5:33
@jsunderhood у нас была идея давать тестовое задание с gh на закрытие определенного issue либы которую мы используем
Сурово.
@jsunderhood у нас была идея давать тестовое задание с gh на закрытие определенного issue либы которую мы используем
6:11
Чужими руками причинять добро опенсорсу?
@_sashashakun @mike1pol
Если либы небольшие, а проблема понятна - из разряда "просто пойти и сделать".
@mike1pol @_sashashakun
@alex_ivantsov @jsunderhood никто не нанимает людей для решения конкретных проблем. Нанимают, чтобы решать такущие _и_ будущие.6:31
1 из 5 уже неплохо. Что читают?
@krasivieglaza
Да, получается, надо знать об этом. Знать всем. Или отключить TCO в опциях.
babeljs.io/repl/#?experim…
@evgeniy_moroz
@jsunderhood Ну если что-то из этого то круто. pic.twitter.com/fS3IKMmvQh
как на счет ozon.ru/context/detail…
@jsunderhood Ну если что-то из этого то круто. pic.twitter.com/fS3IKMmvQh
8:54
к тимлиду - хорошо, если есть к кому подойти. Ну, и со временем, хотелось бы стать таким, к которому подходят, ведь так?
@kinday
понял сам - пойми другим?
@kinday @KilgortTrout
Вторая встреча FrontendFellows пройдёт в Ижевске 26 февраля. frontendfellows.timepad.ru/event/284976/ – регистрируйтесь. Есть слоты для докладов!9:48
Третья встреча FrontendFellows пройдёт в Челябинске 25 марта. frontendfellows.timepad.ru/event/284979/ – регистрируйтесь. Есть слоты для докладов!9:48
@jsunderhood можешь еще накидать задачек для собеседования, буду решать, понял, что ни черта не знаю промисы)
Попробуем:
jsfiddle.net/80f80tjq/
@jsunderhood можешь еще накидать задачек для собеседования, буду решать, понял, что ни черта не знаю промисы)
10:00
Раз уж постепенно переходим к изучению\обучению:
Когда и как вы поняли, что знаете JavaScript? :D
Интересный список. Рекомендую, сам спрашиваю такие\подобные вещи.
@krasivieglaza
ES6\2015 изучили\используете в продакшене и почему нет?
10:36На взгляд, JS удобен тем, что фундаментальных вещей не так много, остального можно избегать (изучать по мере надобности)
@sergey_panay
ES6 кратко
github.com/DrkSephy/es6-c…
ES6 полно
exploringjs.com/es6/
Спасибо, было сегодня, но не в контексте ES6.Да, есть там и такая часть.
@yamalight
@jsunderhood зачем мне знать алгоритмы, когда есть книжка под боком?
Чтобы время не тратить, например. Соответственно стоит знать то, что используешь часто, за остальным в книжку.
@jsunderhood зачем мне знать алгоритмы, когда есть книжка под боком?
11:36
@jsunderhood примерно когда научился _понимать_ чужой код11:38
@jsunderhood когда перестану залезать на StackO или гуглить. Никогда. Impossible.11:43
@jsunderhood ой, мне бы просто программирование выучить, не говоря уже про JavaScript!
выучить программирование? есть курсы? я бы записался
@jsunderhood ой, мне бы просто программирование выучить, не говоря уже про JavaScript!
11:46
@krasivieglaza @jsunderhood База в голове по языку, привычка лезь в код на github — SO не нужен. Может оверхед большой, но долгосрочно плюс11:50
@jsunderhood а я и не знаю. Когда покажется, что знаю - пора из профессии.
JS заботится о нас, JS этого не допустит, новые стандарты не перестанут появляться.
@jsunderhood а я и не знаю. Когда покажется, что знаю - пора из профессии.
12:10
@jsunderhood не все возможности, но используем. Деструктуризация - очень мощная вещь. А вот про :: пока есть сомнения.
К слову, "Ваше любимое нововведение в ES2015?"
@jsunderhood не все возможности, но используем. Деструктуризация - очень мощная вещь. А вот про :: пока есть сомнения.
12:16
@jsunderhood Arrow Functions, Spread Operator, Destructuring Assignment.
О, аналогично, но в обратном порядке
@jsunderhood Arrow Functions, Spread Operator, Destructuring Assignment.
12:18
@jsunderhood =>, деструктуризация и rest, spread и default аргументы функцый
Зачем нужны дефолты?
@jsunderhood =>, деструктуризация и rest, spread и default аргументы функцый
12:19
@jsunderhood оооооч странный вопрос
Если есть аргументы, их кто-то должен передать мне, почему я должен сам решать что-то, если их нет?
@jsunderhood оооооч странный вопрос
12:23
@jsunderhood чтобы не делать var string = inputString || '';
это тоже решение, но не проблема. Проблема - пустой inputString. Не троллинг, так.. Провокация.
@jsunderhood чтобы не делать var string = inputString || '';
12:26
@jsunderhood в js нет overloading, поэтому, либо тебе придется писать a('smth','','','') или использовать default arguments.
что плохого? зато я явно задаю значения и, кстати, стало быть, типы
@jsunderhood в js нет overloading, поэтому, либо тебе придется писать a('smth','','','') или использовать default arguments.
12:35
@jsunderhood типы можно описать в документации (это, кстати, поможет IDE), ну или в тестах. А в реальном коде приятнее видеть a('smth') ;)
мифическая документация, всемогущие IDE, а как же самодостаточный код? Понятный, приятный, простой.
@jsunderhood типы можно описать в документации (это, кстати, поможет IDE), ну или в тестах. А в реальном коде приятнее видеть a('smth') ;)
12:39
@jsunderhood самодостаточный код без тестов и доков? ну посмотрим, как ты будешь поддерживать его спустя пару лет и десятков девелоперов;)12:44
@jsunderhood О TypeScript с function x(y: string, z = "default") стоит заикнуться12:48
;) Но с другой стороны я не хочу весь TypeScript в ES
@AntonShevchuk @jsunderhood курсы Ильи всё же про джаваскрипт, а не про то, как деливерить и создавать ценность.14:11
@jsunderhood Как собеседуем и нанимаем - bit.ly/20DYa6j
Эх, я же писал, что важно именно "алгоритмическое мышление", что пока мы JS проверяем, люди яйца пожарить не могут
@jsunderhood Как собеседуем и нанимаем - bit.ly/20DYa6j
14:16
@jsunderhood я провоцирую, но на деле за 25 летную карьеру знание алгоритмов мне не пригодилось. Про собеседования - bit.ly/1nKsa2w
Я же не говорил про хоть сколько-нибудь сложные алгоритмы. Яичница.
@jsunderhood я провоцирую, но на деле за 25 летную карьеру знание алгоритмов мне не пригодилось. Про собеседования - bit.ly/1nKsa2w
14:18
@mr_mig_by @AntonShevchuk @jsunderhood А меня вот Бюро Горбунова научило деливерингу, решению задач в мире клиента и всему такому14:19
@jsunderhood что думаешь про промисы?
Обожаю, решение вчерашней задачки от @mista_k выглядит привлекательнее, чем множество вариантов без промисов
@jsunderhood что думаешь про промисы?
14:25
@jsunderhood @mista_k уже видел пулл-реквест на внедрение промисов в ядро? github.com/nodejs/node/pu…
Драма. Промисы классные, но не панацея. Хотя меня лично такое API не смущает.
@jsunderhood @mista_k уже видел пулл-реквест на внедрение промисов в ядро? github.com/nodejs/node/pu…
14:32
@jsunderhood там пока не решили какое API выбрать, как я понял
я имел в виду сразу отдавать промисы, без префиксов\постфиксов
@jsunderhood там пока не решили какое API выбрать, как я понял
14:39
Обожаю как люди называют либы. Обожаю потом гуглить. Кто знает CDN для github.com/cujojs/most ?
15:05@jsunderhood есть же крутая npmcdn.com для (почти) любых либ15:13
@jsunderhood Може глянуть как я с Most+React+Ramda извращаюсь :D jsbin.com/musonu/6/edit?…
Я хотел поговорить об этом всем завтра, но да, давайте уже смотреть!
@jsunderhood Може глянуть как я с Most+React+Ramda извращаюсь :D jsbin.com/musonu/6/edit?…
15:21
@Semenov @jsunderhood он с винды пишет, я слышал там слэши в другую сторону.
мне кажется, или все фронтендеры (кроме меня, конечно) на маках?
@Semenov @jsunderhood он с винды пишет, я слышал там слэши в другую сторону.
15:28
@jsunderhood некоторые юзают винду на маках :)
всегда было интересно, зачем?
@jsunderhood некоторые юзают винду на маках :)
15:34
@jsunderhood .Net и тестить верстку под ИЕ
а цена на эппловское железо такая же?
@jsunderhood .Net и тестить верстку под ИЕ
15:38
@jsunderhood с удовольствием сижу на Win10. Никаких проблем не имею.
Рабочий win8, дома win10. VMки на никсах, Под ios дебажим на рабочих маках. Пока не свихнулись. Пока.
@jsunderhood с удовольствием сижу на Win10. Никаких проблем не имею.
16:00
@jsunderhood Я очень много потратил времени на функциональное и реактивное программирование) сейчас haskell
Потратил. Звучит трагично. Смотрел edx.org/course/introdu… ? Эрик крут, я считаю.
@jsunderhood Я очень много потратил времени на функциональное и реактивное программирование) сейчас haskell
16:01
@denswor @jsunderhood тестить под IE лучше на стеке виртуалок
Я тестирование не заявлял, но можем тоже побеседовать. Использовал Nightwatch на Browserstack. Вопросы? Ответы?
@denswor @jsunderhood тестить под IE лучше на стеке виртуалок
16:04
@jsunderhood стационарник и вин10
Винда вообще прогрессирует. Лет 15 назад пришлось бы переставлять чуть что. Сейчас иногда достаточно перегрузить.
@jsunderhood стационарник и вин10
16:09
What is the world coming to? Emacs keystrokes are wired into the base of my spine! twitter.com/bodil/status/6…
Раз уж говорим о рабочих местах. Редакторы? emacs? Кто-нибудь?
What is the world coming to? Emacs keystrokes are wired into the base of my spine! twitter.com/bodil/status/6…
16:12
@jsunderhood это факт, чем дальше, тем больше она мне нравится и даже вин8 меня не разочаровал в своё время16:21
@jsunderhood coffee лучше
какие конкретно плюсы в продакшене? сегодня в 2016 году?
@jsunderhood coffee лучше
16:42
@jsunderhood Пробывали сравнивать Nightwatch с "типа" официальным набором биндингов под Selenium - webdriver.io?
пробовали. я только помогал QA, решили, что с оберточкой удобнее
@jsunderhood Пробывали сравнивать Nightwatch с "типа" официальным набором биндингов под Selenium - webdriver.io?
16:50
@jsunderhood Много e2e тестов писали? Для SPA писали? Был доволен стабильностью исполнения тестов и результатами?
Много. Для spa. Стабильность, бывает, подводит. Фокусы всякие. На голом селениуме лучше не было (была Java+WedD)
@jsunderhood Много e2e тестов писали? Для SPA писали? Был доволен стабильностью исполнения тестов и результатами?
16:55
@jsunderhood @Bardty @Semenov юниксы наше все)17:18
@jsunderhood пользуюсь вот этим списков - github.com/h5bp/Front-end…17:46
@Bardty @Tom910ru
одна из моих задач:
jsfiddle.net/008szL5r/
Хм. Как на счет jsfiddle.net/zot6yLua/ ?
@Bardty @Tom910ru
17:50
одна из моих задач:
jsfiddle.net/008szL5r/
@jsunderhood emacs18:02
@jsunderhood emacs после 5 лет вима
почему не IDE? навигация по проекту, статический анализ кода, всякие вьюхи с дифами, конфиги для запусков?
@jsunderhood emacs после 5 лет вима
18:09
@jsunderhood навигация ерунда, стат анализ к иде не имеет отношения, и что такое конфиги для запусков?
стат анализ с результатами построчно. конфиги всякие - удобные менюшечки
@jsunderhood навигация ерунда, стат анализ к иде не имеет отношения, и что такое конфиги для запусков?
18:31
@jsunderhood ну и софт который старше тебя, Бесплатный, и до сих пор популярен достоин хотябы знакомства с ним
Кроме того, есть языки, под которые просто нет альтернативы. я emacs использую на никсовых vmках, где нет иксов
@jsunderhood ну и софт который старше тебя, Бесплатный, и до сих пор популярен достоин хотябы знакомства с ним
18:34
My top JS interview question: "do you think using a type checker would significantly affect the amount of bugs in your code?"19:05
# Среда 66 твитов
На заметку: начать понимать, что обсуждают те замечательные люди тут, в @jsunderhood и @cssunderhood. И сделать уже хоть что-то стоящее.4:14
@jsunderhood тут имхо больше вим подходит
Опять же, на мой взгляд, для такой цели лучше всего подходит то, что ты уже знаешь хотя бы примерно.
@jsunderhood тут имхо больше вим подходит
4:16
@jsunderhood es6 и coffee - сейчас сахар, в кофе сахара больше; в Бабеле не работает часть фич из es6, надо искать полифилы на них
К вопросу о любимых вещах ES6, каких фич, которые вам нравятся, не хватает в бабеле?
@jsunderhood es6 и coffee - сейчас сахар, в кофе сахара больше; в Бабеле не работает часть фич из es6, надо искать полифилы на них
4:19
@jsunderhood @krasivieglaza Для какого уровня предназначены эти вопросы? Какого уровня человек, если он отвечает на 50%? На 75%? На 90%?
Отвечает на 90% - знает JS и Web, умеет кодить (там есть задачки). Проектирование там не отражено совсем.
@jsunderhood @krasivieglaza Для какого уровня предназначены эти вопросы? Какого уровня человек, если он отвечает на 50%? На 75%? На 90%?
4:29
@jsunderhood Coffee грязная поделка, лучше уж суперсеты типа typescript ибо я хочу реюзать мой старый js, а в coffee так сделать нельзя4:36
@fliptheweb @jsunderhood Хватит с меня этих интерпретаторов ES Next самодостаточен. Я пережил хайп кофе и не поддался на его тренд5:24
@fliptheweb @jsunderhood А что искажать? Coffeescript не нужен и все =) также как и Ruby
Говорят, кофе был нужен когда JS был слаб и молод. Руби делали, чтобы людям нравилось на нем писать. Людям нравится.
@fliptheweb @jsunderhood А что искажать? Coffeescript не нужен и все =) также как и Ruby
6:26
@iamstarkov @jsunderhood а, нашёл что там есть промисы из es6, только в доках почему-то об этом ни слова
Потому, что это часть языка, а не ноды. В нодах 4,5 проблем не будет. В старых нодах можно Q, vow, jQuery :D и т.п.
@iamstarkov @jsunderhood а, нашёл что там есть промисы из es6, только в доках почему-то об этом ни слова
6:33
@jsunderhood по крайней мере у нас это так. JS не имел классов, а их умели использовать. ввели кофе, решили проблемы.6:54
Попробуем:
jsfiddle.net/80f80tjq/ twitter.com/METALLFACE/sta…
Ну, что же вы? я уже даже сам решил.
Попробуем:
6:58
jsfiddle.net/80f80tjq/ twitter.com/METALLFACE/sta…
@jsunderhood @krasivieglaza Апну. С процентами, пожалуй, слишком, но для какого уровня вообще эти вопросы?
Уровень каждая компания сама определяет. По мне, надо смотреть еще на умение рассуждать, принимать решения.
@jsunderhood @krasivieglaza Апну. С процентами, пожалуй, слишком, но для какого уровня вообще эти вопросы?
7:51
@RusAlexander @jsunderhood OOP дно в js - js должен быть функциональным с композициями и каррингом
Кто-то вообще рад этим вашим классам в ES6? Карринг из коробки был бы весьма приятен.
@RusAlexander @jsunderhood OOP дно в js - js должен быть функциональным с композициями и каррингом
7:54
@xgrommx @RusAlexander @jsunderhood Не надо юзать карринг, юзайте стрелки.
А как они противопоставляются? вот карринг со стрелками: const add = x => y => x + y;
@xgrommx @RusAlexander @jsunderhood Не надо юзать карринг, юзайте стрелки.
8:00
@jsunderhood рады все, особенно менеджеры, можно нанять персонал для простых вещей, которому даже неизвестно прототипное наследование
Классы и прототипы подразумевают ООП. Научиться ООП куда сложнее, чем просто понять как работают прототипы. Нет?
@jsunderhood рады все, особенно менеджеры, можно нанять персонал для простых вещей, которому даже неизвестно прототипное наследование
8:02
@jsunderhood Скажите, вы когда:нибудь употребляли Хаскелль? :)
внутривенно. А если серьезно, особенно интересен опыт для web'а.
@jsunderhood Скажите, вы когда:нибудь употребляли Хаскелль? :)
8:04
@subzey @jsunderhood есть elm для любителей монад и аппликативов - purescript все это компилится в js
ну, либо что-то вроде github.com/ghcjs/ghcjs
@subzey @jsunderhood есть elm для любителей монад и аппликативов - purescript все это компилится в js
8:12
@jsunderhood при чем тут лямбды к каррингу? Карринг это разбивание ф-ции от n аргументов на n на ф-ций от 1 аргумента и результат есть ф-ция
Я так и разбил. Руками. А говорил, что было бы интересно, если бы JS умел это делать сам (как ML, Haskell).
@jsunderhood при чем тут лямбды к каррингу? Карринг это разбивание ф-ции от n аргументов на n на ф-ций от 1 аргумента и результат есть ф-ция
8:17
@jsunderhood @xgrommx @RusAlexander мне нравится разве что гораздо проще и читабельнее екстендить к примеру веб или реакт -компоненты8:18
@jsunderhood У elm'а больше упор на реактивность там Signals из коробки по умолчанию
Из всех "реактивных" инструментов\либ во фронтенде, какую (бы) выбрали и почему?
@jsunderhood У elm'а больше упор на реактивность там Signals из коробки по умолчанию
8:20
Кстати, сегодняшняя тема #frp #rxjs #baconjs #mostjs
Делимся мнениями, вопросами, success story
@jsunderhood @freiksenet_ru @xgrommx @RusAlexander но это не картирование, я не смогу вызвать функцию сразу со всеми аргументами
Можешь, конечно: add(1)(2) :D
Скобки - ограничение моей реализации. Та же Rambda позволит передать все за раз.
@jsunderhood @freiksenet_ru @xgrommx @RusAlexander но это не картирование, я не смогу вызвать функцию сразу со всеми аргументами
8:35
@jsunderhood @freiksenet_ru @xgrommx @RusAlexander все ещё вызываешь её дважды, ну да ладно
Нет, я вызываю ее один раз, она возвращает мне функцию, вызвав которую я получу свое вычисление. Все по ГОСТу.
@jsunderhood @freiksenet_ru @xgrommx @RusAlexander все ещё вызываешь её дважды, ну да ладно
8:39
@jsunderhood Что значит «реактивный»? Тот, который работает с данными как с потоками?
кратко:
вроде того
полно:
gist.github.com/staltz/868e7e9…
@jsunderhood Что значит «реактивный»? Тот, который работает с данными как с потоками?
8:57
@xgrommx @iamstarkov @jsunderhood @freiksenet_ru @RusAlexander Именно что каррирование — это превращение в набор функций с одним аргументом.9:00
@webholt @iamstarkov @jsunderhood @freiksenet_ru @RusAlexander вызов ф-ции будет функция пока их длина не будет равна колличеству аргументов9:00
@xgrommx @iamstarkov @jsunderhood @freiksenet_ru @RusAlexander То есть мы каррируем функцию именно для того, чтобы частично её применить.9:01
@webholt @iamstarkov @jsunderhood @freiksenet_ru @RusAlexander нет это не основная цель аргументы располагаются по степени мутабельности #19:01
@webholt @iamstarkov @jsunderhood @freiksenet_ru @RusAlexander что дает реюзать ф-цию и писать в point-free стиле #29:01
@webholt @iamstarkov @jsunderhood @freiksenet_ru @RusAlexander сравни compose(map(fn), filter(p))([1,2,3]) vs map(fn, filter(p, [1,2,3]))9:01
@xgrommx @iamstarkov @jsunderhood @freiksenet_ru @RusAlexander Сейчас меня загрызут, но чаще мне ООП-мешанина для этой задачи по душе.9:01
@jsunderhood @xgrommx @RusAlexander Ну зачем? Сделай замыкание, тот же partial application. Не надо городить неочевидное и нечитаемое говно.
Замыкание само по себе никуда не передашь, в отличие от аргументов. Приходится городить ёлочки и пирамидки.
@jsunderhood @xgrommx @RusAlexander Ну зачем? Сделай замыкание, тот же partial application. Не надо городить неочевидное и нечитаемое говно.
9:08
Замыкание само по себе никуда не передашь, в отличие от аргументов. Приходится городить ёлочки и пирамидки. twitter.com/freiksenet_ru/…
Стало быть, замыкание не используешь повторно вне текущего контекста.
Замыкание само по себе никуда не передашь, в отличие от аргументов. Приходится городить ёлочки и пирамидки. twitter.com/freiksenet_ru/…
9:10
@freiksenet_ru @jsunderhood @xgrommx @RusAlexander Ramda.curry((x, y) => x+y)); делайте каррирование очевидным
Представим, что в JS можно было бы
`const add = (x, y) => x +y;`
вызвать и так `add(1,2);`, и так `add(1)(2);`
@freiksenet_ru @jsunderhood @xgrommx @RusAlexander Ramda.curry((x, y) => x+y)); делайте каррирование очевидным
9:13
@jsunderhood Точно спасут pic.twitter.com/fECxJe9s179:24
@jsunderhood Запилил я как-то подборку по функциональщине github.com/xgrommx/awesom…9:38
@iamstarkov @freiksenet_ru @jsunderhood @RusAlexander Всем катаморфизм пасаны! traditio.wiki/%D0%9A%D0%B0%D…9:39
@jsunderhood Кстати про экосистему Elm и Purescript github.com/xgrommx/puresc… и github.com/xgrommx/elm-ec… обновления почти каждый день11:03
Итак, к проблеме jsfiddle.net/80f80tjq/
У нас есть два простых эмиттера событий, но события тяжело согласовывать и синхронизировать
Совокупность событий одного эмиттера можно представить как поток, такой поток можно преобразовывать, объединять с другими.
11:10Тогда, в решении создадим по потоку для каждого эмиттера и укажем, что хотим объединять их суммируя попарно (zip): jsfiddle.net/o8Lbyzp3/
11:12Нас не интересуют конкретные данные, нас не интересует время. Нас интересует только соотношение потоков: как из данных получить новые данные
11:15@jsunderhood Все можно представить как поток, даже Array = Stream + Time(0)11:19
Мы получаем описание того, как из исходного состояния получить желаемого: более декларативно, менее императивно
11:20@jsunderhood Rx?11:21
Rx = Observable + Linq + Schedulers
Observable = Collection + Time
У коллекций во времени границы только время их жизни
Исходное состояние получаем из источников: событий DOM, таймера, констант: Bacon.fromEvent(document.body, "click"); Bacon.constant(42); ..
11:25результирующие состояние применяем к внешнему миру: Bacon.constant(42).onValue(log); или .subscribe в #rxjs или .observe #mostjs
11:28@jsunderhood Observables это вывернутые итераторы, если вы понимаете их и знаете lodash + push коллекции, то в этом нет ничего сложного11:29
@jsunderhood Самая важная фишка что Promise и Observable есть push коллекции, но промисы нельзя отменить и это бывает накладно без dispose11:31
Зачем это все? Императивно, мы изменяем данные, реагируем на события сохраняем состояния, делаем бесконечные проверки, дебажим.
11:41Декларативно, при помощи потоков мы можем описать конечный автомат, который укажет состояние в каждый момент времени.
11:43@lisovskyvlad @freiksenet_ru @fliptheweb @jsunderhood Ждите я тоже скоро буду тут вести неделю, поговорим о много - тулзы, frp и прочее12:10
@mygunishot @jsunderhood подробное повествование со слайдами в студию! ;)16:11
@jsunderhood изначальное значение (Conal Elliott, 1997) интересно и не совсем понятно, а js либы для работы со стримами в целом понятны16:20
@jsunderhood кстати, в плане api мне нравится github.com/paldepind/flyd16:22
@jsunderhood с angular2 скоро станет всем интересно и понятно. Там же rxjs из коробки16:39
Все же о Бэконе. Создадим стрим, который порождает модель. Назначим рендеринг сайд эффектом:
jsfiddle.net/hmufrf35/2/
Пару кнопок, клики- стримы значений (+1\-1), объединим их в один, модель - редьюс этих значений с помощью суммы. jsfiddle.net/kc25xo3y/2/
17:35@denswor @jsunderhood наш .net-программист с подробностями - @qwellini118:24
@jsunderhood не по теме js, но мне нравится как ребята с гитхаба rx переделали в reactive cocoa.19:09
@gavrix @jsunderhood в частности, выделение сигналов с subscription side effects в отдельные апи - сигнал продюсеров.19:09
@gavrix @jsunderhood no hot/cold signal confusion anymore19:09
@denswor @mygunishot @jsunderhood19:10
а еще они web сервер запилили на libuv как на ноде
# Четверг 93 твита
@jsunderhood Задача: есть пользователь и у него есть рост, рост может меняться. У пользователя есть друзья - пользователи.5:04
@jsunderhood Как поддерживать актуальной информацию является ли пользователь самым высокими среди друзей друзей?5:04
@jsunderhood чистого frp в js нет это скорее reactive composition
Я давно стесняюсь эти три буквы произносить. Очень уж многое называют ими. Conal Elliott негодует.
@jsunderhood чистого frp в js нет это скорее reactive composition
5:05
@YodaPunk @jsunderhood после 18-20 рост почти не меняется. А если меньше, то спрашивать раз в Х времени.
Положим, по условиям меняется. Про опрос: мне кажется, имеется в виду, что момент изменения роста известен, нет?
@YodaPunk @jsunderhood после 18-20 рост почти не меняется. А если меньше, то спрашивать раз в Х времени.
5:13
Сегодня предлагаю обсудить фреймворки и либы в продакшене.
7:29Рассказывайте, как использовали либы, у которых еще не было релиза и никто не пострадал.
7:29Рассказывайте, как злые менеджеры\юристы\тимлиды не дают вам использовать любимые инструменты.
7:29Рассказывайте, как пришли в проект, а там 100 лет назад, кто-то выбрал либу, которая забагована и не развивается, а вы страдаете.
7:30@jsunderhood Это типа сами написали либу, сами опубликовали, сами использовали.
нет, это типа вы нашли серебряную пулю, а у нее поменялся API :) ну, или создатель утратил интерес к ней.
@jsunderhood Это типа сами написали либу, сами опубликовали, сами использовали.
7:31
Иными словами, делимся опытом. Как решаете добавлять ли либу для чего-либо? Как решаете какую либу использовать?
7:33@jsunderhood интересно послушать, как юристы кому-то не дали использовать какой-то инструмент)
Ну, не все лицензии всем продуктам подходят, например.
@jsunderhood интересно послушать, как юристы кому-то не дали использовать какой-то инструмент)
7:39
@jsunderhood как-то я взял jquery думая, что мы делаем простой сайтец с парой форм, но в итоге всё зашло слишком далеко7:39
@jsunderhood в огромном SPA-проекте не используем вообще внешние зависимости. Новички первые три месяца охреневают, а потом норм.
Но ведь всякие Реакты и Ангуляры как раз и нужны, чтобы легче было поддерживать огромные SPA. Или нет?
@jsunderhood в огромном SPA-проекте не используем вообще внешние зависимости. Новички первые три месяца охреневают, а потом норм.
7:42
@jsunderhood Условия заметного аскетизма диктуют необходимость очень аргументированно обосновывать необходимость той или иной либы.
Ну, вот это самое интересное: доводы, причины и подводы.
@jsunderhood Условия заметного аскетизма диктуют необходимость очень аргументированно обосновывать необходимость той или иной либы.
7:43
@jsunderhood Доводы для чего? Для использования или для отказа?
Для использования, для отказа, для замены, для выбора среди прочих аналогов.
@jsunderhood Доводы для чего? Для использования или для отказа?
7:44
@jsunderhood начал фигачить на redux до официального релиза. Сейчас - новый react-intl v2 beta. Полет нормальный.7:47
@jsunderhood давай, расскажи про свою боль ;)
Ближе к вечеру. С мыслями надо собраться.
@jsunderhood давай, расскажи про свою боль ;)
7:47
@jsunderhood идея в том, что ангуляр бросит это дело и перейдёт на ангуляр2 (например), а мы сами можем развивать свой фреймворк как хотим7:48
@jsunderhood не писать код для всех случаев, которых у нас не будет и не вводить абстракции, которые нам не нужны7:48
@jsunderhood Оно должно быть действительно полезно. Всем.
Не очень конкретно звучит. "Ангуляр полезный?" - "Да, давайте использовать".
@jsunderhood Оно должно быть действительно полезно. Всем.
7:50
@jsunderhood А вот с тем, что будет входить в результат сборки, уже сложнее. Жесткие ограничения на размер. Ничего лишнего.7:50
Статьи по теме, если кто-то пропустил:
habrahabr.ru/company/pvs-st…
habrahabr.ru/post/275485/
@jsunderhood Вполне корректно. Выбор ангуляра происходил до меня, но, вероятно, как-то так и выглядел :D
И каково теперь? С оптимизмом смотрите в будущее? Действительно много преимуществ по сравнению с vanillaJS?
@jsunderhood Вполне корректно. Выбор ангуляра происходил до меня, но, вероятно, как-то так и выглядел :D
7:52
@jsunderhood полностью согласен с @kojoru Хотя сейчас мы для View стали использовать React в некоторых местах
Для чего реакт? виртуальный дом? другие реализации смотрели?
@jsunderhood полностью согласен с @kojoru Хотя сейчас мы для View стали использовать React в некоторых местах
7:54
@kojoru @jsunderhood а потом им и деваться некуда ¯\_(ツ)_/¯ ловко. Какие фреймворки вы использовали? Ну... bicycle-corp-strap-2.
Кстати, бывает, корпоративным клиентам важно, чтобы либы, которые вы использовали было легко нагуглить.
@kojoru @jsunderhood а потом им и деваться некуда ¯\_(ツ)_/¯ ловко. Какие фреймворки вы использовали? Ну... bicycle-corp-strap-2.
7:55
@jsunderhood Речь про либу, а не про чистый JS? (Неудачное название у неё). Не стану сравнивать тёплое с мягким.
@jsunderhood Речь про либу, а не про чистый JS? (Неудачное название у неё). Не стану сравнивать тёплое с мягким.
7:57
@jsunderhood Хм. Вот сейчас я внимательно вгляделся и понял, в чем подвох. И название вполне уместное :D7:59
@hellbeast92 @jsunderhood Плюс легаси. У фреймворков редко есть хорошая история как безболезненно переводить туда большие проекты8:00
@iloldhardly @kojoru @jsunderhood bicycle-corpse-trap8:01
@jsunderhood Не, на ванильном js далеко не уехали бы.
А вот @kojoru едет. Думается, он не единственный.
@jsunderhood Не, на ванильном js далеко не уехали бы.
8:01
@jsunderhood @kojoru Не сомневаюсь. Кто мы такие, если не пишем свои велосипеды?8:08
@jsunderhood на самом деле причина проста - jsx. Оказалось что удобно. Саппорт очень быстро это всё освоил и доделывает для клиентов.8:09
@kojoru @jsunderhood А как вы привлекаете новых разработчиков? У меня прилично знакомых, для которых факт работы над чем-то самописным...
Мы привлекаем тех, кто готов работать с кодом, с продуктом, а не с тем фреймворком, который изучил :D
@kojoru @jsunderhood А как вы привлекаете новых разработчиков? У меня прилично знакомых, для которых факт работы над чем-то самописным...
8:11
@iamakulov_ @jsunderhood с другой стороны я помню, как на прошлой работе мы с гордостью писали что у нас Angular. Теперь бы все смеялись8:11
@jsunderhood Лайк. Но разработчики стремятся ещё и за опытом и классными фишками. С Реактом их будет больше, чем с самописным фреймворком.8:16
@webholt @jsunderhood "о, смотрите, появился новый фраемворк! давайте его использовать!"
"Он решит все проблемы на земле"
@webholt @jsunderhood "о, смотрите, появился новый фраемворк! давайте его использовать!"
9:41
@_sashashakun @jsunderhood было такое в практике лет 13назад.Библиотеки генерации диаграмм и XLS были зарублены юристами.А альтернативы хуже9:41
@kojoru @jsunderhood вы очень сильно подрываете командную работу этим. С самопалом удобно работать только его автору.
Неплохой аргумент. Наверно. А API third-party всегда удобны и всем понятны?
@kojoru @jsunderhood вы очень сильно подрываете командную работу этим. С самопалом удобно работать только его автору.
9:44
@_sashashakun @jsunderhood могу соврать,кажется для XLS надо было свой продукт вывести в опенсаурс,а фин.корпорации это не надо9:46
@jsunderhood через 2-3 года ты вроде и следил, и разобраться можешь, боролся за перенесение фич в этот фреймворк, но опыт крут только внутри
Опыт разработки переносим. А если вы не штампуете однотипные сайтики, то специфика у работы\продукта будет всегда.
@jsunderhood через 2-3 года ты вроде и следил, и разобраться можешь, боролся за перенесение фич в этот фреймворк, но опыт крут только внутри
9:50
@jsunderhood По крайней мере вся команда в равном положении. Кривизну API обычно компенсирует документация и best-practices
Почему вся команда не может контрибьютить в этот (свой) фреймворк?
@jsunderhood По крайней мере вся команда в равном положении. Кривизну API обычно компенсирует документация и best-practices
9:51
@jsunderhood кстати, не стоит забывать, что в своё время фейсбук не просто использовал свой велосипед (фу!), но и вьюхи пихал в js (ФУУУУ!)9:52
@iamakulov_ @jsunderhood уверен, что таким ребятам в любом случае интереснее будет в маленьких новых проектах, а не в ползучем легаси.
А не любой ли успешный проект превращается в легаси? На всех задорных стартапов не хватит.
@iamakulov_ @jsunderhood уверен, что таким ребятам в любом случае интереснее будет в маленьких новых проектах, а не в ползучем легаси.
9:55
@jsunderhood Самопал имеет право на жизнь при условии, что он open-source first. Какой интерес конрибьютить в поделку-однодневку?
Вот тут надо сказать, что бывают проекты, которые делают Х и надо написать к У. А бывают, которые пишут годами.
@jsunderhood Самопал имеет право на жизнь при условии, что он open-source first. Какой интерес конрибьютить в поделку-однодневку?
9:58
@jsunderhood с текущим темпом развития индустрии, любой проект через 2 недели разработки - уже легаси.
Использующий безнадежно устаревшие технологии\подходы\либы\фреймворки. Правда, все тот же JavaScript
@jsunderhood с текущим темпом развития индустрии, любой проект через 2 недели разработки - уже легаси.
10:01
@jsunderhood только зафиксировал версии зависимостей - все, в дом престарелых пристраивают(
Я бы всегда фиксировал. API меняется.
@jsunderhood только зафиксировал версии зависимостей - все, в дом престарелых пристраивают(
10:04
@jsunderhood, если речь идет об OS, пускай даже с контрибьюторами внутри компании, тогда все хорошо. Fb реакт не в закромах под NDA делал же
Ну, так и не для себя же. А потому, что нас любит.
@jsunderhood, если речь идет об OS, пускай даже с контрибьюторами внутри компании, тогда все хорошо. Fb реакт не в закромах под NDA делал же
10:08
@jsunderhood Тем более, у этого мега-поделия не будет главного преимущества - минимализма. Нафига все это надо было тогда?
Почему нет минимализма? Как раз пишется под себя, под свои задачи. Уже говорили тут, что нет лишних мега абстракций.
@jsunderhood Тем более, у этого мега-поделия не будет главного преимущества - минимализма. Нафига все это надо было тогда?
10:10
@jsunderhood А у вас, кстати, свои технологии или популярные рыночные?
У нас много web проектов. Есть всякое. Есть свои, есть с BB, есть Angular и, вроде, React. А есть Qooxdoo, конечно.
@jsunderhood А у вас, кстати, свои технологии или популярные рыночные?
10:11
@iloldhardly @jsunderhood реакт делали именно в закромах под NDA. Опен-сорсили его позже, после переделки для инстаграм-команды.10:13
@Bardty @jsunderhood темп развития тут не причём, любой написанной код это легаси. Таково свойство кода.10:14
А еще, стоит различать библиотеки и фреймворки. От первых (теоретически) избавиться проще.
10:15@jsunderhood за много лет задач будет много, будет много абстракций и легаси. и ненависти всех-не-авторов.
И, тем не менее, весь код будет решать реальные задачи вашего проекта. И весь код свой - правь\удаляй\круши
@jsunderhood за много лет задач будет много, будет много абстракций и легаси. и ненависти всех-не-авторов.
10:18
@kojoru @iloldhardly @jsunderhood Расскажите, как сделать самописный фреймворк, который будут любить, а не ненавидеть?
Во-первых, ненавидеть будут всегда. Во-вторых, надо спросить авторов фреймворков, которые тебе нравятся :)
@kojoru @iloldhardly @jsunderhood Расскажите, как сделать самописный фреймворк, который будут любить, а не ненавидеть?
10:25
@jsunderhood Еще раз, это верно (да и то сомнительно) только для авторов, другие будут проклинать этот огромный кривой велосипед.
Решительно не понимаю, кто другие?
@jsunderhood Еще раз, это верно (да и то сомнительно) только для авторов, другие будут проклинать этот огромный кривой велосипед.
10:27
@jsunderhood всегда есть автор/вдохновитель и так далее и все остальные, включая новых сотрудников.
Новые\другие всегда будут приходить и ненавидеть и хотеть все переписать на Ангуляре\Реакте\Что-там-модно-сейчас
@jsunderhood всегда есть автор/вдохновитель и так далее и все остальные, включая новых сотрудников.
10:31
@jsunderhood кстати с точки зрения соискателя я бы в контору с велосипедами не пошел был. какая перспектива вникать в это?
Опыт. Названия не важны. API не важны. Важны принципы. Важны: MVC, Observer, Two-way data binding, virtual DOM, etc.
@jsunderhood кстати с точки зрения соискателя я бы в контору с велосипедами не пошел был. какая перспектива вникать в это?
10:34
@kojoru @iloldhardly @jsunderhood В моём опыте был долгосрочный проект с самописным фреймворком. Половина команды его сильно не любила.
В моем опыте был проект на неподходящем фреймворке, который все ненавидели. Кололись, плакали, но жрали.
@kojoru @iloldhardly @jsunderhood В моём опыте был долгосрочный проект с самописным фреймворком. Половина команды его сильно не любила.
10:40
@jsunderhood А как понять, что в команде крутые чуваки, которые знают и применяют эти принципы и при необходимости смогут научить?
Можно спросить. Можно послушать, о чем тебя спрашивают. Послушать о проекте, задачах которые решают.
@jsunderhood А как понять, что в команде крутые чуваки, которые знают и применяют эти принципы и при необходимости смогут научить?
10:44
@jsunderhood его ненавидели потому что он не подходил или потому что он сам по себе был плох?
Никто не знает. По назначению его не применяли :) Хотя, @lqip32 вы же применили? почему переписываете все теперь? :)
@jsunderhood его ненавидели потому что он не подходил или потому что он сам по себе был плох?
10:47
@jsunderhood А на что стоит ориентироваться? Посоветуй какие-то маркеры, пожалуйста. У меня небольшой опыт собеседований.
Дело личное. Цель собеседования - понять подходишь ли ты команде под задачу и подходят ли команда, условия тебе.
@jsunderhood А на что стоит ориентироваться? Посоветуй какие-то маркеры, пожалуйста. У меня небольшой опыт собеседований.
10:51
@iamakulov_ @jsunderhood спроси о том, что вдохновляет в их работе, о масштабировании, о планах на будущее
Спроси, как(чьи) идеи оцениваются и попадают в продукт. Спроси о балансе время на новые фичи\ на исправление багов.
@iamakulov_ @jsunderhood спроси о том, что вдохновляет в их работе, о масштабировании, о планах на будущее
10:53
@iamakulov_ @jsunderhood спроси о том, что вдохновляет в их работе, о масштабировании, о планах на будущее10:54
@jsunderhood А на что стоит ориентироваться? Посоветуй какие-то маркеры, пожалуйста. У меня небольшой опыт собеседований.
Используют ли они OSS фреймворки\либы и как выбирали, есть ли недовольные :) Обращай внимание на авторитарность.
@jsunderhood А на что стоит ориентироваться? Посоветуй какие-то маркеры, пожалуйста. У меня небольшой опыт собеседований.
10:58
@jsunderhood из-за того, что перед нами стоят новые задачи, которые сложно сделать с использованием старого фреймворка.11:06
@jsunderhood А авторитарность при чём?
Опасно же. Человек не приемлет других мнений, а вдруг он чего-то не знает или не прав. А ты учишься :)
@jsunderhood А авторитарность при чём?
11:11
Кто-то уже запустил Cycle.js в продакшен?
11:18@Bardty @jsunderhood Ну какие темпы развития? MVC был описан в 1979. 90% проектов - это роуты, контролеры, шаблоны ...
Описан в академических кругах? Адаптация не быстра. И потом, после MVC появлялись MVP, MVVM, MVI, наконец.
@Bardty @jsunderhood Ну какие темпы развития? MVC был описан в 1979. 90% проектов - это роуты, контролеры, шаблоны ...
11:27
@krasivieglaza @jsunderhood тем не менее, требования к функциональности и сложности приложений растут. Появляются новые инструменты.11:36
@krasivieglaza @jsunderhood речь не про классичские архитектуры, а про борьбу со сложностью в конкретных аспектах.11:36
@Bardty @jsunderhood Когда начинаешь понимать их основные принципы и устройство, то совершенно не важно, какой фреймворк используешь11:53
@krasivieglaza @jsunderhood согласен абсолютно. В изначальном твите была ирония. Но у инструментов есть свои преимущества и недостатки.11:53
@Bardty @jsunderhood "Все хорошие специалисты намного менее ревностно относятся к выбору фреймворков, чем начинающие." Отл. слова @mourner.
Бывает, на собеседованиях спрашивают, как выбирать и даже какой выбрать из {X, Y, Z}. И даже бывает правильный ответ
@Bardty @jsunderhood "Все хорошие специалисты намного менее ревностно относятся к выбору фреймворков, чем начинающие." Отл. слова @mourner.
11:59
@jsunderhood Как поддерживать актуальной информацию является ли пользователь самым высокими среди друзей друзей?
Интересная же задача. Никого не зацепило?
@jsunderhood Как поддерживать актуальной информацию является ли пользователь самым высокими среди друзей друзей?
12:06
@jsunderhood самый норм у Elm - MVU12:16
@ymatuhin @jsunderhood давайте не рост, а вес? Любое меняющееся свойство
Деньги, я предлагаю деньги. Жизненно.
@ymatuhin @jsunderhood давайте не рост, а вес? Любое меняющееся свойство
12:17
@jsunderhood Elm => View = Update(Action, Model) ~ Update(Model')
Ёмко, но надо немного разбираться о чем речь.
@jsunderhood Elm => View = Update(Action, Model) ~ Update(Model')
12:22
@jsunderhood У злого Штальца есть это) staltz.com/unidirectional…12:27
@jsunderhood Если грубо - то вот12:28How I understand the reactive Flux pic.twitter.com/qTG1UjBbcf
@xgrommx @jsunderhood Elm очень крутой, можно запрограммировать своего марио! elm-lang.org/examples/mario
не то что на других языках
@xgrommx @jsunderhood Elm очень крутой, можно запрограммировать своего марио! elm-lang.org/examples/mario
12:29
@lisovskyvlad @jsunderhood На Rx тоже) дело времени github.com/Reactive-Exten…12:29
@jsunderhood тут вопрос про TCO. И похоже babel не верно ее делает (здесь не применимо), иначе старый код ломается, чего быть не должно
Именно, о том и речь была, что надо знать о ТСО и что замыканиях, чтобы понять почему результат неожиданный.
@jsunderhood тут вопрос про TCO. И похоже babel не верно ее делает (здесь не применимо), иначе старый код ломается, чего быть не должно
12:36
@jsunderhood оаз уж про Elm заговорили, то там сила в комбинации ФП со строгой типизацией и компилятором.
Строгая типизация - панацея?
@jsunderhood оаз уж про Elm заговорили, то там сила в комбинации ФП со строгой типизацией и компилятором.
12:37
@jsunderhood ничто не панацея. Но помощь разработчику - да. За счет явности и предсказуемости.
channel9.msdn.com/Series/Beckman…
@jsunderhood ничто не панацея. Но помощь разработчику - да. За счет явности и предсказуемости.
12:47
@jsunderhood Первое видео тут xgrommx.github.io/rx-book/conten… - самое лучшее для понимания реактивности
Brian Beckman, Erik Meijer - вообще рекомендую: просто и понятно о сложном.
@jsunderhood Первое видео тут xgrommx.github.io/rx-book/conten… - самое лучшее для понимания реактивности
13:00
@jsunderhood все же это больше похоже на ошибку. TCO по идее не должна влиять на логику кода, это внутренняя оптимизация...
Это и есть ошибка. Вопрос был в том, как понять откуда ноги растут - пойти и отключить TCO в бабеле.
@jsunderhood все же это больше похоже на ошибку. TCO по идее не должна влиять на логику кода, это внутренняя оптимизация...
13:34
@jsunderhood нет, но что если я скажу тебе, что в runtime не бывает ошибок принциально?
Будет ложью, наверно. Не спасает статическая типизация от логических ошибок, ошибок единиц измерения и всяких NPE
@jsunderhood нет, но что если я скажу тебе, что в runtime не бывает ошибок принциально?
13:39
@jsunderhood Ни единой "TypeError: 'undefined' is not a function". Можно сконцентрироваться на логике. Ладно, в типах я сам не шарю.
repl.it/Bjkf
концентрироваться надо на проверках на null, а не на логике :D
@jsunderhood Ни единой "TypeError: 'undefined' is not a function". Можно сконцентрироваться на логике. Ладно, в типах я сам не шарю.
13:51
К вопросу о статической типизации, в JavaScript нам просто нужен вывод типов, конечно: ru.wikipedia.org/wiki/%D0%92%D1…
13:59@jsunderhood Flow, Typescript?
Теперь можно и Flow, ocamlpro.com/pub/ocpwin/flo…
@jsunderhood Flow, Typescript?
14:06
@jsunderhood или Maybe монада)14:06
@xgrommx @jsunderhood maybe монада, а maybe и не монада…15:03Монада Шрёдингера.
Пацаны, добавьте знаний, а?
Набегаем! Заодно тут делимся фантазиями на тему.
Пацаны, добавьте знаний, а?
17:04
# Пятница 51 твит
В ленту @jsunderhood и @backendsecret ;)3:13Вот я прямо идеальное описание bash.im/quote/437818
В этот прекрасный пятничный день поговорим о разделении труда в web разработке.
5:50Есть ли у вас выделенные аналитики, дизайнеры, UX, верстальщики.
5:50Пишете ли e2e тесты? Сами? есть ли QA\QC - внутри команды или отдельная группа?
5:50Работал в команде с PO, BA, UX, дизайнером. Довольно удобно, каждый занимается своим делом, но приходится много согласовывать усилия.
5:55В плане тестов писал сам, писали QA внутри команды и была отдельная команда (разные проекты). Понравился второй вариант.
6:01@jsunderhood за много лет видел лишь одного QA, который писал тесты (на api). Остальные - тупо кликеры...
Бывает, разделяют QA и QA Automation должности. Не доводилось сталкиваться?
@jsunderhood за много лет видел лишь одного QA, который писал тесты (на api). Остальные - тупо кликеры...
6:03
@jsunderhood Как поддерживать актуальной информацию является ли пользователь самым высокими среди друзей друзей?
вот такой набросок решения:
jsfiddle.net/5ow0rc4t/
@jsunderhood Как поддерживать актуальной информацию является ли пользователь самым высокими среди друзей друзей?
6:10
@jsunderhood У нас, кстати, два QA и два QA Automation
Привязаны к одному продукту? Как успехи? Что используете для e2e?
@jsunderhood У нас, кстати, два QA и два QA Automation
6:18
Сегодня в рубрике "Задача дня": make this work:
const result = plus(one(), 10, mult(two(), three(), 5));
log(result); // 41
@jsunderhood А решения в лоб ждём или каких-нибудь хитростей?) :: jsfiddle.net/aeu665tz/
Мило, в reduce можно же без инита? А так:
const result = plus(one(), 10, v('a'), plus(two()), three())({
a: 1
});
@jsunderhood А решения в лоб ждём или каких-нибудь хитростей?) :: jsfiddle.net/aeu665tz/
6:58
@jsunderhood давай разберемся – const только "для констант" или правильный способ объявлять переменные?
Правильный способ? В каком смысле? const - просто гарантия того, что присваивание значения произойдет один раз.
@jsunderhood давай разберемся – const только "для констант" или правильный способ объявлять переменные?
8:28
@jsunderhood как-то не красиво) Immutable.js был бы лучше тут
ждем твое решение :)
@jsunderhood как-то не красиво) Immutable.js был бы лучше тут
8:31
@jsunderhood, ввязываюсь только ради подвоха: codepen.io/kinday/pen/bEm…8:32
@webholt @jsunderhood log = () => 41
но ведь это magic number. Надо эксплицировать:
const THE_CORRECT_ANSWER = 41;
const log = () => THE_CORRECT_ANSWER;
@webholt @jsunderhood log = () => 41
8:36
@jsunderhood на практике по должностям не делили, скорее по обязательствам. QAA писал тесты на селениуме, безуспешно
Почему безуспешно? Не стабильно? На голом селениуме?
@jsunderhood на практике по должностям не делили, скорее по обязательствам. QAA писал тесты на селениуме, безуспешно
8:40
@jsunderhood +1 за вариант 2. но такое только у "взрослых" команд есть. лучше тестов, чем от хороших программистов, не видел.8:41
The right way process JavaScript exception. pic.twitter.com/sMXqHICudI9:19
@jsunderhood тесты проходили медленно, дорого их было поддерживать при развитии UI. дешевле автотестировать бизнес-логику, а UI - вручную.9:20
@jsunderhood Правильный именно в этом смысле – гарантии однократного присваивания.
Тогда правильный. С примитивными типами все хорошо. С объектами: Object.freeze(), Immutable.js, ...
@jsunderhood Правильный именно в этом смысле – гарантии однократного присваивания.
10:01
@RinatGilmanov @jsunderhood ручное тестирование UI - это всегда отмазка не писать тесты.Что типа всё так быстро меняется что не успеть!Имхо.10:02
@vlkosinov @jsunderhood забыл вообще когда последний раз писал let. наверное в for of только. какие есть ещё кейсы, зачем переопределять?
В циклах, если не использовать forEach, map, reduce и рекурсию.
В замыканиях (когда инициализация асинхронна).
@vlkosinov @jsunderhood забыл вообще когда последний раз писал let. наверное в for of только. какие есть ещё кейсы, зачем переопределять?
10:05
@taujavarob @jsunderhood согласен. но в моих проектах UI не нёс бизнес-логики, и ручного тестирования хватало для отлова UX-багов10:06
@jsunderhood Object.freeze изрядно тормозит)
Тормозит. Можно просто не менять :) JS итак держится на конвенциях: что можно, что хорошо, а что плохо. Ну, и либы.
@jsunderhood Object.freeze изрядно тормозит)
10:14
@milk_is_my_life @vlkosinov @jsunderhood если не путаю, то в for of тоже работает const. Потому что на каждой итерации инициализируется.
for (const i = 0; i < 10; i++) {
console.log(i);
}
тоже можно выполнить :) выполняться долго будет, правда
@milk_is_my_life @vlkosinov @jsunderhood если не путаю, то в for of тоже работает const. Потому что на каждой итерации инициализируется.
10:21
@RinatGilmanov @jsunderhood про подход - сначала тесты потом код не вспоминали. - типа дорого и долго. 👻
Может, и не дорого: надо сдать быстро и забыть - дорого. Если постоянно (годами) пишете один продукт - окупится.
@RinatGilmanov @jsunderhood про подход - сначала тесты потом код не вспоминали. - типа дорого и долго. 👻
10:24
@RinatGilmanov @jsunderhood тесты идеально чтобы писал не тот кто пишет тестируемых код - и писал бы раньше чем код напишется! Имхо. 👻
"Я тебе тут тесты написал - сиди проектируй как хочешь, но вот твои классы, методы, сигнатуры"
@RinatGilmanov @jsunderhood тесты идеально чтобы писал не тот кто пишет тестируемых код - и писал бы раньше чем код напишется! Имхо. 👻
10:37
@milk_is_my_life @jsunderhood а зачем let в 'for of'? pic.twitter.com/bueqr8o0l1
[1,2,3].map(x => () => x)
@milk_is_my_life @jsunderhood а зачем let в 'for of'? pic.twitter.com/bueqr8o0l1
10:40
@jsunderhood @RinatGilmanov "и чтоб к пятнице всё тесты проходили!" 👻 идеал. 👍🏻11:22
@jsunderhood к слову о let/const. Привычный нам пример с setTimeout в цикле в случае с let может удивить. pic.twitter.com/fduSGABuNi
Кстати, хорошее решение этой "классической" задачи.
@jsunderhood к слову о let/const. Привычный нам пример с setTimeout в цикле в случае с let может удивить. pic.twitter.com/fduSGABuNi
11:23
@milk_is_my_life @jsunderhood продублирую – exploringjs.com/es6/ch_variabl…
let и const в циклах
@milk_is_my_life @jsunderhood продублирую – exploringjs.com/es6/ch_variabl…
11:25
@jsunderhood @RinatGilmanov но проблема:билд падать не должен. Как сделать если тесты писать перед кодом? - в комите они(тест и код)вместе!👻
ветки?
@jsunderhood @RinatGilmanov но проблема:билд падать не должен. Как сделать если тесты писать перед кодом? - в комите они(тест и код)вместе!👻
11:27
@RinatGilmanov @jsunderhood архитекторы точно есть.👻 они пишут интерфейсы.Кодер пишет тест и код для него.И делает комит этого малого куска.11:28
@RinatGilmanov @jsunderhood нет конечно. Тесты пишутся только и только для тестирования имплементации интерфейсов. 👻11:32@taujavarob @jsunderhood в тестах использовать моки для ещё не реализованных методов/классов?
@jsunderhood выделенные роли ускоряют разработку, но каждый спец должен хотя бы немного вникать в смежные области и доделывать по необходим.11:34
@Timrael @jsunderhood выделенные поли ускоряют разработку, но портят людей. Шаг влево, шаг вправо - работа встала. “Это не моя проблема”.
Тоже бывает. Надо вникать и помогать в смежных ролях.
@Timrael @jsunderhood выделенные поли ускоряют разработку, но портят людей. Шаг влево, шаг вправо - работа встала. “Это не моя проблема”.
11:39
Подвох к утренней задаче
const result = plus(one(), 10, v('foo'), mult(two(), three(), 5));
log(result({ foo:1 })); // 42
Добавим переменные
Более всего интересно, насколько пришлось изменить код первого решения.
12:13@jsunderhood, а есть пример идеального решения в вакууме?
Наверно, не идеальное, но авторское:
gist.github.com/nikitadyumin/6…
@jsunderhood, а есть пример идеального решения в вакууме?
15:33
@jsunderhood Правки оказались довольно большими, но если не заморачиваться с valueOf, то их немного es6fiddle.net/ik9pn1oq/
А вот хороший разработчик сохранил обратную совместимость:
@jsunderhood Правки оказались довольно большими, но если не заморачиваться с valueOf, то их немного es6fiddle.net/ik9pn1oq/
15:37
@jsunderhood там вот это: learn.javascript.ru/let-const
let-const на русском:
@jsunderhood там вот это: learn.javascript.ru/let-const
15:42
Пятница, вечереет. Время решающего коммита, дамы и господа. И пусть продакшен содрогнется!
16:19@jsunderhood как вы угадали то? 👻
Опыт подсказывает: важные коммиты всегда приходятся на пятницу, самые важные - на пятницу перед отпуском.
@jsunderhood как вы угадали то? 👻
17:42
@jsunderhood @taujavarob релизиться перед отпуском грешновато
простые истины с @jsunderhood
@jsunderhood @taujavarob релизиться перед отпуском грешновато
18:05
@jsunderhood Первое правило клуба анонимных разработчиков: не деплоить в пятницу!18:06
@pgrekovich @jsunderhood и самый простой способ его соблюсти: задеплоить в 0:01 в субботу
суббота не для работы
@pgrekovich @jsunderhood и самый простой способ его соблюсти: задеплоить в 0:01 в субботу
18:15
@pgrekovich @jsunderhood в Казани есть конторы, где это обязательное правило "деплой в пятницу не по фен-шую" )))
жаль, что только там...
@pgrekovich @jsunderhood в Казани есть конторы, где это обязательное правило "деплой в пятницу не по фен-шую" )))
18:38
@jsunderhood неплохой слона для VPN: «суббота не для работы, только если у вас нет VPN! VPN - и работа с вами и дома!»19:03
# Суббота 4 твита
@jsunderhood ну вроде как основатели из США, так что может еще где в России филиалы есть)
А, понятно, почему не дают деплоить в (нашу) пятницу. Им потом разбираться весь день в свою.
@jsunderhood ну вроде как основатели из США, так что может еще где в России филиалы есть)
6:22
@jsunderhood наверное) но нам это подали как "деплой в пятницу грозит испорченным уикэндом"
Звучит логично
@jsunderhood наверное) но нам это подали как "деплой в пятницу грозит испорченным уикэндом"
7:14
Кому скучно, можете потроллить: top.fse.guru/how-to-pick-a-…
How To Pick a Frontend Web Framework
Кому скучно, можете потроллить: top.fse.guru/how-to-pick-a-…
12:20
# Воскресенье 22 твита
Итак, воскресенье: моя вахта подходит к концу. Я благодарю всех, кто обсуждал, решал, высказывал свое мнение и просто дотерпел.
14:05Напомню, на этой неделе с вами был @NikitaDyumin "Прикладные технологии" Челябинск.
14:12Екатеринбург, Челябинск, Пермь, Ижевск, Астана, Ростов, все, кто рядом, обратите внимание на региональное сообщество @frontendfellows
14:15@jsunderhood Хочешь рассказать о чём-нибудь на @frontendfellows в Челябинске?
Можно. Я бы еще поговорил о bacon\rx\most - это по делу. Либо за жизнь: легаси, фреймворки, обучение, собеседования.
@jsunderhood Хочешь рассказать о чём-нибудь на @frontendfellows в Челябинске?
14:58
@jsunderhood, выручишь? twitter.com/iamakulov_/sta…
;
@jsunderhood, выручишь? twitter.com/iamakulov_/sta…
15:03
@jsunderhood И как понять то, что происходит здесь? pic.twitter.com/fY3TNaZiEJ
console.log(0.5) возвращает undefined, что само собой не функция, но ты вызываешь это с результатом (function(){}())
@jsunderhood И как понять то, что происходит здесь? pic.twitter.com/fY3TNaZiEJ
15:10
Вот вам и совет напоследок: "всегда ставьте точку с запятой"
15:15@jsunderhood Мне не нравится совет. «Всегда ставьте точку с запятой, если не знаете, как работает коррекция ошибок относительно неё».
Тогда вам еще пара советов не понравится: "не используйте ==" и "не используйте with"
@jsunderhood Мне не нравится совет. «Всегда ставьте точку с запятой, если не знаете, как работает коррекция ошибок относительно неё».
15:20
А в этой ситуации "use strict" ничего не меняет. Вера в него преувеличена. twitter.com/webholt/status…
15:22@jsunderhood Про with нравится. Про «==» замечание аналогичное.
Если намучиться и понять with, можно потом ходить и говорить, что там тоже все тривиально. Ну, до очередного WTF
@jsunderhood Про with нравится. Про «==» замечание аналогичное.
15:26
@jsunderhood никогда не ставлю15:27
@jsunderhood Всегда ставлю.15:27
@jsunderhood Хотел сказать про пользование линтерами, но не в ту степь понесло.
Линтеры - хорошо. Но, в основном, полагайтесь на себя: пишите простой, понятный и , стало быть, надежный код.
@jsunderhood Хотел сказать про пользование линтерами, но не в ту степь понесло.
15:30
Чтобы понять JavaScript, надо думать как JavaScript.
15:38@jsunderhood прорекламируйте что-ли JavaScript Паттерны Стояна Стефанова или хотя-бы так: shichuan.github.io/javascript-pat…
Рекламирую
@jsunderhood прорекламируйте что-ли JavaScript Паттерны Стояна Стефанова или хотя-бы так: shichuan.github.io/javascript-pat…
15:52
@jsunderhood @webholt так как всё новое в JS есть синтаксический сахар - то просто писать уже на выйдет. 👻
Сахар нужен вроде для того, чтобы писать лаконично. Если что-то мешает - не используйте.
@jsunderhood @webholt так как всё новое в JS есть синтаксический сахар - то просто писать уже на выйдет. 👻
15:54
@jsunderhood @webholt он не мешает. Он как наркотик. 👻 twitter.com/jsunderhood/st…
Лекарство от сложного кода простое - пишите не для себя, пишите для других, даже если вы один в команде.
@jsunderhood @webholt он не мешает. Он как наркотик. 👻 twitter.com/jsunderhood/st…
15:57
@jsunderhood @webholt э, другой может быть гуру или джуниор. 👻
именно
@jsunderhood @webholt э, другой может быть гуру или джуниор. 👻
16:00
@pytkin @jsunderhood а их надо рекламировать?
Однажды я прочитал Стефанова и устроился на работу.
@pytkin @jsunderhood а их надо рекламировать?
16:04
@jsunderhood @webholt но гуру код для джуниора покажется пресным, а джуниору код для гуру покажется магическим. 👻 twitter.com/jsunderhood/st…
Не думаю, гуру доволен, когда код ему понятен, джун радуется, когда ему понятно и вам должно радоваться за ваш код.
@jsunderhood @webholt но гуру код для джуниора покажется пресным, а джуниору код для гуру покажется магическим. 👻 twitter.com/jsunderhood/st…
16:07
@jsunderhood @webholt кстати пример:
if (flag) {
next()
}
Или?:
flag && next()
Первый ясен - второй краток. - что выбираем? 😊
Первый, само собой. Ибо завтра у вас добавится еще условие или еще действие. В дебаге проще. История в git чище.
@jsunderhood @webholt кстати пример:
16:46
if (flag) {
next()
}
Или?:
flag && next()
Первый ясен - второй краток. - что выбираем? 😊
@jsunderhood @webholt Второй пример:
function (x) {
x = x+5;
return x;
}
Или?:
x => x+5;
Первый ясен, второй краток. Что выбираем?
Делай return x+5. Fat arrow хорош для простых шаблонных функций без side effects. Если что-то сложнее - function ИМЯ
@jsunderhood @webholt Второй пример:
16:49
function (x) {
x = x+5;
return x;
}
Или?:
x => x+5;
Первый ясен, второй краток. Что выбираем?
# Ссылки
github.com
- https://github.com/nikitadyumin/tower-defense
- https://github.com/DrkSephy/es6-cheatsheet
- https://github.com/cujojs/most
- https://github.com/h5bp/Front-end-Developer-Interview-Questions
- https://github.com/ghcjs/ghcjs
- https://github.com/xgrommx/awesome-functional-programming
- https://github.com/lucasviola/awesome-functional-programming
- https://github.com/xgrommx/purescript-ecosystem
- https://github.com/xgrommx/elm-ecosystem
- https://github.com/paldepind/flyd
- https://github.com/Reactive-Extensions/RxJS/tree/master/examples/mario
jsfiddle.net
- https://jsfiddle.net/008szL5r/
- https://jsfiddle.net/et1jgpfy/
- https://jsfiddle.net/80f80tjq/
- https://jsfiddle.net/zot6yLua/
- https://jsfiddle.net/o8Lbyzp3/
- https://jsfiddle.net/hmufrf35/2/
- https://jsfiddle.net/kc25xo3y/2/
- https://jsfiddle.net/5ow0rc4t/
other
- https://baconjs.github.io/tutorials.html
- http://dilbert.com/strip/2015-08-01
- https://babeljs.io/repl/#?experimental=false&evaluate=true&loose=false&spec=false&code=%22use%20strict%22%3B%0Afunction%20foo(i)%20%7B%0A%20%20if%20(i%20!%3D%3D%200)%20%7B%0A%20%20%20%20setTimeout(()%3D%3Econsole.log(i))%0A%20%20%20%20return%20foo(--i)%3B%0A%20%20%7D%0A%7D%0A%0Afoo(5)%3B
- http://www.ozon.ru/context/detail/id/31257038/
- https://frontendfellows.timepad.ru/event/284976/
- https://frontendfellows.timepad.ru/event/284979/
- http://exploringjs.com/es6/
- https://npmcdn.com/
- https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0
- http://ramdajs.com/0.19.1/index.html
- https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
- https://gist.github.com/nikitadyumin/6551b7de5bde94060b2f/revisions
- https://traditio.wiki/%D0%9A%D0%B0%D1%82%D0%B0%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC
- https://habrahabr.ru/company/pvs-studio/blog/275159/
- https://habrahabr.ru/post/275485/
- http://vanilla-js.com/
- http://staltz.com/unidirectional-user-interface-architectures.html
- https://channel9.msdn.com/Series/Beckman-Meijer-Overdrive/Beckman-Meijer-Overdrive-The-Lambda-Calculus-and-Food-Nutrition
- https://repl.it/Bjkf
- https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2
- https://www.ocamlpro.com/pub/ocpwin/flow-builds/
- http://codepen.io/kinday/pen/bEmGor?editors=0010
- http://www.es6fiddle.net/ik9cdw13/
- https://mathiasbynens.be/notes/es6-const
- http://rxmarbles.com/
- https://jsunderhood.ru/NikitaDyumin/