銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Azure CLI を使ってLinux VMにAzure Disk Encryptionを適用する

Azure Storageの暗号化については、すでにほとんど、くらう道さんでわかりやすく説明されています。

www.cloudou.net

最近のManaged DiskであればStorage Service Encryption(SSE)でデフォルトで暗号化されているので、これで十分ということも多いでしょう。

docs.microsoft.com

ただ、場合によってはAzure Disk Encryption (ADE)による暗号化が必要になるケースもあると聞きます。

docs.microsoft.com

ADEについてもくらう道さんの記事でPowerShellを使った方法は紹介されているのですが、Azure CLIを使った方法について今回まとめてみました。

続きを読む

Microsoft Q# Coding Contest Summer の解説が公開されています

先週土曜から月曜にかけて開催された Microsoft Q# Coding Contest — Summer 2018 が終了しました。自分は2問しかとけなかったのですが、解説が公開されています。

codeforces.com

解説本体はPDFで公開されています。

https://assets.codeforces.com/rounds/997-998/main-contest-editorial.pdf

Microsoft Q# Coding Contest warmupラウンドの自分の回答を公開しています

Microsoft Q# Coding Contest warmupラウンドが終了して結果として私は107位でした。自分にとってはたぶんこれが初めてのオンラインプログラミングコンテスト参加だったと思います。

f:id:tanaka733:20180704190050p:plain

また問題も公開されているようです。 codeforces.com

というわけで自分が提出した回答をGitHubに公開してみました。 github.com

問題そのものの解説はすでにあるようなので、

smijake3.hatenablog.com

最初の問題を例にどうやって実行したかを説明してみます。問題としては、状態{|0 \rangle}であるQubit型の引数qと1か-1であるInt型の引数signに与えられ、signが1であればqを{| + \rangle = \frac{1}{\sqrt{2}}(|0 \rangle + |1 \rangle)}、-1であればqを{| - \rangle = \frac{1}{\sqrt{2}}(|0 \rangle - |1 \rangle)}に変化させるoperationを記述するというものです。引数で渡された状態を変化させるため、このoperationは返り値を持ちません。

先日のエントリで書いた通り、QubitはC#のDriverクラスでは生成できないので、もうひとつQ#のoperationを作成し、その中でQubitを生成、operationを実行、実行した結果を確認、という手順を踏みます。というわけで、テスト用のQ#コードはこのようになります。

namespace Solution
{
    open Microsoft.Quantum.Primitive;
    open Microsoft.Quantum.Canon;
    open Microsoft.Quantum.Extensions.Diagnostics;

    operation Test() : () 
    {
        body 
        {
            using (register = Qubit[1])
            {
                let q = register[0];
                DumpMachine("dump-initial.txt");

                Solve(q,-1);
                DumpMachine("dump-0.txt");
                Reset(q);

                Solve(q,1);
                DumpMachine("dump-1.txt");
                Reset(q);
            }
        }
    }
}

usingでQubitを初期化、(必要はないですが)配列のindex0のQubitを変数qとしています。DumpMachineは引数にファイルパスをとって、そのパスにQubitの状態を出力します。Solve operationを実行したあと、DumpMachineで状態を出力、Resetで再度初期化を行っています。DumpMachineの出力結果は次のようになって、期待通りのoperationを記述できたことがわかります。

dump-initial.txt

Ids: [0;]
Wavefunction:
0:  1   0
1:  0   0

dump-0.txt

Ids: [0;]
Wavefunction:
0:  0.707107    0
1:  -0.707107   0

dump-1.txt

Ids: [0;]
Wavefunction:
0:  0.707107    0
1:  0.707107    0

まじめに測定するコードを書いてもいいと思うのですが、デバッグ目的ではDumpMachineがかなり便利でした。 Microsoft Q# Coding Contestの本戦は土曜1時(金曜深夜25時)からなので、W-cup観戦の合間にいかがでしょうか。