2010年4月24日土曜日

アンインストール

訳あって、VisualStudioをアンインストール中。
何でこんなに面倒なんでしょう。

インストールされていたのは、VS2005/2008/2010+SQLServer2005/2008。
でもプログラムの追加と削除にはかなりの数(50ぐらい?)の関連すると思われるプログラムが…
もちろんこれらはVSをアンインストールするだけでは残ったまま。

何でこんなに面倒なんでしょう。

2010年4月22日木曜日

Visual Studio 2010

日本語版をインストール。 週末に試そう。

2010年4月20日火曜日

Windows7 on viliv S5

というわけで、Windows7化完了です。

感想。
・手書きツールいい感じ
・gpsとCubeIUが不調
・動作はもっさり

無題 
最後にUXインデックスでした。

2010年4月16日金曜日

viliv S5 、Windows7化

週末を利用して、viliv S5にWindows7をインストールすることを画策中。

とりあえず、ブータブルのUSBメモリを作成中。
最近はMicrosoftがISOからブータブルUSBメモリを作成するツールを配布してるんですな。
ISOのダウンロード販売といい、便利な時代になったもんだ。
http://www.microsoftstore.jp/Form/Guide/downloadTool.aspx

2010年4月14日水曜日

PLinq

Visual Studio 2010(.NET Framework 4)より、PLINQ (Parallel LINQ)が追加され、並列処理が簡単にできるようになっています。

10 行でズバリ !! 並列プログラミング - PLINQ (C#)より
PLINQ は LINQ によるデータ コレクションに対するクエリ処理を並列化するためのものであり、PLINQ を使用することで LINQ クエリの Select 句や Where 句で実行されるロジックを容易に並列処理化することが可能です。PLINQ の機能は ParallelEnumerable クラス (System.Linq.ParallelEnumerable) の拡張メソッドとして提供されており、LINQ クエリの処理対象データ コレクションに対して ParallelEnumerable クラスの拡張メソッドの呼び出しを追加するだけでデータ コレクションへの処理を並列化し、マルチプロセッサー/マルチコア CPU の処理能力を活用して処理時間を短縮することができます。

と言うわけで、先日の重いLinq構文を何とか出来ないかとあちこちにAsParallelを追加してみました。
が、Aggregate構文を途中で使用しているためか、追加前より速くなることはありませんでした。
残念。

Visual Studio 2010

というわけで、早速お試し。

気になる機能その1 Coded UI Test
なんと、GUIのUnitテストが出来るらしい。

①まずは、超簡単なWinFormアプリを作成
image
テキストボックスに文字列をいれて、ボタンを押下すると下記ダイアログを表示する
image
ただそれだけです。

②テストの追加
image 
Testメニューから、NewTestを選択。そうすると下記ダイアログが表示されるので、Coded UI Testを選択する。
 
 image
そうすると、どうやってUIテストを作成するかを聞いてくる。一番最初はテスト資産がないので、上を選択。

image
 
画面の右下に、小さなポップアップ?が表示されるので、準備OK。

ここからの正しい使い方がよくわかっていないので、適当に。
(i)テスト対象アプリの起動
とりあえず、テスト対象が起動していないことにはどうにもならないので、起動します。
(ii)赤いボタンを押下
操作記録が開始されます。
(iii)適当に操作
検証したいポイントの手前まで操作します。今回の場合、はテキストボックスに文字入力&ボタン押下。
(iv)一番右のボタン押下
行った操作に対するコードが生成されます。
(iv)照準アイコンを検証したいコントロールへD&D
対象コントロールのプロパティーが表示されます。
image 
(v)検証したいプロパティーを選択し、Add Assertionをクリック
image 
表示されるダイアログで、検証の条件を追加します。
(vi)再び、コードを生成
今度はAssertionコードが追加されます。

以上で、テストケースの作成は終わり。

③テストの実行

[TestMethod]
public void CodedUITestMethod1()
{
this.UIMap.RecordedMethod1();
this.UIMap.AssertMethod1();
}

上記テストメソッドが作成されるので、右クリックからテストの実行を選択。
/>テストが実行される。
※テスト実行前にも必ずテスト対象を起動してあげないとダメ。このあたりはちゃんとした手法があると思うのだがよくわからん。

気付き
IMEが有効になっていると、途中でテストが失敗する。
いまいち。自動テストとかできるんだろうか。。。

2010年4月13日火曜日

Visual Studio 2010

MSDNサブスクリプションで、ダウンロードが開始されてますな。
英語版だけど。日本語はいつ?

2010年4月11日日曜日

pocket wifi を買った

前々から欲しかったPocket Wifiを買ってしまった。
http://emobile.jp/pocketwifi/

買った後で、何なんですが、コース別の料金を比べてみた。
image

スーパーライトのライト加減がよくわかりますな。
どのコース従量の部分が狭いこと。。。

2010年4月8日木曜日

順列の問題

0~9までの数字のカードがN枚ある。同じ数字のカードは1枚とは限らない。
そこから、M枚使用しM桁の整数を作るとき、小さい方から数えi番目の数値は何か?
※先頭桁に0はこないものとする。

という問題が与えられた場合、これを効率よく説くにはどうすればよいか?

とりあえず、効率よくという部分は無視して、順列を作成して前から数えてみた。順列を作成するに当たりLinqを使用しているサイトが見つかったので、利用にさせていただいた。
http://d.hatena.ne.jp/taguo/20080722/1216745650

class Program
{
static void Main(string[] args)
{
int[] array = {0,0,1,2,2,3};
var result = array.GetPermutation(4)
.Where(x => x.ElementAt(0) != 0)
.Select(x => string.Join("", x.Select(i => i.ToString()).ToArray()))
.Distinct();

result = result.Skip(10).Take(1);
foreach (var item in result)
{
Console.WriteLine(item);
}
}
}

public static class Util
{
public static IEnumerable<IEnumerable<T>> GetPermutation<T>(this IEnumerable<T> source, int count)
{
return Enumerable.Range(0, count)
.Select(_ => source)
.Select(et => et.Select((t, i) => new { t, i }))
.Aggregate(Enumerable.Repeat(Enumerable.Repeat(new { t = default(T), i = default(int) }, 0), 1)
, (ac, et) => from a in ac
from t in et
where !a.Contains(t)
select a.Concat(Enumerable.Repeat(t, 1)))
.Select(ea => ea.Select(a => a.t));
}
}

2010年4月3日土曜日

delegate-非同期呼出

実は、delegateの非同期呼出は使ったことがなかったり…
というわけで、MultiCastDelegateといえどもターゲットが複数あるとダメなのは初めて知りました。
image 
出来ても良さそうなのにね。

2010年4月1日木曜日

delegate-同期呼出

delegateは、メソッド情報(Methodプロパティー)を呼びメソッドの定義されるインスタンスの情報(Targetプロパティー)を持ち、それを同期または非同期に呼び出すことができる。

というわけで、まずは同期呼出から。とっても基本的な使い方。

delegate void Hoge(string str);

static void Main(string[] args)
{
Hoge hoge = null;

hoge = Console.WriteLine;

hoge("AAA");
hoge.Invoke("AAA");
}

9行目と10行目はどちらも同じILがはき出され、この場合、Console.WriteLineが実行される。

delegateで宣言すると、MultiCastDelegateのサブクラスとなるので、常にInvocation Listを作ることが可能。

static void Main(string[] args)
{
Hoge hoge = null;

hoge = Console.WriteLine;
hoge += delegate(string str)
{
Console.WriteLine(str.ToLower());
};

hoge("AAA");
}

メソッドはデリゲートに登録された順番に順次実行されていく。また、+=演算子はDelegate.Combineに置き換えられる。

メソッドの引数は同じオブジェクトが順番に渡されるため、1番目のメソッドで行われた変更を2番目のメソッドへと引き継ぐ。MultiCastDelegateの場合、最後のメソッドの戻り値以外は捨てられるので、引数のオブジェクトを通してしか情報の伝達ができない。

class Program
{
//戻値の型 デリゲートの型名 引数の型
delegate void Hoge(Class c);

static void Main(string[] args)
{
Hoge hoge = null;

hoge += AAA;
hoge += AAA;
hoge += AAA;
hoge += AAA;

hoge(new Class());
}

static void AAA(Class c)
{
Console.WriteLine(c.MyProperty);
++c.MyProperty;
}
}


class Class : Interface
{
public int MyProperty { get; set; }
}

delegate

delegateはC#の言語をもっとも特徴付ける者だと思ってる。
#といってもC#以外はJavaぐらいしか知らないけど…それも1.4

というわけでdelegate再入門

//戻値の型 デリゲートの型名 引数の型
delegate void Hoge(string str);

引数の変数名は余分な気がするが、上記のように宣言することで、MultiCastDelegateを継承した独自型が生成される。

image
上記、delegateの宣言をReflectorで見た様子。
BeginInvokeメソッドの引数と、Invokeメソッドの引数および戻値は、delegateの宣言時の型が使用される。