listochkin

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

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

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

11:18

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

11:20

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

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

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

11:35

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

11:37

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

11:38

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

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

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

11:42

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

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

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

12:02

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

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

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

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

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

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

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

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

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

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

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

12:42

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

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

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

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

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

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

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

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

@backendsecret

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

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

19:03

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

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

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

19:08

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

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

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

19:25

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

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

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

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

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

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

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

7:32

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

7:33

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

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

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

7:37

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

7:38

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

7:45

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8:10

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

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

7:47

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

7:50

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

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

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

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

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

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

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

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

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

17:00

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

17:11

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

17:13

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

17:14

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

17:16

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

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

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

17:31

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

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

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

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

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

17:56
Посоветуйте: смена ноута - это повод попробовать Zsh? Что нужно для крутой командной строки?
18:04
@sharipov_ru @backendsecret жуткая поделка с тупыми багами в "стабильных" версиях которые никто не чинит, и страшнейшим говнокодом внутри

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

21:36

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

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

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

22:05

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

22:06

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

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

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

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

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

10:51

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

10:53

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

10:55

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

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

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

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

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

11:16

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

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

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

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

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

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

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

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

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

12: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…

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

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

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

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

17:59

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

18:00

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

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

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

18:22

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

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

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

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

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

19:05

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

19:09
@backendsecret @webusnix @hoodiehq у нас CouchDB хорошо зашла в проекте, где критично было master-master и ещё ряд её особенностей.
21:20
@backendsecret @webusnix @hoodiehq а вообще, если надо быстро, много и часто-часто писать данные – то лично я отдаю предпочтение Cassandra.
21:21

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

10 октября в Минске снова пройдет Я.Субботник. Планирую пойти events.yandex.ru/events/yasubbo… #yasubbotnik
11:04

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

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

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

11:27

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

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

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

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

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

11:35

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

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

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

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

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

12:07

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

12:12

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

12:14

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

12:15

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

12:16

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

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

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

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

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

12:31

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

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

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

12:44

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

12:48

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

18:21

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

18:28

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

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

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

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

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

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

18:43

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

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

15:38

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

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

www.youtube.com

other