listochkin

21 сентября 2015, Київ, Україна

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

Всем доброе утрj! Эту неделю с вам @listochkin - веб-разработчик из Киева, ведущий чатов gitter.im/orgs/dev-ua/ro… и один из @kottans_org

14:18

Большинство знает меня как фронтендера и любителя #EmberJS - я даже вел @jsunderhood - но где-то 70% своего времени я провожу на бекенде.

14:20

.@scaint пишу на Node, Java (с него я начинал работать), умею и люблю Ruby, а сейчас увлекся Rust и веду @RustUkraine

14:30
Достал @backendsecret из загашника чтобы послушать @listochkin
14:34

исторически я занялся фронтендом, потому что “заставили” - синьор Java не хотели лезть в JS, а тут под боком джуниор - пусть ковыряет

14:35

а затем оказалось, что традиционный бекенд разделяется - часть стала активно заниматься фронтендом и API, а другая - обработкой данных

14:37

поэтому если вы любите распределенщину, кафку, спарки, кассандры и хадупы, то вам неделя покажется неинтересной

14:38

вместо этого будем говорить об API, интеграции с SPA и обо всем, что есть на стыке бекенда и фронтенда

14:40
@backendsecret а почему нода?
14:41

После больших и тяжелых Java-серверов хотелось чего-то маленького и стремящегося к простоте. Плюс я люблю JavaScript

14:42

Сейчас можно ненароком и на Ноде большое приложение написать, а на Java - маленькое, но изначально это было причиной

14:46
@backendsecret с недавних пор приходится писать на node.js разухабистые вещи. Расскажите какие подходы используете, чтобы нормально жить?
14:59

.@isotnikov использую генераторы с промисами для асинхронного кода Вот тут я разбираю пример youtu.be/NLPC3EHtiBU?t=… Ну и тесты, я люблю TDD

15:02

.@isotnikov у ООП в JS на сервере минимальная роль. Модули, функции, трансформация данных. Данные в виде объектов - это все, что есть.

15:15
@backendsecret @isotnikov какие тестовые фреймворки используешь для js?
15:15

.@andrey2koba @isotnikov ничего необычного, mocha, chai, istanbul. Всегда работаю с вотчером: сохранил файл - тесты побежали - нотификейшен

15:17
@backendsecret @isotnikov какими IDE пользуешься?

Саблайм почти без плагинов в голом виде. Тема Solarized Light, шрифт Source Code Pro 19pt на 15” экране. twitter.com/andrey2koba/st…

15:20
@backendsecret для production на Rust что-то писал?

Прямо сейчас пишу один модуль, который принимает данные на вход и преобразует их. Просто trial технологии. twitter.com/skl1f/status/6…

15:32
@backendsecret О, привет. Наконец-то кто-то знакомый и известный. Может всетаки перескочишь с раст на го? :)

я очень спокойно отношусь к разным технологиям, и Go-отличная штука. Но времени не хватает попробовать. twitter.com/chubik/status/…

15:40
@backendsecret как выбрать транспорт и формат данных между бэком и фронтом? чем руководствоваться?

JSON для публичного API. пока не видел случаев, где это тормозило, но если надо будет, буду пробовать что-то другое twitter.com/PZabolotniy/st…

15:42

.@SBozhko ну, меня на Ютубе полно, можно гифок наделать. В целом я похож на этого хмыря. И шмотки такие у меня есть) pic.twitter.com/PDGg1jmRmx

16:06
@backendsecret @andrey2koba @isotnikov хммм... Веб-разработка на фаблете? 15" как-то совсем кисло, нет?

А мне нравится работать на ноуте. Обычно это 13 дюймов, но вот пробую пятнашку. Пока ок, но разница не критичная twitter.com/anton_sunrise/…

16:58
@backendsecret такой вопрос, а как реализуете нотификации одному пользователю?

Long-polling не подойдет? Не надо морочиться с соккетами, конфигами, баллансингом и работает с любым бекендом. twitter.com/return_none/st…

16:59
@backendsecret long polling и используется, интересно было может ещё моднее можно :)

Ну можно вебсоккеты или SSE, но зачем? :) Большие дяди типа Google, FB и Твиттера сидят на поллинге и работает Ок twitter.com/return_none/st…

17:04
@return_none
моднее разве что голубиная почта.
* но во первых бритва оккама
* во вторых long-polling более простой и удобный

@backendsecret

19:01
Excited to hear what he has to say! twitter.com/jfbastien/stat…
21:56
@backendsecret скажи, typescript пробовал, если да, то что о нем думаешь?

Серьезного ничего не писал, но считаю важным и полезным проектом. Optional Types + альтернатива Babel.js = хорошо twitter.com/serebro/status…

22:03

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

22:04
@backendsecret не думаю что можно сравнивать TS с Babel...

Можно. Сегодня это два транспайлера для ES6, которые на выходе дают компактный код и применяются в продакшене. twitter.com/mr_skriming/st…

22:08

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

22:09
@backendsecret что посоветуешь для реализации изоморфного приложения (spa + seo), был ли опыт с ними?

crawl bot -> static HTML files + ngnix rule for bots. Фильтр в Nginx строк на 15, скрипт краулера <300. 2 дня работы twitter.com/serebro/status…

22:25

ты не ограничен в использовании фреймворка на клиенте и Node на сервере. Изоморфизм переоценен

22:26
@backendsecret мой косяк, плохо сформулировал. Содержимое страниц динамичное и сильно зависит от текущего юзера (рекомендации и т.п.)

Если зависит от юзера, то при чем тут SEO? twitter.com/serebro/status…

22:32
@backendsecret думаю выбор такой: static pages, фантом, реакт, метеор и rendr (airbnb)

мой выбор - Ember + FastBoot. Зайди на dockyard.com и походи по страницам - это SPA с server renderring twitter.com/serebro/status…

22:35
@backendsecret изоморфность - это круто. Это вместо REST или GraphQL. Но его надо научиться готовить. Рецептов пока не видел.
23:22

Всем привет!
На этой неделе с вами будет @anton_davydov и я надеюсь, что вы любите опенсорс так же как и я :)

10:32

На самом деле, я рубист, но в последнее время я начал сильно болеть по лиспу, поэтому меня попросили больше говорить про лисп 1/...

10:33

Кроме лиспа и руби смотрел на кучу других языков (го, хаскель, эрланг), а так же немного поконтрибьютил в кристал 2/...

10:36
@backendsecret По какому из лиспов? clojure?

Сразу хотелось бы оговориться, что нет не clojure. Я больше по scheme twitter.com/freiksenet_ru/…

10:37

У меня достаточно много тем для этой неделе, поэтому мы с вами поговорим про языки, учебу, опенсорс и etc 3/...

10:38

Ну для вхождения в предметную область - вот вам статья про то, как сделать свой ЯП на racket :)
shmat-razum.blogspot.ru/2011/11/racket…

10:45

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

10:46
@backendsecret Я раньше сильно зарубался по лиспу и хаскеля, у меня даже тату есть с (loop (print (eval (read)))). Наверно это было не зря.

Всегда мечтал набить себе что-то, но не мог придумать что именно :D twitter.com/freiksenet_ru/…

10:50
@backendsecret Но мне важнее сейчас делать вещи, а не думать о том какой язык крутой.
10:50

.@freiksenet_ru никто не спорит, но как мне кажется, для общего развития это невероятно полезно.

10:51
@backendsecret конечно
10:51
@backendsecret scheme классный нам сейчас на нем функциональное программирование в универе приподают
10:52

.@dmitr_y это очень круто! Надеюсь ваш курс на sicp основан? :)

10:52
@backendsecret Теперь я пишу на js и я счастлив. Язык не важен, важно все остальное.
10:53

.@freiksenet_ru так у меня нет цели убедить вас всех, что лисп - это серебряная пуля :)

10:54
@backendsecret по мне это сроду такого развлечения для вечера пятницы

да, почему бы и нет. Главное, что ты узнаешь что-то новое в этот вечер, а не пропьешь его невесть с кем :) twitter.com/dmitr_y/status…

10:54
@backendsecret Я понимаю) Просто рассказываю про свой опыт. У меня нет цели убедить всех что плохо писать на лиспе :)
10:55
@backendsecret У меня на нем получается быстро и хорошо делать продукты.
10:57
@backendsecret Если смотреть на фронтенд - то писать React это одно удовольствие, все крутые лисп фишки там, типа hot reload.
10:58
@backendsecret мне кажется гораздо полезнее для разработчика изучать периодически языки из другой парадигды + подходы, которые в ней приняты
11:05

.@unix_tips и какой подход вы могли бы посоветовать? (что больше всего вскрыло голову)

11:07
@backendsecret Брейнфак считаем?

да, почему бы и нет :) twitter.com/dcromster/stat…

11:09
@backendsecret Мне было интересно глянуть классическое ФП. Посмотрел на Haskell, F#, OCaml, ML. В итоге остановился на Haskell и ML.

мне пару дней назад сказали, что OCaml прямо очень православен. Как вы считаете, меня обманули или нет? twitter.com/unix_tips/stat…

11:10

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

В продолжение вчерашнего разговора: для Ruby есть отличный gem github.com/SamSaffron/mes… для c2s/s2s messaging через long-polling. Prod-ready

10:47

Вам не нужно ждать, пока выйдет Rails 5 ActionCable или разворачивать рядом Faye. Плюс оно умеет досылать сообщения в случае дисконнекта.

10:50

Доклад, где @dgeb поэтапно развивает пример API (sorting, фильтры, pagination) youtube.com/watch?v=2t-_7E… Рекомендация №1 для разработки API.

14:11
Ноут окончательно погиб смертью храбрых - раскокал экран пополам. Здравствуй, 13”, Maverics и Source Code Pro 17pt.
14:43

Сегодня получился не самый активный день, обживаю старый комп. Проведем опрос: на чем бы вы делали API для SPA и почему?

19:47
@backendsecret Django REST framework, потому что Python и очень много всего из коробки плюс swagger легко подключить
19:55
@backendsecret а что изначально подкупило это идея Serializes, надеюсь этим заменят стандартные Forms
19:55

.@return_none о, никогда не пользовался Django REST. Посоветуй какие-нибудь доклады и статьи про него

19:56
@backendsecret буду неоригинален: джанго рест :)

О, ее 1 голос к Django REST, @mkn8rd посоветуй какие-то хорошие доклады или статьи по нему twitter.com/mkn8rd/status/…

19:57
@backendsecret сам автор очень хорошо рассказал на Django Under the Hood, а чтобы просто проникнуться достаточно туториала

Нашел видео доклада youtube.com/watch?v=3cSsbe… и слайды speakerdeck.com/tomchristie/re… twitter.com/return_none/st…

20:00

Сам добавлю, что при прочих равных выберу Rails и JSONAPI:Resources github.com/cerebris/jsona… потому что Ruby и куча инструментов для него

20:11

Например, Rack Mini Profiler - строит флеймграфы для ваших запросов samsaffron.com/archive/2013/0…

20:13

Или tunemygc.com - автоматом подстраивает настройки GC для вашего приложения.

20:14

Или skylight.io/features который показывает гистограмму запросов и поможет провести глубокий анализ производительности

20:16

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

20:19
@backendsecret питон и рельсы - понятно, а что-то интересное для javascript есть?
20:22
@serebro express, koa, restify, sails @backendsecret це мабуть не сильно нові штуки
20:23
@backendsecret А есть такое для node? Кроме New relic.

Прям такого глубокого нет пока, но есть keymetrics.io/tour/ и сегодняшний nodesource.com/products/nsolid twitter.com/freiksenet_ru/…

20:31

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

20:33
@backendsecret странно, что рубисты ещё не сказали о Grape. Отличный мини-фреймворк, со всем, что нужно для REST и API
20:37
.@backendsecret на rails-api т.к. плохо знаю другие экосистемы
20:49
@backendsecret А кто как реализует X-Rate-Limit? Может что-то готовое есть посмотреть?

Для Ruby есть github.com/bendiken/rack-…
Для Node github.com/tj/node-rateli… twitter.com/serebro/status…

20:53
@backendsecret Тут дело привычки, думаю. У меня — Python/Flask-RESTful (если не захочется поэкспериментировать, конечно)

О да, привычка и знание платформы - едва ли не самое важное. twitter.com/iamale_ru/stat…

20:56

Вообще из “интересно попробовать” у меня на первом месте пока phoenixframework.org и PEEP stack medium.com/@j_mcnally/the…

21:00
Посоветуйте: смена ноута - это повод попробовать Zsh? Что нужно для крутой командной строки?
21:04

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

@sharipov_ru @backendsecret жуткая поделка с тупыми багами в "стабильных" версиях которые никто не чинит, и страшнейшим говнокодом внутри

Это про Grape. Сам не пробовал, но вокруг любой технологии мнения разнятся. Я бы выбрал Rails из-за обкатанности twitter.com/as_Crazy/statu…

0:36

Точно так же слышал очень полярные мнения вокруг Flask в Python Кто-то за минимализм, а кого-то раздражает делать все руками.

0:37
@backendsecret а что думаешь про volt?

скорее нет, чем да - негативный опыт GWT сказывается. Имхо, лучше клиент и сервер разделять хотя бы pjax/turbolinks twitter.com/anton_davydov/…

1:05

Причем отдельно клиентский код на Opal писать - имхо ок. Но главное - не смешивать клиент и север.

1:06
Доклад, где @dgeb поэтапно развивает пример API (sorting, фильтры, pagination) youtube.com/watch?v=2t-_7E… Рекомендация №1 для разработки API.

Утро доброе, напоминаю, что с вами @listochkin и мы обсуждаем API. Вчера я с вами поделился этим докладом: twitter.com/backendsecret/…

13:50
Сегодня получился не самый активный день, обживаю старый комп. Проведем опрос: на чем бы вы делали API для SPA и почему?

А вечером мы перечисляли технологии для разработки REST API, которые нам нравятся: twitter.com/backendsecret/…

13:51

Сегодня давайте углубимся в эту тему. Для начало довольно спорный совет: код вашего API не должен возвращать 404, а другой 4xx код.

13:53

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

13:55

хороший вариант отдавать 410 Gone или просто 400.

13:56
@backendsecret в статье вашего коллеги в 10 пункте чуть более развернутый ответ habr.ru/p/265569/
14:01
@backendsecret если сервер недоступен, то он должен вернуть 5XX, не так ли?

Если бекенд сервер упал, то баллансер спереди может вернуть 404. Не рекомендую именно из-за неоднозначности. twitter.com/PZabolotniy/st…

14:09
@backendsecret однако наиболее важным является факт кеширования ответа, если нужен кеш то 410
14:13
@backendsecret Если данные не могут быть получены, об этом и надо сообщить, а не вводить клиента в заблуждение.

На практике 404 часто обрабатывается не как error а как отсутствие данных. Вчера юзер данные ввел, а сегодня их нет. twitter.com/PZabolotniy/st…

14:16

Иногда важно различать “данных нет, потому что их правда нет” и “данных нет, потому что не смогли их прочитать (а возможно, они есть)”

14:20
@backendsecret а какой статус код возвращать если внутренний сервис (например запрос к БД или микросервис) возвращает ошибку?

Думаю, какой-то из 500х. twitter.com/serebro/status…

14:26
@backendsecret верно, для второго случая удобно использовать 5XX коды.

Бесспорно. При условии, что ты можешь это сделать. twitter.com/PZabolotniy/st…

14:27
@backendsecret что значит "не смогли прочитать"?

Сценарий: бокс и баллансер. Бокс лежит, 500 отдать не может. Баллансер не видит бокс и отдает 404. /cc @PZabolotniy twitter.com/defly_self/sta…

14:30
Мы Готовы!!! KharkivJS#5 пройдет 7 ноября в субботу, мы вас ждем - kharkivjs.org ПРОМОКОД - twitter_kharkivJS

А пока мы с вами спорили о кодах ответа, стала известна дата @KharkivJS Приезжайте, будем рады! twitter.com/KharkivJS/stat…

15:41
New schedule:

Otc 4 - ngReact day @fwdays
Oct 17 - @poltavajs
Nov 7 - @KharkivJS
Nov 14 - @KirovohradJS
Nov-Dec - @KyivJS

JS-события в Украине в конце года. Не забываем также про @webstandards_ru day 31 октября в Минске. twitter.com/listochkin/sta…

16:36
@backendsecret что выбрать для нового проекта: Rails + Turbolinks(стандартно) или EmberJS + Rails в качестве API? Хочется SPA, но страшно :)

Ember CLI + Rails для API, но при этом не используй ember-cli-rails gem. Лучше держи фронтенд и бекенд отдельно. twitter.com/bytecheg/statu…

20:47
@backendsecret какой статус код возвращать в случае бизнес ошибок? Очень долго спорили: 403, 409, 422?? Или может какой другой?

409 возвращает CouchDB при конфликте записей. 403 - как замена 401 применяется очень часто. 422 не встречал в жизни. twitter.com/Anatolii_Pr/st…

20:59

зато мне попадались API, где возвращали 412 Precondition Failed, если с запросом было что-то не так. В теле ответа было описание ошибки.

21:00

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

21:02
@backendsecret в разных репках? и деплоить вообще отдельно? как синхронно деплоить и фронт, и бэк при добавлении новой фичи?

Да, деплой отдельно. На какой-то момент держи 2 версии API. Вот хорошее видео для Ember youtube.com/watch?v=4EDetv… twitter.com/bytecheg/statu…

21:22

как-бы-JavaScript вместо lua в конфигах Nginx nginx.com/blog/launching… Пока не уверен, что одобряю.

21:25
@backendsecret отлично, спасибо! и последний вопрос: как решать вопрос с SEO? prerender.io или есть другие варианты?

Вчера обсуждали:

21:33
@backendsecret кстати, в каких проектах оправдано использование CouchDB, учитывая то что везде кричат про MongoDB
21:51

.@webusnix CouchDB умеет мастер-мастер репликацию, в сочетании с PouchDB можно делать offline-first apps. @hoodiehq как раз так работает

22:05

Вот хороший доклад о важности offline-first и о реализации на основе Hoodie от @espylaub youtube.com/watch?v=dPz_5-…

22:09

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

@backendsecret @webusnix @hoodiehq у нас CouchDB хорошо зашла в проекте, где критично было master-master и ещё ряд её особенностей.
0:20
@backendsecret @webusnix @hoodiehq а вообще, если надо быстро, много и часто-часто писать данные – то лично я отдаю предпочтение Cassandra.
0:21
10 октября в Минске снова пройдет Я.Субботник. Планирую пойти events.yandex.ru/events/yasubbo… #yasubbotnik
14:04

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

14:21
@backendsecret Разве что для pet project. И то, если денег не попросят. В коммерческом проекте — ни в коем случае.
14:24
@backendsecret а как это возможно? Я понимаю, что есть сервисы генерирующие json, но это так, для отладки...

Есть так называемые Backend-as-a-Service. Как CMS для сайта, так BaaS для API. twitter.com/dcromster/stat…

14:27

Самые популярные сервисы подобного рода @ParseIt от FB и @Firebase от Google. Особенно популярны они в мобильном мире - как бекенд для apps

14:29
@backendsecret Что значит "писать свой" - к примеру взял я WordPress и тут понятно, но вот Rails считать за взял или всё-же не взял? :)

Rails, Django, и тд - считаем что свой. twitter.com/POS_troi/statu…

14:30
Вот хороший доклад о важности offline-first и о реализации на основе Hoodie от @espylaub youtube.com/watch?v=dPz_5-…

Но есть такие backends, которые вы ставите себе на свое железо. @hoodiehq который я вспоминал вчера - один из них: twitter.com/backendsecret/…

14:35

Другой такой проект: deployd.com Работает на Node+Mongo. Обязательно посмотрите демо его возможностей: youtube.com/watch?v=I_Jq1B…

14:37
@backendsecret Учитывая что я делаю такой сервис, я считаю что это будущее :)

Расскажешь больше? Что за сервис, какая ниша,что интересного внутри? Когда запуск? twitter.com/freiksenet_ru/…

14:58
@backendsecret reindex.io, бакенд с GraphQL API, заточен под React/React Native и Relay в данный момент.
15:00
@backendsecret Нам кажется что GraphQL - это то чего не хватало таким сервисам, тк одним REST сыт не будешь.
15:00
@backendsecret Мы пытаемся фокусироватся на DX, чтобы девелопер мог юзать любимые инсрументы с Reindex, а не учить новые.
15:03
@backendsecret Пока только если эти инструменты этo React/Relay, но это от того что только они пока GraphQL едят.
15:03

Но вот кстати, Михаилу @freiksenet_ru и наверное кому-то другим будет интересно. Я работаю с Relay/Falcor-подобной системой

15:07

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

15:12

У нас свой синтаксис для этого - система создавалась до того, как объявили о GraphQL.

15:14

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

15:15

Так вот, без агрегации спеки для графа по компонентам такая система (Relay/Falcor) очень и очень неудобна для разработчика.

15:16

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

15:19
@freiksenet_ru мне кажется серьёзные вещи не построишь. Но может ошибаюсь т.к. не пробовал, предпочитал сам писать. @backendsecret

Если у тебя UI-heavy приложение, то вполне хватит. Для каких-то нестандартных вещей рядом поднимай отдельные сервисы twitter.com/dcromster/stat…

15:20
@backendsecret Потому что надо менять в двух местах и они не особо пересекаются?

больше из-за того, сколько всего уже есть для REST и на клиенте, и на сервере, и проще взять это, чем изобретать twitter.com/freiksenet_ru/…

15:31

Falcor/GraphQL/наш бекенд - появились из-за тех условий, в которых оказались компании и проекты, для 99% людей REST подойдет лучше (имхо).

15:33
@backendsecret Ну REST-а же нет. Его надо писать и делать все те же велосипеды что и раньше. GraphQL/Falcor стараются это решить.

В том-то и дело, что REST есть: фреймворки типа Django REST, JSONAPI:Resources, BaaS - и умные клиенты для них. twitter.com/freiksenet_ru/…

15:44

Об умных клиентах. Это - лучшее видео о Hipermedia, которое я видел. 2010 год, формы, но стоит посмотреть vimeo.com/20781278

15:48

Еще один класс продуктов, про которые не все знают - API Gateway. Берут на себя rate limiting, auth, caching, и проксируют запросы на бекенд

21:21

Есть несколько API Gateways от разных компаний: aws.amazon.com/api-gateway/ nginx.com/products/ strongloop.com/node-js/api-ga…

21:28

Но есть и opensource API Gateway, который можно поставить у себя: tyk.io OAuth, Rate Limiting, API Mocks, Sharding, Metrics

21:30
President of Estonia, Toomas Hendrik Ilves, is a coder. Last election 1/3 of votes were cast online #cloudflaresummit pic.twitter.com/PLkf2BJptt
22:11

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

Patters of microservices architecture microservices.io/patterns/index… Ссылка полезна тем, кому интересна тема микросервисов, поэтому RT друзьям

14:09
@backendsecret что изучать из backend'a если тебе 35 лет, у тебя нет высшего образования и плохое резюме, а тебе хочется делать веб-проекты?

1. Ходи на митапы, общайся с людьми, спрашивай совета у них.

21:43

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

Когда заходит разговор о Docker, Mesos, Chef и прочих девопсизмах, я вспоминаю вот эту статью blog.circleci.com/its-the-future/ pic.twitter.com/1D5ezfm143

18:38

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

Друзья, неожиданно закончилась эта неделя с @backendsecret Мы приятно пообщались, это мой прощальный пост gist.github.com/listochkin/0bc… Пока всем!
23:59

www.youtube.com

other