ページ

2009年4月4日土曜日

本(Rails)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

今日も風邪のため本の紹介のみ。

本屋で見つけた本。


入門書は数多くあれど実践的な本は少ない。Rails(Rubyも)は仕事で使っていないが考え方は参考になる。PHP でこういう実用的な本があると助かるのだが。

今日も cocoa と無関係だ。

2009年4月3日金曜日

本(集合知)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

風邪を引いたようだ。プログラミングはできないので本の紹介を。

ネット上の膨大な情報から、特定の目的沿った情報を抽出/生成することについて前から興味を持っている。Googleのニュースサイトのようなものを自分専用に作れないか。昔風に言うとエージェントか。最近はそれの助けになるような本が出始めている。




こちらは最近出た本。

2009年4月2日木曜日

iLingualを試す(その2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

続いて実際のバージョンアップを想定した作業として、元の英語XIBに手を加えて、それを翻訳してみる。

まず英語XIBのウィンドウのサイズを広げてラベル "April" を追加する。


この XIB を iLingualへ読み込ませる。"April" が追加されているのでこれを「4月」と翻訳する。


日本語XIBを書き出し、ビルド&実行する。


出た。

- - - -
前のバージョンとの文言の差分をちゃんと見てくれているので、以前の手作業のように自分で差分を管理する必要が無い。ibtoolを使った面倒な作業を GUIで出来るのは便利だと思う。フリーなら使ってもいいな。

2009年4月1日水曜日

iLingualを試す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

先日作ったサンプルプロジェクトの Xib を読み込ませてみる。


一部を日本語に書き換えてファイルを書き出す。

出た。



裏では恐らく ibtools を使っていてそのフロントエンドとして動作していると思われる。
これはなかなか便利だ。

2009年3月31日火曜日

ローカライズツール iLingual

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

ローカライズの情報を集めていたらこんなツールを見つけた。

iLingual
http://homepage.mac.com/nsekine/SYW/SYWSoft/softOSX.html#iLingual


PISCES での紹介記事
http://pisces-319.seesaa.net/article/71705307.html

面白い。フリーウェアのローカライズは無料ということなので試してみよう。

2009年3月30日月曜日

β版リファクタリング - 座標変換メソッドを切り出す(2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Windowキャプチャの動作がおかしい。調べると全ウィンドウの範囲を計算するメソッドが原因だった。

+ (NSRect)unionNSRectWithWindowList:(NSArray*)list
{
NSRect all_rect = NSZeroRect;
NSRect rect;
for(Window* window in list) {
rect = [window rect];
if (NSEqualRects(all_rect, NSZeroRect)) {
all_rect = rect;
} else {
all_rect = NSUnionRect(all_rect, rect);
}
}
all_rect.origin = [CoordinateConverter convertFromLocalToCGWindowPoint:all_rect.origin];
return all_rect;
}


前回 Windowクラスの座標系はすべてローカル座標系に変えてしまった。一方、このメソッドの結果は CGWindow系で使われている。


調査したところ、このメソッドは CGWindowでしか利用していなかったので今回は安易だがメソッド内で変換してしまう。

all_rect.origin = [CoordinateConverter
convertFromLocalToCGWindowPoint:all_rect.origin]; // 追加
return all_rect;



これでOK。

- - - -
マルチスクリーンに関連するバグフィックスはこれで(多分)全部片づいた。最初から異なる座標系を意識していればこんなに苦労しなかった。次?は是非最初から座標系の変換を実装に盛り込みたい。

2009年3月29日日曜日

β版リファクタリング - 座標変換メソッドを切り出す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

座標変換のメソッドは各所で使う事になるので専用のクラスを用意してここにまとめることにする。

@interface CoordinateConverter : NSObject {

}
+ (NSPoint)convertFromLocalToCGWindowPoint:(NSPoint)from_p;
+ (NSPoint)convertFromCGWindowPointToLocal:(NSPoint)from_p;

@end


とりあえずインスタンスは必要なさそうなのでクラスメソッドとして定義した。
内容は以前定義したものと同じ。


これで座標変換メソッドが利用しやすくなった。これを Windowモデルで使い、内部管理の座標系を CGWindowからローカル座標系へ切り替える。

Windowモデル(クラス)は CGWindow系関数で取得したウィンドウの情報を保持するクラス。定義はこんな感じ。
@interface Window : NSObject {
int _order;
CGWindowID _window_id;
int _owner_pid;
NSString* _window_name;
NSString* _owner_name;
int _layer;
NSRect _rect;
NSImage* _image;

}

このイニシャライザ #initWithWindowDictionaryRef: の中で _rectへ格納する時に座標変換を行っておく。

- (id)initWithWindowDictionaryRef:(CFDictionaryRef)window
{
self = [super init];
if (self) {
CGRect cgrect;

CFNumberGetValue(CFDictionaryGetValue(window, kCGWindowNumber),
kCGWindowIDCFNumberType, &_window_id);
CFNumberGetValue(CFDictionaryGetValue(window, kCGWindowOwnerPID),
kCFNumberIntType, &_owner_pid);
CFNumberGetValue(CFDictionaryGetValue(window, kCGWindowLayer),
kCFNumberIntType, &_layer);
CGRectMakeWithDictionaryRepresentation(CFDictionaryGetValue(window, kCGWindowBounds), &cgrect);
_window_name = (NSString*)CFDictionaryGetValue(window, kCGWindowName);
_owner_name = (NSString*)CFDictionaryGetValue(window, kCGWindowOwnerName);

[_window_name retain];
[_owner_name retain];

_rect = NSRectFromCGRect(cgrect);
_rect.origin = [CoordinateConverter convertFromCGWindowPointToLocal:_rect.origin];
}
return self;
}


動作確認は明日マルチスクリーン環境で。