Как стать автором
Обновить
14.41

Ruby *

Динамический высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Эволюция CI в Android

Время на прочтение 18 мин
Количество просмотров 3.3K

“Твою ж мать, какая же это хтонь!”. Примерно так можно было охарактеризовать все наши инфраструктурные скрипты до недавнего времени. Нужно было что-то менять, и мы сделали это. 

Меня зовут Павел Стрельченко, я – Android-разработчик компании hh. Я расскажу вам как эволюционировали наши CI скрипты на протяжении трех лет, с какими проблемами мы сталкивались, как анализировали их и пытались изменить, а также что вообще делали и к чему в итоге пришли. 

Это текстовая расшифровка выпуска нашего влога, поэтому если вам удобнее смотреть, а не читать, добро пожаловать на наш Youtube-канал. В статью получилось добавить множество дополнительных ссылок, так что можно почитать ещё и их. 

Узнать про хтонь
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 0

Сколько мы переплачиваем за сервера используя Ruby on Rails

Время на прочтение 4 мин
Количество просмотров 9.5K

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

Читать далее
Всего голосов 16: ↑12 и ↓4 +8
Комментарии 55

Slack Ruby App. Часть 2. Добавление чартов, или как делать рендер фронта на сервере

Время на прочтение 8 мин
Количество просмотров 1.1K

Во время разработки своего приложения в качестве проекта внутри компании, поступил запрос на постройку графика по некоторой выборке данных, чтобы по команде Slash Command происходила постройка графика и его публикация в чат.

Первым делом я обратился к уже существующим решениям, графики через API Google, готовые гемы для Ruby. Основной минус в том, что не было возможности убрать или добавить легенду в том формате, который мне нужен, сложно кастомизировать внешний вид этих графиков и, к примеру, нет возможностей строить график по значению timestamp, а выводить уже значения в формате DateTime.

Имея на вооружении тот метод, который освещает эта статья, любой сможет строить какую угодно страницу полностью на сервере, получать фото этой страницы и использовать её в коде. В будущем можно приспособить этот подход для, например, для предпоказа тем на своем движке, генерации каких-то изображений с подвязкой к внешнему API и заключении всего в html документ. В целом, применений реально много, собственно поэтому и решил поделится solution'ом.

Поэтому предлагаю вам скорее ознакомится с материалом, мы научимся сначала делать график с использованием своего js скрипта, а потом поймём как его рендерить в коде.

Представляю содержание.

Научится
Рейтинг 0
Комментарии 0

Под капотом Ruby. GVL

Время на прочтение 8 мин
Количество просмотров 4.2K

Давным давно уже уже была написана статья о том что такое GVL (или GIL, кому как привычнее) и как он работает, однако с того времени некоторые вещи поменялись (к примеру, , а так же в Ruby 3.0 завезли Ractor'ы - новую абстракцию для реальной параллельной работы тредов. Мне стало интересно узнать что поменялось в планировщике ruby для реализации множества GVL. В этой статье я попытаюсь понять алгоритм, по которому GVL передается от одного треда к другому, как блокирующее IO позволяет продолжить работать другим тредам, а так же выяснить до сих пор ли операция добавления элемента в массив является атомарной операцией

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 4

Истории

Работаем с индексами при высокой нагрузке в rails с psql: как добавить/удалить индекс и при этом не умереть

Время на прочтение 8 мин
Количество просмотров 5.3K

Всё, что кладёт прод, делает тебя умнее. © программист, положивший прод

Привет! Я — Женя, рубист из Каруны. В этой статье расскажу, как мы получили, на первый взгляд, тривиальную задачу по работе с индексами, набили кучу шишек и пришли к не очень тривиальному и эффективному решению.

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 3

Python и Ruby под нагрузкой: высокое искусство некромантии

Время на прочтение 11 мин
Количество просмотров 17K

Уже больше 20 лет я пишу код на разных языках программирования. Так как многие из этих языков считаются мертвыми, то сегодня я буду говорить о высоком искусстве некромантии — о том, как якобы мертвые языки используются в больших и иногда высоконагруженных проектах. Обрабатывая тысячи веб-запросов в секунду и не порождая необходимости писать свой компилятор PHP или переходить на Go или Rust.

Я расскажу про специфику Ruby и Python при высоких нагрузках, про их мейнстрим, который вы можете встретить в выживших проектах. Я не буду и не хочу говорить про спортивное программирование, где делают миллион запросов в секунду на одной ноде, выжигая из Python или Ruby всё и оставляя голый С. Python и Ruby действительно медленные, у них есть GIL, но при правильном использовании это не проблема, а статья расходов — и я расскажу, что мы можем получить за эти деньги.

Если вы предпочитаете слушать или смотреть (у меня там забавные крылья!) — видео моего выступления на конференции HighLoad++ Весна 2021.

Читать далее
Всего голосов 31: ↑28 и ↓3 +25
Комментарии 30

Slack Ruby App. Часть 1. Написания приложения локально через Sinatra и ngrok

Время на прочтение 12 мин
Количество просмотров 2.2K

Slack Ruby App. Часть 1. Написания приложения локально через Sinatra и ngrock

Привет читатели, на сейчас не так много информации о новых фичах Slack, всё больше людей заходят в ИТ и пользуются Slack и Slack для многих становится основным приложением куда регулярно хочется зайти и прочитать очередной прикол от менеджера.

Сам я прошёл путь создания приложения по англоязычным бредням, вырваным кускам из Stack Overflow, и очень многих проб, ошибок, и исследований. Не имея понимания о том что можно сделать, как то сложно хотеть что-то делать.

Было бы круто если бы каждый умелый разраб (или не разраб) мог сделать приятно для коллектива или для себя любимого и добавить автоматизацию в свой один или несколько Slack Workspace

Так что я опишу этапы создания своего Slack бота для многих Workspace!

Скорее изучить как это сделать!
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 2

Ruby Interview Questions

Время на прочтение 3 мин
Количество просмотров 3.2K

Я Ruby-программист. Язык почему-то теряет популярность, несмотря на своё интенсивное развитие. Лично я ему альтернатив [для себя] не вижу, поэтому готовясь к очередному собеседованию, решил составить шпаргалку с вопросами и ответами по Ruby. Шпаргалка за время подготовки превратилась в Android-приложение, которые я всегда хотел научиться делать, и о котором расскажу.

Дисклеймер: для профессионалов мобильной разработки в статье не будет ничего нового, это рассказ о том, как я столкнулся с разработкой под Android впервые в жизни.

Изучать Kotlin / Java я не стал. Близкий моему сердцу C# имеет технологию Xamarin, но, как пишут, у неё не всё так удобно в части создания интерфейсов, как хотелось бы. Поэтому было решено сделать шпаргалку на HTML / CSS, и обернуть в приложение с помощью Apache Cordova. В качестве CSS-фреймворка я рассматривал такие варианты: Bootstrap, Phonon, Framework7. Первые два показались неудобными, остановился на последнем.

Framework7 понравился тем, что ориентирован на создание мобильных интерфейсов (Android / iOS / своя тема Aurora), заявлена интеграция с Cordova, предлагает много разных виджетов, и обеспечивает высокий уровень контроля за функционалом с помощью JavaScript (поддерживает Vue.js и прочие, мне хватило старого доброго jQuery).

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

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Комментарии 3

Перестаньте везде использовать first/last

Время на прочтение 4 мин
Количество просмотров 5.4K

Очень часто разработчики на Rails для извлечения заведомо одной записи из базы используют один из методов first/last из ActiveRecord. Это рабочее решение, но есть одно НО: чтобы извлечь всего одну запись база данных должна найти все, подходящие по условию, отсортировать их и вернуть только одну. Если вы подумали "Сортировка одной записи? Да это же легко!", то не будте так оптимистичны, я постараюсь показать, что это важно.

Читать дальше →
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 4

Реализация алгоритма Минимакс на примере игры «Крестики-Нолики»

Время на прочтение 7 мин
Количество просмотров 29K
Недавно я написал непобедимую игру «Крестики-Нолики». Это был интересный и поучительный проект, который многому меня научил. Если у вас есть желание посмотреть результат — это можно сделать здесь.

image

Для того чтобы сделать игру непобедимой, было необходимо создать алгоритм, который может рассчитать все возможные ходы для «компьютерного» игрока. Далее, нужно использовать некоторую метрику, чтобы определить, какой ход является предпочтительным. После долгих исследований стало понятно, что алгоритм Минимакс, был тем, что мне нужно.

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

Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 6

С 4 часов до 1 минуты. Как найти одну строчку, которая ускорит сервис на Ruby

Время на прочтение 6 мин
Количество просмотров 6.8K

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

Читать далее
Всего голосов 19: ↑19 и ↓0 +19
Комментарии 4

WorkerKiller

Время на прочтение 4 мин
Количество просмотров 2.7K

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

Читать далее
Рейтинг 0
Комментарии 2

Кеширование гемов Ruby в GitHub Actions с использованием ruby/setup-ruby или actions/cache

Время на прочтение 3 мин
Количество просмотров 1.5K
Как, загружая гемы Ruby из кеша в GitHub Actions, ускорить запуск сборки проекта в этой системе непрерывной интеграции (CI)? Если суметь подготовить к работе все зависимости Ruby on Rails (RoR)-проекта в кратчайшие сроки, это позволит сократить время, необходимое на запуск тестов для такого проекта. Тут-то нам и пригодится кеширование. Гемы Ruby, нужные в проекте, можно кешировать средствами GitHub Actions, благодаря чему их, при запуске CI-конвейера, можно будет загрузить гораздо быстрее, чем прежде. Существует два способа кеширования гемов Ruby, применимых при использовании CI GitHub Actions. Один из них предусматривает применение ruby/setup-ruby, а второй — actions/cache.

  • actions/cache — это популярное решение для кеширования гемов Ruby.
  • ruby/setup-ruby — это решение, направленное на установку конкретной версии Ruby и на кеширование гемов Ruby с помощью бандлера. Фактически, речь идёт о двух возможностях одного «экшена» (того, что в терминологии GitHub Actions называется «action»).


Читать дальше →
Всего голосов 35: ↑34 и ↓1 +33
Комментарии 1

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн

Redfish в GAGAR>IN BMC

Время на прочтение 6 мин
Количество просмотров 5.7K

На сегодняшний день большинство крупных производителей серверного оборудования, таких как (DELL, IBM, HP) включают поддержку RedFish в прошивки для своих BMC контроллеров (Baseboard management controller) Разумеется, разрабатывая серверы GAGAR>IN, мы также добавили поддержку Redfish в наш BMC, который построен на базе открытого проекта OpenBMC. В этой статье расскажем, для чего мы используем RedFish и какие преимущества он нам даёт.

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 0

Генерация картинок в коде

Время на прочтение 3 мин
Количество просмотров 6.9K

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

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 2

PGHero — дашборд для мониторинга БД PostgreSQL

Время на прочтение 5 мин
Количество просмотров 11K

Всем привет. Сегодня я бы хотел поделиться рецептом установки утилиты PGHero с подключением нескольких баз данных. PGHero — это простенькая утилита, написанная на Ruby, с минималистичным дашбордом для мониторинга производительности БД PostgreSQL.

Что может показать нам PGHero:

статистику по запросам: количество вызовов, среднее и суммарное время выполнения (с возможностью хранения истории);

активные в данный момент запросы;

информацию о таблицах: занимаемое на диске место, даты последних запусков VACUUM и ANALYSE;

информацию об индексах: занимаемое на диске место, наличие дублируемых/неиспользуемых индексов. Также может порекомендовать добавить индекс при наличии сложных запросов с Seq Scan;

статистику по открытым подключениям к БД;

вывод основных настроек БД, влияющих на производительность (shared_buffers, work_mem, maintenance_work_mem и т.д.)

Читать далее
Всего голосов 35: ↑35 и ↓0 +35
Комментарии 9

Синхронизация баз данных между монолитом и микросервисами с помощью Kafka. Наше решение

Время на прочтение 4 мин
Количество просмотров 7.1K
В этой статье я расскажу про готовое решение для поддержки консистентности данных между растущей микросервисной и унаследованной архитектурой. Под катом код для репликации двух баз данных с проверкой синхронизации, который может пригодиться для решения аналогичных задач.


Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 9

Запускаем скрипты Ruby из Go Lang

Время на прочтение 3 мин
Количество просмотров 2.2K

Для использования Ruby как скриптового языка, то есть как языка для встраивания, вроде lua, существует легковесная реализация Ruby под названием mruby https://en.wikipedia.org/wiki/Mruby

Для go удалось найти только одну стабильную библиотеку с биндингом к mruby. По умолчанию, она может собрать mruby версии 1.2.0 (2015 год выпуска), и можно попробовать сделать сборку вплоть до версии 1.4.1 (2018 год выпуска). Но актуальная версия mruby сейчас имеет версию 2.1.2 (2020 год). Есть форк с поддержкой версии mruby 2.1.0. Этот форк и будем использовать, что бы после небольших изменений получить в том числе версию 2.1.2.

Читать далее
Всего голосов 3: ↑1 и ↓2 -1
Комментарии 0

Как перейти с secrets на credentials (Ruby on Rails)

Время на прочтение 4 мин
Количество просмотров 6K
Сredentials в версии Ruby on Rails 5.2.0 — новый золотой стандарт. Старые добрые, но небезопасные файлы .env уступают дорогу. В этой статье вы узнаете:

  • зачем и как перейти от secrets к credentials,
  • как использовать API-ключи в Ruby, YML и js.erb,
  • как раз и навсегда предоставить ключ каждому из команды.
Читать дальше →
Всего голосов 2: ↑1 и ↓1 0
Комментарии 0

Как добавить React-компонент в Active Admin

Время на прочтение 5 мин
Количество просмотров 3K

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

Мы в ДомКлик в таких случаях используем Vue.js и React, и под катом я расскажу, как именно можно внедрить React-компонент в Active Admin.

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 2

Вклад авторов

Работа

Программист Ruby
15 вакансий
Ruby on Rails
17 вакансий