2012年11月4日日曜日

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



2012年7月1日日曜日

LinkStationへのHDD増設

普段家で、LinkStationを利用しているがその容量足りなくなってきたので
増設することにしたときのメモ。
モデル名は「LS-QL F/W 1.05」らしい。もうすごい前に買ったので忘れてたのだが。。。

まず、HDDはよくわからんので価格.comで評価があんまり悪くない+安いので
WesternDigitalのWD20EARXを使用することにした。

「LinkStation HDD増設」とかでググると割と難しく書いてる人々がいて
正直怖かったんだが自分はあっけなくできた。(RAIDは元々組むつもりないんで外付けHDD気分でいい。)

【手順】

1.LinkStastionの電源をOFFり、LANケーブル、電源ケーブルを抜く。

 2.買ってきたHDDを元々付属の拡張ケースに付けて取り付ける。
このとき、スロット1はそのまま前からあるHDDが刺さってるので
スロット1とスロット2が埋まっている状態。

 3.電源を入れる。(自分はLANケーブルも刺した。)
    とりあえず、スロット2のランプがオレンジ色になる。

 4.WEB設定ページを見ると、スロット2がエラーみたいな事が書いてあるので
    フォーマットしてやる。
フォーマットは、WEB設定の「ディスク管理」->「フォーマット」から
    簡単にできる。形式は「XSF」

 5.あとは待つだけ。割と長かった。。。。
    ディスクチェックも勝手にやってるっぽい。
    LinkStationのランプが青色になったら、WEB設定の「共有フォルダ管理」から
    増設したHDDの共有フォルダを新規追加してやるだけでOK。

こんなに簡単にできるんなら、あと2TBくらい増設してもいいなぁ。と思った。


2011年11月12日土曜日

VBAでツールを作るのはもうやめようか。

業務でしばしばエクセルVBAを用いたツールを作ってきた。
簡易ツールもあるが、かなり業務を遂行する上で必須となるようなツールも作ってきた。

はじめて触れたのは新人のころで実行環境と開発環境がエクセル1個で済み、
マクロの保存なんかですぐにコードが保存できる点なども勉強しやすくこれはいいと思って
食い入るように勉強したのを覚えている。

ただ、最近はVBAでツールを作成することに少し疑問を抱いてきた。(重要度が高いツールに限る)

業務上必須となるようなツール。
例えば開発ルーチンに組み込まれるようなツール。
ソースの自動生成とか。試験ツールとか。

こういったツールは、開発の状況次第でメンテナンスが頻繁に発生したりする物だと思う。
エクセルVBAをわざわざ使うということは、そのツールの扱うデータはエクセルである場合がほとんどである。
エクセルVBAはエクセルのデータを参照する場合にはとても楽で悪いところが見当たらないように思える。
だが、メンテナンスが頻繁に発生する場合に以下の観点でエクセルVBAはとても扱いづらい。

・バージョンの管理
・使用者へのアップデート通知とその徹底
・メンテナンスを行う人間の教育


バージョンの管理について
エクセルVBAは開発環境自体がエクセルのVBエディタ機能を利用する。
そしてツールのコードは、フォーム、モジュール、クラスと分かれるがこれはエクセル形式として
内部にまとまってしまっている。
これらのコードのバージョン管理をきちんと行おうとすると?
それらをエクスポートして別管理としなければならない。
しかもそれらはまたインポートするなんて手間もかかる。

使用者へのアップデート通知とその徹底
バージョン管理ソフトにツール本体を管理させておいて、周知して最新版を使って下さい。
これならあまり問題はないのだろうが、問題なのはファイルサーバなんかにおいてしまった場合。
エクセルなんて簡単にコピーができる。
どこに派生しているかわかったもんじゃない。
そして、同じ名前が付いたツールを使用者全員が最新版かなんて意識しているほうが珍しいだろう。
最新版とそれ以前のツールを混合して使用された場合、そのツールで一定の品質なんて保てると言えるのだろうか。

メンテナンスを行う人間の教育
メンテナンスを行う人は、いつまでも初期開発者とは限らない。
僕の従事するプロジェクトは主にJavaをメインに扱うプロジェクトであったため
エクセルVBAをコーディングできる人間は割と少なかった。(ちょっと書ける程度の人間は省く)
そういったプロジェクトでメンテナンスできる人間を育てるのは面倒である。

上記のような理由で僕は最近VBAでツールを作成することに少し躊躇する。
これからはなるべくJavaを用いて業務ツールを作成しようと思う。
POI、VelocityをはじめJavaでも実現が可能だから。
あとVBAはOSによっていきなり参照が効かなくなったりするしね。

長々と講釈たれたなぁ。
何年後かに自分で見たら違う意見を持ってたりして恥ずかしくなるんだろうな。

2011年11月3日木曜日

MySQL5をMacにアンインストールとMacPortsで再インストール

MySqlはMacに前に入れたが、なんか入れ直したくなったので入れ直した。

まずアンインストール。
# rm -rf /usr/local/mysql
# rm -rf /usr/local/mysql-5.X.XXXXXXX
# rm -rf /Library/StartupItems/MYSQLCOM
# rm -rf /Library/PreferencePanes/MySQL.prefPane
# rm -rf /Library/Receipts/mysql-XXXXXXXXXXXXXX.pkg

次に、MacPortsの更新確認とか行う。
とりあえずこれは馬鹿長い。
sudo port selfupdate
sudo port upgrade outdated

MacPortsで再インストールする。
 
>sudo port install mysql5-server
 
…省略…
 
###########################################################
# A startup item has been generated that will aid in
# starting mysql5-server with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo port load mysql5-server
###########################################################
--->  Installing mysql5-server @5.1.59_0
******************************************************
* In order to setup the database, you might want to run
* sudo -u _mysql mysql_install_db5
* if this is a new install
******************************************************
--->  Activating mysql5-server @5.1.59_0
--->  Cleaning mysql5-server
 

以下のコマンドを実行しないと、MySqlが動かない。
 
>sudo -u _mysql mysql_install_db5
 
…省略…

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'
/opt/local/lib/mysql5/bin/mysqladmin -u root -h PC名.local password 'new-password'

Alternatively you can run:
/opt/local/lib/mysql5/bin/mysql_secure_installation
 
…省略…
  

rootのパスワードを上記メッセージないように従って、設定する。
 
>/opt/local/lib/mysql5/bin/mysqladmin -u root password '設定するパスワード'
 

これで再インストールは終わり。
続いて設定を行う。

MySQLの設定ファイルをテンプレートからコピーする。
 
>sudo cp /opt/local/share/mysql5/mysql/my-small.cnf /opt/local/etc/mysql5/my.cnf
 

編集する。
 
>sudo vim /opt/local/etc/mysql5/my.cnf
 
 …省略…
 
# The MySQL server
[mysqld]
port            = 3306
socket          = /opt/local/var/run/mysql5/mysqld.sock
skip-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
 
## OWNSETTINGS …書き加えたところ
default-character-set = utf8
default-storage-engine=innodb
skip-character-set-client-handshake
 

ここまでで再インストール作業は全て完了
すでにMySQLが立ち上がっているなら停止/起動を行う。

 
>sudo /opt/local/share/mysql5/mysql/mysql.server stop
 
Shutting down MySQL
... SUCCESS! 
 
>sudo /opt/local/share/mysql5/mysql/mysql.server start
 
Starting MySQL
. SUCCESS! 
 

ちなみに、MySQLの文字コードが以下のようになっていることを接続した後確認すると良いです。
 
mysql> show variables like 'char%';
+--------------------------+-----------------------------------------+
| Variable_name            | Value                                   |
+--------------------------+-----------------------------------------+
| character_set_client     | utf8                                    |
| character_set_connection | utf8                                    |
| character_set_database   | utf8                                    |
| character_set_filesystem | binary                                  |
| character_set_results    | utf8                                    |
| character_set_server     | utf8                                    |
| character_set_system     | utf8                                    |
| character_sets_dir       | /opt/local/share/mysql5/mysql/charsets/ |
+--------------------------+-----------------------------------------+
8 rows in set (0.00 sec)