Androidのメモとか

ポキオの日記です。今日も遅延してない。

IBM CloudのライトアカウントでNode-REDを動かすときのTIPS

256MB使うのはもったいない!

ポキオ IBM Cloud Node-RED

Node-RED、便利ですよね

以前から使ってる、Node-RED。

relativelayout.hatenablog.com

IBM Cloud上で動くし、ライトアカウントでも使えるので、本当に便利なんです。 ポキオ IBM Cloud Node-RED

ただ、デフォルトでアサインされるメモリは256MBで、これだけでライトアカウントの上限にいってしまいます。かといって、ダッシュボードから256MB→128MBに減らしてしまうと、安定して動作しなくなります・・・。困った。

そこでコマンドラインインターフェイス

CLIの出番です。

https://console.bluemix.net/docs/cli/reference/bluemix_cli/get_started.html

IBM Cloudのダッシュボード(GUI)からだと、Node-REDのメモリを128MB刻みでしか変更できませんが、CLIからだと細かく変更できます。

bluemix cf scale (アプリ名) -m 192M

こんなかんじでコマンドを打つと、Node-REDにアサインされるメモリを192MBに変更できます。

ポキオ IBM Cloud Node-RED

実際に192MBに変更したあと、ステータスを見てみると、実際に使用されているのは140MB程です。まぁ、余裕を持って192MBくらいをアサインしておけば大丈夫でしょう。余った64MBで、IBM Cloud FoundryとかでNode.jsできそうですね。

livedoor天気予報のAPIが動かなくなったので気象庁のデータを使って天気予報情報を電子ペーパーに表示させてみる

急遽。

livedoorさん・・・

さっき、勢いで書いた記事の通り、livedoor天気予報のAPIがワークしていません。

relativelayout.hatenablog.com

困ったときの気象庁

そうなると、以前作った天気予報ガジェットも動かなくなるので、気象庁の天気予報のページをパースして、情報を得られるようにしてみました。

github.com

いつかlivedoorさんが対応してくれると信じて、ブランチでの実装となっています。実際にスクリプトを走らせると、こんな感じの画像が生成されるので、これを電子ペーパーに表示させていきます。

ポキオ livedoor 天気 API

実際に動いている様子がこちら。

スクリプトの実装は結構やっつけなので、あまり参考にしないでください・・・。

愛用しているlivedoor 天気のAPIの調子がおかしくてツライ→復活してます!

ツライやつ。

ポキオ livedoor 天気 API

livedoorAPIが絶不調

先日、諸事情で運転を中止した天気予報ガジェットですが。

内部のスクリプトで使っているlivedoor 天気のAPI「Weather Hacks」の調子が悪いようです。今後もお世話になりたかったAPIだけに、非常に残念です・・・。

weather.livedoor.com

具体的には、

  • JSONのデータが2018年8月30日の夕方で更新が止まっている
  • JSONforecastsに含まれるはずの天気予報情報が空っぽ
  • 本家の天気予報ページも正常に表示されていない

こんな感じで、非常にグズグズな感じです。早く復帰すればいいのですが・・・。

livedoorが提供するRSSフィードデータは、予告なく変更・配信を終了する場合があります。あらかじめご了承下さい。

はい。

(追記)復活してます!

2018/09/03のお昼ごろには復活してました!やったね!

生データ

{
    "pinpointLocations": [
        {
            "link": "http://weather.livedoor.com/area/forecast/1410000",
            "name": "横浜市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1410011",
            "name": "横浜市北部"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1410012",
            "name": "横浜市南部"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1413000",
            "name": "川崎市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1420100",
            "name": "横須賀市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1420300",
            "name": "平塚市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1420400",
            "name": "鎌倉市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1420500",
            "name": "藤沢市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1420700",
            "name": "茅ヶ崎市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1420800",
            "name": "逗子市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1421000",
            "name": "三浦市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1421300",
            "name": "大和市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1421500",
            "name": "海老名市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1421600",
            "name": "座間市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1421800",
            "name": "綾瀬市"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1430100",
            "name": "葉山町"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1432100",
            "name": "寒川町"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1434100",
            "name": "大磯町"
        },
        {
            "link": "http://weather.livedoor.com/area/forecast/1434200",
            "name": "二宮町"
        }
    ],
    "link": "http://weather.livedoor.com/area/forecast/140010",
    "forecasts": [],
    "location": {
        "city": "横浜",
        "area": "関東",
        "prefecture": "神奈川県"
    },
    "publicTime": "2018-08-30T17:00:00+0900",
    "copyright": {
        "provider": [
            {
                "link": "http://tenki.jp/",
                "name": "日本気象協会"
            }
        ],
        "link": "http://weather.livedoor.com/",
        "title": "(C) LINE Corporation",
        "image": {
            "width": 118,
            "link": "http://weather.livedoor.com/",
            "url": "http://weather.livedoor.com/img/cmn/livedoor.gif",
            "title": "livedoor 天気情報",
            "height": 26
        }
    },
    "title": "神奈川県 横浜 の天気",
    "description": {
        "text": " 前線が日本海から北日本にのびています。一方、高気圧が日本の東にあっ\nて、ほとんど停滞しています。\n\n 神奈川県は、晴れや曇りとなっています。\n\n 30日は、高気圧に覆われて晴れますが、湿った空気の影響で夜遅くは曇\nるでしょう。\n\n 31日は、高気圧に覆われて晴れますが、湿った空気が流れ込むため時々\n曇りとなり、昼過ぎから夜のはじめ頃は雨や雷雨となる所がある見込みです\n\n\n 神奈川県の海上では、30日から31日にかけて、波がやや高いでしょう\n。船舶は高波に注意してください。",
        "publicTime": "2018-08-30T16:52:00+0900"
    }
}

旅先にあったhandyを使ってみた

箱根の宿においてあったのでメモ。

ポキオ handy

handy?

外観

ポキオ handy

ポキオ handy

  • 接点部分はUSBコネクタではなく、マグネット式のコネクタになっていた
  • スマホSHARP製(SH-H01)

ソフトウェア

ポキオ handy

  • おそらくカスタムOS
    • 画面上部からのドロワーは「Wi-Fi・BT・画面回転・音量」のみ
    • テザリングは出来ない
    • AirplaneモードはDisabledになっている
    • ロック画面は広告が表示される
  • チェックアウト日を予め入力しておくと、その日になるとスマホがファクトリーリセットされる機能がある(個人情報削除)
  • ホーム画面アプリが、handyアプリになっていた
    • ガイドマップや観光名所が表示される
    • 通常のアプリの起動もできる
    • Google Playアプリもあり、任意のアプリを入れられる(要Googleアカウント)
  • 通話は無料(IP電話
    • 050の番号が割り振られていて、着信が可能
    • 発信もIP電話を使って可能だが、番号非通知で電話がかかる

使ったか?

  • つかった
    • ただし、持ち歩かなかった(客室内だけで利用)
    • YouTube再生機として子供に渡した

Clova + Clova Extension Kit + IBM Cloud FoundryでClovaスキルをチョッパヤで作ってみる(後半)

チョッパヤとか言いながら、2部構成です。

ポキオ Clova Extension Kit with IBM Cloud Foundry

前回まではスキル作成のための登録を行いました

relativelayout.hatenablog.com

さて、これからが本番です。

  • スキルで使う単語とその同義語を登録
  • スキルで使う文章を登録
  • スキルに対して呼びかけがあった時に、裏で行う処理の記述
  • その処理をIBM Cloud Foundryにデプロイ
  • Web上と実機でテスト

こんな感じで開発を進めていきます。

スキルで使う単語とその同義語を登録

まずはスキルで使う単語と同義語を登録します。Dialogflowで言うところのEntitiesです。

ポキオ Clova Extension Kit with IBM Cloud Foundry

スキルの一覧から、対話モデルの「修正」を選択し、対話モデルの開発を始めます。

ポキオ Clova Extension Kit with IBM Cloud Foundry

すると、スキルのダッシュボードが表示されるので、カスタムスロットの部分の「+」マークを押して追加をします。

ポキオ Clova Extension Kit with IBM Cloud Foundry

たとえば、京急関連のスキルを作る際に、想定しているClovaの呼びかけで京急という単語を含む場合、人によっては京急線と言うかもしれないし、京浜急行と言うかもしれません。そのあたりのバリエーションをカスタムスロットで吸収するようにしていきます。

スキルで使う文章を登録

これはDialogflowでも単語は同じでIntentです。

ポキオ Clova Extension Kit with IBM Cloud Foundry

たとえば、京急線の運行情報を調べるスキルを作るとします。京急という単語自体のバリエーションはカスタムスロットで吸収できましたが、そもそもユーザーの質問の仕方はまちまちで「京急の運行情報を教えて」とちゃんと行ってくれる人から「京急動いてる?」「京急どう?」みたいな言い方まで想定されます。ただ、どれもやりたいことは「京急の運行情報を知りたい」ということなので、同じインテントでいろいろな言い回しを登録していきます。

裏で行う処理の記述

ここまでできると、京急の運行情報を知りたいときに、色んな言い回しでClovaに話しかけても、なんとか対応できるようになりました。しかし、実際にどういうセリフを返すのかはまだ未実装です。

その部分はCEKから提供されているSDKをつかって実装していきます。いろいろな言語向けにSDKが準備されていますが、今回はNode.jsで実装していきます。

またまた、dotstudioさんの素晴らしいチュートリアル記事を参考にさせていただきました。ごめんなさい、コピペしました。ごめんなさい。

dotstud.io

適当にフォルダをほって、npm initしていきます。

mkdir keikyu
cd keikyu
npm init -y

そして、CEKのSDKなどをインストールしていきます。

$ npm install @line/clova-cek-sdk-nodejs express body-parser --save-dev

最後に、app.jsファイルを作成し、以下のようにコーディング。

const clova = require('@line/clova-cek-sdk-nodejs');
const express = require('express');

const clovaSkillHandler = clova.Client
  .configureSkill()
  .onLaunchRequest(responseHelper => {
    responseHelper.setSimpleSpeech(
      clova.SpeechBuilder.createSpeechText('こんにちは、ポキオです!')
    )
  })
  .onIntentRequest(responseHelper => {
    const intent = responseHelper.getIntentName();
    const sessionId = responseHelper.getSessionId();

    responseHelper.setSimpleSpeech(
      clova.SpeechBuilder.createSpeechText('京急は神です!')
    )
  })
  .onSessionEndedRequest(responseHelper => {
    const sessionId = responseHelper.getSessionId();
    clova.SpeechBuilder.createSpeechText('さようなら!')
  })
  .handle();

const app = new express();
const port = process.env.PORT || 3000;

const clovaMiddleware = clova.Middleware({ applicationId: "スキルのIDをここに記載" });
app.post('/clova', clovaMiddleware, clovaSkillHandler);
app.listen(port, () => console.log(`Server running on ${port}`));

ここでは、何を聞かれても「京急は神です」と答えるだけのスキルを実装しました。必要であれば、onIntentRequest()内でインテントの種類を見分けて、そこからWebAPIをたたくなどして、レスポンスの文言を動的に変えるなどの実装が必要になります。

その処理をIBM Cloud Foundryにデプロイ

おとなしくLambdaを使えばいいものを、大好きなIBM Cloudを積極的に使っていきます。

www.ibm.com

とはいえ、ほぼLambdaです。

ポキオ Clova Extension Kit with IBM Cloud Foundry

大切なことなので何回も言いますが、クレジットカード登録不要の無料アカウント「ライトアカウント」でも、無料枠を使ってIBM Cloud Foundryを使うことができますので、控えめに言ってかなりおすすめです。

とりあえず、Cloud FoundryのNode.jsのスペースを作りまして、そこにさっき書いたコードをデプロイしていきます。

デプロイする前に、IBM Cloud Foundry向けのおまじないをします。

IBM Cloud 上で稼動する Web アプリケーション開発方法 – Node.js 編
www.ibm.com

下記のように、ファイルを2つ作る必要があります。

Procfile ファイルの作成

IBM Cloud 上でメモ帳アプリケーションを開始するための実行コマンドは Procfile ファイルで指定します。下記内容で作業ディレクトリーに「Procfile」 (拡張子なし) ファイルを作成ください。テキスト・エディターによって拡張子が付加されてしまう場合がありますので、ご注意ください。

Procfile ファイル (C:\Bluemix\MemoApp\Procfile)

web: node app

 

.cfignore ファイルの作成

IBM Cloud 上へメモ帳アプリケーションをアップロードする際、除外したいディレクトリーやファイルは.cfignore ファイルで指定します。下記内容で作業ディレクトリーに「.cfignore」ファイルを作成ください。npm モジュールは package.json ファイルによって別途インストールされますので、node_modules ディレクトリーを除外する必要があります。

.cfignore ファイル (C:\Bluemix\MemoApp.cfignore)

node_modules

あとは、IBM Cloud CLIをインストールしさえすれば、簡単にターミナルからコードをデプロイできます。

cd keikyu
bluemix api https://api.ng.bluemix.net
bluemix login -u (ユーザー名) -o (ORG名) -s (スペース名)
bluemix app push (Foundry App名)

これでデプロイ完了です。先程のスキルのExtensionサーバーのURLに、このIBM Cloud FoundryのURLに/clovaを足したものを入力すればOKです。

Web上と実機でテスト

スキルのダッシュボードに戻ってきて、左上のビルドを押してから(この処理が数分かかる・・・)、テストという項目をクリックして、実際に文章を入力してテストをしてみましょう。

ポキオ Clova Extension Kit with IBM Cloud Foundry

サービスの応答の部分に「京急は神です!」と表示されています。うまく行ってそうなので、実機でテストしたいと思います。

ポキオ Clova Extension Kit with IBM Cloud Foundry

スマホのClovaアプリを開き、スキルストアの画面を開きます。LINE Developerと同じLINE IDであれば、テスト中のスキルというところに先程作成したスキルが表示されるはずなので、これを有効にしてあげると実機でも動作確認ができます。

こんな感じでオレオレClovaスキルが簡単にできてしまいます。みなさんもぜひClovaスキル開発をしてみましょう。

Clova + Clova Extension Kit + IBM Cloud FoundryでClovaスキルをチョッパヤで作ってみる(前半)

Clovaでもスキル開発!

ポキオ Clova Extension Kit with IBM Cloud Foundry

一般開発者でも作れるようになりました

Clova Extension Kit(以下CEKと呼ばせていただきます)がLINEから公開されて、私のようなウィークエンド・デベロッパでもClovaスキル開発ができるようになりました。

clova-developers.line.me

もちろん、無料で開発ができます。

CEKのPros.&Cons.

Google AssistantやAlexaから遅れて開発環境が揃ったClovaですが、大まかな開発方法は、先発組とほぼ同じなので、一度他のプラットフォームでスキルを作ったことがある人であれば、とくに躓くこと無くClovaスキルを開発できると思います。

また、無料でスキル開発ができ、スキル公開前に簡単に実機で確認できるのも、開発を効率よくすすめる上で非常に助かる部分であります。

ポキオ Clova Extension Kit with IBM Cloud Foundry

ただし、ちょっと厄介なのが、スキルのメインの処理を行う部分はLINEから提供されていません。Google HomeであればFirebase、AlexaであればLambdaといった感じで用意されていますが、Clovaスキル開発では、その部分を自前で準備する必要がありますので、ちょこっとハードルが上がります。もちろん、FirebaseやLambdaも使えますので、慣れたものを使うといいかもしれません。

私はそのあたりが疎く、なるべく無料(しかもクレジットカード登録不要)で済ませたかったのと、人とちょっと違う方法で実装したかったので、今回はIBM CloudのFoundryを使うことにしました。

取り急ぎCEKを始める

dotstudioさんの方で、すでに素晴らしいチュートリアル記事がありましたので、そちらを参考に進めさせていただきます。

dotstud.io

まずはLINE Developerにサインアップ。

ポキオ Clova Extension Kit with IBM Cloud Foundry

LINEのアカウントでサインアップします。

ポキオ Clova Extension Kit with IBM Cloud Foundry

サインアップ・サインイン後に、ダッシュボードからプロバイダを作成します。

ポキオ Clova Extension Kit with IBM Cloud Foundry

その後、新しいスキル作成のためにチャネルを追加します。

ポキオ Clova Extension Kit with IBM Cloud Foundry

スキルの名前やID(Androidのパッケージ名みたいなもの)を指定していきます。

ポキオ Clova Extension Kit with IBM Cloud Foundry

サーバー設定の「ExtensionサーバーのURL」には、FirebaseやLambdaなどのコンピューティングサービスで作ったWebAPIのURLを入力しておきます。今回は、テキトーなURLを一旦入れておいて、あとからIBM Cloud Foundryで作ったWebAPIのURLを突っ込みます。

これ以降のフローでも情報の入力が求められますが、スキルを公開しないのであれば、全部が全部入力する必要はありません。

これでスキルの開発ができるようになりました。ちょっと長くなってしまったので、一旦ここまで。

続きはこちらからどうぞ。

relativelayout.hatenablog.com

気づいたらClova Friends miniを買ってた

こわいこわい。

ポキオ Clova Friends mini

買っちゃった

以前からGoogle Homeをちょいちょい触ってました。

relativelayout.hatenablog.com

relativelayout.hatenablog.com

これだけスマートスピーカーが面白いと、ほかのスピーカーも面白いのではと思い、気づいたら買ってしまいました。Amaz○nのアレでもよかったんですが、どうしてもクレジットカード登録が必要というのが嫌いなので、今回はClovaを買ってみました。

Unboxing

かわいい。小さい。かわいい。

ポキオ Clova Friends mini

ブラウン氏はもともと好きなんですが、これがスマートスピーカーになっちゃうと更に可愛いですね。そしてGoogle Home miniと比較してもコンパクトです。

取り急ぎ設定

Clovaアプリをスマホにインストールして、設定を粛々とやっていきます。

ポキオ Clova Friends mini

面白いのは以下の通り。

ウェイクアップワードを変えられる

「Clova」「ねぇClova」はいいんですが、「Jessica」も設定ができます。突然のJessicaに驚きつつ、かっこいいのでJessicaに設定してみました。

バッテリー内蔵

これは地味に嬉しいですね。ハンズオンなどでも重宝しそうなフィーチャーで、ほかのスマートスピーカーではあまりありませんね。

給電はUSB 5V

Type-Cのケーブルがあれば、様々な方法で給電できます。特殊のコネクタ形状ではないので、どこでも充電できそうです。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。