# Понедельник 141 твит
Всем привет! С вами в эфире @milk_is_my_life. Последние 6 лет я занимаюсь фронтэндом, работаю в SPB TV.
7:35Т.к. компания совсем небольшая в мои обязанности входит все, от собственно кода до окружения для тестирования, деплоя и запуска на серверах
7:39Мы используем continuous integration (teamcity), а для production-серверов - docker. А что вы используете для запуска приложения?
7:45Говоря простыми словами, докер - это легкая и "дешевая" виртуальная машина. Для ее запуска не требуются дополнительные мощности и вес (...)
8:13(...) образов также умеренный. Таким образом, на выходе мы имеем полностью изолированную среду (ос) для запуска приложения.
8:15Если у вас не один проект, то, что-то подобное вам необходимо. Т.к. вы можете использовать разные версии nodejs, разные конфигурации nginx
8:23И наконец, самое важное - полную переносимость и масштабируемость. Нужен еще один сервер? Просто запусти на нем еще один контейнер!
8:35Ну и конечно - эта технология все еще молода. Нестабильная работа в ряде случаев, непонятные баги и косяки, совместимость с разными (...)
8:37(...) версиями ядра линккс - все это иногда добавляет ложку дегтя, куда же без нее в нашем деле.
8:38@jsunderhood а вы уверены что это относится к фронтенду? И js-у? Мне, кажется, это тема для DevOps-ов)9:21
никто, лучше самого разработчика, не знает, как должна быть настроена среда для запуска его приложения.
9:30@jsunderhood как вам тимсити? Сложно первый раз было запускать/настраивать?9:50
@jsunderhood тогда слишком много надо знать, чтобы быть хорошим во всем, я, считаю, не зря это все делегируется9:51
окружения для запуска своего проекта - задача разработчика. также, как и деплой, например.
9:53Есть такая штука "Full Stack engineer" - его задача, не смотреть на все через "щель" в люке @hellbeast92 @jsunderhood @jsunderhood9:54
@jsunderhood фронтенд в docker контейнерах? Только если под фронтендом подразумевается universal приложение. А это далеко не всегда так.9:54
статику, и как именно. кроме того, допустим, у вас на 1 сервере 5 приложений. как конфигурить nginx в этом случае?
9:56@jsunderhood эту информацию можно написать в readme проекта. Это одна папка, причем обычно одна и та же для всех проектов: build, dist9:57
(…) потребуется это же приложения на другом сервере - могут возникнуть конфликты конфигураций
9:58@jsunderhood еще как поддается. Есть package.json. Договоритесь в команде, об описании интерфейса в package.json и автоматизируйте10:02
@jsunderhood вы же предлагаете docker. Это значит что стандарт - это просто бинарник докера. А что и как внутри - забота отдельного10:02
@jsunderhood программиста. В итоге каждый внутри будет делать как захочет. А это еще хуже.10:02
пример базового конфига. на выходе мы будем иметь образ с установленной centos7, nginx, nodejs 4.1.1 и собственно нашим приложением.
10:10@jsunderhood я не вижу что хорошего в том, что снаружи все хорошо, а внутри как прийдется. Представь себе червивое яблоко.10:13
@jsunderhood пока яблоко не трогаешь - оно снаружи красивое. А если нажать немного, развалится. Вот такая у меня аналогия.10:13
@jsunderhood не-не. Изоляция тут вместо стандарта внутри приложения. Вот это и вызывает такую аналогию. Изоляция - ок, вне этого контекста.10:16
смотрится круто, но как решается базовая задача "zero downtime deploy"? @jsunderhood10:18
недоступен
10:21Docker - это как минимум еще один слой для возможного падения. Но он не достаточен для создания "production ready" системы @jsunderhood10:23
@rubyunderhood @jsunderhood подтверждаю, были случаи неодинаковой работы аппы в контейнере на разных системах, вплоть до отказа10:26
Конечно есть. Наелись им как и распираемым react - leopard.in.ua/presentations/… - как говорится минимум для "docker" @jsunderhood10:28
А значит придется использовать еще какие то слои, для полноценного решения, что увеличивает количество улов отказа @jsunderhood10:33
@gusnkt @jsunderhood это вопрос организации команды11:12
@gusnkt @jsunderhood всегда есть переключение контекста11:13
@hellbeast92 достаточно понимать что это, как и зачем. Иначе будут «негодные админы, которые нам билдить на сервере не дают» @jsunderhood11:14
@shuvalov_anton @jsunderhood @hellbeast92 умение поднять свой собственный CI очень важно11:16
@iamstarkov @jsunderhood @shuvalov_anton @hellbeast92 Есть неплохой self-hosted CI - drone.io11:18
давайте параллельно запустим еще один тред. его тема - деплой. после того, как вы определились с развертыванием приложения, как вы это (…)
11:34приложение доставите на сервера? ssh, rsync, etc? мы выбрали для этой цели ansible. сложновато на первых порах, но оно того стоит.
11:36а как деплоите вы?
11:36@jsunderhood отдельная git ветка production и автоапдейт по этой ветке11:54
@jsunderhood `$git push dokku master` кажется ок11:55
@jsunderhood э, ребята, вы Docker то читали? Вы просто перенесли свою виртуалку в docker, а это не docker-way11:55
запускаем вместе. это разруливается в entrypoint
12:08@jsunderhood в Docker главное правило: 1 контейнер - 1 главный процесс с PID 1, он сам выступает в роле супервайзера12:08
@jsunderhood если наборот, то зависнет одно из приложений в контейнере: место кончилось, очередь образовалась, что-то еще — хана контейнеру12:09
@jsunderhood у вас должно быть например 3 контейнера app-nginx, app-node, app-database12:16
@jsunderhood и выкатывать приложение только в app-node, и если на лету код не подхватывается, то рестарт мелкого контейнера будет шустрым12:16
их приложение (рельсовое) состоит по-моему из 4 или 5 контейнеров: сайдкик, бд, рельса, что-то еще.
12:19@jsunderhood как выглядит flow разработки в docker фронтенда? Или ты в контейнер только результат отдаешь, а остальное по старинке?12:34
отличный вопрос и это следующая наша тема - окружение для разработки. мы решили не использовать докер при разработке, потому что это
12:35оказалось неудобно - на линуксе и маке докер работает по-разному, плюс не совсем понятно как развернуть наш привычный стэк с hot-loader и
12:36browsersync. поэтому разработка ведется по-старинке, а докер собирается в момент деплоя и для тестов.
12:38ну а собственно наш стэк:
react, redux, sass.
для девелопмента:
webpack, babel, eslint, npm scripts
для тестов:
karma, mocha, chai, sinon.
кстати, финт ушами. для тестирования асинхронных операций крайне удобно использовать async/await. пример: gist.github.com/tadjik1/2874d2…
12:58плюс в том, что в одном тесте у вас может быть несколько асинхронных операций, и вы их даже можете чейнить. заботу об это берет на себя не..
13:00какой-нибудь плагин типа chai-as-promised с не очень удобный апи, а сам js!
13:01почему мы не используем gulp/grunt/broccoli/…? потому что у нас есть nodejs! а заботу обо всех source файлах на себя берёт webpack.
13:09а в dev-моде с помощью его middleware мы получаем удобное средство для апдейта приложения без перезагрузки страницы.
13:10итого: webpack → nodejs (наше универсальное приложение) → webpack middleware (+react-transform) → browsersync.
13:11@jsunderhood собираем AMI для staging потом этот же образ пускаем в прод после тестов. Образ билдим ansible13:23
у меня, кстати, практически нет личных проектов. у меня ни разу еще не получалось заниматься чем-то своим вместе с основной работой.
13:47а если всё-таки я начинал заниматься каким-то "левым" проектом - значит я лентяйничал на работе или просто не было интересных задач =)
13:49так вот. если у вас есть личные проекты, раскройте секрет - как вам это удаётся?
14:03@jsunderhood ну некоторые компании поощряют личные проекты, выделяют там дни на них, особенно если это open source14:05
@jsunderhood личные проекты разные бывает, если ты в рамках своей основной работы решил какую-то общую задачу это можно запулить в опенсурс14:14
меньше сплю и выделяю на не важное ("игры", "сериалы/кино") меньше времени @jsunderhood14:14
@jsunderhood я думаю, что хотя бы завести свой бложик - это уже неплохой свой проект14:14
пожалуй, единственный реальный кейс, который видится мне - ты в рамках своей основной задачи решил какую-то проблему, и это похоже на либу
14:16NDA главное при этом не нарушить :D @lapanoid @jsunderhood @jsunderhood14:16
.@rubyunderhood @lapanoid @jsunderhood вот кстати насчет опенсорса на рабочем месте. По сути - ты тратишь деньги работодателя - на опенсорс14:16
.@rubyunderhood @lapanoid @jsunderhood у нас, все что сделанно на работе - принадлежит компании. Опенсорс - в свободное время.14:16
@jsunderhood эм, именно chai-as-promised и берет на себя заботу, завернуть done в промис.14:17
У меня был такой - оплачивал опенсорс, что получался из проектов, но он был под акаунтом компании заказчика @mr_The @lapanoid @jsunderhood14:18
@mr_The @rubyunderhood @jsunderhood Я не предлагаю втихую выкладыать это равносильно воровству. Можно убедить работодателя что это выгодно14:19
@mr_The @jsunderhood @rubyunderhood @lapanoid это плохая позиция, надо ко всему подходить с умом. хороший опенсорс — HR брэнд для компании14:20
github.com/sendgridlabs/g… - пример такого опенсорса @mr_The @lapanoid @jsunderhood14:20
@mr_The @jsunderhood @rubyunderhood @lapanoid что выливается в экономию денег компании14:20
а также способствует более удачному хайрингу. а также привлекает сообщество, которое помогает исправлять баги и развивать продукт.
14:22Или же наоборот - риск потерять лицо компании. Когда ты сам - проще @sevaisnotcow @mr_The @jsunderhood @lapanoid @jsunderhood14:22
@mr_The @rubyunderhood @jsunderhood в опенсорсе код который вы отдали бесплатно, бесплатно улучшается и тестится комьюнити + travis и проч14:22
Если он вообще кому то потребуется - а может так же успешно и "загнивать" в публичном репозитории @lapanoid @mr_The @jsunderhood14:23
@rubyunderhood @sevaisnotcow @mr_The @jsunderhood какой-то сумрачный риск, прохие проекты редко громкие ими просто не пользуются14:23
я полностью согласен. примеры: kitty php от vk, reactjs от fb.
14:24@rubyunderhood @jsunderhood @mr_The это означает, что решили не общую задачу, или непонятно как использовать - тайные знания внутри компании14:25
@jsunderhood нет, ты не понял. async функция возвращает промис. chai без плагинов не понимает промисы.14:25
посмотри gist. внутри синхронного чая используется асинхронный вызов. этот подход удобнее, чем оборачивание в плагины.
14:26Проблема, что мы любим указывать на success case, но плохих еще больше - просто о них не трубят @lapanoid @jsunderhood @mr_The @jsunderhood14:28
done() callback в помощь, что бы тест дождался @jsunderhood14:29
я не хочу заморачиваться с done(), это ведь неудобно в тестах, так?
14:29@gusnkt @jsunderhood Зато mocha понимает.14:29
@rubyunderhood @jsunderhood Нет, done как раз нужен был до промисов, с ними нет смысла.14:29
@rubyunderhood @jsunderhood @mr_The критика это часть культуры opensource, если есть страх ее - нет смысла выкладывать14:30
почему не удобно? тот же контроль выполнения кода (я сообщил, когда тест кейс завершился) @jsunderhood14:31
Поэтому одному и проще: компания может быть не заинтересована в подобном риске (им и так хорошо) @lapanoid @jsunderhood @mr_The @jsunderhood14:31
ну т.е. если ты работаешь в компании, где никто не хочет ничего менять - мб стоит сменить её?
14:34перечитал, и понял какой неудачный каламбур получился =) я имел ввиду смену работы, конечно. а то ведь и jquery работает, зачем нам SPA?
14:35Подход - "все в опенсорсе становится лучше" - точно не работает всегда @jsunderhood @lapanoid @mr_The14:35
@RReverser @jsunderhood @rubyunderhood просто return промиса делаем и счастье14:49
@jsunderhood каламбур как раз удачный)15:06
@lapanoid Критики бояться не стоит. Выложил код, получил горшок говна и знаешь куда подрости :) @rubyunderhood @jsunderhood @mr_The15:57
Немного про инструменты. Один из самых популярных инструментов у меня в работе — виртуалки с разными IE.16:29
Раз такая пьянка, давайте пройдемся по выбранному стэку. Начнем с реакта, конечно, он же такой модный :)
18:23Итак, почему мы выбрали его. Это был долгий путь, мы последние 2-2.5 года писали на нокауте (mvvm- паттерн). Но затем стало понятно, что
18:25Этот подход плохо сочетается с переносимостью. В условиях, когда у тебя параллельно 5-6 проектов, это невероятно дорого.
18:26Далее был рассмотрен hmvc, который вроде бы решал эти проблемы, но не до конца и опять-таки основная боль виделась в M и C
18:28Ну и в итоге мы поняли, что правильный путь - компоненты. Мы стали использовать компоненты, которые предоставляет knockout, это было почти
18:30То, что нам нужно. Но нам сильно стал мешать 2-way data-binding, который вносил много путаницы. Таким образом мы и пришли к реакту.
18:31Все маркетинговые штучки типа виртуального дома, сервер-рендеринга к нам пришли уже сами собой, и мы им очень рады, нет проблем с сео,
18:32Именно! Самая большая прелесть состоит в том, что кодовую базу на компоненты удается переводить, а не писать все с нуля.
18:38@jsunderhood а может ли сообщество порекомендовать newbie-level материлов про серверный рендеринг? Прям для тупых, вчера пузырек написал18:42
Я так понимаю речь идет про реакт? Если да, то я не смогу помочь, т.к. пришел в него уже опытным разработчиком, и мне хватило документации
18:44@jsunderhood если есть не про реакт, тоже ок, там сам отфильтрую18:54
Для меня это все началось с nerds.airbnb.com/isomorphic-jav…. Но тогда я даже не мечтал, что смогу сделать что-то подобное, про реакт не слышал ничег
18:55Мне казалось, что за этим должны стоять огромные компании, и сотни суровых разработчиков. А потом появился реакт, и это стало доступно всем
18:56Помню прибежал тогда к рубистам, говорю, смотрите, как было бы круто! Вернуть не пустую страницу с крутилкой, а сразу маркап, не вкрячивать
18:59пререндер, а просто заботиться о мета тэгах и правильной верстке. ну они конечно не поняли ничего, чуть в дурку не сослали.
19:00@_sashashakun немного outdated, но суть особо не поменялась medium.com/@alexfedoseev/… @jsunderhood19:01
Если быть честным, они до сих пор не очень в курсе, что там за контейнер с нодой появился, и зачем она нужна для обычной статики :)
19:03Соскучился по русскоязычному сообществу, наконец то записался на @jsunderhood. Ждите на неделе с 23 ноября.19:04
А будет холивар с поклонниками CSSInJS? Запасаться попкорном? :)
19:05@jsunderhood уже ж был19:18
Холиваров много не бывает ☝
19:19Следующий элемент нашего стэка - сасс. Выбор был прост, мы его используем уже давно, все наши проблемы он успешно решает.
19:44На всякий случай посмотрели на postcss, посмотрели на css-модули, не смогли придумать проблем, которые они бы нам позволили решить
19:46@jsunderhood а стили вместе с компонентами не распространяете? У вас же там горстка проектов?19:49
@jsunderhood или стайлгайдом все покрыто?19:49
Стили конечно с компонентами живут, а изоляция обеспечивается бэм-именованиями классов
19:50@jsunderhood так а подключаете как к проекту стили каждого компонента?20:11
Мы импортим стили прямо в компоненте, нам вебпак позволяет это делать.
20:12@jsunderhood ручное именование классов это боль, css-модули сильно удобнее + строки сильно короче20:13
@jsunderhood программист ленив в этом его супер сила и если можно спихнуть что-то на машину-он обязан это сделать. Бэм добавляет кучу рутины20:13
Ну в целом я с вами согласен, мне не очень нравится как все получается с бэмом.Но перейти на css-modules будет очень просто,вернемся к этому
20:15@jsunderhood и у вас получается один жирный жс бандл, который грузится и блокирует приложение?20:21
Стили отдельно не выносите? Above-the-fold?
Почему же? ExtractPlugin в продакшн выносит все стили в отдельный файл.
20:23@jsunderhood асинхронных операций очень мало. 99% тестов должны проходить синхронно21:40
Интересная мысль. Но я говорю про тот 1%, который тестировать тоже надо
21:42@mr_mig_by @jsunderhood можно чанки с CSS webpack.github.io/docs/styleshee…21:42
Завтра мы с вами обсудим самую сложную часть нашей системы-работу с данными. Флакс, редакс, mvc, mvvm, baobab, angular (не знаю как назвать)
21:46# Вторник 75 твитов
@jsunderhood предлагаю всем ведущим, помимо ссылок на используемые технологии, давать еще и ссылки на проекты, где они это все используют6:29
@jsunderhood CSS Modules нужны для тех же проблем, что решает БЭМ. Можно сказать, что CSS Modules просто БЭМ автоматически.6:30
пожалуй, я тут соглашусь. я не знаю, почему мы не взяли просто css-modules =)
6:30@jsunderhood сразу видно что это SPA. Сначала загружается список каналов, а потом We're sorry, only available inside Russia. Почему так?7:21
Дело в том, что каналы загружаются еще на сервере, а проверка геопозиции происходит уже на клиенте. Фактически это баг, я поправлю.
7:22Давайте поразрушаем стереотипы? Стереотипы будем брать из твиттера про руби.Там почему-то тоже обсуждался реакт.Ну а что им еще обсуждать?)
7:37universal - ok, но рендерит template в строки мог и mustache на сервере, а разрулить забор данных на разных уровнях? @rainrb @jsunderhood7:37
Стереотип 1. Реакт, это не темплейт энжин, jsx !== jade|hbr|etc. То, что реакт умеет рендериться в строку и даже в нейтив - его природа
7:41Стереотип 2. Раз реакт такой крутой, то как мне сделать ...? Реакт настолько крут, что вы даже приложение должны писать сами.
7:44Ну если вы знаете как устроен react virtual dom внутри и почему другие имплементации пока быстрее - плюс Вам @as_Crazy @jsunderhood @rainrb7:44
Ну и конечно же, скорость виртуального дома.Забудьте о виртуальном доме, вам надо писать приложение. Ом, элм, virtual dom, берите,что хотите
7:46Если же вы не знакомы с хаскелем или хотите писать для браузера на жс - реакт на данный момент отличный выбор!
7:47Ну и последний стереотип: реакт - не панацея. Да, скоро появится что-то новое. Но то, что он принес в жс - выгодно его отличает от
7:51Фреймворков старого образца: смотрите, у нас такой 2-way, а у нас такой, а у нас директивы, а у нас коллекции, своя система модулей и т.д.
7:53@jsunderhood в nginx можно конфиги инклудить из директории — пусть каждый там себе файлик заведёт и при деплое обновляет каким-нить chef8:11
При таком подходе (1 nginx), никто не гарантирует, что ваши конфиги не будут конфликтовать друг с другом. Не всегда это так, но разгребать
8:12Горы конфигов каждый раз было мучительно
8:13@jsunderhood а ещё статику можно на CDN положить и забыть8:13
Ну так статика - это наше приложение, а сдн - наши сервера. Это никак не противоречит идее изоляции приложений на сервере, так?
8:15@rubyunderhood @jsunderhood @as_Crazy @rainrb Это не обязательно, чтобы использовать эффективно реакт. Достаточно понимать концепции.8:16
@jsunderhood обновления на сайте jsunderhood.ru10:03
например jsunderhood.ru/RReverser/ и у всех авторов тоже pic.twitter.com/eQubaISatM![]()
@denysdovhan @jsunderhood Problem Driven Development10:38
Job Safe Driven Development
10:39Ну что, переходим к вопросу о работе с данными. Мы выбрали redux by @dan_abramov. Почему? Начнем с критериев отбора:
10:421. возможность "кэшировать" данные. пользователь, загрузив список фильмов, например, должен иметь возможность открыть страницу с фильмом
10:44или если пропадёт интернет (на мобилке) он должен иметь "ходить" по приложению, видя те данные, которые уже были им загружены
10:45таким образом вопрос "кэширования" сводится к вопросу удобной работы с данными на уровне данных, если проще - минимум абстракций
10:47почему, например, мы не взяли бекбон с его моделями и коллекциями. потому что работать с коллекциями, в которых у моделей есть связанные
10:48сущности - очень и очень сложно. гораздо проще оперировать js-сущностями, такими как массив, хэш, используя встроенные методы map, reduce…
10:51кешировать данные и отдавать кешированное можно на уровне диспатчера - для этого не нужен redux, нужен просто flux @jsunderhood10:51
абсолютно верно! это я еще не подошел к redux, это я просто говорю, почему не backbone.
10:52@jsunderhood backbone-style, имеется ввиду, с его моделями и коллекциями
10:53Ну если взяли react, то какой уже backbone в таком случае? @jsunderhood10:55
На react нужен pub-sub (flux), а не MV* @jsunderhood10:56
@jsunderhood я делал гугл табличку - по критерию выписывал как каждый flux соответсвует goo.gl/x84KPf + есть репа со всеми flux11:09
после того, как мы поняли, что флакс - то, что нам нужно, мы стали уже перебирать реализации. пописав на "классическом" быстро поняли, что
11:10это мука. очень много бойлерплейта, "независимые" сторы, waitfor и т.д. тогда же попался на глаза очень приятный flummox, который
11:11вскоре стал deprecated в пользу redux. также, мы всерьез рассматривали baobab (christianalfoni.github.io/javascript/201…) и nuclear (github.com/optimizely/nuc…)
11:13но как обычно в таких делах грамотный маркетинг, и простота api redux довольно легко уделали всех конкурентов. +хот-релоад, система плагинов
11:15@jsunderhood а проблем с роутингом у вас нет? Вот у меня есть ключевая проблема с flux и redux - где хранить данные, нужные одной странице?11:56
@lapanoid @jsunderhood Кстати Redux сейчас не имеет зависимости от React (в табличке имеет)11:58
@jsunderhood @lapanoid Oh shi~~~ Поправьте чтобы сохранялся выбранный язык! Хотя бы в пределах сериала. )12:01
@jsunderhood не, ну допустим у вас есть список постов и страница на пост. Где хранить 1 пост?12:11
Давайте поговорим про окружение для разработки. Когда-то мы использовали nginx и галп вотчеры, теперь вебпак и браузерсинк. Хот релоад-круто
16:54Помню эти муки, как повторить стейт, в котором у тебя поехала форма, или вообще ошибка произошла какая-нибудь
16:57@jsunderhood умение написать кучу кода, который разом начинал работать в браузере - вот это истинное мастерство. Презентации Брета казались
16:59@jsunderhood чудом из другого мира
17:01Я не знаю откуда у меня столько ностальгии, сегодня просто был тяжелый день :)
17:03@jsunderhood когда-то я херачил код script'ами в head, а теперь кладу ссылками в конец body и внутри оборачиваю в !function(){}()17:03
Пишу на universal - node, react, hot-reload, прочее счастье. Но тут возник вопрос: неужели нет hot reload для express? @jsunderhood17:15
@rubyunderhood @jsunderhood миддлвары мутирующие res, мне кажется сильно осложняют задачу17:15
@jsunderhood но раньше можно было еще и исправить код в браузере, который обновлял файлы в проекте.17:16
@jsunderhood так вот это было еще круче чем эти ваши хот-релоады :)17:28
А по поводу отключения - с движением в SPA это пока мечты. Сейчас многие будут смеяться, если им сказать "а если JS выключить" @nick_jastix18:59
Такоя я могу тоже без JS :D @jsunderhood @nick_jastix pic.twitter.com/5oNmCYN5Wp19:02![]()
Перейти то я могу, но толку от этих квадратов Малевича? @jsunderhood @nick_jastix pic.twitter.com/W2GJoKbxzq19:06![]()
@jsunderhood @rubyunderhood @nick_jastix до полной загрузки страницы выглядит страшненько (WP8.1) pic.twitter.com/clER14o0dY19:07![]()
Хороший пример - try.discourse.org, который написан на Ember, но при отключении JS работает @jsunderhood @nick_jastix19:12
@rubyunderhood @jsunderhood современный веб: на одном сайте нужно отключить жс, чтобы работало. На другом - включить.19:13
Обфускаторы сборки React, которые не позволят так нагло оперировать props и state в prod @jsunderhood @nick_jastix pic.twitter.com/4tCXUAeoXi19:27![]()
В разнообразии сила. Пример: доминирование IE6 в вебе к чему привело @jsunderhood @nick_jastix pic.twitter.com/GIyZygDtEM19:31![]()
Да потому что веб перерос этот язык. Поэтому у нас появились babel, typescript, coffescript и прочие препроцессоры @jsunderhood @nick_jastix19:45
Реально? Такие вопросы? Да на них кто угодно ответит @jsunderhood @nick_jastix19:55
Хотелось помечтать, налетели рубисты
19:55Может о чем-нибудь отвлечённом? Смотрит кто-нибудь цска, болеет за ребят?
20:43@alexeyraspopov @rubyunderhood @jsunderhood reactunderhood.20:52
@jsunderhood нет, только не футбол! Давай лучше про фичи es7. async/await использует кто-нибудь уже? Как ощущения?20:52
@jsunderhood а bind-operator? Я на него и сам подсел, и коллег подсадил и теперь немного волнуюсь, что оно в стандарт не попадёт.21:26
@jsunderhood а что значит «плохо транспилится»? Неэффективно? Отлаживать неудобно? На первый взгляд вроде норм.21:30
@maxmaximov @jsunderhood Если я не ошибаюсь то вы можно попробовать async/await в новом IE с чакрой.21:53
@xgrommx @jsunderhood ну да, это просто сахар (как и половина всех новых фич из es6/es7)21:53
@jsunderhood @maxmaximov поподробней плз. На нагрузочных тестах по скорости и памяти сервис полный async/await показал себя вполне норм.21:53
@xgrommx @maxmaximov @jsunderhood21:55
Это называется T_PAAMAYIM_NEKUDOTAYIM /cc @RReverser
@jsunderhood 50rps на 6 воркерах (6 cpu), нагрузка на фронте <30%, дальше сдохло api. Повторить не смогу, уже ушёл с этого проекта.22:03
# Среда 20 твитов
А кто-нибудь пишет функциональные тесты? Понимаю, что это задача тестировщиков, но тем не менее
12:25Недавно задумал на тимсити перед собственно деплоем прогонять тесты на приложении. Понравился casperjs.
12:26@jsunderhood С чего это задача тестировщков? Всегда писал такие тесты сам.13:35
@jsunderhood Что именно интересно? :)13:42
Между тем, из стандарта es7 убрали object.observe. Мне вот сразу казалось это крайне сомнительной фичей.
13:45@jsunderhood решал проблему рефакторинга недокументированного легаси. Предварительно покрывал смесью функциональных и юнит тестов.14:20
TDD, BDD - тесты пишут девелоперы @jsunderhood14:20
Хотел еще спросить, кто еще не использует es6 в работе? Мы вот хоть и с боями, но перешли на него в начале года. Только хорошие эмоции
14:28@jsunderhood ещё не убрали, только собираются esdiscuss.org/topic/an-updat…15:21
@jsunderhood с Babel перешли или как?15:21
@jsunderhood Только stage 0, только хардкор :)15:22
@jsunderhood интересно ваше мнение. Почему для вас кажется это сомнительной фичей?15:48
@jsunderhood у нас переходят на TypeScript. Поэтому моя консоль теперь всегда красная16:24
@jsunderhood из аргументов называли: CommonJS, es6, типизация, проще понимать. На практике я вижу больше минусов, чем плюсов16:31
@jsunderhood а библиотеки для совместимости какие-нибудь использовали?16:36
@jsunderhood чем понравился casperjs? Он же нерасширяемый!19:31
@jsunderhood он подсаживает на себя. Потом понадобится прикрутить что-то к тестам, а не получится. Лучше разделить framework,asserts,browser19:46
@jsunderhood Не первый это скажу, но автоматизированные тесты есть задача разработчика. Тестеры пусть делают то, что сложно формализовать21:05
@jsunderhood собрать стек самому из phantomjs, mocha и chai например. Или из jest с чем-нибудь21:05
@jsunderhood @boriscoder Selenium + mocha + chai21:06
# Четверг 12 твитов
@jsunderhood пишу и мне кажется это задача dev'ов если нет тестера, а часто его нет. С тестами есть уверенность6:38
@VovanR @jsunderhood а какие минусы?6:59
@dmitryshimkin @jsunderhood например сторонние либы в основном идут без tsd, а те, что есть, часто устаревшие. Консоль всегда красная =(6:59
@VovanR @jsunderhood @dmitryshimkin да взял тайпскрипт на проект с реактом. выпилил уже, задолбало поддерживать =(7:05
@rubyunderhood @jsunderhood @nick_jastix Rise of the Compilers - Brendan Eich youtu.be/PlmsweSNhTw, brendaneich.com/2015/06/from-a…11:29
интересна тема обучения.последнее время появилось невероятное кол-во курсов, учебников и пр.но лично для меня эталон learn.javascript.ru
13:25@jsunderhood да. крутой продукт. что думаешь про @YDKJS ?13:37
возможно не все знают, но learn.javascript написан на nodejs и его код находится в open source. github.com/iliakan/javasc…
13:41@jsunderhood мы в @htmlacademy_ru понемногу пишем на es6. Сплошное удовольствие.15:16
кстати, у меня такой вопрос. документируете ли вы код, и какие средства для этого используете? любимый jsdoc, к сожалению, не понимает es6.
15:17вроде как есть возможность использовать dev-версию jsdoc, кто-нибудь настраивал?
15:18# Пятница 52 твита
второй день подряд полностью поглощен докером =) удалось перенести все процессы (тесты, генерацию документации, e2e и т.д.)внутрь контейнера
15:06@jsunderhood почти travis получился из тимсити
15:10@jsunderhood а зачем документацию в контейнере генерировать?15:11
для генерации документации тоже нужно специально окружение (nodejs), это окружение поднято в докере
15:12@jsunderhood у тебя это делает CI. Это уже контейнер. В чем проблема в нем поставить node?15:13
один ci используется для многих проектов, и каждому может потребоваться своя версия ноды, например
15:14@jsunderhood если она действительно понадобится - nvm. Но скорее всего все запустится на той же версии, что и проект.15:19
nvm не решает всех проблем: может различаться ос, и компилируемые пакеты могут не заработать.
15:21@jsunderhood why not @droneio from the start?15:23
because we are using private git repository and self-hosted teamcity as CI server
15:24@jsunderhood могут. А в действительности есть такие проблемы, или это решение предположительно возможных?17:39
Конечно реальные, у меня на ноуте мак, на прод серверах центос, как мне собрать контейнер локально? (Если нет доступа к ci)
18:19Хочу начать изучение нового языка.Не для практических целей, а скорее для более фундаментальных знаний.Выбираю между scala, closure, haskell
18:23@jsunderhood брейнфак рулез! Он вечен. Остальные рано или поздно умрут.18:25
@jsunderhood А какие знаешь?18:25
Самый большой опыт - js, писал на c, c++. Немного на руби и пхп.
18:29Это, кстати, мой комплекс - я думаю, хороший программист обязан свободно владеть набором языков. Даже если в работе используешь только 1.
18:30@jsunderhood виртуалку развернуть с нужной системой на маке?18:32
Так докер - это тоже виртуалка, и апнуть версию centos, в ней гораздо проще. Кроме того, образы можно наследовать, что добавляет гибкости
18:34@jsunderhood постоянно прыгаю в проекте между js и ruby . всегда легкий затык, пока переключусь18:37
@jsunderhood Попробуй Elm.18:37
Ну это как с выбором фреймворка для js - я не хочу учиться писать классы 1000 и 1 способом, хочу больше думать про алгоритмы и стр. данных
18:47Ну и с человеческим синтаксисом, конечно. Поэтому не с, например. (Не хочу никого обидеть, это личное мнение)
18:48@Semenov @jsunderhood плюсую за clojure) а потом - haskell18:50
@jsunderhood Дляобщего развития можешь Clojure попробовать18:52
@jsunderhood так это и на js тогда можно18:57
Ну я же начал с того, что хочу выучить новый язык. Js позволяет многое конечно, но есть и другие
19:02@jsunderhood а захочешь сменить работу, без опыта в фреймворках не берут - реальность :( как будто это важнее самого знания джс.19:02
Это конечно субъективно, но таких компаний все меньше. Например, у нас знание фреймворков вообще неважно, важно лишь знание языка и опыт.
19:03Причем опыт программирования на любом языке.
19:04@jsunderhood ну и зря, какой бы огромный опыт велосипедов у тебя не был, фреймворк диктует свои паттерны и имеет определенные особенности.19:09
@jsunderhood нанимать того, кто с ними не знаком — потеря времени и вероятность говнокода или того, что разработчик просто не справится.19:09
боюсь, что меня обвинят в очередном холиваре, но я не согласен ни с одним выводом. а раз ведущий на этой неделе я, то я расскажу свою правду
19:11ни angualr, ни ember, ни knockoutjs, ни react, ни что-нибудь еще не предложили миру "своих" паттернов. максимум - свои реализации mvc,mvvm..
19:12программист неплохого уровня сможет достаточно быстро "пересесть" с одного фреймворка на другой, даже если они написаны на разных языках
19:14@jsunderhood offtop. Поделитесь ресурсами для поиска работы ?19:20
не специалист в вопросе поиска работы — но в России по-моему работают хорошо 2: linkedin и hh
19:21У нас внутри компании был случай, когда js стал рубистом, а еще на работу во фронтэнд взяли студента 5-го курса с опытом java.
20:12И оба - прекрасные специалисты!
20:13@jsunderhood Java - это не приговор!20:13
@jsunderhood а вот интересно как владеть свободно, если без практики все эти туториалы вылетают из головы через месяц20:46
А вот хороший вопрос. А вот не знаю :) но думаю, что выучив раз, легко вспомнить по справочнику.
20:48@raxpost @SilentImp @jsunderhood опенсорс жалует новичков20:56
@SilentImp @jsunderhood бывает сложно придумать небесмысленный проект на новом языке/технологии, а в опенсорс новичков не жалуют20:57
@SilentImp @raxpost @jsunderhood главная мысль была: зачем учить абсолютно незнакомый язык, не имея понятия, куда его применить?21:10
Я знаю куда его применить. @nikitonsky не даст соврать, идеи одного языка отлично работают в другом
21:14@jsunderhood clojure - другой мир совершенно21:18
@jsunderhood @nikitonsky потом “первый” язык применять вообще не захочется.21:43
Не думаю, что closurescript больше подходит для фронтэнда, чем что-либо
21:44@serhey_shmyg @jsunderhood у нового @moikrug переодически бывают новые интересные вакансии (я именно про их твиттер)21:51
@jsunderhood он тоже clojure)21:52
@jsunderhood попробуй и измени своё мнение навсегда :)23:06
З.Ы. язык эт еще не все, экосистема играет большую роль
# Суббота 14 твитов
@jsunderhood а нам ведь так не хватает принципиально новых паттернов...
:)
@jsunderhood а нам ведь так не хватает принципиально новых паттернов...
6:24
@jsunderhood подскажите системы для мониторинга и логирования фронтенда?7:59
мы используем bugsnag, он платный. насчет логгирования не знаю даже, консоль? а вообще всё зависит от требований.
8:00@akochemasov @jsunderhood гугл аналитикс ;)8:11
@akochemasov @jsunderhood Sentry + Raven8:50
@akochemasov @jsunderhood, sentry или bugsnag.8:50
@Chudesnov @akochemasov @jsunderhood нет, нужно самому перехватывать onerror и слать в GA сustom event.10:00
developers.google.com/analytics/devg…
@Chudesnov @akochemasov @jsunderhood плюсы: гибкость, риайлтайм и вся мощь отчетов GA. Минусы: стектрейсы не войдут, понимает только строки10:00
Via #reactiflux, how to automatically create a vendor bundle with your #webpack production build: pic.twitter.com/Ynjymnt07U10:20![]()
Разделяете ли вы итоговый код приложения на бандлы? Если да, то каким образом? Мне способ с require.ensure кажется громоздким, и особого
12:59Смысла в таком разделении я не вижу. Буду ждать либо человеческий апи (в идеале его отсутствие), либо уже системные лоадеры js
13:00Это я не про бандл с вендорами говорю - его как раз стоит выделять и кэшировать на клиенте.
13:01@jsunderhood стоит ли разделять на бандлы, если можно все так и оставить в отдельных файлах и поставить http/2 ...18:37
Если можно было его так просто поставить...
18:37# Воскресенье 19 твитов
@jsunderhood пришёл добрый @kinday и принёс на сайт Лайкли от @ilyabirman7:02
Проверяйте jsunderhood.ru pic.twitter.com/vY8SPqaVaw![]()
Кстати, каждый ui разработчик должен отличать дефис от тире и ставить в тексте правильные кавычки.Это очень просто с раскладкой @ilyabirman
9:15Оказывается [1,2,3].map... — это не функционально, а map([1,2,3], ...) да. Хотя наверное стоило догадаться и без Elm.
9:22Никак не могу выбрать шрифт и редактор, борьба идет между fira и droid, и между atom и webstorm.
9:24@jsunderhood Source Code Pro!9:28
@jsunderhood на самом деле функционально это так: map(some, arr)9:41
@jsunderhood atom + fira ванлав pic.twitter.com/aAfugpxS64
А лигатуры откуда?
@jsunderhood atom + fira ванлав pic.twitter.com/aAfugpxS64
9:41
@jsunderhood Точнее `map(fn, coll, ...)`. Данные всегда в конце.9:42
@jsunderhood после этого плагина atom.io/packages/atom-… только atom9:42
Почему я не пользуюсь атомом всегда (мне он тоже очень нравится) — мне очень удобно работать с гит в вебшторме.
9:44@naorunaoru плюсую. Я чего только не перепробовал, и только он прижился @jsunderhood9:45
@jsunderhood Sublime и Hack! И будет тебе счастье. github.com/chrissimpkins/…9:54
@jsunderhood у меня атом считай не работает на 4к мониторе,все пищит и глючит. Вообще после полугода на атоме возврат на саблайм — как домой
А у меня с ресайзом проблемы. Чуть окно подвинул или на другой монитор перетащил — лови артефакты
@jsunderhood у меня атом считай не работает на 4к мониторе,все пищит и глючит. Вообще после полугода на атоме возврат на саблайм — как домой
9:56
По поводу тем: уже довольно давно я использую только светлые темы, мне код читать проще.
10:09@jsunderhood я вас умоляю, любое "проще" результат привычки :) правильнее говорить "не пробовал использовать хотя бы неделю"10:23
Да пробовал, конечно. Просто гораздо удобнее нажать кнопку, тут же зарезолвить конфликт, и тут же писать код.
10:25Хотя наверное стоит привыкать делать все через терминал
10:26@jsunderhood, теперь имя текущего автора красуется на главной: jsunderhood.ru16:59Время фразы: «Мам, смотри, я в телевизоре!»
Пришла пора прощаться. Спасибо большое всем за внимание, спасибо что читали и отвечали, с вами было интересно! В эфире был @milk_is_my_life
19:27# Ссылки
github.com
- https://github.com/aickin/react-dom-stream
- https://github.com/sendgridlabs/go-kinesis
- https://github.com/optimizely/nuclear-js
- https://github.com/iliakan/javascript-nodejs
- https://github.com/esdoc/esdoc
- https://github.com/chrissimpkins/Hack
other
- http://bit.ly/1LLwsh4
- http://leopard.in.ua/presentations/rubyc_2015/index.html?full#DockerToolsSlide
- https://drone.io/
- https://gist.github.com/tadjik1/2874d268016a1a52df6c
- http://risovach.ru/upload/2014/04/mem/chetko_47781166_orig_.jpg
- http://nerds.airbnb.com/isomorphic-javascript-future-web-apps/
- https://medium.com/@alexfedoseev/isomorphic-react-with-rails-part-iii-f272e03087e3#.x7e4f68fk
- https://webpack.github.io/docs/stylesheets.html#styles-from-initial-chunks-into-separate-css-output-file
- https://ru.spbtv.com/
- http://ru.spbtv.com/
- https://jsunderhood.ru/
- https://jsunderhood.ru/RReverser/
- http://www.toptal.com/front-end/simple-data-flow-in-react-applications-using-flux-and-backbone
- http://goo.gl/x84KPf
- http://christianalfoni.github.io/javascript/2015/02/06/plant-a-baobab-tree-in-your-flux-application.html
- http://www.amediateka.ru/
- http://redux.js.org/docs/advanced/ExampleRedditAPI.html
- http://try.discourse.org/
- https://esdiscuss.org/topic/an-update-on-object-observe
- https://youtu.be/PlmsweSNhTw
- https://brendaneich.com/2015/06/from-asm-js-to-webassembly/
- http://learn.javascript.ru/
- https://hacks.mozilla.org/category/es6-in-depth/
- https://developers.google.com/analytics/devguides/collection/analyticsjs/events
- https://atom.io/packages/atom-commander