C#Programing Archive

https://jira.sonarsource.com/jira/secure/ReleaseNote.jspa?projectId=10935&version=12999

新しく追加された機能として、xunit.netのサポートがあり、xunit.netの実行結果レポートXMLを解釈して取り込むことが出来るようになっています。

但し、テスト用のユーティリティクラスを詰め込んだ、テストケースが一つも含まれていないテストアセンブリがあると、レポートXMLの解釈に失敗して以下のようなエラーを吐くようです。とりあえずダミーのテストケースを追加しておくと回避できます。

ERROR: Error during Sonar runner execution
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
	at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91)
	at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
	at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
	at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
	at org.sonar.runner.api.Runner.execute(Runner.java:100)
	at org.sonar.runner.Main.executeTask(Main.java:70)
	at org.sonar.runner.Main.execute(Main.java:59)
	at org.sonar.runner.Main.main(Main.java:53)
Caused by: org.sonar.plugins.dotnet.tests.ParseErrorException: Missing attribute "total" in element <assembly> in

VS14 CTP環境のRoslynでMSBuildWorkspace.Create();を実行すると、Microsoft.Buildのアセンブリが見つからないというエラーが発生し、Workspace APIが使えないという問題ですが、Microsoft Build Tools 2013をインストールすると解決するようです。

roslyn.codeplex.com/workitem/218

APR
4

Roslyn build preview公開

Published:2014-04-04 15:57:20 UTC

BUILD 2014のKeynoteの場で、C# CompilerのC#再実装であるRoslynの最新プレビュー版が公開されましたね。合わせて、RoslynのApache License 2.0でのOSS化も発表され、.NET界隈にとって、エポックメイキングな発表でした。これで、Mono(やXamarin)はランタイムやOSS化されていないライブラリの開発に注力すればよいことになり、Windows以外でのC#利用も促進されそうです。

ざっとRoslynのドキュメントに目を通した限りでは、以前のCTPから大きく追加されたAPIなどは見当たらず(Scripting機能とかどうなっているのでしょう)、むしろC#の言語機能の細かい強化に注力していたのでしょうか。新しい言語機能については、SDKに添付のUpcoming Features in C#というドキュメントが詳しく、さっそく.NET Compiler Platform (Roslyn) Preview | ++C++; // 未確認飛行 C ブログ: で解説がされています。

ドキュメントを読んでいて個人的に気になったのが、FAQのCan I rewrite source code within the compiler pipeline? という項目で、残念ながら、コンパイラパイプラインの途中でフックして動作に介入することは出来ないようです。Roslynが最初に発表された時の謳い文句として、モノシリックなこれまでのコンパイラのパイプラインをコンポーネントごとに分割してユーザーに開放する、というのがあったように記憶しているのですが、やはりパフォーマンスの要件的にパイプラインの途中への介入は実現できなかったのでしょうか。属性でのマークアップベースのDSLからコンパイル時にメモリ上のSyntaxを書き換えるようなものを作りたいと考えていたので、少し残念です。MSBuildでpre-buildのターゲットとしてcsc.exeにコードが渡る前にコードを書き換える方法が代替手段として提示されていますが、その場合だとコードを書き換えた結果をファイルに書き出すことになり、コードの再編集が必要になった時に使いづらいDSLになってしまうのが懸念点です。

なんにせよ、C#が着実に前に進んでいることが感じられるKeynoteでした。より詳細が解説された各セッションのスライド、ビデオの公開が待ち遠しいですね。

JAN
2

あけましておめでとうございます。今年もよろしくお願いします。

新年の抱負を語る前に、去年のことを振り返ってみると、去年の初めも、「今年こそはBlogでしっかりアウトプットを出していく!」と考えていたのですが、結局またアウトプットを出せなかった一年となってしまいました。でも!今年こそは!今年こそは!書きます!・・・と宣言するだけでは去年から進歩がないので、Blogを書くネタにできるようなソフトウェアを今書いています。今春から働き始める会社が、IPネットワーク関係の会社なので、その辺の流行のトピックと絡めたソフトウェアをC#で書くことで、ネットワーク技術の流行とモダンなC#のコーディングスタイルのキャッチアップを図りつつ、Blogのネタにしていきたいと考えています。働き始めると慣れるまで時間がとりにくくなるかと思うので、とりあえず4月までを目途に、リリースしたいなと考えています。頑張ります。

忙しくてとりあえず登録したものの放置していたApp Hubからメールが来ていました。Winodws Phone Marketplaceのアップデートに伴い、学生の身分証明プロセスが簡素化されたみたいです。折角だし端末unlockしてMango Beta化してみようかな。

Important Enhancement to App Hub Registration Process for Students

July 22, 2011

Now that the next release of the Windows Phone Marketplace App Hub has launched, we are reaching out to make you aware of a change to the registration process and how it may impact your account.

In the new release of App Hub, publisher identification for Student accounts happens in real-time during account registration. You no longer have to submit an application to trigger a separate publisher identity verification process.

Since you have not yet submitted an application, the next time you sign in to App Hub, you will notice your account will be reverted back to Step 1 of the registration process. All of the information you have previously provided will be pre-populated and you will be asked to follow the onscreen instructions to complete your account activation.

Once you’ve completed registration your account will be immediately activated and you can unlock your phone for in-device testing. This will greatly simplify the process of getting your account activated and, ultimately, your apps published to the Windows Phone Marketplace.

If you have any questions or concerns, please contact
mailto:apphub@microsoft.com
apphub@microsoft.com  
and we will be happy to assist you.

Best regards,

The Windows Phone Marketplace Team

Microsoft respects your privacy. Please read our online
http://privacy.microsoft.com/en-us/default.mspx
Privacy Statement .

Microsoft Corporation

One Microsoft Way

Redmond, WA 98052 USA

MAY
5

厳しいかも。

Silverlight 4で追加されたTrusted mode、とりあえず試してみているのだけど、結構制限が厳しくてつらい感じ。。Cookieは使えないし、GETメソッド使っているときに、headerを追加することもできない。これは、SilverlightがHTTP通信のスタックに、OSのTCP/IPスタックを直接たたいているのではなく、ブラウザのPlugin APIを叩いているためだとか。

Silverlight only supports setting headers using the POST method not the GET method. This is due to a limitation in how the TCP/IP stack is implemented in Silverlight. It uses the browser extension APIs instead of going directly against the host OS’s APIs.
http://stackoverflow.com/questions/622897/how-can-i-set-headers-with-silverlight-get-httpwebrequest

この問題を回避する方法としては、@jz5さん曰く、Socketを自分で叩いてHTTP通信すればいい、ということらしい。なんだかなぁ。。Silverlight 4でTrusted Modeをどれぐらい使う需要があるかは知らないけど(自分ならWPF+ClickOnceでいいや)、Windows PhoneアプリをSilverlightで書こうか、という場合に結構辛い気が。。WindowsPhoneは微妙に普通のSilverlightとビルディングブロックが違ってるから、案外動くのかもしれないけど(希望的観測)。

(追記) 試しにWindows Phoneでやってみたらheader追加できたw 嬉しいんだけど、HttpWebRequestみたいな非常に一般的なクラスでこのように挙動が違うというのは、困るので、正直複雑。何とかならんのか。

昨日開催された、 プログラミング生放送勉強会 第2回 @新宿に行ってきました。ニコニコ生放送のプログラミング関係のオフ会ということなのですが、自分はそれまでニコニコ生放送というものを見たことがなかったので、若干どんなノリの会なのか分からずに行ったのですが、まぁ、わんくま勉強会と似たようなノリで、楽しんで帰ることができました。やはり、動画でセッションの模様を中継でき、それに対する反応がネットの向こう側で観ている側から帰ってくるというインタラクションは大変面白いですね。ただ、帰ってくる反応も、ニコニコ動画のカルチャーに影響されているところがあり、もっとフォーマルなイベントで公式に使うのは難しいだろうなということも身をもって感じました。

さて肝心の内容。色々面白い話が多かったですが、.NET好きという自分の性格も手伝って、Live Labs Pivotの紹介話とXBox LIVE インディーズゲーム製作苦労話、Gainer紹介といくつかのLTが特に面白かったです。

Live Labs Pivotは、事前に名前しか知らずに行ったのですが、あれはある形式に則ったデータを食わせたら、それをSeaDragonテクノロジ他を使って綺麗に整理して見せるデモアプリケーションというイメージで良いんでしょうか。インビテーションを取得するのが手間そうなので実際に使ったわけでないのですが、デモを見る限りWPFで実装されているのかな?いつかLive wave xでWindows LiveやBingのオプション機能として、このようなインターフェイスがSiverlightを使って実装されて欲しいものです。

XBox LIVE インディーズゲームの話は、XBox LIVE インディーズゲームを実際に製作されている方が、製作にあたっての技術的でない苦労点を語ったセッションでした。やっぱり、家庭用ゲームコンソールで動くゲームを作って販売できるというのは大変魅力的な話のようですが、それに見合った苦労もされていうようで、iPhoneアプリ同様アメリカへの税金払い方の話だとか、表現の規制に関する話だとか、インターフェイスに使う言語の話だとか。表現の規制の話は、まぁ家庭用ゲーム機なら控えめにならざるを得ないというのはよくわかる話だったのですが、ゲームのインターフェイスに使われる言語に、日本向けのゲームにアルファベットが使われているだけで外国人からピアレビューで差し戻しを受けて直さざるを得なかったというのは、どう考えても運営方針が間違っているような。。まだ始まったばかりの仕組みなので運営側も試行錯誤している段階なのでしょうが、聞いている限りだと、製作者と運営側のコミュニケーションロスによる問題のような気も。やっぱり海外で作られているスキームを使う場合には、こちらも交渉できるだけの英語力が求められるのだなぁと勝手に納得してました。

Gainer。イケメンのための雑誌の方じゃないよ、電子工作の方だよ、というギャグほか、スピーカーの方のしゃべりの上手さに大いに笑わせてもらったセッションでした。Gainer、面白そうですね。なんちゃって理系ですらないSFCでぼんやり過ごしていると、電子工作方面への知識が全く欠けているのですが、Gainerは自分みたいな高級言語ばっかり触っている人間が電子工作始めるのに最適なおもちゃだということがよく分かりました。PCの中に立てたローカルなサーバーを叩いてやるだけでいいというのは非常に手軽ですね。。近いうちに買いたいと思います。

P1020471そいういえば場所はMicrosoftの新宿オフィスのセッションルームの一室だったのですが、新宿のサザンテラス口側は結構イルミネーションが綺麗なんですね。向かいの高島屋や紀伊国屋側も綺麗ですし。

OCT
10

E30HT

Published:2009-10-10 01:36:35 UTC

研究室にAU初のスマートフォン、E30HTが届きました。いわゆるTouch Pro。なんかのプロジェクトで使う端末らしいです。折角なので姉妹機である自分のTouch Diamondと並べてみました。

091005_1502~01 091005_1508~01

Touch Proのキーボードがある側だけでTouch Diamondと同じ厚みがある。。まぁ、Touch Diamondが薄くて良い端末だと信じることにします(ぇ

以前あげたC# .NETアプリケーション開発 徹底攻略 Listing2.26への疑問 – SharpLab.というエントリに対して、なちゃさんから、

なちゃ 09-09-23 09:15:19 JST

本来、デリゲートでBeginInvokeした場合は、必ずEndInvokeする必要がありますね。
リソースリークなども発生する危険があります。
※デリゲート以外でもBegin~系は基本的には同じですが

EndInvokeさえすれば、きちんと発生した例外がスローされてきます。
けして例外が握りつぶされているのではなく、正しく使っていないために握りつぶされているように見えているだけですね。
ちょっと書籍の記述がまずいと思います。

という指摘がありました。なるほど!指摘の通り、Begin EndパターンなのでEndInvokeを必ず呼び出す必要がありました。恥ずかしながらすっかり失念していました。。というわけでEndInvokeを使うように修正。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;

namespace SharpLab.ThreadExceptionTest {
	static class Program {

		static Form form;

		/// <summary>
		/// アプリケーションのメイン エントリ ポイントです。
		/// </summary>
		[STAThread]
		static void Main() {

			Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
			Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(Program_UnhandledException);

			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);
			form = new Form();
			Application.Run(new Form1());
		}

		static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) {
			MessageBox.Show(e.Exception.Message);
		}

		static void Program_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
			Exception ex = (Exception)e.ExceptionObject;
			MessageBox.Show(ex.Message);
			Application.Exit();
			Environment.Exit(0);
		}

	}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace SharpLab.ThreadExceptionTest {
	public partial class Form1 : Form {
		public Form1() {
			InitializeComponent();
		}

		private delegate void SampleDelegate();

		private void button1_Click(object sender, EventArgs e) {

			SampleDelegate a = new SampleDelegate(ThreadMethod);
			a.BeginInvoke((asyncResult) => {
				a.EndInvoke(asyncResult);
			}, null);
		}

		private void ThreadMethod() {
			//意図的に起こした例外
			Thread.Sleep(5000);
			throw new Exception("非同期スレッドで起こった例外です。");
		}

	}
}

image

こんな感じでしょうか。ちゃんとサブスレッドで例外が発生した時にUnhandledExceptionが呼び出されるようになりました!これで正しく確実な終了処理ができそうです。サブスレッドの処理内容をすべてtry~catchで括って必要に応じて例外をリスローする必要があると憶えていたのですが、そうではなかったのですね。いつもtry~catch書きながらなんかおかしい気がしていたのですが、これですっきりしました。なちゃさん、ありがとうございました。

前のエントリで紹介したWebkit.NETはまだC#などのコードからDOMにアクセスする方法は実装中であるため、正式には提供されていません。提供されているのは基本的なナビゲーションなどに限られています。そのため、出来ることは相当制限されています。がしかし、表示されているページの中でJavaScriptのコードを実行させる方法がForumに上がっていましたので紹介します。これがあれば多少の助けにはなりそうです。

ソースコードはこんな感じ。

private void button1_Click(object sender, EventArgs e) {
    FieldInfo fi = typeof(WebKitBrowser).GetField("webView", BindingFlags.NonPublic| BindingFlags.Instance);
    WebView webView = (WebView)fi.GetValue(this.webBrowser1);
    webView.stringByEvaluatingJavaScriptFromString(@"document.body.innerHTML = 'Hello Webkit DOM!';");
}

リフレクションを使っています。WebKitBrowserにはwebViewというprivateなメンバがあり、それはWebViewインターフェイスを実装しています。このwebViewをリフレクションで取得し、そのメンバにstringByEvaluatingJavaScriptFromStringというJavaScriptコードを引数として渡してやると実行してくれるメソッドがあるので、これを利用するという方法です。このメソッドの戻り値の型はstringなのですが、実行結果を取得することはどうもできないようです。 WebViewの他のメンバの実装がどれぐらい進んでいるかはまだ試していないのでわからないのですが、WebViewについては、Webkitですし、Cocoaのリファレンスを参照するとよさそうな感じがします。