« October 2007 | Main | December 2007 »

2007.11.30

[iPod touch]WiFiをON/OFFするiPod touch用コマンドラインアプリケーションwifictlとWiFiSwitch.app

iPod touchが返ってきたので、iPod touch用いじりを再開。

Services.appのソースを発見したので、前から欲しいと思っていたWiFiのON/OFFをコントロールするコマンドラインアプリケーションを作ってみました。

名前は「wifictl」ということにしました。

SummerBoardからWiFiのON/OFFを一発で切り替えるフロントエンド、「WiFiSwitch.app」というものもついでに作りました。こっちはシェルスクリプトアプリケーションです。

インストール

いつもの野良リポジトリからどうぞ。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

「Utilities > wifictl」
「Utilities > WiFiSwitch」

をインストールしてください。

BSD Subsystemもインストールしていないと困るでしょう。

無保証です。

ソースコードは開示請求があれば公開します。Services.appにならい、GPL v3 or laterです。

wifictlの使い方

使い方: wifictl [オプション]

例)# wifictl -t

-o WiFiをonにします。
-f WiFiをoffにします。
-t WiFiをonとoffの間でトグルします。WiFiSwitch.appはこのオプションを使ってます。
-g WiFiの状態を数値で返します。on時は1、off時は0が返ってきます。
-h ヘルプを表示します。

WiFiSwitch.appの使い方

あらかじめwifictlをインストールしておく必要があります。
SummerBoardに表示されたWiFiSwitch.appをタップして起動です。
WiFiがoffのときに起動するとWiFiをonにします。
WiFiがonのときに起動するとWiFiをoffにします。
ワンタップでWiFiのon/offを切り替えられるわけです。

高度な使い方

本来、これはcron(もしくはlaunchd)を使った自動巡回のために作りました。

例えば以下のようなシェルスクリプトを書きます。

#!/bin/sh

off_flag=1

ifconfig en0 | grep "inet" >/dev/null

if [ $? -eq 1 ]; then
    if [ `wifictl -g` -eq 0 ]; then
    wifictl -o
    count=15
    while [ ${count} -ge 0 ]; do
        ifconfig en0 | grep "inet" >/dev/null
        if [ $? -eq 0 ]; then
        break
        fi
        count=`expr ${count} - 1`
        sleep 1
    done
    fi
else
    off_flag=0
fi

if [ $? -eq 0 ]; then
    #do something
    echo "do something"
    if [ ${off_flag} -eq 1 ]; then
    wifictl -f
    fi
fi

WiFiがoffの場合、onにして、オンラインになるまでの待ち時間を作っています。
「do something」のところにネットワークに接続する内容の処理を書きます。
これを「wificron.sh」という名前で「/var/root/bin」に実行権を付けて保存したとします。

iPod touch上のターミナル、もしくはssh越しのシェルから、「crontab -e」を実行し、起動したviで以下のように入力します。viの操作は……ググってください。

*/30     *       *       *       *       /var/root/bin/wificron.sh

「:wq」で保存して終了すると、以後30分おきにスクリプトが自動実行されます。
WiFiがつながる場所ならば、これでふだんはWiFiをoffにしておいても、スクリプト内でWiFiをonにし、処理が終わったら再度offにするということができます。
元々onだった場合は、WiFiはonのままです。

ちなみに、launchdでもplistの書き方次第でcronのような定期実行ができるはずです。

標準状態ではcronが動いていないかもしれません。
Community Sourceをインストールし、Installer.appからUlctlをダウンロードしてきて、「com.apple.cron」をloadしてみてください。

惜しむらくは、音楽を再生していない状態でロック状態に移行すると、「cronが止まる」ことです。
まあ、所詮はWiFiですし、ままごとですね。でも、こう……なんかwktkしませんか。

この気持ち、共有したい。

ちなみに、野良リポジトリにあるfliteとErica's Utilities収録のplayaudioで音声合成が、また、後でエントリをしますが、拙作のコマンドラインアプリケーションmmpctlでplayaudio後のpause状態から再生状態への復帰が可能です。

これによって、音楽を聴いている最中でも、処理結果を音声合成で、ヘッドフォン経由にてNotificationすることができます。
こういう音声インターフェイスが「来る」んじゃないかと思ってますが、なかなかこれというモバイルデバイスが出ませんね。iPhoneにはそれを期待してたんですけどね。

話題はちょっと変わって以前fliteでローマ字読み上げをしようと思って一生懸命テーブルを作っていたことがあるんですが、濁音辺りで挫折。僕が心の師匠と勝手に仰いでいる「カビパン男と私」さんが、最近「日本語テキスト読み上げ(ガイジン風)」という記事でやってくれてました! これで、ひらがなとかなら読み上げさせることができますね。

ちなみに、fliteで漢字仮名まじり文を読み上げさせようと思ってkakasiをiPod touch向けにビルドしてみたんですが、メモリ不足でターミナルが吹っ飛び、ターミナルが吹っ飛んだ後もkakasiがメモリを食らい続け、最後には強制的に再起動がかかりました。iPhoneDiskでマウント中だったので、そのあおりを食らって母艦までカーネルパニックを起こす始末。くわばらくわばら。

|

2007.11.22

[Palm]WristPDA用SDK

WristPDA用のSDKがFossilから消えちゃってますね。
リンクはしないんで探してみてください。

WristPDA_SDK.zip

|

2007.11.21

[iPod touch]iPod touch / iPhone用ターミナルTerminal.appを改造し日本語キーボードOK、Ctrl一発入力可能に

iPod touch / iPhone用のターミナルエミュレータTerminal.app (mobileterminal)の微妙に使いにくいところを改造して、できる範囲で使いやすく(自分比)してみました。名前はTerminalV.appということにしてみました。
Bundle Identifierも変えてありますので、オリジナルのTerminal.appと共存できます。

オリジナルは、日本語キーボードから入力すると例外が出て落ちてしまいますが(単純に複数バイトの入力があったらNSExceptionで例外を出している)、そこをいじって、日本語キーボードからでも入力できるようにしました。POBoxによる補完でコマンドラインを入力する感じは、なかなか面白いです。

ただし、日本語の入力や表示ができるようになったわけではないので悪しからず。
JTerminalの作者、Kiichi KusamaさんのVT100Terminal.mがコアなので対応はできそうなんですけど、僕には無理そうです。

それから、標準ではCtrlの入力が面倒なので、ターミナル部分をタップすると表示されるサークルからCtrlを直接入力できるようにしてみました。ついでに永遠のFAQとなるであろう「^[」を「ESC」という表示にしてみました。
ちなみに、Ctrl+Aの入力(行頭ジャンプ等)はなぜかダメですが、Ctrl+Shift+Aとすると入力できます。
Ctrl+Spaceもダメなんですよね。Ctrl+Spaceは入力のしようが無さそうなので、入れ替えられるものならサークルの「^C」をつぶして入れ替えるかも。

ちなみに、標準のCtrl入力方法は、「.?123」→「#+=」→「・」です。つまり、「・」がCtrlの代わりです。これが結構面倒なのでサークルから入力できるようにしたわけです。


ダウンロードは、いつもの野良リポジトリからどうぞ。

無保証です。

Installer.appの「System > TerminalV」です。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

ソースコードは開示請求があれば公開します。

|

2007.11.19

[iPod touch]iPod touch/iPhone用IRCクライアントmColloquyを暫定JIS(ISO2022-JP)対応

iPod touch / iPhone用IRCクライアント、mColloquyはエンコーディングがUTF-8固定なので、JIS(ISO2022-JP)が主流の国内での使用には厳しいものがありました。

というわけで、部分的にJIS(ISO2022-JP)対応の修正を施してみました。
メッセージの送受信は文字化けせずできることを確認しています。

ただ、あんまりよく分からず目に付いたところだけ直したという状況なので、日本語の名前が付いたチャンネルにはjoinできません(joinできないというよりは、UTF-8の名前で新しくチャンネルができる)。名前がASCII文字だけで付けられたチャンネルにはjoinできると思います。ColloquyはUTF-8しかサポートしないポリシーのようで、これを僕に直せるか分かりません。だれか優秀な方がやってくれるといいんですけどね。

また、メッセージの入力欄が真っ黒でおかしかったので、それも修正しました。
オリジナルはMobileSMS.appのリソースを参照しているので、それがインストールされていないiPod touchでは問題が出るのでした。画像は作り起こしました。ライセンスはmColloquy本体に準拠します。

Real Nameに「$encoding=utf8$」と入力しておくとエンコーディング変換してくれて、ストック状態のmColloquyでも文字化けしないサーバがあるようです。
そういう機能があるサーバでは、この改変版を使うとかえって不整合が出ます。
ColloquyJ.appという名前にし、Bundle Identifierも変えてありますので、オリジナル版とは共存できます。

Colloquy.app改めColloquyJ.appは無保証です。自分同様iPod touchをレンガにしても構わない人のみ使ってください。

ダウンロード、インストールはいつもの野良リポジトリからどうぞ。

Installer.appの「Network > ColloquyJ」です。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

ソースコードは開示請求があれば公開します。

テスト用チャンネル

折角なので、iPod touchユーザーのテスト場所を宣言しておこうかな。

IRCNETのサーバの、「#ipod-touch」で。

上記のページにあるサーバなら、どこにつないでも同じです(Internet Relay Chatですから)。
僕はニックネームmoyashiで入っていると思います。

|

2007.11.18

[iPod touch]iPod touch / iPhone用テキストリーダーBooks.appの日本語エンコーディング自動判定対応版BooksJ.app

PalmのPlucker形式ファイルやDocファイルが読め(るらしく……やったこと無いので分からない)、もちろんテキストファイルやhtmlなども読めてしまう、かなり最高なアプリBooks.appですが、元々あるテキストエンコーディングの自動判定機能が日本語に対応していないので惜しい感じがありました。

TextEdit.appを修正した流れで、Books.appの方も日本語対応させてみました。
JIS(ISO2022-JP)、EUC-JP、Shift-JIS、UTF-8など大丈夫だと思います。

また、このアプリのファイルブラウザーでswipe(ファイル削除するときにする、指を横にすべらせるジェスチャー)がなかなかうまくいかず、いつも「ムキーーーーーーーーー!!」となっていたので、row heightを高くしてみました。操作しやすくなったと思います。

JISの自動判定のコードは、hipopos-lab::blogさんのエントリ「Smultronのエンコード自動判定」経由で藤棚工房さんのものを流用させてもらいました。お二方に感謝致します。

Books.app改めBooksJ.appは、自分でも使っていますが無保証です。自分同様iPod touchをレンガにしても構わない人のみ使ってください。

ダウンロード、インストールはいつもの野良リポジトリからどうぞ。

Installer.appの「Productivity > BooksJ」にあります。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

ソースコードは開示請求があれば公開します。

|

2007.11.17

[iPod touch]日本語対応改造をしたテキストエディタMobileTextEditにエンコーディング自動判定機能を追加

iPod touch / iPhone用テキストエディタMobileTextEditの日本語対応改造版、MobileTextEditJ(TextEdit.app改めTextEditJ.app)をバージョンアップしました。

今度はエンコーディングの自動判定機能を付けてみました。
自分で試した範囲ではShift-JIS、JIS(ISO2022-JP)、EUC-JP、UTF-8は大丈夫なようです。UTF-16はダメですね。

既存のテキストを開いた際はエンコーディングが自動判定され、保存時はその自動判定されたエンコーディングが使われます。

新規作成時はデフォルトのエンコーディングとしてShift-JISが採用され、保存時はそれが使われます。
明示的に保存時のエンコーディングを指定することは、今のところできません。

改行コードの変換などは面倒を見ていません。
どうしても困る状況がある場合は、野良リポジトリにあるnkf、skfを使ってみてください。

自動判定のコードは、hipopos-lab::blogさんのエントリ「Smultronのエンコード自動判定」経由で藤棚工房さんのものを流用させてもらいました。お二方に感謝致します。
ただ、先にEUC-JPの判定をやらないと誤判定があったので修正しました。
便利なコードの公開、ありがとうございます。

MobileTextEditJ(TextEditJ.app)は、自分でもこのエントリを書くために使っていますが無保証です。自分同様iPod touchをレンガにしても構わない人のみ使ってください。

ダウンロード、インストールはいつもの野良リポジトリからどうぞ。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

ソースコードは開示請求があれば公開します。

あれれ、「藤棚工房別棟 −徒然−」さんが消えちゃってますね。大丈夫でしょうか。11月8日にはまだあったようですが。

|

2007.11.15

[iPod touch]日本語が通るようにしたMobileTextEditを小修正

昨日のエントリ、「[ipod touch]iPod touch / iPhone用テキストエディタMobileTextEditで日本語(Shift-JIS)の読み書きができるよう修正してみた」の続きです。

こないだのやつはbundle identifierの修正漏れがあったので、MobileFinderとの連携がうまくいってませんでした。それを直したのと、画面をタップする度にキーボードが出たり入ったりするのが気に入らなかったので、その動作を抑制し、「Keyboard」ボタンを新設して、キーボードの出し入れをマニュアル操作にしました。これでかなり使いやすくなったと思います。

TextEdit.app改めTextEditJ.appです。ダウンロードは、野良リポジトリで。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

|

2007.11.13

[ipod touch]iPod touch / iPhone用テキストエディタMobileTextEditで日本語(Shift-JIS)の読み書きができるよう修正してみた

2007.11.14追記:MobileFinderとの連携等で変なところがあるので、直したやつを後でアップします。→アップしました0.3.1-0.1がそれです。

iPod touch / iPhone用のテキストエディタ、MobileTextEditのコンパイルが通ったので、保存と読み込み時にencodingがRoman決め打ちだったのを、NSShiftJISStringEncoding決め打ちにしてみました。

結局決め打ち(笑)。

とりあえずShift-JISだけですが、これで日本語テキストファイルの読み書きができるようになりました。
そのほかのエンコーディングのテキストファイルを読み書きする必要性に迫られたら、野良リポジトリのnkfやskfを使ってみてください。

最初はNSUTF8StringEncodingでやってみたんですが、それで保存したテキストファイルはEmacsでは読めるものの、Jedit Xでは読めないものになってしまったので、とりあえずNSShiftJISStringEncodingで。BOMの関係?

MobileTextEditJという名前でInstaller.app用野良リポジトリに登録しておきましたので、よかったら試してみてください。

ちなみに、自分にはObjective-Cをバリバリ書いたりデバッグしたりする能力が無いので、ちゃんとした日本語対応版は優秀な人が取りかかることを待ちましょう。

無論、無保証です。

野良リポジトリはこちら。

[ipod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

|

2007.11.12

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

iPod touch / iPhone用の開発環境を作って野良ビルドをしたバイナリがたまってきたので、自分用という感じでInstaller.app用のリポジトリを置いてみました。

さすがにインストール、アンインストールが楽です。

今後スクリプトアプリケーションみたいなのを配布する際は、これを使おうかと思います。

使用方法

iPod touchにInstaller.appをインストールし、バージョンアップを済ませた後でMobileSafariから以下のURLにアクセスし、画像のようなダイアログが出たら「Yes」と答えてください。

これが出ない場合は、InstallerのSourcesのタブで「Edit」「Add」とNavigationBarのボタンを押し、表示されたダイアログにリポジトリのURLを手打ちで登録し、「Refresh」すれば使えると思います。
Installer.appのv2.63辺りからアップデートしてこないと、このダイアログを出すwebpluginが入らないようです。

http://hpcgi3.nifty.com/moyashi/ipodtouch/repository.cgi

しかる後にInstaller.appを起動し、必要があらば「Sources」のタブで「Refresh」ボタンを押してください。

すると、「Utilities」のカテゴリに(面倒なのでとりえず全部そのカテゴリにしちゃってます)項目が増えていると思います。
後は普通にインストールできると思います。

あんまりテストしていないので、あなたのiPod touchが凄いことになってしまったらごめんなさい。
すいませんが無保証です。

Lyrics.app、iComic.app、2tch.appなどのGUIアプリケーションの場合は関係ありませんが、CLI/CUIアプリケーションの場合はErica's Utilities同様「/var/root/bin」に入りますので、それらを使う際はPATHを通してください。
iPod touchでは「/etc/profile」を編集するのが標準的なんでしょうかね。

設置パッケージ

現時点では、以下のパッケージを設置しています。
英文音声合成ソフトウェアであるfliteは一応動きますが、そのまんまコンパイルしたもんで、直接音は出ません。/dev/dspとかが無いから?

wavに書き出して、Erica's Utilitiesに収録されているplayaudioコマンドで再生してください。

flite -t 'Hi, I'm iPod touch. Nice to see you.' -o a.wav; playaudio a.wav

そうです。英語ではありますがiPod touchをしゃべらせることができます!

lvとかjlessは、日本語が表示できるTerminalが無いのでgrep用途以外では意味無いかな。

descriptionは、dipusさんのPrivate Packagesをコピ……参考にさせてもらいました。
リポジトリに置きたいパッケージがある方は、連絡していただければ設置します。

skf-1.95.2-1_arm-apple-darwin.zip
lv-4.51-1_arm-apple-darwin.zip
bzip2-1.0.4-1_arm-apple-darwin.zip
lha-1.14i-ac20050924p1-1_arm-apple-darwin.zip
nkf-2.0.8-1_arm-apple-darwin.zip
less-382-iso262-1_arm-apple-darwin.zip
flite-1.3-1_arm-apple-darwin.zip
gnuplot-4.2.2-1_arm-apple-darwin.zip
sed-ja-3.02-1_arm-apple-darwin.zip
findutils-4.2.3l-1_arm-apple-darwin.zip
unzip-5.52-1_arm-apple-darwin.zip
lua-5.1.2-1_arm-apple-darwin.zip
zip-2.32-1_arm-apple-darwin.zip
gawk-ja-3.0.4-1_arm-apple-darwin.zip

|

2007.11.11

[iPod touch]メモ(MobileNotes.app)からテキストに書き出したり、テキストから書き込んだりするスクリプトアプリケーション

またJailbrokenなiPod touchの話題です。

sqlite3を使ってメモ(MobileNotes.app)のデータベースを読み書きできることが分かったので、メモ(MobileNotes.app)で書いた文書をテキストに書き出したり、テキストファイルからメモ(MobileNotes.app)にデータを書き込んだりするためのスクリプトアプリケーションを作ってみました。

アプリケーションの形態を取っているので、ホーム画面から実行できます。
これによって、ちょっと面倒ですがメモ(MobileNotes.app)をテキストエディタ代わりに使えます。
メールでやりとりすれば済む話ですけどね。

なお、ImportNotes.appにはnkfを内包しています。作者の方、メンテナの方々には感謝致します。

自分の書いたスクリプト、リソース等は自由にご利用ください。

iPod touch向けスクリプトアプリケーション用アイコン出来!

mkplusさんに、何とiPod touch向けのスクリプトアプリケーション用のアイコンを作ってもらいました。
AppleScriptのアイコンよろしくiPod touchが、けなげに(?)グニュリと曲がってScriptの「S」の字を描いてます。素晴らしい!

流用してOKとのお許しをいただきましたので、同好の志がいらしたら、どうぞお使いください。
枠ありと枠無し版があります。また、Default.png用の画像もあります。

インストール

Instaler.app用のリポジトリを用意しましたので、そちらからインストールできます。

[ipod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

「Utilities > ExportNotes」
「Utilities > ImportNotes」

です。

動作には、以下のものが必要です。インストールしていなければ、いっしょにInstaller.appからインストールしてください。

  • BSD Subsystem
  • Erica's Ported Utilities
  • Erica's Utilities

便利なので、Booksもインストールしておきましょう。テキストリーダーとしておすすめです。
何と、かつてのPalmOS向けDocリーダーがそうであったように、ドキュメントごとに表示位置を覚えてますし。

  • Books

使い方その1: テキストファイルをメモ(MobileNotes.app)に取り込む(インポートする)

「/var/root/Media/EBooks」にテキストファイルをコピーします。ディレクトリが無ければ作ります。

コピーするファイルのファイル名の頭に「@@」を付けておきます。
後出のImportNotes.appは、これを目印に、メモ(MobileNotes.app)へテキストファイルを取り込み(インポートし)ます。

ホーム画面からImportNotes.appを起動します。

メモ(MobileNotes.app)を起動します。ファイル名がタイトルになったメモが出来ているはずです。
本文を表示している状態なら、メモ一覧画面に戻ってみます。
それでも現れないなら、一度ホーム画面に戻り、再度メモ(MobileNotes.app)を起動してみます。

ちゃんと取り込まれて(インポートされて)いました。

使い方その2: メモ(MobileNotes.app)からテキストファイルに書き出す(エクスポートする)


何か適当にメモを書き、保存します。「@@」で始まる文章にします。後出のExportNotes.appは、それを目印にメモ(MobileNotes.app)からテキストファイルに書き出します(エクスポートします)。頭に空白があっても、空行があってもいけません。

このような状態にして書き出してみます。

ホーム画面に戻り、ExportNotes.appを起動します。これで、「/var/root/Media/EBooks」以下に「dump-000-YYYYMMDD-HHMMSS.txt」というファイル名で書き出された(エクスポートされた)はずです。

Booksを起動して確かめてみます。お、確かに書き出された(エクスポートされた)ものがあります。

中身を見てみると、ちゃんと書き出されて(エクスポートされて)いました。

注意点

無保証です。

ImportNotes.appは取り込み(インポート)時に、テキストをnkfでutf-8、改行コードLFに変換します。

ExportNotes.appは、文字コードをいじらずに書き出すので、書き出されたテキストはutf-8、改行コードLFのものです。

ImportNotes.appの中にiPod touchで動くnkfが入ってますので、それでは困る人はいろいろやってみてください。

|

2007.11.10

[Emacs][Zaurus]Emacs用Twitterクライアントtwit.el variant

Emacs用のTwitterクライアントとして早くから存在した、Theron Tlaxさんの書かれたtwit.elにpost時残り文字数表示をするHackを加えたL.さんの改造版を元に、自分好みに改造してみました。

かなり変えてしまったので、この版をtwit.el variantと名乗ることにします。

twit.elをベースにしたのは、Twitterのsourceに「twit.el」と表示されるからです。
何を使っているのか他人に分からないんじゃ、面白くないですよね。

改造の方針は、操作系や見た目をNavi2chに近づけるというものです。
どんな感じかはscreen castをどうぞ。

初めてのまともな(?)Emacs Lispなので、ひどいものですいませんが(いや、いつだって自分にはマトモなものなど書けませんが)、Navi2chライクなTwitterクライアント、という目標はある程度達成され、類似のものも無いので公開してみます。
技術的に見るものは全く無いので、間違っても自分が書いた部分は参考にしないでください。

twit.el variantを書くに当たっては、はやみずさんのtwittering-mode、Navi2ch ProjectのNavi2chを大いに参考にしています。
また、小松さんのurlencode.elも参考にしました。


……すいません。参考にしたというか関数をコピペしました。

動作テスト環境

動作環境をかっちりと明示できればいいのですが、詳しくないものでよく分かっていません。
オリジナルのtwit.elの動作環境が22.0.99.1〜22.1.1付近なので、それぐらいかと。

銭谷さんのメンテナンスされているCarbon Emacsと、dipusさんのメンテナンスされているLinux Zaurus向けPrivate PackagesにあるEmacs、Meadow Netinstall Setup Programでインストールできる、Meadow3での動作を確認しています。

GNU Emacs 22.1.1 (powerpc-apple-darwin8.9.0, Carbon Version 1.6.0)
GNU Emacs 22.0.93.1 (arm-sharp-linux-gnu)
GNU Emacs 22.1.1 (i386-mingw-nt5.1.2600)

Vine Linux 4.1に入っている22.0.50.1でも動きました。

GNU Emacs 22.0.50.1 (i686-pc-linux-gnu, GTK+ Version 2.8.17, emcws)

ただし細工が必要。
XmlParserが古いので、新しいxml.elをもらってきます。これを入れ換えるか順序が先のload-pathに置いて先に読ませます。
また、なぜかGNUS由来のmailcap.elにあるmailcap-parse-mailcapsが未定義なので、明示的に読ませます。FLIMとの衝突?
これで流儀的に正しいかは分かりかねますが動きました。

しかし、POST時にPOST自体は成功するものの、引数の数が違うとエラーが出ますね。
よく分からん。

(load "/usr/share/emacs/22.0.50/lisp/gnus/mailcap.elc")
(load "twit")
(twit-mode t)
(setq twit-username "USERNAME")
(setq twit-password "PASSWORD")
(setq twit-favorite-friends
'("otsune" "masui" "miyagawa" "emacs"))

ダウンロード

twit.el(本体)

twit_utf8.txt(ドキュメント)

Linux Zaurus用のパッケージも置いておきます。「/opt/QtPalmtop/share/emacs/site-lisp/twit.el」に入ります。dipusさんのPrivate PackagesにあるEmacsの構成に準拠したものです。

「twit.el-variant_0.0.11-0.1.2-1_arm.ipk.bin」をダウンロード

不具合

山ほどあるかと思いますが、「(require 'cl)」とポストしようと思ったらそこが消えてしまいました。謎。

Zaurus上のEmacsとNetFrontを連携させるには

Zaurus上のEmacsでURLを踏んだときにNetFrontでブラウズする場合は、以前こちらのページにあったbrowse-url-netfront.elを使います。

「browse-url-netfront.el」(転載)をダウンロード

load-pathの通ったところにコピーし、.emacs.elに以下のように書いておきます。

(autoload 'browse-url-netfront "browse-url-netfront" "" t)
(setq browse-url-browser-function 'browse-url-netfront)

|

2007.11.08

[iPod touch]オカエリナサλ

何となく順序が逆ですが、どうしても撮影してみたくなったので。
生みの親こそ違いますが、Appleよ、よくぞ帰ってきてくれました。

今後Appleがどんな夢を見せてくれるのか。期待したいと思います。

iPod touch and MessagePad 2100

|

2007.11.02

[iPod touch]iPhone由来のメモ(MobileNotes.app)からsqlite3でデータを出し入れする

iPod touch素晴らしいです。本当に。
モバイル機器としては、通信手段が無線LAN Onlyというディスアドバンテージを抱え、個々の機能性を見ていくと欠点が目立ちながら、ためつすがめつ、これほどまでにほれぼれとできるのはなぜなんでしょうか。
iPod touchをいじり倒して、来るのかどうか分かりませんがiPhoneの上陸を待つとしましょう。

今回もJailbrokenなiPod touchの話題です。

iPod touch上で日本語入りのテキストファイルを作成できるソフトウェアが欲しいのですが、唯一のテキストエディタであるmobiletexteditがASCII決め打ちで処理しているので、しばし待たなくてはならないでしょう。
ファイルの入出力に渡されているエンコーディング指定をUTF8にでも書き換えればいんじゃね? ということで書き換えてみたものの、parse errorやらググっても見つからないヘッダを参照しているやらでコンパイル通せてません。

さて、iPhone搭載のアプリのうち、メール(MobileMail.app)、連絡先(MobileAddressBook.app)、カレンダー(MobileCal.app)、そしてメモ(MobileNotes.app)はバックエンドとしてSQLiteを使っているようで、それらから書き出されたデータはSQLiteで読めるということは広く知られてます。

sqlite3はErica's Ported Utillitiesに収録されてますので、Installer.appからインストールでき、iPod touch上でいじくることができます。
もちろん、データをコピーしてきて母艦でsqlite3を使っていじくることもできますし、各種処理系のSQLiteバインドを使うと、もう無茶苦茶いじくり倒せます。とても汎用性の高いフォーマットが採用されているのですね。

sqlite3でメモ(MobileNotes.app)のデータベースを読み出すことができたら、メモ(MobileNotes.app)をテキストエディタ代わりに使えそうです。
sqlite3はコマンドラインインターフェイスなので、Terminalから使います。

sqlite3 /var/root/Library/Notes/notes.db

これでインタラクティブモードが起動します。どんなtableが定義されているか見てみます。

sqlite> .table

<結果>

Note note_bodies
_SqliteDatabaseProperties

Note、note_bodies、_SqliteDatabasePropertiesと三つのtableがあることが分かります。
Noteがヘッダ情報、note_bodiesが本文を収めています。続いてスキーマを見てみます。

sqlite> .schema

<結果>

CREATE TABLE Note (creation_date INTEGER, title TEXT, summary TEXT);
CREATE TABLE _SqliteDatabaseProperties (key TEXT, value TEXT, UNIQUE(key));
CREATE TABLE note_bodies (note_id INTEGER, data, UNIQUE(note_id));
CREATE TRIGGER delete_note_bodies AFTER DELETE ON Note
BEGIN
DELETE FROM note_bodies WHERE note_id = OLD.ROWID;
END;

なーるほど、Noteのレコードを消すと、自動的にそれに対応したnote_bodiesの方も消えるよう、トリガがかかっているんですね。こういう仕組みがあるとは知りませんでした。メモを1件読み出してみます。
見やすくヘッダを付けてみます。

sqlite> .header on
sqlite> select * from Note limit 1;

<結果>

creation_date|title|summary
215507891|iPod touchのSafariで今見ているページを文字化けを直しつつ保存し、オフラインで見る方法|iPod touchのSafariは、機能こそ少ないですが、無理矢理実用してやりたくなる憎めない奴で

creation_date、title、summaryの順で表示されています。creation_dateは日付のはずですが、整数ですね。どこかの時点を起点とした経過秒数なのでしょう。試しに、これを0にしてみます。

sqlite> update Note set creation_date=0 where creation_date=215507891;

Notesを起動してみると、「2496 days ago 2001年1月1日 9:00」となっています。

dateコマンドで取得できるUNIX timeはUTCの1970年1月1日00:00:00(UNIX epoch)を起点とした経過秒数なので、Notesが起点としているものとの差は、UTCで978339600秒ということになります。
ここから日本のローカルタイムとの時差9時間(32400秒)を引くと、dateコマンドで求めたUNIX time表現の現在時刻からNotesのcreation_dateが求まります。

UNIX time - (978339600 - 32400)

unixtime=`date +%s`
creationdate=`expr $unixtime - \( 978339600 - 32400 \)`

新しいレコードを挿入してみます。シェルスクリプトを書きます。

#!/bin/sh

unixtime=`date +%s`
creationdate=`expr $unixtime - \( 978339600 - 32400 \)`
title=`date`
uname=`uname -a`

body=`sed -e 's/^\(.*\)$/<div>\1<\/div>/g'<<EOT
${uname}
1 long long body
2 long long body
3 long long body
4 long long body
5 long long body
EOT`

summary=`echo ${body} | head -1`

sql="insert into Note values( ${creationdate}, '${title}', '${summary}' );"
sqlite3 /var/root/Library/Notes/notes.db "$sql"

sql="insert into note_bodies values( (select max(note_id) + 1 from note_bodies), '${body}' );"
sqlite3 /var/root/Library/Notes/notes.db "$sql"

↓実行前

↓実行後

↓中身

うまく入りました。メモ(MobileNotes.app)からホーム画面に戻り、再度メモ(MobileNotes.app)を起動すると反映されます。bodyの部分はdivでくくって行を表現するようです。

レコードを消す場合は、Noteの方のレコードを消します。トリガによってnote_bodiesの方も消えてくれます。

sqlite> delete from Note where creation_date=215642040;

両方のtableのレコード数を確認します。

sqlite> select count(*) from Note;
5
sqlite> select count(*) from note_bodies;
5

Noteの方しか消していないのに、note_bodiesの方のレコードも消えています。

実用例としては、titleが@@で始まるレコードをテキストに書き出す、などがあります。

#!/bin/sh

notesdb=/var/root/Library/Notes/notes.db
ebooksdir=/var/root/Media/EBooks

sqlite3 $notesdb "select data from note_bodies where data like \"@@%\";" |
sed -e 's/<div>//g'\
-e 's/<br>//g'\
-e 's/<br class="webkit-block-placeholder">//g'\
-e 's/<\/div>/\
/g' > ${ebooksdir}/dump`date +%Y%m%d-%H%M%S`.txt

後で、これをシェルスクリプトアプリケーションにしてみます。

ちなみに、実際にはErica's Ported Utilitiesのsqlite3は残念ながらGNU readlineのサポートがONになっていないので、インタラクティブモードが使いにくいです。シェルスクリプトを書いて試す方がいいでしょう。


ちゃんと母艦と同期して使いたいんだ、という人向けにはThe Missing Sync for iPhoneというものが控えています。Yojimbo、Microsoft Entourage、Mark/Space Notebookとメモ(MobileNotes.app)が同期できるようです。
iPod touchで使えるかどうか分かりませんが。

|

« October 2007 | Main | December 2007 »