<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>in a Stream</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/" />
    <link rel="self" type="application/atom+xml" href="http://www.brainsellers.com/blog/inastream/atom.xml" />
    <id>tag:www.brainsellers.com,2009-07-23:/blog/inastream//4</id>
    <updated>2010-09-08T00:35:11Z</updated>
    <subtitle>BrainSellers.com 中の人 技術スタッフによる情報発信</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Commercial 4.25</generator>

<entry>
    <title>軽量フレームワーク Sinatra</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/09/-sinatra.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1282</id>

    <published>2010-09-08T00:29:39Z</published>
    <updated>2010-09-08T00:35:11Z</updated>

    <summary>今回はrubyの軽量フレームワーク Sinatra の紹介です。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ruby" label="Ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sinatra" label="Sinatra" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<!-- Important options, and finally the main call -->
<script type="text/javascript">
 SyntaxHighlighter.config.tagName = "pre" // use pre tags
 SyntaxHighlighter.config.stripBrs = false  // disregard trailing 
 SyntaxHighlighter.all()
</script>

<p>こちらのフレームワークは"簡潔さ"が売りです。</p>
<p>複数人で組む開発ではなく、一人の担当者が短期間で</p>
<p>（簡単なシステムを）構築する場合に効果的だと思われます。</p>

<p>簡単な利用方法は公式ページに<a href="http://www.sinatrarb.com/intro-jp.html" target="_blank" title="日本語版">日本語版</a> 
もあるので、困らないと思います。</p>

<p>今回はこれを利用して、ログファイルを表示する簡単なcgiを作成します</p>

<p>私が今回利用したFedoraLinuxでは、以下でインストールが出来ました。</p>
<pre>
  yum install rubygem-sinatra.noarch
</pre>

<p>手始めの簡易なログビューアーですので</p>
<ol class="list-A01">
<li>１：ログファイルを読み込む</li>
<li>２：HTMLのテンプレートを読み込む</li>
<li>３：表示</li>
</ol>
<p>の、シンプルな物です。</p>
<p>さらに1ファイルに収めるためにビューはヒアドキュメントを使いました。</p>
<br />
<dl class="code-block-A01">
<dt>《 log_viewer.rb 》</dt>
<dd>
<pre class="brush: ruby; wrap-lines: true">
require 'rubygems'
require 'sinatra'
require 'kconv'

log_file = "/var/log/httpd/access.log"
html = "ヒアドキュメント"

get '/' do
  buff = nil
  open(log_file){|f| buff = f.read }
  Kconv.tosjis(html.gsub(/\$\{yeild\}/,buff))
end
</pre>
</dd>
</dl>

<dl class="code-block-A01">
<dt>《 ヒアドキュメント部分 》</dt>
<dd>
<pre class="brush: html; wrap-lines: true">

&lt;html&gt;
&lt;head&gt;
   &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Shift-JIS&quot;&gt;
   &lt;meta http-equiv=&quot;content-style-type&quot; content=&quot;text/css&quot;&gt;
   &lt;title&gt;簡易ログビューアー&lt;/title&gt;
   &lt;style type=&quot;text/css&quot;&gt;
      *.logbox
      {
         border: solid 1px #808080;
         width: 960px;
         height: 640px;
         padding: 0.5em;
         overflow: auto;
      }
      q  { color: #008000; }
   &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
   &lt;h1&gt;簡易ログビューアー&lt;/h1&gt;
   &lt;div class=&quot;logbox&quot;&gt;
     &lt;pre&gt;${yeild}&lt;/pre&gt;
   &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;


</pre>
</dd>
</dl>

<p>こちらを手っ取り早く起動します</p>
<p>サンプルコード内のヒアドキュメントは適宜置き換えてください。（blog内での表示上の理由）</p>
<pre>
 ruby log_viewer.rb
</pre>

<br />

<p>これをブラウザからアクセスすると...</p>


<div class="imageblock">
<img src="/blog/inastream/img/logviewer.png" width="566" height="350"  alt="wikiのFrontPage" />
</div>

<p>と、簡潔に機能を作る事が出来るのです！</p>

<hr />
<p>
皆様、これからもbiz-Streamをよろしくお願い致します。<br />
また、初めてこちらのサイトをご覧になり、<br />biz-Streamに関心を持って頂いた方は是非、
下のボタンよりお気軽にお問い合わせ下さい。<br />
</p>
]]>
        
    </content>
</entry>

<entry>
    <title>Clojureでの開発環境</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/08/clojure-02.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1281</id>

    <published>2010-08-30T06:23:15Z</published>
    <updated>2010-08-30T07:00:10Z</updated>

    <summary>今回は、Clojureの開発環境について紹介しましょう。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="clojars" label="Clojars" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="clojure" label="Clojure" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="counterclockwise" label="Counterclockwise" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="eclipse" label="Eclipse" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="maven" label="Maven" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<!-- Important options, and finally the main call -->
<script type="text/javascript">
 SyntaxHighlighter.config.tagName = "pre" // use pre tags
 SyntaxHighlighter.config.stripBrs = false  // disregard trailing 
 SyntaxHighlighter.all()
</script>
<p>
Clojureユーザには、LISPユーザが多いらしく、<a href="http://www.gnu.org/software/emacs/" target="_blank">Emacs</a>系開発環境が人気のようです。<br />
代表的なものとしては、
</p>
<ul class="default">	
	<li><a href="http://www.gnu.org/software/emacs/" target="_blank">Emacs</a> + <a href="http://wiki.github.com/technomancy/leiningen/" target="_blank">Leiningen</a></li>
</ul>
<p>
といった組み合わせがよく使用されていて、さまざまなツールも用意されているようです。<br />
<a href="http://wiki.github.com/technomancy/leiningen/" target="_blank">Leiningen</a>は、Clojure用の開発ツールで、Java開発における<a href="http://maven.apache.org/" target="_blank">Maven</a>に相当するものです。<br />
普通に、Mavenリポジトリも使用可能です。<br />
ですから、Clojure単体での開発ならば、これで十分です。
</p>
<p>
しかし、私のようにJavaからClojureを呼び出すような開発をしたい場合、<br />
普段から使用している<a href="http://www.eclipse.org/" target="_blank">Eclipse</a>環境で開発したいと思いますよね。
</p>
<p>
今回は、<a href="http://www.eclipse.org/" target="_blank">Eclipse</a>を使う以下の環境を紹介します。
</p>
<ul class="default">
	<li><a href="http://www.eclipse.org/" target="_blank">Eclipse</a> + <a href="http://code.google.com/p/counterclockwise/" target="_blank">Counterclockwise</a> + <a href="http://maven.apache.org/" target="_blank">Maven</a> + <a href="http://github.com/talios/clojure-maven-plugin" target="_blank">clojure-maven-plugin</a> + <a href="http://clojars.org/" target="_blank">Clojars</a>
	<ul class="default">
		<li><a href="http://code.google.com/p/counterclockwise/" target="_blank">Counterclockwise</a>は、Clojure開発用のEclipseプラグインです。</li>
		<li><a href="http://github.com/talios/clojure-maven-plugin" target="_blank">clojure-maven-plugin</a>は、Clojure開発用のMavenプラグインです。</li>
		<li><a href="http://clojars.org/" target="_blank">Clojars</a>は、Clojureのライブラリ群を集めた公開リポジトリです。</li>
	</ul></li>
</ul>

<div class="float-block-R01">
<div class="imageblock">
<img alt="Eclipseでのメニュー" src="/blog/inastream/img/blog-20100827-Eclipse-Menu_003.png" width="231" height="384" />
<!-- /.imageblock --></div>
<div class="textblock">
<p class="first-child">
それでは、環境構築の手順を順番にみていきましょう。<br />
以下の説明は、Eclipse + Maven でのJava開発の経験があり、<br />
その開発環境が既に手元にあることを前提にしています。
</p>
<ol class="default">
	<li>まず、Eclipse + Maven の Java開発環境を用意します。</li>
	<li><a href="http://code.google.com/p/counterclockwise/" target="_blank">Counterclockwise</a>をEclipseにインストールします。<br />インストール方法は、リンク先を参照してください。<br />尚、Eclipse3.6であれば、Eclipse Marketplace から簡単に探してインストールすることができます。</li>
	<li><a href="http://github.com/talios/clojure-maven-plugin" target="_blank">clojure-maven-plugin</a>をインストールします。<br />ソースコード配布の形態なので、リンク先からソースアーカイブをダウンロードして、ローカルで展開し、展開先のディレクトリで、<strong>mvn install</strong> を実効します。</li>
	<li>Eclipseを起動し、Clojure/Java開発で使用するJavaのMavenプロジェクトを新規作成またはインポートします。</li>
	<li>EclipseのProject Explore Viewで使用するプロジェクトを選択し<br />[右クリック]-[Enable/disable clojure language support]<br /><strong>（右図参照）</strong></li>
	<li>プロジェクト配下に以下のフォルダを作成する。<br />	src/main/clojure<br />	src/test/clojure</li>
	<li>プロジェクトのpom.xmlに以下の要素を追加する。

<dl class="code-block-A01">
<dt>《 pom.xmlへの追加部分 》</dt>
<dd><pre class="brush: xml; wrap-lines: false">
&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.clojure&lt;/groupId&gt;
        &lt;artifactId&gt;clojure&lt;/artifactId&gt;
        &lt;version&gt;1.2.0&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.clojure&lt;/groupId&gt;
        &lt;artifactId&gt;clojure-contrib&lt;/artifactId&gt;
        &lt;version&gt;1.2.0&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;swank-clojure&lt;/groupId&gt;
        &lt;artifactId&gt;swank-clojure&lt;/artifactId&gt;
        &lt;version&gt;1.2.1&lt;/version&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt; 
&lt;repositories&gt;
    &lt;repository&gt;
        &lt;id&gt;clojars&lt;/id&gt;
        &lt;url&gt;http://clojars.org/repo&lt;/url&gt;
    &lt;/repository&gt;
    &lt;repository&gt;
        &lt;id&gt;clojure-releases&lt;/id&gt;
        &lt;url&gt;http://build.clojure.org/releases&lt;/url&gt;
        &lt;releases&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
        &lt;/releases&gt;
        &lt;snapshots&gt;
            &lt;enabled&gt;false&lt;/enabled&gt;
        &lt;/snapshots&gt;
            &lt;/repository&gt;
&lt;/repositories&gt;
&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;com.theoryinpractise&lt;/groupId&gt;
            &lt;artifactId&gt;clojure-maven-plugin&lt;/artifactId&gt;
            &lt;version&gt;1.3.3&lt;/version&gt;
            &lt;executions&gt;
                &lt;execution&gt;
                    &lt;id&gt;compile-clojure&lt;/id&gt;
                    &lt;phase&gt;compile&lt;/phase&gt;
                    &lt;goals&gt;
                        &lt;goal&gt;compile&lt;/goal&gt;
                    &lt;/goals&gt;
                &lt;/execution&gt;
                &lt;execution&gt;
                    &lt;id&gt;test-clojure&lt;/id&gt;
                    &lt;phase&gt;test&lt;/phase&gt;
                    &lt;goals&gt;
                        &lt;goal&gt;test&lt;/goal&gt;
                    &lt;/goals&gt;
                &lt;/execution&gt;
            &lt;/executions&gt;
            &lt;configuration&gt;
                &lt;sourceDirectories&gt;
                    &lt;sourceDirectory&gt;src/main/clojure&lt;/sourceDirectory&gt;
                &lt;/sourceDirectories&gt;
                &lt;testSourceDirectories&gt;
                    &lt;testSourceDirectory&gt;src/test/clojure&lt;/testSourceDirectory&gt;
                &lt;/testSourceDirectories&gt;
            &lt;/configuration&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;
</pre>
</dd>
</dl>
</li>

	<li>プロジェクトの.classpathファイルを編集する。
<dl class="code-block-A01">
<dt>《 .classpathファイルの追加部分 》</dt>
<dd><pre class="brush: xml; wrap-lines: false">
&lt;classpath&gt;
    &lt;classpathentry kind="src" path="src/main/clojure" /&gt;
    &lt;classpathentry kind="src" path="src/test/clojure" /&gt;
&lt;/classpath&gt;
</pre>
</dd>
</dl>
<dl class="code-block-A01">
<dt>《 .classpathファイルの削除部分 》</dt>
<dd><pre class="brush: xml; wrap-lines: false">
&lt;classpath&gt;
    &lt;classpathentry kind="lib" path="clojure.jar" sourcepath="clojure-src.jar"/&gt;
    &lt;classpathentry kind="lib" path="clojure-contrib.jar" sourcepath="clojure-contrib-src.jar"/&gt;
&lt;/classpath&gt;
</pre>
</dd>
</dl>
</li>
</ol>
<!-- /.textblock --></div>
<!-- /.float-block-R01 --></div>

<p>いかがでしたでしょうか。<br />
単体パッケージのインストールで完了というわけにはいきませんが、それほど困難を伴うものではありません。<br />
さらに、今回紹介した<a href="http://clojars.org/" target="_blank">Clojars</a>には、Clojureユーザたちが作った様々なライブラリが集められています。<br />
一度、覗いてみて、いろいろ試してみてはいかがでしょうか。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ドキュメント変換ツールJODConverterを用いて、Office文書を変換するには２</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/08/jodconverteroffice-1.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1280</id>

    <published>2010-08-24T08:28:16Z</published>
    <updated>2010-08-24T08:31:23Z</updated>

    <summary>では、前回の続きでお手軽でcoolなこのツールをQAの業務でどのように使っているのかを紹介したいと思います。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="in a Stream" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="jodconverter" label="JODConverter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="openoffice" label="OpenOffice" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<p>まず、<a href="/product/bizstream/?utm_source=ias&amp;utm_medium=blog&amp;utm_campaign=blog_ias" target="_blank">超高速高性能銀河系No.1</a>と帳票ツールの<a href="http://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A2%E3%83%AB%E3%83%BB%E3%83%9E%E3%83%89%E3%83%AA%E3%83%BC%E3%83%89" target="_blank">レアル・マドリード</a>と呼ばれる、<br />
弊社biz-Streamの製品の内、<a href="/support/2010/06/biz-stream_excel.html?utm_source=ias&amp;utm_medium=blog&amp;utm_campaign=blog_ias" target="_blank">Excel／CSV 書き出し機能</a>のテストに使用しています。</p>

<p>Excel／CSV 書き出し機能って何？<br />
Excel 書き出し機能は、レイアウトデザイナで生成されたレイアウトファイルをExcel ファイル形式で出力する機能です。</p>

<p>では具体的に何をテストの指標としているのかって、<br />
Excelは開いて保存するとすぐフォーマットが変わってしまったり、属性やFontまでコロッとお手軽に変わってしまうから、<br />
いくら出力されたExcelファイルを目視で確認しても、手がくるってセルをクリックだのしてしまったり、<br />
プロパティを開いてしまってなにか別の設定に切り替わっちゃうと<br />
全く別物になってしまってお手上げっす。<br />
じゃぁもっと視覚的に、属性だけをかいつまんで確認できないかなって<br />
模索していたら出てきたのが馴れ初めです。<br />
具体的にどうしているのかって、</p>

<p>１．まず、Excelファイルをドキュメント変換ツールJODConverterを用いてOpenOfficeファイルにコンバートします。</p>

<dl class="code-block-A01">
<dt>《 JODConverer実行 》</dt>
<dd>
<pre><code>&gt; java -jar lib/jodconverter-cli-2.2.2.jar c:\Sample8.xls(input-document)  c:\Sample8.ods(output-document)
</code></pre>
</dd>
</dl>

<p><a href="http://www.artofsolving.com/node/13" target="_blank">コマンドの詳細</a></p>

<div class="float-block-C"> 
<div class="imageblock"> 
<img src="/blog/inastream/img/100820_Sample8_xls.jpg" width="640" height="500" alt="JODConverterで変換前のExcelファイル" />
<p class="caption">《 JODConverterで変換前のExcelファイル 》</p>
<!-- /. imageblock --></div> 
<!-- /.float-block-C --></div>

<div class="float-block-C"> 
<div class="imageblock"> 
<img src="/blog/inastream/img/100820_Sample8_ods.jpg" width="640" height="500" alt="JODConverterで変換後のOpenOfficeファイル" />
<p class="caption">《 JODConverterで変換後のOpenOfficeファイル 》</p>
<!-- /. imageblock --></div> 
<!-- /.float-block-C --></div>

<p>２．コンバートしたファイルをzipファイル形式に置換します。</p>

<dl class="code-block-A01">
<dt>《 zipファイル形式置換実行 》</dt>
<dd>
<pre><code>C:\&gt; rename c:\Sampe8.ods(input-document)  c:\Sample8.zip(output-document)
</code></pre>
</dd>
</dl>

<p>３．置換したzipファイルを解凍します。</p>

<dl class="code-block-A01">
<dt>《 解凍実行 》</dt>
<dd>
<pre><code>C:\&gt; unzip  c:\Sample8.zip(output-document)
</code></pre>
</dd>
</dl>

<div class="float-block-C"> 
<div class="imageblock"> 
<img src="/blog/inastream/img/100820_Sample8_unzip.jpg" width="640" height="600" alt="解凍後のファイル" />
<p class="caption">《 一度zip形式に圧縮したのを解凍 》</p>
<!-- /. imageblock --></div> 
<!-- /.float-block-C --></div> 

<p>そうすると不思議な事にods型式かと思いきや、そうではなく、xml型式やら何やら色んなのが現れます。<br />
一度zip形式に圧縮したのを解凍したxml形式のファイルの内、<br />
content.xmlというファイルを<a href="/blog/inastream/2010/05/xml.html" target="_blank">前々回</a>お伝えした<a href="http://www.vector.co.jp/soft/win95/net/se205249.html" target="_blank">eXeed</a>というxmlエディッタで開いてみます。</p>

<div class="float-block-C"> 
<div class="imageblock"> 
<img src="/blog/inastream/img/100820_Sample8_eXeed.jpg" width="640" height="512" alt="解凍したcontent.xml eXeedで表示" />
<p class="caption">《 解凍したcontent.xml 》</p>
<!-- /. imageblock --></div> 
<!-- /.float-block-C --></div> 

<p>色々なタグが階層ごとに事細かにでており、なんのこっちゃっという状態の中<br />
という訳で、いよいよ次回は、色々なタグの内table:table-cellというタグの内容について着目します。<br />
具体的にQAの業務でどのように使っているのかを、お知らせしたいと思います。</p>]]>
        
    </content>
</entry>

<entry>
    <title><![CDATA[Scala 実践編(4) biz-Stream Webサービスサーバを使った例&lt;後編&gt;]]></title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/08/scala-4-biz-stream-web.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1279</id>

    <published>2010-08-16T03:00:00Z</published>
    <updated>2010-08-16T05:35:12Z</updated>

    <summary>今回は，前回作成したSOAPメッセージを実際にbiz-Stream Webサービスサーバに送ってみたいと思います．</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bizstream" label="biz-Stream" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="scala" label="Scala" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<!-- Important options, and finally the main call -->
<script type="text/javascript">
 SyntaxHighlighter.config.tagName = "pre" // use pre tags
 SyntaxHighlighter.config.stripBrs = false  // disregard trailing 
 SyntaxHighlighter.all()
</script>

<p><a href="/blog/inastream/2010/07/scala-3-biz-stream-web.html">前回の「Scala 実践編(3) biz-Stream Webサービスサーバを使った例&lt;前編&gt;」</a>は，Webサービスサーバへ送信するためのSOAPメッセージを構築するところまで説明しました．<br />その際に，指定したファイル名でPDFファイルをWebサービスサーバ上のコンテンツリポジトリへ出力するように指示していましたが，せっかくなので今回はWebサービスサーバのクライアント側にPDFファイルデータを返す例にSOAPメッセージ部分を変更しました．</p>

<p>出力例は次のとおりです．</p>

<div class="float-block-C">
<div class="imageblock"><a href="/blog/inastream/archive/biz-scala4.pdf"><img src="/blog/inastream/img/100811biz-scala4.jpg" width="600" height="400" alt="作成したPDF" /></a>
<p class="caption">《 Scalaからbiz-Streamへデータを流し込んで作成したPDF(Webサービスサーバ版) 》</p>
<!-- /. imageblock --></div>
<!-- /.float-block-C --></div>

<p>ソースコードは次のようになります．</p>

<dl class="code-block-A01">
<dt>《 Scalaからbiz-Stream Webサービスサーバへデータを送りPDFを生成するソースコード(完全版) 》</dt>
<dd>
<pre class="brush: scala; wrap-lines: false">
package wssclient

import dispatch.{:/, Http}
import java.io._

object wss_client {
  val FILE_NAME = "output_test.pdf"

  val DATASOURCE_NAME = "app-resource"
  val COL1 = "col1"
  val COL2 = "col2"
  val COL3 = "col3"

  val RESOURCE_NAME = "resource1"

  def main(args: Array[String]) {
    val layoutXml =
    &lt;fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:pdf="http://www.brainsellers.com/schema" xmlns:svg="http://www.brainsellers.com/schema" xmlns:bs="http://www.brainsellers.com/schema" xmlns:form="http://www.brainsellers.com/schema"&gt;
      &lt;bs:datasource-master-set&gt;
          &lt;bs:application-data-resource-master master-name={DATASOURCE_NAME}/&gt;
        &lt;bs:application-data-master master-name="app-field"&gt;
            &lt;bs:application-data-statement master-reference={DATASOURCE_NAME}/&gt;
        &lt;/bs:application-data-master&gt;
        &lt;bs:datasource-master master-name="app-source" position="inherit"&gt;
            &lt;bs:application-data-master-reference master-reference="app-field"/&gt;
        &lt;/bs:datasource-master&gt;
      &lt;/bs:datasource-master-set&gt;
      &lt;fo:layout-master-set&gt;
        &lt;fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm"&gt;
          &lt;fo:region-body&gt;
            &lt;fo:region-before extent="0"&gt;
              &lt;fo:region-after extent="0"&gt;
                &lt;fo:region-start extent="0"&gt;
                  &lt;fo:region-end extent="0"&gt;
                  &lt;/fo:region-end&gt;
                &lt;/fo:region-start&gt;
              &lt;/fo:region-after&gt;
            &lt;/fo:region-before&gt;
          &lt;/fo:region-body&gt;
        &lt;/fo:simple-page-master&gt;
      &lt;/fo:layout-master-set&gt;
      &lt;fo:page-sequence master-reference="A4"&gt;
        &lt;fo:flow flow-name="xsl-region-body"&gt;
          &lt;bs:block-container&gt;
            &lt;!-- ページレイアウト定義開始 --&gt;
            &lt;Layout width="210mm" height="297mm" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:bs="http://www.brainsellers.com/schema" xmlns:svg="http://www.brainsellers.com/schema" xmlns:form="http://www.brainsellers.com/schema" xmlns:pdf="http://www.brainsellers.com/schema"&gt;
              &lt;flow-area name="flow-area" x="14" y="280" width="180" height="260" master-reference="app-source" no-data-disabled="false"&gt;
                &lt;flow-table line-height="10" record-type="header" view="page" border-color="0,255,255"&gt;
                  &lt;flow-table-cell cell-width="60" align="horizon" text-align="left" cell-align="bottom" narrow="size"&gt;
                    &lt;Label Width="60" Height="10" Horizon="center" Vertical="center" Vector="horizon" FontSize="12" FontStyle="BOLD" Narrow="horizon"&gt;col1&lt;/Label&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="30" align="horizon" text-align="left" cell-align="bottom" narrow="size"&gt;
                    &lt;Label Width="30" Height="10" Horizon="center" Vertical="center" Vector="horizon" FontSize="12" FontStyle="BOLD" Narrow="horizon"&gt;col2&lt;/Label&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="90" align="horizon" text-align="left" cell-align="bottom" narrow="size"&gt;
                    &lt;Label Width="90" Height="10" Horizon="center" Vertical="center" Vector="horizon" FontSize="12" FontStyle="BOLD" Narrow="horizon"&gt;col3&lt;/Label&gt;
                  &lt;/flow-table-cell&gt;
                &lt;/flow-table&gt;
                &lt;flow-table record-type="details" view="layout"&gt;
                  &lt;flow-table-cell cell-width="60" border-color="0,255,255" cell-align="top" narrow="size"&gt;
                      &lt;multi-text name={COL1} cell-width="60" font-size="11" margin="start:1;end:1;top:1;bottom:1"/&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="30" border-color="0,255,255" cell-align="top" narrow="size"&gt;
                      &lt;multi-text name={COL2} cell-width="30" font-size="11" margin="start:1;end:1;top:1;bottom:1"/&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="90" border-color="0,255,255" cell-align="top" narrow="size"&gt;
                      &lt;multi-text name={COL3} cell-width="90" font-size="11" margin="start:1;end:1;top:1;bottom:1"/&gt;
                  &lt;/flow-table-cell&gt;
                &lt;/flow-table&gt;
              &lt;/flow-area&gt;
            &lt;/Layout&gt;
            &lt;!-- ページレイアウト定義完了 --&gt;
          &lt;/bs:block-container&gt;
        &lt;/fo:flow&gt;
      &lt;/fo:page-sequence&gt;
    &lt;/fo:root&gt;

    val layoutString = layoutXml.toString

    val records = List(
      Map(1 -&gt; "data1", 2 -&gt; "data2", 3 -&gt; "data3"),
      Map(1 -&gt; "data2_1", 2 -&gt; "data2_2", 3 -&gt; "data2_3"),
      Map(1 -&gt; "data3_1", 2 -&gt; "data3_2", 3 -&gt; "data3_3"))

    val soapMessage =
    &lt;soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns="http://schemas.brainsellers.com/webservices/bizstream/2006-10" xmlns:ns1="http://schemas.brainsellers.com/webservices/common/2006-10" xmlns:xm="http://www.w3.org/2005/05/xmlmime"&gt;
        &lt;soap:Header/&gt;
      &lt;soap:Body&gt;
        &lt;generateDataRequest
        xmlns="http://schemas.brainsellers.com/webservices/bizstream/2006-10"
        xmlns:common="http://schemas.brainsellers.com/webservices/common/2006-10"&gt;
          &lt;dataType&gt;
            &lt;pdf/&gt;
          &lt;/dataType&gt;
          &lt;resource&gt;
            &lt;resourceData name={RESOURCE_NAME}&gt;
              &lt;applicationData masterName={DATASOURCE_NAME}&gt;
                &lt;recordData&gt;
                  &lt;header&gt;
                      &lt;headerColumn value={COL1}/&gt;
                      &lt;headerColumn value={COL2}/&gt;
                      &lt;headerColumn value={COL3}/&gt;
                  &lt;/header&gt;{records.map(record =&gt;
                  &lt;detail&gt;
                      &lt;detailColumn value={record(1)}/&gt;
                      &lt;detailColumn value={record(2)}/&gt;
                      &lt;detailColumn value={record(3)}/&gt;
                  &lt;/detail&gt;)}
                &lt;/recordData&gt;
              &lt;/applicationData&gt;
            &lt;/resourceData&gt;
          &lt;/resource&gt;
          &lt;layoutData&gt;
            &lt;layoutDefinition dataReference={RESOURCE_NAME}&gt;
              {layoutString}
            &lt;/layoutDefinition&gt;
          &lt;/layoutData&gt;
        &lt;/generateDataRequest&gt;
      &lt;/soap:Body&gt;
    &lt;/soap:Envelope&gt;

    val tempStream = new ByteArrayOutputStream
    val http = new Http
    val url = :/("wss_server_host_name", 8080) / "axis2/services/bizstream.BizstreamSOAP12port/"
    val authed = url as ("bizuser1", "bizuser1")
    val req = authed &lt;:&lt; Map("content-type" -&gt; """application/soap+xml;charset=utf-8;action="urn:generateData"""")
    val soapReq = req &lt;&lt; soapMessage.toString
    http(soapReq &gt;&gt;&gt; tempStream)
    extractPdfFile(tempStream.toByteArray, FILE_NAME)
 }
  
 def extractPdfFile(bytes : Array[Byte], outputFileName : String) = {
    val outputFile = new FileOutputStream(outputFileName)
    val START = "%PDF"
    val END = "%%EOF"
    var foundStart = false
    var foundEnd = false
    var i = 0
    for (i &lt;- 0 to bytes.length - 1 if !foundEnd) {
        if (!foundStart) {
            var notFound = false
            for (j &lt;- 0 to START.length - 1 if !notFound) {
                if (bytes(i+j) != START(j))
                    notFound = true
                else if (j == START.length - 1) {
                    foundStart = true
                    outputFile.write(bytes(i))
                }
            }
        } else {
            var notFound = false
            outputFile.write(bytes(i))
            for (j &lt;- 0 to END.length - 1 if !notFound) {
                if (bytes(i+j) != END(j))
                    notFound = true
                else if (j == END.length - 1) {
                    foundEnd = true
                    for (k &lt;- 1 to END.length - 1)
                        outputFile.write(bytes(i+k))
                }
            }
        }
    }
    outputFile.close
 }
}</pre>
</dd>
</dl>

<p>Webサービスサーバへは<a href="http://dispatch.databinder.net/" target="_blank">dispatch</a>というScala用のライブラリを利用して，サーバにSOAPメッセージを送信します．</p>

<ul class="default">
<li><strong>122行:</strong>&nbsp;サーバから返ってくるPDFデータはひとまずtempStreamで受け取ります．</li>

<li><strong>123行:</strong>&nbsp;httpはdispatchでのHTTP通信のためのクラスです．</li>

<li><strong>124行:</strong>&nbsp;urlにてWebサービスサーバのホスト名，ポート番号，SOAPポートを指定します．</li>

<li><strong>125行:</strong>&nbsp;また，サーバへのアクセスは認証が必要なので，authedではユーザ名とパスワードを指定しています．</li>

<li><strong>126行:</strong>&nbsp;さらに，HTTPヘッダのContentTypeにSOAPメッセージであることを表す「application/soap+xml」，文字コードがUTF-8であることを表す「charset=utf-8」，SOAPのアクション(generateData)を表す「action="urn:generateData"」
を設定します．</li>

<li><strong>127行:</strong>&nbsp;soapReqでは，上記までで設定したHTTPリクエストのためのオブジェクトにSOAPメッセージを設定します．</li>

<li><strong>128行:</strong>&nbsp;そして，httpにsoapReqを渡し，HTTP送信を行った後，tempStreamにその返信内容を格納します．</li>

<li><strong>129行:</strong>&nbsp;tempStream内には，PDFファイル自体以外の情報も含まれているので，extractPdfFile()にてPDFデータのみを抽出し，ファイルに出力します．</li>
</ul>

<p>今回も，依存するライブラリがあるため，<a href="http://code.google.com/p/simple-build-tool/" target="_blank">sbt</a>にて簡単にビルド，実行するためのファイルを用意しました．<br />
実行方法は，展開後，README.txtをご覧ください．<br />
<a href="/blog/inastream/archive/biz-scala4.zip">biz-scala4.zip</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>biz-Stream vs iPad</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/08/biz-stream-vs-ipad.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1278</id>

    <published>2010-08-06T01:58:47Z</published>
    <updated>2010-08-06T02:03:04Z</updated>

    <summary>発売直後、巷で何かと話題になっていたiPad。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bizstream" label="biz-Stream" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ipad" label="iPad" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pdf" label="PDF" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<p>さすがにその頃のお祭りのような騒々しさは収まりましたが、この、PCでも携帯でもない<br />
新しいツールを通じてどのような製品やサービスが今後提供出来るのか、様々な企業の<br />
企画会議等で話題に上っているかと思います。</p>

<p>　biz-Stream4.5.3のリリースも無事行われ、製品開発部では一息<br />
つきたい所ですが、biz-Streamの今後やこれから新しく開発する製品や<br />
サービスについて、昼夜休まず議論が繰り広げられています。</p>

<p> その製品開発会議の中でも、このiPadの話が出たのですが、数名の新し物好きな社員が<br />
個人的に購入してはいたものの、社内では未だ触れた事の無い人間がほとんどでした。</p>

<p>まずは使ってみてどういう物かを知らなければ始まらないだろう。。<br />
と言う事で先日、「製品開発テスト用」という名目で1台導入されました。</p>

<p> さて。。届いたiPadを実際手に取り、「もうちょっと軽ければ。。」とか「デフォルトでUSBポートが<br />
あれば。。」等々、個人的な感想もあるのですが、それはさておき。。</p>

<p>　QAとしてまず気になったのはやはり、biz-Streamが使えるか？と言う事。</p>

<p> もちろん、iPad用のアプリではないので、現状のままでは、例えばライブラリや、ダイレクト印刷の<br />
機能をiPad本体の中で動かす事は出来ません。</p>

<p> しかし、biz-Stream Webサービスサーバ（以下「WSS」）に対するクライアントとして使用するのであれば、<br />
ブラウザ上でJSPやServletさえ動かせれば良いのだから、使用可能なのでは？と、思い立ちました。</p>

<p> 懸念されるのは、iPadで使用するブラウザであるSafari上で動くだろうか？<br />
という点です。</p>

<p>　そこで、早速試してみました。</p>

<div class="float-block-C">
<div class="imageblock">
<img src="/blog/inastream/img/100806_01.PNG" alt="テストサーバー上でサーブレットWSS_Sample1を実行"  width="512" height="384" />
<!-- /.imageblock --></div>
<!-- /.float-block-C --></div>

<p>　WindowsServer上にWSSと製品付属のサンプルアプリケーションの環境を構築、iPadを<br />
クライアントとして使用してアクセスし、WSS_Sample1を実行してみます。</p>

<div class="float-block-C">
<div class="imageblock">
<img class="sample" src="/blog/inastream/img/100806_02.PNG" alt="リポジトリ上にPDFを出力"  width="512" height="384" />
<!-- /.imageblock --></div>
<!-- /.float-block-C --></div>

<p>うまく出力出来たようです。リポジトリ上にPDFが生成されました。</p>

<div class="float-block-C">
<div class="imageblock">
<img src="/blog/inastream/img/100806_03.PNG" alt="ユーザーID、パスワードを入力"  width="512" height="384" />
<!-- /.imageblock --></div>
<!-- /.float-block-C --></div>

<p>リポジトリにアクセスする際に聞かれるユーザーIDとパスワードを<br />
入力します。<br />
この設定は、biz-Stream導入時のデフォルトの設定のままにしてあります。</p>

<div class="float-block-C">
<div class="imageblock">
<img class="sample" src="/blog/inastream/img/100806_04.PNG" alt="PDF表示☆"  width="512" height="384" />
<!-- /.imageblock --></div>
<!-- /.float-block-C --></div>

<p>出力したPDFがブラウザ上に表示されました。<br />
もちろん、上記はWSSのサンプルのうちの1つを実行出来たのに過ぎませんが、<br />
このサンプルを応用してレイアウトのパターンを変える事で、通常のリリーステストで使用する<br />
全てのデータパターンをリポジトリにPDF出力したり、出力したPDFをメールに添付して送信<br />
する事が出来ました。</p>

<p>　出力したPDFの表示については、特殊な仕掛けが施してあるPDF、例えばJavaScriptが<br />
埋め込まれていたり、透かしが入っていたり。。というPDFについては、Scriptが有効になら<br />
なかったり、透かしが表示されなかったり。。と、PCで表示させた場合と若干異なる部分が<br />
ありましたが、概ね表示させる事が出来ました。</p>

<p>　同様にExcel出力も試してみました。（WSS_Sample2）</p>

<div class="float-block-C">
<div class="imageblock">
<img class="sample" src="/blog/inastream/img/100806_05.PNG" alt="xlsファイルをアプリケーションのローカルドライブに出力☆"  width="512" height="384" />
<!-- /.imageblock --></div>
<!-- /.float-block-C --></div>

<p>　こちらのサンプルはアプリケーションのローカルドライブにファイルを出力する仕様になっているのですが、<br />
出力先をTomcatのROOTディレクトリ上に指定してブラウザ上で確認出来るように細工してみました。<br />
PCで見た場合と表示が多少異なるデータパターンはありましたが、見る事が出来ました。</p>

<div class="float-block-C">
<div class="imageblock">
<img class="sample" src="/blog/inastream/img/100806_06.PNG" alt="xls表示☆"  width="512" height="384" />
<!-- /.imageblock --></div>
<!-- /.float-block-C --></div>

<p>（但し、出力したファイルをブラウザ上で閲覧するには、あらかじめiPadにPDFや<br />
Excelファイルを再生出来るアプリケーションがインストールされている必要があります。）</p>

<p>　ブラウザ経由ではなく、ライブラリからiPad本体へ出力したPDFやExcelファイルをそのまま<br />
保存したり、iPad本体からWSSへsoapメッセージを直接送信したり、ダイレクト印刷を実行する<br />
ような機能は、iPadと連携する機能が実装出来ていない今の段階では使えないようです。</p>

<p> そのため現状ではiPadはWSSのクライアントとして「要件を満たしています」とは言い切れないのですが、<br />
今後、iPadが何処までビジネスの領域で導入されるのか？<br />
　も含めて検討する必要に迫られた場合、iPad上でも使用出来るアプリとしてバージョンアップ<br />
する事も可能だと思われます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>XAMP(R)環境で個人用wiki</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/07/xamprwiki.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1277</id>

    <published>2010-07-28T01:17:31Z</published>
    <updated>2010-07-28T01:21:23Z</updated>

    <summary>前回はXAMP(R)環境の中で&quot;MySQL&quot;及び、DB管理ツールのみを利用しましたが
今回はApache+PHPの部分を利用してみます。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bizstream" label="biz-Stream" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wiki" label="Wiki" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<!-- Important options, and finally the main call -->
<script type="text/javascript">
 SyntaxHighlighter.config.tagName = "pre" // use pre tags
 SyntaxHighlighter.config.stripBrs = false  // disregard trailing 
 SyntaxHighlighter.all()
</script>

<p><a href="http://rubyforge.org/frs/?group_id=904" target="_blank" title="InstantRails ダウンロードはココ！">ココ！</a> よりInstantRailsをダウンロード<br />
<a href="http://sourceforge.jp/projects/pukiwiki/releases/" target="_blank" title="pukiwiki ダウンロードはココ！">ココ！</a> よりpukiwikiをダウンロード<br />
今回私が試した時点でのバージョンはInstantRailsが2.0、pukiwikiが1.4.7でした</p>

<p>ダウンロードしてきた"InstantRails-2.0-win.zip"を、Cドライブ直下に展開してきます</p>

<p>pukiwiki-1.4.7_notb_utf8.zipを展開、ディレクトリ名を"pukiwiki"に変更し<br />
C:\InstantRails-2.0-win の下へ移動</p>

<p>C:\InstantRails-2.0-win\conf_files\httpd.conf<br />
に、以下を追記します。</p>

<dl class="code-block-A01">
<dt>《 設定例 》</dt>
<dd>
<pre class="brush: xml; wrap-lines: true">
    Alias /wiki/ "${path}/pukiwiki/"
    &lt;Directory "${path}/pukiwiki"&gt;
        Options FollowSymLinks Indexes
        AllowOverride None
        Order deny,allow
#        allow from 127.0.0.1
#        deny from all
    &lt;/Directory&gt;
</pre>
</dd>
</dl>

<p>設定をした後は...</p>

<ol class="list-A01">
<li><span class="marker">(1)</span>c:\InstantRailsのディレクトリにある InstantRails.exe を起動します</li>
<li><span class="marker">(2)</span>ブラウザで、 http://localhost/wiki/ のＵＲＬへアクセスします</li>
<li><span class="marker">(3)</span>さっそく、新規ページを作成し編集可能であることを確認しましょう！</li>
</ol>

<div class="float-block-C">
<div class="imageblock">
<img src="/blog/inastream/img/blog_wiki.JPG" width="566" height="350"  alt="wikiのFrontPage" />
<p class="caption">《 wikiのFrontPage 》</p>
<!-- /. imageblock --></div>
<!-- /.float-block-C --></div>

<p>USBメモリーで利用すれば持ち運べるマイWikiに、趣味情報を集めた俺wikiに、wikiの練習をこっそりしたい場合に、『biz-Streamのナレッジに！？』等など使い道は無限大？</p>

<hr />
<p>
皆様、これからもbiz-Streamをよろしくお願い致します。<br />
また、初めてこちらのサイトをご覧になり、<br />biz-Streamに関心を持って頂いた方は是非、
下のボタンよりお気軽にお問い合わせ下さい。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>仕事の環境</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/07/post-14.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1274</id>

    <published>2010-07-23T09:00:28Z</published>
    <updated>2010-07-23T09:37:21Z</updated>

    <summary>最高気温が35℃以上の日のことを「猛暑日」というようです。
私のPCのデスクトップにあるガジェットの「天気」はこれを書いている今32℃と表示しています。
外は大変暑いですが皆様どのような環境で仕事をしていますか？</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="in a Stream" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="九段、靖国神社" label="九段、靖国神社" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<p>ブレインセラーズ・ドットコムのオフィスは九段下にある<br />
とあるビルの中にあります。<br />
我ら品質管理ユニットも日々そこで仕事をしています。<br />
通勤も便利ですし環境もよいです。</p>

<p>そんな職場で1年に1日だけ過ごしにくい日があります。<br />
今日はその過ごしにくい或る日のことでも。</p>

<p>あれは去年の夏の暑い日のことでした。<br />
私を含むうちのチームの一部の人はちょっとした事情により<br />
休日出勤をしてbiz-Streamのテストをしていました。<br />
普通なら他のチームの人も誰も居ないし外線電話も鳴らないしで<br />
静かな中、快適に作業が進むはずでした。</p>

<p>しかし、昼過ぎ、その静寂を破る怒声が外から聞こえてきました。</p>

<p>「騒々しい」などという言葉であっさり済むような騒ぎではありません。<br />
私がbiz-Streamのリリーステストの大量の項目どもと戦っている間、<br />
外では機動隊？がよくわからないことを叫ぶ人々と戦っていたのです。</p>

<p>「静かな中、快適に作業が進むはずでした」・・・？どこが？<br />
無理です。<br />
もうたいへんな大騒ぎです。</p>

<p>その日は8月15日（土）、かつて大東亜戦争が終戦を迎えた日でした。<br />
Wikipediaによれば<br />
「靖国神社が一年のうちで最も注目を集め、最も騒々しくなる日」<br />
だそうです。</p>

<p>何故靖国神社が職場と関係があるのか？<br />
靖国神社って九段下にあるんです。<br />
このブログに<a href="/blog/inastream/2010/04/-2010.html">さくらまつり</a>や<a href="/blog/inastream/2010/07/-2010-2.html">みたままつり</a>の記事があったりすることからもお分かりのように<br />
靖国神社は私たちのオフィスからとても近いのです。</p>

<p>おかげで数十分間テストにさっぱり集中できませんでした。<br />
テレビでしか見る機会のないような騒ぎを目の当たりに出来る<br />
大変素晴らしい休日になってしまいました。<br />
毎年この日はうるさいなと思うのですが<br />
この日は特に納期に迫られていたこともあり<br />
この日だけは九段下で仕事をしたくないと強烈に思いました。</p>

<p>今年ももうすぐまた8月15日がやってきますが今年は日曜になりました。<br />
そして幸い今年は日曜出勤にならずに済みそうですので<br />
静かな日曜日を自宅で満喫することが出来ます。<br />
でも九段下の8月15日は今年もきっと賑やかなことでしょう。</p>

<p>皆様の職場の環境はいかがなものでしょうか？</p>]]>
        
    </content>
</entry>

<entry>
    <title>Clojure事始め</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/07/clojure-01.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1273</id>

    <published>2010-07-16T08:39:56Z</published>
    <updated>2010-08-30T04:40:19Z</updated>

    <summary>今回は、前回紹介したClojureで簡単なコードを書いてみます。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bizstream" label="biz-Stream" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="clojure" label="Clojure" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<!-- Important options, and finally the main call -->
<script type="text/javascript">
SyntaxHighlighter.config.tagName = "pre" // use pre tags
SyntaxHighlighter.config.stripBrs = false  // disregard trailing
SyntaxHighlighter.all()
</script>
<p>
Clojureは、Java VM 上で動作する言語で、<br />
簡単にJavaのライブラリを読み込んで使用することができます。<br />
そこで、Javaライブラリとして提供されている、<br />
弊社製品biz-Streamの機能をClojureのプログラム呼び出す例を見てみましょう。
</p>
<p>
以下のbiz-StreamのJavaサンプルプログラムは、
</p>
<dl class="code-block-A01">
<dt>《 biz-Stream Javaサンプルプログラム 》</dt>
<dd><pre class="brush: java; wrap-lines: false">
import java.util.Hashtable;
import com.brainsellers.xml.JaxpXML;
import com.brainsellers.xml.common.XMLSuper;

class sample1 {

    public static void main(String args[]){
        new sample1(args);
        System.exit(0);
    }
    public sample1(String args[]){
        try {
            XMLSuper xml = new JaxpXML(
                "${base-dir}/sample/java/sample1.xml",
                "${base-dir}/sample/java/sample1.pdf");

            xml.parse();
            xml.setAutoResize();

            for(int i=0; i&lt;3; i++){
                if(i != 0){
                    xml.newPage();
                }

                xml.setPageSize();

                Hashtable ht = new Hashtable();
                ht.put("company", "ブレインセラーズ・ドットコム株式会社");
                ht.put("address", "東京都千代田区九段北XX-XX-XX");
                ht.put("phone",   "TEL.XX-XXXX-XXXX");
                ht.put("fax",     "FAX.XX-XXXX-XXXX");

                xml.toPDF(ht);
                xml.flush();
            }

            xml.close();

        } catch(java.lang.Exception e) {
            e.printStackTrace();
        }
    }
}
</pre>
</dd></dl>
<p>
Clojureでは、以下のように書けます。
</p>
<dl class="code-block-A01">
<dt>《 biz-Stream Clojureサンプルプログラム 》</dt>
<dd><pre class="brush: clojure; wrap-lines: false">
(import [java.util Hashtable])
(import [java.io IOException])
(import [com.brainsellers.xml JaxpXML])
(import [com.brainsellers.xml.common XMLSuper])

(defn func-sample1 [ags]
  (try
    ( (def xml (JaxpXML. "${base-dir}/sample/java/sample1.xml" "${base-dir}/sample/java/sample1.pdf"))
      (. xml parse)
      (. xml setAutoResize)
      (loop [x 3]
        (if-not (zero? x)
          (let [ht (Hashtable.)]
            (. ht put "company" "ブレインセラーズ・ドットコム株式会社")
            (. ht put "address" "東京都千代田区九段北XX-XX-XX")
            (. ht put "phone" "TEL.XX-XXXX-XXXX")
            (. ht put "fax" "FAX.XX-XXXX-XXXX")
            (if-not (= x 1) (. xml newPage))
            (. xml setPageSize)
            (. xml toPDF ht)
            (. xml flush)
            (recur (dec x)))))
      (. xml close))
    (catch IOException e (. e printStackTrace))))

(defn main [args]
  (func-sample args))
</pre>
</dd></dl>
<p>
なんとなく、さっぱりしたように感じませんか？<br />
まだ慣れていないので、あまり凝ったことはできませんから、<br />
Clojure的に美しいコードとは言えないのかもしれませんが、<br />
なんとなく、Clojure感がつかめるコードとなっているかと思います。
</p>
<p>
２つのソースコードを見比べながら、徐々に、Clojureのコードになれて下さい。<br />
次回以降は、Clojureの開発環境などについてみていきましょう。
</p>]]>
        
    </content>
</entry>

<entry>
    <title>みたままつり＠靖国神社 2010 夜編 </title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/07/-2010-2.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1272</id>

    <published>2010-07-16T03:51:33Z</published>
    <updated>2010-07-16T04:07:25Z</updated>

    <summary>最終日に行こうかどうしようか迷っていたところ、オフィスのそばを女子大生の神輿が通ったのでついつい、行ってきました。やはりみたままつりといえばやはり夜です</summary>
    <author>
        <name>ソフトウェアマーケティング</name>
        
    </author>
    
        <category term="in a Stream" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="九段" label="九段" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="靖国神社" label="靖国神社" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<div class="float-block-L01">
<div class="imageblock">
<img alt="10/07/15 靖国神社外苑" src="/blog/inastream/img/100715001.jpg" width="250" height="188" />
<!-- /.imageblock --></div>
<div class="textblock">
<p class="first-child">とにかくスゴイ人<br />
おまけに平均年齢若いし浴衣率やたらに高い</p>
<!-- /.textblock --></div>
<!-- /.float-block-L01 --></div>

<div class="float-block-C">
<div class="image-section-A02">
<img alt="10/07/15 靖国神社みたま祭り内苑提灯" src="/blog/inastream/img/100715002.jpg" width="300" height="225" />
<img alt="10/07/15 靖国神社みたま祭り門" src="/blog/inastream/img/100715003.jpg" width="300" height="225" />
<p class="caption-B01">とりあえず内苑側に避難。内苑は飲食禁止だそうで、ちょっとばかりすいてる<br />
ようやく落ち着いて、ライトアップを見れる</p>
<!-- /.image-section-A02 --></div>
<!-- /.float-block-C --></div>

<div class="float-block-C">
<div class="image-section-A02">
<img alt="10/07/15 靖国神社みたま祭り境内献灯" src="/blog/inastream/img/100715004.jpg" width="300" height="225" />
<img alt="10/07/15 靖国神社みたま祭り境内献灯" src="/blog/inastream/img/100715005.jpg" width="300" height="225" />
<p class="caption-B01">さらに奥へと境内へ<br />
いつもに比べては人が多いものの、なんか厳かな感じ漂う</p>
<!-- /.image-section-A02 --></div>
<!-- /.float-block-C --></div>

<div class="float-block-R01">
<div class="imageblock">
<img alt="10/07/15 靖国神社見世物小屋" src="/blog/inastream/img/100715006.jpg" width="250" height="188" />
<!-- /.imageblock --></div>
<div class="textblock">
<p class="first-child">さて、勇気を出してまた外苑へと戻り</p>
<p>ここで見逃してはいけない、見世物小屋へ。入り口ではヘビを持ったお姉さんがお出迎え</p>
<p>演目は... あまり見世物小屋という禍々しいというのでもないなぁ... っと思ってたらヘビ女。ちょうど見た回が当たりだそうで、ヘビさん生きてました。こりゃグロいな<br />
去年はみんな写真撮ってたけど、今回は「No Photo」と小屋の中にいっぱい書いてあった</p>
<!-- /.textblock --></div>
<!-- /.float-block-R01 --></div>

<div class="float-block-C">
<div class="image-section-A02">
<img alt="10/07/15 靖国神社みたま祭りお化け屋敷" src="/blog/inastream/img/100715007.jpg" width="250" height="188" />
<img alt="10/07/15 靖国神社みたま祭りとうもろこし" src="/blog/inastream/img/100715008.jpg" width="188" height="188" />
<p class="caption-B01">お隣のお化け屋敷はいろんな意味で1人で入るのはなんなので回避<br />
そしてお約束のトウモロコシだが、浴衣着て歩いている人多いので要注意</p>
<!-- /.image-section-A02 --></div>
<!-- /.float-block-C --></div>

<div class="float-block-C">
<div class="image-section-A02">
<img alt="10/07/15 靖国神社みたま祭り鳥居と提灯" src="/blog/inastream/img/100715009.jpg" width="250" height="156" />
<p class="caption-B01">今年は16日までです。是非いちど見世物小屋を!</p>
<!-- /.image-section-A02 --></div>
<!-- /.float-block-C --></div>]]>
        
    </content>
</entry>

<entry>
    <title>みたままつり＠靖国神社 2010 お昼編</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/07/-2010-1.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1271</id>

    <published>2010-07-13T07:06:19Z</published>
    <updated>2010-07-14T02:31:26Z</updated>

    <summary>今年もやってまいりました、靖国神社みたま祭り
本日初日、外出から会社に戻る前にちょっくら寄り道して様子を見てきました</summary>
    <author>
        <name>ソフトウェアマーケティング</name>
        
    </author>
    
        <category term="in a Stream" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="九段" label="九段" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="靖国神社" label="靖国神社" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<div class="float-block-C">
<div class="image-section-A02">
<img alt="10/07/13 靖国神社みたま祭り参道入り口" src="/blog/inastream/img/100713001.jpg" width="250" height="188" />
<img alt="10/07/13 靖国神社みたま祭り参道露店" src="/blog/inastream/img/100713002.jpg" width="250" height="188" />
<p class="caption-B01">まだはじまったばかり、さらに雨模様というわけで人もまばら。露店(夜でないから夜店ではないのか...)もまだ準備できていないところもちらほら</p>
<!-- /.image-section-A02 --></div>
<!-- /.float-block-C --></div>

<div class="float-block-L01">
<div class="imageblock">
<img alt="10/07/13 靖国神社献灯" src="/blog/inastream/img/100713003.jpg" width="250" height="188" />
<!-- /.imageblock --></div>
<div class="textblock">
<p class="first-child">境内の中の献灯もいろいろな方々のがありましたが。とりあえず話題の相撲関係を。武蔵川理事長と横綱白鵬<br />
白鵬のはカッコイイなぁ</p>
<!-- /.textblock --></div>
<!-- /.float-block-L01 --></div>


<div class="float-block-C">
<div class="image-section-A02">
<img alt="10/07/13 靖国神社みたま祭り参道ライトアップ前" src="/blog/inastream/img/100713004.jpg" width="188" height="188" />
<img alt="10/07/13 靖国神社みたま祭り見世物小屋" src="/blog/inastream/img/100713005.jpg" width="250" height="188" />
<p class="caption-B01">夜になればこれがライトアップ。いまやめったに見ることができない「見世物地獄」が!! (見世物小屋ではなく。地獄なのか!)</p>
<!-- /.image-section-A02 --></div>
<!-- /.float-block-C --></div>


<p>靖国神社さんではなんと<a href="http://www.yasukuni.or.jp/annai/mitamalive.php" target="_blank">みたままつりライブ映像</a>が!!<br />
ここでサボってたらばれるな...</p>
<p>また<a href="http://kanko-chiyoda.jp/tabid/1994/Default.aspx" target="_blank">千代田区観光協会さんには詳しい情報とBlog</a>もしかしたら中継もあるのでは。詳しくは<a href="http://twitter.com/ChiyodaCityPR" target="_blank">千代田区観光協会 (ChiyodaCityPR) on Twitter</a>を是非フォロー</p>


<div class="float-block-L03">
<div class="imageblock">
<img alt="10/07/13 靖国神社 とうもろこし" src="/blog/inastream/img/100713006.jpg" width="188" height="188" />
<!-- /.imageblock --></div>
<div class="textblock">
<p class="first-child">「おにいさん、仕事中かい?」と言われながら買ったトウモロコシをお化け屋敷の軒下でいただきます</p>
<!-- /.textblock --></div>
<!-- /.float-block-L03 --></div>

<div class="float-block-N">
<p>さて夜の天気はどんなもんでしょうかねぇ<br />
7/16日までなので、お近くにお越しのかたはゼヒ!!</p>
<!-- /.float-block-N --></div>
]]>
        
    </content>
</entry>

<entry>
    <title>ドキュメント変換ツールJODConverterを用いて、Office文書を変換するには</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/07/jodconverteroffice.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1270</id>

    <published>2010-07-09T10:30:12Z</published>
    <updated>2010-07-09T10:45:21Z</updated>

    <summary>ある二つのソフトを用いて、Office文書を様々なフォーマットに変換する手法について語ります。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="jodconverter" label="JODConverter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="openoffice" label="OpenOffice" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<p>それは、<a href="http://ja.openoffice.org/" target="_blank">OpenOffice.org</a>と<a href="http://www.artofsolving.com/opensource/jodconverter" target="_blank">JODConverter</a>です。</p>

<p>OpenOffice.orgは、名の通りそのまんま、オープンソースのオフィスソフトの一つ。Microsoft社の「Microsoft Office」と高い互換性があります。<br />
JODConverterは、OpenOffice.orgを利用して様々なフォーマットに変換してくれます（<a href="http://www.artofsolving.com/opensource/jodconverter/guide/supportedformats" target="_blank">対応しているフォーマット</a>）。</p>

<p>では、やり方について、Windows環境下で、<br />
まずJava1.4以上が動作する環境を用意して下さい。<br />
両ソフトをダウンロード＆インストールします。OpenOfficeがインストールされたディレクトリのprogramフォルダで以下のコマンドを実行して下さい。</p>

<dl class="code-block-A01">
<dt>《 OpenOfficeをサービスとして実行 》</dt>
<dd>
<pre><code>program&gt; soffice -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager
</code></pre>
</dd>
</dl>

<p>これは、OpenOfficeをサービスとして実行する為のおまじないになります。</p>

<p>次にJODConverterを使って、JODConverterがインストールされているフォルダに移動し、以下のコマンドを実行して下さい。</p>

<dl class="code-block-A01">
<dt>《 JODConverer実行 》</dt>
<dd>
<pre><code>jodconverter-2.2.2&gt; java -jar lib/jodconverter-cli-2.2.2.jar （input-document)  (output-document)
</code></pre>
</dd>
</dl>

<p><a href="http://www.artofsolving.com/node/13" target="_blank">コマンドの詳細</a></p>

<div class="float-block-C"> 
<div class="imageblock"> 
<img src="/blog/inastream/img/100708OOXLS.jpg" width="300" height="330" alt="JODConverterで変換前のExcelファイル" />
<img src="/blog/inastream/img/100708OOPDF.jpg" width="300" height="333" alt="JODConverterで変換後のPDFファイル" />
<p class="caption">《 JODConverterで変換前のExcelファイルと変換後のPDFファイル 》</p>
<!-- /. imageblock --></div> 
<!-- /.float-block-C --></div> 

<p>このツールは、フリーなのである程度思い通りにコンバートされないとかきめ細やかな点は欠けていますが、お手軽的にはcoolです。</p>

<p>では、次回は、お手軽でcoolなこのツールをQAの業務でどのように使っているのかを紹介したいと思います。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title><![CDATA[Scala 実践編(3) biz-Stream Webサービスサーバを使った例&lt;前編&gt;]]></title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/07/scala-3-biz-stream-web.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1269</id>

    <published>2010-07-08T05:31:53Z</published>
    <updated>2010-07-08T05:33:56Z</updated>

    <summary>今回は、biz-StreamのJavaライブラリのAPIを使用するのではなく、biz-Stream Webサービスサーバを使ったPDF生成をScalaによるクライアントから指示する方法を見ていきたいと思います。
</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bizstream" label="biz-Stream" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="scala" label="Scala" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<!-- Important options, and finally the main call -->
<script type="text/javascript">
 SyntaxHighlighter.config.tagName = "pre" // use pre tags
 SyntaxHighlighter.config.stripBrs = false  // disregard trailing 
 SyntaxHighlighter.all()
</script>

<p>前編ではまずbiz-Stream Webサービスサーバへ送るSOAPメッセージの作成について解説します．<br />実際にサーバへメッセージを送る部分ついては後編で解説する予定です．</p>

<p>biz-Stream Webサービスサーバとは，biz-Streamをアプリに組み込むのではなく，別サーバに設置して動作させるためのものです．SOAPメッセージをサーバに送ることによって生成する内容の指示を行ないます．</p>

<p>一番始めの部分(layoutXml)は，biz-Streamのレイアウト定義を直接ソースコード内に
記述しています．<br />
これは前回と同様，レイアウト定義は通常２種類(ドキュメントレイアウト定義，ページレイアウト定義)の別ファイルで構成されますが，ここではそれらを１つに結合しています．</p>

<p>次にrecordsは上記のXMLレイアウトに流しこむデータを定義しています．<br />実際のアプリでは，ここは動的にデータ内容を生成するロジックがコーディングされる部分です．</p>

<p>soapMessageでは、Webサービスサーバへ送信するためのSOAPメッセージを構築しています．<br />指定したファイル名でPDFファイルをWebサービスサーバ上のコンテンツリポジトリへ出力するように指示しています．</p>

<p>次回は，前回も使用しました，<a href="http://dispatch.databinder.net/" target="_blank">dispatch</a>というScala用のライブラリを利用して，サーバにSOAPメッセージを送信したいと思います．</p>


<p>ソースコードは次のようになります。</p>

<dl class="code-block-A01">
<dt>《 Scalaからbiz-Stream Webサービスサーバへデータを送りPDFを生成するソースコード(SOAPメッセージの構築) 》</dt>
<dd>
<pre class="brush: scala; wrap-lines: false">
package wssclient

object wss_client {
  val FILE_NAME = "output_test.pdf"

  val DATASOURCE_NAME = "app-resource"
  val COL1 = "col1"
  val COL2 = "col2"
  val COL3 = "col3"

  val RESOURCE_NAME = "resource1"

  def main(args: Array[String]) {
    val layoutXml =
    &lt;fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:pdf="http://www.brainsellers.com/schema" xmlns:svg="http://www.brainsellers.com/schema" xmlns:bs="http://www.brainsellers.com/schema" xmlns:form="http://www.brainsellers.com/schema"&gt;
      &lt;bs:datasource-master-set&gt;
          &lt;bs:application-data-resource-master master-name={DATASOURCE_NAME}/&gt;
        &lt;bs:application-data-master master-name="app-field"&gt;
            &lt;bs:application-data-statement master-reference={DATASOURCE_NAME}/&gt;
        &lt;/bs:application-data-master&gt;
        &lt;bs:datasource-master master-name="app-source" position="inherit"&gt;
            &lt;bs:application-data-master-reference master-reference="app-field"/&gt;
        &lt;/bs:datasource-master&gt;
      &lt;/bs:datasource-master-set&gt;
      &lt;fo:layout-master-set&gt;
        &lt;fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm"&gt;
          &lt;fo:region-body&gt;
            &lt;fo:region-before extent="0"&gt;
              &lt;fo:region-after extent="0"&gt;
                &lt;fo:region-start extent="0"&gt;
                  &lt;fo:region-end extent="0"&gt;
                  &lt;/fo:region-end&gt;
                &lt;/fo:region-start&gt;
              &lt;/fo:region-after&gt;
            &lt;/fo:region-before&gt;
          &lt;/fo:region-body&gt;
        &lt;/fo:simple-page-master&gt;
      &lt;/fo:layout-master-set&gt;
      &lt;fo:page-sequence master-reference="A4"&gt;
        &lt;fo:flow flow-name="xsl-region-body"&gt;
          &lt;bs:block-container&gt;
            &lt;!-- ページレイアウト定義開始 --&gt;
            &lt;Layout width="210mm" height="297mm" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:bs="http://www.brainsellers.com/schema" xmlns:svg="http://www.brainsellers.com/schema" xmlns:form="http://www.brainsellers.com/schema" xmlns:pdf="http://www.brainsellers.com/schema"&gt;
              &lt;flow-area name="flow-area" x="14" y="280" width="180" height="260" master-reference="app-source" no-data-disabled="false"&gt;
                &lt;flow-table line-height="10" record-type="header" view="page" border-color="0,255,255"&gt;
                  &lt;flow-table-cell cell-width="60" align="horizon" text-align="left" cell-align="bottom" narrow="size"&gt;
                    &lt;Label Width="60" Height="10" Horizon="center" Vertical="center" Vector="horizon" FontSize="12" FontStyle="BOLD" Narrow="horizon"&gt;col1&lt;/Label&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="30" align="horizon" text-align="left" cell-align="bottom" narrow="size"&gt;
                    &lt;Label Width="30" Height="10" Horizon="center" Vertical="center" Vector="horizon" FontSize="12" FontStyle="BOLD" Narrow="horizon"&gt;col2&lt;/Label&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="90" align="horizon" text-align="left" cell-align="bottom" narrow="size"&gt;
                    &lt;Label Width="90" Height="10" Horizon="center" Vertical="center" Vector="horizon" FontSize="12" FontStyle="BOLD" Narrow="horizon"&gt;col3&lt;/Label&gt;
                  &lt;/flow-table-cell&gt;
                &lt;/flow-table&gt;
                &lt;flow-table record-type="details" view="layout"&gt;
                  &lt;flow-table-cell cell-width="60" border-color="0,255,255" cell-align="top" narrow="size"&gt;
                      &lt;multi-text name={COL1} cell-width="60" font-size="11" margin="start:1;end:1;top:1;bottom:1"/&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="30" border-color="0,255,255" cell-align="top" narrow="size"&gt;
                      &lt;multi-text name={COL2} cell-width="30" font-size="11" margin="start:1;end:1;top:1;bottom:1"/&gt;
                  &lt;/flow-table-cell&gt;
                  &lt;flow-table-cell cell-width="90" border-color="0,255,255" cell-align="top" narrow="size"&gt;
                      &lt;multi-text name={COL3} cell-width="90" font-size="11" margin="start:1;end:1;top:1;bottom:1"/&gt;
                  &lt;/flow-table-cell&gt;
                &lt;/flow-table&gt;
              &lt;/flow-area&gt;
            &lt;/Layout&gt;
            &lt;!-- ページレイアウト定義完了 --&gt;
          &lt;/bs:block-container&gt;
        &lt;/fo:flow&gt;
      &lt;/fo:page-sequence&gt;
    &lt;/fo:root&gt;

    val layoutString = layoutXml.toString

    val records = List(
      Map(1 -&gt; "data1", 2 -&gt; "data2", 3 -&gt; "data3"),
      Map(1 -&gt; "data2_1", 2 -&gt; "data2_2", 3 -&gt; "data2_3"),
      Map(1 -&gt; "data3_1", 2 -&gt; "data3_2", 3 -&gt; "data3_3"))

    val soapMessage =
    &lt;soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns="http://schemas.brainsellers.com/webservices/bizstream/2006-10" xmlns:ns1="http://schemas.brainsellers.com/webservices/common/2006-10" xmlns:xm="http://www.w3.org/2005/05/xmlmime"&gt;
        &lt;soap:Header/&gt;
      &lt;soap:Body&gt;
        &lt;generateOutputRequest
        xmlns="http://schemas.brainsellers.com/webservices/bizstream/2006-10"
        xmlns:common="http://schemas.brainsellers.com/webservices/common/2006-10"&gt;
          &lt;output&gt;
            &lt;pdf&gt;
                &lt;file name={FILE_NAME}/&gt;
            &lt;/pdf&gt;
          &lt;/output&gt;
          &lt;resource&gt;
            &lt;resourceData name={RESOURCE_NAME}&gt;
              &lt;applicationData masterName={DATASOURCE_NAME}&gt;
                &lt;recordData&gt;
                  &lt;header&gt;
                      &lt;headerColumn value={COL1}/&gt;
                      &lt;headerColumn value={COL2}/&gt;
                      &lt;headerColumn value={COL3}/&gt;
                  &lt;/header&gt;{records.map(record =&gt;
                  &lt;detail&gt;
                      &lt;detailColumn value={record(1)}/&gt;
                      &lt;detailColumn value={record(2)}/&gt;
                      &lt;detailColumn value={record(3)}/&gt;
                  &lt;/detail&gt;)}
                &lt;/recordData&gt;
              &lt;/applicationData&gt;
            &lt;/resourceData&gt;
          &lt;/resource&gt;
          &lt;layoutData&gt;
            &lt;layoutDefinition dataReference={RESOURCE_NAME}&gt;
              {layoutString}
            &lt;/layoutDefinition&gt;
          &lt;/layoutData&gt;
        &lt;/generateOutputRequest&gt;
      &lt;/soap:Body&gt;
    &lt;/soap:Envelope&gt;

    print(soapMessage)
 }
}</pre>
</dd>
</dl>
]]>
        
    </content>
</entry>

<entry>
    <title>テスト環境の仮想化</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/06/post-13.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1268</id>

    <published>2010-06-25T02:27:22Z</published>
    <updated>2010-06-25T02:32:18Z</updated>

    <summary>biz-Stream4.5.3の開発作業もほぼ最終段階に入り、QAはいよいよ今週から製品テストのフェーズに入りました。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="diskpartexe" label="diskpart.exe" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="vmware" label="VMWare" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="テスト環境" label="テスト環境" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="仮想化" label="仮想化" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="領域の拡張" label="領域の拡張" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<p>　開発チームがアプリの修正や更新を行っている間にテストの準備作業を進め、VMWare上で<br />
50近くの仮想環境を用意しました。</p>

<p>　何故それだけの環境が必要かというと、WindowsXPやVista等、OSの種類はもちろんですが、<br />
そのOSに搭載されるJREやブラウザのバージョン、検証する対象のbiz-Streamでも、クライアント、<br />
アプリケーション、サーバー、それぞれの用途や機能で環境を住み分けて構築しているからです。</p>

<p>　もちろん、1台のマシン上に複数のミドルウェアやbiz-Streamの機能を詰め込んだ状態で<br />
構築する事も可能ではあります。<br />
　実際、今ほど仮想化の技術が普及していなかった時代、アプリケーションの製品テストは<br />
数台の実機マシン上で、OS自体もデュアルブートで起動するような構成にし、様々な条件を<br />
集約した環境を作ってテストを行うしかありませんでした。<br />
物理的に使用出来るマシンの台数が限られていたからです。</p>

<p>　しかし、そういった混沌とした環境でテストを実施するとオペレーションも煩雑になりがちで、<br />
検証結果も分かりにくくなります。</p>

<p> 開発作業中のテストであれば、環境を整理する事よりもまず、早く検証結果を出す事が優先<br />
されます。しかし製品テストの場合、そうは行きません。<br />
　誤動作、誤認識のリスクを極力避けるために、検証対象の機能・条件以外の要素は出来る限り<br />
テスト環境から排除した方が良いのです。</p>

<p>　テストを実施している際に起きた問題ならば、その場ですぐ報告出来るので記憶を遡る必要<br />
はないのですが、リリースしてからしばらくして何か不具合が発覚した場合<br />
　「あの環境、条件でテストした時、結果はどうだったっけ・・？」<br />
という事態にしばしば陥ります。</p>

<p>　そういう時のために、製品テストは検証作業そのものはもちろんですが、結果を分かりやすく<br />
残しておく事も重要です。</p>

<p>VMWareはESXiになってから、Snapshotというマシンの状態を保存する機能を、32世代取れる<br />
ようになりました。そして、保存した状態はコンソールのスナップショットマネージャでツリー状に<br />
表示され、管理する事が出来ます。</p>

<p>　1つのOS上でも、様々なバリエーションでテストしなければならないQAにとって、<br />
この機能はとても重宝します。</p>

<p>判定結果が記述されたテスト仕様書やテスト時に出力したPDF、Excel、印刷画面やLog等の<br />
ファイル類だけでなく「テストを行った際のPCの環境・設定・条件」をそのまま保存しておく事が<br />
出来るわけです。</p>

<div class="float-block-C">
<div class="imageblock">
<img src="/blog/inastream/img/100625.JPG" alt="スナップショットマネージャで設定・状態を管理"  width="566" height="456" />
<!-- /.imageblock --></div>
<!-- /.float-block-C --></div>

<p>　単純に考えても、今回構築した50台近くの環境を実機で全て揃えたとしたら弊社のオフィスや<br />
サーバールームは、テストPCだけで埋まってしまいます。<br />
増してや、実機の環境であれば各1台毎にLANケーブル、電源ケーブル、ディスプレイケーブルが<br />
それぞれ物理的に付随していなければならない事を考えたら・・気が遠くなります。</p>

<p>　そんな、テスト環境を日々構築するうえで、仮想化環境ならではの利便性を改めて感じさせて<br />
くれた事例を1つご紹介します。</p>

<p>　社内でVMのホストとして使用できるマシンのリソースにも限りはあるので、個々のゲスト環境を<br />
構築する際、確保するディスク容量は必要最小限に留める事にしているのですが、<br />
WindowsXP上でMicrosoftのVisualStudio等、開発ツールをインストールした特殊な環境を準備<br />
する時、うっかりいつものようにHDの容量がたった8GBしかない状態で、ゲストを作ってしまいました。</p>

<p>　VMコンソールの設定メニューでHDを20GBに増量したのですが、基のOSがパーティションを<br />
8GBとしか認識していないので、OSのディスク管理メニューで確認しても「未割り当て」の領域<br />
が12GB増えたに過ぎません。。</p>

<p> XPや2003Serverには「<a href="http://support.microsoft.com/kb/325590/ja" target="_blank">diskpart.exe</a>」という、パーティション管理のコマンドが標準で装備されていますが、<br />
システム領域に対してこのコマンドを実行する事は出来ません。<br />
（※Vistaや7ならば、OS上の<a href="http://mbsupport.dip.jp/hdd_02.htm" target="_blank">ディスク管理ツール</a>）上で領域の拡張と圧縮が可能です）</p>

<p>そこで、別のXPのゲスト上にこのマシンのHDをマウントさせてdiskpart.exeを実行し、<br />
領域を拡張しました。</p>

<p>実機で同じ事を行おうとすると、筐体からHDを取り外して別のPCに付け替えて認識させ、<br />
拡張したら再び取り外して元の筐体に戻して・・という非常に面倒な作業になります。</p>

<p>　それが、管理コンソール上でプチッとやるだけで、瞬時に出来てしまうのです。</p>

<p>　VMを使いこなしている方ならば「何を今更・・」と思われるような事かもしれませんが、<br />
「サーバーの仮想化って、何か良い事があるの？」という質問に対する、明確な回答の1つ<br />
になり得る事例だと思います。</p>]]>
        
    </content>
</entry>

<entry>
    <title>簡単に始められるXAMP(R)環境</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/06/xampr.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1266</id>

    <published>2010-06-18T00:30:42Z</published>
    <updated>2010-06-18T00:32:17Z</updated>

    <summary>今回はInstantRailsの紹介をしたいと思います。 
Windows環境で簡単にWebアプリケーションを開発できるXAMR環境です。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bizstream" label="biz-Stream" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mysql" label="MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="oracle" label="Oracle" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rails" label="rails" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<!-- Important options, and finally the main call -->
<script type="text/javascript">
 SyntaxHighlighter.config.tagName = "pre" // use pre tags
 SyntaxHighlighter.config.stripBrs = false  // disregard trailing 
 SyntaxHighlighter.all()
</script>

<table class="table-A01" summary="CPUの比較">
<caption>《 XAMR 》</caption>
<thead>
 <tr>
<th scope="col">略</th><th scope="col">内容</th>
 </tr>
</thead>
<tbody>
 <tr><td><strong>X</strong></td><td>Windows</td></tr>
 <tr><td><strong>A</strong></td><td>Apache</td></tr>
 <tr><td><strong>M</strong></td><td>MySQL</td></tr>
 <tr><td><strong>R</strong></td><td>Ruby</td></tr>
</tbody>
</table>]]>
        <![CDATA[<p>私がInstantRailsを気に入っている点は</p>
<ul class="default">
<li>インストールが不要</li>
<li>Rubyが利用出来る(PHPも含まれています)</li>
<li>Apache&amp;MySQLの管理ツールが含まれている</li>
</ul>
<p>点です。</p>

<p>
今回は、この中からMySQLを利用してbiz-Streamに含まれるレイアウトファイルを動かして見ます。<br />
利用するサンプルは、biz-Streamに含まれるサンプルの中からDatabaseを利用したもの、<br />
OracleSample2.xml、OracleSample2-1.xml を利用します。
</p>

<p>
まず、サンプルで利用するテーブル、及びユーザーをMySQL側で作成します。<br />
InstantRailsが起動されていれば、 http://localhost/mysql/ のURLで<br />
WebでのMySQL管理画面を利用する事が出来ます。<br />
管理画面から、３つの事を行います。
</p>

<ol class="list-A01">
<li><span class="marker">1)</span> 特権(scott)の追加、及び権限の付加</li>
<li><span class="marker">2)</span> データベース（demo)の追加</li>
<li><span class="marker">3)</span> テーブル(EMP)の作成</li>
</ol>

<p>
※ 尚Oracle向けサンプルを動かす為に、MySQLでは大文字小文字が区別される為、<br />
テーブル＆カラム名は大文字を利用してください。
</p>

<div class="float-block-C">
<div class="imageblock">
<img src="/blog/inastream/img/100618XAMP1.JPG" width="600" height="300"  alt="MySQLに作成したデータ" />
<p class="caption">《 MySQLに作成したデータ 》</p>
<!-- /. imageblock --></div>
<!-- /.float-block-C --></div>


<p>
次はbiz-Streamのサンプルファイル、OracleSample2.xml内のDB接続情報を変更します。
</p>

<dl class="code-block-A01">
<dt>《 Oracleの接続設定 》</dt>
<dd>
<pre class="brush: xml; wrap-lines: true">
        &lt;bs:database-resource-master master-name="RDB-Oracle" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@demo:1521:demo" userid="scott" password="dGlnZXI= "/&gt;


</pre>
</dd>
</dl>

<dl class="code-block-A01">
<dt>《 MySQLの接続設定 》</dt>
<dd>
<pre class="brush: xml; wrap-lines: true">
        &lt;bs:database-resource-master master-name="RDB-MySQL" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/demo" userid="scott" password="dGlnZXI= "/&gt;


</pre>
</dd>
</dl>

<p>
※環境に依存する部分は、適宜変更するものとします。
</p>
<p>
あとは、biz-StreamでこちらをPDF化するだけです！！！
</p>

<div class="float-block-C">
<div class="imageblock">
<img src="/blog/inastream/img/100618XAMP2.JPG" width="566" height="350"  alt="biz－Streamで作成したPDF" />
<p class="caption">《 biz－Streamで作成したPDF 》</p>
<!-- /. imageblock --></div>
<!-- /.float-block-C --></div>


<p>
以上の手順で、Windows環境でDatabaseをインストールせずとも<br />
簡単にDatabaseを使ったアプリケーションの確認を行うことが出来ます。
</p>

<p>
皆様、これからもbiz-Streamをよろしくお願い致します。<br />
また、初めてこちらのサイトをご覧になり、<br />biz-Streamに関心を持って頂いた方は是非、
お気軽にお問い合わせ下さい。<br />
<a href="/request/biz-stream/contact_biz.html?utm_source=ias&amp;utm_medium=blog&amp;utm_campaign=ias_blog" target="_blank">「biz-Stream資料請求」</a>
</p>
]]>
    </content>
</entry>

<entry>
    <title>FAX送信サービス</title>
    <link rel="alternate" type="text/html" href="http://www.brainsellers.com/blog/inastream/2010/06/fax.html" />
    <id>tag:www.brainsellers.com,2010:/blog/inastream//4.1260</id>

    <published>2010-06-11T04:31:53Z</published>
    <updated>2010-06-11T05:04:49Z</updated>

    <summary>今日はテストで使用しているサービスについてご紹介したいと思います。</summary>
    <author>
        <name>製品開発部</name>
        
    </author>
    
        <category term="Technical" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="dfax" label="D-FAX" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="fax" label="FAX" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.brainsellers.com/blog/inastream/">
        <![CDATA[<p>biz-StreamにはFAX送信機能があります。<br />
xmlで作成したレイアウトを指定した送信先にFAXで送信します。</p>

<p>FAX送信する機能があるということは、<br />
当然テストのときにFAX送信機能のテストもするということです。<br />
でも、自分の会社のFAX回線を送信に使うので<br />
受信に同じ回線を使用することが出来ません。<br />
送信が出来ても受信が出来ないと、送信したデータの確認が出来ません。</p>

<p>FAX回線が2本あればよいのですが、ほかの事で必要なのならともかく<br />
テストのためだけに不要な回線を増やすのは無駄なので<br />
世の中の便利なサービスを使用することにしています。<br />
指定された番号にFAXを送ると、送ったデータを画像化して<br />
メールに添付して指定アドレスに送ってくれるサービスがあるのです。</p>

<p>ただしこのサービス、最後に利用した日から3ヶ月（法人は1年）経過した場合<br />
利用の意思がないものとして契約解除となります。<br />
まあよくある設定です。<br />
リリーステストはそんなに3ヶ月に1回やるようなものではないので<br />
テストのたびに毎回登録するなどという手間を省くには<br />
この契約をキープする手段が必要です。</p>

<p>具体的にどのようにすればいいか？簡単です。<br />
ときどき利用されていればいいのですから<br />
1月に1回忘れないように使うようにすればよいのです。<br />
人間が送ることにすると担当者が忘れたり休んだりすると困りますから、<br />
タスクスケジューラーを使ってみます。<br />
月に1度FAXを送信するタスクをスケジューリングします。</p>

<p>タスクスケジューラーが何らかの理由で動作しなかった場合にも備えます。<br />
FAX送信のタスクを設定したパソコンと別なパソコンに<br />
FAXが届いているか確認してくださいというメールをチーム全員に送る<br />
別なタスクを設定します。<br />
FAX送信のタスクが動かなかったときでもこのメールさえ見れば思い出すでしょう。</p>

<p>2つのタスクのうちどちらかが動作すれば1月に1回FAXを利用するのを忘れないので<br />
サービスの利用権を維持するのは簡単です。<br />
毎回リリーステストのたびにお世話になっています。<br />
なかなか便利なサービスなので興味のある方は<br />
<a href="http://www.d-fax.ne.jp/" target="_blank">D-FAX</a>のページをご覧になってみてはいかがでしょうか。</p>
]]>
        
    </content>
</entry>

</feed>
