Rubyistéã®å¤ãã§ã¹ã§ããã¨ããã®RubyKaigiãä»å¹´ãéå¬ãããçæã®ç·´é¦¬ã大ãã«çãä¸ããã¾ãããä»åãæå¾ã®éå¬ã¨ã®ãã¨ã§ãé¢ä¿è
åä½ã¯ç´ æ´ãããä¼è°ãæ¬å½ã«ã©ãããããã¨ããããã¾ããã
ãã¦ãä»å¹´ã®RubyKaigi2011ã§ã®åã»ãã·ã§ã³ã§ç´¹ä»ãããgemã®ãã¡ãæ°ã«ãªã£ããã®ãããã¯ã¢ãããã¦ã¿ã¾ããã
1. fakeweb
fakewebã¯ãæå®ããURLã®HTTPã¬ã¹ãã³ã¹ãå½è£
ããããã¹ãç¨ã®ã©ã¤ãã©ãªãå¤é¨ãµã¼ãã¹ã¨é£æºããããã°ã©ã ã®ãã¹ããæ¸ãã«ã¯ã¨ã¦ã便å©ã§ããã
Engine Yardã®Andy Delcambreæ°ã«ãããToggleable Mocks and Testing Strategies in a Service Oriented Architectureãã¨ããçºè¡¨ã§ç´¹ä»ããã¾ããã
以ä¸ããµã³ãã«ã³ã¼ãã§ããï¼READMEããï¼
FakeWeb.register_uri(:get, "http://example.com/test1", :body => "Hello World!") Net::HTTP.get(URI.parse("http://example.com/test1")) => "Hello World!" Net::HTTP.get(URI.parse("http://example.com/test2")) => FakeWeb is bypassed and the response from a real request is returned
åè
追è¨ï¼2011/07/19ï¼
id:secondlife æ°ã«ããã°ãä»ã¯fakewebããwebmockã®æ¹ãã¤ã±ã¦ãã¨ã®ãã¨ã§ãã
2. artifice
artificeããHTTPã¬ã¹ãã³ã¹ãå½è£ ããããã¹ãç¨ã®ã©ã¤ãã©ãªã§ããä¸è¨ã¨åãçºè¡¨ã®ä¸ã§ç´¹ä»ããã¾ãããfakewebã¯å½ç©ã®Net::HTTPã®ã¬ã¹ãã³ã¹ãªãã¸ã§ã¯ããçæããã ããªã®ã§éä¿¡ã¯çºçããªãã®ã«å¯¾ããartificeã¯ãrackã§Webãµã¼ããç«ã¦ã¦éä¿¡ãè¡ãã¾ããfakewebã§ã¯å½è£ 度ãç©è¶³ããªãæ¹ã«ãªã¹ã¹ã¡ã§ããã
3. showoff
showoffã¯ãRubyKaigiã§æµ·å¤å¢ã®ã¹ãã¼ã«ã¼ã®æ¹ã ã使ã£ã¦ããruby製ã®ãã¬ã¼ã³ã©ã¤ãã©ãªã§ããç¹å¾´ã¨ãã¦ã¯ä»¥ä¸ã®ã¨ããã§ãã
- ã¹ã©ã¤ãã¯markdownã§è¨è¿°
- Keynote風ã®ãªã·ã£ã¬ãªç»é¢ãçæããã
- Sinatraã§ã§ãã¦ãã
- ã·ã³ã¿ãã¯ã¹ãã¤ã©ã¤ããã§ãã
- ãã©ã³ã¸ã·ã§ã³ï¼ãã¼ã¸åãæ¿ãã®ã¢ãã¡ã¼ã·ã§ã³ï¼ã«å¯¾å¿
- JSãRubyããã¬ã¼ã³ä¸ã«å®è¡ããå®è¡çµæãç»é¢ã«åºãã
æ¥æ¬ã§ã¯ruby製ã®ãã¬ã¼ã³ã©ã¤ãã©ãªã¨ããã°rabbitãæåã§ãããRubyKaigi2011ã§ã¯æµ·å¤ã®ã¹ãã¼ã«ã¼ã®æ¹ãããã£ã¦showoffã使ã£ã¦ããã®ã§ãããããã¯æ¥æ¬ã®Rubyçéã§ããã®showoffãæµè¡ãããããã¾ããã
4. drip
dripã¯ãdRubyã§ã®åæ£å¦çã§ãããã»ã¹å士ã§ãªãã¸ã§ã¯ããããã¨ãããããã®æ©æ§ã§ããéä¸ããè´è¬ãããã詳細ã¾ã§çè§£ã§ãã¾ããã§ããããè¤éãªä¾åé¢ä¿ãæã¤ãã¼ã¿ããã¥ã¼ã¤ã³ã°ããã¨ãã«æ´»èºãããã§ãã
dRubyã®ä½è
ã§ããé¢å°ä¿ããã®çºè¡¨ãDrip: Persistent tuple space and stream.ãã§ç´¹ä»ããã¾ããã
é¢ããã®dRubyæ¬ã®è±èªçãåºããããããã¡ãã§ã¯ãã®Dripãç´¹ä»ãããäºå®ã ããã§ãã
5. rails_best_practices
rails_best_practicesã¯ãããªãã®Ruby on Railsããã¸ã§ã¯ãã«ããã code smell ï¼ã³ã¼ãã®ä¸å¯©ãªèãï¼ã®ããç®æãããããã¯ããæ¸ããã»ããRailsçã«ã¯ã¼ã«ã ãï¼ãã¨ãããããªç®æãææããä¿®æ£æ¹æ³ãææ¡ãã¦ãããã©ã¤ãã©ãªã§ããææããããã©ã¯ãã£ã¹ã¯ãååã®ã¦ã§ããµã¤ã Rails Best Practices | rails best practices list ã§æç¥¨ã®å¤ããã®ãæ¡ç¨ããã¦ãã¾ãã
rails_best_practicesã¯Open Feintã®ã¨ã³ã¸ãã¢ã§ããRails Best Practicesã®ä½è
ã§ãããRichard Huangããã®çºè¡¨ãUse rails_best_practices to refactor your rails codes ã§ç´¹ä»ããã¾ããã
6. ruby_parser
ruby_parserã¯ä¸è¨ã®rails_best_practicesãrubyã³ã¼ãã®è§£æã«ä½¿ç¨ãã¦ããpure rubyå®è£
ã«ããrubyãã¼ãµã§ããruby_parserã¯ãrubyã³ã¼ããSå¼ã«å±éãã¾ãã
ä¾ã¨ãã¦ã次ã®ãããªRubyã³ã¼ãã¯ã
def conditional1(arg1) if arg1 == 0 then return 1 end return 0 end
以ä¸ã®ãããªSå¼ã«å±éããã¾ããï¼READMEããï¼
s(:defn, :conditional1, s(:args, :arg1), s(:scope, s(:block, s(:if, s(:call, s(:lvar, :arg1), :==, s(:arglist, s(:lit, 0))), s(:return, s(:lit, 1)), nil), s(:return, s(:lit, 0)))))
7. fabrication
fabricationã¯ãActiveRecordã®ãã¹ããã¼ã¿çæç¨ã©ã¤ãã©ãªã§ããMongoidãSequelã«ã対å¿ãã¦ãã¾ãã
railsã«ã¯çµã¿è¾¼ã¿ã§fixturesã¨ããæ©è½ãããã¾ããããããããã¦ãªãã®ã§ç machinist ã factory_girl ã使ãããã§ããããã® fabrication ã¯ããããããå¾çºã§ãããããè¨è¿°ããã£ãããã¦ããã®ãç¹å¾´ã§ãã
ä¾ãã°ã以ä¸ã®ãããªDSLã§ãã¹ããã¼ã¿ãè¨è¿°ã§ãã¾ããï¼公式サイトããï¼
Fabricator(:person) do name { Faker::Name.name } email { |person| "#{person.name.parameterize}@example.com" } end
fabricationã¯ãè«¸æ© æä»ããï¼@moroï¼ã®çºè¡¨ã5 years know-how of RSpec driven Rails app. development.ãã®ä¸ã§è§¦ãããã¾ããã
8. mustang
mustangã¯ãGoogleã®é«éJSã¨ã³ã¸ã³ãV8ããrubyãã使ãããã®ã©ããã¼ã§ãã
以ä¸ã®ããã«ãrubyããJSã³ã¼ããevalãããã¨ãã§ãã¾ããrubyãçµç±ãã¦ããã®ã§ä¸è¦é
ããã§ãããJSã¨ã³ã¸ã³ãV8ãªã®ã§ããç¨åº¦é«éã«å®è¡ã§ããã¨ã®ãã¨ã§ãã
require 'mustang' cxt = Mustang::Context.new cxt.eval("'Hello' + ' World!';") # => 'Hello World!' cxt.eval("var a=1;") cxt.eval("a+5;") # => 6 cxt[:puts] = method(:puts) cxt.eval("puts(a)") # displays "1" on the screen cxt[:a] # => 1
Chris Kowalikæ°ã®çºè¡¨Efficient JavaScript integration testing with Ruby and V8 engine.ã§ç´¹ä»ããã¾ãããmustangèªä½ããèªèº«ã®ä½ã§ãã
9. mike
mikeã¯ä¸è¨ã®mustang+V8ãå©ç¨ããé«éãªheadless browserï¼ç»é¢ã¯è¡¨ç¤ºãããªãããã©ã¦ã¶ã¨åæ§ã®æåãåç¾ã§ãããã©ã¦ã¶ï¼ã§ããmustangã®ä½è
Chris Kowalikæ°ãé«éãªJSãã¹ãã®ããã«éçºãããããã§ãã
mikeã¨ããååã¯Mike the headless chicken ï¼首なし鶏マイクï¼ããæ¥ã¦ããããã§ãï¼ããã°ã注æï¼ã
10. james
jamesã¯Max OSXã®é³å£°èªèã»é³å£°åææ©è½ãå©ç¨ãã人工ç¡è½çãªå¯¾è©±ãè¨è¿°ã§ããã©ã¤ãã©ãªã§ãã
# READMEãã James.dialog do hear 'What time is it?' => :time state :time do hear ['What time is it?', 'And now?'] => :time into { time = Time.now; "It is currently #{time.hour} #{time.min}." } exit {} # Optional, listed for completeness. end end
ãã®ãããªç°¡åãªè¨è¿°ã§ãmacã¨ã®é³å£°å¯¾è©±ã楽ããã¾ãã
jamesã¯ãFlorian Hankeæ°ã®LTãJames: An electronic butler that you can talk to.ãã§ç´¹ä»ããã¾ãããJamesããã¨ã®çµ¶å¦ãªæãåãã¯çç¬ã§ãããã
11. rios
riosã¯æ¨æºå
¥åºåã®éã®ãããã·ã§ããriosã使ãã¨ãæ¨æºå
¥åºåãããã¯ãã¦å¦çãæ¸ãã¾ããcursesãªã©ã使ã£ãã¤ã³ã¿ã©ã¯ãã£ãã§è¤éãªã³ãã³ãã©ã¤ã³ãã¼ã«ã®ãã¹ããæ¸ãããã«ä½æãããããã§ãã
å°å±±ç°æå²ããã®LTãRios Proxy - コマンドラインインタフェースのためのプロキシフレームワークãã§ç´¹ä»ããã¾ããã
以ä¸ãREADMEã®ãµã³ãã«ã³ã¼ãã§ãããvimãã¨ããæååãåºåãããåã«ãã***ãã«æ¸ãæãã¦ãã¾ãã¨ãããµã³ãã«ã§ãã
#!/usr/bin/env ruby require "rios/easy" on_output { |s| s.gsub(/vim/i) { |match| "***" } } listen
12. interactive-macruby
interactive-macrubyã¯ãMacRubyçã®irbã§ããMacRubyãªã®ã§ãã³ãã³ãã©ã¤ã³ããã¦ã£ã³ãã¦ãä½ããªã©ã®GUIæä½ãã§ãã¾ãã
Eloy Durán ãã㨠Vincent Isambart ããã«ããLTãA Hayabusa-speed talk about living under the MacRuby rainbowãã§ç´¹ä»ããã¾ããã
13. aviglitch
aviglitchã¯ãã°ãªããã¢ã¼ãã£ã¹ãã®å¤§å®¶ãucnvããã«ããåç»ã°ãªããã©ã¤ãã©ãªã§ããAVIãã©ã¼ãããã«åã£ã¦ã°ãªãããããã®ã§ãå®å
¨ã«ãã¤ããªãç ´å£ãããã¨ãã§ãã¦ä¾¿å©ã§ããucnvããã®çºè¡¨ãVisual Glitch, using Rubyãã§ç´¹ä»ããã¾ããã
以ä¸ã¯ãaviglitchã®ãµã¤ãï¼http://ucnv.github.com/aviglitch/ï¼ããå¼ç¨ãããµã³ãã«ã³ã¼ãã§ããããã¯ãã¼ãã¬ã¼ã ããã¹ã¦åé¤ãããã¨ã§åç»ãå£ãã°ãªããææ³ï¼datamoshã¨å¼ã°ããï¼ãå®ç¾ãã¦ãã¾ãã
require 'aviglitch' a = AviGlitch.open 'file.avi' # Rewrite this line for your file. a.glitch :keyframe do |f| # To touch key frames, pass the symbol :keyframe. nil # Returning nil in glitch method's yield block end # offers to remove the frame. a.output 'out.avi'
ãã®ã³ã¼ãã使ã£ã¦ã°ãªããããåç»ä¾ã¯ä»¥ä¸ã®ã¨ããã§ãã
åè
æå¾ã«
ããã§ç´¹ä»ãã¦ããã®ã¯åãè´è¬ããã»ãã·ã§ã³ããã®ã¿ãªã®ã§ãRubyKaigi2011ã§çºè¡¨ãããé åçãªgemã®ãã¡ã®ããä¸é¨ã ã¨æãã¾ããä»ã®çãããå¥ã®ã»ãã·ã§ã³ã§ç¥ã£ããã®ãªã©ããã°ãã²ããã°æ¸ãã¦ãã ããï¼