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依存の動作が結構多いのはゲンナリする。細かいノウハウを蓄積しないと対応できないが、、、なんだかなぁ。

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...