2009年5月アーカイブ
2009年5月31日
NSStreamの読み込みがコンテクストメニューの表示でふん詰まる件
生きてますよ。(挨拶)
NSInputStreamの取り扱いでずっと気になってたことがあって、ポップアップメニューを表示しているとIRCの接続が切れてしまう現象に遭遇してしまってこれをどう解決しようかちょっと悩んでいた。
まあ、端的に言えばIRCサーバから送られるPINGの受け取り—正確には、TCPレベルではPINGを含むデータストリームが届けられてはいるものの、このデータストリームを取り出して解釈し、PING応答の処理に回す処理が働かないのだな。
http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW12
Threading Programming Guide: Run Loop Management
直接の要因は、ポップアップメニュー表示中はRun LoopがNSEventTrackingRunLoopModeで回ってしまうこと。通常はNSInputStreamの読み込みはNSDefaultRunLoopModeでしか行われない(というかDefaultモードでの登録しかしない)ので、Run Loopのモードが切り替わってしまうと手も足も出ない。まあ、多くの場合はこれでも問題はないんだけど、IRCの場合はサーバからPINGが来たらなるはやでPONGを返さないとなので、そこでもしポップアップメニューをうっかり出しっぱなしにしてたりなんかすると、下手するとping timeoutで接続切られちゃうんだよな。
当面をしのげればいいやと-[NSInputStream scheduleInRunLoop:forMode:]をNSEventTrackingRunLoopModeで登録してみると、確かにポップアップメニュー表示中もPONGが行えて不都合無く疎通を続けることができる。けど、これじゃ何のためにEventTrackingモードで面倒見るイベントを搾ってるのか意味がなくなってきそう。なのであまり使いたくはない。とするとNSInputStreamの扱いを別スレッドに移してしまうしかないのか。うーん。それをやりたくなかったからNSStreams使ってたのになあ。めんどくさ...。
2009年5月20日
Intermezzo 0.10.5について
10.4(Tiger)対応について、色々と紆余曲折がありましたので。一度0.10.5はアップしたんですが、修正を加えてもう一度上げ直しました。
$ ls -l Intermezzo-0_10_5.dmg -rw-r--r-- 1 hironobu hironobu 802374 2009-05-20 13:22 Intermezzo-0_10_5.dmg
このタイムスタンプおよびファイルサイズのものが正規のものとなりますので、よろしくお願いします。
2009年5月10日
Intermezzo 0.10.0リリース&10.4(Tiger)対応について (追記あり)
ここのところずっとObjective-C 1.0化(何)に注力していましたIntermezzoですが、これを0.10.0としてリリースしました。このあと0.10系は何事も無ければ1.0になるでしょう。ほとんどRelease Candidateってやつですかね。
ただ重大な問題が一つ。うちに10.4環境が無い(爆)ので、動作検証ができません。^^;; 基本的に大丈夫なはずですけどねえ...。もし不具合不備やご指摘の件があればご連絡くださいませ。(_ _)
http://trac.foursics.jp/intermezzo/
Intermezzo trac
[追記] 2009/5/11 13:14
10.4上の動作で不具合が発見されましたので、0.10.1に上げました。よろしくお願いします(_ _)