2008年2月27日

Typo を 5系列にする

気がついてみたら、typo 5.0.2 が出ていたので更新してみた。

ほんとに呆気なく出来てしまった。。。

まず rails 1.2.x から rails 2.x への更新

# gem update -y

rails と typo の最新版がgemパッケージがインストールされる。 gem が複数のバージョンを同時に使えるので、ほとんど typo 4 運用中でも実行できる。。。本当かぁ!すげ。

で、typo 4 から typo 5 への更新

$ typo_dir=~/typo                  # 運用中のディレクトリ
$ typo stop ${typo_dir}
$ typo install ${typo_dir}
...
暫く、ファイルのコピーやら削除やら、データベースの更新やらのメッセージ
...
Starting Typo on port XXXX
...

で最後に、管理画面にログインすると、再度データベースを更新する趣旨のボタンがでる。なので、こいつを押して、完了。

操作性は殆ど変わらない。ただ、typo 4 では sitealizer というアクセス解析ツールが含まれていたが、それが無くなってしまった。。。

ついでなので画像ファイルを Flickr へ移行してみたら、Lightbox JS と絡めて簡単使える拡張タグがあり結構 typo のサポートが良い。

他のブログシステムか、他の企業が提供してるブログに乗り換えようかと思ったが、もうちょっと typo を使い続けてみようかなぁ。


[全文を読む]

2008年2月23日

Leopard 上の NSTreeController は挙動不審?

Leopard において NSTreeController の挙動が素直でない現象に出くわした。 Tiger で同じバイナリは素直な動作をするので、バグなのか、仕様の変更なのか。。。さっぱいり分からない。

途中まで Tiger 上で開発して放り投げておいたものを、Leopard 上で再開した途端、地雷原に突っ込みまくっている。。。

でだ、問題は NSTreeController は、childrenKeyPath の先のモデルを、Array として扱うのか、Set として扱うのか?

簡単なサンプルを作ってみた。

MoiView.zip

  1. モデルに Core Data を使わずにNSMutableDictionary を使い、newObject/newChildObject で単純な初期を行う。このとき children には NSMutableArray のインスタンスを割り当てている。
  2. NSTreeController と NSOutlineView を一般的な binding をしてある。
  3. 五つのボタンのそれぞれのアクションに、NSTreeController のadd:/addChild:/addInsert:/addInsertChild:/remove: を接続して、同時に、それぞれのボタンの enabled に canXXX をbindingする。
  4. 別のボタンに、NSTreeController に rearrangedObjects を実行するアクションを接続する。
  5. こちの挙動の対処の有無のチェックボックスをつける。

トップレベルに追加(add:)や挿入(insert:)を沢山した後、rearrangedObjects を呼び出しても、項目の順序は変化しない。これは、Tiger でも Leopard でも同じ。

トップレベルよりしたの階層で、追加(add:/addChild:)や、挿入(insert:/insertChild:)を沢山した後、rearrangedObjects を呼び出すと、項目の順序は変化しないはずなのだが、僕のLeopard の環境では変化する。

再現性もある。モデル上では insert:はadd:として、insertChild:はaddChild:として振る舞う。。。

でだ、問題は insertObject:atArrangedObjectIndexPath:でも同じように、モデル上では indexpathで指定された階層の最後尾に追加される。。。

ビューとモデルでは違うのは分かるが、Core Data を使わずに適当なクラスを使っているのだから、childrenKeyPath の先を Array として扱って、挿入位置もモデルに反映してほしいのだが、、、。

困った。 仕様なのか、バグなのか、環境なのか、分からん。 最初の話だが、childrenKeyPath の先は、Core Data のエンティティを使う場合は Set であり、クラスを使う場合は出来る限りArray であると思うのだが、違ったのか? まぁ、抜け道はあるから良いのだけども。 そのうち、なんか出てくるかぁ。

追記 (2008/06/21)

MacOSX 10.5.3 になって直ぐには確認していないので、どの時点で改良されたか分からないが、近々の最新状態で確認したところ、insert系のビューとモデルの操作の奇妙な差異が改善された。

どうもバグだったらしい。

要求条件が 「MacOSX 10.5.3 以上」とか見るが、どうもこれらの原因なのかなぁ。。。

よきことかなぁ。


[全文を読む]

2008年2月22日

PowerPC 上の Leopard で Virtual PC 7 を動かす

公式に Virtual PC は Leopard 上では動作保証外になっている。

まぁ、使えないのかと思っていたが、インストールとか起動とかできるようである。Leopard で使うならば、自己責任で、文句言うなということらしい。

動作時に気になるは、VirtualPCNetworing1040.kext というアイコンがVPCの起動に伴ってぽこっと出てきてしまう。

この動作を押さえるためには、/Library/Extensions/VirtualPCNetworking1040.kext/Contents/Info.plist に次のエントリを加えれば良いらしい。

<key>LSUIElement</key>
    <string>1</string>

当分、動くのかなぁ。


[全文を読む]

2008年2月20日

Cocoa Binding の canAdd はいつ呼ばれるのか?

NSArrayController/NSTreeController の canAdd/canInsert が呼ばれるタイミングが、素直ではないような気がする。

仕様なのだろうか?

canRemove や canAddChild/canInsertChild などは、それぞれのコントローラの選択(selection)が変化した毎に呼ばれる。

canAdd/canInsertも同じようなタイミングで呼ばれると思うのだが、呼ばれない、、、何故!

素直な期待を満たす動作にするためには、それぞれの派生コントローラを作って、KVOを使って下記のようにしてみた。

@interface CustomController : NSArrayController {  
}
@end

@implementation CustomController

- (void)awakeFromNib
{
    [self addObserver:self
           forKeyPath:@"selection"
              options:0 context:nil];
}

- (void) observeValueForKeyPath:(NSString *)keyPath
                   ofObject:(id)object
                     change:(NSDictionary *)change
                    context:(void *)context
{
    if ([keyPath isEqualToString:@"selection"]) {
        [self willChangeValueForKey:@"canAdd"];
        [self didChangeValueForKey:@"canAdd"];
        [self willChangeValueForKey:@"canInsert"];
        [self didChangeValueForKey:@"canInsert"];
    }
    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
@end

setKeys:triggerChangeNotificationsForDependentKey:を使っても同じことが出来ると思うが、同じ動作は実現できなかった、、、canAdd/canInsert は Controller Key だからなのかぁ。そもそも canRemove はどうしてるのだろうかぁ、、、

全く分からん。


[全文を読む]

2008年2月19日

気付いてみると 5インチFDD は終焉してたのかぁ

2年くらい前 TEAC の自販サイトで FD-55GFR の新品で入手可能だったが、今は自販サイト自体無くなっており、完全に入手不能になっていた。

サポート終了日は 2007.6.30 なので、そのちょっと前に在庫が尽きたのだろう。

かなり遅れたが、ご苦労さん、5inch FD。

3.5インチFDDは無くなるのは何時だろう。


[全文を読む]

2008年2月18日

MacOSX 10.5.2 で AFP の Kerberos 認証がおかしい?

更新して 10.5.2 にして以来か分からないが、AFPの共有の認証がうまく機能しなくなってしまった。

パケットをみる限り、AFPクライアントからKerberos認証が行われた形跡がない、、、どうもその前後で NetAuthAgent が落ちているのも気になる。

分からん。
そのうち直るんかいなぁ。

追記 (2008/03/19)

昨日公開された Security Update 2008-002 当ててみたところ、NetAuthAgent が落ちる現象は無くなって、Finderがフリーズ気味の症状は無くなった。

しかし、完全に AFP+Kerberos認証は無効になってしまった。

10.5.1
AFP-Client+Kerberos認証 が問題なく機能
10.5.2
AFP-Client+Kerberos認証 が機能しない、かつNetAuthAgent が落ちる。Finder がフリーズ気味
10.5.2 + Security Update 2008-002
AFP-Client+Kerberos認証 が機能しない。NetAuthAgent は安定。Finder もフリーズもしない

次の更新を乞うご期待!?かぁ、、、。

追記 (2008/05/29)

10.5.3 が出たので、更新したところ、状況は変わらない。。。

もう少し調べたところ

  1. Finderの「サイドバー」の「共有」のエントリからアクセスした場合、Kerberos 認証は行われない。
  2. Finder のメニュー「サーバへ接続」でサーバアドレス「afp://servername」を指定した場合、可能ならば Kerberos認証が行われる。
  3. ゲスト認証ができないサーバに対して、2. の方法でマウントした場合、「サイドバー」からのアクセスとアンマウントの時に、頻繁にFinder がフリーズする。。。
  4. 上記の 2. の方法でマウント済みのボリュームがあるサーバの別のボリュームは、1./2. の両方で Kerberos 認証が使われる。

要するに、Finder がAFP共有の一般的なKerberos認証(LKDCでない奴)での接続を想定していない?扱えてない?のが原因らしい。

えっと、Finder のバグ?かなぁ

対処療法としては、ファイルサーバはゲスト認証+Kerberos認証を有効にして、未マウントのサーバに対しては Finderのメニュー「サーバへ接続」を使えば良いらしい。

また次の更新を。。。


[全文を読む]

Open Directory の設定のまとめ 2008Q1

Leopard Server をサーバに利用しようと思えば、なんとか出来る。 去年だけど、いっぱい書いたのでちょっと纏めてみた。


[全文を読む]

Nullクライアントでメールを集める - exim4編

Debian 標準のMTAは exim4 なので、コイツにも Null クライアントの設定をしてみましょう。あの exim4 の設定ファイルはなんと言うか、マクロ言語をまじめに実装せんでもいいのに、、、

インストール直後は「ローカル配信のみ」になっている。

  1. 「スマートホストでメール送信; ローカルメールなし」に変更
  2. mail name/visible domain name に example.com
  3. smarthost にMail Hub のホスト名 にleopard.example.com

に変更する。

# debconf-show exim4-config | grep ^*
* exim4/dc_smarthost: leopard.example.com
* exim4/mailname: example.com
* exim4/dc_local_interfaces: 127.0.0.1
* exim4/dc_minimaldns: false
* exim4/dc_other_hostnames:
* exim4/dc_eximconfig_configtype: mail sent by smarthost; no local mail
* exim4/dc_readhost: example.com
* exim4/use_split_config: true

これで、ローカルもリモートも Mail Hub に送られることになる。

EXPOSED_USER を実現?

root ユーザのヘッダ送信者/ヘッダ受信者のみにホスト名を残すには、ちょっとした細工が必要である。

  1. 独自 rewrite ルールを付け加える。
  2. 「 設定ファイルを小さなファイルに分割」に設定
  3. mail name/visible domain name に host.example.com

その独自 rewrite ルールファイルは次の通り

/etc/exim4/conf.d/rewrite/50_exim4-config_nullclient_rewriting

root@+local_domains *           frt
*@+local_domains    $1@example.com  Efrst

、、、ただ、あまりお勧めしない。

詳細は eximの配布元 のドキュメントを参照かなぁ。

追記

Open Directory の設定のまとめ 2008Q1


[全文を読む]