2018/6/16にマイクロソフト関西支社でClient Dev Day@関西というイベントが開催されました。 そこでRS5でリリースされるかもしれないSetsという機能のお話をしてきました。
2018/6/16にマイクロソフト関西支社でClient Dev Day@関西というイベントが開催されました。 そこでRS5でリリースされるかもしれないSetsという機能のお話をしてきました。
.NETのSystem.Threading.Tasks
空間に、TaskCompletionSource<T>
っていうのがあります。
TaskCompletionSource(TResult) クラス (System.Threading.Tasks)
これを使うと、こういうコードが書けます。
public Task Sleep(int milliseconds) { var source = new TaskCompletionSource<bool>(); var timer = new Timer(_ => { source.SetResult(true); }, null, milliseconds, Timeout.Infinite); return source.Task; }
このコードは、実際はTask.Delay
と書けばいいので特に意味はないですが、外からTaskをCompleteできる便利なやつです。
最近のECMAScriptだとこう書けるあれです。
function sleep(millis) { return new Promise(done => { setTimeout(done, millis); }); }
普段使わないけど、1年に1回ぐらい使うことがあって思い出せないのでメモです。
はぁ…WSLにbinfmt_miscなんで実装されないんだろ…と思いながらUserVoiceを眺めていたところ、よくよく調べたらWSL空間からWin32のバイナリを呼び出す仕組みを実現するためにRS2の時点で実装されていたのでした。なんと1年以上前…当時Win32 PEを実行するのにMZヘッダが見つかったら/initに実行を委譲するよ。みたいな記事を読んだはずなのにすっかり忘れていた。
binfmtが使えるならi386 ELFのmaskを設定してやれば動くんじゃないの…と思ったのが6時前。思い立ってしまったら気になって眠れなくなったのでやってみました。
まずqemu-user-staticをインストール。
$ sudo apt-get install qemu-user-static
qemu-user-static用のbinfmtが自動登録されるけど、これにi386はない*1のでハンドラ手動登録。
$ sudo update-binfmts --install qemu-i386 /usr/bin/qemu-i386-static --magic '\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'
うじゃうじゃたくさん書いてあるのはELFのヘッダを検出するマジックとマスク。ELFの仕様ともともとあったqemu-user-staticのマジックを眺めながらいい感じにしたらこうなりました。
なぜかこうするとうまく動くようになるんですが、どうやらWSLのbinfmt_miscはOC
フラグというのに対応していないらしい。こうやってやるといい感じに動くらしい*2。
せっかくなので32bit ELFなバイナリを作って実行してみる。
$ sudo apt-get install build-essential libc6-dev-i386 $ vi test.c #include<stdio.h> int main(){ puts("Hello World"); return 0; } $ gcc -m32 test.c $ file a.out a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1e13e8c9bba4368d713095984853243c85b65768, not stripped $ ./a.out Hello World
ちなみにupdate-binfmts
しない場合はこうなる。
$ ./a.out -bash: ./a.out: cannot execute binary file: Exec format error
WSLのインスタンスが全部終了するとbinfmtのエントリが消し飛ぶので何らかの方法で復元してください
*1:普通のx86_64ならi386バイナリが直接実行できるので登録する意味がない
*2:https://github.com/Microsoft/WSL/issues/2620#issuecomment-374490404
新規ダウンロード提供を停止しました。といった次の日に言うのもなんですが、新規ダウンロード終了記念ということでAristea 2.0、本当のUWP版をリリースしました。
さっきGitのログを確認したところ、UWP版プロジェクトがスタートしたのは2015年10月だったので、リリースまで約2年半かかっていることになります。 Windows 10自体のバグとかいろいろあって伸び伸びになっていたわけですね…
UWPになった、また機能強化でいくつか新機能が増えています。
これ以外に不具合もちょこちょこ修正しています。 UWPになったことで、ちょこちょこバグと思わしき現象を確認しているのでそれはおいおい修正していきます。
現時点で計画されているアップデートは、8月中頃のUserStream終了に合わせたUserStream機能とイベントカラム、プッシュ通知の削除です。 それ以外の機能追加、不具合修正はこれに限らず随時リリースされる予定です。たぶん。
Aristeaは新規ダウンロードは終了しましたが、8月までは全機能が完全に使用できるままです。その間まではぜひご利用ください。
*1:このままだと最後までテスト中のままな気がしたのでせっかくだから外しました
2月ごろにXPS 13(9370)を買っていたのですが、キーボードを高速に*1入力すると文字を取りこぼす。という現象に遭遇してました。
もしかしたら単純にタイプミスなのかもしれないけど…と思いつつサポートメールを送信したら、
ゆっくり入力してください
って言われてしまい、Twitterサポートに泣きついたところ、本国の開発部門へエスカしてもらえたようで本日BIOSアップデートが公開されました。
Fixes:
- Skips keys when typing fast
Dell XPS 13 9370 System BIOS | Dell 日本
とあるように、このアップデートをインストールするとキーの取りこぼしが全くなくなりました。見違えるようです。
わけのわからないクレームを本国までエスカしてくださったサポート担当の方に感謝です。
*1:といっても7key/secなのでそんなに早くないです