カテゴリー「-プログラミング ( 2008.10-12 )」の42件の記事

2008年12月31日 (水)

[TDD の練習(3)] 和暦年月の文字列を検証する

とある掲示板より。
> 号年月(例 H2012)が実在する年月であるかをチェックしたいです。
> 年号は、H=平成 S=昭和のみを対象とします。

質問者は、 旧 VB の IsDate() 関数と互換のメソッドが使えるような実装が出来た、 というところで終わっています。 そのコードは、 「一部省略しております」 とのことで、 文字列を分解する前の文字列長チェックとかは書かかれていません。

で。 こういう検証器、 つまり、 引数が何らかの基準を満たしていたら true、 そうでなければ false を返すというモノは、 テストを書きやすいのでネタにしてみます。
また、 和暦を扱う上で厄介なのは、 境界値の前後をどうするかという仕様の問題ですが、 ここでは IsDate() の挙動に合わせる、 ということにします。

ということで、 いつものようにどんなテストコードを書いていけばいいのかを、 文章で書いてみますので、 ユニットテストに書き下してみてください。

今回は、 VB.NET 2008 + NUnit です。
・ プロジェクト名: IsDateを使ってみる
・ テストクラス: 年月検証器のテスト
・ 製品クラス: 年月検証器 ( +α )
・ 製品に実装するメソッド
Public Shared Function それは実在する年月か (ByVal 元号年月 As String) As Boolean

続きを読む "[TDD の練習(3)] 和暦年月の文字列を検証する"

| | コメント (0) | トラックバック (1)

2008年12月30日 (火)

[TDD の練習(2)] (すっかり出遅れた) 縦書き祭

わんくま blog での縦書き祭は → このへんから

てことで、 仕様はこんな感じにします。
・ 入力は全角のテキストだとする。 ( そうじゃなかったら、 読み込んだときに変換してね )
・ Console.WriteLine() で出力していくと、 縦書きしてあるように見えること。
・ 無駄な空白 (右端と下端) は、 出力しない。

前回と同様に、 どんなテストコードを書いていけばいいのかを、 文章で書いてみますので、 ユニットテストに書き下してみてください。

  1. 最初に、 どんな使い方をするものなのか、 考えます。
    コードの流れはどんなふうでしょう。 その中で、 今回作るモノはどのように使うでしょう? 分かりにくいときは、 ざっと書いてみます。
    ここは回答例を書いておきましょう。 こんな感じでしょうか…

// 読み込んだら、UNICODE 正規化と全角変換して
List<string> 横書きデータ = new List<string>();
foreach (string 一行 in 横書きデータ元) {
  string 正規化済み
   
= 一行.Normalize(
      System.Text.NormalizationForm.FormC);
  string 全角化済み
    = Microsoft.VisualBasic.Strings.StrConv(
      正規化済み,
      Microsoft.VisualBasic.VbStrConv.Wide,
      0x0411);
  横書きデータ.Add(全角化済み);
}

// 縦横変換機を呼び出して
IEnumerable<string> 変換後データ
  = 縦横変換機.縦書きに直せ(横書きデータ);

// コンソールに書き出させる
foreach (string 横一行分 in 変換後データ) {
  Console.WriteLine(横一行分);
}

上で書いたコードで、 まだ無いモノは 縦横変換機 ってヤツです。 こいつを作るためのテストを書いていきます。

続きを読む "[TDD の練習(2)] (すっかり出遅れた) 縦書き祭"

| | コメント (0) | トラックバック (1)

2008年12月28日 (日)

[.NET] yield return はコードカバレッジでカバーできない

そーいや yield return を自分で使ったこと無かったやん~ f(^^;
…と思い立って使ってみたんだけど。 その話はさておき。

前から気になってはいた、 yield が Visual Studio のコードカバレッジでちゃんとカウントしてくれない、 って問題。
けっきょく、 Visual Studio 2010 で対応、 ってことらしいです。 ( …とメモ f(^^; )

・ MSDN フォーラム: Visual Studio フィードバック
yield returnはコードカバレッジでカバーできない。

・ MS Connect : Feedback ID = 329830
Code Coverage is incorrect when using 'yield return' block

It has been resolved as fixed and the fix should appear in the upcoming beta of Visual Studio 2010.
投稿者: Microsoft、投稿日時: 2008/11/18 23:56

| | コメント (0) | トラックバック (0)

[.NET] StreamWriter を使って シフト JIS のテキストファイルを書き出すと 2GB でエラー

あれま。
まぁ、 Encoding 無指定で ( てことは UTF-8 だっけ? f(^^; ) 書き出す分には、 問題無く 2GB 越えられるようだし。 どうしてもシフト JIS で 2GB 越えを、 ってときには、 自前で変換してバイナリで書き出せば、 きっと回避できるし。

MS Connect: FeedbackID = 389622
StreamWriter に Encoding を指定してファイル出力を行うと、 2GB を超える直前でArgumentException が発生する。
Encoding を指定しない場合は、 問題なく出力される。

けれど、 知らずにログの書き出しとか実装してたら、 大ハマリするよねぇ (;;

※ 直して欲しい人は、 レイティング付けましょうね f(^^;


( 2009/01/08 追記 )

上記フィードバックに MS からの回答が付いてました。

This problem has been fixed and the fix will appear in the next major release of the .NET Framework..

投稿者: Microsoft、投稿日時: 2009/01/06 14:21

もう直ってるけど、 公開は次の .NET Framework のメジャーリリース ( つまり、 4.0 のことでしょうね ) で …って、 また微妙な言い方を。 既存のバージョン用の修正は出るのかどうかワカランじゃん。

| | コメント (0) | トラックバック (0)

サンプルコードはサンプルであって製品じゃないんだからねっ

…っていう、 昔はあたりまえだった ( …ハズ f(^^; ) ことを、 このごろはどんどんしつこく言わないといけないご時世なようで。

いつからなのか分からないけど、 今日ふと気付いたら、 MSDN ライブラリにも、 こんな注意書きが。
20081228_msdnlib01

このサンプルコードは概念を示すためのものであり、 その概念に関連するコードのみを示しています。 特定の環境について必ずしもセキュリティ要件を満たしていませんので、 そのまま使用しないでください。 セキュリティおよびエラー処理コードを追加して、 プロジェクトをより安全かつ堅牢にすることをお勧めします。

| | コメント (0) | トラックバック (0)

2008年12月25日 (木)

[.NET] SandCastle 用に、 namespace へのコメントをソースコードに埋め込む方法

いや、まだだから」 より。

その3.名前空間ごとに NamespaceDoc クラスを作成する。

ということで、この方法があったりします。
つまり、名前空間のコメントを入れるためのクラスを定義してしまうってゆー、まーなんというか、盲点というか、抜け道というかw
C# だとこんな感じですねー。

namespace 対象とする名前空間 {
    /// <summary>
    /// 名前空間の概要
    /// </summary>
    /// <remarks>名前空間の補足</remarks>
    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    class NamespaceDoc {
    }
}

…ぐふぅ。 そんなぁ~!? f(^^;
はい、 まさにドキュメント読んでませんでした orz

続きを読む "[.NET] SandCastle 用に、 namespace へのコメントをソースコードに埋め込む方法"

| | コメント (1) | トラックバック (1)

2008年12月21日 (日)

[TDD の練習] FizzBuzz 問題

わんくま同盟 東京勉強会 #27上野さんセッションで紹介された、 FizzBuzz 問題。
100 まで表示せい、 ってお題に、 即座にその場で書き下した yukiyukki初音さん、 さすがです。

けど、 あれれ? 0 始まりじゃなくて、 1 からだよ~ f(^^;
あ、 それだけじゃないよ~な…

これって意外と難しい? f(^^;

ということで、 NUnit ( VS 2008 Pro. 以上を持ってるなら、 そのユニットテストでも OK ) 用のテストコードを考えてみてください。

続きを読む "[TDD の練習] FizzBuzz 問題"

| | コメント (2) | トラックバック (1)

[わんくま同盟 東京勉強会] 第27回 (2008/12/20) の資料

初めて参加させていただいた東京の勉強会では、 名古屋第1回でもやった MSF Agile を話させていただきました。 → わんくま同盟 勉強会の資料

1年前のプレゼン資料がほぼそのまま使えたというのは、 喜ぶべきか悲しむべきか…
いまだに MS のサイトには MSF ver.4.x の日本語資料が無いみたいだし、 日本では TFS を真剣に売り込むつもりが無いんじゃないの? …と、 つい愚痴りたくなります f(^^;
# ひょっとして、 米国外には MSF は広めないでくれ って圧力が掛かってるとか? (w

そうそう。 東京の勉強会参加者には、 自営や社長さんが大勢いらっしゃってちょっとびっくり。 名古屋とはだいぶ雰囲気が違いますね。

| | コメント (0) | トラックバック (0)

2008年12月 9日 (火)

Excel VBA で、 ファイルのバージョンとタイムスタンプを取得する

今回のプロジェクト、 納品が頻繁に発生するので、 納品したモノのバージョン管理も欠かせません。 となると、 いつ、 どんなファイルバージョンのものを納品したのか、 記録しておかないといけないのですが…
ひとつひとつ、 ファイルのプロパティを開いてファイルバージョンを書き写すのって… めんど~ orz

どーせなら、 VBA でサクっと書けて、 Excel の表になってくれちゃえばいいのに~ f(^^;

続きを読む "Excel VBA で、 ファイルのバージョンとタイムスタンプを取得する"

| | コメント (2) | トラックバック (0)

2008年12月 6日 (土)

[わんくま同盟 名古屋勉強会] 第5回 (2008/12/06) の資料

20081206_wankuma 第5回では Lightning Talk ( LT ) ということで、 いつもと違ってちょっとヨタ話 f(^^;わんくま同盟 勉強会の資料

もと機械設計屋さんから見た、 「オブジェクトを志向しているプログラム」 ( Object-Oriented Program ) ってモノのイメージを、 5分間で喋らせていただきました。

| | コメント (0) | トラックバック (3)

2008年12月 4日 (木)

Unity でアスペクト指向

メモだけ f(^^;

EntLib4.1 での PIAB 仕様変更 (2) より。
「Unity だけでアスペクト指向プログラミングが可能になっています。」

ぉお、 そーだったのか!

| | コメント (0) | トラックバック (0)

2008年12月 2日 (火)

[C#] ?? 演算子と GetValueOrDefault() メソッド

どっちも同じようなコトに使います。 つまり、 変数が null だったときの値を指定してやる、 という…

[TestMethod]
public void GetValueOrDefaultTest()
{
    int? x = 3;
    Assert.AreEqual<int>(3, x.GetValueOrDefault(-1));
    Assert.AreEqual<int>(3, x ?? -1);

    int? y = null;
    Assert.AreEqual<int>(-1, y.GetValueOrDefault(-1));
    Assert.AreEqual<int>(-1, y ?? -1);
}

おんなじようなもんだから、 どっちを使うか好みで決めちゃえばいいか~、 …と軽く考えていたんですが。 なんたるおバカ。 演算子はオブジェクトに使えるのに対して、  GetValueOrDefault() メソッドは Nullable<T> 型だけが持っているメソッドなんですね。
つまり…

string s = null;
//Assert.AreEqual<string>("(null)", s.GetValueOrDefault("(null)")); ← コンパイルエラー
Assert.AreEqual<string>("(null)", s ?? "(null)");

…ということ。 f(^^;

| | コメント (0) | トラックバック (0)

2008年11月30日 (日)

[わんくま同盟 東京勉強会] 12/20 新宿で会いましょう

わんくま同盟 12月 20日 (土) は、 「わんくま同盟 東京勉強会 第27回」。 これを書いてる時点で、 空きはあと 28名様らしいです。

東京の勉強会ですが、 私も 1コマ頂いて喋らせてもらいます。 
中身は 1年前の名古屋勉強会でやった MSF for Agile のリピートです。 この 1年、 Microsoft には MSF に関する動きがほとんどなかったので、 内容は古くならずに済んでると思います。 f(^^;

お弁当と、 懇親会 ( っていうか、 忘年会? ) にも参加する予定でいます。
# 仕事のほうが、 年明けからのフィールドテストを控えての、 受け入れテストの山場っていう時期にあたるため、 二次会以降はパスさせてもらって名古屋にトンボ帰りしないといけないですけど (;;

| | コメント (2) | トラックバック (0)

2008年11月29日 (土)

Microsoft の中の人ブログ集

これはありがたい (^^;

シャノン@わんくま同盟北埼玉支部 さんの blog より

blogs.msdn.com、 blogs.technet.com、 Windows Live Space で、 Microsoft 社員さんが書いている日本語ブログを集めてみました。

| | コメント (0) | トラックバック (0)

2008年11月27日 (木)

VS2008 日本語インテリセンスの復活 (^^)

SP1 を当てたら、 英語をしゃべるようになっちゃったインテリセンスですが、 ようやくパッチが出ました。

ディベロッパー製品開発統括部 Blog
November 26, 2008 6:41 PM by DDJPNVS
Visual Studio 2008 Service Pack 1(SP1)用Intellisenseの修正プログラムが公開されました

Visual Studio 2008 SP1 をインストールすると一部の Intellisense が英語で表示されるという問題を修正するプログラムです。

やぁ、 ひさしぶりに日本語のインテリセンスに会えました f(^^;
※ VSTS2008DE SP1 @Vista Ent. (64bit) SP1

| | コメント (0) | トラックバック (0)

2008年11月26日 (水)

祝! MSDN マガジン、 復刊

…といっても、 オンラインのをオンデマンド出版する、 ってことですが。 一冊 1,890円と、 オンデマンドにしては高くないという印象。 (^^)

booknest > マイクロソフト > MSDN マガジン


( 2008/12/04 追記 )
なんと、 HTML ヘルプ形式 ( .chm ) でダウンロードも出来るようになってたのね。
MSDN Magazine HTML Help Files
日本語版は、 2006年 11月号からあるようです。

| | コメント (0) | トラックバック (0)

[.NET] VS2008 SP1 の WPF デザイナー用ホットフィックスが出てます

# ぅが… 出たの 2週間も前だ orz

MSKB: 958017
A hotfix rollup is available for WPF Designer
Article ID: 958017 - Last Review: November 11, 2008 - Revision: 2.0

This hotfix rollup fixes several issues in the WPF Designer. This hotfix rollup applies only to the computer that has Visual Studio 2008 Service Pack 1 installed.

(...snip...)

If you already have the latest version of Silverlight Tools for Visual Studio 2008 SP1 installed, do not apply this hotfix rollup. All the fixes in this hotfix rollup are already included in Silverlight Tools for Visual Studio 2008 SP1.

これは、 VS2008 SP1 で ( さらに ) 機嫌が悪くなってしまった WPF デザイナーに対する、 ホットフィックスらしいです。 ホットフィックスなので、 原則としてはサポートに連絡して入手するのですが…
どうやら、 Silverlight Tools に含まれている、 ってことらしいです。

※ まぁ、 最近は MSDN Code Gallery で公開されてたりしますけど f(^^;KB958017 - Rollup Hotfix for several issues in WPF designer Visual Studio 2008

| | コメント (0) | トラックバック (0)

契約によるプログラミング.NET

InfoQ に日本語記事が載ったので f(^^;

.NET 4 の新機能を探る: コード契約
作者 Jonathan Allen, 翻訳者 金森 諭 投稿日 2008年11月22日 午前12時53分

契約による設計は静的型付けのように、 コンパイル時に検証されないと一定の動作を実行することができないという考え方だ。 契約は通常、 事前条件 事後条件という形を取る。 例えば引数や戻り値が null でない、 あるいは一定の範囲内の値であるという条件がそうだ。

ということで。 .NET Framework 4.0 からは、 契約によるプログラミングがサポートされるようです。
さらに、 上の記事には出てきませんが、 blog などを見ると、 XML コメントと同様に Contract の内容もドキュメントに出力することも計画されているようです。 ( 2008/11/26 訂正: 記事にも 「ドキュメントジェネレータが抽出して使える」 とありました。 )

Microsoft Research ~ Code Contracts - Machine Readable Code Assumptions
BCL Team Blog ~ Introduction to Code Contracts [Melitta Andersen] ( November 11, 2008 3:36 PM by BCLTeam )

現在、 CTP は上の MS Research のページからダウンロードできます

※ ドキュメントやインテリセンスなど、 外部からコントラクトが分かることは重要です。 メソッド内部のコードを見ないと分からないというのでは、 使う側からすれば Assert 文やガード句と同じですから。


# 1週間くらい前から書こうと思ってたんだけど。 けっきょく時間が取れなかったのよ~ orz
# Code Contracts .NET、 略して C.C.NET (  しーつーどっとねっと ) …ダメですか?
(w

| | コメント (0) | トラックバック (0)

2008年11月21日 (金)

[VS2008] FAQ: TFS には、 本当に3つの異なるアカウントが必要?

MSDN フォーラムより。

Visual Studio Team System フォーラム
[FAQ] Team Foundation Server をインストールする際、本当に3つの異なるアカウントを使用する必要があるのですか?

これ、 なかば羊頭狗肉っぽくって f(^^;
回答のリンク先をよーく読むと、 結局 3つの異なるアカウントが必要みたいです。
本題は、 それよりも、 3つのアカウントにどういうものを使えばよいか、 という解説になってます。

Microsoft Japan Forum Operators Blog
管理者アカウントでの TFS セットアップに関する説明(原題: “Clarification on TFS Setup with Admin Accounts”)

2. SQL Server や TFS をインストールするには、 ローカルの管理者アカウントを使用してください。 (TFSSETUP である必要はありません。)
( …中略… )
4. TFS サービスやレポーティング サービスに使用されるアカウント (たいていは TFSSERVICE や TFSREPORTS) は、 好きな名前に変更することができます。 参考までに、 ここでは上記の名前を使用します。
5. TFSSERVICE アカウントと TFSREPORTS アカウントは、 ドメイン内では 「標準ユーザー」 で、 ローカル マシンでは 「管理者」 である必要があります。

アカウントについて、 さらに補足されてもいます。
私が理解した範囲を表にすると、 こんな感じです。

マニュアル
記載の
アカウント
アカウントの役割 アカウントに必要な権限
TFSSETUP SQL Server や TFS をインストールするためのアカウント ローカルの管理者アカウントを使用する
TFSSERVICE TFS サービスに使用されるアカウント 変更可。 ドメイン内では 「標準ユーザー」 で、 ローカル マシンでは 「管理者」 であること。
TFSREPORTS レポーティング サービスに使用されるアカウント 変更可。 ドメイン内では 「標準ユーザー」 で、 ローカル マシンでは 「管理者」 であること。

| | コメント (0) | トラックバック (0)

2008年11月20日 (木)

.NET F/W と SQL Server では、 3ミリ秒違う

どちらの DateTime も、 最大値は 9999年 12月 31日 …で。
じつは、 その日の 23時 59分 59秒 で。 ( ここまでは、 覚えていた f(^^; )

ところがなんと !!
その下のミリ秒の桁で違っていたんですねぇ。 なんたる迂闊 ! orz

I don't like having Nulls in DateTime columns

  Min Date Max Date
.Net 0001-01-01 00:00:00.000 9999-12-31 23:59:59.999
SQL Server 1753-01-01 00:00:00.000 9999-12-31 23:59:59.997

※ この表では 2ミリ秒の差に見えますが、 切り捨てているので正確には 2.9999ミリ秒の差になっています。
long diff = (DateTime.MaxValue).Subtract(SqlDateTime.MaxValue).Ticks;
Assert.AreEqual<long>(29999, diff); // 29999 x 100nS = 2999.9pS = 2.9999mS

なお、 DateTime.MaxValue より 3ミリ秒小さい、 この SQL Server の最大日付を表す定数が、 ちゃんと切ってありました。 上のコードにも書いた、 SqlDateTime.MaxValue です。  → System.Data.SqlTypes.SqlDateTime.MaxValue

| | コメント (1) | トラックバック (0)

[.NET] (続) フィードバック - WPF: テキストボックスに Maxlength の長さの日本語文字列が入力できない

…件について、 MS Connect に上げておいたのですが、 今日 ( いや、 もう昨日か  f(^^; ) MS からの回答が付きました。

Feedback ID: 332165

We are currently working on a fixing this issue in our next release.
Posted by Microsoft on 11/18/2008 at 12:42 PM

次リリースで直すべく作業中、 とのこと。
ん? 「次リリース」 って言ったら、 .NET Framework 4.0 のことかな?
ともあれ、 一件落着 (^^; ( …たぶん f(^^; )

応援してくれた皆さま、 どうもありがとうございました。 m(_`_)m

# 4.0 に向けて、 出したいフィードバックのストックが何本かあるんだけど… 火事場中 orz ( おまけに、 今回は書類仕事も混ざってるんで、 ビルドしてる時間がヒマにならないw )

| | コメント (0) | トラックバック (0)

2008年11月18日 (火)

[.NET] Enlist=false でも、 DataContext は分散トランザクションの昇格をしちゃう

DB 接続文字列に Enlist=false と入っていると、 ADO.NET では、 分散トランザクションへの昇格が抑制されます。 そのため、 TransactionScope 内で DB 接続を開いても、 その接続は自動的にはトランザクションに参加しなくなります。
その状態でもトランザクションに参加させたい場合には、 開いた DB  接続に対して明示的に  conn.EnlistTransaction( Transaction.Current ) としてやる必要があります。 ( → [.NET] TransactionScope とユニットテスト )

その感覚でいたら、 ハマリました orz
LINQ to SQL の DataContext は、 SubmitChanges() の中で、 上で言う EnlistTransaction() をやってくれるみたいなんですねぇ。  Enlist=false を指定すれば、 勝手に昇格しなくなると思い込んでいたら、 実はちゃっかり昇格してました。

分散トランザクションというか、 TransactionScope を入れ子にできることは、 開発しているアプリケーションの要件としては不要であっても、 上記のリンク先に書いたように、 単体テストにはすごく役に立ちます。
ところがその反面、 分散トランザクションをサポートする MSDTC は、 ちゃんと設定されてちゃんと運用されている DNS サーバーを必要とするため、 クライアント側のアプリに採用するのは難しいのです。
そんなわけで、 TransactionScope は使って、 しかし結合テスト段階からは接続文字に  Enlist=false といれてやれば、 うっかり昇格させてしまうコードを書いていたらエラーになって発見できるはず… と思いこんでいて、 ハマリました orz
ユニットテストと結合テストを切り替えるたびに、 MSDTC のサービスを動かしたり無効にしたりしてしのいでますが、 めんどくさいです~ f(^^;

| | コメント (0) | トラックバック (0)

2008年11月14日 (金)

Re: 続:.NET FrameworkのCultureと"々"

おくればせながら、 元ネタをよーやく検証しました。

( もちろん ! ) 再現できたので、 Visual Studio & .Net Framework プロダクト フィードバック センターに vote / 検証 / 回避策 それぞれ ++ してきました。

> 一日でトップアクティブバグレポートに躍り出るとは思いませんでした。

私が出した WPF ネタが長らくトップだったのに。 残念じゃ~ (^^;

> なんかわざとやっているのかと思います。

わざとかどうかは別として、 とりあえずは IndexOf() だけみたいですね。
StringComparison を指定できるその他のメソッド Compare(), LastIndexOf(), StartsWith() といったあたりは、 "愛々" では大丈夫そうでした。
→ テストコード UnitTest1.cs ( 7,192 バイト, VS2008 Pro. 以上 )

続きを読む "Re: 続:.NET FrameworkのCultureと"々""

| | コメント (3) | トラックバック (0)

2008年11月11日 (火)

トレーサビリティということ: 設計書とコードの間

トレーサビリティとは、 「追跡できること」 です。

ソフトウェア開発においては、 最初に作った成果物 ( 一般には、 要件定義書 ) と最後に作成したもの ( プログラムやマニュアル ) との間を追跡することができることです。 要件定義書に書かれているある一文は、 設計書のここに書かれており、 それはこのソースコードのこの部分に実装されている、 と追跡できること。 あるいは、 逆に、 プログラムで不具合が出た場所は、 ソースコードではここで、 それは設計書のここに書かれていて、 それは要件定義書にここに基づいている、 と辿れることです。

さて。 設計書には、 どんな処理をするかを日本語などの自然言語で書きます。 それを、 一言一句そのまま書けとはいいませんが、 コード中のロジック部分の核の部分には、 設計書に書かれた処理が素直にたどれるような形でコーディングしてあるべきでしょう。

そうせずに、 この方が処理効率がいいとか、 こっちの書き方の方がカッコ良いとか、 まぁようするに自分の趣味でロジックの核の部分をコーディングされちゃうと、 どうなるか…

…デバッグするときに、 コードのどこを見ればいいのかワカリマセン orz ← いまココ (;;

| | コメント (2) | トラックバック (0)

2008年11月 5日 (水)

条件記述の分解リファクタリング @VS2008

if 文とかの条件式が複雑になっちゃってたら、 その条件式を丸ごとメソッドに括りだしてやれば… if ( Isなんちゃら() ) ってシンプルな if 文になって、 いいじゃん。
ってのが、 条件記述の分解 ( 条件式の抽出 ) リファクタリングです。

が、 それって面倒じゃん。 if 文全体なら、 メソッドの抽出リファクタリングを C# の Visual Stuido が自動でやってくれるのに~ (--;

…と信じ込んでいたんですが。
ふと思い立って、 if 文の中の条件式だけを選択しておいてから、 メソッドの抽出リファクタリングをやらせてみたら。

ちゃんと条件式の抽出をやってくれるじゃん ! (^^;
VS2005 の C# では出来なかったと思ったのに~ (--;
…私がマヌケだっただけですか…!? orz

| | コメント (0) | トラックバック (0)

2008年10月30日 (木)

[WPF] 続々登場! データグリッド、 カレンダーコントロール、 リボン

I'm glad!
Because DataGrid and Calendar Control appeared, WPF will be used also for the business application.

Windows Presentation Foundation SDK blog より。

WPF Toolkit is live - DataGrid, Ribbon, and Calendar preview versions

In conjunction the morning keynote presentation at PDC, the public releases of DataGrid and Ribbon are now live.

Published Tuesday, October 28, 2008 8:07 PM by jgalasyn

ということで、 CodePlex で公開されました。

20081030_wpf_datagrid WPF Toolkit - October 2008 Release
  - WPF DataGrid コントロール ver.1
  - DatePicker/Calender コントロール ver.1
  - VSM ( Visual State Maneger ) の Preview

WPF Ribbon Preview
こちらは、 Office 2007 のリボンを WPF に持ってきたコントロールでしょうね。
利用するには、 Office UI ライセンスに同意する必要があるみたいです。

Prism も出てるし、 これで業務アプリでも WPF が普通になっていくといいなぁ。

# デートピッカー/カレンダー コントロールが出てきてしまって… 自作し始めてたうちのエースプログラマの複雑な顔 f(^^;

| | コメント (2) | トラックバック (1)

[開発プロセス] バグのトリアージ

Compact Oxford English Dictionary より。

triage
/triij/
noun
1 the action of sorting according to quality.
2 Medicine the assignment of degrees of urgency to wounds or illnesses to decide the order of treatment of a large number of patients.

― ORIGIN French, from trier ‘separate out’.

「トリアージ」 というと、 日本では、 救急医療での治療優先度付け作業を表す言葉として知られています。
本来の意味は、 上に引用した 1 のように、 なんらかの基準 ( = 品質 ) に基づいて順序付けをする作業のことです。
# 語源は  「分離する」 という意味のフランス語 trier だということですが、 それを知らずに、 トリアージとは救急医療の用語が本来であると信じ込んで、 「バグのトリアージ」 という言い方はヘンだ、 と噛み付く人も世の中にはいますw

ソフトウェア開発の、 テスト~デバッグのフェーズでは、 検出された不具合を選別し優先順位付けをする作業を言います。
「優先度設定」 とか呼べばいいじゃん、 って言われそうですが、 それだと、 上がってきたバグ票は全部デバッグするのだ、 というイメージになっちゃいます。 優先順位を付ける前に、 選別することが必要なんです。 ( 英語でも同様な事情で適切な単語が無くて、 フランス語を使ったんだと想像してます。 )

もしトリアージを行わずに、 テスターから上がってきたバグ票を、 開発者に直接渡してデバッグ作業に入ってもらうと、 どうなるか…?

続きを読む "[開発プロセス] バグのトリアージ"

| | コメント (0) | トラックバック (0)

2008年10月26日 (日)

[わんくま同盟 名古屋勉強会] 第4回 ソースコードの解説

※ 「DI コンテナの本懐 ~ IoC の実装も楽々!」 の資料とソースコードは、 こちら → わんくま同盟 勉強会の資料

◆ 前提条件

◆ このサンプルコードはなにか?

DI コンテナである Unity Application Block を使って、 3つのアセンブリを組み上げて動かしてみるサンプルです。

  • ApplicationStarter プロジェクト
    UI コンテナを使って、 3つのアセンブリを組み上げて動かす役割。 全てのアセンブリを知っている 「神様」 モジュールです。 これが exe になり、 残りのプロジェクトは dll です。
    ※ 設計の話題として、 「神様」 モジュールにイロイロやらせてしまうと、 結局グローバルで複雑なコードが出来上がってしまうので、 よろしくないとされています。 アプリケーションを組み立てて、 スタートメソッドを蹴飛ばしたらお仕舞い、 という程度のシンプルなものに留めておくべきでしょう。
  • ApplicationStarter2 プロジェクト
    ( 後述 )
  • BL プロジェクト
    Business Logic です。 アプリケーションのキモの部分。
    ※ 今回は、 このビジネスロジックが、 他のブロックよりも安定していて変わりにくい部分である、 という仮定で話を進めています。
  • SqlAcc プロジェクト
    SQL Server Accessor です。 このサンプルでは実装してないのですが、 SQL Server にアクセスする役割を持たせてある、 と思ってやってください。
  • XmlAcc プロジェクト
    XML file Accessor です。 このサンプルでは実装してないのですが、 XML のファイルにアクセスする役割を持たせてある、 と思ってやってください。 ApplicationStarter2 プロジェクトで使っています。
  • UIwpf プロジェクト
    WPF による UI ( User Interface ) です。 このサンプルでは実装してないのですが、 ボタンをクリックされたら、 テキストボックスに入力されている文字列を使って、 BL にリクエストを出し、 返ってきた結果をデータグリッドかなんかに表示する、 というような実装がしてあると思ってやってください。

続きを読む "[わんくま同盟 名古屋勉強会] 第4回 ソースコードの解説"

| | コメント (6) | トラックバック (0)

2008年10月25日 (土)

[わんくま同盟 名古屋勉強会] 第4回 (2008/10/25) の資料

第4回で喋らせていただいた 「DI コンテナの本懐 ~ IoC の実装も楽々!」 の資料とソースコードは、 こちら → わんくま同盟 勉強会の資料

今回は時間が取れなくて、 サンプルコードが未完成です m(_`_)m
画面と DB アクセスの部分をちゃんと作ってありません。
# なんせ、 xml を使う ApplicationStarter2 プロジェクトなどは、 会場に向かう電車の中で、 ようやくデッチ上げたシロモノでして f(^^;

あと、 今回は、 会場の無線 LAN が上手く立ち上がらず、 そうこうしてる間に突然会場の電源のブレーカが落ちたりと、 いろいろ不手際がありまして、 私のマシンも話してるときにはまだ LAN につながってなかったんです < MISAO が動いてなかったことの言い訳 f(^^;

| | コメント (0) | トラックバック (0)

2008年10月24日 (金)

帰ってきた VB2 ? っていうか、 QuickBASIC ? ~ Small Basic

It's cool. I think Small Basic is the best for the novice who begin to learn programming.

 

昔の VB2 みたいに、 早くてお手軽、 だといいなぁ。 f(^^;

・ blog : SMALL BASIC
・ DevLabs : Small Basic
      -- Getting Started guide ( pdf )

ぱっと見、

・ Class も Sub も無しで命令が書ける
・ もちろん変数宣言は不要
・ タートルグラフィックスや、 Windows の壁紙へのアクセスなどを標準装備

| | コメント (0) | トラックバック (1)

2008年10月22日 (水)

[Windows] Sysinternals Tools のパック

あら。 まとめてダウンロードできるようになってる。 いつのまに… f(^^;

Sysinternals Suite
By Mark Russinovich

Sysinternals の トラブルシューティング ユーティリティをひとつにまとめました。 このファイルには、 トラブルシューティング ツールとヘルプファイルが含まれています。

ZoomIt や du など、 開発者じゃなくても便利なツールもあります。 ( 個別にダウンロードすることもできます。 )

| | コメント (2) | トラックバック (0)

2008年10月21日 (火)

[.NET] WPF は ILMerge できない

XAML で定義した WPF の画面が入っている dll が沢山… さてこいつらを、 .NET Framework Developer Center の Tools & Utilities に載っている ILMerge を使って、 ひとつにしちまうべぇ~

…と、 合体させてみたはいいんだけど。 実行すると、 なにやらリソース中の XAML をロード出来ないらしく、 いきなし例外落ち orz
元は別の dll に入っていたカスタムコントロールを LoadComponent(Object component, Uri resourceLocator) するところで、 失敗してるみたい。 これって、 つまり、 XAML 中の URI はハードコーディングされちゃってて、 ILMerge では改名されちゃってるので、 見つけられなくなっちゃった… ってことかなぁ。

あ。 「ILMerge できない」 じゃなくて、 正確には 「ILMerge したアセンブリを実行するとエラーになる」 ですね f(^^; > タイトル

| | コメント (0) | トラックバック (0)

2008年10月18日 (土)

[わんくま同盟 名古屋勉強会] 第4回は、 次の土曜日 (10/25) に国際センター

わんくま同盟 いよいよ来週末は、 「わんくま同盟 名古屋勉強会 第4回」。 これを書いてる時点で、 空きはあと 7名様らしいです。
あ、 まだ申し込んでないや、 ってかたは、 お早くどうぞ f(^^;

今回の会場は WAN が入ってるそうなので、 Ustream 配信も余裕でいけるでしょう。 当日、 会場には行けないけど気になる、 ってかたはどうぞ。 → wankuma, Ustream.TV ( なお、 当日、 ustream を開始した、 といった情報は、 たぶん blog に上がります。 )

※ VS2008 にも載ってます f(^^;
20081020_vs2008_msdnonline

| | コメント (0) | トラックバック (0)

2008年10月17日 (金)

[IE8] CSS expression の終焉

IE8 の標準モードでは、 ようやく CSS expression のサポートを止めることに決めたそうで。 (^^;
IEBlog より

Ending Expressions
October 16, 2008 1:24 PM

CSS expressions are no longer supported in IE8 standards mode. This change was announced previously on the IE blog, however, this post will provide a few more details about that decision.

なんてこった。 9月 2日の記事の中に書かれていたとは! orz

ともあれ、 もはや使わなくてもよくなった機能で、 しかもセキュリティ面で問題があるとなれば、 無くなっていくのは良いことです。
残っていると、 古い人間がその機能を使い続けますからねぇ。 (--;

あ。 Expressions 終了~ って言っても、 デザインツールの Expression が無くなるわけじゃありませんよ。 f(^^;

 

( 2008/11/18 追記 ) この記事の日本語訳が公開されています → MSDN - IE 翻訳ブログ - CSS Expressions のサポート終了について

| | コメント (0) | トラックバック (0)

2008年10月15日 (水)

[.NET] XAML 仕様書、 Silverlight ボキャブラリも公開

ここに書くのを、 すっかり忘れてたんですが…
XAML の仕様書が、 ( 英語版だけですけど ) この 6月末に公開されました。
そのときは、 XAML そのものの仕様書 ( [MS-XAML].pdf ) と、 WPF 用のボキャブラリ ( [MS-WPFXV].pdf ) の 2本でした。

それが昨日付けで、 Silverlight 用のボキャブラリ ( [MS-SLXV].pdf ) も追加されて、 MS ダウンロードセンターに公開されました。

Extensible Application Markup Language (XAML)

Date Published:    10/14/2008
Language:    English

[MS-SLXV].pdf - 1.2 MB
[MS-WPFXV].pdf - 8.8 MB
[MS-XAML].pdf - 1.1 MB
XAML_documentation.zip - 7.5 MB

バージョン表記は "1" のままですし、 もとあったページは消えてますので、 このダウンロードページだけを見ると、 全部が今回初めて公開されたように思えてしまいます f(^^;

| | コメント (0) | トラックバック (0)

2008年10月14日 (火)

Silverlight 2.0 正式リリース !

Microsoft PressPass より。

Microsoft Releases Silverlight 2, Already Reaching One in Four Consumers Worldwide
Microsoft announces new rich Internet applications development and streaming media features; company outlines plans for supporting Windows, Mac and Linux tools for developing Silverlight applications.

Redmond, Wash. ― Oct. 13, 2008

本文によれば、 "Silverlight 2 will be available for download on Tuesday, Oct. 14, at http://www.microsoft.com/silverlight." ( 米国時間で 14日からダウンロード可能 ) となってますが、 実際に試したところ、 すでに Silverlight.2.0.exe が降って来るようになってます。
※ → ディベロッパー製品開発統括部 Blog: Silverlight 2を公開しました

なお、 Silverlight Tools for Visual Studio 2008 SP1 のほうは、 現時点で英語版のみ RC1 が出ています。

| | コメント (0) | トラックバック (0)

2008年10月10日 (金)

Vista ( TSF ) で、 ふりがなを取得する

再変換候補のリストを取得するための ImmGetConversionList() は、 Vista というか TSF で廃止されちゃったので、 どうしようもなく… (;;

しかし。 リストじゃなくて、 読みがなを一つだけ返してくれる、 IME のインターフェースは、 IME 2007 でも、 どうやら使えるらしい。

入力された漢字からフリガナの取得

#include "msime.h"

( …中略… )

// Interface ID for IFELanguage2
// {21164102-C24A-11d1-851A-00C04FCC6B14}

( …中略… )

// GetPhonetic()メソッドで「読み」を取得
m_hr = m_pILang->GetPhonetic(bsIn, 1, -1, &bsOut);

でもって、 msime.h は、 現在 1.4 が最新らしい
Microsoft ダウンロードセンター

にしても。 MSDN ライブラリの解説…
Japanese Microsoft IME Specification - IFELanguage 2 - August 2003
Japanese Microsoft IME Specification - IFELanguage Functions -  August 2003
…が、 未だに翻訳されてないってのは… (ToT;

| | コメント (0) | トラックバック (0)

2008年10月 8日 (水)

[コード設計] JIS で決まってるコードは、 そのまま使おう

oakbow さんのところにコメントしながら考えた。
都道府県コードとか、 JIS に規定があるコード体系は、 それをそのまま使うべきだよね、 と。

◆ JIS のコードを使う場合
・ 設計書には、 「JIS による」 と書いておけば OK (^^;

◆ JIS ( とか、 その他、 標準化されている規格 ) のコードを使わない場合
・ JIS などの既存のコードではダメな理由を書かねばならない。
・ 独自のコードの決定理由を書かねばならない。 ( 「なんで茨木より栃木が後ろなんだ!?」 みたいな、 予想されるくだらないツッコミにあらかじめ対処しておかないと、 最後の最後でひっくり返される危険性がある。 )

| | コメント (0) | トラックバック (0)

2008年10月 7日 (火)

[.NET] .NET Framework 3.5 対応サンプルアプリケーション "DinnerNow"

以前紹介した 「Visual Studio 2008 ソリューションサンプル」 は、 MSDN スキルアップセンターに掲載されたものでした。
今回のは、 MSDN アーキテクチャセンターから出てきたサンプルプログラムです。

MSDN アーキテクチャ センター のホームページより。

DinnerNow グランドデザイン
DinnerNow は .NET Framework 3.5 を活用したサンプルアプリケーションです。本コンテンツは 上流設計の観点からアプリケーションの構造をおおまかにつかんで頂くために日本独自で書き起こしました。 ソースコードによる実装の詳細を追う前にぜひご覧ください。

※ 実際のページはこちら → DinnerNow グランド デザイン

アーキテクチャセンターのサンプルだからでしょうか、 きれいなレイヤ構造を持っているみたいです。
20081007_dinnernow_structure01aレイヤ構造と採用テクノロジ」 の図を見ると、 LINQ to SQL はデータアクセス層で使っていて、 ビジネスロジックでは使わないようにしているようです。 今やっているプロジェクトでは、 ビジネスロジックの中で LINQ to SQL を使っているのですが、 どうもこれはよろしくなかったかな、 という思いがありまして、 この図は、 やはりそうか~、 という感じです。

また、 このサンプルは WF も使っています。 WF が解決する問題とは、 つぎのようなことだそうです。

業務アプリケーションとワークフロー

これまで多くの業務アプリケーションが、 ワークフローとビジネスロジックを混在させてしまっているために、 プロセスの変更に対応できず、 アプリケーションを複雑にしてしまっています。 プロセス自体がプログラムに埋め込まれたり、 プロセスの状態をビジネス データと同じデータベースに混在したりするなど、 ワークフローとビジネスロジックの分離がされていないことが大きな問題になります。

言われてみれば、 たしかにそうなんですが… しかし、 日本の場合、 要件定義の段階で、 そもそもワークフローとビジネスロジックを分離して考えることができていないんじゃ…
そこに、 アーキテクチャだけ WF を持ってきても、 きっと上手くはいかないだろうと思います。
# …という理由を付けて、 私は WF の勉強をサボっているわけだ f(^^;;;

| | コメント (0) | トラックバック (0)

Tech Fielders セミナー 名古屋 (11/27)

MSKK のセミナーですが、 とりあえず行きたいと思ったのでメモ f(^^;

Tech Fielders セミナー 名古屋
2008年11月27日 10:00 - 2008年11月27日 19:15

◆ エバンジェリスト セッション 1 ◆ 10:00-12:00
タイトル: MDT を使った Windows Vista の導入と展開
田辺 茂也

◆ エバンジェリスト セッション 2 ◆ 13:00-15:00
タイトル: Silverlight 2 アプリケーション開発
大野 元久

◆ エバンジェリスト セッション 3 ◆ 15:15-17:15
タイトル: データアクセスプログラム & SQL Server 2008 による開発
小髙 太郎

◆ ライトニング トーク ◆ 17:15-18:15
◆ Happy Hour (懇親会) ◆ 18:15-19:15

セッション 3 では、 ADO.NET Data Entity Framework の話も出るそうで。
行きたいなぁ~
けど、 今のプロジェクトが佳境だろうし、 翌週末はわんくま勉強会だし。 どーしたもんか… f(^^;

| | コメント (0) | トラックバック (0)

2008年10月 6日 (月)

[CSS3] 待望の段組み Multi-column layout …で、 IE8 は?

長い文章を読むときは、 1行の長さはほどほどになっていて欲しいわけです。 長すぎる行は、 次の行へと視線を動かすときに、 違う行を見ちゃうことがあるので。 ( …って、 私だけ? f(^^; )
そんなわけで、 このブログでも、 本文の幅は 370px ( まぁ、 cocolog のデフォルト値のままですけど ) に固定しています。
でも、 ホントは、 自動段組みにしたいんだよね。 ブラウザが横に広いなら、 その分、 いくらでも段組みの数が増えてくれるといいなぁ、 と。

そういう段組みレイアウトを定義してるのが、 CSS3 の Multi-column layout です。

先行して Firefox が実装してましたが、 builder.jp の記事、  「ウェブページの段組みをレイアウトする CSS 3 の Multi Column」 によれば、 Safari 3 も、 Google Chrome も対応したんだそうです。

これはきっと IE8 も… と思って、 資料を探しましたよ。 (^^;

MSDN ライブラリに、 「CSS の互換性と Internet Explorer」 ってのがありまして、 IE5 ~ IE8 までの、 CSS の各属性に対する互換性が一覧になってます。
さて、 Multi-column は、 っと… → MS の日本語訳では 「複数列のレイアウト

……ダメぢゃん、 IE8 真っ赤 (;;

| | コメント (0) | トラックバック (0)

[WPF] Acropolis から WPF Composite Client 経由 Prism <- いまココ

Nakamura Blog より。

.NET 用のオープンソースのフレームワーク

    * TERASOLNA
    * Seasar.NET
    * Spring.NET
    * blanco Framework
    * Enterprise Library
    * 弁慶フレームワーク

まだまだあるハズ。見つけたらこのエントリに追加していきます。

これで思い出したので、 ちと古いネタだけど、 Acropolis のその後。

昔、 "Acropolis" という名前で進んでいた傍流プロジェクトが、 1年ほど前に、 patterns & practices の重たいフレームワークの開発計画の見直しにともなって、 本流に取り込まれて、 WPF Composite Client として生まれ変わることに
それがこの春、 実際に登場したときには、 "Prism: patterns & practices Composite Application Guidance for WPF and Silverlight site. " という、 長い名前に。 f(^^;
現在、 9月 29日付の "Prism V2 - Drop 2" というバージョンが入手可能です。

※ このあたりの歴史については、 Glenn Block 氏のブログに記載があります。 → Composite Application Guidance is Live の A little history の項。

Prism についての日本語の解説は、 InfoQ の記事がいいかな。
PRISM:WPF複合UIフレームワーク
  作者 Abel Avram, 翻訳者 編集部 投稿日 2008年5月7日
Composite Application Guidance for WPF(Prism)がダウンロードで利用可能
  作者 Abel Avram, 翻訳者 編集部 投稿日 2008年7月7日

ぱっと見の特徴としては、 フレームワークの部分はできるだけ軽くして、 それを利用して設計するときのドキュメンテーションをしっかり充実させよう、 という方向性を挙げることができると思います。
毎度作るモノがまるっきり違うような開発チームにとっては、 フレームワーク自体は小さくて小回りの効く方がありがたいのですが、 そういうところにマッチしてるように思えます。

 

( 2008/10/09 追記 ) Prism の解説が、 MSDN マガジン 9月号に出てました。 → Prism ~ WPF で複合アプリケーションを作成するためのパターン
"Prism" はコードネームなのね。

( 2008/10/15 追記 ) 実際に使ってみた人の記事:
かずきのBlog[WPF][C#]WPFでアプリを作るときのフレームワーク

| | コメント (0) | トラックバック (0)