しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Windows Server 2016 の Windows Containers と Docker を使って IIS と ASP.NET を動かしてみた

Windows Server 2016 が MSDN からダウンロード出来るようになっていたので、Service Fabric Cluster 用に買った Intel NUC にインストールしてみました。

f:id:shiba-yan:20161014002113p:plain

Hyper-V 上に入れた 2016 で Windows Containers を試したとき、1 日経ってもコンテナが起動しなかったのでホスト OS に Windows Container をインストールして再度試しました。

MSDN のドキュメントも更新されているようなので、Docker を含んだセットアップは手順通り行いました。

ドキュメントにある .NET Core のサンプルはあっさり動作したので、前に Hyper-V 上だと実行に失敗した microsoft/iis イメージを実行してみます。

既に Windows Container と IIS を使って ASP.NET を動作させる方法が色んなところで紹介されてます。

ASP.NET アプリケーションを用意するのは正直面倒だったので、とりあえず IIS のデフォルトページが表示されるところまでやります。

イメージをそのまま pull して、実行するだけという簡単なコマンドです。

docker pull microsoft/iis

docker run -d -p 80:80 microsoft/iis

pull には物凄く時間がかかりますが、一度イメージを作成してしまえば起動は高速です。docker run を実行してから数秒でコンテナが起動しました。

docker ps で実行中のコンテナを確認できます。ポートの設定も同時に見れるので便利です。

f:id:shiba-yan:20161014003103p:plain

これでコンテナと同時に IIS も起動しているので、ブラウザで見るといつものページが表示されます。

ここまで時間は 30 分ぐらいかかりましたが、9 割がイメージのダウンロードと作成でした。

f:id:shiba-yan:20161014002753p:plain

理由はよくわかりませんでしたが、コンテナホストから localhost は見れませんでした。別のマシンからは表示されたので、実際にはあまり問題にならない気はします。

実行中のコンテナには docker exec を使えば入ることが出来ます。コンテナの ID が必要なので、予め docker ps を実行してコピーしておきます。

docker exec -i -t CONTAINER_ID cmd

powershell を指定してもいいのですが、背景色が狂ってしまって見にくかったのでとりあえず cmd で行きます。これを実行すると、コンテナに入ることが出来ます。

f:id:shiba-yan:20161014004026p:plain

コンテナホストは日本語 OS ですが、コンテナの中は英語になっていることが分かります。IIS がインストールされたコンテナなので inetpub がありますが、コンテナホストには存在していません。抜け出すには exit と入力するだけです。

機嫌よくなってきたので ASP.NET も簡単なアプリを用意して動かしてみることにしました。こっちも先人の知恵を頼りに Dockerfile を用意してイメージを作成します。

SHELL で powershell を使うようにすると、コマンドレットがそのまま使えるので便利ですね。ASP.NET の実行に必要な機能をインストールしておきます。

FROM microsoft/iis

SHELL ["powershell"]

RUN Install-WindowsFeature NET-Framework-45-ASPNET ; \
    Install-WindowsFeature Web-Asp-Net45

COPY . C:\\inetpub\\wwwroot

CMD ["ping", "-t", "localhost"]

何もしないとコンテナがすぐ終わってしまうので、終わらないような処理を最後に書いておきます。これは他にもっと良い手があるのではないかと思います。

Dockerfile をビルドした ASP.NET アプリケーションと同じディレクトリに置いて、docker build を実行してイメージを作成します。

f:id:shiba-yan:20161014011401p:plain

これも 2 回目以降はキャッシュが使われるので非常に高速です。

後はこれまで通り docker run に作成したイメージ ID を渡せば、そのイメージが起動します。

f:id:shiba-yan:20161014011912p:plain

ブラウザでアクセスすると、ASP.NET アプリケーションが実行されているのを確認できます。マシン名は Windows Containers によって適当に付けられているみたいです。

普通の Windows Server と IIS が動いているので、Dockerfile に必要な IIS 拡張をインストールする処理を書けば、URL Rewrite や ARR も問題なく使えると思います。Docker の理解が深まりました。

Outlook.com Premium を契約して独自ドメインのメールアドレスを作成してみた

いつの間にか Outlook.com Premium が Pilot から Preview になったみたいで、気が付いたら自分の Outlook.com のアカウントで使えるようになっていました。

いい加減に shibayan.jp なメールアドレスを作りたかったので、実際に Outlook.com Premium に登録をして独自ドメインの設定を行ってみました。

f:id:shiba-yan:20161008161709p:plain

https://premium.outlook.com/

世の中には Office 365 を一人で使う手遅れな人もいるみたいですが、僕みたいな一般人は Outlook.com Premium と Office 365 Solo で十分要件を満たせます。

Sign in すると最初にドメインの候補が表示されます。Microsoft アカウントのユーザー名が日本語なので盛大に文字化けしてましたが、取得済みのドメインを使うので「use my own domain」を選択します。

f:id:shiba-yan:20161008161942p:plain

事前の情報だと GoDaddy でドメインを取得する機能が付いているみたいです。

ドメインを入力する画面になるので、使いたいドメインを入れました。当然ながら shibayan.jp です。

f:id:shiba-yan:20161008161950p:plain

ボタンを押して進めていくと MX レコードの追加を求められました。ちゃんと設定せずに次に進もうとすると検証エラーになるみたいです。受信できなくなるので当然ですね。

f:id:shiba-yan:20161008161959p:plain

shibayan.jp は Azure DNS で管理しているので、Azure Portal から MX レコードをサクッと追加しておきました。昔に比べると使いやすくなった気がします。

f:id:shiba-yan:20161008162006p:plain

DNS に追加した MX レコードの検証に成功すると次の画面に進めます。

f:id:shiba-yan:20161008162329p:plain

次は SPF レコードと Outlook.com が独自に必要としている CNAME レコードを追加します。MX レコードと同じように Azure DNS を使ってポチポチと設定しました。

ここまでの作業で DNS 周りは完了したらしいので、最後に最初に作成するメールアドレスを決めます。ありがちですが、思いつかなかったので適当に決めておきました。

f:id:shiba-yan:20161008162344p:plain

やけにテンションの高いメッセージと共に確認ダイアログが表示されます。

f:id:shiba-yan:20161008162353p:plain

メールアドレスを決定すると、最後に Outlook.com Premium サブスクリプションの支払いが待ってます。トップページにあったように最初だけ年間 19.95 ドルで使えるようになっています。

f:id:shiba-yan:20161008162402p:plain

個人的にはどこかで値下げされたりするのではと思ってますが、大した金額ではないので払います。サブスクリプションのキャンセルは Microsoft アカウントの画面から行えるようだったので安心です。

扱いとしては Ad-free Outlook.com となっているみたいです。

f:id:shiba-yan:20161008163901p:plain

支払い後に Outlook.com Premium に戻ると、管理画面が表示されるようになります。ここからユーザーを招待したり、エイリアスの追加などが出来るようになってます。表示は少し遅いです。

f:id:shiba-yan:20161008164054p:plain

その後 Outlook.com の設定から差出人アドレスを変更すると、追加したドメインのメールアドレスとして送信出来るようになります。受信も問題なく使えるようになっているはずです。

f:id:shiba-yan:20161008163954p:plain

Microsoft アカウントのエイリアスとしても設定されていたので、プライマリに切り替えると追加したメールアドレスでログインできるようになる気がしますが、まだ怖くて試していないです。

そのあたりの検証は Office 365 MVP *1 な @kazuakix さんがしてくれます。

*1:社畜的な意味でもオフィスに 24/365

HockeyApp で配布したアプリケーションを Windows 10 Mobile にインストールする方法

最近は趣味で Windows 10 Mobile 向けにはてなブログのオレオレアプリを作っていたりもしますが、人柱になってくれる人が 2 人ほどいたので HockeyApp を使ってアプリケーションの配布を試しました。

Windows 10 では PowerShell スクリプトを叩くだけですが、よく考えたら Windows 10 Mobile にインストールする方法を知らなかったので、Phone ブログを書いてる人に聞いてみました。

仕方ないので自分で調べて試しました。どうやら WinAppDeployCmd というツールを使うみたいです。

Install Universal Windows Apps with the WinAppDeployCmd tool

WinAppDeployCmd を使った場合、証明書のインストールをしてくれないらしいので、インストールするためにはサイドロードモードにして自分で証明書を入れるか、開発者モードに切り替える必要があるみたいです。

f:id:shiba-yan:20160928010143p:plain:w450

めんどくさいのと開発用端末なので開発者モードにしてあります。

devices コマンドを実行すると、接続されている Windows 10 Mobile デバイスが見えるみたいなので、最初に実行して認識されているかと IP アドレスを確認します。

f:id:shiba-yan:20160928005654p:plain

USB 接続の場合はループバックアドレスになるみたいです。多分ですけど。

IP アドレスが分かれば、install コマンドを使って、HockeyApp で配布したアプリに含まれている appxbundle のインストールを行います。-file で appxbundle のフルパスを渡すだけです。

WinAppDeployCmd install -file "UWPApp.appxbundle" -ip 127.0.0.1

MSDN のサンプルでは appx になってましたが、appxbundle を指定しても問題なくインストールが出来ました。少し時間はかかりましたが、管理者権限とかいらないので結構簡単です。

f:id:shiba-yan:20160928005500p:plain

コマンド上ではインストールが完了したので Windows 10 Mobile 側を確認すると、ちゃんとアプリがインストールされていたので実行も問題なく出来ました。UWP 版のオレオレはてなブログアプリです。

f:id:shiba-yan:20160928011053p:plain:w450

閲覧系の機能は割と付けたつもりですが、まだまだ不十分かつ頻繁にクラッシュするので HockeyApp での配布を整えてのんびりやっていきたいと思っています。*1

かずあきさんのように人柱希望の方が居れば Twitter とかでメールアドレスを教えてもらえれば招待メールを投げることが出来ます。ほぼ居ないと思いますけど…。

*1:公式で UWP 版が出るとは思えないので。

UWP でアプリを作ってから 1 週間でやったことをまとめた

色々と苦労ばかりしてますが、何だかんだで UWP で作ったアプリの更新を頻繁に行っています。

情報が非常に少ないという点が苦労の原因なので、文句ばかり言わず調べた部分に関してはまとめます。実際にアプリに組み込んで試したことだけ書いてますが、間違っている可能性は高いです。

HockeyApp を有効化

Visual Studio から HockeyApp のクラッシュ分析を有効化すると、簡単にアカウント作ったりアプリの登録が出来ますが、AppId の設定は自分で行う必要があるみたいでした。

using Microsoft.HockeyApp;

public sealed partial class App
{
    public App()
    {
        HockeyClient.Current.Configure("APPID");

        InitializeComponent();

        Suspending += OnSuspending;
    }
}

公式のサンプルが InitializeComponent の前に呼び出していたので、同じようにしました。

f:id:shiba-yan:20160817214734p:plain

正しく設定が行えていると、HockeyApp のダッシュボードに情報が表示され始めます。最低でも Version が表示されていない場合は設定に失敗しているので、AppId を確認する必要があります。

課金処理を StoreContext API に変更

昔から存在している CurrentApp を使った課金処理は、Windows 10 Anniversary Update から新しく追加された StoreContext に置き換えられるようです。

https://msdn.microsoft.com/en-us/windows/uwp/monetize/in-app-purchases-and-trials

API が大きく変わっているのと、サンプルコードがいまいちでわかりにくかったので、実際に自分が書いたコードを参考までに載せておきます。正しいのかはわからないので自己責任で。

アドオンの購入は RequestPurchaseAsync メソッドに StoreId を渡すだけなので、これまでとあまり違いはないです。ProductId ではなく StoreId なので注意が必要です。

var context = StoreContext.GetDefault();

var result = await context.RequestPurchaseAsync(StoreId);

switch (result.Status)
{
    case StorePurchaseStatus.AlreadyPurchased:
        // 既に購入済み
        break;

    case StorePurchaseStatus.Succeeded:
        // 購入完了
        break;

    default:
        // エラー扱いにする
        return;
}

購入後は Status の値によってダイアログを出したりすることになると思います。

そして購入済みライセンスのチェックですが、新しい API では SKU という概念が追加されたみたいなので、これまでより少しめんどくさくなりました。

For a SKU, the Store ID has the format /xxxx, where xxxx is a 4-character alpha-numeric string that identifies a SKU for the product. For example, 9NBLGGH4R315/000N. This ID is returned by the StoreId property of a StoreSku object, and it is sometimes called the SKU Store ID.

In-app purchases and trials

情報自体は GetAppLicenseAsync メソッドで取得できますが、AddOnLicenses のキーは StoreSku から取得できる StoreId なので、単純にインデクサーで引くとエラーになります。

なので、LINQ を使って StartsWith で比較するか、StoreSku を先に調べて引っ張ってくるかの方法が必要になりそうです。挙動が不明だったので、私は後者を選びました。

// Durable なアドオンを取得する
var list = await context.GetAssociatedStoreProductsAsync(new[] { "Durable" });

// Skus は必ず 1 つ存在する
var skuStoreId = list.Products[StoreId].Skus[0].StoreId;

// ライセンス情報を取得
var license = await context.GetAppLicenseAsync();

// AddOnLicenses は KeyNotFoundException を投げる
if (license.AddOnLicenses.ContainsKey(skuStoreId) && license.AddOnLicenses[skuStoreId].IsActive)
{
    // アドオンを購入済み
}

ひとまず、これで StoreContext を使った IAP が動作するようになりました。

AdMediator が削除されたので変更

これまで Microsoft Store Engagement and Monetization SDK としてリリースされていた拡張が、先日新しく Microsoft Store Services SDK に変わりましたが、このタイミングで AdMediator が削除されました。

今後はサーバーサイドに切り替わっていくみたいですが、SDK がリリースされてもサーバー側がリリースされていないので、現状は Microsoft Advertising のみ利用可能です。

  • AdMediator is no longer being maintained as we shift to server side mediation.
    • For Windows 10 apps, an MSDN topic is coming out this week with prescriptive steps to refactor.
Microsoft Store Services SDK extension

英語版のドキュメントは既に Store Services SDK 向けに更新されています。

https://msdn.microsoft.com/windows/uwp/monetize/microsoft-store-services-sdk

おそらく近日中にサーバー側がリリースされるんでしょう、足並み揃えろという感は拭えませんが。

Feedback Hub の起動コードを変更

Insider 向け機能として提供されている Feedback Hub を使ったフィードバック機能ですが、Store Services SDK の更新に従って微妙に API が更新されています。

まず StoreServicesFeedbackLauncher.IsSupported メソッドを使って、利用可能かチェックします。

if (StoreServicesFeedbackLauncher.IsSupported())
{
    feedbackButton.Visibility = Visibility.Visible;
}

何故か IsSupported はメソッドに変更されています。このあたりイマイチですね。

実際に Feedback Hub を開くためには StoreServicesFeedbackLauncher.GetDefault メソッドでインスタンスを取得した後、LaunchAsync メソッドを呼び出します。

private async void FeedbackButton_Click(object sender, RoutedEventArgs e)
{
    await StoreServicesFeedbackLauncher.GetDefault().LaunchAsync();
}

この修正はシンプルなのですぐ対応できます。

実際にフィードバックが送られるとどうなるのかはよくわかっていないですが、めんどくさい部分を Windows Store が受け持ってくれるのは便利ですね。

Windows Phone 8.1 向けに作ったアプリを Windows 10 Mobile 向けに作り直してみた

最後に更新してから 1 年ほど放置していたアプリが、実はダウンロード数が順調に伸びていたのと MADOSMA Q601 を買ったので Windows 10 Mobile に作り直してみました。

作り直したと言っても、WinRT から UWP への変更点としてはプロジェクトファイルぐらいみたいですが、project.json 周りで嫌な思いしたくなかったので新規にプロジェクトを作りました。

UWP プロジェクトに既存のコードをコピーして、ビルドすると大体移植は完了といった感じです。しかし、アイコンサイズが大きく変わっているため、UWP Logo Maker で作り直しました。

基本的には透過画像が好まれますが、StoreLogo 系だけは背景色を付けておかないと、ダッシュボードでの表示が残念なことになります。リリースするともっと悲惨になったかもしれません。

あと、今回は Mobile 向けなので Package.appxmanifest の TargetDeviceFamily を Windows.Mobile に変えておきました。これで Mobile をターゲットにしていることになるらしいです。

<Dependencies>
  <TargetDeviceFamily Name="Windows.Mobile" MinVersion="10.0.10240.0" MaxVersionTested="10.0.10586.0" />
</Dependencies>

ストアに出すときに嵌ったのが、デフォルトテンプレートでは MinVersion と MaxVersionTested が 10.0.0.0 になっていて、審査前にリジェクトされたことでした。

UWP なので Windows 10 Mobile 以外でも動作しますが、ストア側で Mobile のみ配布するようにしました。

f:id:shiba-yan:20160802234551p:plain

運悪く土日を挟んでいたため審査には時間がかかり、さらにストアへの情報反映までにはもっと時間がかかりましたが、何とか UWP 版のリリースまで行えました。

今後も Feedback Hub への対応や、IAP の実装などいい感じの実験アプリとしてリリースしていきます。

Windows Phone 8.1 への対応を打ち切って、UWP 版だけのリリースにしてしまいましたが、世界的に見ると Windows 10 Mobile のシェアは Windows Phone 8.1 の半分以下らしいので、かなり早まった感があります。

このスライドは AdDuplex が毎月公開しているものですが、今回は何故か日本のシェアについて特集されているので読んでみると面白いと思います。特に Lumia がシェア 1 位の部分とか突っ込みどころだと思います。

MADOSMA Q601 をヨドバシの深夜受け取りを利用して買ってみた話

今日 28 日は MADOSMA Q601 の発売日です。初代 MADOSMA も結局発売日に買っていた私ですが、今回の Q601 はちょっとタイミングをずらそうかなと思っていました。自転車盗まれたし。

しかし、ふとヨドバシの商品詳細ページを見ると、アキヨドでは MADOSMA Q601 を 30 分以内に用意してくれるみたいだったので、無理だろと思いつつ注文してみたら買えてしまった話です。

注文してから 7 分後には商品の準備が出来たので取りに来いメールが届いたので、タクシーを使ってアキヨドまで出向いて購入してきました。

シャッターを都度開けるとか、地味に凄い手間かかってるなと思いました。

経緯は割と謎ですが、TL 最速で MADOSMA Q601 を購入できたようです。アキバに近いとこういう芸当が出来るのが結構面白いですね、多分もう二度とやらないとは思いますが。

開封してみた

当然ながら Q501 より箱は全体的に大きいですが、それ以外はあまり変わっていない感じです。

f:id:shiba-yan:20160728022540j:plain

開けると、さっそく本体のお目見えです。実機は触ってましたが、それでもやっぱり 6 型はかなり大きく見えます。自分の手は割と大きい方ですが、割とギリギリです。

f:id:shiba-yan:20160728022603j:plain

今回は液晶保護シートが付いていない気がします。Gorilla Glass 3 だからでしょうか。

電源を入れてみた

起動画面は新しい mouse のロゴになっていて、ちょっとかわいいです。

f:id:shiba-yan:20160728022707j:plain

解像度が Full HD なので広々としてます。設定を弄るとタイルを 4 つ横並びに出来るらしいですが、今のところは 3 つで良いかなという気がしています。

f:id:shiba-yan:20160728024939p:plain:w450

そして事前情報の通り、すぐに新しいビルドが落ちてくるので、早々にアップデートを行っておくのが良さそうです。いつも通りですが、やっぱり結構時間がかかる感じです。

f:id:shiba-yan:20160728025013p:plain:w450

この記事を書いている間、ずっとアップデートの歯車が回っているので、朝まで放置する予定です。

Continuum を Android TV で試してみた

折角なので Continuum を手持ちの 4K BRAVIA のディスプレイミラーリング機能を使って試してみました。Continuum アプリを起動して無線接続すると、すぐにテレビが見つかりました。

f:id:shiba-yan:20160728025049p:plain:w450

昔は Miracast の接続が全く安定していなかったのですが、テレビ側のアップデートでじわじわと改善されてきたのかもしれないです。地味に喜ばしいことです。

しかし、予想通りレスポンスはあまりよくなく、解像度もなんだか狂っているようです。

f:id:shiba-yan:20160728024517j:plain

明らかに縦方向に潰れているように見えます。解像度の設定を Continuum アプリ側で出来るのかなと思いましたが、特にそういう設定もなかったので相性なのかもしれないです。

ちゃんと Windows 10 の Miracast 拡張に対応した機器を買ったほうが良さそうです。

Android TV が Amazon ビデオに対応した関係上、HDMI が一つ空いたので、そこに Microsoft の Miracast アダプタを刺そうかと考えています。

MADOSMA を Windows 10 Mobile へアップグレードしてきた

今朝、そろそろ起きて出社しようと思ったタイミングで、MADOSMA の Windows 10 Mobile アップグレードサービスが店頭なら即日で行えるという情報をゲットしたので、開店と同時に行ってきました。

アップグレードに伴い初期化しますよ、という同意書にサインをして端末を預けると、大体 30 分後ぐらいにはアップグレードが完了したという電話がかかってきました。アップグレードには 3240 円かかります。

受け取った端末は初期化された状態だったのでセットアップを行います。ロック画面は Windows 10 でもお馴染みのやつなので、何となく安心感があります。

スタート画面には Cortana や Office 系のアイコンが予め揃っています。Cortana がとても新鮮です。

OS のバージョンは 10586.11 となっていたので、PC 版と全く同じバージョンのようです。

Edge も PC 版と同じ Edge 13 です。html5test.com の結果もとても良くなりました。

やっと使えるようになった Cortana は PC 版と設定を自動的に同期してくれている感じがします。かずあきさんの年収とか、サービス残業時間を答えてくれると面白いのですが、まだそういった機能は無いようです。

8.1 ではダメダメだったマップは荒いですが、かなり良くなりました。解像度が低いのが気になります。

秋葉原のマウスコンピューターダイレクトショップは 19 時まで営業しているので、早く Windows 10 Mobile を入手したい人は仕事をさぼって走りましょう。

最初のリリースですが、完成度がとても高く感じました。これからも MADOSMA を応援していきたいです。

Windows 10 バージョン 1511 にアップデートすると iPad Air 2 も充電できる気がする

何故か手持ちの Windows 10 にはバージョン 1511 が Windows Update で落ちてこなかったので、直接 ISO を使ってアップグレードを行いました。メディア作成ツールでも出来るみたいです。

丸ごとアップデートになってるっぽいですが、40 分ぐらいでアップデート出来たので早く感じました。

Windows Update を待てない、堪え性のない人が思ったより多いみたいですね。

それはともかく、torne mobile でアニメを見るために iPad Air 2 をバージョン 1511 にアップデートした MacBook Pro に繋ぐと、充電中の表示になることに気が付きました。

これまでは MacBook Pro であっても Windows 10 で使っている場合には「充電していません」という表示になっていました。Apple のサポートには USB での給電が足りない場合に表示されるとあります。

一部の USB 2.0 ポートおよびアクセサリでは、iPad の充電に必要な電力が供給されない場合があります。このような状況では、ステータスバーのバッテリーアイコンの横に「充電していません」というメッセージが表示されます。

iPhone や iPod touch が充電されない場合 - Apple サポート (日本)

ビルド 10240 の時は「充電していません」表示になっていたと思いますが、恐らくアップデート後には iPad 側を見ても充電中表示になるようになった気がします。

ドライバーがアップデートされたなどの理由で、USB 周りの挙動が変わったのかも知れません。

ただし充電の速度はこれまでと同様に結構遅いです。10% 増えるのに 30 分はかかっていそうです。

WinQuickLook v1.0 を公開しました

Twitter では密かにバージョンアップを続けていましたが、個人的に満足できるレベルまで機能を追加できたので、一旦 v1.0 として公開してみることにしました。

ダウンロードは以下のリンクからどうぞ。

https://github.com/shibayan/WinQuickLook/releases/latest

Windows 10 専用の API を使っているので、それ以外のバージョンでは動きません。

ウィンドウの半透明化

WPF Window 周りの処理をガラッと変更したので、ついでに Windows 10 で追加された隠し API を使ってウィンドウ自体を半透明化しました。画像を表示する時、透過部分が分かりやすくなりました。

透明度やベースカラーは選べるようにした方が幸せかもしれませんね。将来的に考えます。

動画プレビュー時にコントロールを追加

動画プレビューをブログ公開バージョンに入れていたか覚えてないですが、これまでは途中で一時停止やシークといった基本操作が行えなかったので、簡単にコントロールを追加しました。

全体の再生時間の表示も付けています。再生時間もどこかに付けたいですね。

音楽ファイルのプレビューに対応

殆ど処理的には動画プレビューから持ってきただけですが、音楽ファイルの再生も行えるようになりました。

最近の Windows ではファイルに埋め込まれたアートワークをサムネイルにしてくれるので、個別に対応することなくアートワークを表示することが出来ます。

未対応ファイル、ディレクトリの表示改善

対応していないファイルやディレクトリはサムネイルを表示するだけだったのですが、Quick Look っぽくファイルの詳細な情報を表示するようにしました。

ディレクトリの場合は項目数が出ますが、これは第一階層にある項目数になります。

HTML プレビューのドキュメントモードを IE11 相当に

WebBrowser コントロールを使うと、デフォルトでドキュメントモードが Quirks になるみたいなので、レジストリの項目を使って IE11 相当のドキュメントモードになるようにしました。

Internet Feature Controls (B..C) (Internet Explorer) | Microsoft Learn

これで HTML5 や CSS3 を使ったページでも正しく表示されるようになります。

スタートアップへの自動登録

基本的に常駐するタイプのアプリケーションなので、スタートアップに追加するコマンドを付けました。

スタートメニューの Startup フォルダにリンクを作成するだけの簡単な方法です。

通知領域アイコンのクリックでアクティブ化

プレビューウィンドウがフォーカスを失っても表示されたままになるように変更したので、通知領域アイコンをクリックすることで一時的に最前面へ持ってくるようにしました。

複数起動ブロック

キーボードフックを使っているので Mutex を使って、複数起動させない処理を追加しました。

今後の予定など

  • マルチモニターへのちゃんとした対応
  • プレビューサイズの最適化
    • 動画の場合はサイズ計算が割と適当な感じ
    • IPreviewHandler はサイズ決め打ちなので何とかしたい
  • ちゃんとしたアイコンを付ける
  • 対応ファイル形式の拡充
    • C# などソースコードは色を付けて表示したい

GitHub にソースコードを置いて開発しているので、どっかのタイミングで公開したいです。

追記

準備が整った気がしたので、GitHub でソースの公開を始めました。AppVeyor を試しに使っています。

少しだけメモリ効率を改善したので v1.1.0 を出しました。Release からダウンロード出来ます。

オーストラリアで 3 キャリア分のプリペイド SIM を買って MADOSMA で使ってみた

オーストラリアに居る間に 3 キャリア分の SIM を買って、MADOSMA で試してみたのでまとめます。実際には 1 キャリア分だけ試せてませんが、SIM は買ったので含めておきます。

ちなみに MADOSMA でオーストラリアの LTE が使えるのかは既に書きました。

プリペイド SIM を販売しているキャリアは Optus / Vodafone AU / Telstra の 3 つになります。

空港では Optus や Vodafone AU のショップがあるので、割と簡単に入手出来るようです。Telstra に関しては市内のスーパーで売っていたので購入しました。基本的に $2 で買えます。

Optus

既に Optus に関しては書いたので割と省略しておきます。LTE のエリアはまあまあ広いですが HSPA に落ちることも度々ありました。特にタスマニアでは LTE は市内だけでした。

$10 単位でチャージ出来て、1 日に利用可能な最大データ通信料は $4 で 1GB です。この制限を超えると、その日は通信できなくなるので注意したいところです。

Vodafone AU

ケアンズで Vodafone AU の SIM を買い、$10 の Combo Plan でアクティベーションを行いました。

7 日間だけ使えるプランで 350MB しかデータ通信が付いていませんが、Vodafone AU は 1 日 $3 で 2GB 分データ通信量を追加できるので、大量に通信したい場合は Optus よりも便利です。

LTE のエリアは Optus と同じぐらいだと感じました。スピードもそれなり速いです。

ただし、グリーン島のビーチで試した時には全く繋がりませんでした。エリアは狭いのかもしれません。

Telstra

日本で言うところの docomo に相当するのが Telstra です。スーパーで SIM を買ってアクティベーションを行ったのですが、帰国するまでにアクティベーションが完了しませんでした。

少し先人を調べてみると、システム的な問題で 30 時間ぐらいかかることがあるらしいです。その場合は Telstra のお店に行けば良いみたいですが、ケアンズは駅にしかお店が無かったので行けませんでした。

今調べてみても、まだ完了していませんでした。短期滞在者が使うには向いていないようです。LTE のエリアは一番広いと聞いたので、試せなかったのが残念でなりません。

おまけ:電話番号が表示されない

あまり実害はないですが、Windows Phone の電話アプリを使って、現在の電話番号を確認することが何故か出来ませんでした。電話番号が表示されるべき場所自体が存在していません。

仕方ないので和歌山にいるかずあきさんの携帯にイタ電をして確認しましたが、後から思うと SMS に電話番号が毎回載っていたので、単なる国際イタ電になりました。