2008年6月25日水曜日

Firefox3::Dictionary tooltip

 Firefox3でダブルクリック翻訳に最適なプラグインDictionary tooltip。英語サイトの単語検索用に、インストールしました。すごく使い心地がよいです。
 しかし、最新の1.3では英辞郎がデフォルトでは辞書選択できなかったので、設定ファイルに書き込みました。

 ちなみに私の自宅PC上はGNU/Linux OSが動いているので、それをベースに書きますが、Windowsでも設定ファイルを書き換えれば同じことです。

1)スクリプトファイルに英辞郎検索用のコードを追加
% gedit .mozilla/firefox/xxx/dictionarytip/dictionarytip_dictScript.js
で、一番最後の行の1つ上に下記のコードを貼り付ける。なお、dtip_arrDict[18]の数字部分は、上から0から順番に採番すること。
dtip_arrDict[18] = 
{
dictName : "eow.alc.co.jp",
url : "",
subCatName : " jp<->en ",
subCatValue : " jp<->en ",
selectedText : "",
assignUrl : function(selectedText)
{
var url = "";
try
{
selectedText = convertFromUnicode( 'UTF-8', selectedText );
url = " http://eow.alc.co.jp/" + escape(selectedText) ;
}
catch (ex)
{
alert(ex);
}
this.url = url;
this.selectedText = selectedText;
},
filterPage : function (ftDoc)
{
try
{
var arrForms = ftDoc.getElementsByTagName("ul");
var actualForm = "";
for (var i = 0; i < arrForms.length; i++)
{
if (arrForms[i].id == "")
{
actualForm = arrForms[i].cloneNode(true);
break;
}
}
ftDoc.body.innerHTML = "";
if (actualForm == "")
{
ftDoc.body.innerHTML += strNoResults;
}
else
ftDoc.body.appendChild(actualForm);
}
catch (ex)
{
alert(ex);
}
}
}

2)最後の行に選択候補として以下を追加する。
var dtip_strDictText = "<いろいろ上で定義した辞書>;eow.alc.co.jp";
で、Firefoxを再起動します。調べたい単語上でダブルクリックすると翻訳できます。心持ち重いですが、かなり便利です!

2008年6月24日火曜日

Commons-Loggingの基本

解説
 Apache Commons Logging (JCL)は軽量であり、且つ、その他のログツールに対して抽象的で独立したインターフェースを提供します。これをつかうとJDK logging API (JSR-47),Log4J,Avalon LogKitなどのログ実装をプラグインして使うことができます。

 JCLは、自動でLogging Systemを見つけてくれるんだけど、自分で指定したい場合は、『commons-logging.properties』に記述することで可能でっす。

ホームページ
Commons-Logging

サンプル・ソース
下記が簡単な使用例です。
public class MainRss {
private static Log logger= LogFactory.getLog("com.ime.dtc.ich.MainRss");
public static void main(String[] args) {
if(logger.isInfoEnabled()){
logger.info("Rss Update Start...");
}
try{
     //なにか処理する
}catch (ConnectException ex){
  logger.error("SQL connection exception");
ex.printStackTrace();
}catch (Exception ex){
ex.printStackTrace();
      logger.error("Exception",ex);
}
if(logger.isInfoEnabled()){
logger.info("Done",ex);
}
}
}

ポイントは、きちんとif()文で下記を確認してからにすると、ログの引数内の処理でオーバーヘッドがかかりません。
log.isFatalEnabled();
log.isErrorEnabled();
log.isWarnEnabled();
log.isInfoEnabled();
log.isDebugEnabled();
log.isTraceEnabled();

それから、もしLogging Systemを指定したい場合は、パスの通ったところに下記のファイルを置いておけばOKです。
"commons-logging.properties"
org.apache.commons.logging.log=org.apache.commons.logging.impl.Log4JLogger

それでもって、"log4j.xml"を配置しておけば、そのファイルの内容に沿ったログの処理をしてくれます。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--ログを出力するFileAppenderをfileとして定義 -->
<appender name="file" class="org.apache.log4j.FileAppender">
<!-- デフォルトのログレベル -->
<param name="threshold" value="debug"/>
<!-- ログのファイル名 -->
<param name="File" value="logs/hibernate.log" />
<!-- ログの追加・新規の設定 -->
<param name="Append" value="false" />
<!-- ログの出力形式を指定 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p %c{1} - %m%n"/>
</layout>
</appender>

<!--ログを出力するConsoleAppenderをstdoutとして定義 -->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<!-- デフォルトのログレベル -->
<param name="threshold" value="warn"/>
<!-- ログの出力形式を指定 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p %c{1} - %m%n"/>
</layout>
</appender>

<root>
<priority value="info" />
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</root>
</log4j:configuration>


Annex

commons-Loggingログレベル
LevelUsage
fatalシステムがこれ以上動作できない致命的なエラーが発生した場合
error予期せぬ動作などにより、正しく処理できない場合
warnなんらかの問題が発生したが、動作には影響がない場合
info設定ファイルを読み込んだときの設定情報、システム開始/停止時の状態出力など
debugデバッグ情報。例えば、外部モジュールから呼ばれるメソッドの入出力情報など
trace詳細なデバッグ情報。モジュール内部の情報、ループの繰り返しで大量に出力される情報など


Log4J Appender
アペンダ機能
ConsoleAppenderコンソールにログを出力する
FileAppenderファイルにログを出力する
DailyRollingFileAppenderファイルにログを出力するが毎日/毎週といった、一定期間でログのバックアップを取り、新しいファイルにログを出力することができる
JDBCAppenderデータベースにログを出力する
SMTPAppenderメールにログを出力する


Log4J PatternLayoutの書式
変数説明
%cカテゴリ名。%c{n}で表示するカテゴリ階層を指定する。例えば、a.b.cというカテゴリに対して、%c{2}はb.cを出力する
%d日付。HHを時間、mmを分、ssを秒、SSSをミリ秒としたとき、%d{HH:mm:ss,SSS},%d{ddMMMyyyyHH:mm:ss,SSS}という形式で指定できる。また%d{ISO8601},%d{ABSOLUTE}という形式でも指定可能
%L行番号
%mメッセージ
%n改行。ログメッセージの最後に挿入
%p優先度(fatal/error/warn/info/debug)
%rアプリケーションの実行開始からの経過時間
%tスレッド名。マルチスレッドのプログラムの場合、利用を勧める

2008年6月8日日曜日

Ubuntu Hardy 64BitでEclipseが不安定

Ubuntu Forum (Japanese)でも投稿しておきましたが、Hardy 64bitでEclipseが不安定という辛い状況です。

 結論から言うとHardy MutiverseのSun Java6(6-06-0ubuntu1)にバグがあるとのことで、下記でBug Trackできます。まだ2008年6月7日時点ではFixしてません。

1)本家SUN
2)Launchpad

当面Workaroundは
1)Eclipseの場合は-Xintで起動
パフォーマンスとのとれーどオフ
2)GutsyのSun javaを使う
Apt lineにGutsyのMultiverseを加えて6-03-0ubuntu2(Gutsy)のバージョンを入れる

で、わたしは1)で対応。何とかEclipse動いてます。根元のJavaのバグなのでNetBeans入れてなんとかなるという話ではなく辛いす。

ソースの文字コード変換

昨年末に、日本に久しぶりに帰ったのでDellのInspiron1720を買いました。

 で、今まで使っていたデスクトップPCは嫁と娘に譲り、私はノートをメインPCとして使用中。Windows Vistaを数日堪能した後、あまりにもバギーだったのでUbuntuを入れて使ってます。(購入時にウイルスソフト三年分ライセンス買ったんだけど無駄になった。。)

 WindowsPCで開発していたたくさんのアプリもLinux開発環境へ移行。その際、文字コードの関係でEclipseでソース見ると日本語で書いてたコメントが文字化け。Windowsで開発してたソースはShift JISで保存されていていたので、それをUTF8へ変換して一発で問題解決です。
find ./* -type f -name '*.java' -exec nkf -Luw --overwrite {} \;