<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Project Zero ブログ</title>
	<atom:link href="http://www.projectzero.org/jblog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.projectzero.org/jblog</link>
	<description>Project Zero ブログ</description>
	<lastBuildDate>Thu, 17 Dec 2009 08:50:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>カスタムzeroコマンドの実装</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/12/17/customcli/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/12/17/customcli/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 08:43:25 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=530</guid>
		<description><![CDATA[sMashでは、標準で実装されている各種zeroコマンドの他に、カスタムzeroコマンドをGroovyやPHP、Javaで実装することが可能です。
http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.cli.tasks/ExtendingCli.html
カスタムzeroコマンドを利用するには、大きく分けて2つの手順が必要です。
1. カスタムzeroコマンドを実装するsMashアプリの作成・公開
2. sMash本体への依存性追加・解決
●1. カスタムzeroコマンドを実装するsMashアプリの作成・公開
まず、アプリケーションを作成します。ここでは、MyCommandsという名前とします。この名前はコマンド名とは無関係です（リポジトリー内のパッケージ名となります）。最終的にsMashのリポジトリーに取り込まれるため、作成する場所はどこでも構いません。
zero create MyCommands

次に、MyCommandsアプリケーションの/config/zero.configを編集します。ここには、コマンド名と、そのコマンドを処理するイベント・ハンドラーを記述します。例えば、&#8221;zero mytask&#8221;コマンドを作成する場合は、以下のように記述します。

# MyTask
/config/handlers += [{
"events": "cliTask",
"handler" : "cliTask.groovy",
"conditions" : "/event/task =~ mytask"
}]

/config/handlersは、イベント・ハンドラーを登録するためのグローバル・コンテキストのキーです。ここには、3つの値をJSON形式で記述します。
http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.core/Config.html#Event_handler_registration

events : イベント名。コマンドの場合は&#8221;cliTask&#8221;という名前を指定しなければなりません。
handler : イベント・ハンドラーの名前。パスを指定しない場合は、/app/scripts内のファイルとして扱われます。
conditions : 実行中の間、有効な値。/event/taskに指定した値がコマンド名になります。また、/event/subTaskに指定した値が、コマンドのサブタスク名になります。

ちなみに、他のポート番号などは、コマンド実行時には全く影響しません。

次に、zero.configで指定したイベント・ハンドラーを実装します。/app/scriptsディレクトリーに、cliTask.groovyを作成し、以下のように記述します。

def onCliTask() {
def task = zget(&#8221;/event/task&#8221;)
System.out.println(&#8221;task name is &#8221; + task)
zget(&#8221;/event/args&#8221;).each{System.out.println(&#8221;arg is &#8221; + it)}
}

このコードでは、onCliTask()メソッドを定義し、タスク名を&#8221;task name is XXXX&#8221;と出力します。また、その後に引数があった場合には、その数だけ&#8221;arg is YYYY&#8221;と出力します。
これで、カスタムコマンドの実装は完了です。このアプリケーションをリポジトリに公開します。MyCommandsディレクトリに戻り、zero packageコマンドと、zero publishコマンドを実行してください。


以上で、アプリケーション側の操作は完了です。最後に、sMashにこのアプリケーションの依存性を追加します。

●2. sMash本体への依存性追加・解決
sMash本体のディレクトリーを開き、config/ivy.xmlファイルを開き、以下の1行を&#60;dependencys&#62;内に追加します。

&#60;dependency name=&#8221;MyCommands&#8221; org=&#8221;zero&#8221; rev=&#8221;[1.0.0.0,)&#8221;/&#62;

これにより、通常のCLIに加え、先ほど作成したコマンドがsMashで使えるようになります。ivy.xmlを保存して終了した後、zero resolveを実行してください。zero resolveが失敗する場合は、アプリケーションの公開に失敗していますので、リポジトリーを確認してください。
今回作成したコマンドの実行例は以下の通りです。



このカスタムコマンドの実行のためにsMashのアプリケーションを起動しておく必要は全くありません。通常のzeroコマンドと同様に利用できます。
]]></description>
			<content:encoded><![CDATA[<p>sMashでは、標準で実装されている各種zeroコマンドの他に、カスタムzeroコマンドをGroovyやPHP、Javaで実装することが可能です。</p>
<p><a href="http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.cli.tasks/ExtendingCli.html">http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.cli.tasks/ExtendingCli.html</a></p>
<p>カスタムzeroコマンドを利用するには、大きく分けて2つの手順が必要です。<br />
1. カスタムzeroコマンドを実装するsMashアプリの作成・公開<br />
2. sMash本体への依存性追加・解決</p>
<h4>●1. カスタムzeroコマンドを実装するsMashアプリの作成・公開</h4>
<p>まず、アプリケーションを作成します。ここでは、MyCommandsという名前とします。この名前はコマンド名とは無関係です（リポジトリー内のパッケージ名となります）。最終的にsMashのリポジトリーに取り込まれるため、作成する場所はどこでも構いません。<br />
zero create MyCommands<br />
<br />
次に、MyCommandsアプリケーションの/config/zero.configを編集します。ここには、コマンド名と、そのコマンドを処理するイベント・ハンドラーを記述します。例えば、&#8221;zero mytask&#8221;コマンドを作成する場合は、以下のように記述します。<br />
<br />
# MyTask<br />
/config/handlers += [{<br />
"events": "cliTask",<br />
"handler" : "cliTask.groovy",<br />
"conditions" : "/event/task =~ mytask"<br />
}]<br />
<br />
/config/handlersは、イベント・ハンドラーを登録するためのグローバル・コンテキストのキーです。ここには、3つの値をJSON形式で記述します。<br />
<a href="http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.core/Config.html#Event_handler_registration">http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.core/Config.html#Event_handler_registration</a></p>
<ul>
<li>events : イベント名。コマンドの場合は&#8221;cliTask&#8221;という名前を指定しなければなりません。</li>
<li>handler : イベント・ハンドラーの名前。パスを指定しない場合は、/app/scripts内のファイルとして扱われます。</li>
<li>conditions : 実行中の間、有効な値。/event/taskに指定した値がコマンド名になります。また、/event/subTaskに指定した値が、コマンドのサブタスク名になります。</li>
</ul>
<p>ちなみに、他のポート番号などは、コマンド実行時には全く影響しません。<br />
<br />
次に、zero.configで指定したイベント・ハンドラーを実装します。/app/scriptsディレクトリーに、cliTask.groovyを作成し、以下のように記述します。<br />
<br />
def onCliTask() {<br />
def task = zget(&#8221;/event/task&#8221;)<br />
System.out.println(&#8221;task name is &#8221; + task)<br />
zget(&#8221;/event/args&#8221;).each{System.out.println(&#8221;arg is &#8221; + it)}<br />
}<br />
<br />
このコードでは、onCliTask()メソッドを定義し、タスク名を&#8221;task name is XXXX&#8221;と出力します。また、その後に引数があった場合には、その数だけ&#8221;arg is YYYY&#8221;と出力します。<br />
これで、カスタムコマンドの実装は完了です。このアプリケーションをリポジトリに公開します。MyCommandsディレクトリに戻り、zero packageコマンドと、zero publishコマンドを実行してください。</p>
<div>
<div id="attachment_532" class="wp-caption alignnone" style="width: 832px"><img class="size-full wp-image-532" src="http://www.projectzero.org/jblog/wp-content/uploads/2009/12/WS000011.JPG" alt="mytaskコマンドのpublish" width="500" /><p class="wp-caption-text">mytaskコマンドのpublish</p></div>
</div>
<p>以上で、アプリケーション側の操作は完了です。最後に、sMashにこのアプリケーションの依存性を追加します。<br />
</p>
<h4>●2. sMash本体への依存性追加・解決</h4>
<p>sMash本体のディレクトリーを開き、config/ivy.xmlファイルを開き、以下の1行を&lt;dependencys&gt;内に追加します。<br />
<br />
&lt;dependency name=&#8221;MyCommands&#8221; org=&#8221;zero&#8221; rev=&#8221;[1.0.0.0,)"/&gt;<br />
<br />
これにより、通常のCLIに加え、先ほど作成したコマンドがsMashで使えるようになります。ivy.xmlを保存して終了した後、zero resolveを実行してください。zero resolveが失敗する場合は、アプリケーションの公開に失敗していますので、リポジトリーを確認してください。<br />
今回作成したコマンドの実行例は以下の通りです。</p>
<div>
<div id="attachment_531" class="wp-caption alignnone" style="width: 406px"><img class="size-full wp-image-531" src="http://www.projectzero.org/jblog/wp-content/uploads/2009/12/WS000010.JPG" alt="mytaskコマンド実行例" width="396" height="88" /><p class="wp-caption-text">mytaskコマンド実行例</p></div>
</div>
<p>
このカスタムコマンドの実行のためにsMashのアプリケーションを起動しておく必要は全くありません。通常のzeroコマンドと同様に利用できます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/12/17/customcli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>アジャイルWebアプリケーション開発からクラウドまで</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/11/12/%e3%82%a2%e3%82%b8%e3%83%a3%e3%82%a4%e3%83%abweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e9%96%8b%e7%99%ba%e3%81%8b%e3%82%89%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/11/12/%e3%82%a2%e3%82%b8%e3%83%a3%e3%82%a4%e3%83%abweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e9%96%8b%e7%99%ba%e3%81%8b%e3%82%89%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 23:00:05 +0000</pubDate>
		<dc:creator>nobusue</dc:creator>
				<category><![CDATA[ビデオ]]></category>
		<category><![CDATA[sMash]]></category>
		<category><![CDATA[渋谷テクニカルナイト]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=522</guid>
		<description><![CDATA[アジャイルWebアプリケーション開発からクラウドまで Project (Zero/WebSphere sMash最新情報) 1 by 樽澤 広亨 / 須江 信洋 
]]></description>
			<content:encoded><![CDATA[<p>アジャイルWebアプリケーション開発からクラウドまで Project (Zero/WebSphere sMash最新情報) 1 by 樽澤 広亨 / 須江 信洋<br />
<a href="http://www.projectzero.org/jblog/index.php/2009/11/12/%e3%82%a2%e3%82%b8%e3%83%a3%e3%82%a4%e3%83%abweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e9%96%8b%e7%99%ba%e3%81%8b%e3%82%89%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89/"><p><em>Click here to view the embedded video.</em></p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/11/12/%e3%82%a2%e3%82%b8%e3%83%a3%e3%82%a4%e3%83%abweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e9%96%8b%e7%99%ba%e3%81%8b%e3%82%89%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sMash V1.1.1.1の開発環境構築手順</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/11/04/smash-v1-1-1-1/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/11/04/smash-v1-1-1-1/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 03:28:13 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[Hints & Tips]]></category>
		<category><![CDATA[はじめてみよう]]></category>
		<category><![CDATA[ドキュメント]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=514</guid>
		<description><![CDATA[このエントリーでは、sMash V1.1.1.1での開発環境の構築手順をご紹介します。eclipseもv3.5がリリースされましたので、そちらを利用した方法もご紹介します。
●設定手順
eclipseは導入済みという前提で紹介しますので、eclipseが必要な方はeclipseをダウンロードしてください。バージョンは3.2以上のものを使用して下さい。また、PHPの開発環境の構築するにはeclipseのPHP用のプラグインであるPDTが必要です。PDT導入済みのeclipseを手に入れるには、PDＴ all in one packageをダウンロードする方法が便利です。

V1.0の環境からのマイグレーションの場合は、以前のバージョンのプラグインをアンインストールします。
・Eclipse 3.4の場合 : Help &#62; Software Updates &#62; Installed Software
・Eclipse 3.2の場合 : Help &#62; Software Updates &#62; Manage Configuration
Project Zero公式サイトから、sMash V1.1.1.1をダウンロードします。
zipファイルを解凍し、解凍してできたzeroフォルダを任意の場所に配置します。
zeroフォルダに移動し、zeroコマンドを実行します。例えば、Windowsの場合はコマンドプロンプトを立ち上げ、以下のコマンドを実行します(&#60;zero_root&#62;はzeroディレクトリを配置した先のzeroディレクトリ内を示す)。
cd &#60;zero_root&#62;
./zero
eclipseを起動し、アップデートサイトの追加ダイアログを表示させます。
・Eclipse 3.5の場合 : Help &#62; Software Updates &#62; &#8220;Add site&#8221;
・Eclipse 3.4の場合 : Help &#62; Software Updates &#62; Installed Software &#62; &#8220;Search for new features to install&#8221; &#62; Next &#62; [...]]]></description>
			<content:encoded><![CDATA[<p>このエントリーでは、sMash V1.1.1.1での開発環境の構築手順をご紹介します。eclipseもv3.5がリリースされましたので、そちらを利用した方法もご紹介します。</p>
<h4>●設定手順</h4>
<p>eclipseは導入済みという前提で紹介しますので、eclipseが必要な方はeclipseをダウンロードしてください。バージョンは3.2以上のものを使用して下さい。また、PHPの開発環境の構築するにはeclipseのPHP用のプラグインであるPDTが必要です。PDT導入済みのeclipseを手に入れるには、PDＴ all in one packageをダウンロードする方法が便利です。</p>
<ol>
<li>V1.0の環境からのマイグレーションの場合は、以前のバージョンのプラグインをアンインストールします。<br />
・Eclipse 3.4の場合 : Help &gt; Software Updates &gt; Installed Software<br />
・Eclipse 3.2の場合 : Help &gt; Software Updates &gt; Manage Configuration</li>
<li><a href="http://www.projectzero.org/sMash/1.1.x/download/" target="_blank">Project Zero公式サイトから、sMash V1.1.1.1をダウンロードします。</a></li>
<li>zipファイルを解凍し、解凍してできたzeroフォルダを任意の場所に配置します。</li>
<li>zeroフォルダに移動し、zeroコマンドを実行します。例えば、Windowsの場合はコマンドプロンプトを立ち上げ、以下のコマンドを実行します(&lt;zero_root&gt;はzeroディレクトリを配置した先のzeroディレクトリ内を示す)。<br />
cd &lt;zero_root&gt;<br />
./zero</li>
<li>eclipseを起動し、アップデートサイトの追加ダイアログを表示させます。<br />
・Eclipse 3.5の場合 : Help &gt; Software Updates &gt; &#8220;Add site&#8221;<br />
・Eclipse 3.4の場合 : Help &gt; Software Updates &gt; Installed Software &gt; &#8220;Search for new features to install&#8221; &gt; Next &gt; &#8220;New Remote Site&#8221;<br />
・Eclipse 3.2の場合 : Help &gt; Software Updates &gt; Manage Configuration &gt; &#8220;Search for new features to install&#8221; &gt; Next&gt; &#8220;New Remote Site&#8221;<br />
※マイグレーションの場合は、以前の更新サイトの設定をクリックし、Removeボタンをクリックして設定を削除します。</li>
<li>sMash pluginのアップデートサイトを入力します。現在の最新のアップデートサイトのURLは以下のとおりです。<br />
http://www.projectzero.org/zero/monza.dev/latest/update/zero.eclipse</li>
<li>PHP開発環境も同時に構築する場合には、もう一度ダイアログを表示し、URLに以下のものを指定し、OKをクリックします。ただし、eclipse 3.5の場合は、一度に導入できませんので、インストール後に再度、上記URLを入力してください。<br />
http://www.projectzero.org/zero/monza.dev/latest/update/zero.eclipse.php</li>
<li>Finishをクリックします。</li>
<li>Update Managerが起動し、Updateの一覧が表示されます。必要なものにチェックを入れ、&#8221;Next&#8221;をクリックします。すべてにチェックを入れても問題ありませんが、PHPのpluginを入れた場合には、PDTのバージョンに該当するものを入れてください。
<div style="text-align: center">
<dl>
<dt><a href="http://www.projectzero.org/jblog/wp-content/uploads/2009/01/ws000001.jpg"><img style="padding: 0px;margin: 0px;border: 0px none initial" src="http://www.projectzero.org/jblog/wp-content/uploads/2009/01/ws000001-300x254.jpg" alt="インストールするフィーチャーの選択" width="300" height="254" /></a></dt>
<dd>インストールするフィーチャーの選択</dd>
</dl>
</div>
</li>
<li>プログラム使用条件を確認し、&#8221;I accept the terms in the license agreements&#8221;を選択し、&#8221;Next&#8221;をクリックします。</li>
<li>インストール先の指定を確認し、変更する場合は&#8221;Change Location&#8221;から設定を行います(通常変更する必要はありません)。最後に、&#8221;Finish&#8221;をクリックします。</li>
<li>Update Managerが起動し、プラグインのインストール作業が行われます。途中、Verificationのウィンドウが表示されます。確認し、&#8221;Install&#8221;ボタンをクリックして下さい。</li>
<li>インストール完了後、再起動の確認ダイアログが表示されますので、&#8221;Yes&#8221;をクリックします。</li>
<li>再起動後、Window &gt; Preferences&#8230; をクリックします。</li>
<li>メニューの&#8221;WebSphere sMash&#8221;を選択し、以下の設定を行います。<br />
・&#8221;Zero home&#8221;には、手順3で配置したzeroディレクトリーを指定します。<br />
・&#8221;Module Group&#8221;にはstableを選択します。<br />
・Automatic responce to dependency changes in the workspaceには、依存性変更時に自動で行われる動作を設定します。stableモジュールグループを使用している場合には、Run updateを選択しないようにします。<br />
設定が終わったらOKを押します。</p>
<div style="text-align: center">
<dl>
<dt><a href="http://www.projectzero.org/jblog/wp-content/uploads/2009/01/ws000003.jpg"><img style="padding: 0px;margin: 0px;border: 0px none initial" src="http://www.projectzero.org/jblog/wp-content/uploads/2009/01/ws000003-300x256.jpg" alt="CLIのディレクトリとモジュール・グループの指定" width="300" height="256" /></a></dt>
<dd>CLIのディレクトリとモジュール・グループの指定</dd>
</dl>
</div>
</li>
<li>V1.0からマイグレーションを行った場合に、以下のディレクトリが存在する場合、削除して下さい。<br />
&lt;workspace_directory&gt;\.metadata\.plugins\zero.cli.api\AppRoot\.zero\private\MG</li>
<li>V1.0からマイグレーションを行った場合には、必要に応じて、各プロジェクトをUpdateして下さい(右クリックメニューからWebSphere sMash Tools &gt; Update)。</li>
<li>環境をUTF-8に統一するため、eclipse.iniを開き、以下の１行を追加するか、eclipse.exeのショートカットを作成して、下記のオプション値を利用するように設定してください。<br />
-Dfile.encoding=UTF-8</li>
</ol>
<p>以上で設定は完了です。これで最新の環境とモジュールが利用可能になりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/11/04/smash-v1-1-1-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>sMash a Office : WordとPowerPointファイルのテキストを取得</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/04/23/smash-a-office-2/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/04/23/smash-a-office-2/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 05:59:34 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[Groovyでいこう]]></category>
		<category><![CDATA[Hints & Tips]]></category>
		<category><![CDATA[はじめてみよう]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=509</guid>
		<description><![CDATA[
先日の記事では、Apache POIを利用して、Excelのデータを取得する方法を書きました。今回は、WordとPowerPointのテキストを取得してみましょう。この機能を利用すれば、WordやPowerPointファイルの中身までキーワード検索したり、特定の禁止用語などが含まれていないかチェックすることが可能です。
まず、Wordのテキストを取得するコードは、このようになります。
java.io.FileInputStream fs = new java.io.FileInputStream(file_path);
WordExtractor we = new WordExtractor(fs);
String text = we.getText();
file_pathには、ファイルのパスを入力してください。これで、変数textに、Wordに書かれたテキストが全て格納されます。
次に、PowerPointのテキストを取得するコードです。
java.io.FileInputStream fs = new java.io.FileInputStream(file_path);
HSLFSlideShow hsss = new HSLFSlideShow(fs);
SlideShow ss= new SlideShow(hsss);
Slide[] slides = ss.getSlides();
String text = "";
for (int i = 0; i &#60; slides.length; i++) {
TextRun[] textruns = slides[i].getTextRuns(); 
for (int j = 0; j &#60; textruns.length; j++) {
text += textruns[j].getRawText();
}
}
これで、全てのテキストを変数textに格納することができます。また、Slideクラスの配列の数字が、ページ番号に対応しますので、何ページにその単語があるのかを調べることも簡単に行えます。
]]></description>
			<content:encoded><![CDATA[<div>
<p><a href="http://www.projectzero.org/jblog/index.php/2009/04/14/smash-a-office/" target="_blank">先日の記事</a>では、Apache POIを利用して、Excelのデータを取得する方法を書きました。今回は、WordとPowerPointのテキストを取得してみましょう。この機能を利用すれば、WordやPowerPointファイルの中身までキーワード検索したり、特定の禁止用語などが含まれていないかチェックすることが可能です。</p>
<p>まず、Wordのテキストを取得するコードは、このようになります。</p>
<p><code>java.io.FileInputStream fs = new java.io.FileInputStream(file_path);<br />
WordExtractor we = new WordExtractor(fs);<br />
String text = we.getText();</code></p>
<p>file_pathには、ファイルのパスを入力してください。これで、変数textに、Wordに書かれたテキストが全て格納されます。</p>
<p>次に、PowerPointのテキストを取得するコードです。</p>
<p><code>java.io.FileInputStream fs = new java.io.FileInputStream(file_path);<br />
HSLFSlideShow hsss = new HSLFSlideShow(fs);<br />
SlideShow ss= new SlideShow(hsss);<br />
Slide[] slides = ss.getSlides();<br />
String text = "";<br />
for (int i = 0; i &lt; slides.length; i++) {<br />
TextRun[] textruns = slides[i].getTextRuns(); <br />
for (int j = 0; j &lt; textruns.length; j++) {<br />
text += textruns[j].getRawText();<br />
}<br />
}</code></p>
<p>これで、全てのテキストを変数textに格納することができます。また、Slideクラスの配列の数字が、ページ番号に対応しますので、何ページにその単語があるのかを調べることも簡単に行えます。</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/04/23/smash-a-office-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP on sMash &#8211; 第16回 PHP/Groovy Bridge</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/04/20/groovy-bridge/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/04/20/groovy-bridge/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 23:51:42 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[PHPでいこう]]></category>
		<category><![CDATA[Groovy Bridge]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[v1.1]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=482</guid>
		<description><![CDATA[PHP on sMash 第16回は、Groovy Bridgeです。前回はJava Bridgeを紹介しましたが、v1.1からGroovyのクラスを利用できるようになりました。これによって、既存資産がJavaであっても、Groovyであっても、そのクラスをPHPから利用してコードを書くことができるようになりました。それでは、始めていきましょう。

●概要
Groovy Bridgeの行い方は、基本的にJava Bridgeとほぼ同じで、クラスのインポートを行う関数がjava_importからgroovy_importに変わっただけです。Groovy特有の内容としては、インポート以外にも直接Groovyコードを実行できるgroovy_evalや、クロージャーを作成するgroovy_create_closureといった関数が用意されていることです。クロージャーはPHP5.3で利用可能になる予定ですが、sMashでは現在のところ、PHP5.2.3をベースとしているため、クロージャーを利用するにはこの関数を利用する必要があります。
とりあえず、最初は基本的な手順として、クラスをインポートして、そのクラスのメソッドを実行してみましょう。内容は、こちらのガイドとほぼ同様です。
●インポートするGroovyクラスを作成
まず、javaフォルダにImport.groovyとして、Groovyのクラスを1つ作りましょう。
class Import {
def public FIELD = "こんにちは！";
def public static VALUE = "Staticな値です";
def getMessage() {
return "関数です";
}
def static getStaticMessage() {
return "静的関数です";
}
}
次に、このクラスを利用するPHPスクリプトを書きます。ここでは、public/index.phpとします。
&#60;?php
groovy_import("import.groovy");
//Staticな関数や値を操作する
echo Import::getStaticMessage()."\n";
echo Import::$VALUE."\n";
Import::$VALUE = "代入された値です";
echo Import::$VALUE."\n";
//クラスのインスタンスを生成して操作する
$foo = new Import();
echo $foo-&#62;getMessage()."\n";
echo $foo-&#62;FIELD."\n";
$foo-&#62;FIELD = "代入された値です";
echo $foo-&#62;FIELD."\n";
?&#62;
作成できたら、アプリケーションを起動して、index.phpにアクセスしてみて下さい。次のように表示されていれば成功です。
静的関数です
Staticな値です
代入された値です
関数です
こんにちは！
代入された値です
このように、GroovyクラスをPHPから利用することができました。Groovy Bridgeの発表資料はslideshare.netで公開されていますので、ご覧下さい。
]]></description>
			<content:encoded><![CDATA[<p>PHP on sMash 第16回は、Groovy Bridgeです。前回はJava Bridgeを紹介しましたが、v1.1からGroovyのクラスを利用できるようになりました。これによって、既存資産がJavaであっても、Groovyであっても、そのクラスをPHPから利用してコードを書くことができるようになりました。それでは、始めていきましょう。</p>
<p><span id="more-482"></span></p>
<p>●概要</p>
<p>Groovy Bridgeの行い方は、基本的にJava Bridgeとほぼ同じで、クラスのインポートを行う関数が<a href="http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.php/apidoc/xapidoc/java/java_import.html" target="_blank">java_import</a>から<a href="http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.php/apidoc/xapidoc/groovy/groovy_import.html" target="_blank">groovy_import</a>に変わっただけです。Groovy特有の内容としては、インポート以外にも直接Groovyコードを実行できる<a href="http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.php/apidoc/xapidoc/groovy/groovy_eval.html">groovy_eval</a>や、クロージャーを作成する<a href="http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.php/apidoc/xapidoc/groovy/groovy_create_closure.html">groovy_create_closure</a>といった関数が用意されていることです。クロージャーはPHP5.3で利用可能になる予定ですが、sMashでは現在のところ、PHP5.2.3をベースとしているため、クロージャーを利用するにはこの関数を利用する必要があります。</p>
<p>とりあえず、最初は基本的な手順として、クラスをインポートして、そのクラスのメソッドを実行してみましょう。内容は、<a href="http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.php/ZeroAdvancedPHPGroovyBridge.html" target="_blank">こちらのガイド</a>とほぼ同様です。</p>
<p>●インポートするGroovyクラスを作成</p>
<p>まず、javaフォルダにImport.groovyとして、Groovyのクラスを1つ作りましょう。</p>
<p><code>class Import {<br />
def public FIELD = "こんにちは！";<br />
def public static VALUE = "Staticな値です";<br />
def getMessage() {<br />
return "関数です";<br />
}<br />
def static getStaticMessage() {<br />
return "静的関数です";<br />
}<br />
}</code></p>
<p>次に、このクラスを利用するPHPスクリプトを書きます。ここでは、public/index.phpとします。<br />
<code>&lt;?php<br />
groovy_import("import.groovy");<br />
//Staticな関数や値を操作する<br />
echo Import::getStaticMessage()."\n";<br />
echo Import::$VALUE."\n";<br />
Import::$VALUE = "代入された値です";<br />
echo Import::$VALUE."\n";<br />
//クラスのインスタンスを生成して操作する<br />
$foo = new Import();<br />
echo $foo-&gt;getMessage()."\n";<br />
echo $foo-&gt;FIELD."\n";<br />
$foo-&gt;FIELD = "代入された値です";<br />
echo $foo-&gt;FIELD."\n";<br />
?&gt;</code></p>
<p>作成できたら、アプリケーションを起動して、index.phpにアクセスしてみて下さい。次のように表示されていれば成功です。</p>
<p><code>静的関数です<br />
Staticな値です<br />
代入された値です<br />
関数です<br />
こんにちは！<br />
代入された値です</code></p>
<p>このように、GroovyクラスをPHPから利用することができました。<a href="http://www.slideshare.net/AntPhillips/groovy-bridge-presentation">Groovy Bridgeの発表資料はslideshare.netで公開されています</a>ので、ご覧下さい。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/04/20/groovy-bridge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebSphere sMash 1.1.0.1がリリースされました</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/04/20/leman/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/04/20/leman/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 22:33:47 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[Fixpack Bug fix V1.1]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=479</guid>
		<description><![CDATA[英語Blogでも既に告知されていますが、sMash v1.1.0向けのfixpack1がリリースされました。リポジトリはこちらです。
fixpack1で修正されたBugのリストは、こちらにあります。
Bug8008やBug8149など日本語関連のBugもいくつか修正されていますので、v1.1をご利用になっていて、phpBBやSugarCRMの日本語版をテストしてみる際は、こちらのfixpackを適用してください。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.projectzero.org/blog/index.php/2009/04/17/announcing-ibm-websphere-smash-1101/" target="_blank">英語Blogでも既に告知されています</a>が、sMash v1.1.0向けのfixpack1がリリースされました。<a href="http://download.boulder.ibm.com/ibmdl/export/pub/software/websphere/smash/1.1.x/repo/" target="_blank">リポジトリはこちら</a>です。</p>
<p><a href="http://www.projectzero.org/wiki/Development/Fixpack-1_1_0_1" target="_blank">fixpack1で修正されたBugのリストは、こちら</a>にあります。</p>
<p><a href="https://www.projectzero.org/bugzilla/show_bug.cgi?id=8008" target="_blank">Bug8008</a>や<a href="https://www.projectzero.org/bugzilla/show_bug.cgi?id=8149" target="_blank">Bug8149</a>など日本語関連のBugもいくつか修正されていますので、v1.1をご利用になっていて、phpBBやSugarCRMの日本語版をテストしてみる際は、こちらのfixpackを適用してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/04/20/leman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sMash plug-inがPDT2.0をサポートしました</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/04/20/pdt2/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/04/20/pdt2/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 22:28:45 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[Hints & Tips]]></category>
		<category><![CDATA[PHPでいこう]]></category>
		<category><![CDATA[お知らせ]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=485</guid>
		<description><![CDATA[こちらも英語Blogで既に告知されていたのですが、eclipseのPHP用プラグインであるPDT2.0を、sMash eclipse plug-inがサポートしました。既にPDT2.0を利用されている場合は、plug-inのアップデートを行ってください。
plug-inのアップデートを行うには、eclipseのメニューから以下の手順を行います。
Help &#62; Software Updates &#62; Available Software タブ &#62; zero.eclipse.phpを展開 &#62; WebSphere sMash for PDT 2.0.x にチェックを入れる &#62; 右上のInstallボタンをクリック
後は画面の指示に従って、Install作業を行います。インストールするフィーチャーを選択する際に、PDT 1.0.xを選択しないように注意して下さい（for PDT 1.0.xと2.0.xを両方インストールしてしまうと、プロジェクト作成時に&#8221;sMash PHP application&#8221;が2つ表示されてしまいます）。インストールしてしまった場合は、Installed SoftwareからWebSphere sMash PDT Featureを選択し、Uninstallボタンをクリックしてください。
ちなみに、eclipseでの開発環境を0から整える方法は、こちらで紹介しています。PDT all-in-one package自体は、こちらからダウンロードしてください（DebuggerはsMash plug-inに含まれているため、必要ありません）。
]]></description>
			<content:encoded><![CDATA[<p><a title="Permanent Link to Support for PDT 2.0 now available in sMash eclipse Plugins" rel="bookmark" href="http://www.projectzero.org/blog/index.php/2009/04/09/support-for-pdt-20-now-available-in-smash-eclipse-plugins/">こちらも英語Blogで既に告知されていたのですが、</a>eclipseのPHP用プラグインであるPDT2.0を、sMash eclipse plug-inがサポートしました。既にPDT2.0を利用されている場合は、plug-inのアップデートを行ってください。</p>
<p>plug-inのアップデートを行うには、eclipseのメニューから以下の手順を行います。</p>
<p><strong>Help &gt; Software Updates &gt; Available Software タブ &gt; zero.eclipse.phpを展開 &gt; WebSphere sMash for PDT 2.0.x にチェックを入れる &gt; 右上のInstallボタンをクリック</strong></p>
<p>後は画面の指示に従って、Install作業を行います。インストールするフィーチャーを選択する際に、PDT 1.0.xを選択しないように注意して下さい（for PDT 1.0.xと2.0.xを両方インストールしてしまうと、プロジェクト作成時に&#8221;sMash PHP application&#8221;が2つ表示されてしまいます）。インストールしてしまった場合は、Installed SoftwareからWebSphere sMash PDT Featureを選択し、Uninstallボタンをクリックしてください。</p>
<p>ちなみに、<a href="http://www.projectzero.org/jblog/index.php/2009/01/13/329/" target="_blank">eclipseでの開発環境を0から整える方法は、こちら</a>で紹介しています。<a href="http://www.eclipse.org/pdt/downloads/" target="_blank">PDT all-in-one package自体は、こちらからダウンロード</a>してください（DebuggerはsMash plug-inに含まれているため、必要ありません）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/04/20/pdt2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sMashのロケール設定</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/04/16/locale/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/04/16/locale/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 04:41:30 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[Hints & Tips]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[メッセージ]]></category>
		<category><![CDATA[ログ]]></category>
		<category><![CDATA[ロケール]]></category>
		<category><![CDATA[英語]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=472</guid>
		<description><![CDATA[sMashのログ・メッセージなどは、システム･ロケールを参照しているため、特にロケール設定を行う箇所はありません。そのため、日本語環境では、デフォルトで日本語でログ・メッセージが表示されます。
この設定を変えるためには、JVMのオプション値 -Duser.language=(ロケール名) を与えて、明示的にロケールを設定する必要があります。例えば、英語でログ・メッセージを表示させたい場合は、-Duser.language=enを与える必要があります。
CLIのロケール設定を変えるには、zero.bat (zero.sh)をエディターで開き、set ZERO_OPTS=-Duser.language=enという行を追加します。eclipseの場合は、起動オプションに上記のオプションを追加します（Run as &#62; Run configurations &#62; (アプリケーション名) &#62; Argumentsタブ &#62; VM arguments &#62; -Duser.language=enを追記）。
]]></description>
			<content:encoded><![CDATA[<p>sMashのログ・メッセージなどは、システム･ロケールを参照しているため、特にロケール設定を行う箇所はありません。そのため、日本語環境では、デフォルトで日本語でログ・メッセージが表示されます。</p>
<p>この設定を変えるためには、JVMのオプション値 -Duser.language=(ロケール名) を与えて、明示的にロケールを設定する必要があります。例えば、英語でログ・メッセージを表示させたい場合は、-Duser.language=enを与える必要があります。</p>
<p>CLIのロケール設定を変えるには、zero.bat (zero.sh)をエディターで開き、set ZERO_OPTS=-Duser.language=enという行を追加します。eclipseの場合は、起動オプションに上記のオプションを追加します（Run as &gt; Run configurations &gt; (アプリケーション名) &gt; Argumentsタブ &gt; VM arguments &gt; -Duser.language=enを追記）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/04/16/locale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sMash a Office</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/04/14/smash-a-office/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/04/14/smash-a-office/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 07:18:48 +0000</pubDate>
		<dc:creator>KenTa</dc:creator>
				<category><![CDATA[PHPでいこう]]></category>
		<category><![CDATA[はじめてみよう]]></category>
		<category><![CDATA[Excel Word Powerpoint Office PHP]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=465</guid>
		<description><![CDATA[sMashでは、Apache POIをモジュールとして提供しています。Apache POIは、Microsoft Officeのファイルを操作するAPIを提供するJavaのモジュールです。これを利用することで、sMashで容易にApache POIの利用環境を作ることができます。また、Java Bridgeを利用することで、PHPを用いてMicrosoft Officeのファイルを操作することが可能です。
●利用するための準備
Apache POIは、zero.office.integrationという名前で提供されています。このモジュールへの依存性を、ivy.xmlに追加します。これで準備は完了です。
●Excelファイルを作ってみる
まず最初に、Excelファイルを生成してみましょう。せっかくですので、ここではPHPでやってみましょう。generate.phpとして、次のファイルをpublicフォルダに作成してください（コピー&#38;ペーストするとダブルクォーテーションが全角になるので注意して下さい）。
&#60;?php
 java_import(&#8221;java.io.FileOutputStream&#8221;);
 java_import(&#8221;org.apache.poi.hssf.usermodel.HSSFWorkbook&#8221;);
 java_import(&#8221;org.apache.poi.poifs.filesystem.POIFSFileSystem&#8221;);
 $filedir = zget(&#8221;/config/root&#8221;).&#8221;\\public\\sMash.xls&#8221;;
 try{
  //新規ワークブックを作成する
  $wb = new HSSFWorkbook();
  $fileOut = new FileOutputStream($filedir);
   //新規ワークシートを作成する
  $sheet = $wb-&#62;createSheet();
  $wb-&#62;setSheetName(0, &#8220;シート01&#8243;, $wb-&#62;ENCODING_UTF_16);
  //A1に日本語を書き込む
  $row = $sheet-&#62;createRow(0);
  $cell = $row-&#62;createCell(0);
  $cell-&#62;setEncoding($wb-&#62;ENCODING_UTF_16);
  $cell-&#62;setCellValue(&#8221;sMashでExcelファイルを作りました！&#8221;);
//終了処理
  $wb-&#62;write($fileOut);
  $fileOut-&#62;close();
  echo(&#8221;Excelファイルの作成が完了しました！&#8221;);
} catch (Exception $e)　{
echo $e;
echo(&#8221;処理が失敗しました&#8221;);
}
?&#62;
作成したら、sMashアプリケーションを起動し、http://localhost:8080/generate.phpにアクセスしてみてください。publicフォルダ内にsMash.xlsファイルが生成されているはずです。
●Excelファイルを読み込んでみる
では、そのExcelファイルを読み込んで、PHPで文字列として表示してみましょう。read.phpとして、次のファイルをpublicフォルダに作成してください（コピー&#38;ペーストするとダブルクォーテーションが全角になるので注意して下さい）。
&#60;?php
 java_import(&#8221;java.io.FileInputStream&#8221;);
 java_import(&#8221;org.apache.poi.hssf.usermodel.HSSFWorkbook&#8221;);
 java_import(&#8221;org.apache.poi.poifs.filesystem.POIFSFileSystem&#8221;);
 $filedir = zget(&#8221;/config/root&#8221;).&#8221;\\public\\sMash.xls&#8221;;
 try{
//ファイル読み込み
  $filein = new POIFSFileSystem(new FileInputStream($filedir));
//1つ目のシートの、A1を示すセルのオブジェクトを取得する
$wb = new HSSFWorkbook($filein);
$sheet = $wb-&#62;getSheet($wb-&#62;getSheetName(0));
  $row = $sheet-&#62;getRow(0);
  $cell = $row-&#62;getCell(0);
//文字列を取得し、出力
  echo $cell-&#62;getStringCellValue();
 }  catch (Exception $e)　{
  echo $e;
  echo(&#8221;処理が失敗しました&#8221;);
 }
?&#62;
作成したら、sMashアプリケーションを起動し、http://localhost:8080/read.phpにアクセスしてみてください。&#8221;sMashでExcelファイルを作りました！&#8221;と表示されていれば成功です。
●参考情報
他にもApache POIでは、計算式を読み込んだり、セルにコメントを追加したり、そのコメントを読み込んだり、様々なAPIが提供されています。詳細については、Apache POIのWebサイトをご参照下さい。http://poi.apache.org/
]]></description>
			<content:encoded><![CDATA[<p>sMashでは、Apache POIをモジュールとして提供しています。Apache POIは、Microsoft Officeのファイルを操作するAPIを提供するJavaのモジュールです。これを利用することで、sMashで容易にApache POIの利用環境を作ることができます。また、<strong>Java Bridgeを利用することで、PHPを用いてMicrosoft Officeのファイルを操作することが可能</strong>です。</p>
<p><strong>●利用するための準備</strong></p>
<p>Apache POIは、<strong>zero.office.integration</strong>という名前で提供されています。このモジュールへの依存性を、ivy.xmlに追加します。これで準備は完了です。</p>
<h4>●Excelファイルを作ってみる</h4>
<p>まず最初に、Excelファイルを生成してみましょう。せっかくですので、ここではPHPでやってみましょう。generate.phpとして、次のファイルをpublicフォルダに作成してください（コピー&amp;ペーストするとダブルクォーテーションが全角になるので注意して下さい）。</p>
<p>&lt;?php<br />
 java_import(&#8221;java.io.FileOutputStream&#8221;);<br />
 java_import(&#8221;org.apache.poi.hssf.usermodel.HSSFWorkbook&#8221;);<br />
 java_import(&#8221;org.apache.poi.poifs.filesystem.POIFSFileSystem&#8221;);<br />
 $filedir = zget(&#8221;/config/root&#8221;).&#8221;\\public\\sMash.xls&#8221;;<br />
 try{<br />
  //新規ワークブックを作成する<br />
  $wb = new HSSFWorkbook();<br />
  $fileOut = new FileOutputStream($filedir);</p>
<p>   //新規ワークシートを作成する<br />
  $sheet = $wb-&gt;createSheet();<br />
  $wb-&gt;setSheetName(0, &#8220;シート01&#8243;, $wb-&gt;ENCODING_UTF_16);</p>
<p>  //A1に日本語を書き込む<br />
  $row = $sheet-&gt;createRow(0);<br />
  $cell = $row-&gt;createCell(0);<br />
  $cell-&gt;setEncoding($wb-&gt;ENCODING_UTF_16);<br />
  $cell-&gt;setCellValue(&#8221;sMashでExcelファイルを作りました！&#8221;);</p>
<p>//終了処理<br />
  $wb-&gt;write($fileOut);<br />
  $fileOut-&gt;close();<br />
  echo(&#8221;Excelファイルの作成が完了しました！&#8221;);<br />
} catch (Exception $e)　{<br />
echo $e;<br />
echo(&#8221;処理が失敗しました&#8221;);<br />
}<br />
?&gt;</p>
<p>作成したら、sMashアプリケーションを起動し、http://localhost:8080/generate.phpにアクセスしてみてください。publicフォルダ内にsMash.xlsファイルが生成されているはずです。</p>
<p>●Excelファイルを読み込んでみる</p>
<p>では、そのExcelファイルを読み込んで、PHPで文字列として表示してみましょう。read.phpとして、次のファイルをpublicフォルダに作成してください（コピー&amp;ペーストするとダブルクォーテーションが全角になるので注意して下さい）。</p>
<p>&lt;?php<br />
 java_import(&#8221;java.io.FileInputStream&#8221;);<br />
 java_import(&#8221;org.apache.poi.hssf.usermodel.HSSFWorkbook&#8221;);<br />
 java_import(&#8221;org.apache.poi.poifs.filesystem.POIFSFileSystem&#8221;);<br />
 $filedir = zget(&#8221;/config/root&#8221;).&#8221;\\public\\sMash.xls&#8221;;<br />
 try{<br />
//ファイル読み込み<br />
  $filein = new POIFSFileSystem(new FileInputStream($filedir));</p>
<p>//1つ目のシートの、A1を示すセルのオブジェクトを取得する<br />
$wb = new HSSFWorkbook($filein);<br />
$sheet = $wb-&gt;getSheet($wb-&gt;getSheetName(0));<br />
  $row = $sheet-&gt;getRow(0);<br />
  $cell = $row-&gt;getCell(0);</p>
<p>//文字列を取得し、出力<br />
  echo $cell-&gt;getStringCellValue();<br />
 }  catch (Exception $e)　{<br />
  echo $e;<br />
  echo(&#8221;処理が失敗しました&#8221;);<br />
 }<br />
?&gt;</p>
<p>作成したら、sMashアプリケーションを起動し、http://localhost:8080/read.phpにアクセスしてみてください。&#8221;sMashでExcelファイルを作りました！&#8221;と表示されていれば成功です。</p>
<p>●参考情報</p>
<p>他にもApache POIでは、計算式を読み込んだり、セルにコメントを追加したり、そのコメントを読み込んだり、様々なAPIが提供されています。詳細については、Apache POIのWebサイトをご参照下さい。<a href="http://poi.apache.org/">http://poi.apache.org/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/04/14/smash-a-office/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>File Upload</title>
		<link>http://www.projectzero.org/jblog/index.php/2009/03/11/file-upload/</link>
		<comments>http://www.projectzero.org/jblog/index.php/2009/03/11/file-upload/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 04:04:39 +0000</pubDate>
		<dc:creator>nobusue</dc:creator>
				<category><![CDATA[Hints & Tips]]></category>

		<guid isPermaLink="false">http://www.projectzero.org/jblog/?p=463</guid>
		<description><![CDATA[画像共有サイトなどを構築する場合、ファイルアップロード処理が必要になります。
sMashはファイルアップロード処理も容易に実装することができるのですが、ドキュメントにあまり詳しい記述がないようなので、簡単にまとめておきます。
Forumを検索すると、以下のスレッドがヒットします。
https://www.projectzero.org/forum/viewtopic.php?f=4&#38;t=984&#38;p=4125
どうやら、普通にmultipart/form-dataでPOSTすれば、勝手にmultipartがdecodeされ、ファイル実体への参照はグローバルコンテキスト(/request/files)に格納されるようです。
HTMLの方はこんな感じ。
[public/testUpload.gt]
&#60;html&#62;
&#60;head&#62;
&#60;style type=&#8221;text/css&#8221;&#62;
@import &#8220;&#60;%= getRelativeUri(&#8221;/dijit/themes/tundra/tundra.css&#8221;) %&#62;&#8221;;
&#60;/style&#62;
&#60;script type=&#8221;text/javascript&#8221;
src=&#8221;&#60;%= getRelativeUri(&#8221;/dojo/dojo.js&#8221;) %&#62;&#8221;
djConfig=&#8221;parseOnLoad: true&#8221;&#62;&#60;/script&#62;
&#60;script type=&#8221;text/javascript&#8221;&#62;
dojo.require(&#8221;dijit.form.Form&#8221;);
dojo.require(&#8221;dijit.form.TextBox&#8221;);
dojo.require(&#8221;dijit.form.Button&#8221;);
&#60;/script&#62;
&#60;/head&#62;
&#60;body class=&#8221;tundra&#8221;&#62;
&#60;form dojoType=&#8221;dijit.form.Form&#8221; id=&#8221;myForm&#8221; name=&#8221;myform1&#8243;
encType=&#8221;multipart/form-data&#8221; action=&#8221;testUpload.groovy&#8221; method=&#8221;POST&#8221; onSubmit=&#8221;"&#62;
&#60;input dojoType=&#8221;dijit.form.TextBox&#8221; name=&#8221;file1&#8243; type=&#8221;file&#8221;&#62;&#60;br/&#62;
&#60;input dojoType=&#8221;dijit.form.TextBox&#8221; name=&#8221;file1&#8243; type=&#8221;file&#8221;&#62;&#60;br/&#62;
&#60;input dojoType=&#8221;dijit.form.TextBox&#8221; name=&#8221;file1&#8243; type=&#8221;file&#8221;&#62;&#60;br/&#62;
&#60;button dojoType=&#8221;dijit.form.Button&#8221; type=&#8221;submit&#8221;&#62;送信&#60;/button&#62;
&#60;/form&#62;
&#60;/body&#62;
&#60;/html&#62;
サーバー側のコードはこんな感じです。
[public/testUpload.groovy]
def onPOST() {
def files = request.files
def filelist = files['file1']
logger.INFO{ &#8220;Uploaded Files: &#8221; + filelist.size().toString() }
logger.INFO{ &#8220;Information: ${filelist.toString()}&#8221; }
filelist.each{ file -&#62;
def src = new File(file['path'])
new File(&#8221;${config.root[]}/tmp/${file['filename']}&#8221;).withOutputStream{ out -&#62;
src.eachByte{ out.write(it) [...]]]></description>
			<content:encoded><![CDATA[<p>画像共有サイトなどを構築する場合、ファイルアップロード処理が必要になります。<br />
sMashはファイルアップロード処理も容易に実装することができるのですが、ドキュメントにあまり詳しい記述がないようなので、簡単にまとめておきます。</p>
<p>Forumを検索すると、以下のスレッドがヒットします。<br />
<a href="https://www.projectzero.org/forum/viewtopic.php?f=4&amp;t=984&amp;p=4125">https://www.projectzero.org/forum/viewtopic.php?f=4&amp;t=984&amp;p=4125</a><br />
どうやら、普通にmultipart/form-dataでPOSTすれば、勝手にmultipartがdecodeされ、ファイル実体への参照はグローバルコンテキスト(/request/files)に格納されるようです。</p>
<p>HTMLの方はこんな感じ。</p>
<p>[public/testUpload.gt]</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
@import &#8220;&lt;%= getRelativeUri(&#8221;/dijit/themes/tundra/tundra.css&#8221;) %&gt;&#8221;;<br />
&lt;/style&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;<br />
src=&#8221;&lt;%= getRelativeUri(&#8221;/dojo/dojo.js&#8221;) %&gt;&#8221;<br />
djConfig=&#8221;parseOnLoad: true&#8221;&gt;&lt;/script&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
dojo.require(&#8221;dijit.form.Form&#8221;);<br />
dojo.require(&#8221;dijit.form.TextBox&#8221;);<br />
dojo.require(&#8221;dijit.form.Button&#8221;);<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body class=&#8221;tundra&#8221;&gt;<br />
&lt;form dojoType=&#8221;dijit.form.Form&#8221; id=&#8221;myForm&#8221; name=&#8221;myform1&#8243;<br />
encType=&#8221;multipart/form-data&#8221; action=&#8221;testUpload.groovy&#8221; method=&#8221;POST&#8221; onSubmit=&#8221;"&gt;<br />
&lt;input dojoType=&#8221;dijit.form.TextBox&#8221; name=&#8221;file1&#8243; type=&#8221;file&#8221;&gt;&lt;br/&gt;<br />
&lt;input dojoType=&#8221;dijit.form.TextBox&#8221; name=&#8221;file1&#8243; type=&#8221;file&#8221;&gt;&lt;br/&gt;<br />
&lt;input dojoType=&#8221;dijit.form.TextBox&#8221; name=&#8221;file1&#8243; type=&#8221;file&#8221;&gt;&lt;br/&gt;<br />
&lt;button dojoType=&#8221;dijit.form.Button&#8221; type=&#8221;submit&#8221;&gt;送信&lt;/button&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>サーバー側のコードはこんな感じです。</p>
<p>[public/testUpload.groovy]</p>
<p>def onPOST() {<br />
def files = request.files<br />
def filelist = files['file1']</p>
<p>logger.INFO{ &#8220;Uploaded Files: &#8221; + filelist.size().toString() }<br />
logger.INFO{ &#8220;Information: ${filelist.toString()}&#8221; }</p>
<p>filelist.each{ file -&gt;<br />
def src = new File(file['path'])<br />
new File(&#8221;${config.root[]}/tmp/${file['filename']}&#8221;).withOutputStream{ out -&gt;<br />
src.eachByte{ out.write(it) }<br />
}<br />
}</p>
<p>println &#8220;&lt;h2&gt;File Received&lt;/h2&gt;&#8221;<br />
}</p>
<p>グローバルコンテキスト /request/files には、「ファイル情報のMapの配列のMap」が格納されています。ちょっとわかりづらいですが、上の例で言うと</p>
<p>def filelist = files['file1']</p>
<p>のところで、Formで定義されているfile要素のうち、nameが&#8217;file1&#8242;のものを取り出しています。同じnameを持つfile要素が複数ある可能性があるので、Mapの配列になっているわけです。</p>
<p>あとは、それぞれのMapに格納されているファイル名やファイルパスを参照すればOKです。簡単でしょう？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.projectzero.org/jblog/index.php/2009/03/11/file-upload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
