2008年2月25日月曜日

AppTrap をインストールしてみた.

みんな知ってのとおり,Mac OS X にはアンインストーラーがない.ということで,AppTrap というアプリケーションを削除すると自動的に関連ファイルを削除
するソフトをインストールしてみた.

1. AppTrap の Web ページからダウンロード.

2. ダブルクリックしてインストール.

3. 環境設定に追加される.

4. AppTrap の設定を開く.

5. AppTrap を開始する.

6. 試しに Cyberduck をゴミ箱へドラッグアンドドロップしてアンインストールw(あくまで試してみただけで,あとからインストールし直したよw)

7. 関連ファイルを見ることができる.

8. ファイル移動をクリックすると,関連ファイルもゴミ箱へ移動される.

こんなかんじ.当然,アンインストーラーが付いてくるソフトの場合は,それをつかうこと.

2008年2月23日土曜日

Web Creators Vol. 75

使えそうな記事をメモっとく.

pp. 40-43. 配色
pp. 54-57. レイアウト
pp. 90 ピクトグラム
標準案内用図記号
pp. 91 アイコン
FreeIconsWeb
famfamfam.com
pp. 153 Fireworksでの見出し管理

2008年2月22日金曜日

ClamXav をインストールした.

Mac でもウイルスが怖いってことで,無料のウイルススキャンソフト ClamXav をインストールしてみた.結構,設定が面倒だったのでメモ.

1. ClamXav のサイトからダウンロードする.
2. Mac のソフトウェアらしくドラッグアンドドロップでインストール.
3. ~/Library/Contextual Menu Items/ に ScanWithClamXav.plugin をコピーし,ログインしなおす.
4. ダブルクリックで起動し,追加インストール作業を実行する.
5. 適当に設定する.設定例はこんなかんじ.






参考文献:
ClamXav ドキュメンテーション

追記(2008年2月22日):
なぜか,僕の環境ではスキャンを開始すると処理中から帰ってこなくなる.top で見ると動いてるようなんだけど,1ファイルだけを指定した場合でも帰ってこないので,結局使ってない.Norton AntiVirus 11.0 for Mac をダウンロード購入してしまったw結局 Windows 用にファイルを作成するとなると,ウイルススキャンしておきたいからねぇ.

2008年2月19日火曜日

Time Machine で初期バックアップを作り直す.

Time Machine で初期バックアップを作り直す方法.

1. システム環境設定で Time Machine をオフにする.
2. Finder から外付け HDD にある Backups.backupdb を削除する.
3. ターミナルから外付け HDD にある .com.apple.timemachine.supported を削除する.
$ sudo rm -i /Volume/(外付け HDD 名)/.com.apple.timemachine.supported
remove .com.apple.timemachine.supported? [y return]
$

4. システム環境設定で Time Machine をオンにする.

2008年2月18日月曜日

MacPorts を Leopard にインストール.

MacPorts を Leopard にインストールしてみた.なんか,パッケージからインストールすると,.profile を作ってくれるみたいなことが MacPorts Guide には書いてあるんだけど,作ってくれなかった.んで,その設定方法メモ.(X11 と Xcode はインストール済みってことで.)
$ echo export PATH=/opt/local/bin:/opt/local/sbin:$PATH >> ~/.profile
$ echo export MANPATH=/opt/local/share/man:$MANPATH >> ~/.profile
$ echo export DISPLAY=:0.0 >> ~/.profile
$ source ~/.profile
$ sudo port -v selfupdate

Gmail の IMAP を Mail でつかう方法.

Gmail とかの Web メール便利なんだけど,Mail で管理したいよってことで設定してみた.結構簡単にできて便利なので試してみて.あと,Hotmail もやりたかったんだけど,なんか Hotmail Plus にしないとできないらしいのであきらめた.プラグイン入れたりしなきゃならなくて面倒くさそうだったし・・・.

それでは,Gmail を設定しよう♪

1. Gmail 側の設定
1.1. IMAP を有効にする.


2. Mail 側の設定
2.1. メニューバー>ファイル>アカウントを追加…をクリックする.


2.2. アカウントを追加.氏名とメールアドレス,パスワードを入力し,自動的にアカウントを設定のチェックをオフにし,続けるをクリックする.


2.3. 受信用メールサーバ.アカウントの種類をIMAPにし,受信用メールサーバを imap.gmail.com にし,続けるをクリックする.


2.4. 送信用メールサーバ.送信用メールサーバをsmtp.gmail.comにし,このサーバのみを使用のチェックをオンにし,続けるをクリックする.


2.5. アカウントの概要.内容を確認し,作成をクリックする.


設定完了♪これですてきな Gmail ライフを送ろうw

2008年2月17日日曜日

CVSのコミットログの文字コードを変換するスクリプト.

とうとう,Leopardになった〜.なかなか快適だね♪クリーンインストールということもあって軽いしね〜.(むしろ,なんでTigerがあんなに重くなったのかわかんない・・・.甘いもの食べ過ぎ?w)

それで,まあほぼ1日中Leopardさわって,環境整備してたわけだけど,NetBeansでCVSのコミットログが文字化ける状態になってたんだよね.原因は,MacPortsでインストールしてたCVSを使ってたことかなぁ.(たぶんね.)それで,まあMacPortsからCVSいれれば直るんだろうけど,付属のCVSで困らなそうだし,ソースの文字コードがUTF-8で,コミットログの文字コードがSJISってのがやだったから,変換してみた.

PHPで適当に書いた変換スクリプトはこんなかんじ.
#!/usr/bin/php
<?php
$project_dir = '/cvsroot/project_name';
$to_encoding = 'UTF-8';
$from_encoding = 'SJIS';

// ディレクトリ以下の全ファイルパスを配列に取得する.
$files = split("\n", shell_exec('find ' . $project_dir));
if (!ereg('^'. $project_dir, $files[0])) {
exit;
}

// 末尾が「,v」のファイルのログをコンバートする.
for ($i = 0; $files[$i] != ''; $i++) {
if (ereg(',v$', $files[$i])) {
echo $files[$i] . "\n";
echo '>>>>>START>>>>>' . "\n";
log_convert($files[$i], $to_encoding, $from_encoding);
echo '>>>>>END>>>>>' . "\n";
echo "\n";
}
}

// ファイルのログ部分を変換する.
function log_convert($filename, $to_encoding, $from_encoding)
{
// ファイルを配列に読み込む.
$contents = split("\n", file_get_contents($filename));
if (!$contents) {
exit('Error occured in reading ' . $filename . "\n");
}

// 全ログ変換
$inlog = false; // ログ読み込み中フラグ
for ($i = 0; $i < count($contents); $i++) {
// ログフラグのアンセット
if (ereg('^@$', $contents[$i])) {
$inlog = false;
}

// ログ変換
if ($inlog) {
$contents[$i] = mb_convert_encoding(
$contents[$i], $to_encoding, $from_encoding);
echo $contents[$i] . "\n";
}

// ログフラグのセット
if (ereg('^log$', $contents[$i])) {
$inlog = true;
}
}

// 配列をファイルに書き出す.
/* 出力が正常である場合,このコメントを外すこと.
$ret = file_put_contents($filename, implode("\n", $contents));
if (!$ret) {
exit('Error occured in writing ' . $filename . "\n");
}
*/
}
?>

使い方は,$project_dirに変換したいプロジェクト(もしくは,それ以下のディレクトリやファイル.)のパスを,$to_encodingに変更先文字コードを,$from_encodingに変更元文字コードを設定する.$from_encodingにカンマ区切りの文字コードを設定することもでき,"auto"を設定すると"ASCII,JIS,UTF-8,EUC-JP,SJIS"を設定したことと同じになる.

あとは,ターミナルからつぎのようなかんじで実行する.
$ chmod u+x cvs_commit_log_converter.php
$ ./cvs_commit_log_converter.php

これで変換される部分が変換された結果として出力されるはずだから,ここで文字化けしてないことを確認する.そして,スクリプト末尾のコメントアウトを外し,ファイルに上書きするようにしてつぎのように実行する.当然バックアップをとってからね.(できれば,sudoじゃないほうがいい.ファイルに書き込み権限を設定してから書き込んで,もとの権限に戻した方がね.今回は,面倒だったので省略.)
$ sudo ./cvs_commit_log_converter.php

いちおう,MIT Licenseで公開でw

2008年2月16日土曜日

javadoc の java.lang.String とかを JDK6 の String にリンクさせる.

タイトルのまんま,javadoc の java.lang.String とかを JDK6 の String のページとかにリンクさせる方法.

NetBeans では,プロジェクトのコンテキストメニューからプロパティーをクリックし,

構築>ドキュメント化>追加> javadoc オプション

に,

-link http://java.sun.com/javase/ja/6/docs/ja/api/

を設定する.

これで, javadoc で生成したドキュメントの java.lang.String が,String になって幸せになれる♪

2008年2月15日金曜日

JUnit 4.4 の機能,assertThat と Assumptions,Theories について.

JUnit を知れば知るほどおもしろくなってきた♪JUnit 4.4 の機能について調べても日本語の情報があんまりなかったから,メモとして書いとこう.

さて,まずはassertThatについて.このメソッドの説明は,実際の使用例を見てもらった方がわかりやすいと思うので,まず次の使用例をみてみて.(JUnit 4.4 Release Notesより.)
assertThat(x, is(3));
assertThat(x, is(not(4)));
assertThat(responseString, either(containsString("color")).or(containsString("colour")));
assertThat(myList, hasItem("3"));

深読みせずに読むと,上から「x は3.」「x は4ではない.」「responseString は,color か colour を含む文字列.」「myList は,3を要素として含む.」というふうになる.いつもなら(といえるほど使い込んでない僕が言ってみるw),assertEquals(x, 3) とかってやるんだけどね〜.

さて,この書き方を見ておおすげぇと思わなかった僕と同じ人種の人は,つぎの利点をみて考えてみよう♪

・主語,述語,目的語の順だから読みやすい.
・not(s) や either(s).or(t) のような Matcher の組み合わせが可能.
・テスト失敗のときのメッセージが読みやすい.
・Matcher インタフェースを実装することで,カスタム Matcher を作成できる.

ということらしい.便利だなたぶん・・・.まっ,いままでの assertEquals とかもなくなるわけじゃないから,使いやすい方を使えばいいと思う.

つぎっ!Assumptions.ん〜,よくわかってないんだけど説明するか.Google 先生に教えてもらいながらね.

assumption とは前提のこと.つまり,プログラマが想定しているテストの前提条件を明示的に記述するためのメソッド.普通に考えると不思議に思うのは,前提が満たされないとテストは成功すること.これは,数理論理学の論理包含(含意)を考えると解決すると思う.assumptionassertionってことだね.

File.separatorChar(ファイル区切り文字)が'/'であることを前提としている場合はつぎのようになるらしい.
import static org.junit.Assume.*

@Test public void filenameIncludesUsername() {
assumeThat(File.separatorChar, is('/'));
assertThat(new User("optimus").configFileName(), is("configfiles/optimus.cfg"));
}


うーん,便利さがいまひとつわからないなぁ.

最後〜.Theories.これも今ひとつふーんてかんじでわからん.

Theory とは,定理のこと.この定理は,メソッドが入力値の無限集合のすべての要素に対して,おそらく正しく振る舞うことらしい.(意訳だから違うかも.)この定理を JUnit で実現するみたいなかんじ.

僕の勝手な解釈では,あるメソッドの処理に具体的な値をいろいろとぶっ込んで,メソッドが定理であるようにテストするということ.

使用例はこんなかんじらしい.(めんどくて実行してない.ここまで書いて,NetBeans の JUnit はバージョン4.1じゃんってことに気づいたんだよね・・・orz)
@RunWith(Theories.class)
public class UserTest {
@DataPoint public static String GOOD_USERNAME = "optimus";
@DataPoint public static String USERNAME_WITH_SLASH = "optimus/prime";

@Theory public void filenameIncludesUsername(String username) {
assumeThat(username, not(containsString("/")));
assertThat(new User(username).configFileName(), containsString(username));
}
}

JUnit 4.4 Release Notes をなんとな〜くよんでみると,UserTest クラスは,filenameIncludesUsername メソッドを DataPoint アノテーションが付いたデータを引数として各々実行するみたい・・・.(本当かぁ?)

ということで,最後はぐだぐだなかんじでしめたw詳しく解る人はぜひ教えてください.

参考文献:
速攻解説! JUnit 4.4 - 新アサーションメソッド「assertThat」の用途とは
速攻解説! JUnit 4.4 - 前提条件をAssumeで表現、実験的アサーションTheory
JUnit4をやってみよう
JUnit 4.4 Release Notes
popper Tutorial(POP3サーバとは関係ないよw)
The Practice of Theories(読んでないけど参考になるはず.)

2008年2月14日木曜日

serialverの使い方.

なんか,独自に例外クラスを定義しようとしてたら,serialVersionUID なるものがあることに気づいて調べてたら,今回のエントリを書くところにたどり着いた感じw

んと,どっから説明したらいいんだろ.とりあえず,serialVersionUID から説明すると,Serializable インターフェースを実装してるクラスは,private static final フィールドとして保持しといた方がいいよってものらしい.(詳しくは,リンク先を見てくれぃ.)

じゃ,なんで例外クラスを定義しようとしてたらそれが出てきたかっていうと,Throwable クラスがそれを実装してるから.なんでかはよくわかってない・・・.

ということで,その serialVersionUID なるものを生成するツールが serialver なのだ.その使い方は次のとおり.(NetBeans プロジェクト前提だよ〜.)

プロジェクト名:Example
完全クラス名(パッケージ名含む.):org.legna.example.ExampleException
$ serialver -J-Dfile.encoding=UTF-8 -classpath ~/NetBeansProjects/Example/build/classes org.legna.example.ExampleException


というかんじ.-J オプション以下は文字化け対策で,java の出力を UTF-8 にしてる.(オプション指定しても,ターミナルが UTF-8 設定じゃないと化けるけどねw)-classpath オプションは,そのままクラスの入ってるディレクトリへのパス.最後に,完全クラス名を指定する.

ここら辺の話ってよくわかんないね.それに,例外の話がきちんと載ってるところって少ないよね.

2008年2月13日水曜日

Code Coverage Plugin を Netbeans にインストールしてみた.

NetBeans 6.0.1 日本語版がリリースされたね(遅 それを機にバージョン管理システム使って,ユニットテストしてみたいな開発をやってみてたんだよね.そしたら,Code Coverage Plugin なんて面白そうなものがあるではないか!ってことでインストールしてみたわけだ.

インストールする前に Code Coverage ってなんじゃ〜って人のために説明すると,Code Coverage(コード網羅率)とは,テストによって実行されたソースコードの割合のこと.つまり,処理Aと処理Bがあって,テストで処理Bだけが実行された場合,処理Aのコードは実行されていないから,コード網羅率は50パーセントになるってことなんだよね.(処理Aと処理Bのコードが同じ量だったらだけどね.)

では,インストール.

1. NetBeans 6.0.1 のメニューバーのツール>プラグインから,Code Coverage Plugin をインストールする.


2. プラグインを有効化(Activate)する.


3. テストを実行し,テストによって網羅されたソースが緑色になっていることを確認する.


とりあえず,使える状態にはなったけど,網羅率をどうやって表示するかは調査中.EMMA を内部で使ってるみたいだから,ブラウザで Code Coverage を表示できるはずなんだけどなぁ.NetBeans の GUI から行けると楽なのに.

追記(2008年2月13日):
Code Coverage レポートをHTMLファイルとして出力する.
プロジェクト名:JavaApplication1
レポートファイル:~/coverage/index.html
$ cd ~
$ java -cp ~/.netbeans/6.0/modules/ext/emma.jar emma report -r html -in ~/NetBeansProjects/Catus/coverage/coverage.emma -in ~/NetBeansProjects/Catus/coverage/template.emma


レポートファイルを Safari で表示するとこんな感じ.


NetBeans の GUI からはできないんかなぁ・・・.