今何かと「クールな」アニメ、MUSASHI -GUN道-についてまとめられています。MADが面白すぎ。
FLVファイルのURIを、ダイレクトに取得できるように改良してみました(改良版Perlスクリプト)。
ここ数日、PIA少尉のサイトにアクセスできなくなっています。DNSでドメイン名を解決できないことが原因です。IPアドレスがわかればアクセスできると思いますが、どうなんでしょう。
Domain Name: PIASS.COM Registrar: NETWORK SOLUTIONS, LLC. Whois Server: whois.networksolutions.com Referral URL: http://www.networksolutions.com Name Server: SRVR10.CRANE-INC.CO.JP Name Server: SRVR11.CRANE-INC.CO.JP Status: REGISTRAR-LOCK Updated Date: 23-oct-2004 Creation Date: 08-aug-1996 Expiration Date: 07-aug-2012
本日時点で、上記のような状態です。期限が2012年ですから、レジストラによる意図的なロックでしょう。移転絡みかな?
関係あるかどうかわかりませんが…というか、ドメイン名関連の話は全般的によく知りません。
2月26日にごちゃごちゃやっていたISBN DBは、ちょっと動かしただけで飽きてしまいました。あのまま放置です。動くとわかってしまうと急激にやる気が失せる罠。なのに、懲りずに又作る。
以下、メモ程度に。
今回のターゲットはGoogle イメージ検索です…今のところは。というのは、他のサイトにも適用できるようにモジュール化する予定です。Google Imageを始めとする、連鎖的にリソースを取得できるサイトは、どこも似たような作りになっています。作りが似ているので、ユーザのオペレーションもほとんど同じになります。これを計算機にやらせる場合、だいたい次のようになるでしょう。
おおよそこの手順に従っていれば、YouTubeだろうがAmazonだろうが、何だっていいのです。要は、一発目のリソース取得方法とその解析〜URI作成が各サイトで異なるだけですから、その部分は別モジュール化(プラグインのように動的変更)すればよい。で、今のところはGoogle Imageにしか対応していません、ということです。
AmazonやYouTubeについては調査済みなので、後は実装するだけです。が、例によって「動くとわかるとやる気喪失トラップ」が発動しそうで、何とも。
今回はDBMSも名前付きパイプもなし、レギュラーファイルとディレクトリのみでキューを作成しました。外部プロダクトになるべく頼らない、代わりにファイルシステムに依存した設計です。キューに入っている要素の件数に依らず、キューの動作速度はほぼ一定となりますが、エンキューできる件数はファイルシステム依存です。
これなら、Perlとwget環境さえあれば、大抵のOSで動くでしょう。Windows 2000とCent OS 4.2で動作確認しました。
動作はデーモン型です。キューを監視して、エンキューされたら逐次wgetでリソース取得。この辺の考え方は前回から全く変わっていません。
今のところ、シェルからPerlをキックする方式ですが、CGIもありかなと考えています。デーモンは予め動かしておいて、種(一発目のリソース)の取得だけをCGIから取らせるようにするとか。例えば、入力用のフォームを用意して、入力された文字列をキーにGoogle Imageで検索、これを種として後は自動で以下略。CGIの場合、WWWには公開しないか、アクセス制限をかけた方が良さそうですけどね。スパムな書き込みをされるとサーバ側がちょっと迷惑。
ちなみに現在こんな感じで動かしています。
$ ./recowww start
$ ./recogi start
$ ./recoenq gi-search "あふがにすタン"
買って来ました、ソルジャーフォース。これはどう見てもスターソルジャーです。懐かしいなあ。ファミコン版はちゃんと裏面もクリアしましたよ。レーザーも取りましたよ。
このソルジャーフォース、BGMは原作のアレンジになっています。裏(ナイトメア)はスーパースターソルジャーのBGMになっていて、さらに燃えます。ナイトメアでの敵の高速化・グラフィック変化などもうまく再現&アレンジできています。誘導弾が紫色+残像で若干見にくい(原作は赤色で残像なし)のが難ですが、全体的に良くできているのではないでしょうか。
今日はEASYでステージ32-Bの真ボスらしき敵まで行きましたが、勝てませんでした。
和布蕪とかモロヘイヤとか納豆とか、ああいったねばねばべとべとしたものは嫌いです。
デカプリン製造技師 デカ 名詞,一般,*,*,*,*,デカ,デカ,デカ プリン 名詞,一般,*,*,*,*,プリン,プリン,プリン 製造 名詞,サ変接続,*,*,*,*,製造,セイゾウ,セイゾー 技師 名詞,一般,*,*,*,*,技師,ギシ,ギシ
生卵と僕 生 接頭詞,名詞接続,*,*,*,*,生,ナマ,ナマ 卵 名詞,一般,*,*,*,*,卵,タマゴ,タマゴ と 助詞,並立助詞,*,*,*,*,と,ト,ト 僕 名詞,代名詞,一般,*,*,*,僕,ボク,ボク
神尾美鈴 神尾 名詞,固有名詞,人名,姓,*,*,神尾,カミオ,カミオ 美鈴 名詞,固有名詞,人名,名,*,*,美鈴,ミスズ,ミスズ
カツカレーは天翔らない カツ 名詞,固有名詞,一般,*,*,*,カツ,カツ,カツ カレー 名詞,一般,*,*,*,*,カレー,カレー,カレー は 助詞,係助詞,*,*,*,*,は,ハ,ワ 天翔ら 動詞,自立,*,*,五段・ラ行,未然形,天翔る,アマガケラ,アマガケラ ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
なかなかやりますね、和布蕪。
そうそう、ATOK2003。「翔る」はラ行五段なので未然形は「翔ら」なんですが、「かけらない」としても変換できません。「かけない」とすると「翔けない」と変換されます。同じラ行五段の「侍る」は「はべらない」として変換できるのに。おかしいよ、ATOK。
地球防衛軍は一人じゃない!でも二人しかいないぞ! 地球 名詞,一般,*,*,*,*,地球,チキュウ,チキュー 防衛 名詞,サ変接続,*,*,*,*,防衛,ボウエイ,ボーエイ 軍 名詞,接尾,一般,*,*,*,軍,グン,グン は 助詞,係助詞,*,*,*,*,は,ハ,ワ 一 名詞,数,*,*,*,*,一,イチ,イチ 人 名詞,接尾,助数詞,*,*,*,人,ニン,ニン じゃ 助詞,副助詞,*,*,*,*,じゃ,ジャ,ジャ ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ ! 記号,一般,*,*,*,*,!,!,! でも 接続詞,*,*,*,*,*,でも,デモ,デモ 二 名詞,数,*,*,*,*,二,ニ,ニ 人 名詞,接尾,助数詞,*,*,*,人,ニン,ニン しか 助詞,係助詞,*,*,*,*,しか,シカ,シカ い 動詞,自立,*,*,一段,未然形,いる,イ,イ ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ ぞ 助詞,終助詞,*,*,*,*,ぞ,ゾ,ゾ ! 記号,一般,*,*,*,*,!,!,!
うーん、「一人」「二人」くらいは解析して欲しいなあ。
どういふことでせうか どう 副詞,助詞類接続,*,*,*,*,どう,ドウ,ドー いふ 動詞,自立,*,*,四段・ハ行,基本形,いふ,イフ,イフ こと 名詞,非自立,一般,*,*,*,こと,コト,コト で 助詞,格助詞,一般,*,*,*,で,デ,デ せ 動詞,自立,*,*,サ変・スル,未然ヌ接続,する,セ,セ う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ か 助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
どういうことでしょうか どういう 連体詞,*,*,*,*,*,どういう,ドウイウ,ドーユウ こと 名詞,非自立,一般,*,*,*,こと,コト,コト でしょ 助動詞,*,*,*,特殊・デス,未然形,です,デショ,デショ う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ か 助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
三銃士の正規表現は大きく四通りあります。
アトス|アラミス|ポルトス
となる。アト ス アラミ ス ポルト ス
(アト|アラミ|ポルト)ス
となる。ア ト ス ア ラミ ス ポルト ス
(ア(ト|ラミ)|ポルト)ス
となる。アラミ ス ア ト ス ポル ト ス
((ア|ポル)ト|アラミ)ス
となる。しかし、正規化の度合いで文字数を比較するとそれほど差はありません。
アトス|アラミス|ポルトス (アト|アラミ|ポルト)ス (ア(ト|ラミ)|ポルト)ス ((ア|ポル)ト|アラミ)ス
発売前からパッチを公開するのも凄いな。しかもギガオーバー。OracleやWebLogicのパッチ(という名の総入れ替え)でさえ数百MBだというのに。
いやいや、つがるぶろぐ。によれば、ゲームに必要なデータが抜けているとも受け取れます。なんだか、アレを思い出しましたよ。よりしろ。
自宅サーバ六号機に導入しました。サーバが6台もあるんかーと思われがちですが、一号機はとうの昔に退役、三号機はサーバじゃないし、五号機は放置状態なので実質3台です。いい加減、機能を集約したいところですが、どこで何が動いているのかわからなくなってきて何ともかんともニンニン。
いえ、今日はHyper Estraierです。libiconvとかMeCabとかいろいろ突っ込んで構築。そう、昨日の和布蕪はHyper Estraierのためだったんですよ!Hyper Estraierに和布蕪は必須ではありませんが、せっかくだから形態素解析もやっちゃいます。
Hyper Estraierはインデックス作成が速い。Apache 2.0付属のHTMLマニュアル(1178ファイル、20MB)で25秒、J2SE 5.0のドキュメント(9793ファイル、300MB)で5分24秒です(共にN-gramの場合)。J2SE 5.0のドキュメントに分かち書きによるキーワードインデックスを追加しても、1分24秒しかかかりません。
あと、N-gramだと旧仮名遣いの文書もそこそこ扱えるようです。数ある形態素解析器でも旧仮名遣いに対応したものはないみたい(少なくともKakasi、茶筅、和布蕪、JUMANはダメっぽい)なので、これはちょっと驚き。素敵です、N-gram。でも旧仮名遣いの文書はほとんどないのでした。残念。
これはNamazuにも当てはまるのですが、どうもCGI出力部の設計がいまいちです。融通が利かないし、ソースは汚いし、実装はアドホックだし…全然人のこと言えませんけど。暇を見つけて、ちょっと手を入れてみますかね。Hack! Hack!
何気なく寄った近所の古本屋でコミック版ハルヒ一巻を発見したので確保。黒歴史版ではない方。
Apacheのアクセスログ解析。いい加減、テキストファイルベースだと不便なところがあるので、SQLite DBに突っ込んでみることにしました。全体制御はPerlで。
まずはログファイルの読み込み部分。ログフォーマットの解析は、CustomLogディレクティブの文字列を渡すと対応した正規表現を生成するモジュールがある(昔作った)ので、大抵のログフォーマットには対応できます。しかし、それに対応したSQLite表はおいそれとは変更できません。今回はとりあえず、標準カスタムログのcombinedフォーマットに対応させてみます。
次、テーブル設計。テーブルは生データ表、アクセス時刻表、リファラー表、ユーザーエージェント表、検索文字列表、その他拡張表に分割。これらはアクセスIDで単純に横に繋ぐだけのシンプル構成。生データ表以外の表は、生データから起こすことができるので、いつでも再作成可能。
生データ流し込み。トランザクションを作って、Prepared Statementを使ってひたすらINSERTするだけのバカチョン処理。Perl正規表現によるログ要素抽出を含めても、数十万件程度なら2〜3分で終わります。
ここから横展開。明日。
サーチエンジン経由のアクセスに対しては、リファラーから検索文字列を取得。以前作った、検索文字列解析モジュールをほぼそのまま流用することに。
UA表には、User-AgentフィールドがRFC的に正しければプロダクト名、バージョン、コメントを格納します。「それってRFC的にどうなのよ」、な怪しげなUAはとりあえず無視。
リファラー表には、リファラーURLからFQDNを抽出したものと、そのFQDNを逆転させた文字列を格納することにしました。www.foo.bar.comならcom.bar.foo.wwwといった具合。この逆転させたFQDN(何か呼び方あったっけ?)は、リファラースパム対策に利用します。TLDから見ていくと、スパムかどうかを判別しやすいので。
アクセス時刻表には年・月・日・曜日・時・分・秒・W3CDTF・JD・TZDを、個別に列として持つようにしました。一般に、データはバラしておいた方が使い勝手は良くなりますからね。
で、出来上がったデータベースファイルは340MB…orz バキュームかけるとしばらく帰ってきません。
本体改造。Padクラスを弄くりました。フォントの色とかサイズは変えられた方がいいよね、ということで。
バグだゴルァ。printf(3)なんて使っちゃいけないんだよ。
いや、一切使うなと云うことではなくて、printf("Hello world.");
みたいに文字列をただ標準出力するためだけに使うのはいかがなものか、ということです。
printf(foo); のようなコードはしばしばバグを引き起こす。なぜなら foo に % 文字が含まれてるかもしれないからである。foo が信頼できないユーザー入力から作られている場合には、その中に %n が含まれていることがあり、 printf() 呼び出し時にメモリへの書き込みが起こり、セキュリティーホールを作ることになるかもしれない。
そのままこれに引っかかっていました。がっくし。
本体改造。いろいろとアレなんだよ。何なんだよ。
左下の三角ボタンって何かに使えるかなあ。
本体改造。
いろいろ大変なんです。一つ機能を追加するだけでも、PadIntf.cpp, PadImpl.h, PadImpl.cpp, PadFormUnit.h, PadFormUnit.cpp の5ファイルに手が入るという…もう面倒なので、PadFormUnitにはなるべく触れずに、PadImplにカリカリ書いています。そのうちPadFormUnitに転記しないとだめかな。
あと、イベント、どうしましょ。一行入力モードの場合、ユーザは入力し終わったときにENTERキーを押して「決定」するでしょうから、制作者側はENTERを拾ってあげて、ごにょごにょしたいわけです。Pad.onEnter = function() { ... }
みたいにイベントを実装できるといい感じなんですが。
ここ一週間、珍しく「日記」になっている件について。
吉里吉里のイベント周りのコードをゴリゴリ書く…ためのコードをゴリゴリ書いています。Perlで。イベント周りの実装方法についてはこれといった資料がないため、ソースコードと睨めっこしながら読み解くしかありません。
XXXXクラスのイベントを実装するためには、XXXXIntf.h、XXXXIntf.cpp、XXXXImpl.h、XXXXImpl.cpp(VCL実装があれば XXXXFormUnit.h、XXXXFormUnit.cppも必要か?)にいろいろとアレしないといけないわけで、めどい。イベントの内容によって多少の差異はあるものの、どれも似たり寄ったりなのである程度は自動生成できます。さすがに全自動は無理。XXXXImpl.cppあたりは、中途半端に自動生成させるよりも、一から手で書いた方がいいかな。
途中まで(XXXXIntfのみ)自動生成させた内容。そのまま貼り付けても、おそらく動かないであろうあたりが俺クオリティ。
Namazu 2.0.16にバッファオーバーフローのバグがあるのを見つけました。NMZ.{head|foot}に××××(検閲)するとコア吐いて死亡。本家ではとっくに(五月)修正され、本流に組み込まれていましたが、まだリリースはされていません。それまで誰も気づかなかったのでしょうか?Namazuの出力周りは本当に素敵。
職場とアキバが近いというのは、まあその、何だろうな。
THE お姉チャンポンとSDメモリカードを買ってきました。ほか、BLACK LAGOON(ロベルタちんのために第一巻だけ)とか銭(4)とかワンダと巨像とか。SDカードは1GBのものです。これだけあれば、先月のようにSDカードの容量がピンチになる心配もなくなるでしょう。ノートPCの一台でもあれば、そちらに退避しながらという手もありますが、生憎持っていないので。いい加減一台くらい欲しいな、ノートPC。
血みどろ斬撃姉ちゃん。姉ちゃんよりも、どっちかというと妹さんの方が…