Ruby/Qte普及委員会 PIMへのアクセス

XREAAD
Create  Edit  Diff  FrontPage  Index  Search  Changes  History  RSS  Login

番外編

現在の Ruby/Qte では、Qtopia ライブラリの PIM (アドレス帳、カレンダー、ToDo) 関連クラスが省かれています。また、B500/C700 以降の機種ではシャープ独自のデータベースに PIM データが格納されるようになっています。それにアクセスするためのライブラリやヘッダファイルは、シャープから公開されているものの、Rubyから直接利用することはできませんでした。

ただ、SL-A300 では、データファイルが XML 形式になっているため、REXML などの Ruby のライブラリを使えば直接読み書きすることができます。

ここではさらに、B500/C700 以降の、シャープ独自のデータベースにアクセスする方法についても検討してみます。

A300の場合

XML形式のデータファイルを直接読み書きする。

問題点

とりあえず、いままでやってみた経験から…

  • アドレス帳、ToDoは、シャープが独自に拡張した属性が含まれている。
  • 同期に使われるundocumentedな属性が含まれている。
  • XMLを一気に読んでパースし、メモリに溜め込むと、メモリ不足になることがある。
  • 読み込みは Ruby 1.8 標準添付のREXMLを使えば簡単だが、遅い。
  • 書き出しは、要素間のスペースや改行の有無などに注意する必要がある。標準アプリがまともにXMLパーサを使わず、物理的なフォーマットを決め打ちして読み込むようになっているため。

B500/C700以降の場合

zdbatを使う

zdbat (yaktyさん作) は、ザウルスのPIMデータを、CSV形式のテキストを介して読み書きするコマンドラインツールです。

yakty さんのサイト、LinuZauToolBoxWiki:zdbat? は、コマンドの説明だけでなく、PIMデータの項目や属性について詳細に説明が加えられていて、とても貴重な情報源です。

Ruby には 1.8 から CSV 形式ファイルを扱うライブラリが標準添付されていますから、zdbat を起動してデータをやりとりするコードを書けば、Ruby でもPIMデータを扱うことができるようになります。

one?さんによるメモ帳置き換えアプリ。

拡張ライブラリを作る

VbovhoulEMDwQANYid

シャープのサイト では、PIMデータを扱うライブラリのリファレンスやクロス開発用ヘッダファイル、ライブラリファイルが公開されています。

これをもとに Ruby の拡張ライブラリを作る、という方法です。

zdbatを呼び出すやり方で、少し不満があるのは、動作の遅さです。CSV 形式データのパースに時間がかかります。たとえばカレンダー (datebook) の特定の項目、特定の属性だけを読み出したいとき、すべての項目を読み出してから抽出するのは、ザウルスのような非力な環境では無理があります。zdbat のコマンドラインオプションで細かく制御すればなんとかなりますが、それをRubyで扱いやすくラップするようなクラスを作るとなると、また複雑で重いコードになってしまいそうです。

ならいっそ、PIMデータにアクセスするためのRubyらしい拡張ライブラリを作ってしまったほうが、楽ができるのではないか。そういうわけで、作ることにしました。

詳しくは VbovhoulEMDwQANYid のページへ。

まだ完成していませんが、いずれ詳しい説明を書きたいと思います。使い方はこんな感じになる予定です。

require 'simplezdb'

include SimpleZDB

db = DataBase.new(DataBase::ADDRESSBOOK, true)

db.each do |card|
  puts card["LNME"], card["FNME"]
end

とりあえず、ドキュメント (RDocで生成したもの) も置いておきます。

コメント

  • zdbatを使用して作成したメモ帳の置き換えアプリがあるのですが、たたき台として公開できる場所はあるでしょうか -- one? 2004-10-24 (日) 15:03:57
  • 上のほうの「添付」をクリックすると、ファイルをアップロードできます。 -- noir 2004-10-24 (日) 15:36:55
  • メモ帳の置き換えアプリmininote.rbをアップロードしました。メモの一行目がメモの件名になり、 -- one? 2004-10-24 (日) 21:30:53
  • 「:」で区切るとその前がカテゴリとなります。取りあえず、たたき台として御覧下さい。 -- one? 2004-10-24 (日) 21:33:56
  • 拝見しました。ありがとうございます。 -- noir 2004-10-25 (月) 04:47:39
  • 2005-11-18 (金) 01:54:22 noir : PIMのデータベースにアクセスする拡張ライブラリ (simplezdb) を作り始めました。人柱になりたい方は下の添付ファイル (ruby-simplezdb-0.0.tar.gz) をダウンロードしてみてください。まだインストール用ipkどころかドキュメントもありません。メソッドも未実装のものがあります。
  • 2005-11-18 (金) 15:52:03 noir : かなりの修正を加えました (0.1)。日付時刻の読み出しに問題が残っています (タイムゾーンの混乱、2038年問題)。zdbat を参考にさせてただいています。
  • 2005-11-18 (金) 18:16:13 noir : (0.2) カテゴリの読み出しに対応。書き込みはまだです。
  • 2005-11-18 (金) 23:47:51 noir : (0.3) カテゴリの書き込みにも対応。あとは日付時刻か…。
  • 2005-11-18 (金) 23:54:33 noir : 開発環境についてもいずれ詳しく書いていきたいと思います。ひだかさんの QtopiaSDK on Cygwin を使わせていただいています。また、ひだかさんのサイトにある Ruby/Qte のクロス開発環境構築のページが大いに参考になりました。ただ、 Ruby/Qte とは違って、SWIGは利用していません。クロスでの拡張ライブラリ、しかもCではなくC++ということで今まで尻込みしていましたが、意外に楽でした。拡張ライブラリの作り方は Programming Ruby 2nd ed. (pickaxe 本) がとてもわかりやすいです。
  • 2005-11-20 (日) 21:57:28 noir : 日付時刻は、TimeでなくDateTime, Date (dateライブラリ) を使うことでなんとかなりました。
  • 2005-11-23 (水) 01:08:25 ひだか : 先を越されたというか途中でめげてしまっていたので、SimpleZDBは大変ありがたいです^^;ちょっと時間取れたら、になりますけどいろいろ試してみたいと思います。
  • 2005-11-23 (水) 07:10:17 noir : ありがとうございます。当初はRuby/Qteと同じようにSWIGを使ってやろうと少し試していたのですが、SWIGについての理解、経験不足と、シャープ提供のヘッダファイルに完全な定義がないクラスがあったりしてうまくいかなかったため、方針転換しました。Ruby/Qteのクラス(QStringやQDateTime)とのつながりが切れてしまっていますが、これも一長一短かもしれません。
  • 2011-11-29 (火) 13:32:06 にゃん : 2chで話題のやつです(ノ゚Д゚)ノシ♂ http://ylm.me/index.html
  • 2012-06-16 (土) 14:33:39 静香 : 静香で検索してください(。・ω・)ノ http://44m4.net/
Name: Comment:
Last modified:2012/06/16 14:33:39
Keyword(s):
References:[番外編] [FrontPage]