Загрузка...

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).
Суть этой концепции в том, что в любой блок как бы заключается «весь окружающий мир» так, как он виден в контексте, где блок создается. Правильнее сказать, что в блок заключается не весь окружающий мир (пространство имён), а фиксируется точка зрения на окружающий мир (пространство имён).


Читать полностью
Ближайшие события
декабрь 2017
ноябрь 2017
октябрь 2017
Пн
Вт
Ср
Чт
Пт
Сб
Вс
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