すっかり存在を忘れていたこと CancellationToken.Register(Action)

TaskをキャンセルするのにつかうCancellationTokenですが、キャンセルされたとき呼ばれるdelegateを登録しておくことができるんですよね。そういえば.NETにTaskが追加された頃になんかで見たことあったかもしれないけど忘れていました。

var cts = new CancellationTokenSource();
var token = cts.Token;
token.Register(() => Console.WriteLine("キャンセルされたよ"));

cts.Cancel();

んで、CancellationToken.Register(Action)は戻りCancellationTokenRegistrationってのがある。なんじゃこれ。 どうやらRegister()したのをUnregister的なことしたいといきCancellationTokenRegistration.Dispose()すればよいらしい。ほう。

使うときは読み直そう。マネージ スレッドのキャンセル

Mac OSX でDockerしたい(ただしParallelsに限る)

[EDIT 2014/5/11] うひゃ、この内容もう古いです...。Vagrant 1.6ではMac OSXから、もうちょっと簡単にDocker使えます。ここ参照 Docker-Based Development Environments

[EDIT 2016/2/11] 今はMacでDockerはDocker Machine | Docker Documentationを使うのが便利そうです。 GitHub - Parallels/docker-machine: Machine management for a container-centric world

Vagrant+Palallelsはこちらを参照でどうぞ。Installing Vagrant - Vagrant Parallels Provider Documentation

[EDIT 2018/2/10]
MacでDockerなら素直にDocker for Macですね。


[注)この内容は古いので上を参照ください]

Mac OSXでDocker使いたいときは、何らかのVMLinuxを動かして、その上でさらにDockerを使うことになります。 自分の場合VMとしてParallelsを使ってるので、それを使いたい(すでに有料のVMを利用してるのに、わざわざほかのVMを使うのは悲しい)。 あとParallels VMの実行はVagrantを使いたい。 んで、Dockerを動かすのが目的なので、Parallels VM上で動かすOSはboot2dockerでいい。

ということになる。

VagrantとParallelsの組み合わせで使いたいときここ参照

MacVagrantはインストール済みなら、あとはこんな感じ。

VagrantParallels用のプラグインを入れる。

# vagrant plugin install vagrant-parallels

作業用に任意のディレクトリを作ってそこにcdして、

# vagrant init yungsang/boot2docker
# vagrant up --provider=parallels
# vagrant ssh

できた。
便利な時代ですなあ。

Vagrant+Parallelsの利用は一部制限もあるのでこちらも参照(2014/5/3現在)。

MacBook Pro Retina 15!(ヒュー!)

うれしいとき、ヒュー!、って死語?

♪あきらめました...17インチのことは...、この曲も古い?(って私の頭の中に流れた懐メロ誰にもわからんちゅうの)。

17インチMacBook Proがどうにもこうにも、もうオワコンぽいので、待つのはあきらめて、MacBook Pro Retina 15への乗り換えしたのだ。先代MacBook Pro 17インチもSSDに換装してからはそんなに不満無く使ってたのだけれど、消費税増税前のどさくさということで。

ブラウン管ディスプレイ以来の光沢ディスプレイだけど、思ったほど違和感ない。

C#のイベントパターン(EventHandler パターン)は、今となっては、利用することを強調するほどのパターンじゃ無くてよいのでは、と思うのですよ(タイトル長い)

だって、
Func デリゲート
とか
Action デリゲート
などができたので、EventHandlerとEventArgsは"過去の遺物"扱いでよいかと。

マイクロソフトさん、イベントパターンについては、プログラミングガイドや、クラス ライブラリ開発のデザイン ガイドラインで布教するのは控えて、フェードアウトしていいと思いますよ。
ましてや、コード分析のルールCA1009 CA1009: イベント ハンドラーを正しく宣言しますとか、そんな目くじら立てなくても。

でも、WinRTでもけっこう使われてるか。

C# EventWaitHandleクラスにはAsync無いのか。ThreadPool.RegisterWaitForSingleObject

C# でイベントEventWaitHandle,(C#言語のeventデリゲートじゃなくてWin32イベントのほうね)のシグナルを待つのに、非同期のXxxAsync()は無いのか...。せめてeventデリゲートあるかと思ってた。Processクラスには終了待つイベントハンドラあるのにね。
AutoResetEventやManualResetEventの待ち合わせで非同期的にしたいときは、ThreadPool.RegisterWaitForSingleObjectってのを使えるのか。なんだWin32まんまだな。async/awaitになれた身にはちょっとめんどくさいな。Task使って非同期Asyncメソッド自作しちゃえばいいんだが。スレッド使うのもったいないとかスケール気にする場合は、ThreadPool.RegisterWaitForSingleObjectだなあ。

今日知ったこと Windowsでも! apt-getやbrew的な、Chocolatey

Chocolatey Mac環境でbrew便利ですので、Windowsにもあれば当然うれしい。自分の場合Win環境はParallels上の仮想マシンWin8なので、極力最低限のものだけ入れてたんだけど、これなら、もうちょっといろいろ入れてみようかな。

Chocolateyの入れ方とかは、Chocolateyにあります。PowerShellコマンドで。

まずはGow、(Win環境は小さく保ちたいからCygwinじゃなくGowにしておこうと)

cinst Gow

Chocolateyコマンドはいくつかエリアスがあって、インストールは"cinst"です。

ちなみに今日2013/12/29現在は、RubyのパッケージはRuby2.0でRuby2.1ではありませんでした。でもWinには入れないけどね。

Vert.x

Node.jsいいね!npmが秀逸でさ!、とか思ってたら、Vert.xですと。

さっそくインストール。Mac環境なのでHomebrewですわ。

> brew install vert.x

あっという間。brew万歳。 vertxコマンド動作確認してみる。

> vertx version
2.1M2 (built 2013-12-01 13:02:34) 

ちゃんと入った。

せっかくなのでRuby(JRubyね)にしてみよう。

require 'vertx'
puts "Hello Vert.x"
Vertx.exit

こんなvertx.rbを書いたら

> vertx run vertx.rb
Hello Vert.x

おけ。