2014年7月31日木曜日

iutest_c v1.5.0 をリリースしました

iutest_c v1.5.0 をリリースしました。

変更点は以下のとおりです。

  • 修正
    • _Generic 対応
    • バグ修正

今回は _Generic 対応が目玉ですが、
テストの充実化をしたことで、バグを大幅に減らせました。

2014年7月29日火曜日

Markdown でテキストカラーの変更

最近、社内勉強会のスライド作成を Reveal.js + Markdown でやっているのですが、テキストカラーを部分的に変える方法ってないのかなーと思っていました。

方法はすごーく簡単なことでした。
タグを直接記述するだけです。

## テスト

タグを<span style="color:red">直接記述</span>することで<span style="color:blue">色</span>を変えます。


Markdown 記法に囚われて、タグが直接埋め込めることになかなか気づけませんでした。

2014年7月22日火曜日

time コマンドでビルド時間の計測

time と awk コマンドでビルド時間の計測をしてみました。
対象は自作 C++ テスティングフレームワークの iutest です。

num=1; while [[ $$num -le 10 ]]; do \
    make -C benchmark clean; \
    { time -p make -C benchmark build 2>&1; } 2>> _time.log; \
    ((num = num + 1)); \
done
@awk 'BEGIN{ sum=0; max=0; min=-1; num=0; } \
    { if($$1=="user") { num+=1; if(min==-1){ min=$$2; } sum+=$$2; \
    if($$2>max){max=$$2}; if(min>$$2){min=$$2}; } } \
    END{ print("Total:", sum, "(",num,")" ); print("Min:", min); ¥
  print("Max:", max); print("Avg:", sum/num); }' _time.log

time コマンドの出力を _time.log ファイルに書いていき、最後に awk で平均を出しています。
こんな感じで出力されます。

Total: 202.01 ( 10 )
Min: 19.65
Max: 20.78
Avg: 20.201

iutest はこれに加えて基準となるような別のプログラムのビルド時間も計測し、スコアとして数値化しています。
マシンスペックなどの差を考えて、このような仕組みにしました。
のつもりでしたが、マシンごとにスコアが大分違う結果に・・・

ともあれ、これを元にビルド時間の短縮を試みたいと思います。

2014年7月15日火曜日

[C++] Coveralls でコードカバレッジ - その3 (lcov + lcoveralls)

前回、「Coveralls でコードカバレッジ - その2」でカバレッジ集計ができるようになったのですが、いつの間にかおかしな状態になってしまっていました。
なぜか CHANGED が 0 のままで前回との差分が見れなくなってしまいました。
ちょっとお手上げ状態なので、誰か助けてください。
と言うついでに、環境変えたら直るんじゃね?というとこから locv + lcoveralls に対応してみました。

lcov + lcoveralls に鞍替え
https://github.com/pcolby/lcoveralls
こちらに手順が書いてあるのでそのとおりに .travis.yml を編集します。
インストール
install:
  - sudo apt-get install lcov rubygems
  - gem install lcoveralls
ビルド ~ lcov
gcov のときと同様に -coverage オプションを付けてビルド、実行ファイルを実行します。
.gcda と .gcno が生成されるので、そこで
lcov -c -d . -o coverage.info
と実行する。
集計したくないファイルがある場合は、--remove(-r) オプションで削除します。
lcov -r coverage.info *gcc* -o coverage.info
lcoveralls
続いて、以下のコマンドを実行する。
lcoveralls coverage.info
今回は Travis CI 上で実行するので、token 指定は不要です。
もし、それ以外で実行する場合は --token オプションを指定する必要があります。

実行、結果
以上で設定は終わりです。実行すると以下のようにログが出力されます。

gcov + cpp-coveralls と比べて色付きログが出るの見やすい!
また、coveralls.io でちゃんと集計もされています。


が、やっぱり CHANGED は 0 のままで検出してくれませんでした。
しかたがないので、coveralls.io から一旦リポジトリを削除しました。

が、やっぱダメでした。

う~ん。困った。。。

2014/09/30 追記
issue 出てましたが、反応なし。
'source change' and 'coverage change' not detected · Issue #327 · lemurheavy/coveralls-public

2014年7月7日月曜日

Ask.fm を始めた

完全にネタ切れした。

最近 Ask.fm の回答ツイートを目にすることが多くなった気がします。流行ってるのか?
あまり興味はないんですが、ネタもないし始めてみました。
http://ask.fm/srz_zumix

まぁ、適当に答えます。

2014年7月1日火曜日

[Arduino] 電子回路設計ツール Fritzing

最近は Arduino と戯れていないのですが、
つい最近 Fritzing という電子回路設計ツールを知りました。

Arduino でググった時によく見る回路図がこのツールで書けます。
もっと早く知りたかった…

Fritzing Download

書いてみた
実際使って見たのですが、簡単操作でとっても良かったです。
いや~もっと早く知りたかった…orz



ただまぁ当然のことながら定義されていないパーツもあるわけです。
今回も、16x16 LED matrix と TD62783APG トランジスタアレイのパーツを作成しました。
パーツの作り方は割愛しますが、LED matrix のパーツ作りに手間取ったのでそこだけ書き残しておきます。

TD62783APG は同じような形のパーツを修正するだけでできましたが、LED matrix は 8x8 はあるものの 16x16 がなく、しかもピン数も異なっていたのでそこも変更する必要がありました。

ハマったところは、このコネクターピンを定義する部分です。id の命名にルールがあるようで、そこに気づかずかなりの時間を取られてしまいました…
そもそも、画像ファイルは .svg 形式なのですが、この編集にすら手こずりました… .svg 画像編集ソフトは inkscape を使いました。
画像編集にほとんど縁のない私ですが色々ポチポチやっているうちに、8x8 LED matrix の画像でコピペを駆使してブレッドボード用画像をなんとか作れるようにはなりました。

画像ができたのでコネクターを定義しようとおもいきや、svg のパスを D&D しても反応せず…
(Windows 版使ってるのですがツールのバグでしょうかねぇ…)


色々見てみた結果、.svg 画像の id 名で定義することがわかりました。
.svg ファイルはテキストデータ(xml)です。エディターで開いていただくと path やら g ノードに id 属性があると思います。これを "connectorXXpin" みたいな名前にすると認識してくれました。
(既存の .svg みると ***pad やら ***pin やらあるがそのへんはよくわからん)

id 名は inkscape の「オブジェクトのプロパティ」で変更できます。


これで画像が完成です。
(回路図、プリント基板用にも作る必要がありますが、今回はブレッドボードビューさえ出来てればOKなので割愛)
画像を読み込んでコネクタビューのコネクタリストにチェックがついていればOKです。





さて、イーサネットシールド買ってからほとんど何もしていないわけですが…


…暇になったらやります。