Обновить
0.76

Ruby *

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

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

Learn Ruby The Hard Way

Время на прочтение1 мин
Количество просмотров6.6K
Роберт Соберс (Robert Sobers) адаптировал популярную книгу Зеда Шоуа (Zed Shaw) Learn Python The Hard Way под Ruby. В итоге получилась замечательная бесплатная книга Learn Ruby The Hard Way. В данной книге покрываются многие аспекты Ruby, такие как строки, переменные, методы, работа с файлами, массивы и т.д. Каждое упражнение сопровождается примером на Ruby. Настоятельно рекомендуется, если вы собираетесь или только-только начинаете осваивать Ruby.

Learn Ruby The Hard Way

EventMachine прокси демон

Время на прочтение11 мин
Количество просмотров3.9K
Несмотря на то, что EventMachine достаточно удобный фреймворк для написания высокопроизводительных и хорошо масштабирующихся сетевых приложений, интернет не радует обилием примеров его использования и тестирования. А те примеры, которые существуют, например, на хабре, не будут корректно работать, так как не учитывают особенности передачи данных (почему-то не учитывают, что данные, в общем случае, передаются по частям). Собственно, данная статья предназначена для тех, кто ознакомился с базовыми принципами работы EM, например, в статье Ruby и EventMachine , и хочет узнать как на его основе написать что-нибудь посложнее и как затем тестировать код, полученный в результате.
Читать дальше →

Создание бинарного дерева

Время на прочтение5 мин
Количество просмотров83K
Когда я начал изучать ruby, я решил реализовать бинарное дерево и некоторые из его основных операций (insert, delete, walk, и search), для того, что бы лучше вникнуть в язык. Бинарные деревья, это хорошее упражнение, что бы понять особенности языка, такие как: условные операторы, циклы, классы. В то же время, это возможность решить интересную задачу. Алгоритм бинарного дерева хорошо описан во многих книгах и в интернете.
Для усложнения задачи, я так же реализовал отрисовку бинарного дерева средствами html5 и Canvas. Это позволяет более наглядно понять работу бинарного дерева. Вы можете посмотреть демонстрацию на веб сайте.
Далее я кратко опишу реализацию основных методов построения бинарного дерева.
Читать дальше →

Равенство в Ruby

Время на прочтение3 мин
Количество просмотров18K
Для начинающих рубистов четыре вида проверки равенства в языке являются чем-то пугающим.
И это тот хваленый Ruby, который славится своей простотой и элегантностью. Давайте попробуем разобраться что к чему, и зачем понадобилось столько функций. Для проверки будем использовать следующие объекты.

string = "some string"
same_string = string
copy_string = "some string"

int = 7
same_int = int
copy_float = 7.0
new_int = 7

class TestClass
  def initialize(content)
    @content = content
  end
end

class SubTestClass < TestClass
  def initialize(content)
    super(content)
  end
end

test_obj = TestClass.new("something")
same_obj = test_obj
new_obj = TestClass.new("something")
sub_obj = SubTestClass.new("something")

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

Yukihiro Matsumoto теперь работает в Heroku

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


Сегодня, 13 июля, разработчик языка Ruby Yukihiro Matsumoto, присоединился к облачному стартапу Heroku (подразделению Salesforce). В этой статье matz отвечает на несколько вопросов, касающихся будущего Ruby.
Читать дальше →

Для изучающих Ruby

Время на прочтение1 мин
Количество просмотров2.7K
Недавно на github была создана организация — Habraruby(в ее состав пока входят 2 человека, надеюсь, что это число значительно вырастет). Изначально ей принадлежал один репозиторий с задачами с сайта acm.mipt.ru. Но в виду того, что решающих людей мало, а сами задачи нетривиальны, я решил открыть еще один репозиторий с задачами с сайта spoj.pl

Во-первых, в отличие от задач МФТИ(коих около 400, если я не ошибаюсь), на spoj более 9 тысяч задач. Не стоит, наверное говорить, что и уровень многих из них приемлем для начинающих. Правда, условия на английском, но думаю, что это не беда.

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

Репозиторий с задачами на Ruby

Время на прочтение2 мин
Количество просмотров8K
Недавно начал изучать Ruby. Несмотря на большое количество туториалов и мануалов, отсутствие официальной документации несколько замедляет процесс обучения.(Официальная документация все-таки существует — спасибо Kane). Но тем не менее, идея от этого не теряет ценности.

Чтобы получше освоить синтаксис языка, многие советуют решать задачи из спортивного программирования. Это позволяет набить руку в максимально кратчайший срок.
Нашелся отличный сайт с ejudge — acm.mipt.ru с интерпретатором Ruby. Но при решении задач(особенно на незнакомом языке), постоянно присутствует ощущение, что может быть это можно было сделать как-то иначе — легче, быстрее, удобнее.
Читать дальше →

RVM — подробно

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

RVM — Ruby Version Manager
Программа для управления версиями Ruby.

Как быть если один проект использует Ruby 1.8.7, а другой 1.9.2? А что если при этом у вас 2 проекта под версией 1.9.2, но с разными наборами гемов? Хотелось бы вам иметь отдельные наборы gem's для каждого проекта?

Основные задачи:
1. Физическое разделение версий ruby и наборов гемсетов
2. Возможность иметь несколько версий ruby и переключаться между ними
3. Возможность для каждой версии ruby иметь несколько gemsets — наборов gem's и переключаться между ними

Под катом будут описаны:
1. Установка RVM
2. Работа с разными версиями Ruby
3. Работа с gemsets
4. Задание окружения под отдельный проект с помощью .rvmrc
5. Команды RVM которые могут оказаться полезными
6. Шпаргалка по основным командам RVM

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

Видео с конференции RailsClub'Moscow (30 апреля 2011г.)

Время на прочтение1 мин
Количество просмотров1.2K
1. Галинский Дмитрий «Генерация PDF и ODF»
В лекции идёт речь об инструментах для генерации отчётов, счетов и форм для печати в формате PDF. Лектор рассматривает преимущества и недостатки разных инструментов, приводит примеры их использования.

2. Руденко Андрей «Эффективное %s с ZMQ»
ZMQ — что, как и зачем оно вам надо.

3. Моисеев Сергей «Пакетная обработка в RoR»
Пакетная обработка, на примере Сервиса по массовой обработке большого количества книг. Книги из Pdf в SWF, с поддержкой выделения и копирования из полученных книг текста. Очень часто книги были в виде картинок, вставленных в pdf, только для того чтобы соблюсти последовательность страниц.
Система из программ print2flash (для печати нескольких книг сразу). Всё под win окружением.

4. Бараблин Михаил «Rvm и наши серверы»
Как работать с Ruby, gem и не болеть.

5. Лазурейкис Павел «Интеграция RoR-приложений с социальными сетями»
Виджеты для Вконтакта, использование OmniAuth, Devise+OmniAuth

6. Карпунин Дмитрий «Front-end Rails-приложений»
Front-end Rails-приложений основанный на БЭМ (Блок, Элемент, Модификатор), семантическая вёрстка, IE6, Применение БЭМ на практике, Структура стилей.

Приятного просмотра.
Читать дальше →

История про ExecJS или как выполнять джаваскрипт в руби

Время на прочтение4 мин
Количество просмотров3.8K
Допустим, вы пишите крутой вебдванольный проект на рельсах. У вас есть друг Петя — сильный программист на джаваскрипте. Поскольку Петя пишет много и задорно, он решил облегчить себе жизнь и придумал новый язык с красивым и простым синтаксисом, который будет транслироваться в джаваскрипт.
Еще Петя — большой любитель зеленого чая, поэтому назвал он свой новый язык GreenTeaScript.

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

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

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

Теперь начинается самое интересное.
Читать дальше →

RubyGems — подробно

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

Для начала определимся с понятиями:
RubyGems — фрэймворк для установки и запаковки Ruby библиотек и приложений.
gem — пакет(файл) с библиотекой или приложением. Имеет стандартизированный вид и расположен в хранилище в сети.
gem command tool — RubyGems предоставляет утилиту «gem» для работы с gem пакетами из командной строки. Она интегрирована с Ruby и позволяет получать доступ к установленным gem'ам как к библиотекам.

В чем же предназначение RubyGems?

До того как появилась RubyGems, для установки новой библиотеки нужно было найти, скачать её, попытаться установить, часто лишь для того, чтобы убедиться в отсутствии нужных зависимостей. Если же библиотека запакована с помощью RubyGems, достаточно попросить RubyGems сделать это за нас и получить установленную, интегрированную библиотеку со всеми нужными зависимостями. В дополнение ко всему утилита gem — платформонезависима, неважно какую ОС вы используете, везде механизм установки библиотек и приложений будет одинаков. Здорово, правда?

Под катом будут описаны:
1) Поиск, получение деталей, установка gem's
2) Доступ документации по установленному gem
3) Использование установленных gem's
4) Работа с версиями gem's
5) Создание собственных gem's

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

Большие файлы и Sinatra

Время на прочтение2 мин
Количество просмотров2K
Недавно столкнулся с интересной проблемой, когда попытка отдать большой файл через Sinatra::Helpers.send_file приводила к отжиранию всей оперативной памяти (типичный размер файла — 14Gb).

Исследование показало, что Sinatra сама читает и отдает файл кусками по 512 байт, но web-сервер thin (а также WEBrick) буферизует вывод в оперативной памяти на своем уровне, что и приводит к таким печальным последствиям.

Для решения проблемы достаточно оказалось перейти на web-сервер Rainbows (web-сервер, базирующийся на коде unicorn, но предназначенный для работы без проксирования, для медленных клиентов и/или сервисов). Но при отдаче больших файлов процесс кушал порядка 30% CPU на одном ядре.

Rainbows позволяет оптимизировать отдачу файлов, используя, к примеру, гем sendfile, который предоставляет соответствующие API операционной системы. Но для этого необходимо, чтобы отдача файла шла через Rack::File API.

В текущей master-ветке Sinatra метод send_file переписали, используя API Rack::File, поэтому мы можем просто бэкпортировать соответствующий функционал в существующие версии гема Sinatra:
Читать дальше →

Используйте бандлер вместо практики rvm gemset per project

Время на прочтение1 мин
Количество просмотров7.6K
Наша команда долгое время использовала известную практику rvm gemset per project. Однако, после работы с пакетным менеджером nodejs мы поняли, что гораздо удобнее складывать зависимости в папку проекта (дефолт для нодовского пакетного менеджера).

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

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

Управляем версиями с помощью Bundler

Время на прочтение4 мин
Количество просмотров16K
Недавно вышло обновление rake с версии 0.8.7 до версии 0.9.0, которое наделало много шума в сообществе и в очередной раз выявило проблему управления версиями. Мне бы хотелось прояснить ситуацию и снова проговорить основные моменты, которые я уже упоминал во времена релиза Bundler 1.0. Вначале я расскажу о простых правилах работы, а затем слегка углублюсь в детали.
Читать дальше →

Ускоряем загрузку рельс

Время на прочтение2 мин
Количество просмотров1.7K
Несмотря на заголовок, речь пойдет скорее о руби, чем о рельсах. Поэтому я решил разместить этот перевод в блоге руби.

Последние релизы MRI Ruby показывают значительное замедление при подключении файлов.

Например, наше средненькое рельсовое приложение при загрузке делает require около 2200 раз — это где-то совсем в правой части графика. Совсем никуда не годится. На 1.9.2 приложение стартует за 20 секунд, а на 1.9.3 уже 46. Слишком медленно!
Читать дальше →

Kazan.rb #1 — встреча Ruby & Rails программистов в Казани 21 мая в It-park

Время на прочтение1 мин
Количество просмотров2.1K
Всем привет,

По аналогии с Piter.rb & Kiev.rb мы планируем проводить конференции на тему Ruby & Rails в Казани.
Первую встреча пройдет 21 мая в 12:00 в It-Park на ул. Петербургская, 52, в зале для пресс конференций.

На ней будут представлены доклады в формате 10 слайдов, 20 минут рассказа и 10 минут обсуждения.

Планируемые темы:
  • Cucumber (Leonid Dinershtein)
  • Git flow (Timur Vafin)
  • JS for Rails developers (Timur Vafin)
  • Rails Hardware (Yaroslav Dmitriev)
  • Simple restful application (Vladimir Mikhailov)
  • Mountable apps (Ruslan Gatiyatov)
Читать дальше →

Вышел Spree 0.60.0

Время на прочтение1 мин
Количество просмотров2K
Релиз Spree 0.60.0 официально выпущен. Основной целью этого релиза является упразднение использования resource_controller. Это было долгое путешествие с этой библиотекой, но на данный момент она уже устарела. Особая благодарность Neeraj Singh, Roman Smirnov и Brian Quinn за их напряженную работу по этому вопросу.

Мы приложили существенные усилия, чтобы сохранить большую часть функциональности resource_controller, которая использовалась в коде Spree, реализовав её более подходящим для «Rails Way» способом (с использованием наследования и т.д.). Однако в некоторых случаях, мы не смогли сохранить 100% совместимость с предыдущими версиями Spree. Это может повлиять на некоторые существующие расширения, а также на магазины, которые полагаются на эту функциональность. Кроме того новый подход использует respond_with вместо respond_to. Более подробно всё это описано в руководстве по настройке и в примечаниях к релизу 0.60.0.

Также Вы можете посмотреть на Github полный список изменений, вошедших в релиз 0.60.0.

От переводчика:
Также напоминаю о существовании Synergy — сборки Spree, адаптированной специально для России. На данный момент сборка поддерживает Spree 0.50.2 и 0.60.0. Более подробно я рассказал о ней в статье «Synergy — платформа для создания интернет-магазинов»

[Перевод] VMware CloudFoundry: PaaS на Ruby

Время на прочтение3 мин
Количество просмотров2.3K
image Platform as a Service (PaaS) — это не самая тривиальная вещь для создания, развертывания и поддержки: для начала, приходится проделать немалую работу для управления всеми сервисами изнутри, затем предстоит продумать и реализовать хороший интерфейс, и, в конце-концов, сервис нужно продать и умело его поддерживать. Не удивительно, что инвестиции для создания таких сервисов, могут позволить себе только несколько зажиточных игроков на IT-рынке.

Поэтому было вдвойне интересно наблюдать, как VMware разворачивают сервис CloudFoundry, да еще и с открытым кодом (честно, вот github аккаунт)! Полноценная PaaS, которую они так же предлагают использовать как хостинг, доступна так же каждому, для запуска в собственной компании или датацентре — теперь вы можете запустить «мини Heroku», или «облако EngineYard» на собственных серверах! Но в сторону маркетинг, гораздо интереснее взглянуть под капот этого проекта, ведь он полностью организован на Ruby.

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

Конкурс для разработчиков Rails-ninja

Время на прочтение1 мин
Количество просмотров617
Look At Me это не только популярный сайт о современной культуре, но и крупнейший Ruby on Rails проект в Восточной Европе.
В преддверии конференции Rails Club, которая состоится 30 апреля, Look At Me совместно с сообществом разработчиков RailsClub запускает конкурс Rails-ninja.

Задача конкурса: реализовать механизм генерации JavaScript-валидации HTML-форм, путем отражения декларативной валидации в RubyOnRails методами validates_*_of(*args).

Требования:
  • Приложение должно быть написано с использованием платформы RubyOnRails.
  • Все сторонние компоненты должны быть свободными для коммерческого использования (иными словами — должны быть OpenSource).
  • Репозиторий с исходным кодом проекта должен находится на сервисе github.com.
  • Для демонстрации проект должен быть размещен в сети Интернет участником самостоятельно.
  • Проект должен содержать краткое описание алгоритма реализации.

Работы принимаются до полудня 29 апреля по московскому времени!
Подведение итогов 30 апреля, на конференции RailsClub’Moscow. Побeдитель получит iPad64.

Подробнее о конкурсе.

Ruby на РИТ++

Время на прочтение2 мин
Количество просмотров1.1K
Как вы уже наверняка знаете, 25-26 числа в Москве пройдет главная конференция веб-разработчиков России — РИТ++. На конференции будет освещаться и Ruby, не пропустите перечисленные ниже доклады :-)

Будет доклад, касающийся Ruby, а также мастер-класс, посвященный front-end разработке с использованием Ruby фишек (Haml, Sass, Compass).
Читать дальше →

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