XMLHttpRequest(普通のAjax)

<div id="test"/>
<script>
	goog.require("goog.dom");
	goog.require("goog.net.XhrIo");
	var request = new goog.net.XhrIo();
	goog.events.listen(request, "complete", function(){
		if (request.isSuccess()) {
			goog.dom.$("test").innerHTML = request.getResponseText();
		}
	});
	request.send("http://www.google.co.jp", "POST", null);
</script>
			<div id="test"/>

			<script>
				goog.require("goog.dom");
				goog.require("goog.net.XhrIo");
				var request = new goog.net.XhrIo();
				goog.events.listen(request, "complete", function(){
					if (request.isSuccess()) {
						goog.dom.$("test").innerHTML = request.getResponseText();
					}
				});
				request.send("http://www.google.co.jp", "POST", null);
			</script>


|

コンボボックス例

<html>
<head>
  <title>goog.ui.ComboBox</title>
  <script src="../base.js"></script>
  <script>
    goog.require('goog.ui.ComboBox');
  </script>
  <link rel="stylesheet" href="css/menus.css">
  <link rel="stylesheet" href="css/combobox.css">
</head>
<body>
  <h1>コンボボックス例</h1>

  <input type="hidden" id="vv" value=""/>

  <div id="combo1" class="use-arrow"></div>

  <script type="text/javascript">
  var cb = new goog.ui.ComboBox();
  cb.setUseDropdownArrow(true);
  cb.addItem(new goog.ui.ComboBoxItem('Windows7'));
  cb.addItem(new goog.ui.ComboBoxItem('iMac'));
  cb.addItem(new goog.ui.ComboBoxItem('Linux'));
  cb.addItem(new goog.ui.ComboBoxItem('超漢字'));
  cb.addItem(new goog.ui.ComboBoxItem('iPhone'));
  cb.addItem(new goog.ui.ComboBoxItem('Windows mobile'));
  cb.render(goog.dom.getElement('combo1'));

  goog.events.listen(cb, 'change', function(e) {
    var attrs = { 'value': e.target.getValue()};
    var res = goog.dom.setProperties(document.getElementById('vv'), attrs);
  });

  window.onbeforeunload = function() {
    cb.dispose();
  };
  </script>


  <input type="button" onClick="alert(document.getElementById('vv').value)" value="hiddenの内容チェック" />

</body>
</html>

autocomplete例

script.aculo.usのautocompleteを利用していたが、
・変換前の文字列で保管してくれない
・自作タグライブラリでautocompleteを呼び出そうとすると、若干ソースが煩雑になる
の2点からライブラリをGoogle Closure に変えました。

使い方は下記の通り

 http://code.google.com/intl/ja/closure/から
 Google closureをチェックアウトする

 <html>
  <head>
   ・・・略・・・
   <link rel="stylesheet" type="text/css" href="/test/css/autocomplete.css" />
   <script type="text/javascript" src="/test/js/goog/base.js"></script>
   <script type="text/javascript">
    goog.require('goog.ui.AutoComplete.Remote');
   </script>
   ・・・略・・・
  <body>
   ・・・略・・・
    &lt;input type="text" id="aaa" name="aaa" autocomplete="off" value="" id="aaa" /&gt;
    &lt;script type="text/javascript"&gt;
     new goog.ui.AutoComplete.Remote('/test/autoComplete/autocompletetest/',document.getElementById('aaa'));
    </script>
    ・・・略・・・
  </body>
 </html>

SAStrutsのAutoCompleteAction

 @Execute(validator = false)
 public String autocompletetest() {
  //入力途中のデータはtokenパラメータで取得可能
  String token = request.getParameter("token");
  //[aa,bb,cc]という文字列を返却する必要あり
  //今回はtokenを最後につなげて返してみた。
  //実際はDBに問い合わせて結果を返す。
  String str = "["
        + "aaaa,"
        + "bbbb,"
        + "cccc,"
        + "dddd,"
        + token
        + "]";
  ResponseUtil.write(str);
  return null;
 }

変換前の文字列でもサーバーに問い合わせてくれるので非常に速い印象を受けます。
多分suggestのようにjavascriptのtimerを利用して取得しているのでしょう。
大満足。

dbflute0.9.4 + Buri-1.0.1(S2JDBC版)? + SQLServer2008

dbfluteBuriの連携方法メモ(自分用覚書)

buri-core-1.0.1.jarはsqlserver2008で使えないので、svnからソースを落としてビルドし直す。

1.escafe-flowのburi-coreを落とす。
https://www.escafe.org/svn/escafeflow/trunk/buri-core/
2.dbfluteburiモジュールを落とす。
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-buri-example/
3.dbfluteで提供されているburi関連sqlのデータ型をsqlserver用に書き換える。
NUMBER->BIGINT,INTEGER
VARCHAR2->NVARCHAR
TIMESTAMP->DATETIME
4.dbflutesqlで定義されているDDLの各名称を変える。
camel→_区切りに
5.dbflutesqlで記述されているCREATE SEQUENCEをIDENTITYに変える。
6.buri-coreのentityを直す。
 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BURI_BRANCH_GEN")
 →
 @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "BURI_BRANCH_GEN")

Seasar Confenrence

Seasar Confenrence に行ってきました。

S2やSlim3については特に言うことは無く、ただひたすら受身でした。

テスト駆動開発のこころ
では若干思うところがあり、id:t-wadaさんに直接伺いました。


●TDDを導入というかリファクタリングを正式に導入するためのコツ
 顧客に面と向かってリファクタリングするのでお金下さい(そうはいわないけど。)とはいえない。どんな説得をするのか?


・非常に小さいタスクに分割して組み込む
・契約時に80%は製造、20%は品質向上に利用すると盛り込んでおく


後者は20%が事実上バッファとして扱われそうだから、
佳境になってくると品質向上どころじゃないだろうなぁ。
残業時間にリファクタリングすることになりそう。下手すると反乱がおきるかも。
そこをうまくするのがPMの手腕なんだろうけど。。
とりあえず現実的な所では前者かな。


リファクタリングを実施するポイント
 上の話の流れで聴きましたが、

 
・テストを作る前
・テストを作った後


この辺はやってみないとわからないけど、実際には心にゆとりがあるときかも。
ぼちぼち実践して検証してみます。


●レガシーコードのバージョンアップに関して
 テストがないStruts1.0bのコードをSAStruts化していますが、具体的にどうアプローチしようかという話で。

junit/s2unit等のような小さな単位のテストはあきらめて
もっと大きな単位でのテストを行う
selenium等でやってみては?とのアドバイス

色々試してみます。

xUnit Test勉強会機会があれば参加します。

#間違ってたら指摘お願いします

ニコニコカレンダープラグインセットアップ方法

【インストール】
trunkディレクトリにて以下のコマンドを実行してください。

 python setup.py install


trac.iniの[components]に以下の1行を追加してください。

 nico.* = enabled


以下のコマンドを実行し、「nicostate」テーブルを作成します。

trac-admin [Tracプロジェクトフォルダ] upgrade 


【設定】
表示する日数を変更する場合は以下の内容をtrac.iniに追記してください。日数の初期値は14です。


[nico]
dispdays = 日数



【使い方】
Tracにログインしてください。「NicoCale」リンクから画面を開き、顔画像をクリックすればその日の状態が登録されます。