某ぱぱんだぽーたるが全く更新されないのに業を煮やし、RSSのアンテナRNAをインストールした。しかしこれはこれで壮絶に重いな。ローカルファイルを参照できないのも難点だ。XML::RSSで簡単にサンプルを開発してみたが、テキスト解析だけならこんなに重くはない。rna.cgi一体何やってんだろう。
がーん。クリエイティブの携帯ミュージックプレイヤーMuvo^2が完全に壊れた。充電しても電源すらはいらない。まあもういい加減寿命かねえ。しかし、ここで流行のiPod買うのは何か電機メーカー社員として敗北のような気がするのはナゼダロウ。欲望には忠実にあらねば!(マテ)
PlayStation 3 (120GB) チャコール・ブラック (CECH-2000A) 【メーカー生産終了】
ソニー・コンピュータエンタテインメント
¥ 29,980
これより安いBDプレイヤーもある。しかしPS3のゲーム遊べるのは大きいだろう。
XBox360と違って HDMI端子標準型 (ケーブル添付はされないが) なのは大きい。 あきばおーとか上海問屋とかで安く売ってるものでも十分綺麗に映るだろう。 凝りたい人は高いケーブルを買えば良い。
完璧ではないが FlashPlayerも動くブラウザ。 リモコンでタブのように サーフェイス間を移動する操作感は、メモリが少ないにせよ快適である。
リビングに置くデバイスという意味では、PCより遥かに設置が 楽なことは疑いない。 今ならこれが28481円!
オタクには「できることはPCの方が遥かに多い」とかDisられちゃうわけだ。
TokyoTyrantで開発し終わってしまったものの、 やはりLinuxでしか動かないのはアレだし、 コンシューマでは性能面での有利はほとんどないし、 SQLite3かせめてMySQLで作り直そうか.....とか 考えていたらだいぶ間が空いてしまった。
面倒くさいのでTokyoTyrantで作る方法を公開する....が、 なんと Debian Squeezeは未だにまともなTC/TTをaptでインスコする方法がない ことが判明し、さらにやる気がなくなるのです。
FAL Labsから以下の4つを落としてくる。 バージョン進んでたらごめんね。
インストールは基本的にconfigure; make installでイナフ。
tar xvzf tokyocabinet-1.4.47.tar.gz cd tokyocabinet-1.4.47 ./configure make install cd .. tar xvzf tokyocabinet-perl-1.34.tar.gz cd tokyocabinet-perl-1.34 perl Makefile.PL make install cd .. tar xvzf tokyotyrant-1.1.41.tar.gz cd tokyotyrant-1.1.41 ./configure make install cd .. tar xvzf tokyotyrant-perl-1.16.tar.gz cd tokyotyrant-perl-1.16 perl Makefile.PL make install cd ..
これで/usr/local/binにttserver, tcrmgr, tctmgrあたりが入っていればとりあえず今後の動作に問題はない、はず。Perlスクリプトの動作確認として、
---------a.pl--------- #!/usr/bin/perl use TokyoCabinet; use TokyoTyrant; -----------------------
こんなファイルをエディタで作ってperl a.plしておいてください。 エラーが出なければモジュールもインストールされています(原始的)。
今回はTokyoTyrantで2つのサーバを動かす。
二つのサーバの性格は異なる。前者は頻繁にEPGデータを更新し続ける (ぶっちゃけ消えても良いし作り直すことも簡単)だが、 後者はある種録画リストのようなものなので消えるととっておきたかった 番組も全て消える。これは困る。うっかり消さないようにしたい。
実はTokyoTyrantはMySQLでいうところのmy.cnfを持たないので、 全部ttserverというコマンドに引数を指定することで動かす。 そしてその パラメータはけっこう多い 上に、Perlからの アクセスも完全に合わせておかなければならない。 さらに認証がないしテーブル名もないし型もないので、うっかり ポート番号を間違えてvanishコマンドを発行したりすると全部消える(笑)
また、MySQLのように同一のINDEXを持ったDBを複製するのにも、 既存のDBからmysqldumpでdumpして編集したものをWebページに 貼ったりできないので困る。
ここは....原始的でもいいから何らかのラッパーが必要である。
そこでサーバのパラメータ定義とテーブルの定義を、1つのPerlファイルに書いて、Perlスクリプト側もttserverを起動するためのrunシェルスクリプトとも共用する、というしくみにした。ファイルは全部Perlスクリプトとして開発。
定義ファイルのpostconf.plのサーバ起動部分のパラメータの例。 後でワンセグ野郎Linuxパッケージとして配布するので保存したりする必要はないです。
$postconf::table = { 'epg'=>{ 'tabletype'=>'t', 'coltype'=>'epg', 'host'=>'localhost', 'port'=>1993, 'maxcon'=>128, 'thnum'=>4, 'timeout'=>120, 'opts'=>'#dfunit=4#xmsiz=0m', 'cleantype'=>'normal', }, 'epg2'=>{ 'tabletype'=>'t', 'coltype'=>'epg', 'host'=>'localhost', 'port'=>2012, (省略)
パラメータ沢山あるけど、これらはttserverの起動に必要なものです。 これをdaemontoolsのrunスクリプト、つまり実際のttserver引数に 渡すのに、param.plというコマンドを作りました。 /mnt/epgserver/runの中身は、
(前略) port=`perl $DIR/param.pl $tablename port` timeout=`perl $DIR/param.pl $tablename timeout` (こんな風にパラメータを取り出しておいて) if [ -n "$maxcon" ] ; then ulimit -n "$maxcon" >/dev/null 2>&1 fi cmd="$cmd -kl -port $port -pid $pidfile" if [ -n "$thnum" ] ; then cmd="$cmd -thnum $thnum" fi (実際のttserverに渡す引数列を作成する)
ようになっている。 これでrunスクリプト自体はtablenameの部分を"epg", "epg2"とか 変えるだけで完全に共用化できるわけ。
TokyoTyrantはKVSの中では珍しくテーブルデータベースをサポートしている(後継のKyotoTycoonからは消えてしまった)。しかしインデックスを張る部分はけっこうバカ。Perlからはsetindexというメソッドで実行できるのだが 既にインデックスがあっても再構築する という謎な動作をしてしまう。当然動作中に誤って実行すると糞遅い。
マニュアルやソースをみても回避する手段がわからなかったので、 仕方なく実際にttserverが作るインデックスファイルの存在をチェックして、足りないインデックスだけ生成するようなラッパー関数open_tyrant()を開発した。 もちろんテーブル名だけ指定すれば、ポート番号などはpostconf.plから 勝手に引いてくるのでらくちんである。こんな感じ。
my ($pe, $pec, undef, undef) = &post2conf::open_tyrant("epg:");
$peは、raw codeでいうところの「TokyoTyrant::RDBTBL->new(); open();」した後のオブジェクトである。
もう一つ問題が。KVSではカラム名一覧がとれない。そりゃそうだ...どの行にも好きなだけカラム名を足せるのだから(凸凹テーブル)。しかし、SQLライクに使おうとすると大変不便だし 人間は間違える動物 であるから、誤字タイプミスのみならず、テーブルAにはあるカラムがテーブルBにはなかった、なんてミスを減らすために何らかの方法でカラム一覧が欲しいわけです。serviceidとserivceidなんて間違いわからねえよ..........
そこで、postconf.plの定義に、
$postconf::coltable = { 'epg'=>{ 'phych'=>102, 'ptype'=>102, 'sectionid'=>103, 'networkid'=>104, 'serviceid'=>105, 'eventid'=>106, 'starttime'=>107, (省略)
というカラムハッシュを作成しておき、open_tyrantの返ってくる リストの2つめ$pecに返ってくるようにした。 検索条件を指定する場合は、
$qry->addcond($pec->{'stime'}, $qry->QCNUMGT, $stime);
みたいにして使うわけです。わかりやすい。ついでに言うと数値変換しているので(ちょっぴり)空間効率も良くなるはずです。
_ diablo 3 [People are yours alright! . We at the very least should ge..]
_ 職業。本屋 [『弱り目に祟り目』かな…]