kun432's blog

技術ネタ、読書記録、など。2015年から人生をやり直し中です。

今年度の目標

遅くなったけど

  • Google認定プロフェッショナル・クラウド・アーキテクトを取る
  • AWS認定DevOpsエンジニア - プロフェッショナルを取る
  • Alexaスキル/Google Homeアプリを作って公開する

Amazon Alexa Skills Challenge: Life Hacks のファイナリストのスキルのアイデアを見てみる

echo spotついに発表されましたね

f:id:kun432:20180621222006j:plain

それもあって、スキル作りたい熱が高まっているのだけど、肝心のアイデアが出ない。。。。ということで、USでやっているスキルチャレンジのファイナリストのスキルを見て参考にしてみたいと思います。一応テーマはライフハックということみたい(他のテーマのチャレンジもあるんですかね?)

ただし、USオンリーでしか試せない模様なので説明文からの推測です。(試せる方法があれば誰か教えてください、端末の言語設定だけじゃダメですよね???)


www.amazon.com

緊急時に知り合いに連絡をしてくれるスキル。予めwebサイトの方で連絡先を登録しておいて「アレクサ、ask My Buddyで全員にヘルプ」とすればメールなりSMSなりで通知が行く。特定の誰かだけを選択することも可能。また、「今日も大丈夫」みたいなのを伝えることもできるようです。緊急時にきちんと呼び出せる余裕があるのか?というのはあるけど、スマホでやるよりは圧倒的に早いでしょう。スマホの操作が苦手なお年寄りとかを想定すると音声インタフェースはいいですね。見守りは一つのジャンルですね。


www.amazon.com

「アレクサ、calm nowを開いて」というと、深呼吸とか足をブルブルする体操とか、心を落ち着けるための手法をいろいろ教えてくれる。一応、子供向けというところで作られているようで、他にも可愛いマークの子供向けスキルを作られているようですが、大人の方がむしろ必要だよねぇ。ヨガとかエクササイズとかのインストラクションをしてくれるようなスキルはとてもポピュラーなのでテーマを探せばいろいろできそうです。


www.amazon.com

いわゆる「家計簿」スキルですね。使ったものと金額を記録して、後日確認できる。すごいのは1ヶ月ぐらい記録するとパーソナライズされた消費プランのようなものを作ってくれて通知(?)してくれるみたいで、単なる音声インタフェース対応スピーカーにとどまらずに、きちんと「AI」スピーカーになっているのが良いと思います。


www.amazon.com

いろんな野菜や果物とかの切り方を動画で楽しく教えてくれるスキル、ということでecho spot/show対応ですね。動画を見てもらったほうがわかりやすい。

www.youtube.com

上で紹介したcalm nowのようなインストラクションは映像があるととてもわかり易いですね。echo spotやecho showだとまずはこういうのが増えてくると思います。


www.amazon.com

エコロジーに関するゲームスキルの様子。"Truth or Dare"という遊びがあって、truthの場合は秘密を告白する、dareの場合はなにか難しいことをやる、ということだから、alexaがなんかエコに寄与するようなハックを教えてくれるんでしょうね。会話ゲームをベースにして大人も子供も楽しみつつ、エコなテーマに取り組めるというのは社会的に良いですね。日本でやるとするならば山手線ゲームとかですかねぇ、そこまで認識スピード早くないと思うので厳しいかもですが。


www.amazon.com

家の家事を誰がやったかを記憶して、あとで、前回誰がやったか?とか今週一番やったのは誰か?とかを確認できるスキル。何かを記録するというのはポピュラーなんだけど、皿洗いとか犬の散歩とか、めんどくさいなー、と思うようなことにゲーム性をもたせて積極的にやるモチベーションを出させるというのは良いです。子どもたちが競い合ってやってくれるとお父さん・お母さんは大助かりですね。


www.amazon.com

最初に目標を設定して、日々の達成率を記録することで、今の進捗率を教えてくれるスキル。例えば、1冊の本を読むという目標に対して今日は20ページ読んだので○%達成みたいな感じかな。上のと違うのはゴールが設定されていることで、目標に向かってモチベーションを上げるという感じですね。非常にポピュラーなんだけど、永続的なデータ保存ができるとスキル開発のレベルが一段あがるのは間違いないので、少し調べてみよう。


www.amazon.com

子供がお母さんに伝えたいメッセージを話すと、メールやSMSがお母さんに送信され、それに対して返信するとechoに通知が送信されるというスキル。音声インタフェースは子供向けにとても良いし、お母さんからのレスポンスを通知として実装しているところがよいですね。ダイレクトに返せるようになるともっといいんだけどな。LINE Clovaとかだともっと直感的にできそうですね。はやくSDK公開してほしいところです。


www.amazon.com

いろんな音声データを登録しておけばポッドキャスト的に垂れ流しができるスキルの様子。コンテンツはGoogleドライブ上でOK、自分でプレイリスト作れたり、購読型のポッドキャストにも対応してたりといろいろ便利そう。これならrebuild.fmも聞けたりするかなー。Googleポッドキャスト対応したし、echoでも公式に対応してほしいなと思ったりします。echo spot/echo showだと動画とかもできそうですね。


www.amazon.com

リマインダスキルなんだけど、おもしろいのはそのToDoが達成されるまで1分間隔でスヌーズしてくれるところ。これってまさに「あと10分寝かせて〜」みたいなやつだけど、その後は容赦なく1分間隔でスヌーズされるので寝坊しなくて済みそうな気がしますw。バックグラウンドで動いてくれるわけではないとあるので、タイムアウトとかうまく対応しているということかなと思います。公式のリマインダだとスヌーズ機能はないってことかな?echo spotだと非常にほしいところだと思うのですが。


個人的には、HouseTrackerが、実装はポピュラーなんだけど、うまくユースケースに落とし込んだって感じで1票ですね。家族の課題も楽しく解決できる風景はechoのCMにぴったりな気がします。ご参考までに。

Alexaスキル開発を始めるための本を片っ端から買ってみた

最近はずーっとスマートスピーカーを触ってて、自分でスキルを作りたい、ということでいろいろな書籍を片っ端から買って読んでみたので、レビュー。これから始めてみる方の参考になれば。

## 書籍一覧

はじめてのAlexaスキル開発 [音声認識アプリ開発の基礎知識を身に付ける! ]

はじめてのAlexaスキル開発 [音声認識アプリ開発の基礎知識を身に付ける! ]

今んところ一番最新。いろいろ変化が激しいので新しいと言うだけで価値があるんだけど、中身も基礎知識と演習に分かれててとても良い上、細かい機能の説明や審査のステップまでカバーされていてとても良い。コードも他の本はPythonで書かれているものが多いのだけど、これは公式のSDKであるNode.jsベースになっていて、コードの中身についても解説あるし、amazon公式の情報を参考にしたりする場合でもとても都合がよい。今買うなら最もオススメ。

Alexaスキル制作テクニック (I・O BOOKS)

Alexaスキル制作テクニック (I・O BOOKS)

画面が少し古くなってるけど、カスタムスキルだけではなく、フラッシュブリーフィンスキル、スマートホームスキル、さらにAVSまでカバーされているところが良い。紙面上にコードはないけど、その分電車とかでも読みやすいサイズにまとまってるし、最後の章にあるVUIの設計の章をあえて章立てしてるところが秀逸。上のと合わせて読むのがおススメ。コードはpython

kindleオンリーかつunlimitedで読める。公式SDKCLI版ベースで書かれているのが特徴。GUI開発者コンソールとAWS Lambdaの組み合わせが標準スタイルなんだけど、やっぱりコードはgithubあたりで管理したい、デプロイもコマンドでやりたい、と思うのが人の性で、ask-cli使えばそれができます。GUIで一通りの流れがわかった後にやってもよいし、軽く触ってみたいという場合でも良いかもしれない。コードはNode.js。

AlexaとGoogle Homeの両方をカバーしているのが最大の特徴。流し読みしかしてないのだけど一通り読むと、結局どっちも自分で実装するのはJSON返すだけなんだなということがよくわかる。イラストも多いしレンタルサーバCGIで出来るので初心者の方にはいいんじゃないかと。細かい説明は少し物足りない気がするけど、Google Home向けにDialogflowについて書かれているのも良いところ。コードはpython

まださわりしか読めてないのだけど、他の本とはちょっと毛色が違って、スマートスピーカーだけでなく、スマートホームとか機械学習とかいろいろ連携したみようという感じ。イラストも多いし対話形式で書かれているので初心者向けという体裁だけど、説明はあまりないし、やることの幅は広いので、ある程度わかってないと厳しい気がする。alexaとか一通り触った後に幅を広げるために読むのがお勧めだと思います。

シェルスクリプトマガジン vol.54

シェルスクリプトマガジン vol.54

  • 作者: 當仲寛哲,しょっさん,今泉光之,福田潔,岡本秀高,米田聡,すずきひろのぶ,熊野憲辰,濱口誠一,菅雄一,伊藤貴之,楠目幹,法林浩之,山本美穂,大岩元,飯尾淳,桑原滝弥,大内智明,gori.sh,USP研究所,ジーズバンク,イケヤシロウ
  • 出版社/メーカー: USP研究所
  • 発売日: 2018/05/25
  • メディア: 雑誌
  • この商品を含むブログを見る

元はシェル芸の雑誌なんだけど、alexaとnode.jsがセットで特集になっているので、どっちも初めて、まずはさらっと始めてみたい、というのであれば、値段も安いし、実は一番オススメかもしれない。
余談だけど、昔よりも丁装よくなってて少しリッチ感ありw

## まとめ

今買うなら一番新しいはじめてのAlexaスキル開発 [音声認識アプリ開発の基礎知識を身に付ける! ]が中身の構成的にもおススメかな。その他についても、まとめて読むと理解力高まるので、何冊か読んでみる事をお勧めします。

あと、基本となる音声インタフェース概論みたいなのについてはこういうのもあるみたいなので、一度読んでみようと思ってます。

AIアシスタントのコア・コンセプト―人工知能時代の意思決定プロセスデザイン

AIアシスタントのコア・コンセプト―人工知能時代の意思決定プロセスデザイン

以下は洋書のみ。洋書だとこの手のもの含めて結構種類もありますね、羨ましい。洋書でも良いんだけど少し高いんだよなー。

Designing Voice User Interfaces: Principles of Conversational Experiences

Designing Voice User Interfaces: Principles of Conversational Experiences

個人的には、Google homeに特化した書籍が出てほしい。出たら即買いします。

goで並列ping

とりあえずいろんなところを見て書いてみた。コマンドライン引数の使い方、ファイルの読み込み、並列処理、を一通り試せた感じ。

package main

import (
    "bufio"
    "fmt"
    "os"
    "os/exec"
    "sync"
)

func main() {
    // 引数処理
    args := os.Args
    fmt.Println(args)
    if len(args[1:]) != 1 {
        fmt.Println("Error! irregal arguments.")
        usage()
        os.Exit(1)
    }

    // リストファイルオープン
    r, err := os.Open(args[1])
    if err != nil {
        fmt.Println(err)
        usage()
        os.Exit(2)
    }
    defer r.Close()

    var iplist []string

    // リスト読み込み
    sc := bufio.NewScanner(r)
    for sc.Scan() {
        line := sc.Text()
        if line[:1] == "#" {
            continue
        }
        iplist = append(iplist, line)
    }

    // ping実行
    var wg sync.WaitGroup
    for _, ip := range iplist {
        wg.Add(1)
        go func(ip string) {
            defer wg.Done()
            worker(ip)
        }(ip)
    }
    wg.Wait()
}

func usage() {
    fmt.Println("[Usage] expingo IP_LIST_FILE")
}

func worker(ip string) {
    err := exec.Command("ping", "-c", "1", "-W", "1", ip).Run()

    if err != nil {
        fmt.Println(ip, " : NG")
    } else {
        fmt.Println(ip, " : OK")
    }
}
$ time go run parallel-ping.go dat/sample3.txt
・・・
192.168.4.13  : OK
192.168.4.1  : OK
192.168.4.2  : OK
192.168.4.14  : OK
192.168.4.15  : OK
192.168.4.10  : OK
192.168.4.18  : OK
192.168.4.19  : OK
192.168.4.12  : OK
192.168.1.1  : OK
192.168.4.3  : NG
192.168.4.22  : NG
・・・
real    0m3.332s
user    0m0.982s
sys     0m7.748s

700IPのリストで実際には10数台程度しかないけどすげえ速い。

pingを外部コマンドにしてるのがダサいので直したいと並列数の制御もできるようにしたい。

Goを始めるのに良いサイト&書籍

とりあえず始めだして2週間ぐらい。あんまり手を動かしていないのだけど、いろいろ見てみたり読んでみたりして、徐々に理解が深まってきたところでまとめてみる。

unlimitedで読めるのでとりあえず読んで、なんとなくフィーリングをつかむのにはよかった。

A Tour of Go

ここから始めよ、と色んな所に書いてあるので始めてみた。ほぼほぼコードも予め埋めてあるので、動かすにはいいのだけど、自分で書くという行為が少ない気がするが、たまーに入力を求められる例題は結構難しくて、個人的には微妙な感があった。

スターティングGo言語

スターティングGo言語

いわゆる言語入門書としては非常に良い内容。細かい挙動もサンプルコードがあるのでわかりやすい。ただこれで実際に何か作れるか、というと難しい気はする。もっと慣れてから読み直すと役に立つ気がする。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

最初の方はとても良かった、というか、環境構築の話とかが多いからだと思う。後半は難しすぎてさっぱり。

これはちょっとまだ早すぎた。が、Webアプリとはなんぞや、みたいなところから書いてあるので多分良い書籍のはず。

Go言語によるWebアプリケーション開発

Go言語によるWebアプリケーション開発

Webアプリ開発なら上よりもこっちの方を先に読んだほうが良さげな雰囲気。

Go by Example

いろいろ調べていくと、最終的にココのサンプルを見る、のが良いという結論になる。

あとはQiitaとかいろいろググってサンプル見て、自分で書いてみるとかになっちゃう感じ←今ココ

結局のところ、

  • まだまだGoに関しては書籍が少ない
  • いわゆる言語入門書は1冊はやったほうが良いと思うけど、言語入門ってモチベーションわかないし、あまり選択肢もない感じ
  • 作って学ぶ、みたいなのがあるといいんだけど、Webアプリじゃない系が欲しい所。

Goの特徴活かすなら、コマンドラインのツールだったるとか、並列処理やったり、とかそういうニーズのほうが高いと思うので、そういう書籍が出れば買います。