﻿<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<channel>
	<title>HIDORI on The Web</title>
	<link>http://hidori.jp</link>
	<description>マネージコードしか書きたくない</description>
	<lastBuildDate>Sun, 20 May 2012 14:26:05 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>ja</language>
	<!-- generator="WordPress/3.3.2" -->

	<item>
		<title>Pseudo Live SDK version 0.6.1.1 をリリースしました</title>
		<description><![CDATA[Pseudo Live SDK version 0.6.1.1 をリリースしました。 Pseudo Live SDK は、WPF や Windows.Forms, コンソールアプリケーションをサポートする Live SDK クローンです。 Live SDK の “Managed API” のサポート対象は Windows 8 の Metro スタイルアプリケーションと Windows Phone アプリケーションであり、Windows 7 やそれ以前の環境で動作する一般的なデスクトップアプリケーション（WPF や Windows.Forms, コンソールアプリケーション）はサポート対象外です。 Pseudo Live SDK は、 Windows 7 などで動作するそれら「対象外」のアプリケーションに対して、Live SDK の “Managed API” 相当の API を提供します。Pseudo Live SDK を使用すれば、オリジナルの Live SDK と同じように、アプリケーションから [...]]]></description>
		<link>http://hidori.jp/blog/2012/05/20/512</link>
			</item>
	<item>
		<title>Pseudo Live SDK version 0.6.0.1 をリリースしました</title>
		<description><![CDATA[Pseudo Live SDK version 0.6.0.1 をリリースしました。 Pseudo Live SDK は、WPF, Windows.Forms および Console Application をサポートする Live SDK クローンです。 オリジナルの Live SDK は WPF, Windows.Forms および Console Application のサポートを含んでいませんが、Pseudo Live SDK は WPF, Windows.Forms および Console Application をすべてサポートします。 Pseudo Live SDK はオリジナルの Live SDK と同じく、アプリケーションへの Windows Live ID によるシングルサインオン (SSO) の統合や、SkyDrive, Hotmail, Windows Live Messanger 内のデータにアクセスを行うための [...]]]></description>
		<link>http://hidori.jp/blog/2012/05/17/492</link>
			</item>
	<item>
		<title>lock と戻り値の受け取りを簡潔に</title>
		<description><![CDATA[またまた、ボクのキライなパターンである var value = default(int); lock (context) { value = context.GetValue(); } みたいなコードを書かねばならない局面がやってきました。 でもそんなコードは書きたくない！書きたくないものは書きたくない！ ということで、いつも通り という小さなクラスを書きました。 これを使えば、前出のイヤンな感じのコードは var value = Lock.Invoke(context, () =&#62; { context.GetValue(); }); のような、お好みのスタイルで書くことができます。 メデタシ (^o^)]]></description>
		<link>http://hidori.jp/blog/2012/05/12/468</link>
			</item>
	<item>
		<title>Pseudo Live SDK version 0.5.0.3 をリリースしました</title>
		<description><![CDATA[Pseudo Live SDK version 0.5.0.3 をリリースしました。 Pseudo Live SDK は、Windows.Forms, WPF, および Console Application をサポートする Live SDK クローンです。 オリジナルの Live SDK は Windows.Forms, WPF, および Console Application のサポートを含んでいませんが、Pseudo Live SDK は Windows.Forms, WPF, および Console Application をサポートします。 Pseudo Live SDK はオリジナルの Live SDK と同じく、アプリケーションへの Windows Live ID によるシングルサインオン (SSO) を統合や、SkyDrive, Hotmail, Windows Live Messanger 内のデータにアクセスを行うための [...]]]></description>
		<link>http://hidori.jp/blog/2012/05/12/464</link>
			</item>
	<item>
		<title>Task の完了待ちを簡潔に</title>
		<description><![CDATA[TPM な API のテストを書いていて、 var client = new LiveConnectClient(session); var task = client.Get("me"); task.Wait(); var result = task.Result; // 実行結果の評価 のようなコード＝タスクの完了待ち合わせと処理結果の取得を大量に書く羽目になりました。 塵も積もれば。。。で、こんなんいくつも書くとかイヤすぎです。 書きたいことだけを簡潔に書きたい！ ということで なんてのを書いてみました。 async, await ではあまにりに大規模なコンパイラの暗躍があるので、テストプロジェクトで使うならこれくらいスケスケの作りの方が、なにかと都合がよかったり。 で、これを使うと「Task 完了の待ち合わせと処理結果の取得」は var result = client.Get("me").Await(); // 実行結果の評価 のように書けます。 これはかなりシンプルになりますネ！ ちなみに、テストプロジェクトで使うことはなさそーですが、Task.Start() と Task.Wait() のオーバーロードをサポートするバージョンも T4 を使って書いてみました。]]></description>
		<link>http://hidori.jp/blog/2012/05/10/447</link>
			</item>
	<item>
		<title>バイト配列の組立を簡潔に</title>
		<description><![CDATA[「文字列の組み立てを簡潔に」と似たような感じのノリ。 たとえば var bytes = default(bytes[]); using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine("ROCK'N ROLL!"); } bytes = stream.ToArray(); } みたいのは というクラスを定義しておくと var bytes = ByteArrayFactory.Create(stream => { using (var writer = new StreamWriter(stream)) { writer.WriteLine("ROCK'N ROLL!"); } }); のように書けて、大変気持よいデス。 # 別に using がキライなわけじゃないんだけど、どうしてこーなるんだろう？ (^^;;;]]></description>
		<link>http://hidori.jp/blog/2012/05/09/422</link>
			</item>
	<item>
		<title>非同期呼び出しの待ち合わせを簡潔に</title>
		<description><![CDATA[「非同期呼び出しを行い、すぐさまその完了を待ち合せたいたい」ことって、ありますよね？ ボクはあります。 昨夜、非同期メソッドのテストを書いていて、そういう状況になりました。 よく使うパターンは var client = new LiveConnectClient(session); using (var signal = new ManualResetEventSlim(false)) { client.GetCompleted += (s, e) =&#62; { // 完了後の処理 signal.Set(); }; client.GetAsync(address); signal.Wait(); } なわけですが、似たような記述を何個も書いていると滅入ってきます。 この局面における重点事項は「非同期呼び出しの完了を待ち合わせる」ことであって、ManulResetEventSlim のインスタンス生成とか、その Wait() とか、余分なことは極力意識したくないわけです。 書きたいことだけを、簡潔に書きたい！（ｗ そこで、以下のようなクラスを定義します。 これを使うと、「非同期呼び出しの完了を待ち合わせ」問題は &#160; var client = new LiveConnectClient(session); Syncronized.Invoke(signal =&#62; { client.GetCompleted += (s, e) =&#62; { // 完了後の処理 signal.Set(); [...]]]></description>
		<link>http://hidori.jp/blog/2012/05/08/417</link>
			</item>
	<item>
		<title>文字列の組み立てを簡潔に</title>
		<description><![CDATA[BCL には、文字列を組み立てを支援する StringBuilder クラスが含まれています。 機能的にはこれで不満はありませんが、複数の文字列を並行して組み立てる場合には複数の StringBuilder クラスのインスタンスを使うことになり、それらの変数名をどうするかなどの非常に深刻な問題が発生します。 たとえば var sb1 = new StringBuilder(); sb1.Append(&#34;ほげ&#34;); sb1.Append(&#34;ほげ&#34;); var sb2 = new StringBuilder(); sb2.Append(&#34;ほげ&#34;); sb2.Append(&#34;ほげ&#34;); var head = sb1.ToString(); var tail = sb2.ToString(); のような打算的な解決はノーグッドです。 var sbHead = new StringBuilder(); sbHead.Append(&#34;ほげ&#34;); sbHead.Append(&#34;ほげ&#34;); var sbTail = new StringBuilder(); sbTail.Append(&#34;ほげ&#34;); sbTail.Append(&#34;ほげ&#34;); var head = sbHead.ToString(); var tail = sbTail.ToString(); も本質変わらずで、美しさに欠けています。 感覚的には [...]]]></description>
		<link>http://hidori.jp/blog/2012/05/08/403</link>
			</item>
	<item>
		<title>Pseudo Live SDK 制作開始</title>
		<description><![CDATA[SkyDrive for Windows が公開されたことで、刺激を受けました。 「Live SDK を使えば、ユーザプログラムから SkyDrive を操作することが出来る」というのは、以前から知識としては知っていたため、早速 Live SDK をダウンロードしてみました。 んがしかし、Live SDK の中を見てびっくり。「Windows Forms のサポートが含まれていない」という衝撃の事実が発覚。 それにしても、まだ正式リリースされてもいない Windows 8 Metro Style アプリケーション向けのライブラリが含まれてるってゆーのに、歴史ある Windows Forms サポートが含まれてのはなんとも… 企業戦略だとしても、ちょっと厳しすぎな気が ;-p なんてことを言っても今更どーにもなりそーもないので、気を取り直して Windows コンソールアプリケーション Windows Forms アプリケーション そしてたぶん WPF アプリケーションでも利用可能な Live SDK 「もどき」を作ることにしました。 ライブラリ実装のお手本は、本家 Live SDK の Windows Phone 向けライブラリです。 LiveAuthClient クラスによる認証部分は、そのまま移植してもいいことなさそうなので、完全オリジナルとしました。 LiveConnectSession, LiveConnectClient クラスによる REST API へのアクセスについては、できる限りオリジナルと同じような動作を目指すこととします。 [...]]]></description>
		<link>http://hidori.jp/blog/2012/05/06/382</link>
			</item>
	<item>
		<title>Dictionary&lt;TKey, TValue&gt;.ContainsKey() とかの「モヤっ」</title>
		<description><![CDATA[拡張メソッドを使った小ネタです。 Dictionary&#60;TKey, TValue&#62; を使っていて if (dictionary.ContainsKey(&#34;key1&#34;)) hoge.Value1 = dictionary[&#34;key1&#34;]; if (dictionary.ContainsKey(&#34;key2&#34;)) hoge.Value2 = dictionary[&#34;key2&#34;]; みたいな感じのコードを書いていて、なんとなく「モヤっ」とした気持ちになりました。 そこで public static void InvokeIfContainsKey( this IDictionary&#60;TKey, TValue&#62; source, TKey key, Action&#60;TValue&#62; action) { if (source.ContainsKey(key)) { action(source[key]); } } という拡張メソッドを定義して、前出のコードを dictionary.InvokeIfContainsKey(&#34;key1&#34;, value =&#62; hoge.Value1 = value); dictionary.InvokeIfContainsKey(&#34;key2&#34;, value =&#62; hoge.Value2 = value); のように書きかえました。 で、少しだけ「モヤっ」が解消。 # 決して記述が短くなったわけではない点に注意 (^^;;;]]></description>
		<link>http://hidori.jp/blog/2012/05/03/364</link>
			</item>
</channel>
</rss>

