yumulog | 社会人博士の日記

はてなブログに引っ越しました / 石川県に引っ越しました

家電とおうちのプログラミング+α

f:id:yumu19:20171128120445j:plain

本エントリは おうちハック Advent Calendar 2017 の1日目です。Advent Calendarとは、12月1日〜25日まで1日ずつ担当を決めてみんなでblog記事を書いていく企画です。

はじめに

情報処理2017年11月号の「プログラミング・エクスペリエンスの新潮流」という特集で、おうちハック(=家にある機器などをハックしてより便利におうちを使えるようにする)におけるプログラミングについてまとめ、「家電とおうちのプログラミング」という記事を書きました。本エントリは、この情報処理に掲載した記事に加筆・修正を行ったものです。

情報処理 2017年11月号

情報処理 2017年11月号

情報処理学会員の方は、無料でPDFをダウンロードできます。

ちなみに、この特集を企画した加藤淳(@)さんは、第一回おうちハック発表会のキーノートスピーカーでもあります。

IoT時代の家電

家電といえば、分厚い説明書を読みながら、ボタンがたくさんついたリモコンを難解な手順で操作するというイメージがあるかもしれません。しかし、Internet of Things(IoT)の流れとともにネットワークと接続する家電が増え、操作の概念も変わってきています。

例えば、色や明るさを変えられる電球hueは、スマートフォンアプリから操作でき、事前に設定したスケジュールに合わせて点灯する機能をもちます。屋内や屋外の気温や湿度、二酸化炭素濃度などを計測するガジェットnetatmoは、Webブラウザやスマートフォンアプリでデータを監視することができます。さらに、モジュールを追加購入することで風力や雨量などのデータも取得可能となります。

Amazon EchoやGoogle Homeなどの音声で操作するスマートスピーカーは、米国を中心に普及が進んでいます(というのが元の記事を執筆していた夏頃の所感ですが、いまや日本でも発売が開始されて注目されてます)。スマートフォンでアプリをインストールするのと同様に、Echoでは、スキルと呼ばれる様々な機能をAlexa Skills Marketplaceからインストールすることができます。

マッシュアップによるカスタマイズ

上で紹介した機器は、もともと便利で多様な機能を持ちますが、IFTTTやZapierなどのマッシュアップサービスをつかって組み合わせることで、より高い利便性を発揮するようになります。

IFTTTは、自分のためのオリジナルアプリケーションを簡単に作ることができるサービスで、「IF」というトリガと「THEN」というアクションを指定することで動作を定義します。例えば、燃えるゴミの日の朝に玄関の照明色を赤くしたり、帰宅時に最寄り駅に到着した頃に部屋のエアコンを点けたりするといったことが可能となります。IFTTTでは、IFとTHENを選んでパラメータを設定するだけで動作を決められるので、プログラミングの知識がなくてもスマートフォンアプリの設定をするような感覚で使うことができます。Zapierも似たようなサービスですが、1つのトリガに対してフィルタとアクションを複数設定できるより高機能なものになっています。

このような時代の流れの象徴と言えるデバイスがMESHです。MESHは、タグと呼ばれる5cmほどの大きさのブロック型デバイスを組み合わせて、独自のアプリケーションをつくることができます。タグには、ボタンタグ、人感タグ、温度・湿度タグなどの種類があり、タグをどのように組み合わせてどう使うかは、iPadアプリの専用ツールを使って設定します。このアプリは、モジュールの入力と出力を線でつなぐビジュアルプログラミングツールで、プログラミングに馴染みのない層にも扱いやすいようにできています。小学生を対象にしたワークショップにも活用されます。

MESHのレシピサイトやFacebookのユーザグループには、たくさんの活用事例が載っています。

MESHが出たときには「おうちハックのためのデバイスはこれだ!」と感動し、MESHプロジェクトリーダーの萩原さんには、第4回のおうちハック発表会でキーボートスピーチをしてもらったり、@ さんと私で不定期にやっている品モノラジオにもゲスト出演して頂きました。

おうちハック

おうちハックでは、既存のWebサービスAPI、ガジェット、さらに先述のIFTTTやMESHを活用したマッシュアップがよく行われます。凹(@)さんは、家電の音声操作や自動制御のシステムを自宅に構築しました。

id:bohemian916 さんは、様々なトリガーデバイスと照明などの家庭内デバイスをIFTTTとmyThingsで組み合わせました。

@ さんは、赤外線モジュールやロボットアームを使って、家庭内の様々な機器をHomeKit対応にしました。

また、おうちハックのために家の中のデータを取得したいという需要がありますが、先述のnetatomのようなセンサガジェットは高価なものが多いです。そのため、安価なセンサ部品を購入して電子工作を行うことで、様々なセンサガジェットが自作されています。ArduinoRaspberry Piといったプロトタイピング用のマイコンボードや、TWE-Liteのような低消費電力無線モジュールの普及によって、ガジェット自作の障壁は下がっています。ミクミンP(@)は、お風呂のお湯の水位を監視するセンサを自作し、お湯がたまると初音ミクが歌って知らせてくれるシステムをつくりました。 - おうちセンサでキャラクターと暮らしてみた

おうちプログラミングの未来

おうちハック発表会を始めた2014年頃は、Web経由で操作したりマッシュアップできるようなガジェットはポツポツと出始めていた時期でしたがそれほど多くなく、Arduinoなどをつかってわりと力技でハックしていた事例が多かったと思います。それが、IFTTTやmyThings、Zapierなどのマッシュアップツールをつかって組み合わせるだけで自分専用のツールをつくることができるようになりました。MESHのように、動作をビジュアルプログラミングで設定できるデバイスも出てきました。このようなインタフェースは、今後増えていくと思います。

また、おうちプログラミングで操作する対象も、従来の家電機器だけではなく、広がっていきます。 昨年のAdvent Calendarの記事 でも紹介しましたが、東京大学ソニーCSLの暦本(@)さんの「Squama」という研究では、透過度を変更できる窓を例に取り、「プログラマブル建築」というコンセプトを提唱しています。現在はおうちハックと言えば家電の挙動に関するものがほとんどですが、いずれ壁や天井を含めた住宅全体がカスタマイズ可能な要素を持ち、それを住人が自由にハックする時代が来るだろうと思っています。

おうちプログラミングのもっと未来

住人がハックしなくても、機械学習で勝手にカスタマイズされていく家になると思う。

さいごに

昨年も今年も総論的なエントリになってしまって、こういうのも大事かもしれないけど、来年は自分でおうちハックしたエントリ書きたいなと思いました。

あと、Amazon Echoの招待がまだ来ません

俺にEchoが来ないことで
俺の代わりにだれかがEchoを持てる
   ∧ ∧
  ( ・ω・)
 _| ⊃/(___
/ ヽ_(____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
俺はそういうことに
幸せを感じるんだ
 <⌒/ヽ-、__
/<_/____/

北陸先端科学技術大学院大学を単位取得満期退学しました(退学後2年以内に博士号取得予定)

f:id:yumu19:20170930205713j:plain

2017年9月30日に北陸先端科学技術大学院大学(JAIST) 情報科学研究科 博士後期課程(社会人コース)を単位取得満期退学しました。在学年限の6年間(+休学1年間)を迎えたためです。博士号は2年以内に取得する予定で引き続き博士の研究します。仕事等の生活についても特に変わりません。

単位取得満期退学とは

厳密な定義はよく知りませんが、博士研究以外の博士修了要件(授業の単位取得など)を満たし、あとは博士論文を書いて提出するだけという状態で退学することを指します。Wikipediaにも載ってます。もともとは、文系の「博士課程を終えても博士号は取得せず、教授とかになってから取得するのが普通」みたいな考え方から生まれたもののようです。

博士課程では、社会人学生に限らず単位取得満期退学をするのはたまに見かけます。私のように在学年限を超えた場合もありますが、標準年限(3年)を過ぎて就職が決まっていたり授業料を払うのがもったいない場合が多いように思います。

単位取得満期退学をすると、退学後も一定期間内は博士論文の審査を受けられ、審査を通ると博士号が授与されます。期間は大学によって違うと思いますが、JAISTの場合は2年以内です。

退学するには退学願を提出するのですが、これが思っていたよりだいぶ大変で、指導教員、副指導教員、副テーマ指導教員、学系長(旧研究科長)の4人から承認印と所見(コメント)をもらい、退学予定日の1ヶ月前に提出します。これが教授会で承認されると退学が許可されます。ちなみに退学が許可されないと除籍(授業料を払わなかったりした場合と一緒)になります。

今後の予定

上記の通り退学後2年以内ということで、2019年9月が学位取得のタイムリミットなのですが、現実的で最速なスケジュールとして2018年12月に学位取得のつもりで動いています。投稿論文の採択可否などの状況によってはもう少し遅れるかもしれません。

今までの研究を博士論文のストーリーの一部としてまとめ直したり、追加の実験が必要になるかもしれないことを考慮して、 少し早めの年明けあたりから博士論文執筆に取り掛かろうと思っています。まだもうちょっとありますが、1年前や2年前と比べると道筋だいぶ見えてきました。。。

退学するとどう変わる?

社会人学生ということもあり、いままでとこれからで変わることは特になさそうです。JAISTの学生ではなくなったのですが、実はJAISTのプロジェクト研究員という身分も以前から有しているので、引き続きJAISTの人です。JAISTの設備等もいままでとそれほど変わらずに使えるのではないかと思います(よくわかってない)。

いままで使っていたJAISTのメールアドレスは失効しました。といってもJAISTのメールアドレスはそれほど使っておらず、学会系のMLにいくつか登録してたのを変更しただけでしたが。

授業料を払わなくてもよくなりました。JAISTでは標準在籍年数の3年分の学費で最大6年在籍できるという長期履修制度というものがあり、実質半額で大変助かりましたが。

あとは、入会している学会の会員種別を学生会員から正会員に変更しました。

心残りといえば、国際会議で開催されるDoctoral Symposiumに一度も参加したことがなかったので、参加しておけばよかったなあというのは最近強く思ってます。博士課程の人は行くといいと思うよ。

小学校入学以来、修士課程修了から博士課程(社会人コース)の入学までの2年半を除いた23年間は学生だったわけですね。長いなあ。博士号取得できなかったりしたら、またどこかの大学院に入る可能性も無くはないですが。もう入りたくねぇなぁ。

現役の社会人博士の皆様におかれましては、単位取得満期退学せずとも学位取得できるよう、計画的に博士研究を進められることをお勧めします。

学位論文の骨子を提出した

f:id:yumu19:20170701111559j:plain

先週末に博士の学位論文の骨子を提出しました。

学位論文の骨子 is 何?

JAISTで、学位の取得の前に必ず提出しなければいけない書類で、「博士論文題目(タイトル)」「研究の目的と効果」「研究の概要」「論文の構成案」「研究業績」をテンプレートに従ってA4 4ページにまとめます。

骨子提出後は、予備審査出願、予備審査、論文執筆・提出、公聴会という流れで続きます。通常は修了予定月の8ヶ月前に骨子を提出するのですが、僕の場合は、再来月の9月に単位取得退学をする計画で、単位取得退学のためにはあらかじめ骨子を提出していなければいけないので、少し前倒して提出しました。なので、修了には8ヶ月よりももう少しかかりそうです。

f:id:yumu19:20170710215608p:plain 時期 | JAIST 北陸先端科学技術大学院大学

研究成果の概況

骨子を書くに当たり、博士論文の概形をつくらなくてはいけないのですが、これまでに取り組んできた研究と、いま取り組んでいる研究がものすごくバラバラなので、1つの博士論文としてのまとめるのがすごく大変でした。

石川に引っ越してきた2015年の年初の時点(D5)で、博士学生としての成果があがっていなかったので、それまでに取り組んでいた小ネタをまとめるという方針にし、2015〜16年で2つのネタを発表しました。

また、JAISTには副テーマという制度があります。研究室で取り組むメインの研究テーマとは別に指導教員以外の先生に指導してもらって違うテーマの研究に取り組むという制度で、 これは修了の要件にもなっています。視野を広げるという意味で素晴らしい制度だと思いますが、正直言ってただでさえ時間のない社会人学生にとって副テーマの負担はなかなか大きかったです。わがまま言うと、社会人学生は免除とかにして欲しかった。。。副テーマ指導教員は学外の先生にお願いすることも可能なので、僕は前職(明大FMS)でお世話になった中村先生にお願いし、Augmented Typingという研究に取り組みました。

また、未発表のため詳細は割愛しますが、いまは無線ネットワークエミュレーション系の研究にも取り組んでいます。

というように、本当にバラバラです。上記のテーマに取り組んでいるときには、とにかく1つのテーマについて書き上げることを優先したので「博士論文としてのストーリーをまとめるのは博士論文を書く時の自分がなんとかする!」と後回しにしてたのですが、まさにそのツケを払わされることになりました。

結局どうまとめたかというと、博士論文を二部構成にし、第一部をHCI系のネタ、第二部を無線ネットワーク系のネタでまとめ、さらに論文全体をHCI(Human-Computer Interaction)とCPS(Cyber-Physical System)を統合的に取り扱うという非常に大きなテーマでまとめることにしました。考えすぎて煮詰まってきたときには、壮大なテーマを提唱しているのかただのこじつけなのかだんだんわからなくなってましたw まとめるにあたって、いろんな人の博士論文(特に序論)を読み漁りました。これは非常に参考になり、読んでてとても面白かったです。

博士とは

骨子を書くために博士論文のストーリーをまとめていく過程で、博士に対するちょっと考えが変わったというエピソードを紹介します。

博士論文では、Cyber-Physical Systemという概念を扱うことになりました。ここで出てくる “cyber” という単語は、日本語では「情報空間」などと訳されたりしますが、もともとどういう意味なんだろうか?と思い、調べました。cyberの語源は “cybernetics” (サイバネティックス)という概念のようです。サイバネティックスは、Norbert Wienerという数学者が1948年に出版した本で提唱された概念で、「通信工学と制御工学を融合し、生理学、機械工学、システム工学を統一的に扱うことを意図して作られた学問」ということがわかりました。サイバネティックスは技術をまとめた本で、数式もたくさんでてきますが、思想や哲学が存分に盛り込まれていて、難解ながらも知的好奇心を刺激するような面白さがあります。

ウィーナー サイバネティックス――動物と機械における制御と通信 (岩波文庫)

ウィーナー サイバネティックス――動物と機械における制御と通信 (岩波文庫)

ところで、「博士論文には哲学が必要」という言葉を、いろんな場面で耳にします。「哲学」の部分が「ビジョン」「コンセプト」に置き換えられることもあります。博士号取得には、論文誌や国際会議での複数の発表成果が求められますが、その成果をつなぎ合わせるだけではダメで、それらの個々の研究成果がどのような哲学(ビジョン・コンセプト)のパーツになっているか語らなければいけない、ということです。

実は、この言葉に対してはこれまであまり賛同してませんでした。もちろん哲学を示すことができればそれは素晴らしいことですが、博士は専門性の証なのに、本当に哲学が必要なのだろうか?哲学が必要というのはPh.D(Doctor of Philosophy)という言葉の名残りを利用した言葉遊びなのでは?と。

しかし、先述の通りcyberの語源を調べたように*1、博士論文のストーリーをまとめあげていくという作業は「情報とは何か?」「物理とは何か?」「どこまでが人間か?」といった根源的な問いを丁寧に解きほぐし、さらに自分の論理体系に紡ぎ直すことであるように感じ、その紡ぎ直しこそが博士に必要な哲学なのではないかと感じました。

研究とは、いま人類が持っていない新しい知見を得ることです。研究は「巨人の肩の上に立つ」と喩えられるように、過去の知見の積み重ねの上に成り立っています。人類にとっての新しい知見を得るには、まず過去の知見を調査し、人類にとって何が既知で何が未知か把握する必要があります。この過去の知見の調査を掘り下げていくと、やがて哲学にたどり着くのではないでしょうか。

また、研究者で哲学や歴史に詳しい人が結構多く、効果的に引用しているプレゼンテーションを見てよく感心していました。これは単に職業柄哲学や歴史に興味がある人が多いのだろうと思ってましたが、そうではなく、博士課程やその後の研究活動において過去の知見を掘り下げた結果、哲学や歴史の知識を蓄えていったのではないか、と見るようにもなりました。

研究活動の楽しさが再認識できたので、引き続き修了に向けて研究に励みます。まだまだ前途多難なのですが、すごく遠くにほんの少しだけゴールが見えてきたのであとひと踏ん張り。

*1:この例は僕が無知だっただけかもしれませんが

Unityで使えるC#のRedisライブラリ TeamDev.Redis でRedisの全てのキーと値を取得する

f:id:yumu19:20170515210732j:plain 写真は石川県民のソウルフード8番ラーメンですが、内容とは関係ありません。

UnityのC#スクリプトからredisを触りたいと思い

を参考にして TeamDev.Redis というライブラリ*1を使っていたのですが、元のライブラリのドキュメントに使い方が全然書かれてなくてけっこう困ったので、全てのキーと値を取得するサンプルを書いたので情報共有として置いておきます。Unity 5.6.1f1 で動作しました。keys のように複数の値が返るのを取得する時はReadMultiString()を使うと配列で返ってくるよ、というのが肝ですね。ソースコード読めばわかるんですが。

ちなみに

C#のredisクライアントライブラリとしては、ServiceStack.RedisBookSleeve というのがメジャーっぽいのですが、Unityだと動作しない感じなんですかね?(試してない)

*1:.NET 2.0 Compatibleという方を使います