Загрузка...

Ruby & Rails: веб-разработка с удовольствием

Ruby on Rails — фреймворк для создания веб-приложений. Является открытым программным обеспечением (лицензия MIT). Здесь мы обсуждаем новости RoR, делимся учебными материалами и интересными находками С RoR даже сложные веб-приложения могут быть написаны за считанные дни. Это действительно разработка с удовольствием!

Metaprogramming

     

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

  • придумывают эффективные распределённые хранилища данных
    • забавно, что идеи, которые пришли из функционального программирования (ФП), стали основой для архитектуры хранилищ данных; у новичков, изучающих ФП, может сложится мнение, что хранение данных неестественно для ФП, так как там нет состояния, но это мнение ошибочно; ФП является источником множества полезных идей для структур данных
  • масштабируют поточные преобразования данных
  • решают повседневные задачи обработки логов и вычисления разнообразных статистических величин

На язык Ruby "map and reduсe" переводится как "map and inject", но, конечно, за MapReduce стоит больше, чем просто комбинирование двух методов.

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


Читать полностью

Начитавшись как-то на ночь про всякие хаскеллы и лиспы, решил немного "офункционалить" руби. Первое, в чем я разобрался, было "pattern-matching" определение методов. Вот об этом и хочу рассказать.


Читать полностью

Этот пост также отчасти навеян статьей Томаса Дейва про pipelines. Если бы мне пришло в голову делать в ruby аналог команды pipe "|" для командной строки, то я бы лучше добавил метод to_lazy для Enumerables, который возвращал бы LazyEnumerable. Есть по крайней мере три концептуально разных способа реализации LazyEnumerable - 1) с помощью вложенных лямбд и 2) с помощью alias_method_chain 3)  с помощью Fiber.


Читать полностью

В этом уроке рассматривается метод serialize из Ruby on Rails, который позволяет  добиться храния в базе данных в определённом столбце определённой таблицы почти произвольного объекта Ruby. Но соль урока не в методе serialize, а в изучении способа управления тем, как "дампятся" и "ресторятся" отдельные части сериализуемого объекта, а также в повторном обращении Вашего внимания к задаче контекстно-зависимого изменения пространства имен.


Читать полностью

Рассмотрим сегодня простую вещь: метод postprocess_value, который позволяет указывать лямбду для постпроцессинга результата, возвращаемого некоторым методом.


Читать полностью

Я веду семинар по RoR и метапрограммированию в МФТИ.

Можно прийти послушать или выступить, предворительно согласовав со мной тему.

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

Со временем можно сделать список и входить по этому списку. Часто пропускают по паспорту с записью у охранника.

МФТИ. г. Долгопрудный (электричкой от Савеловского до ст. Новодачной).

Спросить у ближайшего студента как пройти до КПМ (Корпуса Прикладной Математики).

КПМ, аудитория 702. По пятницам, в 18:30

 

Колбэки не нужны, потому что есть блоки и метапрограммирование. Но давайте по порядку.

Томас Дейв написал статью про то, как используя fibers, можно делать pipelines из обычных итераторов. Но последовательное соединение труб в одну - это классика и халява, а вот можно ли поток данных (итератор) расщеплять на несколько так, чтобы параллельно работало несколько преобразователей/фильтров потока? Расщеплять конечно можно, дописав класс Pipeline. А можно ли это сделать, не модифицируя код этих преобразователей/фильтров, и обеспечить при этом их параллельную работу с одним и тем же потоком данных? Metaprogramming + fibers do the job!


Читать полностью

В языке Ruby активно используются примеси.

Примеси - это модули, которые include'ятся в другие модули или классы. В результате выполнения метода include все методы модуля как бы становятся instance-методами класса (модуля), в который его заинклудили.


Читать полностью

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


Читать полностью

В предыдущем посте мы затронули важнейшую концепцию — замыкание (closure).
Суть этой концепции в том, что в любой блок как бы заключается «весь окружающий мир» так, как он виден в контексте, где блок создается. Правильнее сказать, что в блок заключается не весь окружающий мир (пространство имён), а фиксируется точка зрения на окружающий мир (пространство имён).


Читать полностью
Ближайшие события
май 2018
апрель 2018
март 2018
Пн
Вт
Ср
Чт
Пт
Сб
Вс
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6