2016年12月5日月曜日

Pynaoqi SDK 2.1.4をUbuntu 16.04で動かすときにハマったことと解決策

僕はSoftbank Pepperを動かすSDKとしてchoregraphe,pynaoqi,qimessaging.jsを主に使っています。
先日Ubuntu 14.04をUbuntu 16.04にアップグレードして、pynaoqiの環境構築を行って動かしてみたところ、2つのエラーが発生しました。
 
エラー1 : libqipython.soを開けませんでした
pynaoqiでUbuntu 16.04でaldebaranの公式マニュアルの通りに環境構築をしたときに以下のエラーが発生しました。

>>> import naoqi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    import qi
  File "/path/to/pynaoqi-python2.7-2.1.4.13-linux64/qi/__init__.py", line 72, in <module>
    from _qi import Application as _Application
ImportError: libqipython.so: cannot open shared object file: No such file or directory


このエラーはpynaoqiディレクトリにあるlibqipython.soをqi/__init__.pyが発見できないというエラーです。
この問題は共有ライブラリのパスを通すことで解決できます。

export LD_LIBRARY_PATH="/path/to/naoqi:$LD_LIBRARY_PATH"
sudo ldconfig
 
を実行することで解決できます。 

エラー2  : libboost_python.1.55.0.soを開けませんでした
次に、
ImportError: libboost_python.1.55.0.so: cannot open shared object file: No such file or directory 
 というエラーが発生しました。

 qi/__init__.pyを見てみると、

    deps = [
            "libboost_python.so",
            "libboost_system.so",
            "libboost_chrono.so",
            "libboost_program_options.so",
            "libboost_thread.so",
            "libboost_filesystem.so",
            "libboost_regex.so",
            "libboost_locale.so",
            "libboost_signals.so",
            "libqi.so",
            "libqitype.so",
            "libqimessaging.so",
            "libqipython.so"
    ]


 というコードが発見できます。

 また、
readelf -Ws libqipython.so | grep "boost"
を実行すると、*boost*python*のキーワードが入ったシンボルが発見できるかと思います。

pynaoqiのディレクトリにはlibboost_python.soがあるので、
__init__.py -> libqipython.so -> libboost_python.so -> libboost_python.so.1.55.0
という依存関係が判明しました。

この問題は、libboost-1.55.0の共有ライブラリをpynaoqi/以下に入れれば解決できます。
Ubuntu 16.04では
ls /usr/lib/x86_64-linux-gnu | grep "libboost" 
apt-cache search libboost
を実行してみると、*1.58*というキーワードが発見できたことに対し、*1.55*のキーワードは存在しなかったので、ubuntu 16.04のPC内とaptレポジトリにはlibboost-1.58しか存在しないことがわかりました。

この場合は適当なライブラリに入っているlibboost_*.so.1.55.0の共有オブジェクトファイルを取ってくることで解決できます。

naoqi c++ sdkをダウンロードして展開し、lib/以下を見てみると、libboost_*.so.1.55.0の共有オブジェクトが発見できるので,
cp -a path/to/naoqicpp/lib/*.so*.1.55.0 /path/to/pynaoqi
を実行することによってこの問題を解決できます。

これで
>> import naoqi
が成功するとおもいます。

この記事はSoftbank Robotics Community Wikiにも投稿しています。(英語)
https://community.ald.softbankrobotics.com/en/forum/import-issue-pynaoqi-214-ubuntu-7956#node-12298

2016年12月2日金曜日

Pepperハッカソン & 講習会① : いきさつ


祖母の東京の家で暮らしていたPepperが金沢工業大学の研究所に引っ越ししてきました!
研究室のみんなはPepperに興味しんしん!
Pepperとあいさつしたり、一緒に踊ったりして、楽しみました!!!

でも、研究室のみんなは工学部の大学生!
今あるロボットを使うだけじゃなくて、作りたいのが工学部の学生!!!

そこでぼくが、Pepperハッカソン & 講習会を提案したところ、研究室の大学生から「やりたい!」「ぜひ!」「いいね!」という声が!!!!!

そこでPepperハッカソン & 講習会を企画・開催することになりました。
「研究室のゼミの一環としてやろう」という話が大学教授からも出て、開催が決定しました!



Pepperを通して、生活支援ロボットのソフトウエア・人工知能開発を体験してもらいたい!!
生活支援ロボットソフトウエア人工知能を自分で作ることの楽しさを知ってもらいたい!!

次回Pepperハンズオンについて書きます!お楽しみに!

2016年11月13日日曜日

つくばチャレンジ2016




















つくばチャレンジに参加してきました!!
自分が初めて参加したのは2014年にTurtlebotというロボットを使ったときにになります。そのときは1人チームでしたが、今回は他のメンバーのROSのプログラミングをサポートしたり、プログラムのROS化をサポートしたり、ソフトウエアのバグや障害が発生したときに対処する係でした!。
今年の記録は110mでした!


つくばチャレンジとは
ロボットが町を歩ける技術を確立することを目的としたチャレンジです。
ロボットが人間と同じように、自律で公園を走行させ、横断歩道などを渡らせます。
2kmのコースをロボットに走行させます。

つくばチャレンジでは色々な研究者と技術交換ができます。自分のチームは学生だけでなく、NVIDIAやパーソナルモビリティの会社の技術者などとも交流しました。

つくばチャレンジが研究からベンチャーにつながっていくような流れになってきているのを今回感じました。

今回使ったロボット:UNiMO

UNiMO AI



UNiMOはUNiMO社が開発したおしゃれな電動車いすです!
http://newatlas.com/unimo-continuous-track-electric-wheelchair/29748/
駆動部にはクローラーが付いており、雪道・雨道・坂道も気にすることなく走破できます。充電無しで20km走破できます!
 
今回はUNiMOのジョイスティックの信号をArduinoで制御し、LAN通信でArduinoとPCを通信しました。
自律走行のための科学計算はノートPCを使用し、PCとArduinoを通信させて制御しました。
自律制御の安定化のために駆動制御部のArduinoでPID Controllerを実装しています。
なお、ロボットミドルウエアはROSを使用しています。

 
制御システム

測域センサ/ジャイロセンサ -> SLAMプログラム(gmapping) -> move_base関連の自作プログラム -> geometry_msgs/Twist -> Arduino PID Controller -> 駆動部



ROSとは


ROSは世界で最も使用されているロボットのミドルウエアです。
シリコンバレーのロボットベンチャーのWillow Garageが開発し、現在はオープンソースです。
ROSはパッケージシステム, microservicesを採用したプログラミングモデル, 高度なプログラム解析システムがあります。
ROSのコアシステムはTCP/IPとXML-RPCによる通信で実装されているので、通信をさせるプログラムさえ書けばどんなプログラミング言語でもROSプログラムとして使用することが可能です。ROSは主にC++とPythonでプログラミングします。

ROSでプログラミングするイメージとしてはROSはNode.jsのエコシステムに近いです。
(npmパッケージによるプログラムの再利用、Node.jsのモジュール = ROSのmicroservicesプログラミング(Pub/Subモデルとトピック通信) )
必要な部分だけをプログラミングして、他の部分は既存のパッケージを使用することによって高速にロボットソフトウエアを開発することができます。
バグ解析なども、プログラミングフローグラフ可視化(rqt_graph)、2次元グラフ可視化(rqt_plot)、3D可視化(rviz)、CUI可視化ツール(rostopic)、ロボット制御データの保存・再現(rosbag)機能などを使用してスピーディーに行うことができます。

SLAMとは
Octomap

ロボットの自律走行に重要な技術としてSLAM(Simultaneous Localization and Mapping)があります。
これはロボットが各種センサを使用して、ロボットが走行中に地図を作成し、そしてロボット自身が自己位置を推定する技術です。 自律走行自動車もSLAMを使っています。

なぜ「自己位置を測定」ではなく、「自己位置を推定」であるかというと、SLAMのアルゴリズムはほとんどが確率ベースだからです。
「地点Aである」ではなく、「地点Aである確率がX%, 地点Bである確率がY%, よって地点Aである確率が最も高いので地点Aと推定する」です。


gmapping


つくばチャレンジ2016で採用したUNiMOのSLAMアルゴリズムはgmapping + amclです。
gmapping+amclは2DのSLAMアルゴリズムで、ROSでSLAMを使うのにあたって最も利用するのが便利なSLAMパッケージです。

昨年のつくばチャレンジはOctomap + humanoid_navigation(簡単な3D自己位置推定アルゴリズム)でSLAMをしたのですが、humanoid_navigationプログラムを使用するにあたって今年のPCは使用するのに必要なRAMのメモリが足りず動かなかったため、2D SLAMのgmapping + amclになりました。(ROSのプログラムの構造上Octomapで生成されている地図のメモリを2回RAMに読み込む必要があるため) Octomapとhumanoid_navigationを両方nodelet化してnodelet_managerで管理すればメモリ容量的に3D SLAMができたかもしれません。
大体3D SLAMの方が正確な自己位置推定ができます。(ランドマークの特徴量が多いため) 

Autoware
Autoware

humanoid_navigationをするのに必要なRAMのメモリが足りなかったため、採用候補の一つに入った3D SLAMアルゴリズムがAutowareのndt_mapping + ndt_localizationでした。
Autowareは名古屋大学, 長崎大学と産総研が開発した自律走行自動車のための開発キットです。オープンソースです。自律走行に必要な制御が色々とそろっていて、GUIツールでプログラムを動作できるので初心者も簡単に使用できます。

自律走行自動車に興味のある方はAutowareを動かしてみると楽しいと思います。シミュレータ + rosbag付きです。自律自動車の会社であるZMPが一部Autowareのプログラムを採用しているらしいです。
https://github.com/CPFL/Autoware

そのndt_mapping + ndt_localizationを以前つくばで走行させたデータのrosbag(過去のロボットの動作を再現するROS用ツール)を動かして試したのですが、角のカーブで地図生成が発散して使いものにならなかったのでAutowareの採用は断念しました。走行する道に直線が多い場合はndt_mapping + ndt_localizationは利用できるかもしれません。

つくばチャレンジ2016




















つくばチャレンジに参加してきました!!
今年の記録は110mでした!
僕は他のメンバーのROSのプログラミングをサポートしたり、プログラムのROS化をサポートしたり、ソフトウエアのバグや障害が発生したときに対処する係でした!


つくばチャレンジとは
ロボットが町を歩ける技術を確立することを目的としたチャレンジです。
ロボットが人間と同じように、自律で公園を走行させ、横断歩道などを渡らせます。
2kmのコースをロボットに走行させます。


今回使ったロボット:UNiMO

UNiMO AI



UNiMO株式会社ナノオプトニクスエナジーが開発したおしゃれな電動車いすです!
http://newatlas.com/unimo-continuous-track-electric-wheelchair/29748/
駆動部にはキャタピラが付いており、雪道・雨道・坂道も気にすることなく走破できます。充電無しで20km走破できます!
 
今回はUNiMOのシリアルポートからUNiMOをArduinoで制御しました。
自律走行のための科学計算はノートPCを使用し、PCとArduinoを通信させて制御しました。
自律制御の安定化のために駆動制御部のArduinoでPID Controllerを実装しています。
なお、ロボットミドルウエアはROSを使用しています。

 
制御システム

測域センサ/ジャイロセンサ -> SLAMプログラム(gmapping) -> move_base関連の自作プログラム -> geometry_msgs/Twist -> Arduino PID Controller -> 駆動部



ROSとは


ROSは世界で最も使用されているロボットのミドルウエアです。
シリコンバレーのロボットベンチャーのWillow Garageが開発し、現在はオープンソースです。
ROSはパッケージシステム, microservicesを採用したプログラミングモデル, 高度なプログラム解析システムがあります。
ROSのコアシステムはTCP/IPとXML-RPCによる通信で実装されているので、通信をさせるプログラムさえ書けばどんなプログラミング言語でもROSプログラムとして使用することが可能です。ROSは主にC++とPythonでプログラミングします。

ROSでプログラミングするイメージとしてはROSはNode.jsのエコシステムに近いです。
(npmパッケージによるプログラムの再利用、Node.jsのモジュール = ROSのmicroservicesプログラミング(Pub/Subモデルとトピック通信) )
必要な部分だけをプログラミングして、他の部分は既存のパッケージを使用することによって高速にロボットソフトウエアを開発することができます。
バグ解析なども、プログラミングフローグラフ可視化(rqt_graph)、2次元グラフ可視化(rqt_plot)、3D可視化(rviz)、CUI可視化ツール(rostopic)、ロボット制御データの保存・再現(rosbag)機能などを使用してスピーディーに行うことができます。

SLAMとは
Octomap

ロボットの自律走行に重要な技術としてSLAM(Simultaneous Localization and Mapping)があります。
これはロボットが各種センサを使用して、ロボットが走行中に地図を作成し、そしてロボット自身が自己位置を推定する技術です。 自律走行自動車もSLAMを使っています。

なぜ「自己位置を測定」ではなく、「自己位置を推定」であるかというと、SLAMのアルゴリズムはほとんどが確率ベースだからです。
「地点Aである」ではなく、「地点Aである確率がX%, 地点Bである確率がY%, よって地点Aである確率が最も高いので地点Aと推定する」です。


gmapping


つくばチャレンジ2016で採用したUNiMOのSLAMアルゴリズムはgmapping + amclです。
gmapping+amclは2DのSLAMアルゴリズムで、ROSでSLAMを使うのにあたって最も利用するのが便利なSLAMパッケージです。

昨年のつくばチャレンジはOctomap + humanoid_navigation(簡単な3D自己位置推定アルゴリズム)でSLAMをしたのですが、humanoid_navigationプログラムを使用するにあたって今年のPCは使用するのに必要なRAMのメモリが足りず動かなかったため、2D SLAMのgmapping + amclになりました。(ROSのプログラムの構造上Octomapで生成されている地図のメモリを2回RAMに読み込む必要があるため) Octomapとhumanoid_navigationを両方nodelet化してnodelet_managerで管理すればメモリ容量的に3D SLAMができたかもしれません。
大体3D SLAMの方が正確な自己位置推定ができます。(ランドマークの特徴量が多いため) 

Autoware
Autoware

humanoid_navigationをするのに必要なRAMのメモリが足りなかったため、採用候補の一つに入った3D SLAMアルゴリズムがAutowareのndt_mapping + ndt_localizationでした。
Autowareは名古屋大学, 長崎大学と産総研が開発した自律走行自動車のための開発キットです。オープンソースです。自律走行に必要な制御が色々とそろっていて、GUIツールでプログラムを動作できるので初心者も簡単に使用できます。

自律走行自動車に興味のある方はAutowareを動かしてみると楽しいと思います。シミュレータ + rosbag付きです。自律自動車の会社であるZMPが一部Autowareのプログラムを採用しているらしいです。
https://github.com/CPFL/Autoware

そのndt_mapping + ndt_localizationを以前つくばで走行させたデータのrosbag(過去のロボットの動作を再現するROS用ツール)を動かして試したのですが、角のカーブで地図生成が発散して使いものにならなかったのでAutowareの採用は断念しました。走行する道に直線が多い場合はndt_mapping + ndt_localizationは利用できるかもしれません。

2016年10月26日水曜日

CODE BLUE 2016



CODE BLUE Tokyo2016の学生スタッフをしてきました!!

CODE BLUEは「世界トップクラスのセキュリティ専門家による日本発の情報セキュリティ国際会議」です。

1日目はスタッフ懇親会 & 会場設営、
2日目はフリーなので国内外のトップセキュリティ専門家による講演を聴講することができました。
3日目は学生スタッフとして活動。自分の担当は受付(通訳アシスタント)になりました。

CODE BLUEの開催日は2日間あるのですが、学生スタッフには1日は参加者と同様に講演などを自由に聴講させて頂けるなどの配慮があり、大変楽しかったです!

事前の打ち合わせで僕は英会話ができるということで、受付・通訳アシスタントの担当になりました。仕事内容としては今年初開催のCODE BLUEのハッカソン、コンテスト会場の受付です。コーヒー入れやお菓子の補充などが主な仕事でした。他にも、ハッカソンのBGMの設定(soundcloud)などをしました。peatixの方たちと一緒に受付業務をしました。

また、午後の休憩時間には、自動車のハッキングコンテストに参加しました。初めての自動車ハッキングがすごく楽しかったです!!

最後にはNetworking Partyがあります。お寿司等も振る舞われ、とても豪華です!僕は自動車ハッキングでとても仲良くなったフランス人のETASの企業の人たちと会話を楽しみました。

国際交流に関しては、学生でも技術があって、同じ研究テーマだったり、コンテストで仲良くなれば国籍関係なく楽しめます!

それでは、講演の内容やコンテスト内容についてです。

PowerShellの難読化


PowerShellスクリプトの難読化方法と難読化ツールについての講演を聞きました。
PowerShellとは
PowerShellは主にWindowsで使用される、.NET上で動くコマンドライン/シェルスクリプトです。オブジェクト指向のシェルスクリプトプログラミングができます。
 (Windowsだとコマンドラインはcmd、シェルスクリプトはbatchfileが結構有名だと思います。)
PowerShellが優れているところは、.NETベースのため、「.NETでできることはほぼPowerShellでできる」ようになることです。
これによって、3rd partyパッケージ無しでPowerShellのコマンドでネットワーク通信、XMLのパーシング、HTTPサーバー起動などが出来ます。bashより高機能です。
PowerShellはWindows Vistaからデフォルトでインストールされていて、また.NETもデフォルトでイン
ストールされている場合が多いです。
高機能なシェルを環境構築なしで使用できることが、大きな利点だと思います。

PowerShellとセキュリティ
PowerShell(スクリプト)は悪用するとcmd/batchfileと同じようにマルウエアのようなものや悪意のある動作をすることが可能です。

悪意のある動作を防ぐためには(セキュリティ対策)、その悪意のある動作を発動させるPowerShellコマンドを検知して防げば実現可能です。
PowerShellはほとんどの実行されたコマンドをロギングすることが可能で、これを利用することでPowerShellの悪意のあるコマンド検知ができるのではないかと思われます。

ここで、PowerShellのスクリプトを難読化することができれば、悪意のあるPowerShellスクリプトがシグネチャとして検知されないので、PowerShellの悪意のあるスクリプトに対するセキュリティ対策を突破することが可能です。
PowerShellの難読化は比較的簡単で、*-String cmdletsを使用して文字列置換/連結したり、コマンド引数をランダムに省略/省略しないことによって実現することが可能だそうです。

PowerShell難読化自動化ツール: https://github.com/danielbohannon/Invoke-Obfuscation

また、PowerShell Logに実行した悪意のあるコマンドを残さないためのテクニックなども発表していました。PowerShell Logに情報を残さなければ、PowerShell Logを活用したPowerShellのセキュリティソフトウエアを突破できます。
PowerShellの元となる.NETのSystem.Management.Automation.dllを直接叩いたりcmdからpowershellを引数指定で子プロセスとして実行することでPowerShell Logを残さずPowerShell Scriptを実行することができるそうです。

自動車のハッキング

自動車のハッキングに挑戦しました!!!
何とか全問解くことができ、景品のマグカップとタンブラーをゲット!!!

最近の自動車の仕組み

自動車にはエンジンを制御するためのコンピューターであるECUというものが最近の自動車には100個以上付いています。
前右の車輪を制御するためのECU, 前左の車輪を制御するためのECU, ステアリングのためのECUなど、ECUは自動車の制御のために色々な役割を持ちます。
自動車の制御は、このECU同士で通信しながら情報を共有してエンジンなどを制御することによって成り立っています。
そのための、ECU同士を通信させるためのネットワークが車載ネットワークです。

自動車のハッキング

車載ネットワーク、これが自動車のハッキングに最もつながるキーワードです。
車載ネットワーク上に、悪意のある情報をECUなどに送信することができれば、車の操縦を乗っ取ることができます。

車載ネットワークにはいくつか規格がありますが、標準規格になっているのがCANで、今回はCAN上で自動車のハッキング問題に挑戦しました。

今回はCANのパケット解析ツールを使って、自動車のハッキングに挑戦しました。
CANの上位プロトコルであるUDS(アプリケーション層)とISO-TP(トランスポート層(フロー制御付))のパケットを手作りして送信したり、UDS/ISO-TPのパケットを解析して問題を解きました。

1. パケットの重複を消去して、ID順にソートしてASCIIのデータ文字列を読んでフラグを見つける
2. フラグで指定されている通信のパケットを作ると、access denied errorを示す通信が帰ってきた
3. フラグで指定されている通信を通すには、認証を通す必要がある
4. seedとanswerが対応している過去の通信ログから、暗号化関数を導き出し(xor)、seed要求リクエストを送ってseed valueを手にいれ、アクセス解放リクエストとして計算したanswerをパケットとして送信
5. 管理者権限を取得(この時点で自動車のハッキングとしては完了)
6. フラグで指定されている通信のリスポンスが通信ストリームとして帰ってきた
7. 通信ストリームをpythonスクリプトで解析すると、1つのバイナリデータが出てきた
8. バイナリデータはPNG画像であることが判明し、ファイルを開くとQRコードが出てきた
9. QRコードを読み込むと、新たなフラグが出てきた
10. フラグで指定されているCAN上でのファイルアップロード・ファイルダウンロードをするためのパケットを作って送信すると、何かのバイナリデータを含む通信ストリームがかえってきた
11. pythonスクリプトでパケットを解析し、1つのバイナリデータにしたところ、ファイルフォーマットがPDFと判明
12. PDFを開いて自動車ハッキングのコンテストクリア!!!

2016年10月5日水曜日

KITハッカソンはすごい!!② ~白山~




今回のハッカソンのテーマは「子供たちが豊かに成長する次世代の里山都市を創造せよ!」です。
アイデアソンには僕は参加しなかったのですが、白山市の社会問題を探すためにハッカソンの前にアイデアソンが開かれ、 そこでチームやプロダクトのアイデアが決まったそうです。
この上の写真のおしゃれないかにもイノベーションが生まれそうな場所がアントレプレナーズラボで、ここでアイデアが考えられました。
ハッカソン中に配られた白山の社会問題の資料には、人の手で山里が管理されなくなったことによって荒廃してきたことや、害獣が畑を荒らすなど、色々問題が書いてありました。
皆が未来の里山計画に想像を膨らませてわくわくしていました。

 
ですが、このアイデアソンでやったテーマとハッカソンの審査は全く別の観点で行われるのでは。。。?ということが、ハッカソン2日目に頭によぎりました。
ハッカソンの審査員が白山の近隣の一般住民だとわかったからです。
僕はそのことを聞いた瞬間に、「子供へのプログラミング教育」すら言っても全く理解されないのでは?ということに気づきました。
また、僕が白山の近隣の一般住民の立場になって考えたとき、白山の社会問題という意識の高い話、果たしてほのぼのと生活している個人にとって興味があるのかな、と気づきました。
「イノベーション」 「プログラミング」という言葉自体、白山で暮らしている人たちには興味がないと気づきました。

ここで、「小学生からのプログラミング教育」から、「ドローンを魔法で操る」、という楽しい表現に変えました!最新テクノロジー的な言葉は絶対ウケないと判断して全部変えました。


 プログラミング -> 魔法
 Scratchプログラミング -> 日本語のブロックを組み合わせるだけで魔法が使えるよ!
 Leap Motion -> 魔法
※ドローンは実際に飛ばし、魔法で操れるすごいラジコンとして認識されるようにしました

デモは、「これから魔法のデモをします」と言って学芸会ノリにしました。


一般人の投票で順位が決定しました。

そのため、優勝候補だと思われていたチームが撃沈!
建築のチームで、建築なら見てわかるし、プレゼンもすごく上手でした。
ですが、最先端テクノロジーとは無縁と思われる白山の一般近隣住民には

「ハッカソン自体をイノベーションしてクリエイトするスペースを作る」
「○○デザイン」

という言葉が新しすぎたようで、プレゼン中に終始難しそうな顔をしていたように見受けられました。
「ハッカソン」とは何なのかということもたぶんご存じない方々だったと思います。
ハッカソンはハックソン(白山)をもじったイベントのように思われていたかもしれません。

ユーモアのあるプレゼンでいつもすごくウケる、KITハッカソン常連のIT企業チームは、今回のプレゼンで阿部マリオの変装をした劇+PVで今回もすごく力が入っていて面白かったのですが、
白山の近隣住民は時事にあまり興味がないようで、「会場が静かですねえ」というギャグをプレゼンテーターが寂しげに飛ばしていました。

VRのチームは、
VRゴーグルをかけてリアクションをとっている人を、
「変なゴーグルかけて挙動不審な動きしている面白い人」という認識をして別の意味でウケていたように思います。

1位 ~ 3位のチームは、すべて宝探しなど位置情報のゲームを作ったチームでした。
特に1位は、白山の山里に実際に宝を置いたチームで、山での宝探しなどが白山の近隣住民の幼少期に遊んで楽しかったことを思い出させたようです。1位チームがハッカソン中、実際に山登りをしていてその写真をプレゼンに使ったことも、近隣住民にとって印象がよかったように思います。

2~3位(同率)チームは、PokemonGOのパクリ?アプリの白山GO!というアプリを作っていたチームが印象に残っていたのですが、白山GO!に登場させる地元の観光名所ゆるキャラのデザインが大うけしていました。アプリよりゆるキャラのデザインの方がウケていました。

他の同率2~3位チームの、IoT化した秘密基地のCapture the flag!風陣取りゲームは完全にやっていることが理解されていて興味をすごく持たれていたように思います。IoTで秘密基地に温度センサ、人検知センサなどをつけてスマホなどでリアルタイムモニタリングしてCapture the flag!風陣取りゲームをするのですが、リアルタイムモニタリングの画面がセンサの値のグラフにもかかわらず、白山の近隣住民に完全に理解されており、これで自分の陣地が相手に侵入されているかどうか判断するのか、面白そうという反応をしていた気がします。IoTは地域に関わらず通じるのかな、と思いました。

自分たちのチームは4位で、18票、2~3位(同率)と2票差でした。最先端テクノロジーでしたが、「魔法」という表現にしたので、わかりやすく、結構ウケたのだと思います。

次世代の都市とか田舎にシリコンバレーを作ろう!とか言っても平和に暮らしている年配住民はそんなもの求めていないし、未来より過去に興味があり、山登りとかの身近なことに興味があるということを痛感したハッカソンでした。
地域の人たちのおいしい料理や自然に触れることができた素晴らしいハッカソンでもありました!
楽しかったです!

2016年10月4日火曜日

KITハッカソンはすごい!!① ~モノづくりができるハッカソン~

KITハッカソンに参加してきました!!!
  
以前KITハッカソン参加に参加したときは、ウエアラブル傘Kasadasというプロダクトを作りました。
ウエアラブル傘を作るために電子部品が必要だと運営の中沢先生に相談したところ、部品を提供
してくれたおかげで作ることが出来ました!!!

今回はさらにパワーアップ!!
スポンサーのマルツー電波がフリーパーツショップを開いて頂けました!!!
Raspberry Pi、Arduino、TWE-Liteから各種センサーなどパーツが勢ぞろい!!
モノづくりをしたい人には夢のようなハッカソンです!! 

このハッカソンを開催してくれた中沢先生、福田さん、白山の関係者の方々、誘ってくれたチームメンバー、その他運営の皆様、大変ありがとうございました!!

②ではネタ話をしようと思います!次回の記事お楽しみに!

面倒見のいいハッカソン

このハッカソンは3日間あります。
1日目は金沢工業大学のアントレプレナーズラボという、おしゃれな場所で行われます。
この日は協賛企業のプロダクトのハンズオンがあるのが特徴です。
技術力が心配な人でも、成長でき、プロダクトの開発も1日目でできるようになります!

2,3日目から、本格的にプロダクト開発が始まります。
2日目からは、白山という自然がいっぱいの場所でハッカソン!!

ハッカソンというと、大体スマホアプリケーション開発や、WEBサービス製作、良くてもはんだごてをしてIoT等デバイス開発ですが、、、、、、、

白山なので、自分のチームはドローンを飛ばして空撮でプロダクトのPVを作ることができたり、他のチームは位置情報アプリケーションを作って実際にデモすることができたり、外で木材の加工までできました!

もちろん送迎バス付きです。金沢駅と金沢工業大学でバスのピックアップがあるので、県外の方でも参加できそうです!

食べ物

このハッカソンは、1000円先に支払うのですが、2日目からの白山会場での食べ物が豪華!!!(1日目は持参)
まず、ハッカソン中には3食支給され、手作りカレーが出ます!!とってもおいしく、ついお代わりをしてしまいました!!
もちろんお菓子+ドリンク付き!!

懇親会は、なんとジビエ肉が振る舞われた、炭火串焼、ジビエ肉汁、ジビエ肉オムレツ?が堪能できました!おいしかったです!
お酒も飲み放題だったそうです。僕はノンアルコールビールを飲みました。


チーム

チームメンバーは、KITの大学生のドローンプロジェクトの人2名とIT企業のエンジニア2名と僕です。KITドローンプロジェクトのリーダーがメンバーとして僕を誘ってくれました!
全員ドローン大好きメンバーだったので、すぐに打ち解けることができました!!!
メンバーと話していると、「もしかして@ken_demuさんですか?」と聞かれました。
twitterアカウントが認識されていたそうです。KITドローンプロジェクトで、自分がQiitaに投稿したドローンの記事が話題になっていたそうです。
http://qiita.com/kendemu/items/600210a2dd1954c9f2b8


審査員とプレゼンの方法決め

作るプロダクトは、ドローンをScratchでプログラミングできるアプリ、がすぐに決定しました。
ですが、今回気を付けなければいけない点があります。。。。。。

審査員が白山の近隣の一般住民30名(大人)です。
このことは、2日目に判明しました。そして、ハッカソンの開催場所は三方を緑山で囲まれています。主催者の中沢先生は、「審査員は技術者ではないです。白山の一般住民です。」 と、アドバイスがありました。


 

※1日目は、アントレプレナーズラボというおしゃれで先端的な場所でハッカソンが開催されていました








役割担当はこんな感じです。
1. 空撮PV製作 + デザイン素材製作 + プレゼン製作 : KITドローンプロジェクトのメンバー
2. アプリケーション製作 : 自分
3. UI部分製作 : 企業のエンジニア
4. Scratchのサンプルコード製作 + かっこいいデモ製作 : KITドローンプロジェクトのリーダー



ドローンを小学生から簡単にプログラミングできるためのアプリ

今回自分たちのチームが作ったのは、
ドローンを小学生から簡単にプログラミングできるためのアプリです!!
(Scratchというブロックプログラミング言語を用いるため)
 

 


アプリ最新版のデザイン(これに離着陸ボタン + 真ん中にドローンのカメラ映像が映る)
開発途中のアプリ画面


Electronというクロスプラットフォームアプリケーション開発プラットフォームを使うことによって、アプリケーションのUIとアプリケーションの機能の部分の並列開発を行うことができたため、短時間で(3日間)完成度の比較的高いアプリケーションを作ることができました。

デモ
Leap Motion

Leap Motionというデバイスを使うことによって、Scratchでプログラミングして、手の動きでドローンを操るという魔法のデモを行いました。

Leap Motionとは何か
Leap Motionは赤外線カメラを使うことにより、手専用でリアルタイムで使えるスキャナーとして働きます。
 
なんで赤外線だと手がスキャンできるかというと、赤外線距離センサというものがあり、これで赤外線によって物体との距離が計測できます。人が近づいたら○○する、という機能を持ったデバイスは結構このセンサが使われています。赤外線センサは簡単に市販で入手できるので、「人が近づいたら○○する」という機能を持ったデバイスはArduinoなど各種マイコン・マイコンボード + 赤外線センサなどを組み合わせれば比較的簡単に作ることができます。
(物理的な仕組みは以下を参照:https://ja.wikipedia.org/wiki/%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%82%BB%E3%83%B3%E3%82%B5)

そして、赤外線センサを大量につなげば、赤外線カメラの出来上がりです。これによって、赤外線で取得できる距離情報から3次元的にものをスキャンすることができます。

ですが、ものを3次元的にスキャンできるからと言って、手をコンピュータが認識できるわけではありません。手を認識するには、機械学習を使います。
これは、大量の3Dデータを集め、その中から手の3Dデータを事前に大量に集め、手であるかどうか判定する関数や関節位置を予測する関数を大量のデータから生み出すことによって(正確には近似、詳しくは最小二乗法と最急降下法を参照) 、手を認識することが可能になります。
大量の手の3Dデータを集めて、関数を生みだせば(予測)、数学的に手が定義できるため、数学を理解できるコンピュータが3Dデータから手を認識することが可能になるというわけです。
機械学習はプログラムか回路で実現します。
 
開発工程
Electronを使っているため、コア部分にはNode.jsを用いるのでnpmモジュールによる拡張性とScratchとアプリケーションを連携させるためのHTTP API群の高速開発を実現し、UI部分にはHTML5を用いることでWEBデザインと同じ要領でデザインを詰めることができました。
Githubとgit flowブランチモデルを採用したため、機能拡張と過去のバージョンのアプリケーションの保持も簡単にできました!
連絡などは口頭 + slackで行いました。
slackはエンジニア向けチャットツールで、コードをシンタックスハイライト付きで貼り付けたり、githubのレポジトリの更新通知などを行うことができます。

2016年8月17日水曜日

IPAセキュリティキャンプ2016全国大会4章 〜〜〜交流・文化〜〜〜

セキュリティキャンプは泊まる部屋は個室、3食食事付きです!!
部屋は個室でも、食事で参加者、チューター、講師が交流できるため、これがセキュリティキャンプの楽しみの一つであります!!
食事は牛タン焼、マグロのお刺身、鍋、牛肉たっぷりハヤシライスなど、結構良いものが無料で食べれます!!!



食事等でこのような方々と楽しくお話しました!
固形醤油コンテンツ提供&攻殻機動隊 The Realize Projectコンテストでお世話になったチューターのらまっこさん、
プロトコルスタック実装とlibpgenのチューターのすらんくさん、 
一緒にドローンのアプリを開発したことがある、今年未踏の+taiyo slimeさん、
石川勢参加者のはっぴーのーとさん、
未踏に採択されているkvalgrindのチューターのるくすさん、
攻殻機動隊の素子のようなペンテスターを目指しているYuka Takahashiさん、
チームNOPの@hikaliumさんやちひろさん、
高校生ながらfirefoxにバグ報告していたりOSSの監訳をしている参加者、
@taniho, @miya_aitさん等のロボットの開発をしている参加者、
やっと会えた友利奈緒さん達2人、
CTF最多得点王のみどりんごさん、
同じKotlin勢のむしぱんさん、
新機能ゼミのあやもりさんと@sksat_T_3_yearsさん、
西永先生、木藤先生と坂井先生、
にしむねあ先生、廣田先生とはるぷ先生、
その他にも色々な方とテクノロジーやエンジニアリングの話をして盛り上がりました!!!!!!!
これからも皆様、よろしくお願いします!!!

セキュキャンは最高です!!!
他では経験できない最先端テクノロジーの学習と実装と問題解決、
技術力の高いエンジニアとの交流、
今年は前泊のチューターはシン・ゴジラ、
そしてNEW GAME!!!などの文化体験(笑)をしました!!!










たった5日間で、数年分の貴重な濃い体験ができるのがセキュリティキャンプです!!!
興味を持った方はセキュリティキャンプに来年、もしくはミニキャンプに参加することをおすすめします!!!! 




IPAセキュリティキャンプ2016全国大会3章 ~~~学習内容~~~

チューターも一緒に学ぶことができるのがセキュリティキャンプです!!!
セキュリティキャンプの講義は毎年内容が新しくなります!!!最先端のセキュリティを学べる場所です!!

〜〜〜学習内容〜〜〜
1. 廣田先生のHTTPプロキシ入門


この講義ではBurp SuiteというHTTPプロキシツールを使って、
さらにJavaプラグイン開発によって機能を拡張することによって、
HTTPの上の独自プロトコルを解析し、パケット偽装をしてモバイルアプリケーションのペネトレーションテストをするというハンズオンでした。

一番楽しかったのがJavaプラグイン開発で、
「スクリプトキディではなく、自分のコードでペネトレーションテスト」というロマンを感じました!!!(^O^)
Java自体はそこまで好きではないですが(笑)(JVM言語ならKotlin推し)、
Javaだと「コード書いた!!!」感があるので「自分のコードでペネトレーションテストしている!!!」という達成感が味わえます!!!!

2. はるぷ先生のスマホゲームセキュリティ
この講義ではスマホゲームの多角的なセキュリティ問題を分析しつつ、
Burp Suiteによるパケット解析&パケット偽装やHTTPリクエストなどでモバイルゲームのペネトレーションテストをするというハンズオンでした。
バリデーションチェックの重要性を手を動かしながら、ブラウザゲームなどのゲームバランスを崩壊させて、身を持って体験しました。
一番楽しかったのが講義でちょろっと触れた、ゲームのメモリの挙動を見て値を改ざんしたり、
Unity Androidアプリケーションのapkを展開し、dll(MSIL)をバイナリ解析してTelerik JustDecompileでリバースエンジニアリングを行うことで秘密鍵を手に入れたり、
IDA Proでcocos-2dxで生成されたARMの.soを解析することでした。
Unityでゲーム開発をしたことがあるので、Unityが簡単にリバースエンジニアリングできるということを手を動かして知ったことが新鮮でした!
また、Unityの最新ベータ機能であるILCPPという最新機能についても講義で触れていました。
ILCPPはMSILコードをC++に変換し、 C++ -> バイナリに変換するコンパイラなのですが、
これを使用することによってMSILバイナリ -> x86/armバイナリになるので、バイナリ解析の敷居が上がり難読化と同じ効果が見込めるということをはるぷ先生が話していました。
自分はAndroid用ARMバイナリを解析しようとして挫折したことがあったのでこれはすごく共感しました。
~~~Android用ARMバイナリ(共有ライブラリ)を静的解析しようして挫折した話~~~
自分は以前Apache 2.0ライセンスのGoogle Cardboard Android SDK(Google社製)を使うときにAPIを拡張したかったのですが、JavaDocと.jarファイルしか提供されてないことがありました。
Google CardboardはAndroidをVRデバイスにするためのプラットフォームで、車輪の再発明をするとパフォーマンスが落ちそうだったので(VRはUX上高フレームレートの確保が必須)、
APIの拡張をするのが一番効率的だと思いました。
.jarファイルを展開してJava bytecodeをdecompileすると、所々の関数にnativeという修飾子を発見しました。
これが意味することは、肝心な実装のロジックはC++でJNIで書かれていているよ、ということです。
そこで参照している.soファイルをobjdumpでarmモードでディスアセンブルしたのですが、JNIのコルーチンをアセンブラレベルで読むのは大変で、またところどころにNEON命令やFPU命令があり、10000行以上あり解析が大変すぎて途中で読むのをやめました。
フリーのobjdumpで静的解析は大変で、IDA Proを買うお金はない。。。。。。

3. 河合先生&坂井先生の「システムに新機能を追加してみよう」
この集中講義は河合先生の実装した、khpcという永続変数ライブラリを使って「何かソフトウェアを開発しよう」、というものです。
永続変数とは、データが永続化された変数で、
khpcはファイルI/O(libcの関数を使用)を抽象化したAPIをユーザーに提供しています。
河合先生はGUI開発のためにblikeという自作したライブラリもこの講義で提供してくれたのですが、このblikeライブラリは2Dグラフィックス専用です。
自分はkhpcの機能を3D空間、そしてVR空間に持って行きたかったので、Unity用のkhpcプラグインを開発しました。
行ったことは、
1. khpcをC -> C++にする
2. khpcにDLLImportの構文を追加する
3. g++でコンパイル & dll生成
4. C#でkhpcのdllを呼び出すラッパー関数を作る
 です。
4で, C#上でポインタ操作を行う必要がありました。
残念ながら、デモ時にVRゲームが2秒でクラッシュしてしまいました。
後ほど原因を解析したところ、C#のvoid*型はC/C++のvoid型ではなく、
C++/CLRのSystem.Void型であることが判明し、そこの型の異なりによって実行時にエラーを起こしてしまったのだと思います。
つまりkhpcの関数の返り値をvoid*型ではなくSystem.Void*型にしなければなりませんでした。
C#/.NETの良い勉強になりました。

4. 竹岡先生の「ハードウエアの基礎」
この講義では、ロボットを作る上で重要なデジタル回路のハンズオンでした。
自分が、中学生のときロボカップジュニアのロボットを一日中作っていたときの懐かしい雰囲気の、いい雰囲気の講義でした。 (^^)

5. 長谷川先生&にしむねあ先生の「次世代プラットフォームのセキュリティ」

この講義ではelectronやWebViewなどのハイブリッドアプリケーションをペネトレーションテストするという講義でした。 Webには色々な脆弱性があるのだな、と知りました。
また、あの有名なWEBサイトを踏み台にexploitしたり、JSの匿名関数/関数オブジェクトの機能を使って任意のJSの関数を実行させるexploit技法が新鮮でした。


6. 三村先生の「.NETプログラムの解析」
人生初のランサムウェア解析を体験しました!!!

この講義では、最近徐々に増加傾向であるMSILマルウエアを解析する技法を学習する講義でした。
 .NET仮想マシンの挙動、仕組みを学習しました。.NET仮想マシンは1つのスタックしか存在しないスタックマシンなので、「x86/ARMより簡単!」と思いました。
MSILバイナリはC#コードにデコンパイルできるので、すいすいと読めます。
MSDNでオペコードのリストも公開されており、 スタックが一つだけなのでMSILコード生でも比較的簡単に読めます。

また、最近オープンソース化された.NET Coreのソースを読む(ilasmのC++ memory allocationコード)という熱い体験をしました!!!
 
スマホゲームセキュリティではるぷ先生がちょろっと触れていた、Packerという難読化技法がされたMSILバイナリに対して静的解析を行いました!

Packerというアプリケーションバイナリ難読化方法があるよ(はるぷ先生) ->
Packerはこんな仕組みだよ/コードはこれ(LoadAssembly)(三村先生) ->
Packerで難読化されたバイナリ読むよ(三村先生)

このような、別トラック間でフルスタックにセキュリティ問題の解決が学べる体験ができて感動しました!!!

最後の演習は、MSILランサムウェアを解析して、 それを元に暗号化されたファイルを復号するソフトウェアをつくろう、というハンズオンでした。 SmartAssemblyという有償のobfuscatorで難読化されているため、静的解析が非常に大変でした。。。。。。(^_^;)

また、IDA Proを買うとできるロマン体験談と、IDA Proやセキュリティソフトウェアの脆弱性を突くマルウエアなどのホットな話を聞きました!!

~~~今後の課題~~
1.今までTCP/UDP上に実装された独自プロトコルは実装/移植/解析したことがあったのですが、HTTPの仕様があまりわからずHTTP上で実装された独自プロトコルの通信の仕組みがあまりわかりませんでした!^^; 
HTTPに関しては、今まではXML-RPCの解析、RESTとOAuth2 APIをただJSでただ叩くだけでしたが、これを期にHTTPプロトコルを理解してレイヤを上げていこう!!!
2. 今まではC#をコーディングするだけでしたが、今回C#/.NETの詳しい仕組みが少しだけわかったので、この調子でCoreCLRの実装などを詳しく読んでいったり、Windows APIの理解をして行こう!!!
3. 今まではJavaScriptのコーディングだけでしたが, V8 EngineやSpiderMonkeyなどのJavaScript EngineのソースやFirefoxのソースを読み、ブラウザやJavaScriptが実行される仕組みを理解していこう!!!
4. 暗号の知識が皆無と感じたので、暗号を学習して行こう!!!
5. 難読化のロジックを理解し、難読化されたバイナリへの対処技術を身につけよう!!!難読化解除ツールやobfuscatorなどが自作できるようになろう!!!

~~~思ったこと~~~
・時代はC#/.NET!!!  

・中間言語楽しい!!!

2016年8月16日火曜日

IPAセキュリティキャンプ2016全国大会2章 〜〜〜他の活動〜〜〜

講義サポート以外の他の活動も行いました!

1. チューター成果発表
2. グループワークの裏番組でドローンを飛ばす



チューター発表についてはROSのセキュア実装を作って発表する予定でしたが、留学奨学金詐欺被害にあったためその対応で研究開発の時間が取れなくなり、ロボカップ世界大会の発表にしました。 
「面白かった」という声を某参加企業の社長からもいただき、大変うれしかったです!!!

グループワークの裏番組ではドローンの事情やドローンのセキュリティについて話しました。ドローンのデモやwebVRのデモを行いました。楽しんでもらえて何よりです!!ドローンをわざわざ持ってきた甲斐がありました!!(^^) (^^) (^^)

webVRのデモ


ですが、スーツケースは大破してしまい、0日目の準備日にして手遅れた人になってしまいましたwww

自分は名刺を作るのを現在やめています。
代わりにHappy Mini & DSpaceステッカーを作って配りました!!!
Happy MiniステッカーをPCに貼ってくれた方、ありがとうございます!!!!

 

IPAセキュリティキャンプ2016全国大会1章 〜〜〜サポート内容〜〜〜

~~~サポート内容~~~
前日は,
1. nginx for Windows設定
2. electronの環境設定(npm -g)
3. Raspberry Piの環境設定(NOOBS)
 を行っていました。

当日は,
1. HTML構文のチェック
2. Javaコードのチェック
3. Javaライブラリのインポートの仕方
4. AndroidのAPI関数の説明
5. C# .NET 4.5系関数の簡単な説明
6. Windowsのシェル環境のコマンドチェック
などを行いました!

新機能ゼミでは、個人的な趣味でWindowsのシェルにPowerShellを勧めてしまい,
リダイレクト時に文字コードがUniCode-BOMになってgccでコンパイルが通らなくなってしまった時のことはすみません!! m(_ _)m
自分もg++のリンカオプション指定時にコンマがPowerShellでパースされて動かなくなっていたときもありましたので今回のキャンプではPowerShellは悪になってしまいました笑
 ですが、オブジェクト指向型の手軽なシェルはPowerShell一強だと僕は思っています!!!
 NuGetとchocolateyパッケージマネージャーもあるよ!!

IPAセキュリティキャンプ2016全国大会0章 〜〜〜チューターとして申し込んでみた〜〜〜

久しぶりです! これからブログを定期的に更新しようと思います。

IPAセキュリティキャンプ2016全国大会に今回はチューターとして参加してきました!!

セキュリティキャンプは、学校の「お勉強」とは全く違います!!!コミケ, Maker Faire,や野外キャンプと同じような、楽しいイメージです!!全国の尖った若者が趣味で集まり、濃厚で楽しい学びの5日間が毎夏繰り広げられています!



セキュリティキャンプの楽しい体験を、同年代の仲間たちに伝えたい!!!!
そして、自分もまたセキュリティキャンプを体験したい!!!!  

しかし、セキュリティキャンプ全国大会は参加者としては一回しか出場できません。
そのため、今年はチューターとして自分がセキュリティキャンプをサポートできるか考えてみました。

1.小中高生から大学生・社会人にICT/ロボティクス/プログラミングを教えてきた経験がある。
・ロボカップなどでチームメンバーの大学生にROS, 機械学習, 制御, イベント駆動, OOP, C++/Pythonを教えている
・中学2年生のときからD.K.T. Robot Schoolで地域の小中高生にロボティクス/プログラミングを教えてきた
・高校のロボット部で部員にロボティクス/プログラミング/CAD設計を教えた
・シリコンバレーでエンジニアをしていたとき、一緒にスマブラもプレイしつつ、文系インターン生を2週間でAndroid Java開発ができるようにトレーニングした。

2. 自分の開発経験
・WEBフロントエンドとNode.js
・AndroidでOpenGL ESを使ったARアプリケーション
・ロボット/ドローンのlinuxアプリケーション
・機械学習/人工知能/画像処理/自然言語処理アプリケーション
・投資傾向可視化ソフトウェア
・WindowsでC#/Unityを用いたVRアプリケーション
・arduinoを用いた小型サッカーロボット開発
・ロボット/ドローンなどの独自プロトコル実装/解析/移植

セキュリティにはあまり経験がありませんが、自分はこの2つの経験で、セキュリティキャンプをサポートできるのではと思い、チューター申し込みました。そして嬉しいことに採用されました !!! 
 
 

2016年2月8日月曜日

Developing SkyWarp at Sillicon Valley



I have developed a drone virtual reality mobile application, SkyWarp.
www.sky-warp.com
We are doing a drone virtual reality travel currently at Pier 39, San Francisco. Come to Pier 39 to enjoy sky travel, using our virtual reality and drone technology! We are opening a drone travel street stall in Pier 39! $10 makes you travel the sky up to 500m, and the range of 2km travel.

We have also launched a beta version of SkyWarp application! If you have a DJI Drone and a android device, you can use our app installing SkyWarp app.


I had been in Sillicon Valley to develop robots in a tele-presense virtual reality robot company, AdaWarp.And as a side-project, I developed SkyWarp. SkyWarp project is owned by me and we have partnership with DJI, Parrot, onflygo, and AdaWarp.
※From February we are not doing partnership with AdaWarp.
I am currently testing the monetizing model of SkyWarp, a off-line drone virtual reality tour.



SkyWarp was exhibited in CES 2016.
https://medium.com/@Adawarp/we-exhibited-at-ces-704ea135a023#.mcybjgk99
https://www.tumblr.com/blog/adawarp
http://adawarp.tumblr.com/


More features coming soon in SkyWarp!