しばらく前からOpenIDについていろいろ調べているのですが、 個人情報が一箇所に集中することで、便利になる反面、 セキュリティ上のリスクが高まるという指摘があります。

確かにその通りで、対策を考えていたのですが、 マスターキーを秘密分散方式で複数作るのが、妥当な解決策かもしれないと思いました。 2つ鍵穴があるドアのイメージですね。 どちらか一方を奪われても安全なわけです。 セキュリティ強度の必要に応じて3つ、4つと増やしても良いですね。

現状のOpenIDの仕様の上でうまいこと運用できないかなあ。

See Also

posted by Png genki on Tue 25 Mar 2008 at 02:58

急に必要になったので作りました。

   1  javascript:void(alert(document.getElementById('wys_frame').contentDocument.body.innerHTML.replace(/<.*?>|\s+/g, '').length))

自分が使えれば十分だったのでFirefoxのみ動作確認。 こういうとき、FlashではないAjaxアプリの便利さを実感しますね。

追記

やっぱり毎回Bookmarkletを起動するのが面倒になったので、 document.titleに2秒間隔で文字数を表示するバージョンを作りました。

   1  javascript:void(clearInterval(window.gdocs_counter),window.gdocs_counter = setInterval(function(){var s=document.getElementById('wys_frame').contentDocument.body.innerHTML.replace(/<.*?>|\s+/g, '');document.title = document.title.replace(/\s*(\[.*?\])?$/, [' [', s.length, ' chars]'].join(''));}, 2000))

posted by Png genki on Sun 23 Mar 2008 at 22:10 with 1 comment

ようやくこの日が来ましたね。

Changeset 9067

Add has_one :through support. #4756 [thechrisoshow]

yuguiさんの has_one :through の頃からだから、実に1年半以上の時間がかかったわけですね。感慨深い。

See Also

posted by Png genki on Sat 22 Mar 2008 at 18:06

http://www.searchme.com/ が面白そうだったのでBetaテストに応募してみたのですが、 アカウントをもらえたので試してみました。

searchme.com.png

ベータテスト中のせいか、ちょっと動作が遅いのが気になりましたが、 画像を中心として何かを探す場合には、なかなか便利そうです。 上のスクリーンショットは、「Global Illumination」 というキーワードで検索したところです。

欲しいものリスト

  • マウスのホイールでスクロールするようにしてほしい
  • キーボードショートカットがほしい(hlで左右にスクロールとか)
  • 文字が読めるぐらいZoomできると別次元の使い方ができそう
  • 3倍ぐらい高速化してほしい
posted by Png genki on Thu 20 Mar 2008 at 17:58

Performance comparison: Rails 1.2.6 vs 2.0.2

I ran both applications in Mongrel (with the ‘production’ environment). The results of ‘ab -n 5000 http://localhost:3000/’ are as follows:

  • Rails 1.2.6: 141.19 requests/sec
  • Rails 2.0.2: 214.76 requests/sec

Wow, what a difference! Rails 2.0 is 50% faster in a dummy application!

2.0の方が遅いという話もあったような気がしますが、速くなってるみたいですね。

posted by Png genki on Wed 19 Mar 2008 at 10:55

前回は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