月別アーカイブ: 10月 2009

ソフトウェアテスト293の鉄則

http://www.amazon.co.jp/dp/482228154X

293もあると鉄則というには多すぎるが、とはいえ知見がたくさん込められていて、とても良い。目次を眺めるだけでもためになる。

キャリアアップのところでは、プレゼン力を磨くために トーストマスター を勧めていた。

そんなわけで 所沢トーストマスターズクラブ http://ttmc.seesaa.net をよろしくお願いします。西武線沿線の方は是非。

WPF MVVM の世界(2)

ViewModelはとにかく View を参照しない=ViewModelの世界だけで画面遷移も実現する! でもって、それをUnitTest可能にする!! …やりたいことは分かるのだが、そこに至るまでの枠組みが面倒すぎです。

あと画面遷移部分の実装ぐらいはデザイナー側にまかせようみたいな流れを SketchFlow を見ていると感じる。今 SketchFlow を確認する余裕はないのだが。

そんなわけで、画面遷移についてのUnitTestは保留中。1画面の中での挙動についての ViewModel 作成だけをしばらくやってみる。

Model-View-ViewModel デザイン パターンによる WPF アプリケーション

http://msdn.microsoft.com/ja-jp/magazine/dd419663.aspx

今更ではあるんだけど。WPFで code-behind を書いたら負けをどう実現するのか試行錯誤しながら戦った後に読んだ。ASP.NET だとさすがに制限ありすぎ、AJAXがからむとうまくいかなかったこともあり、とてもすっきりした。

View – ViewModel の関係が、その内部のコンポーネントにおいても SubView – SubViewModel みたいな関係を構築する。SubView が1回だけの登場なら、そこで DataContext={Binding ほげ} と叫ぶだけだし、複数回登場するんだったら DataTemplate として記述するってことなんだ、と判断した。

超適当な絵

VMWare vSphere Client を Windows7 で動かす

http://tkoshima.net/mt/2009/05/28/200905285923.php

“clients.xml” の解析エラー と言われて起動に失敗する問題。自分で原因を調べたわけではないが、「Windows7*以外*のOSに導入された .NET Framework System.dll を使う」という解決策が提示されている。要するに Windows7 付属の .NET Framework の中身は少し違うということのようだ。

解決策では、開発者モードにして、System.dll を無理矢理Windows7以外のものを読み込ませることによって実現している。

自分のマシンの場合、Vista と別HDDに Windows7 をインストールしていて、Vista の入ったドライブはそのまま見ることができたので、vpxclient.exe.config への修正の後、以下のようなバッチファイルを作成して対処した。Vistaの入ったドライブは O ドライブ。

SET DEVPATH=O:\Windows\Microsoft.NET\Framework\v2.0.50727
"%ProgramFiles(x86)%\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe"

根本的には、client.xml がおそらく厳密に解釈しようとすると文法違反になっているのではないかと思っているが確認はしていない。

TeamFoundationServer 2008 自動ビルドで、AssemblyVersion を自動更新する

元ネタのほとんどは http://richardsbraindump.blogspot.com/2007/07/versioning-builds-with-tfs-and-msbuild.html

msbuildcommunitytasks を投入

冒頭、<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundaiton.Build.targets" />
の次の行に
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

メインの部分は以下のようにした。内容的な概要はこんな。

  • AssemblyInfoFiles という ItemGroup は、ソリューションに含まれる AssemblyInfo.cs を入れる。** を使うと便利。
  • GetTFSVersion は、TfsVersion を使ってバージョンを取得するはずだった。が、利用しているmsbuildcommunitytasks が古く、アセンブリの読み込みに失敗。今回はあきらめて日時ベースの番号をつけることに。
  • BeforeCompileConfiguration ターゲットで実際に番号の置き換え。このターゲットはカスタマイズ可能な Team Foundatoin のビルドターゲットである。
  • 以前は AssemblyInfo コマンドを使って生成していたが、バージョン番号ぐらいだったら正規表現での文字列置き換えの方が楽だ。AssemblyInfo.cs に登場する要素はほぼ固定なのでこれでよい。

<ItemGroup>
  <AssemblyInfoFiles Include="$(SolutionRoot)\**\AssemblyInfo.cs" />
</ItemGroup>
<Target Name="GetTFSVersion">
  <Message Importance="high" Text="Updating Version: $(Major).$(Minor).$(Build).$(Revision)" />
  <Time Format="MMdd">
    <Output TaskParameter="FormattedTime" PropertyName="Build" />
  </Time>
  <Time Format="hhmm">
    <Output TaskParameter="FormattedTime" PropertyName="Revision" />
  </Time>
  <Message Importance="high" Text="New Version: $(Major).$(Minor).$(Build).$(Revision)" />
</Target>
<Target Name="BeforeCompileConfiguration" DependsOnTargets="GetTFSVersion">
  <Attrib Files="@(AssemblyInfoFiles)" Normal="true" />
  <FileUpdate Files="@(AssemblyInfoFiles)"
          Regex="AssemblyVersion\(&quot;.*&quot;\)\]"
          ReplacementText="AssemblyVersion(&quot;$(Major).$(Minor).$(Build).$(Revision)&quot;)]" />
  <FileUpdate Files="@(AssemblyInfoFiles)"
          Regex="AssemblyFileVersion\(&quot;.*&quot;\)\]"
          ReplacementText="AssemblyFileVersion(&quot;$(Major).$(Minor).$(Build).$(Revision)&quot;)]" />
</Target>

Team Foundation Server でセットアッププロジェクトをビルドする

http://msdn.microsoft.com/ja-jp/library/ms404859(VS.80).aspx

中を見たらAfterCompile の時点で devenv.exe を呼び出して無理矢理作っているだけだった…結局それしかないのね。

ASP.NETの時もそうだったけど、どの順番で内部のタスクが呼ばれるのかを理解しておくのはカスタマイズする上でとても重要。TFSビルドのカスタマイズをするなら カスタマイズ可能な Team Foundation のビルド ターゲット は手元に置いておくべき。

これさえ理解しておけば、後は普通に MSBuild の流儀で XML ファイルを修正するだけだ。CruiseControl.NET での戦いの7割ぐらいは結局 MSBuild だったので、そういう意味では結局やることはあまり変っていない。

ccnet.config を手で書き換えていた部分が、VisualStudio で簡単に作れるようになって、sln を単純に指定した最初のビルドまではやってくれる、というだけでも十分 CruiseControl.NET から移行する価値はあるが。(ちょっとしたプロジェクトならそれで十分かもしれないし)

Liquid XML Studio で XML Schema を生成させる

http://www.liquid-technologies.com/XmlStudio/XmlStudio.aspx

XML Studio (Community Version, 無料でOK)にXMLファイルを読み込ませて、Tool→ Infer XSD Schema を使うことで XML Schema をとりあえず作成させることができた。

Visual Studio 2008 SP1 には、「XML to Schema ウィザード」があるらしいんだけど、自分は VB のインストールをしなかったおかげで利用できなかったという罠。VBでコードを書くわけではないのだがたまに困る。

SCM SCL010 でカード番号読み取り

http://www.scmmicro.com/products-services/smart-card-readers-terminals/contactless-dual-interface-readers/scl010.html

とりあえずカード固有の番号(serial) を取るのは、リファレンスマニュアルを参照すると GetUID, APDU コマンドでいうと FF CA 00 00 であることが分かる。送信時には末尾に更に 00 を付与。OpenSCを利用する場合、

opensc-tool –s FF:CA:00:00:00

とやると番号が取得できた。Suica,PASMO,Edy などの Felica だけでなく 住基カード もいけるはずなのだが、opensc-tool だとうまくいかない。そもそも ATR で成功したり失敗したりなのと、別のツールだと番号表示するまでに時間がかかるので、opensc-tool だと待ち時間が足りない感じのように見える。