rack-block という Rack Middleware をリリースしました

ついさっきリリースしました。検索ボットなどのアクセス避けに使えたりします。

使い方はREADME.md、もしくはspecを。あとでちゃんとドキュメントすると思います。

内部は(まだ)いろいろ凄いので、あんま突っ込まないでください……

では、メリークリスマス!!

 

.rb勉強会(第1回)参加しました

facebook でつながった(ソーシャル的常套句)人たちとルッビーの勉強会をやり、僕は僕の妄想的な主張を形にして発表したりしました。

.rb勉強会資料 – はじめる! Ruby de Web 開発

「またいつもの主張かよ~」 と思う向きもありそうなんですが、割と好評だったようで大変うれしく思いました。あと、「Sinatra楽しい!」と多くの人に言っていただけたのはよかったです。

ツッコミがあったので、補足すると、 Java は Rack 等の登場以前からJavaサーブレットのような技術でアプリケーションとサーバの抽象化を行っています。ただ、 Rack の方がよりシンプルになっていて、かつ動的型である Ruby(きっとPython/Perlも) の特徴に見合った実装になっていると思います。 PHP の場合は会場でも意見があったとおりそもそも Web 専用なので特別に WSGI/Rack 的なレイヤーを切り出していないということなのでしょう(2011/12/21 14:31)。

会場の Jelly Jelly Cafe 自体もかなりカオスで面白かったです。もっと時間をゆっくりとってもくもくしたりもできれば楽しそうだな~とか思ったりもしました。第2回に期待です。

 

AOP はよく分からないが Module#method_added がクールだと思う

Time to Read

3分

Groovy クラスタなので、こういう記事を読んだ。で、最後の方に Ruby その他について言及がある。

Groovyが趣味に合わないという方の場合、好きな動的言語で上記の例を再実装することが可能です。例えばRubyでは、invokeMethodではなくmethod_addedフックを無効にすることが可能です。“method_added”は、新しいメソッドがクラスに追加されたときに呼び出されます。メソッドがObjectに追加された場合、alias_methodを介してbefore、after、aroundアドバイスを挿入する実装のため交換し、プロキシすることができます。かつてすべてのWeb開発者を悩ませたJavascriptですら、AOPが容易に実装できる強力なイディオムを備えています。AspectJ(サイト・英語)というそれ用のフレームワークも存在するのです。

でも、僕は正直 Module#method_added を使ったことが無かったので、ちょっと調べてみましたよ、と。

Read the rest of this entry »

 

Rack Middleware たちがどのように呼ばれるかを見てみよう(e.g. Sinatra)

Time to Read

3分

Sinatra::Base.middleware

そもそも、 Sinatra::Base を継承したクラスには、クラスメソッドとして Sinatra::Base.middleware が用意されており、明示的に Sinatra::Base.use で利用を宣言したミドルウェアはそこから一覧を取得できる。

ところが、 Sinatra アプリケーションが実際に Rack でホストされ、アクセスされる際には、 use で宣言していないミドルウェアもたくさん呼ばれるわけで。その全貌が知りたい場合。むろん、 Rails、Ramaze、Camping といった Rack に対応したフレームワークならば同じような方法で「中を覗く」ことが可能なはず。

set_trace_func を使ってみる

Read the rest of this entry »

 

Ruby Advent Calendar 2011 / 2日目 – almost-sinatra.rb の深淵を覗く

Time to Read

15分

初めましての方は初めまして。近藤うちお(@udzura)です。 Sinatra ベースのフレームワークである Padrino framework の日本語サイトを管理したりしています。

Ruby Advent Calendar jp: 2011 2日目である今日は、 Sinatra 主要コミッタである rkh が、わずか 8 行で実装した Sinatra クローン、「almost-sinatra.rb」を読み解いたりして、2日目にして一気に読者を置いてけぼりにしたいと思います(1日目はこちら – “Coffeescripting with Ruby”)。

RedBull(できれば複数本)の用意を推奨します……

Read the rest of this entry »