2008年 3月 27日 木曜日 |
春の MySQL 祭り 2008 English Translation: (Yahoo!) / (Google)
来月のはじめ、4/9(水)に「春の MySQL 祭り 2008」というイベントをウェスティンホテル東京で開催するそうです。参加は無料ですが、事前登録制となっていますので締め切りまでにご応募ください。 MySQLは、Sunと統合がどうなっていくのか、という意味でももちろん興味がありますが前々からオープンソースなデータベースはかなり興味がありました。データベースはコモディティ化しないそうですから、コモディティー化しない分野でのオープンソースの活躍は興味津々。 最近、ずっとイルカの写真が手元に無いかさがしているんですが、今回はずいぶん昔の写真を見つけました。2000年2月の、まだSunに入る前、どころか、学生の頃でSunの就職試験を受ける前の頃の写真です。場所はニュージーランドのアカロアだと思います。 硫化水素による巻き添え事故 English Translation: (Yahoo!) / (Google) 最近、硫化水素による自殺と、その巻き添え事故の報道を良く見かけますが、危ないことはわかっても、万が一具体的にそういった場面に出くわした場合にどうしたらいいのかまでを解説しているニュースはあまり見かけません。たまたま、手元に大学時代の「安全の手引き」というのがあったのでそれで硫化水素による事故が起こった場合の対応を調べてみました。
新鮮な空気のところに移し、安静にする。目に入ったときは、大量の水で洗い、うがいする。うーん・・・。これだけか。Wikipediaの解説によると1000〜2000ppmで即死とのことですし、もともと素人で何かできるような事態ではなさそうです。どんなに目の前で助けたくても、まずは消防に連絡。 備えあればうれしいなの観点で言えば硫化水素を吸収できる吸収剤付きの防毒マスクと吸収剤を備えておく、という手も考えてみましたが素人が保管しておいても使えなさそうなのでやっぱりプロにお任せするしかないのかも。 MacのDictionary.appにSun Glossとか、ResourceBundleから作った独自辞書を追加する English Translation: (Yahoo!) / (Google) GlassFishとか、NetBeansなんかは仕事柄、日本語版が出る前から評価しています。そうすると、マニアックな機能なんかは英語版での経験のほうが長くて、日本語版でなんだっけ?この機能名称。なんてことがしばしばあります。自分で使うだけなら別に気にしなくていいんですが、ブログに書いたりプレゼンテーションに機能名称の説明を書いたりする場合にはなるべく、本当に画面に表示される名前を使いたいわけです。
今までは手作業でやっていましたが、少し前に英辞郎をMacについてくる辞書アプリDictionary.appで使えるようにしたときにDictionary.app向けの独自辞書の作り方を覚えたので、まずSunの用語集 Sun Glossの辞書を作ってみました。こんな感じ。
Sun GlossのDictionary.app用辞書はこちらに公開しておきます。 ダウンロードして、解凍した物をホームディレクトリ以下にある「ライブラリ」ディレクトリ以下に、「Dictionaries」というディレクトリがなければ作り、そこに置いてDictionary.appを再起動すれば終わりです。 これだけでもずいぶん個人的には便利になったんですが、GlassFishの管理画面など実際の画面に出るキーワードの対応表も欲しくなってきたので、GlassFish v2ur1からResourceBundleのファイルを取り出して、同じkeyを持つ日本語と英語のメッセージ対応を見れるようになればずいぶん便利だろうということで、こちらもスクリプトを作って作成。
Sun Java System Application Server 9.1ur1マルチリンガル版のResourceBundleから作った物ですが、これも同じく公開しておきます。 これらの作り方も簡単にメモ程度ですがご紹介しておきます。なお、本当にメモ程度なので動かない!などご連絡いただいても対応できない可能性大ですのでご了承ください。
タブ区切りのフラットファイルからMyDictionary.xmlを作るこれは割と簡単。以前、ちょっとしたスクリプトを書くときにもなるべくRubyを使うようにしていますなんて書いていたのに最近、プログラムどころかスクリプトさえも書かなくなってしまい、Ruby文法とかかなり忘れてしまっており、今回はずるをしてPerlのスクリプト。っていうかPerlすら怪しくなっています。忘れるスピードのはやいこと早いこと・・・(涙)
#/usr/bin/perl
print <<"__XML__";
<?xml version="1.0" encoding="UTF-8"?>
<d:dictionary xmlns="http://www.w3.org/1999/xhtml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
__XML__
undef %idtable;
while (<>) {
chmop;
$_ =~ s/&/&/g;
$_ =~ s/</≷/g;
$_ =~ s/>/</g;
$_ =~ s/"/"/g;
($word, $jpn, $description) = split(/\t/, $_);
$id = $word;
$id =~ s/ /_/g;
if ($idtable{$id}) {
$idtable{$id}++;
$id .= "_$idtable{$id}";
}
$idtable{$id}++;
print <<"__XML__";
<d:entry id="$id" d:title="$word">
<d:index d:value="$word"/>
<h1>$word</h1>
<p>
$jpn
</p>
<p>
$description
</p>
</d:entry>
__XML__
}
print <<__XML__;
</d:dictionary>
__XML__
ちなみにタブ区切りのテキストは「英語 \t 日本語 \t 解説」の順番に並んでいると想定したスクリプトです。他の並びの場合とか、区切りがタブじゃないばあいには適当にいじってください (^^;;
これを perl convert.pl < 元ファイル.txt > MyDictionary.xml みたいにすればオッケーです。 ResourceBundleからMyDictionary.xmlを作るつぎはResourceBundleから作る例です。今回はGlassFish用ですが、意外とこれ、他のプロジェクト用に作っても便利かもしれませんね。多国語対応されているようなプログラムのドキュメント担当の方にはお勧めです。GlassFishのように大きなソフトウエアの場合は、いろんなjarファイルにResourceBundleファイルが分散しているのと、パッケージ名(つまりファイルのあるディレクトリ)も気にする必要があります。とりあえずそれらをまとめてMyDictionary.xmlに作り上げるスクリプトを二つ作りました。まずは、日本語のResourceBundleファイル(*_ja.propertiesを想定。_ja_JPとか他のバリエーションのときはスクリプトを直接いじっちゃってください)の相対パスを渡してやると相対パスをパッケージ名と見立てて、メッセージのキーに付け加えて英語/日本語の辞書を作るようなPerlスクリプトです。なお、ResourceBundleの中身次第では結構辞書を作るmakeのときにエラーが出たりするのですが、それらは一つずつつぶすしかないです orz。あ、あとXMLなResourceBundleには対応していません。
#!/usr/bin/perl
print <<__XML__;
<?xml version="1.0" encoding="UTF-8"?>
<d:dictionary xmlns="http://www.w3.org/1999/xhtml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
__XML__
foreach $fileja (@ARGV) {
$fileen = $fileja;
$fileen =~ s/_ja//;
%bundlesja = read_bundle($fileja);
%bundlesen = read_bundle($fileen);
foreach $id (keys %bundlesja) {
$en = escape_xml($bundlesen{$id});
$ja = escape_xml($bundlesja{$id});
next if ($ja eq '' || $en eq '');
next if (length($ja) > 128 || length($en) > 128);
next if ($en =~ /Usage:/);
if ($idhistory{$id}) {
$idhistory{$id}++;
$id .= "_$idhistory{$id}";
}
$idhistory{$id}++;
print <<"__XML__";
<d:entry id="$id.en" d:title="$ja">
<d:index d:value="$en"/>
<h1>$ja</h1>
<p>
$id
</p>
</d:entry>
<d:entry id="$id.ja" d:title="$en">
<d:index d:value="$ja"/>
<h1>$en</h1>
<p>
$id
</p>
</d:entry>
__XML__
}
}
print <<__XML__;
</d:dictionary>
__XML__
sub escape_xml {
my ($txt) = @_;
$txt =~ s/&/&/g;
$txt =~ s/"/"/g;
$txt =~ s/</</g;
$txt =~ s/>/>/g;
return $txt;
}
sub read_bundle {
my ($file) = @_;
my $line;
my %bundles;
my $package_name;
$package_name = `dirname $file`;
$package_name =~ s/\n//;
$package_name =~ s/^\.\///;
$package_name =~ s/\//\./g;
open FILE, $file;
undef $line;
undef %bundles;
while (<FILE>) {
chomp;
next if ($_ =~ /^#/);
$_ =~ s/^\s*//;
if ($_ =~ /\\$/) {
$_ =~ s/\\$//;
$line .= $_;
next;
}
$line .= $_;
my ($key, $value) = split(/=/, $line);
$key =~ s/^\s*//;
$key =~ s/\s*$//;
$key =~ s/\"//g;
$key =~ s/,//g;
$value =~ s/\n/ /g;
$value =~ s/^\s*//;
$value =~ s/\s*$//;
$bundles{"$package_name.$key"} = $value;
undef $line;
}
close FILE;
return %bundles;
}
あとは、いっぱいあるファイルからResourceBundleを取り出して、上記のPerlスクリプト(makebundledic.pl)を流し込むシェルスクリプトです。GlassFishを想定しているのでAS_HOMEにGlassFishのインストールディレクトリを指定します。あ、ちなみにこれは本当にメモで、動作確認していません・・。
#!/bin/sh AS_HOME=~/Applications/glassfish-v2ur1-ml TOOL_HOME=`pwd` WORKINGDIR=./bundles rm -fr $WORKINGDIR mkdir $WORKINGDIR cd $WORKINGDIR for i in `find $AS_HOME/lib -name \*.jar`; do unzip -n $i \*.properties done perl $TOOLHOME/makebundledic.pl `find . -name \*_ja.properties` | native2ascii -reverse -encoding utf-8 > $TOOLHOME/MyDictionary.xml cd $TOOLHOME makeということで参考になりましたでしょうか?スクリプト自体はけっこういい加減なものばっかりなので自己責任でお願いします・・。 |
Today's Page Hits: 566 |