Google Code Prettify

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

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...