2012年3月19日月曜日

オープンソースカンファレンス 2012 Tokyo/Spring に参加しました

3月16日、17日と、オープンソースカンファレンス 2012 Tokyo/Spring に参加しました。
個人的な雑感をつらつらと綴ってみます。

今回は日本語GNOMEユーザー会として、「GNOME翻訳入門」と題したセミナーと、ブース出展を行いました。ブースは結果的にほとんどDoc-Ja Archiveにいることになりましたが。

セミナーは、一般ユーザーが翻訳を通じてオープンソースプロジェクトに参加する、という点を念頭において、初めての方向けにFLOSSへの参加・貢献はすごく簡単なことなのです、ということをお伝えしようとしました。セミナーを担当するのは初めてだったので、うまくできたかどうかは心許無いですが・・・(私は吃音者なのでその面でも不安はありました)。とはいえ、約20名ほどにご参加いただきましたが、少しでも参考になるところがあれば、幸いです。雨の中朝早くから来ていただきありがとうございました。
https://www.ospn.jp/osc2012-spring/modules/eguide/event.php?eid=65
セミナーの写真 (@kazken3 ありがとう!)
http://twitpic.com/8x9l4i

ブースはサイコーでした。今回はMomongaの@fut_nisさんとコーディネーターの@tkusanoさんにご協力をいただいて、すごく楽しい展示ができました。あっと人目をひくGNOMEの面白いところを紹介してくださり、私自身が来場者目線で楽しかったくらいです。展示で人を魅せるスキルは私には決定的に欠けているので、とても参考になりました。

Doc-Jaの BoFもおもしろかったです。思わぬ方の参加もあり、いろいろな方面から参加があったようです。休みなくぶっ続けでしたが時間の立つのも忘れていました。そのノリで周りの人たちにご挨拶するものうっかり忘れてしまい、自分のあほさ加減を呪いました。

最後に、今回はすごく楽しかったのですが、ただ楽しいだけでなく少し感慨深いものでもあります。私がOSCに初めて参加したのが、ちょうど1年前のTokyo/Springで、そのときは一般参加でした。いま親しくさせてもらってる人たちの多くと直接お会いできたのは、この1年前の東京でした。その1年後、またこうして彼らと顔を合わせることができました。継続して活動できたのは本当にありがたいことだと感謝しています。私は、周りを見ずに言いたいことを言ったり、厄介ごとを撒き散らしたりして周りの人を困らせることがたくさんあります。それにも関わらず拒絶せずに緩く受け入れてくれている周りの人たちのおかげで、なんとかやってこれています。本当にありがとうございます。今後ともどうぞよろしく。

2012年3月1日木曜日

itstool 1.1.1 と 1.1.2 との、POエラーハンドリングの違い

予想以上に長くなってしまったので、言いたいことだけ先に書くと、
itstool を利用した POのXMLエラー検出を利用している人は、1.1.2から挙動が変わっているのでご注意ください、--help みると手っ取り早いです、
ということです。


itstoolって?
GNOMEの翻訳ドキュメントのビルドに使用される、itstool というツールがあります。
以前はxml2poというものがあり、xml2poは現在ではosbsoleteとされています (が、実際にはまだよく使われています。今後itstoolに置き換わっていくでしょう)。
なお、itstool自体は GNOME プロジェクトのものではありませんが、その開発者は、Shaun McCance さん (GNOME プロジェクト、また GNOME ドキュメンテーションチームのコアメンバー) であり、GNOME とは強い結びつきがあります。
詳しいことは公式サイトをご覧ください。


itstoolでは、POにXML上の問題があれば検出できる
itstool には xml2po にはない大きな魅力があります。
それは、POに記述されたXMLタグの整形式不整合など、XMLの構文として問題があれば、ビルド時にエラーとして検出できるというものです。
xml2poでは、整形式が崩れていた場合は、「何も無かった」ことになります。出力されたXMLからは該当のタグ部分が静かに抹消され、正常に終了します。
XMLドキュメントの翻訳では、タイプミスなどでPOの時点で整形式が崩れてしまっていることはよくあります。本当によくあります。本当に。
なので、翻訳者の方は、ぜひitstoolで自分のPOを事前にチェックしてみるとよいでしょう。


エラー検出が、問題になることも
上記の通りXMLの構文的問題があればitstoolがエラー終了するので、その結果として、モジュールのビルドが失敗します。
毎日 jhbuild でビルドしている人にとっては大問題です。
POにエラーがあればエラーとして終了するのは、翻訳者にとってはありがたいのですが、その言語に興味のない大部分の人には迷惑な話です。
実際に Damned Lies (GNOME翻訳管理サイト) 側で、コミット前にそれをチェックしてビルドエラーを未然に防ごうという提案もあります (GNOME Bug 667207)。


itstool 1.1.2 で エラー => 警告 へ
この問題はitstoolで対応することとなり、デフォルトではエラーではなく警告メッセージを出力するに留めることになりました (freedesktop.org Bug 41254)。
それまでどおりエラーとして検出する場合は -s (--strict) オプションを使用します。
上記の修正は、2012/02/05リリースの1.1.2から利用可能です。
なので、itstool を利用した POのXMLエラー検出を利用している人は、1.1.2から挙動が変わっているので注意するとよいでしょう。


「実際の」例
gnome-user-docs のスペイン語のpoに以下のバグがあります(2012/03/01現在)。guiタグの開始と終了が逆転しています。
es/es.po:
 4361 #: C/contacts-edit-details.page:30(item/p)
 4362 msgid "When you are finished, click <gui>Back to Contact</gui>"
 4363 msgstr "Cuando termine, pulse </gui>Volver al contacto<gui>"

実際にビルドしてみましょう。

1.1.1 での挙動
$ /usr/bin/itstool --version
itstool 1.1.1
$ /usr/bin/itstool -m es/es.mo C/contacts-edit-details.page
Traceback (most recent call last):
  File "/usr/bin/itstool", line 974, in <module>
    doc.merge_translations(translations, opts.lang)
  File "/usr/bin/itstool", line 657, in merge_translations
    self._check_errors()
  File "/usr/bin/itstool", line 336, in _check_errors
    raise libxml2.parserError(self._xml_err)
libxml2.parserError:  Entity: line 1:  parser  error :  Opening and ending tag mismatch: p line 1 and gui
 ions/blank/" xmlns="http://projectmallard.org/1.0/">Cuando termine, pulse </gui>
                                                                                ^
 Entity: line 1:  parser  error :  Extra content at the end of the document
 ions/blank/" xmlns="http://projectmallard.org/1.0/">Cuando termine, pulse </gui>
                                                                                ^

$ echo $?
1
$

終了ステータスがエラーになっています。
PythonのTracebackまで出力され、当然ビルドは中断します。


1.1.2 での挙動
$ /opt/gnome-3.4/bin/itstool --version
itstool 1.1.2
$ /opt/gnome-3.4/bin/itstool -m es/es.mo C/contacts-edit-details.page
Warning: Could not merge translation for msgid:
When you are finished, click <gui>Back to Contact</gui>
$ echo $?
0
$

Warningが出力され、正常終了します。


1.1.2 で --strict オプションをつけた場合の挙動
$ /opt/gnome-3.4/bin/itstool --strict -m es/es.mo C/contacts-edit-details.page
Error: Could not merge translations:
 Entity: line 1:  parser  error :  Opening and ending tag mismatch: p line 1 and gui
 ions/blank/" xmlns="http://projectmallard.org/1.0/">Cuando termine, pulse </gui>
                                                                                ^
 Entity: line 1:  parser  error :  Extra content at the end of the document
 ions/blank/" xmlns="http://projectmallard.org/1.0/">Cuando termine, pulse </gui>
                                                                                ^

$ echo $?
1
$

エラーとして検出され、エラー終了します。
Tracebackは消えています。


ちなみに xml2po だとどうなるか
$ xml2po -m mallard -e -t es/es.mo C/contacts-edit-details.page > es/contacts-edit-details.page
$ echo $?
0
$ sed -n '22,24p' es/contacts-edit-details.page
   <item><p>También puede añadir, editar o eliminar la cuenta de correo-e, el número de teléfono, la dirección postal o la información del enlace.</p></item>
   <item><p>Cuando termine, pulse </p></item>
  </steps>
$

ご覧の通り、バグのあったguiタグは何事もなかったかのように消えており、文字通り「何も無かった」ことになっています。これは非常に悲しいことです。