2008年3月16日

MediaWiki から MoinMoin への移行ツール

技術のメモ書き用に、自宅内にMediaWiki を立てているのだが、 イマイチ使い勝手がよく無さげなので、別の Wiki システムを探ってみた。 内部的にUTF-8を使ってて、編集の履歴が見れて、そんなやつが良い。

MoinMoin が結構良さげなので移行してみた。

問題は MediaWiki に書き貯めた文書片を MoinMoin の形式に変換するのは手動では面倒である。

なので、ヘボイ変換ツールでも書いてみた。

ソースコード WikiConverter20080316.zip

blog20080316

MediaWiki の書式で変換できるのは一部のみ(リスト、整形済みテキスト、テーブル)である。うまく行かない場合は、ソースコード内の convert.rb を変更する必要がある。というか、自前で変更しないと使い物にはならないかも。

CUIでは一行スクリプトや書捨てスクリプトがよく作られる。そいつのGUI版と考えれば、書捨てGUIもあっても良いと思う。β版でもα版でもなく、こいつはそんなもんだ。

まぁ、Cocoa / CoreData / WebKit 万歳と言う話かなぁ。

Wiki 書式の変換ライブラリってのはないのかぇ。。。。


[全文を読む]

2008年3月15日

Safari で REFERER を削除する Javascript

普通のブラウザでリンクを辿ると、前のページのURIが次のページのリクエストにHTTP_REFERER として通知される。 Firefox / IE / Opera などのブラウザは拡張なりを入れれば、設定としてreferer を送らないことが出来る。 また referer を削除するプロクシ経由でアクセスする方法もある。ただ、プロクシとは大げさな気がする。

私が常用している Safari では、ブラウザの設定として、referer を削除する機能はついてない気がする。

だらグル(だらだらGoogleで検索)してたら、良い情報があったので、ちょっと組み立ててみた。

全部のリンクのリファーラを抑制するのでなく、class属性が external になっているリンクのみに限定にしてみた。 ソースをちょっとだけ書き換えればリファーラ抑制の条件は変えられる。

cutreferer.js

...
<script type="text/javascript" src="cutreferer.js"></script>
...
<a href="http://external.link" class="external">外部リンク</a>
...

Safari 2/Firefox 2/ IE6 で動作する。ただし Safari 2 のみブラウザ履歴のリストにゴミが残ってしまう。

Lightbox JS の効果を見て、HTMLソースにものすごい埋め込みとかが必要かと思ったが、属性一つだけなのをみて、ちょっと衝撃的だった、、、ので思いついてみた、、、。

参考

  1. リファラ実験
  2. referrerを空にするリンクの作成方法
  3. REFERRERを消して外部ページに移動する
  4. isMSIE
  5. Lightbox JS

Greasemonkey とか GreaseKit 使えるともっと面白いかも


[全文を読む]

2008年3月7日

iPhone SDK on PowerMac G5 って動くのかぁ

当ブログは全く今時の話題を書かない「端っこブログ」なのだが、iPhone SDK ベータを取り上げたい。

iPhone SDK は、Mac OSX 10.5.2 以降の Intel-Mac 上で動く。

はて、PowerPC 上では動か無いのかぁ。

Apple めぇ。

普通にインストールすると、iPhone 関連のパッケージはインストールされない。 なので、以下のパケージを手動で追加する。 Xcode3.1があるディレクトリを指定する必要がある。

  1. AspenDocumentation.pkg
  2. AspenHostSideTools.pkg
  3. AspenSDKHeadersAndLibs.pkg
  4. AspenSimulatorPlatform.pkg
  5. AspenSystemComponents.pkg
  6. DeveloperDiskImage.pkg

と、適当にプロジェクトを作ってビルドするとPPCベースのバイナリが普通にできるようである。

blog20080307-iphone-sdk

シミュレーション用の互換ライブラリ群にはちゃんと PPC 用のコードも含まれている。

$ cd /Developer/Platforms/AspenSimulator.platform
$ cd ./Developer/SDKs/AspenSimulator1.2.sdk
$ cd ./System/Library/Frameworks/UIKit.framework
$ file UIKit
UIKit: Mach-O universal binary with 2 architectures
UIKit (for architecture ppc7400):   Mach-O dynamically linked shared library ppc
UIKit (for architecture i386):  Mach-O dynamically linked shared library i386

なんだろう?正式版では PowerPC でもサポートされるのだろうか?それとも削除されるのだろうか?

なんかまた端っこの話題でしたね。

追記(2008/07/22)

iPhone SDK の最終版が公開されていので、同様に試した。含まれているパッケージ名は Aspen ⇒ iPhone に変更になっているだけで、シミュレーション用の互換ライブラリも ppc 用も含まれている。

大きな違いは!!

Xcode のGUIから下記エラーが出て構築できなかった。。。

No architectures to compile for (ARCHS=ppc, VALID_ARCHS=i386).

どうも、GUIからは VALID_ARCHSが固定値になってるようである。実際、適当な設定をして xcodebuild コマンドをターミナルから直打ちすれば構築はでき、シミュレータでの動作確認ぐらいはできるようである。

Appleは、本格的に PowerPC 上での開発を縮小する意思表示なんだろうなぁ。。。

本当に残念だ。。。。Mac Pro への買い替え時なのかぁ!?


[全文を読む]

2008年3月5日

NFS サーバ側でUTF8 NFD ⇔ UTF8 NFC の変換はできるのか?

MacOSX で Unicode が全面的にサポートされている。その中で一番分からないのは、ファイル名が UTF8 NFD (Normalization Form Decomposition) で正規化されていることである。詳しく言えば NFD をベースにした微妙に異なるルールらしい(1, 2)。その結果なのか知れないが UTF-8-MAC と呼ばれることが多い。

Linux 界隈でサポートされる UTF8 は NFC で正規化されると言われている。ただし、正規化処理が為された結果ではなく、専ら合成済みの文字のみを扱っている結果として、UTF-8 NFC なんだと思う。 Windows とおんなじ理由と思う。

根拠は全くない。

Linux というより上位のフレームワーク/アプリケーション(Gnome,KDE 等)の扱いの問題なんだと思う。

UTF8 の正規化の問題は、Samba や netatalk では対応が進んでおり、運用上問題が出ないレベルまで押さえ込むことができるそうなぁ。

NFS に関しては、どっかで議論されている?だろうが、一般的な運用まで下りてきていない。

現状は、

  1. MacOSX はファイル名を UTF-8-MAC にして、NFSサーバに送っている。
  2. 一般的な NFS サーバは、ファイル名の変換を行わずに、ローカルなファイルシステムに送る。
  3. ローカルなファイルシステムも、ファイル名の変換を行わず、ディスクに記録される。
  4. MacOSX が作成したファイル名は UTF-8-MAC (NFD) で正規化されており、UTF8 NFC と異なるバイト列だった場合、Linux のNFSクライアントで不整合が発生する。
nfs-fig01

ローカルな記録をUTF-8-MAC に変えたり、NFS は諦めたり、MacOSX の対応が進まないか祈ってみたり、四苦八苦である。

NFSの実験

どうしたもんかなぁと思いつつ、ちょっとだけ実験することにした。

NFSサーバに以下の機能があればいいのかなぁ

  1. クライアントからのファイル名をUTF8 NFC に正規化する。
  2. クライアントに応じて、正規化方法を選択して、ファイル名をその正規化をして返す。

NFS のファイル名は変換しても大丈夫なんだろうか?とか疑問だが、一番最低限の実装を作ってみた。

  1. 検証するNFSサーバの実装は unfs3 を使う。従って、NFSv3 が対象。
  2. NFS プロトコールのみで、NFS の MOUNT プロトコールは手をつけない。
  3. NFD <=> NFC の変換は、かなの濁音・半濁音に限定する。
  4. クライアントの区別をせずに常に変換する。
  5. NFD => NFC の変換が行われるのは、LOOKUP / CREATE / MKDIR / SYMLINK / MKNOD / REMOVE / RMDIR / RENAME / LINKの引数内のファイル名とSYMLINKの引数内のシンボリックデータ。
  6. NFC => NFD の変換が行われるのは、READDIRの返答内のファイル名。

unfs3-0.9.20.utf8mac-20080305.patch.txt

検証方法

Linuxでは カーネルベースのNFSを使いつつ検証が出来するのが通なんだろうなぁ。

サーバ側(fserver)でパッチを当てた unfs3 のバイナリを作っておく。

# UNFSD=/usr/src/unfs3-0.9.20.utf8mac/unfsd   <-- パッチ済みバイナリ
# EXPORTS=/etc/exports_test                   <-- テスト用の exportsファイル
# ${UNFSD} -d -u -p -n 44000 -m 44100 -e ${EXPORTS}

/etc/exports_test

/export/share 192.168.0.23(rw,no_root_squash)

MacOSX 側(192.168.0.23)でマウント

# mkdir /Volumes/unfs
# sudo mount -omountport=44100,port=44000 fserver:/export/share /Volumes/unfs

結び

濁点・半濁音だけだが変換が行われて、MacOSX から普通に扱える。。。

まぁ、いろいろ試したいことが思い浮かぶので、ちまちま実験していくかなぁ。


[全文を読む]

2008年3月2日

ブログのテーマを変更してみた

typo のテーマファイルをちょっと弄くって、可変幅で表示できるようにしてみた。

Safari/Firefox/IE6 で同じ表示にしたつもりだが、所々おかしいかもしれない。

CSS のUA依存の動作が結構多いのはゲンナリする。細かいノウハウを蓄積しないと対応できないが、、、なんだかなぁ。


[全文を読む]