Thursday, December 10, 2009

Clock widget with Japanese holiday for SmartScreen


Objective-CというかiPhoneプログラム開発の勉強がてらに作りました。
高専の課題レベルのプロダクトですが。

祝日になるとスクリーンショットのように表示されます。
それ以外はClock Widgetと同じです。
祝日にならないと何が違うのかまったくわかりません。

自前のcydia repositoryにて配布しています。
http://ideb.northeye.org/
をCydiaのSourceマネージャで追加してください。

ソースコードは整理したらgithubで公開します。ライセンスはたぶんBSDかLGPLです。
今後は有料のウィジェットを駆逐できるようなモノを作っていきたい所存。

Tuesday, December 1, 2009

Twitter for Gruppled Lockinfo


Gruppled LockinfoつかっててTwitterを表示したい人へ。

ところで、Blogのコメントで質問をされても返事をするかわかりません。
仕事の依頼は御遠慮ください。
ちなにみわたくしは最早GruppledもLockInfoも使ってませんし、LockInfoは購入もしてないので今後の改修もとくにしません。



さて。

てっとり早く導入する方法。
Cydiaからlockinfoとclockhideとgitをインスコロール。
git はdeveloper modeじゃないと表示されない(たぶん)。(sudo apt-get install git でもオケ)
terminalあるいはsshでログインして次のコマンドを実行。
$ mkdir src
$ cd src
$ git clone git://github.com/takuo/iPhone.git
$ cd /Library/Themes/
$ sudo ln -s ~/src/iPhone/WinterBoard/GruppledLockInfo.theme .

git cloneでいらんもんまで取得されてますが気にしないか、消すかする。
WinterBoardのテーマセレクタで有効にする。

設定(抜粋)
GruppledLockInfo.theme/Bundles/com.ashman.LockInfo/config.js
 var sections = [
"Clock",
"Weather",
"Mail",
"Calls",
// "Voicemail",
"SMS",
// "Twitter",
"Calendar",
];

"// Twitter", のコメントをはずす (// を消す)

var twitter_username = "";
var twitter_password = "";

アカウント情報を入れる
その他適当に。

たぶんこんだけで表示されます。


今使ってるテーマにインテグレートしたい人はそれなりに知識ありそうなので勝手にやってください。
js/init.js の case "Twitter": あたりをごっそりコピる。
js/twitter.js をコピー、lockinfo.html でロードなりしてやればいいかと。
あーあと、strings/ja.jsだけでしか定義してない変数呼んでるので注意。

js/twitter.jsの著作権は放棄しませんが、改変再配布などは御自由にどうぞ。

ついでにお天気の都市名を日本語にしたい方は strings/ja.js の
var string_city_names = { "yokohama":"横浜" };

となってるとこで連想配列を定義すればいいです。
var string_city_names = { "yokohama":"横浜", "tokyo":"東京" };

みたいな。これは js/weather.js にも手を入れて実装しております。

なにか情報が足りないようでしたらTwitterなどで聞いてみてください。

Saturday, November 28, 2009

MTBをメンテナンスした

すっかり乗らなくなったMTBですが、暇だったので一応洗車してメンテナンスしておこう、と。

といってもたいしたことはやってなくて、前輪後輪を外してバイクウォッシュで丸洗い。
パーツクリーナーで細部のオイルを洗浄。
ブラシはFinishLineのものを用意しました。

まっくろだったカセットスプロケットがピカピカに。

ビフォアの写真がないのだけど、ほんと真っ黒状態でした。

チェーンはチェーンクリーナーキットを使ってがりがり洗浄。

グリスを注油してディレーラの調整とブレーキの調整。

最後はドライオイルで締め。

気がついたらクイックリリースのナットキャップが紛失していた。うーん。


つかったアイテム。

Wednesday, November 25, 2009

かまくらサイクリング

ようやく eneloop mobile booster KBC-L2ASが届きました。
というわけで、こいつの性能確認を兼ねて、先週末は鎌倉方面へサイクリングへ。
デジイチE-620も携行です。軽くはないのでけっこう負担になりました。

由比ヶ浜まで at EveryTrail

Map created by EveryTrail: Geotagging Community

存亡がかかってるらしい。


秋も終盤ですがサーファーがいっぱいおりました。


このへんはロード乗りも結構おおいですね。集団ともすれ違いました。

鎌倉から帰路 at EveryTrail

Map created by EveryTrail: Geotagging Community

鶴岡八幡宮はカオスだったのでスルー。
円覚寺で紅葉を撮影したり。


というわけで、往復80kmくらいでした。

後で会社の方から聞いたのですが、鎌倉方面へは境川サイクリングロードを使うといいよ、ということと、鎌倉からもうちょっといくと「ゆうき食堂」という自転車乗りには有名な食堂があるのでいってみて、ということでした。
あと飯田牧場もいい、と。
なるほど、境川サイクリングロードは盲点だったわ。というかグーグルさん自転車モードをたのみますよ。

そうそう、L2ASは大変良好で、帰宅した時点でiPhoneのバッテリ残量が80%でしたから、たいしたものです。
1日ならこれ一個で十分持ちそうですね。

Wednesday, November 18, 2009

AKG K450 Review

AKGのヘッドホンK450を買いました。

今まで使っていたのがaudio-technicaの安物ATH-SJ5で、その前がAKGのK414Pです。
どちらもケーブルの断線による故障で廃棄してます。

ATH-SJ5は、それはそれは貧相な音質で評価するまでもない機種でした。
それにくらべてK414Pは恐るべきコストパフォーマンスを持った、かなり良いものでした。
が、側圧が強すぎて耳がいたいです。それに、見た目がチープです。
まぁそれを差し引いても評価できる音が鳴ってくれてよかったんですが、残念ながら猫にケーブルを噛み切られてしまったのでした。

そして、今回買ったのが K414Pの後継機種でもあるK450なわけです。

装着感はK414Pと違ってソフトで大変良好です。見た目も概ね改善されております。
しかしながら、プラスチック部分の造りのチープさは否めません。
それが価格帯の問題なのかMADE IN CHINAのせいなのかはわかりません。



さて音質のほうですが、低音域の主張が半端ないです。
それと、ソフトめのイヤーパッドと密閉型の特徴もあいまって、若干籠った感じがします。
が、音の解像度はとても高いので、わりと自然に鳴ってるように感じます。
まれに音がヘッドホンの外から聴こえてくるような錯覚にさえ陥いります。
籠った感じもエージングを熟せば、より自然な音になってきます。
まぁ低音域が強調されすぎな感はあるので、プレイヤーのイコライザで高音域を強めにしてあげると、慣れた音で聴けるかもしれません。

最初は籠りすぎって感じたのでiPodのイコライザを「Treble Booster」にしていたのですが、今では「Rock」でも不快感なく聴けてます。
まぁとにかく低音が強調されるヘッドホンなので、そういう音が好きな人にはとてもいいものかと思います。



音漏れのほうはほとんど気にならないレベルかと思います。ていうか聴こえません。
それと、ケーブルが方出しなのと着脱式なのも評価できますが、ヘッドホン側のプラグは独自形式なので注意です。スペアパーツを購入できるかは知りません。
あとプラグは長いので長い襟だとあたるとかそのへんは好みがわかれるかもしれません。

キャリングケースも付属していますが、ケースがぶ厚くてかさばるので携行には厳しいかと思います。

ヘッドホン自体はポータブル志向なのでコンパクトに収まってよいのですが。

そんなわけで、大変満足のいく製品でした。
自分は外観も含めてK450にしましたが、コストパフォーマンスはK414Pのほうが高いかと思います。1万円以下でしたら間違いなくK414P(まだ買える)あるいはK420。それより少し上を求めるならK430かK450になるんではないかと。

Sunday, November 15, 2009

カメラ買いました

カメラ買いました。
今流行りのデジタル一眼レフ。

ずぶの素人の僕なんかがデジイチについてウンチク書けるわけもないわけでして。
ともかく、オリンパスのE-620ってやつを買いました。
もうひつ、パナソニックのLUMIX GF1というやつを悩んでいたんですが、身近にユーザーもいないし、逆にユーザーの多いオリンパスにしましたと。でもPENは高いから却下で。
サイズ的には自転車で携行しても苦にならないGF1がよかったんですが。
自転車で携行するにはE-620は少々でか重いですが、元々レース志向じゃないし気合で。

さて、どうやらデジイチ界隈ではメモリカードの速度が重要らしく。
600倍速というどえらいカードがなんかがえらい値段でありましたが、200倍速の4GBで落ち着かせました。
まぁ、とりあえずはこんなもんで。そんなに違うもんですかね。連写するには重要なのかな。

それと、MCフィルターを買っとけと言われていたんで、と言われてもいざ売り場にいくといろいろあるわけで。
ひとまずUVカットフィルターを買っときました。いろいろ学んで不満がでてきたら買い足せばいいかなと。
あぁ、雪山いったときには何か必要になりそうですなぁ。

さて、身近にある雑多な物と猫どもを撮ってみました。




やはりコンデジとは画質というか表現力が違いますなぁ。
黒猫とか撮りにくくてしかたなかったんですが、わりと楽に撮れます。

というわけでございまして。カションカションシャッター切るのがとても楽しいです。
これからはヘタレ写真を道具のせいにできなくなったので精進していきたい次第であります。

Saturday, November 7, 2009

観音崎ヘサイクリング

今日は若干曇ってるかなーと思えたのですが、わりと晴れたので観音崎 (三浦半島北側の端)までサイクリングしてきました。

途中何度かトンネルを通るのですが、そのたびにiPhoneのGPS座標がぶっとんでログの修正に難儀しましたと。
あとRunKeeperは100kmを越えたあたりからよく落ちるようになってしまいまして。まぁResumeがきいていたので問題はなかったのですが。
行きと帰りはやはり分けてロギングしたほうがよさそうです。

うみかぜの路はいい感じに整備されてて最高でしたぞ。

本来自転車乗り入れはNGなんですが、誰もおらんかったので乗ってきました。

観音崎公園は自転車乗り入れ禁止かつ路面は石畳でやっかいなので奥にはいかず手前でぼーっとして帰ってきました。

目を怪我した猫がおりましたとさ。


観音崎までサイクリング at EveryTrail

Map created by EveryTrail: Geotagging Community

全長 113.51km

Thursday, November 5, 2009

奥多摩サイクリング

先週の土曜に奥多摩(奥多摩駅)までサイクリングしてきました。
往復で約135kmとそこそこの距離でしたが、なんとか完走できました。

奥多摩の勾配よりも、帰りの疲れた体での近所の勾配のほうがよっぽど苦しかったです。
というか奥多摩駅くらいまでなら私のような素人でも余裕な感じでした。

次回は奥多摩湖を一周してくるとかそのくらいのことをやってきたいと思います。
あるいは南のほう、三浦半島を一周してくるとか。だいたい160km前後を目安に走破したいと。
奥多摩 往路 at EveryTrail

Map created by EveryTrail: Geotagging Community

奥多摩 復路 at EveryTrail

Map created by EveryTrail: Geotagging Community

ところで、今回つかったカメラがSONYのDSC-P8とかなり古く、iPhoneの内蔵カメラとどっちがいいかというレベルなので、そろそろデジイチを購入したい今日この頃です。

Runkeeperの記録こちら。
往路, 復路
休憩中も記録しっぱなしなので平均は遅いです。

Wednesday, October 7, 2009

IMAProwl 1.2.1

http://github.com/takuo/IMAProwl/downloads

  • String#%にHashを渡せないRuby1.9.0でもたぶん動くようにした (Formatは使えません)
  • MailBoxはUTF-7でSELECTするようにした (ASCII以外のメールボックス(ラベル)を通知対象にできる)
  • Content-TypeヘッダのないISO-2022-JPメールを受信するととんでもないことになる問題を修正
  • その他雑多な修正/変更

ふと気がついたけど、"[Gmail]/All messages"を監視対象にすると、フィルタで受信トレイをスキップしてても通知できる。まぁ当たり前だが。
今回、UTF-7対応したので日本語のラベルも監視可能になった。"[Gmail]/すべてのメール"とか。

Tuesday, September 29, 2009

IMAProwl 1.2.0

http://github.com/takuo/IMAProwl/downloads

主な変更点
  • 設定項目名 "Interval" を "Timeout" に変更した (Intervalのままでも一応動く)
  • 件名と差出人のフォーマットを定義できるようにした
    • Format: "%{subject} (%{from})" => "件名 (名前)"
    • Format: "%{subject} (%{name} <%{addr}>)" => "件名 (名前 <address@example.com>)"
    • "%{from}" は、名前を優先して、無い場合はアドレスを使用する
  • SubjectLengthのデフォルト値変更 (30から20へ)

Edit: Debian lennyのruby1.9など、若干古いRuby1.9.0では動作しないようです。sid の ruby1.9 1.9.0 (2008-10-04 revision 19669)なら動きます。

Monday, September 28, 2009

TwiProwl 0.4

Edit: 0.4.3 fix issue related with debug print
Edit: 0.4.2 fix issue "thread won't be recovered from HTTP/Error."
Edit: 0.4.1 fix issue "calling undefined method while prowling."

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

IMAProwlに習ってだいぶ変えました。
※ 長時間運用してるとチェックスレッドが停止してしまうバグがあるのですが、原因がわからないのでとりあえず手をつけてません。このリリースで原因がつきとめられることを祈りつつ。

  • チェック間隔の単位を分から秒へ変更した(設定ファイルを調整してください)
  • 設定ファイルを探す順序を変更した(後述)
  • コマンドラインオプションを追加した(--helpで参照)
  • API Rate Limitを考慮するようにした。RateLimitThresholdを設定することで、この値を下回るとチェックをやめます。
  • 機能の有効/無効をIntervalの値で判断するようにした
  • threadの生死を一分おきにチェックするようにした
  • デーモンモード追加 (Ruby 1.9以上の場合かつWindows以外)

スレッドチェックいれたけど、ブロッキングで死んでる場合はどうにもならんですね。

設定ファイルは次の順で探します。
  1. -c オプション
  2. ~/.twiprowl.conf
  3. `pwd`/twiprowl.conf
  4. `pwd`/config.yml


設定ファイルで変更になったもの
Daemon: デーモンモード (true|false)

Mentions: 削除 (機能を無効にする場合はIntervalを0にするべし)
Direct: 同上
MentionsInterval: 単位を分から秒に
DirectInterval: 同上
RateLimitThreshold: Rate Limitの閾値、この値を下回るとチェックをやめます。(RateLimitについてはTwitterのドキュメントでも見て)

RateLimitThresholdは150以上にすると、TwitterのRateLimitのMAXが150なので、いつまでたってもチェックしなくなります。

なにか問題がおきた場合はDebug: trueで様子みてくだちい。

Sunday, September 27, 2009

ビアンキがキタ!

無事納車されましたん。
2009 Bianchi VIA Nirone 7 ALU Ultegra/105 Compact

はあはあ。
iPhoneスタンドがきつくて着かないがまぁいいか。

サイコン用の結束バンドが間に合わせのものしかなかったのでそのうち付け替えよう。色的に。

Don't buy Microsoft Wireless Laser Mouse 7000

1年前くらいに買って、当時から様子がおかしかったので使ってなかったのだが、マウスがたりなくなったので再び使い始めてわかった。

これは糞だ。

当時様子がおかしかったというのは、充電ができない、すぐ電池が切れるという電源系統のトラブルだったのだが、不良品でもつかまされたか、と気楽に考えていた。
まぁeneloopにすれば使えないこともないし、いいか、と。

が、先日同型をもっている知人に同じ症状が発生していて、ネットでも同じような報告が多数ある、と。

アマゾンレビュー, 価格コムクチコミ

なるほど、これはひどい。
交換を6度もしている人もいる。
なんという地雷製品。Microsoftの品質管理はどうなっているのか。
どんなに安くてもこれは買ってはいかん。

ということで、懲りずにMSのブルートラックテクノロジ Microsoft Explorer Mouseを購入したのだが、これはすこぶる良好で。充電クレードルも小さくて邪魔にならないし。
いままで使ったマウスで最高かもしれない。(あくまで主観)

Saturday, September 26, 2009

IMAProwl 1.1.2

http://github.com/takuo/IMAProwl/downloads

メールの本文について、元のエンコーディングがわからなくてもとにかくUTF-8に変換するようにしました。
String#encode バンザイ。

mutexのdouble lockが発生するとの報告がありますが、再現しないのでいまのところわかりません。

Debian sidには明日のミラーで降りてくることでしょう。

Wednesday, September 23, 2009

GMail supports Push Mail for iPhone

http://googlemobile.blogspot.com/2009/09/google-sync-now-with-push-gmail-support.html によると、GMailがPush Mailをサポート開始したとのこと。

今までサポートしていたExchangeのActiveSync(カレンダー、連絡先の同期)にてメールの同期もできるようになった、ということのようで。
要するに、iPhoneのIMAP経由でGMailを使っていたのを、Exchange経由で使えばPush同期できますよ、ということになる。


Exchangeアカウントを追加する。


メールをオンにする。

iPhone上から https://m.google.com/sync?hl=en でデバイスの設定をしないと同期されない。

で、結局どうなのかというと、メールアプリのバッジがリアルタイムに更新される程度のPushで、いわゆるPush Notificationウィンドウは表示されない。
それと、ActiveSyncは電池食うらしいので注意が必要。

これだとまだIMAProwlは手放せないなぁ、というかExchangeアカウントは一つしか設定できないので、Google Apps for your Domainを併用していたりすると結局既存の通知アプリ等に頼らざるを得ない。
まぁProwlは汎用性が高いのでGMailが完璧なPushをサポートしたとしてもまだまだ使い道はある。

というか我々は重大な勘違いをしていたといえる。
Push MailとPush Notificationは違う。
あくまで「Push Mail = メールのプッシュ同期」であって、「Notification(通知)」は役割の範囲外なのでは、と。
要するにMail.appで派手な新着Notificationを実装されない限りはこれ以上よくならん。
(あるいは別のMail連携アプリで。)

Tuesday, September 22, 2009

久々のサイクリング

昨日は自宅から相模大野までひさびさにライド。
なんというかなんの面白みもない軽めのサイクリングという感じで。
つうか246とかぜんぜんよくないな。まったく。

あとそろそろ寒い。汗の放置は危険な季節であります。

Thursday, September 17, 2009

IMAProwl 1.1.0

http://github.com/takuo/IMAProwl/downloads

まだ master にマージしてないのだけど。
いろいろテスト的な実装をして安定していたのでタグ打ち。
  • Iconvを使うのやめて、String#encodeで文字コード変換するようにした。Iconvはクセがありすぎる。
  • マルチパートメールの場合、頑張ってtextパートを探して本文の通知に使うようにした。
大きなところはこんな感じで。もうだいぶ安定して動いてるようだ。

Wednesday, September 16, 2009

IMAProwl 1.0.0

http://github.com/takuo/IMAProwl/downloads
ようやく1.0.0ということに

  • NKF使うのやめてIconvを使うようにした
  • 日本語以外のメールも正しく通知できるようになった
  • テキスト処理中での例外処理対応を増やして、エラーになってもがんばって通知だけはするようにした
  • 本文がテキストじゃない場合は本文を通知に含めないかわりに、メディアタイプだけ通知するようにした
  • ほんとはテキストのパートを探してテキストを通知したいのだけど、面倒
  • 通知する件名の文字数を指定できるようにした
WindowsではIconvが標準じゃないので、ロードに失敗したらNKF使うようになってます。(たぶん)
iconv.dllを適切な場所に置いとけば問題ないかと。(たぶん)

Debianパッケージとして正式にuploadしてあるので、Debian sidの環境では
apt-get update && apt-get install imaprowl
cp /usr/share/doc/imaprowl/examples/config.yml ~/.imaprowl.conf
などとして、~/.imaprowl.confを修正してお使いください。
(9月17日以降)


既知のバグ
・prowl serverが死んでるときにsendした通知がリトライされない。(fixed in 1.0.1)

Tuesday, September 15, 2009

iconv_mime_decode on Ruby

PHPには iconv_mime_decode()という便利な関数がある。
さすがはPHP.

というわけで、Rubyでも同じような関数がほしかったのでテキトーに実装してみる。
PHPの中は見てないのでどうなってるのか知らない。
def iconv_mime_decode( input, out_charset = 'utf-8' )
while input.sub!(/(=\?[A-Za-z0-9-]+\?[BQbq]\?[^\?]+\?=)(?:(?:\r\n)?[\s\t])+(=\?[A-Za-z0-9-]+\?[BQbq]\?[^\?]+\?=)/, '\1\2')
end
begin
ret = input.sub!( /=\?([A-Za-z0-9-]+)\?([BQbq])\?([^\?]+)\?=/ ) {
charset = $1
enc = $2.upcase
word = $3
word = word.unpack({ "B"=>"m*", "Q"=>"M*" }[enc]).first
Iconv.conv( out_charset, charset, word )
}
return ret ? iconv_mime_decode( input, out_charset ) : input
rescue
# "Error while converting MIME string."
return input
end
end
こんなんでいいかなぁ。

Tuesday, September 8, 2009

IMAProwl 0.9

http://github.com/takuo/IMAProwl/downloads

daemon modeの実装と設定ファイルの位置を変更しました。

設定ファイルは
  1. -c オプションで指定
  2. ~/.imaprowl.conf
  3. `pwd`/imaprowl.conf
  4. `pwd`/config.yml (deprecated)
  5. basename(imaprowl.rb)/imaprowl.conf
の順番で探して読み込みます。

daemon modeはWindowsでは機能しません。

コマンドラインオプション
$ ./imaprowl.rb --help
Usage: imaprowl [options]
-c, --config FILENAME Specify the config file.
-q, --daemon Enable daemon mode.
-d, --debug Enable debug output.

これでdebつくればDebianにuploadできるかもしれない。な。

Saturday, September 5, 2009

IMAProwl 0.8

http://github.com/takuo/IMAProwl/downloads

やっと安定した感があります。
それと、IDLEが使えないIMAPサーバでも動作するようになりました。
たぶん、imap.softbank.jp でも使えます。

0.8での変更点
IDLEが使えない場合、NOOPにより新着チェックするようにした。
NOOPInterval: 15 とか設定しておけば15秒置きにチェック。

0.7.1での変更点
GMail以外のサーバでチェック後に既読にしてしまう問題を修正。

0.7での変更点
不測のブロッキング問題に対処(たぶん直った)。

Tuesday, September 1, 2009

TwiProwl 0.3

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

いろいろと整理。
基本的にこれ以上はリファクタリングくらいしかしないつもり。


IMAProwlのほうは永久ブロッキングが発生することがあるのでそっちを調査中。
再現性はIMAP Server次第なのでなかなか不具合の原因が掴めず。
単純に切断されるだけなら問題なさげなのだが…。
なおったら更新予定。

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

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