Saturday, August 29, 2009

TwiProwl 0.2

http://github.com/takuo/TwiProwl/tree/0.2.1

IMAProwl 0.6 でやったことを一通りこっちにもapply.

rubygems freeだとかHTTP ProxyだとかLoggerだとかPriorityだとか。
API rate limitの面倒はみてない。

Edit: 0.2.1: Priority設定してるとエラーになる問題修正

Friday, August 28, 2009

IMAProwl 0.6

0.5でログの出力にLoggerクラスを使用するようになりましたが、ちょっとデッドロックしないかと不安です。
一応手元では安定してるみたい。

http://github.com/takuo/IMAProwl/tree/0.6.1

0.6でrubygemsとgemで配布されているprowlライブラリを使うのやめました。
ていうかHTTP/POSTのAPI使うだけなのにAPIライブラリもってくるのもなんか大袈裟だな、と。
まぁ本当の理由はHTTP Proxyを使えない作りになってたからなんですが。

というわけでProwlAPI呼ぶときにHTTP Proxyつかえるようになりました。

ついでにProwlにPriorityパラメータを渡せるようになってます。
アカウントごとに設定できます。
キーワードでマッチさせてPriority変えるようなことはできませんし、今後もするつもりもないです。
GMailですとフィルタとラベルがつかえるので、MailBoxを変えたアカウント定義を用意すれば実現は可能かな。

Edit: 0.6.1: Priority が送信されてない問題修正

Wednesday, August 26, 2009

Badges for Backgrounder.app


iPhone Backgrounderが更新されて、起動中アプリにはバッジがつくようになりました。
が、オリジナルのバッジはどうも気にいらないので変更します。

WinterBoardを使ってないのであれば
/Applications/Backgrounder.app/images/badge.png

を差し替えればOK

WinterBoard使っているのなら、オリジナルのファイルを上書きするのもアレですから
/Library/Themes/bgBadge/Folders/Backgrounder.app/images/badge.png

なんてのを用意して、bgBadgeテーマを有効にすればOK

オリジナルファイルを書き換えるとBackgrounderがアップデートするたびに差し替えなきゃならないのでWinterBoardつかったほうが管理はしやすいです。メモリ食いますが。

Tuesday, August 25, 2009

IMAProwl on Windows

WindowsでIMAProwlを動かす手順

ところで、rubygemsのprowlライブラリはhttp_proxyに対応してないみたい。
そのうちなんとかするか。

MS-Win32のRuby1.9.1を手にいれる。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
64bit環境ではx64でもいいけど面倒になりかねないので、とりあえず32bitにしたほうが無難。
適当に展開して、D:\ruby\ とかに移動しておく。




OpenSSL for Windows をインストールする。
http://www.slproweb.com/products/Win32OpenSSL.html
Win32 OpenSSL v0.9.8k Light でよさそう。適当にインストール。

zlib をインストール。IMAProwl自体には必要ないけれども。
http://gnuwin32.sourceforge.net/packages/zlib.htm
binaryのzipをダウンロードしてbin\zlib1.dll を ruby\bin\zlib.dll としてコピー

おなじくreadlineも
http://gnuwin32.sourceforge.net/packages/readline.htm
binaryのzipをダウンロードしてbin\readline5.dll を ruby\bin\readline.dll としてコピー

github.com から IMAProwlをdownloadしてd:\IMAProwl とかに展開、config.yml を設定して実行。



WindowsでRubyスクリプトをバックグラウンド動作させるのは残念ながら方法を存じません。
なんかサービス化ツールがあったかもしれない。
OS Xは基本的にUNIXだからもっと簡単なのかなぁ。

Edit: 0.6からgem不要になったので削除

IMAProwl 0.4

安定して動いてるのでリリース
  • base64, quoted-printable な本文もデコードしてnotifyするようにした
  • notification に添付する本文の長さを、設定項目"BodyLength"で設定できるようにした (default: 100, MAX: 1000)
  • IMAPでのヘッダ取得方法を変更
  • IMAP/SSLのcertificate check をしないように変更
  • そのた雑多な変更
  • Ruby 1.9.0 (Debian sid), Ruby 1.9.1(mswin32)で動作確認.

OS Xで動作確認したいけど、OS Xは環境がないなぁ。
後日Windowsでの導入手順でも書いてみます。

Edit: update to 0.4.1
Edit: まちがえてコミットしちゃいけないもんをコミットしてしまったのでリポジトリ作りなおしました。0.5になっとります

Sunday, August 23, 2009

IMAProwl 0.3

というわけで IMAProwl 0.3はRuby 1.9以上を動作対象とすることになりました。
これでサーバ側から不意に切断されても大丈夫になったかと思われます。

http://github.com/takuo/IMAProwl

ところで IMAProwl は IMAP IDLEコマンドで監視を実現していますが、公開サービス系のIMAPサーバはIDLEが使えないことが多いそうです。
たとえば iPhone の i.softbank.jp ではつかえません。

こういったサーバでこのスクリプトはつかえないので、もし必要なひとがいたら実装してみてください。
もともと GMail を push するのが目的ですし、自分は GMailおよびGAfYDでしかIMAPつかってないので・・・。


Tuesday, August 18, 2009

Strange behavior Ruby Net::IMAP

Net::IMAPの挙動が変なの。

GMailのimapアクセスにて。
$ irb1.8
irb(main):001:0> require 'net/imap'
=> true
irb(main):002:0> imap = Net::IMAP.new('imap.gmail.com', 993, true)
=> #<Net::IMAP:0xb7a5eb0c [略]
irb(main):003:0> imap.login('example@example.com', 'example')
=> #<struct Net::IMAP::TaggedResponse tag="RUBY0001", name="OK", [略]

[ここで ウェブインターフェースで「他のセッションをすべてログアウト」を実行する]

irb(main):004:0> imap.capability
ブロックののち segmentation fault.

同様に Ruby 1.9では
$ irb1.9
irb(main):001:0> require 'net/imap'
=> true
irb(main):002:0> imap = Net::IMAP.new('imap.gmail.com', 993, true)
=> #<Net::IMAP:0x9387314 [略]
irb(main):003:0> imap.login('example@example.com', 'example')
=> #<struct Net::IMAP::TaggedResponse tag="RUBY0001", name="OK", [略]

[ここで ウェブインターフェースで「他のセッションをすべてログアウト」を実行する]

irb(main):004:0> imap.capability
EOFError: end of file reached
from /usr/lib/ruby/1.9.0/net/imap.rb:1016:in `get_tagged_response'
from /usr/lib/ruby/1.9.0/net/imap.rb:1073:in `block in send_command'
from /usr/lib/ruby/1.9.0/monitor.rb:190:in `mon_synchronize'
from /usr/lib/ruby/1.9.0/net/imap.rb:1058:in `send_command'
from /usr/lib/ruby/1.9.0/net/imap.rb:316:in `block in capability'
from /usr/lib/ruby/1.9.0/monitor.rb:190:in `mon_synchronize'
from /usr/lib/ruby/1.9.0/net/imap.rb:315:in `capability'
from (irb):4
from /usr/bin/irb1.9:12:in `<main>'
irb(main):005:0> imap.disconnected?
=> false

ということでRuby 1.8ではサーバから一方的に切断されても、それを検出することができません。
1.9 でも #disconnected? は false がかえってしまう。
ここで #disconnect すると Errno::ENOTCONN: Transport endpoint is not connected

うーん。
どうしたものか。Socketのほうかなぁ。
まぁIDLEの実装も1.9.2からぽいのでそっちのほうも試してみなくては。

Sunday, August 16, 2009

ProwlでなんでもPush Notification



つうことで。
Prowlって何でもpush notificationできて便利なんですよーっていう記事です。

ここのところRubyつかってnotificationしてましたが、今回はWindowsのPowerShellを使ってみます。

というのも TVRock っていう録画マネージャアプリケーションがWindowsで、こいつの録画開始と終了をpushしてみたかったというだけなんですが。

そこで、Windowsで最も楽にscriptingできるのはなんだっていったらWSHかPowerShellなわけで。
まぁここは.NETのクラスライブラリがつかえるPowerShellにしてみましょう、と。

書いたコード
$state = $args[0]
$title = $args[1]

$url = "https://prowl.weks.net/publicapi/add"
$apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

$data = New-Object System.Collections.Specialized.NameValueCollection
$data.add("apikey", $apikey)
$data.add("application", "TVRock")
$data.add("event", $state)
$data.add("description", $title)

$wc = New-Object System.Net.WebClient
$res = $wc.UploadValues($url, $data)
$wc.Dispose()
無駄に変数使ってるけどこれだけ。
WebClient は勝手にUTF-8にしてくれるので何もしなくていいんですなぁ。

TVRockの設定


もうひとつ重要なのが、PowerShell で not-signed なスクリプトを実行できるようにしておかなくてはならない。
PS> Set-ExecutionPolicy RemoteSigned
x64環境の場合はTVRockが32bitなので32bitのpowershell.exeで実行しておくこと。
詳細はget-help about_signingで。

こんな感じで、録画待機に入るとPush。さらに終了時にPush。
特定のアプリケーションやサービスに限定されずに Push Notification を利用できるのはいいですな。

Saturday, August 15, 2009

Twitter Notification with Prowl

勢いあまってTwitterのiPhone Push Notificationを作ったので公開。
Rubyです。

http://github.com/takuo/TwiProwl/

TwitterのMentionsとDirect Messagesを監視してProwlにnotificationします。
特に目立った機能はないです。
一応複数のTwitterアカウントに対応。

Thursday, August 13, 2009

IMAProwlを更新

IMAProwl更新。
http://github.com/takuo/IMAProwl

一応RFC的にはIDLEしてから30分間は何もせず待ってていいことになってるのだけど、すべてのサーバが準拠しているとは限らないので一応サーバごとに任意の間隔で再IDLEするように変更。
 -
Application: IMAPServer
User: gonbe
Pass: himitsu
Host: imap.example.com
Interval: 10

config.ymlにこんな感じでIntervalを定義する。分単位で0にすると再IDLEチェックしない。デフォルトで20分。
GMailのサーバは定期的にEXISTSを送ってきてそのたびにUNSEENチェックと再IDLEが入るので特に何もしなくていいのです。(0にしといていい)
NOOP じゃないのはIDLE中は Tagged command を発行できない(DONEしか発行できない)ため。

あと、なんかのタイミングでスレッドがデッドロックして死ぬのを確認しているけど再現性がわからないのでとりあえず放置
#!/bin/sh

while true; do
./imaprowl.rb
sleep 3
done
こんなんしとけばとりあえずいいかと。

http://github.com/takuo/IMAProwl

余談ではあるけど、近頃セムパイが監訳なさったgit本が発売されたので宣伝。

安達太良山登山


福島県は安達太良山へ登山に行ってきました。
どうも安達太良は初心者向けっぽく。途中までゴンドラで登れたり、距離もそれほど長くない感じでした。

今回は例によってCW-Xスタビライクスモデルを着用。これも15000円くらいだったかな。まぁスノボするにも使えそうなので奮発。

やはりサポートウェアがあるとなしじゃぁ雲泥の差ですなぁ。
若干靴があってなかったかも知れないけど特に問題はなく。

結局登りはゴンドラを活用し、下りは徒歩で。
久々の登山だったのでこんなもんですか。
安達太良 at EveryTrail

Map created by EveryTrail: GPS Community

見下ろし

山頂

Wednesday, August 12, 2009

IMAProwl - ProwlでIMAPの新着をiPhoneへpush notificationする


GPushがあまりにも不甲斐なかったので、自作したわけです。

ええと、IMAPやGMailの着信通知をiPhoneにPushしたい。
そんな要望にこたえるのがGPushというアプリであった。

しかし、GPushはGMailのアカウント情報をGPushのサーバに知らせなくてはいけない(らしい)。
そんなことは絶対したくない。パスワードを見知らぬ外部サイトに登録するなんてとんでもない。
しかもなにやら、サーバ側のトラブルでGPushはいま公開停止になっているとか。

そこで、代替手段を考えていたところ、ProwlというのがあってこれはGrowlというOS X用の通知アプリケーションと連携してiPhoneへPushできるんだそうだ。
なかなかすばらしい。Windows版もあるみたい。
ProwlアプリはAppStoreで購入できる。

そして、いろいろ調べているとこの Prowl、厳密にはGrowl専用というわけではなくてAPIが公開されており、各種言語用のAPIライブラリもあった。
こりゃー自作するしかないでしょう。

つうわけで、1時間ほどでできたのが IMAProwl
Rubyです。

準備
  • Prowlにアカウント作ってください
  • AppStoreからProwlを買ってください

チェックアウトと、ruby/prowlのインストール
git clone git://github.com/takuo/IMAProwl.git
gem install prowl

config.ymlを編集する。
複数のアカウントを登録できます。
Prowl:
APIKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Accounts:
-
Application: GMail
User: example@gmai.com
Pass: secret
Host: imap.gmail.com
Debug: true
-
Application: Example
User: gonbe
Pass: himitsu
Host: imap.example.com
MailBox: news
Debug: true

Prowl::APIKey にはProwlアカウントで発行したAPI keyを。
あとはimaprowl.rbを実行するだけ。

注意
  • SSL専用です。PORTが993でない場合は Port: を定義。
  • UNSEENをチェックするフォルダが INBOXでない場合は MailBox: を定義
  • notificationキャッシュはオンメモリなので再起動するとすべてのUNSEENメッセージをnotificationしちゃいます。
  • まだ気に入らない部分がいくつかあり、完成ではないです。

Sunday, August 9, 2009

湘南海岸へサイクリング

昨日は自転車で湘南海岸のほうへいってきますた。

この日のためにCW-Xバイクパンツを購入してたわけだが、これがとてもよかった。
これがなかったらたぶん80kmももなたかったと思われる。
オススメ。

で、今回の装備。

iPhoneをナビとGPSロガー代わりに使用。バッテリは持つはずもないので単三のエボルタとエネループを2本ずつ用意。
しかし、これだけじゃぎりぎりだった。というか走るペースがあまり速くないので、もうちょっと余裕をもって準備すればよかったと後悔。
実際帰りの途中でバッテリが切れそうになり、アルカリのエボルタを装着したのだけど、
このアクセサリは充電に対応してません
的なことを言われて補充できなかった。
結局残り5%で帰宅できたけど、iPod切ったり、3G切ったりわりと必死だった。

バッテリケースは手ごろのがなかったのでPSPのポーチをカラビナで無理やりつけた。
ついでに耳のお供に伊集院の深夜の馬鹿力をフルサイズで数日分。

行きルート。
たまプラ-湘南 行きルート at EveryTrail

Map created by EveryTrail: GPS Trail Maps
246の途中の登坂で死にそうになった。
467の中盤はなんかサイクリング向きだったなぁ。ずっと平坦で。



海岸では水に入りたかったのだけど、近くにシャワーの存在を確認できなかったので昼寝して終了。

人少なかったし晴れてたしわりといい感じで。

帰りルート。かなり必死で。
たまプラ-湘南 帰りルート at EveryTrail

Map created by EveryTrail: Share GPS Tracks
これはルート選択を誤ったといわざるを得ない。
危うく横浜新道の料金所直前までいってしまったし、保土ヶ谷バイパスは乗れないし。
そんなわけで還りはえらい時間かかってしまった。

総計80.2km
まぁ、MTBは疲れるのでやはりロードバイク欲スィ。という結論。

Friday, August 7, 2009

WinterBoardでiPhoneのテーマを変更してみる

jailbreakしたしせっかくなのでテーマをかえてみましょう、と。
まぁテーマなんてのは、完全に自己満足の世界だし、誰かに見せるもんでもないんだけど。

というわけで現状こんな感じのホームスクリーンになっとります。

Cydiaでも配布されているillumineテーマをいれてアイコンを若干追加したり変更。

iTickerというRSSティッカーを入れたものの、なんとなく気に入らなかったので全部書き直したのを適用。
JavaScriptでスクロールします。


しかし短時間にelementを移動させるスクリプトはどうやらCPUを使うらしく取り扱い注意。
横スクロールはずっと食い続けるので、縦スクロールにして一時停止するタイミングを設けて対処。


さて、Lock Screenのほうは必死に情報表示してます。

予定がいっぱいあるけどしょぼかるをインポートしてるだけ

Gruppled LockInfo Themeをベースに、時計は秒を表示して土日の表示は色つきに、カレンダーは祝日対応に、Twitterは完全に自分で実装。

ただ、LockInfoのバグなのか仕様なのかわからないけどSMSのTEXT表示ができずにいる。

(本来差出人の下に内容が表示される)
どうせsms.dbをsqliteで参照してるだけだろうと思って調べてみたのだが案の定、SMSPluginで
select address,text,date,group_id,unread_count from message...

などというSQLを発行している。
しかし、sms.dbのmessageテーブル中のtextカラムは常にempty stringのようで、実際のtextは別のテーブルに格納されていた。
言語環境で違うのかOSのバージョンで違うのかわからないけど、面倒なのでひとまずおいて置くことに。


ついでに。

iPodは Sleeve Music Themeというやつを。

というわけで、tickerがCPUを食らう以外はまぁいいかな。

入れたもの(基本的にCydiaから)
その他いじったもの http://github.com/takuo/iPhone.git/

Thursday, August 6, 2009

iPhone用にアクアパックを購入してみた

これからの季節、海だ山だとなにかとアウトドアな活動が多くなる(かもしれない)わけですがみなさんいかがお過ごしでしょうか。

アウトドアにもやはりiPhoneは欠かせないわけで、そうなると水に弱いiPhoneはなにかと不安であります。
というわけでですね、いろいろと調査した結果、PDAやカメラ、携帯などの防水で有名な AQUAPAC なるものがあることを知ったので、購入することにしました。
ていうか買いました。



jetdaisuke氏も納得[youtube link]の一品です。


ぴったしで、いい感じです。ちなみに AQUAPAC 344 というタイプ。
ちゃんとタッチスクリーンも反応します。

シリコンジャケットの類は脱がせたほうがいいかもしれない。

Wednesday, August 5, 2009

iPhoneと共にトレーニング走行

自転車用携帯電話ホルダーが届きましたん。
例のサンワサプライが販売しているアレです。


なんという中国産という具合に中国語の説明がメイン。
萬用型機/踏車専用車架(?)
日本語の説明書もついてたけど。


作りもおもちゃっぽくて少々不安だけど、ダートじゃなきゃ平気そうです。
あっしのアイホンヌはシリコンジャケットを着ているのでかなり固定力は高いはず。


いちおう、透明のゴムバンドがついてるので装着しておくと安心。


あと落下防止のストラップもついているのだけど、これは長すぎて逆にアレな気がします。
取り付けに一工夫いるかも。今回はストラップつけずに設置。

というわけでiPhoneでマップ見つつトレーニングしてきましたが、これがまた良好で。GPSの反応が。
自転車で走るのが一層楽しくなりましたわ。孤独は伊集院で回避。
※ 走行中画面みるのは危険なのでほどほどに。

走行結果。
トレーニング at EveryTrail

Map created by EveryTrail: Share and Plan your Trips

夜中の都筑中央公園は怖かったのでちょっと進入して戻った。
マップのおかげで迷わず走れたお。

Tuesday, August 4, 2009

iPhone用拡張バッテリ

というわけでございまして。

チャリで遠乗りするにあたり、iPhoneをナビおよびGPSロガーとして活用するにはバッテリーがもたないと聞いていましたので、
外部電源としてPanasonicのEVOLTA Pocket Powerなるものを購入しました。
単三型NiH充電電池をUSB出力するってーものです。

eneloopにも類似品があるんすが、ケーブルの取り回しととか筐体サイズの点からEVOLTAを選びました。
eneloopのほうはちょっとでかい上にケーブルを収納できないんですね。


eneloopいれても動作します。一応、Apple純正USBケーブルで確認。
※追記: BUFFALOの巻取ケーブルでも使えた


こんな感じにケーブルを収納できますが、充電用USBケーブルは非常に短いので注意。
カバー裏には携帯用(SBM/DoCoMo)のケーブル。


なかなかコンパクト。

ちなみに、au向けとdocomo/SBM向けの2種類あるんですが、付属の携帯ケーブルが違うようで、USB経由で充電するならどっちでもよさそう。

充電はUSBから行いますが、AC<->USB変換機をはさんで家庭用コンセントから充電もできます。


電源としての性能は後ほどのサイクリングで試したい。

Sunday, August 2, 2009

トレーニング走行

雨がやんでいたので、夜も遅いがトレーニングに。

トレーニング at EveryTrail

Map created by EveryTrail: Share and Plan your Trips

サイコン計測で36'47, 8.74kmなのでまぁ合ってるんかな。

しかし、やはり暗いと道がわからない。
あとGPSがちょっと狂った点があるなぁ。
なんでだろ。

というかこの辺坂が多すぎる。
平均時速15kmもあれば 2時間くらいでみなとみらい付近までいけそう。

トレッキングシューズとザックを購入

近々登山する予定なので靴とザックを購入。
あんまし余裕もないし、いける回数も多くないので適当に選んだ。




別にNORTH FACEが好きというわけではないが靴もザックもNORTHEFACEモノに。
というかほかにいいのなかったんだよなぁ。
ちゃんとしたアウトドアショップ行けばよかったんだろうけど。

ええと HOT SHOT というザックと Vindicator MID GTX という靴ですね。
靴はわりとよさそうな気がしますが。ザックはまぁデイパックか。

つうかまたカード作らされてしまった。
まあ3万の買い物して10%引きになるとか言われたら作るよなぁ。
年会費無料だし。

Saturday, August 1, 2009

EveryTrailを試してみた

ビンディングやサイコンのチェックを兼ね、久々に自転車で走行するあたりにあたり、せっかくなので
iPhoneアプリ(AppStore $0.00)のEveryTrail試してみた。

要するにGPS Logger.
無料でこんだけできれば十分かなぁ。

テスト走行 at EveryTrail

Map created by EveryTrail: GPS Community

こういうアプリにもbackgrounderは有効活用できる。
すばらしい。

あとはiPhoneの自転車用マウンタを用意できれば最高である。
いくつかあるみたいだけど、サンワサプライのを注文してみた。

Rotation Inhibitorを試す

iPhoneは本体を横向きにするとブラウザなどが回転して横長画面になるのはご存知かと思う。
これは、一見便利かのようにも思えるがまったくもってうざい。
寝ながらブラウザを使うと本体を横にしなくてはならんですが、そのとき画面が回転して横になっちまうみたいな。

というわけでこれを抑制するRotation Inhibitorというものを試す。
試すっていうか入れて設定で回転を無効にするだけなんで。
とにかく抑制できたのでよしとする。

めでたし。めでたし。