Skip to main content

Posts

Showing posts with the label ruby

Go, Ruby, C++, etc

Совсем разучился писать что-то кроме спецификаций :) Go Попробовал Golang в продакшене (в прошлом году). Поначалу было непривычно пока не грокнул golang way (ну или я так думаю что грокнул). Итого несколько sidekiq воркеров запускающихся по расписанию которые генерили репорты для HP ArcSight и неслабо нагружали сервер были заменены на streaming report generaion service написанный на Golang который работает 24/7/365 и потребляет ресурсов в десятки раз меньше. Помимо этого умеет обрабатывать ситуации вроде дисконнекта RabbitMQ или postgres. Выводы :

Kharkiv Ruby Meetup, April 13th

Друзья из Ainstainer устраивают Ruby Drink-up . Фотки с предыдущих встреч можно посмотреть в Facebook . Где: Харьков, Клуб «Пинтагон» , ул. Данилевского, 26 («Слободская усадьба») Когда: 13 апреля 2013 (суббота), начало в 12:00 Пропуск: Вход бесплатный, по предварительной регистрации здесь .  Приходите, я с большой вероятностью тоже там буду :)

Ruby Concurrency Notes

Ниже мои заметки (именно заметки, без претензии на пост) по тематике обозначенной выше - тезисно. Похоже все согласны с тем что хорошие примеры concurency done right - это продукты вроде Erlang и Scala. Версии Ruby и поддержка concurrency: JRuby 1.6+ (true concurrency via JVM) Ruby MRI 1.9.3 (native threads, GIL, примитивы - Thread, Fiber, Actor, GIL из-за This decision maybe makes us happy because we can run most of the extensions written in C without any modifications  - т.е. видимо эти C-extensions are not thread safe. Обещали Multi-VM в YARV для победы над GIL) Rubinius 2.0+ (true concurrency, no GIL, fine grained locks, примитивы - те же что и у MRI 1.9.3) Concurrency models: Thread - тут все более менее понятно Fiber  - cooperative scheduling, если один фибер закончил работу передает управление следующему Reactor pattern - IOC, сложнее для понимания, представлен в виде библиотек  http://rubyeventmachine.com/  ( libevent ),  https://githu...

Getting Ruby Array.uniq! work for array of objects

Иногда возникает задача удалить дубликаты из массива объектов. В Ruby для решения этой задачи в классе Array есть методы uniq и uniq!. Отличие первого от второго состоит лишь в том, что второй производит in place модификацию массива, а первый возвращает результат в виде массива. Для того, чтобы эти методы работали для custom классов необходимо чтобы у классов были определены методы hash и eql?. class TestClass attr_reader :a, :b, :c #Ctor def initialize(a,b,c) @a, @b, @c = a, b, c end def hash "#@a #@b #@c".hash end def ==(p) @a ==p.a and @b == p.b and @c == p.c end def eql?(p) self == p end def to_s "#@a,#@b,#@c" end end a = [] a << TestClass.new(1,2,3) a << TestClass.new(1,2,3) a << TestClass.new(3,2,1) a << TestClass.new(3,2,3) a << TestClass.new(2,3,3) a.uniq! a.each do |elem| p elem.to_s end Т.е. одного eql? не достаточно, как это указано в PickAxe а нужен еще и hash method который должен возвращать цело...