Hatena::ブログ(Diary)

猫とC#について書くmatarilloの雑記 Twitter

2016年03月27日

Microsoft Build 2016 セッションリスト

| Microsoft Build 2016 セッションリストを含むブックマーク Microsoft Build 2016 セッションリストのブックマークコメント

公開されました。→シアターセッションが追加で公開されました。

https://channel9.msdn.com/Events/Build/2016

ついでなので、JSON形式にしてみましたよ。

https://gist.github.com/matarillo/f292b7865062beb65b05



Build 2016の個人的に興味あるセッションは以下。

他にも、ホログラム/HoloLensものが増えてて、そちらも興味深い。

トラックバック - http://d.hatena.ne.jp/matarillo/20160327

2016年03月23日

Alea GPUというCUDA C#ライブラリでC++に匹敵する性能が出た

| Alea GPUというCUDA C#ライブラリでC++に匹敵する性能が出たを含むブックマーク Alea GPUというCUDA C#ライブラリでC++に匹敵する性能が出たのブックマークコメント

とのこと。(neueccさんのツイートで知った)

http://blog.quantalea.com/?p=9871

OpenCLやる前にSIMD使い切れっていう幻想……の話はもういいです^^

今回のはOpenCLじゃなくてCUDAですが。

トラックバック - http://d.hatena.ne.jp/matarillo/20160323

2016年02月18日

2016/03/06(日)にオフラインミーティングなどやります@東銀座

| 2016/03/06(日)にオフラインミーティングなどやります@東銀座を含むブックマーク 2016/03/06(日)にオフラインミーティングなどやります@東銀座のブックマークコメント

F#談話室(21) - connpass

今回は3つの集まりの合同ミーティングということで、簡単に紹介します。

F#談話室

イベントパブリック説明は『.NET Framework用の関数型言語F#について話したりする会です。特に目的限定していないゆるい集まりです。お気軽にご参加ください。F#をこれから学んでみたいという方も、F#を日々使いこなしている方も 是非参加していただければと思います。』です。

2014年半ばまでは7shiさん主催で池袋で開催されてましたが、その後 @yukitos さんにバトンタッチして、不定期に開催される感じになっています。

yukitosさんは海外のF#コミュニティ積極的につながりをもたれている方でして、海外F#erゲストとしてやってくることもあったりします。もちろん国内F#erもふらっと来てくれます。F#を実戦投入している @u_1roh さんのような方もいらっしゃることもありますし、興味深いですよ。

CoreCLR読書会

@atsushieno さんが開いてるやつです。クロスプラットフォームな.NET実装であるCoreCLRとその関連コードのソースを読んだり(OSSです)ビルドしたりドキュメントを読んだりしながら談話する会です。CoreCLRのとあるドキュメントを日本語訳しようぜ、というBook of the Runtime日本語訳プロジェクトのオフラインミーティングでもあります。

.NET Fringe Japan (仮)ミーティング

.NET Fringeというのは米国はポートランドで昨年開催され、今年も4月に開催される.NET系技術カンファレンスです。

特徴は《breaking the rules and pushing the boundaries》というところで、.NETのOSSコミュニティ生まれの技術に主眼を置いています。

ちなみにfringe (フリンジ:周辺、境界) という単語ニュアンスWikipediaの「境界科学」ページあたりを読むとわかったような気になれます。

で、そういうカンファレンスを日本でもやらないか?ということで発足したのがこの会です。

メンバーは今のところ、@yukitosさん、@atsushienoさん、あとほか数名です。

2015年09月25日

RyuJITのSIMD関連コードリーディング(1)

| RyuJITのSIMD関連コードリーディング(1)を含むブックマーク RyuJITのSIMD関連コードリーディング(1)のブックマークコメント

しつこくこの話題

System.Console.WriteLine("Vector<double>.Count=" + Vector<double>.Count);
System.Console.WriteLine("Vector<float>.Count=" + Vector<float>.Count);

の結果が

Vector<double>.Count=2
Vector<float>.Count=4

になってる(要は、128ビットと判定されてる)

Re: Re: Re: OpenCLやる前にSIMD使い切れっていう幻想 - 猫とC#について書くmatarilloの雑記

ということで、RyuJITのコードを覗き見。

    // Get the number of bytes in a SIMD Vector.
    unsigned                getSIMDVectorRegisterByteLength()
    {
#if defined(_TARGET_XARCH_) && !defined(LEGACY_BACKEND)
        if (canUseAVX())
        {
            return YMM_REGSIZE_BYTES;
        }
        else
        {
            assert(canUseSSE2());
            return XMM_REGSIZE_BYTES;
        }
#else
        assert(!"getSIMDVectorRegisterByteLength() unimplemented on target arch");
        unreached();
#endif
    }
coreclr/src/jit/compiler.h#L6921-L6938

ふむ、canUseAVX()関数trueを返すなら、定数YMM_REGSIZE_BYTES32バイト)が返ってくるようなコードになってますね。

では、canUseAVX()関数はどうなってるかというと。

    bool                    canUseAVX() const
    {
#ifdef FEATURE_AVX_SUPPORT
        return opts.compCanUseAVX;
#else
        return false;
#endif
    }
coreclr/src/jit/compiler.h#L7030-L7037

どんどん深くなってきました。で、今度はopts.compCanUseAVXです。こちらはstructになってます。

    opts.compCanUseAVX = false;
    if (((compileFlags & CORJIT_FLG_PREJIT) == 0) &&
        ((compileFlags & CORJIT_FLG_USE_AVX2) != 0))
    {
        static ConfigDWORD fEnableAVX;
        if (fEnableAVX.val(CLRConfig::EXTERNAL_EnableAVX) != 0)
        {
            opts.compCanUseAVX = true;
            if (!compIsForInlining())
            {
                codeGen->getEmitter()->SetUseAVX(true);
            }
        }
    }
coreclr/src/jit/compiler.cpp#L1608-L1621

だんだん面倒になってきたなあ。ConfigDWORD.val()はここで、CLRConfig::EXTERNAL_EnableAVXはここ

いやまて、compileFlagsの方が重要か。

    unsigned compileFlags = opts.eeFlags;
coreclr/src/jit/compiler.cpp#L1581
        unsigned            eeFlags;        // flags passed from the EE
coreclr/src/jit/compiler.h#L7122

EE(Execution Engine: 実行エンジン)きたー!!!!

続きはまた今度!

2015年09月21日

Re: Re: Re: OpenCLやる前にSIMD使い切れっていう幻想

| Re: Re: Re: OpenCLやる前にSIMD使い切れっていう幻想を含むブックマーク Re: Re: Re: OpenCLやる前にSIMD使い切れっていう幻想のブックマークコメント

2つ前の私の記事で拾ってるツイートが全然関係ないものだったという指摘(すみません申し訳ない)と、まともに計算できてないというバグの修正をしていただきました。ありがとうございました!

今回使ったのは System.Numerics.Vectors.Vector<T> でした。これはSIMDのビット長と型Tのビット長からいい感じに内部の配列長を決めてくれるもの……らしかったんですが、どうも、RyuJIT RTMでもやはりこのあたり(↓)がまずいらしく。

SIMD is only taking advantage of SSE2 hardware, currently. Due to some implementation restrictions, the RyuJIT CTP cannot automatically switch the size of the type based on local hardware capability. Full AVX support should arrive with a release of the .NET runtime that includes RyuJIT. We have prototyped this, but it just doesn’t work with our CTP deployment model.

http://blogs.msdn.com/b/dotnet/archive/2014/04/07/the-jit-finally-proposed-jit-and-simd-are-getting-married.aspx
System.Console.WriteLine("Vector<double>.Count=" + Vector<double>.Count);
System.Console.WriteLine("Vector<float>.Count=" + Vector<float>.Count);

の結果が

Vector<double>.Count=2
Vector<float>.Count=4

になってる(要は、128ビットと判定されてる)っていうのに気付いてない能天気コード。いやこれはしょぼい。(エラーチェックちゃんとしろということでした)

(さらに追記)AVXのYMMレジスターは256ビットなのですが、ちゃんと256ビット演算をするにはお作法があるので、もしかしたらRyuJITがその作法にのっとってないのかもしれません。たとえば、AVXにもSIMD組み込み関数があるらしいのですが、それを使うと128 ビット演算になるとのことで、そういうコードになってるのかも。わかりませんが。

(さらにさらに追記)System.Numerics.Vector<T>をリフレクションでちょろちょろ見てみたら、一部のメソッドやプロパティには[JitIntrinsic]っていうinternalなカスタム属性がついてて、いちおうILも用意されてるけれども、たぶんここはハードウェアが適合する場合JITがSIMD関連のコードに置き換えるんだろうなと想像しました。で、Countプロパティにもその[JitIntrinsic]という属性がついてました。当然ですね。

あとでRyuJITのコードを覗いてみますね

結果は青子守唄さんのとこを見てほしいですが、期待したほどには速くならなかったよとのこと。

そうですねえ、青子守唄さんがご自身で書いている通り、メソッド呼び出しコストがあんまり無視できない状態ですね。単に計算すれば速いところをデリゲート経由にしてますから。引数がstructなんでコピーにも若干のコストがかかると思います。

そもそも、本当はVector4d (256ビット) が使えて、それで4次元数の掛け算でも足し算でもいっぺんにやったほうがいいのですが、現状128ビットだとそれもね。Vector4fで精度を落とすのはそれはそれで意味がない。

とりいそぎデリゲートをやめてみました。

https://github.com/matarillo/simd/tree/d443cdd92c40718ec9d1ff0084078e62829adb55

kenta@ASPIRE3830T C:\Users\kenta\Desktop\simd\cs\simd\bin\x64\Release
> .\simd
Normal: 4638 [ms]
Simd: 2927 [ms]

f:id:matarillo:20150921085542p:image

それでも倍にはならないですね。

(さらに追記)青子守唄さんも同じようにコードを書き換えて、メソッド呼び出しがなくなるようにした模様。(青子守唄さんの場合はVector<double>.Countの結果で丁寧に分岐して、それぞれ最適なコードが実行されるようにしてますが)

ちなみに自分のとこのCPUは前にも書いたのですが、SIMDに関係するところで言うと

kenta@ASPIRE3830T C:\Users\kenta
> \Binaries\SysinternalsSuite\Coreinfo.exe |grep -E "SSE|AVX"

Coreinfo v3.31 - Dump information on system CPU and memory topology
Copyright (C) 2008-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
SSE             *       Supports Streaming SIMD Extensions
SSE2            *       Supports Streaming SIMD Extensions 2
SSE3            *       Supports Streaming SIMD Extensions 3
SSSE3           *       Supports Supplemental SIMD Extensions 3
SSE4a           -       Supports Streaming SIMDR Extensions 4a
SSE4.1          *       Supports Streaming SIMD Extensions 4.1
SSE4.2          *       Supports Streaming SIMD Extensions 4.2
AVX             *       Supports AVX intruction extensions

です。

2015年09月20日

Windows 8と2012 ServerのRegistered I/Oについての記事

| Windows 8と2012 ServerのRegistered I/Oについての記事を含むブックマーク Windows 8と2012 ServerのRegistered I/Oについての記事のブックマークコメント

IOCPとRIOのイメージを書いてみた。技術的にはあんまり正しくないと思うけど。

f:id:matarillo:20150920082202p:image

RIOは最初こう書いてみたものの

f:id:matarillo:20150920082203p:image:w400

書き直してみた。どっちにしろ正しさは保証できない。

f:id:matarillo:20150920120824p:image

技術的にちゃんとしてる説明は、まずはMSDN。

What's New for Windows Sockets
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740642.aspx#Updated_for__Windows_8_and_Windows_Server_2012

でも英語

それから、Channel9にBUILD 2011のときの動画があるからそれを観ろと。

New techniques to develop low-latency network apps
https://channel9.msdn.com/events/Build/BUILD2011/SAC-593T

でも英語だし、時間かかるしなあ。

非公式だけどThe Server FrameworkというC++の有償フレームワークがあって、そこのブログがいろいろ解説記事を書いてる。

Winsock Registered I/O Archives
http://www.serverframework.com/asynchronousevents/rio/

やぱりこれも英語。

読み始めるならこのあたりからか。

Windows 8 Registered I/O Networking Extensions
http://www.serverframework.com/asynchronousevents/2011/10/windows-8-registered-io-networking-extensions.html
Windows 8 Registered I/O and I/O Completion Ports
http://www.serverframework.com/asynchronousevents/2011/10/windows-8-registered-io-and-io-completion-ports.html

後者の方について適当翻訳をしてみた。気が向いたら他の記事も見てみる。





Windows 8のRegistered I/OとI/O完了ポート

前回のブログ記事でWindows 8のRIOネットワーク拡張を紹介した。RIOで処理の完了を受け取るには3つの方法がある。ポーリングイベントリブン、そしてIOCPを使う方法。RIOは柔軟だからいろんな形で使える。ポーリングは高速なUDPとかHFTとかでCPUを使い切れてうれしい。イベントドリブンはスピンロックしなくていいから効率的だけど、今一番興味があるのはIOCPスタイル普通のネットワーク処理ではこれが一番パフォーマンスがいいんじゃないかな。たぶんだけど。

ちなみにこれらの記事は俺の前提とか直感とかに基づいてるし、SDKとかと同期してるわけじゃないよ。まあ話半分で聞いてくれ。

で、RIOとIOCPを合わせて使うには。

RIOの場合は処理の完了はキューに入る。固定長のデータ構造で、ユーザー空間とカーネル空間で共用されるからユーザーモードでデキューできる(詳しくはBUILDのビデオ観れ)。前回も書いたけど、完了をどうやって受け取るかはキューを作るときに指定する。イベントを渡すか、IOCPを渡すか、何も渡さない場合は自分でポーリング。IOCPなら、あらかじめRIONotify()を呼んでおくと、GetQueuedCompletionStatus()でキューが空だったらI/Oスレッドがプールに戻されて、キューが空じゃなくなると通知が来て処理が続く。サンプルコードはこんな感じ。マジで使うならcompletionKeyとかいろいろやることあるかんね。

if (::GetQueuedCompletionStatus(
   hIOCP, 
   &numberOfBytes,
   &completionKey,
   &pOverlapped,
   INFINITE))
{
   const DWORD numResults = 10;
 
   RIORESULT results[numResults];
 
   ULONG numCompletions = rio.RIODequeueCompletion(
      queue,
      results,
      numResults);
 
   while (numCompletions)
   {
      for (ULONG i = 0; i < numCompletions; ++i)
      {
         // deal with request completion...
      }
 
      numCompletions = rio.RIODequeueCompletion(
         queue,
         results,
         numResults);
   }
 
   rio.RIONotify(queue);
}

で、空じゃなくなったら通知されると言ったが、RIONotify()につき通知は1回きり。RIODequeueCompletion()でデキューした後で、次のIOCP完了を受け取りたければふたたびRIONotify()を呼ぶんだ、いいね?面倒なようだけどもこれはこれでいいんだよ。完了キューにアクセスするスレッドを自分で制御できる(訳者メモ:たぶん、RIONotifyを呼び出したスレッドと、引数として渡したキューとが紐づけられるんだろうと思った)から競合とか考えなくていいんだから。送信と受信で1個ずつキューを使って、それぞれ別スレッドにしてもいい。送受信でキューを1つしか使わなければ、あるソケットに紐づくのは同時には1スレッドだけってことになる。普通のIOCPはスレッドプールを使うから、そこが違う(訳者メモ:ひとつのI/Oが完了すると必ずひとつのスレッドが割り当てられるから、複数のI/Oが絡むと必ずマルチスレッドになる)。

RIOのメリット

順序制御が楽、マジで楽。完了キューには期待した通りの順序で入ってくるから、1スレッドでアクセスすれば期待した順序で取り出せるでしょ?IOCPでも通知は順番通りだけど、スレッドプールのせいで順序制御に余計な手間がかかることを考えれば、RIOの方が簡単。あとRIOには送受信バッファがない。(訳者メモ:そのあとも何かちょっと書いてあるけど読み飛ばし

他のメリットは1スレッドで続けてデキューできること。デキューしてる間はカーネルモードに遷移する必要もないし、キューが空になってからカーネルモードに入る的なやつで、いい感じ。

RIOのデメリット

I/Oスレッドをフル活用するのは大変だよーん。キューの数とかスレッドの数とかは自分で制御することになるわけだし。一般的用途ではRIOを生で触るのは辛いから、そういうときは、新しいコネクションをどのキューに割り振るかとか、キューの増減どうするかとか、そういうのをやってくれるフレームワーク的なものが欲しい。キューの数が増えてるにもかかわらずI/Oスレッドが足りない場合、1スレッドの処理を1つのキューにかかりきりにすると、スレッドが割り当たってないキューのコネクションはいつまでも待たされてしまうけどそれでいいの?って話もある。

それから、I/OスレッドがRIONotify()を呼ぶ前にうっかり別の処理でブロックしてしまったりすると、そのキューで扱うソケットは全部待ちになってしまうから、他の接続に迷惑をかけることになるよ。

まとめ

RIOとIOCPを合わせて使うのは簡単に見えるけど詳細はただのIOCPとは結構違うから注意。RIOから見ればIOCPのとこがブロック処理になるけど、キューと対応付けた複数のコネクションを1スレッドで扱える。

トラックバック - http://d.hatena.ne.jp/matarillo/20150920

2015年09月19日

Re: OpenCLやる前にSIMD使い切れっていう幻想

| Re: OpenCLやる前にSIMD使い切れっていう幻想を含むブックマーク Re: OpenCLやる前にSIMD使い切れっていう幻想のブックマークコメント

注意:この記事コードにはバグがあってまともに動いてません。詳細はこの記事この記事を読んでください。



(C#は・・・まぁ、RyuJITが使えるようになればマシになるのかな)

OpenCLやる前にSIMD使い切れっていう幻想 - aokomoriuta's blog

青子守唄さんのC#コードはそもそもSIMDが有効になってないんですよね。

C#でのSIMDの利用方法 - yukobaのブログにもある通り、System.Numerics.VectorsをNuGetで落としてこないといけない。

なので、いまさらですが、.NET Framework 4.6のRyuJITでSIMDを試してみましたよ。

コードは(bitbucketでもいいのですが)GitHubに置いてあります。

リポジトリ
https://github.com/matarillo/simd/tree/39642fc623d8f6c841ac1f7c50e26a2fdcd90cd9
C#のコード
https://github.com/matarillo/simd/blob/39642fc623d8f6c841ac1f7c50e26a2fdcd90cd9/cs/simd/Simd.cs

環境

結果

kenta@ASPIRE3830T C:\Users\kenta\Desktop\simd\cs\simd\bin\x64\Release
> .\simd.exe
Normal: 4691 [ms]
SIMD: 1394 [ms]
Parallel SIMD: 1169 [ms]
Press Any key...

コードみるとわかりますが

Parallel.For(0, n, i =>
{
	var a = f[i] * rm;
	x[i] += v[i] * dt + a * tmp;
	v[i] += a * dt;
});

こんなんで4倍程度速くなるので、「C#でいいじゃん」という気にもなりますね。ああもちろんF#でもVB.NETでも同じような恩恵は得られますが。冒頭にも書きましたが、このコードにはバグがあったのでぜんぜんまともな結果を出せていません。

ちなみにWindowsマシンを持ってなくて、MacやLinuxのMonoを使って試してみたい人は、Mono.Simd名前空間の型を使うように修正してくださいね。RyuJITの取り込みはまだ作業中のはずなので。

追記

まあたしかに連チャンで実行するとキャッシュに乗りますね。その辺対処したコードを後で載せましょう。

とりいそぎ画像だけ

f:id:matarillo:20150919124037p:image

もしかしてだけど、jのループが消えてるのがレギュレーション違反って言ってるのかな。

たとえばこういうこと?

struct NaiveVector4
{
	public double X0;
	public double X1;
	public double X2;
	public double X3;

	public NaiveVector4(double x0, double x1, double x2, double x3)
	{
		this.X0 = x0;
		this.X1 = x1;
		this.X2 = x2;
		this.X3 = x3;
	}

	public static  NaiveVector4 operator *(NaiveVector4 l, double r)
	{
		return new NaiveVector4(l.X0 * r, l.X1 * r, l.X2 * r, l.X3 * r);
	}

	public static NaiveVector4 operator +(NaiveVector4 l, NaiveVector4 r)
	{
		return new NaiveVector4(l.X0 + r.X0, l.X1 + r.X1, l.X2 + r.X3, l.X3 + r.X3);
	}

	public double[] Data
	{
		get { return new[] { X0, X1, X2, X3 }; }
	}
}

余計遅くなったりするけど。

f:id:matarillo:20150919130255p:image

こんな風に。

レギュレーションはまあどうでもいいとして、元コードでどうやってキャッシュに乗らないようにしてたのかは知りたい。C/C++力がたりないので。(でも上みたいなエアツイートしかしてくれないんだったら本人の説明は期待できないな。っていうかもしこのあたりのツイートが自分宛だったとしたらただの的はずれですしね。)そんでもってご自身で128bit SIMD試してるけど、ますますレギュレーションって何かね?ですね。ツイートは関係なかったとのことでいいがかり申し訳ありませんでした。バグを修正した記事も書いていただきました

2015年08月07日

セカオワFukaseの暗号をWebカラーで表現してみた

| セカオワFukaseの暗号をWebカラーで表現してみたを含むブックマーク セカオワFukaseの暗号をWebカラーで表現してみたのブックマークコメント

こんな記事(とツイート)を見た。

セカオワFukase、きゃりーが破局? 「暗号」ツイート前にも気になる投稿あった : J-CASTニュース

https://twitter.com/fromsekaowa/status/629338084547522562/

これを見てまず思ったのは、「これ全部のアルファベット符号化はできないよな」だ。たとえば直感的には、“x”を色で表現するのは難しそうだ。聞いたこともないような色を使えばもしかしたら可能なのかもしれないけども。


次に思ったのは「色の名前ってどこかに定義されていないのかな……あ、CSSの色(Webカラー)があるじゃん」だ。

そこでWikipediaを見てみた

すると、HTML4/CSS1に分かりやすい色が16色定義されていることが分かった。

名前補足
White
Silver
Gray
Black
Red
Maroonマルーン/栗色
Yellow
Oliveオリーブ色
Limeライムグリーン
Green
Aqua水色
Tealティールグリーン/鴨の羽色(かものはいろ)
Blue
Navyネイビーブルー
Fuchsiaフクシアの花の色/Webカラーとしてはマゼンタと同じ色
Purple

これ、使えるな……


そこでできたのが、英文をWebカラーで暗号化するJavaScriptだ。

FUTARI NO OWARI - jsdo.it - Share JavaScript, HTML5 and CSS

http://jsdo.it/matarillo/wcmD

右の「Text」のところに英文入力して「Convert」を押すとFukase式暗号に変換される。


さすがに'White'を使うのはためらわれた(そういうフォントがないと苦しい)のでWhiteは抜いたが、残りの15色*1でアルファベット26文字のうち“j”、“x”、“z”を除く23文字をカバーすることができた。

なお、色を16色からX11の78色に広げたとしても、追加できるのは“j”だけで、“x”と“z”はやはりカバーできなかった。

ちなみに“j”が出てくる色名称は「NavajoWhiteナバホ族の白、#FFDEAD)」でした。ここの背景のような色 だそうで。知らんわ!

*1:正確には、'Black', 'Red', 'Yellow', 'Lime', 'Green', 'Aqua', 'Teal', 'Navy', 'Fuchsia', 'Purple'の10色

トラックバック - http://d.hatena.ne.jp/matarillo/20150807

2015年07月27日

ハイスピード通信的なやつ

| ハイスピード通信的なやつを含むブックマーク ハイスピード通信的なやつのブックマークコメント

Adventures in High Speed Networking on Azure | Age Of Ascent

以前、ハイパフォーマンスASP.NETについてちょっと書いた時にTechEmpowerのベンチマークに触れたけど、

今回紹介する記事ではプレーンテキストのレスポンスに特化してあれこれ考察してる。

トラックバック - http://d.hatena.ne.jp/matarillo/20150727

2015年07月01日

トラックバック - http://d.hatena.ne.jp/matarillo/20150701

2015年05月26日

Synaptics Touch Padが動かない

| Synaptics Touch Padが動かないを含むブックマーク Synaptics Touch Padが動かないのブックマークコメント

f:id:matarillo:20150526211048p:image

コネクタからケーブルを引っこ抜いても、また接続してもこれが出るのは、やっぱりHWがどこかまずいのかしら。

ついこないだマザーボードもタッチパッドも交換してるんだけどなあ。ケーブルなのかな。

トラックバック - http://d.hatena.ne.jp/matarillo/20150526

2015年04月28日

Build 2015の個人的に興味あるセッション

| Build 2015の個人的に興味あるセッションを含むブックマーク Build 2015の個人的に興味あるセッションのブックマークコメント

MS開発者向けイベントBuild 2015が目前に迫ってきたところでセッション概要が公開になりました

自分の関心はこのあたりに。

(追記)タグついてないセッションなどをいろいろ見逃してたので後で追加よてい

クロスプラットフォームWeb

Cross-Platform Web and Cloud Development (see online catalog after keynote for updated title)

キーノートの後でタイトルが変わります、とあるし、しかも話者がエリックガンマとJohn Papaだし、なんか面白いことやってくれるのかな。

タグには「.NET」「TypeScript」「Node.js」とある。

(追記)Visual Studio OnlineでのNode.js開発進化する感じ?

TypeScriptの未来

The Future of TypeScript: ECMAScript 6, Async/Await and Richer Libraries

Anders Hejlsbergと仲間たち(Brad Green、Miško Hevery)のセッション。

Microsoft Band

Microsoft Band: Developing for Microsoft Band and Microsoft Health

欲しいかと言われるとそんなでもないけど、変なデバイスは多い方が世の中が面白い。

Windows/iOS/Android向けアプリケーションをVSで

Strategies for Developing Cross-Platform Applications with Visual Studio 2015

CordovaにするのかXamarinにするのか、とかそういう選択肢の話っぽい。

Cordova

Getting Started with Cross-Platform Mobile Development with Apache Cordova

で、Cordovaの紹介。Level 200だし、深い話はなさそうなんだけど。

Xamarin

Go Mobile with C#, Visual Studio and Xamarin

こっちはXamarinからMiguelと大山さん(Montemagnoさん)。

Cortana

Cortana and Speech Platform In Depth

音声コマンド定義とかそういう話。オッケーグーグル。

生体認証とMicrosoft Passport

Microsoft Passport and Windows Hello: Moving Beyond Passwords and Credential Theft

パスポートってまだあったんだ……

WindowsのUIデザイン

Windows Design for Developers: An Executive Panel

Windows 10で崩壊するModern UIなんて記事を読んだとこだし、ネガティブ意味で興味ある

OSSを使ってUniversalアプリ

Windows + Open Source Software

FFMPEGとSQLiteを使ってアプリを書く、という内容だけなら大して面白くないけど、とまれMSがOSS推しなのは応援したい

SpartanのF12開発者ツール

What’s New in F12 for "Project Spartan"

Diagnostics Adapterの話もするのかな?

Spartanの概要

"Project Spartan": Introducing the New Browser and Web App Platform for Windows 10

Level 200だし、こっちも深い話はなさそう。

UniversalアプリのUXパターン

Design: UX Patterns and Responsive Techniques for Universal Windows Apps

Universalアプリ自体にはあまり興味ないんだけど、考え方として得るものがあればいいな

PythonとNode.js

Python and Node.js: Microsoft’s Best Kept Secrets

「without sacrificing ...」というあたりで「まだxxで消耗してるの?」というフレーズが浮かんだ。

Windows 10とSSO

Single Sign-On with Secure Authentication

Enterpriseタグがついてるので、おしごと的には一応押さえておくかな

Cordovaでストアアプリ

Hosted Web Apps and Web Platform Innovations

Cordova推しだなあ。Edgeレンダリングエンジンによってパフォーマンスが上がったとかそういう話なのかな。

Spartanのレンダリングエンジン

The "Project Spartan" Rendering Engine That Makes the Web Just Work

https://status.modern.ie/ で公開してる情報がBuildにあわせて更新されるのかな。

ECMAScript6とChakra

What’s New in JavaScript for Fast and Scalable Apps

どんどんおやりなさい。でもどうせならコンソールからももっと簡単に使えるとうれしいなあ。WSH……

.NET 2015のまとめ

A Lap Around .NET 2015

ランタイムだけじゃなくてWPFの話もするっぽい

LinuxやMacで.NET

Taking .NET Cross-Platform: Building .NET Applications on Linux and Mac

ASP.NET Core 5の話かな。デスクトップの話とかはさすがにないだろう。

Roslyn

.NET Compiler Platform ("Roslyn"): Analyzers and the Rise of Code-Aware Libraries

ufcppさんから聞く方が効率てk……なんでもないです。





(以下追加)





Azure Networking API

Building Network Aware Applications Using Azure Rapid Prototyping (RP)

インフラ大事

AzureでMicro ServicesのPaaS

The Next Generation of Azure Compute Platform with Mark Russinovich

マーク・ルシノビッチのセッション

Docker on Azure

Thinking in Containers: Building a Scalable, Next-Gen Application with Docker on Azure

Igniteでも同じセッションがある様子

Entity Framework 7

Entity Framework 7: Data for Web, Phone, Store, and Desktop

あまり好きではないが抑えとして

ASP.NET 5

Deep Dive into ASP.NET 5

Scott Hanselmanのセッション

Vision API

Vision APIs: Understanding Images in Your App

Vision APIとはこいつのことらしい画像処理ライブラリ。ImageMagick的なやつなのかな。

ANGLE(OpenGL ES 2.0のDirectX11による実装)

ANGLE: Running OpenGL ES 2.0 Graphics Code on Windows

Angleとはこいつのこと。Googlerが開発してる。

VS2015のWeb Tool

Modern Web Tooling in Visual Studio 2015

Mads Kristensenのセッション。GulpとかBowerとか。

クロスプラットフォームな継続的デリバリ

Cross-Platform Continuous Delivery with Release Management to Embrace DevOps

DSCとASP.NET coreの話らしい

Office Graph

Building Solutions with Office Graph

Office365のソーシャル機能とか。このあたりも

AngularとTypeScriptとOffice 365 API

Building a Single-Page App Using Angular and TypeScript Using Office 365 APIs

O365 APIを呼び出すSPAということらしい。

VS2015のコンパイラとか

Compiler and Runtime Technologies in Visual Studio 2015 (see online catalog after keynote for updated title)

タグがC++とiOSなので、例のAndroid NDKサポートに加えてiOSサポートもBuildで公開になるのかな。

基調講演後のお楽しみ

Keynote Announcement Deep Dive (see online catalog after keynote for updated title)

何かが発表になった後で、それの説明をやるっぽい。

2015年03月21日

Mac大したことない

| Mac大したことないを含むブックマーク Mac大したことないのブックマークコメント

「開発環境はMac最強、Windowsとかw情弱乙w」みたいな勢いで言われることあるけども。

f:id:matarillo:20150321145108p:image

なーんだ大したことないじゃん。だったらLinux使おうぜ。

(追記)エッゾーエさんのask.fm(とtwitter)で触れられたのでちょとだけ補足すると、手で入れるなら最新が入るので、そこはウィンドーズとは比べ物にならない。(ウィンドーズでも、CygwinやMSYS2なら新しいGitが手に入るけどね)

Mac OS XでASP.NET MVC 5.2

| Mac OS XでASP.NET MVC 5.2を含むブックマーク Mac OS XでASP.NET MVC 5.2のブックマークコメント

MonoのサイトでMonoとXamarin Studioをダウンロード&インストールMonoはインストーラーがあれこれ処理するけど、Xamarin Studioのほうは例によってアプリケーションフォルダに放り込めばOK。(Xamarin社のブランディングによりアプリ名はXamarin Studioになってるけど中身はMonoDevelopだと思えばいい。モバイル開発のあれこれはインストールされない。)

Xamarin Studioを起動したらメニューから「アップデートをチェック」。今日やってみたときはバージョン5.7が5.8にアップデートされた。

無事更新が終わったら、スタート画面から「New Solution...」をクリックし、「ASP.NET MVC Razor Project with Unit Tests」を選ぶ。するとさっくりとひな形ができてる。

f:id:matarillo:20150321180523p:image

NuGetパッケージが更新されているようだけど、まずは気にせずにソリューションをビルドして、ビルドが通ったらデバッグ起動。

f:id:matarillo:20150321180524p:image

普通に動く。

vim化もできるようだし、VSが嫌いなIntelliJおじさんがどうしてもドトネトやらざるを得ないときはこっちにしてはいかがか。

トラックバック - http://d.hatena.ne.jp/matarillo/20150321

2015年03月12日

サロゲートペアとか

| サロゲートペアとかを含むブックマーク サロゲートペアとかのブックマークコメント

とあるJavaのコードをC#でリライトしてたのだが、UTF32(int)をUTF16(char)にカジュアルキャストしてるコードがあった。

もちろんバグなんだが、たまたまオーバーフローをチェックする設定のプロジェクトファイルだったから実行時にOverflowExceptionが出て気づいた。普段だったら気づかなかっただろうなあ。

ついかっとなって型を書いた。

struct Utf32
{
    public int CodePoint;
    public Utf32(int codePoint)
    {
        this.CodePoint = codePoint;
    }
}

C# にも(usingではない)型エイリアスがあれば不要かもしれないが、型検査で潜在バグを見つけたいという意図からすれば、intと暗黙に相互変換できてしまうとあまりうれしくない。(上の構造体にもキャスト演算子定義しなかった)

トラックバック - http://d.hatena.ne.jp/matarillo/20150312

2015年03月11日

WindowsのWeb PIでインストールされたPHPを消す方法

| WindowsのWeb PIでインストールされたPHPを消す方法を含むブックマーク WindowsのWeb PIでインストールされたPHPを消す方法のブックマークコメント

会社の後輩(Rubyist)とWindowsのえぐ味について話しながら「ほーらこんな感じでMySQLとPHPとECCubeが」とホイホイインストールしたのはいいが、PHPの消し方がわからん。コンパネのアンインストール一覧には出てないし、しかしphp.exeにはパスが通ってるし。

Uninstalling components : The Official Microsoft IIS Forumsに書いてあった。

  • %userprofile%\documents\iisexpress\config\applicationhost.config編集して、PHPを参照している<application>要素を消せ
  • 同じファイルFastCgiModuleを登録している<add>要素を消せ
  • %programfiles%\iis express\php\フォルダを消せ

これが終わったら、環境変数%PATH%からもPHPへのパスを消せばたぶんOK。

トラックバック - http://d.hatena.ne.jp/matarillo/20150311