floatdrop

29 июня 2015, Ekaterinburg

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

Йоханга! На этой неделе с вами @floatdrop - я занимаюсь разработкой на @nodejs в @yandex и немного фронтендом.

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

Кратчайший путь попасть в страну единорогов^W ES7+jsx в @nodejs - это использовать require хук babeljs.io/docs/usage/req… Так я туда и попал.

7:16
@jsunderhood в проде это нормально?
7:25
@jsunderhood в наше время, nodejs все еще больше редкость или уже нет?
7:26
@jsunderhood посоветуй ресурсы по nodejs, по которым а) нужно учиться с нуля б) следить за новостями в) получать инфу по Best practices
7:32

"Как начать в NodeJS?" - тут нужно понимать три вещи: 1) JS - асинхронщина с callback's 2) CommonJS 3) Eventloop #nodejsintro

7:39

Про eventloop есть хороший доклад - youtube.com/watch?v=8aGhZQ… (но на английском). #nodejsintro

7:40

Disclaimer: предыдущие ответы были как reply - их можно посмотреть, если кликнуть на ретвит (пардоньте, исправлюсь).

7:41
@jsunderhood кстати, об обратных вызовах, async/await — панацея?
7:51

Не уверен, что панацея, но это лучшее, что я видел для побега из callback hell. @roman01la

7:54

Tip: Если вы погрязли в callback hell, то путь от туда лежит через Promise обертки, потом генераторы + npmjs.com/package/co, async/await

7:56

Доклад "Netflix JavaScript Talks - Version 7: The Evolution of JavaScript" хорошо показывает все эти ступеньки: youtube.com/watch?v=DqMFX9…

7:59

Сам я начинал вот с этого курса про NodeJS - короткие видео от youtube.com/playlist?list=… @iliakan - давно это было #nodejsintro

8:06
@jsunderhood а как вы тестируете потребление памяти и профилируете на iojs?
8:15

Мы кладем приложение под танк - github.com/yandex/yandex-… (up to 10k rps) и сразу становится ясно, течет оно или нет.

8:18

У нас были эксперименты с DTrace - но не полетело по разным причинам. Проще всего посмотреть heapdump через github.com/c4milo/node-we…

8:21

Для серьезных разборок есть два способа - перезапустить процесс и "дебажить корку" в gdb или организовать remote debug (отключив процесс).

8:30

Пока я ищу доклад про gdb - посмотрите веселого дядьку из Yahoo - joyent.com/developers/vid… (у joyent много интересных видео).

8:40
@jsunderhood Йо! Я тут краем глаза прочел про callback hell. Как на счет машины состояний? В связке с AMD получается очень достойно
Peace
9:02

Генераторы - это и есть машина состояний, но из за синтаксического сахара получается прямолинейный и читаемый код - babeljs.io/repl/#?experim…

9:03

Похоже я перепутал mdb с gdb, но я был уверен, что и под ubuntu можно посмотреть корку - joyent.com/developers/nod… (joyent.com/developers/vid…)

9:14

Ресурсы, чтобы быть в курсе - @echojs @NodeJSWeekly @JavaScriptDaily @changelog плюс фолловить в twitter/github крутых чуваков #nodejsintro

9:45
@jsunderhood список крутых чуваков еще хотелось бы узнать!
9:50

Hard to say, for example follow @sindresorhus and read awesome list (github.com/sindresorhus/a…). I learned a lot from his code 🐶

10:03

Есть вот такой список - jstherightway.org/#whotofollow У меня тактика такая - я подписываюсь на многих, а потом отписываюсь, как пойму, что не мое.

10:05
@jsunderhood @rastopyr_ua Хочу попросить рассказать как про обычные кейсы: для чего вы используете ноду? Это скорее микросервисы или баржи?
10:15

Самый обычный кейс - рендеринг страниц для пользователя, чуть реже REST API (так как еще силен дух python в Я).

10:17

Иногда рендеринг переписывают с xslt и perl на NodeJS и (прости господи) BH/BEMHTML. Есть проекты, где вместо B* - angular/backbone/react.

10:20

Как не сложно понять по этой странице - yandex.ru/jobs/vacancies… зоопарк у нас еще тот, зато чем заняться найдется всем. :)

10:21

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

10:23

Чтоб не получить леща — все, что опубликовано в этом твиттере не является официальной позицией Яндекса, а только моим личным видением. :D

10:29
@jsunderhood Как переписывание на node сказывается на производительности?
10:45
@jsunderhood Ещё вопросец: как вы обходите то, что eventloop может сожрать только одно ядро? Cluster, webworker-threads, по-другому, никак?
11:52
@jsunderhood
Большой вопрос, но важный для меня. Можешь перечислить чем должен владеть человек, назовём его джуниором в js.
11:59

Когда нибудь я научусь отвечать не в reply на этом аккаунте. Видимо не сегодня :)

12:10
@xanf_ua @jsunderhood уже тритй раз вижу такой вопрос) возможно, стоит создать какой-нибудь репозиторий на gh и пулл-реквестить туда списки

Есть вот список вопросов по JS, но для Front-end - github.com/h5bp/Front-end…

На собеседовании в Fb 2/3 от туда были. twitter.com/cakeinpanic/st…

12:57
@jsunderhood Задам первый же вопрос оттуда. What did you learn yesterday/this week?

Вчера я узнал о стохастической оптимизации из лекции Дмитрия Ветрова - habrahabr.ru/company/yandex… twitter.com/iamale_ru/stat…

13:02

Давайте сыграем в игру - "вот мой код год назад, а вот сейчас". Это очень интересный опыт у разработчика.

14:24

Я начну.

Год назад: github.com/floatdrop/chnp…

Сейчас:
github.com/floatdrop/chnp…

14:26
@backendsecret интересная игра! Надо бы ввести в правила :) twitter.com/jsunderhood/st…

Правила простые - разница во времени должна быть ~1 год (от полугода и дальше). Ну и должен быть виден прогресс! :) twitter.com/dcromster/stat…

14:36

У нас понедельник подходит к концу, по этому оставлю вам один коан про JS - thecodelesscode.com/case/90 (там много классных).

15:53
Try es6katas.org - learn new JS features by fixing unit tests. Includes Map, Arrows, Generators & more: pic.twitter.com/c0UAUxYhaJ
16:49
Очень хороший текст про уровни разработчика mattbriggs.net/blog/2015/06/0…
16:51
@jsunderhood @vlkosinov свой форк npm на основе двух баз couchdb: private и public. Плюс специальный прокси. Можно было и проще,но вышло так
16:51
@jsunderhood а что делать, если течёт? Как искать?

Самый простой способ - сделать heapdump и посмотреть что там накопилось (через github.com/c4milo/node-we… например). twitter.com/tenorak/status…

17:57

# Вторник 29 твитов

@jsunderhood Кстати, многие коаны переведены на русский thecodelesscode.com/case/90?lang=ru
6:02
@jsunderhood доброе утро, по моему мнению, гугл форсируют отказ от старых IE, почему другие гиганты рынка не делают того же и даже наоборот?

Многие компании поддерживают старые IE, так как его доля в трафике довольно большая. twitter.com/hellbeast92/st…

6:04

Доброу утроу! Что будем делать сегодня?

Fav - пробежимся по нашему стеку
Rt - поговорим про разработку в целом

6:26

Ретвиты побеждают!

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

7:45

Например я программировал в школе на Pascal, в универе на всем, что было в аптечке, в @skbkontur на C#. И это не было разработкой.

7:47

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

7:50

Пример уменьшения сложности кода - это использование YAGNI, но видео я потерял по нему, по этому вот другое - youtube.com/watch?v=wf-BqA…

7:57

YAGNI часто противопоставляют SOLID. Нужно уметь балансировать между ними, а иногда выходить с этой шкалы - habrahabr.ru/company/skbkon…

8:00

Главное правило, к которому я пришел - ваш код должен быть "прост". Про "простой" (simple) код есть супер доклад - infoq.com/presentations/…

8:02

Самый простой способ усложнить код - это не использовать сильные стороны языка. Например забыть, что JS это в функциональный язык (ООП ftw!)

8:16

Пруф - "James Coglan: Practical functional programming: pick two" 2014.jsconf.eu/speakers/james…

8:18
@jsunderhood а почему в Контуре не было ответственности за код?

Я был студентом в Контуре. Очень сложно студенту сделать качественный скачок в разработке, ему надо помогать в этом. twitter.com/mkazantsev/sta…

8:21
@jsunderhood А как там в js выглядит комбинатор неподвижной точки?

В плане - есть функции первого порядка. Но раз спрашиваешь: matt.might.net/articles/imple… twitter.com/chemikadze/sta…

8:25

К особенностям JS можно отнести prototype-наследование и есть отличный доклад "The Better Parts" youtube.com/watch?v=bo36Mr… - посмотрите.

8:33

Самый простой способ упростить код - разбить на подзадачи (см. п. 1), но не надо запихивать все в один супер-модуль. pic.twitter.com/qKgoQsrHFr

8:44

Для модулей в мире NodeJS есть npm. По слухам там есть все - от CMS (npmjs.com/package/buckets) до one-liners (github.com/sindresorhus/m…).

8:51

Как правильно разбивать задачи на модули - вопрос сложный, может быть вы подскажите. Я лишь оставлю вот эту статью - joelonsoftware.com/articles/Leaky…

8:54

А вот как взрастить в себе ответственность - тут есть проверенный способ: pet-project в open source.

8:58

При разработке N проектов, вы поймете - зачем вам тесты и документация. Через месяц контекст теряется полностью. changelog.com/top-ten-reason…

9:07
@jsunderhood интересная идея, а можешь по подробнее ее озвучить? ведь OSS проекты разные бывают (маленькие и не нужные, крупные и активные)

Pet-project хороший способ быть ABC - medium.com/@davidbyttow/a… - если им начинают пользоваться, то +опыт разработки. twitter.com/anton_davydov/…

9:24

Наилучший pet-project (как и рабочий проект) - это тот, которым вы пользуетесь. Принцип Dogfood - joelonsoftware.com/items/2004/04/…

9:27

Про dogfooding (и не только) в хорошем видео "Meet the Makers: Ableton Developers at Work" - youtube.com/watch?v=tILlZR…

9:46

У нас обед, а вам оставлю замечательное видео о запахах JS - elijahmanor.com/javascript-sme…

Задавайте вопросы, буду рад! pic.twitter.com/2VL4RmITVK

9:57
Ищу фронтенд специалиста для анализа быстродействия страницы (проекта) и отчета по исправлению.
/cc @jsunderhood
11:08

Как ни странно - вопросов не возникло. Тогда вопрос слушателям - Какие советы по разработке вы бы дали себе несколько лет назад?

15:28
@jsunderhood изучай функциональщину, пиши на языках с поддержкой системы типов. думай о бизнесе а не об инфраструктуре
15:34
@rastopyr_ua @jsunderhood не верь на слово сеньорам, а тем более тимлидам, их знания есть локальный оптимум. Верь опыту и проверяемым фактам
15:41
@jsunderhood я бы посоветовал не бояться совершить ошибку. Меньше думать об имидже, больше о результате.
16:05
@jsunderhood следи за здоровьем!
16:21

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

Господа разработчики, поделитесь - как вы выкладываете код в продакшн? Мы вот как-то так: softwaremaniacs.org/blog/2007/08/1… #очемнаписатьто

6:52

. @greybax зависит от уровня фронтендера. Вот отличный пример "за": "Mark DiMarco: User Interface Algorithms" youtube.com/watch?v=90NsjK…

7:13
@jsunderhood у меня очень маленький продакшен, docker compose справляется
8:13

Сегодня, видимо, будет день случайных советов.

8:47

Если вы используете Express - никогда не вызывайте `next` после `res.send`. Я ставлю `return` после, иначе плавающая ошибка вам обеспечена.

8:49

. @iamale_ru @dcromster так точно. Был пример из жизни про рефакторинг - вот упрощенная история: gist.github.com/floatdrop/a5f4…

8:59
@jsunderhood вопрос про сравнение express и других низкоуровневых серверов для ноды. Например сравнить с koa.

Express очень гибкий (по сравнению с hapi), но в нем очень легко прострелить себе голову в большом проекте. twitter.com/slonoed/status…

9:02

. @jsunderhood стреляют в основном из за двойного вызова `next` - который в свою очередь зовет `res.send` в не связных местах кода.

9:03

. @jsunderhood в koajs застрелиться сложнее - так втихушку будет переписываться this.body (если после него сделать yield next).

9:13

Преимущество генера^W koajs - flow-control в контроллере. Для Express мы свой di писали github.com/floatdrop/expr… vs gist.github.com/floatdrop/d316…

10:54
@jsunderhood что скажешь про это? stormpath.com/blog/nodejs-jw…

Мне нравится JSON payload в jwt.io (похож на macaroons research.google.com/pubs/pub41892.…) - это удобно. twitter.com/dcromster/stat…

11:56
Как правильно и удобно деплоить nodejs приложения? Если он в докере?
/cc @jsunderhood

Удобнее `git push heroku master` я еще ничего не видел (github.com/progrium/dokku и thenewstack.io/docker-is-driv…) twitter.com/beshkenadze/st…

12:03
@jsunderhood в этом и суть, с помощью простой функции gist.github.com/alekseykulikov… мы получаем мощь koa + инфраструктуру и привычность express
12:28
Уровни программистов:
вы все знаете — Junior
вы поняли что ничего не знаете — Mid
вам все равно — Senior
bash.im/quote/429538
13:34
Junior programmer's bookshelf: 90% APIs and programming languages; Senior programmer's bookshelf: 80% applied psychology.
17:10

Если вам нужно протестировать модуль работающий с fs и http, то mock-fs (github.com/tschaub/mock-fs) и nock (github.com/pgte/nock) в помощь.

17:22

Для валидации данных у меня всегда под рукой validator.js (github.com/chriso/validat…) и joi (npmjs.com/package/joi).

17:32

Для запросов по HTTP(s) мы, внезапно, используем got (github.com/sindresorhus/g…).

17:52
@jsunderhood Как по-твоему, нюансы HTTP вроде chunked encoding или gzip должны обрабатываться на стороне ноды или реверс-прокси?

TLS и gzip лучше перекладывать на проксю, а chunked по ситуации (longpooling нельзя буфферизировать, etc...). twitter.com/subzey/status/…

18:25
@jsunderhood есть ли преимущества перед request помимо стримов?

У got правильная опция json (github.com/request/reques…), понятные ошибки, он минималистичный. twitter.com/nDmitry/status…

18:53
AMA - Why small focused modules github.com/sindresorhus/a…
19:08

Больше модулей хороших и разных! Для этого даже генератор есть github.com/sindresorhus/g…

19:11
@jsunderhood а нужен ли Yeoman? Ведь он со старта создает столько ненужных в данный момент вещей.

Есть версия и без yeoman - github.com/sindresorhus/n… twitter.com/alexeyraspopov…

19:34

. @alexeyraspopov мы yeoman используем для генерации проектов - довольно удобно.

19:40
@jsunderhood есть ли, на твой взгляд, в request что-то, из-за чего его стоило бы использовать вместо got?

В request гораздо больше встроенных фишек, что сказывается на его размере. Я не использую его внутри других модулей. twitter.com/ap_savin/statu…

19:57

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

Browserify и webpack уже классика - а я рекомендую посмотреть еще на jspm.io (использует github.com/ModuleLoader/e…)

8:54

Recap: Стили в JS упрощают разработку - изменения происходят в одном месте, а не в нескольких файлах. Используют они github.com/FormidableLabs…

9:09

Recap: чувак написал github.com/elierotenberg/…

9:58

. @iSnifer @andreypopp в этом одна из главных фич jspm - он умеет это делать на лету, а умеет и bundle собрать, где все уже сделано.

10:33

. @iSnifer они будут подключены. Посмотри m.youtube.com/watch?v=NpMnRi… - ребята с react использую и все хорошо у них :)

10:50

. @iSnifer webpack для меня выстрелил, когда его начал facebook продвигать и развивать для React. До этого я webpack не понимал вообще.

11:11
@jsunderhood у меня вопросик: товарищи фронтендеры, что вы думаете об использовании CoffeeScript в проектах? За/против. Когда можно и нет.
12:32

. @Kern_0 imho от языка должна быть значительная польза (TS - система типов, CJS - dead code elimination). А от CS один сахар ¯\_(ツ)_/¯

12:34

. @andrey_sitnik ну, я со свечкой не стоял - но CS теряет позиции - это факт slideshare.net/NeilGreen1/typ…, по этому я уже на него не смотрю.

13:01
Путин: «Иностранные фонды шарят по школам и сажают на гранты талантливых детей». Редкий случай, когда я согласен. Грант — говно. Только Галп
14:22
Зацените отличные слайды от @neilfeyn на тему выбора между ES6/TypeScript/CoffeeScript.
slideshare.net/NeilGreen1/typ… @jsunderhood
15:28

# Пятница 7 твитов

@jsunderhood расскажи как писать бенчмарки (а также что почитать и посмотреть)

Для бенчмарков js кода я использую matcha (npmjs.com/package/matcha) - не дает хирургическую точность, конечно. twitter.com/iamstarkov/sta…

17:05

Если нужно быстро замерить, сколько кусок кода выполняется в ms - то console.time вполне себе инструмент - blog.mariusschulz.com/2013/11/22/mea…

17:07
@jsunderhood расскажи про опыт создания и поддержки генератора для бойлерплейт-проекта внутри компании? tips & tricks

Коротко - бойлерплейт должен быть у команды и отвечать их требованиям, общий "на всех" делать не получится. twitter.com/iamstarkov/sta…

17:09

BEM - методология для именования классов для CSS! getbem.com #пятница

17:25

Много хороших видео по JS (некоторые я уже постил) - github.com/bolshchikov/js…

17:29
@jsunderhood У Rails есть гем Exception Notification (middleware для уведомлений об ошибках). Какие tools & best practices есть для Node?

Я бы порекомендовал getsentry.com (github.com/getsentry/rave…) - слать все туда. twitter.com/alexfedoseev/s…

18:59
@jsunderhood я такую штуку составлял недавно.
gist.github.com/beshkenadze/fe…
19:17

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

GraphQL.js – A reference implementation of Facebook's GraphQL for JavaScript chlg.co/1HDI3A3
15:01
Внимание вопрос: какую книжку по #javascript вы считаете самой крутой?

Ну выбор очевиден, я считаю - jsforcats.com/javascript-for… twitter.com/pvlpvs/status/…

19:27

. @pvlpvs @beshur Douglas Crockford, JavaScript: The Good Parts - shop.oreilly.com/product/978059…

19:39

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

"goes to" operator:

n = 5;
while (n --> 0) { console.log(n); }

// 5 4 3 2 1 0

7:56

Invisible Code by Martin Kleppe at JSConf Budapest 2015 - youtube.com/watch?v=T3xMyZ…

14:43

Неделя подходит к концу - с вами был @floatdrop. Спасибо, что были с нами!

15:54

Live React: Hot Reloading with Time Travel at react-europe 2015 by @dan_abramov youtube.com/watch?v=xsSnOQ…

17:44

gist.github.com

www.youtube.com

www.npmjs.com

github.com

other