« 2008年2月 | トップページ | 2008年4月 »

2008.03.27

Become An Xcoder の Leopard 版が出た

Mac + Xcode での C/Objecive-C プログラミング入門ガイド「Become An Xcoder」(関根さんによる日本語訳)という PDF が配布されているのを知っている人は多いと思うけど、 その Leopad 版が最近公開されました。今は英語のみで、旧版も Tiger 用として入手可能なままとなっている。

簡単に旧版と目次を比較してみた。テキスト化->diff。

 % diff -w -U1 tig-toc.txt leo-toc.txt
 @@ -11,5 +11,6 @@
  Declaring a variable 
 -Mathematical operations
 +Data Types 
  Parentheses
  Division
 +Booleans
  Modulus 
 @@ -27,2 +28,3 @@
  Making it all work 
 +Shielded variables
  04: Printing on screen
 @@ -63,3 +65,2 @@
  Creating the project
 -Creating the GUI 
  Exploring Interface Builder 
 @@ -69,3 +70,3 @@
  Creating our class 
 -Creating an instance 
 +Creating an instance in Interface Builder
  Creating connections 
 @@ -101,3 +102,5 @@
  Introduction 
 -The object lifecycle
 +Garbage Collection
 +Enabling Garbage collection 
 +Reference Counting: The object lifecycle 
  The retain count 
 @@ -105,3 +108,2 @@
  Autorelease 
 -Garbage Collection
  15: Sources of Information

ということで、大きくは変わっていないようだ。目次上で差異のあるところを見ていくと、

  • Booleans は増えた
  • Mathematical operations, Shielded variables, Creating th GUI は両方にあるけれど、目次に差異あり(作成時のミス?)
  • メモリまわりは Leopard での GC について具体的な手順が追加

こんなとこ。

|

2008.03.26

第28回 Cocoa勉強会 (4/12)のお知らせ

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

概要

|

OmniFramework 2008-03-20 でいっぱい変更があるよ

なんか件の修正の他にも、2008-03-05 と比べての変更がけっこうあるみたいなので、ざっと比較。Header キーワードと、Copyright の変更がじゃまなので無視。

% diff -I '$Header' -I Copyright -ur OmniGroup-2008_03_05 OmniGroup-2008_03_20
 :

なんかたくさんあるぞ、200ファイルくらい変更あるし。OWF の OFByteOrder のエラーの件が修正されていたことを確認。

この新しいバージョンに合わせて、Omniフレームワークの紹介ページを更新。ついでにOmniBaseの紹介ページを追加。OmniBase.orderでの初期化処理の制御なんかが面白そうなんだけど、そこはまたあとで。

|

2008.03.17

うすうす SQLite3 Cocoa ラッパー OmniSQLite

OmniGraffle 5 が出たときに、Omni の公開しているフレームワーク の新しいバージョンがでていた。

で、ながめてみると OmniSQLite という新しいフレームワークが追加されていた。面白そうなので 調べて書いた。かなりシンプルな実装で、今どきのものとしてはかなり機能が少ない。詳しくはリンク先を参照のこと。

まーある程度ややこしいものなら、Core Data 使えばよいからね。

prepared statement が動かない

サンプルを実装していて気づいたんだけど、[OSLPreparedStatement step] がぜんぜん動作しない。sqlite3_step() で SQLITE_OK が返ってくるとかなにがなんだか(SQLITE_ROW か SQLITE_DONE もしくはエラーコードが期待されている)。で、調べてみると sqlite3_prepare() の文字列のサイズに0を渡しているために、statement が NULL になってしまい、正しく動作しないということになっている。

SQLite のドキュメント 見る限りでは、

  • "less than zero" -> \0まで文字列を読む
  • "non-negative" -> 指定した長さまで

だから 0 ではだめなはず。

これを -1 にすれば正しく動くみたいなので、OmniGroupのフォーラムにパッチを投げておいた

Google Code Search で 他のコードを調べてみる と、-1 のほうが多数派のようだけど、0 もいくつかある。バージョンかなあ。

(2008.03.20 追記:修正が反映された 2008-03-20 版がダウンロードできるようになっています。仕事早いぞ!)

Omni Source License が変わっていた

今回気づいたのだけど、Omni Source License が 2007 年に変わったようで、「ほぼ」MIT 相当のかなりゆるいライセンスになっていた。2005 年ごろは改変したソースの再配布に制限があったり(「Cocoa Life Vol.1」によれば)、ちょっとめんどうなライセンスだったのだけど、今のものならずいぶん使いやすくなったと思う。GJ だよ Omni。

|

2008.03.12

KSExtensibleManagedObject でなんでも CoreData に

The Mac DEVELOPER NETWORK の Core Data Managed Object Extension Class 経由で、Mike Abdullah の KSExtensibleManagedObject

CoreData でない実装のデータモデルを NSManagedObject に再実装することなく CoreData で利用したりするために利用できるプロキシのようなもの。

利用のしかたは、

  • KSExtensibleManagedObject の extensiblePropertiesDataKey というキーにデータをセットする
  • データは Key-Value Coding に対応していること
  • データは NSCoding に対応していること

たとえばこんな感じ。MyData が非 CoreData のデータオブジェクト。

  • obj.key1 -> NSManagedObject.key1
  • obj.key2 -> NSManagedObject.key2
  • obj.key3 -> MyData.key3
  • obj.key4 -> MyData.key4
  • obj.key5 -> MyData.key5
  • obj.extensiblePropertiesDataKey -> MyData

SandVox ではすごく役に立ったらしいのだけど、どうもピンとこない。永続化層を前の実装から CoreData のストアに移すだろうから、そのギャップのケアにもけっこう手がかかりそう。

実装は単純で、 valueForUndefinedKey:, setValue:forUndefinedKey: を使ってラップしたデータの KVC アクセスに変換しているだけ。undefinedKey なので、ちょっとだけ遅いかもしんない。コードはわりと小さいし、Key-Value Coding や Key-Value Observing それに CoreData/NSManagedObject のモデル外での属性追加の手法を見てみるのにはよいと思う。

|

2008.03.10

Technical Q&A QA1554 - Cocoa の delegate でよくあるまちがい

Technical Q&A QA1554: Common mistakes with delegation in Cocoa というドキュメントが Apple から出ていた。タイトルのとおり、Cocoa で delegate を利用するとき、よくあるまちがいについて。

質問(Q)は今のところひとつだけで、「delegate が呼ばれないんだけど、なにがおかしいの?」というもの。次のどっちがあやしいよ、と書いてある。

  • delegate メソッドの名前(セレクタ)がまちがっている
  • setDelegate: を忘れている

ついでに、dealloc 時に setDelegate:nil するのも忘れないように、とのこと。

きっちり書いてあるけれど、なんだか怖いほど親切。iPhone SDK のカンケーかなあ。なんだか最近、 Q&As の更新が活発になってるような気がする。

|

OmniGraffle Professional がふたつ

OmniGraffle の新しいバージョン 5 がでていたので、4 からアップグレード。OmniGraffle Professional.app を /Applications に放り込んだら、もともとあった旧バジョンが上書きされずに ふたつになった。

その仕掛けはこういうこと。

 % ls -1d /Applications/OmniGraffle*
 /Applications/OmniGraffle Professional 4.app/
 /Applications/OmniGraffle Professional 5.app/
 % iconv -f UTF-16 -t UTF-8  /Applications/OmniGraffle\ Professional\ 5.app/
 Contents/Resources/English.lproj/InfoPlist.strings  | grep CFBundleDisplayName
     CFBundleDisplayName = "OmniGraffle Professional";

ファイル名はちがうけれど、Finder に表示される名称が同じ、となるようになっている。

|

2008.03.08

Google Toolbox for Mac の紹介ページを更新

Google Toolbox for Mac の紹介ページを更新。

  • AppKit を追加
  • Foundation に、最近追加された GTMScripting と GTMNSFileManager+Path の説明を追加

AppKit は、描画関連とシステムへのアクセスの機能がばらばらと、といった感じ。GTMScripting は、スクリプト言語的なインターフェイスで、目的によっては NSTask よりずっと使いやすいんじゃないかな。

これでひととおり終わり。そのうち、Xcode の Configration ファイルとかのテクニックあたりを追っかけてみる予定。

|

2008.03.06

RubyCocoa-0.13.2.1-OSX10.4universal.dmg リリース

というわけで出しました。

話は変わるけれど、インストーラの他にもただのバイナリ .framework のリリースの需要もあったりするのかなと思った。.app への組み込み用に。

|

HikiDoc のメンテナになりました

募集されてたので、Ruby製 テキスト->HTML ツール HikiDoc (rubyforgeのプロジェクトページ)のメンテナになりました、よろしく。

svn+ssh だからか、 Mac 上の svn コマンドはキーチェーンアクセスが効かないっぽい。ひさしぶりに ssh-agent とかくとう中。

|

2008.03.04

RubyCocoa 0.13.2.1 インストーラ for Tiger 準備中

[rubycocoa-devel:1326] のとおり、0.13.2.1 のインストーラを用意しました。

作成の手順は次のとおり。

  1. RubyCocoa-0.13.2.tgz を展開
  2. % /usr/bin/ruby install.rb config --build-universal
  3. config.save を編集して version の値 2つを 0.13.2.1 に変更
  4. % /usr/bin/ruby install.rb package でできあがり

ひさしぶりに bridgesupport の作成やったけど、PowerBook だとかなり時間かかって止まってるかと思った。

人柱を絶賛募集中です。試してくれた人はレポートください。

|

2008.03.03

Rabbit の MacPorts を 0.5.5 に更新

Ruby/Gtk による素敵プレゼンテーションツール Rabbit の port を最新の 0.5.5 に更新。インストール・アップグレードの手順については INSTALL.macosx-macports.ja を参照のこと。

MacPortsWikiJP の PrivatePortfile/rb-rabbit からどうぞ。

|

2008.03.01

RubyCocoa 0.13.2 の Tiger 用 dmg インストーラにパッケージミス

問題の内容

RubyCocoaスレ 98 の人のレポートで(さんくす>>98)、 RubyCocoa-0.13.2-OSX10.4universal.dmg で一部のファイルが正しい場所にインストールされないという問題があることがわかりました。

以下のファイルがまちがった場所にインストールされます(10.4のみ)。

  • プロジェクトテンプレート
  • rubycocoa.bundle 以外の libruby 用ライブラリファイル(.rb の類)

これによって

  • Xcode の新規プロジェクトで RubyCocoa 関連のプロジェクトが選択できない
  • コマンドラインの ruby で require 'osx/cocoa' が失敗する

という現象が起きることがあります。

回避策

とりあえず

  1. 0.13.0 をインストールする
  2. 0.13.2 にアップグレードする

という手順で、問題なく利用できるようになります。

今後の方針

0.13.2.1 を Tiger 版だけ出す、かなあ。

考えてみると、package タスクでの config 内容はターゲットのバージョンによって固定しちゃえばよいのだよな。リリースするファイルを作るためなんだから、コマンドいっぱつのほうが運用が断然安定する。

|

« 2008年2月 | トップページ | 2008年4月 »