Just another Ruby porter,

〜2015年5月中旬〜


<Older(,) | Newer(.)> | Recent(/)>> | RDF

2015-05-11 (Mon)

grcat - read from standard input, colourise it and write to standard output

色の指定を自由に定義できてなかなか楽しい。

% cat date.conf
regexp=(\d\d):(\d\d):(\d\d)
colours=,red,yellow,cyan
% date | grcat date.conf
Mon May 11 22:23:37 JST 2015

groupingの()とcoloursが対応している。


2015-05-12 (Tue)

grcatの設定ファイル

色は複数指定可能で、=とか記号を区切りにすればいい。
たとえばcalで日曜を赤、土曜を青にしたければこんな感じになる。

% cat ~/.grc/conf.cal
regexp=^ ?\d{1,2}
colours=white on_red

===

regexp=\d{1,2}  $
colours=white on_blue
% cal | grcat conf.cal
      May 2015        
Su Mo Tu We Th Fr Sa  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31                    

空白まで色をつけなくていいならこんな感じ。

% cat ~/.grc/conf.cal
regexp=^ ?(\d{1,2})
colours=,white on_red

===

regexp=(\d{1,2})  $
colours=,white on_blue
% cal | grcat conf.cal
      May 2015        
Su Mo Tu We Th Fr Sa  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31                    

なんか見辛い。反転しないで太字で出したほうがいいか。

% cat ~/.grc/conf.cal
regexp=^ ?(\d{1,2})
colours=,red bold

===

regexp=(\d{1,2})  $
colours=,blue bold
% cal -h | grcat conf.cal
      May 2015        
Su Mo Tu We Th Fr Sa  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31                    

2015-05-13 (Wed)

プロセス名を変更する

tmuxのステータスラインにshとかbashとか出ても、 スクリプトなのかよくわからんのでプロセス名を変更する方法を調べみた。 zshだとjobs -Z nameで可能。
ただzshでスクリプトはあんまり書かないのでどうでもいい。
bashでの方法が知りたかったが、
man bashしたらexec -a name fooでいけそう。
でもexecしないといけないわけで、それってwrapperだよな。
ってことはexec -aするだけのwrapperスクリプトを作っておけばいいのか。

#! /bin/bash

name="$1"
shift
exec -a "$name" "$@"

chpname.shと名前をつけた。これを日記を書くスクリプトに適用してみる。

#! /bin/sh
date="${1--12 hour}"
exec chpname.sh nikki vim ~/jarp/diary/$(date -d "$date" +"%Y/d%Y%m%d.hnf")

おお、できた。ちゃんとnikkiと表示されるようになった。


2015-05-14 (Thu)

かなりもっさりしていたJ:COMが蘇った

最近再生直後は反応しなかったり、予約した番組が録画されなかったり、
消せない番組が出てきたり、そもそも遅かったりと、
ひどい症状だったSmart J:COM Boxさんをリセットしてみたら全部解消された。
やっぱ電源ボタン押してOFFにしても動き続けてるんだよね。
起動だけはやたらと速いし。
たぶんシステムアップデートが最近ないので再起動もかからないから、
長時間動き続けてメモリリークといったところか。


2015-05-15 (Fri)

お題「数字を使わずに、1から10まで和を、出力するコードを書いてください」を #シェル芸 で考えてみた

LisperというくらいだからLispでというのが前提にあるんだと思うが、
まあいろんな言語で考えるのも一興。というわけでシェル芸だ。

% echo|awk '{for(;i<length("abcdefghij");)s+=++i;print s}'
55
% id|awk '{for(;i<length("abcdefghij");)s+=++i;print s}'
55
% seq `(cal;id;id)|wc -l`|paste -sd+|bc
55
% seq -s+ `(cal;id;id)|wc -l`|bc       
55
% seq -s+ `echo|od -An -td`|bc  
55
% seq -s+ `echo|od -iAn`|bc
55

となぜかゴルフしてる。
calは8行、idは1行しか出力しないことを前提にしている。
"\n"はASCIIコードで10なのでodでダンプするときに10進にすれば10を得られる。

bashだと{a..j}でa b c d e f g h i jを表わすので10回繰り返しも結構簡単。

$ a= s=;for i in {a..j};do ((s+=++a));done;echo $s                                                  
55

10じゃなくて100とか1000だとこういう方法はなかなか使えないので、
もうちょっと大きいほうがよかったのかもしれない。


2015-05-16 (Sat)

まったりとしたFizzBuzz

Go: 計算なしのFizzBuzz - Qiitaを見て感心したのでbashへ移植。
微調整は10msecじゃ無理だったので100msecで。

#! /bin/bash

if [ -n "$1" ]; then
  while :; do
    sleep $1; echo -n $2 >> fizzbuzz.txt
  done
fi

trap 'trap - SIGTERM && kill 0' SIGINT SIGTERM EXIT

: > fizzbuzz.txt

exec bash $0 3 Fizz &
sleep 0.1
exec bash $0 5 Buzz &
sleep 0.1

for i in {1..100}; do
  sleep 1
  if [ -s fizzbuzz.txt ]; then
    i=
  fi
  cat fizzbuzz.txt
  echo $i
  : > fizzbuzz.txt
done

これは正確に3秒とか5秒間隔にはならないので、数を増やせばそのうち破綻する。


2015-05-17 (Sun)

parallelで使えない文字

日本語のファイル名をつけたPDFをparallelで扱っているとなぜかエラーになる現象にぶちあたった。

% parallel echo ワ{} ::: 1
parallel: Error: Command cannot contain the character �. Use a function for that.

前にもあったので確認してみると「ワ」「ク」あたりが含まれていると起こるようで。

% echo -n ワク | od -tx1  
0000000 e3 83 af e3 82 af
0000006

afが怪しい。e3 81 afで試してみる。

% echo '\xe3\x81\xaf'          
は
m:scan/1505 % parallel echo は{} ::: 1
parallel: Error: Command cannot contain the character �. Use a function for that.

当たっているようだ。そういえばparallelはperlで書かれてたはずなので直接見てみた。

    # Replace replacement strings with {= perl expr =}
    # Protect matching inside {= perl expr =}
    # by replacing {= and =} with \257< and \257>
    for(@command) {
	if(/\257/) {
	    ::error("Command cannot contain the character \257. Use a function for that.\n");
	    ::wait_and_exit(255);
	}
	s/\Q$Global::parensleft\E(.*?)\Q$Global::parensright\E/\257<$1\257>/gx;
    }

\257は\xafなのでまさにこれが原因だ。
どうも内部的に一旦置き換えて処理してるようで回避不可っぽい。
とりあえずxargs -Pでもいけるのでそっちで対処した。


2015-05-18 (Mon)

gsでPDFを画像へ

convert foo.pdf foo.pngすると内部的にgsが起動されるが、
例のやたらと重くなる問題でほとんど使えない。
じゃ直接gsを起動するとどうなるのか?

% gs -q -dNOPAUSE -r300 -dBATCH -sDEVICE=png256 -sOutputFile=%03d.png foo.pdf

ちょっとオプションがうるさいが、処理は速い。
重くもならない。 ページの範囲も -dFirstPage=0 -dLastPage=99 のように指定できるし、
これで十分かも。


2015-05-19 (Tue)

VENOM

さくらからVENOM対応のメールが来た。
VMの再起動が必要になるので放置してさくら側に任せるか自分でやるかだが、
コンパネにも最近ログインしてないのでやってみた。
VPS側はshutdown -h nowしたが停止にならないので、強制的にVMを停止して起動。
これで一応対応完のはず。

奇しくもCPIも同じようなタイミングだった。


2015-05-20 (Wed)

Googleの2段階認証

電話は面倒だと思ってやってなかったけど、タブレットでも可能だと聞いてやっと設定した。
それは1ヶ月ほど前だったが、今日久し振りにThunderbirdでメールを書いたら送れない。
そこで2段階認証を思い出した。ってこれどうするんだ?Thunderbirdは対応してない。
調べてみるとアプリ用に別のアクセスキー的なパスワードを発行せよとのこと。
それをパスワードに使えば2段階認証を回避できる。
簡単にrevokeできるからいいってことか。

cf: アプリ パスワードでログイン - Google アカウント ヘルプ


<Older(,) | Newer(.)> | Recent(/)>> | RDF


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

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