Обновить
8K+

Ruby *

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

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

Реверс-инжиниринг визуальных новелл

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

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

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

PHP против Ruby: Давайте жить дружно

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


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

Я решил, что было бы куда интереснее провести более честное сравнение, с точки зрения разработчика, которому нравятся оба языка и который имеет приличный опыт работы с ними. Например, с PHP и Ruby. И задача здесь не в том, чтобы выяснить, какой из них «лучше». Я лишь хочу подчеркнуть те свойства, которые мне нравятся в Ruby и его экосистеме.
Читать дальше →

«Банда четырёх» была неправа, а вы не знаете, что такое делегирование

Время на прочтение6 мин
Охват и читатели73K
«Банда четырёх» была неправа, стандартная библиотека Ruby тоже ошибочна, и Rails – также. Но является ли нечто неправильным, если все так делают?

Да.

Книга «Банды четырёх» "Шаблоны проектирования" даёт нам общий словарь для понимания базовых шаблонов ООП. Она помогает нам использовать одинаковую терминологию при обсуждении софта. К сожалению, она же является причиной путаницы.

Они говорят: «композиция прежде наследования». Отлично, в этом есть смысл. Они говорят: «используйте делегирование». Отлично. Хотя в книге нет ни единого примера делегирования.

Делегирование – это приём, которому приписывают возможность внесения гибкости в программы. Обычно говорят, что делегирование – это способ достичь композиции. Но делегирование – это не то, что вы думаете, и «Банда четырёх» ввела вас в заблуждение. Хуже того, почти все упоминания о делегировании содержат лишь совместную работу объектов с пересылкой (forwarding) сообщений. Это примеры вызовов методов, а не делегирования.

Наверняка ваш учитель программирования сказал бы вам, что вам необходимо хорошо понимать основные концепции в программировании. И понимать их правильно.
Читать дальше →

ActiveResource, prefix и вложенные ресурсы

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

Предыстория


Я программист с очень небольшим стажем (недавно накопилось около года в трудовой).
Около полугода назад я начал работать с Ruby (вне Rails) и сразу же познакомился с Active Resource и Redmine.

Это был очень интересный опыт, сейчас мне кажется, что Ruby — практически идеальный язык (именно язык, я не задаюсь вопросом потребления памяти и скорости работы).

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

Проблема


Проект заключался в создании консольной утилиты (Thor-based), работающей с Redmine REST API и предоставляющей всякие ништяки (кстати, вдохновленный проектом, я в данный момент работаю над подобной утилитой, частично дублирующей функционал: https://github.com/Nondv/redmine_cli).

Если посмотреть на документацию по Versions или Issue Relations (http://www.redmine.org/projects/redmine/wiki/Rest_IssueRelations), то можно обратить внимание, что для получения списка отношений используется адрес вида issues/<id>/relations.xml, а для конкретного объекта — relations/<id>.xml.
Читать дальше →

Дистрибуция приложений. Часть 1: создание Formula для Homebrew

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

Вступление к серии


Передо мной недавно встала задача, как распространять одну консольную утилиту? Обычные мои инструменты вроде pip, npm и gem не подходили в силу языка самой утилиты — bash. Тогда стало понятно, что нужно распространять свое приложение в том числе и через системные пакетные менеджеры. Для Mac — в силу отсутствия встроенного — таких пакетных менеджеров несколько. И у каждого из них есть свои особенности и недостатки. И в первой части я хочу более подробно остановиться на Homebrew, и как создавать пакеты для него.

Ну а чтобы установить приложения на Linux, то нужно будет собирать пакеты таких форматов: .tar.gz, .deb и .rpm. О чем я расскажу во второй части.
Читать дальше →

Как Дэвид Хайнемайер Хенссон организовывает контроллеры

Время на прочтение7 мин
Охват и читатели7.6K
Эта статья тут потому что я искал ответы на некоторые вопросы. Для меня понимание статьи не обошлось беглым чтением, пришлось переводить вручную. Возможно, кого-нибудь будет интересовать эта тема, но владение английским будет хуже моего. Перевод вам в помощь.

Оригинал статьи можно прочитать на сайте Jerome's Adventures in Software.


Как DHH (Дэвид Хайнемайер Хенссон) организовывает rails контроллеры


В недавнем интерьвью «с Full stack radio» наш гуру и спаситель DHH объяснил как он организовывает структуру rails контроллеров в последней версии Basecamp. Вот расшифровка его святых слов:

Я пришел что бы рассказать, то что будучи почти фундаменталистом в создании контроллеров, я остаюсь приверженцем REST'у который постоянно меня выручает.
Читать дальше →

Бот для Telegram. Rails way

Время на прочтение6 мин
Охват и читатели26K
Этот пост о библиотеке telegram-bot для написания ботов для Telegram. В числе основных целей при её создании были удобство разработки, отладки и тестирования ботов, сохранение интерфейсов минимальными, но с возможностью расширения, простота интеграции с Rails-приложением, и предоставление необходимых инструментов для написания бота. Вот что входит в состав:

  • Легковесный клиент для API ботов.
  • Базовый класс для контроллера обновлений с парсером сообщений. Сделан на основе AbstractController из ActionDispatch, предоставляет колбэки, сессии, сохранение контекста сообщений и прочее.
  • Rack-middleware для продакшена, чтобы принимать update-хуки, и поллер с автоматической загрузкой обновленного кода для удобной разработки.
  • Rake таски, хэлперы для рельсовых маршрутов и тестов.

Интересно? Для установки добавьте telegram-bot в Gemfile, подробности под катом.
Читать дальше →

Что нового в Rails 5.0. Можно планировать переезд

Время на прочтение2 мин
Охват и читатели27K
На 16 марта запланирован релиз Rails 5.0, самое время разобраться, что же нового и вкусного будет в новой версии рельсов (кроме нового логотипа и дизайна их официального сайта, я имею в виду).
image
Читать дальше →

Установка и настройка совместной работы GitLab + Redmine на Debian 8 jessie + Nginx — Часть 1

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

Вступление


Так сложилось, что для ведения проекта не хватало обычного GitHub или GitBucket. Оснавная причина в хранении и контроле версий больших бинанрых файлов psd, 3dsmax и других. На самом деле вариантов решения масса, можно например было использовать Облачный диск или git Large Files System, представленный GitHub. Но взвесив все плюсы и минусы разных подходов к организации, мы пришли к связке GitLab + redmine.

Я не думаю, что есть смысл описывать продукты, я лишь приведу основные достоинства, которые подтолкнули нас на этот выбор.
Основные плюсы GitLab:

  • Свой репозиторий.
  • Тонкая настройка прав.
  • Поддержка git lfs почти из коробки.

Также оба проекта Open Source.
Читать дальше →

Сэнди Метц и объектно-ориентированное проектирование в Ruby

Время на прочтение4 мин
Охват и читатели10K
Здравствуйте, уважаемые читатели.

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



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

Генерамба — кодогенератор для iOS разработки

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

TL;DR
Мы написали классный кодогенератор для iOS-разработки, обладающий следующими достоинствами:
  • Поддержка Swift и Objective-C,
  • Использование языка разметки liquid для создания шаблонов,
  • Гибкая система управления шаблонами,
  • Интеграция с менеджером зависимостей Cocoapods.

Больше подробностей — под катом.
Читать дальше →

Крупнейший хакатон в истории разработки ПО с призовым фондом в 140000$

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

22-25 февраля 2016 года будет проходить знаковое событие в сфере разработки ПО — hack.summit(). Это крупнейшая виртуальная конференция в истории. Самая большая в истории конференция по программированию. Самый крупный из проходивших в мире хакатонов с общим призовым фондом в 140000$ (на главной странице проекта почему то фигурирует 150000$, но в описании призовых мест 100k, 30k и 10k, может чего пропустил).

Для тех, кому достаточно hack.summit().
Читать дальше →

Как работает диспетчеризация методов в Ruby

Время на прочтение10 мин
Охват и читатели12K
Примечания переводчика:

Всем привет. Данная статья является вольным переводом (ссылка в конце). Я не претендую на какую либо 100% корректность перевода. Однако считаю, что общую суть происходящего передал полностью.

Для кого может быть полезна эта статья? Скорее всего, для начинающих Ruby on Rails разработчиков, кому просто интересно понять некоторые моменты в работе Ruby.

Для кого эта статья может быть бесполезна? Скорее всего, для чистокровных Ruby программистов и прожженых Ruby on Rails разработчиков. Высока вероятность того, что вы это уже знаете.

Зачем я сделал перевод? Эта статья мне показалась интересной и внутри меня просто появилось желание поделиться ею со всем русскоговорящим (м.б. плохо знающим английским) сообществом.

P.S. Если знаете английский, просто перейдите по ссылке в конце.
Читать дальше →

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

Почему из женщин получаются хорошие программисты

Время на прочтение5 мин
Охват и читатели42K
image
Линда Лиукас самостоятельно научилась программированию, чтобы сделать сайт, посвящённый Альберту Гору

Вряд ли вы догадались бы, что миниатюрная светловолосая 26-летняя девушка окажется одним из самых одарённых программистов. Но Линда Лиукас из Хельсинки (Финляндия) описывает себя, как человека, которому нравится готовить, бегать, человека, у которого «слишком много детских книг» – и при этом она именно такая. Она участвовала в создании глобальной инициативы по привлечению женщин к программированию, работающей в 227 странах, и уже пишет и иллюстрирует серию книг, обучающих детей программированию. «Из женщин получаются хорошие программисты, потому что они творческие натуры и одновременно прекрасно умеют общаться»,- поясняет она мне при встрече на технологической конференции в Лондоне.

Лиукас, общительная и обаятельная, считается талантливым программистом, заново открывшим написание кода как визуальное и творческое искусство. Она была одним из первых сотрудников сайта Codecademy, получившего инвестиций на $10 млн., и предлагающего бесплатные уроки программирования. Затем в 2010 году она стала лицом некоммерческой организации Rails Girls, обучающей женщин созданию веб-приложений.

image
Иллюстрации Лиукас «Hello Ruby» должны стимулировать интерес детей к программированию
Читать дальше →

Рецепты от CHEFa: автоматизированное развёртывание сред бизнес-приложений с использованием HPE OneView

Время на прочтение8 мин
Охват и читатели10K
Информационные технологии становятся неотъемлемой частью продуктов и услуг нового стиля IT, в котором бизнес ожидает получить запрошенные ресурсы под новые приложения почти мгновенно. IT ресурсы, в парадигме новых требований со стороны современных приложений, должны автоматически выделяться, использоваться, возвращаться и повторно использоваться из общего пула узлов вычислений, хранения, и сети.


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

Как разрабатывается Cloud Foundry

Время на прочтение4 мин
Охват и читатели13K
CF community logoЯ кратко расскажу о процессе разработки Cloud Foundry (CF), особенностях open source модели и немного личного опыта.

В 2013 году я стал активным пользователем платформы, когда IBM запустила внутреннюю бету Bluemix, в начале этого года я принял участие в портировании Cloud Foundry на архитектуру POWER8, а с середины октября я стал членом CF core team, пройдя CF Dojo. Но обо всем по порядку.

Не буду углубляться в историю или объяснять что такое Cloud Foundry, но вот необходимый минимум фактов. CF — это Platform as a Service (PaaS), разработанная VMWare и позднее переданная Pivotal Software. Исходный код был открыт, сейчас еще есть отдельный инкубатор CF проектов. Чуть позже была создана Cloud Foundry Foundation, в которую вошли Pivotal, IBM, VMWare, EMC, GE, Intel, SAP, настоящее время в нее входит более 50 организаций. Изначально платформа была написана на Ruby, позднее часть компонент были переписаны на Go.
Читать дальше →

Легковесный конструктор парсеров с интерактивным режимом

Время на прочтение9 мин
Охват и читатели9.2K
Периодически сталкиваясь с мелкими задачками по разработке простеньких анализаторов текста, решил данную задачу автоматизировать, да и академический интерес не давал покоя. Первоначально смотрел в сторону Racc (одна из интерпретаций Yacc), но он мне показался достаточно не простым решением для моих мелких задач и тогда я решил разработать свой простенький анализатор. Хотя, конечно, если вы разрабатываете компилятор или что-то подобное да и еще в промышленных масштабах, то определенно вам стоит посмотреть в сторону Racc.

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

Программируем 1С на Ruby

Время на прочтение12 мин
Охват и читатели22K
Механизм управления «толстым клиентом» 1С по OLE дает полный доступ ко всем функциям и данным. Это дает возможность при кастомизации 1С или ее интеграции с внешними системами вообще не использовать встроенный язык программирования и, соответственно, не ограничивать себя его синтаксисом, возможностями и средой исполнения.

Вместо этого можно воспользоваться любым современным языком, имеющим библиотеку для работы с Win32 OLE. Например, JavaScript (Win32 OLE поддерживает Node.JS) или Ruby (нужная библиотека входит в набор стандартных библиотек языка).

Ниже будет описан некоторый практический опыт работы с OLE-интерфейсом на Ruby. Описание не претендует на полноту, отобрано и описано только то, что нужно для простой автоматизации или интеграции на уровне данных: чтение-запись справочников и документов, выполнение запросов.
Читать дальше →

Как мы год живем без sprockets и с react

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

Мы в taaasty.ru уже полтора года живем на react-е и почти год без sprockets. Это так здорово, хочу поделиться. За одно расскажу как работает react с рельсами в режиме prerender.

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

Автоматизированное тестирование контроллеров в Rails

Время на прочтение5 мин
Охват и читатели8.4K
Привет, Хабр! Давно манят меня лавры быть автором, и вот, наконец, настал тот светлый час, когда я допинал себя представить на твой суд мой небольшой опус.

Изучая на досуге Ruby и Rails, пробуя то RSpec, то вдруг Minitest, дошёл я до создания web-приложения с фронтэндом на JavaScript и бэкендом на Ruby, торчащим наружу REST API на базе обычных контроллеров Rails. Я использую Rails, хотя это совершенно не принципиально. Описанный ниже подход применить можно к чему угодно.

Тут следует сделать небольшое отступление. По натуре я человек требовательный, и всячески борюсь за доказанную стабильность кода (на словах-то уж точно). А уж когда речь заходит о безопасности пользователей в моём приложении, без тестов, хотя бы показывающих, что абы кто мои данные не получит, я чувствую себя совсем не комфортно. Начинаю грустить и вообще никакой код не писать. Даже если я — один-единственный пока пользователь.

Казалось бы, всё очень просто: берём RSpec и пишем тесты. Но это же скучно! Для каждого контроллера, для каждого поддерживаемого метода проверить, как минимум, что без выданного ранее токена пользователь получит от ворот поворот — это ж сколько одинакового кода надо написать! А дальше как? Контроллеров всё больше, тесты копировать скучно, да и в возможностях подходы менять я остаюсь ограничен. Пойди-ка все эти тесты потом перепиши, если я захочу, например, версию API передавать не в URL, а в заголовке, или наоборот. В общем, задумал я написать генератор.
Постановка задачи