@sadayuki on 2009-10-31
2009-10-31 18:28 JST @sadayuki18:28 - 毛利小五郎の声が変わった。やっぱり変。かなり若返った印象。
21:26 - http://mjk.ac/2UNaRt 今度は日本製。短く.jp 製
日記とか。
18:28 - 毛利小五郎の声が変わった。やっぱり変。かなり若返った印象。
21:26 - http://mjk.ac/2UNaRt 今度は日本製。短く.jp 製
FastCGI 化を見送った代わりに、CGI サーバの見直しをすることにした。今、使っている Mathopd は 2007 年から更新が無く、ちょっと心配なのだ。 Google 先生に聞くと、thttpd が良いとのこと。しかし、これが Mac OS X に対応していない。configure を実行すると下記の通り。
$ ./configure
loading cache ./config.cache
checking host system type... configure: error: can not guess host type; you must specify one
$
けれども、Thttpd On Mac Os X には patch を当てれば使えそうな記述が。所詮、Mac OS X は FreeBSD の実装のひとつだと。そうだな、ということで。適当に --host を指定してコンパイルしてみました。
$ ./configure --host=darwin
(略)
checking host system type... Invalid configuration `darwin': machine `darwin' not recognized
checking target system type... Invalid configuration `darwin': machine `darwin' not recognized
checking build system type... Invalid configuration `darwin': machine `darwin' not recognized
(略)
$ make
darwin なんて知らんと言われますが Makefile は作成されますのでそのまま make 。エラー無く完了します。次にインストールですが、これがまた失敗します。
$ sudo make install
Password:
mkdir -p /usr/local/sbin
/usr/bin/install -c -m 555 -o bin -g bin thttpd /usr/local/sbin
install: bin: Invalid argument
make: *** [installthis] Error 67
$
ユーザ、グループに bin が登録されてないからです。仕方が無いので手動で install しました。
$ sudo /usr/bin/install -c -m 555 thttpd /usr/local/sbin
$ sudo /usr/bin/install -c -m 444 thttpd.8 /usr/local/man/man8
$ sudo make installsubdirs
man も同様に手動。ディレクトリは make が使えます。Thttpd On Mac Os X の patch を忘れましたが、動いてます。何が問題なんでしょうか? ちょっと心配ですが、もう少し使い方を研究するのを先にします。
$ /usr/local/sbin/thttpd -p 10080 -d doc -c **.cgi

FastCGI 化はちょっと掛かりそうです。起動はするし、nginx との接続も出来るんですが、どんな環境で起動されているのか良くわかりません。.fcgi は spawn-fcgi に送り、他は nginx が配信するようにするのが良いと思うのですが、どうも上手くいきません。.css ファイルが配信できなかったり、TOP は出るが個々の記事のページが出なかったり。この辺は nginx の領分だと思うんですが、これまで nginx をリバースプロキシーとしてしか使っていなかったので、静的ファイルの配信のやり方が良くわかってません。
それに URL が変わるのが痛いです。5 件とはいえ はてぶ もしてもらってるのに、また URL を変えるのはもったいない。導入前にも思いましたが、Tokyo Promenade の弱点だと思ってます。URL 。もしかして lua を使うと何とかなるのでしょうか? lua を使うとなると、FastCGI でプロセス常駐したくなります。まあ、一歩一歩ですかね。

まずはインストール。
$ curl -O http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.bz2
$ tar jxvf spawn-fcgi-1.6.3.tar.bz2
$ cd spawn-fcgi-1.6.3/
$ ./configure
$ make
$ sudo make install
とりあえず動かしてみる。
$ /usr/local/bin/spawn-fcgi -f /Users/sadayuki/Sites/wiki/doc/promenade.fcgi -p 10004 -n
注意すべきは .fcgi である点。最初 .cgi を指定してしまって、実行後すぐに終了してしまった。取り敢えず動くのは確認したが、nginx との接続はまだ。今日も眠いのでここまで。

Tokyo PromenadeのFastCGI対応とその性能 ということで、FastCGI に対応した 0.9.16 がリリースされた。早速 FastCGI 対応といきたいところだが、今日は眠いので .cgi の入れ替えのみ。私は Web サーバとして nginx を活用しているが、このサーバは軽量で高速なのは良いのだが、FastCGI プロセスは外部で用意する必要がある。お勧めは spawn-fcgi らしいのだが、セットアップには時間がかかる。また今度。
FastCGI 対応にしたい人は、configure へオプションを渡すのを忘れずに。
$ ./configure --enable-lua --enable-fcgi

00:03 - MSが「HTML5からのCanvasの分離」を提案、しかし数日後には却下される http://is.gd/4FXOL 私は MS が嫌いだ。
00:09 - CMSにDrupal http://is.gd/4FYfq ホワイトハウスと同じとは思ってもみなかった
12:52 - 今日はこれから出社
23:52 - 4.2インチ画面のニンテンドーDSi LL発表 http://is.gd/4HcSk まだ i の付いていない DS を使ってます。DSi に買い替えなくて良かった
23:56 - Tokyo PromenadeのFastCGIモードをリリース http://is.gd/4Hd5k これは大きい。CGI 対応の Web サーバを探すのが大変だったのだ。これで nginx に統一できる
@< upfile:1256740767-東京タワー.png
今夜の東京タワーは「ニュージーランド観光PR グリーン・ダイヤモンドヴェール」だそうです。月がアクセントになってきれいでした。
つい先日バージョンアップしたばかりだが、Tokyo Promenade が 0.9.15 へバージョンアップ。
2008-10-26 Mikio Hirabayashi
* promenade.c (main, dosession): the riddle authorization was added.
- Release: 0.9.15
理由は、
最近、「emiGVFKBMl : mmcMFt」みたいなBase64風の謎の文字列を書き込むスパムボットが頻繁に襲来するので、誰でもコメントできる状態だと掃除が面倒くさくてたまらなくなってきた。 From: なぞなぞ認証をTokyo Promenadeで実装
とのこと。この Blog にも同様のコメントが来ていた。気がつけば削除していたのだが、防止できるならそれに越したことはない。早速導入してみた。
最近は promenade.cgi しか置き換えていなかったのだが、今回は promenade.css と promenade.tmpl の入れ替えが必要だった。.cgi しか入れ替えなかったらなぞなぞを入力する画面が出なかった。form は .tmpl に含まれるので当然と言えば当然。次に .tmpl を入れ替えたら画面が崩れる。.css も入れ替えたら正常に戻った。めでたい。
![]()
家で使っている Mac mini は、光学ドライブにコンボドライブを採用しているものが多い(3台中の2台)。コンボなのでリテール品の DVD は再生できるのだが、DVD-R は再生できない。そこで、MSI U100 用に購入した DVRP-U8XLE を接続してみた。
仕様によれば DVRP-U8XLE は Mac OS X には対応していない。使えないでも文句は言えないのだが、思いがけず使えた。まず、iDVD で作成した DVD-R の再生が可能。さらには、Disk Utility で書き込みも可能だった。これは意外だった。Apple 純正ツールは、Apple 純正機器でしか動かないのが常識だったからだ。Snow Leopard のお陰かしら。

I-O DATA バスパワー対応ポータブルDVDドライブ DVRP-U8XLE
ちなみに DVRP-U8XLE はディスコン品。後継は DVRP-U8XLE2 だが、こっちは使えるか否か不明。やっぱり対応機種は「 DOS/Vマシン」とのこと。
[update が必要だ|id:965]]という声が大きかったのか、いつのまにか対応してくれていた。
2008-10-23 Mikio Hirabayashi
* promenade.c (main): the "DirectoryIndex" mechanism is now supported.
* promenade.c (dosession): the "path" parameter of the cookie header was abolished.
- Release: 0.9.14
2008-10-15 Mikio Hirabayashi
* promenade.c (dosession): calling the Lua extension was added.
* prommgr.c (runupdate, procupdate): new functions.
* scrext.h, scrext.c: new files.
- Release: 0.9.13
コマンドラインツールでも対応。
$ prommgr
prommgr: the command line utility of Tokyo Promenade
usage:
prommgr create [-fts] dbpath [scale]
prommgr import [-suf str] dbpath file ...
prommgr export [-dir str] dbpath [id]
prommgr update id [file]
prommgr remove dbpath id
prommgr convert [-fw|-ft] [-buri str] [-duri] [-page] [file]
prommgr passwd [-salt str] [-info str] name pass
prommgr version
$
こうなると update の活用法を何か考えないと。なんか追い込まれた感がある。
また、[[Lua on Promenade](http://alpha.mixi.co.jp/blog/?p=1389) で紹介していた [Lua|wpja:Lua]] による拡張。面白そうなんだけど、具体的にどう、というのが思い浮かばない。[[Tokyo Tyrant](http://1978th.net/tokyotyrant/) にも [Lua を組み込んでいたり](http://alpha.mixi.co.jp/blog/?p=236)するので、Lua に再び興味が。
ちょっと前に会社の仕事で、TT を活用して暗号化された大規模 Key-Value ストレージを夢想したことがあった。その時は、クライアントとのプロトコルや暗号化について、TT のソース改変をするか、フロントに何か立てることになると考えていた。組み込み Lua を使うと、性能とのトレードオフはあるが、容易に実現できそうだ。まあ、締め切り過ぎているので手遅れなのだが。
Lua を使って暗号化ということで、ちょっと検索してみた。LuaSec を使うと伝送路上の暗号化は出来そうだ。他に何か無いのかと思い探すと、sha1-rsa というパッケージが見つかったのだが、活動が無いのは気になる。このまま使うのは良くないと思われる。外部のライブラリを使うだけなんだから自分で作れ、ということか。
TT や TP への Ruby の組み込みが出来ると、Lua は興味がなくなるような気もするが、世の中は未だ 1.8 系列が主流だ。これが 1.9 系が主流になるまで Lua への組み込みは行われなさそうな気がする。少し Lua で遊んでみようと思う。

Google 先生に聞いたところ、そのまんまなページが見つかった。
最初に見つかったのが上のページで、どうもうまく行かないと思いさらに検索して見つかったのが下のページ。どちらも同じアイデア。AdSense が使える別のページを作っておいて、object 要素で埋め込む。別のページは application/xhtml+xml でない Content-Type にしておくのがポイント。
埋め込むページの方は、Web サーバからの送出も application/xhtml+xml でないようにしないといけないので、サーバの調整が必要な場合がある。私のところは、すべて application/xhtml+xml で送る設定にしてあったので、少しハマった。
text/html { htm }
application/xhtml+xml { html }
上記のように拡張子により Content-Type の使い分けが出来るようにしたところ、無事、表示されるようになった。これでまた一歩、元通りに近づいた。
私の場合、http://www.kurano.jp/tech/ads.htm という広告を表示するページを作成し、そのページを下記のように object 要素で埋め込んでいる。
3eb188b81433fa23599587333681768a
なんか object 要素って色々出来て面白い。応用すると、AdSense のみでなく、他のブログパーツも使えるように出来るのかしら? 少し試してみようと思う。

私の好きな野次馬が「糞の後継は糞」という記事を書いている。
Windowsの最高傑作は2000だと思うんだが、今でもおいら、会社では2000ですね。家で使っているvistaはよく落ちます。OSの成り立ちを知ってる人なら、2000が最高というのは笑えるところなんだが、事実なのでしょうがないw
まあ、そんなこともあるかも。NT 系列の最後が 2000。その後は Me とあいのこである XP になってしまう。NT 系列の歴史は、性能の向上と信頼性の低下のトレードオフの歴史である。いったん信頼性に振れすぎた針が戻ってきて、ちょうど良いあたりになったのが 2000 だったのかも知れない。NT 系列は確かに不便ではあったが、OS としては良く出来ていたと思う。アンチ MS である私がいうのだから本当だ。

08:10 - 「ICANNのCEOが2010年10月にIPv4アドレス枯渇がトリガーされるかも知れない」#this インフラは困るでしょうねぇ
18:04 - マーチングが終わりました。お疲れさまでした。がんばりました。あとは成道会のみ。 http://is.gd/4z3xc
21:39 - 楽天負けた。
20:48 - 「999」切符を再販売 http://is.gd/4xrDC 投書が役に立った!
22:34 - 楽天は初勝利 http://is.gd/4xzRR 田中が完投でやっと1勝。明日は誰?

4巻が出ました。5巻は来年の4月。あの方の誕生月だそうです。聖☆おにいさん の連載誌であるモーニング・ツーは、ネットで無料公開をやってます。そこで読んだ作品があったので、ちょっぴり寂しかったです。寂しいなら読まなければいいのですが、昨日10/22からまた新作が公開されてます。と、思ったら、10/22に発売されてすぐに単行本に収録されたようで、今回の単行本の最後の作品でした。残念。
この作品を読んでるとブッダの生涯を知りたくなります。お手軽なのは手塚治虫のブッダでしょうか。作品の中でブッダも読んでいたことだし。ブッダの弟子たちを知らないと面白さ半減な気がするんですよね。特に[[梵天|http://ja.wikipedia.org/wiki/梵天]]さんって、決してあんな人ではないと思うし。今回の話の中でも、[[アナンダ|http://ja.wikipedia.org/wiki/阿難]]がブッダの言葉をすべて暗記していたから今の仏教がある、というところに興味を持ちました。
もしかして本書は、宗教としての仏教ではなく、ブッダの生涯を広めるきっかけになったりして。
22:41 - ダイソンの羽無し扇風機は東芝が30年前に特許出願済み http://is.gd/4vPLy
23:45 - TPをLuaでカスタマイズする http://is.gd/4vV5d

APPLE MacBook 2.26GHz 13.3インチ 250GB MC207J/A
今回の新製品のうち、MacBook が一番気になった。メモリを 4GB、HDD を500GB にしても 124,000 円だ。これまで Apple Store でカスタマイズすると割高になりがちだった。それが今回は自分で買って交換するのとあまり変わらない。メモリを 4GB にするのに 9,600 円。HDD を 500GB にするのに 15,120 円。バルク品に比べれば高いし、自分で交換すると元の部品を売却出来るのでさらに差はひろがるが、リテール品を買って自分で交換する手間とリスクを考えると、Apple Store に任せても良いかなと思える値段である。先日 Mac mini を購入していなかったら、ふらふらとポチッとしてしまうところだ。
そんな魅力的な MacBook だが、残念な点がひとつある。MacBook Pro にある SD カードスロットが無い。これは結構痛い。キーボードバックライトは諦めても、SD カードスロットは欲しかった。まあ、買わないからいいんだけど。。
劇場版マクロスF~イツワリノウタヒメ~ pink monsoon
まだ聞いてません。明日 iPod で通勤途中に聞く予定です。私はいつも、CD の脇についているやつ、帯でよいんでしょうか、を捨ててしまうのですが、今回は捨てられずにとってあります。ジャケットもリバーシブルです。表が pink monsoon で裏が 天使になっちゃった ですね。参りました。この勢いで映画も行くかもしれないです。
Apple Store が We'll back soon. と言っている。噂の新製品の準備だろうか。普通は避けるべきオンラインストアの閉店。それを楽しみに変えてしまう Apple のやり方はある意味凄い。
訳あって iTunes フォルダの引っ越しをしました。iTunes ライブラリの引っ越しは簡単です。Music フォルダの下の iTunes フォルダを丸ごとコピーすれば OK 。アートワークや再生情報など丸ごとコピーされます。しかし注意点がいくつか。
アカウントが違うとどうなるか分かりません。私は元と先の Mac でのアカウントを一緒にしているので特に問題はありませんでした。
iTunes Store の認証に注意してください。どうも認証情報もコピーされてしまうようです。同じ認証情報で 2 台のコンピュータを稼働させるのは問題なので、元のライブラリを消すか、認証の解除が必要です。片方のコンピュータで認証の解除を行うと、予想通りもう片方の認証も解除されます。でも、なぜか iTunes Store で購入した曲が再生が出来るんです。放っといてもいいかもしれませんが、私は再度認証しました。
マイコミジャーナルで続いているどれがいい? 自分にベストなMacのテキストエディタもはや6回。やっと私の使っているCotEditorの番が来た。
現在のMacユーザは大きく2種類に分類される。すなわち、旧Mac OSの系譜に連なるUIを好む「Macネイティブ派」と、UNIX系OSから流れてきた「MacというよりOS X派」だ。
私は「OS X派」だ。通常使うエディタはviかCotEditor。ちょっとした編集はiTerm上のviで行ってしまう。この辺は「OS X派」の面目躍如。ただ、ちょっと長めのソースはCotEditorで編集している。BSDベースであるMac OS Xを開発に使うには、viは必修科目だと思う。何もviでプログラムを開発しろとは言わないが、設定ファイルの編集は出来ないといけない。また、何でもviで、Emacsでという人もいるとは思うが、やはりMacならではのエディタを使いたいと思って巡り会ったのがCotEditorだった。まだ使いこなしている、とは言えないが、普通に使っている。この普通に使えるのが良いところだと思っている。これからも宜しくお願いしたい。

日本では報道されていなかったようだが、ケイゴに会いにカツミがタイに行っていたようです。ネットゲリラ経由。お父さんが来たと聞いたのでしょうか。ケイゴ君が走ってしまうのにじ〜んと来ました。
@! http://www.youtube.com/v/AIQqi9MsIOo&color1=0xe1600f&color2=0xfebd01&hl=ja&feature=playerembedded&fs=1|425|344|movie|http://www.youtube.com/v/AIQqi9MsIOo&color1=0xe1600f&color2=0xfebd01&hl=ja&feature=playerembedded&fs=1|allowFullScreen|true|allowScriptAccess|always
11:30 - Matz のこういうところが好き http://is.gd/4n8DA
17:43 - 藤原とうふ店恐るべし! http://is.gd/4nsSq
17:47 - 加藤和彦さん死去:さっきラジオで聞いてびっくりした http://is.gd/4nt71
18:22 - 楽天連勝、第2ステージへ:やったー!! http://is.gd/4nvfp
18:33 - Tokyo Promenade のインストールディレクトリを変えてみた。WEBrick 使ったら passwd.txt まで配信しちゃったので。#link
22:59 - 愛おぼえていますか は加藤和彦だった。忘れてた。すまん。#link
12:49 - いま見ているページを認証不要でTwitterに投稿するブックマークレット - 頭ん中 » http://bit.ly/8hFZ3
22:40 - テクノラティが終わるそうだ。この前退会したばかり。。
22:50 - 無人島になぜ行くのかによると思う http://is.gd/4mus6
22:50 - Blogにtwitterのブログパーツを埋め込んでます。
23:06 - 色々試しましたが、今のがTPに合ってて良いです。
23:41 - http://is.gd/4kXPU Twitterのブックマークレットの紹介
23:55 - 動画:BMWからカーブで傾くハイブリッド三輪 SIMPLE http://bit.ly/2CDmZ1
23:58 - RT @IKUBON: Google ReaderからTwitterへ投稿できるようになった http://bt.io/Ib3 残念ながら日本語では出来なかった
Tokyo CabinetとTokyo Promenadeをバージョンアップさせた。特にTPの方が気になっていたので良かった。何を気にしていたかというと、どこで見たか忘れたが、本家のサイトで使っているバージョンが0.9.12だったのだ。あ〜自分のドックフードを食べてるんだなぁと思って感心していたのだ。
たまたま今日見ると0.9.12になっているので早速ダウンロードしてバージョンアップ。ChangeLogを見るとリリースは2009-09-18になっている。何で?
うまく動いているので良いのだが、このシリーズはバージョンアップのやり方が書いてないのが少し不安。まあ、作者の方はある程度のリテラシーを持っている人を対象にしていると明言しているので、どのファイルを変えれば良いかは分かっているはず、と思っているのかも。
2008-09-18 Mikio Hirabayashi
* promenade.c (dosession): a bug related to the recent comment list was fixed.
* promenade.c (dosession): a bug of format injection was fixed.
* prommgr.c (runremove, procremove): new functions.
- Release: 0.9.12
ChangeLogは上記の通りなので本体のみに影響すると考え、本体の入れ替えのみ実施。
$ prommgr
prommgr: the command line utility of Tokyo Promenade
usage:
prommgr create [-fts] dbpath [scale]
prommgr import [-suf str] dbpath file ...
prommgr export [-dir str] dbpath [id]
prommgr remove dbpath id
prommgr convert [-fw|-ft] [-buri str] [-duri] [-page] [file]
prommgr passwd [-salt str] [-info str] name pass
prommgr version
$
prommgerのhelpを見ると、removeサブコマンドが増えているのを確認できる。これであと、updateが追加されるとコマンドラインから記事のメンテナンスが出来るようになって嬉しいかも。今はexportしたファイルをimportすると記事が増えてしまう。idも変わってしまう。でもnameは同じだからwikiモードでは問題ないのかも。と思ったが同じ名前の記事が複数あると一覧が出る。これはダメだね。下図はhelp-ja.tpwを二重に取り込んでみたところ。変更が出来るようになると嬉しい。
@ upfile:1255240038-tp.png|493|322
せっかくなので、Git の練習も兼ねて版管理してみることにした。
$ git init
Initialized empty Git repository in /Users/sadayuki/Sites/amazon/.git/
$ git commit
ローカルのコミットは良いのだが、リモートに push するとエラーが出る。
$ git push sun.local:/var/repository/amazon_search.git master
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly
$ ssh sun.local 'echo $PATH'
/usr/bin:/bin:/usr/sbin:/sbin
$
パスが通っていないのだ。これは、.bashrc に [#export PATH="/usr/local/git/bin:/usr/local/bin:${PATH}"#]を追加して解決。
$ git push sun.local:/var/repository/amazon_search.git master
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 1.78 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database ./objects
fatal: failed to write object
error: unpack-objects exited with error code 128
error: unpack failed: unpack-objects abnormal exit
To sun.local:/var/repository/amazon_search.git
! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'sun.local:/var/repository/amazon_search.git'
$
次に権限が無い、とのこと。これは自分のユーザを dscl append でグループ gitusers に追加。
$ sudo dscl . -append /Groups/gitusers GroupMembership sadayuki
$ dscl . -read /Groups/gitusers
AppleMetaNodeLocation: /Local/Default
GeneratedUID: 10042E46-F3B4-44A9-B56B-31B34E997884
GroupMembership: sadayuki
PrimaryGroupID: 601
RecordName: gitusers
RecordType: dsRecTypeStandard:Groups
$
で、やっと push 。
$ git push sun.local:/var/repository/amazon_search.git master
Password:
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 1.78 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
To sun.local:/var/repository/amazon_search.git
* [new branch] master -> master
$
これでスタート位置についたところか。
まずは uid を何にするか迷った。なのでまずは uid の一覧を照会。
$ dscl . -readall /Users uid
dsAttrTypeNative:uid: 83
RecordName: _amavisd amavisd
-
dsAttrTypeNative:uid: 87
RecordName: _appowner appowner
-
dsAttrTypeNative:uid: 79
RecordName: _appserver appserver
-
dsAttrTypeNative:uid: 67
RecordName: _ard
-
(略)
通常のユーザは普通に 501 から採番されるようなので、601 から始めることにした。念の為 gid も同様に照会。
$ dscl . -readall /Groups gid
dsAttrTypeNative:gid: 83
RecordName: _amavisd amavisd
-
dsAttrTypeNative:gid: 87
RecordName: _appowner appowner
-
dsAttrTypeNative:gid: 81
RecordName: _appserveradm appserveradm
-
dsAttrTypeNative:gid: 79
RecordName: _appserverusr appserverusr
-
dsAttrTypeNative:gid: 67
RecordName: _ard
-
Life with IT の記事を参考に登録。
$ sudo dscl . -create /Groups/gitusers gid 601
$ sudo dscl . -create /Users/gituser
$ sudo dscl . -create /Users/gituser RealName GitUser
$ sudo dscl . -create /Users/gituser uid 601
$ sudo dscl . -create /Users/gituser gid 601
$ sudo dscl . -create /Users/gituser password '*'
$ sudo dscl . -create /Users/gituser NFSHomeDirectory /var/repository
$ sudo dscl . -create /Users/gituser UserShell /bin/bash
$ dscl . -read /Users/gituser
dsAttrTypeNative:password: *
AppleMetaNodeLocation: /Local/Default
GeneratedUID: 7DC03DAF-7C6F-47D4-B19E-4EBE09FA0213
NFSHomeDirectory: /var/repository
PrimaryGroupID: 601
RealName: GitUser
RecordName: gituser
RecordType: dsRecTypeStandard:Users
UniqueID: 601
UserShell: /bin/bash
$
ユーザ登録が出来たのでリポジトリの準備をしよう。
基本は変わらないのですが、検索条件の入力画面を付けました。Search Index は日本向けでしかも自分用にしてあります。
# encoding: utf-8
require 'sinatra'
require 'erb'
require 'amazon/ecs'
require 'dm-core'
require 'logger'
require 'cgi'
configure do
DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/db/#{Sinatra::Application.environment}.db")
LOGGER = Logger.new(File.join('log', "#{Sinatra::Application.environment}.log"))
end
class SearchIndex
include DataMapper::Resource
property :id, Serial
property :name, String
property :discription, String
end
SearchIndex.auto_migrate! unless SearchIndex.storage_exists?
Amazon::Ecs.debug = true
Amazon::Ecs.options = {
:aWS_access_key_id => "***************",
:associate_tag => "sadayukisdiar-22",
:country => :jp,
:aWS_secret_key => "******************************"
}
get '/' do
@index = SearchIndex.all
erb :index
end
get '/:index/:keyword' do |index, keyword|
@index = SearchIndex.all
@res = Amazon::Ecs.item_search(keyword, {
:search_index => index,
:response_group => 'Medium',
:sort => 'salesrank'
}
)
erb :index
end
色々試行錯誤の結果、JavascriptでURLを構築して従来の機能を呼び出すことにしました。どうも私は基本的なところが分かってないようです。
Amazon Search
<% if @res %>
<% @res.items.each do |item| %>
<% image = item.get_hash('mediumimage') %>
<% url = item.get('detailpageurl') %>
<% title = item.get('itemattributes/title') %>
<% author = item.get('itemattributes/author') %>
<% if image %>
<% else %>
No Image
<% end %>
<% if author %>
<%= title %>【<%= author %>】
<% else %>
<%= title %>
<% end %>
<% if image %>
<%= "@ #{image[:url]}" %>
<% end %>
<% if author %>
<%= "[[#{title}【#{author}】|#{url}]]" %>
<% else %>
<%= "[[#{title}|#{url}]]" %>
<% end %>
<% if image %>
<%= CGI.escapeHTML('
') %>
<% end %>
<% if author %>
<%= CGI.escapeHTML('' + title + '【' + author + '】') %>
<% else %>
<%= CGI.escapeHTML('' + title + '') %>
<% end %>
<% end %>
<% else %>
<% end %>
前回はTokyo Promenade向けの出力しかしませんでしたが、htmlとブラウザでの表示イメージを出す事にしました。これで実用になるでしょうか。長男にも意見を聞いてみようと思います。
@ upfile:1255139790-amazon.png|493|322
久しぶりに読書に夢中になって電車を乗り過ごした。それくらい面白かった。Danさんの記事によれば["感動した。"]とのことだったが、感動まではしなかった。十分面白かったが、感動までいかなかったのは、私に経験が少なかったからだと思う。
Danさんも書いているが、本書はGitというソフトウェアのマニュアルではなく、共同開発の入門書になっている。特に次の点が興味深かった。「3-wayマージの社会的前提条件」というこの行を読んでいて乗り過ごしたのだ。
目標をひとつに互いに信頼している人々のプロジェクト。これほど心を高ぶらせる概念は無い。理想的である。普段そんなものを目に出来ない私にとっての憧れである。まあ、憧れるだけでは何にもならない。実践あるのみか。
でも、自分で自分を信頼してないからなぁ。まず、そこからかも。
Amazon の商品を検索するデスクトップアプリケーションを作ろうと思ったのだが、いろいろあって挫折している。しかし検索をする要件は残っている。コマンドラインからの検索は実現できているので、それを利用して Web アプリケーションを作ろうと考えた。一般に公開するには、秘密キーの扱いが問題になるが、個人で使うには何も問題なし。お手軽に作るために Sinatra を使う。
アプリケーションは次の通り。
# encoding: utf-8
require 'sinatra'
require 'erb'
require 'amazon/ecs'
Amazon::Ecs.options = {
:aWS_access_key_id => "***************",
:associate_tag => "sadayukisdiar-22",
:country => :jp,
:aWS_secret_key => "********************"
}
get '/:index/:keyword' do |index, keyword|
@res = Amazon::Ecs.item_search(keyword, {
:search_index => index,
:response_group => 'Medium',
:sort => 'salesrank'
}
)
erb :index
end
ビューは次の通り。
Amazon Search
<% @res.items.each do |item| %>
<%= "@ #{item.get_hash('mediumimage')[:url]}" %>
<%= "[#{item.get('itemattributes/title')}(#{item.get('itemattributes/author')})|#{item.get('detailpageurl')}]]" %>
<% end %>
まずは検索可能であることを優先しているので入力画面は作っていない。URL から Search Index と Keyword を指定するようにしている。Search Index は、[[API Reference](http://docs.amazonwebservices.com/AWSECommerceService/2009-10-01/DG/) から正しい値を見つけて入力する必要がある。この辺は改善が必要だ。
実行例は次の通り。まずはサーバを起動。
$ ruby app.rb
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.2.4 codename Flaming Astroboy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop
[#http://localhost:4567/Books/Ruby逆引き#] をブラウザの URL 欄に入力すると下記が返ってくる。

[Ruby逆引きハンドブック(るびきち)](http://www.amazon.co.jp/Ruby%E9%80%86%E5%BC%95%E3%81%8D%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E3%82%8B%E3%81%B3%E3%81%8D%E3%81%A1/dp/4863540221%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4863540221)

[Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)(島田 浩二)](http://www.amazon.co.jp/%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AC%E3%82%B7%E3%83%94-%E3%81%99%E3%81%90%E3%81%AB%E7%BE%8E%E5%91%B3%E3%81%97%E3%81%84%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB-%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-PROGRAMMER%E2%80%99S-RECIPE/dp/4798119881%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798119881)

[Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応(大場 寧子)](http://www.amazon.co.jp/Ruby-Rails-%E9%80%86%E5%BC%95%E3%81%8D%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-2-0%E5%AF%BE%E5%BF%9C/dp/4839928266%3FSubscriptionId%3D0HA4DEQT1K3294H98K82%26tag%3Dsadayukisdiar-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839928266)
まあ、簡単に作った割には有効だと思う。家庭内 LAN 内でのみ利用可能にすれば息子も使えるようになって好都合だ。もう少し改良しようかと思う。
本番機の64bit化を行った。大失敗の巻だった。[Snow Leopard の問題点]]で試したので大丈夫と思い粛々とコンパイル/インストールを行ったのだが、mysqlのgemがエラーで入らない。Google先生に聞くと[[暴想の記事](http://java.cocolog-nifty.com/blog/2009/09/snow-leoparduni.html)が見つかった。
Snow LeopardにしたらRailsが動かなくなった。
MySQLをインストールし直す必要があるようだ。 http://journal.mycom.co.jp/news/2009/09/01/033/index.html
によると Mac OS X 10.5 (x86_64)
と64ビット版のMySQLクライアントをインストールしないといけないらしい。
と、ここで慎重になれば良かったのだが、最新の5.1.39の64bit版をダウンロードしてインストールしてしまったのだ。データベースのバックアップを取る前に。。
さて、それからが大変。元のバージョンは5.0.45だったので、5.0系の最新版である5.0.86をダウンロードしてインストールしようとするのだが、インストールできません、というつれないお言葉。5.1.39のフォルダを消してみたりしたのだが、どこか他に情報が残っているらしくダメ。
しばらくGoogle先生と話を続けたのだが良い記事が見つからない。私のような間抜けは他に居ないようだ。しばらくあちこち見学。これまでのインストールはパッケージ形式のインストラーを使っていたのだが、ふと、tarもあることに気が付いた。tarファイルを展開し、元のフォルダにあるdataフォルダをコピーしmysqld_safeを起動すると何とか動いているようだ。後は普通にmysqldumpでダンプし、新しい方でデータベースを作成し、mysqlでインポート。
何とか復旧。一時はどうなるかとも思ったが、最悪はTime Machineから戻せば良いので気楽ではある。バックアップは大切だ。
@ upfile:1254560737-64bit.jpg|400|300
書店で見かけて衝動買いしてしまった。職場への行き帰りでさらっと眺めただけだが、ちょっと失敗だったかも。
本書は、Rubyでのプログライング経験があり、これからMac OS Xのデスクトップアプリケーションの開発について学習するといった読者を想定しています。
とのことで、私はこの読者像から少し、ほんの少しだが外れていたのだ。本書にはRubyでのプログラミングの解説は無いので、Rubyの知識は必須だ。これは合っている。もう一方のMac OS Xでのデスクトップアプリケーションの学習の方が合ってなかった。決して経験豊富という訳ではないが、Interface Builderについて過去に学習したことがあったのだ。Java&Cocoaプログラミングバイブル(掌田 津耶乃)という、やはりMac OS X標準であるObjective-C以外の言語のCocoaのバインディングの本を買って読んだことがある。この本でInterface Builderの使い方を学んでいたので、第2部が少しくどかった。
一方、Interface Builderで使える各種コンポーネントの説明が足りない。電車の中では出来ない実際に試しながらあれこれいじることを試したみたのだが、PopUpButtonのアイテムの増やし方が分からない。仕方が無いのでJava&Cocoaプログラミングバイブルを参照した。こっちはJavaの説明が少ないんじゃないかと思えるほどコンポーネントの解説が充実している。RubyCocoaの勉強をするのにCocoa-Javaの本を買ってもしようがない。なんでもいいので、Cocoaの解説が充実している本を買うと良いだろう。Objective-Cの本になってしまうかもしれないが。
あと、Snow Leopardに付属のXcodeにはCocoa-Rubyのテンプレートがインストールされていない。書籍サポートページを参考に、自分でインストールする必要がある。
とまあ、いろいろ苦言を呈したが、この本によりMac OS Xのデスクトップアプリケーションの数が増えると嬉しい。そのためには自分で作るのが一番良いのだが、かなり面倒くさい。本書を買った元々の目的はAmazon Product Advertising APIを使ってBlog用のリンクを作成することだ。不十分とは云え目的を達成できてしまっているのが意欲を減退させる大きな要因だ。これを使い易くしたいという欲求と、作るのが面倒くさいという怠惰と、どちらが優勢かというと今は怠惰が優勢。
あと心配がひとつ。本書では、私が試したRubyCocoaと、もうひとつMacRubyについて紹介している。Ruby CocoaはRubyとCocoaの橋渡しをするものなのでMRIから使える。一方、MacRubyはというと、新しいRubyの実装だ。MRIとは相容れない。MacRubyの方が便利なのかも知れないが、Cocoaに密着しすぎという気がする。RubyCocoaのような微妙な距離感が私は好きだ。あくまでもRubyが主役。MacRubyに負けずに開発を続けて欲しい。
RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~(高尾 宏治)
「ガンダム」、デザイン大賞候補とのこと。今朝の朝日新聞にも記事が載っていて、「審査する側にも思い入れのある人が多く、ほとんど異論はでませんでした。」だって。
@ upfile:1254490354-gundam.jpg
今日の東京タワーはピンクライトアップだそうだ。
@ upfile:1254405428-IMAGE_091.jpg
かんたんCMS「Tokyo Promenade」の便利機能にあるように、object要素の埋め込みが可能である。
記事にある例は下記のようなもの。
@! http://example.com/foo.class|400|300|nick|mikio|sex|male
↓
対してYouTubeの埋め込み書式は下記の通り。例とは少し違っている。
試してみると、下記の書式で埋め込めた。
@! http://www.youtube.com/v/dBXuxPsuiCw&color1=0xb1b1b1&color2=0xcfcfcf&hl=ja&feature=player_embedded&fs=1|425|344|movie|http://www.youtube.com/v/dBXuxPsuiCw&color1=0xb1b1b1&color2=0xcfcfcf&hl=ja&feature=player_embedded&fs=1|allowFullScreen|true|allowScriptAccess|always|type|application/x-shockwave-flash
生成されるhtmlは下記の通り。
何か違っているようにも思えるが埋め込みできている。まあ良しとして欲しい。
米オバマ大統領、驚愕の笑顔で紹介されている動画が凄い。訓練の賜物なのだろうか。
@! http://www.youtube.com/v/dBXuxPsuiCw&color1=0xb1b1b1&color2=0xcfcfcf&hl=ja&feature=playerembedded&fs=1|425|344|movie|http://www.youtube.com/v/dBXuxPsuiCw&color1=0xb1b1b1&color2=0xcfcfcf&hl=ja&feature=playerembedded&fs=1|allowFullScreen|true|allowScriptAccess|always|type|application/x-shockwave-flash