2007-07-01 [長年日記]
★ バッグ
長い間、いわゆる「パソコンバッグ」みたいのを使っていたのだが、いいかげんいやになって、だいぶ経つ。久しぶりに職場が変わるってことで買ったのがこれ。トートも最近はスーツでもOKな感じだしちょっと悩んだんだけど、まぁそれはそれで別に買えばいいかと手さげ+肩掛けな鞄にした。MacBookが入って薄手、を念頭に選んだ。デザインとか質感とかは結構気に入ってるのだが、ビミョーに使いづらい。まぁ、今の現場はPC持ってくこともないし、通勤時間が短いので本をいれることすらないんで別にいいんだけどね。値段がパソコンバッグの10倍ぐらいだったのがアレだけど。
2007-07-02 [長年日記]
★ ラザニア超めんどくせぇ
ラザニア作った。超めんどくさい。
ベシャメルは昨日作って、今日ミートソース作った。パスタしいて、ミートソースひいて、ベシャメルひいて、モツァレラひいて、パスタしいて、ミートソースひいて、ベシャメルひいて、パルメザンふりかけて、バターのっけてオーブンへ投入。180度で25分。
まぁ、でも、うまかった。かなり。
2007-07-05 [長年日記]
★ DAOを直接newしちゃってるアクションをテスト
DAOのファクトリメソッドを抽出する。
class HogeAction extends Action {
public void execute() {
HogeDao dao = getDao();
List list = dao.findAll();
setAttribute("list", list);
}
protected HogeDao getDao() { return new HogeDao(); }
}
HogeDaoを継承したMockHogeDaoを作成し、必要なメソッドを実装する。モックのDAOを返すファクトリメソッドを実装した匿名クラスをnewしてテスト。
class HogeActionTest extends TestCase {
public testExecute() {
HogeAction action = new HogeAction() {
protected HogeDao getDao() { return new MockHogeDao(); }
}
action.execute();
List list = (List) action.getAttribute("list");
assertEquals(2, list.size())
Hoge hoge1 = (Hoge) list.get(0);
assertEquals(1, hoge.getId());
assertEquals("hello", hoge.getName());
// ... ...
}
private class MockHogeDao extends HogeDao {
public List findAll() {
List list = new ArrayList();
list.add(new Hoge(1, "hello");
list.add(new Hoge(2, "world");
return list;
}
}
}
StrutsTestCaseで使うにはアクションを外に出してRequestProcessorいじらないとムリか。めんどくせぇ。
参考:
★ ド忘れ
○「UNIXでディスクの空き容量表示するコマンドなんでしたっけ?」
...引っ掛け問題? ちなみに俺が聞かれたわけではない。
隣人「あー、ド忘れしたなぁ。」
隣々人「使わないと忘れるよねぇ。」
最終的に隣々人の人がコマンド本調べて教えてあげていました。
そんな平和な午後でした。
★ バジリコ
バジル、松の実、にんにく、パルメザン、オリーブオイルに塩少々をフードプロセッサでガーッてやって、パスタにからませればはいできあがり。
食す。うーむ。よく考えてみると、バジリコほとんど食ったことがないんでこれでいいのかよくわからんw まぁ、たぶんあってるだろう。
アンティパストはイワシのマリネ。
2007-07-06 [長年日記]
★ ずっと俺のターン
なんか最近、
検証 → ドキュメンテーション → 俺のターン → 検証 → ドキュメンテーション → 俺のターン
って感じで続いている。まぁ、検証もドキュメンテーションも嫌いではないんだが。
ちなみに、俺のドキュメンテーションは結構ウケがよい。文書自体もアレだが、なんつっても、Wordを使いこなしているところが大きいと思われる。つか、みんな、文書にExcel使うな、Word使え。
★ サーモンのクリームパスタ
パスタを鍋にほおりこんだら、サーモンを適当な大きさに切って、オリーブオイルをひいたフライパンでちょっと炒めて、塩コショウふって、白ワインで風味付けして、小麦粉とバターでとろみ付けしつつ、生クリームと茹で汁加えてたら、なんとなく茹で上がったパスタからめて、食ってみたのだが結構いい感じにできてたので、ちょっとうれしくなったり。
パスタも基本レシピは一通りやった感じがあるが、いよいよ明日、最終兵器が届く。楽しみではある。
2007-07-07 [長年日記]
★ ドリームガールズ
ビヨンセ結構好きなんだけど、この映画やってることに全然気がつかなかった。 orz
60'sぐらいのR&Bな話。シカゴと同じくミュージカル仕立て。内容的にはわりとありふれた感じなので、ミュージカルに興味がなければスルーでいいのかな。
★ 竃
新宿西口のいつも歩かないあたりを散策してみた。結構メシ屋がいっぱい。ラーメン屋もメジャーどこが。竃、麺屋武蔵、二郎とか。
竃へ入る。普通のラーメンを注文。昔ながらのラーメン、って感じなのね。そんなに好みというほどではなかった。
東京麺通団って讃岐うどん屋も見かけた。某麺通団と関係あるのかどうかは知らんが、ちら見した感じでは、客が入り口でうどんもらって奥へすすんでったからそうなのかもしれない。そのうち入ってみよう。
★ 最終兵器
最終兵器届きました。パスタマシンです。
今まで乾麺ばっかりでしたが、一度自分で打ってみたいなぁってことで。
とりあえずなんとなくやってみます。
強力粉300gとタマゴ3コ(画面では2コですが)をコネコネと。イマイチわかんない。
10分ぐらいこねました。ここで冷蔵庫に投入して1時間ぐらい寝かせます。
ようやくパスタマシンの登場です。打ち粉をしつつ、カッターじゃないほうで数回のばします。こうすることでコシを作るらしいです。で、最後にカッターで切ります。...失敗しました。つっかかってうまくでません。(;_;) はじっこはダマみたいになっちゃってます。切る前の乾燥がちょっと足りなかったようです。
一応試食。なんかすごく「やさしい」感じの味になるのね。生パスタって。パスタって言えるかビミョーだけど。もっとうまくできるようがんばろう。
どうでもいいが、部屋中粉だらけである。
2007-07-08 [長年日記]
★ アランチーニ
いわゆるライスコロッケみたいな。これまためんどくさい。
- ミートソースを作る。
- 米をリゾットの要領で炊く。終盤でミートソースを入れ、チキンライスな感じにする。
- モツァレラを中に入れて丸く握る。
- 小麦粉・タマゴ・パン粉をつけて油に投下。パン粉は手で潰して細かくしておくとそれっぽい。
- イイ色になったら、油をきって盛り付け。トマトソースひいて粉パセリふりかけてみた。
これだけでお腹いっぱいになっちゃった。メインの準備もしていたんだけどこれはまた明日ということで。。。
2007-07-09 [長年日記]
★ 鯛 with 赤ピーマンのソース
近所のスーパーで赤ピーマンがどっさり並んでたので買ってみた、のは昨日のこと。レシピ本見ながらソース作ってみました。
- タマネギと赤ピーマンを千切りに。炒める。
- トマトソースと水を加えて煮込む。30分ぐらい。
- フードプロセッサでトロトロになるまで。
- 塩コショウで味付け。
で、今日は鯛を買ってきました。表側に塩コショウ。全体に小麦粉。焼く。仕上げでバターをちょっと。レモン汁あってもよかったかも。で、ソースの上にボトッと。パセリをパラパラ。付け合せはホウレンソウ。
予想以上にうまかった。いやマジで。
★ 実装なしよ
○「☆なさんは今回実装なしです。」
な、なんだってー!!!
いや、なんか、今回の俺のタスクは、
- Seleniumを中心としたテスト環境の整備とワークフローの作成
- コードレビュー
になるらしい。まぁ、今更Strutsで業務ロジック組むよりはかえってよいかもしれん。実装なしっつっても、Seleniumの拡張とかせないかんし。
★ SeleniumからExcelのレポートを作成
SeleniumをHTAで走らせるとHTMLのレポートを作成することができる。こいつをHTMLでなくExcel形式で客に出せるぐらいのレポートを作成できるか?
selenium-testrunner.jsにあるTestResult#_saveToFileが実際にHTMLを出力しているところ。アンスコではじまってるからprivate扱いなんだろうけど、他に拡張できるところがないのでここをどうにかする。
user-extensions.jsに追加。
TestResult.prototype._saveToFile = function(fileName, form) {
// This only works when run as an IE HTA
var inputs = new Object();
for (var i = 0; i < form.elements.length; i++) {
inputs[form.elements[i].name] = form.elements[i].value;
}
var testNum = inputs['numTestTotal'];
for (var rowNum = 1; rowNum < testNum; rowNum++) {
// inputs['testTable.' + rowNum]にテストケースの
// HTMLのテーブル部分のソースが入ってくるのでブンまわしてどうにかする
}
};
テンプレートかなんか作っておいて、Excel.Applicationで開いて…あとはVBAレベルの話(JScriptだけど)。テストスーツオブジェクトとかがとれればいいんだけど、ちょっと面倒そう。とりあえず、これでやってみる。
2007-07-10 [長年日記]
★ 就任
今日、PLから体制図もらった。俺んとこに「品質管理」って書いてあった。SeleniumにCheckstyleにコードレビューだからまぁそうなのか。
★ SeleniumからExcelのレポートを作成 (2)
昨日の続き。
var table = inputs['testTable' + rowNum];
// 生のままパースするのはツライのでDOMにしちゃう
var div = document.createElement('div');
div.innerHTML = table;
var trs = div.getElementsByTagName('tr');
for (var i = 0; i < trs.length; i++) {
var tr = trs[i];
var tds = tr.getElementsByTagName('td');
var command = tds.length > 0 && tds[0].childNodes ? tds[0].nodeValue : null;
var target = tds.length > 1 && tds[1].childNodes ? tds[1].nodeValue : null;
var value = tds.length > 2 && tds[2].childNodes ? tds[2].nodeValue : null;
//command, target, valueの組み合わせを適当に定義しといてアウトプット
var className = tds[0].className;
if (tds[0].className.match(/status_(?w+)/)) {
//classのstatus_*には、テストの正否が入っている
}
}
ってな感じで、あとは好きなフォーマットで出力すればよい。
2007-07-11 [長年日記]
2007-07-14 [長年日記]
★ GOING UNDER GROUND tour 2007 TWISTER
人に誘われて、GOING UNDER GROUNDのライブに行ってきました。俺自身は三ツ矢サイダーのCM
ぐらいしか知らないんですけどね...
ツアー最終日で、場所は日比谷野外音楽堂です。野外ライブですw。この台風の中、カッパ着て腕振りまくってきました。腕降りすぎてカッパ破けました。まぁ、あの雨の中ではカッパ着ててもビショビショだったんですが。それに実際は雨の方はあんまり気にならなかったんですが、前の席の190cmぐらいの人のおかげでステージが見えにくかったのが非常に残念でしたw
たまにはこんなんもええやね。
2007-07-17 [長年日記]
★ 最近深酒が過ぎる件。
昨日は気づいたら、缶ビール * 1本 + ワイン * 1.5本飲んでた。 orz
家に帰って、ビールあけながら飯作って、あとは寝るまでワインみたいな。元々、家で飲む習慣はなくて、早寝早起きするために飲んでたんだけど、どうも加減を見誤ってる気がしないでもない。
寝つきは良くなったけど、別な意味で起きられなくなっちゃあ意味がないよな。
2007-07-19 [長年日記]
★ redMine 0.5.1
redMine 0.5.1が出てた。
CVSサポートが加わってる。「いまさらCVS?」ってのはあるんだが、CVSでやってきたプロジェクトに適用できるってのは大きい。つか、今のプロジェクトがそうだし。
だが、使い方がよくわからない罠。あとで調べる。
調べた -> redMineでCVS
★ シェル
○「なんかシェルが動かないんですよ。」(カタカタカタ
% test.sh
☆「あ、カレントにはパス通ってないんで、./つけないと。」
○「なるほど。」(カタカタカタ
% ./test.sh command not found
☆「えーと...(vi、vi」
#!/bin/csh^M
☆「あ、改行がDOS改行になってますね。」
○「なるほど」(カタカタカタ
数分後。
○「echoがでないんですよ。」
☆「えーと...(vi、vi」
echo "blah blah blah" >>& $log
☆「えーと、これはリダイレクトっていって...」
2007-07-21 [長年日記]
★ お買い物
麺打ちをラップの上とかでやってたんだけど、あまりにもやりづらい(あたりまえ)ので、麺打ち用の台買ってきた。大理石、30cm * 40cm、2000円ぐらい。小さめだが、一人分打つにはこれで十分。
あと、肉用ハンマーとか、チーズ用のおろし金とか。最近、ハンズのキッチン用品売り場とかハルクの食品売り場とかがなんか楽しい。
★ リコッタチーズ
簡単チーズ。この間の「牛に願いを」でやってた。ちなみに高清水君は「小さいころから食べてたし普通。」とか言ってましたが、ウチではそんなん作ったことはありません。
牛乳にレモン汁。火にかける。分離したらすくう。以上。簡単。
2007-07-23 [長年日記]
★ JavaScriptでOOP
Javaの案件なのに何故かJavaScriptばっかしやってたりする。
今更感もあるけど、JavaScriptのOOPって独特だけど結構書きやすい。
// クラス = 関数オブジェクト
var Animal = function() {};
// prototypeにオブジェクトをつっこんでやることでメソッドを定義
Animal.prototype = {
cry: function() {},
};
// 継承
// prototypeに親クラスのインスタンスをつっこむ。
var Dog = function() {};
Dog.prototype = new Animal();
// メソッドのオーバーライド
Dog.prototype.cry = function() {
alert('bawwow');
};
// コンストラクタを中に書く
function createClass() {
return function() { this.initialize.apply(this, arguments); };
}
var Car = createClass();
Cat.prototype = {
initialize: function() {
this.wheels = 4;
}
};
// OOPとは関係ないけどオブジェクトを名前空間のように使う
var Vadidator = createClass();
Validator.prototype = {
validate: function() {}
};
var SomePage = {};
SomePage.Validator = function() {};
SomePage.Validator.prototype = new Validator();
SomePage.Validator.prototype.validate = function() {
// some validation
};
var OtherPage = {};
OtherPage.Validator.prototype = new Validator();
OtherPage.Validator.prototype.validate = function() {
// other validation
};
// ポリモフィズム
// JavaのClass.forName()みたいなのうまく書けないかなぁ
var ValidatorFactory = {
create: function(id) { return eval(id + 'Page.Validator()'); }
};
var validator = ValidatorFactory.create('Some');
validator.validate();
型付けが弱い言語なのであれだが、インターフェースや多重継承みたいなのも簡単にできる。
こんな感じでWeb 1.0なJavaScriptを駆逐していきたいんだが...させてくんないだろうなぁ。
2007-07-24 [長年日記]
★ 分割メールに関する覚え書き
そもそも分割メールを受け取ったことがないので調べる。
分割メールに関する記述はRFC2046の5.2.2. Partial Subtypeにある(というか、ちゃんと規格化されていたのか)。具体的にはContent-Typeがmessage/partialを持つ。
Content-Type: Message/Partial; number=2; total=3; id="oc=jpbe0M2Yt4s@thumper.bellcore.com"
numberが1から始まる順番、totalが総数。一番最後以外はtotalはつけなくてもいいらしい。エンコードはcontent-transfer-encodingで指定、なんか7bitセーフじゃないとだめっぽいことが書いてあったがよくわからない。
パッとみると、たいした実装じゃないんじゃないか? って感じもするけど、thunderbirdあたりでも実装してない*1ところをみると難しいのかなぁ? インデックスを設計する時点で考えておかないと確かに面倒くさい気はするけれども。
*1 アドオンはあり
★ 不満点
今回、サーバ系ぜんぜんさわらしてもらえないのが不満っちゃー不満。
2007-07-26 [長年日記]
★ vim --remote
Vimを送るとかに登録しているとVim開きまくってイヤンな時もある。そんな時にはvim --remote。
vim --remote README.txt
で、すでに開いているvimのバッファにREADME.txtが読み込まれる。vimが起動していないとエラーがでる。
vim --remote-silent README.txt
とすれば、vimがいないときは新しいインスタンスを作ってくれる。カレントバッファに読み込まれるがイヤなら、vim7以降は--remote-tabが使える。
vim --remote-tab-silent README.txt
--remote-sendでコマンドも送れる。
詳しくは、:help remote.txtで。
★ スパゲッティ
ただでさえ最近家でパスタばっかり食べてるのに、会社に来てまでスパゲッティコード食べたくありません! ><
2007-07-30 [長年日記]
★ 落ちてる
最近、ビミョーに、というか、かなり気持ちが落ちてるな、と感じる。
ストレスためこんじゃうほうなんで、ちょっと「仕事」から離れていたい感じ。
まぁ、とりあえずあと一ヶ月契約あるし、すぐってわけにはいかないんだが。














● しびある [ありえない天候の中誘ってしまって・・・(;^_^A 野外&台風は僕も人生初の経験でした。 来て頂いてありがとうござ..]