Content-Encoding: deflateなHTTPレスポンスを作る

投稿者 akira 2010-03-11 07:26:00 GMT

Content-Encoding: deflateなHTTPレスポンスを返させる簡単な方法はないかなと探してみたらRackがサポートしていた。どうやるかというと:

use Rack::Deflater

これだけ。ruファイルに書いておけばよい。発端がちょっとしたテストのためだったので、内容はなんでもよく、とにかくdeflateで返してくれれば十分というわけで、こんなのを書いて目的を達成できた:

module Rack
  class Foo
    def call(env)
      r = Response.new
      r.write "abc123"*100
      r.finish
    end
  end
end
use Rack::Deflater
run Rack::Foo.new

実際にアクセスしてみるとこうなる:

$ ruby -r open-uri -e 'open("http://localhost:9292/"){|h| p h.read}'
"abc123abc123 ...(略)..."
$ ruby -r open-uri -e 'open("http://localhost:9292/", "Accept-Encoding"=>"deflate"){|h| p h.read}'
"\355\3011\001\000 ...(略)..."

2009年のまとめ

投稿者 akira 2010-01-02 13:00:00 GMT

自分以外の誰も読まないとは思うけど、というよりも読むまでもなさそうです。自分のための記録用。

まず、このサイトの状況から。サイト全体のページビューは81,570だった。そのうちの65,745が日記分で、これらは2008年とだいたい同じ。あいかわらず検索エンジンからのアクセスが多く、直接アクセスは全体の1/4ほど。検索エンジンはgoogleとyahooでほぼしめられていた。割り合いは昨年から変化があってgoogle:yahooがおよそ2:1。(なお3月の半分以上くらい、手違いで集計されていなかった。)

2009年の記事の中でアクセスの多かった順に並べると次のようになる。

  1. 海のエジプト展
    観に行ってきて、わかんないところや、うまくまわれなかったところもあったけど、それなりに楽しめたという内容。期間が限られた大きめのイベントだったからアクセスが多かったのだろうと思う。

  2. 意外と良かったHandpresso(ハンドプレッソ)
    こんなにアクセスがあったのは意外だった。ハンドプレッソはなかなかよくて今もちょくちょく使っている。エスプレッソマシンを常設しているような家には不要だけど、時々・手軽になら、場所いらず・準備いらずでおすすめ。ポンピングも何度かやるとコツがわかってそんなに大変ではなくなる。

  3. 「プログラミング言語Ruby」を読まなくてもよいのは誰か
    本を読んだという内容。タイトルはその時期、一度こんなふうなのをつけてみたいと思っていたから。

  4. adjtimexによる時計の調整
    時計の調整は、必要になるにしてもごくたまに。忘れたころに困ったことが起きる。で、実際に困ってしまったときの記録。ntpでもダメなときに。

  5. Capistrano、sudoとrunと:env
    Capistranoのsudoとrunという二つのメソッドの動作上の違いについて。わりと重箱の隅。

  6. 日本大通りに蜘蛛が出た
    エジプト展と同じで期間限定のイベントにからむ。クモはすごかった。本イベントは、自分としては楽しんで見てまわったけども、前評判と比較するとどうしても…… というのはたしか。だからといって前市長をせめてもー、とも思う。

  7. 二代目LED読書灯
    トラブルで画像を失ってしまってそのまま。撮り直そうと思っているのだけど、けっこうめんどうなのでなかなかできず。新しく買ったLEDライトは時々明るすぎると思うこともあるけど、よい具合いで気にいっている。土台しっかりで安定しているのも地味に良い。

  8. 最近のsudoと環境変数
    sudoでの環境変数の扱いが変わっていたことに気付いたという話。

  9. いいとこ見付けた - Caffe di mare
    横浜元町に新しくできたエスプレッソがおいしいお店。小さいお店だけども一階・二階での完全分煙だというのも含めておすすめ。ここのところ外出自体が少なくてなかなか行けないけど、ぜひまた行きたい。

  10. 桜まつり - 弘明寺〜黄金町
    弘明寺から歩いたよという話。そしてコーヒーに縁遠かった一日の記録。

2009年よりも前のものも含めると、書評の書き方がトップに、VMware上のLinuxにシリアルコンソールで接続するが四位にが入ってくる。どちらも多の人の記事をひいているだけに近いもので、ちょっと申しわけない気分。

一年を通してふりかえってみる。昨年頭、一番に考えていたのは英語と文章の力をつけることだった。だが、どちらについても何をするということもなく過ごしてしまった。まとまった文章を書いたのはWEB+DB PRESS Vol.50だけ。調査から力を入れたものの、少し外していたかもしれないと後で思った。テーマをとらえられていなかったろうか。

続いてあげていたのがイベント参加だが、これは実行できた。とちぎRuby会議とRuby会議。とちぎRuby会議ではしゃべる機会をいただけた。イベント、とは少し違うが、Debian Ruby 1.9会議をできた。個人的には、パッケージを使ってもらえているというのを知れたのは本当によかった。パッケージメンテナンスについてはへこむことの方が多いくらいなので。ただ、ToDOをこなすにあたっては、いろいろと状況・前提が変わってしまったりもしたとはいえ、ぐだぐだになっている部分もあるのを反省しなければならない(gem to debは今でもやりたいなと思ってはいる)。一方で、勉強会をやるやるいって結局はやらなかった。形について考え過ぎていたかもしれない。ともかく一度やってみて、とは思っていたのだけど次に挙げることともからまってうまくいきおいをつけられなかった。

もしかしたらあるかもしれないと考えていた仕事の変化は、なかった。ただその周辺でわりとショックをうけるようなことがあって、ある期間ひきずり続けていた。この影響が仕事以外の生活全般にもれ出てしまった。一つの出来事によるものとしては久しぶりのつらさを味わった。

その他、カメラ知識をもう少しなんとかと思っていたけれどダメだった。というか忘れていた。アレンジコーヒーは手を出したいと言いつつ手を出せず。レシピ本を立ち読みすることすらしていない。マッサージなどを定期的にというのは後半ある程度できた。デジ一は買った。買ったけど使う機会がほとんどないままずるずると。何だか忙しい。

本はムラがあったけど読んだ。中盤あたりでは読み返すことも多かった。新たに出会ったのは、まず、山本幸久さんに凸凹デイズで。仕事をしている誰かを描写されることが多いようで、その後、既刊のいくつかと、新刊を読んだ。先日、書店の平台にミニコーナーができていて、読んでない既刊があって手にとりそうになったが、今は読めないとあきらめた。後で読む。

次に濱野京子さんとトーキョー・クロスロードから。何かかきたてられるような刺激があった。それからまんがのほうで新堂あきとさん。パーツのぱは業界ものでお仕事もの。お仕事ものについては、それなりの描写が含まれるものは基本的に好き。業界ものでもあるのであるある的にも楽しめた。シンプル ノット ローファーで衿沢世衣子さん。独特の間がおもしろくてひきこまれる。ふと読み返したくなるような。既刊には手を出せていないが、またいずれ。その他に単行本待ってました、というようなものがいくつもあった。

amazon.co.jpでの売り上げはRuby関係ばかりだった。デスクトップリファレンスが出てきているのがおもしろい。

  1. たのしいRuby 第2版 Rubyではじめる気軽なプログラミング(11)
  2. たのしいRuby―Rubyではじめる気軽なプログラミング(6)
  3. プログラミングRuby―達人プログラマーガイド(5)
  4. プログラミングRuby 第2版 言語編(5)
  5. RailsによるアジャイルWebアプリケーション開発 第3版(5)
  6. 初めてのRuby(4)
  7. Rubyデスクトップリファレンス(4)
  8. プログラミング言語Ruby(4)

ありがとうございました。

さて新年。新たに○○をという、具体的なねらいもいくつかはあるが、いいかげんなんとか英語をやっていきたい。生活面では大きな意味で転換をはかりたい。見直したいというのに近いかもしれない。やりたいことをいかに(どのように)するか、といったあたりで考えたり実行したり。

AWDwR3刊行記念トークセッション

投稿者 akira 2009-12-04 11:37:00 GMT

昨日(2009-12-03)、池袋のジュンク堂本店であったRails本の第三版[rakuten]出版記念トークセッションとその後の懇親会に参加した。懇親会に出たはいいが、油断していたら帰れなくなりそうな時刻になってしまっていて、ドタバタと逃げるように会場を後にした次第…… われながらひどい。

トークセッションではRSpecとTest::Unitの比較の中での大場さん言葉が印象に残った。assertを書こうとするとき、一度考えを止めて順番をひっくり返しているのだということに、RSpecを使うようになって気付いたそうだ。

私はRSpecについてわかってないので比較としてはわからないけど、assertを書くときのつまづくような感覚はなんとなくわかる。それが大場さんのいうソレと同じなのかは、これまたわからないのだけども。でも、なるほどそういうものかということで、RSpec関心がかなりわいてきた。

あと次の(今月出る)WEB+DB[rakuten]に、松田さんによるRails3記事があるということだった。タイムリーでよいなあということで期待。

懇親会では、えにしテック島田さん、万葉jugyoさん、でじたまコンピューター朝倉さんと、なんだろう、仕事の話とかいろいろを聞いた。途中からigaigaさんにも話を聞けた。大変興味深い。オーム社の森田さん、鹿野さんからもいろいろ話を聞けた。ネコのいる統計本を読まなくては。

Debianのruby*パッケージとalternatives

投稿者 akira 2009-10-04 02:00:00 GMT

「Bug#548917: Please use alternatives system to manage the ruby symlink」という要望を受けて、しばらく前から考えていたことを投げてみた。これまでrubyパッケージは「/usr/bin/ruby」によって「Debianの標準Ruby」を提供してきた。これを止めてはどうかという提案である。

「/usr/bin/ruby」はDebianにおいて、Ruby関係の安定したパッケージングのために必要と考えられてきたものだが、Ruby 1.8.xしかなかったこれまではそれほど目立つものではなかったようにも思う。ところがRuby 1.9.xの時代になり、バージョン間の互換性に注意が向くようになった。そのおかげで互換性レベルが作られた。加えて、JRubyなどの別実装のRubyがいくつも開発され、パッケージとしても提供されてきている。

ここにきて問題なのは標準のRubyというものが決められないのではないかということ。ごく個人的にはMRIがそうだとは思うのだが、仮にそう言ってしまってかまわないとしても、それは1.8なのか1.9.1/1.9.2なのか。Ruby 1.9.5あたりがリリースされたころにはどうなるのか。もっといえば1.8でも1.8.6なのか1.8.7なのかという人だっているかもしれない。

こうなると決めるのは無理なので「/usr/bin/ruby」をalternativesにしてしまってはどうか考え始めていた。同様に「/usr/bin/ruby1.9」についてもalternativesとする。ただし「/usr/bin/ruby1.8」はこれまで通り。この案を実施するには以下のような変更が必要となる(jruby*の様子はよく知らないので触れていない)。

Rubyパッケージの構成変更案
  現在の内容 変更新の内容
ruby

/usr/bin/rubyを提供
ruby1.8に依存

/usr/bin/ruby*を提供しない
各時点での最新Rubyパッケージのどれかに依存(*1)

ruby1.8

/usr/bin/ruby1.8を提供
alternativesなし

/usr/bin/ruby1.8を提供(変更なし)
/usr/bin/rubyへのalternativesを登録

ruby1.9

/usr/bin/ruby1.9を提供
alternativesなし

/usr/bin/ruby1.9.0を提供
/usr/bin/ruby1.9と/usr/bin/rubyへのalternativesを登録

ruby1.9.1

/usr/bin/ruby1.9.1を提供
alternativesなし

/usr/bin/ruby1.9.1を提供(変更なし)
/usr/bin/ruby1.9と/usr/bin/rubyへのalternativesを登録

 (*1)については今のtestingなら「Depends: ruby1.9.1 | ruby1.8 | jruby1.1」のようなものを考えている。Ruby 1.9.2がリリースされたら「Depends: ruby1.9.2 | ruby1.8 | jruby1.1」のようになる(そのころにはruby1.8は抜けるかもしれない)。

lenny→squeezeなどの移行についてはおそらく問題ないのではないかと思う。実際にやってみないとわからないが。rubyパッケージをインストールしていたとすると、新たにruby1.9.1パッケージが加わるが、それによりruby1.9パッケージがなくなるわけではない。/usr/bin/ruby1.9へのalternativesの優先度が難しいが…… postinstでがんばるか、パッケージ的に妥協するかだろうか。

最初に触れた通り、これまでパッケージ作りにおいて「/usr/bin/ruby」を一般的なパスとして使うことができたが、この案を実施するとそうもいかなくなる。特定のRubyインタプリタを指定するのが推奨される。十分にメンテナンスが可能だとした上で「/usr/bin/ruby」を使うこともできなくはないが、よほど小さなパッケージでなければ難しいだろう。

ただ、そうはいうものの、Ruby 1.9.xについては互換性レベルがあるわけで、これをうまくすくいとりたいという思いもある。そこでパス名が適当かどうかはともかくとして「/usr/bin/ruby-compat-」といったインタプリタへのsymlinkも提供し、これをパッケージングに使えるようにしてはどうだろうかと考えている(これ自体はalternativesにそぐわないと思うので、どういった形で提供するのか悩ましいが)。

Ruby 1.9.2の延期とDebian/squeeze

投稿者 akira 2009-09-24 10:46:00 GMT

@takahashimさんによればRuby 1.9.2はRubySpecオールグリーンにしてからリリースすることに。そのためリリーススケジュール見直しへとのこと(ruby-core:25707)。

Debianの次期リリース(squeeze)には1.9.2が入るといいなと思いつつ、でもリリースのタイミングからいって難しいだろうなと考えいたが、このスケジュール見直しで1.9.2の線はなくなったといえる。ある意味わかりやすくなった。

一方で、Ruby 1.9.1にバグが見付かった場合のことを考えなくてはならなくなった。あまり独自にパッチをあててしまうと後で困るとはいえ、影響の大きなものには対処していきたいところ。たとえば、Regexpの「\d」の解釈の変化のようなものは必要に違いないと考え、Debianパッケージではパッチを用意している(リリースはこれから)。

他にも何かあるかもしれないし、これから出てくるかもしれない。対処が必要そうな修正や変更があったらBTSを使って知らせてもらえるとありがたい。直接声をかけてもらうのでもいいけれど。どうしても取捨選択することにはなるけれど、リーズナブルなものについては努力するつもり。

Debian Ruby 1.9会議を終えて

投稿者 akira 2009-07-07 12:31:00 GMT

この前の日曜日、Debain Ruby 1.9会議を無事に開催することができました。

最終的な参加人数は10人。三時間みっちりと議論を行えました。当初の予定を大きく越えて、なかなかに深い話ができたと思います。あまり単純化して考えてもいけないかもしれませんが、人が集まるというのは得るものがたくさんあります。

実のところ、参加した人々に満足してもらえるような話題を用意できるのかかなり不安でした。そもそもがごく奥まった狭いところにしぼった集まりあったわけで、参加する人には何らかの期待があるとして、 それに応えられないのでないかと思っていました。しかしやってみればそんなことはなく、考えいたよりもスムーズに、かつ広がりを持ちつつ議論を進められました。意見交換ができればまずは十分、なんて言いながら始めたのが信じられないくらいです。

議論そのものがよい感じで進んだのはもちろんですが、 ToDoがいくつか出来たのはよかったです。Ruby開者のcoreチームから参加していただけたのもずいぶんと話を進められた要因だと思います。 Debianパッケージメンテナンス的にはかなり重要な情報もいただけました。

今回の内容はなるべく早いうちに何かの形にまとめる予定です。もちろん手を動かしていくこともします。

というところでちょっと反省点を。

石川町駅からの会場への道順の説明で「川があるから〜」と書いていたのですが、実際に歩いてみると大通りがあって川なんて見られませんでした。気付いたのは当日。なまじ地図が頭に入っていたせいで失敗しました。気を付けねばなりません。

しゃべっている間のメモ取りは難しいです。 録音しようかどうしかう迷って、 結局は録音しませんでした。でも、したほうがよかったかも。ああしよう、こうしよう、というのもあったのですが、なかなか思う通りには。

最後に、参加されたみなさまおつかれさまでした。 そしてありがとうございました。 まとめ作業などでもう少しお付き合いいただくことがあるかと思いますが、どうぞご協力ください。また、個人的にはパッケージメンナンス作業に対して弱気になることがままあるのですが、今回、いろいろな話を聞くことができかなりはげみになりました。

(蛇足: 事前に最も不安に思っていたのは、実は茶菓子だったりします。甘いものが苦手な人やコーヒーを好まれない人もいるかもしれないし…… そもそも好みに合うものやらどうやら…… などなど。幸いおおむね気にいっていただけたようで、ほっとしています。)

リンク

Debian Ruby1.9会議の詳細のお知らせ

投稿者 akira 2009-06-20 10:19:00 GMT

先日お知らせしたDebian Ruby1.9会議の開催日時と場所が以下に決まりました。

参加される方へのお願い

参加される方との連絡・情報交換のためにGoogleグループに場を設けています。ATNDで参加登録された方は、私(akira.yamada gmail.com)まで以下の二点をお知らせください。

  • 登録するメールアドレス
  • ATNDでのユーザ名

Debian Ruby1.9会議のお知らせ 2

投稿者 akira 2009-06-04 13:20:00 GMT

きたる2009-07-05(日)にDebian Ruby1.9会議を開催することになりました。Debianにおける主要なRubyパッケージ開発者のうちの実に二名が参加することが決定しています…… とか言っても、お気付きの通り、そのうちの一人は私です。

今回の開催はRubyパッケージやRubyGemsのパッケージの開発者であるdaigoさんから声をかけていただいたのがきっかけです。現在、構成変更などの議論を進めている関係で、Debian/sidにおけるRuby 1.9のパッケージのリリースが遅れています。その状況を改めて確認し、解決しなければならないことや決定しなければならいことを話し合い、物事を先に進めていこうというのが主旨です。

かなり奥まったところにある話題なので、興味を持つ人は限られるかもしれませんが、話を聞いてみたい、意見がある、パッケージ開発者を見てみたい、といった方がおられましたらご参加ください。Debian Ruby1.9会議の参加登録はATNDで受け付けています。

開催地は川崎〜横浜のどこかになることが決定しています。ただし具体的な会場などは未定で、二人以外の参加者がどれくらいあるかに応じて会場を確保したいと考えています。

私個人としては、参加者がある程度集まって、時間に余裕があるようなら、おまけ的にRuby on Debian談義をするのも悪くないかなと思っていますが、これは単に思い付きレベルの話で未定です。(それにしても奥まった話題のような気もしますが。)

とちぎRuby会議01に行ってきた 3

投稿者 akira 2009-02-21 13:54:00 GMT

迷った迷った。直前まで行こうかどうしようか迷った。が、行ってみて良かった。

この手の集まりに行くのはほんとうに久しぶり。久しぶりの参加が新幹線に乗っていくことになるとは我ながら驚きなんだけれども、ともかくいつもよりも早起きをして、寝過ごさないことだけにひたすら集中して移動した。車中では迷いの元であった原稿をパチパチとはじいたり。

とちぎRuby会議は二部構成となっていた。一部は原さんとごとけんさんによる招待講演とLightning Talksが行われ、二部は定期的に開催されている勉強会toRubyの特別版が行われた。

原さんは「博士の愛したRubyと数学」で、いかにRubyを身体の一部として使ってきたか、使っていくか、そしてその経験から未来のRubyの姿を予想するという内容だった。「未来にはもしかするとグローバル変数がなくなるかもしれない。その分クールになった。『むかしは良かった、グローバル変数なんてのがあってね』『グローバル変数を使うときにはちょっとドキドキしたもんだ』なんてことから『復刻版Ruby』が出るかもしれない!」なんて話も。

加えて、(脱線して?)ペンへの愛着についての話題がも盛り込まれていたのだが、その中であった「計算をするとき、紙との間にあるのはペン。ムキーとなってきたとき、それが良いものであることによって、投げ出すまでにあと10秒をもたせることができる。その10秒で先に進める。だから手に気持ち良いものが良い」というのが印象に残った(だいたいこのようなことだったと思う)。講演内容としては「Rubyもそのようなものに」と続くのだが、それはそれとして、ペン以外に紙やキーボードへの愛着もあるのかななんてことを思った。後で尋ねてみるのを忘れてた。

ごとけんさんは「20世紀Ruby」として、なつかしのPerl/Ruby Conferenceから現在までのごとけんさん自身のRubyとの関わり方をベースにした、Rubyをどう楽しむかというお話だった。思いがけずなつかしい名前が出てきてうんうんとうなずきながら聞いていた。WEBrickもさることながら、leakproxy.rbにはずいぶんとお世話になったなあ、なんて。

toRuby特別版ではdRubyを使ってみなでつなぎあってみるというのが行われた。無線LANのトラブルがあったりもしながら、あらかじめ用意されたサーバに接続するだけでなく、各人のPCに対して接続しあうなどできていたようだ。MS-Windowsだとうまく動かなかったり、1.9.1だと動作がおかしいかもしれないという話が出たりと、必ずしもすんなりとはいかないようだったが、終わるころにはみなそれなりに動かすことができたようだったし、時間中はなごやかな雰囲気であったこともあり、参加者はみな楽しめたようだ。やはりつながって動くものを目の前にすると楽しい。

私はというと、OS X上のmacportsで1.8.7と1.9.1を用意しておいたのだが、自ホストのアドレスを逆引きできないせいか(追求してない)DRb.start_serviceで例外が上がるなどして少し手間取った。自アドレスを明示することで例外を避けられたし、1.9.1では例外が上がらなかった。

その後、会場の片付けを少し手伝って、懇親会の会場へ移動。電車の時間を早めにしてしまったので途中あわてて抜け出す感じになってしまったが、直接にはお話ししたことのない人々といろいろとお話できて楽しかった。駅に着いてみれば時間に余裕があったので、せめてちゃんと挨拶をしてくればよかったと待ち合い室のベンチで思った。

勉強会というのに興味があったので、実際に参加してみようと年初に考えたのがきっかけの一つで、こうして実際に見られたのは、少し無理してでもいったかいがあった。運営の雰囲気くらいはつかめたかな。別の勉強会にも参加してみようと思う。その上で、何かネタがあれば近くで勉強会みたいなものを考えるのにも実は興味がある。横浜〜関内駅あたりで企画したらのってくれる人はいるかしら。

toRubyの最後にKEEP-PROBLEM-TRYがあったのでなぞらえてみると、KEEP: こうしたイベントや勉強会への参加を続ける、PROBLEM: せっかくなので行きたかったカフェが営業してなかった(確認不足)、TRY: しゃべる側にまわれるようネタ出し、というところかな。

少しだけど写真を撮ってきたのでよければどうぞ: とちぎRuby会議01

Capistranoであえて非並列にコマンド実行する

投稿者 akira 2008-11-27 12:01:00 GMT

システム管理系でCapistranoを使おうとする、なんでもかんでも同時並列実行されると困るというようなことがなくもない。ちょっと考えてみたんだけど、どんなものだろうか。もう少しなんとかなりそうな気もする。

def serialize_for_hosts
  task = current_task

  hosts = find_servers_for_task(task)
  if task.options.include?(:hosts)
    save_hosts = task.options[:hosts]
  end
  begin
    hosts.each do |host|
      task.options[:hosts] = [host]
      yield
    end
  ensure
    task.options[:hosts] = save_hosts if defined?(save_hosts)
  end
end

task :bar do
  run "echo bar"
end

task :foo do
  run "echo foo start"
  serialize_for_hosts do
    run "sleep 2"
    run "echo date"
    hogehoge
  end
  run "echo foo end"
end

某メモより。