読者です 読者をやめる 読者になる 読者になる

最後のRubyKaigi 第1日目

アップした写真→https://picasaweb.google.com/ofukui/Rubykaigi2011716#

練馬は、生まれて初めての場所だ。良い天気で、汗まみれになるのを覚悟して、浜田山の事務所から善福寺川を越えて自転車で北上。9時15分に出て9時47分には到着。思ったより近い。
外観の撮影は禁止とか。笑って不合理には立ち向かう。入る前に撮って即instagrにアップしたのに後出しはいけません。

はじめに高橋会長の開会の辞 最後のRuby会議を最高のRuby会議にしようと檄。

確かに『区切り』は大切。竹が高く伸びてもしなやかで折れないのは、ただ伸びっぱなしでなく節があるから。

解説は既にgihyo.jp で素早いお仕事がなされているので、私は写真を撮った分をアップして補足です。写真ばかりとってメモしなかった(写真が即ちメモ)ので書くより見た方が早い。言葉は言葉で伝わるし、画像は画像で伝わる情報量は多い。

Aaronさんのプログラミング道場ネタは秀逸で、まことに才能を見事に披露して下さって盛り上がりました。
また Ruby/Railsのダブルコミッターとして開発体制(文化)の違いの指摘と提言は、なるほどと傾聴。


それにしてもレオさんの同時通訳 書き込みは誠に見事で素晴らしい。例年の貢献に感謝です。

No Ruby No Life そして No RubyKaigi No Life という表現が出てくるほど、Ruby会議で人生の1ページを彩った人々は多い。私自身もRubyKaigi2009の実行委員会に参加させてもらって、素晴らしい体験を刻みました。

壇上サプライズで、参加者の面前で結婚の申し込み&受諾 婚約成立というのは将に人生の一大事がこのRubyKaigiの場で行われた。流行るかもしれない。

舘野さんの講演も、秀逸。昨年も書きましたが、クックパッドはコンセプトの勝利で、益々発展してゆくでしょう。会社もエンジニアも輝いています。

Github Coreyさんの講演は、動画コンテンツが秀逸。今度 講演のコンテンツに動画がないと物足りないという流れが出来上がってゆくでしょう。そう思わせる時代のリーダーでした。

日立製作所 池原潔さんの「組込みシステムのための動的コンポーネント機構とVMの最適化」は、こつこつとリソースを切り詰める試みで、さすが日立さんというところです。写真メモはしっかり撮ったつもりです。

福岡CSKの岡部さんとまつもとゆきひろさんの「軽量Ruby」は池原さんの試みと目的・背景は同じで、組込分野へのRubyの展開がいかに社会に要請されているかの表れです。
大企業も、ベンチャー企業も、国も地方公共団体もベクトルは揃っています。
大いに成果を期待したいところです。

私も7月29日(金)に大阪で講習します。よろしかった初心者にお知らせください。RubyKaigiに参加する人達(既にRubyを使いこなしている)向けではありません(念の為)。

田辺さんの図書館システムのお話では、神戸市の図書館システムで2001年頃から先進的にRuby(とEmacs Lisp)
が使用されていたというのは、新鮮でした。私がRubyをはじめたのは、神戸在住で大阪の仕事で2001年6月でしたし、Ruby関西のコミュニティを立ち上げたのは2002年のKOFだったので、かすっていたかも。

江森さんの講演も、昨年のRubyWorldConferenceの
「Rubyを全面的に採用した東京ガスの地震防災システムの紹介」に続く興味深いものでした。

闇RubyKaigiもよかったです。(力尽きて寝ます)

bundle update でエラー

Twitterのせいでこのblogがおろそかになっている。

>gem update

にてたくさん更新された後

>bundle update

するとuninitialized constant Syck::Syck (NameError)となってはまり中。
bundler-1.0.14をbundler-1.0.13に戻してみたが同様エラー
Syckって何?

C:\home\amaster>bundle update
Fetching source index for http://rubygems.org/
c:/ruby/lib/ruby/1.9.1/rubygems/specification.rb:289:in `load': uninitialized constant Syck::Syck (NameError)
        from c:/ruby/lib/ruby/1.9.1/rubygems/specification.rb:289:in `_load'
        from c:/ruby/lib/ruby/1.9.1/rubygems/spec_fetcher.rb:119:in `load'
        from c:/ruby/lib/ruby/1.9.1/rubygems/spec_fetcher.rb:119:in `fetch_spec'

        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/remote_specification.rb:47:in `_remote_specification'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/remote_specification.rb:53:in `method_missing'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:101:in `block in __dependencies'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:98:in `each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:98:in `__dependencies'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:68:in `activate_platform'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:325:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:344:in `block in resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:343:in `resolve_requirement'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:295:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `reverse_each'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:294:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:160:in `start'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:128:in `block in resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:127:in `catch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/resolver.rb:127:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/definition.rb:151:in `resolve'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/definition.rb:90:in `specs'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/definition.rb:85:in `resolve_remotely!'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/installer.rb:43:in `run'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/installer.rb:8:in `install'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/cli.rb:270:in `update'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/vendor/thor/task.rb:22:in `run'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/vendor/thor.rb:246:in `dispatch'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/vendor/thor/base.rb:389:in `start'
        from c:/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/bin/bundle:13:in `'
        from c:/ruby/bin/bundle:19:in `load'
        from c:/ruby/bin/bundle:19:in `
'

gem sources の追加

 $ gem env

とやれば

RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin9]
  - INSTALLATION DIRECTORY: /opt/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /opt/local/bin/ruby
  - EXECUTABLE DIRECTORY: /opt/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-9
  - GEM PATHS:
     - /opt/local/lib/ruby/gems/1.8
     - /Users/ofukui/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gems.rubyforge.org/", "http://gems.github.com", "http://gems.github.com", "http://gemcutter.org"]
  - REMOTE SOURCES:
     - http://gems.rubyforge.org/
     - http://gems.github.com
     - http://gems.github.com
     - http://gemcutter.org

とgem 環境が表示される。
この gem sourcesを追加や削除するには
まず追加

gem sources -a http://gems.github.com/

削除は

gem sources -r http://gems.github.com/

とやればよい。はず。実際にMacではそう。
しかしWindowsではなぜかそうなってくれない。
まず初期状態

C:\>gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [i386-mingw32]
  - INSTALLATION DIRECTORY: c:/ruby/lib/ruby/gems/1.9.1
  - RUBY EXECUTABLE: c:/ruby/bin/ruby.exe
  - EXECUTABLE DIRECTORY: c:/ruby/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-mingw32
  - GEM PATHS:
     - c:/ruby/lib/ruby/gems/1.9.1
     - C:/Users/ofukui/.gem/ruby/1.9.1
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/
C:\>gem sources -l
CURRENT SOURCES ***
http://rubygems.org/
http://gemcutter.org/ を追加してみる
C:\>gem sources -a http://gemcutter.org/
http://gemcutter.org/ added to sources
メッセージが出ているので追加されたと思いきや 再度リストしてみると
C:\>gem sources -l
CURRENT SOURCES ***
http://rubygems.org/
むぅ〜 追加されない。

Sporkエラー

WindowsRSpec使ってみようとやっているが spork のエラーではまり中
Macではすんなり通ったので、スルーして先を急ぐ。

gem install spork --debug -V

Exception `NameError' at c:/ruby/lib/ruby/1.9.1/rubygems/command_manager.rb:164 - uninitialized constant Gem::Commands::InstallCommand
Exception `NameError' at c:/ruby/lib/ruby/1.9.1/syck/tag.rb:81 - method `yaml_as' not defined in Module
Exception `Gem::LoadError' at c:/ruby/lib/ruby/1.9.1/rubygems.rb:762 - Could not find RubyGem test-unit (>= 0)

Exception `Gem::LoadError' at c:/ruby/lib/ruby/1.9.1/rubygems.rb:762 - Could not find RubyGem sources (> 0.0.1)

Exception `Errno::EWOULDBLOCK' at c:/ruby/lib/ruby/1.9.1/net/protocol.rb:135 - ブロック不可のソケット操作をすぐに完了できませんでした。 - read would block
:
Exception `Errno::EWOULDBLOCK' at c:/ruby/lib/ruby/1.9.1/net/protocol.rb:135 - ブロック不可のソケット操作をすぐに完了できませんでした。 - read would block
Exception `Errno::EEXIST' at c:/ruby/lib/ruby/1.9.1/fileutils.rb:243 - File exists - C:/Users/ofukui/.gem/specs/rubygems.org%80
Exception `NoMethodError' at c:/ruby/lib/ruby/1.9.1/rubygems/specification.rb:538 - undefined method `to_ary' for #<Gem::Specification name=spork version=0.8.4>
Exception `NoMethodError' at c:/ruby/lib/ruby/1.9.1/rubygems/package/tar_input.rb:49 - undefined method `readpartial' for #<Gem::Package::TarReader::Entry:0x4003ef0>
Exception `IOError' at c:/ruby/lib/ruby/1.9.1/rubygems/format.rb:50 - closed stream
Exception `Errno::EEXIST' at c:/ruby/lib/ruby/1.9.1/fileutils.rb:243 - File exists - c:/ruby/lib/ruby/gems/1.9.1
Exception `Errno::EEXIST' at c:/ruby/lib/ruby/1.9.1/fileutils.rb:243 - File exists - c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4
:
Exception `Errno::EEXIST' at c:/ruby/lib/ruby/1.9.1/fileutils.rb:243 - File exists - c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/bin
Exception `Errno::EEXIST' at c:/ruby/lib/ruby/1.9.1/fileutils.rb:243 - File exists - c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/ext
Exception `Gem::Exception' at c:/ruby/lib/ruby/1.9.1/rubygems.rb:335 - no default executable for rake-0.8.7
Exception `Gem::InstallError' at c:/ruby/lib/ruby/1.9.1/rubygems/ext/builder.rb:49 - rake failed:

c:/ruby/bin/ruby.exe mkrf_conf.rb
Actually, there aren't any native extensions. I'm just dynamically installing dependencies based off of your operating system

rake RUBYARCHDIR=c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib RUBYLIBDIR=c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib
c:/ruby/lib/ruby/1.9.1/rubygems.rb:340:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
	from c:/rubException `Gem::Installer::ExtensionBuildError' at c:/ruby/lib/ruby/1.9.1/rubygems/installer.rb:483 - ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe mkrf_conf.rb
Actually, there aren't any native extensions. I'm just dynamically installing dependencies based off of your operating system

rake RUBYARCHDIR=c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib RUBYLIBDIR=c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib
c:/ruby/lib/ruby/1.9.1/rubygems.rb:340:in `bin_path': can't find executable ERROR:  Error installing spork:
	ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe mkrf_conf.rb
Actually, there aren't any native extensions. I'm just dynamically installing dependencies based off of your operating system

rake RUBYARCHDIR=c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib RUBYLIBDIR=c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib
c:/ruby/lib/ruby/1.9.1/rubygems.rb:340:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
	from c:/ruby/bin/rake:19:in `<main>'


Gem files will remain installed in c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4 for inspection.
Results logged to c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/ext/gem_make.out
GET http://rubygems.org/latest_specs.4.8.gz
302 Found
GET http://production.s3.rubygems.org/latest_specs.4.8.gz
200 OK
Installing gem spork-0.8.4
Temporarily enhancing PATH to include DevKit...
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/geminstaller.yml
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/README.rdoc
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/MIT-LICENSE
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/app_framework/padrino.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/app_framework/rails.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/app_framework/rails_stub_files/application.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/app_framework/rails_stub_files/application_controller.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/app_framework/rails_stub_files/application_helper.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/app_framework/unknown.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/app_framework.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/custom_io_streams.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/diagnoser.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/ext/rails-reloader.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/ext/ruby-debug.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/forker.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/run_strategy/forking.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/run_strategy/magazine/magazine_slave.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/run_strategy/magazine/magazine_slave_provider.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/run_strategy/magazine/ring_server.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/run_strategy/magazine.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/run_strategy.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/runner.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/server.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/test_framework/cucumber.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/test_framework/rspec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork/test_framework.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/lib/spork.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/assets/bootstrap.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/at_exit_during_each_run.feature
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/cucumber_rails_integration.feature
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/diagnostic_mode.feature
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/rails_delayed_loading_workarounds.feature
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/rspec_rails_integration.feature
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/spork_debugger.feature
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/steps/general_steps.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/steps/rails_steps.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/steps/sandbox_steps.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/support/background_job.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/support/env.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/features/unknown_app_framework.feature
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spec_helper.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/app_framework/rails_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/app_framework/unknown_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/app_framework_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/diagnoser_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/forker_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/run_strategy/forking_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/runner_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/server_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/test_framework/cucumber_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/test_framework/rspec_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork/test_framework_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/spork_spec.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/support/fake_framework.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/spec/support/fake_run_strategy.rb
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/bin/spork
c:/ruby/lib/ruby/gems/1.9.1/gems/spork-0.8.4/ext/mkrf_conf.rb
c:/ruby/bin/spork
c:/ruby/bin/spork.bat
Building native extensions.  This could take a while...

Ruby World Conference 1日目

今年も参加。くにびきメッセ

開始前の記念撮影

溝口知事とMatz。
知事が「公共団体がRubyを使用することを推進」と明言されて「松江は、豊かな自然に恵まれ、学校・文化のレベルも高く芸術、医療、交通も便利で若い才能のある人が活躍するのに適した場所」「日本のソフトウエアビジネスの拡大に貢献したい」と挨拶された。溝口知事はかつて財務省で為替介入を仕切った大物。

今年は経産省石黒商務情報政策局長の替わりに富田審議官が
「新産業創出と社会システム構造改革等に向けた新たな戦略について」

『情報経済革新戦略』産業構造ビジョン2010「グリーンイノベーション」「ライフイノベーション」。
「海外有力プレイヤーは「ブラックボックス」と「オープン」を合わせた標準戦略をうまく採っている。」
「今後の日本の産業構造はクラウド・コンピューティングで変わる。」
「グローバルプレイヤーの育成を支援」
「裾野産業等も含めた国内ものづくり基盤の強化」
「スマートコミュニティアライアンス」

内容はぎっしりであった。スマートグリッドに言及するなら、家庭への工事・接点で総務省「光の道」構想と協力・連携すれば良いのにと思う。
プレゼン資料を公開して頂くのが大いなる貢献となるので期待したい。

Matzの基調講演。1993年Rubyの利用者はたったひとり。Gartnerの予想では2013年には400万人が利用。爆発的。
Rubyバブルの終焉」「バブルは望ましくない、長続きしない」
従って『持続可能なRuby』大事!
Rubyの実益として 1)生産性 2)可能性 3)情熱の3つのポイントを挙げてプログラマーから経営者の情熱への拡がりを展開。
アメリカではスタートアップ企業に対してファンドRubyを指定する時代が来ている。
クラウドRubyは相性が良い「ARC(Ajile,Ruby/Rails,Cloud)」。
一次請け→二次請け→三次請け..の構造から産業構造が変革し脱却する先導になる。
Rubyを好きな人々の愛情に支えられてRubyは持続してゆく!
そしてお昼は松江弁当

午後は、「Ruby標準化この1年」中田先生



2011 JIS制定→ISO/IEC JCT1に Fast Track申請へと着々と進んでいる模様。
素晴らしい!

つくばでのRuby会議2010 3日目

ホテルグランド東雲に宿泊。結婚式場・レストランの庭がとても立派だった。


9:30に少し遅れて朝一番は「Rubyクラウドを便利にする方法〜ニフティクラウドの事例〜」から。
ニフティクラウドAPIの利用は、8月10日にβリリースで鋭意整備中と。利用は1時間12.6円から(ということは1日24時間、1ヶ月31日で9374円から)。パンフレットによるとその他いろいろ諸費用もかかるようでまあそれなりにそれなるようでした。サイトは http://cloud.nifty.com/

10:00〜「Rubyによる分散ストレージシステムの実装」リコーのquanpにも一部使われているそうで、TokyoCabinetなどとは棲み分けて、大きなデータの格納に特化している。

githubhttp://github.com/ToshiyukiTerashita/castoro/

10:30〜「RWikiと怠惰な私の10年間」咳さんの独特のオーラが今年も振りまかれました。
RWikiは10年前からオンメモリのドキュメント指向データベースを実現しており、某所で10年着々と運用実績を重ねている。Rubyのサイトも昔はRWikiで実装されてた記憶あり。時代がやっと咳さんの先進性に追いついてきたというところなのかもしれません。検索がSennaを使ってサクっと速くなったそうですが、groongaはSennaの後継とのことなので今後その組み合わせも面白いかも知れません。

11:00〜「Practical Ruby Projects with MongoDB」Alex Sharpさん
MongoDBはSQLDBに近いNoSQL。「みてわかるクラウドマガジン」でまつもとさんが記事を書いていたので注目していましたが、直接作者のお話が聞けてこれもRuby会議の醍醐味でした。

Rails3の時代には、mongoid2がどんどん使われる場面が増えると予想されます。

githubhttp://github.com/ajsharp/bunyan

12:00〜「Ruby powering 9 million dining tables」クックパッド橋本さん
Missionの勝利でしょう。

はてなの舘野さんはクックパッドに入社されたのですね。3人目のプレゼンで良く似た方だと思ったらご本人だったのでびっくり。

今後はどんどん世界へ展開してゆく勢いを感じました。

橋本CTO 曰く
「日本の料理はすごい。世界から取り入れるし、お弁当という独自の様式もある。
 海外へ行っても結局日本が一番ということがわかる。」
「ユーザの為のものづくりが原点。」
「Bestに集中する。Goodはやらない。」これも名言。

Railsへリニューアルする前はColdFusionを使っていたそうで、そう言えばColdFusionのシステムも一時期(2004年頃)はFlashのシステムでよく使われていたのに、他のサイトは今も現役なのでしょうかどうなっているのでしょうな。

13:30〜「るりまサーチの作り方-Ruby1.9でgroonga使って全文検索」クリアコード須藤さん
るりまサーチ http://rurema.clear-code.com/

groongaストレージエンジン http://mroonga.github.com/
ラングバプロジェクト
rroonga http://groonga.rubyforge.org/
racknga Ruby1.9+Rackをもっと便利に

さすが須藤さんですね。

14:00〜「ゲームとバーチャルタイム」Tom Lieberさん

 waveファイルを制御
 タイミング制御 時間を正確に制御
 Ruby Thread → ruck Shreds
 フレームレート独立
 ruck がスケジューリング
 Chuck がサウンド

 とにかく音を見事に制御していたので、インパクトありでした。

githubhttp://github.com/alltom/ruck

15:00〜「before Rails時代のプログラマが如何にして after Railsの世界にたどりついたか」柴田さん

北海道から永和に。ursmさんと机を並べてAfter Rails術をマスターされていった様子を分析しよくまとめられていました。

github の使いこなしが大きなポイントであるという指摘は、まことに御意。
githubは「俺ってスゲーな」感の加速装置。

15:30〜「HTMLデザインをまったく崩さない、美しいテンプレートエンジンの作り方」桑田誠さん
 プレゼンテーション層にもロジックがあるのでプレゼンテーション層にはロジックを含めるべきではないというのは誤り。
pureHTMLでデザイナーの世界とプログラマの世界を分業という方式はまさに待ち望まれていたもの。
Amrita2の試みもあったがレイヤが分離できていない。

プレゼンテーション層のロジックも独立したファイルにして、コンパイルして合成するという新方式→ Kwartz


サンプル

kwartz方式は、デザイナとプログラマが分業している場合には強力な武器になりそう。
デザイナとプログラマが兼業している場合は Haml/Saas がもう捨てられないと思う。

16:30〜 基調講演 Chad Fowler
あれっChad Fowlerさんてこんなにやせた人だっけ?と思ったら種明かしは講演の中にあった。
LifeHackで目標を決めトレーニングを重ねやせることを達成したのだった。

「本当にやりたい事は何か」
「どんなニッチなことでも追求していけば良い」
「生きたい人生を今生きろ」
「Intention 意志 さえあれば以外と簡単にできちゃう」
「毎日の練習を積み上げてゆく」

「楽しくする Make it FAN」
「専門分野を選び、それに精通しよう。技術より分野が大事」
「 Be Remarkable 目立とう」

なるほど!
アメリカの有名人(なのか)は、ある一定の共通の成功パターンを踏んでいるのだなと感じさせられた。

2007年のDave Thmoasさん の基調講演は、彼がステージに立っただけで、涙が出そうになり、語り出すと涙が止まらないというあの圧倒的なオーラはもう味わえないのだろうな。

17:30〜 クロージング
高橋会長から「Ruby会議は来年2011年限り」と爆弾宣言。
マンネリ化への拒絶や日本Rubyの会が主催する負担の再考という点でひとつのアドバルーン
ひとつの時代を区切って「群れのルール 群衆の叡智」が行方を決めることになる。

今年のRuby会議も終わってみればあっという間でした。
貴重なお話をしてくださった講演者の皆様、準備と本番で献身的な貢献をされた実行委員をはじめスタッフの皆様、直接的な援助のスポンサーの皆様、そして同じ時間・空間を共有して盛り上げてくださった参加者の皆様ほんとうにありがとうございました。

つくばでのRuby会議2010 2日目

Twitterは、書かない日はない(@iR3)のにblogは書けない日が続いている。
昨年は、実行委員をやったのに、夜は懐かしい友人と盛り上がってしまったので、blogに書きそびれた。
今年もさっきprintshopへの入稿の Adobe illustratorにダメ出しをくらって直していたら、いつもの寝る時間3時を過ぎてしまった。

今日は、朝一番はjpmobileの小川さん設楽さんのセッションを皮切りに、Matz基調講演、そしてお昼休みに、「メタプログラミングRuby」を買って、著者の Paolo Perrottaさん 翻訳者の角征典さん、序文を書かれたまつもとゆきひろさんのサインを頂いた。

写真左は、懇親会の紹介カード2枚で、Getした商品。たのしいRubyは2冊持っているので、3版が発刊されても買うのを躊躇していたので、1.9にも対応でちょうど有り難かった。

第1日目の万葉社長大場寧子さんの「Rubyで作るDSLの基礎」と繋がる話題で、Rubyの魅力のひとつであるDSLメタプログラミングが見事にシンクロしたのであった。

@takeshinodaさんが書かれているとおり

午後で面白かったのは「メタプログラミングRuby」の著者Paoloさんの講演(昨日、サイン貰ったよ!!)。黒幕術を語るRubyistは、「超強力だけど諸刃の剣だから気をつけて使うんだよ」って最後に必ず訴訟対策的(?)にいうんだけど、そのくせ語ってるときはキラキラ輝く。
Rubyが強力である理由の一つには、強力だけど簡単にさわれない程度に面倒くさいプロセスが必要なメタプログラミング機能にある、と思う。これには色んな言語の理解と、Rubyの実践が合わさらないとよく分からない点でもあるので、3,4種類の言語しか知らない人間にはなかなか伝えづらい。
Paoloさんすばらしいと思ったのは「危険だから使わせない。学ばないというのは理解できない」と断言したところ。何言語のどういう機能でもそうなんだけど「危険だから実開発では使えないよね−」とかいう人は沢山見てきた。けど、それは他人を舐めすぎであり、自分の技能や教える技量がないからそんなことを言ってるに過ぎないと思う。他人の潜在能力を過小評価しているのだ。そういう見識のない言動でどれだけ可能性を排除してきたのかといつも思う。

メタプログラミングは確かにやりすぎ危険だとは思うが、上手に使えばとても強力な武器になる。
今回のRuby会議での大きな収穫は、このメタプログラミングって便利だし、うまくつかえばいいんだ!という認識に至ったということだ。
yuguiさんの「初めてのRuby」で「『黒魔術』はちょっね」という空気を読んで「そうか避けて通ろう」としていたのに対し今回の会議の成果として「メタプログラミング面白」とスタンスが変わるかもしれない。

それにしても Pallo Perrottaさんは凄い方だ。イタリアで JavaをやっておられたのにRuby本を英語で執筆されて、日本で母国語でない英語で講演されて、そして日本語の漢字でサインをしてくださったのだから。

今回 外人の方が多く国際会議場にふさわしい雰囲気なのだが、イタリアの方はこれまでお見かけしなかったので、Rubyの世界的な拡がりを今更ながら感じたのであった。