2006年3月31日

DebianでLinux 2.6.16

久しぶりにDebian/Linuxが入ったThinkPad X41で作業する。sargeのままだったが、Xorg/Gnome2.12の出来具合を知りたいので、testingに更新する。apt line をtestingに書き換えてapt-get upgradeするとしばらく立つと完了し、再起動。。。何も障害が起きず普通に立ち上がる。。。もっとボロボロでも良い気がするが、安定してますね。

X41はHDDの物理インタフェースはSATAでもないのにコントローラはSATAになっているが、何故か電源管理が出来ていなかったため suspend / resume 後にディスクにアクセスすると固まっていた。それ用のパッチがあるにはあるが、漸く2.6.16から本流に組み入れられて使えるようになったらしい。

なのでついでに、2.6.12から2.6.16への移行

  1. カスタムイメージ2.6.12からdebian/sidの2.6.16 をインストール
  2. suspend/resumeを確認。問題ない。
  3. ipw2200(1.0.6)からgit-1.0.8への移行。
    1. ipw2200-sourceからモジュールを作るがカーネルが固まる。
    2. 良くみると 2.6.16には既にipw2200が含まれているので、追加のモジュールの必要は無く使える。
    3. wpa_supplicantが動かんと思ったら driver が変更になった模様、ipw -> wext に変更すると、wpa_cli status の出力のwpa_stateがDISCONNECT、ASSOCIATINGの状態を行き来し始める。但しステルスAPの為かイマイチ接続しない。ふぅ む。
    4. 文書/ソースを眺めると、ステルスAPだとap_scan=2かつscan_ssid=1を指定すれば良いらしい。なのでしばらく放っとくと、 COMPLETEDになった。単にセッカチ過ぎたらしい。急かせる様にタイミング良く wpa_cli reassociateを実行すると速やかに接続が完了するようになった。
  4. VMwareの再設定。
    1. VMwareも最新版(5.5.1 build-19175)をダウンロードしてインストール。
    2. なぜか vmware-config.pl で以下のメッセージを出して止まる。
    3. The kernel defined by this directory of header files does not have the same address space size as your running kernel.
    4. 取り合えず、修正方法が報告されており、これに従って vmware-config.pl 及び vmmon.tar, vmnet.tarを修正すれば、エラー無くvmware-config.plが完了する。
  5. あとは普通に使えるのでいいのかなぁ。


[全文を読む]

2006年3月29日

ソースコードのエンコードと genstrings

Cocoa環境のアプリをローカライズする場合、ソースコード内でローカライズ対象のメッセージ文字列@"message"を直接書かずに、次のようなマクロを挟む形で書く。

NSLocalizedString(@"message", @"comment")
このマクロは、リソース?にあるLocalizable.stringsファイルから@"message"をキーとして翻訳済みの文字列を取得して返す。

Localizable.stringsを各言語毎に用意すればソースコードに埋め込まれたメッセージをローカライズできる寸法である。

もちろんソースコード群からLocalizable.stringsを生成コマンドも用意されており、下記コマンドで一発である。

# genstrings `find . -name '*.m'`
これで問題なければ良いのだが、、、、。

ソースコードにCJKの文字が含まれているとLocalizable.stringsを上手く生成してくれない。コメントであっても駄目(時たま、気まぐれで生成してくれる場合もあるのだが、、、)。特にソースコードがUTF-8だと駄目なのはイマイチ分からん。ShiftJISだと問題ないらしいが、、、そりゃないよAppleさん。

しかし、ソースコードに母国語のコメントを入れられないのは辛い。

幸いMacOSXにはPerl5.8が含まれており、苦無く複数のエンコードを考慮して扱えるので、genstringsと同等なスクリプトを書けば良いかも。

と、思いへこへこ書いてみたが、

  • genstrings で -s オプションは機能してないっぽいなぁ。
  • -j/-u/-noPositionalParametersオプションは未実装。使うときにでも実装するかぁ。
  • ふむperl 4くらいの知識ししか無いのでイマイチ定石が分からんなぁ。
  • perl本買ったれ。
  • 良く分からんが書けた。。。
  • そのうち公開しとこぅ。
で、漸くソースコードの日本語コメント書き放題になったよ。

追記(2008/08/06)

欲しい人は多分いないと思うけど、公開しときます

genstrings2

[全文を読む]

2006年3月25日

WordPressのソース埋め込み?

blog20060325-1
WordPressは画像ファイルを埋め込めるので、これと同じ感じでソースコードも埋め込めればいいなぁ

追記 (2008/07/11)

前々々のブログに WordPress を使っていた訳だが。。。律儀に移行せんでも


[全文を読む]

2006年3月24日

WordPressってどうよ?

WordPressを使い始めたのだが、少々不満がある。JavaScriptで実装されているリッチエデッタが使いやすく。管理画面も分かり易い。しかし、ソースコードを埋め込むのに難がありすぎる。コピペで張り込むと改行やインデントが消えてしまう。HTMLのソースをガシガシ書いて修正しても半角スペースが出せない、、、使い方が悪いのだろうか?便利なプラグインがあるのだろうか?イマイチわからん。

追記 (2008/07/11)

前々々のブログに WordPress を使っていた訳だが。。。律儀に移行せんでも


[全文を読む]

デフォルトドキュメントを指定する方法(解決編)

先日の続き。分かれば何のことは無く、Cocoaの無償の機能の中にすでに含まれている。

まず、試行錯誤してあと少しで上手くそうでイマイチの方法は下記の通り。

  1. まずはNSApplicationのデリゲートメッセージapplicationShouldOpenUntitledFile:に対して、NOを答えて、「名称未設定」ファイルの作成を阻止する。
  2. アプリが起動時したときに1度だけ呼ばれるNSApplicationのデリゲートメッセージapplicationDidFinishLaunching:を受けて、この実装の中でNSDocumentControllerに対して特定のファイルを開かせる。
  3. アプリが非ActiveからActiveになった通知をNSApplicationのデリゲートメッセージapplicationDidBecomeActive:で受けて、この実装の中で開いているドキュメントが1つも無い場合のみNSDocumentControllerに対して特定ファイルを開かせる。

#define DEFAULTFILE @"/Users/user/Documents/defaultFile"
 
- (void)openDefaultFile
{
    [[NSDocumentController sharedDocumentController]
        openDocumentWithContentsOfFile:DEFAULTFILE
        display:YES];
}
 
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
{
    return NO;
}
 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [self openDefaultFile];
}
 
- (void)applicationDidBecomeActive:(NSNotification *)aNotification
{
    NSArray *docs
        = [[NSDocumentController sharedDocumentController] documents];
    
    if ([docs count] == 0)
        [self openDefaultFile];
}

これで良いのだろうか?何かが違う。 唯一期待通りでないのは、アプリがActiveの状態でドキュメントが一つも無い場合にDock上のアイコンをクリックしても特定ファイルを開かせることができない点。

で、正しい答えはデリゲートメッセージapplicationOpenUntitledFile:を受けて、特定ファイルを開けて、YESを返すこと。このときNOを返すと特定ファイルと「名称未設定」ファイルの二つが開いてしまうので注意しなければいけない。

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
{
    return NO;
}
 
- (BOOL)applicationOpenUntitledFile:(NSApplication *)theApplication
{
    [self openDefault];
    return YES;
}

[全文を読む]

2006年3月22日

デフォルトドキュメントを指定する方法は?

Xcodeを使えば、新規のプロジェクトの作成で、Cocoaのドキュメントベースの雛形は簡単できる。あとは、Documentクラスなり、NSAppにデリゲートさせてカスタムコントロールオブジェクトを作ったり、ある程度は分かる。ただし、Cocoaを使うと、無償で付いてくる機能をカスタマイズしたい場合ドキュメントを彷徨う場合が多い。まぁ、それでフレームワーク特有の定石のパターンがある程度身に付くので無駄骨には終わらない。

で、カスタマイズしたい機能で未だに分からないがある。

Cocoaのドキュメントベースアプリで以下の場合「名称未設定」のドキュメントが生成されるのだが、

  1. 起動時
  2. Dockをクリックした時
  3. メニュー内の新規ファイル を選択した時
この1,2の場合のみ、ある特定ファイルを開くようにしたいのだが、もちろん無ければ勝手に作るようなデフォルトファイルを想定している。

1,2で「名称未設定」を抑制する方法はある。NSAppのデリゲートオブジェクトに下記のレシーバを追加すれば良いらしい。

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
{
    return NO;
}
まぁ、ドキュメントベースの機能をNSAppに問い合わせをしているのか意味がよく分からん。

ふむ、NSApp への通知メッセージapplicationDid???のどれか受けて、状況に応じて判断してドキュメントをオープンすればいいんかぁ? さっぱり、分からん。


[全文を読む]

2006年3月14日

三日坊主になるのかぁ!

大学にいた頃に学校のマシンで Mosaic を触れて以来、はや何年だろう。 Netscape が出始めのころで売り物だったが、だれも買われずに秋葉のLAOXに山積みになっていたのを覚えている。LinuxもCD-ROMのドライバの不具合でかなり苦労して、開発版の1.3が付属している本を一所懸命に探してインストールした。 そのNetscapeもオープンソースのMozillaになりfirefox になり、普通に使えるのが当然になる。また Linux は版を重ねるごとに安定し多機能になり(ほとんど化けもんだ)、普通に使えるのがまた当然になる。

さて、未開の地はどこにアルのだろうか。

その長い年月で、何度も自分の日記サイトを作って来たのだが、そんなに長続きはしない。理由は単純で、苦労したわりに素っ気なく見づらいサイトしか出来なかったからだ。 めんどくさいがりのワシが悪い。

さて、もう一度。多分なんか残っているよ。


[全文を読む]