Docker for Windows が起動しなくなった問題を直した

久々に Docker for Windows を起動したら、Hardware assisted virtualization and data execution protection must be enabled in the BIOS. で起動しなくなってしまった。
タスクマネージャーで確認しても、Intel VT-x は有効化されてた。仮想化機能は有効状態なのに・・・

試してダメだったこと
  • Hyper-Vの再インストール
  • Docker for Windows の再インストール

うんともすんとも言わない。

成功したこと

エラー内容から、次のページがヒットした。

ハイパーバイザが実行されていないため仮想マシンが起動できません

このページで「ブート構成がおかしいのでは」という話になってたので、確認してみたらソレだった。

PS> bcdedit

Windows ブート ローダー
--------------------------------
hypervisorlaunchtype    Off

hypervisorlaunchtype の値を変更することで、無事、Docker が起動するようになった。

PS> bcdedit /set hypervisorlaunchtype auto

n度目のToDoアプリ作り

スマホアプリを作りたいけど、楽にやりたい。
という気分をかかえて、たぶん4回目になるReact Native入門を果たした。

ただ「エミュレータの動作が遅い」けど「実機で確認するには、有線接続や設定変更が大変」という面倒なところがあり、 今まで制作途中で何度も投げ出した。
しかし、今回は「アプリを入れるだけで、無線経由で実機動作確認可能」というサービスがあったので、渡りに船と思い、採用した。

expo.io

expo.io を採用した場合、ネイティブコードを書きづらい (たぶん書けない?) など、いくつか欠点があるけれど、 Webとほぼ同様に書ける範囲ならば、このサービスで十分に出来ると思う。
練習として、Hello World の次くらいに有名な ToDo アプリを試作した。

作った物

忘れん坊が使うアプリなので、forgotooon という名前で作成した。

github.com

ただし、このアプリ、アプリを終了すると、記録したToDoタスクが全て消えてしまう。
そう、アプリ自体も忘れん坊なのだ。 (永続化処理をやってない)

f:id:minowith:20180811210441g:plain

※スライドして自動削除・自動編集してるように見えるが、ボタンが表示されるだけである

使った主なライブラリ・サービス

Human Resource Machine を全クリした

友人から「解いて欲しい」と紹介されたゲーム Human Resource Machine を、今日クリアした。

ec.nintendo.com

7/28 に買ったらしいので、1週間で終わったのかー

めっちゃ面倒

ゲームは簡単な命令 (load/store/add/sub など) と多少のメモリ領域を駆使して、 無茶振りされる問題を解いていく物。

ただ解くだけならとても簡単だけど、このゲームは「最小サイズ」と「最速スピード」を求めてくる。
なるほど、俺たちがコンパイラになる、つまり「Human Resource Machine」ということなのか・・・

「最小サイズ」は命令節約なので、副作用とループを使って命令をいかに減らすかが勝負になる。
まぁ、これは簡単。

「最速スピード」は逆で、副作用とループ排除などを使って、いかにボトルネックを減らすかが勝負になる。
まさか、手動ループアンローリングやインデックス操作など、マイコンで培った技が活かされるとは・・・

最速スピードは考えるだけでも頭が痛くなって、ここ数日、頭痛がやまなかった原因だとも思う。

まぁ、今日で全部終わったんだ。これで晴れて自由の身だ。
(え、続編?)

Integromat の無料枠を使い切りそうになった

この前の記事

Nature Remo を買ったので温度を記録した - ひでたそ覚書帳

イベント連携に Integromat を使ったけど、そこからメールが来た。

Dear client,

Let us inform you, that you are about to run out of operations.

From 2018-07-24 - 2018-07-27 you have used 76% of your operations. You now have 244 operations left.

We recommend that you review the frequency of your scenarios that are currently running and try to optimize them or else your scenarios will be paused until your plan resets ( 2018-08-24 ) when you reach the limit.

Integromat は無料枠として 1000 operations と 100MB のデータ転送を提供してる。

ただ、前記事で作ったシナリオは「1シナリオ 3ope × 15分ごと」に動くので、1日で 288 ope が動くことになる。
つまり、4日弱で無料枠を使い切ってしまうのであった。

データを使う予定が無かったので、シナリオを止めた。
めでたしめでたし。

※ 高頻度で取りたい場合は、有料枠を買うか、別サービスにした方がいいなー

Nature Remo を買ったので温度を記録した

友人の勧めで Nature Remo mini を買った。

nature.global

赤外線リモコンだけでなく、温度計がついているようなので、API を叩いて温度を記録するようにした。

Local API

APIがswaggerで書いてるの、超素晴らしい。

http://swagger.nature.global/

Local API と Global API があるけど、現在(2018/07)だと、X-Requested-With を付けないと、400 Bad Request が返されてしまう。
ただ、付けても 404 Not Found が返されてしまう。何か違うのかな??

$ curl -X GET -i "http://192.168.0.27/messages"
HTTP/1.0 400 Bad Request
Server: Remo-mini/1.0.87-g8b06f0e
Content-Type: text/plain

$ curl -X GET -i "http://192.168.0.27/messages" -H "X-Requested-With: curl"
HTTP/1.0 404 Not Found
Server: Remo-mini/1.0.87-g8b06f0e
Content-Type: text/plain

Global APIGoogle Sheets

Global API はちゃんと json が帰ってきたので、温度を採取してGoogle Sheetsに記録するようにしてみた。
最初は IFTTT を使おうと思ったけど、API を叩いて json を整形する方法がわからなかったので、 今回は Integromat を使ってみた。

www.integromat.com

とりあえず 「15分ごとに起動」して「API叩いてJSONをパース」して「Google Sheetsに追加」するようにした。
ココらへんは、Integromat の紹介ビデオにある方法を、そのまま流用した。

f:id:minowith:20180725210452p:plain

JSON の設定はこんな感じ。

f:id:minowith:20180725212800p:plain

Google Sheets の記録はこんな感じ。

f:id:minowith:20180725210816p:plain

※ 現時点(2018/07) だと、どうやら温度は不定期に採取されてるようで、15分ごとに採っても意味が無いっぽい。
※ ここら辺は、リアルタイム取得に修正されることを願うのみかなぁー

6月まとめ

ping 進捗

6月は(も)何も完成しなかったよ

声優の関連図を作ってみた

「同じ作品に出演している声優を、関連図にしたら面白いんじゃね?」という発想のもと。
wikipedia から情報を引っ張って作ってみた。

f:id:minowith:20180704195638p:plain

よく考えたら、1作品20名いたとして、10作品出演したら200名なんだよね。
そりゃエッジが大変なことになるよね・・・

ってことで、作成中止。

使った物

C++向けドキュメントジェネレーター

doxygen のフォーマットが嫌で、自分独自の C++ ドキュメントジェネレーターが欲しくなった。
理想としては、godoc みたいなシンプルな形に出来ないかなと。

とりあえず、コメントは C#XML Document 形式 を抽出して、それを JSON形式 に起こすことを目標に。

しかし、作ってていくつも壁にぶち当たった。

  1. override された関数の場合、それぞれの関数に対するコメントは、どうやって扱う? (別関数として扱う?)
  2. 宣言(decl)と実態(impl)のそれぞれにコメントがある場合、どっちを優先する?
  3. typedef define auto ・・・・・あれ、考慮するの多すぎね?

結局「どんな出力フォーマットにするか」が決まらなくて、パースしたはいいけど、その先に進めず頓挫。

使った物

libclang で関数名やデフォルト引数などを取得する方法はわかったので、あとで gist にでも上げておこう。

godoc の template に関するメモ

godoc で markdown を生成したいと思って、調べたときのメモ。

既に、それを実現しているコードはこちら。

GitHub - FreekKalter/godoc-md: Godoc template and executable to generate markdown README from go source code.

これを参考に、自分独自のテンプレートを作ってみたくなったので、調査したメモ。

必要なファイル

godoc -templates=$DIR の記載どおり、godoc のテンプレートはディレクトリをパス指定しないといけない。 なぜなら、必要なファイルが複数あるから。

ファイルを読み込んでる箇所は/x/tools/cmd/godoc/handlers.go
また、これらファイルは/x/tools/godoc/staticにあった。

  • package.txt (出力するテンプレート、これ作りたい)
  • search.txt (検索用テンプレート?)
渡される構造体

package.txt の書き方は text/template に則ってる。 (雑に)調べたところ、PageInfo が渡されてるっぽい。 この中で、おもに doc.Package に関して出力していけば良いみたい。

呼ばれる関数

package.txt にある example_text などは、パーサー側で定義された関数だった。 定義はもちろんgodocにあった。

ここの注意として、例えば example_text は Test Example を出力してくれる関数だけど、 「1行目にExample:」「行末に改行2個」と、余計な文字まで付加して出力してきた。

Example:
// ここに Test Example が入る
  // 改行が入る
  //  〃

そのため、markdown の code block として出力したら、変な結果になってしまった。

コードを見た限り、これら余計な文字を消すオプションや関数は定義されてないため、 出力後に手動で削るか、出力方法を自分で再定義するしか無さそう。

godocを使わない方法

godoc から markdown を生成するモノはいくつかあるので、それを使った方が楽だった。

GitHub - robertkrimen/godocdown: Format package documentation (godoc) as GitHub friendly Markdown

GitHub - davecheney/godoc2md: Simple translation from godoc to markdown.

とりあえず、今回は自作を諦めて、godocdown を使うことにしました。