Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

シェル変数と初期値

変数を設定して、それをprintfで出すだけなら、以下のようなスクリプトで事足りるでしょう。

$ VAR="hoge"
$ printf "Value::%s\n" ${VAR}
Value::hoge

さて、ここで問題。
変数が空の場合一々判定して別のprintf文を作る必要があるのでしょうか?
答えはNO。
幸いにして、空だった場合の代用文字を入れるオプションがあります。

$ VAR=""
$ printf "Value::%s\n" ${VAR:Nothing}
Value::
$ printf "Value::%s\n" ${VAR:-Nothing}
Value::Nothing

さらに、そのまま変数に投入するオプションも。

$ printf "Value::%s\n" ${VAR:=Nothing}
Value::Nothing

sedで不要な行を削除する その3:行頭や末尾

shuzo-kino.hateblo.jp

shuzo-kino.hateblo.jp
の続き。

$ cat data.csv 
hello,2,a
yeah,0,b
foo,1,c
bar,3,a

sedで末尾行だけ消すには"$"です。

$ cat data.csv | sed '$d'
hello,2,a
yeah,0,b
foo,1,c

一行目はそのまんま1です。

$ cat data.csv | sed '1d'
yeah,0,b
foo,1,c
bar,3,a

あわせ技も可能

$ cat data.csv | sed '1d;$d'
yeah,0,b
foo,1,c

ArduinoでTDDをしたい際の選択肢

shuzo-kino.hateblo.jp
C言語のTDDという奴を試しました。
ArduinoC++の方言なので、厳密には適用できないケースは結構あります。
最近は状況が大分マシになったようで、いくつか案がでています。

arduinounit

専用テスト環境arduinounit!
公式配布ではなく、有志がつくったソフトウェアです。

ArduinoTap

更新状態が低調ですが、ArduinoTapという代案もあります。

sortコマンドの"-k"オプションで降順にしたり数値順にしたりする

sortコマンドの"-k"オプションではソート方法について指定ができます。
加えて、数珠繋ぎにできるので複雑なソートも可能です。

実際のところ

3番めのキーで昇順にソート、次いで1番目のキーを降順にソートという処理は以下の通り。

$ sort -t , -k 3 -k 1r  data.csv 
hello,2,a
bar,3,a
yeah,0,b
foo,1,c

sortコマンドでcsvファイル……やtsv的な謎独自ファイルの処理を行なう

実際のところ

こんなデータがあったとします。

$ cat data.csv 
hello,2,ab
yeah,0,ab
foo,1,ab
bar,3,cd

区切り文字を","、三番目のカラムをソートする場合

$ sort -t , -k 3 data.csv 
foo,1,ab
hello,2,ab
yeah,0,ab
bar,3,cd

区切り文字を","、一番目のカラムをソートする場合

$ sort -t , -k 1 data.csv 
bar,3,cd
foo,1,ab
hello,2,ab
yeah,0,ad

OpenSSLでmd5のハッシュ値を出す

OpenSSLでmd5ハッシュ値を出す方法です。
苦労してダウンロードしたUbuntuのイメージファイルが破損してないか調べたり、
テストツールで出した画像を比較したりする時に使えます。

実際のところ

同じテストファイルから、それぞれ別のタイミングで生成した画像o.pngとi.pngがあったとします。
ファイル名が違っても、内容が同じなら同一のハッシュ値がでます。

$ openssl md5 o.png
MD5(o.png)= 31065952ef2171b0dff33f866451e72b
$ openssl md5 i.png
MD5(i.png)= 31065952ef2171b0dff33f866451e72b

他にもSHA1とかもいけます。

参考もと

  • man openssl

PhantomJsで画像やらPDFやらがレンダリングされる場合

PhantomJsにて、バックヤードが自動生成でバイナリファイルを吐く場合
……たとえば画像やPDFを吐く場合は、標準出力に書き出すという技があるようです。
ダウンロードせんともエエのですね……。

実際のところ

アウトプットされた結果は
ハッシュ値比較や特徴点抽出なんかで比べてやれば良いでしょう。
流石に目視比較は不毛にも程がありますからね……。

画像

var webPage = require('webpage');
var page = webPage.create();
var fs = require("fs");

page.viewportSize = {
	width: 1920,
	height: 1080
};

page.open('http://phantomjs.org', function (status) {
  var base64data = page.renderBase64('PNG');
  var fs = require("fs");
  fs.write("/dev/stdout", base64data, "w");
  phantom.exit();
});

デコードするときにはbase64コマンドをつかうといいかと。

$ phantomjs phantomtest.js | base64 -D > i.png

pdf

page.render(output);
var fs = require("fs");
var pdf = fs.read(output);
fs.write("/dev/stdout", pdf, "w");
fs.remove(output);