2005年8月アーカイブ

とりあえずconfigure



とりあえずコンパイルはギリギリ通るconfigure.acをpg_senna用に書いてみた。autoconfとかをほにゃららと実行して、



./configure \
--with-senna-cfg=/path/to/senna-cfg \
--with-pg-config=/path/to/pg_config
make
make install

はできるはずー。しかしCのディストリビューション書くのって難しいなぁ。perlだとBuild.PLかMakefile.PL書けば一発なのに。やっぱりPerlはものぐさなプログラマー用なんだな・・・


Automation is *HARD*



Automation - 自動化。


大学を卒業してまずつっこまれたマトモな仕事がautomationで、結局4年以上もそれに従事していたのだが、それでわかったことは「人間が介在しないシステムを構築するのはものすごくものすごく難しい」。


プログラムというのは人間がやりたくない面倒くさい事をやってもらおうというのが基本なんだけれども、それでもほぼ必ずと言って良いほど人間がどこかでアクションを起こすのを前提としている。それが入力作業であれ、入力内容の確認であれ、人間がそこに介在するのだ。


それと対極に位置するのが一定の作業の順番を覚えているだけでなく、エラー等があった場合に自己診断をして制作者のポリシーに一番近い事をしてくれるプログラムであると思う - しかも自動的に。もちろん全てのケースに対応できるわけではないのだけれども、考えられるケースを予測しそれに対しての応対を文章化し、ユーザーがあとで何が起こったか分かるようにしつつもgraceful recovery(優雅な復旧)を行う。最悪のケースでしか落ちない、停止しない。


それはとてもとても難しい。auto*系のツールも結構それに近い事をしているなー、と思いつつ作業している。難しい。


autoconf a la FreeBSD



どーーーーしてもautoconfが動かない。何度ドキュメントを読んでもうまく動かない。何度ググッっても動かない。最後に・・・と思って頑張って検索したら直接は関係ないメーリングリストに




Bear in mind freebsd autofoo is heavily broken when building outside of
ports as it is patched to work with the ports build method .

http://lists.freedesktop.org/pipermail/xcb/2005-July/000898.html



うがああああ!!!!orz


色々処理



税金、国民保険と滞納しかけてたので支払い。ついでにNTTも滞納ギリギリ。郵便はちゃんとチェックしないといけませんな(とは言いつつ、アメリカ時代の最後は郵便を2週間に一回ほどしかチェックしてなかった期間が3年程続きました)。NTTはコンビニでオーケーだったけど残りの二つはとりあえず銀行に行く事にして、ついでに取り寄せしてもらっていた本を取りに駅前におニューの自転車でゴー!


まず銀行に行って暫く順番を待ち、税金を納めてから本屋へ。サービスカウンターに行くと外人さん(インド人?)がポイントカードがどーのこーので店員さんとカタコト会話。助け舟を出そうかと一瞬思ったんだけど、話はなんとか通じてるみたいだからとりあえず静観に決定。あまり出しゃばってもしょうがないしね・・・で、俺の番になってすぐにゲット。「怪談牡丹灯籠」入手!←リンクしようと思ったらAmazonでは取り扱ってなかった・・・orz


で、本屋の割と近くの気になってたパン屋で読書しつつランチ。ポークパテを黒ごまバゲットでサンドイッチにしたもの。う、うまぁああああ。パテ好きにはたまらん。うまい、うまいよかーちゃん。もう少し野菜が入っててもいい感じなんだが、とにかくパテがうまいですねー。700円でこれならいいでしょ。ただし、カプチーノをつけたら+600円なので要注意。このサンドイッチにはコーヒーしかありえんだろ、と思ったので別に悔しくはないのだが、予算は1000円以上を見ておいたほうがいいな。


食べ終わって、ちょっとまだ駅前に用があったかなぁ、と思い返して特に何も思いつかなかったので帰宅して今にいたる。


さて、あとは今日はautoconf修行しますぞい。


虫食い



昨日偶然発見したのだけどこのページはやばすぎる


昨日、なんかの話がきっかけでカマドウマの画像を探してたら辿り着いてしまったページ。正直最初は楽しく読んでいたけど段々段々いや~~~な感じになってきた。虫の写真はお腹いっぱい。


おお



某Hてなの某近藤さん(id:jkondo)がCPANにモジュール登録してるー


リスケ



明日の朝イチのミーティングリスケ。大阪か・・・


なんでできんのじゃ



日記才人でpg_sennaを使おうと思ってこちょこちょやっているんだが、なんだかコンパイルが通らない。なんでだーーー。


トムヤム麺



昼頃にオフィスに行く前にビデオ屋に1週間前に借りたDVDを返却。ついでに駅前の中華料理屋で鶏の甘酢あんかけ唐揚げを食べたいところをぐっと我慢してトムヤム麺を。悪くないけど、あんまりトムヤムしてなかったなぁ。ほたてがどかんと入っててうまし。


なんか、最近思うんだけど日本での料理はなんでも材料や道具が揃うので想像力をフルに働かせた調理ってあんまりできんなぁ。外食もなんでも揃ってるから「よりうまいものを」の意欲も海外にいた時より微妙に低下。


ま、もちろん美味いものを食べれるのは幸せなんだけどね。


日焼け



この間のクルージングでちょっと日焼けしたらしい。会う人全員に言われる。


自転車



自転車買った!今まで借りてたんだけど、やっぱり俺が乗るにはちーと細いホイールでは無理があると思ったのと(前回の表参道転がり事件がやっぱり響いてる)、やっぱりちょっとオフロードでもいけそうなタイヤのほうがいいなーということでLouis Garneauの自転車購入。むひひ。


一応



ワタクシ、一応フリーです。フリー。R社にいたくないとかそういう意味では全くないんだけど、色々やってみたいからあんまり制限したくないんだよねぇ。


某S.A.社とか、某Hてな社とか、ちょこちょこできる仕事あったらいくらでもやってみたいとは思ってるのです。そう言えばアメリカの某ST社からお話がちょっとあったんだけど、書類の問題で駄目だったんだよねぇ。今度はその辺の会計とかをちゃんとして仕事をもらいたいところである。


作りたいモジュール



bison + lexでパーサーを作りたい。これにPerlインターフェースを絡めたい。このやり方を確立できたら書きたいモジュールが二つくらいあるんだよなぁ。


ちなみにSYCKをちょっと見てみましたが・・・面倒くさいなぁ。


サラダ



前日の残り物の大根と、タマネギを使って簡単サラダ。大根は千切り、タマネギは薄切り。大根は塩で揉んで水分を切っておいて、タマネギは水に少しさらしておく。その間にツナ缶をあけて胡椒、クローブ、オレガノと醤油で味付け。特に胡椒はたっぷり目に。冷蔵庫の中にあったゴマドレッシングを大根とタマネギの上にかけてさらにその上からツナを盛り合わせ、最後に炒りごまをかけてできあがり。ぱくぱく。


Cruise



ちょっとハイソ?なクルージングなるものをしてきた。新山下公園から出発して、海ほたるまで回って川崎方向から帰還。東京湾の水はお世辞にもキレイとは言えないが(前日「世界ふしぎ発見!」で超キレイなクロアチアの海を見てしまったのも敗因)、なかなか楽しかった。


しかし沖で停泊してくれたほうがよかったなぁ・・・


ぐるぐるまわる~



所用で行った店で「ガチャガチャポン」のエンディングテーマを流してて、それが頭の中でノンストップリフレイン。この番組は子供向けだけど本当におもしろいので月曜の午後4時半頃にテレビを見れるなら是非一回見ていただきたい。生瀬+室井ペアは良い!


クローラー



先ほど新たな人柱を登録するのに1週間かそこいらぶりにこっそり日記才人クローラーのDBを見たのだが、更新間隔のデータ蓄積はされているものの、平均更新間隔カラムがアップデートされてない・・・orz


うーん、なんでだー


リスト系のモジュールを使ってみる



上記で書いてたのは



use Algorithm::Diff qw(LCS);
my $lcs = LCS($list1, $list2);


use List::Compare;
my $intersection = List::Compare->new($list1, $list2)->get_intersection;

の使用方法の違いと、あと細かい条件付けの話で色々思いついた事があったから。どっちも初めて使ったけど、いい感じ。あと、List::Utilも初めて使った。


やる気がなくて



やる気がなくてちょうど月末でもう少ししたらお金も入るし、と思って久しぶりにちとパチンコでもやるかー、みたいな気分で駅前まで。でもいざ来てみたら道すがらアルゴリズム考えついてしまって、「これ・・・某プロジェクトに使えるんじゃないか」「使えるとしてもドキュメントみないと詳細わからないしなぁ・・・」ってな事を考え始めてしまい、結局ドトールへ。


そんなわけで今ドキュメント読み中。もちろん毎日朝早く起きてちゃんと仕事をしているサラリーマンな方々には敵うべくもないが、これはこれでワーカホリックだなぁ、なんて思いつつ。


ラム



昨日のラム肉をキャベツとエノキ、それに一緒についてたもやしと一緒に炒めてぱくぱく。ラムはうまい。


おでかけ



台風の雨のせいで最寄りの駅前のスーパーに行くより某でかい駅前のデパートに行った方が買物しやすい(バスでいける)ので、ちょっとでかけてきました。デパ地下を回っていたら鰹の刺身のシッポ部分だけが安く売ってたので購入。あとラム肉がいい感じだったのでちょっと購入。これは2回か3回に分けて食べれるな。あとは野菜をちょこちょこと。思ってたよりデパ地下の野菜って悪い値段じゃないな。今度からもたまになら使おうっと


(昨日絶食とか言ってたのはどうした、とかのツッコミは無し)


ちなみにこれを書いてたら突然どしゃぶり。すげー。


いまさらですが



"Super Size Me"見ました。一言、こええええええええ


いやー、自分アメリカにいたときにそれなりにファーストフードって食べてたけど、これは怖い。たったの2週間で肝機能障害に陥りそうになる食べ物っていったいなんなんだよ!あと、俺もご多分に漏れずによくソーダ類は飲んでたのだけどあるとき「(アメリカだから)ソーダを飲むのはしょうがないけど、ダイエットにしたら?」と言われてからダイエット系しか飲まなくしたのはよかった(まぁダイエット系は他に害があるのでまたそれはそれなんだが)。30日で14kgの砂糖だっけ。すっげぇ。こわいよー。


ちょっとこれは機会があったら戒めのために購入しておこうかと思う。


Demolition



近所の昭和30年代チックな個人宅が取り壊されてる。俺の家のすぐ近くの家々も軒並みなぎ倒されてモダンな家屋に建て替えられたりしてる。それぞれの建物も老朽化してるのは確実なのでしょうがないんだけど、なんとなーくその後に建つ建物を想像すると昔の家屋が残ってもいいような気がしてしまう。


pg_sennaドキュメント

pg_senna



intなプライマリーキーを使うと落ちるバグがあるのでそこだけコメントアウトしちゃって文字列として扱っているけど、よりSQLライクな構文で動くようにしたrev 8をコミット。



CREATE TABLE foo (
id SERIAL PRIMARY KEY,
content TEXT
);
SELECT pg_senna_create_index('foo', 'content');
INSERT INTO foo (content) VALUES ('はげはげはげはげ');
INSERT INTO foo (content) VALUES ('はげはげはげはげほげほげほげほげ');
INSERT INTO foo (content) VALUES ('ほげほげほげほげ');

SELECT * FROM foo WHERE id IN (select 'foo'::SENNA @@ 'ほげ');
id | content
----+----------------------------------
2 | はげはげはげはげほげほげほげほげ
3 | ほげほげほげほげ
(2 rows)


色々やってみたけど 最初にやりたかった



SELECT * FROM foo WHERE 'foo'::SENNA @@ 'ほげ'

は外部にインデックスを持つエンジンという宿命上逃れられない事が分かったのでせめてインデックスへのパスを気にしなくて良い形で実装してみた。


あとはautoconfとかを使えるようにしないといけないんだけど、できるかなぁ。


会議中。



英語と日本語のチャンポンで会議中。頭の中がコンテキストスイッチしまくりでやりにくいったらありゃあしない。通訳を生業としてる人ってすごいなぁ。こんなのしてたら頭が焼き付いてしまうわ。


ちなみに現在の通訳の女性は金色のパンプスをはいてて・・・すごい。きっと海外育ちの日本人だな。


トンカツ定食



いつも会議に行く道の途中で気になっていたボロい外見のトンカツ屋。こんな駅前のくせして700円の定食。今日は会議が二つあってちょうど昼食を挟んでたので一人で喜び勇んで食べてきました。


見かけ通り、おっちゃんとおばちゃんだけでやってる店。トンカツはジューシーでとてもおいしい。本当はおまけでご飯にカレーをかけたりできるらしいんだけど、今日は白いご飯で。最後ご飯が少し余ってしまったのでごま塩で残さず食べたのでありました。


(ちなみに壁のあちこちに「おかわりした物は残さないでね★」とか書いてあるのでいつもよりさらに気をつけて残さないようにしましたよ)


pg_sennaメモ



さて、SELECT * FROM hoge WHERE primary_key IN (SELECT * FROM pg_senna_search(...))はちゃんと動くからいいことはいいけど、やっぱりもっとSQLチックに検索したい、ということで色々見ている。


俺としてはせめてこれくらいはしたいわけですよ:



CREATE TABLE foo (pk SERIAL PRIMARY KEY, contents TEXT);
SELECT pg_senna_create_index('foo', 'pk', 'contents');
SELECT * FROM foo WHERE senna @@ 'query'

どうもCREATE TYPE, CREATE OPERATORはしないと駄目だというのはわかってきた。どうやってシンタックスをSQLライクにするかだよなぁ。


銀座+Napa



朝会議に向かう途中、コンビニに寄ったら東京カレンダーに銀座とNapaの記事があったのでついつい購入。Napa行きたいなぁ。遊びに行くのには本当に良い所なんだよなぁ。


Collaborative Filtering



・・・のアルゴリズムをいろいろ見ているのだが、どうもなぁ。なんか実用的でないし、オープンなものもない。うー。


あとpg_senna、少しずつアイデアが湧いてきた。今下調べ中。


Perl Barewords



某所でひじょーに細かいミスを見つけたのだけど、そっちで指摘するのもアレなのでここでメモ。曰く、




require Module import Module qw(foo bar) if $condition;



eval "use Module qw(foo bar)" if $condition

と比べるとevalを使用する方法は$conditionが正になるまでエラーが検出できないのに対してrequire...の方はコンパイル時にスペルミス等を検出できるため、良いと思う



というコメント。俺も使うとしたら最初のほうに近い構文を使うのだけど、スペルミスの検出・・・?それは違うな。まず、コンパイル時に何かチェックが通ると言うのがおかしい。


例えば下記ソースでBEGIN {}ブロックはコンパイル時に実行されるので、BEGIN{}ブロックより前にrequire文の間違いが検出されればいいのだが、実際はそうならない:



use strict;
requir POSIX; # should be "require"
BEGIN { print "Compilation done\n" }

Perlにおけるベアワード(この場合、POSIX)まわりの処理は変数を使っている時と明らかに違うので注意。これが



use strict;
my $module = "POSIX";
eval "require $modul"; # should be $module
BEGIN { print "Compilation done\n" }

だったら確かに$moduleのスペルミスは検出してくれるんだけどね。というわけでミニPerl講座でした。


ちなみに




http://openfts.sourceforge.net/primer.html



次のステップはここを見てfunction callではなくて、普通にSQL文に全文検索を入れられるようにする、ってことだろうな。


pg_senna みたいなもん



(最新版の説明はこちら


pg_rastは出てるのにpg_sennaは出てないのはアレなんで、アーキテクチャはpg_rastのようにしてpg_senna作った。



http://dev.razil.jp/svnweb/pg_senna/browse/trunk/



結構色々と制限があって、(1) postgresql-8.x のビルドツリーが必要 (2) Makefileの中身を変更してtop_builddirを(1)のツリーに指定しなくてはいけない (3) postgresqlそのものにインテグレートしてるわけではないので呼び出し方がダサい。


・・・というわけなんだけど、とりあえず作れます:



svn co svn://dev.razil.jp/pg_senna/trunk pg_senna
cd pg_senna
vi Makefile <-- top_builddirを変更
make && make install

その後、データベースにpsqlでアクセスして



\i /path/to/pg_senna/src/pg_senna.sql
SELECT pg_senna_create_index('/path/to/index', 'tablename', 'primary_key', 'text_column');

すると、トリガーとかが作成されてインデックスの更新がされるようになる。その後(ここがかっこわるい部分なのだが)検索するには



SELECT * FROM tablename WHERE primary_key IN (
SELECT * FROM pg_senna_search('/path/to/index', '検索文字列') )

とすればオッケー。まぁ色々問題はあるけどとりあえずpostgresqlでsenna検索をしたい人はどうぞ。senna本体はsen_index_info()を正しくサポートしてないと駄目。


ほとんどテストしてないので壊れる可能性は大ですので、一応用心を。


親子南蛮蕎麦



今日はオフィスに立ち寄り仕事の話。ちょうど昼時なので出前を頼んでもらってごちそうになったのだが、その時電話をしたいがぐり坊主(!=俺)が「全部大盛りで」などとのたまってしまったために大盛り。自分はご飯を残したのだが、それよりすごいのオフィスで一番若いヤツが頼んだ親子南蛮蕎麦。どこかで聞いた「富士山盛り」かと思うような麺の多さ。すげー


若者は半分くらい食べた所でも相当ギブアップ近かったのだが、それでも周りではやし立てて食べさせた所死にそうになりながらも汁まで完食していた。素晴らしい意気込みだ。


わくわく



はやくあのストーカーと↑このストーカーが同じだと確認取れないかなぁ。結構状況証拠からすると信憑性ありなんだけど、同人物だと知れたらこれは被害者の会結成して本名とか晒し決定だな


変な書き込み



長くて読み難いのでとりあえずコメントからは消しとくけど、以下どうぞ。



taka 『僕は以前ブログをしていたのですが、あなたと雰囲気が似ているとかの訳のわからない理由であなたと思い込まれてストーカーされている者です。


自分のブログは閉鎖しました。


好意的な感じでコンタクトをとってきたので、不覚にも携帯番号を教えてしまいました。何度もあなたじゃないことはいいました。その場では理解しても次の日にはまた電話してきます。あげくのはてには「大ちゃんお疲れ様。あんまり無理しないでね」等の留守電を毎日残してきます。当然すぐに着信拒否しましたが、毎日着信履歴に残っています。今までもう連絡しませんと何度も言わせることはできましたが、すぐに忘れてしまう病気のようです。


あなた宛のメールがきていましたので添えておきます。


一時期この量の倍以上のメールが1日2通来てました。


-------------------------------


こんばんは、○○です。


これはだいちゃんに向けて書いているメールです。


何言ってるか分からなかったら、スルーしてね。


あのウケミレンアイ。。。はKさんが書いてる気がしちゃった。


誓って言うけど、私は不倫なんかしたこともしたいと思ったことも無いです。


ネットでモテたいと思ったことも無い。


Kさんが周りの男性に崇めたてられたいっていうのが


つくづく分かったよ。。


前に彼女の取り巻きさんの男性が私に接触してきたのを


まだ根に持ってるみたいです。


私、バカ正直に携帯電話で報告したのよ。


「沙希(漢字忘れたけど、サキさん)さんらしき人が連絡来ましたよ」


って。


彼女の声のトーンがその時変わったんだ。


あちらが勝手に接触してきたのを私は無視したの。


だけど彼女の捉え方では


「自分の男友達を食った」


という表現になっちゃうのね。そういう表現が驚くわ。。


あと、彼女のところの女性の常連さんが


私に悩みの相談してきてたりしたのも嫌がってたな。。


例の「SAY HELLO」の本を贈ってくださった女性。


私は別にKさんと対抗する気持ちなんてこれっぽっちもないのに


彼女は私の存在が疎ましいんだよね、きっと。


サイト閉鎖して以来、一切彼女の友達には接触してないのにな。


とにかく私のことを追いかけ続けるんだろうね。


今後、彼女はじめ、嫉妬に狂った粘着質の人に


ずっとまとわりつかれるのかと思ったら


私、具合が悪くなってきちゃった。胃が痛いよ。


だいちゃん、お願いだから守ってね。


私、前の職場では、こういう嫉妬の炎で倒れちゃったの。


やっぱり日記でやりとりするの、ダメだよ。。


メールとか電話とかメッセじゃないと、


私、他人の嫉妬で倒れちゃう。。


わけわからないメールでごめんなさい。。


胃が痛くて、つらい。。


-------------------------------


何のことやらさっぱりわかりませんし、興味もありません。


僕がここでこんなことをしたところで、あなたの自作自演と思うだけでしょうが、着信履歴に残っているあの女の名前を見るだけで反吐がでるのでここに書き込むに至りました。


ちなみに東京少女という本は、あなたがストーカーのことを想って書いた本だと言い張っていました。あの女は病気です。』(2005/08/21 14:26)



いやぁ、本当に同じストーカーだとしたら笑えるなぁ。


選挙



堀江さん・・・あんたはいったいなにをしたいんだ。


またかよ



昨日ピーマンを細切りにしていたらすっぱりと左人差し指の皮を薄く、しかし円形に広く切ってしまった。すっぱり。いてえええええええ。結構出血したのだが、前回の肘の怪我の時に買ってあった薬とかを総動員して処理。いてえよう・・・


どうもやっぱりこう、気持ちが落ち着いていないときに包丁を操るのはよくないらしい。くぞー。今日ガーゼ買ってこないと。


タイプはなんとかできるけどギターはひけん(涙)


テレビっ子



昨日は「たりらりら~ん」見てたら番組内でチャットしまくりという内容でなんか「インターネットもここまで一般の人の生活に入り込んだか」という印象とともに南海キャンディーズの山ちゃんがいい味だしてたので楽しめた。


あと最近朝の「タッチ」再放送が結構楽しみ。某HDDレコーダーのプロトタイプをもらってから容易に見れるようになって便利というか、テレビを見すぎてしまうというか・・・まぁ、仕事はできてるからいいんだけど。


ひさしぶりにDNS



ひさしぶりにDNSの設定をしたのだが、本当あのファイルフォーマットって変だ。誰だあんなの書いたの。


XML::RSS::LibXML can write




use XML::RSS::LibXML;
my $rss = XML::RSS::LibXML->new;
$rss->parse_file('rss.xml');

print $rss->as_string();


これは前からできたけど、今度はちゃんとRSSを作れるぜ!



my $rss = XML::RSS::LibXML->new(version => '1.0');
$rss->channel(
title => "RSS title",
link => 'http://example.com'
);
... その他いろいろ ...
$rss->save("foo.xml");

一応RSS 1.0ならかなりの制度で $rss2->parse($rss1->as_string) して、$rss1 == $rss2のようにできるはず!


今回一番手こずったのはXMLネームスペース。結果的に作成したいRSSはこういうふうに始まってほしい:




<rdf:RDF</pp>
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
.... other declaration ...
>

最初は



$xml = XML::LibXML::Document->new('1.0', 'UTF-8');
$root = $xml->createElementNS($RDF_NS, 'RDF');
$root->setNamespace($RDF_NS, 'rdf', 1);
$root->setNamespace($DEFAULT_NS. '', 1);

ってやってたんだが、これをやるとxmlns:rdfとxmlns(default)が同じになってしまう。いろいろ試してみてようやくたどり着いたのが



$xml = XML::LibXML::Document->new('1.0', 'UTF-8');
$root = $xml->createElementNS($DEFAULT_NS, 'RDF');
$root->setNamespace($RDF_NS, 'rdf', 1);

なるほど、createElementNS()はXMLノードのデフォルトネームスペースを設定するAPIだったのね・・・。昨日の夜から今朝にかけて2時間半はたっぷり悩みました。とほほ。


スパゲティの残り



お昼はスパゲティの残りに茄子を足して、またスパゲティ。茄子のトマトソース、うまいなぁ。


リフレッシュ



漫画喫茶で「クロサギ」と「ストーンオーシャン」を合わせて15冊読んできました。だいぶリフレッシュ。電磁波の浴び過ぎかなぁ。さー、仕事しよ。


なんか



手持ち無沙汰というか、つまんないというか、な~んか微妙な気分なのでどこか出かけようかなぁ。人と会いたい気もするんだが、こういうときは一人でぼ~っとするのが吉のような気がする。誘ってくれるなら行くけど!(こういうこと書くとストーカーだけしか反応しなくて落ち込む)


とりあえず



一段落ついたっぽい。あちらさんでテスト中。


Stand By Me



なんか数日前からスイッチが入ってしまったので時折ギターを取り出してStand By MeをJohn Lennonキー(A)で弾きながら歌いまくり。ひさしぶりだな、なんか。


スパゲティ~地震



おなかが減ったので家にあるもので簡単スパゲティ。タマネギとニンニクと豚ひき肉を炒めて、トマト缶をどばどばーっと。あとはオレガノ、クローブ、塩、胡椒で香りと味付け。15分で出来上がり。


スパゲティができてわーいわーいと食べていたら地震。ずいぶん長い事揺れてたなぁ。


XML::RSS::LibXML for... Writing



なんか思い立ってXML::RSS::LibXMLでRSSを作成する機能を作り始めてしまった。とりあえずRSS2.0はできたけど、RSS1.0は結構難しいのでまだできない。メームスペースとかあると面倒くさいねぇ。


とりあえず1.0ができたらリリースしちゃおうかな。


Xango



うきゃーーーXangoが使われてるよ。


ど、ドキュメント書きます・・・。っていうか、ProcessorもCPANに出すべきかなぁ。robots.txtとかの処理も面倒くさいもんな。


XML::RSS::LibXML



cpansearch.bulknews.netでうっかりみたらXML::RSS::LibXMLが使われてるのに気づいたのでちょっと細かい修正とかを入れて先ほど0.07アップロード。0.06から一部XML::RSSより使いやすいと言える部分がちょっと出てきたのでこの調子でXML::RSSを駆逐したい、とか思う今日この頃。ま、とはいえすぐにポートできるような機能なんだけどね(<foo attr="bar">baz<foo>をまともにパースできるってことだけ)


がりがり



メールが来たのでそれにそって「24」のシーズン2を裏で流しながらちょこちょこ修正。あとはどうもフロントエンド側でやってくれそうな気がするのでこちらとしてはあとは基本的に統合テストに備えて作業ですなー。


ちなみにもらってきたメカブは250gだった(どちらにしろたっぷり)。今朝もたくさん食べた。この間友達の家に行ったときにもらってきた出汁醤油をつかってうまうま。


返事がない



返事がないのと、ちょっと飽きたのと、腹が下ってるのでYAML::XSについてでも考えてみようかなぁ。とりあえずノートに環境だけは作ってみようっと。


めかぶ、茄子



めかぶをもらってきたので早速めかぶたっぷりスープ。なんせ500グラムも乾燥めかぶがあるのでたっぷり贅沢に使える。マグカップにめかぶを大量に入れてお湯を注ぎ、あとは少量の醤油で味を整える。それだけかんせーい。


あといい加減茄子がへたりそうなので軽く炒めて砂糖と味噌で味付け。うまー。




開発してたら突然



DateTime::Format::HTTP->parse_datetime($hoge)

がコアダンプを吐くようになった。しかもgdbで見るとpp_leavesub()なんてところでエラーになっててわけがわからん状態。エラー条件がtime_zone => '+01:00'とかが指定されてるかどうかなのだけどXSでそんなへんな事してないはずだしなぁ、と思ってデバッグしてた。


結果的にはどうもDateTime::TimeZoneをCVSからインストールしたあとまたCPANからインストールした時にUNINST=1を指定しなくて古いファイルが残ってたのが問題みたい。perldoc -l DateTime::TimeZoneして、パスを探してからrm -rf, force install DateTime::TimeZoneしたらなおった。


不思議な問題だったなぁ。


リブート



リブート機能つくってみたー。しかしあいかわらず連絡取れず。


ちょっとテスト



テストテスト。


さらにテストテスト



だららら。


NikkiSite Requires



今さっき新日記才人用のBuild.PLを書いてたら結構色んな物使ってるなぁ、と。



requires => {
'mod_perl2' => '2.0.0',
'Apache::Session::Wrapper' => 0, # patched manually by me
'Apache2::Request' => 0,
'Cache::FastMmap' => 0,
'Class::Singleton' => 0,
'Class::DBI' => '>= 0.96',
'Class::DBI::AbstractSearch' => 0,
'Class::DBI::LazyInflate' => 0,
'Class::DBI::Loader' => 0,
'Crypt::CBC' => 0,
'DateTime' => 0,
'DateTime::Format::HTTP' => 0,
'DateTime::Format::Pg' => 0,
'DateTime::Format::W3CDTF' => 0,
'Exception::Class' => 0,
'HTML::Mason' => '>= 1.30',
'HTML::Parser' => 0,
'HTML::Prototype' => 0,
'JSON' => 0,
'Mail::Address' => 0,
'Mail::Mailer' => 0,
'Proc::Pidfile' => 0,
'Xango' => '>= 0.07',
'XML::Atom::Client' => 0,
'XML::RSS::LibXML' => 0,
'XMLRPC::Lite' => 0, # patched by me
'YAML' => 0,
}

あれ、そういえばApache::Session::WrapperのパッチをDaveに送ったはずなんだけどなぁ。忘れられてるのかな。


杉田かおる



離婚してましたかー。っていうか多分あのあけっぴろげ(芸かもしれんけど)な人とおぼっちゃまじゃ無理だろ。無理無理。


相変わらず同時進行



ドキュメンテーションとリブート関連のコーディング。ドキュメントはレビューに出して、ついでに色々細かい整理。


こっそり日記才人で「複数日記一気投票」機能つけてみた。


キュウリ



朝ご飯はキュウリに味噌をつけてバリバリ。結構腹にたまるもんだなぁ、なんて思いつつコーディング。


2つ終了



とりあえず最低限の機能が書けた。あとはこれに肉付けしていってプロセス管理等、ユーザビリティの面を充実させることと、他のプログラムとの連携部分。


ひとつだけやってると飽きるのでついでにこっそり日記才人。投票とかもできるようにしたけど、まだ集計はできない感じ。あと自動ログインを今の日記才人より全然いい物にしてみた。それにメール機能。


急ぎの仕事



急ぎの仕事が入ったので昨日の夜からガリガリとコード。で、ちょっと疲れたので一休み・・・。今日はrpmのお勉強をちょっとしないとな。あー、あと買物を少々せんと。


今日のお昼はセブンイレブン弁当。サラダ付き。ぱくぱく。


Modules



そろそろ出かけなくちゃいけないんだけど、今ふと思ったのでひとりごと:Cache::FastMmapを書いてくれた人、ありがとおおおおおお!!!すごい助かってるですよ・・・


ん、そういえば昨日YAML::XS書いてくれとかお願いされたような気がする。できるかなぁ。っていうか、できると思うけど、○○(某会社名)でcontract fee出してくれよぉ。そしたら頑張って夜も寝ないで書くから!


クローラーその4



*また*クローラー書いてみた。今度は日記才人こっそりバージョン用。まだフロントとはつなげてないけど、とりあえずrss/atomフィードを引っ張れるようにしてみた。


ちょっと日記才人とかの仕事を1週間程できないかも・・・新しい仕事舞い込んできちゃった。嬉しいけどさ。


お昼



昨日作った鯖の味噌煮、それに茄子を焼いたものをポン酢で。茄子うまいなぁ。


PowerBook復活



やったー、今さっきPowerBookお届け完了。フレームからLCDまで、外側を丸ごと取り替えたので見違えた。キーボードがキレイだーーー。わーい。


ってところでこれから会議。


Ajax + JSON



その昔プログラミングを始めた頃からネットワーク間のデータの受け渡しをする時のコードの例ってのがいろんなデリミターを使って1行にしてみたり、受け手側ではそれを切ったり貼ったりなんだかいろいろ面倒くさい上に元のデータの形が制限されてたりでそれはそれはもう昔から嫌いだった。PerlだとStorableというものがあり、それこそ



$serialized = freeze($obj); # store_fdとかでもいいけどな

としてデータを送って、受け手側では



$obj = thaw($serialized); # retrieve_fdとかでもいいけどな

とやれば簡単に、ほぼどんなデータでもやりとりできる。インタープレター系の言語はそういうのできなきゃいけないと思うんだがやり方がわからんかったのがJavascriptだったんだなー。ところがJSONってのを書いてくれた人がいるので今回はこっそりのほうでajax+jsonでメッセージ閲覧機能とか書いてみた。


よしよしよしよっしゃあああ。カコイイ!!


夏カレー



今日はカレー熱が高い。夏なので夏カレーを作るぞ!ってことでオクラ、カボチャ、茄子、豚バラ肉を購入。ルーは面倒くさいのジャワカレー辛口。豚バラ肉、タマネギたっぷりをいためて煮て、ルウとオクラを投入。でもまだ辛さが足りない気がするのでさらにここに唐辛子を切ってざくざく。


・・・というのが今の状態。この後なすとカボチャを軽く湯通ししてカレーに入れるつもり。今日のカレーはきっとうまいぞ!


週末日記はまた後でアップするつもり。




柿田川の湧水群はちょっと前にテレビかなにかでふと見て「ああ、いいなここ」と思ってた場所。富士山の雪解け水が沼津の町中の一角に一日100万トンという規模で湧き出てきてる。その水量たるや、本当に圧倒的。先日の滝のあたりと違って公園自体は普通の温度なので散策していると暑いのだけど公園の随所に流れてる水で顔を洗ったりして涼を得るのはなんともオツ。売店で豆腐と湯葉を買って今度は一路沼津港へ。


ちょっと遅いお昼は寿司@双葉。ここのマグロ、ほんとにうまいなぁ。ねっとり、味が広がる。もちろんこの5倍くらいの値段のする高級寿司とかとはまた別物なんだけど、この値段でこの味はとってもとってもうまい。ちょっと量を頼みすぎちゃったけど、寿司食べたかったから本望。しかし前の晩からどう考えても食べ過ぎだな・・・


食べた後は東名で帰宅。途中渋滞で助手席で寝るまいと思っていたが寝てしまったので恐縮。うひ。


稲取



楽しんだ後、伊豆稲取へ。ペンションというものに初めて泊まる。我々とほぼ同時にあからさまに学生の人達がどかどかと来ている。うわ~、いやだなぁこれという雰囲気だったのだが、中は意外と悪くないし(まぁ狭かったけど)、飯がかなり行けてた。値段とかから考えるととてもいい感じ。


ちなみにご飯はどこからどうみても「おいしい隣の家のおばちゃんの料理」。カレイを揚げたものとか、海鮮マリネとか、おいしいんだけどすごい普通。ビール2杯飲んで、あとは部屋で缶チューハイ。


河津七滝



釜滝のさらに上、猿ヶ淵のあたりは道が険しいためか木で遊歩道が作ってある。ちょっと高めに道が作ってあるので遊歩道からはずれるのはちょっと難しいのだけど川がすぐそこにあるから水辺に行きたくてしょうがない。


そこを一番最後まで行った所でお弁当を食べたのだが、先に俺が食べ終わった所で我慢できずに遊歩道からおりれるところを探してそこから川辺へ。いい感じのところがあったのでそこで足を水につけてちょっと水遊び。これがやたらと楽しい。結局ここで一番時間を潰したような気がする。とにかく水が冷たくてキレイでしかも涼しい(明らかに水辺と歩道と温度が違う)。


駐車場までの帰り道は蝉やらなんやらを探しながらてくてく。蝉がすげーたくさん。ガキの頃だったら絶対蝉を捕まえまくってるなぁ。楽しそう。


Senna-0.08



腹減ったぁ。朝からコーヒー以外何も口にしないでコード書いてたらなんかすごく辛くなってきた。とりあえずちょこちょこと修正を入れたSenna-0.08をリリース。


本当はもう少し前に出かけてるつもりだったんだけど・・・はやく飯食いたいなぁ。


ついつい



上に書いてしまったので日記にアクセス機能だけ急に書いてみた。


ぼそ



またこっそり始めてみた。実はこれが3回目。Mason使うのも3回目。そろそろ理屈がわかってきただろう、ということで・・・。


HTML::MasonでApache::Session



HTML::Masonではmasonコンポーネント内でのグローバルをHandlerオブジェクト、もしくはInterpオブジェクト内で作るにはallow_globals引数で指定できるのだがここでApache::Sessionを使うときにちょっと問題:



my $ah = HTML::Mason::ApacheHandler->new(
...
allow_globals => [ qw($session) ]
);

my $wrapper = Apache::Session::Wrapper->new(...);
my $session = $wrapper->session;

$HTML::Mason::Commands::session = $session;


・・・とやれば普通にできるように思えるが、ところがどっこい。mod_perl内でこれをやると必ずデッドロックにおちいります。なんでじゃーーーと考えに考えてたら昔同じ事でMasonを使うのを諦めた記憶があったのでこりゃこのまま放っておいてはあかんと思い今度こそ問題を見つけてやると思って考える事3時間、よーやくわかったわかった。


問題はただただこのグローバル変数$HTML::Mason::Commands::session。こいつは次回のアクセス時にもまだ生きているのだ。だからそこに新たなセッションオブジェクトを設定すると裏方でDESTROY()が動作するのだが、ここでクリーンアップをしようとする古いApache::Sessionとすでにロックを持っているApache::Sessionがデッドロックになるのだな。


ということはどこかでundefをいれてやればいい:



undef $HTML::Mason::Commands::session;

これ、どこで入れてもいいんだけど多分このコードブロックの最初に入れるのが吉ではないかと思う。普通のプロセスを考えると全く逆なのだが、「クリーンアップは先にやるべき」という考え方もあるのだ。処理の後にクリーンアップを行う場合、エラー等によってクリーンアップのコードが実行されない可能性もある。ところがクリーンアップを最初に行うとコードが実行されない、という可能性が低くなる。しかもmod_perlのようにステートが保持される環境の場合は特に安定性/可用性が高くなるはず。


というわけで問題解決。


サバと春雨



今日はこの間買ったサバを塩焼きにしたものと、春雨ともやしとか残り物の炒め物。春雨をたっぷり使って量をキープしつつローカロリー。あんまりうまくなかったが、まぁ今日はアジアンな調味料がなかったからな、ということにしておこう。


後悔先に立たず



3年前に作ったテーブルにプライマリーキーがないテーブルがちょこちょこある。これがそれはそれはいろいろ問題を引き起こしていてこれを直すのがまた辛い・・・。なんせプロダクションで動いているシステムだからDBを止めるわけにもいかないのでALTER TABLEでがんばるしかないのだなぁ。


あ~あ。ちゃんと作っておけばよかったよ。orz


まだ



昨日からやってるけど、全然進まない・・・焦燥。とりあえずSenna-0.07_01のバグフィックス出しといた。でもmod_perl2はまだ動かん・・・


libapreq2のApache2::Requestをロードしようとすると必ずlibexpatのバージョンがおかしいとか言われるんだよなぁ。今までこんな事なかったのに何がいかんのかなぁ。


Apache2/mod_perl2/libapreq2 on Mac OS X



なーーーんかインストールできない。なんでだ。apacheを立ち上げようとするとlibexpatのバージョンが違うとかなんとかで立ち上がらないんだよねぇ。どうもfinkのexpatが邪魔してるみたいなんだけど、この場合はどうすればいいんだ・・・ということでいろいろ試しているところ。


・・・この4時間ほど、ずっと・・・


Dashboard



うわお!Google Map Widgetが素晴らしい。これからいつでもすぐにマップが呼び出せるじゃないか!


修理



ラップトップ、修理に出してきた。アップルストアちょっと手際悪すぎ。一応来週までには直りそうなんだけど、キーだけじゃなくてついでだから調子の悪いところとかを全部直してもらうことにしたら結構金がかかる・・・orz。ああ、まじめに節約しないとだめだなぁ。


ストーカー2



上の書き込みを読んだと思われるストーカーがさらに:



失礼しました。
長い間勝手に仲良くなっているつもりでいました。

どこにもご連絡しませんので、ご安心ください。
お元気で。


こいつは今まで4回はもう2度と連絡しませんとか言いながら、ひと月後くらいには何事もなかったかのようにメールしたり、日記才人経由で連絡がきたりします。病気だ、病気。だいたいメールを拒否してる相手が仲良くしてるわけねーだろ、ノータリン。


ストーカー



そうそう、そういえばまたストーカーから一方的な「連絡」が来てましたよ。



こちらでは、お久しぶりです(^^)
***をやめて、****にプロバイダを変更するので
メールアドレスも変わりました。
お知らせさせてくださいね♪
新アドレス: *******
8/2開通予定なのですが、NTT工事の進捗によりけりなので二日くらいネットが使えないかも。

さて、ここで問題です。「こちらでは」おひさしぶりとありますが、この人とは最後に双方向の会話と呼べるものをしたのは去年の5月くらいの話ですね。こちらではおひさしぶりって言われても俺は知らんのですが、なにを脳内妄想してるんでしょうか。次に、俺はお前なんか死んでくれたほうがいい、というくらい嫌悪オーラを隠さずにいるんですがどこをどーしたら顔文字やら音符マークやらをつけて明るくメールを送れると思ってるんでしょうか。


そしてもっとも根本的なこと:俺はおまえのメールアドレスがかわろうが、生きようが死のうが興味もクソもねぇ。脳みそがミジンコ並みですか?


というわけで



一カ所だけデータベースの仕様とかを変更してみた。テーブルを月ごとに分けてデータ保存することによってだいぶシステムへの負荷が減るはず。また少しずつ作業をしようかなぁ、と画策中・・・


とりあえず今朝の作業はここまで。これからリターンキーの壊れたラップトップを修理にだしてきまーす。


久しぶりに



日記才人開発。データベース設計をもう少しモダンにしようかなぁ、と。しかし、ここでも書いているのはC。merge_accessと言ってアクセス情報を集計するスクリプトは実はCで書かれているのでそれを最適化してみましょう!


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ