Build Actions for GDG Tokyoに行ってきた(雑記)
2018/4/16にBuild Actions for GDG Tokyoに行ってきたので内容をメモ。
GDCとGDG混同する…。
GDGとはGoogle Developers Groupの略らしい。
公式
当日のスライドは基本的に公式にまとまっている。
まとめ
- GoogleHome IoTの最大の特徴は、電気がついているか、鍵が開いているか等の機器の状態を取れること
- developerはIFTTT構成を超えたものを作っていこう
- 人と人とが会話するときには言葉に現れない隠れた前提条件が存在する。
- VUIでは(多くの場合)前提がない状態から始まる。それを意識してVUIを組み立てる。相手をおもてなしする。
- AWS でも(lambdaで?)ライブラリ読み込めば普通にapp.tellとかできるので楽っすよー(田中みそさん)
- 開発者向けslackチャンネルがあるよ!
普段Googleアシスタント周りでどこに聞いてわからないという人は、GCPUGのSlackの assistant_ja チャンネルへどうぞ。Slackへの入り方はこちらにあります。 https://t.co/c3eMxn7Pjp #buildactions
— Yoshifumi Yamaguchi (@ymotongpoo) 2018年4月16日
詳細
ノベルティ
トートバックとスポンサー企業のチラシ(アマゾンギフト券2000円クーポンコード)
Actions on Google概要・開発フロー byあんどうやすしさん
- AoGのうれしみ:難しい自然言語処理やってるくれる
- GoogleAssistantの強みは他社より対応デバイスが多いこと
- 会話(VUI)が効果的なものを意識しよう
- 一発何かやってよ
- 簡単なアクション・処理
- 手を使わないもの
- 理想的には上記に縛られないようにな処理も便利に受付できるべきだが…
- 逆に効果的でないアクションもある
- あれやってこれやってそれやって。複雑すぎるもの
- 命令する人も大変
- ユーザーはVUI対象に勝手に人格を認める
- 作り手はペルソナを用意して作ること。(口調、態度など)
- 会話フロー組み立てはまずはうまくいくパターンから作ろう
- ハッピーパスという
- その後、ダメなパターンを復帰させる会話(会話の修復シナリオ)などを継ぎ足していく
VUI Design概要 by 田中洋一郎さん
- 人間対人間の会話が成立する前提
- 人の話は内容を予想しながら聞く、つまり隠れた前提を持っている
- 長年連れ添った夫婦のツーカー
- 人間対機械
- コンテキストの質を高くする
- 人間の失敗を前提にする
- よくばってあれこれ言わない
- おもてなしの心
- 書き文字vs話言葉
- 話言葉はロジックではなくユーザーを信頼した組み立て方をするとよい。
- 「ヒントと言うと、いつでも聞くことができます」より「ヒントを聞きたいですか?」
- いつでも終われるようにしておく
- 前提として会話は短く単刀直入にする。
- 話言葉はロジックではなくユーザーを信頼した組み立て方をするとよい。
- アプリの第一印象はwelcomメッセージ
メモ
- chatbotとの差別化ポイントどこだろう。会話ボリュームの設計・実装量を考えると個人開発では差別化できない?
- 人間同士の隠れた前提を、ソフトウェアの実装に置き換えて考える。前提とはアプリ内に蓄積されたユーザーのパーソナルデータの蓄積具合ではないか。
- 単純にはユーザーデータ取りまくって次回以降の会話にフィードバックする。「また今日も残業ですか…?」
- アプリの調査方針の指針。welcomeメッセージの質をスコアリング。
- おもてなし実装はコスト高い。安くおもてなししたいがアイデア?chatbotのノウハウあるかな?
- おもてなし実装具合でアプリの質がばらける?GoogleHomeのメイン音声との切り分けはブランド的には正しい。
VUI設計後の実装からリリースまでのポイントby 田中洋一郎さん
LT (1) VUI with IoT by大橋啓介さん
- HomeIoTアプリ作ろう
- IFTTTとかでやってる人はにわか(意訳)*2
- メリット
- ウェイクワード後のアプリ名が不要になる
- 部屋の指定ができる
- デバイスの状態が取れる。強力。
- 前回のハンズオン資料見てね
(以下もくもく会にて質疑)
- 家のデバイス情報はHomeGraphで管理
- HomeGraph自体は非公開データです(Google社山口さん)
- デバイスの基本操作はある程度限られている
- テレビだと音量操作とかできるよ
- 海外だとサーモスタット操作とかあるよ
メモ
- 風呂大好き日本人的にはオート風呂したい。風呂ハードメーカーさん早く。
LT (2) SSMLで出来ること by 里山南人さん
- audioタグで音声再生は楽しい
- サウンドライブラリ結構いいよ
- youtubeのサウンドライブラリも見てみて。ただstrageとかに置きなおす必要はあるけど…
LT (3) Dialogflowのオススメな使い方 by津田恭平さん
もくもくタイム
- 割と時間押してて30分ぐらい
スポンサーセッション by株式会社grooves (Forkwell) 様
- エンジニアのキャリアアップやってます
- スパム送りまくるエージェント会社とは違うぜ
- 会社との交渉力をつけるべき
- それには個人のスキルセットが大事だ
- 今キャンペーン中で登録するとアマゾンギフト券あげるのでよろしければどうぞ!
懇親会
- ピザとコーラorアサヒビールorウーロン茶
- twitterに生息している人が参加してて面白かった
- 個人名刺にはtwitterアイコンつけたほうが認識されやすい…
- 本名や姿は不明だが開発したアプリ名言うと「あーあのアプリの人!」ってなるのは開発に熱気がある界隈感あって良いなあ
- いらすとやにお世話になってない開発者はいない
その他
当初connpassにて、160番で補欠だった。
規模が大きいイベントは大体当日までにキャンセル者多数出るので経験上参加可能になることが多い。
狙ったイベントは補欠でも諦めずに入れとくと良いかも。
あとは、発表内容が先月ののVUI meetingと結構かぶってた…*3
GoogleHomeアプリ「東京都府中市のゴミカレンダー」をリリースしました。
GoogleHomeアプリ「東京都府中市のゴミカレンダー」をリリースしました。
公式リンク
経緯・工数など
東京都府中市でゴミカレンダーが一部不配だったようです。
www.asahi.com
記事は4/4の問題になっていますが、自分が知ったのが4/5の夕方のTVでした。
なんやかんややって4/6の19:30に完成してGoogle社に申請。
土日は承認システム休みで、今日の10:30に承認OKが出てました*1。
ベースとなるソースはあったのですが、差分対応部分がDB構造へ影響出てしまって、トータルの作業時間およそ15.5h。思ったよりかかりました…。
その他(きっかけ)
丁度はてなで話題となっていた「国税庁のURL変換器」について、作られた方ハッカーのnote.読んだのですが、
以下の内容がカッコイーと思いました。
エンジニアの業界では,「ハック」という言葉があり,「ハッカー」と言うとなんかコンピュータを使って何かすげー事をする人みたいなイメージがあるんですが,
元は「雑だけどうまく役に立つものを作る」みたいな意味らしいです.
自分も今回作れる材料が丁度揃っていたので、いっちょ対応してみようかと思い立った感じです。
いいよね。ハッカー。
憧れる。
*1:多分朝1で承認処理やってくれた風。感謝…
javascriptで優先度付きqueue(priority queue)のライブラリ(メモ)
npmでpriority queueを検索するとかなりの数のライブラリがある。
どれが良いとか悪いとかは、メンテナンス具合とdownload数等で判断するようだ。
しかし正直どれが良いか判断できない。
差し当たり早そうなfastpriorityqueueを利用することにした。
動作サンプル
サンプルコードがpriority key のみを使ったもので、素人には実践でどう使うのか分かりづらい。
別なサンプルを書いて動作をみる。
var FastPriorityQueue = require("fastpriorityqueue"); class MyClass { constructor(priority, data) { this.priority = priority; this.data = data; } } const a = new MyClass(10, "test"); const b = new MyClass(20, "test test"); const c = new MyClass(30, "test test test"); const d = new MyClass(40, "test test test test"); var x = new FastPriorityQueue(function (a, b) { return a.priority > b.priority }); // 昇順降順を切り替えられる x.add(a); x.add(b); x.add(c); x.add(d); while (!x.isEmpty()) { console.log(x.poll()); // will print // MyClass { priority: 40, data: 'test test test test' } // MyClass { priority: 30, data: 'test test test' } // MyClass { priority: 20, data: 'test test' } // MyClass { priority: 10, data: 'test' } }
その他
.min化されてないのでクライアントブラウザ動作させるなどの場合は最適化が必要かも。
javascriptの入門書のメモ
開発中のChrome Extensionのコードの規模が割と膨れ上がった。
ちょっとしたロジック変更するにも、手を入れるところが多すぎてタスク消化のvelocityが激落ちしている。
そのため、リファクタリングをやろうと思う。
しかし、javascriptはそもそもQiitaでつまみ食いしてばかりの半端知識だ。
いい機会なのでES6の説明に対応した入門書をざっくり読むことにした。
徹底マスター JavaScriptの教科書 プログラミングの教養から、言語仕様、開発技法までが正しく身につく (Informatics&IDEA)
- 作者: 磯博
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/03/18
- メディア: 単行本
- この商品を含むブログを見る
TwitterのTLにて読んでる人何人かいたので、気になってた本。
立ち読みして悪くなさそうだったので購入。
メモ
- nullとundefined
- 代入していないなどの未定義undefined
- 検索した結果見つからなかった場合などnull
- getElementByIdは検索系なので、見つからない場合null
- 関数リテラルで定義した関数は巻き上げされない
- 関数宣言で定義した関数は巻き上げられる。区別して使う。
- 配列.lengthの値を書き換えるとindex以上の要素は削除される
- イベントハンドラの解除にはnullを代入
- 近代のブラウザはGCが強力なのでそれほど神経質にならなくても良さそう
- 最近のQiitaのメモリリーク関連の記事
- 関数にプロパティを持たせる。関数のメモ化で関数の処理結果をキャッシュするメモ化という応用。
- 感動。シンプルに定義できるし、早い。
- プロパティのキーを文字列にするとコスト高いので注意。
- 高階関数。簡単なイディオムとしてmap,filter,reduceを利用する例。
- 脳がついていかん。写経が必要そう。
- アロー関数のメリット。thisの決定が関数定義時にされる。
- Arrayもiteratorオブジェクト。
- その他String TypedArray Map Set
- Arrayのreduceメソッドで前方からの畳み込み処理
- Qiitaのpromise直列実行をreduceで作成する記事
- 処理内で動的にpromiseチェーンを作るときに必要な技術。
- 高階関数処理は頭おかしなる。promiseとreduceの練習不足なのだろう。
- 関数の戻り値を2個以上取る方法。分割代入を利用すると便利。
- var [a,b] = (x => [x*2,x*3])(1); // a=2 , b=3
- アロー演算子に慣れてないと全然読めない。
- var [a,b] = (x => [x*2,x*3])(1); // a=2 , b=3
- scriptの呼び出しタイミング。async/deferを指定。
- bodyの最後で読みだすとか、onloadで読み出すとか余計なことしなくてよさそう。
- 書籍と参考リンクありがたい
windows10 WSL ubuntuにrubyを入れつつgem(tsukuba-gc)を動かす
やりたいこと
つくば市のゴミカレンダー、2018年度データが出た。
GoogleHomeアプリはカレンダーデータを手でデータ入力してる。非常に原始的だ。
しかし調べたところpdfを解析するrubyのgemがあるとのこと。
ruby初挑戦しつつ使ってみることにする。
環境構築
$ sudo gem install tsukuba-gc
- NG
RMagick 2.16.0. Can't find Magick-config or pkg-config 発生
gem tsukuba-gc install
$ sudo gem install tsukuba-gc Fetching: concurrent-ruby-1.0.5.gem (100%) Successfully installed concurrent-ruby-1.0.5 Fetching: i18n-0.9.5.gem (100%) Successfully installed i18n-0.9.5 Fetching: thread_safe-0.3.6.gem (100%) Successfully installed thread_safe-0.3.6 Fetching: tzinfo-1.2.5.gem (100%) Successfully installed tzinfo-1.2.5 Fetching: activesupport-5.0.6.gem (100%) Successfully installed activesupport-5.0.6 Fetching: tsukuba-gc-0.1.0.gem (100%) Successfully installed tsukuba-gc-0.1.0 Parsing documentation for concurrent-ruby-1.0.5 Installing ri documentation for concurrent-ruby-1.0.5 Parsing documentation for i18n-0.9.5 Installing ri documentation for i18n-0.9.5 Parsing documentation for thread_safe-0.3.6 Installing ri documentation for thread_safe-0.3.6 Parsing documentation for tzinfo-1.2.5 Installing ri documentation for tzinfo-1.2.5 Parsing documentation for activesupport-5.0.6 Installing ri documentation for activesupport-5.0.6 Parsing documentation for tsukuba-gc-0.1.0 Installing ri documentation for tsukuba-gc-0.1.0 Done installing documentation for concurrent-ruby, i18n, thread_safe, tzinfo, activesupport, tsukuba-gc after 22 seconds 6 gems installed
- OK
動作チェック
$ tsukuba-gc 30north.pdf 2018 -o 30north.json
🎉目的達成🎉
- しかし出力結果が全然良くない…
- 最近のpdfに対応できなくなってしまったか、ライブラリのどっかでミスってるか。
- ちゃんとやるならforkしてpdf解析部分修正する必要ありそう。
- 時間無いので差し当たりは1月分手入力する…😖
終わりに
rubyの日本語情報の多さは化け物。エラー文言で検索するとほぼ何らかの記事が出るという…。
Qiitaに感謝するwebエンジニア多いのが分かるなあ。
Google Homeを遊びたおす会へ行ってきた(雑記)
田中みそさんが主催したGoogle Homeを遊びたおす会に行ってきた。
個人主催の勉強会で、300人近い規模の奴は初めて。終わってみると暴動等もなく、懇親会もいい感じに熱気があって良かったなー、と思う。
あとはGoogle社の山口さんに個人的な質問ができたのは収穫だった。
詳細
Google Homeでつくるスマートホーム by 田中みそ
- TVの操作で音声操作は煩雑。結局はリモコンが楽。Firebase Hostingでアプリ化したリモコン1個で完結させる。
- 家電操作程度ならIFTTTで作るのは問題ない。簡単に変数取れるので楽。
- GoogleHome怖い話。深夜に家電が勝手に動作。外部侵入を疑ったが、寝言に反応してGoogleHome起動してただけだった…
- 「嫁ブロックどうやってクリアした?」
- 「実用に訴える。実際小さな子供がいて、手が離せないときに家電操作は便利で実用に足る」
- 「沢山GoogleHome買ってたけど使用頻度どう?」*1
- 「いろんな部屋に置いたけど、ほとんどの利用はリビング」
他にも色々質問あったけど、メモが間に合わず。
メモ
- リモコン1個に統合(スマフォのみ) > 音声操作 > リモコンだらけ という使い勝手の図式がありそう。スマフォでできるならそれでいいよね。でも、メーカーごとにリモコンアプリ出されてもうざいだけ。
- バナナパンツでアイスブレイクしていくプレゼンスタイル。技術者には、芸人スキルも必要ということ。大変な時代。
- 勉強会に参加して田中さんのイケメン具合を確認しよう、というキャッチコピーが思い浮かんだ。
AoG会議室予約システムの構築 by MS太田さん
- OAuth認証必要なエンドポイントとの連携はすぐできるよ!
- AoGのoverviewの一番下にAccountLinkingある。認証方式色々ある。細かく説明しないけど、OAuth知ってる人なら悩まないような項目だよ。楽勝。
- シミュレーターでのAccountLinkingテストは会話が即終了するのでハマる。DEBUGタブに認証トークン(?)出てるのでそっちを見よう。
- 会議室予約システムのサンプルコード、GitHubにコード上げてるので見てね。AccountLinkingのサンプルとしても使えるはず。
- AoGの最大の強みは、Android携帯で(iOSでも)動くということ。スマートスピーカー持ってない人でも、スマートスピーカー持ってるようなもん。意識していこう。
質疑無し。
メモ
- AccountLinking使ったことないので参考になる。ソース公開されてるのでありがたい。
- AoGシミュレーター周りはハマりポイントが多い。個人の知見がわりとある気がするナァ。
- Office365とリンクしてたけど、G suiteとも行けるようになるんじゃね?的なtweetがあった。G suite使った良い感じのアプリ作れそう。
Google Home 用のお遊びアプリをMicrosoft Azure使って作ってみた by ちょまど
- GoogleHomeはおばあちゃんのためにこそ使うべき。
- スマートスピーカークイズやろうぜ!…正解率ヤベェ。恐ろしいところに来てしまった。
- 一応Cortana搭載のスマートスピーカーあるよ。日本発売未定。(やらなそうなニュアンス…)
- AoGのFulfillmentとして色んなCloudが選択できるよ。C#使いたいので、MS Azure使ってます。C# でHttpTriggerというコードで楽に作れるよ。
- 音声をマッチョに変える、まっちょまど作った。まっちょまどという名称は却下されたので、アプリ名はしかたなく筋肉ボイスに。(うろ覚え)
- GitHubにコードあるよ。Azure使ってくれや。
メモ
- 設備不具合のため、大変なことに。田中さんもデモできなかったので、GoogleHome周りのプレゼン機器呪われるのかもしれん。
- 技術者は油断すると固いプレゼンになっちゃうことが多いと思うので、クイズ付きのプレゼンできる人はそうはいない。と、おもう。
Actions on Googleでできること by 山口能迪さん
- IFTTTメリデメ。メリットはコードなしで作れる。デメリットは応答結果が無いこと。
- メディア系のアプリ=DirectActionsは法人事業者のみ対応してる
- Explicit invocationで会話変数取れるので、会話が短縮できるよ。
- Implicit invocationでファジーなユーザー呼び出しからアプリが呼び出されるようになる。もっとImplicit入れてくれ。*2
- ユーザー入力のゆらぎに対応するには形態素解析とかやらんといけないので大変。そこらへんはDialogflowで対応できる。コンソールからユーザー入力見てトレーニングしていこう。
- ラズパイあるならAIY Voicekit使おう。田中さん使ってくれ。
- 「Chrome CastのGoogleHomeテレビつけてがサードパーティに取られてるんだけど!」
- 「AoGの内部処理でランキングが変動したせいかも。日々調整してます。まずいので対応したい」
- 「simulatorでImplicit invocation動くのか?」*3
- 「設定でOFFモードになっててONにしました。できるようになってるはず」
- (fishさんの質疑にて)「終了系のIntentとか各ユーザーが作るのは無駄では?共通化してほしいんだが」
- 「公式からsample出します!zipインポートして使えるようにします」
メモ
- 懇親会で山口さんに質問したくて長蛇の列。山口さん休む暇もなし…。
- 懇親会にて:スマフォのGoogleAssistantから表示できる使い方・ヒントページにある楕円で囲まれた文字部分は「押せる」。押そう。
- 懇親会にて:SSMLで文末の「?」部分をうまく疑問形音声にできないか。*4
- 対応に挙げときます!現状でも、疑問文的な文末表現は疑問形で発話している。漢字の読みが変わるなど、日本語固有対応が必要なことが多い。何か気づきあればサポートページから投げてほしい。
- Explicit invocationは2個引数取れるようだ。がおまるさん試してた。色々できそう。
Invocationの設定できた!「BMI 測定を使って170cmで80kg」と言えばBMI値返ってくるようになったよ#dialogflow#GoogleHomeを遊びたおす会
— がおまる@スマートスピーカー・HoloLens研究者 (@gaomar) 2018年3月28日
質問できなかった
- テストアプリはAoGのtestDraft押下しないと1ヵ月で反応しなくなるらしいけど、最近どうなの?
- 面白ワード(↑↑↓↓←→←→BAとか)に反応するけど、一覧とかある?
Dialogflow tips by fishさん
- Dialogflow挫折経験あり。頑張りたい。
- Dialogflowは静的な処理は得意。プログラミング不要でほぼできる。
- Entityってなんだ?辞書みたいなものと考えよう。必須チェックボックス入れないと取りこぼし出ることがあるよ。
- Intentアンチパターン。似たような会話のintent作りまくると、失敗することが多い。Entityを使い1つのintentにするとよい。
- Dialogflowはいろいろなサービスと繋がれる。システム作る場合は、Dialogflowをなるべく処理フローの先頭に持ってくるべき。体験として後ろの方に置くとキツかった。
- 設計Tips。zipエクスポート機能があるので、定期的にエクスポートして差分管理するとよい。
- スクリーン無い状態であれこれ説明するのは無理だ。スクリーン有無状態が取れるので、処理を分けよう。
- プロジェクト上限数は課金して申請すればもりもり上げられる。課金自体は無駄にはならないので申請しよう。
- 遊び倒す。Dialogflowでmp3再生はコード書かなくてもすぐできる。やろう。
スポンサーLT by Smart Hacksさん
- ランキング見るとGoogleHome / Amazon echoでアプリ人気違う。片方でダメでももう片方で使われるかも。
- 企業作成アプリに個人アプリも負けてない。作ろう!
- 開発者個人インタビューやってるよ!あと企業さん広告いかがっすか?*5
納豆ご飯を作る非電源ゲーム
友人2人と久しぶりに非電源ゲーム作りを行った。
納豆ご飯を作るゲーム。
ダミー食材が多いのでうまくそれを避けながら、うまく普通の納豆ご飯を作る、という感じ。
仕様策定とテストで5時間ぐらい。かなり楽しかった。
ルール
その他
チームでブレストでアイディアを出しまくり、収束させるというデザインスプリントテクニックを利用して
ダミー食材を選定した。