なんも分からないのでしらべた

なんもわからん!…ので、できる範囲で調べる。

windows wsl(ubuntu)にGoogle Cloud SDK のインストール(雑記)

Googleubuntuインストール手順通りにやると、エラーが出る。
ざっくり調べたけど無視して進めて問題なさそう。
無視した結果、後で問題になるかもしれないけど…とりあえず動いたので一応記事にしておく。

エラーについて

手順の以下のコマンドの実行結果でエラーが出る

コマンド
sudo apt-get update && sudo apt-get install google-cloud-sdk
エラー結果
grub-probe: error: failed to get canonical path of `rootfs'.
grub-probe: error: failed to get canonical path of `rootfs'.
grub-probe: error: failed to get canonical path of `rootfs'.
/usr/sbin/grub-probe: error: failed to get canonical path of `rootfs'.
dpkg: error processing package grub-pc (--configure):
 subprocess installed post-installation script returned error exit status 1
dmesg: read kernel buffer failed: Function not implemented
                                                          E: Sub-process /usr/bin/dpkg returned an error code (1)
調査

MicrosoftのWSLリポジトリにissueとしてgrubのエラーがリポートされている。

aseering 氏のコメント(commented on 21 Apr 2017)

Relatedly, grub doesn't need to work, because WSL doesn't actually boot :-)
It would be nice if package installations didn't fail as a result of this.

(WSLは実際には起動しないので、grubは動作する必要はありません:-)
この結果、パッケージのインストールが失敗しなかった場合は、いいでしょう。)

github.com

調査結果より判断

issueの内容とコメントを見る限りWSLではgrubは動作しなくて良いようだ。
今回はとりあえずGoogle Coud SDKにてエラーが出るが特に問題ないと判断した。

コメントにもあるがエラー表示が嫌な場合は、grub-pcをアンインストールする手もある。
>>|shellscript|
sudo apt -f remove grub-pc
|

今後作業にて不具合があったらここに追記する。

GoogleHomeアプリ「つくば市のゴミカレンダー」をリリースした

リリース!またつくば市が最強に一歩近づいたな😎

その他仕様

  • 隠れ仕様的なのは特に仕込まず
  • 悪意のある連続アクセス遮断処理をキツメに入れたらGoogle社のレビューで発動してしまいリジェクト😓
  • GoogleHome全体で4種類の声質設定が有効化された
    • リリース時に設定したfemale2ではちょっと気に障る声だったので、male1に変更。male1はイケボ。
    • でもdefaultのGoogleHomeの声が一番落ち着くんだ…

振り返り

郵便番号周りの処理が若干めんどくさかった。
静的データのアクセス頻度と速度を考慮してデータを3か所に保存した・・・んだけど、作りが良くないかも。
良くある失敗例で、最初から処理速度とか考慮して設計すると構造がややこしくなるというアンチパターンになってしまったかも。

  • node.js埋め込みのゴミカレンダーデータ
    • 頻度高
  • 郵便番号と匿名IDを管理するrealtime database
    • 登録は1度だけ
    • 匿名IDに紐づいたカレンダー番号を読み出す
  • 郵便番号とゴミカレンダーデータの区分けを管理するfirestore
    • 参照は初回に一度だけ
    • 応答が若干遅い

埋め込みゴミカレンダーデータはrealtime databaseに統合しても良かったかも。
あとはnode.jsで簡単な状態遷移処理が構築できたので、次のGoogleHomeアプリからは作るのが楽になりそうだ。

Ryzen3 2200GとRyzen5 1400のベンチマーク比較

meltdownで嫌気が差しているので、格安自作PCの構成を検討している。
丁度2/13にRyzenの新しいAPUが発売された。

ascii.jp

新シリーズではRyzen 3 2200Gが最も廉価だ。
同価格帯の旧版(Ryzen5 1400)との性能差を見てどちらを購入するか検討したい。

価格COMの参考価格

  • Ryzen3 2200G BOX 13824円
  • Ryzen5 1400 BOX 14972円

調査方法

PCWatchのベンチマーク結果を並べて性能比較する

参考元記事

  • Ryzen5 2400G / Ryzen3 2200G

【レビュー】【本日発売】GPU内蔵になったRyzenの性能をベンチマーク - PC Watch

  • Ryzen5 1400 / Ryzen3 1200

【レビュー】2万円を切る「Ryzen 3」の実力を見る - PC Watch

調査結果

ベンチマークは参考元記事から項目を抜粋している

凡例

  • A:Ryzen5 2400G(GPU内蔵)
  • B:Ryzen3 2200G(GPU内蔵)
  • C:Ryzen5 1400+GPU( GeForce GTX 1080)
  • D:Ryzen3 1200+GPU( GeForce GTX 1080)

  • 1stスコアは太字
  • 2ndスコアは斜体
ベンチマーク内容 A B C D 備考
CINEBENCH R15(Single) 159 147 135 135
CINEBENCH R15(All) 833 585 698 483
HandBrake(H.264) 78 99 116 157 数値が低いほど良い
TMPEGEnc(H.264) 158 196 217 252 数値が低いほど良い
PCMark10 A B C D
score 3842 3577 6059 5711
Essentials 8021 7817 7400 7002
Productivity 6719 6555 6585 6538
DigitalContentCreation 4181 3892 5984 5624
Gaming 2614 2219 12495 11165
SandraPlatinum A B C D
Int 161.00 145.00 131.33 116.51
Long 160.24 141.00 133.20 115.37
Single-Float 96.75 63.44 84.67 54
Double-Float 82 53.51 70.78 44.62
SandraPlatinum(memory BW) A B C D
Integer B/F 33.45 32 35.62 34.45
Float B/F 33.51 33.18 35.85 35.29
3Dmark(TimeSpy) A B C D
score 1231 1007 6261 5837
Graphics Score 1103 899 7163 7158
CPU score 3619 3186 3655 2857

所感

  • PCMark10のEssentials/Productivityの結果を見ると、基本的なCPU性能はRyzen3 2200GはRyzen5 1400と比べて遜色ない
  • 浮動小数点演算(Float)はRyzen5 1400が明らかに良い
    • 3シリーズは元々プロセッサからSMP(同時マルチスレッディング)機能が省かれているためのようだ
  • memory bandwidthがRyzenの新シリーズ劣っている
    • 計測元のハードウェア構成を見ると、単にベンチマークを取った時のメモリレイテンシの違いによるものだろう
    • 新シリーズのベンチマークで使ったメモリ:DDR4-2933 8GB×2 (2ch、14-14-14-34、1.20V)
    • 旧シリーズのベンチマークで使ったメモリ:DDR4-2933 8GB×2 (2ch、16-18-18-36、1.35V)
  • 新シリーズ内臓Gpahics性能とGTX1080ではさすがに比較にならない差が出る
    • このPCではゲームをやらないので参考値程度に

終わりに

格安自作PCを作るうえで、GPUを別途購入するコストを考えると、Ryzen5 1400 + 格安GPU >> Ryzen3 2200Gとなる。
コスパは相当良い。ただ、新しい製品なのでマザーボードBIOS周りがちょっとリスクありそう。
初物は様子見たいところだけど、せっかく調べたのでRyzen3 2200G行ってみましょ~🙃
という結論で終わる。

おまけ

発注した構成

パーツ 型番 価格(税込み) 備考
CPU Ryzen3 2200G 13824 1'sPC在庫なしだったため仕方なくツクモ
マザーボード GA-A320M-HD2 6980 Gigabyte社が新シリーズに一番対応まともとの情報より。1'sPCにBIOS更新を依頼
メモリ crucial 4G×1 5760 1'sPC送料無料狙い(ケチってデュアルチャネルなし!)
その他 ケースとかHDD電源全部流用

合計 26564円

Discordでゲーム音声を配信する方法

ゲーム動画の配信時にゲームの音声が配信先で再生されないので困った。
調べた結果を雑にまとめる。*1

前提

  • Discordでの配信音声はマイクからの入力音声のみ
    • デスクトップ音声は配信されない
    • デスクトップ音声をDiscordの入力音声に指定したい
  • デスクトップ音声とマイク音声を同時に配信したい場合は音声を合成する必要がある

解決策

音声ミキサーソフトを使う

f:id:kbn1053:20180212212236p:plain

f:id:kbn1053:20180212212254p:plain

使用するソフト

Voicemeeter Banana

https://www.vb-audio.com/Voicemeeter/banana.htm

参考サイト

分かり易かった順

jp.finalfantasyxiv.com

ghosthack.net

雑手順

ほとんど参考サイト通り

  • Voicemeeter Bananaをインストールする
    • インストール方法は省略
  • windows右下のスピーカーマークから再生デバイスを開く
  • 再生デバイスの設定
    • VoiceMeeter Inputを既定のデバイスにする
    • VoiceMeeter Aux Inputを既定の通信デバイスにする
  • 録音デバイスの設定
    • VoiceMeeter Outputを既定のデバイスにする
    • VoiceMeeter Aux Outputを既定の通信デバイスにする

f:id:kbn1053:20180212213034p:plain

f:id:kbn1053:20180212213052p:plain

  • Voicemeeter Bananaを起動
    • 基本的にマイク1の設定して終わり
    • スピーカーの設定(A1)は必要なかったようなあったような・・・
    • 合成された音声はB1 = VoiceMeeter Output / B2 = VoiceMeeter Aux Outputとして出力される
    • 操作画面は慣ないと分かりづらい🤒

操作画面は初見はなんのこっちゃとなったので、雑画像説明↓

f:id:kbn1053:20180212214838p:plain

  • Discordの音声設定

f:id:kbn1053:20180212215115p:plain

うまくいけばこれでデスクトップ音声とマイク音声が再生される。

動作確認方法

配信しているPC環境のみだと、うまく配信できているか確認しづらい。
スマフォなどでチェックすると確認がとりやすいかもしれない。

  • 友人に確認してもらう
  • スマフォにDiscord入れて別垢できちんと配信されているか確認する

終わりに

Discordでクソゲーム配信楽しいね!
終わり。

*1:配信慣れてる人なら当たり前の内容だが

スマートスピーカーのペアレンタルコントロールについて(メモ書き)

まとまった情報が無く、記事にできなかった。
リンクとメモを記録として残す。

前提

米国ではCOPPAという13才未満のプライバシー情報の収集を禁止する法律がある。
スマートスピーカーは音声情報をサーバーに送信するため、法的に現状グレーのような立場にあると述べているサイトもある。そのためか、GoogleHome/Alexaでは13才以下の子供をターゲットにしたアプリ/スキルを禁止している。

日本国内法では、米国同等の法律が無い。近いものは青少年インターネット環境整備法だ。
COPPAに比べてスマートスピーカに影響を与えることは少なそうだ。

http://fortune.com/2017/10/24/amazon-echo-alexa-children-kids-privacy/

  • COPPA本文

https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule

スマートスピーカー各社の対応

GoogleHome

  • 日本ではまだ未対応だけど、海外は13歳未満の子供へのフィルタリング設定機能

https://support.google.com/families/answer/7521263?hl=en

また、Google社のActionsポリシーの文面からは、大人・子供がほとんど共通で使えるようなものにしたいと考えているようだ。

  • Actions の考え方

https://developers.google.com/actions/policies/general-policies#user_experience

Amazon Alexa

(自分のSmartHacksQA回答文面より:https://smarthacks.jp/qa/50)

調べた限り、Echoでのペアレンタルコントロールは残念ながら今のところできないようです。

海外でも問題となっており、子供の使用をコントロールしきれないと感じるのでしたら、親は不便ですが使うのを控えるしかないのではないか、というのが回答です。

一応Echo側もフォローしますと、EchoスキルはAmazon公式の承認を元に公開が行われます。公序良俗に反するようなものや、ポルノなどは認可が下りないような仕組みになっております。また、Echoによる商品の購入や決済などはスマフォアプリから設定行うことで、悪戯による注文がされないようにできます。

米国では子供向けのスキルの認可を積極的に推進するなどしており、家族で利用しても問題ないように配慮して普及を進めている感じを受けます。これからの進化でペアレンタルコントロールも対応されるかもしれません。

  • Amazonのスキル承認のポリシー

https://developer.amazon.com/ja/docs/custom-skills/policy-testing-for-an-alexa-skill.html#policy-examples

  • 海外の議論

https://iot.stackexchange.com/questions/518/how-can-amazon-echo-dot-be-made-for-families-with-childrenparental-control

Line Clova

(未調査)

あるべき機能(やりたいこと)

子供の声を認識・特定して、スマートスピーカーが反応しない、スキルを起動できないようなコンテンツフィルタ。
親の声はスマートスピーカーを無制限で利用できることなど。

Firebase Functionsのcron起動(メモ書き)

GoogleによるとFirebase Functionsのcron起動には以下の2つの方法があるとのことだ。

  • GAE+PubSub
  • 外部サービス

twitterでアドバイスいただいたのと、たかだかcronでPubSub必要か?とも思ったので、今回は外部サービスを使うことにした。
Googleの動画内で紹介されていたcronサービスのcron-job.org*1を使ってみる。

cron-job.org - Kostenlose Cron-Jobs, von minütlich bis einmal im Jahr.

blog記事(PubSub実行)

developers-jp.googleblog.com

手順

ほとんど動画通りに実施。

環境設定のアクセスキーを設定

Firebaseが知らない人から呼ばれまくると嫌なので、アクセスキーを設定する。
Firebaseはhttpsが標準なのでアクセスキーは盗まれない…と思う。

ただし、Firebase自身でアクセス制御する方式なので悪意攻撃されたらリソースは食う。
これについては、Apigeeというサービスでリバースプロキシを噛まして悪意対策はできそう。
(この記事では触れない)

1. 環境にアクセスキーの設定する
環境の設定  |  Firebase

1.1 アクセスキー文字列はlinuxにて自動生成
qiita.com

pwgen -s 65 1

1.2 アクセスキーを書いたjsonファイルを用意

{
  "key":"xxx",
  "id":"xxxx"
}

1.2 アクセスキーをjsonファイルから設定
qiita.com

 firebase functions:config:set service_account="$(cat config.json)"

2.Functionsの公開関数先頭にアクセスキー制御処理を追加
動画の参考ソース置き場
functions-samples/index.js at master · firebase/functions-samples · GitHub

抜粋内容

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const secureCompare = require('secure-compare');

exports.accountcleanup = functions.https.onRequest((req, res) => {
  const key = req.query.key;

  // Exit if the keys don't match
  if (!secureCompare(key, functions.config().service_account.key)) {
    console.log('The key provided in the request does not match the key set in the environment. Check that', key,
        'matches the cron.key attribute in `firebase env:get`');
    res.status(403).send('Security key does not match. Make sure your "key" URL query parameter matches the ' +
        'cron.key environment variable.');
    return;
  }

//この下に通常処理を記載する

firebaseにdeployする

firebase deploy --only functions

うまくいけばwebapiのURLが生成されるのでコピーする

cron-job.orgでURLの呼び出し設定を行う

設定方法は以下のサイトが詳しい。
www.lancork.net

呼び出しURLには?key=xxxxxxをつけてパラメータを渡す。以下のような感じ。
f:id:kbn1053:20180202181059p:plain

その他

試しに数分後に起動する設定を行い、cron-job.orgにてsuccessと表示されたらcronが成功したということだ。
firebase側のconsoleからもlogや実行数が変化するので動作していることが確認できる。

*1:なんか転職サイト的なドメイン名でいやだな

GoogleHomeアプリ申請時のチェックポイント(リジェクト関連記事まとめ)

GoogleHomeアプリを公式申請した場合、審査にはある程度時間がかかる。
審査にかかる時間は短いと1日、長い場合1週間かかる(土日は休み)こともあるようだ。
先月自分が審査されていたときは、だいたい4営業日で結果が分かるという感じだった。
直近では、審査期間はもっと短くなったように思う。

審査期間が何日もかかる状態だと、開発者としてはやきもきして非常につらい。
ポカミスが原因のリジェクトはなるべく避けたいところだ。

事例を調べると自分も含めて、ちょっとした設定ミスが原因のリジェクトも多い。
何度もやらかしてGoogle社に迷惑をかけると申し訳ないので、自戒もかねてリジェクト関連の情報をまとめた。

調査結果

良く失敗するポイント

Actions on GoogleのApp information設定ミスがほとんど

  • Pronunciation (4件)
  • Sample Invocation (4件)
    • Sample Invocationに入力した言葉でアプリを起動できるか確認できないとリジェクト
    • シミュレーター等で呼び出してみて、ちゃんとアプリが呼び出せること
  • Category (4件)

調査方法

  • Googleで「GoogleHome リジェクト」で検索
  • Qiitaで「GoogleHome リジェクト」で検索
  • Twitterで「GoogleHome リジェクト」で検索

詳細

個別事例へのリンク

参考になりそうな順

qiita.com

note.mu

  • Actions on GoogleのApp information設定
    • Pronunciation
    • Sample Invocation
  • サーバー
    • サーバーダウン
  • VUI
    • ユーザーが何を回答すればいいか分からない

qiita.com

  • Actions on GoogleのApp information設定
    • Pronunciation
    • Sample Invocation
    • Category
  • VUI
    • 終了方法のガイド
  • 処理内容 / ロジック
    • 処理間違い

qiita.com

    • Actions on GoogleのApp information設定
      • Name
      • Privacy policy
      • Category
    • VUI
      • ユーザーが何を回答すればいいか分からない
    • 処理内容 / ロジック
      • 処理間違い

hobik-site.blogspot.jp

  • Actions on GoogleのApp information設定
    • Pronunciation
    • Sample Invocation
  • 処理内容 / ロジック
    • 処理間違い

kbn1053.hatenablog.com
拙作

■Category incorrect
「Business and finance」は金融、経済とかのアプリに使います。
本アプリはアプリを起動した時刻を保存したり前回呼び出した時間と今の時間の差を教えてくれたりするアプリなので「Productivity」のほうが適切かと存じます。

https://assistant.google.com/services/a/uid/00000036250bb88d?hl=ja
拙作

  • Actions on GoogleのApp information設定
    • Sample Invocation
  • 処理内容 / ロジック
    • 処理間違い

■Sample triggers incorrectly structured
Sample Invocationsでは、<アプリ名、または、 Pronunciation + Trigger Phrase>を組み合わせた形で文言を作成し、
必ずその文言がアプリ起動することをご確認いただいてから、ご申請いただく必要があります。
ご申請いただきました以下のSample Invocationsではアプリ起動が確認できないため、承認致しかねます。
・「つくば市ゴミカレンダー」
・「つくば市ごみカレンダー」
該当箇所を削除いただくか、本アプリがGoogleアシスタントで起動できる文言にご修正いただけますでしょうか。

■Unable to complete action described
本アプリをテストしたところ、アプリを起動するとアプリが「このアプリは使用できません。終了します。」と反応して終了するのを確認しました。
ご確認してご修正をお願い頂けますでしょうか。

その他

カテゴリの日本語訳の表

Category 日本語名 メモ
Art&lifestyle アート&ライフスタイル
Business&finance ビジネス&金融 金融、経済とかのアプリ
Education&reference 教養&知識 本や、教育、教育用ゲームなど
Food&drink フード&ドリンク
Games&fun ゲーム&娯楽 ゲームやダジャレなど
Health&fitness (日本語カテゴリなし)
Home control スマートホーム
Kids&family (日本語カテゴリなし) 「Kids & family」の場合、現在USでのみ対応しており、日本での対応は未定
Local 地域 地域固有の情報
Movies,photos&TV 映画&写真&テレビ
Music&audio 音楽&オーディオ 「音楽サービス」などといった、実際に音楽に関わるサービス
News&magazines ニュース&雑誌
Productivity 仕事効率化 時間を測ったり、ちょっとしたツール
Shopping (日本語カテゴリなし)
Social&communication ソーシャル&コミュニケーション
Sports スポーツ
Travel&transportation 旅行&交通機関
Weather 天気