GLib Ref. translation progress (TAKE 10).

第五章 「GLib のデータ型」の途中まで翻訳した。
この目次にあるように、長らく提供していたメモリ・チャンク (Since バージョン 1.2.x) が廃止 (Deprecated) になり、代わりに メモリ・スライス (Since バージョン 2.10) が追加された。共にメモリを一括して確保し管理するためのデータ構造とアルゴリズムなのだけれど、前者にはパフォーマンス上の問題があるため、後者では Linux スラブ・アロケータのアルゴリズムを採用することで、メモリチャンクを複数のスレッドから利用した時のようなオーバーヘッドを回避することができるようになった。要するに、目次でわざわざ強調しているように「メモリチャンクは効率が悪いデータ構造なので使うな!」ということ。メモリ・スライス、メモリ・チャンク共に利用頻度の高いデータ構造の GList 型GSList 型GHash 型なんかで利用されているから、このアルゴリズムの変更は GLib のバージョンを選定する上でかなり重要なポイントになるということか。
大量のデータを要素に持つリストを確保する場合や複数のスレッドからそのようなメモリにアクセスするようなケースが想定されるならば GLib バージョン 2.10 以降を選定すべきかと。むしろ GLib-2.8 を「実装がこなれているかどうか」 (実装の安定度とバグの総数に変動がない状態かどうか) の境界としていたが、GLib-2.10 を境界とした方が良さそうだ :|
次のセクションの翻訳が完了した:

  • メモリ・スライス
  • メモリ・チャンク
  • 双方向連結リスト
  • 単方向連結リスト
  • 両端キュー

翻訳の ChangeLog は次のとおり:
メモリ・スライス

  • 新規の翻訳
  • g_slice_free_chain_with_offset () と g_slice_free_chain() は #GSList を使うことを前提にした実装なので、リストは解放せず、リストの中に格納したメモリ・ブロックを解放するという点に要注意 (リスト自身は解放しない)

メモリ・チャンク

  • スレッド使用時のオーバーヘッドが大きいためメモリ・スライスを使うと言うことで廃止候補になった
  • これを使ってはいけないし、実際動かない
  • これを利用したコードは書き直しが必要

双方向連結リスト

  • g_list_delete_link()関数の説明が補足されている
  • g_list_free()関数の後始末がメモリ・チャンクではなくメモリ・スライスに変更された
  • g_list_free_1()関数の別名としてg_list_free1()マクロが追加された
  • 新規に追加された関数
    • g_list_insert_sorted_with_data()

単方向連結リスト

  • g_list_delete_link()関数の説明が補足されている
  • g_list_free()関数の後始末がメモリ・チャンクではなくメモリ・スライスに変更された
  • 新規に追加された関数
    • g_slist_insert_sorted_with_data()

両端キュー

  • g_queue_free() の説明が増えた
  • 新しく追加された関数やマクロ
    • G_QUEUE_INIT() マクロ
    • g_queue_init() 関数
  • 誤植: g_queue_link_index () の @Gqueue

See Also GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
See Also SVN リポジトリ: 翻訳作業の SVN リポジトリ
See Also GLib Data Types: オリジナルのドキュメント (第五章)
See Also バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
ということで、引き続き 第五章の翻訳を行う予定。

Gtranslator, long time no see.

メーリングリストでも昨年からいろいろ活発に動いていた Gtranslator の開発版がリリースされたのでビルド・インストールしながら ja.po の方を更新しておく (Not completed yet as bellow)。
次期 Gtranslator 2.0 についてはメーリングリストの内容や付属の NEWS ファイルにあるように、GObject ベースで最新の GLib/GTK+ に合わせた実装になっている。もちろん UI のレイアウトも 1.0/1.1 系から変わっているし、翻訳エディタの方は plural なメッセージにも対応し、文字列の強調表示もできる。また翻訳メモリ (翻訳データベース) も強化され、ショートカットキーですぐに引用できる模様。ただ、今回の開発版はバグのためプラグインが一切起動せずレビューできなかったので ja.po の方もその辺は手を付けていない。
デスクトップ・メニュー

gtranslator-01-20090125.png

プロファイル作成アシスタント
この開発版から翻訳メモリは Berkeley DB を使ったデータベースになった。また、プロファイルを使って複数の翻訳作業とその環境設定を管理できるようになった。これらのファイルはデフォルトで $HOME/.config/gtranslator/ 以下に格納されている。そのため初めて起動するとプロファイルを作成するアシスタントが表示される:

gtranslator-02-20090125.png
gtranslator-03-20090125.png
gtranslator-04-20090125.png

メイン・ウィンドウ
複数のペインに分割されているが取り外したり移動することができないので、慣れるまで若干とまどうかも。キー操作はいちおう 1.0/1.1 系を踏襲しているような感じがする。あと同じプロファイルで複数の .po ファイルを編集できるが、その際はノートブック・タブが表示される:

gtranslator-05-20090125.png

翻訳メモリ
例えば “No comment” というメッセージを翻訳する際に翻訳メモリを Ctrl+K で表示すると、こんな感じで学習したデータベースから候補をピックアップしてくれる:

gtranslator-06-20090125.png

複数形の翻訳
実際はプロファイルに入力した gettext の指定子に応じた編集タブがいくつか表示される:

gtranslator-07-20090125.png

設定ダイアログ
翻訳エディタは gtksourceview を使いC言語の書式指定子などメッセージの書式に合わせた強調表示やフォントの選択が可能だし、従来版同様に数は少ないものの色スキームも利用できるし、プラグインもいろいろある。この辺りの実装はとてもテキスト・エディタにそっくり:

gtranslator-08-20090125.png
gtranslator-09-20090125.png
gtranslator-10-20090125.png

という感じだけど、やっぱり po-mode on Emacs が一番だったりして :P:

gtranslator-11-20090125.png

この開発版リリース、プラグインをビルド中にリンクエラーが起ったらこんなパッチが役に立つかもしれない。

New ja.po for Desktop Notification Daemon.

3月リリース予定の G26 で新たにモジュールとして追加された libnotify & notification-daemon だけれど、最新版には G-C-C のアプレットが追加された:
デスクトップ・メニュー

notification-daemon-01-20090125.png

設定ダイアログ

notification-daemon-02-20090125.png

プレビューの例

notification-daemon-03-20090125.png

ということで新たに (とはいっても 0.3.x 系から個人的に翻訳していたものをベースに) ja.po を作成し upstream の作者に送付しておいた。

GLib Ref. translation progress (TAKE 9).

前回から残りのセクションを翻訳し、これで第四章 「GLib のユーティリティ」は完了。
今回の4つのセクションのうちテストはバージョン 2.16 で追加された新しい API:

  • キーと値のペアからなるファイルのパーサ
  • ブックマーク・ファイルのパーサ
  • テスト
  • Windows 互換の関数

翻訳の ChangeLog は次のとおり:
キーと値のペアからなるファイルのパーサ

  • Windowsの場合のキー・ファイルの違いが追記された
  • 関数が追加された:
    1. g_key_file_load_from_dirs()
    2. g_key_file_get_double()

      “If @group_name is %NULL, the start_group is used.” とあるが実装はそうなっていないようなので注意が必要。バグ登録する予定。

  • g_key_file_get_boolean() のエラーの対処が変わった
  • g_key_file_get_integer () で @group_name = %NULL の処理がなくなった (一番先頭のグループとみなす) し、エラーの対処も変わった
  • g_key_file_set_comment() が返り値を持つようになった
  • g_key_file_remove_*() が返り値を持つようになった
  • G_KEY_FILE_DESKTOP_* の定義が追加された

ブックマーク・ファイルのパーサ

  • GLib 2.12 から追加されたデスクトップのブックマークを扱う API
  • g_bookmark_file_add_application() に誤植があったので #568294 で報告

テスト

  • 新規の翻訳
  • 一部前のバージョンの”メッセージ出力とデバッグ関数”の API を含んでいる
    1. g_assert()
    2. g_assert_not_reached()
  • g_assert_cmpflott() って誤植なんだけど…:X

Windows 互換の関数

  • pipe() マクロがなくなった
  • g_win32_get_package_installation_directory() 関数が廃止になった
  • g_win32_get_package_installation_directory_of_module() 関数が追加された

See Also GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
See Also SVN リポジトリ: 翻訳作業の SVN リポジトリ
See Also GLib Utilities: オリジナルのドキュメント (第四章)
See Also バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
新しく追加されたテストの API は簡単な Unit Testing (アプリの単体テスト) を行う際に役に立つフレームワークを提供してくれる。テスト・ケースを生成し、テストを行うための条件やテスト自体の初期値などを持つ付帯情報、そしていくつかのテストケースをまとめて行うことができるテスト・パッケージといったインスタンスを用いて、テスト・アプリの起動から終了まで、そしてテスト中はレベルに応じたログの記録、タイマーを用いた時間計測、テスト中に文字列や整数、実数を比較してアサーションを出す機能、テストを行う関数を動的に追加したり削除したりといったあまり複雑ではないテストをサポートしてくれる。実際に GLib パッケージの test はこのフレームワークを用いるように書き直された。ちなみにテスト・プログラムを起動するための専用のコマンドライン (gtestergtester-report) も提供されている。
ということで、次は第五章 「GLib のデータ型」の翻訳に進む予定。