Size: a a a

2018 October 01
2pegramming
Перед конференцией, хотелось бы добавить организационных моментов.

Мероприятия

4.10 - др Maciej Mensfeld (http://amp.gs/h7ia)), идем отмечать и пить пиво в RULE taproom в 20:00
5.10 - препати конференции, RULE taproom 20:00
6.10 - конференции и афтепати
7.10 - воркшопы (если найдутся силы - можем устроить афтепати для афтепати)

Нетворкинг
Хотелось бы организовать нетворкинг, чтобы людям проще было общаться на конференции. Если у вас есть идеи как это лучше сделать - пишите в личку @davydovanton

Доклады которые понравились
В этом году слушал прогоны некоторых докладов. Из того, что понравилось и что рекомендую к посещению

1. Эволюция rails архитектуры. Просто маст хев. Доклад не технический, но интересно послушать как github, cookpad и basecamp  живут с рельсой. Кроме того, на докладе будет розыгрыш (но это не точно);
2. Фичафлаги. Использую этот подход на работе и читал фаулера, но даже с таким багажом узнал много нового. Если испытываете проблемы с доставкой фич в прод - маст хев;
3. Mruby, слежу за проектом уже 3 или 4 года. Искренне рад, что такие доклады появляются. Узнаете что это, зачем и где использовать;
4. Мониторинг. Мониторинг не самая популярная тема в руби сообществе, узнаете на что смотреть в первую очередь, а так же будет анонс новой библиотеке марсиан;

Что еще
Мой доклад будет сильно пересекаться с темами из Designing Data-Intensive Applications (DDIA). Поэтому хочу разыграть эту книгу. Подробности на докладе.

Стикеры! С радостью возьму и раздам.

До встречи!
источник
2018 October 05
2pegramming
Пятничное чтиво

В прошлый раз пропустил из-за розыгрыша. Сегодня исправляюсь.

Software Architecture Patterns Book
Бесплатная книга о различных архитектурных паттернов систем. Подробно расскажет о пяти видах архитектур:

- Layered architecture
- Event-driven architecture
- Microkernel architecture
- Microservices architecture
- Space-based architecture

Хочу обратить внимание на вторую главу, в которой описывается построение Event-Driven архитектуры. Приводится в пример две топологии, mediator и broker. Идея в том, что в mediator топологии кастомер кладет инициирующий эвент в общую очередь эвентов, а медиатор уже организует события по определенным каналам. В broker топологии используется обратный подход: эвент обрабатывается распределенно и при каждой обработке могут добавляться новые события в очередь эвентов.

DDD for Rails Developers. Part 1: Layered Architecture
DDD набирает обороты в мире руби. Слоистые архитектуры покоряют умы разработчиков. В статье доступное описание зачем это нужно, как сделать и что это такое. Много очевидных, но полезных советов (изоляция AR и бизнес логики)

Soft Skills: The software developer’s life manual
Список софт скилов, которые могут помочь разработчику (и не только) улучшить качество жизни. Из списка, хотелось бы обратить внимание на “Marketing yourself”. По моему, это один из навыков, которому в россии, к сожалению, нигде не учат (если не прав - напишите пожалуйста). На эту тему есть статья из лайвхакера), читать на свой страх и риск.
источник
2018 October 11
2pegramming
После открытого стола об open source проектах на rubyrussia задался вопросом, а какие проблемы испытывают люди. Я нашел четыре разных группы лиц, проблемы которых сильно отличаются. Таким образом появился эта короткая форма. Буду рад  вашим ответам, а результаты опубликую в ближайшее время.

https://goo.gl/forms/LPHPIYWJzUUkjqF52
источник
2018 October 12
2pegramming
Пятничное чтиво

User-defined Order in SQL
Сортировка, заданная пользователем не тривиальная задача. На каждый случай в голову приходит тысячи вариантов решения проблемы. В тексте показано, как реализовать алгоритм пользовательской сортировки дешево, используя толкьо одно поле в базе. Если задумали сделать аналог трелло или понадобилась подобная сортировка - однозначный маст хев.

Что бы не спойлерить решение, предлагаю игру. Напишите на бумаге решение, а потом прочтите статью и сравните решения. Если решение кардинально отличается - присылайте ссылку на гист с описанием, опубликую.

Testing best practices
Обожаю гитлаб за открытость. Два года назад, забрал кучу полезных идей из плейбука, а после - сделал описание hanami-paybook по аналогии с гитлабовским. Сегодня - мануал о тестировании в рельсе. Зацепил fast\_spec\_helper.rb,  хочу попробовать использовать похожую практику в своих проектах. Так же, будет интересно тем, кто хочет узнать, как тестировать большие приложения и где можно срезать время выполнения тестов.

Why Funding Open Source is Hard
На RubyRussia в первый раз проводились круглые столы о сервисах, найме и OpenSource. При обсуждении OSS поднялась тема финансирования продуктов с открытым исходным кодом. Из-за этого, вспомнилась статья о том, почему так тяжело привлекать средства в опенсорс.

В статье подробно описываются возможные виды финансирования, приводится пример проекта Code Sponsor, а так же задаются вопросы, почему же это так сложно и что с этим делать.

Русский перевод на хабре.
источник
2018 October 19
2pegramming
Пятничное чтиво

Целостность данных в микросервисной архитектуре
Архитектурная статья из авито о том, как сохранить данные в микросервесной архитектуре с зоопарком баз данных.  Рассматривается ACID принцип в связке с микросервисами. Для обеспечения целостности предлагается использовать сага паттерн. Вообще, сага паттерн не заслуженно пропускается в мире руби разработчиков, хотя в некоторых моментах может сильно облегчить жизнь, когда приходится делать бизнес транзакции со сторонними сервисами. Ну и ссылка из ссылки о паттерне в придачу.

Am I doing it wrong?
Cервис объекты приходили в rails тяжело и вызывали много боли у людей привыкшим к rails way (исправте меня, если не прав). В гисте выше разработчик, которого уволили за сервис объект в проекте, спрашивает правильно ли он сделал и как с этим жить дальше. Из интересных комментаторов: Avdi Grimm, Mike Perham, Nick Sutterer, Piotr Solnica и DHH.

How to Read Source Code
Мне сложно читать чужой код. Это отнимает силы, время и мотивацию. К сожалению, заниматься этим приходиться часто, поэтому статьи с идеями, как упростить этот процесс - ❤️.

Добавлю два совета по чтению чужого кода:
- когда документация желает лучшего, смотрите в интеграционные тесты;
- если нужно быстро разобраться что и как библиотека делает - дебаггер выручает. В руби открываем исходники (bundle open <gem name>) ставим дебагер и проходим, смотря что происходит;
источник
2018 October 26
2pegramming
Пятничное чтиво

Seven Microservices Anti-patterns
В интернете слишком много информации о пользе микросервисов и почему это круто. Но лично мне не хватает информации об ошибках, которые совершаются в таких системах. Поэтому сегодня - 7 паттернов, которые помогут упростить создание и поддержку подобной архитектуры.

Совет о гейтвее (Building a gateway in every service) зарезонировал с внутренним архитектором. Причина в том, что в системах о которых читал или слышал, клиенты вызывали сервисы в рандомном порядке. Это приводит к сложности: один сервис  начинает вызывать неограниченное количество других сервисов, которые по цепочки вызывают друг друга. Сервисы начинают знать друг о друге, что может влиять на изоляцию и поддерживаемость кода. Элегантное решение проблемы - gateway прослойка, которая последовательно вызывает нужные сервисы и с которой обращаются другие клиенты.

HTTP/2 for Ruby Web Development
Еще один “modern asynchronous HTTP/2 capable web server” для руби. Что понравилось: чистый руби, может в  http/2, поддерживает rack приложения. К тому же, ребята с ходу пишут, что продакшен код, использ хоть сейчас.
Но к сожалению к этой штуке хватает и вопросов: как быстро работает? Что с памятью? На сколько сервер готов к продакшену?

Поэтому будет интересно посмотреть, во что превратиться проект, а также, попробовать запустить Falcon в своих проектах.

Understanding user support systems in open source
Open source проект в первую очередь продукт, а не открытый код. Это значит, что у проектов есть пользователи. А где люди, там ответы на вопросы и решение проблем. В статье выше описывается как построить систему помощи пользователям.

Как мейнтейнер - круто, что таких статей становится больше, потому что, в мелких и средних OSS проектах не хватает людей, которые понимают, как улучшить жизнь проекта и людей вокруг него. Возможно в этом причина не оптимальных процессов релизов, работы и анбординга (если такие процессы есть). Или сложностей с получением помощи, а также неочевидные фичи, которые пытаются сделать мейнтейнеры. Так что, если хотите пойти в менеджеры, а на работе не пускают - попробуйте помочь open source проекту со внутренними процессами.
источник
2018 November 02
2pegramming
Пятничное чтиво

Microservices Are Something You Grow Into, Not Begin With — Nick Janetakis
Давно задумываюсь о том, что микросервисы - архитектурный блокчейн. Считаю, что это кейворд, который усложняет стартапы и полезен только гигантам вроде гугла или в системах, где распределенная архитектура архи важна. На деле микросервисы приносят много новой, асинхронной боли (привет distributed мир), о которой больше говорят. Как пример, segment, который мы используем на работе, поделился историей не обдуманного использования микросервисной архитектуры.

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

Перевод на русский.

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

Why You Should Never Use MongoDB
Люблю истории, особенно истории провалов. В статье выше, ребята из диаспоры рассказывают о том, как начинался проект, почему выбор пал на монгу и как потом перенесли данные в постгресс. В истории идеально все. Понравился опыт хранения социальных данных и способы работы с ними.

Не понравилось кликбейтовое название статьи. Как минимум многа подходит как кеш для сложных запросов с кучей джойнов в эвент ориентированных архитектурах.

Перевод на русский.

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

Concurrent Ruby with Tasks · software is fun
Асинхронный код - боль. Использование concurent-ruby в бизнес логике - двойная боль. В функциональных языках для подобных вещей используется Task монада, в js - promises. @flash_gordon сделал реализацию подобной монады в dry-monads, а в статье выше описано зачем Task нужен, как пользоваться и приводится примеры работы с Do нотацией.
источник
2018 November 09
2pegramming
Пятничное чтиво

Maintaining 65k open connections in a single Ruby process
Соеденив вместе puma, rack и hijacking получим развлечение на вечер и статью, в которой автор подробно рассказывает как с помощью этих вещей добиться обработки 65523 открытых коннекшенов. В конце статьи - ссылка на гист с полным кодом (всего 55 строк кода с комментариями).
Из проблем: такой код съедает 350 мб памяти, что много (nginx для примера потребляет 2.5 мб), race conditions проблемы (поправились с помощью использования http://amp.gs/vXFN и http://amp.gs/vXFA).
Если хотите разобраться как подобные штуки работают и как еще можно ускорить приложение - маст рид.

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

Architecture of a high performance GraphQL to SQL engine
В первый раз, когда увидел graphQL подумал, что было бы круто получить сервис с 1 в 1 доступом к базе. Спустя 3 года появилась статья, которая описывает как работает Hasura, сервер-прослойка между клиентами и постгресом. Стоит обратить внимание, что сервис написан на хаскеле, по бенчмаркам быстрее prisma и postgraphile. Надеюсь что подобные сервисы смогут в будущем элегантно решить проблему кастомной логики.

Русский перевод

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

Six Great Reasons to Build Service Architectures in Ruby with Eventide
За eventide слежу давно. Даже упоминал этот проект пару раз в выступлениях. Для тех кто не в курсе, eventide - тулкит для построения ES систем на руби. Много фич, огромная и полная документация. В статье выше описываются 6 причин, почему eventide стоит попробовать. Для меня причины спорные, но для ознакомления стоит прочитать.

Рад, что таких проектов становится больше. Так же стоит посмотреть на sequent и RailsEventStore. Круто, что библиотеки не просто появляются, но и развиваются. А так же, появляется больше ES ориентированных конференций в мире руби.
источник
2018 November 14
2pegramming
На работе попробовал новую для себя практику post review. Делюсь опытом.

Medium
Telegraph
MindNode
источник
2pegramming
так же, подсказали важную мысль на счет самоутверждения и доверия, дополнил тексты
источник
2018 November 16
2pegramming
Пятничное чтиво

Functional architecture is Ports and Adapters
Статья пример того, как переплетаются функциональные подходы с архитектурными паттернами. Основная часть текста - рассуждение с примерами на тему того, как же использовать чистые и не чистые функции в хаскеле или F# и как это похоже на подход проектирования систем с помощью адаптеров и портов. Интересно будет для расширения кругозора и как пример взаимодействия и дополнения подходов в функциональных языках и архитектурах систем.

Русский перевод

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

Cloud Diagrams & Notes

Список картинок о том, как работают сервисы AWS. Для меня это открытие недели, так как постоянно забываю что есть что или просто путаюсь в сервисах от амазона.

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

How to teach yourself hard things

Учиться сложно, учиться продуктивно сложно вдвойне. Автор статьи делиться советами о том, как учиться продуктивнее. Совета четыре, но каждый может кардинально изменить подход к обучению.

Добавлю, что кроме упора на продуктивность, стоит не забывать о перерывах для отдыха. Иногда перерыв длится пару часов, иногда недели. Важно в такие моменты не корить себя, а дать голове переварить информацию.
источник
2018 November 23
2pegramming
Пятничное чтиво

Specification gaming examples in AI - master list
Наверно самая впечатляющая ссылка за эту неделю. Список нестандартных решений проблем, которые нашел AI. Сказать честно - я восхищен, а простота некоторых решений компьютера поражает. Из любимого:

> AI trained to classify skin lesions as potentially cancerous learns that lesions photographed next to a ruler are more likely to be malignant.

Русский перевод с гифками

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

Zero dependancy Pub / Sub system with PostgreSQL
Статья описывает то, что хотел сам хотел попробовать пару лет назад. Идея отсутствия еще одной зависимости для pub/sub манит и позволит сократить расходы на лишнюю бд на старте приложения. Автор предлагает использовать LISTEN / NOTIFY команды и приводит пример библиотеки на тайпскрипте. Стоит отметить комментарии, в которых указываются проблемы решения, описан опыт подобного использования постгреса и показывается о чем стоит думать, если вы решитесь на подобные эксперименты.

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

Legend of the Sourcerer: A Text-based Adventure Game in Ruby
The Legend of Zelda для NES и famicom вышла в далеком 1986 году. Но это не мешает игре вдохновлять людей. Автор статьи попробовал написать похожую игру на руби. В статье описываются идеи, которые стоит учесть во время разработки похожего проекта. Даются советы по ключевым аспектам, а также даются ссылки на проект и фреймворк для создания RPG игр на руби.
источник
2018 November 30
2pegramming
В этот раз решил попробовать сделать рассылку не такой сухой и добавить личного.

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

Во вторых: благодаря стримам @dmitriystrukov на твиче, решил попробовать постримить еще раз. В прошлый раз стримил разработку ханами приложения без голоса и комментариев. В этот раз хочу исправиться. Поэтому, в следующую среду, в 20:00 по москве буду ждать на твиче. В ближайшее время напишу зачем это и что конкретно буду стримить.

Пятничное чтиво

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

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

Блокчейн изнутри: как устроен биткоин
Так получилось, что для меня далека тема крипты, биткоина и блокчейна. Но статья vas3k о децентрализации и блокчейне заставила посмотреть на это с другой стороны. В статье найдете: простое описание, крафтовые картинки, разбивка текста на блоки, список использованной литературы и примеры использования. Если хотели узнать что такое блокчейн и(или) вас достали вопросами о том, что это - однозначный мастхэв.

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

Some notes on running new software in production
Статья с полезными мыслями о том, на что стоит обратить внимание в первую очередь в приложении, которое выводиться в продакшен. Опытным пользователям ПК пункты покажутся очевидными, но считаю, что лучше повторить, чем забыть.

Добавлю, что первое, на что стоит смотреть при старте продакшена - удобное логирование и мониторинг. Под удобным подразумевается такое логирование, в котором каждый разработчик поймет что произошло с частью системы без дебага прода. А мониторинг позволит обратить внимание на проблему сразу. Если вы используйте k8s, обратите внимание на пробы. А так же добавьте в /health проверку на критические ресурсы (у нас это пинг в базу, редис, s3 и внутренние сервисы без которых система не сможет нормально функционировать).
источник
2018 December 03
2pegramming
Привет, давно хочу написать пару простых программ из списка «чем пользуемся каждый день, но не знаем как сделано». Примеров много: калькулятор, фтп сервер, рсс читалка и так далее. Такие программы помогают отвлечься и просто получить фан решения конкретной проблемы, а также понять как работают те или иные вещи. Но к сожалению, времени и сил не хватает на это.

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

Так получилось, что идея соединить эти две проблемы пришла случайно, во время просмотра твича @dmitriystrukov и стрима написания game of life на rubykaigi. В итоге, хочу попробовать начать показывать решения задач без подготовки. Одна задача - один стрим. Следовательно контекст будет изолированным, что позволит включаться в любое время и день. После, выкладываю  код на гитхаб и попутно отвечаю на вопросы, обсуждаем другое решение.

## Зачем?

Такие стримы дают возможность:
* посмотреть как другие люди решают проблемы (если идея понравится, код писать буду не только я). Это позволит подготовиться к собеседованию или посмотреть на другой подход к решению задач;
* свичнуть контекст в голове;
* предложить решение лучше и посмотреть решение задачи, на которую нет времени и (или) сил;

## Орг информация
Первый стрим будет в эту среду, 5 декабря. Начнем в 20:00 по москве. Длиться будет как получится.
Ссылка на твич канал:
http://amp.gs/gKDc

## Что будем делать?

*Calculator* - A simple calculator to do basic operators. Make it a scientific calculator for added complexity.
источник
2018 December 05
2pegramming
начинаем стрим через пять минут
https://www.twitch.tv/davydovanton
источник
2pegramming
Спасибо всем, кто смотрел. Видео пока на твиче, надеюсь скоро залью на ютуб.

Само видео: https://www.twitch.tv/videos/345000670
Код, который получился: https://github.com/davydovanton/pepegraming-stream/tree/master/calculator

Буду рад идеям для следующих стримов, пожеланиям и что понравилось/не понравилось

❤️
источник
2pegramming
Ссылка на ютуб канал со стримами (качество не очень вышло, постараюсь исправить)

https://www.youtube.com/playlist?list=PL6n1fvXhQN4kOm_HhBDJrynj6_dcl7VJP
источник
2018 December 07
2pegramming
Пятничное чтиво

Привет!
На неделе провел первый стрим, объяснил и показал как написать простейший парсер математических формул и объяснил как обратная польская нотация может помочь в вычислении такси строк. Ссылка на видео.

Следующий стрим планирую сделать через неделю. Будем делать валидатор для банковских карт. Если у есть идеи для проектов - пишите.

Так как 12 декабря буду рассказывать о граблях,  на которые наступил за последние полгода в выковыривали сервиса из монолита. Много боли, слез и крови.

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

Four things about Pry – Runtime Revolution
Так сложилось, что у меня натянутые отношения с pry.rb. Не смог использовать на постоянной основе, а сейчас уже сложно переучиться. Об этом даже упоминал на прошлом стриме. Но, статьи с tips&trics об инструментах люблю.

После прочтения прокачаете чуть больше pry skill, а после сможете удивлять коллег и быстрее проверять код в REPL.

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

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

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

Личный опыт: как не копить закладки и успевать всё читать
Давно не было статей в закладки. Добавить нечего. Скажу честно, эту ссылку я пытался прочитать 5 раз и так и не осилил. Было бы круто устроить интерактив и собрать других советов. Поэтому, расскажите, как справляетесь с тысячами вкладками и покетом на несколько сотен статей? Для затравки поделюсь статьей @vanadium23 о том, как держать покет в чистоте:

Держи кармашек в чистоте
источник
2pegramming
pepegramming
Ссылка на ютуб канал со стримами (качество не очень вышло, постараюсь исправить)

https://www.youtube.com/playlist?list=PL6n1fvXhQN4kOm_HhBDJrynj6_dcl7VJP
Забыл ссылку на видео добавить, она выше
источник
2018 December 14
2pegramming
Пятничное чтиво

Привет!

Неделя оказалась сложнее чем рассчитывал, поэтому с рассылкой запоздал. Так же, планирую в следующую среду опять провести стрим, в этот раз будем делать валидатор для кредитных карт. Подробности на следующей неделе!

CastlevaniaBot
Я далек от нейронных сетей и дата сайнса. Но читать статьи о том, как сделать бота для культовой игры готов всегда.

Автор написал бота, который проходит castlevania на эмуляторе NES (nintendo entertainment system), которая больше известна в россии как денди. Описывается как находить врагов и взаимодействовать с миром. А так же описывается как проходятся отдельные части уровней (например последний босс - дракула).

Русский перевод

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


Ruby Sinatra on AWS Lambda
AWS анонсировал ruby как еще один язык для lambda. Теперь появляются статьи о том, как с этим жить. В статье выше на примерах показывается как работает и зачем нужна лямбда. А также, что нужно знать для первого приложения и шаг за шагом описывается, как сделать приложение на руби и синатре.

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

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

Deep Work: How to Develop the Most Valuable Skill of the 21st Century -
Состояние потока приятно и продуктивно, в статье описывается 5 шагов для того, чтобы попасть в это состояние. Скажу честно, не еще не успел попробовать, но мне помогает ритмичная музыка, ясное понимание задачи, отсутствие технических вопросов и дедлайн. Спустя время, все больше понимаю, что в моем случае ясное понимание задачи становится приоритетнее. При этом, потратив кучу времени на понимание задачи, можно просто расслабиться и делать дела.
источник