Just another Ruby porter,


5月下旬の日記 | RDF

2015-05-25 (Mon)

今日もきっちり10秒

やっぱ気になったので%3Nが9XXの場合も考慮する。
整数部と小数部を分けて処理するから変なことになるわけで、
msec単位で最初から扱って後から1000で割ればいい。
という方針でzshでやってみた。

% zsh -c 'repeat 6 {a=$[10000-$(date +%S%3N)%10000];a[-3,-4]=.;sleep $a;date +%S.%3N}'
40.002
50.004
00.003
10.005
20.003
30.004

いい感じだ。1000で割るってことは"."を挿入することなので、実際に割らなくてもいい。
しかしこれだとbashでは別の処理が必要になる。そこでbusyboxのusleepだ。
ってほどでもないが、micro sec単位でsleepできる。

% zsh -c 'repeat 6 { busybox usleep $[10000000-$(date +%s%6N)%10000000];date +%S.%3N }'
10.002
20.002
30.002
40.002
50.002
00.002

micro secなので%6Nになる。かなりすっきりした。


2015-05-24 (Sun)

きっちり10秒間隔でコマンドを実行 #シェル芸

ループ組んでsleep 10だけではコマンド実行の時間分だけ加算されてどんどん遅れてしまう。
そこで小数点まで考えてsleepさせる。
GNU coreutilsのdateなら%Nでnano secまで得られるので、
これを組み合わせればいける。

% bash -c 'for i in {1..6};do s=($(date +%S\ %3N));n=$[9-s[0]%10].$[(1000-s[1])%1000];sleep $n;date "+%F %T.%3N";done'
2015-05-25 01:55:00.003
2015-05-25 01:55:10.002
2015-05-25 01:55:20.003
2015-05-25 01:55:30.002
2015-05-25 01:55:40.004
2015-05-25 01:55:50.003

%3Nにすればmsecになる。
ただこれ%3Nが9XXだと小数点が2桁になっちゃうからそのあたりを考慮しないと本当はいけない。
まあ、1回目だけなので気にしない。

% bash -c 'for i in {1..6};do s=($(date +%S\ %3N));n=$[9-s[0]%10].$[(1000-s[1])%1000];sleep $n;date "+%F %T.%3N,$n,${s[1]}";done'
2015-05-25 02:02:10.363,3.40,960
2015-05-25 02:02:20.003,9.636,364
2015-05-25 02:02:30.003,9.995,005
2015-05-25 02:02:40.003,9.996,004
2015-05-25 02:02:50.002,9.995,005
2015-05-25 02:03:00.003,9.996,004

2015-05-23 (Sat)

awkで最初のフィールドを削除

よく$1=""でお茶を濁しがちだが、それだと先頭に区切りが残ってしまいちょっと具合が悪い。

% echo 'a b c' | awk '{$1=""}1'
 b c

そこでsubで消す手が考えられるが、$1にメタな文字があると破綻する。

% echo 'a b c' | awk '{sub("^" $1 " ", "")}1'
b c
% echo '.* b c' | awk '{sub("^" $1 " ", "")}1'
c

エスケープさせるのも面倒。
長さを求めるのは簡単なのでsubstrしちゃう手はある。

% echo '.* b c' | awk '{$0=substr($0,length($1 " ")+1)}1'
b c

それよりはNFを再構築させるという方法が簡単。

% echo '.* b c' | awk '{$1="";$0=$0;$1=$1}1'
b c

$0=$0でNFが再構築されて3から2になり、$1=$1で$0が再構築される。
$1=$1だけでは変化しない。

% echo '.* b c' | awk '{$1=""}1' 
 b c
% echo '.* b c' | awk '{$1="";$0=$0}1'
 b c
% echo '.* b c' | awk '{$1="";$1=$1}1'
 b c
% echo '.* b c' | awk '{$1="";$0=$0;$1=$1}1'
b c

2015-05-22 (Fri)

Smart J:COM Boxの字幕

torneで字幕を出してるとJ:COMでも出したくなるわけだが仕様が違う。
torneだと一度字幕ONにするとその後はずっとONになるが、
J:COMではその再生中だけで停止したら解除される。
あとなぜか一時停止中もある程度時間が経つとOFFになる。
これはいったい何の意味があるのか。
再生するとONになるので特に問題ないが、
わざわざOFFにする機能を入れた理由が気になる。

M-ONで字幕出すと歌詞が見られるのですげー便利なのだ。


2015-05-21 (Thu)

SynergyとVirtualBoxとLock

この組み合わせでコピペがなぜかできなくなる。

デスクトップPCのWindows7をSynergyのサーバにする。
VirtualBox上のUbuntuを立ち上げる。 ノートPCのWinodws7をSynergyのクライアントにする。
ここまでは全然問題ない。
会議にノートPCを持ってくついでにデスクトップPCをLockする。
するとノートPCでなぜかコピペできなくなる。

いやあ、この組み合わせを特定するのに2ヶ月かかった。
解決してないがコピペできないと仕事にならないことがよくわかった。


5月下旬の日記 | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!