求めるは休息

作ったプログラムとか公開していきます

AlexaSkill開発 ステップ1(もう少し細かい理解-AlexaSkill編-) ~echoこなくてこじらせた結果~

echoの招待メールを常日頃待っているがこないので、もう先にスキルを作って全裸待機と意気込んだときのメモ

 一言

ここでは、AWSってきいたことあるなー、echoが販売されたのでAlexaSkillつくりたいなーな私が、ネットを漁って調べた結果をメモしたものなので、間違いが多分に含まれる場合があることに注意してください。

あと、Lambdaで使用するコードはPython3.xですので、注意が必要です。

 ステップ1・・・もう少し細かい理解(-AlexaSkill編-)

 頭に入れるべき要素(下のサンプルコードを見ながらだとより分かりやすいかと思います)

 :intent(意味は意思とか目的とか)

 :sample utterance(サンプル発話)

 :slot(スロット、読めば分かるが)

  ↑これらを総称して「対話モデル」となる

 

 各要素についての説明(天気アプリを例にして)

 :intent

  こいつが「機能名」です。intent名はAWS Lambdaに「引数」として渡されます。

  天気アプリで例えると、

   天気を教えてくれる機能

   降水確率を教えてくれる機能

  などが予想されます。

  機能ごとにintentを用意するようです。

  ビルトイン(Amazon側で用意したもの)のintentもあり、

   停止(AMAZON.StopIntent)

   取り消し(AMAZON.CancelIntent)

   ヘルプ(AMAZON.HelpIntent)

  などがあったが、明確な使い方はゴメンナサイまだ調べていないのでわかりません。

  多分だけどalexaが長話したら止めたり、処理途中でのキャンセルが思い当たりますね。

  ↑キャンセルは、天気アプリだと都市の指定が必要ですが、

  1.天気スキルを開いて

  2.alexaが都市を聞いてきて

  3.キャンセルとほざくと

  4.中止するんだとおもいます

 

 :sample utterance

  こいつがintentを呼び出すときに必要な「会話のサンプルパターン」です。

  先ほどの「天気を教えてくれる機能」を呼び出すためのサンプルだと、

   {都市}の天気を教えて

  などが予想されるし、「降水確率を教えてくれる機能」だと、

   {都市}の降水確率を教えて

  となります。

  sample utteranceは、intent毎に用意する必要があります。

  また、様々なパターンを用意した方が柔軟性が増すそうです。(当たり前だが)

  

 :slot

  最後がスロットです。

  こいつは、sample utteranceの所に出てきた「{都市}」です。

  つまり、AWS Lambdaに渡すための「引数」になります。

  これもintentと同様にビルトインとカスタムがあります。

  ビルトインでは

  Alexa Skill KitでAmazonが用意したBuilt-In IntentとBuilt-In Slot Typeをひたすらまとめてみる | Developers.IO

  等が用意されているそうです。

  {都市}もAMAZON.Cityのビルトインのスロットタイプが用意されています。

   ↑こちらは、スキル作成時に選択する国(というか言語)で変わるのかなぁ、と思っていますが、検証していません。今のところ使う予定がないので

  因みに、sample utteranceを

   {都市}の{種類}を教えて

  とすることで、intentを天気と降水確率に分けずに、引数で処理を変える事が出来そうです。

  上の「{種類}」がカスタムスロットで自分でスロットに当てはまるであろうリストを用意できます。

  この場合は、例えば、

   天気

   降水確率

  が当てはまります。

 

 

 下のコードをまとめた感じの画像

f:id:umi_hiiragi:20171130021202j:plain

 

{
  "languageModel": {
    "intents": [
      {
        "name": "getWeather",
        "samples": [
          "{city} の天気を教えて"
        ],
        "slots": [
          {
            "name": "city",
            "type": "AMAZON.City"
          }
        ]
      },
      {
        "name": "getRainyPercent",
        "samples": [
          "{city} の降水確率を教えて"
        ],
        "slots": [
          {
            "name": "city",
            "type": "AMAZON.City"
          }
        ]
      },
      {
        "name": "AMAZON.CancelIntent",
        "samples": [
          "中止",
          "キャンセル",
          "中止して",
          "取り消して"
        ]
      },
      {
        "name": "AMAZON.HelpIntent",
        "samples": [
          "ヘルプ",
          "使い方"
        ]
      },
      {
        "name": "AMAZON.StopIntent",
        "samples": [
          "停止",
          "止めて"
        ]
      }
    ],
    "invocationName": "お天気スキル"
  }
}

 

AlexaSkill開発 ステップ0(簡単な理解) ~echoこなくてこじらせた結果~

echoの招待メールを常日頃待っているがこないので、もう先にスキルを作って全裸待機と意気込んだときのメモ

 一言

ここでは、AWSってきいたことあるなー、echoが販売されたのでAlexaSkillつくりたいなーな私が、ネットを漁って調べた結果をメモしたものなので、間違いが多分に含まれる場合があることに注意してください。

あと、Lambdaで使用するコードはPython3.xですので、注意が必要です。

つーかechoの招待メールこねぇ!(2017年11月29日現在)

 

ステップ0・・・簡単な理解

取り敢えず、開発するにあたり細かいところは置いておいて、全体を把握したい。

f:id:umi_hiiragi:20171130002010j:plain

 

流れ的には、図の通りだが、

 ユーザー → echo → AlexaSkill → AWS Lambda → AWSのリソース

 ユーザー ← echo ← AlexaSkill ← AWS Lambda ← AWSのリソース

という感じ。

AlexaSkillでは、ユーザーとの「対話モデル」なるものを作る

この対話モデルでは、ユーザーからのリクエストをLambdaでの処理に必要な「引数」(みたいなもの)に落とし込んでくれる。

次のステップで出てくる「intent」や「slot」がこの「引数」にあたり、Lambdaへと渡されます。

AWS Lambdaでは、AlexaSkillから受け取る「引数」を処理する。いわば、「関数」だ(と思う。私の認識では。。。)。

 

多分ステップは以下になる

  • ステップ1(もう少し細かい理解-AlexaSkill編-)
  • ステップ2(もう少し細かい理解-AWS Lambda編-)
  • ステップ3(登録)
  • ステップ4(AlexaSkill開発)
  • ステップ5(AWS Lambda開発)
  • ステップ6(AWSのリソースを使うときにの注意)
  • ステップ7(テスト)

重い腰を上げてサクラたんからVimに乗り換えてみた

サクラたんから乗り換えるのは色々な意味で辛いけど、仕事も落ち着いたし、そろそろ親指が限界なのでvimに乗り換えてみようと思う。


乗り換えようと思った経緯はこんな感じ
・Altキーを使って色々マッピングしてた サクラたん最高(*´Д`)
・左Altばっかり使うので、長時間やると曲げすぎで親指の付け根が痛くなってくる
vimに乗り換えようか悩む
・悩む
・やっぱりサクラたんから離れられない、というか今乗り換えたらまともに仕事ができない
・↑を繰り返す
・じゃあせめてもの曲げ負荷軽減ってことで「無変換」と「左Alt」を入れ替えた ←一昨日の出来事
・入れ替えるくらいならvimに移るか ←昨日の出来事
vim移行中 ←現在
※とりあえず複数環境での設定を共有してまともに使えるようになったので、ひと段落


整えた環境は以下
・PortableGit-2.6.1 (64bit版)
・KaoriYa vim7.4 (64bit版)
・NeoBundle (定番)
・タブエディタ化
・twilight.vim (カラースキーマ)
Consolas (フォント)


★環境構築時に困ったこと
今回win7、8.1、10それぞれ別々の環境で構築したけど、
win7環境変数にHOME,VIMを登録したけど、反映されていないっぽかった ※echoでは反映されているのに、、
再起動で直ったけど何でだろ?既にVIMを入れてゴチャゴチャやってたから?

あと、関連付けが出来なくなった。これは以下のサイトで解決した。

プログラムの関連付けができない時の対処法(Windows) - Cocoron’s memo

とりあえず、これからキーマップをメインで弄っていきたいですな


備忘録に参考にしたサイトを置いておく
■なんか面白そう タグの話とか書いてある

viの使い手がvimエディタについて知っておくべき事 トップ10 — 名無しのvim使い


■なんか面白そう2 ステータス行のハイライター?

[vim]色見本スクリプトを活用して、lightlineのステータス行をクールに彩る | ここぽんのーと



環境系
-------------------------------------------------------
■ポータブルGitの環境構築の時に参考にした

Windows に msysgit の portable 版を使って git 環境を作る - xykの日記
-------------------------------------------------------


プラグイン
-------------------------------------------------------
■NeoBundle色々?Unite.vimvim-indent-guidesは入れたいと思った

脱初心者を目指すVimmerにオススメしたいVimプラグインや.vimrcの設定 - Qiita


■Unite.vimについて

いつまでたってもUnite.vimが使いこなせないので、さすがにちょっと調べた | KentaKomai Blog


■NeoBundleがneobundle#rc()でエラーを吐くときに見る

neobundle#rc()がdeprecated functionになる時の対処法 - Qiita
-------------------------------------------------------

操作系 H×Hかっ
-------------------------------------------------------
■基本的なことが書いてあって良さげ

これからVimを触る人向け!今まで使っていたエディタのようにVimを使いはじめる。 - Qiita


■vimgrepとかいろいろ 勉強になりそう

vimgrepとQuickfix知らないVimmerはちょっとこっち来い - Qiita

-------------------------------------------------------


設定系
-------------------------------------------------------
■Set系のコマンドで役に立ちそう いっぱいあったけど、必要なのだけ抜けばいいと思う

Vim のカスタマイズ 〜 set コマンド オススメまとめ 〜 - Vim のブログ


■HOME,VIM,VIMRUNTIMEについて 何かよく出てくる環境変数について

Windows、Mac OSXで、同一のvim設定ファイルを共有、使いまわすには : サイト更新停滞ちうっ [ 名無しのVIM使い ]


■フォントをConsolasに変更 いいよね

Gvim on Windows: フォント設定: まじかんと雑記

-------------------------------------------------------


タブ系
-------------------------------------------------------
■タブエディタの心得 タブ化に使用

* gVim をタブエディタ風にする! - mk-mode BLOG


■タブエディタの心得 タブコマンドがある キーマップに役立ちそう

Windows版のgvimをタブエディタ化する | WEBサービス創造記

-------------------------------------------------------


キーマップ系
-------------------------------------------------------
■キーマップの確認

Vimのキーマッピングを確認する - Qiita


■キーマップの変更

vimでキーマッピングする際に考えたほうがいいこと - derisの日記


■キー割り当ての説明

Vim のカスタマイズ 〜キー割り当て変更方法〜 - Vim のブログ


■mapとnoremapについて

【図解Vim】mapとnoremap | ここぽんのーと

-------------------------------------------------------


カラースキーム系
-------------------------------------------------------
■面白い

[vim]色見本スクリプトを活用して、lightlineのステータス行をクールに彩る | ここぽんのーと

-------------------------------------------------------

コンソール版「Pandemic」 : Cuidemic 公開しました

Python 2.7 で動作するコンソール版のPandemicです。

CUIのPandemicなのでCuidemicにしてますw

なお、1人プレイ用ですのであしからず。

※現在はネットで複数でプレイできるGUI版のGuidemicを作成中

 

コンソールウィンドが小さくて正しく表示できない場合、プロンプトの設定のウィンドサイズとバッファサイズ(だったっけ?)を大きくしてください。

 

要望、バグなどありましたら、コメントかメールでお願いします。

GitHubにも公開したので、そこからDLしてください。

KToshiki-umi/Cuidemic · GitHub

※リンク先右下の「DownloadZip」でいけます

 

ぶっちゃけ、作った本人が言うのもなんですが、、、

コンソール版面倒なので、1人プレイ用のGUI版(他の方が配布されていた気がします)をプレイする方が良いと思います。

気になった人だけ、遊んでみてね!

 

スクショおいておきます。

・黄枠:手番と現在位置
・赤枠:プレイヤーの役職と手札
・青枠:各都市の番号、調査基地の有無(+がついている所)、各病原菌の汚染状況
・緑枠:各病原菌マーカーの残数
※赤枠、黄枠、マップ等の番号は青枠の都市とリンクしています。

f:id:umi_hiiragi:20151007012716p:plain