RubyGemsの1.1.0がリリースされたようです。

Announce: RubyGems Release 1.1.0

RubyGems now uses persistent connections on index updates. Index updates are much faster now.

インデックスの更新が速くなったとの事。確かに結構時間がかかっていたのでうれしいかも。

gem install now exits with non-zero exit code when appropriate.

地味にうれしいかも。

RubyGems now requires Ruby > 1.8.3.

ふむふむ。

RubyGems自体のupdateを行う場合は、

sh>>

gem update --system

<<--

を実行する必要があります。

posted by genki genki on Sun 30 Mar 2008 at 03:00 with 0 comments

EdgeRailsのOpenIdAuthenticationがruby-openid 2.0に対応した模様です。

Changeset [9103]: Updated OpenIdAuthentication to use Ruby OpenID 2.x.x gem (closes #10604)

Updated OpenIdAuthentication to use Ruby OpenID 2.x.x gem (closes #10604) [Josh Peek]

徐々に整備されてきましたね。

See Also

posted by genki genki on Fri 28 Mar 2008 at 08:47 with 1 comment
27th Thu

mod_rails!

mod_rails is on the way

Hongli and crew from Phusion have been hard at work for some time to fix the ease-of-deployment issue on Apache with their Passenger project. They now have a video that demos how simple it’ll be to install and get running with mod_rails.

こ、これは・・・

posted by genki genki on Thu 27 Mar 2008 at 10:43 with 1 comment

IETester
は、複数のバージョンのIEを同時に起動するアプリケーションです。
普段からIEでのJavaScriptのデバッグでお世話になっている
DebugBar

Companion.JS
の開発元のCore Servicesが開発しています。

ダウンロードしてインストールするだけで特に問題なく利用できたので、
早速4つのバージョンのIEを立ち上げてみました。

IETester.png

左から、IE5.5、IE6、IE7、IE8 beta 1のタブが並んでいます。
大きなディスプレイをお持ちであれば、スプリッターで画面を分割して、同時に4つのIEのレンダリングを一望することも出来ます。
非常に便利ですね。

See Also

posted by genki genki on Thu 27 Mar 2008 at 05:04 with 0 comments

久々にRailsプラグインの紹介です。

BackgroundFu
は、Jacek Becela氏による、時間がかかる処理をバックグラウンドプロセスで実行するためのRailsプラグインです。

使い方ですが、まずはインストール。

sh>>
% svn export https://svn.trix.pl/public/background_fu vendor/plugins/background_fu
<<--

続いて、各種ファイルを生成するGeneratorを起動します。

sh>>
% ./script/generate background
<<--

バックグラウンド処理の情報を管理するテーブルを作成するためのmigration
ファイルが生成されるので、マイグレーションを実行します。

sh>>
% rake db:migrate
<<--

これでひとまず準備完了。あとは、lib/workersの下に生成されている
exampleファイルや
README
を参考にしながら、Workerクラスを作ります。

Workerクラスの例

ruby>>
class ExampleWorker
def add(a, b)
a + b
end
end
<<--

このWorkerを呼び出す場合は、以下のようにします。

rails>>
Job.enqueue!(ExampleWorker, :add, 1, 2)
<<--

単純に時間がかかる処理を裏で実行したいだけならこれでOKです。
簡単ですね。
必要であれば、JobのIDを使ってもうちょっと複雑な処理も実行可能です。

Workerプロセスの起動は、以下のコマンドで行います。

sh>>
% ./script/daemons start
<<--

stopで停止、restartで再起動です。RAILS_ENVを指定する場合は、

sh>>
% RAILS_ENV=production ./script/daemons start
<<--

こんな感じですね。デフォルトではdevelopment環境になります。

See Also

posted by genki genki on Tue 25 Mar 2008 at 03:58 with 0 comments

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

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

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

See Also

posted by genki genki on Tue 25 Mar 2008 at 02:58 with 0 comments

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

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

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

追記

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

js>>
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 genki 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 genki genki on Sat 22 Mar 2008 at 18:01 with 0 comments

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

searchme.com.png

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

欲しいものリスト

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

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 genki genki on Wed 19 Mar 2008 at 10:55 with 0 comments

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

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

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

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

See Also

posted by genki genki on Mon 17 Mar 2008 at 19:26 with 0 comments

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 genki genki on Sun 16 Mar 2008 at 11:47 with 0 comments

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

StrawPoll-Tiny polls in 140 characters or less

strawpollnow_com.png

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

posted by genki genki on Sat 15 Mar 2008 at 12:50 with 0 comments

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

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

sh>>
% ulimit -c
0
% ulimit -c unlimited
% ulimit -c
unlimited
<<--

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

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

sh>>
% ./command
zsh: segmentation fault (core dumped) ./command
<<--

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

pre>>
% gdb ./command --core=./core

.. snip ..

Core was generated by `./command'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048a43 in vec_sub (a=0x804e248, b=0xbfa9e720) at vec.c:124
124 const __m128 t_vec5 = (*a) ;
(gdb)
<<--

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

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

pre>>
(gdb) l
119 return t_vec3 ;
120 }
121
122 __m128 vec_sub (const __m128 * a, const __m128 * b)
123 {
124 const __m128 t_vec5 = (*a) ;
125 const __m128 t_vec4 = (*b) ;
126 const __m128 t_vec6 = _mm_sub_ps( t_vec5 , t_vec4 ) ;
127 return t_vec6 ;
128 }
<<--

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

posted by genki genki on Sat 15 Mar 2008 at 00:31 with 0 comments

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

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

rails>>
map.with_options(:controller => 'posts',
:name_prefix => 'posts_',
:path_prefix => 'posts') do |posts|

posts_rss_path => 'posts/rss'

posts.rss 'rss', :action => 'rss'
end
<<--

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

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

rails>>
map.with_controller('posts') do |posts|
posts.rss # posts_rss_path => 'posts/rss'
end
<<--

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

posted by genki genki on Fri 14 Mar 2008 at 22:30 with 0 comments

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

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

ruby>>
IO.popen('/usr/bin/command', 'r+') do |io|
io.puts "something to input"
@result = io.gets
end
<<ruby

See Also

posted by genki genki on Fri 14 Mar 2008 at 18:39 with 0 comments

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

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

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

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

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

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

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

See Also

posted by genki genki on Fri 14 Mar 2008 at 04:43 with 0 comments

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

P1120681.JPG

posted by genki genki on Fri 14 Mar 2008 at 03:42 with 0 comments

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

Flash ActionScript 3.0 Raytracer

rtimg

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

posted by genki genki on Thu 13 Mar 2008 at 14:14 with 0 comments

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

メモメモ。

See Also

posted by genki genki on Thu 13 Mar 2008 at 06:36 with 0 comments

via Tumblr for R&D of lucille renderer.

レイトレーシングによる、各種言語のコード量と速度の比較。

Ray tracer language comparison

非常に興味深いですね。OCaml速いですね(参照)。
OoOでF#に期待がかかっていたのもうなずける。
Global Illumination Rendererを使ったベンチマークだとどうなるかな。

posted by genki genki on Wed 12 Mar 2008 at 16:51 with 0 comments

MUDA
を使って非常に短いプログラムを書いてみました。

MUDAを使ってvecの足し算をしています。
HLSL/GLSLライクに幾何計算を記述できるのは楽でいいですね。

See Also

posted by genki genki on Wed 12 Mar 2008 at 00:31 with 0 comments

MUDA
を使う環境を構築すべく、coLinuxをインストールすることにしました。
その過程で役に立ったサイトのメモです。
またいつかcolinuxの環境構築をするときのために。

posted by genki genki on Tue 11 Mar 2008 at 00:13 with 0 comments

実感としてそうだなと思うのだけれど、どうしてそうなんだろうか。
素朴な疑問が残った。

日本はヤバくても、東京はヤバくないかも

21世紀は都市の時代。都市を地方化するのは時代の逆行にしか思えない。

インターネットなどの情報通信技術が発展し、
地理的な制約は徐々に少なくなっていくにもかかわらず、
都市人口率はむしろ増加している。

graph

Figure 1 Percentage Change in Urban Population, 1950-2030.
(from Urban Harvest: A Cgiar Global Program on Urban and Peri-Urban Agriculture)

通信技術のもつ、人間の面白いもの・楽しいものに集まろうとする性向を
助長する要素のほうが、
コミュニケーションを地理的な制約から解放する要素よりも
勝っているという事なんだろうか。
楽しいものや便利なものが飽和してくると、
逆に都市人口率が下がったりするのかな。

posted by genki genki on Mon 10 Mar 2008 at 20:02 with 0 comments

まだ完全ではないですが、いくつかの点でOpenID認証の挙動を改善しました。

  • 必須パラメータがもらえないIdPに対して毎回パラメータの手入力を
    しなくても良くなった。
  • 一度アカウントとBindされたOpenIDを変更できるようにした。
    • login nameの衝突が発生した場合、パスワード認証を要求するようにした。

ある程度まとまった時点で、Open ID Authentication用の
Railsプラグインを更新します。

不具合などに遭遇いたしましたら、ご連絡いただければ
プラグインの改善に役立てさせていただきます。
よろしくお願いいたします。

posted by genki genki on Mon 10 Mar 2008 at 17:35 with 0 comments

なんだかA要素の直後の空白が無くなってしまいますね。

Windows用Safariのバグかと思ったら、Macでも同じ挙動でした。
とりあえず、
以下のように無理やりA要素の後にテキストノードを詰め込むことで対処。

js>>
var spacer = document.createTextNode(' ');
element.parentNode.insertBefore(spacer, element.nextSibling);
<<--

posted by genki genki on Mon 10 Mar 2008 at 13:23 with 0 comments

ちょっと必要になったので、
タグや空白を無視して、ある文字列の中から、
指定した文字列がマッチする範囲を計算するJavaScript
を書いてみました。

js>>
/* (C) Genki Takiuchi. New BSD License */
var findSelection = function(html, sel){
var chars = html.split(''), sels = sel.split('');
var start = 0, end = 0, step = 0, tag = false;
var cur = function(){return chars[end]};
var parse = function(){
switch(cur()){
case '>': if(tag) tag = false; return go();
case '<': if(!tag) tag = true; return go();
case '\n': return go();
case ' ': return go();
case '\t': return go();
default: return tag ? in_tag() : out_tag();
}
};
var go = function(){return(chars[end++] ? parse:reject)()};
var in_tag = function(){return go()};
var out_tag = function(){
return(cur() == go_sel() ? match:not_match)()
};
var not_match = function(){step = 0; return go()};
var match = function(){
if(step == 1) start = end;
return(sels[step] ? go:accept)()
};
var accept = function(){return [start, end + 1]}
var reject = function(){return [0, 0]};
var go_sel = function(){
var s = sels[step++];
return white_space(s) ? go_sel() : s
};
var white_space = function(c){
return c && c.match(/[\s\n]/)
};
return parse();
};
<<js

使い方は、こんな感じ。

js>>

findSelection('hello, world!', 'llo, world')
[2, 15]
<<js

選択範囲を取得して、選択している領域をRangeを求めるために作りました。
selに指定した文字列にマッチする箇所が複数ある場合は、
最初にマッチした場所のRangeを返します。

posted by genki genki on Sun 9 Mar 2008 at 10:54 with 0 comments

CG系の話題を書きやすいように、数式を書けるようにしました。
これでレンダリング方程式も想いのままです。

[math]
L_o(x,\vec{w}) = L_e(x, \vec{w}) +
\int_\Omega f_r(x,\vec{w}',\vec{w})
L_i(x,\vec{w}')(\vec{w}'\cdot\vec{n})d\vec{w}'
[/math]

以下のように、latex形式で数式を記述します。

pre>>
[\math]
L_o(x,\vec{w}) = L_e(x, \vec{w}) +
\int_\Omega f_r(x,\vec{w}',\vec{w})
L_i(x,\vec{w}')(\vec{w}'\cdot\vec{n})d\vec{w}'
[/\math]
<<--

インライン形式で [math]y=\frac{d}{dx}f(x)[/math]
のように記述することも出来ます。
その場合は、

pre>>
[\math]y=\frac{d}{dx}f(x)[/\math]
<<--

のように、改行せずに記述します。

posted by genki genki on Sat 8 Mar 2008 at 19:40 with 1 comment

autotestは、Railsアプリケーションのテストを自動化する、
非常に便利なユーティリティです。
昔はlib/以下のファイルの自動テストには対応していなかったのですが、
いつの間にか対応していたみたいです。

lib/foo.rbファイルをテストする場合、
test/unit/foo_test.rbにUnitテストとしてlib/foo.rb
のテストを書けば良いようです。
そうしておくと、いずれか一方のファイルを編集したタイミングで、
自動的にテストを走らせてくれるようになります。

posted by genki genki on Sat 8 Mar 2008 at 16:22 with 0 comments

Webサービスを作っているものにとっては、サーバの監視は重要なことです。
サーバが落ちていない事を絶えず確認していたいパラノイアのための
XMPPによるサーバ監視方法を紹介します。

やることは単純で、サーバの動作を監視するデーモンスクリプトの中から、
問題が起こっていない場合に、XMPP経由でJabberクライアントに
「no problem」と、タイムスタンプつきで通知するだけです。

サーバ監視というと、たいていの場合、何か問題が起こった事を通知するように
することが多いです。しかし、この方法では、何も起こっていないことを
定期的に通知させることで、サーバ監視プログラム自体に対する疑念
をはらう事が出来ます。

60秒に一回Gtalkにno problemであることを通知させるようにしています。
Twitterのお陰で、1分間に一度程度の通知はさほど気にならなくなったのと、
心配になったらLogを見ればどの時間まで「no problem」であるかを
確認できるので、便利です。

posted by genki genki on Sat 8 Mar 2008 at 15:50 with 0 comments

度々見かけるけどあまり良く意味が分かってなかった。
書くことで記憶に残るので、記事にしてみます。

So far の意味は、今までのところ、ここまでは。

And so far, みたいな接続詞として使ったり、副詞的に使ったりする。

  • So far, so good. 今のところ万事順調
  • I am fine so far. 今のところ元気です
  • Are you with me so far? ここまではOK?

So far awayだと、とても遠いになる。farというと遠い感じがするけど、
3文字にエンコーディングされてるだけあって、
用法によって意味をたくさん持っている。

  • as far as I know. 私の知る限り

あとは、比較級・最上級の強調にも使われる。

  • far better 遥かに良い
  • It is the best by far. 断然良い
posted by genki genki on Sat 8 Mar 2008 at 11:34 with 0 comments

実際負荷分散が必要なほどの負荷があるわけではないのですが、
冗長化の一環として
blog.s21g.comに対して
DNSラウンドロビン
の設定をしてみました。

Railsの場合、リバースプロクシ、キャッシュサーバ、Webサーバ、APサーバに関しては、特に頭を悩ますことなく冗長構成をとることが出来ます。
cache_fuは最初から複数のmemcachedを使うことを想定していますし、
acts_as_searchableを修正して2つのHyperEstraierを使うようにするのも、
それほど難しい修正ではありません。

しかしながら、やはりDBの冗長構成は面倒ですね。
参照系に限定すれば、相互レプリケーションさせるだけで簡単なのですが。
MySQL 5.1が早くリリースされてくれると楽なんですけど。

See Also

posted by genki genki on Fri 7 Mar 2008 at 14:29 with 6 comments

RaPT
については以前
RaPT: Railsプラグイン管理ツール
で紹介しましたが、
手短にRaPTを使ってRailsプラグインを使う方法をまとめておきます。

インストール

sh>>

gem install rapt

<<--

プラグインをインストール

RAILS_ROOTで以下を実行。

sh>>
$ rapt install http://repo.pragprog.com/svn/Public/plugins/annotate_models
<<--

プラグインをアップデート

まさにこの為にRaptを使う価値があるという代物。

sh>>
$ rapt update annotate_models
<<--

便利です。

posted by genki genki on Thu 6 Mar 2008 at 15:11 with 2 comments

Rails-2.0から、FunctionalTest用のテストクラスの基底クラスは、
Test::Unit::TestCaseからActionController::TestCase
に変わりました。
それに伴って、テストクラス内にsetupメソッドやteardown
メソッドを書いても実行されなくなっています。

** Rails 2.0.2のファンクショナルテスト機構が壊れている件・謝罪と訂正Comments**

今日は久しぶりにRails 2.0.2を使い、久しぶりに付属のファンクショナルテスト機構を使っていたのですが、そこでひどいバグに遭遇しました。

FunctionalTestではsetupteardownを使う機会がなかったので
今まであまり気になってなかったですが、確かに使ってる人からすると
困る問題ですね。
バグだとして、パッチが採用されたら直るんだろうけど、
2ヶ月間放置されてる状況からすると、setupteardown
を使わない方向が「Convention」になっていくという事なのかな。

See Also

posted by genki genki on Wed 5 Mar 2008 at 12:24 with 0 comments

Ebbは以前にも紹介しましたが
(ポストMongrel時代のWebサーバ参照)、
Thinより高速といわれている軽量・高速なWebサーバです。

[A Web Server Called Ebb

Ebb aims to be a small and fast web server specifically for hosting web frameworks like Rails, Merb, and in the future Django.

こちらでも紹介されています。

Ebb: C-Powered Web Server That Uses Rack - Faster than Mongrel and Thin

非常に興味深いですね。
ということで、ちょっと使ってみました。
先日からgemインストールできるようになったので、
いつものように

sh>>

gem install ebb

<<--

でインストールできます。
ただし、EbbはRuby拡張でglib2のヘッダファイルに依存しているため、
あらかじめそちらもインストールしておく必要があります。
以下はDebianの場合。

sh>>

apt-get install libglib2.0-dev

<<--

インストールが完了したら、RAILS_ROOTで以下のようなMongrel
ライクなコマンドを実行すると、Ebbが立ち上がります。

sh>>
% ebb_rails start
<<--

また、ebb_railsコマンドのオプションは以下の通り

pre>>
Usage: ebb_rails [options] start|stop

Server options:
-p, --port PORT use PORT (default: 3000)
-e, --env ENV Rails environment
(default: development)
-c, --chdir PATH Rails root dir
(default: current dir)
-d, --daemonize Daemonize
-l, --log-file FILE File to redirect output
-P, --pid-file FILE File to store PID
-t, --timeout SEC Request or command timeout in sec
(default: 60)

Common options:
-h, --help Show this message
-v, --version Show version
<<--

とりあえず、単純なアプリケーションでテストした限りでは、
問題なく動いている模様です。
楽しみなプロジェクトですね。

See Also

posted by genki genki on Wed 5 Mar 2008 at 08:56 with 0 comments

参加者の皆様、お疲れ様でした。
おかげ様で非常に面白い話が聞けました。
特に梅澤さん、質問ばかりですみませんでした。
梅澤さんのお陰で勉強会の体をなしていたといっても過言ではないと思います。
ありがとうございました。

確かに動き続けるプログラムを語る上でSmalltalkは避けて通れない、
大変参考にすべきものですね。
GemStone
の話がとても興味深かったです。あと
GLASS
も。Smalltalk+マルチユーザ環境が僕が求めていたものなのかもしれません。
マルチユーザ環境を実現する過程で、他にあげた要素が必然的に
必要になってくる気がしますし。

惜しむらくは、マルチユーザっぽいSmalltalkの処理系で、
フリーで使える環境がないということですね。
しかしなんにしても、Smalltalk面白いなあ。

See Also

posted by genki genki on Wed 5 Mar 2008 at 00:47 with 4 comments
posted by genki genki on Tue 4 Mar 2008 at 13:13 with 0 comments

コンソールから使えるバイナリエディタ
bvi
の紹介です。

bviは、名前の通りViのような使い勝手のバイナリエディタです。

bvi

ちょっとバイナリデータを修正しなければいけなくなったとき(?)に重宝します。

posted by genki genki on Tue 4 Mar 2008 at 13:11 with 0 comments

イベントのお知らせです。

Smalltalk勉強会

Smalltalkの基礎を学び、大いに語りあいます。

  • 日時: 3月4日 19:00-22:00
  • 場所: ドリコム(地図
  • 準備: Smalltalkの処理系
    (Maiha氏のお勧め)
    をインストールしたノートPC or 熱い想い

参加人数は10人程度を想定しています。
参加希望者はTwitterで@takiuchiか@technohippyに声をかけてください。
この記事にコメントをいただいてもOKです。

それでは、よろしくお願いします。

See also

更新履歴

  • 2008/3/4 See also を追加
posted by genki genki on Tue 4 Mar 2008 at 11:20 with 4 comments

このBlogシステムでは、myopenid.comにあわせて、
IdPに対して "nickname" と "email" を必須パラメータとしていましたが、
IdPによってデフォルトで持っているパラメータが違うため、
場合によってはこれらのパラメータを別途入力してから、
再度トライしてもらう必要がありました。

これは非常に敷居が高いため、要求したデータが得られなかった場合、
足りない情報をその場で追加できるようにしました。
OpenIDの仕組み上、このような仕組みを用意することは
必要になってきそうですね。

posted by genki genki on Tue 4 Mar 2008 at 06:41 with 3 comments

Background処理に関する最近の動向調査に関するメモ。

starling
面白そうだな。試してみよう。

posted by genki genki on Mon 3 Mar 2008 at 16:57 with 0 comments
今回は、大げさな機能ではないですが、 知っているとちょっと便利なHelper関数を紹介します。 **cycle** まずはcycle。これはCSSのクラスに`even`, `odd`を指定する場合のような、 周期的に繰り返す文字列を簡単に埋め込むことが出来ます。 html>> @items = [1,2,3,4] <% @items.each do |item| %> "> <% end %>
item
<<-- **pluralize** 英語のみですが、数詞の語尾変化を適切に行ってくれます。 rails>> pluralize(1, 'person') # => 1 person pluralize(2, 'person') # => 2 people pluralize(3, 'person', 'users') # => 3 users pluralize(0, 'person') # => 0 people <<--
posted by genki genki on Mon 3 Mar 2008 at 15:29 with 0 comments

身の回りに溢れているほとんど全てのプログラムは、
静止状態の表現としてソースコードを持ち、
計算機上で実行され、そして終了します。
少なくとも、終了しようと思えばできるように作られています。

しかしながら、近年では、Webサーバやネットワークプログラムのように、
継続的に動作することが当たり前で、停止状態に移行する事自体が
例外とされるようなプログラムが珍しくなくなってきています。

RubyやPerl, Pythonなどの動的言語と呼ばれる言語が普及し、
プログラム言語の価値は、実行速度から開発速度で測られる
比率が高くなりました。
そんな中、去年ぐらいから、静的言語でも動的言語でもない、
新しいプログラミング言語のパラダイムの可能性について考えています。

はてしない物語。終了状態の無いプログラム。

停止することなく、動き続けることが想定されるService型プログラムを
記述することに特化した言語があってもいいのではないか。
そんな事を思うようになったのは、
Rubyistにはお馴染みの
irb

druby
を頻繁に使っていたからかもしれません。

NEPL ≒ irb + druby + Erlang + Sandbox

今のところ、open な druby サーバに対して irbで接続しに行くというのが、
一番それらしいものが得られる方法だと思います。
しかしながら、openなdrubyサーバを用意するのは非常にリスキーです。
ErlangのActorモデルや、エラー処理に関する哲学が参考になりそうです。

NEPL処理系が実現すると、
ソフトウェア開発のスタイルが大きく変わるのではないかと思います。

  • ソースコードを書いて、リポジトリにコミットするのではなく、
    NEPL処理系に接続し、irb的なshellからActorを登録する。
  • 仕様をActorの評価関数(計算機リソースの割り当て比率を決める)として定義する。
  • バグを見つけてソースコードを修正するのではなく、
    バグを定義してActorに対する罰金(ペナルティ)を課し、終息させる。

何かとりあえず動くものを形にしてみるべきですね。
$SAFE = 4なrubyとdrubyをベースにするか、
JavaScriptを使ってやるか、そのあたりを考えています。

See Also

posted by genki genki on Sun 2 Mar 2008 at 17:40 with 8 comments

以前のブログで大量のSpamコメントに困っていた経験から、
コメントを付ける機能をなくしていたのですが、
OpenID認証によってコメントを付けられるようにしました。

RestfulOpenIDAuthenticationプラグインに、まだ若干バグがあるようで、
一部のIdPでは正しく認証できない事があるようです。
その際は、Twitterで@takiuchiにご連絡いただければ、
プラグインの実装の改善に役立てさせていただきます。

よろしくお願いいたします。

posted by genki genki on Sun 2 Mar 2008 at 09:49 with 5 comments

Skypeチャットが便利なので各所で使っているのですが、
P2Pである制約上、最低2人のユーザが同時にオンラインになっていないと
メッセージが流通されないという問題があります。

Chatルームの中で自分だけがオンラインの場合、他の誰かが
オンラインになるまで自分が発言したメッセージは、ローカルに
保持されて伝達が保留されてしまいます。
そのため、AさんとBさんの二人しかいないChatルームの場合、
Aさんが発言した後にオフラインになり、その後Bさんがオンライン
になったとしても、Aさんの発言はAさんのPCに保留されたまま、
Bさんには届かないことになります。

この問題を解決するために、僕は1台のPCでSkype botを常時起動しておき、
自分が使っているOpenChatに参加させています。
こうすると、誰かが一人でもログインしていれば、ボットとあわせて必ず
2人以上のユーザがオンラインになっている状態を保てるので、
すべてのメッセージが滞りなく流通するようになります。

というわけで、誰でも参加できるようなOpen Chat
(会話の内容が知られても特に困らないようなもの)をお使いで、
参加メンバーが少ないため、常時2人以上のオンラインメンバーを持つ事が
難しいChatルームをお持ちの方のために、
SkypeBotアカウントを提供いたします。

SkypeIDは skype.s21g です。
適当にChatに突っ込んでいただければOKです。
Mac miniのアップデートをしている時以外は常時立ち上げています。

posted by genki genki on Sat 1 Mar 2008 at 11:23 with 0 comments

jRails
プラグインは、RailsアプリケーションのデフォルトJavaScriptライブラリである
prototype.js
+
script.aculo.us
の環境から、
jQuery
を使うようにするためのRailsプラグインです。

プラグインをインストールする方法は、通常のRailsプラグインと同様です。

sh>>
% ./script/plugin install http://ennerchi.googlecode.com/svn/trunk/plugins/jrails
<<sh

インストールすると、jQuery関係のJavaScriptファイル郡が
public/javascripts以下にコピーされます。

あとは、jRailsプラグインがRailsのJavaScriptヘルパーをjQuery対応に
してくれるので、そのままRailsアプリケーションを開発することができます。

当然ながら、prototype.jsやScript.aculo.us固有の関数は
利用できないので、既存のRailsアプリケーションをjQuery対応にする場合は、
そのあたりに注意が必要です。

See Also

posted by genki genki on Sat 1 Mar 2008 at 10:51 with 0 comments

どうもこの辺のエラーが出ていて困り中。

err

VC++2008 Expressで開発しているのだけれど、
ActiveScriptRubyをBuildしてる環境とバージョンが違うようだ。
もう少し様子を見ようかな。

posted by genki genki on Fri 29 Feb 2008 at 18:29 with 0 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
railsお知らせblogmemoopenidjspluginrubythoughtstipseventcgnewsreportservicesmalltalkswftestレポート20
Comments rssrss
瀧内元気 瀧内元気: MacOS版は以下にあります genki/ViMouse 01/16 05:40
dsjf dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これでも出... 01/08 23:23
瀧内元気 瀧内元気: おお、チェックしてみます。thx! 12/24 05:23
overisland overisland: Reeder for iPhone もこの UI を実装していますね。 12/24 05:13
瀧内元気 瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 http:... 12/01 12:20
tkawa tkawa: http://devcenter.heroku.com/articles/rails31_herok... 12/01 10:47
瀧内元気 瀧内元気: どもー。いまはgithubに置いてあります https://github.com/genki/irb... 07/10 08:31
ともち ともち: こんにちは! すばらしいプログラムをありがとうございます。しかし、merbiのドメイン、切れているみ... 07/10 02:30
Services from s21g
MagicBag
MagicBagは、Cloudflare R2やS3互換ストレージをMacのFinderから扱えるファイル同期クライアントです。
アンテナショップめぐり
東京にある全国のアンテナショップ、イベント、特産品を地図や条件から探せるサービスです。
YOMU Web小説リーダー
YOMUは、Web小説の読み上げに特化したiPhoneアプリです。
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
jotter.meは、考えやアイデア、情報を書き留めるためのノートサービスです。