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

memoメモ

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

第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のバージョン情報を読む

golang

なにができる?

  • 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選

よく使う電源タップ

モノ

昔から愛用しているタップについて調べてみた。

背景

買おうと思ったら

f:id:atotto:20151017170931p:plain

取り扱いがなくなっていたorz

一人暮らしの時からこれを3つくらい使って少しづつ増やしてきた。おもちゃや家電が増えるとコンセントですぐに増やせるこれが役に立つ。壁からはみ出ないし、片側に2つ出ているのでコードを逃がしやすく、拡張性が高い。

さて、どうするか。

同じもの?似たものがあるみたい

ELECOM 電源タップ 片面+下方向 3個口 ホワイト T-TR4WH

ELECOM 電源タップ 片面+下方向 3個口 ホワイト T-TR4WH

サイドコーナータップ 3個口 白 [HS-AS315/W-G]

サイドコーナータップ 3個口 白 [HS-AS315/W-G]

安く手に入れるにはどうしましょうかね。。

LinuxからUSB HUBの電源のON/OFFを制御してみる

Device Linux

はじめに

USBの規格上、各ポートの電源の制御ができる(Per-port power switchingというらしい?)そうですが、その機能を実装しているデバイスがあまり無いようです。 いろいろを探してみるとSUGOI HUBがその機能を実装しているということなので買って試してみました。

システムトークス SUGOI HUB4Xシリーズ ブラック アダプタ付 電力供給安定型 USB2-HUB4XA-BK

システムトークス SUGOI HUB4Xシリーズ ブラック アダプタ付 電力供給安定型 USB2-HUB4XA-BK

システムトークス SUGOI HUB4Xシリーズ ホワイト アダプタ付 電力供給安定型 USB2-HUB4XA-WH

システムトークス SUGOI HUB4Xシリーズ ホワイト アダプタ付 電力供給安定型 USB2-HUB4XA-WH

lsusbコマンドで確認する

Linuxならなんでもいいですが、とりあえずraspberry pi 2で。

lsusbで確認してみます:

pi@raspberrypi ~ $ sudo lsusb 
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0409:005a NEC Corp. HighSpeed Hub

このなかのNEC Corp.製のチップのデバイスがSUGOI HUBです。BUS=1, Device=4であることがわかります。

hub-ctrlを使って制御する

portの電源制御が簡単にできるようになるので利用してみます:

http://www.gniibe.org/development/ac-power-control-by-USB-hub/index.html

hub-ctrlをコンパイル

$ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
$ gcc -O2 -o hub-ctrl hub-ctrl.c -lusb

-vで各portの状態が確認できます:

pi@raspberrypi ~ $ sudo ./hub-ctrl -v
Hub #0 at 001:004
 INFO: individual power switching.
 Hub Port Status:
   Port 1: 0000.0100 power
   Port 2: 0000.0100 power
   Port 3: 0000.0100 power
   Port 4: 0000.0100 power
*snip*

Hub #0 at 001:004が先にlsusbで確認したBUS=1, Device=4のSUGOI HUBです。

操作してみる

portはSUGOI HUBの左から1,2,3,4の順で指定できます。

$ sudo ./hub-ctrl -b 1 -d 4 -P 1 -p 0 # port 1のpower off
$ sudo ./hub-ctrl -b 1 -d 4 -P 1 -p 1 # port 1のpower on
$ sudo ./hub-ctrl -b 1 -d 4 -P 2 -p 0 # port 2のpower off
$ sudo ./hub-ctrl -b 1 -d 4 -P 2 -p 1 # port 2のpower on

なお、port 3,4は操作できませんでした。

これでUSBファンなどが自在に操作できます! USB電源連動のタップを使えば、安全に電化製品を制御できそうですね。

https://gist.github.com/atotto/5c1d55a2cb99ced9f7c7

raspberry piでやっていて気になったこと

hub-ctrl -vで確認するとBUS=1, Device=2にも何か見えています。 これはraspberry piのものです。

Hub #1 at 001:002
 INFO: individual power switching.
 WARN: Port indicators are NOT supported.
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect
   Port 2: 0000.0100 power
   Port 3: 0000.0100 power
   Port 4: 0000.0503 highspeed power enable connect
   Port 5: 0000.0100 power
Hub #2 at 001:001
 INFO: ganged switching.
 WARN: Port indicators are NOT supported.
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect

ためしに、raspberry piのportを操作してみました。 port 1の電源を落とすとLANが落ちました:

$ sudo ./hub-ctrl -b 1 -d 2 -P 1 -p 0

port 2、または、port 4を操作するとraspberry piのUSBの電源がすべて落ちました:

$ sudo ./hub-ctrl -b 1 -d 2 -P 2 -p 0
$ sudo ./hub-ctrl -b 1 -d 2 -P 4 -p 0

残りのport 3,5はよくわかりません。 #どこの資料をみればいいのでしょう。。

YAPC::Asia 2015 へ行ってきた #yapcasia

event

f:id:atotto:20150823103112p:plain

YAPC::Asiaへ行ってきました。 関係者の皆様、本当にありがとうございました。

YAPCというと、Perlに関するカンファレンスで、私自身Perlをまともに使っていないということもあり、見送っていました。が、Rebuildでアナウンスを聞き、実は技術者のお祭りなんだよ!最後だよ!ということで初参加しました。

結果、参加して良かったです。これが最後ということですが、次に繋がる最後だと思っています。今後の祭りも楽しみに生きていこうと思います。

聞いた・参加したもの一覧

day1:

day2:

ほとんどAトラックにいました。

も聞きたかったものの、他の行きたいものとバッティングしてしまいました。後日資料を追いたいと思います。

その他リンク:

すこし詳しく

Merry Christmas! / Larry Wall

最初どういう話なのかついていけませんでした・・が、ざっくりまとめると、Perl5とPerl6の違うようで似ていて、また別の進化がある、、というようなことだと思います。

  • Perl5 → hobbit
  • Perl6 → LotR

この違いについてしっかりとした教養が足りませんでした・・。スタートレックスター・ウォーズについては知識があるのですが、こっちの勉強範囲を広げる必要がありそうです。

また、ラリーさん曰く、「Perl6はこれまでクリスマスに出すとは言っていた。が何年のクリスマスとは言ってこなかった!Perl6は何事もなければ2015のクリスマスにリリースする、かもしれない」というアナウンスがあり、盛り上がりました。

f:id:atotto:20150821104241j:plain

Managing Containers at Scale with CoreOS and Kubernetes / Kelsey Hightower

slide: Managing Containers at Scale with CoreOS and Kubernetes

Kubernetesについてちょっと知りたかったので参加。

Kubernetes:くべぇねぇてす

ライブでデモをしながらだったのでイメージが湧きやすかったです。資料yapc-asia-2015/demo at master · kelseyhightower/yapc-asia-2015 · GitHub

  • コンテナ管理がしやすそう。
  • Podでコンテナをまとめて運用する。
  • 異常をきたしたコンテナは安全に切り離してデバッグする。←これ重要!

f:id:atotto:20150821113333j:plain

TBD (Toward Brain-aware Design) / Yukihiro Matsumoto

アーキテクチャの進化、考え方は振り子のようになっていて、それにより新しいことが生まれてくる。

そんななかで、マルチコア時代のシェルスクリプトって見直されてきている:

  • パイプライン処理でマルチコアを有効的につかえそう
  • でもShellで書くのつらい

マルチコア時代のスクリプトを書く言語としてstreemを提案している。

感想:

@mattn_jpさんすごすぎる。

streemをウォッチしていこうと思う。

Docker For Polyglots : Where We've Come From, and Where We Can Go / @upthecyberpunks at Docker

polyglots = 多数の言語を使えるひと

将来はシンクライアントな構成になっていく

Dockerの方向性:

  • より簡単にさまざまなコンテナを使えるようにする
  • テクノロジーを使うための敷居を下げる

  • すぐれたエンジニアなら適切なテクノロジーを適切なところで使いたい

→ 開発環境を設計、利用、運用していくのは大変。さらに健全な状態で運用することも大変

すべての人がすべてのツールを学ぶことはできない

Tooling is difficult

ビルドのための仕組みを手元で再現するのはむずかしい → 貢献しようとしてくれるひとへの敷居が高い

参入障壁を減らす、トラックナンバーを下げる。それなら、

  • 環境の構築を自動化したい
  • dependency hellをなくしたい

Dockerはこういった問題に対応できる。

  • Dockerを使って環境を簡単に定義できる!
  • DockerfileはREADMEとして使える!
  • kernelさえサポートしていればよい!
感想:

アプリケーションの実行環境の構築はDockerでやっているが、開発環境の構築までは手を付けていない。 開発環境は個人の好みの問題もあって結構むずかしい。いい解決案を探して行きたいなぁ。

f:id:atotto:20150822101422j:plain

Docker 3兄弟について / @toritori0318

  • Docker Machine
  • Docker Compose
  • Docker Swarm

全然使ってませんでした。Linuxマシンを直接触っているのもあってdockerコマンドを直接。。ちょっと、このあたりで整理する必要がありそう、かも?

関係無いですがOSX・・というかMacをつかって開発したい。

Adventures in Refactoring / Ben Lavender

リファクタリングのありがたいお話。

f:id:atotto:20150822131214j:plain

振る舞いを変えずにコードを整理していく。

f:id:atotto:20150822132427j:plain

go fmtは良い仕組みです!

Parallelism, Concurrency, and Asynchrony in Perl 6 / Jonathan Worthington

Perl6でサポートされる並列、並行、非同期処理の話。

各問題について丁寧に説明があり、わかりやすかった。 タスクの処理やデータ処理などをスクリプトで書くときに重宝しそう。streemとともにウォッチが必要。

Perl6まだかな・・・

Profiling & Optimizing in Go / Brad Fitzpatrick

トラックAの最後の講演はなんと @bratfitz さんのGo言語の話。 @bratfitz さんはGo言語のコアな開発者です。

資料: bradfitz/talk-yapc-asia-2015 · GitHub slide: YAPC: Go Debugging, Profiling, and Optimization - Google スライド

@bradfitz さんのライブコーディングすごい。そしてわかりやすい。Youtubeでもライブコーディングの動画があるのでオススメです。

f:id:atotto:20150822153214j:plain

みんなでGo言語やりましょう(ぉ

GoでgRPCを始めるときに見ると良さそうな資料

golang

とりあえずリストだけ・・