前回は2年ぶりぐらいに参加できず、悔しい感じだったのですが、 今回は無事に参加できました。

今回は、梅澤さんによるSmalltalkの基調講演からはじまり、 Lightning Talkセッション、後半セッションの3本立てと、 変化に富んでいてなかなか楽しい構成だったと思います。 梅澤さんには、緊急Smalltalk勉強会でも大変お世話になりました。 Ruby使いにとっては、 「ああなるほど、Rubyのこの文法はSmalltalkから来てるんだなあ」 と思うようなところがたくさんあったのではないかと思います。

Lightning Talkセッションに参加したかったのですが、 まさかのバッテリー故障に見舞われたため、電源から移動できずに 参加できませんでした。次回は是非!

後半セッションは、高井さんのDTraceに関する解説に参加しました。 DTrace面白いですね。 D Scriptも並列プログラミング言語として面白そう。 Linuxで使えないのが残念。

See Also

posted by Png genki on Mon 17 Mar 2008 at 19:26

Rails勉強会@東京第28回

Genki Takiuchi

Recent Situation:

  • Founded a small company.
    • And we have already survived 6 months, Yay!
  • Learning English hard.
  • I got an enlightenment of coLinux.
  • Binary stuffs: Computer Graphics, FWS/CWS, MUDA.
  • Smalltalk and NEPL!
  • And also being with Rails 2.0.2

Favorite Things:

  • C/C++ Template, JavaScript, Ruby.
  • Thinking algorithm, Rendering (CG) and 3D.
  • Vim7, Zsh, GNU screen, rails.vim, ZenTest.

Thank you!

posted by Png genki on Sun 16 Mar 2008 at 11:47

Twitterのtrack機能を使っていくつかのキーワードをtrackしているのですが、 昨晩、急に「ruby」を含む通知が激増したので、なんだろうと思って調べてみました。 その原因はこれでした。

StrawPoll-Tiny polls in 140 characters or less

strawpollnow_com.png

Twitterを使った投票サービスが、PHP vs Rubyで投票をやっていたようです。 なるほどねぇ。

posted by Png genki on Sat 15 Mar 2008 at 12:50

Railsアプリを書いてる場合はあまり関係ないですが、 セグメンテーションエラー(SEGV)などに遭遇した場合に、 原因を調査する方法を紹介します。

まずは、coreを吐かせるためにulimitの設定をします。

   1  % ulimit -c
   2  0
   3  % ulimit -c unlimited
   4  % ulimit -c
   5  unlimited

ulimit -cが0になっている場合は、coreを吐かないので、 適当な値を設定するか、unlimitedにします。

あとは、プログラムを実行してランタイムエラーを引き起こし、 coreファイルを出力させます。

   1  % ./command
   2  zsh: segmentation fault (core dumped)  ./command

さて、今度はgdbの出番です。 gdbは対話型のデバッガです。 以下のように、gdbにオプションを指定して起動します。

   1  % gdb ./command --core=./core
   2  
   3   .. snip ..
   4  
   5  Core was generated by `./command'.
   6  Program terminated with signal 11, Segmentation fault.
   7  #0  0x08048a43 in vec_sub (a=0x804e248, b=0xbfa9e720) at vec.c:124
   8  124         const __m128 t_vec5 = (*a) ;
   9  (gdb) 

すると、上記のように対話セッションが開始されます。 あとは、表示された内容や、gdbのコマンドを使って原因を解析すればOKです。 例えば上記の出力の例では、aのアドレスが16バイト境界に乗っていないのが 原因であることが推察できます。

ソースコードが手元にある場合は、gccに-gオプションをつけてコンパイル することで、lコマンドによって以下のようにエラーが発生した場所の周辺の ソースコードを見たりすることができるようになります。

   1  (gdb) l
   2  119         return t_vec3 ;
   3  120     }
   4  121
   5  122     __m128 vec_sub (const __m128 * a, const __m128 * b)
   6  123     {
   7  124         const __m128 t_vec5 = (*a) ;
   8  125         const __m128 t_vec4 = (*b) ;
   9  126         const __m128 t_vec6  =  _mm_sub_ps( t_vec5 ,  t_vec4  ) ;
  10  127         return t_vec6 ;
  11  128     }

gdbを終了する場合は、qコマンドを実行します。

posted by Png genki on Sat 15 Mar 2008 at 00:30

数年に渡ってメンテナンスされているようなRailsアプリケーションの config/routesは、 徐々にスパゲッティ化していく傾向があるように思えます。 ということで、今回は、 コントローラごとにRoutesをまとめて綺麗に記述する方法を紹介します。

方法は簡単です。with_optionsを使って、 prefixオプションを指定するようにします。

   1  map.with_options(:controller => 'posts',
   2      :name_prefix => 'posts_',
   3      :path_prefix => 'posts') do |posts|
   4    # posts_rss_path => 'posts/rss'
   5    posts.rss 'rss', :action => 'rss'
   6  end

しかし、全部のControllerにこれを書くのは面倒かもしれません。 ということで、プラグインを作りました。

このプラグインを使えば、以下のようにRoutesを書くことができます。

   1  map.with_controller('posts') do |posts|
   2    posts.rss # posts_rss_path => 'posts/rss'
   3  end

map.namespace(:posts)を使うと似たようなことができるのですが、 これは名前空間の作成に特化されているので、 今回の目的のために使用すると、若干思わしくない挙動をするようです。

posted by Png genki on Fri 14 Mar 2008 at 22:37

Rubyから外部プログラムを呼び出して、 パイプを使ったプロセス間通信をする方法の紹介です。

Rubyから外部のプログラムを起動して、標準入力からデータを入力し、 標準出力から結果を取り出したいという場合には、 IO.popenを使うと便利です。使い方は以下のとおり。

   1  IO.popen('/usr/bin/command', 'r+') do |io|
   2    io.puts "something to input"
   3    @result = io.gets
   4  end

See Also

posted by Png genki on Fri 14 Mar 2008 at 18:38

プログラミングのスピードを上げる方法

天才の成せなる技とは思わずに、

  1. 努力しないでいいように
  2. 論理的に考えなくてもいいように
  3. 頭を使わないでもいいように

最初からそう組み上げていく。

頭を使うプログラミングと、頭を使わないプログラミングは、 同じプログラミングでも本質的に違うものなのではないかと思う。 IMHOだけど、頭を使わなくてもいいプログラムを書き続けることは、 将来的に自分の可能性を狭めることになるんじゃないだろうか。 組み上げるほうに時間を使う、という話なのであれば納得だけど。

僕自身に関していえば、 コードを書いている時間よりも、頭を使ってる時間のほうが何倍も長いです。 一日100行もコードを書かないこともありますが、 そういう日のほうが仕事をした感じがします。 キーボードに向かってコードを書いているときは、 あまり仕事をした気がしないかも。 脳内で出来上がったものを書き下ろしてるだけだからね。

傍目にはぼんやりしてるように見えるとき、一番仕事をしていると思う。

See Also

posted by Png genki on Fri 14 Mar 2008 at 04:43

むしろ今までついていなかったのが問題ですが(今ではS3Foxを使っていた)、 ファイル形式を自動認識するファイルアップロード機能をつけました。 画像の場合、サイズに応じて自動的にサムネイル画像を作成します。

P1120681.JPG

posted by Png genki on Fri 14 Mar 2008 at 03:42

AS3を使ってリアルタイムレイトレをやっているサイトを見つけました。

Flash ActionScript 3.0 Raytracer

rtimg

ブラウザを使った分散レイトレも現実的になってきているのかも。

posted by Png genki on Thu 13 Mar 2008 at 14:14

FWS/CWSファイルのフォーマットについては、Adobeの 「SWF and FLV File Format Specification Version 9」 を参照すると大体のことは分かりますが、 SWFTagが一覧になっていて便利そうな、こんなサイトもありました。

メモメモ。

See Also

posted by Png genki on Thu 13 Mar 2008 at 06:36