Neutral Scent

App developments & Gadgets

Microsoftカンファレンスのセッション動画をまとめてDownloadする(Build 2016対応版)


以前、こんなエントリーを書きました、

Microsoftカンファレンスのセッション動画をまとめてDownloadするSession Downloader - Neutral Scent
http://d.hatena.ne.jp/kaorun/20150503/1430647159

そしてBuild 2016から一週間ほど待ってみたのですがここで取り上げたSession Downloaderが実は2015年で更新が止まっていたので更新版を...。
一言でいえば、これです。

Session Downloader Reloaded | Frank's World
http://www.franksworld.com/2015/10/07/session-downloader-reloaded/

Reloaded!
…というだけでも十分な気はしますが、もう少しだけ。
現状、Session Downloader Reloadedはバイナリを配布していないようなので、Githubからクローンしてきてビルドして実行です。

GitHub - FrankLaVigne/SessionDownloader: Simple session downloader for Build 2016 and other events on Channel9.
https://github.com/FrankLaVigne/SessionDownloader

手元で試した範囲ではVS2015以降が必要のようです。
でもって、コマンドラインから

C:\> SessionDownloader.exe [ダウンロード先ディレクトリ] https://s.ch9.ms/Events/Build/2016/RSS

ですね。
規定値は低解像度版なので、高解像度版なら、

C:\> SessionDownloader.exe [ダウンロード先ディレクトリ] https://s.ch9.ms/Events/Build/2016/RSS hi

PowerPointのスライドは、

C:\> SessionDownloader.exe [ダウンロード先ディレクトリ] https://s.ch9.ms/Events/Build/2016/RSS slide

Buildだけでなく、Microsoft Edge Web Summit 2016なら、

C:\> SessionDownloader.exe [ダウンロード先ディレクトリ] https://s.ch9.ms/Events/WebPlatformSummit/edgesummit2016/RSS

でしょうか。
あとは「入り口までは案内するが扉は君自身で開けろ」ってわけで。

めとべや東京 #10で「今風なデスクトップアプリの モダンインストーラー開発」について発表しました

...というわけで、本日開催された「めとべや東京 #10」でイマドキなモダンUIを利用したWindows Installer開発について登壇させていただきました。
会場では少々グダグダなデモになってしまい参加者の方々には申し訳ありませんでした。スライドの方は資料として使いやすいギョーミーな箇条書きにまとめさせていただいております。

正直、今年後半はこのあたりのインストーラー周りに追いまくられて全力でバックダッシしていた感があるのですが、Project Centennialなど今後の展開も期待できますので、資料としてご活用いただければ幸いです。

また、あわせて、より基礎的なMSIの話をWindows & Microsoft技術 基礎 Advent Calendar 2015向けのエントリーとしてまとめましたので、合わせてご参照ください。

今、あらためて確認するWindows Installer(MSI)の基本
http://d.hatena.ne.jp/kaorun/20151219/1450511313

今、あらためて確認するWindows Installer(MSI)の基本


この記事は、Windows & Microsoft技術 基礎 Advent Calendar 2015 12月19日分のエントリーです。
MSIとは何か?:
デスクトップWindows用のアプリを新しく導入するためのインストーラーを作成する場合、現在、最もフォーマルなアプローチがWindows Installer形式の*.msiファイルによるインストーラーを利用する方法です。

Windows Installer自体の詳細については既にWikipediaMSDNなど様々な解説がなされているので必要に応じてご参照ください。

Microsoft Windows Installer - Wikipedia
https://ja.wikipedia.org/wiki/Microsoft_Windows_Installer
Windows Installer (Windows)
https://msdn.microsoft.com/en-us/library/cc185688

MSIファイルというけれど、最近は*.exeファイル単体で実行形式になってるインストーラーが多いんじゃ? と思われるかもしれません。
また、*.zipファイルで圧縮されたSetup.exeと*.msiファイルのセットになっているインストーラーパッケージを見かけられることも多いかもしれません。
今回のエントリーではそのあたりのMSI事情を駆け足でまとめてみたいと思います。

インストーラーのパッケージの構造:
まずは、インストーラーのパッケージ形態から考えてみましょう。
MSIを利用する場合、小型のインストールランチャーを取得してからインストーラー自体がダウンロード処理を行ういわゆるWebインストーラー形式はサポートされません。
MSIで一般的な形態は、

  1. *.msiファイル単体の配布
  2. Setup.exeと*.msiファイルの配布
  3. Setup.exeと*,msiファイルをパッキングして、実行可能な*.exeとした単一実行ファイル形式
  4. Setup.exe、*.msiに加え、インストール元ファイル群を伴いisoファイル形式などによるCD/DVDイメージ
  5. 同じく、インストール元ファイルをCab形式などでパッキングしたFD分割形式

元々、Windows Installerが登場した当時は5の形式で、多数のFDを順次読み込んで実行・インストールを行うことが、インストーラーの最も重要な役割だったのですが、現在では、4の形式もVisual Studioなどごく一部の大型アプリのみとなり、1〜3の形式や、MSIを使用しないWebインストーラーが主流になっています。
.msi以外に、.mstや.msuなどのモジュールも各種ありますが、そのあたりは使う人が知っていればいい内容なので割愛します。

SetupとMSI:
さて、ここまで何度も出てきている、Setup.exeと*,msiファイルの切り分けとはなんでしょう?
なぜ最初から単体の*.exeになっていないのか、という謎ですが、現在流通している多くのインストーラーの場合、Setup.exeはそのアプリの実行に必要となる.NET Frameworkや一部のデータアクセスライブラリなどの事前要求コンポーネントをインストールし、完了後に対になった*.msiファイルを起動するという構造になっています。
このSetup.exeの役割をセットアップ・ブートストラッパー(Setup Bootstrapper)と呼びます。

.msiファイルのインストールプロセス中で.NET Frameworkを利用する場合などもあり、事前に必要なコンポーネントをインストールしておこう、という仕組みです。なので、単体のMSIファイルだけを配布して、.NET Frameworkなどの環境整備は自分でやってね、という形式のアプリケーションも多くみられます。
Windows 7以降であれば、.NET 4.0程度まではOS標準でインストールされていますので、これで十分、というケースも多いでしょう。
また、歴史的経緯からみると、Windows Installerが登場した当時のWindows 95時代には、そもそもWindows Installer自体がOSに付属しておらず、インストールするためのコンポーネントをSetup.exeで組み込む、というような動作が行われていました。

MSIの単一exeパッケージ化:
とはいえ、.NET 4.6が必要である場合、とか、それぐらい勝手にやってくれるのが気が利いたインストーラーですし、いちいちZipファイルを展開して実行するのも面倒です、このため、昨今では、ブートストラッパー自体が高機能化し、.NETのインストールはもちろん、*.msiファイルや他のコンポーネントもSetup.exeのペイロードとしてパッキングしてしまい、いわゆる自己解凍形式のインストーラーとしてMSIファイルをインストールするインストーラーも多くなっています。
また、もうどうせそこまでやるなら、とUI自体もブートストラッパーに内蔵し、古典的なWindows Installerのウィザード形式のUIを利用せず、*.msiをサイレントモードでインストールする手法なども登場しています。

もちろん、そのような高度な手法を採用し、GUIさえも独自実装してしまうのならば、MSIなど使わずにより高機能で独自形式のインストーラーを開発したほうがいいのでは? という考え方もあり、実際にそのようなインストーラー開発キットも多く流通していますが、アプリケーションのシステムへの組み込み、というデリケートな問題を扱う点や、将来サポートの継続性なども考慮すると、依然としてMSIを応用した形式のインストーラーを使用するメリットは十分にあるといっていいのではないかと思います。
Project Centennieal:
また、直近では、Windows 10のリリースとともに、Project Centennialという新しい形式のパッケージ技術がマイクロソフトから予告されており、この形式では、古典的なWin32や.NETを利用したWindowsデスクトップアプリケーションを、アプリケーション仮想化技術を応用したコンポーネント化し、隔離したサンドボックス内で実行することで、安全な配置・実行を可能にし、これによってWidows Storeからデスクトップアプリケーションを配布・販売することを実現することが謳われています。

このProject Centennial上で実行されるアプリケーションパッケージの作成においてもMSIインストーラーの使用が推奨されています。MSI形式のインストーラーを持つデスクトップアプリであれば、容易にWidnwos Storeへ登録が可能になるかもしれないよ、という状況も生まれつつあるわけです。

まとめ:
以上、昨今のWindows Installer事情をざっくりとまとめてみました。
各種インストーラー開発ツールの利用方法などについては、様々なエントリーが書かれていると思いますので、各自ググってみてください。(このエントリーもだいぶやっつけなので、後日更新するかもしれません)
2015年にもなって、インストーラーをゴリゴリ書くことになるとは思っていませんでしたが、2-in1のWindowsタブレットの普及も進み、Windows用のクリエイティブ デスクトップアプリを作ってみるのも、意外と面白いかもしれませんよ。それでは、今年も残り少なくなってまいりましたが、良いWindowsライフをお過ごしください。

続く...

Windows 10でUSB接続のLANやオーディオデバイスが正常に動作しないときは(DisplayLink編)

DisplayLink製チップを搭載したUSB接続のマルチファンクションデバイス(ディスプレイ、ネットワーク、オーディオ等)がWindows 10でうまく認識されない場合の対策。
現在市販されているUSBディスプレイアダプタやUSBポートリプリケーターのチップは大概DisplayLink製です。
で、これらのデバイスWindows 10で使う場合、現時点(10240)ではドライバの認識に失敗することがあるようです。いずれはWindows Updateでスムースに入るようになると思うのですが…。
というわけで、公式サイトによる対処方法をざっくりと日本語でまとめ。

まずは、DisplayLinkのドライバをクリーンナップしWindows 10対応ドライバを再インストールします。

それでも治らない場合

  1. バイスマネージャーを開きます
  2. 「その他のデバイス」「ネットワークアダプター」「オーディオの入力および出力」などで認識していないデバイスを選択
  3. 右クリックして「ドライバーソフトウェアの更新」を選択
  4. 「コンピューターを参照してドライバーソフトウェアを検索します」を選択
  5. 「次の場所でドライバー ソフトウェアを探索します:」に C:\Program Files\DisplayLink Core Software を入力して「次へ」

ざっとこんな感じです。

via:
Troubleshooting software installation / upgrade – DisplayLink Support
http://support.displaylink.com/knowledgebase/articles/679177-troubleshooting-software-installation-upgrade

今だから入れたい! おすすめ Windows Phoneアプリ (2015夏)


やー、色々ありましたが、ほんと色々ありましたが、もーね...、というわけでようやく日本のWindows Phone 8端末事情にも遅すぎた春がやってきつつあるようです。マウスコンピューターさんMADOSMA発売おめでとうございます。
さて、みなさま、新しいWP端末を手に入れることができたでしょうか? このエントリーを見ている時点でもう手に入れられているのではないか、と...、手に入れましたよね? (しつこい)
そんなわけで、以前まとめた頃から時が経ち、国内外で新作がいくつも登場し、KrileWPが公開終了になるなど、WPアプリ界隈にも多少の変化がありました。
なので、前回のまとめに追加する形で、初めてWPを手に入れた方々への紹介も含めて、今ならコレというオススメなアプリをいくつかご紹介。

[ MapFan
相変わらず、「Windows Phoneといえば残念な地図」でおなじみのHERE Mapsの酷い地図を補ってくれる形でインクリメントPがやってくれました、Windows 8.x/Windows Phone 8.x対応のユニバーサルアプリとしてMapFanがリリースされました!
機能的には、時層地図的な古地図やドラクエ風のRPG地図など面白機能がある反面、実用的な機能はまだまだ控えめでこれからに期待、という感じですが、これで無料アプリですし、なにしろユニバーサルアプリとしてリリースしてくれただけでも感謝感激なのです。

ジョルダン乗換案内 (新) (旧)
ジョルダンも乗換案内アプリをリニューアルしてくれました! ...が、正直使い勝手的には古い方がいいかな...? 検索条件により時々落ちるし?
なぜか新しい方に死にbug放置されてるので早く治してください〜!

乗換NAVITIME
乗換アプリといえばジョルダンと双璧なのがNAVITIMEですね。このあたりは使い勝手のお好みで。
MSN天気
前回紹介したAccuWeatherのロック画面がお天気画像からストック画像に切り替わってしまい、個人的に気に入っていたAmazing Weather HDのデータ更新が謎のエラーになってしまったので、現時点でのおすすめお天気ロックスクリーンアプリは純正のMSN天気です。
インストールするまでもなく標準で入っている気がしますが、アプリを起動してやればロックスクリーン設定が出ると思います。ロックスクリーンの選択は 設定/ロック画面 で。
2Day
クラウド同期可能なタスク・ToDoアプリの2DayはユニバーサルアプリでWindowsストア版とのデータ同期も可能なのが素敵です。
見た目もよく、タスクアプリ的な設定も一通りそろっていて過不足なく使えるクラウドタスクアプリといったところ。
Pictures Lab
正直、WPでも写真編集アプリは沢山あるのです、あるのですが、なんかこー突き抜けないというか一長一短で、これという大定番がありません。
ただ、その中でも、そこそこ使い勝手が良くて気に入っているのはPictures Labです。とりあえず、写真画像の編集なに使ったらいいん? という時点ではこれをおすすめしてます。
Pushile
この一年で、個人的に最大のヒットだったWebサービスPushBulletです。複数端末持ちのガジェオタ的にはこれなしにはもう暮らせない感じですね。
で、デスクトップWindows向けには公式アプリがあるのですが、WP版はリリースされておらず、非公式アプリが沢山出ています。Pushileはその中でも公認非公式アプリの一つ。
このあたりは、使い勝手と見た目の問題なので、Windows Phone Storeから検索してみてお好みで。
もちろん、Windows Phoneの共有コントラクトにも対応してますので、NextGenReaderやTweetiumからリンクをPCや他の端末にプッシュするのも簡単になります。
Tweetium
Krile WP亡き後、個人的に最強のTwitterクライアントだと思っているのはTweetiumです。
高機能かつ、着々と更新されていて、TwitterとWPの最新機能に着実に対応してくれているのがうれしいところ。
Windowsストア版もありますが、こちらはフローレイアウト表示で好みの分かれるところ。
Aristea
WP用国産Twitterクライアントの筆頭Amelloidesの作者つもりんによるユニバーサルアプリ版TwitterクライアントがAristea、柔軟なフィルタ式とマルチアカウントでヘビーユーザー御用達な使い勝手も健在です。ユニバーサルアプリとして購入すれば合わせて利用できるWindowsストアアプリ版の完成度も高く、こちらはマルチカラムで使いやすいのでお試しあれ。
Hyperlapse Mobile
昨年、気持ち悪いぐらいなめらかなタイムラプス動画とともに公開されたHyperlapse技術のアプリ版です。
正直、昨年公開されたビデオほどなめらかにはならないのですが、手軽に使えるスタンドアロンのタイムラプスアプリとして。Android版も公開されてますね。
Microsoft How-Old
これはもう、Twitterで見かけた方にはおわかりですね。例のアレのアプリ版です。
画像ファイルやカメラで撮影した顔写真から年齢を推定する、ただそれだけのネタアプリです。ブラウザ版ならどこでも使えますが、アプリ版はWPエクスクルーシブ(笑)。
ただそれだけのことに画像認識や機械学習など高度な技術が投入された、まさに技術の無駄遣いですね。
MS-DOS Mobile
そして、シメもネタアプリ。
今年のApril Foolに公開された、Microsoft純正のMS-DOS for Windows Phoneです。
なにができる、ってものでもありませんが、細かい作りこみや仕込みネタが沢山あるので、往年のMS-DOSコマンドが今頭をよぎった方々はれっつチャレンジ、思ったよりもちゃんとDOSです(笑)。

例によってざっと駆け足で、雑なまとめですいません。スクリーンショットぐらいストアから持ってこずに自分で撮れよ、って感じですよね。いや、ほんと暇がなくて...、自分でもガツガツアプリを書きたい気持ちはあるのですが...。
...と、それはともかく、ユニバーサルアプリのおかげで、個性派アプリも徐々に増え、Windows 10とWindows 10 Mobileのリリースが楽しみになってまいりました。
初めての方も、お久しぶりの方も、色々と過剰な期待は禁物ですが、独特な快適さを持つ今どきのWindows Phoneの世界を感じる一助になれば幸いです。

関連:
Windows Phone 8 とりあえず入れておきたいオススメ定番アプリ25選 (2014年夏) - Neutral Scent
http://d.hatena.ne.jp/kaorun/20140801/1406872071

IE11のアクセラレーターにGoogle検索プロバイダーが追加できない問題

原因はよくわからないのですが、最新Windows Updateが適用された環境でIE11に検索プロバイダーのアクセラレーターを追加できない状況が発生しているようです。IE Galleryのアクセラレーターの追加ページでインストールボタンを押しても何も起きません。
直近で会社のPCを入れ替えているのですが、GoogleWikipediaの検索プロバイダを追加できずに困りました。
で、調べて分かったのはこれ、

IE11 patch KB 3038314 blocks search engines and may fail with error 80092004 | InfoWorld
http://www.infoworld.com/article/2911704/microsoft-windows/ie-11-patch-kb-3038314-blocks-adding-search-providers-install-may-fail-with-error-80092004.html

ようするにKB3038314が適用されると、検索プロバイダの追加が無効になってしまうようなのです...。これは廉価版「Windows 8.1 with Bing」がらみの仕様なのでしょうか?
まぁ、それはともかくアドレスバーからGoogleで検索できないのは猛烈に不便なので(Bingは日本語じゃねぇ...)、どうにからないのか? KBを削除してアクセラレーターを追加して戻せなどと解説されていますがメンドクサイ...、と件の記事のコメント欄まで読んでみたところ、レジストリに直書きしてしまえばOkよ、といってる人がいたので試してみたら成功しました。件のコメントではgoogle.co.ukに行ってしまうので、他のPCから同じregエントリーを引っ張ってきてgoogle.comへ飛ばします。
具体的には、
ie_google_search_provider.reg 直

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchScopes\{CA052273-9E19-4525-A22B-8CC4BA5AD5C1}]
"DisplayName"="Google"
"URL"="http://www.google.com/search?q={searchTerms}&sourceid=ie7&rls=com.microsoft:{language}:{referrer:source}&ie={inputEncoding?}&oe={outputEncoding?}"
"ShowSearchSuggestions"=dword:00000001
"SuggestionsURL"="http://clients5.google.com/complete/search?hl={language}&q={searchTerms}&client=ie8&inputencoding={inputEncoding}&outputencoding={outputEncoding}"
"OSDFileURL"="http://www.iegallery.com/en-US/AddOns/DownloadAddOn?resourceId=813"
"FaviconURL"="http://www.google.com/favicon.ico"
"SuggestionsURLFallback"="http://clients5.google.com/complete/search?hl={language}&q={searchTerms}&client=ie8&inputencoding={inputEncoding}&outputencoding={outputEncoding}"
"FaviconURLFallback"="http://www.google.com/favicon.ico"
"ShowTopResult"=dword:00000001
"SortIndex"=dword:00000005

ほかの検索プロバイダも、
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchScopes\
から下で探してきてエクスポートすればOkの様子。faviconのキャッシュはC:\Users\\AppData\LocalLow\Microsoft\Internet Explorer\Servicesの下にありますが、regから削れば勝手に取得してきてくれるかもしれません。
新規インストールのPCなどでお困りなら試してみてください。

WPFでマウスで選択した範囲をスクリーンキャプチャーする


どうも、クラスのprivateメンバー変数はlowerCamelCaseで、_は付けない派 id:kaorunです。
最近は間違った事を書いて質問に答えてもらうメソッドが巷で流行っているらしいですが、それはともかく、今回はWPFでさらっとスクリーンキャプチャをするためのサンプルを作ってみました。
まぁ、なんとなくそんな難しくないよね、と思っていたのですが、そういえばRxでマウスイベントの処理を自分で書いたことないんだよね、と、そのあたりを調べつつ試しに書いてみたらちょっと手こずりまして、助言をいただいたりもしてそれなりな感じになったのでエントリーにしておきます。

サンプルプロジェクトのダウンロードはこちら。
https://github.com/kaorun/kaorun_samples/archive/master.zip

問題のキャプチャー部分のコードはこんな感じです。
https://github.com/kaorun/kaorun_samples/blob/master/WpfScreenCaptureTest/WpfScreenCaptureTest/CaptureWindow.xaml.cs

using System;
using System.Reactive.Linq;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using System.Drawing;
using System.Windows.Interop;

namespace kaorun.samples
{
    /// <summary>
    /// Screen capture window class by selecting rectangle by Mouse with Rx event handling
    /// </summary>
    public partial class CaptureWindow : Window
    {
        public CaptureWindow()
        {
            InitializeComponent();
            
            Cursor = Cursors.Cross;
            var origin = new System.Windows.Point();
            
            var mouseDown = Observable.FromEventPattern<MouseEventArgs>(this, "MouseLeftButtonDown");
            var mouseMove = Observable.FromEventPattern<MouseEventArgs>(this, "MouseMove");
            var mouseUp = Observable.FromEventPattern<MouseEventArgs>(this, "MouseLeftButtonUp");

            mouseDown
                .Do(e => { origin = e.EventArgs.GetPosition(LayoutRoot); })
                .SelectMany(mouseMove)
                .TakeUntil(mouseUp)
                .Do(e =>
                {
                    var rect = BoundsRect(origin.X, origin.Y, e.EventArgs.GetPosition(LayoutRoot).X, e.EventArgs.GetPosition(LayoutRoot).Y);
                    selectionRect.Margin = new Thickness(rect.Left, rect.Top, this.Width - rect.Right, this.Height - rect.Bottom);
                    selectionRect.Width = rect.Width;
                    selectionRect.Height = rect.Height;
                })
                .LastAsync()
                .Subscribe(e =>
                {
                    this.Hide();

                    // Offsetting selection boundery, because transpalent WPF window shifted few pixel from screen coordinats
                    MainWindow.Captured = CaptureScreen(Rect.Offset(BoundsRect(origin.X, origin.Y, e.EventArgs.GetPosition(LayoutRoot).X, e.EventArgs.GetPosition(LayoutRoot).Y), this.Left, this.Top));
                    
                    Cursor = Cursors.Arrow;
                    this.Close();
                });
        }

        private static Rect BoundsRect(double left, double top, double right, double bottom)
        {
            return new Rect(Math.Min(left, right), Math.Min(top, bottom), Math.Abs(right - left), Math.Abs(bottom - top));
        }

        public static BitmapSource CaptureScreen(Rect rect)
        {
            using (var screenBmp = new Bitmap((int)rect.Width, (int)rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
            {
                using (var bmpGraphics = Graphics.FromImage(screenBmp))
                {
                    bmpGraphics.CopyFromScreen((int)rect.X, (int)rect.Y, 0, 0, screenBmp.Size);
                    return Imaging.CreateBitmapSourceFromHBitmap(screenBmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
                }
            }
        }
    }
}

今回は、ほぼ透明な全面ウインドウを張ってマウスイベントを取得し、選択後ウインドウを隠してからスクリーンショットを撮る、というアプローチで実装してみました。
Rxの練り方はもう一声エクセレントな書き方がありそうな気がしますが、今日はこれで精いっぱい。よりエレガントなRxの書き方は随時募集中です。
Rxを使わずにイベントハンドラでやった方が黒魔術っぽくなくてサンプルとしてわかりやすい気もしますが、習作もかねているのでこんなもんで。
細かい飾りとか、画像の保存もなにもしていないし、やっつけ実装で、タスクスイッチなど異常系の処理やマルチdpi・マルチスクリーン・DirectXなどは特にケアしていないので、ちゃんと実装するならもっと頑張った方がいい気がします。
まぁ、C#でざっくり書いて68行ですかね(何がだ)。上にも書いたようにもっとケアしないといけないことが沢山あるわけですが、細かい要請に答えたり挙動を調整していけるのがネイティブアプリの肝であり醍醐味でもあります。
ところで、Windows 10ではデスクトップアプリもAppX化することでWindows Storeに登録できるようになるようです。この手のちょっとしたツールアプリでもストアで販売できるようになると思うと楽しみですね。
Special thanks emomonさん!

Microsoftカンファレンスのセッション動画をまとめてDownloadするSession Downloader


どうも、ご無沙汰しております。id:kaorunです。
日々の生活に押し流されている毎日で、久々のエントリー更新です。
今年もBuild2015が幕を閉じましたね!
現地で参加された遠征組も、2日連続で夜半に3時間以上のキーノートに挑んだ半徹組も本当にお疲れさまでした。
Windows 10にHoloLensにAzureにと盛りだくさんな当たり年だったのではないでしょうか?
さて、例によって、いつものごとく、カンファレンスが終われば、大量のセッション資料と動画が放出されるのが昨今のマイクロソフトの習わし、ということで、Channel9には開催当日からザクザクと資料がUploadされています。
とはいえ、こんなんいちいち仕事中に観ていられんわ、ということで、ちまちまダウンロードしてスマフォやタブレットに詰め込んで持ち歩いたりするわけですが、今年のように目新しい情報山盛りの年はダウンロードだけでも難儀です。
というわけで、前置きが長くなりましたが、Buildや続いて開催されるIgniteなど、マイクロソフトのカンファレンス資料をまとめてガツンとダウンロードできるツールをご紹介。Tim Nilimaa氏のリリースしているその名もずばりSession Downloaderです。

Session Downloader  Infoworks
http://infoworks.tv/session-downloader/

ClickOnceアプリなので、Windowsマシンでリンクをクリックして開くだけ。
使い方もシンプルです。
プルダウンのリストからイベント名を選び、

ダウンロードしたいフォーマットを選びます。

で、Refreshボタンを押せば...

サムネール付きの一覧がずらっとでるので、あとは、選択してDownloadするだけ。


ちなみに、Filterでインクリメンタルサーチできると思うのですが、手元の環境ではキー入力するとばきっと死にます。また、ちまちま沢山選択してDownload実行しても死んだりします(Select AllだとOkでした)。W10TPだからか日本語だからか...。とりあえず、そのあたりはお試ししながら確認してみてください
ちまちまブラウザでやってるときりがない作業を、ストレージ容量さえあれば大人げなくSelect AllしてすべてDownloadしてしまうことさえも可能です。
さぁさぁ、次世代のMicrosoftテクノロジーの数々が無料で見放題。動画をがつがつ落としてもよし、PowerPointのスライドをまるっと取得して検索しても良し、です。
まぁ、たいがいまるっと落としてきても全部は観きれないんですけどね。