September 09, 2004

GmailFS の実装

ちょっと興味があったので GmailFS の実装をのぞいてみた。

ファイルシステムとしての実装のベースは FUSE というフレームワークを使用している。これを Linux カーネルに組み込むことにより、その後カーネルをコンパイルしなおすことなく、プログラムなどでファイルシステムを実装することができる。具体的には、

mount -t fuse /path/to/script/or/program /path/of/mount/point [options]

みたいにスクリプトを指定してマウントできるようなイメージ。このスクリプトは標準入出力か何かを利用して、ファイルの読み書きを実装すればいいのかな。GmailFS は、Python のライブラリ fuse を継承してこのフレームワークを実装している。実装の中身はというと、

    #@+node:getinodeMsg
    def getinodeMsg(self,inodeNumber):
        """
        Get Gmail message handle for the message containing inodeNumber
        """

        folder = _getMessagesByQuery(self.ga,'subject:inodeid=__'+inodeNumber+'__')
        if len(folder)!=1:
          log.error("could not find inode msg with inodenumber:"+inodeNumber)
          return None;
        if len(folder._threads[0])!=1:
          return None;
        thread = folder._threads[0]
        if not thread._messages:
          thread._messages = thread._getMessages(thread)

        return thread._messages[0]
    #@-node:getinodeMsg

のような感じで、メールの Subject: フィールドに inode などのメタ情報を書き込み、ボディに本体をいれて自分の Gmail アカウントにメールを送信する、ってな感じなんですね。取得は普通に getMessage でよい、と。面白いけど自分で実装したくないなぁ(実装しなくていいよ)。

ちなみになんでこんなん調べてたかというと、iTunes がらみの Hack で調べてたら、作者の Richard Clamp 氏が変態的なモジュールつくってるのいろいろ発見して、その中に Filesys::Virtual::DAAP なんての発見したのがきっかけ。これ、Filesys::Virtual というフレームワークで、仮想的なファイルシステムを実装しています。これを利用したサーバアプリとして、Net::DAV::Server とか PoCo::Server::FTP なんてのがある。

つまりまあ、DAAP (iTunes の共有) にある音楽ファイルを、DAV やら FTP でマウントしちゃえ、ってなワケなんですね。で、それぞれが抽象化されていて、プロトコル変換されてつながる、と。こういう遠〜い実装は MODULE.JP の人なんかと IM でよくしゃべってるネタなんですが、ホントにやっちゃうのが気持ちいいな〜と。

んで、Filesys::Virtual::Winny とか Filesys::Virtual::Gmail あたりをキボンヌです。

Posted by miyagawa at September 9, 2004 12:01 AM | Permalink | Comments (0) | TrackBack(3)
Comments
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/1242
課題。
Excerpt: blog.bulknews.net ちょっと興味があったので GmailFS の実装をのぞいてみた。 このblogはいつも新たなキーワードと課題を与えてくれるな。 (追うのがセイイッパイで貢献できてないけど。。。) ホント刺激うけまくりw いつまでたっても恩返しができないが、 とりあえず�...
Weblog: Epic->yoshimax
Tracked: September 9, 2004 02:49 AM
使いやすさと分かりやすさ
Excerpt: 仮想化によってユーザビリティを改善する。そんな例のひとつとして、GmailをHDDのように見せてくれるサービスが百式さんで紹介されていました。http://www.gmailharddrive.com/内容はGmailの巨大なメールスプール(2GB)をバックアップストレージとして使うというものです。...
Weblog: 職業としてのプログラミング
Tracked: June 14, 2005 12:34 AM
使いやすさと分かりやすさ
Excerpt: 仮想化によってユーザビリティを改善する。そんな例のひとつとして、GmailをHDDのように見せてくれるサービスが百式さんで紹介されていました。http://www.gmailharddrive.com/内容はGmailの巨大なメールスプール(2GB)をバックアップストレージとして使うというものです。...
Weblog: 職業としてのプログラミング
Tracked: June 14, 2005 12:34 AM
Post a comment