« 2007年8月 | トップページ | 2007年11月 »

2007.10.31

nib2ibstr.rb で ibtool に乗り換え

こないだのnibstrmerge.rbをもうちょっとコマンドらしくしてみた。

(2007.11.02 追記:cocoa-dev-japan に詳しい説明と宣伝をポストした)

オリジナルの .nib ファイル(ふつうは英語の)を指定すると、ibtool でテンポラリの .strings を --generate-strings してテンプレートとするので、直接 ibtool 用の .strings ファイルを生成することができる。

 % nib2ibstr.rb --help
 Usage: nib2ibstr.rb -i nib.strings -o ib.strings -n English.lproj/MainMenu.nib
        nib2ibstr.rb -i nib.strings -o ib.strings -t ib-org.strings
     -o, --output-ibstr=STRINGS       output ibtool .strings [default: stdout]
     -t, --template-ibstr=STRINGS     template ibtool .strings
     -n, --target-nib=NIBFILE         target .nib file

コードはあいかわらずぐだぐだだけど、動くってことが重要(と予防線)。

|

2007.10.29

nibtool の辞書ファイルを ibtool 用に変換する

どうやら nibtool がなくなって ibtool になったようだ。man ibtool(1) を見た感じでは、オプションの書きかたが違うだけで、機能的にはほぼ同じもののようだ。あんまり使ってなかったけれど、ローカライズにちょっと使っていたりした。その辞書ファイルの形式が変わっているのだ。

たとえば nibtool では

 /* NSMenuItem : <title:Copy> (oid:290) */
 "Copy" = "コピー";

となっていたものが、

 /* Class = "NSMenuItem"; title = "Copy"; ObjectID = "290"; */
 "290.title" = "Copy";

となっていて、表記から ObjectID に対象の特定方法が変わったようだ。「まあ、もとのファイルの oid もあるし、変換すりゃいいか」とやってみたものの、一部の項目でエラーとなる。

  • テーブルビューの列ヘッダは title でなく、headerCell.title
  • NSTextField は NSTextFieldCell に

など、単純には変換できないものがある。特に後者は ObjectID が変わるし、nibtool のときには存在しないので追っかけようがない。

仕方ないので、一度 ibtool で生成した辞書を元に、表記基準で一致するものを差し替えていくようにしてみた。Ruby で UTF16 を BOM 付きで出力する方法がわからなかったので無理やり。手元では使えたけれど、あんま複雑な nib がないので、ヨソでも大丈夫かはわからん。つーか、標準のツールがあるような気がしてしかたがない…

コピペするのがめんどうなひとはこちらから nibstrmerge.rb.txt

(2007/10/31 追記:少し進化 nib2ibstr.rb

 #!/usr/bin/ruby
 #
 #   Usage: 
 #   1. generate ibtool string 
 #     ibtool --generate-stringsfile ibtool-orig.strings MyNibFile.nib
 #   2. merge nibtool strings into ibtool strings 
 #     nibstrmerge.rb nibtool.strings ibtool-orig.strings > ibtool-new.strings
 #
 # $Id: nibstrmerge.rb 601 2007-10-29 13:38:56Z kimuraw $
 require 'iconv'
 FILE_ENC = 'UTF-16'
 FILE_ENC_O = 'UTF-16LE'
 WORK_ENC = 'UTF-8'
 $KCODE = 'u' # utf8
 
 # READ NIB STRINGS
 NibItem = Struct.new(:klass, :attr, :key, :oid, :key2, :string)
 class NibItem
   NIBLINE_1 = '/\* (\S+) (\(.+\) )?: <(\S+):(.+)> \(oid:(\d+)\) \*/' + "\n"
   NIBLINE_2 = '"(.+)" = "(.*)";' + "\n"
   class <<self
     def read(path)
       pattern = Regexp.new(NIBLINE_1 + NIBLINE_2)
       input = Iconv.conv(WORK_ENC, FILE_ENC, File.open(path).read)
       dict = {}
       while input.slice!(pattern) do
         item = NibItem.new($1, $3, $4, $5, $6, $7)
         dict[item.key2] = item
       end
       dict
     end
   end
 end
 
 # READ TEMPLATE IB STRINGS and REPLACE LOCALIZED STRING
 class IbItem
   IBLINE_1 = '/\* Class = "(\S+)"; (\S+) = "(.*)"; ObjectID = "(\d+)"; \*/' + "\n"
   IBLINE_2 = '"(\d+)\.(\S+)" = "(.*)";' + "\n"
   class <<self
     def convert(path, dict, out=$stdout)
       input = Iconv.conv(WORK_ENC, FILE_ENC, File.open(path).read)
       pattern = Regexp.new(IBLINE_1 + IBLINE_2)
       result = ""
       while input.slice!(pattern) do 
         str = if item = dict[$3] 
           then item.string 
           else $3 
           end
         result << 
            %Q!/* Class = "#{$1}"; #{$2} = "#{$3}"; ObjectID = "#{$4}"; */\n! <<
            %Q!"#{$5}.#{$6}" = "#{str}";\n! <<
            "\n"
       end
       out <<
         "\xff\xfe" <<
         "\x0a\00" <<
         Iconv.conv(FILE_ENC_O, WORK_ENC, result)
     end
   end
 end
 
 dict = NibItem.read(ARGV[0])
 IbItem.convert(ARGV[1], dict)

|

Leopard に引っ越し

だいたい終わり。あとで自分でみるかもしれないのでメモ。

インストール

(前提:ホームディレクトリ以下は / とは別パーティションにして fstab で /Users にマウント)

  1. sudo ditto -X でバックアップ
  2. DVD から OS と XcodeTools を空きパーティションにインストール
  3. 移行アシスタントでユーザ以外をコピー
  4. 環境設定でユーザを追加
  5. /etc/fstab を編集して再起動

アプリケーションなど

  • Shiira 1.2 が落ちやすい(2.2 は問題ない)。
  • MacPorts
    • coreutils の ginstall があやしい。入れると他の port install が失敗するので deactivate(2007.10.29 最初にはまったの忘れてたので追記)
    • tiff がエラー:[#12997]で回避
    • w3m が mktable が進まず:gc 6.8 をスタティックリンクしたものを tiger 上で make して、leopard に make install
    • rabbit ふつーにインストール完了。ただし、フォントの設定が効いてないっぽい?
  • SIMBL 8.2 に
    • SandTrip 動く(2007/11/03 追記:問題あり、0.9.8 をリリースしました)
    • EditCast は明らかにやばい。修正するまでぜったいに有効にしないこと。
  • 標準のターミナルがよくなったぽいので、ついに JTerminal にお別れ。
    • ついでに screen ともお別れ。
  • nibtool がないぞーーー!(追記:ibtool になったようだ)

w3m がいちばんキツかった。

|

2007.10.27

Rabbit の rb-gnome を SVN-r2645 に

こないだ Rabbit 用の rb-gnome Portfile を CVS 版にしたところ、直後に「Ruby-GNOME は Subversion に移行するよ」との連絡が。

fetch.type 変更するだけだかららくちんだぜっ、と思っていたけれど、ユーザ環境に svn コマンドがインストールされていない可能性をすっかり失念していた(cvs は XcodeTools に含まれるので MacPorts 使ってる環境ならあるはず)。svn コマンドがなさそうなときは、ウチに置いた tar 玉を落とすように分岐。rb-gnome/Portfile に lindex, break とか明らかに毛色の違う tcl のコマンドが見えるけれど気にしないように。

例によってアーカイブしたものは MacPortsWikiJP の PrivatePortfile/rb-rabbit に置きました。

(2007/10/28 追記。パッチを svn add するのを忘れていたので更新)

|

2007.10.25

(告知)「Mac OS X Leopardの真価を探る -Time MachineからXrayまで-」 沼田哲史さん in KOF2007

11/9-10に大阪で行われる、関西オープンソース(KOF2007)のユーザ企画として Cocoa勉強会 関西 が Leopard の紹介をするそうです。

スピーカーは"Cocoa Browser SN"や"英辞郎ビューア"の作者としても知られている沼田さんです。

以下、勉強会のMLからコピペ。

Mac OS X Leopardの真価を探る -Time MachineからXrayまで-

  • 日時:11/10(土) 14:00〜 (50 min) [会場:9F-S3]
  • 会場:大阪南港ATC ITM棟 6F マーレギャラリー(受付・展示会場)
  • 講師:沼田哲史(大阪電気通信大学 デジタルゲーム学科)
  • 主催:Cocoa勉強会関西
  • 概要:Mac OS X Leopardの登場を受け、Time MachineやXray、Core Animationなどの新機能を活用したアプリケーションの可能性をデモを交えながら紹介します。

会場へは、地下鉄中央線が便利とのことです。

|

2007.10.23

第25回 Cocoa勉強会にいってきた

10/20(土)は、Cocoa勉強会でした。簡単にレポート。

「Xcodeでプラグインのデバッグ」

Xcodeで実行プログラムを指定して実行することで、プラグインのデバッグができる、という話。Xcodeのヘルプは(意外にも?)ちゃんといろいろ書いてあって、読めばわかるけど知らないこともいっぱい。

質疑応答の中で、コンテキストメニューなんかの Finder のプラグインはどうやってデバッグするのだろう?という疑問が飛びまわる(結論は不明)。

「識別情報の変換〜文字エンコードとデータタイプ」

プログラムの中ではデータの種類を識別するために ID を付与することが多い。でも、ID の付けかたは1種類ではなかったりする。ここでは、

  • 文字コード(Cocoa/CoreFoundation/Windows)
  • データ形式(UTI/MIME/拡張子)

の Cocoa での取り扱いと変換について話があった。

なんつーか、バベルの塔?

「CocoaでのアニメーションGIFの作り方」

CGImage を利用して、アニメーションGIFを作る方法について。CGImage はひとつのイメージデータ/ファイルに複数のイメージを格納できるようにデザインされているので、素直に実装すればいいのか。と思いきや、一部の拡張データについては直接ビットで操作しないとダメなようだ。

発表後の雑談で、OSX/Cocoa ってこういったちょっと古いデータ形式にツメタイよね、みたいな話に。

「PSMTabBarControl」

発表資料は資料置き場に。

サンプルとして Sketch をタブ化しようと思ったら間に合わず。あんまり NSDocument でさくっと、とはいかないのだね。今回は基本的な話をして、実装は次の機会に。

やっぱり「タブの並べ替え」「ウインドウ間の移動」てのは、必須だと思うのですよ。それができるのが、このフレームワークの強み。

「アドレスブックフレームワーク概説」

アドレスブック関連の API の解説。iPod touch のメモ帳に使えないかと思って調べてた、てのがカッコいいよな。

自分のアドレスブック見たら 3件だった。

終わって

例によって予定より1時間ほど超過して18時ごろに終了。飲み会の席で iPod touch 見せてもらったり。ずいぶん薄いのな。

|

2007.10.22

Rabbit リポジトリの rb-gnome をCVSに

rb-gnome を 2007-10-21 時点の CVS に差し替え。以下、状況説明。

glib 2.14 や gtk2 2.10.13/14 あたりで Ruby-Gnome2(rb-gnome) 0.16.0 のビルド時にエラーを吐くようになった。だいたい関数のインターフェイスの不一致だったので、エラー箇所を確認してパッチを作成してたのだけど、途中までいったところで「HEAD なら直ってるんじゃないのか?」と気づく。CVS から取ってきたところビンゴ!

なので、CVS からコードを取得するように Portfile を書きかえ。手元の環境(10.4.10 intel, glib2 2.14.2_0, gtk2 2.10.14_2)で簡単に動作確認してコミット。

なんか不具合を見つけた方は教えてくれるとうれしいです。

|

2007.10.21

WebKit に Client-side database storage が実装

Surfin' Safari の "WebKit Does HTML5 Client-side Database Storage"WHATWG HTML5(ドラフト)のクライアントデータベースの紹介がされていた。これは、クライアントローカルにデータベースを作成し、 JavaScript で SQL で操作できるというもの。最新(nightly)の WebKit では既に実装されていて、サンプルも紹介されているし、インスペクタでデータベースを見ることもできる。すげえな。

いろいろなブラウザのローカルストレージについては、ヽ( ・∀・)ノくまくまーのブラウザのローカルストレージにまとまっているけれど、これに WebKit/Safari が加わると考えればいいのかな。

で、WebKit はコードが公開されているのでざっとチェック(r26824)。

  • WebCore/storage/ および WebCore/platform/sql/ のあたりがデータベース関連のコード
  • データベースエンジンは SQLite3 らしい
  • データサイズの制限はインターフェイスは定義されているものの未実装?(見落としかもしれない)

まず初めにでてきそうなアプリは、やっぱり Wiki エンジンかな?

|

2007.10.17

RubyInject でプロセスにもぐりこめ!

Laurent が彼の日記で新作 RubyInject に触れていたので見てみる&軽く紹介。これは mach_star を Ruby で使えるようにするもの。PyObjC には以前から objc.inject (サンプル) というものがあって、それの Ruby/RubyCocoa 版と言ってよいだろう。たぶん。

mach_starは

  • 既存のシンボルを別の関数でオーバーライドできる
  • 実行中のプロセスに任意のモジュールをロードできる(たいてい追加した専用のスレッドで動作する)

というもの。対象は Objective-C/Cocoa に限らず、破壊力満点。

RubyInject では、指定したプロセスに dRuby のクチを用意して、そこと通信できるようになるっぽい。で、dRuby でのオブジェクトの受け渡しがこっそり RubyCocoa になっていたりする。いまのところ、Leopard でないと動かないらしい(例によってスレッドの問題)。実行できて、じゃあ何をしようかって考えると、あんま思いつかないな。

|

2007.10.02

第25回 Cocoa勉強会 (10/20)のお知らせ

10/20(土)に行われる、Cocoa勉強会のお知らせ。見学の申し込みは勉強会のメールフォームからどうぞ。ちなみに関西のほうの次回は、12/1(土)に大阪は北浜で開催の予定だそうす。

概要

  • 日時:2007年10月20日(土)13:00〜(終了は17:30くらい)
  • 会場:東京 初台 オペラシティ アップルトレーニングルーム
  • 予定されている発表(随時更新:2007.10.19 現在)
    • Xcodeでプラグインのデバッグ
    • ID変換 in Cocoa
    • CocoaでのアニメーションGIF
    • PSMTabBarControlの紹介(木村)
    • (その他)

Leopardの発売は次の週らしいので、そのへんの話題はおあずけ。

|

« 2007年8月 | トップページ | 2007年11月 »