Rust1.14でWebAssemblyを出力する(Windows10)

つい先日、Rust 1.14がリリースされた。
1.14の大きな変更点としてWebAssemblyのコンパイルが出来るようになった。
「experimental support for WebAssembly」とのことなのでまだまだ実験段階みたいな感じらしいがとりあえず試してみた。

blog.rust-lang.org

Rust 1.14にアップデートする

rustup経由でのインストールが推奨されている。
細かな手順については、以前書いた以下の記事を参照(rustupでのインストールを追記した)。

hkou.hatenablog.com

1.14にVersionUpされていることを確認する。

>rustc --version
rustc 1.14.0 (e8a012324 2016-12-16)

Visual Studio 2013のインストール

Emscriptenコンパイルをするために必要。
注意点:VS2013(2015とか2017ではない)
自分の環境ではVS2015が既に入ってたので、それで代用しようとしたけど上手くいかなかった。

Microsoft Visual Studio Express 2013 for Windows Desktop Update 5

Download Microsoft Visual Studio Express 2013 for Windows Desktop Update 5 from Official Microsoft Download Center

Visual C++ ツールセットを有効にする

以下のコマンドを実行する。

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64

cmakeのインストール

以下のリンクから、「cmake-3.7.1-win64-x64.msi」をダウンロードしてインストールした。

Download | CMake

インストールされたことを確認

>cmake -version
cmake version 3.7.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Emscriptenのインストール

RustからWebAssemblyを実行するにはversion1.37が必要だが、インストーラとして提供されているのは現時点で1.35なのでインストールしたあとにversion upしてやる必要がある。
とりあえず以下のページからインストーラー「emsdk-1.35.0-web-64bit.exe」をダウンロードしてインストールする。

Download and install — Emscripten 1.36.14 documentation

1.37にupdate

以下のコマンドを実行。コンパイルがはじまるので終わるまで気長に待つ(40分ぐらいかかった)

emsdk update
emsdk install sdk-incoming-64bit

コンパイルが終わったら以下のコマンドを実行して有効にする。

emsdk activate sdk-incoming-64bit

1.37になったことを確認する。

>emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 1.37.1

Rustコードコンパイル

WebAssemblyのtargetを追加

以下のコマンドを実行してtargetを追加

rustup target add wasm32-unknown-emscripten

Rustコード

とりあえずRust BlogのSampleどおりにHelloWorldのコードを書いて保存。(hello.rs)

fn main() {
    println!("hello world");
}

WebAssemblyにコンパイルする

RustBlogのコマンドそのままだと上手く動かなかった。Windowsの場合、linkerを明示的に指定してやる必要がある。(-C linker=emcc.bat の部分)

rustc --target=wasm32-unknown-emscripten -C linker=emcc.bat hello.rs -o hello.html

コンパイルが成功すると以下のファイルが生成される。

f:id:hkou:20170107101002p:plain

WebAssemblyの実行

Chrome Canaryのインストール

現行のChromeだとWebAssemblyに対応していないようなのでChrome Canaryをインストールする。
以下のリンクからインストーラをダウンロードしてインストールする。

www.google.co.jp

WebAssemblyの有効化

Chrome Canaryのアドレスバーに「chrome://flags/#enable-webassembly」を入力してエンター
プルダウンメニューを有効にしてChrome Canaryを再起動する。

f:id:hkou:20170107101432p:plain

Server立てる

htmlとかwasmが生成されたディレクトリで以下のコマンドを実行する。

python -m SimpleHTTPServer

hello.htmlへアクセス

Chrome Canaryで「http://localhost:8000/hello.html」にアクセスする。
hello worldが表示された。

f:id:hkou:20170107101924p:plain

参考にしたページ

Announcing Rust 1.14 - The Rust Programming Language Blog

rustc fails to compile to asmjs on Windows · Issue #38489 · rust-lang/rust · GitHub

RustからWebAssemblyにコンパイルしてみる - fine, later feeling

島根鳥取温泉巡り

らいんの湯

温泉巡りに行く前に入ったスーパー銭湯。もうすぐ閉店してしまうそうです。 f:id:hkou:20161230213837j:plain

木部谷温泉松乃湯

f:id:hkou:20161231144244j:plain

建物のすぐ横を源泉が流れている。温泉成分が地面に付着して鉄色になっている。 f:id:hkou:20161231144338j:plain

源泉。触ってみたけど冷たかった。冷泉らしい。 f:id:hkou:20161231144454j:plain

風呂 f:id:hkou:20161231145523j:plain

薬湯 小浜温泉 才市の湯

温泉津にある共同浴場の一つ。他の共同浴場に入る予定だったが年末なのでどこも閉まっていた。ここだけは唯一開いていた。 f:id:hkou:20161231184037j:plain f:id:hkou:20161231191512j:plain f:id:hkou:20161231193334j:plain

国民宿舎 さんべ荘

今年一番最初に入った温泉。人が居たので湯船の写真はない。色々な種類の露天風呂がありつい長居してしまった。 f:id:hkou:20170101093730j:plain f:id:hkou:20170101103500j:plain

湯原温泉郷 砂湯

川の畔にある混浴露天風呂。人通りの多い道のすぐ横にあり観光客から丸見えなので女性にはおすすめ出来ない。入浴してるのもほぼ全員男性だけだったし。

f:id:hkou:20170101165245j:plain

三朝温泉河原露天風呂

ここも砂湯と同じような混浴露天風呂。砂湯よりは規模が小さい

f:id:hkou:20170101190733j:plain f:id:hkou:20170101193445j:plain

薬師湯・湯村温泉観光交流センター

f:id:hkou:20170102121450j:plain

ゼロから作るDeepLearning買った

機械学習界隈で非常に分かりやすいと評判になっていた本を買いました。

まだ、途中までしか読んでないけど、確かに分かりやすいし説明が丁寧ですね。
この本は最小限のライブラリでDLを構築しようというのが主題なんですが、数値計算ではNumpy、グラフ表示にはMatplotlibを利用しています。
本文で例となるコードが出てくるので読むだけではなく自分で手を動かしたほうがより理解しやすいかなと思うので動作環境を構築してみます。

jupyter

jupyterを新たに構築しようかと思ったが、既にpull済みのtensorflowのimageにjupyterが含まれていたのでそれを流用する。
pandasが入っていなかったようなのでインストールする

コンテナに入る

docker start <container_id>
docker exec -it <container_id> bash

pandasをインストール

sudo pip install --upgrade pip
sudo pip install pandas

jupyterでコード書く

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
%matplotlib inline 

def sigmoid(x):
    return 1 / (1 + np.exp(-x))    

X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()

グラフが表示された

f:id:hkou:20161211095106p:plain

自分に合うプロテインが見つからない

どうも自分はホエイプロテインが身体に身体に合わないようで、トレーニング後とかにプロテインパウダーを水に溶かして飲むと翌日、腸のあたりに違和感があるというか微妙にお腹が痛いような感じになってしまう。そうなると食欲が無くなりあまりたくさんの量のごはんを食べることができなくなり1日に必要なカロリーを摂取することができなくなってしまう。

そもそも何故ホエイプロテインを摂取するとお腹が痛くなるのかというと、ホエイプロテインに乳糖(ラクトース)というものが含まれており、通常はこれを小腸で乳糖分解酵素(ラクターゼ)によって分解して吸収されるのだが、この酵素がうまく機能しない・少ないことにより分解されないまま腐敗して腸を刺激することで腹痛が発生するらしい。

こういった乳糖分解酵素がうまく働かない症状のことを「乳糖不耐症」と呼び、日本人は高い割合で乳糖不耐症であるらしい、おそらくわたしもこれに該当するのだろう。

さてこの乳糖不耐症だが克服する方法は特にないので対策としては「乳糖」を含んでいないプロテインを選ぶということになる。そこで次にわたしが選んだのはWPIタイプのプロテインだ。ホエイプロテインの原料は主に牛乳で、そこからタンパク質を抽出して作られる。この抽出方法によってWPC(Whey Protein Concentrate)、WPI(Whey Protein Isolate)などのタイプがあり、主にタンパク質以外の不純物の割合が変わってくる。

一般的にWPIの方が高純度なタンパク質となっており乳糖のような不純物は入っていない。しかしその分WPCに比べてWPIの方が値段が高い。WPIの中にもCFM製法とかイオン交換法とか抽出方法があるがそれは割愛して、とりあえずバルクスポーツのWPIタイプのホエイプロテインを購入して試してみた。試してみると確かに今までの飲んでいたWPCタイプよりはお腹の調子は良いようだが、まだ微妙にお腹が痛くなる、どうも乳糖だけが原因だけではなかったようだ。そもそもホエイ自体が良くないのかもしれない。

もうこうなるとあとはカゼインプロテインソイプロテイン、エッグプロテインを試してみるしかないが、カゼインプロテインは原料が牛乳だからホエイと同じ結果になりそうだし、エッグプロテインはなかなか無いし高いし卵たくさん食べたときに気持ち悪くなったのでこれもお腹こわしそうだ、消去法でソイプロテインになるのだろうか。

Windows10にRustの開発環境を構築する

Rustのインストール

以下のサイトから「Windows (GNU ABI †) (.msi)」の64bitバージョンをダウンロードする。

https://www.rust-lang.org/en-US/downloads.htmlwww.rust-lang.org

現在のバージョン:rust-1.13.0-x86_64-pc-windows-gnu.msi

VC版は別途「VC++ build tools」のインストールが必要になるらしい。詳細は以下。 users.rust-lang.org

とりあえずHelloWorld

インストールが完了したらとりあえず動くかどうか確認してみる。
Rustのビルドシステムは「cargo」を利用するらしい。

プロジェクトの作成

以下のコマンドを実行

cargo new project_name --bin

実行するとgitignoreなどを含むプロジェクトの雛形が作成される。

プロジェクトのビルド

雛形にHelloWorldのコードが既に入っているので特に何もせず、以下のコマンドを実行してビルドする。

cargo build

target/debugフォルダ直下にEXEが作成される。

実行

exe直実行でも良いが、cargo経由でも実行できる。

cargo run

実行結果

    Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target\debug\project_name.exe`
Hello, world!

RustyCodeをインストールする

エディタはVisual Studio Codeを利用する。
プラグインはRustyCodeを利用する。

marketplace.visualstudio.com

  1. Ctrl + Shit + P でコマンドパレットを開く
  2. ext install RustyCode

Rustup版に変更した

ver 1.14がリリースされ、アップデートするのが面倒だったのでこの際だからとRustをアンインストールして、rustup経由でインストールすることにした。

VC++ Build tools

rustup版(というかmsvc版、rustupでインストールするとmsvcになる)にはVC++ Build toolsが必要になるのでDL。 しかし、既にVisualStudioをインストール済みの為、単体インストールしようとするとエラーになった。
なのでプログラムの追加と削除からVSを選んで「変更」を選択し、C++関係のモジュールを全部選択して追加インストールをした。

rustup

以下のリンクからインストーラーをダウンロードし、実行する。

www.rustup.rs

以下のディレクトリにrustc, cargoなどがインストールされる。

%USERPROFILE%\\.cargo

Rustのソースコードをダウンロードする

rustup経由でダウンロードする。以下のコマンドを実行する。

rustup component add rust-src

RustyCodeのパス設定を変更する

ユーザー設定(setting.json)を開く
以下のように設定した。

//Rust
"rust.racerPath": "C:\\Users\\<username>\\.cargo\\bin\\racer.exe",
"rust.rustfmtPath": "C:\\Users\\<username>\\.cargo\\bin\\rustfmt.exe",    
"rust.rustLangSrcPath": "C:\\Users\\<username>\\.multirust\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\src\\rust\\src",
"rust.cargoPath": "C:\\Users\\<username>\\.cargo\\bin\\cargo.exe"

Dell XPS15 9550購入

仮想環境とか触る機会が増えて手持ちのMacBookProのスペックがだいぶつらくなってきた(主にメモリ)ので新しいPCを購入することにした。

以下の要求を満たすスペックのノートを探していた。

  • 15インチ
  • メモリ16GB以上
  • CPU 4Core以上

本当はMBP2016を考えていたんだけど、キーボードがペラペラ過ぎて微妙だったのと、最近Windowsが良い感じになってきたので最初からWindowsが搭載されたマシンを選ぶことにした。

開封

ビックカメラの通販で購入 f:id:hkou:20161125172518j:plain

開封 f:id:hkou:20161125172726j:plain

本体が入っている黒い箱。ACアダプタは別パッケージに入っていた。 f:id:hkou:20161125172912j:plain

本体です。ミッチリ入っている。 f:id:hkou:20161125172942j:plain

ミッチリ入ってたので出すのにちょっと苦労した。 f:id:hkou:20161125173117j:plain

光沢液晶なので、真正面から撮ると変なおっさんが映る f:id:hkou:20161125173142j:plain

キーボードレイアウト、ファンクションキーもESCも物理キーボードとして存在する。何故かEnterが小さいので少々押しづらいと感じることがある。MBP2016に比べるとストロークは十分にあるので気に入っている。 f:id:hkou:20161125173237j:plain

左側面の端子類

  • ACアダプタ
  • USB3.0
  • HDMI
  • Thunderbolt3
  • イヤフォンジャック

f:id:hkou:20161125173247j:plain

右側面の端子類

  • セキュリティケーブルを通す穴
  • バッテリーインジケータ
  • USB3.0
  • SDカードスロット

f:id:hkou:20161125173254j:plain

起動画面。4K液晶 f:id:hkou:20161125195433j:plain

やったこと

時間が経ったら絶対忘れてしまうと思うのでメモ

Windows10 Home -> Proへアップデート

購入時のデフォルトインストールされているOSはWindows10 Homeだった。
Docker for Windows使うつもりだったのでアップデート(HyperVが必要)

  1. コントロールパネルからライセンス認証を開く
  2. Storeに移動をクリック
  3. StoreからWindows10 Proアップグレード版購入(13000円ちょっと、クレカ購入)

以下のドキュメントを参考にした。
https://sway.com/-QIP_I34Z1xM9QKg

BIOSのアップデート

現時点の最新バージョンである「XPS_9550_1.2.14.exe」をインストールしたが、画面が若干チラつく現象が発生した。
ググってみるとどうも最新版のBIOSをインストールすると発生する問題らしい。

以下の対応方法を実施したところ、とりあえずチラツキ現象は発生しなくなった。

  • BIOSのダウングレード「XPS_9550_1.2.0.exe」
  • Intel HDグラフィックスの設定変更
    • プロパティから「電源」→「バッテリー駆動」→「パネルセルフリフレッシュ」を無効

インストールしたソフト

IntelliJ IDEA

www.jetbrains.com

Git

SourceTree

Visual Studio 2015

Visual Studio Code

Lhaplus

JDK1.8

Docker for Windows

Irfan Viewer

Alloy Analyzer

Evernote

Dropbox

VeraCrypt

Hain

github.com

KeePass

VLC

Chocolatey

chocolatey.org

気づき

本体下部にスピーカーが着いているのでキーボードを打っていると腕がスピーカーを覆うような形になり音が篭もる。

紅葉&温泉ツーリング

連日のお仕事で心が癒やしを求めていたので紅葉眺めながら温泉入ってきた。

山の上の方は、もう結構葉に色が着いてて紅葉のピークって感じ。 f:id:hkou:20161105102957j:plain

蓼科温泉 小斉の湯(たてしなおんせん こさいのゆ)

以前は旅館として経営されてたそうですが、今は日帰り入浴のみやっているそうです。 f:id:hkou:20161105121446j:plain

内湯。温度は結構熱め。匂いはそこまでしなかったけど少しぬるっとした泉質でなかなか良かった。
入ったときは先客が居たけれどすぐに出てしまったので貸し切り状態。一応今日は休日なんだけど、お客さん結構少なく感じた。こちらとしては独占できるから良いんだけど。 f:id:hkou:20161105123515j:plain

露天風呂、小斉の湯はいくつか露天風呂があるが、そのうちの「見晴らしの湯」へ入った。
こちらも誰も入っていなかったので独占できてしまった。 f:id:hkou:20161105124406j:plain

紅葉が真横にあって、温泉に反射してなかなか良い f:id:hkou:20161105124412j:plain

ここの露天風呂は標高1257メートルにあり、温泉に浸かりながら蓼科高原を一望することできる。 f:id:hkou:20161105124419j:plain