株式会社クリアコード > ククログ

ククログ


Being Geek

6月にギークナード向けの本が出版されました。どちらも技術力はすごいけど人間関係が難しいような人を指す言葉として使われていますね*1

Being Geek ―ギークであり続けるためのキャリア戦略
Michael Lopp/夏目 大
オライリージャパン
¥ 2,484

ギーク向けということになっていますが、ギークの人よりも人間関係をうまくやれるギークではない人が読んだ方がよい内容になっています。話題の多くはどうすればうまい具合に仕事ができるかということです。職場でうまく立ち振る舞うにはこうしたらよいというのが著者の経験を元に書かれているのですが、元々人間関係が苦手な人には実践することは難しそうです。

経験を元に職場での立ち振る舞い方を話してくれる人が周りにいないなら参考になるでしょう。あるいは、この職場でこのままやっていっていいのか、と誰にも相談できずに悶々としている人にもなにかヒントがあるかもしれません。

唯一「人間関係が難しい」という部分に向き合っているのが『23章 「ナード」ハンドブック』のところです。ここには、ギーク・ナードはいかに問題があって、それに対応するにはどうしたらよいかということが書かれています。本書ではナードの"パートナー向けに書"いたとありますが、パートナーに読ませるのではなく、自分で読んでみるのはいかがでしょうか。自分が本当にギーク・ナードかの判断に使えます。読んでみて、書かれていることの多くが当たっていて、頭を抱えてパートナーに謝りたくなったのなら、あなたは本当にギーク・ナードなんでしょう。

1章が数ページの読み物、という構成になっており、どこからでも好きなところから読むことができます。別の章の話が前提にあるところには「何章を参照」というような記述があるので、関連がある章があるところから読み始めてしまっても大丈夫です。気軽に読むことができるので、目次を見て気になるものがあったら手にとってみてはいかがでしょうか。

*1 自称ギークの人は人間関係云々は関係なく「自分は技術力がある」という意味合いで使っているように見えます。ただ、明確な定義があるわけではなさそうなので、「なんとなく」や「雰囲気」で使うのがちょうどよい気がします。

2011-08-03

tDiaryのRDスタイルにCodeRayを使ったシンタックスハイライト機能を追加

タイトルにキーワードを埋め込んでみました。ククログはtDiaryのRDスタイルで書いています。コードを貼り付けることも多々あるため、シンタックスハイライトもできるようにしてあります。今まではGNU Source-highlightでシンタックスハイライトをしていたのですが、CodeRayでシンタックスハイライトをするように変更しました。

設定方法

~tdiary/clear-code-tdiary/にクリアコードのtDiary関連Subversionリポジトリをチェックアウトしているとします。この状態でtdiary.confに以下のように記述すると、RDスタイルでシンタックスハイライトできるようになります。

1
2
3
clear_code_tdiary_base = "/home/tdiary/clear-code-tdiary"
require "#{clear_code_tdiary_base}/patches/after-load-styles-hook"
require "#{clear_code_tdiary_base}/patches/rd-syntax-highlight"

事前にgemでCodeRayをインストールしておくことを忘れないでください。

使い方

以下のようにverbatimブロックに「# source: ruby(言語名)」というようなヘッダーを入れます。

tdiary.confの設定:(←ここはパラグラフ。)

  # source: ruby (←ここは表示されない。)
  @style = "RD" (←ここがRubyプログラムとしてシンタックスハイライトされる。)

乗り換え理由

GNU Source-highlightからCodeRayに乗り換えたのは以下の理由からです。

  • Rubyのライブラリとして使える。
  • Rabbitで使ってみていい感じだった。

まとめ

ほとんど需要がないはずですが、tDiaryのRDスタイルにシンタックスハイライト機能を追加したので紹介しました。

タグ: Ruby
2011-08-11

xml2po: XMLをgettextを使って国際化

需要がないためか、Web上にあまり情報がないxml2poというツールについて紹介します。

xml2poとは

xml2poはXML内のテキスト情報を他の言語へ翻訳することを支援するツールです。ちなみにPythonで書かれています。

xml2poを使って英語のXML文書を日本語に翻訳する場合の流れは以下のようになります。

  1. 英語のXMLからテキスト部分を抽出する。
  2. テキストを翻訳する。
  3. 元の英語のXMLと翻訳済みのテキストを合わせて日本語のXMLを生成する。

図にすると以下のようになります。

英語のXML文書を日本語に翻訳

翻訳方法

xml2poは翻訳のバックエンドにGNU gettextを採用しています*1。そのため、翻訳作業はGNU gettextを用いて翻訳する場合とほとんど同じようになります。GNU gettextを使ったことがある人にはxgettextの代わりにxml2poを使うといえばピンとくるかもしれません。

コマンドでいうと以下のような流れになります。

% xml2po --mode xhtml --output hello.pot index.html
% msginit --input hello.pot --output ja.po --locale ja
% emacs ja.po
% xml2po --mode xhtml --po-file ja.po --language ja --output index.html.ja index.html

それぞれの作業を簡単な具体例を使ってみてみましょう。

テキストを抽出

まず、翻訳元の英語のXHTMLを用意します。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Hello</title>
  </head>

  <body>
    <h1>Hello</h1>
    <p>This is <em>English</em> XHTML.</p>
  </body>
</html>

このXHTMLからxml2poを使って翻訳対象のテキストを抽出します。

% xml2po --mode xhtml --output hello.pot index.html

中身は以下のようになります。

msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2011-08-24 23:33+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: index.html:5(title) index.html:9(h1)
msgid "Hello"
msgstr ""

#: index.html:10(p)
msgid "This is <em>English</em> XHTML."
msgstr ""

このファイルを元に日本語用の翻訳ファイル(POファイル)を作ります。メールアドレスを聞かれるので入力します。

% msginit --input hello.pot --output ja.po --locale ja
ユーザが翻訳に関するフィードバックをあなたに送ることができるように,
新しいメッセージカタログにはあなたの email アドレスを含めてください.
またこれは, 予期せぬ技術的な問題が発生した場合に管理者があなたに連絡が取れる
ようにするという目的もあります.

Is the following your email address?
  kou@localhost
Please confirm by pressing Return, or enter your email address.
kou@clear-code.com
http://translationproject.org/team/index.html を検索中... 完了.
A translation team for your language (ja) does not exist yet.
If you want to create a new translation team for ja, please visit
  http://www.iro.umontreal.ca/contrib/po/HTML/teams.html
  http://www.iro.umontreal.ca/contrib/po/HTML/leaders.html
  http://www.iro.umontreal.ca/contrib/po/HTML/index.html

ja.po を生成.
%

これで翻訳準備は完了です。

翻訳

次は、ja.poファイルを編集して英語のテキストを翻訳します。msginit "..."のテキストが翻訳対象の英語のテキストです。それに対応する翻訳後の日本語のテキストをmsgstr "..."のところに入力します。

ja.po(変更前):

...
msgid "Hello"
msgstr ""
...
msgid "This is <em>English</em> XHTML."
msgstr ""

ja.po(変更後):

...
msgid "Hello"
msgstr "こんにちは"
...
msgid "This is <em>English</em> XHTML."
msgstr "これは<em>日本語</em>のXHTMLです。"

このPOファイルを便利に編集するためのツールがいくつかあるので、それを利用するとよいでしょう。例えば、Emacsにはpo-mode.elがあります。

国際化

翻訳ができたら、元の英語のXHTMLと翻訳したテキストを使って日本 語のXHTMLを生成します。

% xml2po --mode xhtml --po-file ja.po --language ja --output index.html.ja index.html

生成されたXHTMLは以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>こんにちは</title>
  </head>

  <body>
    <h1>こんにちは</h1>
    <p>これは<em>日本語</em>のXHTMLです。</p>
  </body>
</html>

きちんと翻訳されていますね。

まとめ

XML文書を国際化するためのツールであるxml2poを紹介しました。xml2poを使えば、ドキュメントツールが国際化に対応していなくても、XHTMLを出力してくれさえすればドキュメントを国際化できます。つまり、YARDをドキュメントシステムとして使いながら国際化したドキュメントを生成できるということです。実際にrroongaのリファレンスマニュアルがこの方法を採用しています。

XML文書を国際化したい場合はxml2poを使ってみてはいかがでしょうか。今回はXHTMLに対して使いましたが、DocBook形式のサポートの方が充実しているので、DocBookのファイルを国際化したい場合は有力な選択肢になるでしょう。

*1 もう少し言うと、GNU gettextのファイルフォーマット仕様と管理ツールとPythonで実装されたGNU gettextの仕様に対応したライブラリを用いる。

2011-08-24

«前月 最新記事 翌月»
タグ:
年・日ごとに見る
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|