memoメモ

最近はGo言語関連で。φ(..)メモメモ

「ゼロから作るDeep Learning」読んだ

冬休みを利用して読み終わりました。

基本的な関数の話から始まり、ニューラルネットワーク誤差逆伝播法、過学習、パラメータの与え方、CNN、などなど、学習、ディープラーニングを使うにあたっての基本的なポイントを学ぶことができました。 数学的に難しいところはなく、とても読みやすかったです。

個人的に疑問だった、画像などの次元の多いデータに対してどうアプローチしているのがかわかってスッキリしました。

コードを少し書いて動かしながらやりましたが、コアな部分は著者の方のコードを動かしました。非力なPC(GPU載ってないよん)しか持ち合わせてないので学習をゼロからやるのはできませんでしたー。 TensorFlowとかフレームワークをつかって挑戦してみよう。

雑多なメモをgithubへアップしました。pythonだったのでjupiterを使ってみましたがグラフもペタペタ貼れて便利。今後も遊んでみる。

https://github.com/atotto/deep-learning-from-scratch/tree/learn/mynote

おしまい

DigisparkとLM61で温度を測る

最近Digisparkで遊ぶのにはまってます。 DigiUSBの使い方の導入として、温度をLM61で計測し、データを読んでみたのでメモ。

用意するもの

Digisparkに書き込む

ArduinoでDigisparkの開発環境をセットアップする方法はこちら

これ↓をDigisparkに書き込む:

Digispark LM61CIZ Temperature Sensor

  • P2を使ってanalogRead
  • DigiUSBを利用してjsonデータを出力

f:id:atotto:20161219121924j:plain

動作確認

作ったDigisparkをUSBで指し、データを読めるか確認してみます。 DigiUSBはrubyのライブラリが配布されていたりするようで、取扱が簡単な様子。

今回はRaspberry-Piでpythonを使って読み込んでみました。

https://github.com/digistump/DigisparkExamplePrograms にサンプルがあるのでそれを使ってみます。

$ sudo pip install pyusb
$ git clone https://github.com/digistump/DigisparkExamplePrograms.git --depth 1
$ cd DigisparkExamplePrograms/Python/DigiUSB/source
$ sudo python receive.py | jq .
{
  "temp": 23.98
}

うごいたー

Raspberry Piはアナログデータを直接読めないので200円で機能拡張できると思うと安いですね!

Tips

もしroot権限なしで使えるようにする場合はudevルールを追加しておきます。

/etc/udev/rules.d/49-micronucleus.rules を書いているのであればそこに追記。

SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
$ sudo udevadm control --reload-rules

で、次回USBを指したときからroot権限は不要。

参考

Raspberry Piに挿せるモータードライバを試す

raspberry pi に直接挿せるデュアルモータードライバを試したのでメモ。

Pololu DRV8835 Dual Motor Driver Kit for Raspberry Pi

f:id:atotto:20161204180602j:plain image: https://www.pololu.com/product/2753

ザクッと挿せてDCモータを2つ扱えるので楽です。

用意するもの

ドライバのセットアップ

https://github.com/pololu/drv8835-motor-driver-rpi を見ながら:

sudo apt-get update
sudo apt-get install -y python-dev python-pip
sudo pip install wiringpi
git clone https://github.com/pololu/drv8835-motor-driver-rpi.git --depth 1
pushd drv8835-motor-driver-rpi
sudo python setup.py install
popd

で完了。

動作確認

sudo python example.py

でモータの動作確認をしておきましょう。

HTML5 CONFERENCE 2016

リモートで参加しました→ https://www.youtube.com/watch?v=0L0zsaOUKMs

f:id:atotto:20160903111636p:plain

ライブ配信ありがとうございます。

基調講演のメモを雑記↓

Webという分散OS

W3C/KEIO Site Manager 中村 修さん

紙などの既存の表現に縛られている。 新しいデータの表現をWebでユーザに提供できるようになる。

Webはバズワード(IoT、ビッグデータ、etc)の基盤。

Webは分散システム。分散OS。 Webのエコシステムは分散OSを開発しているということ。 IoTでセンサも入ってくる

すべてのUIがhtml、Webの表現になる。

WoT

  • バイスを抽象化してWebから使えるようにする、とか

地球を包み込むOS

みんなが使えるようにする セキュリティも大事

HTML5 Couference 2016

インクリメンツ 及川さん

  • Googlechromeマネージャ
  • MSで実はie7もかかわったことが

html5とはwebそのもの。 アプリ、メディア、基盤としてのWebがある。

アプリとしてのWeb

  • Webで動くWebAssembly
  • C、C++でかけるようになった時、Webってなんなんだろう。

メディアとしてのWeb

  • ニュースキュレーションの台頭→メディアとしてのWebとは?
  • バイルWebのUXは最悪。広告やクリックの嵐。←ニュースキュレーションに負ける原因

基盤、プラットフォームとしてのWeb

  • 安心、安全につかえる技術
  • http2
  • https

第8回ROS勉強会へ行ってきました

第8回ROS勉強会@DMM.make AKIBA https://ros-users.doorkeeper.jp/events/46407

ROS勉強会へ行ってきました。初参加です。 NAISTに居た学生の頃、移動ロボットでSLAMをやってたこともあり、今現在のロボットのソフトウェア開発に興味があったのでROSを軽く触っているところです。

以下、ちょっとメモ。

発表

Raspberry-poでMouse

nakagawa-san

raspberry-piが使える:

  • 教材として圧倒的(数、ノウハウ、ソフトウェア)
  • 下回り(ドライバ)からネットワークまわりまで手軽

https://github.com/ryuichiueda/raspimouse_ros

comment:

  • 研究、学習でつかえそうなロボット。raspberry-piだと教育や開発でノウハウがたまっているので扱いやすそう。

ROS

@OTL san

  • 通信、ツール、ROSエコシステム
  • pub/sub通信
  • roscore/rosmasterでNameServerの役割を果たしている(IPアドレス知らなくてもOK)

ROSでやりたいことって?

  • インストール大変
  • catkinなぞ
  • メッセージ定義めんどい

→ つくった: https://github.com/OTL/jps

comment:

  • ROSじゃなくてもやれることがたくさんある。適材適所、なのかな。

ROS multimaster

@longjie0723 san

  • ROSは基本single master
  • 複数のmasterを使いたい
  • 独立したシステム、ロボットとの連携
  • multimaster_fkie
  • https://github.com/longjie/learn_ros_multimaster
  • dockerつかって独立した環境を作って複数の独立したmasterを簡単に試せる
  • ROS2だとmultiで使える?

comment:

  • docker便利ですよね!
  • ROS2ってなんだろう。詳細希望..

ROS

@k_yone san

  • image_pipeline
  • .ros/log/latest に最新ログがある

ROSのメリット

  • 変更料が少ない
  • .rosinstall のコピーで環境コピーができる

デメリット

  • セキュリティ

機材の話とか。ノウハウたくさん

comment:

  • ROSのセキュリティは気になっていた所。みんなどうしてる(どうする)んだろう?
  • 移動ロボットやってた頃は、Thinkpadのトラベルキーボードをよく使ってました

ROS Node

hayashi-san

comment:

サーボ+距離センサでSLAM

@n_sugiura san / takahashi-san

  • LRF高い → つくろう(サーボ+距離センサ)
  • 距離センサでSLAM
  • 近々発売

comment:

  • HokuyoのURGをNAISTで使っていて、高いのはよく知ってます・・
  • 安価なLRFを自作してそこそこ自己位置推定できているのはすごい

Turtlereal2

saito san

趣味ロボット

SLAM

comment:

  • ROSで自分のロボットのモデルを作ってSLAMをシミュレータ上で動かしていた
  • 結構時間が掛かりそう

ROSCRAFT

@akio san

comment:

  • NAISTで作ったA棟5Fの3次元地図をminecraft上で表現できたら面白そうだな、とか思った

LT

豆蔵

ookuni-san

comment:

  • 意外なところもロボット関連をやっていた
  • ちゃんとシミュレータを作って開発に役立てているのはすごい(テスト駆動になるかな?)

ros_cython

@longjie0723 san

強化学習

@mabonki0725 san

  • Sarsa法
  • 馬力不足の車の登り学習(mountain car)
  • 壁の障害を避ける学習
  • 90lineくらいのプログラム

comment:

  • もしかしたら昔やった、かもしれないけど、Sarsaを軽く実装してみても面白いかも?

ROS TensorFlow

comment:

  • TensorFlow自体試してないから試したい

catkin tool

@__akio__ san

  • 便利

nodelet

@marona77 san

  • node(プロセス)をたくさん立ち上げているとリソース食う
  • → nodelet(スレッド)
  • データコピーが発生しない(画像などで効いてくる)
  • pythonだとnodeletのしくみがない

comment:

  • nodeとnodeletの違いがわかった

最後に

ありがとうございました!

Tex Yodaをメンテナンス

年末の掃除もかねてメンテナンス。

キーの効きが悪いところがあったので調査。 Tex Yodaのmassdropの掲示板を見てみると、ハンダクラックしている疑惑。

f:id:atotto:20151213091456p:plain:w480

https://www.massdrop.com/buy/tex-yoda/talk/169782

f:id:atotto:20151211223923j:plain:w480

ダイオードをハンダしなおしたらちゃんとキーの効きが元通りになりました

関連記事: atotto.hatenadiary.jp

関連情報:

ビルドしたバイナリからビルドに利用したGoのバージョン情報を読む

なにができる?

  • goでビルド済みのバイナリからgoのバージョン情報が取得できます。

なにがうれしいの?

  • 配布した(された)バイナリはどのgoのバージョンでビルドされたのかわかります。ので、goの本体にセキュリティ修正などが行われた際、もし古いバージョンだと困るのであれば調べることができます。

やってみよう

適当な実行ファイルをビルドする。とりあえずhelloworldレベルで。

$ cd hello
$ cat main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, 世界")
}
$ go build

go tool nmコマンドで、変数buildVersionのアドレスが特定できる(ちなみに、buildVersion$GOROOT/src/runtime/zversion.goにある変数):

$ go tool nm hello | grep buildVersion
  258ec0 D runtime.buildVersion

これをgdbで見てみると:

$ gdb hello
GNU gdb (GDB) 7.9.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin13.4.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from hello...done.
Loading Go Runtime support.
(gdb) x/s *0x258ec0
0x18f110 <go.string.*+8176>:    "go1.5.1"
(gdb) 

で読めます。なお、以前go getしたコンパイル済みのバイナリからもGoのバージョン情報を引き出すことができます。

簡単にバージョンを調べたい

gdbで見るのは面倒なので、objdumpでバージョン情報を取得できるようにしてみました(Linux):

使い方:

$ ./goversion.bash hello
go1.5.1

さらに簡単に・・

動かなくなるかもしれませんが単純にgrepしてもいいかもしれません。

力技:

$ objdump -s hello | grep -E "go[0-9]" | sed -e 's/.*\(go.*\).*/\1/' -e 's/\.\.\+//g'
go1.5.1

他にいい方法があれば教えて下さい!

Binary Hacks ―ハッカー秘伝のテクニック100選

Binary Hacks ―ハッカー秘伝のテクニック100選