とちぎテストの会議04メモ

岩切さん

会社をHackしていたら出版流通をHackすることなったでござるの巻 #toteka - Speaker Deck

  • あんた本気?と自問する。本気でノックしていると、ドアが開くことがある。
  • 外様だからこれまでの習慣に縛られない目でみてHackできた
  • 自分達をdisするのやめよう、いい情報を発信しよう。
  • 若い人のためにも頑張ろう。


椎葉さん

自然とそうなる開発チームをつくるいとなむ #toteka - Speaker Deck

  • 本編の間のよりみち。初めてお話しを聞いたのだけど、本編の内容と椎葉さんの考えや行動の理解の助けになった。
  • 自然とそうなるのは、経験とか失敗のあとに分かってくることなんだろうな。自分の中だと「理に適う」という言葉で捉えていたけど、ちょっと違うのかも。
  • ポジティブな言い方を工夫するのは岩切さんの自分disりやめようとも共通していた。
  • 「ちゃんとした米澤さん」だった。「やさしい咳さん」、咳さん相当やさしいからなー。

その他

  • ドレスコードは白シャツ
  • とちぎの人はオトナなのでtweetしない
  • 米澤さん司会お疲れ様でした!
  • 深谷さん疲れすぎたみたい…

再帰

再帰を使わないでフィボナッチ数

hfib = Hash.new do |h,k|
  if k < 2
    h[k] = k
  else
    h[k] = h[k-1]+h[k-2]
  end
end
15.times{|n| p [n,hfib[n]]}

再帰するので

def fib(n)
  s = [0, 1]
  while s.size <= n
    s.push(s[-1]+s[-2])
  end
  s[n]
end
15.times{|n| p [n,fib(n)]}

こんなかな?

最初のはメモ化されるので何回か使うなら早いんだよね

ruby-gnome2

WindowsRuby1.9ruby-gnome2が動くかためしてみた。

Rubyhttp://rubyforge.org/frs/download.php/74298/rubyinstaller-1.9.2-p180.exeをインストール。
Rubyコマンドプロンプトから

gem install gtk2

cairoのRDocでエラーが出たけどモジュールは入っているみたいなので気にしないことにした。

irbを起動して、

require 'gtk2'

とするとエラー。

libgdk_pixbuf-2.0-0.dllが見つからないよとダイアログが表示されて、irbにはこんなメッセージがでる。

irb(main):001:0> require 'gtk2'
LoadError: no such file to load -- gtk2.so
        from :29:in `require'
        from :29:in `require'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/gtk2-0.90.7-x86-mingw32/lib/gtk2/base.rb:24:in `rescue in '
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/gtk2-0.90.7-x86-mingw32/lib/gtk2/base.rb:20:in `'
        from :29:in `require'
        from :29:in `require'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/gtk2-0.90.7-x86-mingw32/lib/gtk2.rb:11:in `'
        from :33:in `require'
        from :33:in `rescue in require'
        from :29:in `require'
        from (irb):1
        from C:/Ruby192/bin/irb:12:in `
'

libgdk_pixbuf-2.0-0.dllはC:\Ruby192\lib\ruby\gems\1.9.1\gems\gdk_pixbuf2-0.90.7-x86-mingw32\vendor\local\binにあるんだけど、
gtk2で入ったほかのモジュール(たとえばC:\Ruby192\lib\ruby\gems\1.9.1\gems\gtk2-0.90.7-x86-mingw32\vendor\local\bin)にはパスが通っている。けどpixbufには通っていない。
なのでファイルをパスが通っているところにコピーして、irbを起動しなおしたらrequire 'gtk2'できた。


でも、なんでpixbuf2だけダメなんだろ?
デバッガでちょっとのぞいてみると、irbを起動した時点ではgemで入れたモジュールのパスは何も設定されていない。requireすると、パスに追加された上でモジュールをロードするらしい。

うまくロードできるモジュールはLoadLibraryExWされるまえに環境変数にそのモジュールがあるパスが追加されてからLoadLibraryExWされているようだ。

モジュールはglib2.so→atk.so→cairo.so→pango.so→gtk2.soという順番でロードされくる。gtk2.soがpixbuf2に依存しているけどこの時点でpixbuf2がロードされおらず、モジュールがあるパスも環境変数に加えられていない。だからロードに失敗しているんだな。
これってgtk2のgemパッケージの問題なのだろか?

euler

http://projecteuler.net/index.php?section=problems
の1ページ目、50問くらいできた。
http://projecteuler.net/profile/you_ssk.png
Rubyで知ったのでRubyを使っているのですが、1.9のPrimeが1.8より断然早くて素晴らしい。
ちなみにp50はこんな風に書いてみた。

require 'mathn'
limit = 1000000
plist = Prime.instance.each(limit).to_a
ans = 0
maxlen = 0
(0..plist.size-2).each do |c|
  sum = plist[c]
  d = c+1
  while (sum += plist[d]) < limit
    e = d-c+1
    if e > maxlen and sum.prime?
      ans,maxlen = sum,e
    end
    d += 1
  end
end
p [ans,maxlen]

でもifのsum.prime?を前にするととても遅いよ。
計算量を少なくするには…と考えはじめると次の問題に進めない。