Raspberry PI + Windows 10 IoT + C#でHello World!
Raspberry PIの開発にはVisual Studio2015とWindowsDeveloperProgramForIoTが必要です。VS2015はRC版が無料で入手できます。WindowsDeveloperProgramForIoTはOSのイメージファイルと一緒ついてくるのでインストールします。
Raspberry PIで動くのはWindows Universal Appです。当然x86用に作られた通常のexeは動きません。残念ですがGDIがサポートされないためWindows Form Appも動かすことはできません。
Universal AppのUIはXAMLで記述します。
プログラムの作成
Raspberry PIへの転送、実行
- プラットフォームをARMに変更
- Deviceからリモートコンピュータを選択
-
リモート接続ダイアログの設定
アドレスにRaspberry PIのIPアドレスを入力。Raspbarry PIの画面から確認できます。
認証モードは”なし”で選択ボタンをクリック -
F5で実行
- ビルドの後自動で配置が行われRaspberry PI上でプログラムが起動します。
マウスを接続すれば通常のGUIと同じように操作できます。(私の環境では反応が鈍くボタンを長めに押す必要があることがありました。)
デフォルトでリモートでバッグが有効になっているため複雑な設定等は一切することなく実行、デバッグができます。
ブレークポイントやクイックウォッチ等も普通に動作します。もちろんステップ実行もできます。
従来のエンベデッド開発ではデバッグ環境の構築が難しかったり機能が貧弱な事が多かったですがWindows 10 IoT+Raspberry PiではWindows Appと同等のデバッグ環境が簡単に構築できます。
今回作成したプロジェクトをこちらに置いておきます。
Windows 10 IoTを(Windows 10のマシン無しで)Raspberry PIにインストールする
Windows 10 IoTをRaspberry PIにインストールします。
2015/07/07追記 : 最新のWindows 10 IoTにはイメージ書き込みツールが付属しています。Windows8でも動作します。詳細は Windows 10 IoT Insider Previewの新しいバージョンが出ましたをご確認ください。
用意する物
- Raspberry PI 2
- Raspberry PIに電力を供給する電源。
USBで最低1A以上(2A以上が望ましい)安定して供給できる物。PCのUSBポートだと厳しいです。 - 8GB以上のMicro SD
【Amazon.co.jp限定】Transcend microSDHCカード 16GB Class10 (無期限保証) Newニンテンドー3DS 動作確認済み TS16GUSDHC10E (FFP)
- 出版社/メーカー: トランセンド・ジャパン
- メディア: Personal Computers
- この商品を含むブログを見る
- LANケーブル
- ディスプレイ、HDMIケーブル、Micro USBケーブル
- WindowsPC
Windows10必須と言われてますがWindows 8でもできます。7以前は未確認です。
手順
インストールイメージの入手
- Connect への登録
https://connect.microsoft.com/windowsembeddediot/SelfNomination.aspx?ProgramID=8558 - アンケートという名の利用規約に同意
https://connect.microsoft.com/windowsembeddedIoT/Survey/MandatorySurveys.aspx - Raspberry PI用のイメージをダウンロード
http://connect.microsoft.com/windowsembeddedIoT/Downloads/DownloadDetails.aspx?DownloadID=57782
下の方のダウンロードボタンを押してもダメなので「単一のファイルをダウンロードする」のリンクからダウンロード
dism.exeの入手
※Windows 10のマシンがあればこの手順は省略できます
イメージのSDカードへの書き込みにはdism.exeを使用しますが、書き込みに使用する/ApplyDriveオプションがWindows 10以降のバージョンにしか搭載されていません。
そのため、Windows 8で実行するには別途dism.exeを入手する必要があります。
dism.exeはWindows ADK for Windows 10に含まれています。
https://msdn.microsoft.com/ja-jp/windows/hardware/dn913721.aspx
の下の方のリンクからWindows ADK for Windows 10をダウンロードしインストールコンポーネントのImaging And Configration Designerを選択します。(ほかいくつかのコンポーネントが選択されます)
イメージ書き込み
イメージをSDカードに書き込みます
- ディスクIDの確認
管理者モードでコマンドプロンプトを起動し diskpart を実行します。
list disk コマンドでディスク一覧を表示します。
ディスク n と書かれているのディスクのIDです。 - 書き込み
Windows 10の場合は普通の管理者モードのコマンドプロンプト、ADKをインストールした場合はスタートメニューの Deployment and Imaging Tools Environment からコマンドプロンプトを起動します。
ダウンロードしたイメージファイルのディレクトリへ移動して
dism.exe /Apply-Image /ImageFile:flash.ffu /ApplyDrive:\\.\PhysicalDriveN /SkipPlatformCheck
で書き込みます。 N の部分を先ほど確認したディスクIDに置き換えます
起動
ディスプレイとLANケーブルと電源を接続すると起動が始まりしばらくするとWindows 10 IoTの画面が出てきます。
初回起動時にLANに接続されていないと正常に動作しなくなるという話を耳にしましたが詳細は未確認です。この時はイメージ書き込みからやり直せば復旧するはずです。
ポケモンパンの暗号を解読する
情報セキュリティスペシャリストなので暗号の話をしますw
法政大の生協へ暗号文でポケモンパン入荷のリクエストがあり、解読して暗号で回答した事が話題になっています。
ひとことカードからのリクエストでポケモンパンを入荷したよ〜☆ポケモン好きの人はぜひ買ってみてね〜 pic.twitter.com/xT6E5UguX1
— タマえもん (@hoseitamaemon) 2015, 3月 31
これを解読したいと思います。
まずは文字に置き換え
画像のままではどうにもならないのでまずは文字に置き換えます。
長年の経験と勘(wからイロハ順のカタカナにしました。
特に難しいことはやっていません。目視で似た記号に文字を割り当てるだけです。
このやり方だとシとツのように似た文字があった場合区別がつかず同じ字を割り当てたり同じ字を別の字に割り当てて詰む可能性もありますがそのときはあきらめるだけですw
イロハニハホ学部
ご意見・ご質問
ヘトニチリトヌヘハヌ
ヌロルニハ トヌチヲハホイホリハイル
リルワホ ヘハヌ カハニチ カチ ホホヌトカチ
トホヨチ ホヨハカハニホヨハホ カチワル
ロトタトイレホニル トヌチヲハホイホリハイル
回答
ヲトロトソト ハタホヲハヨトヲトツハホリハワル
イレホヲハヨルヌホ ヌロルニハワレホリハイルヌチ
ニトタチニハタハリト ロトタトイレホニル
トヌチヲハホワレホリハワル ネネ
回答者 ヨハリハチリトヌ 部
ヘトニチリトヌ イルニホ
これで統計等の解析ができるようになります。
頻度分析
暗号解析の基本中の基本である頻度分析をします。
言語により使用される文字の種類や出てくる割合に偏りがあるのでどのような言語で書かれているのか推定することができます。
使用されている文字の種類が20種であることから各記号がアルファベットに対応づけられる換字式暗号であることが予想されます。
暗号文と平文を同じ文字で表記すると面倒なことになるため、この場合アルファベット以外で書くことが望ましいです。置き換えの時の長年の経験と勘(wが生かされましたw
英語、日本語の文字の頻度は文字頻度表を参考にしました
日本語のローマ字で書いた場合母音になるaiueoの5文字がの頻度が高くなります。また、ローマ字では使われないもしくは頻度が非常に低い文字(d,j,l,q,v,x,z)があるため文字種が20前後になります。
グラフからもどちらかといえば日本語に近いです。
このことから使用される言語は日本語のローマ字表記であると思われます。
現代のコンピュータで使用される暗号は出てくる文字に偏りが出ないように設計されているので頻度分析は無意味です。チ | ト | ヌ | ネ | ハ | ホ | ル |
5 | 2 | 4 | 1 | 1 | 5 | 7 |
文字数は7でネは回答の最後に1カ所ネネとだけ出てくるので特殊な文字である可能性が高いです。それを考慮すれば6文字で日本語ローマ字で最後に出てくる可能性のあるaiueonと一致します。
文字の順序を入れ替えたり(転置式暗号)前後の文字によって文字が変わったり(多表式換字)すればこのような傾向にはならないため単一換字式暗号である可能性が高いと思われます。
文章の推定
まずはさっきの母音っぽい文字に色を付けてみます。
イロハニハホ学部
ご意見・ご質問
ヘトニチリトヌヘハヌ
ヌロルニハ トヌチヲハホイホリハイル
リルワホ ヘハヌ カハニチ カチ ホホヌトカチ
トホヨチ ホヨハカハニホヨハホ カチワル
ロトタトイレホニル トヌチヲハホイホリハイル
回答
ヲトロトソト ハタホヲハヨトヲトツハホリハワル
イレホヲハヨルヌホ ヌロルニハワレホリハイルヌチ
ニトタチニハタハリト ロトタトイレホニル
トヌチヲハホワレホリハワル ネネ
回答者 ヨハリハチリトヌ 部
ヘトニチリトヌ イルニホ
なんかあってそうな気がしますw
生協に対する意見とその回答なので回答の最初のほうに「arigatougozaimasu」という文章が含まれていると推測できます。
1文字足りませんが"う"が無いとすれば
arigatogozaimasu
の部分が文字数と母音の位置が完全に一致します。
また、ポケモンパンの入荷の依頼なのでご意見のほうに「pokemonpan」が含まれるはずです。 a,o,eがわかっているので 「pトkeリトnpハn」ですが、ヘトニチリトヌヘハヌの箇所が一致しました。
となります。イロakai学部
ご意見・ご質問
pokemonpan
nロuka onegaiイimaイu
musi pan カake カe iinoカe
oite itaカakitai カesu
ロoroイレiku onegaiイimaイu
回答
goロoソo arigatogozaimasu
イレigatuni nロukasレimaイune
korekaramo ロoroイレiku
onegaisレimasu ネネ
回答者 tamaemon 部
pokemon イuki
nロuka→ にゅうか
ロoroイレiku→よろしく
onegaiイimaイu→おねがいします
カake カe iinoカe→だけ で いいので
goロoソo→ごよ(う)ぼ(う)
から
ロ→y、イ→s、レ→h、カ→d、ソ→b
になりそうです。
イ、ワが同じ記号なのに別の文字を割り振ってる事に気付きましたが特に問題はなさそうですw
当てはめると
syakai学部
ご意見・ご質問
pokemonpan
nyuka onegaisimasu
musi pan dake de iinode
oite itadakitai desu
yoroshiku onegaisimasu
回答
goyobo arigatogozaimasu
shigatuni nyukashimasune
korekaramo yoroshiku
onegaishimasu ネネ
回答者 tamaemon 部
pokemon suki
となりました。「ネネ」はよくわからないけど「!!」じゃないでしょうか。形も似てるし。 というわけで解読結果は
社会学部
ご意見・ご質問
ポケモンパン
入荷 お願いします
蒸し パン だけ で いいので
置いて いただきたい です
よろしく おねがいします
回答
ご要望 ありがとうございます
四月に 入荷しますね
これからも よろしく
お願いします !!
回答者 タマえもん 部
ポケモン 好き
となりました。
どうやらアルファベットを変形させた文字だったようです。
もう少し高度な頻度分析とかの統計とか単語辞書を使った解析とかしようかと思ってましたが必要なかったようですw
XAMLでWindowsFormアプリケーションを作成する
残念な事にXAMLとWPFが混同されてたり、XAMLはWPF専用の言語と誤解される事例が多々あります。
実際にはXAMLは「CLRにおけるオブジェクトのインスタンスを生成するためのマークアップ言語」であり、WPF専用ではありません。
WF(Windows Workflow Foundation)等でも使用されますし、Windows Formの.Designer.csに相当する物をXAMLで書く事もできます。
- WindowsFormアプリケーションを作成する
- Form1.Designer.csを削除
- Form1.xaml(テキストファイル)を作成
- Form1.csにイベントハンドラを追加
- PresentationCore,PresentationFramework,System.Xaml,WindowsBaseの参照を追加
実行するとテキストボックストラベルとボタンのフォームが現れ、テキストボックスに名前を入れてボタンを押すと挨拶をします。
このXAMLは普通にデザイナでWindowsFormを作成して.Designer.csを手動でXAMLに変換しました。
デザイナの支援なしにWindowsFormを作成するのはかなり面倒ですし何のメリットも無いと思います。
プロジェクトファイルをこちらに置いておきます。XamlWindowsForm.zip
WindowsServer2012で記憶域プールを移行したときは自動アタッチされない
WindowsServer2012間で記憶域プールを移行したのですが、再起動するとドライブが消えるという現象が発生しました。
8と2012では記憶域プールの使用が若干異なり、新しいマシンに移行したとき2012では起動時に自動でアタッチされないようになっています。
しばらく普通に使えていたのにWindowsUpdateして再起動したらドライブが消えるという恐ろしい現象が発生します。サーバーはあまり再起動しないので発見が遅れるかもしません。
Power shellからIsManualAttachをFalseにすることで起動時に自動でアタッチされるようになります。
PS C:\Users\Administrator> Get-VirtualDisk Main
FriendlyName ResiliencySettingNa OperationalStatus HealthStatus IsManualAttach Size
me
------------ ------------------- ----------------- ------------ -------------- ----
Main Mirror OK Healthy True 4 TB
PS C:\Users\Administrator> Set-VirtualDisk -IsManualAttach $False Main
PS C:\Users\Administrator> Get-VirtualDisk Main
FriendlyName ResiliencySettingNa OperationalStatus HealthStatus IsManualAttach Size
me
------------ ------------------- ----------------- ------------ -------------- ----
Main Mirror OK Healthy False 4 TB