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コードが追加されます。

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

③テストの実行

  1. [TestMethod]  
  2. public void CodedUITestMethod1()  
  3. {  
  4.     this.UIMap.RecordedMethod1();  
  5.     this.UIMap.AssertMethod1();  
  6. }  

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

気付き
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

  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         int[] array = {0,0,1,2,2,3};  
  6.         var result = array.GetPermutation(4)  
  7.             .Where(x => x.ElementAt(0) != 0)  
  8.             .Select(x => string.Join("", x.Select(i => i.ToString()).ToArray()))  
  9.             .Distinct();  
  10.   
  11.         result = result.Skip(10).Take(1);  
  12.         foreach (var item in result)  
  13.         {  
  14.             Console.WriteLine(item);  
  15.         }  
  16.     }  
  17. }  
  18.   
  19. public static class Util  
  20. {  
  21.     public static IEnumerable<IEnumerable<T>> GetPermutation<T>(this IEnumerable<T> source, int count)  
  22.     {  
  23.         return Enumerable.Range(0, count)  
  24.             .Select(_ => source)  
  25.             .Select(et => et.Select((t, i) => new { t, i }))  
  26.             .Aggregate(Enumerable.Repeat(Enumerable.Repeat(new { t = default(T), i = default(int) }, 0), 1)  
  27.                 , (ac, et) => from a in ac  
  28.                               from t in et  
  29.                               where !a.Contains(t)  
  30.                               select a.Concat(Enumerable.Repeat(t, 1)))  
  31.             .Select(ea => ea.Select(a => a.t));  
  32.     }  
  33. }  

2010年4月3日土曜日

delegate-非同期呼出

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

2010年4月1日木曜日

delegate-同期呼出

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

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

  1. delegate void Hoge(string str);  
  2.   
  3. static void Main(string[] args)  
  4. {  
  5.     Hoge hoge = null;  
  6.   
  7.     hoge = Console.WriteLine;  
  8.   
  9.     hoge("AAA");  
  10.     hoge.Invoke("AAA");  
  11. }  

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

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

  1. static void Main(string[] args)  
  2. {  
  3.     Hoge hoge = null;  
  4.   
  5.     hoge = Console.WriteLine;  
  6.     hoge += delegate(string str)  
  7.     {  
  8.         Console.WriteLine(str.ToLower());  
  9.     };  
  10.   
  11.     hoge("AAA");  
  12. }  

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

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

  1. class Program  
  2. {  
  3.     //戻値の型 デリゲートの型名 引数の型  
  4.     delegate void Hoge(Class c);  
  5.   
  6.     static void Main(string[] args)  
  7.     {  
  8.         Hoge hoge = null;  
  9.   
  10.         hoge += AAA;  
  11.         hoge += AAA;  
  12.         hoge += AAA;  
  13.         hoge += AAA;  
  14.   
  15.         hoge(new Class());  
  16.     }  
  17.   
  18.     static void AAA(Class c)  
  19.     {  
  20.         Console.WriteLine(c.MyProperty);  
  21.         ++c.MyProperty;  
  22.     }  
  23. }  
  24.   
  25.   
  26. class Class : Interface  
  27. {  
  28.     public int MyProperty { getset; }  
  29. }  

delegate

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

というわけでdelegate再入門

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

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

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