Haskellの文法地味に忘れている
「Haskellによる関数プログラミングの思考法」買った
今読んでいる。
買いましたわ〜 pic.twitter.com/zH2gcHDpNk
— マコー (@BPK_t) 2017年3月2日
最初の方の練習問題を少しやった。
stackで最新のHaskell環境を落としてきてやっているが、最新のghciは関数定義するときにletしなくてもよくなっているようで少しやりやすくなった。
4Kモニタを買った
買ったのはコレ
Acer CB281HKbmjdprx www.acer.com
XPS15に接続して使っている。
HDMI接続だと規格が1.2だからか4K出力で30fpsになっちゃうのでしょうがないからDisplayportで接続するしかない。
ただXPS15にはDisplayportは無いので、代わりにUSB-C端子から下記のUSB-C→Displayport変換アダプタを噛ませて接続している。
ちゃんと60fps出力されているもよう(マウスがカクカクしない)
SFTPサーバーをさくっと立ち上げる
開発用にSFTPサーバーが必要になり、とりあえずの接続確認程度が出来れば良かったのでDockerでサクッと構築した。以下その時のメモ
Docker image
これを利用させてもらう。
https://hub.docker.com/r/atmoz/sftp/
以下コマンドで実行
- SSH鍵を使わずにユーザーIDとパスワードのみの認証(ユーザーID:test_user, パスワード:test_pass)
- ホスト側のポート122にポートフォワード
docker run --name sftpserver -p 122:22 -d atmoz/sftp test_user:test_pass:::upload
WinSCPで接続確認
- Host name: localhost
- Port number: 122
- User name: test_user
- Password: test_user
Login押下したら、先程作成したuploadディレクトリにアクセスすることが出来た
Rust1.14でWebAssemblyを出力する(Windows10)
つい先日、Rust 1.14がリリースされた。
1.14の大きな変更点としてWebAssemblyのコンパイルが出来るようになった。
「experimental support for WebAssembly」とのことなのでまだまだ実験段階みたいな感じらしいがとりあえず試してみた。
Rust 1.14にアップデートする
rustup経由でのインストールが推奨されている。
細かな手順については、以前書いた以下の記事を参照(rustupでのインストールを追記した)。
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
Visual C++ ツールセットを有効にする
以下のコマンドを実行する。
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64
cmakeのインストール
以下のリンクから、「cmake-3.7.1-win64-x64.msi」をダウンロードしてインストールした。
インストールされたことを確認
>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
コンパイルが成功すると以下のファイルが生成される。
WebAssemblyの実行
Chrome Canaryのインストール
現行のChromeだとWebAssemblyに対応していないようなのでChrome Canaryをインストールする。
以下のリンクからインストーラをダウンロードしてインストールする。
WebAssemblyの有効化
Chrome Canaryのアドレスバーに「chrome://flags/#enable-webassembly」を入力してエンター
プルダウンメニューを有効にしてChrome Canaryを再起動する。
Server立てる
htmlとかwasmが生成されたディレクトリで以下のコマンドを実行する。
python -m SimpleHTTPServer
hello.htmlへアクセス
Chrome Canaryで「http://localhost:8000/hello.html」にアクセスする。
hello worldが表示された。
参考にしたページ
Announcing Rust 1.14 - The Rust Programming Language Blog
rustc fails to compile to asmjs on Windows · Issue #38489 · rust-lang/rust · GitHub
島根鳥取温泉巡り
らいんの湯
温泉巡りに行く前に入ったスーパー銭湯。もうすぐ閉店してしまうそうです。
木部谷温泉松乃湯
建物のすぐ横を源泉が流れている。温泉成分が地面に付着して鉄色になっている。
源泉。触ってみたけど冷たかった。冷泉らしい。
風呂
薬湯 小浜温泉 才市の湯
温泉津にある共同浴場の一つ。他の共同浴場に入る予定だったが年末なのでどこも閉まっていた。ここだけは唯一開いていた。
国民宿舎 さんべ荘
今年一番最初に入った温泉。人が居たので湯船の写真はない。色々な種類の露天風呂がありつい長居してしまった。
湯原温泉郷 砂湯
川の畔にある混浴露天風呂。人通りの多い道のすぐ横にあり観光客から丸見えなので女性にはおすすめ出来ない。入浴してるのもほぼ全員男性だけだったし。
三朝温泉河原露天風呂
ここも砂湯と同じような混浴露天風呂。砂湯よりは規模が小さい
薬師湯・湯村温泉観光交流センター
ゼロから作るDeepLearning買った
機械学習界隈で非常に分かりやすいと評判になっていた本を買いました。
買うか pic.twitter.com/fGSMKHkeb5
— マコー (@BPK_t) 2016年12月5日
まだ、途中までしか読んでないけど、確かに分かりやすいし説明が丁寧ですね。
この本は最小限のライブラリで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()
グラフが表示された