**********************************************************************
セッションs1d
テーマ:カーネルもくもく会への招待
講師:山崎進 (北九州市立大学)
山根ゆりえ(達人出版会)
日時:2017/8/24 21:00-22:30
参加人数:約10名
**********************************************************************

TOPPERSの活用アイデアアプリケーション開発コンテストの紹介
・TOPPERSとは
  パソコンとは違ってマイコンボードにはOSが入っていない
  東京大学の坂村先生がマイコンボード向けのOSのITRONという仕様を作った
  TOPPERSは高田先生がオープンソースのITRON系のプロジェクト
  オープンソースなので自由に使用,ソースコードを改変することも可能
  発足は2000年なかば、十数年以上続いているプロジェクト
  ITRON系のOSを作ったり
  はじめはITRON に完全に準拠した仕様を作っていたが、だんだんとTOPPERSとしてよりよいリアルタイムOSを作ろうという方向に
  はじめはITRONに準拠したものをやっていたが、自動車業界ではITRONではなくAUTOSARという規格がある。TOPPERSとしてAUTOSARに準拠したOSを作っている
  OSだけでなくミドルウェアの開発、組み込みの教育にも力を入れている

・LEDCampもSWESTの支援を受けている

・活用アイデア・アプリケーション開発コンテストについて
  ・TOPPERSの成果物を用いた楽しい独創的なアプリケーション・アイデア、実用的なアプリケーション・アイデアを募集してコンテストを行っている
  ・部門
    ・アプリケーション開発部門: 実際にTOPPERSの成果物、OS・ミドルウェアを使用してアプリケーションを作る
    ・活用アイデア部門: 成果物は不要,活用のアイデアを募集
    ・がじぇるねIoT部門: 昨年度から新設された部門. マイコンボードとTOPPERSの成果物を利用して面白い事を募集
  ・ぜひ参加してください
  ・応募に必要なもの:アイデア・成果物
  ・内容をA4で5ページ(最大で11ページ)
  ・応募された作品の知的財産権を主催者のTOPPERSから要求はしないが、応募作品をより多くの方に使用してもらうため、アプリケーション開発部門の受賞作品はオープンソースにすることや、受賞作品に関する講演をお願いしている
  ・応募の流れ:
    6月の中頃のTOPPERSカンファレンスで募集開始, 8月末に募集締め切り, 9月末にTOPPERSの運営委員会にて審査が行われ,10月に審査結果が発表される,11月に行われるET組み込み総合技術展にて受賞作品を展示・受賞式を行う.
  ・協賛: CQ出版社, ルネサス エレクトロニクス,アフレル
  ・今年が7回目, 今年も絶賛募集中
  ・学生の応募作品については学生賞が存在

・TOPPERSの活用アイデアアプリケーション開発コンテストに応募するといいこと
  ・他の参加者と友達になれる
  ・まだ応募者が少ないため、他の参加者や審査員が丁寧に作品をみてくれたり、助言や褒め言葉をもらえる
  ・応募者が自分の作品を参考文献にあげる可能性が高い
  ・有名な方に審査してもらえる
  ・入賞するとETで高田先生から賞状がもらえる
  ・TwitterやFacebookにもお願いすれば紹介してもらえる
    ・例:2013年に個人の中村晋一郎さんが応募されて、講演をしたときに高田先生と同じくらい人を集めた。今のアプリケーションの在り方について問題提起をした。TOPPERSに追従しなければ評価されないというわけではない。高田先生に対して今のコンフィギュレータのやり方がおかしいと指摘した結果、TOPPERSの非公式バージョンができた。自分の言いたい事があれば、入賞してから言えばインパクトが強い。
  ・新しいことに挑戦してください。
  ・TOPPERSは会員企業が優秀なので、面接のときに「学生賞をとった」というと就職に有利。
  ・2回以上応募した人が多い。会員であっても会員でなくても何度も応募してくれる人がいる。
  ・賞を取ると有名な人と仲良くなれる
  ・既にあるものに対してユーザ視点で改良したものでも応募してよい
  ・Raspberry PiやレゴのマインドストームでもTOPPERSが動作する

・第五回の受賞作品の紹介
  ・応募した作品の紹介は省略
  ・応募してよかったこと
    ・遠方で開催されているイベントに参加できなくても、作品を送ると展示してもらえた。
    ・自分が作ったものを誰かに見てもらうことが大事、いろんなところで自分が作ったものをみてくれることでさらに見てくれる人が増える
    ・作ったものをどれだけいろんな人にみてもらえるかというチャネルにおいて、TOPPERSに紹介してもらうことは信ぴょう性が高い
    ・作っているということと、作っていないということは全然違う。
    ・こういうものを作っていて、こういう所で困っている、と言うことを伝えると色々と教えてもらうことができる。ただわからないというのではなく、作ったものを
みせてここまでできたけどここで困っているということを伝えると親切に教えてもらえる。
    ・何かを作って世の中に公開することがよいこと
  ・何をしたか
    ・過去の応募作品を見ていった→一貫性がなかったので困った
    ・時間がないからあきらめるというのではなく、とりあえず出してみることが重要
    ・ぶっちゃけ自分では応募作品はダメかなと思っていた


・Zackernelについて
・北九州市立大学でプログラミングを教えている
・去年の今ごろに集中講義においてラーメンタイマーを作るという演習を行った。スイッチをおすたびに状態が遷移して、延長ボタンがあったり、スタート、ストップが行えるものをArduinoで作った。(Arduinoはじめようキットとブレットボードを使った)
・学生たちは順調にプログラミングしていたので自分は暇だったので学生に交じって自分もプログラミングしようと思った。今までと違う方法でプログラミングしてみようと思った。
・Node.jsと同じ動作原理で作ってみようとおもった。ArduinoはC++で動いていて、C++11からラムダ式が使えるので、Arduinoでラムダ式を使って作ってみようと思った。
・こんな感じのラムダ式を使おうとおもった
・関数が1個に見えるが、ラムダ式を使っているので全てで3つある
・LEDを灯したあと、実際には別の関数になっていて、別の関数を呼び出す、というようなコードになっている(コールバックによる)
・以上のようなコードで動くカーネルを作ってみようと思った
・学生時代以来に徹夜プログラミングをした
・はじめは関数ポインタを使用していたが、どうしても型があわないという問題があった。ググっても、C++11だったら標準ライブラリで使用できるというような能天気な英語のコメントしかなかった。思い立ってGitHubのissueを調べると、未明の4時に「Arduinoはラムダ式が動かないね」「このライブラリが参考になるよ」といったやりとりをみつけて「これだ!」と思ってfunctional-vlppというライブラリを使ったらできるということがわかったので、未明の5時くらいからプログラミングを開始して7時くらいにファーストプロトタイプが完成、ひと眠りして大学にいって実機で動かした。
・大きなバグがあって3回作り直した。カーネルを作るのは難しい。
・自分で結構面白いものを作ったのかなと思った。Node.js同様、スタックを食わないのでIoTの用途に向くのではないかとおもった。従来のマルチスレッド方式だとインターネットからスレッドを一つ一つ立てていくと1つのデータを送受信するたびに数メガのメモリを食うが、作ったカーネルだと1つあたりキロバイトオーダで済むため、コネクションをたくさん張っても落ちないようなものが作れた。
・潜在的な優位性をもっている
①マルチスレッド方式より優位な同時コネクト数が保てる
②Node.jsはJavaScriptで動くのでメモリを食うがC++で動くのでメモリを食わない
・C++で実現している同様のものがあったが、調べてみると滅茶苦茶プログラムが読みにくい。自分がつくったやつではラムダ式を使うのでわかりやすく書くことができる。
・名前をつけた。ZackyのKernelなのでZackernelという名前をつけた。
・カーネルやアプリケーションをもくもくと開発しようと思っている。