Обновить
5.9

Ruby *

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

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

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

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

image

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

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

Читать дальше →

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

Время на прочтение6 мин
Охват и читатели7.7K

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

Читать далее

WorkerKiller

Время на прочтение4 мин
Охват и читатели3.1K

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

Читать далее

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

Время на прочтение3 мин
Охват и читатели1.8K
Как, загружая гемы 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»).


Читать дальше →

Redfish в GAGAR>IN BMC

Время на прочтение6 мин
Охват и читатели11K

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

Читать далее

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

Время на прочтение3 мин
Охват и читатели7.6K

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

Читать далее

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

Время на прочтение5 мин
Охват и читатели16K

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

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

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

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

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

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

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

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

Читать далее

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

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


Читать дальше →

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

Время на прочтение3 мин
Охват и читатели2.5K

Для использования 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.

Читать далее

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

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

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

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

Время на прочтение5 мин
Охват и читатели3.5K

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

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

Читать далее

Метапрограммирование в реальной задаче

Время на прочтение4 мин
Охват и читатели6.9K

Всем привет! В этой статье хочу рассказать про метапрограммирование на примере реальной часто встречающейся проблемы.

Когда кто то говорит про метапрограммирование у олдскульного кодировщика случается приступ ярости)

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

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

Читать далее

Как я принёс Ruby в ДомКлик

Время на прочтение11 мин
Охват и читатели19K


В конце 2017 года я твёрдо решил, что хочу перейти на руководящую работу.

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

Я чувствовал себя не столько садовником, который день за днём возделывает маленький клочок земли, наблюдая за проклёвывающимися сквозь землю ростками, сколько фермером, которому надо собрать, а затем продать урожай с гигантского поля размером с европейскую страну.

Масштабность и эффективность меня вдохновляли.

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

Скрипт на ruby, который с помощью яндекс-сервиса Yandex SpeechKit распознает текст в видео-файле (длинные аудио)

Время на прочтение6 мин
Охват и читатели4.4K

Начну с того, что я совсем недавно начала погружаться в IT в целом и Ruby в частности, и это задание мне выдали в качестве тестового для получения места на стажировке. Заранее скажу, что тут еще есть что приглаживать и улучшать, но в целом код работает.

Однако, возможно, мой опыт может быть для кого то полезен, так что представляю вашему вниманию подробное описание создания этого скрипта. ВАЖНО: Моя операционная система Fedora 32, так же я использую заранее установленный в систему bundler. Так что если вы тоже используете linux-подобные системы, читаем далее.

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

Читать далее

Практическое применение алгоритма для представления Цекендорфа

Время на прочтение4 мин
Охват и читатели2.4K

Как то в прошлом я написал статью о рекурсивном алгоритме Цекендорфа и меня спросили, а где его можно практически применить.
Я подготовил статью где и описываю практическое применения этого алгоритма на примере Telegram бота написаного на Ruby и продуктов из холодильника.

Взглянуть

Пошаговый туториал по написанию Telegram бота на Ruby (native)

Время на прочтение12 мин
Охват и читатели18K

Приветики-омлетики, как-то недавно у меня появилась идея написать Telegram бота на Ruby на специфическую тематику, в двух словах этот бот должен был поднимать онлайн чатах по средством развлекательных событий которые этим же ботом вбрасывались в чат в рандомное время с рандомным контекстом.

И вот пока я занимался написанием этого бота то познакомился с библиотекой (gem) telegram-bot-ruby, научился её использовать вместе с gem 'sqlite3-ruby’ и кроме того проникся многими возможностями Telegram ботов чем и хочу поделится с уважаемыми читателями этого форума, внести вклад так сказать.

Много людей хочет писать Telegram боты, ведь это весело и просто.

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

Сразу кидаю ссылку на свой репозиторий по этому посту: here,
Ибо во время тестирования были баги, которые я мог сюда и не перенести, вдруг чего смотреть прямо в репозиторий :)

В следствии прочтения этого топика, я надеюсь читатель сможет улучшить своего уже написаного бота, или прямо сейчас скачать Ruby, Telegram и создать что-то новое и прекрасное. Ведь как уже было сказано в «Декларации Киберпространства» :

Читать далее

Опыт сопряжения Java, JavaScript, Ruby и Python в одном проекте посредством GraalVM

Время на прочтение18 мин
Охват и читатели8.7K
В прошлом месяце вышла стабильная LTS-версия многоязычной среды выполнения GraalVM 20.3.0 от корпорации Oracle и мне захотелось испробовать её для решения какой-нибудь интересной практической задачи. Для тех кто не в курсе, приведу краткое описание этой новой платформы. GraalVM позволяет использовать в едином окружении различные популярные языки программирования и обеспечивает их разностороннее взаимодействие в рамках некоторой общей среды выполнения.


Схематическое изображение архитектуры GraalVM из официальной документации.

Добавление новых языков в GraalVM осуществляется с помощью специального фреймворка Truffle, выполненного в виде библиотеки Java. Фреймворк предназначен для создания реализаций языков программирования в качестве интерпретаторов для самомодифицируемых абстрактных синтаксических деревьев (AST). При желании на его основе можно создать собственный язык, в официальных репозиториях GraalVM подробно рассмотрен пример реализации такого проекта под названием SimpleLanguage. Интерпретаторы, которые были написаны с использованием фреймворка Truffle, будут автоматически использовать GraalVM как JIT-компилятор непосредственно для самой реализации языка запускаемой на JVM-платформе и, соответственно, иметь возможность взаимодействия и двустороннего обмена данными в одном и том же пространстве памяти посредством специально разработанного протокола и программного интерфейса Polyglot API.

Платформа GraalVM вместе с исполняемой программой на смеси самых разных языков может быть представлена в виде автономного и самодостаточного исполняемого файла, либо работать поверх OpenJDK, Node.js или даже внутри Oracle Database.
Читать дальше →

RubyGems Digest 2020·10

Время на прочтение5 мин
Охват и читатели2.3K
Большая подборка информации о библиотеках языка Ruby за октябрь 2020 года. Новости, включая русскоязычные источники. А также полезные мнения и опыт разработки.


Читать дальше →

RubyGems Digest 2020·09

Время на прочтение5 мин
Охват и читатели2.1K
Большая подборка информации о библиотеках языка Ruby за сентябрь 2020 года. Новости, включая русскоязычные источники. А также полезные мнения и опыт разработки.


Читать дальше →

Почему в 2020 году мы по-прежнему выбираем Ruby?

Время на прочтение8 мин
Охват и читатели9.9K
Привет, Хабр! Представляю вашему вниманию перевод статьи «Why is Ruby still our choice in 2020?» автора Vira Vashkovska.

Мы — опытная команда Ruby on Rails разработчиков. Некоторые из нас занимаются разработкой на Ruby уже многие годы и знают его как свои пять пальцев. Вот почему нам требуется много мужества чтобы признать, что Ruby сейчас не в лучшей форме.

Язык был очень популярен в 2013-2015 годах, но затем его популярность пошла на спад. Это особенно заметно, если мы сравним статистику Ruby и Ruby on Rails за 2020 года с прогрессом, достигнутым другими инструментами. Stack Overflow провел довольно тривиальное сравнение динамики роста Ruby и Node.js на основе количества заданных вопросов. Да, это не самый объективный показатель, но вы поняли…

image

Количество пользователей Ruby упало, но достаточно ли этого, чтобы объявить о смерти Ruby? На самом деле, нет. Если вы видели такие статьи, как «Ruby is Dead» или «Ruby is Irrelevant», приготовьтесь — ведь в какой-то момент каждый язык был объявлен мертвым. Возьмите Node.js — среда выполнения переживает хорошие времена — и все же люди спешат объявить о ее смерти.
Читать дальше →

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