2013年6月9日日曜日

Ubuntu 12.04LTS ~リモートアクセスのrootを有効にする~

まずは、以下でsshをインストール


sudo apt-get install ssh


デフォルト状態では、rootでのログインが可能となっているらしい。
だが、Ubuntu自体にrootを利用する設定を行っていなかったのでログインできなかった。
なので、以下でrootのパスワードを設定してやる必要があった。


sudo passwd root
(パスワードを2回聞かれるので設定)


ここまでくれば、UbuntuへMacからSSHで接続可能だ。

 

ssh 192.168.XXX.XXX -l root


【参考】
http://www.server-world.info/query?os=Ubuntu_12.04&p=initial_conf&f=2
http://d.hatena.ne.jp/Fiore/20080228/1204174833

2013年3月5日火曜日

POIの実装の選択肢

Apache POI といえば、言わずと知れたJavaでExcelを扱うための便利なライブラリ。
Excelを扱ういろんなJavaのライブラリやツールが存在するが、内部はPOIでした。
なんてことが良くあるくらい鉄板ライブラリ。

POIは、ツールで利用する程度の実装ならあまり気にしないが、
とても多くのメモリを消費する。
それは、実ファイルサイズの10〜20倍くらいまで飛躍する。
また、Office2007以降のExcelファイルを扱う場合にとても顕著に現れる。

なので、本番システムでPOIを利用する場合には、メモリ問題に意識を置く必要がある。
(本番システムでPOIを使うのはどうかと思うが、仕方ない場合)


POIには、大きく2つのモデルが存在する。
以降の話はOffice2007を前提とする。

◆ユーザモデル
 ユーザモデルは、ExcelのBookを丸ごと読み込んでマクロ感覚で扱える。
 一般的にググって出てくるネタは大抵がこのユーザモデルの場合が多い。
 このユーザモデルは、Excelを丸ごと読み込むってところで
 大量のメモリを消費してしまう。
 そのかわりとても簡易的なコードで分かりやすく扱えるメリットを持つ。

◆イベントモデル
 イベントモデルは、Excelの情報をシート単位でメモリ上にあげて処理を行える。
 これは、Office2007をZIP解凍したことのある人はすぐにピンとくるだろうが、
 シート毎に別れているXMLを読んでいる訳である。
 従って、内部ではXMLの解析となる。
 
 イベントモデルは、メモリの消費量を抑えるためのものであるため
 当然ながらXMLの解析はSAXで行う。

 XSSFReaderというクラスがSAXパーサとして公開されており、
 1セルごとのイベントをユーザがハンドリングするためのインタフェースを
 インナークラスとして定義している。
 従って、ユーザはこのインナークラスを実装したコンテンツハンドラを実装する。
 
 ただ、日本で使用する場合には注意点がある。
 POI(3.8)で確認した時に、漢字を読み込むと以下のように取得される事象があった。

 Excel上の文字列:「亜」
 POIで読み込んだ文字列:「亜ア」
 
 これは、バグでSharedStringTableという辞書みたいなXMLに記載されている
 マルチバイトの文字列で東アジア圏内の発音のために用意されているタグを
 POIが意識していないためである。

 この事象を修正するには、自分でSharedStringTableのパーサを修正するか、
 POIのバグFix版を使うしかないだろう。


上記が、いわゆる2大処理方式となる。
その他に、書き込み限定で利用できるストリーミングユーザモデルというものもある。
これについては、また別の機会に書く事にする。

2012年11月4日日曜日

Ubuntu 12.04LTS Eclipseのインストール

自宅のUbuntuにEclipseをインストールする。
ここで開発をすることは特にないが、とりあえずUbuntu上でデバッグ環境を整えて置きたかった。

Eclipseのインストールは、ソフトウェアセンターで「Eclipse」をインストールするだけでOK。
以降は、その他もろもろ自分がインストールしたかったものについてのメモとなる。


▼日本語化

ソフトウェアセンターにて、Eclipseを検索すると、以下のソフトが見つかる。
 「Japanese Language package for Eclipse using Dynamic AOP, Pleiades」
 こいつをインストール。
  
 インストール先は、以下みたい。
 /usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades

 適応するところまで、自動でやってくれんのかと期待したがそれは無理みたいだ。
 
 ・日本語化を適応する方法
  
  Eclipseのiniファイルに一行足すだけでよかった。
  
 
$ sudo vim /usr/lib/eclipse/eclipse.ini
-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar 
起動すると、日本語が適応されているので安心安心。


▼SVN

SVN上に普段ソースの管理を、行っているのでSVNとアクセスできないとキツい。
 なので、「Subversive」をインストールした。

 これは、Eclipseからインストールを行った。
 ヘルプ→新規ソフトウェアのインストールからまぁいろいろやって入れた。
 ここは面倒なので割愛する。

 ちょこっとだけハマったところは、SVNコネクターの指定をしていなかったのか、
 最初に選ぶのをミスったのか知らないが、設定されていなくてリポジトリを見ることができなかった。

 結局、もう一度新規ソフトウェアのインストールからSVNコネクターを
 「SVNKit 1.5.3」とかでインストールして設定したらうまくいった。



Ubuntuのソフトウェアセンター

家の旧WindowsマシンをUbuntuにしてしまっているが、
これが便利というか使いやすくなっていて重宝する。

特にソフトウェアセンターなるものがあって、すぐに必要なソフトを入れれるからだ。
いわゆるMacのAppStoreみたいなノリだと思う。

ここにSVNやらMySQLやらもあるのでびっくりする。
しかもインストールってするだけで簡単に入っちゃう。

今までコマンドラインで面倒なことをいろいろしなきゃダメだった分、
とても便利に感じる。

うん、ただそれだけ。

2012年9月5日水曜日

Selenium2-WebDriver 本格運用するには①

Selenium2のWebDriverを本格運用するには、カスタマイズが必要不可欠みたいだ。
なぜなら、単純にSeleniumIDEでエクスポートしたJavaファイルを実行しても実行できないから。

例えば、FireFoxで動作指せようとした場合、
JavaのシステムプロパティにFireFoxの実行ファイルのパスを設定しなければならなかったりする。

System.setProperty("webdriver.firefox.bin","FireFoxの実行ファイルのパス");

Chrome、IEでは同様にドライバのパスをシステムプロパティに設定してから
WebDriverを生成しなきゃならない。(他の方法もあるのだが似たようなもんだ)

これでは、システマティックにみんなが利用しやすくするには
独自カスタマイズをしなきゃ無理だ。
おそらく、カスタマイズして使ってくれっていうスタンスなんだろうが。



一番手っ取り早い解決は、プロパティファイルに切り出してしまう事。
以下みたいに。
webdriver.firefox.bin=FireFoxの実行ファイルのパス

そして、それをロードしたものをシステムプロパティに入れてしまえば良い。 とりあえず、僕はそうしている。

小ネタだがChromeドライバは、簡単に取得できるが最新版を取り続けていないといきなり動かなくなったりする。 特にChromeの自動更新をONにしてる人とか。

2012年9月3日月曜日

Thymeleafが気になって仕方がない

Javaでツールを作っているときに、
ツールの結果としてHTML出力って方法を僕は取りがち。(どーでもいい)

僕が取る手段は、いつも以下の2つのどちらかにしてしまう。
•XSLT
•Velocity

XSLTは、割と最後まで組むのが面倒だから本気モード以外ではあんまり利用しないかも。
JavaScriptとか埋め込むのも&&とかを&にしたりとだるいしね。。。

XSLTもVelocityも割と使われてる技術だろうし、資料もいっぱいあるし良いのだが、
まずプロト的なHTMLを作成して、それに合わせてXSLなりVMを組まなきゃダメ。
しかも修正するとなると、割と面倒だ。


そんな悩みを解消してくれそうなものがあった。
Thymeleaf 

プロトHTMLをそのままテンプレートとしても使えるらしい。
狙いは当然ながらデザイン会社にWEBデザインを委託するような開発だろう。
デザイン会社さんが作ったプロトHTMLをそのまま使っちゃえということ。

これは試してみないとなぁ。。。早めに試したいところです。

Selenium2-WebDriver

2010年8月、なんか業務が暇だったのかよく覚えてないが
WebブラウザをJavaで操作したいと思ってた。(スクレイピングネタとかだっけな…)

そのときに、ググった結果以下の2つがヒットした。
•Selenium
•WebDriver

そのときは、ちょこっとWebDriverを触って終わった。
そんで僕が、SpringやらJSFやらCassandraに打ち込んでいる1年間に、
SeleniumがWebDriverを統合しちゃってて、それを半年後に知った僕は今更打ち込み始めている。

現在のSelenium2には、大きく分けて以下があるようだ。
•SeleniumIDE
•SeleniumRC(RemoteControl)
•SeleniumGrid
•SeleniumWebDriver


SeleniumIDE FireFoxのプラグインとして提供されている、Seleniumのテストケース/テストスイーツを作成するための物だ。
これはすごく便利でWebブラウザ上のオペレーションを記録でき、その内容をそのままJavaやPHPといった多数の言語のテストケースにエクスポートが可能である。



SeleniumRCこれは、前から存在しているSeleniumのテストツール本体。 テストサーバを建てて、そのサーバに対して上記のIDEで作成したテストケース/テストスイーツを喰わせることによってテストを行う。テストサーバといってもjarを実行するだけのとても簡単な手順だった。このSeleniumRCはレポートも出してくれるのだが、僕が期待したクオリティではなかった。


SeleniumGrid SeleniumRCを複数たてて、その前にハブとか呼ばれるものを1個建てて分散させてテストを実行させるためのもの。
それ以上は調べてない。。。。


SeleniumWebDriver RC、Gridとは異なる実行形態のテストツール。 単純Javaアプリケーションでも容易に利用ができ、拡張性も高い。 WebDriverは、SeleniumRCがJavaScriptで動くのに対してWebブラウザ自体や、ドライバを介してブラウザを操作するイメージを僕は持っている。故にJavaScriptのセキュリティの壁を乗り越えたテストケースを組めるみたい。

僕が興味があるのは、WebDriver。
そして目下勉強中。。。。
困った事とか、ちょこちょこ書いていきます。

Seleniumは、業界の敵なのかもしれないが、、、
無駄なコストとも思える回帰テストを嫌がる雇い主や作業者は山ほどいるはずだ。
ただ、サクッと使いこなせるのであればもうちょっと広まってていいはず。
早めに使いこなせるようになって生き残らねば…