2014年3月14日金曜日

PukiWiki からのデータ移行のシンプルな方法

PukiWiki から Markdown への変換


昨年 (2013年)、XP で運用していたマシンが壊れまして。それ以降、XP上のローカルサーバで長年運用してきた PukiWiki から、他のシステムにリプレイスすることを考えてました。

Wiki 以外の方法もなにかないかと、他の方法の模索をしてきたのだけど、やっぱり、Wiki はいいなと思います。

また一方で、ここ最近は Markdown も便利だと感じてました。Markdown そのものは、Wiki (CMS) ではなく、単なるドキュメントの書式でしかないのだけれども、最近は、JavaScript で書かれた Markdown レンダラーがある。こいつを使えば、Markdown でローカル Wiki みたいなことはできるんじゃないか・・ということを考えた。

で、とりあえず PukiWiki のデータを、なんとか他のシステムに移しやすい形にしたいなと。見てみたところ、


  • PukiWiki のデータはテキストファイル (xxxx.txt) で、ひとつのディレクトリにフラットに格納される (pukiwiki/wiki/)

  • ファイル名は、EUC コード (16進数) をそのまま文字列にしたもの。スラッシュなんかの記号を含んだものになる。

  • ファイルの中身は、EUC-JP で、PukiWiki形式で記述されている。(これは、設定にもよるのかも)

ということがわかった。

PukiWiki のデータを OSX 上の HFS+ に展開する


変換するに手っ取り早い方法は、テキストファイルで表現されているデータ構造とデータを、ファイルシステム上に展開してしまう、というものです。

今使っているのは Mac なので、以下のことを考えました:


  • 元のファイル名は見にくいので、デコードして、UTF-8形式で通常の文字列として表す

    • HFS+で使用できない特殊な記号が使用されていた場合は、必要に応じてなんらかのエスケープ処理をする

    • ただし、半角スラッシュの場合は、ディレクトリを掘る (HFS+ の仕様と上記仕様からくる制限)

  • ファイルの内容は、EUC-JP から UTF-8 に、漢字コードを変換する

  • PukiWiki 記法から、Markdown か MediaWiki の形式にする

  • 検索システムは、grep か mdfind を使えばいい

ということを、考えました。

ディレクトリを掘るのは、やっぱフラットに数千ファイルあると、みるのが辛いからです。。。

スクリプト


既存のスクリプトがないか、けっこう探してみたのですが、どうも見当たらない……ぜったい誰か作ってるはずなのに……。まぁ、PukiWiki 自体がもう10年近くリリース止まってますしね。

仕方ない。ということで、Ruby で以下のようなものを作りました:


  • pw2hfs.rb (変換スクリプト本体)

  • nf-pw2md.rb (PukiWiki形式→Markdown形式変換フィルタ)

はじめは MediaWiki 形式にしようかと思いましたが、めんどくさいのでやめました。PukiWiki->Markdown変換は、適当です (一行一行の正規表現マッチングと置換)。あと、スクリプト内で、OSX に入っている iconv コマンドを使ってます。

使い方は、2つのスクリプトを、pukiwiki のデータの格納してあるディレクトリの一つ上において、結果出力用のディレクトリ dst/ を作ってから、pw2hfs.rb を実行します。しばらく待つと、dst/ 以下に、変換したものができます。

この結果と、Invisible.js かなにかを、組み合わせようと思ってます。Wiki の記法 (特に、Markdown 中での、ページ名のリンク ―スクウェア・ブラケットで2重に囲むアレ) 対応は、JavaScript 側でやったほうがいいかな……。

それでは。



2014年3月10日月曜日

Mac OSX 10.9 (Mavericks) で 日本語入力可能な日本語化された Gimp 最新版 (2.8.10) を使うには

Mac の Gimp 最新版 (2.8.10) の日本語入力と日本語化

日本語化したGimp最新版で日本語入力
2014-05-11追記: エラーが出てしまう (日本語) ヘルプを利用可能にするには「Mac の GIMP 2.8.10 のヘルプを使えるようにするには」をごらんください。あと、本記事でSourceForge版と言っていたのは、より正しくは LisaNet版 (Gimp on OS X) でした。SourceForge には、LisaNet版のGimp on OS X と GIMP本家版のGIMP.app の 2 つのプロジェクトがあります。
Mac OSX Mavericks (10.9.X) の GIMP の最新の 2.8 系統は、日本語版のパッケージではいろいろと致命的な不具合があっていい評価が得られていない (たとえば、キーボード入力がショートカットとみなされてしまうとか) みたいだ。中でも、日本語入力ができないのは非常にツラい: 具体的には、SourceForge.jp の Gimp on OS X プロジェクトからダウンロードした LisaNet 版 のもの (Gimp-2.8.10p2-Mavericks.dmg) は、メニューが日本語化されているものの、日本語入力ができない。このためワークアラウンドとして、コピペやテキストファイルからの読み込みをしなければ ならない。非常にストレスフルだ! 一方で、GIMP本家 (gimp.org) のもの (gimp-2.8.10-dmg-1.dmg) は、日本語入力はできるものの、日本語化されていない……。
そ こで、これらの問題を解決する方法として、日本語入力ができる GIMP 本家版をベースに、これを日本語化する方法を説明する。これにより、テキストファイルから文字列をコピペするなんていうまだるっこしいことをしなくて 済み、ごくごく普通に日本語を入力できる GIMP が使えるようになります!!
概要としては、(1) ロケールデータのコピーと (2) 起動スクリプトの修正である。

2014年3月8日土曜日

[TIPS]Markdown で ふりがな

[TIPS] Markdown で ふりがな (ルビ) を使うには


ものすごくニッチなニーズかもしれないけども、Markdown でふりがなを振りたいとき、どうすればいいか?

2014年3月7日金曜日

VBAUnit の OOo Basic への移植

LBAUnit::Helper


VBAUnit (.NET版) を、OOo Basic に移植しようとしてみた。正確には、OpenOffice ではなく LibreOffice にだけども。

LBAUnit-Helper

ところが、OOo Basic には、Eval がそもそもないらしい
おぉ、なんてこった! なので断念した。

ユニットテスト (一般に xUnit) のフレームワークを作るには、その言語にはメタプログラミングの機能が必要とされる。

メタプログラミングには:


  • eval

  • self

  • lambda

といった機能を言語レベルでサポートしていることが望ましい。とくに、ひとつめの Eval は必須。

ところが、OOo Basic (OpenOffice.org Basic) は、これらのどれもサポートしてないんだな。まぁ、Python や Java, JavaScript でやってくれという話なんだろう……。

いちおう、OOo Basic にも TypeName() といった関数や MRI などリフレクション/イントロスペクションの拡張機能はあるにはあるのだけど、Eval がないとどうにもならない; 例えば、テストケースやメソッドを集めて実行する、という部分には、「コードを書くコード」「コードを実行するコード」を Basic がサポートしている必要がある。

クラスやインタフェースの定義、インスタンス変数、プロパティ、オブジェクトの生成をBasicのみでできることは、確認できたのだけどね……。

なので、あきらめた _(」 L、ソ、)_。

assert関数 と結果表示をするヘルパー関数は作ったので、まぁ、なんかに使えると思ったら使ってください (xba 形式でエクスポートしてあります):