〜2015年5月下旬〜
この組み合わせでコピペがなぜかできなくなる。
デスクトップPCのWindows7をSynergyのサーバにする。
VirtualBox上のUbuntuを立ち上げる。
ノートPCのWinodws7をSynergyのクライアントにする。
ここまでは全然問題ない。
会議にノートPCを持ってくついでにデスクトップPCをLockする。
するとノートPCでなぜかコピペできなくなる。
いやあ、この組み合わせを特定するのに2ヶ月かかった。
解決してないがコピペできないと仕事にならないことがよくわかった。
torneで字幕を出してるとJ:COMでも出したくなるわけだが仕様が違う。
torneだと一度字幕ONにするとその後はずっとONになるが、
J:COMではその再生中だけで停止したら解除される。
あとなぜか一時停止中もある程度時間が経つとOFFになる。
これはいったい何の意味があるのか。
再生するとONになるので特に問題ないが、
わざわざOFFにする機能を入れた理由が気になる。
M-ONで字幕出すと歌詞が見られるのですげー便利なのだ。
よく$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
ループ組んで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
やっぱ気になったので%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になる。かなりすっきりした。
先日Cygwinを更新してからkeychainがなんかおかしい。
警告吐いて毎回パスフレーズを要求する。
* keychain 2.7.1 ~ http://www.funtoo.org * Found existing ssh-agent: 6284 * Warning: Can't determine fingerprint from the following line, falling back to filename <中略> Enter passphrase for /home/eban/.ssh/id_dsa:
こうなるとkeychainを使ってる意味がないので調べてみた。
OpenSSH 6.8のリリースノートによるとfingerprintの仕様が変更されていた。
* Add FingerprintHash option to ssh(1) and sshd(8), and equivalent command-line flags to the other tools to control algorithm used for key fingerprints. The default changes from MD5 to SHA256 and format from hex to base64. Fingerprints now have the hash algorithm prepended. An example of the new format: SHA256:mVPwvezndPv/ARoIadVY98vAC0g+P/5633yTC4d/wXE Please note that visual host keys will also be different.
この影響でfingerprintが認識できなくなったようで。
[Solved] OpenSSH 6.8p1-1 and keychain: can't determine fingerprint
このパッチを入れるか、最新版を取ってくればよさげ。
2時間ぐらい待っても
ステージ 3/3 Windowsを構成するための準備中 コンピュータの電源を切らないでください。
と表示されたまま進まないので、
このメッセージでぐぐってみたらそのものずばりのページにヒットした。
KB2533552 の修正プログラムと...
すでに完了してるので、CTRL+ALT+DELでログオンすればokとのこと。
2時間も待たなくても。
あんなに凝らなくても、バックグラウンドで動かせば結構正確に起動できるのであった。
待つのが面倒なので2秒で。
% repeat 10 (date +"%F %T.%3N"&sleep 2) 2> /dev/null 2015-05-29 00:01:11.890 2015-05-29 00:01:13.895 2015-05-29 00:01:15.900 2015-05-29 00:01:17.905 2015-05-29 00:01:19.910 2015-05-29 00:01:21.915 2015-05-29 00:01:23.920 2015-05-29 00:01:25.925 2015-05-29 00:01:27.931 2015-05-29 00:01:29.936
なんだかんだで5msecぐらいオーバーヘッドがあるようで1.995にすると完璧だ。
% repeat 10 (date +"%F %T.%3N"&sleep 1.995) 2> /dev/null 2015-05-29 00:04:30.114 2015-05-29 00:04:32.115 2015-05-29 00:04:34.114 2015-05-29 00:04:36.115 2015-05-29 00:04:38.115 2015-05-29 00:04:40.115 2015-05-29 00:04:42.115 2015-05-29 00:04:44.115 2015-05-29 00:04:46.115 2015-05-29 00:04:48.115
まあ、これは他に重い処理が走ったらすぐ破綻するが。
久し振りにFedoraをインストールしたらすでにDNFな世界だった。
[eban@fedora ~]$ sudo yum install nawk [sudo] password for eban: Yum command has been deprecated, redirecting to '/usr/bin/dnf install nawk'. See 'man dnf' and 'man yum2dnf' for more information. To transfer transaction metadata from yum to DNF, run: 'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate' エラー: Failed to synchronize cache for repo 'fedora' from <以下略>
yum自身はすでにwrapperになっていてメッセージを吐いてdnfを起動するようになっている。
だから/etc/yum.confでproxy設定をしても意味がなく/etc/dnf/dnf.confを書き換えないといけない。
最初はRubyとかで考えていたのをそのまま忠実に置き換えていたもんだから、長い上に非常に遅かった。
% for i in {+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}; do a=$(echo $i|grep -o .|paste <(seq 9) - |\ sed ":;s/[.\t\n]//g;N;b");echo "$a = $[$a]";done|grep "= 100" 1+2+3-4+5+6+78+9 = 100 1+2+34-5+67-8+9 = 100 1+23-4+5+6+78-9 = 100 1+23-4+56+7+8+9 = 100 12+3+4+5-6-7+89 = 100 12+3-4+5+67+8+9 = 100 12-3-4+5-6+7+89 = 100 123+4-5+67-89 = 100 123+45-67+8-9 = 100 123-4-5-6-7+8-9 = 100 123-45-67+89 = 100 for i in {+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}{+,-,.}; do; a= ; 0.67s user 2.55s system 11% cpu 27.990 total grep "= 100" 0.00s user 0.28s system 1% cpu 27.989 total
それを1から9の間に自分で挟むことで対応。短いし一瞬で終わるのであった。
% for i in 1{+,-,}2{+,-,}3{+,-,}4{+,-,}5{+,-,}6{+,-,}7{+,-,}8{+,-,}9; do echo "$i = $[$i]";done | grep "= 100" 1+2+3-4+5+6+78+9 = 100 1+2+34-5+67-8+9 = 100 1+23-4+5+6+78-9 = 100 1+23-4+56+7+8+9 = 100 12+3+4+5-6-7+89 = 100 12+3-4+5+67+8+9 = 100 12-3-4+5-6+7+89 = 100 123+4-5+67-89 = 100 123+45-67+8-9 = 100 123-4-5-6-7+8-9 = 100 123-45-67+89 = 100
ゴルフするとこんな感じだ。
% bash -c 'for i in '$(seq -s "{+,-,}" 9)';{ echo "$i = $[$i]";}|grep \ 100' 1+2+3-4+5+6+78+9 = 100 1+2+34-5+67-8+9 = 100 1+23-4+5+6+78-9 = 100 1+23-4+56+7+8+9 = 100 12+3+4+5-6-7+89 = 100 12+3-4+5+67+8+9 = 100 12-3-4+5-6+7+89 = 100 123+4-5+67-89 = 100 123+45-67+8-9 = 100 123-4-5-6-7+8-9 = 100 123-45-67+89 = 100
seq -sでのパターン生成がうまくはまっている。
% seq -s "{+,-,}" 9 1{+,-,}2{+,-,}3{+,-,}4{+,-,}5{+,-,}6{+,-,}7{+,-,}8{+,-,}9
200枚ほどスキャンした画像が置いてあるディレクトリD&Dしてみたら10分ほどかかった。
APIもないしちょっとこれは時間がかかりすぎ。
試しにzipだのpdfだのを試してみたが、ちゃんとスキップされた。
foo.pdfをfoo.gifと名前を変えたらアップロードは成功するが、最終的に中身を見てスキップされる。
つまり複数枚を1つファイルで上げるにはもうGIFアニメぐらいしかない。
というわけでconvertで200ページほどのGIFアニメを作ったら15分もかかった。実に本末転倒だ。
もっと速く作る方法を探ろう。
それはそれとして10ページほどで作ったら全然問題なかったので、
保存するだけなら方向性は間違ってない。いや間違ってるかも。
とりあえずがんがんGoogle Photosへ上げたい。
あっ、mp4へ変換すれば一時停止できるようになるし、読めるか。
いや1080pじゃなあ。