Size: a a a

2019 September 06
2pegramming
Пятничное чтиво

На этой неделе проходит Ruby Conference в Бангкоке. Если вы тоже тут - у меня есть стикеры, которыми с радостью поменяюсь.

Розыгрыш трех билетов на rubyrussia продолжается! Условия как и в прошлом году:
- Заполняем форму;
- Рассказываем друзьям и коллегам о розыгрыше;
- 13 сентября разыгрываю 2 билета;

—————————————

In praise of property-based testing
В сентябре, increment выпустили цикл статей о тестировании. Сегодня в списке статья о property-based тестировании. Такой вид тестирования популярен в haskell, python и erlang, а в руби проперти тесты не так популярны. В статье объясняется что такое property-based тестирование, приводятся примеры на python. Если хотите использовать руби - советую rantly библиотеку, а так же статью с dev to с подробностями.

—————————————

What’s the real benefit dependency injection brings to you
Автор статьи задумался чем может быть преимущество DI в ежедневном использовании. Чаще всего, под киллер фичей DI, подразумевают иной подход к тестированию. В статье говорится об еще одной особенности: упрощение создания boundary между слоями системы. От себя добавлю, что поддержка зависимостей становиться проще, так как зависимости класса находятся в начале файла. И по названию класса и зависимостям, можно сказать, что будет происходить в файле быстрее, чем читая весь код.

—————————————

Sagas pattern implementation in Elixir
SAGA pattern, который помогает создавать distributed transactions, популярен в SOА архитектуре. В статье, на примере букинга, рассказывается о том, как реализовать подобный паттерн. Описывается изначальный паттерн (которому уже 32 года) и показывается sage библиотека для elixir, с помощью которой можно создать сагу любой сложности.

——— одной строкой ———

- Список ссылок о типах в руби;
источник
2019 September 11
2pegramming
Напоминаю, что в эту пятницу (13 сентября), мы разыграем 3 билета на https://rubyrussia.club!

Условия как и в прошлом году:
- Заполняем форму (https://forms.gle/QWpzvzKjktL7jA4b8);
- Рассказываем друзьям и коллегам о розыгрыше;
- 13 сентября разыгрываю 3 билета;
источник
2019 September 13
2pegramming
Пятничное чтиво

Сегодня вечером разыгрываем 3 билета на rubyrussia конференцию. Если хотите успеть поучаствовать:

- Заполняем форму;
- Рассказываем друзьям и коллегам о розыгрыше;
- Сегодня вечером разыгрываю 2 билета;

—————————————

Аварии помогают учиться
Ошибки случаются, поэтому важно уметь учиться на них. В расшифровке доклада дается определение инцидента, а также показывается как писать постмортемы и как с ними работать. В самом докладе понравилось обилие ссылок на дальнейшее чтение, описание опыта и мыслей, например глоссарий терминов. Если хочется научиться получать выгоду из инцидентов или интересна эта тема - однозначный мастхев.

—————————————

Кот Шрёдингера без коробки: проблема консенсуса в распределенных системах
Популярная проблема распределенных систем - согласованность (consensus) записи данных. В статье даются основные определения и проблемы согласованности, рассказывается в чем отличие синхронной и асинхронной модели коммуникации в таких системах, почему в синхронной модели отказ одного узла ломает систему целиком. Так же рассказывается об семействе алгоритмов paxos, которые решают проблему консернуса. Этот алгоритм используется в cassandra, Amazon Elastic Container Services и как замена zookeeper в  Neo4j

Если интересна эта тема, советую посмотреть на raft алгоритм, который решает похожую проблему и используется в NATS. Думаю, в будущем можно будет реализовать подобные паттерны на стримах, чтобы лучше понимать как это работает под капотом.

—————————————

http://amp.gs/N3wI

Distributed Tracing визуализирует путь запроса (или событий) в сервисной архитектуре. В монолитном приложении хватает обычного request_id, но когда дело касается сервисов, нужна группировка сложнее. В статье рассказывается что такое распределенная трассировка, зачем нужна и как работает. А так же сравниваются проекты, которые помогают интегрировать трассировку.

А для тех, кто хочет добавить в трассировку события, статья от confluent о том, как работает zipkin + kafka:

The Importance of Distributed Tracing for Apache-Kafka-Based Applications

Понравился пример визуализации сообщений между сервисами, который показан в конце статьи. Так как последнее время трачу много времени на подобные визуализации
источник
2pegramming
pepegramming
Пятничное чтиво

Сегодня вечером разыгрываем 3 билета на rubyrussia конференцию. Если хотите успеть поучаствовать:

- Заполняем форму;
- Рассказываем друзьям и коллегам о розыгрыше;
- Сегодня вечером разыгрываю 2 билета;

—————————————

Аварии помогают учиться
Ошибки случаются, поэтому важно уметь учиться на них. В расшифровке доклада дается определение инцидента, а также показывается как писать постмортемы и как с ними работать. В самом докладе понравилось обилие ссылок на дальнейшее чтение, описание опыта и мыслей, например глоссарий терминов. Если хочется научиться получать выгоду из инцидентов или интересна эта тема - однозначный мастхев.

—————————————

Кот Шрёдингера без коробки: проблема консенсуса в распределенных системах
Популярная проблема распределенных систем - согласованность (consensus) записи данных. В статье даются основные определения и проблемы согласованности, рассказывается в чем отличие синхронной и асинхронной модели коммуникации в таких системах, почему в синхронной модели отказ одного узла ломает систему целиком. Так же рассказывается об семействе алгоритмов paxos, которые решают проблему консернуса. Этот алгоритм используется в cassandra, Amazon Elastic Container Services и как замена zookeeper в  Neo4j

Если интересна эта тема, советую посмотреть на raft алгоритм, который решает похожую проблему и используется в NATS. Думаю, в будущем можно будет реализовать подобные паттерны на стримах, чтобы лучше понимать как это работает под капотом.

—————————————

http://amp.gs/N3wI

Distributed Tracing визуализирует путь запроса (или событий) в сервисной архитектуре. В монолитном приложении хватает обычного request_id, но когда дело касается сервисов, нужна группировка сложнее. В статье рассказывается что такое распределенная трассировка, зачем нужна и как работает. А так же сравниваются проекты, которые помогают интегрировать трассировку.

А для тех, кто хочет добавить в трассировку события, статья от confluent о том, как работает zipkin + kafka:

The Importance of Distributed Tracing for Apache-Kafka-Based Applications

Понравился пример визуализации сообщений между сервисами, который показан в конце статьи. Так как последнее время трачу много времени на подобные визуализации
3 билета, моя невнимательность погубит меня
источник
2pegramming
в 19:00 проведу 10 минутный стрим, где разыграю 3 билета на конференцию и отвечу на вопросы по конференции, если такие будут

Так же потом залью все на ютуб для тех, кто пропустит
источник
2pegramming
Начинаем стрим

https://www.twitch.tv/davydovanton
источник
2pegramming
Всем спасибо, кто смотрел стрим.

Спасибо за два билета http://rubyrussia.club конференции и один отдало лучшее питерскомое руби сообщество @saintprug.

Победители
@aemelyanov86 @monacus @b0nn1e

Запись стрима уже на ютубе
https://youtu.be/D_n4y9gCHLA

До встречи на конфернеции 🌊
источник
2019 September 20
2pegramming
привет!

в виду большой загружености на работе и из-за http://rubyrussia.club конференции, ссылок не будет на этой неделе
источник
2019 September 27
2pegramming
Пятничное чтиво

Буду рад встретиться завтра на rubyrussia. Найти меня можно будет либо рядом со стойкой toptal, либо на докладе (2 зал, сразу после обеда), либо в холле во время докладов. На докладе покажу библиотеку, надо которой работал последние пол года. Если любите графическую визуализацию проектов - доклад понравится. Так же отмечу доклад Никиты о эффектах. Благодаря прогону доклада понял что такое эффекты, зачем и что с этим знанием делать. Кроме того, сделал стикеры с ханами. До встречи на конференции!

—————————————

Differences between gRPC and RSocket
На работе нужно было выбрать подходящий способ сообщения между сервисами (синхронный и асинхронный). И для синхронной коммуникации написано десятки вариантов. Сегодня статья о RSocket. Библиотека придумали и сделали в нетфликсе. Сам код представляет собой имплементацию бинарного протокола для стриминг транспортов. Идея похожа на web sockets, в котором сообщения сериализуются в бинарный формат. В статье автор сравнивает Rsocket и gRPC, описывает особенности, плюсы и минусы каждой библиотеки.

Так же, у rsocket понятная спецификация, а в руби имплементации отсутствуют зависимости.

—————————————
How do you visualise dependencies in your Kubernetes YAML files?
visualixir

На своём докладе покажу как визуализировать бизнес зависимости (модели, сервисы, все вот это) в руби проекте, вне зависимости  от фреймворка. И покажу библиотеку, которая делает подобную визуализацию автоматически. А в качестве затравки, два проекта, которые вдохновили. Первый проект - визуализация кластера k8s. Необходимая метаинформация уже лежит в k8s, главное написать UI для отображения системы. О том как это сделать - первая статья. Второй проект - визуализация процессов в erlang vm. С динамическим отображением спавнов новых процессов и трассировкой сообщений.

—————————————

Git for Computer Scientists
Люблю тексты или видео, которые объясняют и показывают как работают привычные вещи. Сегодня статья о том, как устроен гит под капотом. Показывается, как устроены коммиты, теги и деревья. А в качестве практической стороны, советую статью от thoughtbot, в которой автор переписывает гит на руби.

——— одной строкой ———

- Первый питерский RailsGirls стартует 1го ноября
источник
2019 September 30
2pegramming
спасибо ребятами из питера (@saintprug), в интернете появилась моя запись доклада про DI в руби. Если не знаете что это или хотите послушать историй из UK - маст хев на сегодня
источник
2pegramming
Переслано от wi11son
источник
2019 October 04
2pegramming
Пятничное чтиво

Конференция прошла, наступило время отдыха. В планах перенести статьи на сайт (в разработке) и начать второй сезон стримов. Вспомнить что было можно тут. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

Как сервера договариваются друг с другом: алгоритм распределенного консенсуса Raft

В прошлом выпуске рассматривалась проблема консернуса в распределенных системах. В конце упоминал об алгоритме raft, который используется в nats. Сегодня, ребята из додо, описывают принцип работы данного алгоритма. В сегодняшней статье описываются понятия и сам алгоритм согласования.  А на одном стримов попробуем написать этот алгоритм на руби.

—————————————

Understanding Zeitwerk in Rails 6

В этом году, на конференции, Xavier Noria  рассказывал о собственном проекте, который называется zeitwerk. Инструмент решает проблему загрузки в руби коде, rails 6 использует гем по дефолту. В статье рассматривается, как zeitwerk работает, какую конкретно проблему решает и как работает автолоадинг теперь. Также показывается, что делать если хотите использовать библиотеку вне рельс (гем уже встроен в karafka).

—————————————

Day Two Problems When Using CQRS and Event Sourcing

На последок - любимый тип статей с проблемами использования технологий. Сегодня рассматривается где и как эвент сорсинг и CQRS. Список проблем, затронутых в тексте: люди слишком рано начинают использовать подобные паттерны, консервативная обработка событий и нерациональное использование снепшотов для состояния. От себя добавлю проблему стандартизации событий между командами и отсутствие опыта инженеров, которые имплементируют подобные системы.

——— одной строкой ———

- Релиз dry-effects;
источник
2019 October 11
2pegramming
Пятничное чтиво

Стримы на паузе, а вспомнить что было можно тут. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

Documenting Software Architecture

Статья этого года в личном списке. В тексте указываются виды документации в архитектуре. Описывается 6 видов документации и диаграмм. Особенно полезным стала информация о 4+1 Architectural view model и Architecture Decision Records. А так же, автоматическую генерацию dependency diagrams делаю в dry-system-dependency_graph. Если задумались о стандартизации и описанию системы - однозначный мастрид этой пятницы.

—————————————

The expanding sidecar pattern for microservices with ballerina sidecar
Sidecar pattern - основной партерном в распределенных системах. Описание паттерн советую читать на сайте Microsoft. А в статье описывается три этапа развития паттерна. А так же рассказывается о языке ballerina, который поможет реализовать подобный паттерн и упростить интеграцию между сервисами.

—————————————

10 lessons learned​ from the Ruby Refactoring Kata

Рефакторинг нужен не только для увеличения maintainability в проекте, но и так же как обучающее упражнение. Andrzej сделал рефакторинг программы для отображения результатов игры в теннис и рассказал об уроках, которые узнал для себя. В результате, после рефакторинга, программа похожа на стейт машину, а из уроков стоит выделить два:
- нет доверия тестам;
- желательно знать о домене, в котором работаешь;
источник
2019 October 18
2pegramming
Привет!

Завтра буду выступать в Орле (http://developers-day.ru), поэтому ссылки подготовить не успел. Если будете на мероприятии - у меня куча наклеек, которые я буду рад раздать.
источник
2019 October 25
2pegramming
Привет!

Последний месяц рассылка даётся все сложнее и сложнее, поэтому решил снизить напряг и взять перерыв. Хочу верить, что в ближайшее время отдохну и все вернётся на свои места.
источник
2020 January 03
2pegramming
Пятничное чтиво

В 2020 году пятничное чтиво выходит из отпуска. Так как я разобрался с нагрузкой, то стримы вернуться в январе (примерно 22 января). Вспомнить что было на стримах можно тут. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

Аварии помогают учиться

Ошибки случаются, поэтому важно уметь чинить систему и обучаться, основываясь на опыте полученном во время сбоя. В расшифровке доклада, инженер Контура, даётся определение инцидента и объясняет как получить пользу от факапа в продакшене. Так же показывается как писать постмортемы и как с ними работать. В самом докладе понравилось обилие ссылок на дальнейшее чтение, описание опыта и мысли, например, глоссарий терминов. Так же понравился живой опыт обработки ошибок и разбор аналитики основанной на постмортемах. Если хочется научиться получать выгоду от инцидентов или интересна эта тема - однозначный мастхев.

—————————————

Python at Scale: Strict Modules - Instagram Engineering

В канале редко упоминается питон, но статья больше об опыте, чем о языке. Инженеры из инстаграмма описывают практики использования питона. Интерес вызвали разделы об импортах и сайд эффектах в проекте. Раздел о долгой загрузки проекта пересекается с топталом и несколькими минутами ожидания, когда запуститься rails c. В статье нет откровений - проблемы как и в других экосистемах: мутабельность стейта, медленная загрузка монолита, сайд эффекты. Явных решений в статье не найдете, но стоит воспринимать данный пост как пищу для ума.

—————————————

Service Discovery in a Microservices Architecture

Четвертая статья в цикле о микросервисах написанная инженерами ngnix. в статье рассказывается что такое Service Discovery и почему в cloud‑based микросервисных без подхода никуда. Статья однозначный мастрид для тех, кто не знает или слышал, но не использовал service discovery. Рассматриваются два discovery паттерна: client-side discovery и server-side discovery. В обоих случаях используется Service Registry сервис, в котором регистрируются сервисы в системе. Для client-side discovery сервис напрямую идет в Service Registry и после этого делает запрос к нужному сервису. В server-side discovery появляется еще одна прослойка в виде Load Balancer, который достает данные о сервисах из Service Registry и через который проходит каждый запрос в системе.

Так же, в статье рассказывается о самом Service Registry, приводятся опенсорсные примеры (consul, zookeeper и eureka разработанная в Netflix). И показываются 2 паттерна регистрации сервиса (Self‑Registration Pattern и Third‑Party Registration Pattern).

——— одной строкой ———

- Twitter: “what are we using for user authentication in rails these days”
- ksqlDB: The event streaming database purpose-built for stream processing applications.
- Announcing Eventide v2
источник
2020 January 10
2pegramming
Пятничное чтиво

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

Вспомнить что было на стримах можно тут. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

CQRS: What? Why? How?

CQRS  паттерн, который может использоваться не зная о существовании паттерна. Тут используется 2 модели: для чтения и для записи. Пример: постгрес в котором создаются записи - модель для записи, эластик, использующийся для поиска информации и синхранизующийся с постгресом - модель для чтения.

Автор статьи подробнее объясняет что такое CQRS, почему в компании начали использовать этот паттерн (спойлер: что бы сделать мир и коммуникации лучше). Так же, приводятся tips/trics для моделей и критерии, когда стоит использовать CQRS и рассказывает об eventual consistency. А так же, ближе к середине, текст уходит в ДДД, показывается как сделать события на основе domain story telling и почему эвенты =/= event sourcing.

Однозначный мастрид недели.

—————————————

Zero Downtime Schema Migrations

Распределенная миграция частая и сложная проблема если выполняется сталкиваться в первый раз. В статье описываются решения проблемы и как справляться с этим в руби мире. Будет полезно тем, кто еще не сталкивался или не знает, что можно сделать в ситуации когда нужна распределенная миграция. Знаю, что в роме планируется решение для подобных проблем, но не уверен в этом на 100%. А один раз сам столкнулся с проблемой не приятно, подробнее рассказывал в докладе в Минске в прошлом году.

—————————————

Making systems more resilient (1) — Circuit Breaker

Описание патрона Circuit Breaker. Если в системе больше два сервиса и один делает запрос в другой и второй сервис не отвечает - первый сервис упадет с ошибкой тайм-аута. Тут может помочь Circuit Breaker. Паттерн определит упавший сервис и сразу возвращать ошибку без тайм-аутов. Подробности работы и применения - в статье.


——— одной строкой ———

- Uncle Bob: “Imagine a system written in Eiffel with perfect use of ‘design by contract’”
- How to Hold the Most Effective Meetings
источник
2020 January 17
2pegramming
Пятничное чтиво

Привет, стримы вернулись. Ближайший стрим будет 29 января. Темы пока нет, но если есть идеи - буду рад обсудить. Вспомнить что было на стримах можно тут. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

SHIFT Commerce’s Journey: Deconstructing Monolithic Applications into Services

Часто используемый материал последних шести месяцев. Нравится, что грамотно описана экстракция, которая начинается с продьюсинга данных, после чего эти данные обрабатываются на пустом сервисе (без бизнес логики, просто миграция данных в бд) и только после уже появляются бизнес логика и события. Важно понимать, что описанный подход может быть сделан и без каски, главная мысль текста - начинайте миграцию с данных, а не с кода. Потому что в противном случае придется страдать с дампами и расхождением данных между монолитом и сервисом. Основываясь на опыт, могу сказать, что это безопасный способ экстракции сервиса и данных из монолита. Понравились картинки, которые можно использовать каждый раз, когда объясняешь этот подход (что и делаю последнее время).

Однозначный мастхев для тех кто переходит с монолита на сервисы.

—————————————

The Language Agnostic, All-Purpose, Incredible, Makefile

Лонгрид о том, как использовать утилиту make. По правде сказать, лонгрид вдохновил начать использовать make в своих проектах. В статье найдете список “звонков” когда стоит посмотреть на make, а не использовать специфичные инструменты (rake как пример). Автор описывает плюсы make (к сожалению минусов в статье не нашел), а так же примеры использования и разбор реального кейса с миграцией команд rails на make.

Если вас тоже вдохновит статья, советую продолжить текстом Вани связанный с make.

—————————————

Serverless Databases: The Future of Event-Driven Architecture

В статье рассматривается следующий этап развития serverless - serverless databases. Рассказывается что это такое (разработаны для непредсказуемых нагрузок и быстро под них подстраиваются). В связи с этим, клиент платит только за ресурсы базы данных. Кроме теории, показывается реальная имплементацию от aws - Amazon Aurora Serverless. В конце описывается будущее серверлесс баз данных,  преимущества и ограничения на текущий момент. И приводится список примеров использования.

——— одной строкой ———

- Announcing Message DB: Event Store and Message Store for PostgreSQL
источник
2020 January 24
2pegramming
Пятничное чтиво

Привет, на следующей неделе, 29 января, будет стрим. Соберем мастер ветку руби, посмотрим как подключить гемы, чтобы проверить совместимость с последней версией языка. По сути, перескажу информацию, которую показывали пол года назад в Бристоле кор разработчики руби. Вспомнить что было на стримах можно тут. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

MIR: A lightweight JIT compiler project

Часто встречающаяся статья этой недели. В 2018 году, на rubykaigi, Владимир Макаров рассказал о новом проекте MIR. А на этой неделе вышла статья в которой Владимир описывает концепцию Lightweight JIT compiler и MIR в частности. От статьи стоит ждать сравнения с GCC/LLVM-based JIT, графиков, объясняющих, как MIR работает с руби. А также список ссылок и книг, которые можно прочитать, чтобы лучше разобраться в теме.

Уверен, что статья не для каждого, могу порекомендовать в первую очередь тем, кто интересуется прогрессом jit в руби. Лично мне, после общения с Владимиром на kaigi, интересно наблюдать как MIR развивается.

—————————————

Применение API Gateway

Описание паттерна API gateway. Подробно рассказывается о 6 основных функциях, которые гейтвей предоставляет и показывается идея того, как гейтвей должен работать в системе (предоставлять  токен и после, сервисы будут получать токен). Автор указывают плюсы и минусы, но огорчает отсутствие сравнения существующих решений.

В топтале рассмотрели 19 решений для API gateway и остановились на Traefik который сейчас и внедряем. Гейтвей предоставляет единую точку входа и авторизации (ходит в отдельный сервис), а также маппинг с куки на jwt токен для внутренней системы.

—————————————

Очередь задач в PostgreSQL

Считаю, что постгрес умеет все. В качестве примера - сегодняшняя статья, где автор рассказывает как написать свою очередь на PSQL. Стоит ждать кучу хранимок, головную боль при решении проблем распределенных систем (не описывается в статье) и понимание того, что иногда можно действительно обойтись одной базой данных для проекта.

Теперь жду аналог сайдкика, который будет работать с psql. Важно, чтобы была легкая миграция на другие решения. Скорее всего придется писать собственный брокер и запариться с тем, как согласовывать данные.

——— одной строкой ———

- jollheef/donate: Cryptocurrency donation daemon
- Twitter: “TIL about PostgreSQL advisory locks. They allow you to use your PG database for shared locking.”
- Announcing Sorbet 0.5
источник
2020 January 28
2pegramming
Переслано от Cucumba Morozov
Привет!

Факт: в quicktype.io есть поддержка dry-types или dry-struct.

Он нагенерит бойлерплейт и поможет в разных кейсах:

* Когда есть готовый JSON и хочется его типизировать на рубях
* Если вы уже описали типы в TypeScript, то можно сгенерить из этого драй-типы
* Когда пишем обёртки к API, можно из JSON Schema сгенерить типы и структуры для запросов

Он не подойдет тем, кто использует dry-types и dry-schema >= 1.0 — сайт генерирует схемы со старым синтаксисом.

Очень хотим это исправить, — нужна помощь.

Мы описали в ишью на гитхабе, как это может работать и как начать: https://github.com/quicktype/quicktype/issues/1379

Хорошая задачка для новичков и тех, у кого есть ≈1 час времени на помощь опенсорсу и руби

🖖
источник