# Понедельник 12 твитов
Привет! На этой неделе @rubyunderhood веду я, @vazilla. Будем говорить о рельсовом фронтенде, Assets Pipeline и пользе
8:52Работаю удаленно в Flatstack. Работаю и на бэкенде, и на фронтенде, потому что пришел в Рельсы с фронтенда
8:53Мой карьерный путь: сисадмин, PHP, J2EE, Rails 2, верстка-верстка-верстка, Sinatra, и снова Rails
8:56Уверен, главное — польза. Поэтому давайте сегодня поговорим о самых полезных книгах/статьях/видео
9:02Какие книги/статьи/видео разделили вашу профессиональную жизнь на до и после? Что посоветует прочитать/посмотреть каждому Руби-программисту?
9:02@rubyunderhood что можно сделать с assets pipeline? как спасти будущее связки rails + современный frontend?10:05
.@G3D, об этом завтра. Предлагаю пока подумать, чем не устраивает Assets Pipeline? Чего в ней не хватает? Почему с ней нужно что-то делать?
10:06.@rubyunderhood, Practical OOD in Ruby Сэнди Метц. Все, что надо знать, про объекты, SOLID, наследование и управление зависимостями в Руби
14:14.@rubyunderhood, Don't Create Objects That End With -ER — yegor256.com/2015/03/09/obj… Вправляет мозги после контроллеров, интеракторов, хелперов
14:16.@rubyunderhood, youtube.com/watch?v=27Ct3Z… — Алексей Плуталов из @evilmartians, о том как организовывать/структурировать JS в рельсах
14:18.@rubyunderhood, vimeo.com/100010922 — Hot Reload в React/Webpack от @dan_abramov. Именно таким и должен быть DX (developer experience)
14:20.@rubyunderhood, youtube.com/watch?v=URSWYv… — снова Сэнди Метц. Полчаса и ты знаешь о юнит-тестах всё
14:24# Вторник 27 твитов
Гайз, в компанию по разработке игровых терминалов требуется RoR + Backbone.js dev на долгосрочный период. Remote.11:15
/cc @rubyunderhood
Привет, привет. Сегодня о самом больном, об Assets Pipeline (sprockets). Но сначала немного истории
11:20@rubyunderhood «Confident Ruby» by Avdi Grimm pragprog.com/book/agcr/conf… + «Ruby under microscope» by Pat Shaughnessy patshaughnessy.net/ruby-under-a-m…11:24
AP появилась в 3.1 (2011 год). В то время ребята мучались с sass --watch. А в Рельсах из коробки мы как боги писали CSS без ; и {} (SASS).
11:26AP простая и технология из трех процессов: компиляция (coffee -> js), конкатенация (//= require) и сжатие (uglify, ...)
11:27Плюс cache busting и стильные хелперы. Для 2011 года этого было достаточно. Но сейчас 2015, а AP в том же состоянии
11:29Взгляните, что нового добавили в sprockets 3.x: github.com/rails/sprocket…
11:29Первым, кто заявил, что AP — мертва, был @andrey_sitnik в 24 выпуске RadioJS: radiojs.ru/2015/06/radioj… (25:00)
11:35Есть теория, что застой в AP связан с застоем в Руби-комьюнити: Рельса и Руби сейчас именно в том месте, в котором хотели бы себя видеть
11:36"Наш выбор: Turbolinks и RJS". Рельсы и AP застряли в том времени, когда вся динамика в приложении — это замена HTML фрагментов на странице
11:39И это неплохой подход: он отлично будет работать для новостных сайтов и простеньких приложений. В таком случае с AP/Turbolinks можно жить
11:41@rubyunderhood @andrey_sitnik, это уже довольно давно обсуждалось в комьюнити, задолго до 24-го выпуска RadioJS :)11:44
Плагины для AP в 2014-2015 пишутся просто: берешь js-либу, прогоняешь через browserify и встраиваешь в AP через execjs
12:17Дело нехитрое. Вот, например, мой CSS-постпроцессор для AP для поддержки rem в IE8: github.com/vast/rails-pix…
12:19Но, когда я поймал себя на том, что корчую postcss-плагин для AP, понял, что это все неправильно
12:20Поэтому в 2015 я стараюсь собирать фронтенд нодой, а Рельсу использовать в качестве тонкого сервера
12:21@rubyunderhood рельса и тонкий сервер – лол12:23
А вам как Assets Pipeline/Sprockets? Всего хватает? Не подставляете рядом webpack/gulp?
12:25@rubyunderhood первые действия при сетапе проекта:12:35
1) настроить базу
2) вырубить sprockets
3) включить православный gulp (либо webpack)
@artemeff @rubyunderhood тонкий сервер на Rails выглядит так pic.twitter.com/GnDAQ5myir14:02![]()
@rubyunderhood фронтенд живет в отдельных репозиториях. Problem Solved :)14:03
.@listochkin, само собой. А тестируете как? В каком из проектов держите интеграционные тесты?
14:04@rubyunderhood это же везде, комьюнити собирается идеей, потом комьюнити трудно принимать, что-то новое. Они же пришли сюда из-за идеи14:04
@rubyunderhood всё хорошо: выключатель есть и работает, репозиторий с нодой рядом ставить удобно)14:04
@rubyunderhood @andrey_sitnik давно обещал рассказать как у них там с gulp работа налажена16:57
@rubyunderhood API only решает эту проблему. Бэкенд - отдельно, SPA - отдельно.17:12
@rubyunderhood зависит от. но в целом:19:08
# Среда 13 твитов
Доброе утро. Жаль, но защитников у Assets Pipeline не нашлось. Сегодня поговорим об еще одной моей любимой теме: о тестах
10:16Я начал с Test::Unit и фикстур. Прошел Cucumber и получил посттравматический синдром. В итоге, пришел к Rspec + Capybara + Jasmine
10:19Весь наш стек для тестов можно посмотреть здесь: github.com/fs/rails-base/…
10:20Долго бросался из крайности в крайность: 100500 интеграционных тестов, 0 юнит-тестов -> 0 интеграционных, 100500 юнит-тестов
10:22В итоге пришел к чему-то похожему: robots.thoughtbot.com/testing-from-t… Начинаю с фича-спеки (одна на сценарий) и добавляю юнит-тестов по вкусу
10:25В интеграционных тестах не опускаюсь до реализации и пишу на псевдо-DSL (почти site_prism): gist.github.com/vast/3771a6a0a…
10:30Большую часть этих трюков подсмотрел тут: elabs.se/blog/51-simple…
10:31Чтобы быстро переключаться между классом/тестом и запускать тесты из Саблайма пользуюсь packagecontrol.io/packages/RubyT…
10:32По субъективной статистике test-first у меня получается в 40% случаев. В других случаях (code-first) не доверяю тестам, которые не падали
10:34Пишу юнит-тесты и для вьюх (редко, чаще всего это смелл), и для JS (Jasmine + jasmine-jquery). Классицист, не мокист: martinfowler.com/articles/mocks…
10:40Какие у вас секреты, принципы и правила в тестировании? Какой стек технологий используете? Какое соотношение интеграционные/юнит тесты?
10:42Сразу отвечу про правила/принципы:
* signalvnoise.com/posts/3159-tes…
* justinweiss.com/blog/2015/05/0…
Плюс великолепные слайды доклада @darth_sim "50 оттенков красного": slideshare.net/ssuserfc4417/5… (жаль, не нашел видео)
10:55# Четверг 12 твитов
@rubyunderhood @darth_sim не в лучшем качестве, но youtube.com/watch?v=ismsJY…8:53
Доброе утро. Давайте сегодня о ревью кода. Стили смотрите? Локально проверяете фичу? Используете чеклисты для ревью? Сами себе ревьюите?
10:36@rubyunderhood делаем быстрое ревью пул-реквестов, остальное через CI. В конце итерации более обстоятельное ревью10:55
@rubyunderhood то что упускает замыленный глаз автора:явные ляпы, документацию,потенциальные проблемы.Подсказываем как лучше сделать вот это11:01
.@ptico, круто. А что делаете с проблемами, найденными в конце итерации? В техдолг и исправлять когда-нибудь потом? Или сразу чините?
11:05@rubyunderhood гитхаб в этом плане лапочка: комментировать можно каждую строку в диффе11:05
@rubyunderhood Когда автор исправляет замечания, ставим +1. Пока не прошел CI и нет пары +1, пулл не мержится11:07
@rubyunderhood зависит. Баги чиним, остальное в долг, если дело не 5 минут11:11
Про настрой для ревью: medium.com/medium-eng/the…
14:29В добавок к тому чеклисту смотрю тесты: понятны ли изменения в PR'е по тестам, нет ли ложно-положительных проверок?
14:30# Пятница 38 твитов
Привет. Всегда было интересно. Что люди используют в тестовых данных, чьи имена, фразы, цитаты?
14:14Я часто использую цитаты из боевиков моего детства: Робокоп, Хищник, Терминатор... pic.twitter.com/hBZzCPNuyf
Из персонажей чаще всего использую Тайлера. Люблю ссылаться на комиксы pic.twitter.com/8xGFBriHcp
@rubyunderhood Faker, ничего особенного. Вообще, от этого редко что-то зависит, так зачем тратить время на эти приколы?14:26
@rubyunderhood ffaker, ryba14:26
@rubyunderhood хотя когда писал тесты на поиск с морфологией, то брал какие-то фразы из Дюны :)14:26
. @rubyunderhood вот здесь github.com/marshall-lee/h… у меня сплошной Adventure Time и My Little Pony :)14:26
@rubyunderhood @anton_davydov Faker, FFaker, вместе, да.14:26
@rubyunderhood по-хорошему, данные должны быть рандомные14:26
@ptico @rubyunderhood не совсем согласен. с одной стороны да, с другой стороны мы не ГСЧ тестируем, а юзера.14:31
@ptico @rubyunderhood неужели не было такого, что на рандомных данных проблема не вопроизводится, а на реальных да?14:32
@ptico @rubyunderhood часто рандом на самом деле не такой уж и рандом. неправильно заюзанный рандом будет более предсказуемым,чем реальность14:34
@common_disease @rubyunderhood тут соглашусь, нужно с умом подходить14:39
@ptico @rubyunderhood ну а написание действительно качественной рандомизации данных это тот ещё оверхед.14:39
@ptico @rubyunderhood ах да, ещё в реальном проекте видел тесты, которые валились через раз. из-за рандома.14:39
@ptico @rubyunderhood так что тесты всё-таки должны быть детерменированными. чаще всего рандом это скорее плохо, чем хорошо.14:39
Видел ребят, использующих Симпсонов и строчки из песен pic.twitter.com/RdpiyppFPb
@common_disease @rubyunderhood если тесты валятся через раз, то проблема либо в коде, либо в неправильном применении рандома14:42
.@ptico @common_disease, плюс race condition. Тесты проходят локально (медленный PC), но валятся на CI (быстрый). Чаще всего: не ждали AJAX
14:44@common_disease @rubyunderhood не rocket science, тем более что можно реюзать14:44
@rubyunderhood симпсонов тоже использую как демо-юзеров14:45
@ptico @rubyunderhood да, это так. но я также вообще не хочу, чтобы тесты хотя бы как-то *зависели от ГСЧ*. я за детерменированность.14:45
@rubyunderhood @ptico вот это очень интересная и сложная тема — как тестировать рейс кондишны. я вообще не видел тестов на них. к сожалению.14:47
@common_disease @rubyunderhood кстати, один раз видел, как разработчик на полном серьёзе из кода значение под тест возвращал14:48
@common_disease @rubyunderhood потом, правда, оказалось что похапэшник14:50
@common_disease @rubyunderhood ооо! А может кто поделится ноу-хау?14:50
@rubyunderhood когда лень с факером заморачиваться-всегда использую свои данные(имя, фамилию, вот это все). плюсы-не надо ничего вспоминать14:54
@rubyunderhood когда что-то сложное, то ffaker, а так имена персонажей из tbbt.15:05
@rubyunderhood john doe, hello word и пр :D15:44
@common_disease @rubyunderhood @ptico я могу рассказать как сам тестировал это дело + как тестировал это mike perham в его dalli16:59
@rubyunderhood на самом деле, в этом нет ничего страшного и сложного. Достаточно просто сделать состояние гонки и проверить, что все норм ➤16:59
@rubyunderhood например, вы можете писать что-то в массив в 20 тредах и потом проверять кол-во элементов массива, я например, тестировал ➤16:59
@rubyunderhood что у меня нет гонки на запись в редис, т.к. я пишу плагин для сайкика, который собирает данные с джобов и это там важно ➤16:59
@rubyunderhood сам тест выглядит очень просто16:59
github.com/davydovanton/s…
в дали майка он выглядит намного жестче
github.com/mperham/dalli/…
➤
@rubyunderhood могу сказать от себя, что после этого теста жизнь моя стала намного лучше, я стал крепче спать и волосы стали шелковистыми ➤16:59
@rubyunderhood поэтому я всем рекомендую писать подобные тесты в местах, где вы мультитредово пишите куда-то и никогда не пологайтесь на GIL16:59
@rubyunderhood всегда использую имена и топонимы из star wars19:25
# Суббота 10 твитов
Суббота — отличный день для больших мыслей о будущем
14:17Уверен, в будущем от работы будут страдать роботы, а не человек: youtube.com/watch?v=7Pq-S5…
14:18Веб придет к идеальным приложения типа The Grid. Перетащил контент в браузер, а роботы сделали красиво: youtube.com/watch?v=OXA4-5…
14:19Программисты останутся, конечно. Но в корне изменится developer experience (DX)
14:19Чтобы понять, в какую сторону, посмотрите Брета Виктора:
* vimeo.com/36579366
* vimeo.com/97903574
А вам каким видится будущее веба, ИТ? Успеем поработать, как Тони Старк с Джарвисом?
14:21@rubyunderhood мне нравится идея и попытки ухода в виртуальную реальность, это становится похоже на будущее Гибсона14:29
@anton_davydov @rubyunderhood не понимаю всего этого бума VR. Какая-то крайняя форма попытки убежать от ответственности и реального мира.14:32
@rubyunderhood да-да, фронтедщиков в итоге заменят wysiwyg редакторами и роботами =)15:05
@Fodoj @rubyunderhood вот, пара видео в тему15:05
youtube.com/watch?v=Bgx0IF…
youtube.com/watch?v=db-7J5…
youtube.com/watch?v=-oOK6d…
# Воскресенье 8 твитов
Последний день с вами, поэтому настроение лирическое-ностальгическое. Расскажите про свой первый проект на Руби/Рельсах. Еще работает?
17:19Мой первый проект на Рельсах — дипломная работа, сервис тлогов (лихой 2008 год). Умел маркдаун, TeX и подсветку кода с highlight.js
17:21@rubyunderhood работает: silkfair.com17:24
Даже остались мною сделанные "скругленные уголки gif-картинками" до сих пор
.@inem, с www тоже не работает, но я нашел его в веб-архиве: web.archive.org/web/2015031421… Очень круто 👍
17:35@rubyunderhood работает, как написал для себя 4+ года назад, так всё ещё и пользуюсь.18:47
@rubyunderhood нет, не работает :(, чот для чувака ios девелопера, типа проект, где бы он мог свои аппы выкладывать, в итоге усложнил я всё19:50
@rubyunderhood первый проект на рельсах я сделал за ночь - два года назад.20:52
(bit.ly/1DFygYh) - работает до сих пор.
Вот и конец недели. С вами был @vazilla. Спасибо за то, что делились опытом и помогли отыскать видео "50 оттенков красного". Всего доброго
21:58# Ссылки
www.youtube.com
- https://www.youtube.com/watch?v=27Ct3ZorHHw
- http://www.youtube.com/watch?v=URSWYvyc42M
- http://www.youtube.com/watch?v=ismsJYFKuGQ
- http://www.youtube.com/watch?v=7Pq-S557XQU
- https://www.youtube.com/watch?v=OXA4-5x31V0
- http://www.youtube.com/watch?v=Bgx0IF7K61U
- http://www.youtube.com/watch?v=db-7J5OaSag
- http://www.youtube.com/watch?v=-oOK6dDr74I
github.com
- https://github.com/rails/sprockets/blob/master/CHANGELOG.md
- https://github.com/vast/rails-pixrem
- https://github.com/fs/rails-base/blob/3283dfcba89cb16d91f3cdb2d8aa2e8f6441581d/Gemfile#L42-L70
- https://github.com/marshall-lee/has_array_of/blob/master/spec/support/contexts.rb
- https://github.com/davydovanton/sidekiq-statistic/blob/master/test/test_sidekiq/middleware_test.rb#L62-L73
- https://github.com/mperham/dalli/blob/master/test/test_dalli.rb#L568-L609
other
- http://www.yegor256.com/2015/03/09/objects-end-with-er.html
- https://vimeo.com/100010922
- https://vimeo.com/36579366
- https://vimeo.com/97903574
- https://pragprog.com/book/agcr/confident-ruby
- http://patshaughnessy.net/ruby-under-a-microscope
- http://radiojs.ru/2015/06/radiojs-24/
- https://robots.thoughtbot.com/testing-from-the-outsidein
- https://gist.github.com/vast/3771a6a0a4a2a88883ac
- http://www.elabs.se/blog/51-simple-tricks-to-clean-up-your-capybara-tests
- https://packagecontrol.io/packages/RubyTest
- http://martinfowler.com/articles/mocksArentStubs.html#ClassicalAndMockistTesting
- https://signalvnoise.com/posts/3159-testing-like-the-tsa
- http://www.justinweiss.com/blog/2015/05/04/how-much-testing-is-too-much/
- http://www.slideshare.net/ssuserfc4417/50-45546464
- http://kevinlondon.com/2015/05/05/code-review-best-practices.html
- https://css-tricks.com/what-a-css-code-review-might-look-like/
- https://medium.com/medium-eng/the-code-review-mindset-3280a4af0a89
- http://www.silkfair.com/
- http://web.archive.org/web/20150314215938/http://www.silkfair.com/
- http://bit.ly/1DFygYh