トップ 追記

tach のアレゲ日記

2000|09|10|11|12|
2001|01|02|03|04|07|11|
2002|03|07|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|12|
2007|01|02|05|10|11|
2008|08|09|10|11|
2009|01|03|04|05|06|

2009-06-23

_ Debian パッケージのセクション

Debian では、パッケージの分類方法の一つとしてセクションを使っている。セクションは主に各パッケージがどんな種類・用途であるかという分類で、「web」「sound」「video」といったものや、「perl」「ruby」といった言語によるものなど多岐にわたっている。

どんなセクションがあるかを知るには、Debian Policy Manualを見るのがよいが、リリースによって異なるので、packages.debian.org を見るのがよいだろう。

各セクションがどのくらいのバイナリパッケージがあるのか、自分の環境で調べてみた。若干独自パッケージがあるので正確ではないが、概ね正しいだろう。

% grep Section: /var/lib/dpkg/available | sort | uniq -c
    957 Section: admin
      1 Section: base
    117 Section: comm
      8 Section: contrib/admin
      1 Section: contrib/comm
     11 Section: contrib/devel
     24 Section: contrib/doc
      1 Section: contrib/editors
      1 Section: contrib/electronics
     31 Section: contrib/games
      5 Section: contrib/graphics
      1 Section: contrib/kde
      5 Section: contrib/libdevel
     25 Section: contrib/libs
      6 Section: contrib/mail
      3 Section: contrib/math
      8 Section: contrib/misc
      6 Section: contrib/net
     16 Section: contrib/otherosfs
      2 Section: contrib/perl
      3 Section: contrib/python
      4 Section: contrib/science
      5 Section: contrib/sound
      1 Section: contrib/tex
     16 Section: contrib/text
      8 Section: contrib/utils
      5 Section: contrib/web
     15 Section: contrib/x11
      1 Section: database
   1672 Section: devel
   1317 Section: doc
    299 Section: editors
     83 Section: electronics
     21 Section: embedded
      8 Section: fonts
    998 Section: games
    441 Section: gnome
    434 Section: graphics
     87 Section: hamradio
      6 Section: httpd
    492 Section: interpreters
    439 Section: kde
      1 Section: kernel
   2595 Section: libdevel
   3307 Section: libs
    482 Section: mail
    418 Section: math
    599 Section: misc
   1389 Section: net
     33 Section: news
     10 Section: non-free/admin
      4 Section: non-free/comm
     15 Section: non-free/devel
     96 Section: non-free/doc
      2 Section: non-free/editors
      5 Section: non-free/electronics
     28 Section: non-free/games
     16 Section: non-free/graphics
     10 Section: non-free/libdevel
     16 Section: non-free/libs
      2 Section: non-free/mail
      9 Section: non-free/math
     12 Section: non-free/misc
     17 Section: non-free/net
      1 Section: non-free/news
      3 Section: non-free/otherosfs
      2 Section: non-free/perl
      1 Section: non-free/python
     38 Section: non-free/science
      5 Section: non-free/sound
      5 Section: non-free/tex
     11 Section: non-free/text
      9 Section: non-free/utils
      5 Section: non-free/web
     54 Section: non-free/x11
     66 Section: oldlibs
     93 Section: otherosfs
   1632 Section: perl
      8 Section: php
    828 Section: python
      9 Section: ruby
    309 Section: science
     27 Section: shells
    617 Section: sound
    286 Section: tex
    723 Section: text
   1157 Section: utils
      5 Section: vcs
    961 Section: web
   1052 Section: x11

libs と libdevel が多いのは、ライブラリはどんな種類のものでもすべて libs に入るから。

本日のツッコミ(全1件) [ツッコミを入れる]

_ jubrilabriell [ Hi, to all Forum-Members, I am Jessica Martinez, a mother..]


2009-06-10

_ inotify で incoming 処理をしてみた

デジカメで撮った大量の写真を整理するため、incoming ディレクトリに画像を置いてもらい、自動的に処理する仕組みを inotify を使って作ってみた。その方法を詳しく解説する。

Windows でインポートしたファイルを Linux で処理したい

デジカメで撮った大量の写真をどのように整理するか。最近は Windows 本体にも整理ツールが入っているし、Picasa などのアプリケーションもある。Linux 版の Picasa だってあるし、他にも様々なツールがある。

ぼくは、自作のインポートツールを使って、撮影日のディレクトリに撮影日時・撮影者のファイル名で保存するようにしている。このディレクトリは毎日別のディスクにコピーされ、別のサーバにもコピーされる。バックアップもほぼ完璧である。5年以上この方式でやっていて、ファイルもたくさんある。このディレクトリを Picasa に噛ませれば、Picasa でも処理できる。自分一人でやっている分にはこれで十分。

だけど、結婚して自分が撮った写真以外も管理しようとすると、途端に面倒になる。Linux を使っているのは自分だけだから、このツールを使うのは難しい。かといって Windows 上で管理すると、分散してしまうしバックアップの不安もある。今までは仕方なく、妻の分をぼくが処理していたが、やはり面倒なので、妻ができればいいなと思った。

そこで、Windows から samba 経由で incoming ディレクトリにファイルを置いてもらい、それを自動で処理するようにしてみようと思った。いままでなら cron などで定期的にディレクトリをチェックして処理するという方法が一般的だったが、今は Linux には inotify という素敵な仕組みがあるので、これを利用すればいいなと思った。

inotify と incron

inotify に関しては、上記 Wikipedia のページや IBM developerWorks の記事「inotify を使ってファイルシステムのアクティビティーを監視する」に詳しく書かれているが、簡単に言えば、特定のファイルやディレクトリをカーネルが監視し、変化が起きたらそれをトリガにして処理を行うという仕組みだ。C の API の解説があるが、シェルから簡単に使えるinotify-toolsというのがあるので、これを利用するのが良い。Debian なら apt-get install inotify-tools でインストールすることができる。

さらに今回のように、起動中常に監視し処理を行う場合は、inotify-tools を直接使うより、incronというツールを使うのがよい。incron は cron のようにデーモンとして動作し、設定を書くことによって inotify を使って特定のコマンドを起動できる仕組みだ。Debian であれば、これまた apt-get install incron でインストールできる。

incron の使い方

incron の使い方は詳しく書かない。なぜなら、SourceForge.JP Magazine の記事「ファイル/ディレクトリの変更に応じて任意のジョブを実行するincron」に詳しく書かれているからだ。ここに書かれているとおり設定すれば、ほぼうまくいく。すばらしい、SourceForge.JP Magazine。

/etc/incron.d/import に

/var/opt/incoming IN_CLOSE_WRITE,IN_MOVED_TO /usr/local/bin/import-files $@/$#

などと書いておけば、/var/opt/incoming にファイルが置かれたときに import-files が動いてくれる。cp コマンドや samba 経由でのコピーでうまくいくことが確認できた。

だが、そこには恐るべき罠が潜んでいるのであった。

incron のきつーい制限 その1 - 再帰探索ができない

早速、Windows フォトギャラリを使って取り込んでみると、うまく処理できない。なぜなら、Windows フォトギャラリーは、取り込み先ディレクトリの先にさらにサブディレクトリを作成し、その下にファイルをコピーするからだ。メーリングリストアーカイブの「Re: incron recursive monitoring」を読むと、再帰的に処理する機能は実装していないようだ。今年の4月にも催促されているが、音沙汰無しのようだ。これには参った。

他になにかツールはないかと探したところ、inoticomingというまさにほぼぴったりのツールがあった。しかしこれも、再帰的には探索できないようだ。

しかし幸いにして Windows にはもう一つ「Windows Live フォトギャラリー」という類似ツールがあり、こちらはサブディレクトリを作らないという選択も可能。こちらを利用したところ、うまく動作させることができた。

ほっとしたのもつかの間、さらに問題が発生した。

incron のきつーい制限 その2 - 空白入りファイル名を上手く渡せない

テストが無事上手くいき、実際にインポートしたところ、ファイルがコピーできていないことがわかった。調べてみると、ファイル名に空白が入っている場合、引数が上手く処理できていないからだった。Windows Live フォトギャラリーの設定で、ファイル名をオリジナルのままでコピーするようにしているのだが、コピー先に同名のファイル(foobar.jpg)があると、「foobar (2).jpg」というファイル名でコピーする。このとき、incrond から渡されるファイル名がそのまま引数にわたるので、第一引数が「foobar」になってしまう。これでは役に立たない。

そこで、incrontab のファイル名部分をダブルクオートやシングルクオートで囲ってみたが、それはあっさり無視されてしまう。ファイル名に空白が入ることなど全く考えていないようだ。

標準入出力で渡すなどいろいろと試してみたが、すべてうまく行かず途方に暮れて、結局 import-files シェルスクリプトで file="$*" と書いておいた。引数がファイル名だけで、かつ空白が二つ以上連続しないという条件を満たせば、とりあえず処理はできる。この dirty hack をいれたら、きちんと処理できた。

でも、もっと上手いやり方があるとは思うのだが…。

inotify はそれなりに使えるが…

とりあえず inotify でうまくやれた。incron ではいくつかのトラブルがあったが、inotify は意外といけるという印象を持った。たしかにこう書くといろんな場面で使えそうだが、しかし単純にはいかない場合も多い。

今回、Windows Live フォトギャラリーのインポート機能を使い、samba 経由でコピーした。コピー終了時の close をトリガーとするため、IN_CLOSE_WRITE イベントを利用したが、なんとこのイベントが同じファイルに対して連続3回発生するのだ。つまり、連続3回起動してしまう。

ぼくがやったことは単純にはただのコピーなので、後から起動されたものが上書きしてしまえば良い。だが、一回だけなんらかの処理を行いたいという場合は、同時に複数起動されても大丈夫なように書いておく必要がある。また、最初のトリガのときに mv などしてしまうと、まだ Windows 側で処理が続いている場合があって、そちらでエラーが出てしまう(Windows Live フォトギャラリーではエラーが出た)。

上記からわかるように、単純に使える便利なモノというほどのものではないが、それでもそれなりに有用なツールだとは思う。もうちょっとうまくやれる方法を引き続き考えていきたい。


2009-06-09

_ Sphinx search で日本語を扱うには

日本語でSphinx searchを使おうと思っていろいろ調べてみたが、どうにも情報が見あたらない。普通に使ってみると、日本語のものがインデックスされず、使い物にならない。日本語で検索エンジンを使おうという人は、SennaHyper Estraier、古くはNamazu といった日本人が作成したものを使うのが一般的なので、日本人以外が作成したものはほとんど使われておらず情報もほとんど無い。日本語が通らないものも多いしね。

でも、Sphinx はプレゼンで日本語や中国語が扱えることを謳っているので、必ず使うことはできるはず。そう思って「Sphinx search 日本語」などで検索して探してみたんだけど、紹介はあっても使い方は誰も書いていない。きっとユーザはいないんだと思う。

それで途方に暮れていたんだけど「Sphinx search japanese」で検索したら、Sphinx Search in Japanese という記事が見つかった。日本語の検索エンジンの話だから、日本語で書かれているだろうと想像したのだが、甘かった…。いまや日本語は国際的なのね。

ここで書かれているとおりに設定したら、ちゃんと日本語を扱うことができた。このテーブルが正しいのかどうかは検証していないので、実は扱えない文字とかもあるかもしれない。

この人はJapanese Sphinx Explainedという記事も書いていて、日本語の文字の正規化(カタカナとひらがなを同じように扱うとか)などを解説している。日本語のことをよくご存じな方らしい。

このエントリは、自分のように情報が無くてハマっている人のポインタとして記録しておこう。

_ iPhone 3GS

http://www.apple.com/jp/iphone/iphone-3g-s/

発表された。一番の魅力は bluetooth モデム機能なんだけど、softbank mobile で使えるかどうかはまだ不明。使えるとしても料金上限は上がるだろうが、イーモバイルとの併用よりは安くなると期待したい。

iPhone ケースは今のところ売り切れだが、問い合わせてみたところ2〜3週間後に再入荷するとのことだ。iPhone を入手するならこれもセットだな。


トップ 追記