Привет! Сентябрь оказался богатым на события в мире Ruby/Ruby on Rails, поэтому спешим поделиться с вами последними новостями.
В десятом юбилейном дайджесте встречайте множественные рекомендации и советы по улучшению производительности работы на Ruby/Rails, подкаст от Basecamp с участием David Heinemeier Hansson, новый блог о разработке, видео выступлений с конференции RubyKaigi и важные события в октябре.
Почитать
Understanding the secret_key_base in Ruby on Rails — secret_key_base — отличный способ сократить нагруженность конфигураций. В туториале приводятся примеры использования secret_key_base и говорится о ценности этой конфигурации для приложений Ruby on Rails.
Code simplicity — Command pattern — в этом туториале вы найдете информацию, как применять шаблон проектирования ‘Command’ на примере сценария покупки товара в online-магазине.
Superfast CSV imports using PostgreSQL’s COPY command — рекомендации, как максимально быстро импортировать CSV, используя команду PostgreSQL’s COPY.
Серия из двух статей с подробным объяснением моделей параллелизма (concurrency models) в Ruby:
- Introduction to Concurrency Models with Ruby. Part I — в первой части автор рассматривает различия между процессами, потоки, что такое GIL, EventMachine и Fibers в Ruby.
- Introduction to Concurrency Models with Ruby. Part II — вторая часть посвящена более продвинутым видам моделей параллелизма, таким как Actors, передаче последовательных процессов, Software Transactional Memory и Guilds — новой модели параллелизма, которая может применяться в Ruby 3.
Teaching a Neural Network to play a game using Q-learning — в предыдущем выпуске нашего дайджеста мы предлагали прочесть статью от Practical Artificial Intelligence о том, как научить искусственный интеллект играть в простую игру с использованием Q-learning. В этом выпуске предлагаем вам узнать, как с помощью нейронной сети и Q-Learning создать искусственный интеллект, который смог бы играть в компьютерную игру.
Using the scikit-learn machine learning library in Ruby using PyCall — из этого туториала вы узнаете, как использовать набор простых и эффективных инструментов для машинного обучения и искусственного интеллекта Scikit-learn. Scikit-learn написан на Python, но Ruby разработчики могут с ним взаимодействовать через PyCall.
How we made our rspec test suite to run 2x faster — скорость выполнения автотестов играет важную роль в разработке программного обеспечения. Из примера в этой статье вы узнаете, как вдвое ускорить выполнение RSpec.
Verify user phone numbers in Ruby on Rails with the Authy Phone Verification API — полезный туториал о том, как проверить достоверность номера телефона пользователя в приложении на Rails 5 с помощью Authy Phone Verification API.
Подборка полезных статей от Engine Yardза сентябрь:
- Ruby on Rails Security
17-Item Checklist — полезный чеклист проверки безопасности приложения для Rails разработчиков. - AWS Image Storage with S3 and EFS: A Rails How To — туториал, как настроить сервисы хранения фотографий Amazon S3 и Amazon Elastic File System для приложения на Rails.
- Customer Stories: Resolving a Deploy Issue Due to Load Error — кейс, в котором описывается пример успешного решения проблемы ошибки загрузки во время развертывания приложения.
- Using Services to Keep Your Rails Controllers Clean and DRY — сложная система контроллеров, которые трудно менять, ‒ это не то, что хочется обнаружить в Rails-приложении. Чтобы избежать этого, стоит обратить внимание на подсказки в статье, как использовать сервисы для организации контроллеров.
- Improving Rails App Performance with Database Refactoring & Caching — улучшаем производительность Rails-приложения, рефакторим базу данных и подключаем кэширование.
- 7 Completely Legal Rails Performance-Enhancing Techniques — советы по улучшению скорости времени отклика и пропускной способности Rails-приложения.
- Running Rails on AWS: Know Your Options — в этой статье вы найдете описания четырех вариантов запуска Rails на AWS, которые помогут вам решить, какой из них лучше подходит для вашего приложения.
Rails: make sure you have proper DB indexes for your model’s unique validations — статья- напоминание о том, что надо не забывать про индексы базы данных при создании собственных валидаторов.
That time I wrote a query with chained ruby methods weighing in at 41 lines and 2844 chars — что делать, если получился SQL-запрос на 41 строку? Автор статьи делится опытом, как рефакторить такие запросы.
How to include Rails Associated Model Data in React components — в этом туториале вы найдете подсказки, как получить доступ к связанным данным модели из вашего компонента React на Rails.
DEALING WITH RUBY DEPENDENCY CONFLICTS — рекомендации, как избежать конфликтов зависимостей в Ruby и какие для этого существуют инструменты.
Ruby: pass by value or pass by reference?— существуют спорные взгляды на то, как в Ruby передаются параметры — по ссылке или по значению. Автор блога Rubyblog.proпредлагает разобраться, как это работает.
Improving spec speed in a huge, old Rails app — по мере того, как растет проект, все больше времени уходит на выполнение continuous integration, и скорость spec становится одной из проблем. Из этого кейса вы узнаете, как улучшить скорость выполнения тестов в масштабном приложении на Rails.
Rails Best Practice — Persisting Addresses in PostgreSQL — решение, которое предлагает последовательный, эффективный и надежный способ хранения и извлечения сложных типов данных из базы данных SQL.
A Puzzle About Ruby Constants — константы языка Ruby иногда могут озадачить даже опытных разработчиков. В этом туториале найдутся советы, как разобраться с логикой Ruby для определения константы.
Breaking Up the Behemoth — очень часто многие приложения со временем обрастают большими, сложными и постоянно изменяющимися классами. В этой статье вы найдете советы, как лучше избежать появления габаритного кода.
DateTime#to_time and Time#to_time preserves receiver’s timezone offset info in Ruby 2.4 — методы DateTime#to_time and Time#to_time могут быть использованы для возврата объекта Time. В туториале вы найдете отличия работы с этими методами в версиях Ruby 2.3 и Ruby 2.4.
3 ways that will make you React with Rails developer — советы и полезные ресурсы, как лучше инициализировать React.js в приложение на Rails.
Debugging Why Your Specs Have Slowed Down — если выполнение spec-тестов занимает, на ваш взгляд, вечность, советуем взять на вооружение эти подсказки по определению причин замедлений и методы предотвращения их в будущем.
В сентябре увидел свет новый блог от Ruby/Rails разработчика Paul Martensenи уже успел пополниться несколькими статьями:
- Off the Rails! Part 1.— в своей первой статье автор блога пытается уйти от Ruby on Rails и предлагает альтернативный способ написать JSON-API для приложения.
- Off the Rails! Part 2.— вторая часть туториала, как создать приложение без использования Rais. Автор предлагает расширить структуру приложения, добавив Bundler, Rake, Sequel и базу данных Postgres.
- Refactoring CanCan(Can) Abilities — если в системе вашего приложения присутствует сложный набор правил авторизации, эти подсказки помогут сделать их более управляемыми.
- A way to split up big merge- or pull-requests — в статье описывается способ, как упростить один большой Pull-Request на несколько небольших. Такая практика помогает команде разработчиков делать code review быстрее и качественнее.
Серия статей на тему применения API-интерфейса GraphQL в Rails:
- How to Implement a GraphQL API in Rails — туториал, как реализовать API-интерфейс GraphQL в Rails.
- GraphQL and Performance in Rails — в туториале рассматриваются три способа избежать проблем с производительностью с помощью GraphQL в приложении на Rails, а также инструмент, который помогает контролировать, какие запросы выполняются вразрез с API-интерфейсом GraphQL.
Подборка статей о разработке от Arkency за сентябрь:
- How to setup development work with RailsEventStore and mutant — туториал, о том, как настроить работу Rails Event Store, библиотеки для публикации и хранения событий с Mutant, инструментом для мутационного тестирования в Ruby.
- Making tmux work for you — tmux — это менеджер терминалов, к которому удобно подключаться и отключаться, не теряя при этом процессы и историю. В статье вы найдете решения, как настроить автоматизацию рабочих процессов с помощью tmux.
- How mutation testing causes deeper thinking about your code + constructor for an included module in Ruby — кейс на тему мутационного тестирования, и какую роль это играет для вашего кода.
- Physical separation in Rails apps — как вы разделяете контексты предметной области ваших приложений на Rails? Автор делится своим опытом физического разделения Rails приложения.
- Rails components — neither engines nor gems — дискуссии по поводу Bounded Contexts.
- All the ways to generate routing paths in Rails — перечень способов по созданию направлений маршрутизации.
- Composable RSpec matchers — в статье рассматривается кейс разработки RSpec matchers.
For Software Engineers — Scalability Introduction — в этой статье вы найдете полезную информацию о масштабируемости и как ее достичь при разработке программного обеспечения.
Послушать
Rework — 03 — Pick A Fight (on Twitter) — подкаст от Basecamp с участием CTO Basecamp David Heinemeier Hansson, где David расскажет об искусстве спорить с людьми в интернете и непосредственно в Twitter.
Подкасты от The Ruby Rogues продолжают радовать беседами с известными программистами:
- RR 326: Chatbots with Jamie Wright — гость этого выпуска Jamie Wright, один из спикеров на Ruby Developer Summit 2017, расскажет о своем опыте работы с чат-ботами.
- RR 328: Rails Security Beyond the Defaults with Matias Korhonen — гость выпуска Matias Korhonen работает над многочисленными проектами, в том числе и на Rails. В подкасте Matias расскажет о безопасности приложений на Rails.
- RR 329: Learning Machine Learning with Marc-André Cournoyer — в этом выпуске авторы подкаста и гость Marc-André Cournoyer обсуждают изучение machine learning в Ruby.
Свежие подкасты от The Bike Shed в сентябре:
- The Bike Shed — 122: Name That Smell — в этом выпуске авторы подкаста ведут беседу о работе над новым проектом, о тестах связанных с внешними сервисами и ошибке точности, которая встречается в ActiveRecord.
- The Bike Shed — 123: Too Many Parameters — в этом эпизоде авторы подкаста обсуждают проблемы, возникающие при повторном использовании кода.
- The Bike Shed — 124: Nope. Nope. Nope. Nope.— эпизод посвящен процессу подачи заявки на участие в конференциях Ruby, анализу кода и многом другом.
- The Bike Shed — 125: Less Bad Than Expected — обсуждение преимуществ и недостатков FactoryGirl и уязвимостях данных Equifax.
Пятый сезон подкастов на RWpod продолжается, и за сентябрь собралось немало выпусков:
- 35 выпуск 05 сезона. Sequel 5.0.0, Webpacker 3.0, TypeScript 2.5, ExceptionAlarm, React-Move 2.0, Unmiss и прочее
- 36 выпуск 05 сезона. Yarn 1.0, Gemfile’s new clothes, Headless Chrome vs PhantomJS, Size Limit: Make the Web lighter и прочее
- 37 выпуск 05 сезона. Ruby 2.4.2, Roda 3.0.0, CoffeeScript 2, Babel 7.0, GraphQL and Performance in Rails и прочее
- 38 выпуск 05 сезона. GitLab 10.0, Ruby 3 JIT roadmap, Blockchain Lite, Relicensing React, Storybook, Bosket и прочее
Посмотреть
TheПодборка скринкастов от GO RAILS в сентябре:
- Faster Rails boot times with Bootsnap — из этого скринкаста вы узнаете, как Bootsnap ускоряет время загрузки приложения на Ruby и Ruby on Rails.
- Geo-spatial Search with Geocoder and Google Maps — в этом скринкасте вы узнаете, как повторить функцию определения геолокации, как у приложений Yelp и Airbnb с помощью гема Geocoder.
- Geo-spatial Search with Searchkick and ElasticSearch — в этом эпизоде вы научитесь индексировать и находить модели по геолокации с помощью Searchkick и Elasticsearch.
Подборка скринкаcтов от Drifting Ruby за сентябрь:
- Episode #096 — Auditing with Paper Trail — скринкаст о том, как с помощью гема paper_trail отслеживать и регистрировать изменения в моделях Rails.
- Episode #097 Single Table Inheritance — эпизод про STI.
- Episode #098 — Polymorphic Associations — из этого эпизода вы узнаете, чем полиморфные ассоциации отличаются друг от друга и научитесь трюкам, как упростить их использование.
- Episode #099 Creating a Basic Gem — с помощью этого скринкаста вы научитесь создавать Ruby-гем.
RubyKaigi 2017 — International Conference — в сентябре в Японии прошла ежегодная конференция RubyKaigi, на которой выступали как известные разработчики из Японии, так и западные специалисты. В этой подборке предлагаем выступления на английском:
- Improving TruffleRuby’s Startup Time with the SubstrateVM / Kevin Menard
- Busting Performance Bottlenecks: Improving Boot Time by 60% / Julian Nadeau
- High Concurrent Ruby Web Development Without Fear / Delton Ding
- Bundler 2 / Colby Swandale
- Memory Fragmentation and Bloat in Ruby / Nate Berkopec
- Tamashii — Create Rails IoT applications more easily / Henry Tseng
- JRuby at 15 Years: Meeting the Challenges / Charles Nutter, Thomas E Enebo
- Pattern Matching in Ruby / YUKI TORII
- Bending The Curve: Putting Rust in Ruby with Helix / Godfrey Chan, Terence Lee
- Type Checking Ruby Programs with Annotations / Soutaro Matsumoto
- Automated Type Contracts Generation for Ruby / Valentin Fondaratov
- Do Androids Dream of Electronic Dance Music? / Julian Cheal, Eric Weinstein
- How Close is Ruby 3×3 For Production Web Apps? / Noah Gibbs
- Flor — hubristic interpreter / John Mettraux
- Food, Wine and Machine Learning: Teaching a Bot to Taste / Mai Nguyen
- Asynchronous and Non-Blocking IO with JRuby / Joe Kutner
- Static Typo Checker in Ruby / Yuki Nishijima
- The Curious Case of Wikipedia Parsing / Victor Shepelev
- The Ruby Module Builder Pattern / Chris Salzberg
- Compiling Ruby / Kevin Deisz
- I quit my job to write my own language: Goby / Stan Lo
- Hanami — New Ruby Web Framework / Anton Davydov
- Mapping your world with Ruby / Mat Schaffer
- C how to supercharge Ruby with Rubex / Sameer Deshmukh
- Ruby Parser In IRB 20th Anniversary...Now Let Time Resume / ITOYANAGI Sakura
- Towards Ruby 3×3 performance / Vladimir Makarov
- RubyKaigi 2017 Closing
Релизы и библиотеки
Библиотеки
Zen Rails Base Application — шаблон для новых Rails приложений, сократить время на создание нового проекта.
ruby-vips — гем, который, обеспечивает привязку Ruby к библиотеке обработки изображений libvips.
Slack Neuralyzer — гем, для массового удаления сообщений и файлов на Slack-каналах.
Gemfile’s new clothes — вскоре ожидается релиз Bundler 2.0 — менеджера для управления гемами. Рекомендуем узнать, чего ожидать от новой версии, и быть в курсе всех изменений задолго до релиза. Также в статье указывается, какими опциями уже сейчас можно пользоваться в последних версиях.
Say Hi to Delivery Boy!— библиотека Racecarобеспечивает простой и интуитивно понятный способ создания и настройки потребителей (consumers) в Kafka, и может легко интегрироваться с приложением Rails.
BRAKEMAN: Rails Security Scanner — сканер безопасности Brakemanобнаруживает уязвимости в приложениях Rails с помощью статического анализа. И, что очень удобно, после сканирования он создает отчет обо всех проблемах безопасности, которые он идентифицировал.
Awesome Data Science with Ruby — список туториалов, библиотек и разнообразных источников о различных приложениях Data Science с использованием языка программирования Ruby.
Релизы
JRuby 9.1.13.0 Released — в сентябре вышла новая версия JRuby.
Welcome Release of Webpacker 3.0 — новости по недавнему релизу гема Webpacker.
Rubies 2.2.8, 2.3.5, and 2.4.2 are now available — в сентябре вышли обновления на Ruby. Версии 2.2.8, 2.3.5 и 2.4.2.
Rails 5.1.4 and 5.0.6 released — 7 сентября вышли обновленные версии Ruby on Rails. Полный список изменений можно посмотреть на GitHub.
Rails 4.2.10 released — также в сентябре обновилась версия Rails 4.2. Как заявляют разработчики, эта версия больше не будет поддерживаться, за исключением серьезных исправлений безопасности.
Karafka (Ruby + Kafka) framework 1.0.0 Release Notes — вышел релиз Karafka 1.0 — это относительно свежий фреймворк, авторам которого удалось реализовать множество новых функций и исправить ошибки. Если вы хотите как можно быстрее познакомиться с фреймворком и начать с ним работать, предлагаем вам эти примечания к релизу.
Книги
Рекомендуемые
Effective Testing with RSpec 3 has been released!— в этом месяце вышла книга о тестировании «Effective Testing with RSpec 3: Build Ruby Apps with Confidence». Заказать можно на Amazonи PragProg.
Релизы
The Unhappy Path. Failure Management Patterns in Ruby and Rails — книга от Benjamin Roth«The Unhappy Path. Failure Management Patterns in Ruby and Rails» еще в процессе написания, но предзаказ уже открыт.
События
International Ruby Conferences Fall 2017 — список международных Ruby-конференций, которые охватываю земной шар от Японии до Бразилии этой осенью.
Coderetreat — 6 октября в Киеве Ruby Meditation устраивает тренинг «Coderetreat» с Сергеем Сержиенко — представителем минского Ruby-сообщества.
RUBY Meditation #18 — 7 октября в Киеве будет проходить митап Ruby Meditation #18. Полный список спикеров и расписание пока ожидается, но уже можно регистрироваться.
SphereCon — Ruby and Go Conference — 28 октября в Киеве пройдет конференция по технологиям Ruby, Go и Front-End. Вход свободный, но не забудьте зарегистрироваться.
RUBY Meditation #19 — митап Ruby Meditation #19 также проводится в Киеве 4 ноября. Билеты уже в продаже.
RUBY Meditation — 20th Anniversary — 2 декабря в Киеве пройдет юбилейный митап Ruby Meditation #20. Новости по организации мероприятия можно отслеживать на странице в Facebook. Также уже есть возможность приобрести билеты.
Курсы
Курсы от Codaline — с 16 сентября по 1 октября 2017 объявлен набор на третий сезон курсов от Codaline, где одним из направлений будет язык программирования Ruby. Курсы будут проводиться в режиме offline в Черкасском государственном технологическом университете.
Касательно тем/материалов/ивентов, которые стоит добавить в следующий выпуск дайджеста, пишите в комментариях или на volodymyr.vorobiov@rubygarage.org. Спасибо за помощь в подготовке дайджеста команде RubyGarage.
← Предыдущий выпуск: Ruby дайджест #9