2014/08/19

LinuxでもCpp

たいしたことではないんだけどLinuxで時間計測するコードが書きたかった。
WindowsのVCCでは以下のようなのを使っていた。
#include <time .h>
clock_t start, end;
start = clock();
/* 計測対象処理 */
end = clock();
std::cout <<"exit:" << end - start << "ms" << std::endl;
これがLinux用では以下のように書いた。
#include <time .h>
struct timespec start, end;
clock_gettime(CLOCK_MONOTONIC, &start);
/* 計測対象処理 */
clock_gettime(CLOCK_MONOTONIC, &end);

long milliSec = (end.tv_sec*1000 + end.tv_nsec/1000000)
                - (start.tv_sec*1000 + start.tv_nsec/1000000);
std::cout <<"exit:" << milliSec << "ms" << std::endl;
見て分かるようにちょとしたテスト用のコードなので大体の時間が正しく出てれば良し。
Windowsではclock()という関数でlong値(time_t値)で経過ミリ秒が取得されるので何も難しくなかった。
Linuxではclock_gettime()という関数にtimespecという構造体を渡して経過時間をセットする。
timespecではtv_secには秒が入り、tv_nsecにはナノ秒が入る。
よく分かんなかったが、何秒+何ナノ秒というように合算するものらしい(ナノ秒部分は1秒に達すると0に戻る)。
秒は1000を掛け、ナノ秒は下位6桁を切り捨て、足し合わせてミリ秒にしている。
終了時刻から開始時刻を引いて経過時間を出力する。

The Medallion

メダリオン」見ました。
ザ・時間の無駄
ハムナプトラ系エンタテインメントアクション映画?。
消えゆくボン休みを惜しみつつ2時間を無為に過ごすには悪くない映画。
しかもジャッキーチェン。計算された詰将棋みたいなアクションが気持良い。
時間の無駄なの分かってんのに見るの止められないんだがw。
自分馬鹿。ザ・馬鹿。
きっと冒険野郎マクガイバーとか好きな人は見ると良いです。
でも消えゆくボン休みを惜しむならBSでやってる諏訪湖花火大会のライブ中継の方が良いかも知れません。

2014/08/18

Post-Bon vacation syndrome

ポストボンバケブルーですよ(盆休みが終わってブルーな気持ちのこと)
今日の朝なんか電車から雑居ビル群を眺めながら、「みんないろんなことを我慢して朝から晩までやりたくもない仕事をしている。その見返りとしてこの街が維持されているんだ。でもこんな汚い街無くなっても良いし。昨日見たダッシュ島みたいに木を切ったり農作業したりして過ごしたい」とか思っちゃったし
先進国のインフラの便利さとか日常生活の安全さとかを享受するのと引換なとこはあるけど。

2014/08/01

Purge all packages marked as "rc"

"dpkg -l" するとrcにマークされているパッケージが沢山あるのに気が付いた。
一気にpurgeしたいなぁと思ったがもちろんそんなこと出来ない。
そういううまい方法無いかなーと思ったらあった。ニッチだけど素晴らしい。

Cleanup Unused Package Configs(http://www.adercon.com/ac/node/95)より
──
A very useful script to cleanup (purge) package remnants (e.g. config files associated with packages).
$ apt-get purge `dpkg --get-selections | grep deinstall | cut -f1`
The script will give you a prompt of what it is going to purge prior to purging.
──

Debian Linuxのパッケージ管理の話。
Linuxは幅広いのでアレコレ手を出さず一種類だけ使うようにしている。一通り使ってみてなんとなくだが選んだのがDebianなのでそれ以来デビアン一筋。
デビアンはaptでパッケージ管理をする。他にdebとかdpkgとかもあるが、ここもやはり手を広げないでaptだけで済ませている(今のところLinuxスペシャリストになりたいんじゃなくて個人で使えて遊べれば十分だから)。

aptのパッケージのアンインストールは設定ファイルを残してアンインストールする
apt-get remove <package名>
と、設定ファイルごとアンインストールする
apt-get purge <package名>
がある。
また、依存関係のあるパッケージを纏めてアンインストールしてくれる
apt-get autoremove <package名>
というのもあり、すっきりして便利なので実際はこのautoremoveを使うことが多い。

しかし何か大きなライブラリをインストールするとそれに依存する細かいライブラリも大量にインストールされ、それを"apt-get autoremove <package名>"とすると設定ファイルが大量に残ってしまった。
で大量に残った設定ファイルだけのパッケージを一個ずつpurgeするのは大変。
そこで設定だけ残ってしまったパッケージを全部まとめてpurgeしてしまうコマンドが上記の、
apt-get purge `dpkg --get-selections | grep deinstall | cut -f1`
だ。
コマンドをパイプで繋ぐというのがコマンドラインの便利機能らしいが実はこれがすごく苦手なので一個ずつ解読する。
apt-get purgeは上述の通り。
dpkg --get-selectionsはパッケージがinstallなのかdeinstall(アンインストール済み)か表示する。
grep deinstallでその結果からdeinstall(アンインストール済み)のものを抜き出し、
cut -f1でその1つ目のフィールド、つまりパッケージ名だけ抜き出す。
でこれらを上記のように連結すると、アンインストール済みのパッケージ名だけがリストアップされ、それらすべてに"apt-get purge"が実行されるということだ。

こういうLinuxのシェルスクリプトとかWindowsのバッチファイルとかは使わなきゃ使わないでなんとかなってしまうことが多い。
でもコンピュータを操作する上では、これらをすらすら書けるってのはプログラムが書けるとかよりずっと実用的だ。

ちなみにこれも無料VPS、Host1Freeでやったことだ。まさに今日、8月1日、Host1FreeはHaphostという名前にリニューアルしたらしい。公式サイトのモノアイのロボットが可愛いよ?
名前が変わっても無料で遊ばせてもらってるので宣伝。
>Haphostで動いているサイト
サーバがドイツにあり、RTTが260ms程なのでどうしてもファイル転送などスループットが遅い。