2008年2月アーカイブ

"Time Capsule"届いた

無線のLANとプリンタ。バックアップ("Time Machine")。

ほか、何かいいことあるでしょうかね。


ParallelsのDebianが"eth0: Too much work at interrupt, status 0x01"なんて吐く様になった。eth0だから?この状態でも、Debianからインターネットにはアクセスできる。OSXとDebianとでpingも通る。DebianからSSHできる。けど、OSXから繋いでいたSSHが突然切れる。繋ぎ直そうにも駄目。と思ったら、しばらくしたら(これ書いてたら)つながる様になった。

。。。?Time Machineのせいで、パケットがあふれてるとか、そういう事?

とりあえず、今日は諦める。

使えないと困る。

詳しく調べていないながら、どうも"Selenium RC"を使った方が良い様な気がしてきました。

IEでもSeleniumテストを実行したいので、Xを使う事は考えていません。本番に近い環境でアプリケーションを動かしたいので、OSXも諦めました。となれば、アプリケーション(とCC.rb)が動くサーバーと、Seleniumを叩くブラウザが動くホストは、別々にならざるを得ないと思います。

CC.rbのドキュメントに"Selenium on Rails"との連携方法が書いてあったので、出来ればこっちで解決したい(楽したい)のですが、出来るのでしょうか。

ひとまずは、"Selenium RC"の場合について考えてみました。

  1. CIサーバからCIクライアントでのSelenium Serverを起動を要請
  2. CIサーバからSeleniumドライバを使って
    1. Seleniumサーバに接続
    2. ブラウザ起動
    3. テスト開始〜終了
    4. ブラウザ終了
    5. Seleniumサーバから切断
    6. Seleniumの結果を取得・収集してCC.rbに報告
  3. CIサーバからCIクライアントでのSelenium Serverを終了を要請
  4. CC.rbのダッシュボード(やランプ)で結果を(黙視)確認

"Selenium RC"についてうろ覚えなのであれですが、多分、上記の様になると思います。

Seleniumテストをドライバを使って制御するだけなら、"Selenium RC"を使える様にすればいいだけです。ただ、CI(CC.rb)が絡んでくるとよく分からない事になります。これからの調査・実験次第ではありますが。

"Selenium on Rails"と"Selenium RC"を組み合わせられたら解決する問題なのでしょうかね?

当面は、CC.rbの導入は先送りになりそうな気配です。

CC.rbとSelenium

普通に、CUIから完結できた。
Working with Selenium -- CruiseControl.rb

特別何もせずに、ブラウザの起動、テスト実行、ブラウザ終了をながせるのがすてき。

まだ、リモートサーバのRailsアプリに対して、クライアントのブラウザでテストする方法は知りませんが。CI環境をOSXにして、OSXでクライアントとサーバをまかなえばいいのでしょうか?そうすると、Linuxサーバで運用する場合に、どうなんでしょう?

実際に使う為には、"Selenium on Rails"のconfig.ymlをどこに置いたらいいのか(プラグインのディレクトリでいいのか)とか、CC.rbのビルドタスクの書き方とか、色々と、Rails周辺の作法を知る必要がありますが、その辺は仕事で使う様になるので、そのときに調べながらやれば良いかなと思っています。

さてさて、雰囲気として、使えそうな気配がしてきましたよ。


最終的には、ランプに繋げて運用出来ればそれっぽくなりそうです。

PythonとEmacs

なんだか面白そう。 Blog at trepca.si » Python programming in Emacs

チュートリアルは付いていなかったので、インストールと設定コピーまでやっておきました。

"C-x C-f"でミニバッファに補完候補が沢山出てくるのが、今のところ楽しいです(ido.el)。今後、少しずつ何が出来るのかを試していこうと思っています。

先週末に行った社内勉強会の資料を、はずかしげも無く公開。

内容はともかく、これで勉強会復活の狼煙をあげられました。本当は、来Qからが正式復活なんだとは思うのですが、諸事情や暴発もあって、こうなりました。

しばらくはネタがないかなぁと心配というか期待して、数回は引っ張れると思ったのですが、あまりの出来の悪さでそれは取り消し。コード・リーディングの練習がてら、pythonでのOpenID実装(ライブラリ)を読む経過とかを、このブログかウィキとかに書くかもしれませんが、多分社内勉強会ではやらないと思います。

出来が悪いなりにも必死さは伝えられたような気はしています。これからも、必死さを押し出しつつ、それなりに価値ある発表ができればなと思っています。

ちなみに、社内勉強会は以前とやり方を変える予定です。以前は、各週の担当が必ずプレゼンをしていましたが、それだと結構な負担になるだろうという事で、確実に継続するために、無理せずネタが無いときはプレゼン以外の何かをしようと思っています。

プレゼン以外の何かというのをどうするかは、まだ煮詰まっていませんが、多分、どう書くとか読書会とか討論会とか、チームで盛り上がれそうなイベントを開催すると思います。ブログは出来れば毎週更新する様にしたいので、プレゼンでないときはその時に行った事のレポート(ログ)なりを公開する事になるかと。

個人的に、社外の広い世界に飛び出す勇気がまだないので、社内で鍛えておこうかと思っています。特に止められなければ、自分の経験値稼ぎに徹底的に会社を利用できる様な仕組みを作ろう、という野望で動いています(その辺を先導できそうな位置に近づいたので)。

そんなこんなで、(無茶でない)技術者支援の楽しい文化を、活性化させていこうという今日この頃です。

凄く良いと思う。

先人達の在り方(?)を、コミュニティに参加できない自分にも教えてくれたこの本には感謝です。

なぜだか、今回は歴史の話も楽しく読めました(多少興奮気味だった気がしないでもありません)。いつもは、そういう話が出てくると、退屈に思っていた気がするんですけど。

さて、この本が教えてくれた事を、色々なソースコードを読む事で消化する事が、次の目標です。

MacPortsのApache2.2.8

気がついたら、エラーで"port upgrade"できなくなってた。

問題は2つあって、db44に関するエラーとapache2自体でのエラー。

db44は、そもそも使っていない(apr-utilは+no_bdbした)ので、"-n"で依存関係は無視する様にして解決しました。

一方で、apache2自体のエラーは、portのオプションやバリアントで解決できる問題ではなさそうです。

...
libtool: compile: unable to infer tagged configuration
libtool: compile: specify a tag with `--tag'
...

どうやら、"--tag"で(ナニカを)指定しろという事のようです。Google経由で、「"--tag=CC"でいいはず」という事までは分かりました。

そこで、"port edit apache2"から付け加えようとしたものの、よくわかりません。結局、Makefileまわりをいじってみる事に。たどり着いたのが、build/config_vars.mk。

--- config_vars.mk.orig 2008-02-24 13:33:37.000000000 +0900
+++ config_vars.mk      2008-02-24 13:33:05.000000000 +0900
@@ -180,7 +180,7 @@
 EXTRA_LDFLAGS =
 EXTRA_LIBS = -L/opt/local/lib -lpcre
 EXTRA_INCLUDES = -I. -I$(top_srcdir)/os/$(OS_DIR) -I$(top_srcdir)/server/mpm/$(MPM_SUBDIR_NAME) -I$(top_srcdir)/modules/http -I$(top_srcdir)/modules/filters -I$(top_srcdir)/modules/proxy -I$(top_srcdir)/include -I$(top_srcdir)/modules/generators -I$(top_srcdir)/modules/mappers -I$(top_srcdir)/modules/database -I/opt/local/include/apr-1 -I/opt/local/include -I$(top_builddir)/server -I$(top_srcdir)/modules/proxy/../generators -I$(top_srcdir)/modules/ssl -I$(top_srcdir)/modules/dav/main
-LIBTOOL = /opt/local/share/apr-1/build/libtool $(LTFLAGS)
+LIBTOOL = /opt/local/share/apr-1/build/libtool --tag=CC $(LTFLAGS)

ひとまずはインストールが完了して、動作はしているようです。

と思いましたが、リスタートでこけました。

httpd: Syntax error on line 93 of /opt/local/apache2/conf/httpd.conf: Cannot load /opt/local/apache2/modules/mod_proxy_http.so into server: dlopen(/opt/local/apache2/modules/mod_proxy_http.so, 10): Symbol not found: _ap_send_interim_response\n  Referenced from: /opt/local/apache2/modules/mod_proxy_http.so\n  Expected in: flat namespace\n

プロキシ系は使っていないので、とりあえずコメントアウトして対応。ひとまず起動して、コンテンツが表示される事まで確認できました。

とりあえずは、ここまで。

OpenID認証2.0の概論手前な社内勉強会と、新人さん歓迎会、そして博士の送迎会。

同年入社のRuby博士が、新天地での活躍を求めて(?)今月いっぱいで退社です。入社時からお世話になっていたリーダーの時もでしたが、ずっと一緒にやってきた仲間が去っていくのは寂しいものです。

まあ、やりたい事があって、挑戦していきたいという意欲をもった人を、無理にとどめるのもあれですし、2年以上一緒に仕事をしてきた仲間なので、新しい職場でもがんばっていってもらいたいと思っています。

とまあ、そんないきさつもあり、せめて自分に出来るささやかな餞別というかはなむけというか。そんな感じで勉強会を今日にねじ込んだわけです。

大失敗でしたけどね。話がまとまってないし、適当すぎだし、伝えきれてないし。正直、OpenID認証について最悪の印象を持たせてしまったかもしれません。なんだろう。仕様を読んだだけで発表できる気になっていたのかなぁ。

とは言いつつ、はずかしげも無く、後日、会社ブログで公開します。PDFにすれば、素材の再配布という事にもならないはずなので、資料も添えての公開を予定しています(間違ってますかね?)。

今後は、もう少し突っ込んだ内容で第2回をやろうかとも思ってましたが、あまり需要がなさそうというのと、仕事の方で環境整備まわりをやる事になっているので、そちら側の調査・発表をやる事になりそうです。

というわけでして、多少立場が変わる予定の昨今です。

CI用のツールを使った事が無いので、どの辺を基準に考えたらいいのかよくわかりません。
CruiseControl.rb

  • Ruby製
  • Rails製
  • Rakeベース
  • ビルド間隔を設定できる
  • 手動でビルド実行可能
  • 結果通知を設定できる
  • Subversionで管理されているプロジェクトを対象にできる
  • きれいな画面
  • ログが残る
  • 複数プロジェクトを管理できる
  • きっとRubyで書いたらあれこれ出来るはず

上記は、少し使ってみた感じでの印象です。

Seleniumを絡めた場合はどうなるんでしょうか?Selenium on Railsとかを触った事がない(Rails自体、ほぼ触った事なし)ので、イメージできません。rakeからSeleniumを実行して、結果をCruiseControl.rbで判断してくれたりするのでしょうか?

会社で、毎朝CIの結果を確認していますが、適当なシェルスクリプトベースの仕組みを使っていて、結果も何の工夫も無いメール(テキスト)ベースなので、視覚的に結果が分かりやすいというのは、大事な気がしています。毎朝、結構めんどくさいですし。

会社の方で色々と新しい仕組みを取り入れられそうなタイミングなので、この辺も提案するだけしておいた方がいいかもしれませんね。

とりあえず、Wikiに書いておいて、CI環境を構築するあたりでRubyな人たちに考えてもらおうと思います。

Puppetを触ってみた

会社で管理するマシンが増えてきたので、Puppetがどんなものか触って確認。
連載:オープンソースなシステム自動管理ツール Puppet|gihyo.jp … 技術評論社

ひとまず、OSX(Leopard)をクライアントにして、VMのDebian(Etch)をマスタにしてみる事に。

Puppetでは、標準でpuppetユーザ(グループ)を必要とするらしいのですが、OSXではその辺に問題があるようです。ので、RubyGemで入れたものが動きませんでした。

本家のサイトのダウンロードページの"Explore the Attic"の"downloads directory"からたどっていくと、OSX用パッケージをダウンロードできるらしいです。これを見つけるまでに少々時間がかかりました。

先述の技術評論社の記事を参考に、インストール、起動確認、署名、ファイルパーミッションの変更のあたりまで、確認できました。

後は、記事を読み進めたり、何が出来るのかを本家サイトのレシピなどから探っていく感じでしょうか。

開発環境の設定を同期させるのにちょうど良さそうなので、真面目に検討したらいい気がしてきました。

というわけで、明日会社に行ったら、早速BTSに登録しておきます。


他によいツールがあれば、そっちを使うのでしょうけど。

簡単な概論にとどめる予定なので、簡単に。

タイミングが良いのか悪いのか、@ITでOpenID認証の記事が公開されてますね。
OpenID Authentication 2.0時代の幕開け − @IT

自分で作った資料よりも、この一連の記事をみんなで読み進めていった方が勉強になると思うわけですが、そこはあえて逆を行きます。でないと、成果発表できないので。

会社の人には申し訳ありませんが、人柱となって頂き、予想される消化不良には、@ITの記事や仕様の原文を参照する形で対処して貰おうと思います。
OpenIDの仕様と技術 連載インデックス - @IT -

そんなこんなで、今週末に勉強会をねじ込みました。


プレゼン用のスライドに使ってみた素材のライセンス問題が不安なので、スライド自体の公開は差し控える形になります。公開は、会社ブログにテキストベースで行います。
という自分向けの予告。折れるな、オレ。

どうやら風邪らしい

タバコのせいだと言い聞かせてきたわけですが。

おかげで、勉強会資料が手抜き気味。

明日、明後日くらいで治さないとなぁ。

ブログで書き続けた通り、今の目標は社内勉強会での発表。

ひとまず、各メッセージの詳細などは省略して、OpenIDの概要を伝えられたら良いかなと思っています。今のところ、以下の内容で資料を準備中(途中なので色々変わるかもしれませんが)。

  1. 特徴
  2. 用語
  3. プロトコル概観
  4. 実例(YahooとFastladder)
    • OP Identifierで開始
    • OP-Local Identifierで開始
    • 自分のHTMLのURLで開始
    • Yadis IDで開始
  5. セキュリティ
  6. 現状などの補足

仕様書の構成と、@ITの記事を参考にした内容にする予定です。

概要をうまく伝えられて、興味を引き出す事が出来たら、メッセージの詳細や実装などの踏み込んだ発表に繋げようかな、と考えています。

本当は、概要プレゼンに互換性の話も入れようかと思っていたのですが、どうも1時間で伝えきれるか分からなくなったので、この内容で時間が空くようなら、軽く触れようかと思っています。

という感じで、少しずつ消化していっている今日この頃。


しかし、和訳がひどい。読み返してみれば、意味がよく分からないし、嘘が書いてあるし。もし読んでいる人がいるなら、多分、普通に原文を読んだ方が早いと思います。
少しずつ修正していますが、嘘が消える日が来るのか不安です。

OAuth

ついでに読むだけ読んでおいた。

先々必要になるだろう種類の仕様なので、前倒し気味に読むだけ読んでおきました。訳をつけつつノートを取りつつで、結構時間がかかりましたが、(形としては)制覇したという事で満足です。

なんだか、最近、訳す事が目的になってきている気がします。今、最優先すべきは、社内勉強会の資料作りとかだと思いつつ、「スライドの絵が描けない」というストレスから色々と現実逃避しています。

そんな感じで、嘘訳はこの辺で品切れ(多分)。

オープンソース版Fastladder

会社の(自分専用の)雑多マシンに入れてみた。
Fastladder Open Source / Free Download

おおむね、付属のドキュメント通りの手順で動作するところまで確認できました。

FreeImage3をソースから入れたり(PPCのEtchでパッケージを見つけられなかった)、g++が入ってなかったり(Etchでのパッケージ名が分からなくて困ったり)、RubyGemsを1.0.1(だったかな?)にアップデートしてしまって動かなくなったり(0.9.4に入れ直して、他のモジュールも入れ直したり)、ちょこちょこつまづきましたが、それは許容範囲でしょう。

会社として使うかさっぱり分かりませんが、簡単に動かし始められる事が分かったので、要望があれば実現は簡単かもしれません。運用コストがどうとかは考えていませんが。

近々、仕事でRailsを触る事になりそうな気配が漂っているので、ひょっとするとそういう意味でもお世話になるのかもしれません。類似サービスを作るわけではありませんが、RailsとUIまわりの良いサンプルとなってくれればと密かに期待しています。

そんな感じで、体験だけして後回し。

理解の為の実践。

間違えて理解しているかもしれないので、ご注意ください。

今回は、RPにFastladder、OPにYahoo! JAPANを利用しました。

Fastladder(RP)に対して、自前で用意したYadis IDをUser-Supplied Identifierとして与えます(フォームに入力してボタンをクリック)。そうすると、FastladderがYadisプロトコルを使って、Yadis Resource Descriptorを探し当ててくれ、XRDSドキュメントを解析してくれます。

FastladderはそのXRDSドキュメントに対してディスカバリを行い、いくつかの情報が拾われます。ここで、今回は「OPを変更してもIdentifierを維持したい」という目的を実現する事が目的なので、"Claimed Identifier要素"が使われる様にします。

話が前後しますが、以下にYadis IDとして使ったサンプルを示します。URLは"http://lab.koshigoe.jp/identifier/"です。

<?php header('X-XRDS-Location: http://lab.koshigoe.jp/identifier/yadis_claimed-identifier.php'); ?>

このYadis ID(=Yadis URL)は、HTTPヘッダのみを返します(単純なPHPスクリプトなので、厳密にはいくつかのヘッダも含みますが)。この"X-XRDS-Location"ヘッダが示すURLは、Yadis documentの位置を示すURLです。その内容は、以下となっています。

<?php header('Content-Type: application/xrds+xml');
echo '<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
  <XRD>
    <Service>
      <Type>http://specs.openid.net/auth/2.0/signon</Type>
      <URI>https://open.login.yahooapis.jp/openid/op/auth</URI>
    </Service>
  </XRD>
</xrds:XRDS>
';

PHPスクリプトになっていますが、これは"Content-Type: application/xrds+xml"をつけるためです。他は、XRDSをべた書きにして出力しているだけです。

ここで、OpenIDの仕様をよく理解できておらずに失敗していました。それは、"OP Identifier要素"を使っていた、という事です。そのため、Fastladderが使おうとするIdentifierが、YahooのランダムなURL(OP-Local Identifier)になってしまい、どうしたものかと少々悩みました。

改めて、仕様書を読んでみれば、"OpenID Service要素"には2つの種類が存在している事が分かりました。今回の目的の為には、おそらく"Claimed Identifier要素"を使えばよいのだろうと考え実験したところ、無事FastladderがClaimed Identifier(<=User-Supplied Identifier<=Yadis ID)を使おうとしてくれました。

というわけで、無事、Yadisを使ったIdentifier維持の一例を実践しながら理解する事が出来たと思います。

「無事」とか言いつつ、見当違いで大恥かいてなければいいですがね。


今は、仕様書を読み直しつつ、プロトコル概観を軸にその流れを詳細を追いつつ、ノートに書きながら消化しようとしている所です。

ひとまず、最後まで訳をつけた。

内容に関しては、相変わらず消化しきれていません。これからOpenID認証を学ぶ中で、合わせて少しずつ消化できればと思います。

気になったので読み始めたところ。

ひとまず、最初から訳をつけながら眺め始める事にしてみました。今のところ、"7. Yadis document"の頭まで。
KOSHIGOE学習帳 - [OpenID] Yadis Specification 1.0 -- 読みメモ

6節まで訳をつけつつ眺めた結果、なんとなくYadisがどのような物かのイメージがつかめた気がします。XRIが登場してきていますが、それを横にどけつつ、今の時点での理解度をまとめてみます。

YadisにはYadis IDと呼ばれるIdentifierがあり、これはおそらくURL。そのURLはおそらくYadis Resource Descriptorを指し示している。その指し示す先には、そのIdentifier(Yadis ID)を使う事が出来るサービス(主に認証サービス)が記述されたYadis documentが存在している。Yadis documentはXRDフォーマット。

現時点では、上記の様な内容が頭の中に残っています。

それで、OpenIDについてYadisがどう絡んでくるかという事を改めて悩んでみるわけです。

User-Supplied IdentifierとしてYadis IDを与える。RPはYadis IDを受け取ってYadis documentを手に入れる。RPはさらに、Yadis documentの中から認証サービスである任意のOP情報を取り出す事が出来る。ここで、Yadis documentはXRDフォーマットな訳ですが、(XRDSとXRDの違いがよく分かっていないながら)OpenIDでXRDSドキュメントと呼ばれている物と同等であるはずです。という事で、OpenID認証の開始からXRDS-Based Discoveryまでの道筋が明瞭になりました。

さて、Yadis IDはどこで誰が提供してくれるのでしょうか?自分自身でしょうか?OPでしょうか?それとも別の何かでしょうか?

HTML-Based Discoveryにしろ、XRDS-Based Discoveryにしろ、その元になるドキュメントを誰がどこでどうやって提供するのか、仕様を読んだだけではよくわかりません。

まあ、ひとまずはOpenIDとYadisの関連がそれなりにすっきりと整理できた気がするので、進歩ありとしておきます。


最近、英語のドキュメントに訳をつけて(その上、へんてこなままで公開して)ばかりですが、仕様書は英文を英語のまま読んで理解できるべきなんでしょうかね?TOEICの参考書とかで勉強すべきかな?きっと、200点くらいは取れると思う。

OpenID認証で使われるYadisとかいうプロトコルは、早めに知っておくべきだろうか。

現状、XRIに関しては先延ばし決定。ブックマークだけしておいて、ある程度OpenIDの本筋を理解できてからでも、なんとかなる様な気がしています。

そこで、Yadisも同じ感じで良い気がしていたのですが、「1つのIdentifierで複数のOPを使い分ける(負荷分散とかフェイルバックとか)」ためにYadisを使う様なので、それなりに早めに知っておいた方がよいのか気になっています。

というのも、OpenID認証2.0の仕様書の概要で、「OPの切り替えは自由だし、切り替えたときも使っているIdentifierを使い続ける事も出来るよ」と書かれている部分が気になっているからです。

多分、気にしすぎている(変に深読みしている)だけだと思うんですが、OPに依存したIdentifier(OP-Local Identifierでいいのかな?)を自身のIdentifier(User-Supplied Identifier)として使ってしまった場合でも、使い続ける事が出来る様な受け取り方をしてしまっています。ので、Identifierを例えば自分のブログのURLの様なOP非依存なものにしない場合でも、同じIdentifierを使い続ける方法があるのか気になっています。

Yadisを気にしない場合は、OPに与えられたIdentifierを直接使わずに、適当なページにOpenIDのlink要素を埋め込んでそのページのURLをIdentifierとして使う様にする事が、「OPの切り替えに伴うIdentifierの変更」を防ぐ標準的な方法だと考えてしまって良い気がしています。

ただ、Yadisを使った場合に、よりよい方法でその辺に対処できるのであれば、気になるよな、と。ひとまずPDFをダウンロードしてみましたが、22ページという事で今やっている事に割り込ませても良さそうなボリューム。

ここまで書いたら、なんだか凄くYadisが気になってきました。勉強会の資料を作りながら、少しずつ読んでいく事にしようと思います。

というわけで、結局、早めに知っておく事になりました。


そういえば、Yahoo! JAPANのOpenIDを使う人って、yahoo.co.jpをUser-Supplied Identifierとして使うんですかね?OPを切り替える事なんて考えないですかね?別にYahooに限った話ではないですけど、何となく気になっています。

一区切り。

"OpenID Authentication 2.0 - Final"と"OpenID Attribute Exchange 1.0 - Final"を一通り目を通して、(自分に出来る最大限の直訳で)和訳をつける事が出来ました。

次は、ちゃんと消化するステップに進むわけですが、これは社内勉強会の資料を作る事を目標にやっていこうと思います。社内で「いや、いらないから」と言われても、問答無用で巻き込んで実施します。

なんとか心が折れずに1つやりきれたのでほっとしてます。


訳は本当にひどい直訳で、相当嘘訳になっています。中身を理解せずに訳だけつけたかたちなので、これから読み返しつつ直していければと思っています。

一応、成果発表としてリンクをつけておきます。ちゃんと理解して、「嘘を書いていない」形にして、本物(CodeReposのやつ)にフィードバック出来ればな、という現状です。

プロフィール

このアーカイブについて

このページには、2008年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年1月です。

次のアーカイブは2008年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。