Не так давно решил таки ознакомиться (никак не мигрировать, боже упаси) на представленный в MacOS X 10.6 GCD, почитал их введение в это дело (ровно одна строчка кода, всё остальное - маркетоидный буллщит), но одна фраза заставила на себя обратить внимание - основной компонент этого GCD - блоки - что-то подозрительно напоминали. И добрался до расшаренной коллегой статьи про реализацию блоков, и понял - ну точно, это ж самые что ни на есть closures, которым скоро 50 лет, их наконец-то добавят и в эти языки... Однако, всё сильнее и сильнее этот лагерь офункционаливается.
Со статьёй крайне рекомендую ознакомиться, а потом по ссылкам в конце. Особенно по первой, там чуть ли не дословно цитируют ruby stdlib и часть парадигм RoR и вообще рубишных фреймворков.
Однако в руби их использование гораздо более синтаксически-слаще...
24 октября 2009
C/C++/Obj-C closures
Ярлыки:
c/objc/c++,
devel,
ruby
на
22:22
6
коммент.
12 октября 2009
Cache money warm-up
С недавнего времени использую в своём проекте Cache money. Вещь хорошая, но, конечно же, есть и недостатки, впрочем, это предмет для форка и багфиксов. Стоит также отметить, что решение может уже и существует среди форков, коих много.
Если у вас всё в порядке с памятью (RAM, I mean), то может возникнуть желание принудительно заполнить кеш по всем индексам всех моделей. Сниппет извлечён из моего Rakefile'а и адаптирован для использования в рельсах. Предупреждение: не тестировалось именно в рельсах и против составных индексов (хотя и предусматривает их использование).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace :rails do | |
desc "Fills Cache money's caches for all indexes of all models - rails version" | |
task :warmup_cache => :env do | |
logger = Logger.new(STDOUT) | |
ActiveRecord::Base.logger = logger | |
Dir.glob(RAILS_ROOT + '/app/models/*.rb').each { |file| require file } | |
models = Object.subclasses_of(ActiveRecord::Base) | |
models.each do |klass| | |
table_name = klass.name.to_s.tableize | |
klass.cache_config.indices.each do |index| | |
logger.info "Warming #{klass.name} for #{index.attributes} index" | |
values = ActiveRecord::Base.connection.select_values("select #{index.attributes * ', '} from `#{table_name}`") | |
values.reject!{|val| val.kind_of?(Array) ? val.any?{|subval| subval.nil?} : val.nil? } | |
values.each {|val| klass.send(:"find_by_#{index.attributes * '_and_'}", *val)} | |
end | |
end | |
end | |
end |
на
20:30
0
коммент.
Подписаться на:
Сообщения (Atom)