2007/05/25

Serializableインターフェース

Serializableインターフェースを実装すると、

「シリアライズ可能クラス Issue は long 型の static final serialVersionUID フィールドを宣言していません。」

という警告メッセージが出る件。
下記に対応策が書いてあったのでメモ。Eclipseの設定で出なくなるみたい。

■猫ぐらし
http://makisuke.seesaa.net/article/19928503.html

■明示的なserialVersionUIDの意義と定義法
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1589845

Hibernateを使ってみた

Hibernateにほんのちょっとだけ触れてみました。
まだまだこれから踏み込んでみようと思うのですが、備忘録もかねてとりあえず投稿。

■概要
HibernateはO/Rマッピングフレームワーク。
大きくは以下の4つのリソースに分類される。
・Hibernateの構成ファイル(hibernate.cfg.xml)
 ⇒RDBMSへの接続情報、マッピングファイルのローケーションを管理
・マッピングファイル(xxx.hbm.xml)
 ⇒POJOとRDBMSスキーマとの関係を定義
・POJO
 ⇒エンティティ。.NETだとDataSetに相当。
・DAO
 ⇒データアクセスオブジェクト。


■感想:ADO.NETとの比較
.NETと比較すると、総合的にADO.NETの方が楽。
Hibernateに慣れていないせいもあるのでしょうけど、何かと実装が面倒。
(Eclipse&Hibernateプラグインだと設定ファイルの設定が若干楽になるようだが)

あとはやっぱりDataSetって強力だなぁーと再認識。


■感想:いかがなものでしょう・・・?
スキーマのキーに対するHibernateのポリシーって・・・。

Hibernateではスキーマの主キーとビジネスキーは別だという考えが根本にあるようだ。
ここで言っている主キーはRDBMS上のPrimaryKey。ビジネスキーとはビジネス上のデータをユニークにするキー。Hibernateは主キーは単一キーである事を推奨していて、はスキーマのキーはどんなスキーマであっても一つであるべきという考え方。つまり、Hibernateを使うなら全てのテーブルをシーケンスとか使ったID項目を主キーとするよう設計しなさい!と言ってる。さらにビジネスキーを主キーとするようなテーブル設計はレガシーシステムだ!とも言ってる。おいおい・・・。マジかよ・・・。

なので基本的な機能は全て単一キーが前提になってました。(複合キーの機能はデフォルトでない)一応複合キーの為の機能も提供されてました。Hibernate曰くレガシーシステム対応だそうです・・・。

正直Hibernateの思想でテーブル設計はできんだろーと思うんだけど・・・。

2007/05/09

Google Code Project Hosting で Web サイト構築

http://code.google.com/hosting/
http://webos-goodies.jp/archives/50977305.html

Subversionを使える無料サーバーを探してたら見つけました。
なかなかよいのだがオープンソース向けってのがイマイチ目的にマッチしないなぁ。

やっぱ有料のレンタルサーバーか!?

こんなのもあるみたいだけど。
http://unfuddle.com/home
http://blog.livedoor.jp/a_day_in_the_radio/archives/50703435.html

SOAの主要技術

SOAってイマイチ理解に乏しいんだよなぁ。という事で以下に主要技術をメモ。

■WSDL(Web Services Description Language)
XMLをベースとしてWebサービスのありか・利用しているフォーマット・通信プロトコルなどをWebサービスのインターフェイスとして記述する

■UDDI(Universal Description, Discovery, and Integration)
XMLをベースとして、Webサービスを検索するシステムの総称。企業側でWebサービスに関する各種情報(名称および機能、提供対象、技術仕様など)を「UDDIレジストリ」(「Webサービスの電話帳」のようなもの)にあらかじめ登録・公開しておくことで、必要なサービスを必要な場面で自由に利用することができる

■SOAP(Simple Object Access Protocol)
他のシステムにあるデータやサービスを呼び出すためのメッセージングプロトコル。XML文書にSOAPエンベロープと呼ばれる付帯情報を追加し、HTTPプロトコル上においてやりとりが行われる。サービスの利用者および提供者の双方がSOAPに対応していれば、異なるコンピュータシステムの間でデータのやりとりを共通化することができる

2007/04/17

XCute(エックスキュート)

久しぶりの投稿。いろいろドタバタしてたのと、勉強意欲が少しだけうせてたので。

ネット見てて「XCute(エックスキュート)」というものを発見。ExcelでリッチクライアントはWebアプリがサクサクっと作成できてしまうプロダクツらしい。うーむ。詳しく読んでないし一長一短あるとは思うけど便利そう。

だけどXCuteしかりBOしかし簡単にアプリケーションが作成できてしまう。
便利だけどシステムエンジニアとしてはどーだろー。なんか寂しい。

2007/03/06

Selenium

これでWebアプリケーションの機能テスト自動化が無償でできそうだ。
この手のツールで自分が知っているのは有償なものばかりだっただけに、
評価してみる価値ありあり。

■Selenium 0.7利用手順書
http://codezine.jp/a/article.aspx?aid=436

■OpenQA:Selenium(本家サイト)
http://www.openqa.org/selenium/

2007/03/05

実行計画とバインドピーク

どーなんOracle。。。と言いたい内容。
というよりも使い方を理解していないから発生する問題なのか。
一度動作したSQLの修正は検討の余地ありだな。

■SELECT文の実行Step
(1)構文のチェック
(2)表、列の定義チェック
(3)アクセスするオブジェクトへの権限チェック
(4)実行計画の生成
(5)共有プール上に実行計画を含め解析結果をキャッシュ

共有プールには実行計画がキャッシュされるので、
SQL実行時に以下の2パターンで実行処理が行われる。

HARD PARSE:共有プールに解析済みの同一のSQL文が存在しない場合に実行される解析処理
SOFT PARSE:共有プールにすでに解析済みの同一のSQL文が存在した場合に、それを再実行する処理

もちろんHARD PARSEの方がパフォーマンスに影響を与える。

■実行計画
DML文(SELECT,UPDATE,DELETEなど)を実行するためのステップ(索引/行の読み込み、ソート、変換などの様々な動作)が含まれる組み合わせ。
以下の2つのアプローチが存在する。
CBO:コストベース・アプローチ
RBO:ルールベース・アプローチ

■統計情報
統計情報とは、表、索引などのレコード件数や、使用している領域、カーディナリティ、データ分布 などのデータ特性を表す情報。

■バインドピーク
HardParse時にバインド変数にセットされていた値を考慮して実行計画を決定する機能
(Oracle9i以降)

■URL
Oracle SQLチューニング講座(6) パフォーマンスを向上させるSQLの記述法
http://www.atmarkit.co.jp/fdb/rensai/orasql06/orasql06_1.html

Oracle SQLチューニング講座(3) SQLチューニングの必須知識を総ざらい(後編)
http://www.atmarkit.co.jp/fdb/rensai/orasql03/orasql03_2.html

パフォーマンスチューニング
http://www15.ocn.ne.jp/~tashi/html/oracle/dev_tuning.html

2007/03/01

FIT

今まで機能テストもNUnitとNDbUnitの組み合わせで実施していたが、
Fit(Framework for Integrated Tests)を利用しての試験ができるようだ。

Fitとは機能テストを自動化及び可視化し、顧客をそのプロセスを巻き込む事を目的として実装されたテストフレームワークのようです。XUnitがオブジェクト単体の品質を保証するのに対し、Fitはビジネスプロセス(ビジネスルール)の品質を保証する事を目的としている。

テスト対象のアプリケーションがBCEモデル(Boundary-Control-Entity)を採用している場合、
ビジネスルールを保持するControl以降がそのテスト対象となるのだろう。

「顧客を巻き込む」と謳ってあるが、文献を読むと、あくまで間接的な巻き込みを意味しビジネスアナリストやテスターの手を経て進められる。

と自分なりの理解を記述してみた所で気になる点。
(1)テストのパラメータや結果がJavaBeansやDataSetのような
   Entityオブジェクトな場合、テストはどう記述するのだろうか
(2)テストを実行する上で必要なデータの取り扱いに利便性はあるのだろーか
   (UnitTestならいざ知らず、機能テストはこの自動化が重要)

まー勉強してみるか。CruiseControl.NETのWebダッシュボードがFit対応してるようだし。


■Excel の機能テストのプロセスに顧客を巻き込む
https://www.microsoft.com/japan/msdn/msdnmag/issues/05/02/ExcelUnitTests/default.aspx

■コード品質を追求する: FITで解決する
http://www-06.ibm.com/jp/developerworks/java/060317/j_j-cq02286.shtml

2007/02/27

Visual Basic .NET でのマルチスレッド プログラミング

素人なもんでスレッドプログラミングを理解してない。
という事で下記ページで勉強。

■Visual Basic .NET でのマルチスレッド プログラミング
http://www.microsoft.com/japan/msdn/vs/vb/vbtchAsyncProcVB.aspx

2007/02/23

IT業界を読み解くための経営分析入門

だんだんリンクメモになっているが。。。

■IT業界を読み解くための経営分析入門
http://itpro.nikkeibp.co.jp/members/bn/mokuji.jsp?OFFSET=0&MAXCNT=20&TOP_ID=233114&ST=start

技術的な側面ばかりがクローズアップされるIT業界だが、所詮は企業経営のもとに成り立っているわけで。そこを知る必要があると思いながらも勉強できなかったのだが、なかなかよいサイトを発見。
何よりITと経営がリンクしてる所がよい。

週末にでも読むかな。

System.Transactions

友人S君より教えてもらった内容。
.NET 2.0よりトランザクションモデルが強化されたようだ。
これは必見!

■10 行でズバリ !! TransactionScope の利用 (C#)
http://www.microsoft.com/japan/msdn/thisweek/300x10/phase3/Transaction_Scope/cs.aspx

■.NET Framework 2.0 の System.Transactions について
http://www.microsoft.com/japan/msdn/net/general/introsystemtransact.aspx

2007/02/22

XMLマスター:ベーシック 実力養成講座

■XMLマスター:ベーシック 実力養成講座
http://itpro.nikkeibp.co.jp/article/COLUMN/20060928/249315/?ST=start

今年の目標として、XMLマスターベーシックに合格したいと思って勉強中。
.NETでDataSetとか扱っている割に、XMLの事を殆どわかってないような気がする。

資格取得にチャレンジする事で知識を身につけていきたい。

2007/02/21

アプリケーション構成ファイルの設定

複数人で開発するにあたり、若干手間になるのがアプリケーション構成ファイルの設定。
「appSettings」にはアプリケーション依存の値が多数設定される。

しかし各開発者の環境でその設定内容が必ずしも同期が取れるものではない。
(例えばログ出力先のディレクトリ設定など)

そこで以下のように定義するとその問題が解決するらしい。
--------------
<appSettings file="user.config">
--------------

こうするとuser.configの内容でappSettingsの設定内容を論理的に上書きしてくれるらしい。
アプリケーションから見ると設定KEYが重複している場合、「user.config」の値を正としてくれる。
これで今まで困っていた事が解決。

アプリケーション構成ファイルについては、勉強不足なので体系化する必要あり。

しかし、後輩M君。知ってるんなら教えてくれればいいのに・・・。

Virtual PC 2007

■MS、Virtual PC 2007を無償ダウンロード開始
http://www.atmarkit.co.jp/news/200702/20/virtualpc.html

早速ゲットすべし。

2007/02/14

VSTSで提供される注目すべき単体テスト機能

とある友人S君より教えてもらったのでメモ。

■VSTSで提供される注目すべき単体テスト機能
http://www.atmarkit.co.jp/fdotnet/vststester/vststester03/vststester03_01.html

なんとか記事の内容が理解できた・・・くぅ・・。

「データドリブン単体テスト」とは「データソース内の各行に対して繰り返し実行が行われる単体テスト」の事。テスト対象メソッドのパラメータ値がキューできて繰り返し実行なんて事もできる。これによって、テストメソッドの分割や、テストメソッド内のループコードが不要になるののでGoodですね。
ただ、TestContextのDataSourceがDB上のテーブルという仕様はどーなんでしょ。それはそれでOKとしても、個人的には「DataSet+データ(XML)」が設定できて欲しい所。(その方がテストリソースを一元管理できるし、DB環境もいらないし。)

わざわざDBを使用する意味が何かあるのだろうけど。

「ASP.NET単体テスト」は評価してみたい所。
個人的にBoundaryのテストコード(HttpUnit等)を試した事がないし。

オープンソースのライセンス

今までイマイチ理解していなかったのでメモ。
基本的に以下の4つに分類されるらしい。

(1)BSD
   ⇒無償。コードを改変したものを再配布可。著作権表示が条件。
    Apache、FreeBSD、PostgreSQLなどが利用
(2)LGPL
   ⇒無償。再配布可だが、ソースコードを改変した場合はLGPL/GPL下で開示。
    他のソースコードからリンクした場合に、リンクする側にLGPLを適用する必要はない。
    OpenOffice.org、JBossなどが利用
(3)GPL
   ⇒無償。改変や再配布は自由だが、GPLライセンス下でコードを開示しなければならない。
    Linux、MySQLなどが利用。
(4)その他
   ⇒Open Source Initiativeの定義を満たすものは多いが、よく利用されているとは限らない。
    詳細はさまざまであることから、条項を確認する必要がある。
    Apple Public Source LicenseやSUN PUBLIC LICENSE PUBLIC LICENSEなど。

2007/02/13

ASP.NET AJAX ファーストルック

@ITにあったのでメモ。

■特集 ASP.NET AJAX ファーストルック -ASP.NETアプリケーションをプログラミングなしでAjax化-
http://www.atmarkit.co.jp/fdotnet/special/aspajax/aspajax_01.html

ユーザーから見るとリッチクライアントは有益だが、実装者にはちと辛い感じを受ける。
ごちゃごちゃするのであまりやりたくないのが正直な所。

とは言うものの、Ajaxの波が地方にもやってきそうだ・・・(もう来てるか?)
概要は理解したつもりだが、何処までできるかを把握しておく必要があるな。
忙しいけど何とか一読の必要あり。

2007/02/09

.NETのメモリ管理

勉強すべきサイトを見つけたのでメモ。

■ガベージコレクション入門: Microsoft .NET Framework の自動メモリ管理 Part I
http://www.microsoft.com/japan/msdn/net/mag00/GCI.aspx

■ガベージコレクション入門: Microsoft .NET Framework の自動メモリ管理 Part II
http://www.microsoft.com/japan/msdn/net/mag00/GCI2.aspx

■マネージ コードでのメモリ リークの識別と回避
http://msdn.microsoft.com/msdnmag/issues/07/01/ManagedLeaks/default.aspx?loc=jp

最新.NETで大量データを扱うシステム構築に携わる事が多く、いい加減.NETのメモリ管理について一旦整理しとかんといかんと思っている最中。3流にはなかなか習得できないかもしれんが頑張ってみよう。

2007/02/07

S2Unit.NET 体験編2 トランザクションの自動制御

更に使い込んでみて思ったのだが。
S2Unit.NETの「トランザクションの自動制御」機能ってどういうケースで利用するのだろう。

というのも。
テスト対象メソッド(以下、TestTarget)がBusinessLogic層だと仮定した場合、
通常RDBMSとのやりとりは外部から見ると隠蔽されているような設計になっている。

S2Unit.NETでこのTestTargetのTestCaseを実装する場合において、
S2Unit.NETとTestTargetのRDBMSへのセッションは別物になる。
よって以下のようにTestCaseを実装した場合、TestTargetではS2Unit.NETにて投入されたテストデータが参照できない(Commitされていないから)為、テスト自体が破綻してしまう。

<Test(), S2(Tx.Rollback)> _
Public Sub Test
' テストデータ投入
' TestTarget実行
  ↑※S2Unit.NETとは別セッションなのでTestTargetはテストデータが見えない
' 実行結果取得
' Assert
End Sub

と書きながら気づいたのだが。
S2Unit.NETの機能を利用する場合、アプリ側もS2Unit.NETを意識した実装を行っておくべきなのだろう。具体的にいうとTestCaseで特化オブジェクトを実装できるようアプリ側を設計する必要があるという事だ。
(アプリ側のDataSourceの生成についてはオーバーライド可能なファクトリーメソッドとして実装すべきで、TestCaseにてこのメソッドをオーバーライドしS2Unit.NETのDataSourceを使える様にしておくべきなのだ。)

まさに先日Mockについて勉強した内容だ・・・。

と、気づいた時には既に遅いのでアドホック対応をしてみた。
TestCase内でS2Unit.NETが保持するトランザクションを手動で制御するようにした。
(1)TestCaseのS2属性の引数にTx.NotSupportedを渡す(無しでもよい)
(2)MyBase.Connection.BeginTransaction
(3)テストデータ投入
(4)MyBase.Connection.BeginTransaction.Commit
(5)TestTargetを実行
(6)期待値取得
(7)実行結果取得
(8)MyBase.Connection.BeginTransaction
(9)投入したテストデータの削除
(10)MyBase.Connection.BeginTransaction.Commit
(11)Asset

2007/02/05

Mock 体験編

うーむ。以下の理解であってるだろうか・・・。

■言葉の定義
Mockを使うにあたっては以下の役割を持つオブジェクトが存在する
(1)ターゲットオブジェクト
   ⇒テスト対象オブジェクト
(2)コラボレーターオブジェクト
   ⇒ターゲットによって生成または取得されるオブジェクト
(3)疑似オブジェクト
   ⇒疑似オブジェクトのパターンに従うコラボレーターのサブクラス (または実装)
(4)特化オブジェクト
   ⇒コラボレーターの代わりに疑似を返すよう生成メソッドをオーバーライドする、ターゲットのサブクラス

■理解した(であろう)内容
ネット上に存在するサンプルは、ターゲットとコラボレーターが同一レイヤーに存在すう事が前提になっているようだ。(ターゲットがコラボレーターをコンストラクタもしくはメソッドの引数で取得するようなクラス設計になっている)

コラボレーターとターゲットが同一レイヤーに存在する場合はそれでも問題ないが、
・ターゲットオブジェクト   ⇒ 業務処理ロジック層
・コラボレーターオブジェクト ⇒ データベースアクセス層
といったケースの場合、ターゲットを利用するレイヤーはコラボレーターの存在を知らない事という設計である為、ネット上のサンプルを適用する事は難しい。

よって、ターゲットはコラボレーターの生成を必ずオーバーライド可能なファクトリーメソッドで実装し、
ターゲットを継承した特化オブジェクトにてファクトリーメソッドをオーバーライドし擬似オブジェクトを返却するようにクラス設計する事!

以上のモデルをオブジェクト図で表現してみた。

Mock

只今より勉強開始。
想像していたものと全然違うような気がする。

このサイトよさそうなので読書中。
■疑似オブジェクトによる単体テスト
http://www-06.ibm.com/jp/developerworks/java/030207/j_j-mocktest.html

S2Unit.NET 体験編

いろいろ試行錯誤の結果、なんとか動作させる事ができた。
RDBMSを使用したアプリケーションのテストにはもってこいなように思える。
特に『データベースに対するテスト』でExcelを利用できるのが何よりよい。
NDbUnitだとテストデータ作成がかなり不便。
それとDIコンテナを使用しないアプリケーションに対してもテスト可能。

MbUnitについてはもう少し勉強が必要だな。NUnitを拡張してる事以外よくわかってない。

あとはCI。NAntがMbUnitに対応してくれればCI可能なんだが・・どーなんだろ。
(この場合、CIサーバーも対応してないとレポーティングが弱いか・・・)

試行錯誤した点はやはりS2TestCase#Includeが動作しなかった点。
マニュアル通りやってみたけどNullReferenceExceptionが発生する。
ソースを追っかけるとDIコンテナが作られてないようだ。
今の所特にS2TestCase#Includeを利用する必要性もないので実装せず、
アプリケーション構成ファイルに定義したdiconファイルを利用するようにした。
後はマニュアル通りにやると動いた。

SciretとTaskJuggler

MOONGIFTに紹介されたオープンソースプロダクト。
是非評価してみたいのでメモ。(共に日本語化が大丈夫かが気になる・・・)
特にSciretは使えそうなんだけど。

■Sciret
http://sciret.sourceforge.net/
ナレッジマネージメントシステム。
特徴としてはユーザーインターフェースがとても優れている。見やすい。
これは評価するに値するはず!

■TaskJuggler
http://www.taskjuggler.org/
テキストベースのプロジェクト管理システム。
簡単なマークアップ言語の習得が必要そうだけど、
ガントチャートや様々なレポーティング機能を保持している。
ちょっと導入に苦労しそうだけど、なかなかよさそう。

2007/02/02

NAntContribのvssdiffタスク

使ってみたけど、どーもうまく動いてくれない。
というのも1行だけ出力されたoutputfile(xml)が出力されるだけだ。

ネットでいろいろ調べてみたが情報量が少なくわかんない。

という事でNAntContribのソースを見てみる事にした。
DiffTaskクラスのItemDiffメソッドでDiffってるぽいのでIVSSVersionクラスのActionプロパティにログを仕込んでみた。

なるほど。チェンジアクション(Created,Checkin等)の判定を文字列比較で行っているのだが、おもいっきりEnglishで比較している為、日本語VSS環境では1件もリビジョンが拾えてない。
具体的には以下のアクション文字列を判定しレポートするかしないかを判断している。
・Labeled ⇒ ラベル設定
・Add ⇒ 追加(?)
・Create ⇒ 作成
・Check ⇒ チェックイン

なので上記文字列を対応する日本語に代えてNAntContribをビルド。
NAntから動作させるとうまくレポートしてくれた。
ひょっとして別の方法があるかもーと思いつつ、今回はこれで対応!

<結論>
日本語環境のVSSでNAntContribのvssdiffタスクは正常にレポートしてくれない。
原因はリビジョンアクションの判定を英語で行っている為。
<対応>
1.NAntContribのSolutionを立ち上げるとNAntへの参照パスが不正なので変更。
(これはしなくてもbuildファイルにてちゃんと定義してるようなのでいらないかも)
2.NAntContribのDiffTask#ItemDiff()を修正し付属のbuildファイルを利用しNAntでビルド。(※VisualStudioでビルドするとエラーになる)
3.buildディレクトリにアセンブリが作成されるのでそれをNAntのbinにコピー。
4.再びvssdiffを起動すると正常にレポートされる。


念のため、ソース修正したところを添付。
(DiffTask#ItemDiff()の120行目あたりから数行)
// We found our version so stop adding versions to our list
//if (action.StartsWith ("Labeled '" + _label + "'")) {
  if (action.StartsWith ("ラベル設定 '" + _label + "'")) {    labeledVersion = version.VersionNumber;
    addVersion = false;
    //This is a bit annoying, it would be more efficient to break
    //out of the loop here but VSS throws an exception !%?!
    //http://tinyurl.com/nmct
    //break;
  }
  if (addVersion == true) {
    // Only add versions that have been added,created or checked in. Ignore label actions.
    //if( (action.StartsWith("Add")) || (action.StartsWith("Create")) || (action.StartsWith("Check") ))
    if( (action.StartsWith("追加")) || (action.StartsWith("作成")) || (action.StartsWith("チェック") ))
    {
 ・
 ・
 ・

2007/01/26

S2Unit.NET

S2Unit.NET。概要を読んだけどとても好印象。
何よりテストデータをExcelで扱える所がよい。

dbUnit(for Java)はExcelに定義したテストデータをDBに登録したり出力したりが可能らしく、N*ツールにもそういったものがないかなと探していた所。実際、NUnitとNDbUnitでユニットテストを実装したがテストデータの扱いが面倒だなと感じていた。

体験してみる必要ありだぁ。

Seasar2.NETにおけるDIの方法

やっと理解できたのでメモ。
DIコンテナに登録されているオブジェクトの初期化を
どこで行うかというお話だった。

■コンストラクタインジェクション
 →コンストラクタにて初期化を行う
■プロパティインジェクション
 →DIコンテナにてインスタンスが作成された後、プロパティにて初期化を行う。
■メソッドインジェクション
 →DIコンテナにてインスタンスが作成された後、メソッドにて初期化を行う

ちなみにdiconファイルの命名はDIContainerの略称らしい。

ASP.NET AJAX 1.0

「ASP.NET AJAX 1.0 正式版」がリリースされたそうな。
MicrosoftのWebサイトから無償でダウンロードできる。

「ASP.NET AJAX 1.0」はASP.NET 2.0上で動作するAjaxフレームワークで、Visual Studio 2005などに組み込んで使用するらしい。

これだけ騒がれているAjaxだけど未だ実用しているプロジェクトをみた事ないな。
地方にはまだなのか。それともニーズがないのか。そのうちくるかな。
数年前に軽く触った程度でその後の進化を全然知らない。情報をObserveするか。

2007/01/22

TracWikiでリビジョンDIFFにリンク

どうやらTracのver0.10以降らしい。
All-In-One-Tracは0.9.5なので残念。

チケットにリビジョンのDIFFがリンク貼れると超いい感じなんだけど。

バージョンアップに期待するか。

TracでインストールされたSubversionリポジトリへのアクセス

All-In-One-TracでインストールされたSubversionのリポジトリにアクセスする場合、
以下のURLでリポジトリブラウザからアクセス。
http://localhost:8000/svn/<プロジェクトID>

ついついTracのリポジトリブラウザのURLへアクセスしてしまうが違う。
Apacheのhttpd.confを見ると「svn_repo/projects」フォルダに
「/svn」というエイリアスが設定してある。

よりによって2回も同じ事でつまづいた・・・。

ちなみに。
SvnのExportってリビジョンを取得するだけなのかな。
Checkoutはワーキングコピーを作成してくれる。

Seasar2.NET

DIとAOPにほんと軽く触れてみた。DIよりもAOPに感動。いいですね。
次はMockを使ってみよう。Mockを使うとDIに感動するかな。

Log4netも使って見ねば。
あとS2ADO.NETも。

うーむ。やる事盛りだくさん。

2007/01/19

パフォーマンス

Windowsのコンパネにあるパフォーマンス。
2ヶ月ぐらい前に使ったのに使い方忘れてた・・・。

ログの採取は『パフォーマンス ログと警告』の『カウンタ ログ』で採取。
活動状況の表示は『システムモニタ』で行う。

2007/01/18

遅延バインディング

型指定しないキャストの事を指すのかな。

2007/01/17

ペルソナ法

ペルソナ法とは、実際の利用者の生活パターンや要望・要求を反映した仮想のユーザー(ペルソナ)を設定し、製品の開発に活かすというもの。

ネットで見つけたのでメモメモ。

ユーザーの立場になってシステムを開発する事が簡単そうで難しい。
どういうケースでこのような感じになるのかちょっと考えてみた。
1.コスト的にユーザー要求を満たせない(実装する事で精一杯)
2.技術者とか開発者という資質がテクノロジーを先行さてしまう
3.開発者が若年層

どうすればよいか。
要求定義・設計段階からペルソナ法を適用した時に効果がでるかもしれない。

設計段階ではユーザー(人)というよりもそのロールに対して設計を行く、ユーザーの生活パターン等を考慮する事はなかなかしない。しかしソフトウェアはユーザーの生活パターンの一部に存在する訳で、そうするとそこに適したソフトウェアの形が見えてくるかもしれない。

また、若年層の開発者はエンドユーザーの存在をもしならないまま開発しているケースが多く、自分達が実装したソフトウェアをどういった人が使用して、どれぐらいの対価を支払ってくれるのかを知らない。結果、品質の低下等を招いてしまう可能性があり、そこにはペルソナ法適用の価値があるのではないかと思う。

2007/01/16

TODO

仕事がそこそこ忙しくて勉強がおろそかになってる。3流は勉強しなければいけない事が山積みだ。昔、代々木ゼミに行ってた時に見かけた『日々是勉強』という文字が頭をよぎる。しかも勉強すべき事が頭の中で整理つかなくなってきたという最悪の事態。GTDツールを導入するか・・・。
という事でBlogにて整理。こうやって整理すると勉強足りないなぁ~と実感すると共に、自分が欲張りしすぎてる事に気づく。きっと自分の方向性が見えてないという事なのだろう。

■全般
・ソフトウェア構成管理のキホンを抑える
 →「パターンによるソフトウェア構成管理」を一読する
・開発プロセス標準化
■Agile
・Agile開発のキホンを抑える
・ツールのキホンを抑える
 →ツール単体評価(NAnt、Nunit、Ncover、Ndoc)
 →CruiseControl.NETとのツール連携
・XPの適用
 →2つのプラクティス(テスト、継続的インテグレーション)をプロジェクトに適用
■.NET
・DIコンテナのキホンを抑える
・.NETFramework2.0のキホンを抑える
 →.NETFramework2.0に触れる
 →VisualStudio2005に触れる
 →TeamFoundationServerに触れる
■XML
・XMLのキホンを抑える
■UML
・UMTP-L2合格以来、サボっているので再勉強

2007/01/13

OpenSourceWebTemplate

WebデザインをGPL等ライセンスで配布しているサイト。
OpenSourceWebTemplate

SEという職業柄どうしても実装するシステムの中身に目がいってしまうのだが、どんなに素晴らしいプログラミングされているシステムでも、ビジュアル性にかけてしまってはエンドユーザーから見たらイマイチ感が否めない。ビジュアルクォリティーはとても重要なのだ。(再認識)

かといってWebデザイナーの領域まで勉強するのはちょっと辛い。なので、このサイトのように優れたデザインをテンプレート化しておく事により再利用化をしていけば一定のクオリティーを提供できるのではないかと思う。プロジェクトではテンプレートに少し修正を加えて適用すればよい。

Webデザインフレームワーク。
うちのようなシステム会社には必要なのかもしれない。

2007/01/11

ODP.NETでのSQLバインドで発見したTips

問題が解決したのでメモメモ。
ODP.NETのバインド方法について。

OracleCommandにBindByNameというプロパティがある。
FalseはOracleParameterCollectionにAddされた順番でのバインドをサポート。
Trueはバインド変数名でのバインドをサポート。
デフォルトはFalse。

BindByNameがFalseの場合、バインド変数名を使用してもあくまでOracleParameterCollectionにAddされた順番でしかバインドしてくれない。しかもこれがエラーにならないから困り者。。。

今のソースはバインド変数を使ってるけど、SQLのバインド変数の出現順がParameter#Addの順序と一致していた為、奇跡的に動いているみたい。条件によりパラメータが1つ増える処理を流した時に結果が意図したものにならないからおかしいなと思ったけど。トラックしてて、はまった・・・。

教訓。
バインド変数を使用してSQLバインドする場合、OracleCommand#BindByNameは必ずTrueを指定するようにする。

リッチクライアントのデプロイメント

スマートクライアントに引き続き整理。今まで.NETではASP.NETしかやってないので、この辺の内容をしっかり体系化しとく必要があるなぁ。(書いたはいいが使った事ないのでイマイチ理解が完璧でない・・・)

■ノータッチデプロイメント
 概要:.NETFrameworkが持つWebからダウンロードしたアセンブリを直接実行可能な機能。
     Webサーバーに配置されたアプリケーション(exe)を、ブラウザよりそのリンクを
     クリックする事により Windows上のWebキャッシュ領域で実行される方式。
     (他のexeファイル等をブラウザからダウンロードして使用するのと同じ事だが、
      アプリがCLR上で動作するのが違い?)
     アプリケーションの実行時、実行ファイル以外にDLLファイルが必要な場合、
     それらも自動的にダウンロードしてくれる。
     .NETFramework1.1より「コードアクセスセキュリティ」という仕組みが存在し、
     2つの実行モード(部分信頼モード、完全信頼モード)が存在する。
     ノータッチデプロイメントで配布されるアプリケーションは「部分信頼モード」で実行される為、
     ローカルリソースアクセス等のセキュリティ制約がかかる。
     (アプリケーションも部分信頼モードを許可するコードを書く必要あり)
 欠点:.NETFrameworkの事前インストールが必須である事。
     InternetExplorerを必要とする事。
     セキュリティ制限がかかる事。
     ローカルインストールされないので、スタートメニューへのショートカット作成が不可。

■UAB(Updater Application Block)
 概要:配布するアプリケーションにライブラリを追加し、そのライブラリを利用して
     アプリケーション自身が構成ファイルの更新管理(ダウンロード管理)を行う。
     UABはローカルアプリケーションとして実行可能な為
     (ローカルインストールされる)、面倒なセキュリティ設定は不要であり、
     通常のWindowsアプリケーション同様「スタート」→「メニュー」にプログラムを
     追加する事も可能。またオフラインでの実行も可能。
 欠点:UABの運用・設定に関する高い知識ハードルが必要。
     セキュリティ制限かかからない分、逆にセキュリティ設定が弱点となる。

■ClickOnce
 概要:UAB同様ローカルインストールされるが(ノータッチデプロイメントの配置オプションも可能)、
     UAB最大の欠点だったセキュリティ問題を解決。
     オンライン/オフラインの状態を自動認識して、オンライン時のみにアプリケーションの
     更新を行う。UABではアプリケーションコードの変更が必要だったが、
     ノータッチデプロイメント同様、アプリケーションコードの変更は必要ない。
     ClickOnceでは.NETFramework2.0が必要になるが、ClickOnceアプリケーションの
     実行時に、.NETFramework2.0の有無を検査し、インストールされてなければ
     .NETFrameworkランタイムのサーバーからダウンロードとインストールを
     実行するよう設定する事も可能。
     ClickOnceの実装は、VisualStudio2005に統合されている。

■参考
特集:第1回 スタートアップ.NET――基礎から始める.NET (6/8)http://www.itmedia.co.jp/enterprise/articles/0406/30/news038_6.html

第3回 アプリケーション配布問題を解決する最新テクノロジClickOnce
http://www.atmarkit.co.jp/fwin2k/dnitpro/whatisdt03/whatisdt03_01.html

第1回 ClickOnceの基本動作を見てみようhttp://www.atmarkit.co.jp/fdotnet/clickonce/clickonce01/clickonce01_01.html

スマートクライアント

スマートクライアントについては、今までぼんやりとしたイメージしかなかったので、ここで一旦なんぞやを整理。

■スマートクライアント
 概要:シンクライアントでは実現不可なリッチなユーザーインターフェースを実現可能。
     ファットクライアントとの違いはそのサポート範囲で、スマートクライアントのサポート範囲は
     「UI」と「UIプロセス」となり、ビジネスロジック以降は通常「Webサービス」にて実現される。
     オフラインで利用される事も考慮した実装が必要。(クライアント側にデータ保持)
     サポート範囲が狭い為軽量である上、Webアプリと違いオフラインでも利用可能。
     ゆえに「スマート(利口な、賢い)」なクライアント。
 特徴:リッチインターフェースである事。軽量である事。オフラインでも利用可能である事。
 備考:ファットクライアント・・・ファット(=fat:太った)。C/Sアプリケーション。
     シンクライアント・・・シン(=Thin:薄い、軽量な)。Webアプリケーション。

■参考URL
スマートなクライアント
http://www.plaza.netchef.or.jp/netarc/netarc003.html

スマートクライアント
http://japan.internet.com/public/technology/20041006/4.html

2007/01/09

NCoverでTestFixture単位のカバレッジ計測

NCover-consoleではTextFixtureを指定したカバレッジ計測ができないみたい。
以下のように指定してみたが、"Unrecognized command line option"となった。

"C:\Program Files\NCover\NCover.Console.exe" /w "ワーキングDir" /c "C:\Program Files\NUnit 2.2\bin\nunit-console.exe" "/fixture:テストフィクサー テストアセンブリ"

いろいろ調べてるとNCoverExplorerなるものを発見。
・NCoverの分析結果をわかりやすく表示
・NCoverの実行設定を簡素化(NCover Runner)
をしてくれるアドインツールらしい。NCoverRunnerに至っては、実行設定をMsBuild,NAnt,Command-Lineのパターンで出力してくれるという便利者。

早速使ってみた。結論、TextFixture単位でカバレッジ可能。
「path to application to profile」にNUnit-console.exeを指定して、「Application arguments」に「/fixture:テストフィクサー テストアセンブリ」を指定。

やってる事はNCover-consoleでやった事と同じなんだけど・・・。
NCoverRunnerで実行設定をCommand-Lineパターンで出力すると、上でNCover-Consoleに渡してたパラメータと同一。
ならばと思いCommandLineパターンの出力結果をDos-プロンプトから実行したけどダメ。なんなんだ・・・。

なんとなく結論でたので、もっかい目的と情報を整理せねば。3流SEは日々勉強なり。

2007年スタート

2007年が明けてしまった。今年もいろいろあるけど頑張っていこう。
その一環としてBLOGを再開。複数のPortalSiteやSNSのBLOGを書いてきたけど、全て途中で断念。
なんでだろうと自己分析してみた所。
・知人に見られてる(本音が書けない)
・記事の投稿が面倒

しかし今回は目的があるので頑張って続けてみようと思う。
・文章能力の向上!
・自分のアイデアや発想のメモ
・普通に勉強した事のメモ

頑張ってみよう。

ちなみに今年の目標を考えてみた。
・.NET関連のプロダクツについての知識体系化
・開発プロセス標準化策定
・経営学について触れてみる
・50~60人月ぐらいの仕事をまわす
・国外旅行(to Hawai)

仕事の目標ばっかりだけど、何故か今仕事がおもしろい。昔以上におもしくなっている。