20160320 サンモクを通して学んだ話

39
ササササササササササササ Twitter : @sago35tk Masaaki Takasago 2016/03/20 kansai.pm #16 ササササササササササササ @sago35tk 1

Upload: masaaki-takasago

Post on 12-Apr-2017

774 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 20160320 サンモクを通して学んだ話

サンモクを通して学んだ話

Twitter : @sago35tkMasaaki Takasago

2016/03/20kansai.pm #16

サンモクを通して学んだ話 @sago35tk1

Page 2: 20160320 サンモクを通して学んだ話

自己紹介 Name => ‘Masaaki Takasago’; 主な使用言語は、 C 言語と Perl と Golang 車載組込ソフトウェアエンジニア

仕事では C 言語メイン mbed マイコン 改善ツールは Perl で書くことが多い/最近は Golang 比率

Up 例 1) Build ログの解析 例 2) ソースの静的解析

Vim 使ってます Perl 鍋歴は 1 年弱

Kansai::Tiny v0.0.1 (2015-08-08) 以降ちょくちょく参加

ジュースは撮影用です

2 サンモクを通して学んだ話 @sago35tk

Page 3: 20160320 サンモクを通して学んだ話

Perl 鍋とは

@nqounet さん主催の、 Perl を使って、自分自身で何かしらのプログラムを作る勉強会です。「 Perl の基本的な事がわかり、自力で簡単なプログラムが書ける方」を対象にした勉強会です。

http://perlnabe.connpass.com/

3 サンモクを通して学んだ話 @sago35tk

Page 4: 20160320 サンモクを通して学んだ話

今日話す内容 車載組込ソフトウェア開発と Perl

サンモクを通して学んだ話 勉強会の題材をサンモクにしたら、思った以上に良かった件

4 サンモクを通して学んだ話 @sago35tk

Page 5: 20160320 サンモクを通して学んだ話

サンモクって? 三目並べ ( 〇 × ゲーム ) の事

3x3 の盤面で 2 人が交互に「○」と「 × 」を書いて 3 つ並べたら勝ち、という感じのゲーム

5 サンモクを通して学んだ話 @sago35tk

Page 6: 20160320 サンモクを通して学んだ話

さて6 サンモクを通して学んだ話 @sago35tk

Page 7: 20160320 サンモクを通して学んだ話

7 サンモクを通して学んだ話 @sago35tk

Page 8: 20160320 サンモクを通して学んだ話

Perl というと web 界隈が中心だと思いますが、車載組込界隈の仕事のお話しとPerl との関係を書いていきます。

8 サンモクを通して学んだ話 @sago35tk

Page 9: 20160320 サンモクを通して学んだ話

車載組込ソフトウェア ECU(≒ 車に乗るコンピュータ ) のソフトウェアを開発

車 1 台で、多いと 100 個以上の ECU が搭載されている 車載組込の分類

制御系 – 走行や車体に関するもの パワートレーン系 ( エンジン制御等 ) シャーシ系 ( サスペンション、ステアリング等 ) ボディ系 ( エアコン、ドア等 )

安全系 センサ、エアバッグ等

情報系 カーナビ、オーディオ等

9 サンモクを通して学んだ話 @sago35tk

Page 10: 20160320 サンモクを通して学んだ話

車載組込ソフトウェア 良いペースでソースコード行数が増えていっている

2014 年頃の時点で車 1 台あたり 1,000 万行超えたとか 1ECU で 50 万行を超える ECU も 参考 ) 2012 年頭時点で Linux カーネルが 1500 万行を突破

10

そんな規模なのに、グローバル変数だらけとか・・・ そんな状態なのに、マルチコア化を進めようとしていたり サンモクを通して学んだ話 @sago35tk

Page 11: 20160320 サンモクを通して学んだ話

車載組込ソフトウェア 人命に直結するので、開発プロセスが厳格かつ長大

10 分コード書いたら 10 時間デバッグして 20 時間帳票を書く、みたいなのが基本 なので、 ( 人によりますが ) コードを書く量が極端に少ない 結果として、コード書ける人と書けない人の二極化が進む

11 サンモクを通して学んだ話 @sago35tk

Page 12: 20160320 サンモクを通して学んだ話

開発環境 ECU の開発言語は、 C 言語 (C90) 中心 開発していて辛いことが多い

グローバル変数が正義とされている 省メモリだったり速かったりする場合もありますが・・・

マイコン毎に IDE を含め開発環境が変わる マイコン毎に IDE が強力だったり貧弱だったり

シミュレータが貧弱だったり、そもそもなかったり コンパイラが未だによくバグってる レジスタの制限事項が死ぬほどある ステップ実行はできるけど、制限が多い

タイマー割込等が制御出来ない事が結構ある そもそもステップ実行できる機材が存在しない開発案件がある

12 サンモクを通して学んだ話 @sago35tk

Page 13: 20160320 サンモクを通して学んだ話

なんとか改善したい 開発環境が弱いのでツール作って改善したい、と思うが基本的にはツール作っちゃダメ、という空気 人命に関わるソフトを作っているので、開発で使うツールにも監視が入る けど、やっぱりソフト開発が大変なので、良いバランスを探りつつ各種ツールを作っている現状

13 サンモクを通して学んだ話 @sago35tk

Page 14: 20160320 サンモクを通して学んだ話

以下、パワトレ系での Perl活用事例を書いていきます注 ) 業界全体/共通の話ではないので (ry

14 サンモクを通して学んだ話 @sago35tk

Page 15: 20160320 サンモクを通して学んだ話

ツール作成 自分が良く使っているのは、 Perl と Golang

C 言語ではツール書くのが面倒なので・・・ Perl だと CPAN の恩恵もあり楽

何もインストールするな、と言われた時代にも Unix サーバー上には普通に Perl があったので何とかなった ツールを配布する際は、 CPAN モジュールのインストールをしてもらうのが結構大変 PAR::Packer で若干楽になるけど、万能じゃなかった

最近の自分は、 Golang を使う比率が増えている やっぱり single binary便利

15 サンモクを通して学んだ話 @sago35tk

Page 16: 20160320 サンモクを通して学んだ話

ツール作成で良く使うモジュール Minilla Path::Tiny Getopt::Long Pod::Usage Text::CSV Spreadsheet::XLSX Moo Perl/Tk Class::DBI

16 サンモクを通して学んだ話 @sago35tk

Page 17: 20160320 サンモクを通して学んだ話

組込系ツールと Perl 10 年弱この業界にいますが、 Perl が活用されているツールは見たことがない

python 、 tcl 、 lua で拡張できるツールはいくつかある 開発部署ローカルの Perl で作られた小さいツールはある

自分もたくさん作った Perl 以外だと、以下のような感じ

シェルスクリプト、バッチファイル Excel VBA

17 サンモクを通して学んだ話 @sago35tk

Page 18: 20160320 サンモクを通して学んだ話

ありがちなツール コンパイラや計測器が出力したログ ( テキスト、バイナリ ) を解析して何かする 仕様書を元に、 C 言語ソースコードを自動生成する C 言語に対し静的検査を実施する

18 サンモクを通して学んだ話 @sago35tk

Page 19: 20160320 サンモクを通して学んだ話

事例紹介 1 makefile生成と make実行 ( コンパイル+リンク+他 )

歴史的経緯から、謎の形式の設定ファイルが多い そのあたりを読み込みつつ、 makefile生成を行う

依存関係の抽出を並列実行し高速化 コンパイルは、 make –-jobs で並列実行

19 サンモクを通して学んだ話 @sago35tk

Page 20: 20160320 サンモクを通して学んだ話

事例紹介 2 ソース全体の変数/変数アドレスの一覧を取得する

ツールチェーンから外れたツールが多数ある為、変数/変数アドレスの一覧が必要なケースが多い マイコンが変わる毎に、一覧の取得元フォーマットが変わる

20 サンモクを通して学んだ話 @sago35tk

Page 21: 20160320 サンモクを通して学んだ話

事例紹介 3 仕様書に基づき、 C 言語ソースを自動生成する

仕様書の 1 か所が変わると、「 10 か所以上適切に変更しなければならない」等はありがち C 言語ソースをプログラムから自動生成する事により、間違えずに変更できるようにする

でも、既存のテンプレートエンジンは、人が書いたようなテキストを出力するのは結構面倒で、いつも四苦八苦

21 サンモクを通して学んだ話 @sago35tk

Page 22: 20160320 サンモクを通して学んだ話

事例紹介 4 通信ログを解析し、集計する

バス負荷を求める 上位プロトコルにそった解析結果を表示する

22 サンモクを通して学んだ話 @sago35tk

Page 23: 20160320 サンモクを通して学んだ話

事例紹介 5 機構部分のシミュレーション (Perl/Tk)

アーム長の比率を変えるとどうなるのか、を検討

23 サンモクを通して学んだ話 @sago35tk

Page 24: 20160320 サンモクを通して学んだ話

などなど24 サンモクを通して学んだ話 @sago35tk

Page 25: 20160320 サンモクを通して学んだ話

ここまでのまとめ 車載組込ソフトウェア開発でも、 Perl 使ってます

開発を助ける/補助するツール等がメイン

ということで、組込業界でも Perl 使ってますよ。

25 サンモクを通して学んだ話 @sago35tk

Page 26: 20160320 サンモクを通して学んだ話

次26 サンモクを通して学んだ話 @sago35tk

Page 27: 20160320 サンモクを通して学んだ話

サンモクを通して学んだ話27 サンモクを通して学んだ話 @sago35tk

Page 28: 20160320 サンモクを通して学んだ話

ある日の出来事28 サンモクを通して学んだ話 @sago35tk

Page 29: 20160320 サンモクを通して学んだ話

29 サンモクを通して学んだ話 @sago35tk

Page 30: 20160320 サンモクを通して学んだ話

ルールのイメージ 盤面を仕切るプログラムを主催側で準備 先攻後攻の順で、プログラム/関数を呼び出す 呼び出された側は、次の一手を考えて返す

引数 (9 つ ) で現在の盤面状態を受け取る 戻り値 or 標準出力で次の 1手を返す

30 サンモクを通して学んだ話 @sago35tk

Page 31: 20160320 サンモクを通して学んだ話

Perl 鍋での実行 いろいろ作ったりしゃべったりで楽しい Perl 鍋ですが、みんなで同じネタをやったことはなかった ので、サンモク大会をすることに ( 勝手に )決定。 ということで

31 サンモクを通して学んだ話 @sago35tk

Page 32: 20160320 サンモクを通して学んだ話

Perl版を作ってみた

https://github.com/sago35/PerlNabe-Sanmoku

32 サンモクを通して学んだ話 @sago35tk

Page 33: 20160320 サンモクを通して学んだ話

Perl 鍋でやってみた

33 サンモクを通して学んだ話 @sago35tk

Page 34: 20160320 サンモクを通して学んだ話

事前に準備したもの README.md

ほんのりルールを記載 サンプル実装

最低限のサンプルとして、右下から順位打っていくだけ

34 サンモクを通して学んだ話 @sago35tk

Page 35: 20160320 サンモクを通して学んだ話

サンプル実装

35

9要素の配列で盤面の情報を貰う0: 空き、 1: 自分の駒が存在、 2:相手の~

8→0 に順番に見て、空いてるところがあれば、そこに次の一手を打つ サンモクを通して学んだ話 @sago35tk35

Page 36: 20160320 サンモクを通して学んだ話

当日の流れ Perl 鍋なので Perl を前提に環境を作成 みんなで、単一の github に直接コミットしてもらう形で実施 10 分ぐらいでルール説明を実施し、プログラムを書き始めてもらった その間に対戦環境を github に push

36 サンモクを通して学んだ話 @sago35tk

Page 37: 20160320 サンモクを通して学んだ話

良かったところ みんな、想像以上にもくもくとコード書いてた

あっという間に時間が流れた 失敗してもバグっていても面白い

むしろちょっとバグっている方が面白い 小細工も楽しい

時間内 (2 時間弱 ) で書ききれなくても対戦環境をgithub にあげていたので、後追いで遊べた 後で遊ぶのも楽しい

後で記事を書いてくれた (tomcha++) http://tomcha.hatenablog.jp/entry/

2015/12/14/083058

37 サンモクを通して学んだ話 @sago35tk

Page 38: 20160320 サンモクを通して学んだ話

38 サンモクを通して学んだ話 @sago35tk

Page 39: 20160320 サンモクを通して学んだ話

まとめ みんなで何かを作る勉強会は、熱中できる みんなで同じことをするプログラムを書くのは楽しい

同じことをしているので、後で比較できる 対戦形式は楽しい バグっていても許される環境は、安心してトライできる

楽しく失敗体験できる 楽しく勉強しよう

39 サンモクを通して学んだ話 @sago35tk