blogに引っ越しました。0.0.3.9最近働きっぱなしで、会社にきのこが生えてしまったよ...もういやだ...。ユーティリティmikutterでプラグインを作ると、時間がかかる処理をしたくなることが稀によくあるので、そんな時に便利そうなmikutter内部で使えるクラスなどをまとめました。現在のRubyでは、複数のThreadによる並列処理をしても、単一のプロセッサで複数のThreadが時系列で切り替わるだけなので、本当の意味で並列処理されるわけではないし、処理が速くなるわけじゃあない。俺は頭が弱いので、並列処理なんてしたら基本的にぽぽぽぽーんしてしまう残念な頭をしているので、極力使わないようにしています。!!!触らぬ神に祟なし!!!ということですね。積極的に使う数少ない例外ケースは、ネットワーク通信。サーバの応答待ちの間、シングルスレッドなら他の処理をブロックしてしまうけれど、他のスレッドでネットワーク通信をすればブロックされることはないと。mikutter内ではメインスレッドでしかGtk関連の操作をしてはいけないことになっています。通信などという役割になっています。APIを叩くためのメソッドは、メインスレッドで呼ばれるとクラッシュするようになっています。Gtk関連の一部メソッドも、メインスレッド以外で呼び出すとクラッシュするようになっています。並列・遅延処理のためのメソッドいろいろそんなmikutterのための並列処理などのためのお役立ちメソッド|クラスたち。Delayerコンストラクタに渡したブロックをあとで実行する。あとでというのは、そのうちヒマな時にやるということで、そんなに即時性が重要じゃない処理に使う。something}ブロックは登録された順番に呼ばれる。メインスレッドで呼ばれる。SerialThreadThreadとほとんど同じだけど、別々のSerialThread同士は順番に実行され、同時に実行されることはない。Delayerだとメインスレッドをブロックしてしまい、UI操作に支障をきたす可能性がある処理につかう。一つのThreadを使いまわすので、Threadが増えない。something}lazyRubyでHaskellみたいな遅延評価をするためのもの。ブロックを渡して使う。戻り値は、ブロックの実行結果なんだけど、ちょっとブロックの実行するタイミングが違う。lazy遅延評価オブジェクトを返す。このオブジェクトにたいしてメソッドが呼ばれたときに、1度だけブロックを実行する。b上の例だと、39の階乗が出力されるけれど、実際に計算されるのは表示されるとき。156の階乗も一見計算しているようだけど(a)、使われていないので計算されない。everytimelazyと殆ど同じだけど、メソッドが呼ばれるたびに毎回ブロックを実行する。parallellazyは最初に必要になったときだけど、parallelはすぐに別のスレッドでブロックを1度だけ実行する。実際に値が必要になったときに、まだ実行が終わっていない場合は、ブロックの実行終了まで待つ。atomicグローバルなMonitorのインスタンスのロックを取得してからブロックを処理する。ひとつしかMutexがなければデッドロックなんてないんや原理主義者のために用意されている。something}イベントが処理されるスレッドmikutterのイベント(PluginやPluginTag)は、必ずメインスレッドから呼ばれます。時間のかかりそうな処理はしないほうがいいです。イベントフィルタは、Plugin.filteringを呼んだ時に直ちに実行されるので、どのスレッドから呼ばれるかは不定です。フィルタは特にマルチスレッド処理に注意!ということです。まとめmikutterで処理のタイミングをずらすためのユーティリティをまとめました。スレッドの扱い方の暗黙のルールを明文化しました。0.0.3.8今回からWeeklyリリース(snapshot)を、mikutterのサイトのDownloadからDevelopの項目に移しました。使う人が、文章を読まずに単純な数値比較でWeeklyリリース版をダウンロードしてしまう事故を避けるためです。その他のバージョンは、今までどおりDownloadからダウンロードできます。通知関連のイベントの追加。これによって、以下のプラグインが追加されました。一部APIのキャッシュ機能ショートカットキーの編集でクラッシュする不具合いやー、0.0.3.9が0.0.4にならないかなーとか思ってたがなかなかそうもいきませんねぇヾ(@⌒ー⌒@)ノ0.0.2のようにバグを潰す為に.12くらいまで行ってしまうのだろうか。このバージョン番号についても0.0.4以降ちょっと変わるんだけど通知プラグインを小分けにしたおかげで、特定のプラットフォームでは音とかが鳴らなくなったと思います。Growlで通知出すこれらのプラグインの要領で、手軽に通知やサウンド関連を拡張できるようになりました。ニッチな環境でmikutterを使っている人はチェックだ!折角高速化できたところなので、このタイミングでぜひとも安定させていきたいところですね!!!当分はバグをとり続けることになるかなー。APIで短縮URLの展開形が取得できた場合、それを利用する修正タイムライン上のリンク文字のリンクの位置のずれメモリリークをちょっとマシにしたTwitterが画像アップロードサービスを自分で始めちゃいましたね。entityにそれがくっついてくるとのことで、急遽エンティティを読むようにした。それから、どうもentityはOAuth通さないとくっついてこないようで、今のmikutterの実装だとUserStream、home_timeline、mentions経由で取ったものでないとentityがない、つまり公式画像サービスを使ってアップされた画像が展開できないと。ブラウザで開けるんだけどね。日曜日になったから上げてみたものの、メモリ削ってる途中なので、相当重くなってますね。