Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,037 views

Published on

2016/03/20 kansai.pm #16

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

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

×