goでWebAssembly(2)

前回の続きです。

goでWebAssembly - unokun’s blog

goのWebAssemblyに関する詳細な記事がありました。

Go and wasm: generating and executing wasm with Go GopherAcademy

まとめると以下のようになると思います。

  • Web AssemblyはC/C++、Rustなどでビルドしたnative用バイナリをブラウザ上で実行することができる。
  • goのコンパイラ(gc)は、まだnative用バイナリを生成できない。将来的なアーキテクチャ向けのバイナリを生成する予定?
  • そのかわり、ブラウザ上でgoでビルドしたwasmファイルを動かすjsを提供している。サンプルコードが(wasm_exec.html, wasm_exec.js)になる。
  • このjsは、Web Assemblyでブラウザが提供しているAPIを呼び出す。
  • この環境があれば、goでビルドしたモジュールをブラウザ上で動作させることができる。

上記記事には、asmファイルの情報を表示するツールがいろいろ含まれていました。

  • wasm-dump
  • wasm-run

goでWebAssembly

go 11.1でWebAssemblyが追加になったので、試してみました。

以下のサイトに記載されている内容を試してみたところ、たしかにコンソールに"Hello, WebAssembly!”が出力されました。

WebAssembly · golang/go Wiki

環境 Mac OS High Sierra 10.13.6 go 11.1

f:id:unokun3:20180826121450p:plain

nginx経由で同じようにしましたが、以下のエラーが発生します。

wasm_exec.html:1 Uncaught (in promise) TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.

以下のページを参考に、mime.typesにapplication/wasmを追加しましたが、うまくいきませんでした。

application/wasm wasm;

#1606 (WebAssembly doesn't work on Firefox/Chrome due to missing MIME type) – nginx

ローカル(ブラウザ内)に処理が書けるのは面白そうです。 何ができるか考えてみます。

vue-cli(3.0)を使う前に

vue-cli(3.0)を使ってみようと思ったのですが、その前に、nodeのパッケージ管理をnodebrewからndenvに変更しました。

ndenvはanyenv(なんでもenv)から使うバージョン管理で、pyenv, rbenvも同じように使えるようです。が、今回はndenvのみanyenvから使えるようにしました。

以下のページの処理をそのまま実行すればOKです。

Nodeのバージョン管理をndenvにし、それに合わせてanyenvを導入したのでメモ – YATのblog

anyenvのインストール

$ git clone https://github.com/riywo/anyenv ~/.anyenv

使っているシェルの設定ファイル(.zshrc、.bash_profile)に以下を追加します。それまで使っていたnodebrewの処理をコメントアウトしました。

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

# nodebrew
#export PATH=$HOME/.nodebrew/current/bin:$PATH

設定ファイルを再読み込みします。

source 設定ファイル(.zshrc、.bash_profile)

ndenvインストール

$ anyenv install ndenv

インストール可能なnodeのバージョン一覧

$ ndenv install -l

nodeインストール

$ node install インストールしたいバージョン

インストールされているバージョン一覧

$ ndenv versions

デフォルトのバージョン

ndenv global デフォルトのnodenのバージョン

ここまでくれば、vue-cli 3.0が使えるようになります。 次は、それを使ったプロジェクトの作成ですね。

リンク

SiriKit Tutorial for iOS

はじめに

2018 WWDCにおいて、iOS12の新しい機能「Siri Shortcuts」が紹介されました。

Siri Shortcutsについて調べてみた【ショートカット登録編】 - Qiita

ユーザーの日常のルーチンを適切なタイミングでサジェストしてくれ、ショートカット実行させてくれる便利な機能です。 ロックスクリーン、Spotlight検索、SiriのApple Watchインターフェースから直接アプリのアクションを実行することができます。

現在もiPhone上にSiriからの提案(APP)が表示されますが、これがショートカットから実行できるようになるのでしょうか?

かつて、音声認識が盛んだった頃、電子秘書と呼ばれるアプリが登場しましたが、いずれ、Siriが電子秘書になると思います。

まずはSiri Kit

Siri Shortcutsのサンプル実装を試すまえに、まず、Siri Kitについて調べてみました。 Siri Kitを使うとどのようなことができるのかは、以下のページが詳しいです。

SiriKitを試してみた集 - Qiita

現状は、限られたドメインのみ使われるため電子秘書とは言えませんが、それでも配車予約、レストラン予約は便利だと思います。

これだと何となくわかっただけの状態なので、チュートリアルを実行してみました。 WenderLoonという配車サービスアプリです。

SiriKit Tutorial for iOS

Siri Kitを使っていない状態からステップごとに使えるようにしているためとてもわかりやすいです。書いているとおりに実装すれば動くと思います。途中コンパイルエラーが発生しますが、Xcodeのお勧めの方法でFixすればOKでした。

ただ、言語が英語のため「99(passengers in) Red Balloonsの前までしか実行していません。

  • Add an Intents extension
  • Create appropriate handler objects
  • Return the handler objects in your INExtension subclass
  • Declare the supported intents in the Info.plist of the extension
  • Request the user’s permission to use Siri
  • Add a Siri usage description to the app’s Info.plist
  • Add the Siri entitlement to the app

このアプリを動かした後に、AppleのSikirKitプログラミングガイドを読むと理解が進みました。

SiriKitプログラミングガイド:SiriKitの紹介

Microsoft Xamarin.iOSでもSiriKitは使えるようです。こちらのドキュメントも分かりやすいです。

Xamarin.iOS で SiriKit - Xamarin | Microsoft Docs

今後

SiriKitにカスタム語彙を登録できるようです。これが出来るようになると面白そうです。

SiriKitプログラミングガイド:Intentのドメイン