acess logger
▲Zaurus Top | ↑Up(設定・システム) | ←Prev(4GB以上のSDHCを使う) | →Next()

Dropbox client for zaurus

(2012/05/13)

Dropbox SDK(ruby 版)を使って、zaurus に Dropbox 環境を構築し、メモを同期させ、zaurus をメモマシンとして活用する。

Dropbox SDK

Dropbox for Developersのサイトに行くと、Dropbox のAPIを使った開発のためのドキュメントやツールが公開されている。

アプリのタイプとしては、'App folder' という、Dropbox ディレクトリの下の特定のサブディレクトリ以下しかアクセスできないタイプと 'Full Dropbox' という、全 Dropbox/ 以下にアクセスできるアプリがあり、前者が推奨されている。

通常、すでに、一般ユーザとしてのドロップボックスアカウントを持っているはずなので、それで、ウェブフォームにログインする。その状態で、My appsページに行けば、「Create an App」ボタンで、アプリを作ることができる。名前、簡単な説明、アプリタイプをこのときに決めておく必要がある。最初は 'development status' でアプリが作成される。5人以上のユーザにテストしてもらって、Dropbox のレビューが通れば 'Production status'になる。

認証方法としては OAuth を、データフォーマットとしては JSON を、API としては REST API を使っている。現代では一般的な構成。SDK としては、iOS, Android, Python, Ruby, Java OS X がある。ruby 版しかみていないが、REST API を関数呼び出しに変換するユーティリティの趣き。Dropbox の公用語は Python のはず。

d4z

できあがったものは ipkg にまとめてあるが、これは 'development status' なので、使うためにいろいろと登録作業が必要。

memo

TODO
ザウルスと iconv と 漢字コード
ザウルスの付ぃあるシステムは shift-jis が使われている。一般の Unix 環境ではファイルシステムは、今は UTF8 が使われているが、zaurusu が発売された当時は EUC が主流だった。Dropbox のファイル名は、8bit スルーだとどこかに書いてあったが、API で使われる JSON は、UTF8が既定の文字コードのはず。
ザウルス発売当時(2003年)は unicode も普及しておらず、ザウルスのシステムが持っている iconv ライブラリは非常に貧弱なものである。ruby にも iconv ライブラリがあるのだが、それはシステムの iconv ライブラリにたいするラッパである。いろいろとシステムの iconv を入れ替えようとこころみたが、ruby も perl もそれ以外の iconv に依存しているものすべて入れ替えなければならないので、諦めた。この dropbox for zaurus では、日本語ファイル名は不可、という仕様で逃げた。
Dropbox は大文字小文字を区別しない
小文字に統一する、とかだといいのだがそうではない。重複判定のときに大文字と小文字を区別しない。
sleep
opie-sh を使っているシェルスクリプトでは、ダイアルアップしてから d4z.rb を走らせる。WiFi の場合はいいのだが、PHS の場合、インターフェイスがアップしてから、ちゃんとつながるまでに少々時間がかかる。で、その間に sleep を入れたが、ちゃんと指定した秒数を待ってくれない、のではなく、qcop QPE/Network 'connectRequest()' をキックしてから(ダイアル中の時間もあわせて)指定した秒数だけスリープする。多めに sleep しておいたほうが無難だ。というか、インターフェイスがアップしたのを、qcop で確認できるのが一番いい。その次の手段は、d4z.rb 側で、つながるまで待つ。
GitHub の話
まだまだ、git と github の概念を理解できていないので、うまく使いこなせていないが、とりあえずアカウントを作った。GUI ツールは gitg を使ってみたが、コマンドラインやウェブヘルプの助けが必要な状態。
Dropbox のしくみ
このような共有ストレージ(ウェブタイプではなくファイルシステムをシャドーコピーするタイプ)としての元祖である。
まずこれは、Y Combinator 案件であるということ。ハッカー精神がその随所に見られる。Linux クライアントを正式にサポートしてあることや、API言語として、python や ruby があることなどからも分かる。
考え方として、ウェブストレージでも rsync でもなく subversion みたいなもの。だから、ローカルにコピーがあることが基本で、さらに pdumpfs やその類似品と同様に、過去のリビジョンもサーバ上に保管されている。
そして、コア部分を C で書いておいて、上位機能は python を難読化したバイナリーで実現されている。だから、Linux への移植性にも優れ、API言語として python が使われている。バックエンドは Amazon S3 なので強力だが、コスト面では大手が専用サーバを作るとビハインドを被るかも。前述のコア部分は、バイナリの差分技術だ。
参考:ポール・グレアム&アンドリュー・ヒューストン「Y Combinatorのファンディング応募フォーム」(上)

Change Logs

0.1.2(2012-05-27)
d4z.rb: wait_connection でネットワークが開通するまで待つことにした。
0.1.1(2012-05-26)
d4z.rb: ログ出力の多くをデバッグオプションのときのみにした。get_file で、サーバのファイルが無いときに例外が生じるのをレスキューした。
-a オプション(サーバ情報をすべて入手する)を追加した。
0.1.0(2012-05-20)
d4z.rb: get_info(全情報取得)ではなく delta(差分情報取得)を使うようにした。すべての情報が完璧にやりとりされていればうまくいく。情報欠落があったときのフェールセーフは未実装。
0.0.2
drpbx_opie.sh: ネットワーク接続してから d4z.rb が起動するまでに sleep 10 するようにした。https://github.com/nkon/dropbox-for-zaurus で公開。
0.0.1
初版公開。ページ作成。

links

いろいろとリンクが切れているので、今回のために参考になったリンクを改めて紹介。


▲Zaurus Top | ↑Up(設定・システム) | ←Prev(qtmail で Gmail(imap)を使う) | →Next()


近藤靖浩