SlideShare una empresa de Scribd logo
1 de 39
サンモクを通して学んだ話
Twitter : @sago35tk
Masaaki Takasago
2016/03/20
kansai.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

Más contenido relacionado

La actualidad más candente

Effective Python 第2版をオンライン読書会で。
Effective Python 第2版をオンライン読書会で。Effective Python 第2版をオンライン読書会で。
Effective Python 第2版をオンライン読書会で。
KyutatsuNishiura
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
Shinya Okano
 
組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発
bei_kan
 
Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjpPython エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjp
Takeshi Komiya
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法
Takeshi Sugiyama
 
私は如何にしてUpl
私は如何にしてUpl私は如何にしてUpl
私は如何にしてUpl
Tohru Shinohara
 

La actualidad más candente (20)

Python学習奮闘記#07 webapp
Python学習奮闘記#07 webappPython学習奮闘記#07 webapp
Python学習奮闘記#07 webapp
 
Effective Python 第2版をオンライン読書会で。
Effective Python 第2版をオンライン読書会で。Effective Python 第2版をオンライン読書会で。
Effective Python 第2版をオンライン読書会で。
 
プログラマー
プログラマープログラマー
プログラマー
 
OSSと私
OSSと私OSSと私
OSSと私
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
 
210630 python
210630 python210630 python
210630 python
 
ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~
ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~
ぼくたちRubyプログラミング少年団!~小・中学生向けプログラミング言語Rubyの学習塾の運営、学習教材の開発・販売事業~
 
組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発組み込みプログラマとテスト駆動開発
組み込みプログラマとテスト駆動開発
 
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01
 
Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjpPython エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjp
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPython
 
私は如何にしてUpl
私は如何にしてUpl私は如何にしてUpl
私は如何にしてUpl
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
 

Destacado

Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
karupanerura
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」
azumakuniyuki 🐈
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013
azumakuniyuki 🐈
 

Destacado (20)

高砂 一人でロ○□×風味
高砂 一人でロ○□×風味高砂 一人でロ○□×風味
高砂 一人でロ○□×風味
 
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
 
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
 
PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々
 
Devel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグするDevel ptkdb - perlをグラフィカルにデバッグする
Devel ptkdb - perlをグラフィカルにデバッグする
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
 
The Next PowerCMS
The Next PowerCMSThe Next PowerCMS
The Next PowerCMS
 
Gotanda.pmの紹介
Gotanda.pmの紹介Gotanda.pmの紹介
Gotanda.pmの紹介
 
KOWAZA for mackerel
KOWAZA for mackerelKOWAZA for mackerel
KOWAZA for mackerel
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
YAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LTYAPC::KANSAI 2017 LT
YAPC::KANSAI 2017 LT
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」
 
Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013
 
2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring
 
僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。
 
Twitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみたTwitterの被ブロック数可視化ツールを作ってみた
Twitterの被ブロック数可視化ツールを作ってみた
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerl
 
Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜
 

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

Similar a 20160320 サンモクを通して学んだ話 (20)

Goで始める言語処理系実装入門
Goで始める言語処理系実装入門Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
 
make_information_search.pdf
make_information_search.pdfmake_information_search.pdf
make_information_search.pdf
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
 
こわくないPython
こわくないPythonこわくないPython
こわくないPython
 
ペアプロはリモートでもできる!
ペアプロはリモートでもできる!ペアプロはリモートでもできる!
ペアプロはリモートでもできる!
 
Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話
 
Pythonでpdfをいじってみる
PythonでpdfをいじってみるPythonでpdfをいじってみる
Pythonでpdfをいじってみる
 
Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜
 
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
 
OFF4G Hokkaido LT
OFF4G Hokkaido LTOFF4G Hokkaido LT
OFF4G Hokkaido LT
 
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
 
TypeScriptで作る型安全FirefoxOSアプリ
TypeScriptで作る型安全FirefoxOSアプリTypeScriptで作る型安全FirefoxOSアプリ
TypeScriptで作る型安全FirefoxOSアプリ
 
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみるMicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
 
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッションPyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッション
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Google colab 2
Google colab 2Google colab 2
Google colab 2
 
MTプラグイン入門以前
MTプラグイン入門以前MTプラグイン入門以前
MTプラグイン入門以前
 
Pythonで作る自作デバッガLT資料
 Pythonで作る自作デバッガLT資料 Pythonで作る自作デバッガLT資料
Pythonで作る自作デバッガLT資料
 

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