RSSリーダとして、オープンソース版のfastladderを使っている。
fastladder は https のクライアント認証が必要な場所に置いてあって、標準のcrawlerではなくPlagger の Store::Fastladder を使って feed を入力している。
外出中は主にiPhoneを利用しているのだけれど、iPhoneで自前のクライアント証明書を入れる方法がわからなくて使えなかった。
今回、久しぶりに検索してみたら、iPhone 3Gでユーザー証明書を利用してみる - iPhone用連絡先交換サービス(QR Card)& 設定情報等 | iPhone Lab.と言う記事を発見した。
リンク先を見たら、既に「iPhone Configuration Utility 1.0 for Mac OS X」はリンク切れになっていたけれど、検索したらiPhone Configuration Utility 2.0 for Windowsと言うのを見つけたので、早速ダウンロードして使ってみた。
iPhone用のクライアント証明書と、オレオレCAの証明書をiPhone Configuration Utilityにimportして、構成ファイルを作成し、iPhoneにメールする。クライアント証明書をimportするときに、「export可能にする」にチェックしないと構成ファイルに秘密鍵を含めることができない。
iPhone側でメールに添付されたファイルをインストールすると、無事にiPhoneでクライアント証明書が使えるようになった。
しかし、fastladderはデスクトップPCでキーボードを使って操作することを前提に作られているので、iPhoneでは使い物にならない。
以前、fastladder_mobileと言うのを入れていたので、それで見てみたらなんとか見れた。
しかし、cssが適用されないっぽい。どうも、iPhone の Safari はサーバの証明書のホスト名が一致しないと css や javascript を実行してくれないようだ。
なんでホスト名が一致しないかと言うと、以下の理由による。
  • Apache の名前ベースのVirtualHostは、ホスト名ごとに別のサーバ証明書を扱えない(ので、サーバ証明書の名前はwww.wizard-limit.net)
  • fastladder は、コンテキストパスが / でないと実行できないため、メインのWebサーバとは別のホスト名を割り当てている
しょうがないので、https ではなく http 側も fastladder を有効にして、digest認証をかけてみた。
これで、iPhoneから見られるようになったのだが、fastladder_mobile にはいくつか気に入らないところが。
  • itemの並び順が、昇順ではなく降順
  • 設定で1ページの上限件数が指定できるが、一つのfeedに上限件数以上があると、その分は表示されてしまう。
ソースを少しいじって昇順に並ぶようにして、上限件数で切るようにしてみたが、問題が残った。
たとえば、あるfeedに未読が200件あったとして、最初の30件を表示させて、次のページに行くと200件全てが既読になってしまうのだ。
これは、fastladder の未読管理の仕組みに問題がある。
  • subscriptionsと言うテーブルにviewed_onと言う最後に読んだ日時と、has_unread と言うフラグがある
  • items と言うテーブルに stored_onと言う取得日時がある。
  • 既読にする処理は、subscriptionsのviewed_onを現在日時にして、has_unread を false にすると言う処理のため、全てが既読になってしまう
デスクトップのUIでは、When to mark a feed as read と言う設定がImmediately after loading.となっていればほぼ問題は起きないが、それ以外の設定だと問題が置きそうだ。
iPhoneや携帯では、1ページあたりの件数はある程度の数に限定したい。
そこで、今までRailsがわからないからと避けていたのだけれど、iPhone用になんとかしてみることにした。
iPhone対応にすると言うことで、iuiとかiWebKitとか試してみたんだけど、どちらもあまり気に入らなかった(iuiはアニメーションが遅かった、iWebKitはチェックボックスがimageを使ったトグルボタンになってしまう)のでiWebKitをベースに適当に切り貼りして作った。
後にして思えば、rep2 の iPhone 用UIが良くできているので、それを参考にするべきだったかも知れない。
最終的に採用したアルゴリズムは、以下の通り。
  • トップページは、未読があるfeedのリストをメニューとして表示する
  • feedを選択すると、item一覧ページを表示する
  • item一覧ページは、設定にある上限件数までの表示を目指すが、DBの未読管理の問題から同じstored_onを持つitemは全て表示する
  • item一覧ページから次のページに遷移するときに、表示していた最終stored_onでviewed_onを更新し、最終stored_onよりも新しいitemがないときだけhas_unreadをfalseにするようにする
  • 同じfeedに未読があるときは次のページも同じfeed。なければ次のfeed、次のfeedもなければHomeに帰る
複数ページあっても一気に既読にする機能とか、いろいろつけたい機能はあるけど、とりあえず読めるようになっちゃったからしばらくいじらないような気もする。
ソースは、fastladder_mobileに倣ってCodeReposに入れようかとも思ったけど、アカウント取るのが面倒だったのでとりあえずうちに入れておいた。
feeds.jpgitems.jpg

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: fastladder の iPhone 用 UI

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/2125

コメントする

このブログ記事について

このページは、falseが2009年9月 9日 13:15に書いたブログ記事です。

ひとつ前のブログ記事は「回顧録(3)」です。

次のブログ記事は「fastladder を PostgreSQLで動かす」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1