raxpost

4 июля 2016, Frankfurt on the Main, Germany

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

Утречко! На этой неделе с вами @raxpost - человек фулстек из Франкфурта

8:32

Будем много говорить о типах, ноде и фулстеке. Думали не будет реакта? Хренушки, от него никуда не деться

8:35

Давайте начнем с небольшого опроса, а чуть позже я расскажу что сам думаю по теме. Нужны ли в js типы?

8:48
@jsunderhood я не могу определиться. С одной стороны типизация добро-меньше ошибок. С другой стороны-уже поздно :)

Есть опциональная, будем считать, что она относится к ответу Да twitter.com/dcromster/stat…

9:51

Думаю все поняли, но на всякий случай суть сабжа: js типы очень слабые, но есть возможность вводить типизацию посредствам доп инструментов

12:59

Вот лишь некоторые из них: TypeScript, Flow, Elm, PureScript, Dart

12:59

Самому мне очень симпатичен Haskell, но еще не доводилось его использовать на продакшене. В вебе он непопулярен

13:05

И во многом именно благодаря сильнейшей типизации. Когда хаскелист пишет программу, ему нужны 100% гарантии бизнес требований

13:07

В реальном же мире, пока вы допишете ваши базые типы, к вам 10 раз прибежит проджект и скажет, давай по новой, миша, все ху%$я

13:09

Поэтому типизация несет оверхед на этапе прототипа, а бизнес от веба ждет всего очень быстро

13:11

При это она сильно помогает при рефакторинге, все ошибки отлавливаются почти сразу

13:12

Более того, вы экономите на тестах, потому что чем строже типизация, тем ближе вы приближаетесь к описанию всех возможных кейсов уже в коде

13:16

Я к сожалению совсем не знаком с Elm и PureScript, если кому-то есть что сказать про них в плане нашего топика, пишите

13:17

Однако на хайпе, столь для нас родном, сейчас TypeScript и Flow. По этому поводу второй опрос

13:21
@jsunderhood опциональная типизация в php вроде бы. А есть в нашем треде люди с успешным опытом ее использования?
13:27
@jsunderhood бизнес код поддерживать команде и новеньким, текущие инструменты мне кажется сильно повышают порог вхождения
13:27
@jsunderhood В реальном мире, одно слово перед параметром функции экономит дофига времени во всем процессе разработки.
13:46
@dcromster @jsunderhood Про меньше ошибок — абсолютный миф. Не влияет. А вот удобочитаемость, по-моему, страдает. medium.com/javascript-sce…

Эта статья всех бомбанула пару месяцев назад. Не сказал бы что она что-то доказывает, но - попытка разобраться twitter.com/ruGreLI/status…

13:53
@jsunderhood более того, последний год Babel просто имплементирует фичи, которые уже есть в TypeScript.

Соглашусь, с TS вы получаете все новые ES фичи бонусом. Тогда как в 6 бабеле в это время выпиливают декораторы twitter.com/twenty/status/…

13:59
@jsunderhood на самом деле не все так просто.Например, модули в typescript вели себя совершенно иначе и до сих пор отличаются от es6-modules
14:10
@jsunderhood 30% не знают, что TypeScript покрывает весь функционал Flow + избавляет от необходимости использовать Babel.

Не был бы так категоричен, например буквально недавно TS добавил descriminated unions, которые уже были в Flow twitter.com/twenty/status/…

14:11

А есть кто за Flow? Давайте сравним, что там есть, чего нету в TS. А пока посмотрим маленькую презу djcordhose.github.io/flow-vs-typesc…

14:15

Например @vkurchatkin собирает коллецию сниппетов, где Flow ведет себя лучше чем TS github.com/vkurchatkin/ty…

15:15
@jsunderhood изначально flow и ts созданы для разного. ts для того, чтобы писать все на ts, а flow - чтобы проверять существующий код
15:33

И у меня есть вопросы к обоим сторонам: например есть ли во Flow параметрические типы данных?

16:02

И как с помощью TS проверять типы, описанные в JSDoc. Говорят так можно

16:03

Напомню, что JSDoc имеет тэг usejsdoc.org/tags-typedef.h… который поддерживает композитные типы и юнионы

16:05
Why do I prefer jsdoc3 instead of TypeScript/Flow? Types is meta information, like Contract in DbC. We should separate it from program code.

И например @DenisIzmaylov считает, что это лучше, чем типы в коде twitter.com/DenisIzmaylov/…

16:08
@jsunderhood есть, и, в отличии от ts, поддерживается ковариантность и контрвариантность
16:19

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

@jsunderhood github.com/Microsoft/Type…

Да, но почему-то он не проверяет типизацию. Съедает
/**
* @type {number}
*/
var var1;
console.log(var1.length); twitter.com/chicoxyzzy/sta…

6:43
@jsunderhood а расскажешь про typelint?

Сейчас как раз плавно к этому перейдем :) twitter.com/myjsalterego/s…

9:02

Продолжим о типизации. По моему опыту большинство проблем возникают при обращении к несуществующему свойству объекта. Пресловутый undefined

9:04

Потому что сложно держать в голове все структуры и интерфейсы приложения. Где-то вы обязательно промахнетесь

9:05

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

9:06

Поэтому меня огорчило, что у WebStorm'a до сих пор нет полноценной поддержки Flow. C TS у них все отлично

9:07

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

9:19

Если вы пишете апи и не используете что-то типо Swagger, API Blueprint итд, то для вас уготован отдельный котелок в аду

9:23

Возьмем локальный стейт и самое популярное решение - Redux. У него есть структура, описанная редюсерами и initialState'ами

9:24

Возьмем пока чуть менее популярное решение - Relay, у него вообще типизированные схемы данных для GQL

9:25

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

9:26

Так родилась идея github.com/yarax/typelint -- сделать линтер, который знает о данных приложения и помогает писать код безопасно

9:27

Пока он поддерживает только JSON Schema как формат описание данных (используется в Swagger), но я планирую добавить поддержку Redux и GQL

9:29

Кстати JSON Schema по-моему недооцена. Эот хорошо описанный универсальный формат для JSON. Почему все постоянно изобретают что-то свое?

9:30

JSON Schema поддерживает algebraic data types за счет енумов, allOf и anyOf. И если не нужна хитрая динамика, этого зачастую достаточно

9:32

Например уж mongoose и thinky точно могли бы его использовать. Было бы универсальнее + толчок к развитию единого стандарта

9:46

Говоря об API, в Haskell есть фреймворк Servant, который описывает все ваше апи в типах. АПИ в ТИПАХ Карл. Вот это высота

9:59

Но зато такое апи нельзя будет использовать в typelint :)

10:01

Ладно, больше не буду про хаскель, а то все разбегутся

10:02
@jsunderhood @twenty синтаксис ещё не утверждён — правильно делают, что выпиливают. Всегда можно плагин поставить, если очень нужно.

Полгода собачку утверждают? А в это время полвеба юзает декораторы в TS, вторая половина через легаси бабель плагин twitter.com/ilnurkhalilov/…

12:38
@vkurchatkin @jsunderhood Спрос на эту фичу есть, значит рано или поздно примут. Только вот поведение может отличаться от нынешнего

Именно. Только смысл было ее убирать полностью, если все равно продолжают пользовать с таким функционалом какой есть twitter.com/boriscoder/sta…

13:12

Завершая тему типов, кто еще не знает есть телеграм чатик по TS telegram.me/typescriptru Может кто-то знает/создаст по Flow?

14:16

И небольшая шпаргалка по типам в TS, Flow, JSON Schema и Haskell, круто если кому-то есть что исправить/дообавить github.com/yarax/typescri…

14:17
Давайте начнем с небольшого опроса, а чуть позже я расскажу что сам думаю по теме. Нужны ли в js типы?

Голосование нужна ли в js типизация: 57% Да, 43% Нет. Подтверждает ощущение, что "хорошо бы, но дорого" twitter.com/jsunderhood/st…

14:21

Выход - опциональная и без дополнительного писания типов, юзайте typelint :D

14:22

Голосование TS/Flow: TS: 58%, Flow: 42%

14:23
@jsunderhood было бы неплохо, но вроде бы в русскоязычном мире Flow мало используют

По ходу да, кроме тебя про Flow все молчат) twitter.com/vkurchatkin/st…

14:57

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

@jsunderhood Многи ли в js архитектурных подходов\решений для приложений? Как происходит выбор для нового проекта? Где подобное почитать?

MVC умирает вместе с ОО подходом, компоненты могут решить почти любую задачу и дают больше гибкости twitter.com/ivkinovich/sta…

9:07

В продолжении вчерашней темы про API, немного о REST. REST - говно

9:08

Но от него никуда не деться, потому что он по сути есть HTTP. А HTTP это наше все. И низкий уровень REST'a увеличивает прозрачность

9:10

Но чаще всего, если решение прозрачное, оно не богато возможностями.

9:11

Ограничения REST думаю всем известны: недостаточность ресурсной модели, ограниченность GET запросов, неуклюжий PUT

9:13

А если вы захотите поменять транспорт например на сокеты, то вообще будете переписывать слой работы с данными

9:14

На этом фоне даже JSON-RPC выглядит более привлекательным. Но если вы на реакте, то для вас открыт целый преферанс-бордель: Relay

9:35

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

9:37
@jsunderhood Relay/GraphQL не всем подходит, он сложный, имхо

Кстати да, почему он считается сложным? twitter.com/roman01la/stat…

9:38
@jsunderhood Мне кажется, что сама идея 👍, но конкретная реализация для многих проектов — оверхед. Для больших да, там все это пригодится.
9:41
@jsunderhood можно пример про больше гибкости?

В OOP-MVC переиспользование - наследование, компонентная структура ближе к FP, когда чистая ф-я может юзаться везде twitter.com/vladimore/stat…

9:53

Сама природа UI - компоненты, мне кажется это естественно

9:53
@roman01la @jsunderhood самый простой путь – сделать прослойку для агрегации REST-запросов.

Вот я сейчас точно так же буду пытаться мигрировать систему на GQL. REST при этом должен остаться twitter.com/maxmaxmaxmax/s…

9:55
@jsunderhood наследование - механизм subtyping-а, ad-hoc полиморфизма.ООП-инкапсуляция и мессаджинг,то-есть компоненты в чистом виде

Совершенно верно,но так сложилось у всех в головах,что ООП-это наследование. Инкапсуляция и полиморфизм универсальны twitter.com/8gene/status/7…

10:01
@jsunderhood effectful компоненты /= чистые функции, и не композятся в общем случае.Кроме того, ф-ции слишком низкоуровневые

1. Мы говорим про переиспользование 2. В чем проблемa объединения в модули? twitter.com/8gene/status/7…

10:03
@jsunderhood чистое фп и всякие редуксы не решают проблем инкапсуляции стейта, то-есть не решают вообще ничего.MVС как раз и есть компоненты

Инкапсуляция стейта (если она действительно нужна) решается как и инкапсульция скоупа функций - локальным стейтом twitter.com/8gene/status/7…

10:04
@jsunderhood и еще: MVC /= OOP

В MVC без OOP не остается вообще никакой системы, кроме ненужного разделения логики от представления twitter.com/8gene/status/7…

10:07
@jsunderhood переиспользование стейтфул компонентов /= пересипользованию чистых ф-й. Модули не помогут инкапсулировать стейт.

Вопрос: зачем инкапсулировать стейт, который мешает переиспользованию? Ради инкапсулирования? twitter.com/8gene/status/7…

10:13
@jsunderhood попробуй сделать такое в языке з правильной системой типов и типизированными effect-ами - сильно удивишься)

В strong type FP данные пайпом проходят через ф-ии. В реакте это усложняется необходимостью дублировать пропсы twitter.com/8gene/status/7…

10:24

Есть контекст, но он все еще не стабилен

10:25
@jsunderhood инкапсуляция - необходимое,но недостаточное условие переиспользования,и самой вожможности существования больших, сложных систем

Я с тобой согласен, что в реакте есть проблемы со стейтом. Но есть серебряная пуля? twitter.com/8gene/status/7…

10:34
@maxmaxmaxmax @roman01la @jsunderhood хочется узнать о таком опыте подробнее. На сколько это было накладно по производительности?
11:09
@roman01la @jsunderhood jsonapi же.

Я с ним мало знаком, но по-моему он работает поверх реста, нет? twitter.com/blia/status/75…

11:28
@mr_mig_by @roman01la @jsunderhood да, это то что назвают BFF
11:30
@mr_mig_by @roman01la @jsunderhood думаю, имеются ввиду два последних слайда с slideshare.net/MaxKlymyshyn/p…
11:30
@jsunderhood расскажи про проблему стейта плиз

То, что глобальный не дает инкапсуляции, а локальный мешает переиспользованию twitter.com/mr_mig_by/stat…

11:36
@jsunderhood а зачем инкапсуляция?

Например для связи компонентов со стейтом, она чаще всего прослеживается. Но как я говорил выше глобал - это решение twitter.com/mr_mig_by/stat…

11:43
@jsunderhood лучше почитать jsonapi.org/format/ Скажу, что там лучше работать с релейшенами, выводить одним запросом детей(с фильтрами)…

Формат это формат. Но в основе рест - все те же GET, PATCH twitter.com/blia/status/75…

11:44
@jsunderhood я ничо не понял. Как инкапсуляция связывает состояние с компонентом?

Вам с @8gene надо дебаты устроить :) Один говорит везде инкапсуляция, второй инкапсуляция не нужна twitter.com/mr_mig_by/stat…

11:47

Возвращаясь в API, кто-то пробовал Falcor?

12:01

В нашем случае GraphQL позволит разгрузить клиент от кэширования, асинхронных экшенов и более точно и гибко запрашивать данные

12:03

Но меня смущает существование 2 стейтов (Редукс и Релей) одновременно. Есть механизмы поддержания консистентности, но все равно стремно

12:05
@jsunderhood А какой у вас продукт?

Огромная админка управления рекламными компаниями. Много форм, поэтому без локального стейта не обойтись twitter.com/roman01la/stat…

12:08
@jsunderhood мы в редаксе держим только состояние UI: табы, комбобоксы и т.д.

Да, в идеале хотелось бы так же twitter.com/roman01la/stat…

12:09
@jsunderhood У нас много такого кода и мы не храним такие данные в редаксе. Обычно родительский компонент собирает эти данные и отправляет.

Да, я тоже считаю, что форма должна быть в стейте компонента, но у нас это легаси redux-form twitter.com/roman01la/stat…

12:21
@jsunderhood про ваше решение для форм. форм может быть много и интересно как вы описываете формы и шарите общий код между
@roman01la

Когда-то мне нравилась идея построения форм на основе моделей, но в реальном мире это не работает twitter.com/myjsalterego/s…

12:51

Форма рисуется вручную и к полям биндится специльный пропс field, содержащий value, onChange итд. В hoc field связывается с redux

12:52

Возможно когда-нибудь @nosovsh выложит это в опен сорс :)

12:54

Кстати также мы юзаем довольно удобное решение для работы с редакс-стейтом github.com/nosovsh/reduce… тоже от @nosovsh меньше мороки с экшенами

12:56
@jsunderhood а можно подробностей про то как Редукс и Релей живут вместе?

Они в общем друг другу не мешают. Главное держать данные консистентными. У редакса стор через dispatch, relay - hoc twitter.com/dmzkrsk/status…

13:08

Кстати поигрался с github.com/gyzerok/adrena… и понял, что без Relay чистый GraphQL - сомнительное удовольствие

13:10
@jsunderhood у нас была одна итерация декларативно описывать формы на сервере, но отказались из-за необходимости свой язык поддерживать

Мне раньше нравилась эта идея, но в реальности UI должен быть очень гибким twitter.com/myjsalterego/s…

13:22
@roman01la @jsunderhood @apollostack там нет метеора, там есть appolo-client, он интегрируется с реактом или редаксом, можно пользоваться
13:51
@jsunderhood @8gene я считаю, что состояние нужно выносить вовне. Это должна быть отдельная ось композиции компонента

Это интересная тема. Но как например обеспечить неизменение куска стейта другим компонентом? twitter.com/mr_mig_by/stat…

14:59
@mr_mig_by @8gene если есть данные, которые нужны ему и только ему, их логично скрывать в компоненте
15:02
@mr_mig_by @8gene Каждый компонент жестко связан с редаксом, это противоречит weak coupling. Но я не утверждаю, что это приносит проблемы
15:02
@jsunderhood @8gene к примеру, Symbol в качестве имени компонента в глобальном состоянии.
Но вопрос - зачем обеспечивать неизменность?

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

15:06
@mr_mig_by @jsunderhood композятся интерфейсы - поведения, view. Стейт не имеет интерфейса, он просто есть.А стейт с интерфейсом-это инкапс.

Да, но при этом я не вижу решения как разрулить strong coupled data между компонентами, кроме глобального twitter.com/8gene/status/7…

15:13

Пока что мне видится оптимальным - там где возможно использовать локальный стейт - юзать локальный, где нет - глобальный

15:14
@jsunderhood каждому новому человеку нужно предоставить отдельное рабочее место, ветку стейта и редьюсер!
15:17
@jsunderhood @mr_mig_by @8gene как предсказать, что эти данные не понадобятся кому-то ещё в будущем?

Никак, только рефакторить twitter.com/ALF_er/status/…

15:18
@jsunderhood @mr_mig_by @8gene и по этому мне больше нравится идея Лёхи: данные - отдельная ось

Но если не рефакторить, стейт превращается в огромную помойку twitter.com/ALF_er/status/…

15:22
@jsunderhood @nosovsh connectSlicedState('pages.blogs.data.activePost') - это не очень хорошее решение. компоненты привязаны к форме стейта.

А вот это второй вопрос что есть связь компонента и глобального стейта? Соответствующий ключик редюсера? twitter.com/smashercosmo/s…

15:23
@jsunderhood я оч устал рефакторить, поэтому сторы редакса у меня это "база данных". локальный стейт — для UI штук (eg dropdownIsVisible).

Еще кстати из базы данных нужно гибко выбирать и кэшировать новые данные. Поэтому мне нравится подход Relay twitter.com/alexfedoseev/s…

15:28

Кстати пока у нас тут жарко, прогоню телегу. Нам во Франкфурт нужен реакт удаленщик. Пишите кому интересно в лс @raxpost

15:40

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

Буквально пару лет назад мне было интереснее на сервере. Сейчас все наоборот

9:22

В бекенде все кристализовалось: devops, data analysis, API. Конечно все еще есть интересные задачи (gamedev например), но их все меньше

9:22

При этом есть вероятность, что API скоро кристализуется в BAAS, потому что это рутина

9:22

А на клиенте вот можно вместо работы спорить нужно ли разделять view и где должен быть стейт,параллельно играясь всякими rx и прочими сагами

9:23

И пока на клиенте весело и задорно с реактом, на сервере царит мракобесие во главе с Express

9:23

Несколько месяцев назад я написал статью почему экспрес зло yarax.ru/2016/02/26/exp…

9:32

Туда пришел TJ и сказал, чувак, мопед не мой, дизайн node/http - говно

9:32

И это отчасти правда, но node/http это низкий уровень. Задача прикладных библиотекарей - делать правильные абстракции

9:32

Поэтому нет смысла спорить что лучше koa или hapi, пока все они наследуют дизайн node/http лишь обрастая сахаром

9:33

Не может же быть такого, наверняка кто-то уже написал либу с правильным разделением http имплементации от логики ручек?

9:35

Это же делается элементарно, я даже накидал небольшой гист gist.github.com/yarax/e68c7623…

9:36

Объясню чуть подробнее. Довольно очевидно, что апи должно описываться декларативно.

12:43

То есть у либы есть вся информация в каком формате данные приходят из http и в каком должны туда уходить. http - это контекст

12:43

Очень хочется сказать слово монада, но обещал этого не делать

12:43

Так почему этот мутирующий непредсказуемый req носится по всему приложению, собирая в себе все что не попадя?

12:43

Если задача ручки - сделать запрос в базу, обработать данные и вернуть их, зачем ей этот req?

12:43

Ладно, не пошло, давайте лучше посмотрим как енот ездит на велосипеде pic.twitter.com/wxCGR8QWi3

13:38
@jsunderhood это Backend as a Service? Почему тогда рутина?

В том смысле, что все сводится к декларативному описанию апи, а дальше банальные запросы к базе twitter.com/Copypasting/st…

15:28

А имея какой-ть full text search engine и GQL на фронте, можно делать вот такие штуки почти вообще без бекенда github.com/nordsimon/elas…

15:31
Собрал в кучу слайды с @OdessaJSgist.github.com/boccob/2243904… cc: @jsunderhood
16:59

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

@jsunderhood абстракции текут (с)

Текут конечные монструозные низкоуровневые решения. Не просто текут, а находятся постоянно на грани фола twitter.com/evgeniy_moroz/…

7:21

Говоря об абстракциях, @nikitonsky недавно написал довольно очевидную (почему-то еще не для всех) статью про это tonsky.livejournal.com/307231.html

7:26

Ну да бог с ней с философией, нравится людям express, пусть старадают :) Давайте поговорим о реактивном программировании

7:27

Я использую

7:30
@jsunderhood если быть точным, то Rx, Bacon, Kefir не есть FRP :-)

Расскажи подробнее twitter.com/8gene/status/7…

7:47
@jsunderhood rx etc-это императивные effectful реактивные не-формальные системы.

А ну я понял что ты имеешь, меня тоже смущает, что почему-то все добавляют в аббревиатуру букву F twitter.com/8gene/status/7…

7:56

Говоря о событиях, например нам нужен момент, когда на серв все асинх сервисы готовы. Это можно сделать например так gist.github.com/yarax/3dac9ae1…

8:06
@jsunderhood кстати, вот обзорный спич про таксономию фрп - youtube.com/watch?v=Agu6ji…
8:07
Neat redux-observable example with RxJS 5: github.com/redux-observab… pic.twitter.com/19gj1Z9lOR

А вот пример использоваться Rx в Redux. Как вам такой подход? twitter.com/dan_abramov/st…

8:14

Люди, указавшие в опросе вариант "другая" напишите плз какая именно и почему

8:16
@jsunderhood вот в контексте RxJS отличный пример и статья про построение Redux-like приложения victorsavkin.com/post/137821436…
8:28

Тем временем нам поступает интересный фидбек от слушателей pic.twitter.com/EMhAJ15zEf

8:58
If you want to know how your expression of Rx works you can use this one jsbin.com/gogofa/4/edit?…
@OdessaJS
9:03
@8gene @nikitonsky @jsunderhood цель любой абстракции есть вытеснение иной абстракции из головы. Жизнь есть борьба абстракций. 👻
9:20
@8gene @nikitonsky @jsunderhood на уровне котика квантовых полей нет - они схлопываются ещё до зачатия котика.

От экспресса до котика в квантовых полях twitter.com/taujavarob/sta…

9:22

Мое мнение, что использовать стримы там, где можно промизы, избыточно и непрозрачно. Но возможно я не прав, раскажите, про ваши юзкейсы

9:49
@jsunderhood @raxpost На промисах всегда нужно ждать их окончания, со стримами же можно начинать отправлять ответ клиенту почти сразу же.

Окончание промиза означает что данные fulfilled и с ними можно работать. Можешь код привести? twitter.com/canvaskisa/sta…

10:02
@jsunderhood 1) если надо (будет) результаты резолва промисов комбинировать, 2) если везде стримы и есть два промиса в коде

Да, в этом случае оправдано twitter.com/NikitaDyumin/s…

10:40

Еще немного о типах. Недавно пришлось работать с кодом, который делает всякую арифметику с бюджетами.

12:40

Значения приходят извне и могут быть чем угодно. Что мы имеем: undefined, null, NaN, String, Number и никакой определенности

12:40

Тайпчекеры (например Maybe во Flow) не позволят вам cложить number с undefined

12:41

Это лучше чем ничего, но недостаточно, т.к код обрастет страшными ифами и станет нечитабельным

12:41

Очень хочется изобрести свой тип Maybe, но такие попытки выглядят немного смешными github.com/chrissrogers/m… по сути они ничего не решают

12:41

Как вариант - сделать вид, что Maybe у нас есть и написать арифм ф-ии работы с ним: gist.github.com/yarax/841ea9df…

12:41

В итоге null рассматривается как у Flow - тип Nothing и с этим уже можно работать

12:41
Если менять конструкцию инвалидного кресла, у человека новая нога все равно не вырастет. #javascript #it twitter.com/jsunderhood/st…

Строгая типизация не избавляет от разруливания union типов, просто не будет NaN и undefined twitter.com/shevasya/statu…

12:57
@just_hank_moody хорошая статья tjournal.ru/users/24702/po…, могу заметить что весь движ начался с @jsunderhood и jsunderhood.ru
14:01
Друзья, рад сообщить: 8-й Node.js Meetup мы проводим в Яндексе! 13 июля, среда, 19:00. Регистрируйтесь events.yandex.ru/events/yagosti… #MoscowNodeJS
14:43

Почти 100 человек проголосовало и из них целых 83% вообще не используют FRP. Отсюда у меня следующий вопрос

15:38
@jsunderhood есть ещё третий вариант: мне нравится идея, но выглядит слишком сложно и боюсь брать на проект куда придут ещё люди после меня
15:47
@jsunderhood кстати, о нашем милом и добром реакте: twitter.com/forwebdev/stat…

Cons какие-то мутноватые twitter.com/taujavarob/sta…

19:36
@jsunderhood С ним код получается сложнее, если мне будет нужна абстракция которая усложняет я пойду в хаскель монады писать.
19:37
@vladimore @jsunderhood иногда в JS что-то не прокатывает. Например в JS4 не прокатило полноценное ООП. И это на пике популярности ООП. 👻

Да, было время все пытались притягивать за уши js к ООП twitter.com/taujavarob/sta…

19:39
@jsunderhood @vladimore удивительное то что не притянули тогда JS. Странно это. Имхо.
19:44

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

@taujavarob Мне кажется для JS sweet spot это императивный код на низком уровне и иммутабельность и базовое ФП на высоком. @jsunderhood
7:12
@freiksenet_ru @mr_mig_by @jsunderhood усложняют люди, которые выбирают неправильные абстракции для конкретного случая :)
7:12

Норм визуализашка по Rx методам rxmarbles.com

9:21
let capitalism = function(){ this.wellfare++; };
let communism = () => { this.wellfare++; };
9:24

Давайте чуть-чуть про фулстек.

10:23
@jsunderhood @raxpost есть распространенное мнение что человек-фулстек это как "не вашим и не нашим". Что думаешь про это?

Есть такое, частенько это ощущаю. Всегда тебя будут считать квалификацией ниже, чем профильные twitter.com/as_Crazy/statu…

10:27

Но я с собой ничего не могу поделать, есть Computer Science и мне интересно все, что с этим связано

10:34

Еще для понимания всей системы в целом и принятия правильных решений полезно знать как работает каждая часть

10:35

Времени конечно на все не хватает не будет хватать, но хорошо знать самые важные элементы нужно

10:37

Поэтому я запланировал себе на этот год получить сертификат lpi.org

10:39

Расскажите про ваш опыт и ощущения фулстека

10:39

К тому же все меняется каждую неделю только на фронте, информатика с математикой не меняются

10:42
@jsunderhood, я на бэке, нра фронт как недостающий вариант
10:43
@jsunderhood отличный опыт, отличные ощущения. Но печаль, потому что работать приходится с людьми, у которых такой суперсилы нет

Это да, но оно в твоей голове, я писал про мнение окружающих. Тут как обычно, каждый считает себя самым умным twitter.com/mr_mig_by/stat…

10:49
@jsunderhood а ещё можно вести беседы со всеми специалистами и посещать любые конфы - всегда интересно и понятно
10:50

Бек мне не нравится тем, что все самое интересное там происходит на нагрузках. А настоящие нагрузки редко где есть

10:51

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

10:52
@jsunderhood Без понимания бэка фронту жить будет очень тяжко. Это отсутствие возможности общаться на одном языке.

Если нет базового понимания, то все совсем плохо twitter.com/webholt/status…

10:53

А быть одновременно на беке в нагрузках/биг дате и на фронте - нереально, тут хочешь не хочешь надо выбирать

10:54

А уметь написать апи + базовое знание основных БД, не весть какой скил

10:55
@jsunderhood Расставлять приоритеты. Можно в одно погружаться по полной, а в остальное — по остаточному принципу, по чуть-чуть.

Вот в бек с нагрузками к сожалению нельзя погрузится частично. И даже дома пет проджект будет бесполезен twitter.com/webholt/status…

10:56
@jsunderhood Даже если в качестве джуна, подай-принеси, посмотреть, как умные люди работают.
11:14
@jsunderhood начинал с ruby. потом перекочевал в js, тк изначально шёл в dev, чтобы делать законченные продукты (а без js тут никак) 1/3
11:23
@jsunderhood на текущем проекте бэк рельсовый. но жить в 2 языках, один из которых js, (мне) нереально, не успеваю. ruby уже чужой 2/3
11:23
@jsunderhood поэтому единственный вариант фулстек для меня—это нода. но имо каждый фронт должен быть фулстек, хоть немного. иначе тяжело 3/3
11:23
@jsunderhood Фронт веселее и приятнее, бек это скукота и рутина. Наклепай говнорест, заверни в него недоорм. 😖
11:42

По поводу ноды, да очень удобно не переключать синтаксис языков.

12:11

Забавно, раньше все думали что смогут переиспользовать код клиент-сервер. Оказалось это не нужно. Но сработало в плане npm

12:13

Хейтеры обычно говорят что на беке есть языки лучше. Типо вот в питоне тоже появился евентлуп

12:15

И что js ужасен. Но, если вы страдаете от типизации - берите typescript. От колбеков - async/await

12:17

Единственное что нельзя поменять - дебильные методы, половина которых мутирует обьект, половина - нет

12:18
@jsunderhood сейчас программистов гораздо гораздо больше. И % математиков среди них стал мизерным.
12:20
@jsunderhood Засада в том, что, по моим наблюдения, пуфон не всегда лучше. Не всегда быстрее, уж точно.
12:20
@jsunderhood В питоне зато все методы мутируют.

Ну хоть какая-то определенность twitter.com/freiksenet_ru/…

12:34
@jsunderhood JS решает проблемы без понтов, макро и штанги. Никто не ценит идейность JS, поэтому его просто развивать.

Да, идейность это ограничения. Поэтому безыдейный js получился таким гибким twitter.com/freiksenet_ru/…

12:36
@jsunderhood И я не говорю что питон или хаскель плохие (хотя питон конечно плохой), просто объясняю почему мнение "js говно" это отлично.

Проблема в том, что можно добавлять новый функционал, но нельзя выпиливать старое говно из-за бекворд компатибилити twitter.com/freiksenet_ru/…

12:43
@jsunderhood Делаю фронт (реакт), делаю бек (питон), всё нравится, где мой вариант?
14:40
@freiksenet_ru @jsunderhood поэтому чистый питон стоит дешевле чем фулстек? )

Вакансий кстати именно на фулстек мало почему-то по моим наблюдениям twitter.com/antonplankton/…

14:42
@jsunderhood делаю фронт, бек, архитектуру, big data, machine learning, semantic web и R&D - по-моему, это лучшая работа в мире :3

Воу twitter.com/yamalight/stat…

15:36
@yamalight @jsunderhood но в конце тебя всё равно в дурку посадят.
16:17

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

@webholt ты опять взял интерпретируемый язык. сравни с чем-то побыстрее) @jsunderhood

А это тоже вопрос. Все помешались на Go, потому что он быстрый. А зачем им скорость еще не придумали twitter.com/indieloki/stat…

8:11

Сишники при этом как сидели, так и сидят, их все устраивает. Нет, вот теперь каждый пхпшник считает своим долгом написать на Go

8:12

На моей памяти, узким местом всегда были базы данных и никогда - сам язык. Для этого нужны нагрузки уровня fb/badoo/vk

8:16
@jsunderhood да тут, послушать, у всех проекты уровня fb/Google/Yandex
8:31
@jsunderhood Ну, хз. Когда та же запросы к базе занимают 90% бюджета быстродействия, наверное, нужно, чтобы всё работало быстро.

Это как так, открыть сокет и начать слушать данные это 90% бюджета? twitter.com/ruGreLI/status…

8:48

Если запросов очень много, то это либо кривость архитектуры, либо половина из них не нужна клиенту. И тут нода хороша евент лупом

8:50

Поскольку у нас получилась неделя абстракций, давайте посмотрим выступление на эту тему Cheng Lou на React Europe youtu.be/mVVNJKv9esE

9:12
@jsunderhood вполне себе нужно, с изоморфными приложениями

Кстати интересная тема. Давайте посмотрим кейсы изоморфа: сервер рендер, валидация. Что-то еще? twitter.com/operatino/stat…

10:40

У нас мы используем одну валидацию на клиенте и сервере, основанную на свегер схеме. Пока полет нормальный

10:46
@jsunderhood @operatino переиспользование логики

А вот это как раз то о чем я писал,как мне кажется это не взлетело. Потому что общих кейсов не так много. Как у вас? twitter.com/roman01la/stat…

10:47
@jsunderhood у нас есть переиспользование SQL запросов между сервером и мобильным приложением
11:05
@jsunderhood Но в целом да, редко выходит что-то пошарить между платформами.
11:05

Расскажите кто использует React сервер рендер, чем это вам помогает?

11:08
@jsunderhood любые утилиты, сервисы, комбинирование запросов можно на том же сервере делать если нету отдельного АПИ сервера с доступом
11:22
@jsunderhood static site generator
11:22
@jsunderhood сайт работает без js. Ну и роботы, конечно.
12:35

Еще один базворд не затронули - микросервисы

13:23

Сама по себе модульность - вещь хорошая и работающая, но как любое хорошее дело ее легко запороть

13:23

Вам нужны микросервисы, если: нужна распределенность, знаете как разделить бд, знаете как настроить кластер и CI

13:23

Конечно докер. Но контейнеризация-вещь молодая, мало утилит, они сырые, бест практикс нет. Мы потратили несколько месяцев только на кластер

13:24

Что касается разработки: все выносить в либы (npm через git), никогда не лезть в зону другого мс, заложиться на разные транспорты

13:24

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

13:24

В целом эти советы полезнее, чем вся эта книжка pic.twitter.com/B2KVcprZhy

13:25

Ну и традиционная рубрика других посмотри, себя покажи. Кидайте ссылки на ваши личные проекты

14:26
@jsunderhood mds-online.ru поиск и послушать онлайн "Модель для сборки"
15:52
@jsunderhood Генератор стайлгайдов для Реакта (вдруг кто-то ещё о нём не знает): github.com/sapegin/react-…
16:57
@jsunderhood npmapi.invntrm.ru — быстрое открытие github-репозиториев для npm-пакетов
17:06
@mxtnr @jsunderhood $ npm repo pkg — вот так проще
17:13

Вот и время прощаться. Кстати через час финал ЧЕ. Как вы к футболу?

18:06

Спасибо всем, кто участвовал в дискуссиях, это была классная неделя. Пишите фидбек по github.com/yarax/typelint, мне он очень важен :)

18:07

github.com

other