nDiki : 2007年12月下旬

2007年12月22日 (土)

「ザクとは違うのだよ! ザクとは!」

naney:2128114617

お昼にバーミヤンで食事をし会計を済ませて店を出ようとしたら、入口のところにガシャポンが。

え? ランバ・ラル? 「ガンダムIII~青い巨星編~」?

丁度会計で出していたサイフから200円を取り出して、ガチャガチャ。

初サウンドロップ。 値段と比べて思ったよりしっかりしているな。

出たのは1 ランバ・ラルA。

「ザクとは違うのだよ! ザクとは!」

いいねぇ。でもあまりひけらかす相手がいないんだけれども。

バーミヤンにあったから、結構前に出たセットかと思ったら、Web を見ると 2007年12月上旬発売のものらしい。 思ったより最近のシリーズなのか。


[ 機動戦士ガンダム ]

スポンサード リンク

今日のさえずり - 全て実行できていれば凄いことに

  • 11:30 GTD に書いた項目を全て実行できていれば凄いことになってるのに。
  • 14:51 テルミン買おうと思ったら「作る時間ないでしょ」と止められた。[mb]
  • 17:34 バーミヤンで「ザクとは違うのだよ! ザクとは!」サウンドロップを手に入れた。
  • 23:27 HDMC-U122007年9月12日生産終了か。後継のHDMC-U16ZM、ゼロスピンドルハードディスクといいつつフラッシュメモリ
  • 24:24 ヤマト運輸、「パソコン宅急便」というのがあるのか。箱捨ててしまっているディスプレイや本体運んでもらうのにいいかも。
  • 25:05 @mmasuda ありがとうございます。日通のパソコンポおすすめですか。チェックしてみます。
[ 12月22日全て ]

2007年12月23日 (日)

aufs を使って Web サイトのドラフト作成する

この nDiki はローカル PC 上で Emacs で記事ファイルを書き、出来上がったら UnisonWeb サーバと同期させる形でアップロード・公開している。

この方法で一つ問題なのは「書きかけの記事ファイル」の扱いが面倒なこと。 書きかけの記事ファイルがある状態で Web サーバと同期するとそれが公開されてしまうのでまずい。しかし完成している記事ファイルがあるならばそちらは同期して順次公開したい。 同期する時には書きかけの記事ファイルを退避させればいいのだが、思いっきり面倒。

ということで手元で公開用 (Web サーバ と同期用)のディレクトリツリーと、ドラフト用(ローカルの Web サーバでのレビュー用)のディレクトリツリーを分けられるようにすることにした。 この2つのディレクトリツリーの差分となる草稿・更新ファイルは aufs を使うことで簡単に管理することができる。

aufs

aufs は stackable unification filesystem の一つ。 同様なものとしては UnionFS がある。 UnionFS よりも aufs の方が評判が良いようなので今回は aufs を使うことにした。

aufs では複数のディレクトリ(ブランチと呼ぶ)をオーバーレイさせて、1つのディレクトリとして扱うことができる。 公開用ディレクトリツリーに、ドラフト用ディレクトリツリーをオーバーレイさせることで、元のディレクトリには変更を加えることなく透過的に変更できる仮想的なディレクトリツリーを作ることができる。

aufsインストール

Debian GNU/Linux sid へはkernel 再構築とあわせて module-assistant でインストールした。

マウント

以下のように3つのディレクトリを作ってマウントする。

/home/naney/www.naney.org
公開用ディレクトリツリー。本番モノ。公開サーバと同期する。
/home/naney/draft.naney.org
草稿や修正されたファイルが書き込まれるディレクトリツリー。
/home/naney/next.naney.org
公開用ディレクトリツリーに、草稿や修正されたファイルが仮想的にオーバーレイされたディレクトリツリー。プレビュー用。
 mount -v -t aufs -o br:/home/naney/draft.naney.org=rw:/home/naney/www.naney.org=ro none /home/naney/next.naney.org

公開ディレクトリツリーは read only に、草稿用のディレクトリツリーは read - write になるように指定する。

これで /home/naney/www.naney.org 以下はいじらないまま、/home/naney/next.naney.org 上で草稿を書いたりファイルを編集したりすることができる。 /home/naney/next.naney.org 以下で追加したファイルや、変更したファイルは aufs が /home/naney/draft.naney.org 上に保存してくれる。

完成したものを /home/naney/draft.naney.org から /home/naney/www.naney.org に順次反映させ(移動し)、公開サーバへ同期することで公開していくことができる。

手元ではいろいろ書き散らせておけるのは、これは便利。

マウントオプションは他にいろいろあるようなので、こまかい設定は見直すかも。

その他

ファイルシステムレベルの処理なので、アプリケーション側では何も手を加えなくてもよいのが良い。

今回は公開用とドラフト用としたが、公開用と未公開用をローカルでミックスして表示するようにしたり、複数ユーザのコンテンツディレクトリを仮想的に1つにまとめたりと、いろいろ面白い使い方ができそうだ。

Debian Linux kernel 2.6.23 をビルドする。

ThinkPad X31 に入れている Debian GNU/Linux sidLinux kernel を随分アップデートしていなかった(2.6.17 を使用中)。 今日 aufs を入れついでに、一緒に最新(2.6.23)をビルドすることにした。 Debian kernel パッケージ構築は去年の8月以来。

今回は linux-patch-aufs を入れておいて、aufs 用のパッチを当てる。

 #apt-get build-dep linux-image-2.6.23-1-686
 #apt-get install linux-source-2.6.23 linux-patch-aufs
 #exit
 $mkdir -p /usr/local/src/linux
 $cd /usr/local/src/linux

 $tar jxvf /usr/src/linux-source-2.6.23.tar.bz2
 $cd linux-source-2.6.23
 $make menuconfig
 $make-kpkg clean

 $fakeroot make-kpkg --added-patches put_filp,lhash,splice,ksize,sysfs_get_dentry --revision=sebastian.1.0 kernel_image
 $cd ..
 $su
 #dpkg -i linux-image-2.6.23_sebastian.1.0_i386.deb

パッチが一部 2.6.22 用で 2.6.23 には当たらなかったが、よしとしておく。 ここで再起動。次に MADWIFIaufsインストール

 module-assistant prepare
 module-assistant auto-install madwifi
 module-assistant auto-install aufs

いつも入れている shfs も同様に入れようと思ったがこちらはコンパイルエラー。 頻繁に使うわけではないので、とりあえずほっておくことにする。

コンパイルが面倒なのでそろそろ Debian 公式のを使おうかと思ったが、試してみたところ

ということ NG。 やはり自前でビルドしなければならないことを再確認。

[ 12月23日全て ]

2007年12月24日 (月)

今日のさえずり - スーツに着た回数を記録する仕組みが欲しい

naney:2140302022

[ 12月24日全て ]

2007年12月25日 (火)

今日のさえずり - 新幹線車内の電光掲示板に Twitter タイムラインが流れればいいのに

http://farm3.static.flickr.com/2200/2333287118_0956f8c57c_m.jpg http://farm3.static.flickr.com/2145/2332460349_965817efae_m.jpg

[ 12月25日全て ]

2007年12月26日 (水)

モロ35歳なので、アールサンジュウゴ R35 を買った

rimage:ASIN:B000O76P7G

店頭や新聞広告などでたまに目にして気になっていたコンピレーションアルバム R35、朝のテレビでまた紹介されいたのが駄目押しになって、昼休みに買ってしまった。

内容は以下。

曲リスト

  1. SAY YES [CHAGE and ASKA]
  2. 君がいるだけで [米米クラブ]
  3. 何も言えなくて…夏 [JAYWALK]
  4. Get Along Together ~愛を贈りたいから~ [山根康広]
  5. TRUE LOVE [藤井フミヤ]
  6. シングルベッド [シャ乱Q]
  7. 離したくない [T-BOLAN]
  8. クリスマスキャロルの頃には [稲垣潤一]
  9. Woman [中西圭三]
    • 「カメリアダイヤモンド」CM ソング 1992年
  10. 夏の日の1993 [class]
  11. もう恋なんてしない [槇原敬之]
  12. サポテンの鼻 ~“ひとつ屋根の下”より~ [財津和夫]
  13. 接吻 kiss [オリジナル・ラヴ]
  14. 壊れかけのRadio [徳永英明]
  15. 愛が生まれた日 [藤谷美和子・大内義昭]
  16. 世界中の誰よりきっと [中山美穂 & WANDS]
    • ドラマ「誰かが彼女を愛してる」主題歌

R35 世代。

1972年生まれの自分はまさに、この世代。 収録されている曲が流れていた1991年から1994年頃といえば、高校卒業・浪人時代から大学3年生の頃までにあたる。 アルバイト先の有線放送で繰り返し聞いた曲や、彼女と一緒に見たドラマの主題歌などずばり記憶に残っている曲ばかりである。

シングルやアルバムで持っている曲もちらほら。 しかしながら「単独では買うほどではないけれど、コンピレーションとしてまとまっているならたまに聞きたい」という曲が集まっているという点で、持っていて悪くない1枚である。


[ CD アルバム ]

今日のさえずり - 割るやつとかほじるやつとか無くて苦戦

  • 11:43 クセロReader ZERO 1.5.0.4 インストール。 *Tw*
  • 12:16 郵便局で年賀はがき110枚購入。[mb]
  • 12:38 アールサンジュウゴ買った。35歳だから。[mb]
  • 13:13 昼休みの間に クセロReader ZERO での 75ページ分 OCR 処理終わってた。スキャンしたドキュメントがそれなりに認識されていて検索できるようになった。素晴らしい。 *Tw*
  • 14:08 今日のサウンドロップは、「ウルトラセブン エメリウム光線」(ウルトラマンシリーズ2)。プギャーーーーッ。 *Tw*
  • 15:23 Visual C# でコントロールの配置にはまってた。Panel 1枚かましたら、あっさりうまく並ぶようになった。 *Tw*
  • 16:31 Twit 1.00 にアップデート。 *Tw*
  • 23:55 今日の夕食は頂き物のカニだった。買って食ったりしないので割るやつとかほじるやつとか無くて苦戦した(美味しゅうございました)。
[ 12月26日全て ]

2007年12月27日 (木)

今日のさえずり - それ多分 Gmail spam フォルダの中

naney:2139517973

  • 09:33 MovaTwitter の設定がリセットされていた(ように見える)。再設定。[mb]
  • 09:53 原付兄ちゃんが、点滅している信号を渡っている人に「赤になります。ご注意ください。轢きますよ。」と淡々と警告してた。L:秋葉原[mb]
  • 10:06 原付の人ちょっとヤバい感じだった (暴力的とかいうのではなくて、ちょっといってるような)。 *Tw*
  • 10:07 出社したらオフィスの玄関を入ってすぐのオブジェにイルミネーションが。誰? (社長ではないらしい) *Tw*
  • 12:00 Perl の statement modifiers (if/unless/while/until/foreach) に慣れると、C# とかで if 文とか書くのかったるい。 *Tw*
  • 12:32 社長がいっていた「報告メールがまだ」、それ多分 Gmail spam フォルダの中 (同じメールがこの間 spam フォルダに入ってた)。 *Tw*
  • 13:08 NUnit 2.4.5 インストール。 *Tw*
  • 18:37 NUnitデータベースの CREATE/DROP テスト書いていてどうもうまくいかないと思ったら、Npgsql がデフォルトで接続プールしてて DROP を阻止していた模様。 *Tw*
  • 18:39 オフィスの皆が忘年会に出発したので静寂がおとずれた。 *Tw*
  • 19:11 [mixi] おすすめマイミクシィ巡回してみた。友達の友達が友達になるかというとどうかな。 http://indies.mixi.jp/recommend.pl
  • 23:55 の分の年賀状印刷完了。
[ 12月27日全て ]

2007年12月28日 (金)

今日のさえずり - なんかクネクネしている人が車内にいる

  • 09:18 途中下車。L:田町駅[mb]
  • 09:28 ブツ納品完了。これから通勤経路に戻る。[mb]
  • 19:14 今年の出勤終わり。[mb]
  • 19:26 家のテーブルタップの根元がよれてきたのか発熱するようになり、ヤバいので新調した。[mb]
  • 19:46 なんかクネクネしている人が車内にいる。この時間に既にできあがってるのか?[mb]
[ 12月28日全て ]

2007年12月29日 (土)

Twitter ベイジアンフィルタプロキシ

Twitter で following が増えてくるにつれて、タイムラインに目を通すのが大変になってきた(という程きちんと見ている訳ではないが)。 さっとタイムラインをなめて面白そうな情報をピックアップしたい時は、「おはよう」とか「風呂入った」とか「トイレ」とかは除外して読みたい(そういう書き込み自体は嫌いじゃないのだが、人生はあまりにも短い)。

Twit や P3:PeraPeraPrv では NG ワード指定ができて、それらを含むステータスは表示しないようにできるのだが、Twitter の書き込みは揺らぎが激しすぎて指定しきれないという弱点がる。

ということでベイジアンフィルタでフィルタリングしてみることにした。

自前で Twitter クライアントを作る気はないので、proxy の形でさっと実装してみた。

 #!/usr/bin/perl

 use strict;
 use warnings;

 use HTTP::Proxy;
 use HTTP::Proxy::BodyFilter::complete;

 my $proxy = HTTP::Proxy->new(port => 8088);
 $proxy->push_filter(response => HTTP::Proxy::BodyFilter::complete->new,
                     mime     => 'application/xml');
 $proxy->push_filter(response => Bsfilter->new,
                     mime     => 'application/xml');
 $proxy->start;

 {

   package Bsfilter;

   use File::Temp qw/tempfile/;
   use XML::XPath;
   use base qw(HTTP::Proxy::BodyFilter);

   sub filter {
     my ($self, $dataref, $message, $protocol, $buffer) = @_;
     return unless defined($$dataref) && $$dataref ne '';
     eval {
       my $xml = XML::XPath->new(xml => $$dataref);
       my @nodes = $xml->findnodes('/statuses/status/text/text()');
       return unless @nodes;
       for my $node (@nodes) {
         my $text = $node->getNodeValue;
         if (is_NG($text)) {
           $node->setNodeValue("[NG] $text");
         }
       }
       $$dataref = qq(<?xml version="1.0" encoding="UTF-8"?>\n);
       $$dataref .= $xml->get_context->toString;
       utf8::encode($$dataref);
     };
     if ($@) {
       warn $@;
     }
   }

   sub will_modify { 1 }

   sub is_NG {
     my ($text) = @_;

     my ($fh, $filename) = tempfile();
     utf8::encode($text);
     print $fh $text;
     close($fh);
     my $result
       = system(
       "bsfilter --homedir ~/.twitter-bsfilter --ignore-header --auto-update $filename"
       );
     unlink($filename);

     return !$result;
   }
 }

HTTP proxy の作成

PerlHTTP proxy を作ろうとして真っ先に思い浮かんだのは POE だけれど、ちょっとヘビーなので今回は HTTP::Proxy をチョイス。 もともとフィルタリング HTTP proxy を作ることを念頭に置いた Perl モジュールなので今回の目的にぴったり。

1つはまった点といえば、filter の呼び出しがレスポンス全てを取得してからではなく一部分ずつの呼び出しになるところ。その仕様に気がつくのにちょっと時間がかかってしまった。 例えば XML 形式のレスポンスをフィルタしようとしても、普通に HTTP::Proxy を使うと XML の一部ずつがフィルタに渡されるため、XML のパースがうまくいかない。

これについては HTTP::Proxy::BodyFilter::complete を使うことで、まとめてフィルタに渡せるようになった。

レスポンスの処理

Twitter のタイムライン取得については P3:PeraPeraPrvXML 形式で取得しているので、そのタイプのレスポンスをフィルタするようにした。

XML::XPath でステータス部分を抜き出して NG 判定し、NG であれば先頭に [NG] を追加する。 これで Twitter クライアント側で [NG] を NG ワード指定すれば、表示されないようにすることができる。

bsfilter による NG 判定

NG 判定は普段メールspam フィルタとして使っている bsfilter を使った。 単純に system 関数で呼び出して結果を取得するだけ。

今回は対象がメールではないので --ignore-header を指定。また自動的に学習するように --auto-update を指定。 それと普段メールのフィルタリングに使っているのとは bsfilterデータベースを別にしたいので、--homedir も指定しておく。

NG と非 NG の学習。

NG ワードを twitter-NG.txt に、非 NG ワードを twitter-clean.txt に書いて以下のコマンドを実行。

 bsfilter --add-clean --ignore-header --homedir ~/.twitter-bsfilter twitter-clean.txt
 bsfilter --add-spam --ignore-header --homedir ~/.twitter-bsfilter twitter-NG.txt
 bsfilter --update --homedir ~/.twitter-bsfilter

自分の環境 (Debian GNU/Linux sid)では、UTF-8 で書いておいて問題なかった。

フィルタリングしてみる

あとは先の proxy を起動し、P3:PeraPeraPrv でプロキシとして localhost:8088 を指定すれば OK。

タイムラインを取得するたびに bsfilter が動いて NG なステータスには [NG] が挿入される。

フィルタリングの精度

これについては、まだまだチューンの必要ありかな。

  • 事前の学習データが少ない。
  • --auto-update していることもあり、最初に NG 判定が多いとそちら側に強化されすぎる。
  • 毎回 bsfilter を呼んでいるため、同じステータスが何度も学習される。

まだ使える精度まで上がってないけれど、教師データを増やせばそれなりにいけるかもしれない。

proxy の枠組ができたので、(@~は抜いてから bsfilter に渡すとか、前後の文脈も含めるとか)いろいろ試して遊べそうではある。 別に bsfilter にこだわらず、正規表現による判定などをしてもよいし。

この辺り P3 は Java で書かれているので、プラグインを書いて拡張できるよう将来になると面白いなと思ってみたり。

今日のさえずり - 「見え窓」はこの時の満足のためだけに使う

  • 11:44 しびれてた足を動かしたら、近くにあった年賀状イラスト集の表紙で小指を切った。イテ。というかしびれててどうにもできん。
  • 17:38 ホタルック欲しかったけれど LABI には40形なかった。かわりにパルックプレミア買った。
  • 18:37 5カ月ぶりにトレビーノ カセッティのカートリッジ交換。「見え窓」はこの時の満足のためだけに使う。
  • 00:26 P3 用に Twitter ベイジアンフィルタプロキシ作ってみた。 http://tinyurl.com/yqt75p
[ 12月29日全て ]

2007年12月30日 (日)

今日のさえずり - 以前より全部精読しているという落し穴

  • 10:27 Twitter タイムラインをベイジアンフィルタかけて見てみているけれど、結局どのように分類されているか確認するために以前より全部精読しているという落し穴。
  • 17:13 自分の分の年賀状印刷完了。
[ 12月30日全て ]

2007年12月31日 (月)

今日のさえずり - 78円の赤いきつねに、430円のかき揚げ

  • 10:13 ほぼ日手帳2008出してきてカバーかけた。2007 から名刺やら下敷きやらを移動。
  • 10:14 MovaTwitter で 外部リンクの閲覧時に Hatena::MobileGateway をチョイスできるようにならないかな。
  • 10:17 去年はほぼ日手帳の下敷きほとんど使わなかったから、やっぱり来年は入れておかなくてもいいかな。
  • 11:11 そろそろ「あけおめ」を NG ワード設定しておく時間。
  • 11:46 年賀状投函。[mb]
  • 11:53 西友、オードブル品揃えが悪い。[mb]
  • 11:55 LABI 来店ポイント10ポイント獲得。残り48回。[mb]
  • 11:57 アトレ大井町1月1日は休館日。[mb]
  • 12:15 大井阪急食品館でお年賀とかき揚げ。[mb]
  • 12:26 福袋先行販売中って、もうなんでもアリだな。L:イトーヨーカドー[mb]
  • 12:29 オモチャコーナー、ガキ少ないな。L:イトーヨーカドー[mb]
  • 12:42 イトーヨーカドーで中華オードブルセット買った。いったん帰る。[mb]
  • 13:50 3日目のカレー食べた。これから2回目の買い出し。[mb]
  • 13:56 正月飾りが軒並み半額。[mb]
  • 14:01 定期券6カ月延長。[mb]
  • 18:55 さて風呂はいるか。紅白歌合戦のオープニングには間に合いそうにないな。[mb]
  • 22:18 78円の赤いきつねに、430円のかき揚げのせて食べた。これで年を越せる。[mb]
  • 23:54 ゆく年くる年のライトアップ手法を研究したい。[mb]
  • 00:17 00:15 の NHK のニュース、最初のあけましておめでとうございます噛んじゃった。[mb]
  • 00:45 「年の初めはさだまさし」ずいぶん好きにやってるな。おもろ。ラジオのノリのような感じ。[mb]
[ 12月31日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.047861s / load averages: 0.37, 0.56, 0.57
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker