<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>Triple Meaning</title>
        <link>http://trialpc.net/triple/</link>
        <description>IT関係の話題を中心に、プログラミングなどの技術的な内容を取り上げます。</description>
        <language>ja</language>
        <copyright>Copyright 2011</copyright>
        <lastBuildDate>Sat, 28 May 2011 22:16:46 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>CheckStyleで表示される警告対応</title>
            <description><![CDATA[CheckStyleでJavaのソースコードをチェックしているとき、以下のような警告が表示されることがあります。<br /><b><br />最初の一文はピリオドで終わらなければなりません。</b><br /><br />ピリオドだけでなく句点「。」でコメントが終わっている場合は警告を表示させなくするために、以下のようにCheckStyleのルールを修正します。<br /><br />「CheckStyle構成」-&gt;「Javaコメント」-&gt;「スタイルJavadoc」を選択した状態で「開く」ボタンをクリック。<br />表示されるダイアログの「endOfSentenceFormat」を次のようにします。<br /><br /><b>([。.?!][ \t\n\r\f&lt;])|([。.?!]$)</b><br /><br />※句点を２ヶ所追加します。<br /><br />正しく動作するかを確かめるために「テキスト文字列をここに入力」と書かれているテキストボックスにいくつか文字列を入れてみましょう。句点が最後に入っている場合は、背景色がグリーンになります。<br /><br />この修正を行ったことをエラーメッセージにも反映させるには、「拡張」タブの「javadoc.noperiod」のメッセージを「最初の一文はピリオド、または句点で終わらなければなりません。」（例）と修正します。]]></description>
            <link>http://trialpc.net/triple/2011/05/checkstyle.php</link>
            <guid>http://trialpc.net/triple/2011/05/checkstyle.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Eclipse</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
            <pubDate>Sat, 28 May 2011 22:16:46 +0900</pubDate>
        </item>
        
        <item>
            <title>Jarファイルをeclipseから実行させる時の注意点</title>
            <description><![CDATA[以下のような前提の時、Jarファイルをeclipseから実行させる場合に注意が必要です。<br /><br />【前提】<br />・Jarファイルから外部ファイルを読み込み、もしくは書き込みする。<br />・外部ファイルのパスを相対パス指定している。<br /><br />eclipseで表示されているJarファイルを実行すると、eclipseの置かれているフォルダが作業フォルダ（カレントディレクトリ）になります。例えば、「C:\Program Files\eclipse」というようなパスです。<br /><br />Jarファイルで外部ファイルを相対パス指定していると、作業フォルダからのパスを取得することになります。他の環境に配布する前提なのであれば、エクスプローラ上でJarファイルを直接起動するようにしましょう。<br />]]></description>
            <link>http://trialpc.net/triple/2011/05/jareclipse.php</link>
            <guid>http://trialpc.net/triple/2011/05/jareclipse.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
            <pubDate>Tue, 03 May 2011 12:55:00 +0900</pubDate>
        </item>
        
        <item>
            <title>IEの設定によりVS2003でデバッグできなくなる現象</title>
            <description><![CDATA[Internet Explorerのセキュリティの設定により、Visual Studio 2003のデバッグ機能が利用できなくなることがあります。<br /><br />【原因】<br />1. IEのセキュリティの設定で、「ユーザ認証」の項目が「ユーザ名とパスワードを入力してログオンする」となっている<br /><br />【単純な解決策】<br />IEのデフォルトの設定では、「ユーザ認証」の項目は「イントラゾーンでのみ自動的にログオンする」となっています。まずはその設定に戻すとよいと思われます。<br /><br />１点注意が必要なのが、この項目の設定が変更したにも関わらず反映されないことがあること。まだこの原因はつかめていませんが、さまざまな状態で起動してみて、設定を確認してみてください。<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://trialpc.net/triple/img/2009/03/ie_config.jpg"><img alt="IEの設定" src="http://trialpc.net/triple/assets_c/2009/03/ie_config-thumb-400x366.jpg" class="mt-image-none" style="" height="366" width="400" /></a></span><br /><div><br /></div>]]></description>
            <link>http://trialpc.net/triple/2009/03/ievs2003.php</link>
            <guid>http://trialpc.net/triple/2009/03/ievs2003.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">.NET Framework</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">IE</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Visual Studio 2003</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">デバッグ</category>
            
            <pubDate>Wed, 11 Mar 2009 23:57:04 +0900</pubDate>
        </item>
        
        <item>
            <title>VelocityでResourceNotFoundExceptionが発生する場合の対処法</title>
            <description><![CDATA[Javaで実装されたテンプレートライブラリApache Velocityは、メールのテンプレート生成等によく利用されています。そのVelocityライブラリを利用している際によく発生する <b>ResourceNotFoundException</b><fn>(org.apache.velocity.exception.ResourceNotFoundException)</fn> の対処法についてまとめてみます。<br /><br /><br />【基本編】 どういった状況で ResourceNotFoundException が発生するか<br /><br />VelocityのJavadocはとても不親切なので分かりづらいのですが、<b>テンプレートファイルが指定した位置に存在しない</b>ことが大きな原因の１つです。<br />Templateクラスのインスタンスを生成するVelocityクラスもしくはVelocityEngineクラスのgetTemplateメソッドを呼ぶ際に、引数として与えたテンプレートファイルへのパスが誤っていることをまず疑ってください。<br /><br />- ファイル名は誤っていないか<br />- テンプレートファイルのあるディレクトリ名が誤っていないか<br /><br /><br />【発展編】 パスは誤っていないはずなのに ResourceNotFoundException が発生する場合<br /><br />何度確認してもパスに間違いがない場合は、getTemplateメソッドの引数について次の点を確認しましょう。（FileResourceLoaderを利用している場合のみ）<br />　　・ <b>相対パス</b>で指定しているか<br /><i>　　・　XXX</i>.<b>resource.loader.path</b><fn>(XXXは、リソースローダ名)</fn> プロパティからの相対パスになっているか<br />　　・ <i>XXX</i>.<b>resource.loader.path配下にあるファイル</b>を指定しているか（サブディレクトリ内でも可）<br /><br />3つ目が案外はまりやすいんじゃないでしょうか。<br />デフォルトでのresource.loader.pathは<b>カレントディレクトリ</b>になっています。つまり、カレントディレクトリ配下にテンプレートファイルが配置されていないといけません。テンプレートファイルをカレントディレクトリ以外に配置したい場合は、resource.loader.pathを適切に設定する必要があります。<br /><br />また、Windows環境で実行している場合は次の点も確認してみましょう。<br />　　・ <i>XXX</i>.resource.loader.pathを指定するとき、「\」でなくて「/」を利用しているか<br /><br /><br />【参考資料】<br />[wiki] <a href="http://wiki.livedoor.jp/syo1976/d/Velocity">Velocity - 気の向くままに</a><br />[web] <a href="http://www.techscore.com/tech/ApacheJakarta/Velocity/index.html">Velocity - TECHSCOPE</a><br />[web] <a href="http://velocity.apache.org/">Apache Velocity</a> (本家)<br />]]></description>
            <link>http://trialpc.net/triple/2008/11/velocityresourcenotfoundexcept.php</link>
            <guid>http://trialpc.net/triple/2008/11/velocityresourcenotfoundexcept.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Velocity</category>
            
            <pubDate>Sat, 29 Nov 2008 11:49:23 +0900</pubDate>
        </item>
        
        <item>
            <title>Javaで行列式計算（余因子展開）</title>
            <description><![CDATA[行列式を手で簡単に解く方法として、サラスの方法があります。<br />もちろんプログラムでもサラスの方法は利用することはできるのですが、この方法では４次以上の行列に対して行列式を求めることができません。そこで、４次以上の行列の行列式を求めるために、余因子展開を用いたJavaプログラムのサンプルを紹介します。<br /><br />（なお、確実にテストを行ったわけではないので、自己責任の範囲内で利用してください。バグの報告はコメントにお願いします。）<br /><br />
<pre class="code">public class Sample {
	private static interface ArrayAccess {
		
		int size();
		double get(int r, int c);
	}
	
	private static class WrapEntity implements ArrayAccess {

		private ArrayAccess array;
		private int row;
		private int col;
		private int size;
		
		public WrapEntity(ArrayAccess a, int r, int c){
			this.array = a;
			this.row = r;
			this.col = c;
			this.size = a.size()-1;
		}
		
		public double get(int r, int c) {
			r = r&gt;=row ? r+1: r;
			c = c&gt;=col ? c+1: c;
			return array.get(r, c);
		}

		public int size() {
			return size;
		}
		
	}
	
	private static class Entity implements ArrayAccess {
		
		private double[][] array;
		private int row;		
		private int col;
		private int size;
		
		public Entity(double[][] a, int r, int c){
			this.array = a;
			this.row = r;
			this.col = c;
			this.size = a.length-1;
		}
		
		public int size(){
			return size;
		}
		
		public double get(int r, int c){
			r = r&gt;=row ? r+1: r;
			c = c&gt;=col ? c+1: c;
			return array[r][c];
		}
	}
	
	private static double sub(ArrayAccess array){
		if(array.size()==1){
			return array.get(0, 0);
		}
		if(array.size()==2){
			return array.get(0, 0)*array.get(1, 1)
					-array.get(0, 1)*array.get(1, 0);
		}
		// 行列式の計算
		double det = 0;
		final int length = array.size();
		for(int i=0;i&lt;length;i++){
			double v = array.get(0, i);
			if(v!=0){
				double d = v*sub(new WrapEntity(array,0,i));
				det += i%2==0? d: -d;
			}
		}
		return det;
	}
	
	public static double cofactor(double[][] array){
		// 引数チェック
		if(array==null){
			throw new NullPointerException();
		}
		final int length = array[0].length;
		for(int i=0; i&lt;array.length; i++){
			if(array[i].length!=length)
				throw new IllegalArgumentException();
		}

		// 行列式の計算
		double det = 0;
		for(int i=0;i&lt;length;i++){
			double v = array[0][i];
			if(v!=0){
				double d = v*sub(new Entity(array,0,i));
				det += i%2==0? d: -d;
			}
		}
		return det;
	}
<br />        // サンプル用メインメソッド<br />        public static void main(String[] args){
	
		double[][] array = {{1,2,3},{4,5,6},{7,8,9}};
		System.out.println(cofactor(array));
	}
}
</pre>
ここで、簡単にソースの説明を。<br />前半のArrayAccessインターフェース、WrapEntityクラス、Entityクラスは、配列の配列を余因子行列のように見せるためのエンティティクラスです。このクラスを利用しない場合は、配列の内容を毎回コピーする必要があるので、処理速度を高めるために導入しています。<br /><br />後半のsubメソッド、cofactorメソッドが行列式を計算するメソッドになります。<br />2つのメソッドはほぼ同じ処理をしていますが、cofactorでは引数チェックを行っている点が異なります。また、subメソッドでは余因子展開を再帰を用いて計算しています。<br /><br />もう少し考えればもっと効率は良くなるかと思いますが、とりあえずは処理の流れが理解しやすい今の状態を公開することにします。<br />]]></description>
            <link>http://trialpc.net/triple/2008/11/java.php</link>
            <guid>http://trialpc.net/triple/2008/11/java.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">数学</category>
            
            <pubDate>Mon, 24 Nov 2008 21:00:09 +0900</pubDate>
        </item>
        
        <item>
            <title>Apache Commonsを使って行列計算</title>
            <description><![CDATA[ApacheプロジェクトのうちのApache Commons Mathライブラリでは、行列計算を簡単に行うためのAPIが提供されています。もし、Javaで行列計算をさっさとやってしまいたい場合などは非常に役に立つと思います。<br /><br />Apache Commons Mathは次のページからダウンロードできます。<br />[web] <a href="http://commons.apache.org/math/">Aapche Commons Math</a><br />このページの「Releases」と書かれたタイトルの下にあるリンクから、ダウンロードページに行けます。現在の最新リリースは、Ver.1.2 です。<br /><br />Commons Mathのライブラリを取得してきたら、javadocを見ながら早速作成してみましょう。<br />このライブラリの中で、行列計算をするために重要なのは、<b>MatrixUtils</b>クラス、<b>BigMatrix</b>インターフェース、<b>RealMatrix</b>インターフェースです。<br />（パッケージは全てorg.apache.commons.math.linear です。）<br /><br />行列計算をさせる流れは以下の通り。<br />１．行列として扱いたいデータ（配列の配列）を用意する。<br />２．MatrixUtilsクラスのcreate<i>XXX</i>Matrixメソッド<fn>(XXXは、RealやBig等と置き換わります。詳細はAPIを参照。)</fn>を使って、BigMatixもしくはRealMatrixのインスタンスを生成。<br />３．生成したインスタンスを利用して、行列計算<br /><br />ちなみに、このRealMatrixインターフェース等を見てもらうと分かる通り、生成されるインスタンスは<b>不変ではありません</b>。複数のスレッド間で参照・変更をする場合は、必ず同期をとる必要があります。<br /><br />
<pre class="code">public static void main(String[] args){
  double[][] array = {
    {1,2,3},
    {4,5,6},
    {7,8,9}
  };
  RealMatrix matrix = MatrixUtils.createRealMatrix(array);
  System.out.println(matrix.getDeterminant());  # 行列式の表示
}
</pre>]]></description>
            <link>http://trialpc.net/triple/2008/11/apache-commons.php</link>
            <guid>http://trialpc.net/triple/2008/11/apache-commons.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Apache</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">数学</category>
            
            <pubDate>Sat, 15 Nov 2008 21:46:09 +0900</pubDate>
        </item>
        
        <item>
            <title>VMWare Server 2.0で入力を求められるユーザID/パスワード</title>
            <description><![CDATA[VMWare Server 2.0をインストールして、「VMWare Server Home Page」と書かれたリンク（管理コンソール）をクリックすると、立ち上がったブラウザの中でユーザIDとパスワードの入力を求められます。<br /><br />VMWare Server 2.0をインストールした時にID/PWを決定した覚えもないし、いったい何を入力すれば？と戸惑った方も多いかと思います。<br /><br />実は、ここで入力するユーザID/パスワードは、VMWare Server 2.0がインストールされているWindowsのアカウントID/パスワードを入力すれば大丈夫。ただし、アカウントのパスワードが何も設定されていない場合はどうしても弾かれてしまうので、アカウントのパスワードを設定した後に再挑戦してみてください。<br /><br />【参考記事】<br />[blog] <a href="http://www-section.cocolog-nifty.com/blog/2008/09/vmware-server-1.html">VMWare Server 2.0をインストール - プログラマーになりたい！</a><br />]]></description>
            <link>http://trialpc.net/triple/2008/11/vmware-server-20id.php</link>
            <guid>http://trialpc.net/triple/2008/11/vmware-server-20id.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Windows</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">VMWare</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Windows</category>
            
            <pubDate>Sat, 15 Nov 2008 21:18:09 +0900</pubDate>
        </item>
        
        <item>
            <title>VMGINA.DLLによってようこそ画面が利用できなくなる問題</title>
            <description><![CDATA[VMGINA.DLLがPCにインストールされることによって、Windowsのようこそ画面が利用できなくなる場合があります。このVMGINA.DLLは、VMWare Serverをインストールする際に同時にシステムにコピーされるようです。<br /><br />ようこそ画面を利用できるようにするには、以下のようにします。<br />（レジストリを操作するため、バックアップを取るようにしましょう。）<br /><br />レジストリの、<br />「<b>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL</b>」<br />を削除し、再起動してください。<br /><br />【参考ページ】<br />[web] <a href="http://support.microsoft.com/kb/302346">サードパーティ製のプログラムをインストールするとデフォルトのWindowsログオンインターフェースが表示されない場合がある - Microsoft</a><br /> ]]></description>
            <link>http://trialpc.net/triple/2008/11/vmginadll.php</link>
            <guid>http://trialpc.net/triple/2008/11/vmginadll.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Windows</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Windows</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">レジストリ</category>
            
            <pubDate>Sun, 09 Nov 2008 17:04:37 +0900</pubDate>
        </item>
        
        <item>
            <title>Velocity独自のログ機能を無効にする</title>
            <description><![CDATA[Velocityには独自に処理内容をログに出力する機能が含まれています。<br />特に気にしない場合はいいのですが、実際に運用する場面では冗長な機能ともいえます。そんな時にどのようにしてログを出力させないようにするかを紹介します。<br /><br />まず、単純な方法は、Velocityにプロパティとして与えることです。<br /><br />
<pre class="code">Velocity.setProperty(VelocityEngine.RUNTIME_LOG_LOGSYSTEM_CLASS, 
    "org.apache.velocity.runtime.log.NullLogSystem");
</pre>
これを初期化処理と一緒にやってしまうといいでしょう。<br />その他にも、プロパティファイルに定義したい場合は以下のようにします。<br /><br />
<pre class="code">runtime.log.logsystem.class=org.apache.velocity.runtime.log.NullLogSystem
</pre>
この一行をプロパティファイルに追記してください。<br /><br />【参考文献】<br />[blog] <a href="http://www.oddwit.com/blog/2008/velocity-log-disable">Velocityのログ出力をオフにする - Oddwit</a><br />[web] <a href="http://www.techscore.com/tech/ApacheJakarta/Velocity/10.html">Velocityの設定キー - TECHSCORE</a><br />]]></description>
            <link>http://trialpc.net/triple/2008/11/velocity-1.php</link>
            <guid>http://trialpc.net/triple/2008/11/velocity-1.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Velocity</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">ログ</category>
            
            <pubDate>Thu, 06 Nov 2008 00:04:24 +0900</pubDate>
        </item>
        
        <item>
            <title>Velocityを用いたメールテンプレート</title>
            <description><![CDATA[ある定型のメールの文章のうち、一部分だけを変えて送信したいということは往々にしてあり得ます。しかし、その処理を実装しようと思うと案外面倒だったりします。そこで、その処理を簡単にするために、Apache Velocityを用いたメールテンプレートの利用方法について紹介します。<br /><br /><b>【前提条件】</b><br />- J2SE 1.2以上<br />- Apache Velocity1.5<br />- Apache Commons Collection3.1, Apache Commons Lang2.1<br />- テンプレートファイル（.vm）<br />- プロパティファイル（.properties）：必須ではない。以下の例では利用<br /><br /><b>【使い方】</b><br />Apache VelocityはJ2SE以降で動作する汎用テンプレートエンジンです。これを利用することで、メールテンプレートはもちろん、XMLやSQLなど、あらゆるテンプレートに利用可能です。使い方はアイデア次第といったところです。<br /><br />で、実際に利用するためにApacheプロジェクトのサイトからjarファイルをダウンロードしてきます。<br />[web] <a href="http://velocity.apache.org/">Apache Velocity</a><br /><br />このページの左側に「Downloads」と書かれたリンクがあるので、その先のページからzipファイルかtar.gzファイルをダウンロードします。<br /><br />そして、ダウンロードしてきたファイルを解凍するとVelocityのjarファイルが手に入ります。ただ単に試したいだけなら<b>velocity-dep-X.jar</b>を利用すればいいでしょう。<b>velocity-X.jar</b>は、Velocityが利用している外部ライブラリを含んでいないjarファイルです。<br /><br />velocity-dep-X.jarをクラスパスで指定し、以下のプログラムを実行することで動作を確かめられます。Velocityで提供されている主要なクラスは、<b>VelocityContext</b>クラスと<b>VelocityEngine</b>クラスです。<br /><br /><pre class="code">    public static void main(String[] args) throws Exception{
        // 購入者情報
        Member member = new Member();
        member.setLastName( "佐藤" );
        member.setFirstName( "太郎" );
        member.setEmail("aaa@example.com");
        
        // 購入商品情報
        Item item1 = new Item();
        item1.setItemCode("0000-1111" );
        item1.setName( "健康食品1" );
        item1.setPrice(1000);

        Item item2 = new Item();
        item2.setItemCode("0000-1112" );
        item2.setName( "健康食品2" );
        item2.setPrice(2000);
        
        // 注文情報
        Order order = new Order();
        order.setMember( member );
        order.setOrderNumber("0001-AAAA");
        
        order.addItem(item1);
        order.addItem(item2);
        
        // 会社情報
        Company company = new Company();
        company.setName("なんでも.com");
        company.setEmail("bbb@example.com");        
        
        VelocityWrapper va = new VelocityWrapper( "mail.vm" );
        va.put( "order" , order );
        va.put( "company" , company );
        String body = va.merge();
        
        System.out.println(body);  
    }

    public class Company {

	private String name;
	private String email;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
    }

    public class Item {

	private String itemCode;
	private String name;
	private int price;
	
	public String getItemCode() {
		return itemCode;
	}
	public void setItemCode(String itemCode) {
		this.itemCode = itemCode;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int i) {
		this.price = i;
	}
    }

    public class Member {

	private String lastName;
	private String firstName;
	private String email;

	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}	
    }

    public class Order {

	private Member member;
	private String orderNumber;
	private List<item> itemList = new ArrayList<item>();
	
	public Member getMember() {
		return member;
	}
	public void setMember(Member member) {
		this.member = member;
	}
	public String getOrderNumber() {
		return orderNumber;
	}
	public void setOrderNumber(String orderNumber) {
		this.orderNumber = orderNumber;
	}
	public List<item> getItemList() {
		return itemList;
	}
	public void setItemList(List<item> itemList) {
		this.itemList = itemList;
	}
	public void addItem(Item item1) {
		itemList.add(item1);		
	}
    }

    public class VelocityWrapper {

	/** テンプレートファイルの内容を格納したクラス */
	private Template template = null;

	/**
	 * テンプレート変換時に使用する オブジェクトを格納するためのクラス
	 */
	private VelocityContext context = new VelocityContext();

	/** Velocityエンジンにアクセスするためのクラス */
	private VelocityEngine engine = new VelocityEngine();

	public VelocityWrapper(String templateFileName) throws IOException,
			Exception {

		// velocity.propertiesによるVelocityEngineの初期化
		Properties props = new Properties();
		props.load(new FileInputStream("velocity.properties"));
		engine.init(props);

		// テンプレートの取得
		template = engine.getTemplate(templateFileName);
	}

	public void put(String key, Object value) {
		context.put(key, value);
	}

	public String merge() throws ResourceNotFoundException,
			ParseErrorException, MethodInvocationException, Exception {
		StringWriter sw = new StringWriter();
		template.merge(context, sw);
		return sw.toString();
	}
    }
</item></item></item></item></pre>

以下がvelocity.propertiesです。
<pre class="code">input.encoding=Windows-31J
output.encoding=Windows-31J
</pre>

以下がテンプレートファイル（mail.vm）です。
<pre class="code">$order.member.lastName　$order.member.firstName　様

$company.nameをご利用頂きありがとうございます。

以下の注文を承りました。
注文番号：$order.orderNumber

≪購入商品情報≫
-----------------------------
商品番号 |注文商品名|価格
-----------------------------
#set ($amount=0)
#foreach ( $item in $order.itemList)
$item.itemCode|$item.name|  $item.price
#set( $amount=$amount+$item.price)
#end
-----------------------------
         合計          $amount
#set ($point=0)
#if($amount&lt;1000)
#set ($point=10)
#elseif($amount&lt;2000)
#set ($point=20)
#else
#set ($point=30)
#end

獲得ポイントは$pointです。

=================================================
$company.name
メールアドレス：$company.email
=================================================
</pre>
なお、この記事を書くために、CodeZine様のページをとても参考にさせていただいています。（ただし、本文中の誤記が非常に多いです。）<br />[web] <a href="http://codezine.jp/article/detail/72?p=1">Jakarta Velicityでテンプレートを変換しメールを送信する - CodeZine</a><br />
]]></description>
            <link>http://trialpc.net/triple/2008/10/velocity.php</link>
            <guid>http://trialpc.net/triple/2008/10/velocity.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">API</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Velocity</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">メール</category>
            
            <pubDate>Fri, 10 Oct 2008 23:56:00 +0900</pubDate>
        </item>
        
        <item>
            <title>OpenOffice Calcでグリッド線表示をなくす</title>
            <description><![CDATA[OpenOffice Calcのグリッド線（枠線）を消すには次のようにすればよいです。<br /><br />「ツール」→「オプション」→「OpenOffice.org Calc」→「表示」→「ビジュアル補助」→「グリッド線」のチェックを外す。<br /><br />
<img alt="グリッド線" src="http://trialpc.net/triple/img/2008/10/grid.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="203" width="400" /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />]]></description>
            <link>http://trialpc.net/triple/2008/10/openoffice-calc.php</link>
            <guid>http://trialpc.net/triple/2008/10/openoffice-calc.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">OpenOffice</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Calc</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">OpenOffice</category>
            
            <pubDate>Fri, 03 Oct 2008 12:00:06 +0900</pubDate>
        </item>
        
        <item>
            <title>XBRL APIのセットアップ</title>
            <description><![CDATA[9月26日の日経新聞に、XBRLが経済界で注目されているという話を知りました。<br />XBRL<fn>(Extensible Business Reporting Language)</fn>とは、財務情報が作成・流通・再利用できるように標準化されたXMLベースの言語です<fn>(東京証券取引所HPより。)</fn>。これを利用することで、これまでは統一して扱うことができなかった財務情報を簡単に取り扱うことができるようになります。現在では、東証一部に上場している多くの企業がXBRLで財務情報を公開しています。<br /><br />[web] <a href="http://www.tse.or.jp/rules/td/xbrl/about.html">XBRLとは - 東京証券取引所</a><br />[web] <a href="http://info.edinet-fsa.go.jp/">EDINET</a> (XBRLがダウンロード可能)<br /><br />さて、このXBRLを扱うためのツールも多く存在しますが、Javaでデータを扱いたいという場合もあるでしょう。そのような要求のために、XBRL APIがsourceforgeで提供されています。やや慣れが必要ですが、これを用いることで通常のXMLファイルのように取り扱えるようになれます。<br /><br />[web] <a href="http://www.xbrlapi.org/">XBRLAPI.ORG HOMEPAGE</a> （英語）<br /><br />このAPIを利用するためには数多くのサードパーティAPIが必要になります。以下に、最低限必要なAPIを列挙します。<br />・XBRL API<br />・XBRL Utilities<br />・XML Base<br />・XLink<br />・XML Pointer<br /><br />この他にも、必要に応じて以下のAPIを用いることもあるようです。<br />・Log4j<br />・XML-API<br />・Xerces<br />・JUnit<br />・Xalan<br />・eXist<br />・Xindice<br />・XML:DB<br />・XMl RPC<br />・Apache Commons Logging<br />・db （Berkeley DB Java interface）<br />・xbxml （Berkeley DB XML overlay）<br /><br />これらのAPIは以下のサイトからダウンロードできます。ダウンロードしてきたら、Javaのクラスパスの通っているフォルダに配置します。<br />[web] <a href="https://sourceforge.net/project/showfiles.php?group_id=135539">Java XBRL API Implementation - sourceforge.net</a><br />[web] <a href="http://xbrlapi.svn.sourceforge.net/viewvc/xbrlapi/trunk/java/lib/">XBRL SVN Repository</a><br /><br />そして、Log4jの出力をコンソールにするために、Log4j用のXMLファイルをダウンロードします。<br />[web] <a href="http://xbrlapi.svn.sourceforge.net/viewvc/xbrlapi/trunk/conf/log4j.xml?view=log">/trunk/conf/log4j.xml - XBRL API SVN Repository</a><br /><br />次に、XBRLファイルを処理するためのキャッシュ・ディレクトリを用意します。これは書き込み権限があるディレクトリならどこでもいいので、カレントディレクトリでも、適当なディレクトリにしてもいいでしょう。<br /><br />さて、ここまで来たら実際に使えるか試してみましょう。<br />
<pre class="code">java -jar xbrlapi-api-YYYYMMDD.jar -logger [LOG4J.CONFIG]<br />     -class org.xbrlapi.data.dom.Load -cache [CACHE.LOCATION] [URL]+</pre>[LOG4J.CONFIG] はLog4j用のコンフィグファイルへのパスを指定します。また、同様にして[CACHE.LOCATION]は、キャッシュディレクトリへのパスを指定します。<br /><br />[URL]が、解析をするXBRLファイルへのURLです。<br />これがやや曲者で、ローカルファイルを指定するときは、「file:///」を先頭につけて絶対パスで記述する必要があります。Unix系OSなら書きやすいですが、Windowsの場合は「file:///c:/document/...(略).../xbrl-instance.xml」などと記述する必要があります。<br /><br />この時点で例外が発生する場合は次の点に注意してみましょう。<br />１．クラスパスにライブラリがすべて含まれているか。<br />２．ライブラリの指定の仕方が間違っていないか。（Unix系はコロンで、Windowsはセミコロンでパスを区切ります。）<br />３．XBRLファイルへのURLが間違っていないか。<br /><br /><br />ここまで来れば、XBRL APIに含まれるJUnit用のテストケースを参照することで、なんとなく使えるようになるのではないでしょうか。<br /><br />もしAPI中のJUnitのテストを行うためには、プロパティファイルが必要になります。下記からダウンロードしてください。<br />[web] <a href="http://xbrlapi.svn.sourceforge.net/viewvc/xbrlapi/trunk/test.configuration.properties?view=log">/trunk/test.configuration.properties -XBRL API SVN Repository</a><br />[web] <a href="http://www.xbrlapi.org/installationDocumentation/testConfigurationFile.html">testing configuration file - XBRL.ORG</a> (プロパティファイルのマニュアル)<br /><br />プロパティファイルの「<code>local.cache</code>」というところだけは最低限修正して、下記のコマンドを実行します。<br /><pre class="code">java -Xmx1g -Dxbrlapi.test.configuration=[PATH.TO.CONFIGURATION.FILE]<br />     junit.textui.TestRunner org.xbrlapi.tests.AllTests</pre>[PATH.TO.CONFIGURATION.FILE]は、プロパティファイルへのパスです。<br /><br /><br />最後に、<b>Eclipseで開発を進めたい方</b>に。<br />Eclipseの場合はSubversionから一度にチェックアウトすることが可能です。手動でjarファイルをダウンロードするのが面倒くさい人はこちらの方法を試してみてください。リポジトリのパスは、<b>https://xbrlapi.svn.sourceforge.net/svnroot/xbrlapi</b> です。<br /><br />XBRL APIのDOMLoadingTestCaseクラスやAllTestsクラスのソースは、開発の役に立つと思います。また時間が取れれば、サンプルプログラムも載せてみたいと思っています。]]></description>
            <link>http://trialpc.net/triple/2008/09/xbrl-api.php</link>
            <guid>http://trialpc.net/triple/2008/09/xbrl-api.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Java</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Eclipse</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">XBRL</category>
            
            <pubDate>Fri, 26 Sep 2008 23:41:35 +0900</pubDate>
        </item>
        
        <item>
            <title>Sh: Cygwinで「$&apos;\r&apos;: command not found」と表示される</title>
            <description><![CDATA[aCygwinを使っている時、「<b>$'\r': command not found</b>」というエラーメッセージが表示されることがあります。これは単純に解釈すると、「\rというコマンドはありません」という意味。<br /><br />原因の多くは、Cygwinの改行コードとして「<b>LF</b><fn>(Line Feed。「\r」と同じ。)</fn>」を設定しているのに、実行しているシェルスクリプトの改行コードは「<b>CR＋LF</b>」としているから。解決方法として一番単純なのは、シェルスクリプトの改行コードを「LF」に変換することです。<br />（Cygwinの改行コードを変換したい場合は、Cygwinのインストールで用いたsetup.exeを使うのかな？）<br /><br />改行コードを変換するにはいくつかの方法があります。<br />１．複数の改行コードに対応したテキストエディタで改行コードを変換して保存する。<br />２．nkfコマンドで変換する。<br /><br />１は簡単にできるのでお勧めです。<br />２は、もしcygwinにnkfコマンドが入っていればという前提で「nkf -Lu <i>ファイル名</i>」とすればいいでしょう。<br />]]></description>
            <link>http://trialpc.net/triple/2008/09/sh-cygwinr-command-not-found.php</link>
            <guid>http://trialpc.net/triple/2008/09/sh-cygwinr-command-not-found.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Cygwin</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Cygwin</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">シェル</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">改行コード</category>
            
            <pubDate>Sun, 21 Sep 2008 21:23:13 +0900</pubDate>
        </item>
        
        <item>
            <title>HTML:ブロックレベル要素をセンタリング</title>
            <description><![CDATA[要素にはブロックレベルとインラインレベルの2つの種類に分けることができます。この2つの種類の要素をセンタリングする方法はそれぞれ異なります。ここでは、ブロックレベル要素をセンタリングする方法を示します。<a href="http://www.mozilla.gr.jp/standards/webtips0004.html"></a><br /><br />CSSの仕様通りに全てのブラウザが表示してくれればいいのですが、残念ながら現実は違います。今後の改善を祈りながら、現状での最善策を示します。次のようなHTMLソースがあったとします。<br /><br />
<pre class="code">&lt;div class="outer"&gt;
    &lt;div class="inner"&gt;
        &lt;!-- ここに文章などが記述されている。 --&gt;
    &lt;/div class="inner"&gt;
&lt;/div class="outer"&gt;
</pre>
このような場合、class="inner" のついている要素をセンタリングするには次のようにします。<br /><br />
<pre class="code">.outer {
    text-align: center;
}
.inner {
    margin-left: auto;
    margin-right: auto;
    text-align: justify;
}<br />&nbsp;</pre>
【参考文献】<br />[web] <a href="http://www.mozilla.gr.jp/standards/webtips0004.html">ブロックレベル要素をセンタリングする - Web標準普及プロジェクト</a><br />]]></description>
            <link>http://trialpc.net/triple/2008/03/html.php</link>
            <guid>http://trialpc.net/triple/2008/03/html.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">CSS</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">CSS</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">HTML</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">バグ</category>
            
            <pubDate>Fri, 21 Mar 2008 01:18:20 +0900</pubDate>
        </item>
        
        <item>
            <title>Perlで実数の小数部分を切り捨てる</title>
            <description><![CDATA[Perlで数値計算などを行っていると、実数の小数部分を切り捨てたいと思うことが多くあります。そんな時は、int関数を利用するとよいです。<br /><br />
<pre class="code">$real = 123.456;
print int($real);   # 123
</pre>]]></description>
            <link>http://trialpc.net/triple/2008/03/perl.php</link>
            <guid>http://trialpc.net/triple/2008/03/perl.php</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Perl</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Perl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">実数</category>
            
            <pubDate>Thu, 20 Mar 2008 03:10:02 +0900</pubDate>
        </item>
        
    </channel>
</rss>

