Обновить
2.1

Ruby *

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

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

RubyMonk — уроки Руби от Монаха

Время на прочтение1 мин
Охват и читатели4.7K
rubymonk

Вышла альфа версия онлайн уроков по Руби — RubyMonk. Пока что это 46 заданий, которые охватывают работу со строками, массивами и циклами. Сделано все красиво и удобно, работает в стиле подобного сервиса Rails For Zombies
Все бесплатно, зайти можно через аккаунт на Твиттере или ГитХабе: rubymonk.com

Ruby для детишек и не только

Время на прочтение2 мин
Охват и читатели24K
Ruby позиционирует себя как «programmer's best friend», как великолепный язык программирования, как замечательный скриптовый язык, как отличное средство для разработки веб приложений. Всякий знает, что Ruby — это очень приятный язык с очень активным и дружелюбным сообществом. Однако не все знаю, что это сообщество так дружелюбно, что позаботилось не только о коллегах — программистах разрабатывая множество полезных gem'ов, но и о детях разработав для них несколько очень интересных и полезных инструментов.

Если вы программист и у вас есть ребенок которому вы желеаете передать свой интерес к программированию, то эта небольшая статья — обзор для вас.
Читать дальше →

Пишем свой первый gem

Время на прочтение2 мин
Охват и читатели9.8K
Хочу рассказать Вам свой опыт написания gem. Данная идея возникала у меня давно, но до реализации все никак не доходила. Все упиралась в банальную лень и отсутствие достаточной мотивации. Однако неделю назад мне достался проект, связанный с сервером рассылки писем.

Выбираем генератор

На первом этапе нужно было определиться с тем, как будет создаваться библиотека: с нуля или с помощью какого-то генератора. Для первого раза, на мой взгляд, писать с нуля будет достаточно сложно и долго, поэтому рассмотрим известные генераторы. Небольшой поиск показал такие gems: hoe, newgem, bundler. Лично мне понравились два – newgem и bundler. Первый представляет полный комплект шаблонов, охватывающий множество случаев. Но я выбрал bundler за его простоту, минимальный набор сгенерированных файлов и набор rake tasks для создания пакета и его дальнейшей публикации.

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

Как присоединить свой Ruby-проект к Travis и приготовить Мартини за 15 минут

Время на прочтение3 мин
Охват и читатели2.7K
image
Налицо тенденция, что каждый проект на Ruby присоединяется к Travis. Travis — очень простая, опенсурсная система непрерывной интеграции. Нам обычно лень подключать все свои проекты к автоматическому тестированию билдов. Travis позволяет сделать это за считанные минуты.

Это пошаговая инструкция, как присоединить свой проект к Travis и приготовить вкуснейший коктейль с Мартини примерно за 15 минут. Следует заметить, что на приготовление Мартини уйдет минут пять, так что часть про Travis займет 10 минут вашей жизни.

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

Learn Ruby The Hard Way

Время на прочтение1 мин
Охват и читатели6.7K
Роберт Соберс (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 мин
Охват и читатели85K
Когда я начал изучать ruby, я решил реализовать бинарное дерево и некоторые из его основных операций (insert, delete, walk, и search), для того, что бы лучше вникнуть в язык. Бинарные деревья, это хорошее упражнение, что бы понять особенности языка, такие как: условные операторы, циклы, классы. В то же время, это возможность решить интересную задачу. Алгоритм бинарного дерева хорошо описан во многих книгах и в интернете.
Для усложнения задачи, я так же реализовал отрисовку бинарного дерева средствами html5 и Canvas. Это позволяет более наглядно понять работу бинарного дерева. Вы можете посмотреть демонстрацию на веб сайте.
Далее я кратко опишу реализацию основных методов построения бинарного дерева.
Читать дальше →

Равенство в Ruby

Время на прочтение3 мин
Охват и читатели19K
Для начинающих рубистов четыре вида проверки равенства в языке являются чем-то пугающим.
И это тот хваленый 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 мин
Охват и читатели8.1K
Недавно начал изучать Ruby. Несмотря на большое количество туториалов и мануалов, отсутствие официальной документации несколько замедляет процесс обучения.(Официальная документация все-таки существует — спасибо Kane). Но тем не менее, идея от этого не теряет ценности.

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

RVM — подробно

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

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.3K
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.9K
Допустим, вы пишите крутой вебдванольный проект на рельсах. У вас есть друг Петя — сильный программист на джаваскрипте. Поскольку Петя пишет много и задорно, он решил облегчить себе жизнь и придумал новый язык с красивым и простым синтаксисом, который будет транслироваться в джаваскрипт.
Еще Петя — большой любитель зеленого чая, поэтому назвал он свой новый язык GreenTeaScript.

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

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

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

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

RubyGems — подробно

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

Для начала определимся с понятиями:
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 мин
Охват и читатели2.1K
Недавно столкнулся с интересной проблемой, когда попытка отдать большой файл через 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.7K
Наша команда долгое время использовала известную практику rvm gemset per project. Однако, после работы с пакетным менеджером nodejs мы поняли, что гораздо удобнее складывать зависимости в папку проекта (дефолт для нодовского пакетного менеджера).

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

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

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

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

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

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

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

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

Время на прочтение1 мин
Охват и читатели2.2K
Всем привет,

По аналогии с 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)
Читать дальше →

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