PHPのparser (15:58)
RubyでPHPのパーサーを書くのは面倒くさそうだけど、PHPが存在する環境では、PHPのtokenizerをそのまま使うようにすれば、PHPに対応するのも簡単そうだなー。ひとまずPHPでparseした結果を適当なフォーマットで出力するコードだけ書いてみた。
<?php
function tokenize($source) {
$tokens = token_get_all($source);
$parsed = '';
$result = '';
foreach ($tokens as $token) {
if (is_array($token)) {
$type = $token[0];
$text = $token[1];
} else {
$type = 0; //literal?
$text = $token;
}
echo 'LINE: '.count(explode("\n", $parsed)).' LENGTH: '.strlen($parsed).' TYPE: '.$type.' TEXT: '.$text."\0";
$parsed .= $text;
}
}
if (isset($argv[1])) {
$source_file = $argv[1];
if (file_exists($source_file)) {
$source = file_get_contents($source_file);
} else {
die('FILE NOT EXISTS: '.$source_file);
}
} else {
$source = '';
$fp = fopen('php://stdin', 'r');
if ($fp) {
while (!feof($fp)) {
$source .= fread($fp, 4096);
}
fclose($fp);
}
}
tokenize($source);
?>
あとは、PHPのtypeで必要なものをgonzuiのtypeに読み替えたりしつつ、Ruby側でこの出力を取り込んでいけばいいのかな。あるいはPHPでRubyのソースコードを出力して、そのままevalさせたりとかできるんだろうか?
ただ、Rubyがわからなくてlangscan以下のディレクトリを見ても、何をやってるのかよくわからない。一回ちゃんとRubyのお勉強をしないと、いろいろ不都合(やりたいことがすぐにできない)が多いなー。
付箋が貼れるといいなー (13:17)
Ruby 1.9をうまく動かせないんで、(Rubyのソースに関しては)パッケージマネージメントとインクリメンタル検索機能しか使えていないんだけど、それだけでも結構便利。あとできれば、これに付箋が貼りたい。付箋にコメントをつけて、さらに関連するコードにリンク(「(パッケージ名):ファイル名:行」なんて表記かな)を張ったりとかすると、解析とかレビューですごく使えそうだ。wema2がリリースされたら、gonzuiと重ねて動かすのにトライしてみたいなー。
やっぱりダメだ (19:00)
ruby 1.9を入れてrubyソースコード解析に対応させようと思ったんだけど、Ripperのparseとiconvの変換でこけるんで、まともにgonzui(-import)が動かないなー。もしかして昨日の段階のruby-1.9-todayだとダメとか?
ひとまず
iconvの方は、windows-31jをcp932にすれば通るっぽい? ただ、evalとかstrscanとかがみんなこけるのは、よくわからないな。Rubyの開発系MLとか購読しておかないとダメか。
『blogで書く』を追加 (00:40)
blogmapの[もっと詳しく]ページに、[blogで書く]というリンクを追加しました。要は、blogmapに登録されている記事・メディアに関して、自分のblogで記事を書くためのHTMLテンプレート作成機能です。それほど利用者は多くないとは思いますし、あまりデザインも真面目にやってませんが、便利なようなら使ってみてください。
tDiaryのソースコード検索 (23:20)
tDiaryをいじるお勉強になるかと思って、バージョンアップされたばかりのgonzuiでtDiary 2.0.0 full版のソースコードを検索できるようにしてみた。
いつまで動かしているかわからないけど、tDiaryをいじりたい人はこれで検索してみたりするといいかもしれません。という使い方で実践的に便利だといいなー>gonzui。あと、PHPに対応したら、自分のライブラリの管理もこれでやりたいなー。
暫定引っ越し (16:21)
tDiaryと1470.netを同じhttpdで動かすといいことがなさそうなんで、tDiaryを別マシンに移動。暫定的にhttp://tdiary2.ishinao.net/というURLにリダイレクトをかけてますけど、そのうちhttp://tdiary.ishinao.net/でアクセスできるようになると思います。
RSSジャンル検索 (18:51)
新機能追加はやめようと心に誓ったばかりなのに、「はてなのキーワードとtechnoratiのタグ 08:26」を読んで反射的に作ってしまった。RSSアイテムのタイトルの先頭が「[」で始まっている場合、「[」と「]」で囲まれている部分をその記事のジャンル名称であるとして、記事をジャンルで検索する機能。たとえば、「iPodで検索」とか「tDiaryで検索」とか。まだ検索インデックスが作りかけなんで、ちょっと古い記事しか検索に引っかからないかも。ああこれでまた負荷が高まるなー。
検索インデックス生成が終わった
で、これいいなー。Planetほにゃらら系って、各サイトに上記ルールでタイトルにカテゴリ表記を入れてもらって、それをキーに分類表示するのが一番まっとうなんじゃないか。
RSS出力もそのうちつけます。けどその前に安定運用できるレベルまで全体の負荷を調整しないと……。
dc:subjectは
あの…dc:subjectは…
データ収集の段階で捨てちゃってるんで、DB上に残ってないんですよ……。
強引にdc:subjectをつっこんでみた
今後クロールするデータは(DBスキーマ変更なしで対応するため)、タイトルの頭に無理矢理「[dc:subject]」をくっつけて、dc:subjectも認識できるようにしてみた。けど、いわゆる人間が明示的に付与する「タグ」的なカテゴリーわけと、システムがデフォルトで付与するカテゴリーわけ(が多いような気がするblogツールが吐き出すdc:subject)とは、本当は意味合いが違う気もする。
最近流行のタグってのは、俺が昔WikiLikeで試していた、自分がキーワードだと思う本文中のキーワードをBracketNameとして囲むことによって、そのキーワードをそのテキストにおける重要語と認識し、カテゴリー検索等の目的で使用する、というアプローチに似ている気がする。入力者が入力時に人力指定する非固定のジャンル指定。
mod_rubyをインストール (13:40)
いろいろ重い処理を追加しすぎてプロセスがつまり気味だったんで、「高速化ガイド(管理者向け)」を参考に一通り高速化してみた。これでちょっとは軽くなるかなー。
うわだめだ
なんか状況が悪化したよ。mod_rubyハズし。やばいな、そろそろサーバーが限界に達したかも。そろそろ機能を増やすのはやめて、最適化の努力をするべきか。それともサーバーを増やすことを考えるか。
iCalendar出力やろうかな (22:34)
MMの予定表の出力をiCalendar形式でも出すようにしておくと、オンラインのiCalendarデータをミックスして扱えるスケジュールソフトなんかで、手軽に公開スケジュールを管理できてちょっといいかもしれない。と思ったんだけども、iCalendarの仕様が思ったよりも複雑で面倒くさそうだったんで、ひとまず思いついただけ〜。でも忘れないようにここに書いておこう。
地図情報に関するメモ (21:05)
「Yahoo! 地図情報」の詳細地図ページ(URLに緯度経度情報が含まれるもの)でクリッピングを実行すると、その場所に関するメモを取れるようにしてみました。けど、ちゃんと動くかどうかはまだ真面目に検証していません。試しに使ってみてください。