20160320 サンモクを通して学んだ話
TRANSCRIPT
サンモクを通して学んだ話
Twitter : @sago35tkMasaaki Takasago
2016/03/20kansai.pm #16
サンモクを通して学んだ話 @sago35tk1
自己紹介 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
Perl 鍋とは
@nqounet さん主催の、 Perl を使って、自分自身で何かしらのプログラムを作る勉強会です。「 Perl の基本的な事がわかり、自力で簡単なプログラムが書ける方」を対象にした勉強会です。
http://perlnabe.connpass.com/
3 サンモクを通して学んだ話 @sago35tk
今日話す内容 車載組込ソフトウェア開発と Perl
サンモクを通して学んだ話 勉強会の題材をサンモクにしたら、思った以上に良かった件
4 サンモクを通して学んだ話 @sago35tk
サンモクって? 三目並べ ( 〇 × ゲーム ) の事
3x3 の盤面で 2 人が交互に「○」と「 × 」を書いて 3 つ並べたら勝ち、という感じのゲーム
5 サンモクを通して学んだ話 @sago35tk
さて6 サンモクを通して学んだ話 @sago35tk
7 サンモクを通して学んだ話 @sago35tk
Perl というと web 界隈が中心だと思いますが、車載組込界隈の仕事のお話しとPerl との関係を書いていきます。
8 サンモクを通して学んだ話 @sago35tk
車載組込ソフトウェア ECU(≒ 車に乗るコンピュータ ) のソフトウェアを開発
車 1 台で、多いと 100 個以上の ECU が搭載されている 車載組込の分類
制御系 – 走行や車体に関するもの パワートレーン系 ( エンジン制御等 ) シャーシ系 ( サスペンション、ステアリング等 ) ボディ系 ( エアコン、ドア等 )
安全系 センサ、エアバッグ等
情報系 カーナビ、オーディオ等
9 サンモクを通して学んだ話 @sago35tk
車載組込ソフトウェア 良いペースでソースコード行数が増えていっている
2014 年頃の時点で車 1 台あたり 1,000 万行超えたとか 1ECU で 50 万行を超える ECU も 参考 ) 2012 年頭時点で Linux カーネルが 1500 万行を突破
10
そんな規模なのに、グローバル変数だらけとか・・・ そんな状態なのに、マルチコア化を進めようとしていたり サンモクを通して学んだ話 @sago35tk
車載組込ソフトウェア 人命に直結するので、開発プロセスが厳格かつ長大
10 分コード書いたら 10 時間デバッグして 20 時間帳票を書く、みたいなのが基本 なので、 ( 人によりますが ) コードを書く量が極端に少ない 結果として、コード書ける人と書けない人の二極化が進む
11 サンモクを通して学んだ話 @sago35tk
開発環境 ECU の開発言語は、 C 言語 (C90) 中心 開発していて辛いことが多い
グローバル変数が正義とされている 省メモリだったり速かったりする場合もありますが・・・
マイコン毎に IDE を含め開発環境が変わる マイコン毎に IDE が強力だったり貧弱だったり
シミュレータが貧弱だったり、そもそもなかったり コンパイラが未だによくバグってる レジスタの制限事項が死ぬほどある ステップ実行はできるけど、制限が多い
タイマー割込等が制御出来ない事が結構ある そもそもステップ実行できる機材が存在しない開発案件がある
12 サンモクを通して学んだ話 @sago35tk
なんとか改善したい 開発環境が弱いのでツール作って改善したい、と思うが基本的にはツール作っちゃダメ、という空気 人命に関わるソフトを作っているので、開発で使うツールにも監視が入る けど、やっぱりソフト開発が大変なので、良いバランスを探りつつ各種ツールを作っている現状
13 サンモクを通して学んだ話 @sago35tk
以下、パワトレ系での Perl活用事例を書いていきます注 ) 業界全体/共通の話ではないので (ry
14 サンモクを通して学んだ話 @sago35tk
ツール作成 自分が良く使っているのは、 Perl と Golang
C 言語ではツール書くのが面倒なので・・・ Perl だと CPAN の恩恵もあり楽
何もインストールするな、と言われた時代にも Unix サーバー上には普通に Perl があったので何とかなった ツールを配布する際は、 CPAN モジュールのインストールをしてもらうのが結構大変 PAR::Packer で若干楽になるけど、万能じゃなかった
最近の自分は、 Golang を使う比率が増えている やっぱり single binary便利
15 サンモクを通して学んだ話 @sago35tk
ツール作成で良く使うモジュール Minilla Path::Tiny Getopt::Long Pod::Usage Text::CSV Spreadsheet::XLSX Moo Perl/Tk Class::DBI
16 サンモクを通して学んだ話 @sago35tk
組込系ツールと Perl 10 年弱この業界にいますが、 Perl が活用されているツールは見たことがない
python 、 tcl 、 lua で拡張できるツールはいくつかある 開発部署ローカルの Perl で作られた小さいツールはある
自分もたくさん作った Perl 以外だと、以下のような感じ
シェルスクリプト、バッチファイル Excel VBA
17 サンモクを通して学んだ話 @sago35tk
ありがちなツール コンパイラや計測器が出力したログ ( テキスト、バイナリ ) を解析して何かする 仕様書を元に、 C 言語ソースコードを自動生成する C 言語に対し静的検査を実施する
18 サンモクを通して学んだ話 @sago35tk
事例紹介 1 makefile生成と make実行 ( コンパイル+リンク+他 )
歴史的経緯から、謎の形式の設定ファイルが多い そのあたりを読み込みつつ、 makefile生成を行う
依存関係の抽出を並列実行し高速化 コンパイルは、 make –-jobs で並列実行
19 サンモクを通して学んだ話 @sago35tk
事例紹介 2 ソース全体の変数/変数アドレスの一覧を取得する
ツールチェーンから外れたツールが多数ある為、変数/変数アドレスの一覧が必要なケースが多い マイコンが変わる毎に、一覧の取得元フォーマットが変わる
20 サンモクを通して学んだ話 @sago35tk
事例紹介 3 仕様書に基づき、 C 言語ソースを自動生成する
仕様書の 1 か所が変わると、「 10 か所以上適切に変更しなければならない」等はありがち C 言語ソースをプログラムから自動生成する事により、間違えずに変更できるようにする
でも、既存のテンプレートエンジンは、人が書いたようなテキストを出力するのは結構面倒で、いつも四苦八苦
21 サンモクを通して学んだ話 @sago35tk
事例紹介 4 通信ログを解析し、集計する
バス負荷を求める 上位プロトコルにそった解析結果を表示する
22 サンモクを通して学んだ話 @sago35tk
事例紹介 5 機構部分のシミュレーション (Perl/Tk)
アーム長の比率を変えるとどうなるのか、を検討
23 サンモクを通して学んだ話 @sago35tk
などなど24 サンモクを通して学んだ話 @sago35tk
ここまでのまとめ 車載組込ソフトウェア開発でも、 Perl 使ってます
開発を助ける/補助するツール等がメイン
ということで、組込業界でも Perl 使ってますよ。
25 サンモクを通して学んだ話 @sago35tk
次26 サンモクを通して学んだ話 @sago35tk
サンモクを通して学んだ話27 サンモクを通して学んだ話 @sago35tk
ある日の出来事28 サンモクを通して学んだ話 @sago35tk
29 サンモクを通して学んだ話 @sago35tk
ルールのイメージ 盤面を仕切るプログラムを主催側で準備 先攻後攻の順で、プログラム/関数を呼び出す 呼び出された側は、次の一手を考えて返す
引数 (9 つ ) で現在の盤面状態を受け取る 戻り値 or 標準出力で次の 1手を返す
30 サンモクを通して学んだ話 @sago35tk
Perl 鍋での実行 いろいろ作ったりしゃべったりで楽しい Perl 鍋ですが、みんなで同じネタをやったことはなかった ので、サンモク大会をすることに ( 勝手に )決定。 ということで
31 サンモクを通して学んだ話 @sago35tk
Perl版を作ってみた
https://github.com/sago35/PerlNabe-Sanmoku
32 サンモクを通して学んだ話 @sago35tk
Perl 鍋でやってみた
33 サンモクを通して学んだ話 @sago35tk
事前に準備したもの README.md
ほんのりルールを記載 サンプル実装
最低限のサンプルとして、右下から順位打っていくだけ
34 サンモクを通して学んだ話 @sago35tk
サンプル実装
35
9要素の配列で盤面の情報を貰う0: 空き、 1: 自分の駒が存在、 2:相手の~
8→0 に順番に見て、空いてるところがあれば、そこに次の一手を打つ サンモクを通して学んだ話 @sago35tk35
当日の流れ Perl 鍋なので Perl を前提に環境を作成 みんなで、単一の github に直接コミットしてもらう形で実施 10 分ぐらいでルール説明を実施し、プログラムを書き始めてもらった その間に対戦環境を github に push
36 サンモクを通して学んだ話 @sago35tk
良かったところ みんな、想像以上にもくもくとコード書いてた
あっという間に時間が流れた 失敗してもバグっていても面白い
むしろちょっとバグっている方が面白い 小細工も楽しい
時間内 (2 時間弱 ) で書ききれなくても対戦環境をgithub にあげていたので、後追いで遊べた 後で遊ぶのも楽しい
後で記事を書いてくれた (tomcha++) http://tomcha.hatenablog.jp/entry/
2015/12/14/083058
37 サンモクを通して学んだ話 @sago35tk
38 サンモクを通して学んだ話 @sago35tk
まとめ みんなで何かを作る勉強会は、熱中できる みんなで同じことをするプログラムを書くのは楽しい
同じことをしているので、後で比較できる 対戦形式は楽しい バグっていても許される環境は、安心してトライできる
楽しく失敗体験できる 楽しく勉強しよう
39 サンモクを通して学んだ話 @sago35tk