わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

LeetCodeでrustを始めました

LeetCodeで、書いて動かして身につける

Rustというプログラミング言語 https://www.rust-lang.org を身につけたくなりました。

ただ言語を覚えても使えないのですが、LeetCode https://leetcode.com というサイトで練習問題を解いています。かなり、いいです。

なぜRustかといえば、もう、組み込み向けのファームウェアで、memset(*some_ptr, sizeof(some))して構造体を初期化しているつもりが、some_ptrがsome1という1バイトだけサイズが小さい構造体で、隣の1バイトに0を書き込んでしまって、隣にある構造体がたまたま先頭が通常は0である時だけフラグ1が立つフィールドで、滅多と異常な振る舞いはしないけど、たまに異常な振る舞いをする、実行状態依存のバグ調査なんて、二度としたくないからです。とはいえ、C++は私には難しすぎます。

Rustのドキュメントは https://doc.rust-lang.org にあります。日本語訳を出されているサイトが https://doc.rust-jp.rs にあります。ここには、プログラミング言語 Rust, 2nd Edition(最新版)/ The Rust Programming Language, Second Edition の日本語版が https://doc.rust-jp.rs/book/second-edition/ にあります。

他の言語から推移する

プログラミング言語を習得するには、最初にしっかりと基本的な説明を読み、その言語で素直に書けて他人が読みやすい表現を身につけていくのがよいと思います。素直にかけて読みやすい表現は、小さな1つの完結したプログラムを、数をたくさん書いて動かしてみるのがよいのではないでしょうか。

Rustをいきなり書くのは、無理です。全く訳がわかりません。だから、まずSwiftで動くコードを書いて、それをRustに書き直すことをしています。なぜSwiftかといえば、iOSアプリ開発が本業なので、今時の言語で今覚えている言語がSwiftだったからです。WPFアプリを書いていた20年程前なら、C# だったでしょう。

C言語で書くのは、全くの無意味だなと思います。今時の言語は、イテレータやら辞書やらがあって当たり前ですが、そんな概念がない言語でコードを書くのは、辛いですし、その言語で書いたコードを今時の言語に訳し直すのは、今時の言語の当たり前にある恩恵を全く無視することになり、やる意味がありません。C++という選択肢があるとは思いますが、C++は私には難しすぎます。

なんの工夫もない力づくのコードを、まずSwiftで書きます。処理自体は正しくても、実行時間が長すぎて不合格になったりします。そのコードを、Rustで書くと、十分に短時間で処理が終わり受け付けてもらえるのをみると、Rustを学ぶ理由は速さと自分に納得感が出てきます。

トロイア遺跡の発見で知られるシュリーマンは、ものすごい数の言語を習得していたそうですが、その習得方法の一部に、すでに読んだことのある本の翻訳版を何度も繰り返して読むことがあったそうです。ほんとかどうか知りませんけど。すでに知っている言語で一度書いて、それを翻訳するのは、基本的な部分を身につけるには良さそうです。

XcodeとVS Codeでプレイグラウンド

LeetCodeのサイトは、ハイライト表示などのコードを書く支援機能もあり、コードを快適に書けます。ですが、身につけていない言語でコードを書く場合は、リアルタイムな入力補完や文法エラーの指摘が欲しいところです。

いわゆる、プレイグラウンドがローカルに欲しいところです。

Xcodeは、Macに無償でインストールできます。Xcodeで、メニュー新規作成からプレイグラウンドを作成して、Swiftで書いたコードをその都度評価、その都度実行ができます。

Rustの始め方は、 https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/getting-started.html に書いてあります。

Rustのプレイグランドな環境は、VS Codeを使います。

単体のソースファイルを実行するには、extensionで、Code Runner 0.9.8 をインストールします。Rustの適当なファイル(例えば main.rs のように拡張子をrsにしておけば)を新規作成して、適当にコードを書いて、右クリックで”Run code”をすれば、rustcデコンパイルしてくれます。コンパイラのエラーメッセージでコードが書けるなら、これでいいでしょう。

さらにリアルタイムな入力補完や文法チェックなどが欲しいなら、extensionで Rust (rls) 0.6.1 をインストールします。さらに、rustのCagoプロジェクトを作れば、依存関係も見た入力補完が利くようになります。

Rustの使いどこ?

Rustはべメタルからサーバーまで、幅広く使える言語ですが、私の個人的な要求は、数KBのメモリしかないマイコンで、今時の言語で開発をしたい、ただそれだけです。

今時の言語であれば、そもそも、やらなくてもいいこと、言語に組み込まれたあらゆる工夫や技術開発のおかげで、今ではもう苦労する必要がもうないものを、考古学的に現代で縄文人の生活をするようなことは、もう嫌なのです。苦労は買ってでもしろというなら、店頭に並べておくので、いくらでも買っていって欲しいくらいなのです。

forループで配列を処理するのに、配列の長さを間違えて、書き込んではならぬメモリ領域を暗に変更して、それがずっと後になって何かの処理に影響を及ぼしたり、あるいは及ぼさなかったりするのは、実際に実行されているあまたのデバイスで、稀に発生するが再現できない何かがあると言われるのは、もう嫌なのです。

配列の長さを確実にチェックするのに、{some_type * array_ptr, int count } と、わざわざ自分で配列の長さを記録して配列の処理ループを書くのは、嫌なのです。

今時の言語ならイテレータを使えば済むことを、わざわざforループでベタがきして、潜在的なバグを発生させる綱渡りのようなコードを、大昔に開発された言語で今書いて、地雷を自分で埋めて自分で踏み抜くのが、嫌なのです。

とはいえ、数KBくらいしかメモリがない、OSもないマイコン向けのバイナリを吐き出せる言語系というと、C言語かC++言語になっています。これらは直接機械語を吐き出します。今時の言語は、例えばJavaにしてもSwiftにしても、配列アクセス時の範囲チェックやメモリ管理などが必要ですから、ランタイムがコードを実行しています。ランタイムは、小さなメモリのマイコンに移植するのは、例えばtinyCLRなど実装例がありますが、1桁KBには無理です。

Rustを使ってみると、処理経過がスタックにズラーっと並び、しかも無駄なコピーも発生させずに、処理が終われば長くのびたスタックが元の長さに戻り、その先頭には処理結果がちょこんと乗っている、そんなメモリの時間軸の流れと、処理の流れがイメージできます。

Rustで書いたコードはデータの局在性が極めて高くなりそうだし、そうなるようなコードを書くのがRustでの素直に読めるコードになるのでしょう。最近のプロセッサの処理速度は、演算回路それ自体よりもむしろメモリ幅で制約される場面も多いでしょう。

ハイエンドでも、いい言語かもしれません。データの局在性で。プログラム自体がバイナリが小さい=キャッシュに収まる、スタック的に処理が進む=以前にアクセスした領域だから高い確率でキャッシュに残っている、処理経過がスタックが伸びる感じで進む=データ局在性が極めて高くキャッシュヒットが高くなる感じのコードを書くことになるのかもしれません。もちろんRustにでもRcを使えば参照メモリが使えて、JavaやSwiftと同じようなメモリ領域の使い方ができますが、そういうコードを書く言語ではない、それだけのことなのでしょう。最近のプロセッサはL3キャッシュが2桁MBだったりしますから、そのキャッシュに丸っと処理系が入って出てこないなら、もうプロセッサがFPGAと見分けできなくなりそうですね。

STADIAのブログを読んでみる

開発者サイトに入らないと何もわからないですね

https://stadia.dev/blog/ に、いくつかブログ記事があったので読んでみました。技術的な中身というよりも、なにができるかアイディアを出してみようという感じで、実際に作る段階がどうなっているのか、どのように動くのかは、開発者情報に入らないとまるでなにもわからない感じです。

https://stadia.dev/apply/ 開発者への応募は、US在住ならば雇用者Tax ID番号の登録が必要です。メールアドレスは、会社のドメインのアドレスである必要があり、Gmailなどのアドレスでは受け付けないそうです。

フレームデータがクラウド側にあるよと

https://stadia.dev/blog/stream-connect:new-possibilities-for-multiplayer-gameplay/

Stream connectの概要です。ユーザのビデオをテキスチャとしてゲームに織り込むことができる、またユーザからのオーディオをゲームに混ぜ込むことができる、そうです。チャットやグループでプレイする場面で使えるのでしょうか。

フレームデータがクラウド側にあって、再レンダリングすることなく、あるプレイヤーから他のプレイヤーにフレームデータを渡せること。ここが活用どころになるのでしょう。

例題として:

  • コーチベースの画面分割、複数の人数のゲーム画面を1つの画面に。
  • 共同のsquadビュー、全てのチームメートの見ているのを、それぞれのプレイヤーの視点に、
    • コーディネータに、画面のレンダリングを再度しなくてもいい。
  • あるプレイヤーから別のプレイヤーに、フレームデータを、だいたいすぐにストリームする。

観客がいるゲームなら、レンダリングパイプのHUDを入れる前のゲーム画面を観客に配信して、プレイヤーはそこにライフゲージなどのHUDがレンダリングされたものを見る、というのができるとか、そういう感じです。

配信技術に関わる部分、符号化方式、ビットレート選択とかそういった話はありません。Googleに任せろ、になる部分は知ってても、手が出せないですから意味がないのでしょうか。

ステートの保存と管理

https://stadia.dev/blog/the-magic-of-state-share-explained/

ある人がしているゲームを見かけて、あるいはスクリーンショットを見て、そこに飛び込んで、さらに見ているものを遊ぶにはということだそうです。

ステート設定がAPIになっているので、そこでステート保存をして、どこでも全てがセーブポイント担っている状態で、かつ他のユーザがその状態を引き継いで新たにゲームを続けられる、まるでソースコード開発の無限フォーク状態です。

まぁ、色々できますよね…

象印のIH圧力鍋を買ってみた

買ってみた

象印のIH圧力鍋を買ってみました。台所に設置すると、こんな感じになります。

購入時には、圧力と温度と加熱時間とを、電気制御できるから、適切な材料と調味料さえ入れれば、失敗なく美味しい一定の味が作れるだろうと思いましたが、まさにそのものでした。

1日使ってみた感じでは、レシピ集がよくできている。材料を切り、調味料を入れて、ボタンを押せば、おばんざいや夕食のメインが本当にできる。この手軽さは素晴らしいです。

蒟蒻の煮物は、45分ほど加熱して中まで味が染み込んでいて、美味しくできています。鍋でコトコト煮ると、ガス火の前にその間ついていないと不安になりますが、電気だと放っておけばいいので、手間がありません。

加圧調理は調理時間の短縮ができて根菜の煮物に便利なのですが、この調理器は無水料理も対応しているので、小松菜の煮浸し的なものが手軽に作れます。使ってみると、葉物野菜が手軽に使えるのが、よいです。

魚の煮付けも作ってみました。クッキングシートを敷いて、魚と調味料を入れるだけです。クッキングシートは、鍋への焦げつき防止なのかと思いましたが、クッキングシートをつまんで持ち上げると、出来上がった煮付けを崩さずに鍋から取り出せたので、取り出しのためにあるのかもしれません。

アマゾンだと型番が2つあるけど中身は同じっぽい

アマゾンでみると、EL-MB30-VDとEL-MB30AM-VDの、2つの型番がありますが、機種自体は同じようです。レビューで書かれているように、AMはアマゾン向けの機種名なのかもしれません。

AMがついている方のが、若干お安いみたいです。型番にAMがついた方を購入したのですが、家電そのもののダンボール梱包に送付ラベルが貼り付けてあるシンプルな梱包でした。この型番のものは、故障時など、保証問い合わせ先はアマゾンになるのでしょうか?

アマゾンで商品を購入すると、よく、商品自体にも梱包があるのに、それをさらにアマゾンのダンボールに入れて送付してきますが、こういったシンプルな梱包の方が、捨てるダンボールが少なくて済みますから、いいですね。

電流容量に気をつける

IH圧力鍋を動かしているときは、電流容量を超えるかもしれないので、他の炊飯器やレンジを使うのは、微妙です。おばんざいの作りおきをする、炊飯器は、1200Wではなく600Wくらいの炊飯器を使う、あるいは1200Wくらいの炊飯器なら別のコンセントパネルに接続して2台同時使用可能にする、あるいは、おかゆモードで600W程度の消費電力で動かすようにする、くらいです。

コンセントパネル1つあたりの電流容量が15A、20A以上流すとコンセントごとについている小さなブレイカーが、多分落ちます。台所にはコンセントパネルが2つあるでしょうから、もう1つ別のコンセントから電源をとれば、2台同時動作ができるでしょう。多くの賃貸物件の契約電流容量は30Aですから、別々のコンセントを使ったとしても同時2台が上限になります。3台動かせば、3.6kWで36A流れますから、確実にメインのブレイカーが落ちます。

コンセントパネル1つで設置しているので、2台同時使用ができません。1200Wを消費する炊飯器で炊飯をしながら、メインの料理をIH圧力鍋で行う、というのができません。ただ、この炊飯器は、おかゆの場合は最大消費電力が600Wになるので、同時使用ができます。あるいは、炊飯器が最大消費電力を消費するのは最初の加熱時でしょうから、その消費電力ピークからタイミングをずらしてやれば、2台同時使用もできるでしょうが、気を使うのが面倒でしょう。

使い方は、おばんざいの作りだめ?

この機種の便利な使い方は、3台ほど並べて副食2つとメイン1つを同時に調理する使い方でしょう。賃貸だと契約電流容量の都合で、無理ですが。ですから、時間をずらした使い方となると、冷えても問題がない、あるいは一気に作りだめをして冷蔵庫で数日保存するものに使うしかないです。

ただ、メインのおかずが冷たいのは嬉しくないですから、炊飯器を別のコンセントに接続する、あるいは消費電力が600Wくらいの炊飯器を使い、炊飯器とこのIH圧力鍋の同時利用くらいはできるようにしたいです。

焼くのは必要か?

パン種の発酵とパンを焼くくらいはできますが、肉の塊をこんがり焼き目をつけるような焼きはできません。

他社製品だと、シャープのホットクックは、加圧調理はできませんが、かき混ぜ機能と焼く機能があります。使い方によるでしょうが、私の場合は、野菜炒めや焼きそばなどは、焦げ目がちょっとある方が好みです。焦げ目は電気制御では作るのは困難でしょうから、焼き機能はあっても使わなさそうです。実は使うと便利だったりするのでしょうか?

BLE本執筆開始の挨拶にかえて、駄文です

はじめに

BLE本の執筆を開始しようと思い、手始めに思うところを徒然と書いてみようかと思います。童話で、井戸に向かって、人に言えない秘密を大声で叫ぶ、王様の耳はなんとやらのお話がありますが、その井戸に叫ぶようなところです。

本というものは客観的に書かないと商品にならないのですが、そんな客観的な文章を書いていると、頭の後ろ側がヒリヒリとかゆくなって、続かないので、ここで主観しかないことを書いて、バランスを取ろうというのが目的です。

なので、読ませるための文章じゃありません。どこかの飲み屋さんでお酒を飲むか、タバコでも吸いながら愚痴として空気に霧散させるのが、よいのでしょうが、あいにくお酒もタバコも嗜みませんし、リアル世界に話す人間もいませんから、ネットにこうやって霧散させようというわけです。

ならツイッターに流せばと思われるかもですが、ツイッターは幸福で幸せな日常で彩りたいのですよ。どこか知らない人のタイムラインに、ある日突然3分ごとにツイートが連続して流れ出して、それがこれから下の内容だったらとか思ってみてくださいよ。幸せじゃないじゃないですか。

フリーランスする言い訳がなくなりまして

昨年、両親が他界しまして。

この10年ほどフリーランスをやっていた自分向けの理由が、もしも両親が病気で倒れても即座に対応できる、会社勤務だと有給を使い切ったら休職なり辞めるなりで大騒ぎだけど、元々がフリーランスならそんな事もないでしょう、という立派な理由でした。

10年前に会社を辞めたのは、5月の朝とても気持ちがいい晴天で、こりゃ会社行っている場合じゃないなと思ったからで、そのあとフリーを始めたのは、毎日会社に行くのがめんどくさいからなので、こんな立派な理由はただの言い訳なのですが、そんな理由もそもそもがなくなってしまいまして。

さて、こうなると自分の生き方は自分で決めなさいになるわけですが、身軽過ぎて、これがまた身の置き所に困るわけです。子供がいるわけでも、会社のしがらみがあるわけでもない。徹底的に気楽さを追求しているので、自分がすることは自分で探して決めるほかないわけです。で、ざっと周りを見渡してみると、いろんな生き方があるなーとは思うけど、どれも当事者になりたい気はしないわけです。

iOSアプリやBLEのファームウェア開発、あるいは組み込み系の開発で開発を個人で請け負うなんて、仕事になるのかと思われるでしょうが、実際のところ月に100~400万円くらい売り上げができるわけです。

短いお仕事なら2ヶ月くらい、長いお仕事だとそれでも1年単位くらいで、フリーランスという名前の通りに、必要な技能を提供して必要とされる成果物を収めたら、そこで完了という、そういうお仕事です。

本気で3ヶ月も働くと、指先の皮はキーボードとの摩擦とストレスでボロボロと剥がれて、皮が薄くなって血が滲むので、湿潤治療の絆創膏を皮膚がわりに貼り付けてしのぐ、そんなのを一年ずっと続けられるわけもないので、働くのは一年に1ヶ月を3回くらいが、ほどほどでしょう。

ですから一年のうち3ヶ月も働いたら、日本の地方都市での生活費用(年金や保険と税を抜いて400万円もあれば十分でしょう)くらいは満たせるので、それ以上働くのか?といえば、そこに働く気も起きないわけです。ただ、おもしろいお仕事だと、おもしろいので、つい話を聞きに行っちゃいますが。

なので、必要を超えて働く理由も、あまりないわけですよ。

プロなら自分で勉強するでしょう

組み込みをやっていてBLEがわからない、いい本がないか?とか言われたら、無言でBLE handbookを差し出すわけですよ。あれはBLEの規格を制定したグループのCSR勤務の副議長、本当のプロ中のプロが書いている本ですから。

プロとしてのお仕事は、結果保証なところがありますから、目の前のものが動いているやったーなんて趣味じゃなくて、動いている理由をマイクロ秒単位でビット単位でμA単位で、物理と規格に基づいて完全説明できて、だから動きますよといえないと、怖くて収められないわけですよ。

だから、必要な情報をちゃんと習得できないのに仕事なんか受けられるわけがないでしょう。仕事なのですから。英語が読めないとか、分厚すぎるとか、そんなの、それがどうした? できないなら手がけるな、なんですよ。

実際に私の場合で、4ヶ月くらいですか、BLE handbookとBluetoothの規格書とNordicの半導体のドキュメントとSDKを、じっと睨んで動かして理解してを繰り返してました。本当、ちゃんとプロに教われば1ヶ月くらいでいいらしいですけど、独学で時間を無駄にしているところが、馬鹿っぽくって私らしいですね。

それでも、書くのが好きなようで、BLEの解説をちょっとブログに書くと、リアルで、あれ読みやすかったよとか、分かり易かったとか言われるわけです。やっぱりそう言われると、嬉しくなっちゃうもので、ようし、もうちょっと書こうかなと言っちゃうわけです。

そして机の前に座ると、そんなお調子よく言っている気持ちも30秒で吹き飛ぶのです。だって、BLEって無線からタイミングからプロトコルからデータ表現まで含んだ、完全な無線通信で何かの機能と振る舞いを丸っと実装できる技術体系そのものですよ。今時、話題のIoTの解説本でも、イーサネットの物理層ならイーサネット単体で、IP層ならTLSも含めるかもですけどトランスポート層までで、MQTTなりOAuthなりアプリ層はアプリ層で、層ごとにとかもっと細かい細分で、もう300ページの本になっているわけですよ。

BLEで、層の内容は薄いけど、それらの層を全部含んでいるわけですよ。それを解説を書こうとするわけですよ。BLEの副チェアマンが書いても400ページ行くような、そんなものなんですよ。なんで、勉強しただけの素人な私に、そんな分野の丸っとした本が書けると思うねん? って冷静になるわけですよ。

だいたい1日に書ける文字数が1万文字、10ページとして書くだけで1ヶ月、技術本って裏付けや調査に時間がかかるから、よく知っている分野でも1つ1つ確かなことかを文献にあたって確認して行くので、どうやっても半年は丸っとかかるくらいの、情報収拾と文章表現に時間がかかります。

その数ヶ月の道のりに、一歩足を乗せては、冷静になるわけですよ。2日くらいで書けるBLEの解説が分かり易かったと褒められて嬉しくて、時間もあるから書こうとする、でもここから数ヶ月かかるわけです。しかも想定読者は、自分と同じような仕事をするプロでしょ。

本音で言えば、同業らのために解説の仕事する義理も理由もないわけですよ。ファームウェアなら3ヶ月800万円で見積もり出すから、それで開発して納品するから、本とかそれ以前に、うちに発注すればいいわけですよ。世の中、お金でち。

なので、書く理由もなくなっちゃうわけですよ。

執筆の目線を勘違いしてたんでしょうね

そんなこんなで、2012年にちょっとBLE解説本を書いてみては、これじゃないなーと出版せずにいたわけです。BLEの技術更新は恐ろしく劇的で、そんなことしているうちにBluetooth4.0は、今や5.1が出ようとしています。高速化、ロングレンジ化、アドバタイジングの高度化にペイロード拡張と、もうやりたい放題で規格が毎年何かしら更新されるわけですよ。

見てて楽しいけど、4.0からの技術更新は後方互換性を維持してやっているから、4.0の技術じゃ動かない作れるものも作れちゃうし、それをすると、どの端末だと動かない?とか把握が必要になるしで、見たくもない地獄を見える目にあうわけですよ、リアル仕事だと、いい加減にしろこの野郎です。せめて後方互換性をいっそのこと捨ててくれたらと思いますけど、それはそれで、キッツいんですよね…仕事したら負けだと思います。

でもね、ちょっと目線をずらすと、BLEの本が必要な場面かもなーというのが、この頃見えてきたと思いまして。要は、想定読者を組み込みやらiOSアプリやらの開発者としてたのが、こんな面倒くさい事を考え出すようになった、原因なんですよ。同業者なら、自分と同じように勉強しろ、効率最悪でも4ヶ月あればできるようになるから、と思っちゃうという。

でもね、BLEって、サービスで関わる人もいるし、事業立案で使う人もいるし、開発もアプリとファームとハードウェアと、担当者が別の人でチームで仕事してたりするわけですよ。そうすると、ファーム書く人が理解している、というだけじゃ、トラブルわけです。アプリとかもっと言えば事業とかと、目線があって同じような言葉で同じように話せてないと、仕様も作れないわけです。

そういう考え方をすると、あ、これ海外旅行に行く人の簡単会話集的な位置付けの本がいるんだなって思いました。BLEという言葉のあるところを旅行するためには、BLEというものの文法や単語がわかれば話し言葉が組み立てられますよね、BLEを使う分野で危ないところや安全なところを事前に知っていれば目的地まですっと移動できますよね、そういう目線で見たBLEの解説なら、同業者じゃなくてチーム向けの本として、ありでしょう。

チーム向け、BLEという外国語でBLEという外国を旅するための言語解説込み込みのガイドブック。これなら、書く意味も見いだせるわけです。なぜなら、こんな本を書いた人ならBLEの開発のお仕事を依頼したいという、名刺になりますから。私のところに仕事が来なくても、それはそれで同業向けに書いた本じゃないわけですから、自分の本で自分にきたかもしれない仕事を削り落としたのかと疑心暗鬼にならずにもすむのです。たぶんね。

価格はわふーにちなんで1.2万円

と、2012年から7年余りで、やっと書く気になったわけですが、価格だけはもう、わふーにちなんで1.2万円と決めておきましょう。Kindleでも電子でも紙でも、どんな媒体でも、1.2万円です。買いやがれコンチクショー、です。

では、また執筆状況が進めば、ここに吐き出しにくると思いますので。

Appleスペシャルイベント2019年3月

何が発表されたの

Appleのスペシャルイベントが開催されました。

https://www.apple.com/jp/apple-events/march-2019/

このイベントの中で、4つのサービスが言及されました:

  • News配信
  • コンテンツ配信、TV+
  • ゲーム、Arcade
  • 支払い、Payment

イベントは、まず映画のオープニングのような動画(スタッフ名が入るべきところに、SiriやApple PENCILなど、Apple製品の名前などが入る)で始まり、CEOによる挨拶、担当役員によるサービスそれぞれの紹介、そして最後はTV+に集う才能ある人たちのステージ上でのおしゃべりタイムで終わります。

News配信

専門家によるキュレーション、信頼できるニュースソース、そして読み手のセキュリティとプレイバシーを守ることとして、News配信サービスが紹介されました。

月額9.99米ドルで、家族6人まで共有できます。Wall Street Journalなどが対応します。また、マガジンの配信もするそうです。

読み手のプライバシーとして、レコメンドはデバイス側で計算するとしています。レコメンドの計算はサーバー側での処理ではありません。コンテンツは一括まとめてダウンロードされるので、ユーザがどのコンテンツを見ているかをサーバー側がそのアクセス状況から判別することも、できないそうです。

アプリの画面の見た目は、さすがApplという感じで、とても美しいです。

コンテンツのレイアウトは、トップにトップコンテンツの写真があり、その下にテーブルカラムで項目が並びます。項目は左にテキスト、右に大き目の画像が配置されます。コンテンツの移動、マガジンの選択など、項目のスクロールと選択、選択による表示遷移が発生しますが、それらは横スクロールだったり、縦スクロールだったり、スクロール方向の組み合わせが混じっていますが、アイテムが並ぶ方向が縦横なので、そこからスクロール方向は自然と分かる感じで、混乱はないかも?です。

要所要所で、動画ではなくアニメーションを取り入れている感じです。オンラインのこの手のものだと、トップは動画を入れてきそうですが、トップコンテンツは写真です。でもLivePhotoのように、ちょっと動いたりします。Live cover。動画にするとどうしてもストーリーが入り込みますが、ちょっと動く写真だと、魅力的な写真(not 静止画)みたいな目を引く感じがします。スクロールに従って、文字のコントラストや区切りシンボルの大きさがスムースに変化したり、自然な感じだけど、アニメーションを要所に散りばめていて、ウェブとは違う雰囲気がよく出ています。

本文も、最初の1文字が中世の書籍でよくあるような、大きく表示されて飾り文字になっていたり、とにかく綺麗で、またその綺麗さがコンテンツの論理的な構造を乱してはいない 、デザインと意味が揃っている感じで、この辺りはさすがです。ウェブとは違うのだよ、というネイティブっぽさを感じます。

Arcade

インディだと、無料で提供するゲームになるけど、広告やクリック誘導が収益源になるのは、(あまり稼げないから?)辛いよねということなのでしょうか。

アマゾンで、漫画のインディーズ育成をしていますが、そのような感じで、アーケードという月額の囲いの中で、ゲーム配信をするそうです。Googleがゲームの配信サービスSTRADIAを発表していますが、こちらは当然オフラインでも遊べます。デバイスを握っているAppleにとって、ユーザごとのハードウェアの処理能力の予測できないくらいのばらつきは、ありませんから、オフラインで動くのは当然のことです。

2019年秋からの開始だそうです。

Payment

Apple Payをさらに一歩進めて、Apple自体がゴールドマンサックスと組んでカードブランド/イシュアになります。

アプリに管理画面ができます。支払い明細は、月ごとなどグラフ的に表示されます。また米国のクレカ支払い明細は、事業者の住所で表示されますが、それを読み取って地図や事業者名の分かりやすい表示になります。分割支払いがとても柔軟で、支払い回数や期間をアプリでグリグリ変更すれば、支払い金利がグリグリ更新されます。月1回支払いや2週間ごと支払いなど、支払い方法も柔軟に設定できるようです。

ポイント還元率は、Apple製品の支払いでは3%、オンラインの支払い(Apple Pay)で2%、リアルカードを使う場合は1%です。

リアルな物理カードも発行するそうです。チタン製で、名前がレーザマークされて、ICチップが入っています。磁気カードのストライプも、カード番号も、CVV番号もありません。本当に板みたいなカードですが、ちょっと欲しくなるくらい綺麗です。カードの支払いは、ワールドワイドにマスターカードとも連携してくそうです。マスターカードのお店で使えるなら、世界のどこでも普通に使えますね。物理カードは、2019年夏スタート。

一般利用者から見ると、マネーフォワードなどの家計簿ソフト機能が統合したKyashみたいな感じですが、Health Careアプリがフィットネスの中心担っている人もいれば、全く存在すら知らない、他社アプリを使うためHealth Careアプリが使えない人がいるように、支払いでも、Appleは第3者にデータを渡さないでしょうから、他の家計簿ソフトとの連携はできないでしょう。Appleのカードに囲い込まれて全てを集約する人なら問題はなく、そうでないならば使うメリットが見つけられない感じになりそうです。

コンテンツ配信、TV+

コンテンツ配信からさらに一歩踏み出て、自分たちでコンテンツを作っていくTV+となるそうです。

またTV appを、Mac、そしてSAMSUNG, LG, SONG, VIZIOのスマートテレビと、さらにはFire tv、Roku向けに提供するそうです。月額のサブスクリプションなら、アイテム購入で支払い課金が発生しないから、他のプラットホーム向けには、アプリはビューアでしかないとして、アプリ配信ができるのでしょうか? 今までは自社ハードウェアにサービスを囲い込んでいましたが、TV分野では、デバイスとサービスとを分離してきた形になります。

まとめに代えて、色々な流れのなかで

Appleは、ドコモのビジネスを数年遅れで世界レベルで行う会社に見えます。

ドコモのキャリアは、Appleに置けるデバイスで、そのキャリア契約もしくは周期的に買い換えられるデバイスの売り上げが、収益の基盤になります。その収益基盤の上で、課金(集金)を核にしてサービスのプラットホームを提供し、多種多様なサービス提供者と、そのサービス利用者とが繋がる場となり、それがまた新たな収益となり、かつキャリアやデバイスを使う理由にもなります。

ですが、ドコモもdマガジンなどコンテンツ配信は手がけていますが、自身でクリエータを育成することはしていません。今回は、AppleはTV+で、自分たちでコンテンツを作り配信を盛り上げていくようになります。またArcadeは、ちょうどAmazonが漫画のインディ育成に基金を設定し読まれたページ数でそれを配分するインディ育成プログラムを行なっているように、月額ベースでインディでも参加でき、かつ広告をいれなくても単純な人気/遊ばれた時間や遊んだ人という、本来の遊ぶ人に向けたゲームそのものの楽しみを盛り上げる方向を打ち出しています。

作る人が枯渇したら、作る人の奪い合いになっていく、将来に枯渇して困らないためには、今から自分たちで育成を初めて、長く続けていく、そういう節目に思えます。

ゲームのサブスクリプションが、GoogleがSTADIA、AppleがArcadeと出てきました。前者はビデオ会議ができる端末とネット環境があればよい、後者は自社デバイス縛りでオフラインでももちろん遊べる、そういう明確な違いが見えています。ネットワークサービスとして捉えたものと、ハードウェアを含めたネットという生活環境の中でのゲームというものを捉えたものと言えます。

ただ、今のネットは炎上する環境でもあります。Googleのネットありきは、基本が人の口に登ってなんぼと、人を超えてネットワークの網目の中で情報が流れてなんぼの構造です。これは炎上するのが本質でしょう。Appleのゲーム体験なら、共有するのは自分あるいはリアルに画面を見せ合う友達やネットを通じても自分がそれなりに知っている見せてもいいと思っている相手と、ネットの有無にかかわらず、それは自分もしくは相手という人です。これは人と人との関係です。これは大きな違いとなっていくでしょう。

Googleが生み出すだろうクリエーターは、人に見られてなんぼ、の方向になるでしょう。燃えてなんぼ、炎上してなんぼの、下品な方向にいかないことを祈るばかりです。Appleが生み出すだろうクリエーターは、自分や家族単位のグループが楽しみたい見たいと思わせてなんぼ、の方向になるでしょう。こちらは古典的な今までもあるクリエーターでしょう。

ニュースサービスは、新聞の体験に、美しい画面表現と機械学習を活用したレコメンドという形に見えます。どこまでいっても、個人が読む体験、が本質でしょう。

同じニュースサービスでも、日本では広告が収益のGunosyというニュースをまとめるビューアがあったりします。また今回のAppleのスペシャルイベントについて、事前に噂レベルの情報をまとめて記事にすることでPVを稼ぐサイトもあれば、その記事を元にしてSNSで盛り上がるいつもの流れもありました。

Appleが掲げる、信頼できるニュースソースそしてプライバシーとセキュリティの保たれた世界のニュース体験は、確かにあるものだとは思いますが、それが一般的に多数派のサービスなのかどうかは、Twitterを10年も継続している自分には肌感覚としてもはやわからないです。

ただ、TWを見ちゃうのは、例えば今日であればカニ化というものを初めて知ったりして、こういう体験ができるからだと思えば、自分の行動予測で提案される信頼できるニュースソースから構築された一連の記事では、永遠に知ることはないだろうなと思います。

電気式の圧力鍋を比較検討

売れ筋から検討してみる

価格サイトの商品ランキングから、電気式の圧力鍋を抜き出してみます。

  • パナソニック, 2万円
    • https://panasonic.jp/cook/products/SR-P37.html
    • 3.7L/1.4L, 31.5x27x29.6cm, 4.1kg, 800W。
    • 圧力は操作パネルで切り替え設定、98kPa(120度), 59kPa(低圧 113度)。低温料理可能(70/85/95度)。
    • 商品ラインナップは、SR-P37の1機種のみ。完全に、電気ヒータ付きの圧力鍋そのもの。
  • シロカ, 1.5万円
    • https://www.siroca.co.jp/kitchen/autoclave/
    • 2~6人の4リットル、1~3人の2リットル。容量2種類xスロー機能有/無で、4機種のラインナップ。
    • SP-4D151, 4L/2.6L, 90kPa, スロー機能あり, 26.5x28.2x28.3cm, 4.4kg, プリセットで、おかゆもある。蒸し台。
    • SP-D131, 2リットル/1.3リットル, 70kPa, スロー機能付き、2リットル版、22x23.8x24.9cm, 2.7kg、蒸し台。
    • スロークッカー(85度調理)。無水料理。
    • 蓋を回転させてしめる。圧力のピンが出てくるから、本当に圧力の電気鍋。

どれにするか

目的は、材料を切って調味料と一緒に入れておくだけで料理が完成すること。また、タイマー予約でアツアツの料理を楽しめることです。

電気式でも、その基本は圧力鍋でしかありませんが、マイコンがあり温度と圧力が制御されることが特徴です。料理の条件は、温度と圧力履歴で決まります。1人分でも4人分でも同じ温度と圧力履歴を与えれば、同じものができてくるはずです。ただガス火では、食材の分量が異なれば熱容量も異なりますから、その条件を人が調整するほかなくなります。電気式は、そこがマイコン制御にできるのが利点になります。また、電気式の圧力鍋は、ガス火をみておく必要がなく、温度制御で水蒸気が出るのも抑え目にもなります。

製品価格は、1万円代のものと3万円代のものの2つに分けられます。

1万円代のものは、タイマーのついた圧力鍋そのものです。電力は800Wくらいです。マイコンはついていますが、人が設定できる条件は圧力の大きさと時間くらいでしょう。シロカの製品は、メニュー選択があります。プリセットのメニューが、希望の料理に合えば良いのですが、なければ最初に沸騰させてからしばらく保温して火を通すなどの、いくつかのシーケンスの組み合わせは期待できません。

3万円代のものは、ティファールおよび象印の製品です。メニューを選択して料理のシーケンスが実行されるものです。圧力鍋というより、温度と圧力を制御できる自動調理器です。電力は1200Wくらいです。800Wのものより素早い温度上昇ができそうです。無水料理に対応していて、アクアパッツァが作れるのは楽しそうです。圧力鍋といえば定番と言える骨まで柔らかいイワシの煮物だけではなく、普通の鯛のアラや魚の煮物ができるのは、嬉しいです。

ざっと見ると、1万円代の製品は、電気式の圧力鍋で800Wくらいの加熱能力。ガス火の調整とガス火を見ている手間を省きたいなら、安価で良い。3万円代の製品は、料理のシーケンス実行装置になっている。蒸し物からスロークッキングまで多種多様な料理ができる。魚の煮付けを手軽に楽しめるのは、お魚が好きな人には嬉しいかも。

1万円代なら、デザインでシロカがよさそうですね。

3万円代で、ティファールと象印のどちらを選ぶかですが、機能自体はどちらも同じような感じですから、もう好みで選べばいいのではないでしょうか。

iMacの2015lateから2019earlyは、買い替え時期?

2019年3月でiMacのプロセッサが高速化されました。今使っている2015lateから買い換えるメリットはあるのでしょうか?

iMacの3つある種類のうち、真ん中のもので、プロセッサのベンチマークでシングルスレッド/チップ全体で、2015lateで 1947/7244、2019earlyで 2510/12631 ですから、シングルスレッドで1.3倍、チップ全体で1.7倍の演算能力。

メモリが1867MHzから2666MHzで、1.4倍ですから、プロセッサの処理能力向上分と合うメモリ帯域の向上なので、だいたい1.4倍程度の高速化でしょう。

なので、お金が余っていれば買えばいいという、よくある感じですね。

VESAマウントありのiMacが便利

iMacは本体に直接取り付けられたスタンドが付いていて、上下の角度変更はできますが、高さ調節機能はありません。
VESAマウント+ディスプレイアームにすると、高さ調節だけではなく、奥行き方向にも移動ができて、また何かに引っ掛けてiMacを落とす心配がなくなります。

Appleのサイトから、スタンドがなく背面にVESAマウントがあるiMacが購入できます。通常本体価格に +1万円 くらいになります。 https://www.apple.com/jp/shop/buy-mac/imac-vesa

ディスプレイアームは、10kg程度のものを扱えるものとなると、エルゴトロンのLXくらいでしょう。

2015lateの真ん中くらいの機種

2019early imac 真ん中の

2019earcyで、+5万円するとどのくらい?

5万円プラスで選択できるi9-9900Kだとどうなるか? シングルスレッドで1.15倍、コア全体で1.6倍になる。メモリ帯域は同じだから、マルチスレッドでキャッシュが効く状態で演算量がとにかく欲しい場合には、メリットがありそう。

参考までに今のiMac Proだとどのくらい?

Googleから、ゲームプラットホームstadiaというのが発表されたそうで

はじめに

2019年3月19日、Gather around.でGoogleが見ているこれからのゲーミングのプレゼンテーションが始まりました。

方向性は

GoogleはすでにYouTubeという大きな動画プラットホームを持っています。その動画プラットホームの中で、ゲームプレイを放映するトッププレイヤーと、その視聴者というコミュニティができています。

キーワードは、2つ。まず、秒速ですぐに入れること。ブラウザでリンクを踏めば次のサイトに行ける体験そのままに、そこにゲームを織り込むこと。次に、コミュニティ。ゲーム開発、プレイヤ、視聴者とを関連付けるプラットホームということ。

技術的には

単純なシンクライアントです。

AMDと共同開発した強力なGPUとカスタムなx86プロセッサをデータセンタに配置し、そこからゲーム動画を配信します。どのような画面にも、どのようなデバイスにも配信できます。また専用のコントローラも提供し、このコントローラはGoogleのデータセンターにインターネット・プロトコルで繋がります。

プレイの状態はGoogleのデータセンタに保持され、GPUで作り出す高精度な画像を配信する形です。Project streamingの成果を活用などとありますから、WebRTCなどの技術を活用して、動画像コーデックとプロトコル・スタックとを垂直統合したソフトウェア資産を活用して、回線品質に合わせたレイテンシーの小さな配信技術に基づくのでしょう。

OSはLinux、そこでvulkanが動いている。ゲームエンジンは、unreal engine や unity が対応。普通のゲーム開発環境ですね。

これでゲームのインフラ担当者がいらなくなるのか? と想像しても、結局はクラウド側の開発は従来と何も変わらず必要でしょう。ただ、他の大きなゲームで構築されたクラウドの知見が、Googleにより一般化されてフレームワーク/サービス化されるくらいの流れは出てくるか。

AWSできる技術者が、AWSに詳しくなるとAmazonに転職してしまうという話がありますが、ゲームのクラウド側に詳しくなった人がGoogleに転職して、そのスキルを一般化してサービス化する程度の人材流動は起きるのかも?

費用負担とレイテンシは?

10年前にiPhoneやAndroidが登場して、今やその2つのプラットホームの上で、ソーシャルゲームや電子書籍などのサービスが走っているように、新しいプラットホームは、一度軌道に乗ってしまえば、それがあるのが当たり前になりますから、メリットデメリットを考えても、意味はないかもですが。

Googleの負担費用は大きいのでは? ゲーム装置をデータセンタでホストする形ですから、その費用はすごいものでしょう。プレイヤーが増えれば、それを吸収する処理能力を持たないといけない。でも1日中ゲームをしているわけではないですし、Google自体がすでに毎秒莫大な計算量を消費している会社ですから、総量からいって、大したことないのかも?

自動車のシェアリングで、自動車の販売台数が変わっていくのか、自動車のサービス化になるのかみたいな話があるけど、ゲームが、プレイするなら本体確保、が前提としてなくなると、本体の売れ行きはどうなるのかしら。

専用プロセッサとGPUといっても、他の計算にも使えるのかもしれませんし。最近話題の機械学習の学習には使えなくても、ユーザへのサービスとしての推論には使えるでしょうし。

シビアなゲームだとレイテンシで実施できないのでは。操作に対して画面が更新される遅れがゲーム体験を損なうというのは、フレームを競う一部の対戦ゲームではそうかもしれないけど、そんなゲームばかりではないでしょうし。

ただ、このゲームプラットホームって、コミュニティを前提としたプラットホームだから、仮に二人対戦のゲームだとしても、それを見ている観客がいる形になるだろうから、レイテンシを前読みして操作するくらいのプレイヤーの進歩が出てくるだけだと思う。

技術的に遅延をもたらすのは、ネットワークのレイテンシ、データセンタでの処理時間、そして動画像の転送時間。ネットワークのレイテンシは究極は光の速度だから、それはもう仕方ない。データセンターの処理時間はゲーム機の処理時間そのものだからそれは従来と変わらない。動画像の転送時間は、将来的に120+fpsを転送する程度で、フレーム間圧縮で2フレームほど食われたとして、1/60秒程度か。

リンクで素早い体験ってFlashのゲーム?

昔に、Flashでゲームを作り自分のブログで公開する体験が、日本で結構盛り上がったことがあった。リンクを踏んだら即ゲームって、その体験そのものっぽいのでは?

クリエータどこいった? 今ではそんな個人制作のゲームは、夏のイベントで同人ゲームを販売している方々はいますが少なくともウェブでは、もう見かけない。かつてFlashゲームを作っていた方でも、ソシャゲの会社で働いていたりとか。収益源がないから、継続しないし、個人で作れるボリュームはさほどはないから話題になったらボリュームをあっという間に消費して、話題としてちゃんと忘れ去られる。

リンクでプレイを共有したり、状態保存したり、アドバイスもらったり

ゲームで行き詰まると、ちょっと質問すると、Googleアシスタントがヒントをくれたりとか、ゲームの状態を保存してリンク共有とか。PS HOMEでもプレイ動画共有とかあるけど、全てがデータセンターにあるなら、一層そういった共有的なものが強く出てくるのかも。

今でも、ゲーム攻略サイトがあるのだから、ちょっと詰まった時に質問したらヒント(あるいは、解答そのもの)がもらえる体験が当たり前になるのは、それはそれでありになるのかも。難しいことを難しいままクリアできるか、ヒントをもらってちょびっと上達するか、上達せずクリアできました体験だけするのかは、選択の自由なのかも。

モバイルデバイスのその先?

今のソシャゲは、モバイル向けは動画転送量的に利用者が使わないだろう。よほどの大容量で安価な料金プランでもない限りは。

ブラウザ的になることで、iOSデバイス向けにも配信できる、つまり課金ができるのかも?

ゲーム以外の視点

技術的にはこれ、シンクライアントそのものですよね。ゲームだけじゃなく汎用性があるでしょうから。

未来的な映画とかの設計シーンで、3D CADを動かして、VRのヘッドマウントディスプレイでモデルを見ながら協調設計して、空洞シミュを動かしたりとか出てきますけど、そういうのが普通にできる程度に。

YouTubeの操作できる動画としてみなすなら、バーチャルYouTuberもあるけど、モデルデータの選択とステージ選択さえあれば、そのまま配信できちゃうだろうし。いろんな概念が、1つの仕組みで統合されていく感じはするのかも?

hexoの設定メモ

新規にhexoをインストールして設定を見直したので、そのメモ。hexoのバージョンは 3.8.0。

画像リソースをpostごとに管理する

これまでは、記事でしか使わない画像を、グローバルアセットとして使っていました。画像ファイルを post/post_imageに置いて、記事のMarkdownのテキストの中で { % img /post_images/画像ファイル名 %} と参照していました。記事名と同じフォルダの中に画像をまとめることで、記事と画像の紐づけはなんとかできるのですが、フォルダのある場所が異なるので、ちょっと気持ち悪さがありました。

3.8.0 だと、記事だけで参照できるローカルなアセットが使えるみたいです。ドキュメント https://hexo.io/docs/asset-folders.html にある通り、_configure.ymlpost_asset_foler: true にすると、hexo new {記事名}をすると、postフォルダの下に、記事名と同じフォルダが作成されます。

このフォルダの下に画像ファイルを置いて、asset_img マクロで参照すればよいわけです。imgマクロで参照すると、記事の中では画像が表示されますが、インデックス画面(hexoで生成したサイトを表示した時に表示される、複数の記事をまとめてインデックス表示しているあれ)で画像が表示されません。URLのパスの位置が違うからですね。asset_imgを使えば、インデックスでも画像が表示されます。

1
2
{% asset_img example.jpg This is an example image %}
{% asset_img "spaced asset.jpg" "spaced title" %}

デプロイをshellにする

記事はAWS S3に置いて、CloudFrontで配布しています。hexoのs3プラグインなどがありますが、何か動きがおかしかったり、シークレットキーをソースの中にベタがきしたり、環境変数に設定したりと、ちょっと微妙なものばかりです。あと、CloudFrontのキャッシュの無効化が必要なのですが、s3関連のプラグインにそんな機能はないみたいです。

そこで、aws cliをshellで呼び出して使います。こんな感じの設定を_configure.ymlにしています。

1
2
3
4
5
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: shell
command: /usr/local/bin/aws s3 sync --acl public-read --delete {hexoのpublicのフォルダ} s3://{バケット名} --exclude '*.DS_Store';aws cloudfront create-invalidation --distribution-id {識別子} --paths '/*'

Nature remoをiOS ショートカットアプリとSiriで活用する

家にあるエアコンや照明などの多くの家電は赤外線リモコンがあります。 Nature remo https://nature.global は、赤外線信号の送信と、気温などのセンサーを備えた数千円から1万円のデバイスと、クラウドからデバイスを操作する機能を提供します。

Nature remoで、アプリを設定して家に近づいたりなどの条件で機器をオンオフしたり、Amazon AlexaやGoogle Homeと連携して、音声での家電操作ができます。しかし、Nature remoの説明には、Siriとの連携がありません。

公式ブログで、iftttというサービスを中継してSiriで家電操作をする方法 (iOS12のショートカットを使い、SiriからRemoを操作する)[https://nature.global/jp/ifttt-setup/ios12siriremo] が紹介されています。

しかし、複数のサービスを中継するのは、1つでもサーバーが落ちていたら利用できなくなる不安感だけではなく、なんとなく嫌です。そこで、Nature remoを使い、iOSのショートカットアプリを活用して公式のウェブサービスを直接叩いて、Siriから機器操作をしてみます。

手順は:

  1. Nature remoのAPIで使う、エアコンや赤外線信号を表す識別子を取得する
  2. iOS ショートカットアプリから、Nature remoのAPIを叩く
  3. SiriからiOSショートカットアプリが実行されるように、音声コマンドを紐づける
    の3つです。

Nature remoのアプリでの設定

まず、Nature remoの設定説明に従い、エアコンと照明の設定を行います。まず、エアコンを設定します。Nature remoの説明通りに、エアコンの赤外線リモコンの信号を読み込むと、メーカー名を自動判別して、アプリにエアコンの設定画面が追加されます。照明は、赤外線リモコンのボタン1つ1つを読み込んで、それぞれアプリのボタンとして登録していきます。

エアコンと照明の設定が終わると、アプリにはこのような画面ができているでしょう。

外出時などに、エアコンと照明をまとめて消したいなど、複数の機器を操作したい時には、Nature remoのアプリの”シーン”を使うと便利です。例えば、エアコンと照明をまとめてオンにする場合は、このようなシーンを作成します。オフにするシーンも同様に、機器をオフにする項目をまとめたもので作れます。

Nature remoのアプリで、ルールを追加して、家電製品の振る舞いを作れます。例えば、ルールの家から離れる、家に近づくに、エアコンのオフオンを関連づけておけば、いわゆるスマートホームのデモンストレーションでよく使われる、家に帰ってくるとエアコンが動いていてすでに暖かい、などができます。

Nature remoのセンサーの値と紐付けておくこともできます。私は、室温がある温度以下になったらエアコンをオンにするルールを追加しています。睡眠時にエアコンの動作音がするのが嫌で、寝る前にエアコンを切るのですが、朝起きた時に部屋が寒いのも嫌なので、室温がある温度以下になったら、エアコンを入れるという使い方です。

機種は、1万円程度のNature Remoと、7000円代とより安価な Nature Remo mini があります。それぞれの違いは搭載しているセンサーの種類です。Nature Remoは、温度、湿度、照度、人感センサーがあります。Nature Remo miniは、温度センサーだけがあります。人がいたら、あるいは照度や湿度がある値になったらというルールを作るなら、Nature Remoが必要です。そのようなルールが必要ない、例えば先ほどの例のようにある温度以下になったらエアコンを入れるように温度だけしか使わないなら、Nature Remoがよいでしょう。

Nature remoのAPIで使う、エアコンや赤外線信号を表す識別子を取得する

Nature remoは、ネットワークから機器を操作するAPIを提供しています。このAPIを使うには、ユーザーの認証トークンと、機器あるいは信号の識別子が必要です。これらを取得しましょう。

開発者サイト https://developer.nature.global を見ると、APIにはローカルAPIとクラウドAPIとがあります。どこにいても機器を操作したいので、ここではクラウドAPIを使っていきます。

ローカルAPIは、家のWiFiなど同じネットワークに繋がっている時に呼び出せるAPIで、赤外線のパターンの生信号そのものを取得/送信するものがあります。クラウドAPIは、エアコンや機器の識別子を使って、温度設定などができます。おそらくNature remoの機器自体には、ローカルAPIの赤外線の信号そのものを扱う機能だけが実装されていて、メーカごとのエアコンの赤外線信号を組み立てる機能は、クラウドつまりサーバー側に実装されているのでしょう。

Nature remoの機器にアクセスするための、認証トークンを取得します。 https://home.nature.global で、左下にある”Generate access token”を押すと、トークンが生成されて画面にそれが表示されます。このトークンは生成したその時だけしか表示されませんから、メモ帳か何かでもいいと思いますが、どこか自分しか読み書きできないところに一時的に保存しておきます。

ネットワークサービスを使う時にユーザ名とパスワードとを決めますが、このトークンは、そのユーザ名とパスワードと同じようなものです。このトークンは、ユーザしか知らないはずです。ですから、このトークンがあれば、今APIを使おうとしている人が、正規のユーザだと思い込めるわけです。もしも、トークンが誰かに知られて、いたずらされるようなことになったら、そのトークンを削除して無効化します。

認証トークンを使い、機器や赤外線信号を表す識別子を取得していきます。もしもNature remoAuがOAuth2に対応でもしていれば、 http://http://swagger.nature.global/ からAPIを呼び出して、機器のリストが取れるのですが、そんな対応はしていないので、ターミナルから次のコマンドを実行してAPIを叩きます。

$ curl -X GET “https://api.nature.global/1/appliances" -H “accept: application/json” -H “Authorization: Bearer {ここにアクセストークンの文字列を入れる}”

認証トークンはヘッダに与えます。アクセスができれば、何やら文字列がわーっと表示されるはずです。認証トークンの設定など何か間違えていると、’’ {“code”:401001,”message”:”Unauthorized”} ‘’ という表示が出ます。これは認証ができなかったという意味です。トークンを間違えているか何かでしょう。

このわーっと出てきたテキストは、JSONという形式での機器一覧です。このままでは読みにくいので、一度このわーっと出てきたテキスト部分をコピーして、適当なJSON整形サイトなりで整形して読める形にします。

ざっと見ていくと、エアコンにつけた名前付近に、”ID”という項目があります。これがエアコンを示す識別子です。

照明の赤外線信号につけた名前付近を見ていくと、やはり”ID”という項目があります。これが赤外線信号を示す識別子です。これらの識別子を、どこかに記録しておきます。

iOS ショートカットアプリから、Nature remoのAPIを叩く

iOSショートカットアプリから、Nature remoを経由してエアコンと照明を操作します。まずiOS のショートカットアプリをインストールしておきましょう。https://itunes.apple.com/jp/app/id915249334

Nature remoのAPIは、APIのリスト http://http://swagger.nature.global/ にあるように、エアコンはエアコン特有のAPIに、赤外線信号を送信するだけの機種は信号を送受信するAPIが、それぞれ提供されています。

まずエアコンを設定します。まず、オンの設定を追加しましょう。ショートカットアプリで、”+ショートカットを作成”をタップして、メニューから”URL”を選択します。次に “URLの内容を取得”を選択します。

ここで、エアコンのオンの設定を次のように入力します。文字列を入力するのは手間ですから、Macがあるなら、Mac側でテキストをコピーすれば、iPhoneの方にその文字列をペーストできますから、その機能を利用するとよいです。設定ができれば、今開いている編集画面のヘッダ中央にある”▷”ボタンを押します。エアコンがオンになれば設定ができています。動かない場合は、例えば次の画像は、認証トークンの値を間違えている場合の画面ですが、このようにサーバーが失敗した理由を返しているので、それを見て修正します。

同じようにしてオフの設定を入力します。オンの設定との違いは、本文を要求という項目が増えることだけです。ですから、ですからオンのボタンを複製すると設定の手間が少ないでしょう。ここで”本文を要求”の設定を間違えている(buttonのスペルを間違えてbutonにしているなど)場合は、APIはオフではなくオンとして動きます。

  • 本文を要求: フォーム
  • button: power-off

次に照明のオンオフを設定します。専用のAPIがあるエアコンとは違い、今度は任意の電化製品の赤外線リモコンの送信コードを送信するAPIを使います。照明オフの設定は、URLの赤外線信号の識別子を、オフの赤外線信号の識別子に置き換えるだけです。

SiriからiOSショートカットアプリのショートカットを実行させる

ここまでの長い道のりで、やっといよいよSiriからの操作ができます。

その前に、エアコンや照明を1つ1つ設定するのも面倒です。1つ1つのAPIごとに設定したショートカットをまとめるショートカットを作っておきます。ショートカットの作成で、”ショートカット”で検索すると、すでに登録されているショートカットを呼び出す項目が表示されます。これを複数配置して、必要な動作を1つのショートカットにまとめます。

あとは、ショートカットの右上にある、完了の下にあるボタンを押してSiriに連携させます。”照明をつけて”などだと、HomeKitの方に処理を持って行かれます。ぶつからないフレーズとして、電気を入れて、と設定しています。

ホーム場面に追加をしておくと、ホーム画面のアイコンのタップだけで、操作ができるようになって便利です。ショートカットの共有は、このショートカットの設定に認証トークンや機器の識別子など、ユーザだけが知り得る情報が入ってしまっているので、すべきではありません。もしも公開したら、世界の誰かが共有されているショートカットを使えば、自分の家の機器が動いてしまいます。

最後に

Nature remoを、iOSのショートカットアプリ、そしてSiriから操作する手順をまとめてみました。今回はAPIを直接叩くようにしましたが、Google HomeやAmazon Alexaを使っているならば、それらのサービスのiOSアプリを活用するか、あるいはショートカットアプから、それらのサービスごとのアプリの機能を利用するのがよいのかもしれません。

とにかく、設定はめんどくさいですが、動いてしまえば、ちょっと便利ではあります。設定の労力に見合うかといえば、人によるかもしれません。微妙ですね。