Сила Ruby в данном случае в блоках и в метапрограммировании в целом.
Вот так выглядит DSL Chef:
package "erlang"
deploy "/home/ourcoolproject" do
repository "https://git.example.com/repo..git"
revision "production"
user "site"
enable_submodules false
migrate true
migration_command "rake db:migrate"
# Giving a string for environment sets RAILS_ENV, MERB_ENV, RACK_ENV
environment "production"
action :deploy
restart_command "touch tmp/restart.txt"
before_migrate do
# release_path is the path to the timestamp dir
# for the current release
current_release = release_path
# Create a local variable for the node so we'll have access to
# the attributes
deploy_node = node
# A local variable with the deploy resource.
deploy_resource = new_resource
python do
cwd current_release
user "myappuser"
code<<-PYCODE
# Woah, callbacks in python!
# ...
# current_release, deploy_node, and deploy_resource are all available
# within the deploy hook now.
PYCODE
end
end
end
А вот так DSL RSpec:
describe Git do
COMMIT = "45435ffdf5"
describe :describe do
mock(Git).shell("git describe #{COMMIT}") { "cool!"}
Git.describe(COMMIT).should be "cool!"
end
end
От себя могу порекомендовать сайты:
1) www.careercup.com/page — Можно фильтровать вопросы по позиции и компаниями. Выглядит страшновато, но много полезного.
3) Книга от авторов первого сайта — «Cracking the Coding Interview: 150 Programming Questions and Solutions». Ставлю ее рядом с Programming Interviews Exposed.
4) www.glassdoor.com/ — кандидаты выкладывают свои впечатления и вопросы на собеседованиях. Менее техническое чем 1 и 2.
У Джона Роббинса в книжке Debugging Applications for Microsoft Windows несколько глав посвящены WinDBG. Эту книжку кстати бесплатно раздавали некоторое время назад как часть «Боекомплекта разработчика». Так что, если хорошо поискать, можно найти pdf на русском (не распознанный, а оригинальный).
Ещё есть на CodeProject неплохой для старта WinDbg Tutorial. Но лучше конечно Джона Роббинса почитать.
ff.div(:id,«resultsList»).divs.each do |t|
next if (t.class_name != «module»)
name=t.h2(:class,'property-name').links[2].text
price=t.h3(:class,'price')
price=price.span(:class,'newprice') if price.span(:class,'newprice').exist?
puts "#{name} -> #{price.text}"
end
if (ff.link(:class,'gwt-Anchor next').exist?)
ff.link(:class,'gwt-Anchor next').click
else
do_f=false
end
jlouisramblings.blogspot.com/2012/08/getting-25-megalines-of-code-to-behave.html
тут сборник рекомендаций написания C кода для NASA
lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Вот так выглядит DSL Chef:
А вот так DSL RSpec:
Частично объясняет devopsanywhere.blogspot.com/2011/09/how-ruby-is-beating-python-in-battle.html
1) www.careercup.com/page — Можно фильтровать вопросы по позиции и компаниями. Выглядит страшновато, но много полезного.
2) www.geeksforgeeks.org/ — задачки разбиты по категориям, так же есть список обновляющихся вопросов на собеседованиях, как и пункт 1 — www.geeksforgeeks.org/forum/view/company-interview
3) Книга от авторов первого сайта — «Cracking the Coding Interview: 150 Programming Questions and Solutions». Ставлю ее рядом с Programming Interviews Exposed.
4) www.glassdoor.com/ — кандидаты выкладывают свои впечатления и вопросы на собеседованиях. Менее техническое чем 1 и 2.
Ещё есть на CodeProject неплохой для старта WinDbg Tutorial. Но лучше конечно Джона Роббинса почитать.
railsforzombies.org/
rubymonk.com/
конечно, он будет тормозить, попробуйте такое
require «rubygems»
require «firewatir»
ff = FireWatir::Firefox.new
ff.goto(«www.travelocity.com/Hotels»)
t_now = Time.now
t_tomorrow=t_now + (60 * 60 * 24)
ff.text_field(:id,«HO_to»).set(«New York, NY, USA»)
ff.text_field(:id,«HO_fromdate»).set(t_now.strftime("%m/%d/%Y"))
ff.text_field(:id,«HO_todate»).set(t_tomorrow.strftime("%m/%d/%Y"))
ff.form(:name,«formHO»).submit
do_f=true
while do_f do
ff.wait_until{ff.div(:id,«resultsList»).div(:class,«module»).exists?}
puts «page: #{ff.div(:id,'resultcontrol-top').strong(:text,/\d+/).text}»
ff.div(:id,«resultsList»).divs.each do |t|
next if (t.class_name != «module»)
name=t.h2(:class,'property-name').links[2].text
price=t.h3(:class,'price')
price=price.span(:class,'newprice') if price.span(:class,'newprice').exist?
puts "#{name} -> #{price.text}"
end
if (ff.link(:class,'gwt-Anchor next').exist?)
ff.link(:class,'gwt-Anchor next').click
else
do_f=false
end
end