トップ «前の日(09-26) 最新 次の日(09-28)» 追記

2003-09-27

_ Apache の ServerTokens

で、HTTP ヘッダの応答文字列を”抑制”できるらしいけど、明示的に FreeBSD と表示することはできないんだろか。

Tags: Web Tool

2004-09-27

_ 赤カラムーチョ

韓国風キムチ味

「当社調べ」によると、辛さ指数は

12345(辛い)
カラムーチョ赤カラムーチョ

になっている。期待。

辛い。いやマジ辛いです。いい。

でもこの5段階は絶対後付けだよな。

Tags: 日々 Food

_ スリースカンパニーから連絡が来た

びっくりした。

何かと思ったら 7 の Trial を落とした日本のユーザーの情報を inspiration, inc. から入手したので連絡したとのこと。内容は日本語ユーザーのために inspiration, ins. は v.6 のサポート継続を表明しているという話なんだけど、OS X 使いとしてはちっとも嬉しい話ではない。7 が日本語化される話以外は嬉しくなんかないですよ。

OmniGraffle が Windows 対応するってのはあり得ない話だし、インスピレーション以上の操作性のものは未だかつて触ったことがない。ニッチな市場なのかもしれないが、この日本語アイディアプロセッサ&ドローの不毛な状態はかなりつらい。誰かが REAL Basic とかでもいいから一から作ったらいきなり市場をリードすることだって可能だと思うんだけどなぁ。

Tags: 日々 Tool

_ ようやく Firefox 1PR 日本語版

Mozilla Japan、Firefox Preview Release 日本語版を公開 (Mozilla Japan)

ま、9月22日の話なんですが。予想通りずいぶん動きが鈍くなりましたなぁ。

Thunderbird とか他のプラットフォームとか、とにかく全力でやってくれないものか。何しろモノはとっくの昔にできあがってるはずなんだから。Mozilla Japan は金と時間を無駄に食らっているなんて言われないようにね。

Tags: Web Tool

_ ボールペンのインクがなくなった

5年くらい前? もっと前? から使っているボールペンのインクがなくなった。ちょっとかっこいいかなぁと思って買ったがすぐに書き味がイマイチということに気づいて、中身を見たら100円ボールペンと同じやんけーとショックを受けつつ使っていたシロモノ。これ、それなりにちゃんとした替え芯を使えるものなら替えようかなとも思うんだけど、そういうのはどこで聞けばいいんだろうか。文房具の専門店なんかこの辺で見かけないし、やっぱ文具店併設の本屋か?

つーか替え芯てなんでもいいのかな? サイズにさえ規格があればそんでいいような気がするんだけど。

Tags: 日々

_ 「安全なIEは、XPへの有料アップグレードで」

from CNET Japan

なんかスラドでぷちぷち祭りが起きてるけど。

前から決まってたことをくり返し述べただけだし、そもそも IE 6 が正式にサポートされてる現役 OS に 98 とか me とか入ってないんだし、騒ぐほどのことじゃないような。

単に MS ネタで騒ぎたいだけの人がやっぱスラドにはたくさん居るってことですか。

サポート対象サービスパック (microsoft.com)

前はもっと分かりやすく書いてあったのにな。一緒くたになってめちゃくちゃ見にくくなった。要するに 98/me は金払ったやつだけサポート対象、2000 はまだイケる。NT Server が年末で終わる。現実的にはそれほど大きな違いはないと思う。


2005-09-27

_ Hundertwasser Haus はこんな感じ。

Hundertwasser Haus

見た目に面白い写真を最優先で取り出すとこんなところ。ちなみにこの建物、普通に人が住んでいるそうですが、周りには観光客がうろうろ、ショップもあるという状態。住んでみたいがよく住めるなぁというのが正直な感想。

Tags: Photo
本日のツッコミ(全2件) [ツッコミを入れる]

_ ran [何何?オーストリアはウィーンを代表するアールヌーヴォーの代表作品とな? 日本では絶対にあり得ないデザインセンスに脱帽..]

_ wtnabe [大阪の清掃工場が彼の作品で、ヴァッサーの建築はウィーンには似合わないが大阪には似合う、という評価をしている人もいるみ..]


2008-09-27

_ rest-client が便利

さてすでに書きましたが最近 API づいております。できるだけ RESTful な API を作りたいなぁと思っているわけですが、そこで問題になったのがテスト環境。

まず、ブラウザは使いものになりません。

  1. 通常の方法では GET, POST 以外のリクエストを投げられない
  2. 通常の方法では html, xml, plain text な response body 以外は表示できない

からです。

まぁ今回テストしたかったのは read only な API なのでリクエストメソッドとしては GET, POST だけでも問題はないのですが、response が application/json だったので

毎回毎回「ダウンロードダイアログが出る -> ダウンロード -> ファイルを開く」

作業が必要になり、さすがにこれはやっとれんと思いました。

そこでまず目をつけたのは以前インストールだけしてあった Firefox extension RESTTest. 結構初期のバージョンだったけど普通に使えます。ただ、フォーカスの当たっているデフォルトのボタンが [ OK ] になっていて、何も考えずにエンターを押すとウィンドウを閉じてしまうのがものすごくイライラ。要するに連続してテストしようにも毎回マウスでちくちく [ Send ] を押さないといけない。これはダサイ。

それでもなんとかサーバ側のコードを書く方が優先なのでちくちくやってました。とりあえず基本形ができたところでマシなテストツールを探します。

まずは RESTTest の最新バージョン。なんか addons.mozilla.org にログインが必要とかぬかし始めている。もうその段階で却下。できれば自動化したいので Ruby で書かれたものがいいなと思い、rubyforge を rest で検索して探します。で、なんとなく目をつけたのは以下。

それぞれ適当に試したのですが、

rest-client は irb を利用したテストが可能というところに強く惹かれました。

使い方は以下のような感じ。(今回試したのは 0.7)

$ restclient
irb> RestClient.get( 'URI' )

これで response body が画面上に現れます。例えば body が JSON の場合は*1

require 'json'
$KCODE='u'

しておいて、

irb> JSON.parse( RestClient.get( 'URI' ) )

すると目視チェックが可能になります。さらに

require 'pp'

しておいて

irb> pp JSON.parse( RestClient.get( 'URI' ) )

すればインデントもバッチリ、とても確認しやすいです。これはブラウザをそのまま使っていたときよりも RESTTest を使っていたときよりもずっといい。

XML の場合は require 'hpricot' して

irb> doc = Hpricot( RestClient.get( 'URI' ) ); puts doc.search( '//item' )[0]

なんて風に使えます。

もちろん irb なので Readline が効いていれば履歴をたどって何回も同じテストを実行しやすいです。

ヘッダが見たければログを設定

rest-client はデフォルトではヘッダの情報は取れません。ヘッダの情報がほしい場合は

irb> RestClient.log=DEST

としてログを取得する設定をします。DEST は

  • ファイル名
  • stdout
  • stderr

が指定でき、stdout にした場合はそのまま irb 上に表示されます。

しかしここまでやっても実は取れる情報は

  • status code
  • Content-Type
  • Content-Length

くらいのもので、例えば Last-Modified などは取れません。つまり、現状では cache が絡むような凝った client は rest-client では書けないということです。

また status 200, 201, 202, 301, 302, 303 以外は例外が上がるので、例えば

RSpec などと組み合わせてテストコードを書こう

とする場合はその辺をうまく拾ってあげる必要があります。

認証の必要なリソースのテスト

RestClient::Resource を利用します。

irb> r = RestClient::Resource.new( uri, user, password )

でリソースを作って、

irb> r.get

やら

irb> r.post

なんて風に使います。

ヒストリで右往左往

上で irb なので履歴を利用して同じテストを何回でも試せると書いたばかりですが、実は irb は標準では history をログに落としてくれないので、起動するたびに履歴は忘れてしまいます。しばらくこのことを Twitter 上でブータレていたのですが、現在のところ以下の動作を確認しています。

  1. irb/ext/save-history を使う方法はリファレンスに 1.9 feature と書かれているが 1.8.4, 1.8.5 で問題なく動いている
  2. restclint 実行ファイルを呼び出した場合は 1 の方法も rlwrap*2 をかます方法も使えない

ということで、結論としては

restclint 実行ファイルは利用せず、irb のプロンプトから require 'rest_client' してテストを行う

という形がベストのようです。いろいろ直接、間接に教えてくれた walf443 さん、eban さん、ありがとう!

なお、現在の自分の .irbrc は以下の通りです。

require 'irb/completion'
require 'pp'
require 'time'
require 'date'
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 1000
$KCODE='u'

シンプルなもんです。これで require 'rest_client' を打てばすぐいけます。

まとめ

rest-client は API の開発に実に便利に使えそうです。今のところ自分の使っている範囲では cache 周りを除いては特に不満はありません。

またこれを利用すれば response body を Ruby の文字列として自由に加工可能なので、これまでブラウザ上で print デバッグしていたようなケースでも便利に使えることが分かってきました。例えば長過ぎる文字列をぶった切るとか HTML の一部を抜き出して確認するなんてことが比較的簡単に行えるので効率がいいのです。泥臭い print デバッグでも目印さえつけておけば rest-client + Hpricot 辺りでかなり楽できます。*3そしてそれが Terminal だけで、つまりほぼキーボードだけでテスト可能なんてステキな話じゃないですか。

実は 「rest test」で探していたときは全然見つからなかったのですが、「rest client」で探すと Java のものとか Python のものとかいろいろ見つかりました。もしかするともっといいツールがあるのかもしれません。探すってやっぱ難しいですね。思いつかない言葉の組み合わせでしか見つからない情報は見つけられない -> 自分にとっては存在しないに等しい、って感じになっちゃう。

cf.

RestClient は 0.9 でヘッダが取れるようになってた

Tags: Ruby Web

*1 restclient 自身が rubygems でインストールされているのでいきなり require 'json' で ok です。

*2 rlwrap は readline が有効になっていないアプリで readline が使えるようになり、さらに history log も作ってくれる超便利なツールです。ただし irb で使うためには irb --noreadline と組み合わせないとたぶんおかしなことになるうえに、irb/completion が効きません。tab の動作が rlwrap 側に奪われてしまうからだと思います。

*3 本格的にブラウザを使ったテストの自動化には Selenium や WWW::Mechanize などを使う方がよりよいと思います。