2008年06月26日
Plain Old HTML
8時間寝ても疲れが取れなくて、朝起きてまず気がつくのが肩こりの痛みのけんじです。
人は悲しいくらい 忘れていく生き物~♪と言う歌があるように、残念ながら人の記憶は揮発性なのでメモを取ることは欠かせられない。このブログもタイトルが示すようにそれが目的だ。
ブログはWebLogの名前が示すようにログなわけで、必然的に時間軸上に1次元に並ぶ。
しかしある関心事はブログの1エントリーつまり通常1日の中ですべて完結するわけではないので、いくつかのエントリーに分散してしまう。これはまずい。後からエントリーを見直したとき or 他の誰かが情報を検索しに来たときに、検索者は「ある関心事についての解にたどり着くまでに、いろいろ悩んだ軌跡」を見たいのではなく、「ある関心事に関する問題とその解」を見たいわけだ。ブログは残念ながら情報の断片しか見せてくれない。
よってブログは技術情報を保存するメディアとしてはふさわしくない。
では何がよいか。Wikiか?と思ったけど、WikiはWikiで何かしっくりこない。
便利そうだけど、非常に不便なのだ。肌に合わないだけかもしれない。
まず我慢できないのがWikiのエディタの不便すぎるところ。
あの小さい編集窓で大きなテキストを編集させられる苦痛、かつエディタは使いづらい。
さらにその編集結果を確認したくてもレスポンスが遅い罠。
Wikiフォーマットに精通すれば編集結果を確認しなければならない機会も減るかもしれないが・・・。しかしWikiフォーマットは各Wikiで統一されていない。これはひどい。
つまりWikiはこの用途においてはそびえたつクソなのだ。
Wikiは多人数で情報を共有し編集することが目的なので、個人的メモには合わない。
そこで思いついたのがタイトルにもある「Plain OldなHTML」だ。
Plain Old HTMLは何らかのプログラムによって自動生成されていない、生の手書きのHTMLを表す。
Webサーバ上でemacsを常に起動してあるので、その上でhtmlファイルを開く。emacsなのでエディタ機能は完璧だ。さらにWebサーバ上のファイルなので、保存したらすぐに反映される。常にエディタは開いているので、メモしたいときにすぐメモをすることが可能だ。
つまり最適解。
と思ったのだけど、検索機能が無かったり、「Plain Oldと言ってもちょっとはデザイン良くないとやだよね」と色気を出したために発生するデザイン用タグが入ったりとちょっと妥協しないといけないこともある。
検索に関してはページ毎に項目が分かれているため、情報が入っているページはすぐに見つけることができ、後はブラウザの検索機能があるのでそれほど問題にはならない。
検索機能が必要なのは、どこに情報があるのかわからないから必要なのだ。検索しなくてもわかれば検索の必要はない。
あと、サーバ上のファイルを直接編集するため、間違って必要な情報を消してしまったり、編集ミスは結構な痛手となる。
そこでSVNでサーバ上の静的コンテンツをバージョン管理する。これでいつでも元に戻せるのでガンガン編集することができる。
よって、結局各種便利そうなツールはすべて捨て、インターネット黎明期のようなHTMLタグ手打ちが最良ではないかと考えにたどり着いた。この考えが本当に最適かはもうちょっと試してみてから判断してみよう。
こんな考えが思いついたのはSeasar関連の情報がブログ上に散乱してしまっていて、非常に不便な思いをした結果、他人のふり見て我がふり直せと言うこと。今や単なるコメントの付けられる日記としか使われていないブログは、メディアとしての役割を終える。もしくは将来性、可能性を使い果たしたのかもしれない。
と、またダラダラと内容の薄い日記を書いてしまったのだけど、用はトップページにzshやemacsのメモをHTMLドキュメントとして置きましたよと言うことだ。
2008年06月23日
loader constraint violation
SAStrutsはすばらしい。スーパーアジャイルなStrutsと言うことで、RoRに対抗してサクサク感を最大化したとのふれこみは伊達じゃないな。
Strutsもまぁ悪くはないんだけど、テンポは確かに悪い。めんどくさいし。
めんどくさいと言う要素は結構くせ者で、趣味のプログラミングでは「あれ作ろうかな。でもめんどくさいしやめとこ。」と言うことになり、先に進めなくなる。これはまずい。SAStrutsはstruts-config.xmlと言う呪縛から解放されるので、気軽にプログラミングができる。
そんな快適なSAStrutsだけど、今さっき躓いた。
クラスローダー関連のエラーLinkageError : loader constraint violationが出てしまう。
SAStrutsはHotデプロイ機能のため、動的にクラス定義を変えることができるようになっているんだけど、Seasar管理外の部分と連携するとクラス定義に不整合が起こるようだ。
具体的にはSAStrutsのWebアプリから通常のServletへ、とあるインスタンスをsetすると発生する。
SAStrutsのSeasar用クラスローダと、TomcatのWebappClassLoaderとがぶつかっているようだ。
ふーむ。どうすれば良いんだろう。
通常ServletもSeasar用クラスローダを使うHotデプロイ対象にすれば良いのか?しかしどうやって?
Hotデプロイをやめれば問題は出ないだろうけど、それではSAStrutsの意味がない。
SAStrutsとServletの連携が変態過ぎると言うこともあるけど、Cometの実装の都合上Strutsだけでは実現不可能だ。
SAStrutsとCometServletとの間をSocketにしたりして結合度を下げる解決策もあるだろうけどめんどくさい上になんか邪道だ。
うーん。どうしよう。
2008年06月18日
Firefox3入れた
24時間にダウンロードされた数のギネスに挑戦すると言うキャンペーンをやっているのでダウンロードしてみる。しかしそのキャンペーンの通知メールに書かれているダウンロードページのURLが間違っている・・・。http://www..mozilla.com/とドットが1個多いw
我が家は以前からBetaやRCを入れているので、それほど違いはないが、会社のFirefox2を3に上げるとやっぱ快適に動作するな。バージョンアップすると重くなるマイクロソフト系とは大違いだ。
2008年06月15日
けいどろ部マーク
今の現場で不穏な活動を続けているけいどろ部で、結構本格的な部活ユニフォームTシャツができた。
そしてシャツの袖の部分に各自の番号をおのおの好きなデザインでアイロンプリントすることになった。
ということで作った。

シャツのデザインをやったんだけどそっちはシンプルなデザインにしたので、こっちもシンプルなヤツに。
イメージはロボットモノのアニメに出てきそうな部隊マーク。
下の文章は何か文字がびっしり書いてあればよかったので適当な文章を羅列。
と自分でデザインしたように見せかけて、とあるマンガに出てきたマークのパクリだけどw
ちょっと子供っぽいデザインなのがポイント。
Paint It, Black!!
地震のニュースを付けながら、腐海に沈んだ部屋の掃除をした。
だいぶ綺麗になってすっきり。カーテンも変える。青のレースのカーテンを白のカーテンへ。
ハンディタイプの掃除機を買ったんだけどこれがなかなか便利。すぐに使える状態にしておき、ホコリがあるとすぐに掃除することができる。安いけど結構強力。でもかなりうるさい。
Parent ASIN HITACHI こまめちゃん ハンディ掃除機
秋葉原の事件は、やはり世の中の仕組みにも問題があるのではないかと感じる人が多いようだ。
秋葉原無差別殺傷事件メモ
様々なブログで、犯人が事件を起こした背景を探っているまとめ記事。
これらの記事では主に経済的な面、それと将来に希望が持てない面の二つに注目している。
希望が持てないというのは抽象的な表現だけど、ドロップアウトしたらそれを救済できるセーフティネットが無いのではないかという話。
それも要因の一つだろうけど、犯人が掲示板に書いた日記を読む限り他人との関係、社会との関係も重要なんじゃないかと感じた。
人は「他人の中の自分」を意識していると思う。いい子供を演じ続けてきた犯人はなおさらだ。彼は自分のやりたいことをすることよりも、他人からの評価を上げることを優先してきたようだ。
犯罪を犯せば当然他の人からの評価も下がる。
だけどこの犯人のように他の人との関わりが少ないor希薄だと下がる評価が少なく、犯罪を犯す事への敷居が下がってしまうような気がする。
後、間違った考えを修正してくれる誰かの存在も重要だと思った。
誰でも赤いドアを見たら黒く塗りたいと思う。でも本当に黒く塗る人は少ないんだろう。
たとえ塗ってしまっても、目に映るすべてを黒く塗る前に誰かが言うだろう。おまえは間違ってるぞって。
掲示板に書き込み続けたのはそれを言ってほしかったんだろうな。
犯行予告も同じだろう。「止めてほしかった」と言ってるみたいだし。
これらの問題を解決するにはどうしたらいいんだろうか。
安易な考えで思いつくのは自助グループとかだけど。
こういう「社会からのドロップアウト」に対するサポートは海外ではどう対応しているかちょっと気になる。
この事件はなんだか頭の中にもやもやしたものが残ってしまい、こんなエントリーを書いてしまった。
今までの通り魔殺人と違い、頭の狂った人間がひどい事件を引き起こしたで片付けられないからかな。
どうでもいいけど「赤いドアを見ると黒く塗りたい」って言う歌詞は日本人では出てこないセンスだなぁ。
と思いつつも「せっかくだから、俺はこの赤の扉を選ぶぜ!」って言う台詞は外国人のセンスでは出てこないと思うがw
2008年06月14日
予告がブーム
最近いろんな予告をするのがブームのようだ。
そんな予告を監視するために2億円かけたり、0億円で2時間で作られた予告を監視したりするシステムがある。
そんな中「予告ぐらい自由にできないと困るよね!」と考えたぼくらのはまちちゃんが予告.outを作った。
仕組みは簡単で、単に投稿を画像にし監視システムに引っかからなくしただけだ。もちろん効果は大きい。簡単には解析できない。
ブームなので流れに乗って予告.outを今勉強中のパターン認識で認識できないかなぁと思ってちょっと考えてみたけど結構難しそうだった。
今の俺の知識じゃ画像の画素を特徴量にしてパターン認識するしか実装できなさそうなんだけど、予告.outはプロポーショナルフォントを使用しているのできっちりここからここまでが1文字という抜き出しができない。文字の切り出し位置もパターン認識だ!と思って、それはできそうなんだけどやっぱり正確に切り出しは難しい。1ドットでも切り出し位置がずれると特徴ベクトルは大きく変わってしまうので認識は難しいだろう。やるとしたら文字切り出して、余分な空白がなくなるまで左上に寄せてから識別とかそんなんだろうか。
そしてパターン認識なんかしなくても、解決できそうな方法を思いついた。
まずひらがな漢字などの全文字の描画後のデータを保持する。
予告.outでは文字の開始位置が固定なので、どこから文章が始まっているか知ることができる。
そしてその位置から全文字の画像データを1個ずつ減算する。そして減算の結果、計算領域が真っ黒になればその文字と完全一致したことになる。
ちょっとめんどくさいけどこれなら実装できそうだ。
でもパターン認識とは全く無関係になってしまうな。
2008年06月12日
SVMでパターン認識
SVM(サポートベクターマシン)でちょっと遊んでみる。
以前はk-NN法でパターン認識したが今回はSVMだ。
SVMは・・・えーと・・・どんなのかというと・・・、うーんと・・・・難しくて理解不能でしたorz
理解しようと思っても、各要素分野がすでに難しすぎるのでさっぱり。
詳しくはサポートベクターマシン入門とか。
教師有り学習のパターン認識で、TinySVMを使えばサクッと使うことができると理解しておけばとりあえず良いだろう(ホントか?)
学習内容は、例によって5x5マスに書いた数字を認識するというものだ。
以下のように点の有る無しを0,1で表す。
1 1:0 2:1 3:1 4:0 5:0 6:0 7:0 8:1 9:0 10:0 11:0 12:0 13:1 14:0 15:0 16:0 17:0 18:1 19:0 20:0 21:0 22:1 23:1 24:1 25:0
2 1:0 2:1 3:1 4:1 5:0 6:0 7:0 8:0 9:0 10:1 11:0 12:0 13:0 14:1 15:0 16:0 17:0 18:1 19:0 20:0 21:0 22:1 23:1 24:1 25:1
3 1:0 2:1 3:1 4:1 5:0 6:0 7:0 8:0 9:0 10:1 11:0 12:0 13:1 14:1 15:0 16:0 17:0 18:0 19:0 20:1 21:0 22:1 23:1 24:1 25:0
4 1:1 2:0 3:0 4:1 5:0 6:1 7:0 8:0 9:1 10:0 11:1 12:1 13:1 14:1 15:0 16:0 17:0 18:0 19:1 20:0 21:0 22:0 23:0 24:1 25:0
5 1:1 2:1 3:1 4:1 5:1 6:1 7:0 8:0 9:0 10:0 11:1 12:1 13:1 14:1 15:1 16:0 17:0 18:0 19:0 20:1 21:1 22:1 23:1 24:1 25:1
6 1:1 2:1 3:1 4:1 5:1 6:1 7:0 8:0 9:0 10:0 11:1 12:1 13:1 14:1 15:1 16:1 17:0 18:0 19:0 20:1 21:1 22:1 23:1 24:1 25:1
7 1:1 2:1 3:1 4:1 5:1 6:0 7:0 8:0 9:1 10:0 11:0 12:0 13:1 14:0 15:0 16:0 17:0 18:1 19:0 20:0 21:0 22:0 23:1 24:0 25:0
8 1:1 2:1 3:1 4:1 5:1 6:1 7:0 8:0 9:0 10:1 11:1 12:1 13:1 14:1 15:1 16:1 17:0 18:0 19:0 20:1 21:1 22:1 23:1 24:1 25:1
9 1:1 2:1 3:1 4:1 5:1 6:1 7:0 8:0 9:0 10:1 11:1 12:1 13:1 14:1 15:1 16:0 17:0 18:0 19:0 20:1 21:1 22:1 23:1 24:1 25:1
10 1:1 2:1 3:1 4:1 5:1 6:1 7:0 8:0 9:0 10:1 11:1 12:0 13:0 14:0 15:1 16:1 17:0 18:0 19:0 20:1 21:1 22:1 23:1 24:1 25:1
10行目は「数字の0」なんだけどClassIDは10にする。これはClassIDを0にすると未定義という意味になるからだ。
そしてこれをnumber.learn.datに保存し、以下のように学習。
$ svm_learn -l 1 number.learn.dat number.model.dat
学習したモデルをテストする。以下のようにして実行。学習データでテストするので全問正解してくれないと困る。
$ svm_classify -V number.learn.dat number.model.dat
1 1.09901
2 2.10007
3 3.10051
4 4.10014
5 5.65482
6 6.23774
7 6.90056
8 7.89958
9 7.31665
10 9.90014
Accuracy: 100.00000% (10/10)
Precision: 100.00000% (10/10)
Recall: 100.00000% (10/10)
System/Answer p/p p/n n/p n/n: 10 0 0 0
あれ?9が7.31665で間違ってるように思えるがスコアはどれも100%だ。これはこれで良いのか??謎。
他はおおむね良好。
このモデルをC++のプログラムから使う。
それには以下のようにする。
TinySVM::Model m;
if (! m.read("number.model.dat")) throw;
cout << m.classify("1:0 2:1 3:1 4:0 5:0 6:0 7:0 8:1 9:0 10:0 11:0 12:0 13:1 14:0 15:0 16:0 17:0 18:1 19:0 20:0 21:0 22:0 23:0 24:0 25:0") << endl;
下のようなちょっと形を変えた1を食わせてみる。
.xx..
..x..
..x..
..x..
..x..
結果は・・・2.64268。あれ?
戻り値はReturn distance from the decision hyperplane. とあるけど超平面からの距離=識別結果のクラスID??なんだかよくわからないな。
仕事でよりよいパターン認識をする必要があってSVMを使おうかとちょっといじってみたけど、この理解度ではまだ手を出さない方が良さそうだな。昔の偉い人は正体不明のものを使って失敗したときに「よくわからないものを無理して使うからよ」と言って怒ったことだし。
2008年06月10日
上級救命講習
一応免許を取るときに少しだけ心臓マッサージなどの講習は受けてはいるけど、そんなちょっとでは人を助けられる自信がない。よって市がやっている救命講習を受けておく。
救命講習のご案内
以前、民間の救命講習を受けようと思ったんだけど結構高くて結局受けずじまいだった。
が、市がやっている講習はテキスト代だけで受けることができるので受けておく。幸い家からも近い。
小心者の俺なので、道具だけあってももしもの場合におろおろするだけだと思われるので、受けておくとちょっとはマシになるかもしれない。
死んでしまった19歳の男二人は友達同士だったらしい。
そして一緒に歩いていて事件に巻き込まれたその友達がMixiに日記を書いている。
交通事故 なんで俺らが・・・
事故直後の素人目に見ても危険な状態の友人の周りで、カメラや携帯で写真を撮るだけの野次馬の事を書いている・・・。
講習を受けることで、助ける側の人間になれる勇気が持てるといいな。
2008年06月09日
アキバの事件
この週末は土曜に11人制のサッカーで、今日は他チームとのフットサルの試合でめっちゃつかれた。
でもそれなりにがんばれたし楽しかったな。サッカーの方では得点に絡むことができたし。
月曜はしんどくて死んでるだろうけど。
そして帰ってきたら秋葉原ですごい事件があったと聞かされてネットで情報収集。
うーむ7人も死者が出るとは恐ろしい・・・。
しかも3月に秋葉原でデモ展示した場所のすぐ隣じゃないか。
写真をうpした人のを無断転載させてもらうが、おそらく秋葉原駅のホームから撮ったと思われる写真。
![]()
左のビルがデモ展示をしたビルだ。
3月のアキバ行ったよと書いた記事でアシモが写っている写真の後ろがすぐ現場となる。
ちょうど犯人のトラックが止まっていたあたりになるのかな?
刺された人が多数出た交差点にあるソフマップで買い物もしたし、行ったことがある場所でこれだけ悲惨な事件があるとは・・・。
そして例によってTVではゲームの影響だと、脊髄反射的なコメントが垂れ流されてる。
20代以下が犯罪を犯せばとりあえずゲームのせいにして納得できるんだから便利な理由だよな。
社会が悪いのではない、大人が悪いのではない、ゲームが悪いんだと思えば安心できるんだろうか。
マスコミは犯人がいかに凶悪で、異質で、自分たちとは違う人間だと強調しているように思えるけど、犯人が携帯サイトに書き込んだ内容を読むと、そこからは異常さは感じ取れず、むしろ同じ人間のように感じた。正気と狂気の境目はそれほど離れておらず、"一線を越えるか越えないか"なんだろうな。
あと他の写真を見ると、被害者と被害者に懸命に救命措置をしている人を遠巻きに見守っている人たちの写真が印象的だったな。交差点で倒れている人と、距離を置いてガードレールを挟んで歩道で見守る人たち。あっち側とこっち側みたいな。
別に見ているだけの人を非難している訳じゃなくて、自分もその場所にいたら何ができただろうかと思うと複雑な気持ちになる。
助ける側に参加できるようにするためにも、心肺蘇生用の携帯型フェイスシールドを注文しておいた。
これを鞄に入れておけば、きっととっさの時に「自分は素人でなんの技術もない。様子をうかがうことしかできないんだ」と言う考えから「俺には助けるための道具がある。他の人よりは力になれるから行くべきだ」と言う考えになれるだろう。
購入したのは3Bサイエンティフィック社の人工呼吸用マスク。家に置いておく用もあわせて2個買っておいた。
フェイスシールドで検索すると、もっと小型のキーホルダー型のフェイスシールドもあるので、こちらならホントに常に携帯できそうだ。
使う機会が無いにこしたことはないけど、家族の急病もあり得るので備えあれば何とやらと言うことで。
2008年06月06日
無題日記
オレンジニュースから
Googleの浜地慎一郎さん、@ITの西村賢さんにエラい誤解を受ける
http://shinh.skr.jp/m/?date=20080604#p01
何気ない会話を記事にされた人の話。
オフレコでも気をつけないとダメってことね。Google社員ならなおさら。
この人の作った弾幕ゲー遊んだことあるな。
ウインドウマネージャを自作するぐらいマニアックな人だったのか。
これぐらいマニアックで変な人でないとGoogleには入れないのかw
映画、パプリカを観る。
映像がすばらしいな。色遣いがとてもきれい。
話は開発中の夢を共有できる機械が盗まれて、盗んだそのテロリストは他人の夢に侵入し悪夢に変えることで発狂させるみたいな感じ。でも映像ばかり目がいってなんだか話をちゃんと理解できなかったw もう一度観なければ。
感想としては話を理解しきっていないのもあるけど、黒幕を含め行動原理が十分説明されないまま話が進むので「何でこの人はこの行動に出たのか」がスッキリしないまま終わってしまった。
今敏氏の作品はパーフェクトブルーや妄想代理人のようにこの映画も夢と現実と曖昧になるその境界みたいなのがテーマになっているようだ。相当好きなんだなこのテーマ。
そして平沢進の音楽は今回も神がかっていた。
平沢進は間違いなく天才。
パプリカでは幼児向けの人形が一つのキーアイテムのようによく出てくる。
小さい子向けの人形って日本のだけにかかわらず、なんであんなに不気味なんだろうか。目が大きくて無駄にリアルだからか?
小さい子供(小学校低学年ぐらいまで?)が好む表情と、それ以上の年齢が好む表情は違うと言うことなんだろか。小さいときは表情を読み取る力が十分ではないために、それを補完するため表情を強調すると大人からは不気味に見えるとかそんなんか。
プログラミングの方はぼちぼち進んでいる。
一度完成したが自分で使ってみて「なんだこのそびえ立つクソは!」と思いちゃぶ台返しじゃないけど作り直すことに決定。
データ入力に難があるので、データ記述言語を作り、その言語でデータ入力することにする。
XMLでも良いじゃんという話があるがせっかくなので自作する。何がせっかくなのかはわからないけど勢いとかそんなん。