Обновить
8K+

Ruby *

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

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

Ruby Interview Questions

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

Я 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), и снабжены семантическим форматированием (выделения ключевых слов, примеры кода и т.д.).

Читать далее

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

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

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

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

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

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

image

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

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

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

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

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

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

Читать далее

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 мин
Охват и читатели12K

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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


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

Запускаем скрипты 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.4K
С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 мин
Охват и читатели7K

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

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

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

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

Читать далее

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

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


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

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

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

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

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

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

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

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

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

Читать далее

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

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

Как то в прошлом я написал статью о рекурсивном алгоритме Цекендорфа и меня спросили, а где его можно практически применить.
Я подготовил статью где и описываю практическое применения этого алгоритма на примере 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.8K
В прошлом месяце вышла стабильная 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 года. Новости, включая русскоязычные источники. А также полезные мнения и опыт разработки.


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