Back to top

schedule

  • Track #1
  • Track #2
  • Track #3
  • Track #4
09:00
REGISTRATION
09:45
OPENING
10:00
TBA
Yukihiro Matsumoto
10:50
Zeitwerk: A new code loader
Xavier Noria
In this talk we'll introduce Zeitwerk, the new code loader for gems and apps in which I have worked during the last months. Zeitwerk is the new autoloader by default in Rails 6.
We'll cover what motivated me to work on Zeitwerk, usage, we'll compare it with the classic Rails autoloader, and we'll see interesting aspects of the implementation
11:30
COFFEE
12:00
JIT compiler improvements in Ruby 2.7
Takashi Kokubun
Have you ever tried the JIT compiler introduced in Ruby 2.6? Just passing --jit may siginificantly improve your application's performance.
However, Ruby 2.6 JIT has struggled to optimize applications having a lot of hot methods. As we also want to optimize such applications, we've worked hard to approach the problem in Ruby 2.7.
In this talk, you'll briefly learn how to use the JIT compiler, and know its performance improvement on real-world applications with Ruby 2.7.
12:50
If — The Vodka of Ruby
Nick Sutterer
Software is and will always be complex. That doesn't mean your code has to be cryptic. Detecting the smells, cleaning the mess and applying advanced hang-over prevention techniques will be what this talk's about.
13:30
LUNCH
14:30
Dr. Strangecode or: How I learned to Stop Worrying and Love Refactoring
Dávid Halász
The year is 2014 and you just got your first job as a junior to work on a project that was created back in 2006. There’s too much to do and no time to explain, jump on the refactoring train and try to enjoy the ride. It will be bumpy and stressful but you can learn a lot!

No one likes legacy code or technical debt, but it is easy to find a non-technical reason why we introduce such things in our codebase. Then the mess starts to multiply, hacks followed by more hacks and we end up with a huge monolith that can only be tamed by its Ruby-masters. I got the chance to start working on one of the largest open-source Rails applications as an intern. In the last five years I learned how to cut down the heads of the hydra one by one without letting them grow back. It was not an easy adventure, but the experience gained made me a better programmer and got me far from the ease of rails-generate. I would like to share this story with you, so you can learn from my mistakes and fast-track to be a master refactorer.

15:20
Break, a debugger in plain Ruby
Genadi Samokovarov
Developing debuggers in C has given us a lot of maintenance headache. In this talk we’ll walk through  the history of the CRuby debuggers and why we may want to reconsider C as their de facto language. We’ll learn about the API’s we have (and don’t have) in Ruby that can help us develop a full featured debugger in plain Ruby. We’ll check-out break, which is an attempt to bring a debugger in IRB and Pry using only Ruby.
16:00
COFFEE
16:30
Ruby network workflow: REST, JSON, GraphQL or gRPC?
Grigory Petrov
Most Ruby apps start their communications via Rails built-in REST support. As the app evolves, it questions a developer with small, but important decisions: how to handle date and time, transfer files and large data sets, honor permissions and so on. Network intercommunications between modern backend apps are a vast world of competing protocols, standards and workflows. There is a vague "REST" thing, overlapped JSON Schema and OpenAPI, JSON API, GraphQL, gRPC and much more. This talk showcases our experience of working on different Ruby projects over the years using different approaches. I will focus on challenges that developers handle implementing network communications to frontend and other apps, how these challenges are solved nowadays, with the pros and cons of available gems and different ways to do things.
17:20
Speeding up Initial Rendering of Rails Pages with render_async
Nikola Đuza
You know your Rails application is slow at times. Customers are complaining, and your infrastructure team is provisioning even more servers but it is just not helping. What now? That can happen as the app grows. Sometimes controller actions get really big, and they tend to do a lot of things, thus increasing the load time. If you’re interested in how to solve this, get ready to dive in to the solutions for speeding up your pages with render_async gem.
18:00
CLOSING
09:00
REGISTRATION
10:50
Добро пожаловать, или посторонним доступ закрыт
Vladimir Dementyev
Проблема ограничения прав доступа рано или поздно встаёт практически в каждом веб-приложении.

Популярные Ruby фреймворки предоставляют решения для большинства задач "из коробки", но некоторые важные аспекты разработки веб-приложений остаются незамеченными. Например, для функционала ограничения прав доступа мы — сами по себе. Обилие публичных библиотек лишь создаёт проблему выбора — серебряной пули не существует.

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

В этом докладе я хочу коснуться как теории, так и практики: от рассмотрения различных авторизационных моделей до непосредственно примеров проектирования, которые я накопил за время работы над Rails приложениями и которые легли в основу фреймворка Action Policy.

11:30
COFFEE
12:00
640K должно быть достаточно для каждого, или как использовать меньше памяти в Ruby
Julia Egorova
Практически ни один наш проект сегодня не обходится без использования стороннего кода. И это неудивительно: ведь зачем изобретать велосипед заново. Однако, взятый вами напрокат велосипед может иметь 3 руля, 5 колес и прицеп с камнями. В докладе будет обсуждаться проблема того, что очень часто мы пишем довольно не оптимальный код, который может привести к утечкам памяти и долгому выполнению программ.
12:50
Going functional with algebraic effects
Nikita Shilnikov
Algebraic effects is relatively recent research that allows to reason about programs with effects in a straightforward manner yet staying purely functional. While statically typed languages are only interested in supporting them sooner or later, dynamic languages such as JavaScript or Ruby can have practical implementations today. For example, React internals are now wired up with algebraic effects. But of course, Ruby can do better! I'll show how a yesterday's theory solves today's problems (with fibers!).
13:30
LUNCH
14:30
Архитектура высоконагруженных Rails-приложений
Kir Shatrov
На примере Shopify, одного из самых больших и нагруженных в мире приложений на Rails, мы рассмотрим то как можно поддерживать рост бизнеса на протяжении 10 лет, оставаясь на Rails и не переходя на микросервисы и Elixir. Поговорим об архитектуре приложений, применении шардинга на примерах разных бизнесов, о том как обслуживать запросы одновременно в нескольких дата-центрах по всему миру и о том как важны строгие таймауты. Посмотрим, чему можно научиться у взрослых Google и Facebook, оставаясь на нашем любимом языке и фреймворке.
15:20
Ruby CPU and Memory - Pareto principle
Julian Pokrovsky
Вопрос оптимизации приложений, написанных на Ruby, постоянно затрагивается в том или ином виде при каждом обсуждении языка. Несмотря на огромное количество материалов иногда хочется убежать от глубоко изучения вопроса и угадать, как сделать приложение быстрей или компактней. Хорошая новость заключается в том, что принцип Парето работает и здесь, и получить прирост производительности можно разобравшись всего с несколькими простыми приемами и инструментами, которые не требуют Rails и подходят не только для веб-приложения.
16:00
COFFEE
16:30
The future of dependency management in Ruby
Anton Davydov
Комьюнити рассказывает об абстракциях, которые спасут ruby приложения: service objects, query objects, form objects и другие объекты. Но никто не говорит о том, как жить с абстракциями в проектах. Опираясь на опыт, организации либо устраивают свалку из абстракций (`/app/services` ), либо предлагают использовать микросервисы чтобы снизить количество объектов в одном проекте. Я сталкивался с этим в каждом из проектов и пытался найти серебряную пулю, помогающая разгрести эту кучу объектов.

В своем докладе соберу опыт работы с подобными зависимостями. Мы не будем рассматривать каждую зависимость отдельно, вместо этого обсудим как сделать организацию проекта, которая улучшит поддержку кодовой базы. Коснемся тем времени жизни каждой зависимости и идей из энтерпрайз мира, которые могут помочь в руби, rails и hanami проектах. А в качестве примера, поделюсь работой в dry-rb, которая позволит визуализировать зависимости в проекте и помочь новичкам и матерым разработчикам.

17:20
Отвечаем на архитектурные вопросы при помощи ООП в картинках
Ivan Nemytchenko
Что если в программирование все было бы более конкретным? Вместо непонятных абстрактных штук - что-то что можно взять и нарисовать!

Можно было бы тогда наглядно показать джуниору чем одно решение лучше другого. Но как изобразить полиморфизм? А Dependency Injection?

Мы с вами "нарисуем ООП". По сути мы построим целый визуальный язык, который и используем для решения практических задач по организации кода.

09:00
REGISTRATION
10:50
Testing Microservices the Right Way
Tatiana Shepeleva
Microservices shine in many aspects, but testability. Whenever you deploy a service, no matter how small it is, as long as it has dependencies, you have to keep them in mind. In Toptal, we realized the complexity of the integration testing when started our path from a monolithic application to microservices. In this talk, I’ll show what criteria we used to make a smart decision, what tools we haven’t chosen and how contract testing simplified our development flow and CI.
11:30
COFFEE
12:00
Not the Rails Way. Again!
Igor Alexandrov
Качество кода в проекте напрямую влияет на его поддерживаемость, настроение команды и скорость поставки новых фич, а значит и на ваш заработок. Год назад я выступал на Московском Ruby митапе и рассказывал какие практики мы применяем в JetRockets при работе с большими проектами на Rails. Прошёл год, мы получили ещё больше опыта, а использованные практики и библиотеки тоже обновились. Давайте разберёмся что изменилось за год, и имеет ли Rails Way право на жизнь в 2019 году?
12:50
Как исследовать старый код
Andrew Molchanov
В наших кругах популярен мем "тыжпрограммист - просто читай код!" Но получив по наследству проект в несколько мегабайт или вернувшись к собственному старому коду мы нередко оказываемся в странной ситуации, когда читаешь этот код, читаешь, - а понятнее не становится. И задачи решать надо не через год, а прямо сейчас. Это доклад о том, почему так. Кто виноват и что делать. Работая на разных руби проектах я и мои коллеги видели много разного, так что доклад - наш коллективный рассказ о способах быстро разобраться в старом коде. Будет отладка через puts, ключевые для разработчика отличия VSCode от RubyMine, сбор логов с прода, изучение кода через coverage и другие штуки, которыми я хотел бы с вами обсудить.
13:30
LUNCH
14:30
Как мы приручали InfluxDB
Makar Ermokhin
InfluxDB обычно используется для хранения метрик приложения, но мы в Teachbase пришли к нему с другой задачей: необходимо было отслеживать активность учеников и затем давать аналитику организаторам обучения. В своем докладе я расскажу о многолетнем опыте использования InfluxDB в production, какие грабли мы собрали, а так же как работать с ним из Ruby.
15:20
Безопасность приложений Ruby on Rails
Mikhail Pronyakin
RoR - фреймворк, предоставляющий программисту богатые возможности по написанию кода, который облегчает разработку и объединяет разные модули программного проекта.
Вместе с этим существуют неочевидные аспекты, которые могут привести к проблемам безопасности.
В докладе будет рассмотрена специфика безопасности разработки веб-приложений в контексте Ruby on Rails.
16:00
COFFEE
16:30
How to stop writing E2E tests and start to synthesize them
Artem Strakhov
Benefits and flaws—with solutions—of the property-based random testing applied to high-level end-to-end tests.
17:20
Деньги!
Ivan Shamatov
Деньги в программировании — это просто! С помощью денег мы выражаем некоторую стоимость товара/услуги. В самом общем случае деньги можно описать как кортеж размерностью 2, состоящий из значения цифрового (например 100), и символьного (например USD,$). Мат. аппарат в случае операций с деньгами с одинаковыми символами относительно прост, но даже тут можно обнаружить подводные камни. Что уж говорить про сценарий конвертирования денег из одной валюты в другую. Тут идеальный математический мир рушится и вмешивается бизнесово-бухгалтерский. В докладе мы разберём некоторые сценарии, ошибки и лучшие практики, которые часто встречаются в фин-тех проектах (биллинги/обменники/биржи).
09:00
REGISTRATION
10:50
Serverless is Ruby Future
Nikolai Sverchkov
Первая FaaS платформа AWS Lambda доступна уже как пять лет, но Serverless по-прежнему нельзя назвать популярным решением. К тому же, бытует мнение, что бессерверная модель вычислений подходит только для _высоконагруженных_ систем, где необходим мгновенный и "бесплатный" autoscaling.
В своем докладе я расскажу, какие задачи можно решать уже сейчас при помощи Serverless, и почему это не просто очередной способ запускать ваше приложение, а потенциально наше светлое будущее. И главное - причем здесь Ruby.
11:30
COFFEE
12:00
Optimistic UI with Logux & Ruby
Dmitry Salahutdinov
Logux is the new way of synchronisation between client and server, which provides many modern web features out of the box: live updates, optimistic UI, Offline-first.
I want to introduce Logux data sync server for Ruby developers and share the knowledge how it could be easily integrated it into existing Ruby/Rails application.
12:50
Каков sorbet на вкус
Oleg Fedotkin
Опыт применения Sorbet в пет-проджектах и первая попытка применить его на проде: какие грабли были собраны и какие плюшки получены.
13:30
LUNCH
14:30
Что скрывает «под капотом» GraphQL Ruby, и как это помогает писать более элегантный API
Dmitry Tsepelev
Разобраться в большом open-source проекте не так то просто: большой объем исходного кода и обилие неочевидных решений, появившихся в процессе эволюции проекта повышают порог входа. В докладе я рассказажу о том, что происходит, когда объявляется новый тип, а также о том, как происходит обработка запроса на эндпоинт /graphql. Эти знания помогут нам понять, как работают плагины для graphql-ruby и даже написать свое собственное несложное расширение!

Доклад будет полезен:

тем, кто работает с graphql-ruby, и хочет знать, что там внутри
тем, кто хочет понять, как реализуется среда исполнения GraphQL
тем, кто хочет научиться разбираться с устройством популярных open-source библиотек
тем, кто хочет научиться контрибутить в open-source

15:20
Ruby on Races
Artem Krivonozhko
Я расскажу о своем опыте борьбы с состоянием гонки при операциях с сессией в Rails, а также рассмотрю другие ситуации и сценарии, при которых может возникнуть состояние гонки, потенциальные риски и способы борьбы с ними
16:00
COFFEE
16:30
Легаси. Как погрузиться и не утонуть
Vladimir Sharshov
Разработка монолита на Ruby on Rails, ставшего ядром международного сервиса заказа такси Gett, началась в октябре 2010 года. Сегодня в Gett более 150 микросервисов, написанных на Go, но монолит и другие Ruby-сервисы все еще работают и составляют 25% от всех запущенных.

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

17:20
Гарантия качества
Dmitry Stepanenko
Расскажу, как мы старались улучшить качество и успевать делать фичи. Поговорим о том как мы увеличиваем тестовое покрытие, как устроен деплой и как мы пишем обратно совместимый код. Подведем итоги того чего удалось добиться за 2 года работы над высоконагруженным легаси проектом.