Hatena::ブログ(Diary)

Windchase

2007.11.30

LimeChat for OSX 0.12 リリース

http://limechat.sourceforge.net/index_ja.html

Pastie への送信状況を表示するようにしました。

なお、例外が発生した場合、次回起動時にレポートを送信するためのダイアログが表示されますが、下のテキストエリアに、再現性があるかどうかと再現手順を書いてから送信していただけると助かります。何も書かずに送ってこられても、何が起こっているのかわかりません。

変更点

  • Pastie への送信状況をダイアログ上に表示するようにした。
  • Pastie への送信を失敗したときにエラーを表示するようにした。
  • Pastie にニックネームを送信するようにした。
  • Tiger 上で NSURLRequestReloadIgnoringLocalCacheData を使えないことがある問題に対処した。

2007.11.29

LimeChat for OSX 0.11 リリース

Pastie に対応しました。

大きなテキストをペーストするときに、ログに流れなくて便利だと思います。

追加した機能

  • Pastie 対応
  • ログをファイルに保存
  • チャンネルリストダイアログ
  • ニックネーム補完中に選択しないようにした
  • 3カラムレイアウトを選べるように (サーバ、ログ、メンバリスト)
  • キーワード行全体をハイライトするオプション
  • 現在のニックネームをキーワードとして扱うオプション

詳しくは、http://limechat.sourceforge.net/index_ja.html を参照してください。

2007.11.26

LimeChat 2.20 リリース

http://limechat.net/

タブキーでニックネームを補完する機能をつけてみました。@ つきでも補完できるので、twitter がらみで便利かも。

デフォルトではオフにしてあるので、使う場合には設定ダイアログのインタフェースタブでオンにしてください。

  • タブキーでニックネームを補完するオプションを追加した。
  • ログをワードラップするようにした。
  • DCC送受信中に終了しようとすると、確認ダイアログを表示するようにした。
  • ISO-2022-JP の半角カナを全角カナに変換する設定が記号に適用されていなかったバグをfixした。
  • /me コマンドに対応した。
  • エンコーディングが UTF-8 のときに、ISO-2022-JP の制御コードを検知すると ISO-2022-JP から UTF-8 に自動変換していたのをやめた。
  • ustream.tv をサーバリストに追加した。

2007.11.25

RubyCocoa 0.13.0 リリース

RubyCocoa 0.13.0 がリリースされました。

http://rubycocoa.sf.net

新機能は、以下の通り。

  • NSArray、NSDictionary が Ruby の Array、Hash のように扱えるようになった。
  • NSString が Ruby の String のように扱えるようになった (=~、match を除く)。
  • Ruby の値クラスを to_ns で Cocoa クラスに変換できるようになった。
  • Cocoa の値クラスに inspect メソッドが実装された。
  • NSRect、NSPoint、NSSize、NSRange を便利に扱うためのメソッドが追加された。

その他、かなりの数のバグfixが含まれていますので、RubyCocoa を利用しているかたはぜひアップデートしてください。

詳しいリリースノートについては、Rubycocoa-devel 1258 を参照してください。

NSString、NSArray、NSDictionary で Ruby のメソッドを使えるようにした

RubyCocoa 0.13.0 の新機能について。

いままでの RubyCocoa では、テキストフィールド上の文字列を操作するために、

s = @textField.stringValue  # NSString を取得
s = s.to_s                  # いったん Ruby String に変換
s.gsub!(/\s/, '')           # s をいろいろ操作
@textField.stringValue = s  # NSString に自動変換して代入

のように書いていた。

これには、Cocoa の NSString がわりとシンプルで、それほど機能が多くないので、いったん Ruby の String にしたほうが楽に操作できるからという理由があった。(たとえば NSString には正規表現がない)

これを解決するために、String、Array、Hash のメソッドを NSString、NSArray、NSDictionary に全部移植することにした。そうすることで、Ruby の便利なメソッドをそれらのクラスでも使えて、さらに変換の手間やコストも省けるという一石二鳥になる。

Array と Hash については、すんなりと完了。

String については、Ruby の String が byte index なのに対して、NSString は character index という違いはあるが、途中まではスムーズに進んだ。ここらへんは、ruby 1.9 の m17n の動きと JRuby が参考になった。

問題は正規表現。ruby 1.8 内蔵の正規表現は UTF-16 を扱えないので、マッチした結果を character index で返すことができない。これができないと、=~ と match を実装することができない。

そこで、Oniguruma を取り込み、UTF-16 でマッチして character index を返すところまで作ってみたけど、$~ に MatchData クラス以外のオブジェクトを代入できないことがわかって挫折。MatchData は ruby の内部でしか作れないように、継承しても new できないようになっているらしい。

そうすると、残る方法は ruby 内蔵の正規表現でマッチして、返ってきた MatchData の全メソッドを特異メソッドで上書きして byte index → character index の変換をするくらいだろうけど、この方法はさすがに効率が悪そうなのであきらめることに。ruby 1.9 では、うまく解決できるだろう。

2007.11.19

RubyCocoa 入門 for Xcode 3

RubyCocoa 入門のページを、Leopard に添付されている Xcode 3 に合わせて更新しました。

http://limechat.net/rubycocoa/tutorial/

Xcode 3 の目玉は、NeXT のころからそのままだった Interface Builder が大幅に変わってるところ。インタフェースが刷新されて、だいぶ使いやすくなったと思います。

ruby で書いたコントローラクラスと、インタフェース定義が自動的に連携してくれるところもすごく便利。

GUI に興味のある方は、ぜひ一度さわってみてください。

2007.11.18

InputSwitcher 0.5 リリース

Quicksilver を使うときに、できるだけ ASCII の入力ソースを選ぶようにしました。

http://limechat.net/inputswitcher/index_ja.html

ただし、Quicksilver のオン・オフを素早く繰り返すと、ときどきうまく ASCII に切り替わらないことがあるようです。いろいろ回避策を試してみたのですが、うまく回避することができないようなので、これは現在のところ制限事項です。

InputSwitcher とは

Leopard で、アプリケーションごとに入力ソースの状態を別々に保持してくれるようにするソフトです。

2007.11.16

InputSwitcher 0.4 リリース

Quicksilver に対応しました。

きむらさんからの情報 を参考に、Quicksilver をアクティブにしないように調整しました。

http://limechat.net/inputswitcher/index_ja.html

2007.11.12

InputSwitcher 0.3 リリース

各アプリケーションの起動時に、ASCII の入力ソースを選択するようにしました。(いままでは何もせず、その時点の状態を引き継いでいた)

これで Terminal や TextMate などが使いやすくなると思います。

ためしに各ウィンドウごとに入力ソースを保持させるのも作ってみたんですが、ウィンドウを切り替えるときに入力の取りこぼしが発生したりして不安定なので取りやめました。

http://limechat.net/inputswitcher/index_ja.html

2007.11.10

InputSwitcher 0.2 リリース

きむらさんからの情報のおかげで、ほとんどのアプリケーションで動作するようになりました。感謝。

変更点

  • クライアントの初期化方法を、ポージングで NSObject と NSWindow を乗っ取る方法から、SIMBL が用意してくれてる方法に変更。iCal、LimeChat などでも動作するようになった。
  • Firefox にフォーカスを移すときには入力ソースの状態を変更しないようにした。これは、Firefox にフォーカスを移すときに InputSwitcher が入力ソースの状態を変更すると、Firefox 上で入力ソースの状態が変更できなくなることがあるため。

ダウンロード

http://limechat.net/inputswitcher/index_ja.html

2007.11.8

InputSwitcher

Leopard で、アプリケーションごとにインプットマネージャの状態を保持してくれないのが微妙に不便だったので、別々に保持するのを作ってみた。要 SIMBL。

http://limechat.net/inputswitcher/index_ja.html

詳しい仕組みはこんな感じ。(ドキュメントより抜粋)

InputSwitcherClient.bundle は、SIMBL 経由で各アプリケーションのプロセスに潜り込み、アプリケーションの activate と、deactivate の2つのイベントを、あらかじめ起動しておいた InputSwitcher.app に通知します。

InputSwitcher.app は、各アプリケーションごとに入力ソースの状態を保持しています。activate イベントの通知を受け取ったときに、入力ソースをオン・オフして、以前の入力ソースの状態に復元します。deactivate イベントの通知のときに、入力ソースの状態を覚えておきます。

こうすることで、Leopard でも入力ソースの状態を各アプリケーションごとに別々に保持することができるようになります。

なお、現在の実装上、いくつかの制限があります。

Cocoa アプリケーションでしか動作しないので、以下のソフトでは動作しないことを確認しています。その場合でも、内部的にグローバル状態を別に保持しておいてそれを適用しているので、支障なく利用できると思います。

  • Finder
  • Firefox
  • iTunes

まれに、Firefox がアクティブになった瞬間に入力ソースの状態を変えると、そこから Cmd+Space を押しても入力ソースの状態を変えられなくなることがあるという不具合を確認しています。そのため、他のアプリケーションから Firefox にフォーカスを移したときにだけ、入力ソースの状態を変えないようにしてあります。

追記 (2007.11.18)

ドキュメントからの引用部分を現状に合わせて更新しました。