Successfully reported this slideshow.

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

0

Share

Loading in …3
×
1 of 39
1 of 39

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

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

×