SHIINBLOG

読者です 読者をやめる 読者になる 読者になる

情報科学若手の会2016行ってきた

今年も今年とて静岡は伊東で開催された「情報科学若手の会」に参加してきた。今回で3年連続、3回目の参加だ。 毎年「ブログで報告記事を書くまでが若手の会ですよ」と言われながらも、あれよあれよと時間が過ぎて毎回書いてこなかったのは反省すべきだろう。 というわけで、増量気味に…といくとPyConやABProの報告記事がつらくなってしまうので、出来る限り若手の会を推していく報告記事にしたい。

ロケーション

場所は伊東市。TXで柏からアキバへひとっとび、品川からオレンジの電車に乗ってガタゴト2時間、伊東線に乗ってゆらゆら20分。時間こそ長いが車窓の眺めは悪くない。おまけに先日買ったパタヘネがKindleに入っていたので退屈はしなかった。 旅館はおなじみ「山喜旅館」。情報処理学会の皆さんの魔の手尽力によりIPv6付き光回線が備え付けられた、由緒正しい最先端旅館だ。ぎしぎし鳴る床と木の香りにばーちゃんちを思い出す。

はじまりはじまり

着いたその日は、幹事の皆さんからイントロダクションの後、早速セッションが始まる。これまではこのタイミングで全員自己紹介という流れだったが、今年はナイトセッション(別名・飲み会、これについては後のセクションで)に移動になったようだ。

セッションピックアップ

今年も多様な話題が提供され、ほとんど話題の被りがなかった。 TwitterやSlackでは「今年の発表超エモい」とみんなノリで言っていたが、中身のないエモプレゼンがあったわけではない。発表されたスライドはすべて、感情的な表現を推していたものも含めてちゃんと技術的背景に基づいていた。ある方が「若手の会はある種のフィルタがかかっていて、高品質な発表と優秀な方々に恵まれている」と言われていたが、まさにその通りだと実感した。

たくさんのセッションの感想は、1つ1つ書くことも出来るが骨が折れる。そこで id:marin72_com のやり方を真似することにした。

f:id:puhitaku:20160917142548j:plain ケーブルが短くて戸惑うとちくじ先輩

  • id:tochikuji パイセン相変わらずド変態ですね(褒め言葉)だけどケツは触るなキモいやめろ
  • id:marin72_com レコメンドについて学術的に聴いたの初めてかもしれない
  • JavaのString format遅い!がんばって速くした!
  • HCIはノリノリ動画を作る分野
  • d3.jsで地球儀グリグリ・ニュース映像ポポポーン(語彙力)
  • 会社にとって投資対象となるプログラマで…ありたい…!!
  • LoRaアツいけど高い
  • さすがさくらインターネット。社員さんのレベル爆高い
  • おっちゃんに使ってもらえるロボット考えるとこおおい
  • gRPCのロゴかっこいい、べんり
  • この方のプロデュース力半端ない、農業のIoTとかいう枠組みでは捉えきれない

f:id:puhitaku:20160918150830j:plain 空飛ぶPhenox。搭載されたFPGAがマーカーを判別しホバリングする。制作者の方は物静かな感じだったが、この後お話する中で内に秘める熱意をガンガン受信した。

  • Phenoxカッケー!基板からプロペラからソフトから全部作ってしまうなんてリスペクト
  • 1000万PVおめでとうございます!!!
  • Venmo日本でも使いたい!!!現金面倒くさい!!!
  • LoRaすごいけどやはり地形によっては厳しそう。見通せるか否かが鍵
  • 株の機械学習、ちゃんとやれば儲かる。

ちなみに私もLTをしたのだが、ルータの未発表のネタを取り扱っているためどんな発表をしたのかはヒミツである。(めっちゃツイートされてるけど)

ナイトセッション(飲み会)

若手の会の醍醐味ともいえるのがナイトセッションである。LTが自然発生したかと思いきやラーメン屋に行く集団がいたりなどフリーダムで、私もこれを毎年楽しみにして来ている節がある。

お酒も相まって技術の話題に花が咲く。君の名は。の話題で盛り上がる。三葉の口噛み酒飲みたい。四葉かわいい。不意にピングーの動画を見る。きょろ先輩 id:kyoro353 が撮ったドローンのカッコいい映像を見る。そしてまた技術の話をする。この面白さは実際に来てみなければ体験できないだろう。

料理

旅館だけあって夜ご飯は格別だ。金目鯛とかホイホイ出てくる。今年も堪能させていただきました。

f:id:puhitaku:20160917181319j:plain 一瞬で無くなる金目鯛

今年よかったところ

若手の会としては初めてのSlackが導入された。これまではTwitterがほぼ唯一の情報共有場所だったが、オープンでないSlackにて交わされる議論は粒度が細かく、なによりTwitter NGの発表においては便利だった。またSlack特有のゆるい雰囲気やEmojiといった文化により参加者がさらに参加できている感じもよかった。来年もぜひやってほしい。

イントロダクション中に早速「山喜旅館」のロゴをEmojiに登録したら、みなさんノリノリで使ってくださった。楽しい雰囲気に貢献できて幸いである。

f:id:puhitaku:20160927005227p:plain

あと、LANケーブル製作クイズも面白かった。クイズを解いてLANケーブルのパーツや工具の使用権を得ていき、できたケーブルでAPIを叩くことが出来たらゴールというものである。ウチのチームはどうやらビリだったようだが、それでもみんなで作ったケーブルでパトライトを回すのは格別だ。とても楽しかった。

f:id:puhitaku:20160917194657j:plain ルール説明

f:id:puhitaku:20160917220631j:plain 蘭CABLE

f:id:puhitaku:20160919112734j:plain 帰り際にノーマットを頂いた

来年もまた行きます

実は今回の若手の会は当初パスしようと思っていた。が、幹事の小谷さんからTwitter DMにてお誘いを受け半ば「えいっ」という感じで登録した。3回目の若手の会ということで悪い意味での慣れ(なんというか、ドキドキ感は初めての時よりか落ち着いてきた)がないか心配だったがこれもまた杞憂。技術の話題を直球ストレートで投げて返ってくる場はそうそうない。

というわけで来年もまた参加したいと思う。

走るBuffaloルータを作った。

f:id:puhitaku:20160514232222j:plain

ついに夢の【走るルータ】が実現!

Buffaloの無線ルータに履帯をつけて走らせることに成功したのでその報告を記事にしたためる。 「なぜルータでやるのか」それは私自身もよくわからないけれども、この記事を読んで少しでも笑ってもらえたなら嬉しい。

おことわり。

f:id:puhitaku:20160514220809j:plain:right:w250 この記事に登場する無線ルータはファームウェアを書き換える改造を行っており、本体内部に持つPHYで電波を発すると法律に違反する可能性がある。 今回の記事内でルータから電波を飛ばしている部分はすべて、ルータに付けたUSB Wi-Fiドングル(単体で技適認証を受けた製品)から電波を発していることに注意いただきたい。 平たく言えば、USBドングルを挿した自作PCと同じ状態と思っていただければOKだ。

TOC

走るルータこそ男の夢。

f:id:puhitaku:20160514234431j:plain:right:w250

日々世界の人々の暮らしを支えるネットワークルータ。ことに無線ルータに関しては、もはや一家に一台の普及率といっても全く過言ではない。 先日大変な反響があったルータにディスプレイを繋ぐ記事では、この身近なルータが1台のコンピュータとして活躍できる可能性を示せたが、 本記事はそこからさらに先、「人々の娯楽の対象としてのルータの可能性」について示したいと思う。

ところで、あなたはラジコンを操縦したことがあるだろうか?車、バイク、戦車に船。小学生の頃、ラジコンやミニ四駆を走らせてはしゃいでいた頃がきっとあることだろう。男子であれば特に。 私も小学生の頃はバイクや車のラジコンで遊んでいた。しかし今はどうだろう?ラジコンの「ラ」の字もないような生活だ。あの頃遊んだラジコンたちは、少なくともすぐ取り出せる場所にはない。

しかし大きくなった今は技術がある。机には毎日のように改造して遊んでいるルータたちが並んでいる。 よく考えてみたら、ラジコンだってルータだって同じ電気回路の塊であり、違いといえば偶然その仕事が「走ること」か「パケットをさばくこと」かという程度しか無いじゃないか。 そこで私は思いついた。ルータをラジコンにしたらとっても面白いんじゃね? と。

どうやったら走るか掘り下げてみる。

何の変哲もないBuffaloの無線ルータを自走させるには何が必要だろうか?少し考えてみる。

1. 走るにはタイヤや履帯が必要

物理的に動くということは、タイヤや履帯(いわゆるキャタピラ)が不可欠だ。 どちらにするか悩んだが今回は「走破感」を出したかったので履帯にすることにした。これはタミヤのキットがちょうどいい。

2. 履帯を動かすにはモータが必要

履帯を付けても動かないと意味が無い。動力源のモータとギヤボックスもまた不可欠だ。これも履帯と同じくタミヤのキットでOK。 今回は変速なし・モータ1台の簡単なギヤボックスを使った。

3. モータを動かすには電源と制御回路が必要

モータは電池で回る。小学生の頃はそれでよかったが今走らせたいのはルータだ。乾電池では動かない。ルータ内部では5V・3VのDC/DCコンバータが搭載されていてここから色々電源をのばすのだが、大元の電源入力には12Vが加えられるため12Vの電源を得る必要がある。今日ではスマホ用モバイルバッテリーが安価な電源として普及しているため、これに秋月の5V→最大25V昇圧回路を組み合わせることで対処した。

電源は暫定的に確保したので、次はモータを前後に回す制御回路を考える。モータ制御ICがあれば楽勝なのだが残念ながら買い忘れてしまった。と、ここで高専の実験で学んだ「Hブリッジ回路」の記憶がよぎる。リレーやFETを使い、単一の電源でモータを前後転させることができる回路だ。この回路があれば、モータ制御ICなんて無くてもモータの制御ができる。本来はFETによるPWM制御が理想だが、今回は手間をかけたくなかったためリレーで組むことにした。

Hブリッジ回路では2つのリレーを制御するため、プログラマティックに変化させられる信号をルータ基板から得る必要がある。ここで使うのがGPIOだ。GPIOはGeneral Purpose Input Outputという正式名のとおり汎用な入出力に使える。ルータにおいては、電源ランプを光らせるための出力やモード切替スイッチからの入力にGPIOが使われているので、ここから信号を横取りすればよい。私の場合はUSBコネクタ横のLED(USB機器検知LED)とスライドスイッチが不要だったため、そのランド(ハンダが載っている部分)に0.3mmの銅線をはんだづけしてHブリッジ回路へとのばした。

4. モータ制御信号を操作するにはプログラムが必要

GPIOを制御することでモータを制御できるめどが立った。あとはGPIOをどうやって制御するかだが、これはPython 2Flaskgpioctlを組み合わせて実現することにした。 ルータをアクセスポイントにしそこからFlaskでラジコンのリモコンWebアプリを配信、スマホからFlask上のREST APIを叩くという構成である。

スマホを傾けたら前後に動くというコンセプトが前からあったので、JavaScriptでスマホの加速度センサの値をとりつつ、しきい値に達したらjQueryのajaxでルータ側のREST APIを叩くコードを書くのがよさそうだ。停止・回転の境界で暴れるのを防ぐため、しきい値にはヒステリシスを持たせシュミットトリガ動作とした。 前後進のAPIに相当するURLが叩かれると、Flaskからsubprocess モジュール経由でgpioctlが呼び出される。gpioctlはGPIOの基本的な操作ができる単純なソフトだ。

そしてハードを作る。

構想は十分に練ったので、タミヤキットの組み立てからルータの改造・ソフト実装までを一気にやった。こうして出来た改造ルータの中身が以下の画像だ。 この画像を撮った後少々改良を加えたのだが、あまり変わらないので完成当時の写真で説明する。

足回り

おなじみタミヤのキットでできているので、走るルータは小学生でも再現可能だ。本体のスリムさと回路の簡単さを優先したため、前後進しかできないのはご愛嬌。旋回は次回作(あるのか?)でやりたい。なお、写真では分解を楽にするため一部のネジを取り外してある。 f:id:puhitaku:20160515171032j:plain

f:id:puhitaku:20160515171051j:plain

ルータ内部全体

f:id:puhitaku:20160512022426j:plain

AはHブリッジ基板、Bは5V→12V昇圧回路(キット)、Cはルータ基板。AとBは改造によって追加された基板だ。

Hブリッジ・昇圧回路

f:id:puhitaku:20160514231121j:plain

Hブリッジ回路は教科書に載っているお手本の回路とほぼ同じだが、ダイオードを付け忘れたためスナバ回路を欠いている。これは本当はお行儀が悪いので真似しないようにしよう。リレーの駆動はGPIOからの微弱な電流では不安定なため、トランジスタ2SC1815を使って駆動している。

昇圧回路は単につないだだけだ。念のため、出力端子部分に100μFのコンデンサをつけている。

ルータ基板 電源部

f:id:puhitaku:20160515001107j:plain

ルータの電源入力部に昇圧した12Vをつなぎ、あとは降圧された電圧をそれぞれ使う。モータの電源は元々ここから引っ張っていたが後の実験で通信が不安定になったため、昇圧前の電源から引っ張るよう変更した。

ルータ基板 GPIO部

f:id:puhitaku:20160515001829j:plain

f:id:puhitaku:20160515002138j:plain

上側の画像ではスライドスイッチからGPIOを得ている。一方下側の画像ではLEDからGPIOを得ている。細かいはんだ付けなのだが、先日購入した0.3mmポリウレタン銅線のおかげでランドに負荷を与えること無くはんだ付けできた。

さらにソフトウェアを実装する。

ハードが完成したので、ここからはソフトの実装に入ろう。相当切羽詰まっていたため、ソフトの実装は初お披露目となるlolカンファへ向かう新幹線の中で行った。2徹明けはマジで死ぬ。

github.com

動作は大体こんな感じ: ルータ内で起動しているサーバへスマホでアクセスするとjQueryでスマホの加速度を取り始める。y方向のベクトルがしきい値を超えたら前後進と停止のAPIへGETリクエストを送る。本当はフロントエンドも綺麗にしたいのだがそんな余裕はなかったため中身は大変簡単だ。 コードはこちらのサイトを参考にさせていただいた。

リポジトリを見ていただければわかる通りサーバはPython + Flask + Gunicornで実装している。ルータの起動時にサーバも起動して欲しいので、OpenWrtで使われる procd init script を追加で書いた。

gist.github.com

当初はアプリのDaemonize手法としてSupervisorを採用し、実際にOpenWrtで動かせるようにしたのだが慢性的なメモリ不足に見舞われたため断念した。

走らせよう! @lolカンファ

f:id:puhitaku:20160515161452j:plain

Photo by id:nwpct1

完成直後、高専カンファレンスlol (通称lolカンファ)でお披露目となった。詳細は別記事に記した。 ここではまだ正常動作するWi-Fiドングルを手に入れてなかったため有線LANでのデモとなり、それの影響でスマホでのデモも叶わなかった。APIへのリクエストはMacからcurlにて行っている。

本来お披露目したかった状態でデモできず悔いは残るが、当ブースの他の展示も含めて会場では大変な反響があり、様々な方に笑っていただくことができたので嬉しかった。lolなコンテンツの提供は大成功の内に終えることが出来た。

完璧な状態で走らせよう! @弊社オフィス

vine.co

上のlolカンファの後にしっかり動作するWi-Fiドングル Buffalo WLI-UC-GNM2 を手に入れたため、このドングルをWi-Fiの親としスマホを接続した。 極小Wi-Fiドングルでありがちだが発熱はやはりひどく、USBコネクタの上面に小さなヒートシンクを付けることで対策した。まあ平均温度さえ下がってくれれば…

実は大半の加工はFULLER株式会社こと弊社の私のデスクで行っている。自分の環境を本当に自由に使わせてもらえる弊社に感謝だ。 完成後、何人かの先輩社員に実際に操縦体験してもらった。

まとめ

長年考えていた「ルータを走らせる」という目標を一定のクオリティで達成できて嬉しい。子供の頃のワクワクをルータで再現できたのは感慨深い。 次回作を作るとするなら次はタイヤでやりたい。やはり左右に曲がれなくては本当の「ラジコン」とは呼べないからだ。

参考ページ

ameblo.jp

モータドライブ編

lolカンファでブース発表してきた + kosen10s LT#04行ってきた。

はてさてようやく記事になった。

先日明石高専にて開催された高専カンファレンス 101lol (通称: lolカンファ)と、kosen10sのLT会である「LT#04」に参加してきた。

とはいっても仕事とカンファ準備とでたてこんでいてほぼ2徹状態だったので案の定大事故が発生。 カンファについては結局ブース発表をするためだけに行った感じになってしまったのは悔やむところ。

とりあえずカンファの発表内容については10sメンツのもの以外では「しおみさんだけがいない会社」ぐらいしか知らないので、 報告記事を書いてる他の皆さんにお任せしたいと思う。記事末尾にリンク掲載。とりあえずカレーメシパイセン id:nwpct1 の発表は後で見たけどすごかった。

なお、今回のブース発表で展示したもののうち「走るルータ」については別に製作記事を書いたのでそっちも読んでもらえると嬉しい。

お家芸のカンファブース展示。

今回は「A Whole New Router World」と題して、その名の通り空飛ぶじゅうたん改造ルータの展示を行った。 自分ではまったく写真を撮る暇がなかったので、主になっちゃん id:marin72_com の写真をお借りしつつ紹介する。

続きを読む

SupervisorをOpenWrtで使ってみる

プログラムを簡単にDaemonizeできることで人気のSupervisorをOpenWrtでも使ってみた。

インストール

SupervisorはPure-Pythonで書かれているのでインストールは簡単。python-pipを入れると依存関係でPythonが全部入る。本当はPython 3を使いたいのだが、opkgにPILとかも揃っている (python-imglib)関係で仕方なくPython 2を使っている。

opkg update
opkg install ca-certificates python-pip
pip install supervisor
続きを読む

BuffaloルータをPCディスプレイにつなげた。

f:id:puhitaku:20160118225834j:plain

先日、Buffaloの無線ルータ WZR-450HP にDisplayLink社のUSBグラフィックスアダプターを接続して、PCモニタにshellを表示することに成功したのでそれまでの道のりを紹介しようと思う。 実験記録みたいな感じなので、単にアダプタを接続するためのHowToではないことに注意。とにかく語りたいだけ(笑)

この記事の内容は、先日弊社で開催のFULLER エンジニアミートアップで発表した未完成のスライドおよびkosen10sLT #03で発表したスライド(下記)と同一だが、内容を時間の都合で多少端折っていたので、この記事では発表でしゃべらなかった細かい所も詳細に語りたいと思う。

www.slideshare.net

事前におことわりしておくが、私は電波法を侵さないよう細心の注意を払いながら、要は電波を飛ばさないようにしてこのハックを行っている。 改造後も内蔵のPHYは使わず、外付けのUSB Wi-Fiドングル(単体で技適認定を受けた製品)をルータに接続してWi-Fiを利用している。アンテナをぶっ挿している事もあるが、その場合はすべて演出もしくは無改造のルータであることに注意頂きたい。

続きを読む

kosen10s LT #03 行ってきたぞい

f:id:puhitaku:20160202210718p:plain

kosen10s LT#03、第3回目!!

やっぱり完全同級オンリーイベは最高ですね。ムズカシイ緊張をしなくてすむってとこが。 参加者は過去最高の19人(!!)Slackもガンガン賑わってきてるところで、コミュニティの拡大を感じます。

今回も前回と同じくHiveShibuyaで開催。場所・ピザ共々岡山さん・木下さんありがとうございます!

f:id:puhitaku:20160130141345j:plain

続きを読む

高専カンファ100 in 東京に行って、聴いて、学んだ。

f:id:puhitaku:20151220121118j:plain

昨日・今日(2015年12月19日〜20日)と高専カンファ100 in 東京に参加しました! 本来なら発表レポを書くべきなんですがそれは他の方々の記事に任せるとして、今回はカンファの途中にハッとしたことを書くことにします。

続きを読む

「 ウォークゲームハッカソン in SABAE」 に参加してきました。

行ってきたぜ鯖江!!

f:id:puhitaku:20150822093546j:plain

福井県鯖江市のjig.jp本社にて「ウォークゲームハッカソン」に参加してきました。

「ウォークゲーム」はjig社の作った言葉で、「位置情報やセンサー情報などを使いながら実際に体を動かして遊ぶボードゲーム風のゲームのこと」を意味するらしいです。

ちなみに行きも帰りも(切符的な意味で)青春して、でなり君 ( id:denari01 )の家に2泊させてもらいました。マジでありがとう!!

続きを読む

Cloud LaTeXとShareLaTeX、どっちがいい?

ローカルにTeX環境を入れる必要がなく、オンラインでTeXが書ける便利サイトとして代表的なものに、

の2つがある。

私は去年吟味した結果ShareLaTeXを使っていて、卒業論文は「すべて」このShareLaTeXで書きあげたのだが、先日kosen10sのLT会に行った時にまるさ君が「Cloud LaTeX使ってる人いない?」と言っていたので、ShareとCloudの比較をしてみることにした。

機能の比較をするだけなら他サイトがやっているし、本当に必要なのは「ちゃんとしっかり使えるのか」というところだから、今日は両方使ってみてなぜShareLaTeXに軍配が上がったかを詳細に書きたいと思う。

あとお断りとして、私は普段XeLaTeXの方のみを使っているため、基本的にXeLaTeXベースの比較になる。より一般的なpLaTeXとは比較結果が異なる可能性もあるので注意してほしい。

続きを読む

kosen10s LT #01 に参加してきたゾ

kosen10sは、2010年に高専に入学した高専出身のみんなで集まるコミュニティです。 昨日(2015/5/4)は、そんなkosen10sでLT会が開かれたので参加してきました。そこで発表した内容と感想を書き記しておきます。

EDIT (20150518): みんなの記事へのリンクを更新しました。

なお、公式の説明では

高専をついこの間卒業したイケてる人たちでLT会!

本イベントは2010年に高専に入学され、「順調であれば」つい先日本科を卒業された高専出身者で集まってLT会をするものです

という感じになってます。

まずはじめに、会場手配などを率先してやってくれたでなり君(id:denari01)やなっちゃん(id:marin72_com)をはじめとする皆さん、本当にありがとう&お疲れ様でした!

続きを読む