〜2014年5月上旬〜
-drawで円が描けるのでそれを利用して切り抜く。
% convert bakeneko-eban-twitter.png \ \( +clone -threshold -1 -negate -fill white -draw "circle 150,150 150,0" \) \ -alpha off -compose copy_opacity -composite bakeneko-eban-twitter-circle.png
こんな感じ。
circleの引数はちょっと変わっていて、
中心と半径ではなく中心と半径分離れた1点を指定する。
つまり指定のしかたはいくつもある。
ベジェ曲線とか使うまでもなく、そのものずばりのroundrectangleが使える。
% convert bakeneko-eban-twitter.png \ \( +clone -threshold -1 -negate -fill white -draw "roundrectangle 0,0 300,300 50,50" \) \ -alpha off -compose copy_opacity -composite bakeneko-eban-twitter-rr.png
引数は左上、右下、x半径,y半径。
というわけでこれにするか。
この猫自体は 化け猫アイコンメーカーで作った。
Smart J:COM BOXで赤外線リモコンを使うにはRFリモコンのペアリングを切ればいい。
チャンネルボタンの▽ボタンと音量の[-]ボタンを 同時に3秒以上押したままにする 2 ボタンが 4 回点滅したらボタンから指を離す
で、学習型リモコンは1000円程度(UMA-PLRM02)の安いのでok。
1個1個全部設定するのは面倒だけど1回だけなので。
というわけで快適になった。
まあ1年保てば御の字かな。
RFリモコンへ戻すにはペアリングさせる。
各種設定-各種設定-STB設定-設置設定-RFリモコン設定-RFリモコン-新規接続
を押してチャンネルボタンの△ボタンと音量の[+]ボタンを3秒以上押せばok。
これでRFリモコンも赤外線リモコンも使える状態になる。
追いかけ再生してても録画が終了すると問答無用でスタンバイになる。
でもDLNAで別な番組を再生しているとスタンバイにならない。
しかもそのDLNA再生を終了するとスタンバイになる。
続きから再生ができるようになったのでスタンバイになってもあまり問題にならないが。
そういえば続きから再生は最初からとどちらかが選べるようになってるが、
放置すると続きから再生される。
いま何処を再生中かが全然わからないのも気になる。
一時停止とかすればプログレスバーのようなものが出るが、だいたいの位置しかわからない。
いまのところ唯一正確な位置がわかるのはandroidアプリのリモコンだけだな。
追記(5/6): 問答無用でスタンバイになるときは位置を覚えてくれないようだ。残念。
東京アメッシュの降雨量の画像から丸く切り抜くことができればその後の処理がやりやすい。
ameshd: 東京アメッシュをポーリングして通知というプログラムがあるがGaucheで書かれていてちょっといじりにくい。
できればもっと簡単にしたい。
やってることは半径20km圏内の雨の強さと降っている範囲みたいなものから通知するという感じだ。
そのためにgifをrgb形式に変換し凡例の8つのレベルを割り出している。
この部分はconvertで
XPM形式に変換すると楽だ。たかだか10色程度しかないので1画素1文字で表現できる。
% convert http://tokyo-ame.jwa.or.jp/mesh/000/201405052220.gif \ \( +clone -threshold -1 -negate -fill white -draw "circle 462,144 462,215" \) \ -alpha off -compose copy_opacity -composite -trim tmp.xpm
中心は大宮駅にした。あとはawkでレベルに変換してしまえばよさげ。ここも1画素1レベルにできる。
BEGIN {
colors["black"] = 0
colors["#000001"] = 0
colors["None"] = 0
colors["#CCFFFF"] = 1
colors["#6699FF"] = 2
colors["#3333FF"] = 3
colors["green"] = 4
colors["yellow"] = 5
colors["#FF9900"] = 6
colors["magenta"] = 7
colors["red"] = 8
}
NR == 5, /pixels/ {
sub(/",/, "", $3)
levels[substr($0, 2, 1)] = colors[$3]
}
length > 70 {
n = split(substr($0, 2, length - 3), a, "")
for (i = 1; i <= n; i++) {
level = levels[a[i]]
sum += level
if (max < level)
max = level
}
}
END {
print "level:", max+0, "sum:", sum
}
境界あたりに微妙な差があるようでsumの値はちょっと違うがまあだいたいこんなもんだろう。
ameshdでmaxが0なのにsumが0じゃないときがあるのがよくわからない。
実際にいま雨が降ってきたのでその様子を。
% convert http://tokyo-ame.jwa.or.jp/mesh/000/201405060235.gif \
\( +clone -threshold -1 -negate -fill white -draw "circle 462,144 462,215" \) \
-alpha off -compose copy_opacity -composite -trim xpm:-
/* XPM */
static char *xpm__[] = {
/* columns rows colors chars-per-pixel */
"143 143 4 1 ",
" c black",
". c #000001",
"X c #CCFFFF",
"o c None",
/* pixels */
"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................ooooooooooooooooooooooooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooooooooooooooooooooooo...............................................oooooooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooooo.....................................................ooooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooo.........................................................ooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooo.............................................................ooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooo.................................................................ooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooo.....................................................................ooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooo.........................................................................ooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooo.............................................................................ooooooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooooooo...............................................................................oooooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooooo...................................................................................oooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooo.....................................................................................ooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooo.......................................................................................oooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooo...........................................................................................oooooooooooooooooooooooooo",
"ooooooooooooooooooooooooo.............................................................................................ooooooooooooooooooooooooo",
"oooooooooooooooooooooooo...............................................................................................oooooooooooooooooooooooo",
"ooooooooooooooooooooooo.................................................................................................ooooooooooooooooooooooo",
"oooooooooooooooooooooo...................................................................................................oooooooooooooooooooooo",
"ooooooooooooooooooooo.....................................................................................................ooooooooooooooooooooo",
"oooooooooooooooooooo.......................................................................................................oooooooooooooooooooo",
"ooooooooooooooooooo.........................................................................................................ooooooooooooooooooo",
"oooooooooooooooooo...........................................................................................................oooooooooooooooooo",
"ooooooooooooooooo.............................................................................................................ooooooooooooooooo",
"oooooooooooooooo...............................................................................................................oooooooooooooooo",
"ooooooooooooooo.................................................................................................................ooooooooooooooo",
"ooooooooooooooo.................................................................................................................ooooooooooooooo",
"oooooooooooooo...................................................................................................................oooooooooooooo",
"ooooooooooooo.....................................................................................................................ooooooooooooo",
"oooooooooooo.......................................................................................................................oooooooooooo",
"oooooooooooo.......................................................................................................................oooooooooooo",
"ooooooooooo.........................................................................................................................ooooooooooo",
"oooooooooo...........................................................................................................................oooooooooo",
"oooooooooo...........................................................................................................................oooooooooo",
"ooooooooo.............................................................................................................................ooooooooo",
"ooooooooo.............................................................................................................................ooooooooo",
"oooooooo...............................................................................................................................oooooooo",
"oooooooo...............................................................................................................................oooooooo",
"ooooooo.................................................................................................................................ooooooo",
"ooooooo.................................................................................................................................ooooooo",
"oooooo...................................................................................................................................oooooo",
"oooooo...................................................................................................................................oooooo",
"ooooo.....................................................................................................................................ooooo",
"ooooo.....................................................................................................................................ooooo",
"oooo.......................................................................................................................................oooo",
"oooo.......................................................................................................................................oooo",
"oooo.......................................................................................................................................oooo",
"ooo.........................................................................................................................................ooo",
"ooo.........................................................................................................................................ooo",
"ooo.........................................................................................................................................ooo",
"oo...........................................................................................................................................oo",
"oo...........................................................................................................................................oo",
"oo...........................................................................................................................................oo",
"oo...........................................................................................................................................oo",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"..XXX...........XXX............................................................................................................................",
"oXXXXXX........X.X.............................................................................................................................",
"oXXXX..........................................................................................................................................",
"oXXXXXXX.......................................................................................................................................",
"oXXXXXXXXXX....................................................................................................................................",
"oXXXXXX.XX..X..................................................................................................................................",
"oXXXXXXXXX.....................................................................................................................................",
"XXXXXXX.X......................................................................................................................................",
"XXXX...........................................................................................................................................",
"XXX............................................................................................................................................",
"X..............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"...............................................................................................................................................",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"o.............................................................................................................................................o",
"oo...........................................................................................................................................oo",
"oo...........................................................................................................................................oo",
"oo...........................................................................................................................................oo",
"oo...........................................................................................................................................oo",
"ooo.........................................................................................................................................ooo",
"ooo.........................................................................................................................................ooo",
"ooo.........................................................................................................................................ooo",
"oooo.......................................................................................................................................oooo",
"oooo.......................................................................................................................................oooo",
"oooo.......................................................................................................................................oooo",
"ooooo.....................................................................................................................................ooooo",
"ooooo.....................................................................................................................................ooooo",
"oooooo...................................................................................................................................oooooo",
"oooooo...................................................................................................................................oooooo",
"ooooooo.................................................................................................................................ooooooo",
"ooooooo.................................................................................................................................ooooooo",
"oooooooo...............................................................................................................................oooooooo",
"oooooooo...............................................................................................................................oooooooo",
"ooooooooo.............................................................................................................................ooooooooo",
"ooooooooo.............................................................................................................................ooooooooo",
"oooooooooo...........................................................................................................................oooooooooo",
"oooooooooo...........................................................................................................................oooooooooo",
"ooooooooooo.........................................................................................................................ooooooooooo",
"oooooooooooo.......................................................................................................................oooooooooooo",
"oooooooooooo.......................................................................................................................oooooooooooo",
"ooooooooooooo.....................................................................................................................ooooooooooooo",
"oooooooooooooo...................................................................................................................oooooooooooooo",
"ooooooooooooooo.................................................................................................................ooooooooooooooo",
"ooooooooooooooo.................................................................................................................ooooooooooooooo",
"oooooooooooooooo...............................................................................................................oooooooooooooooo",
"ooooooooooooooooo.............................................................................................................ooooooooooooooooo",
"oooooooooooooooooo...........................................................................................................oooooooooooooooooo",
"ooooooooooooooooooo.........................................................................................................ooooooooooooooooooo",
"oooooooooooooooooooo.......................................................................................................oooooooooooooooooooo",
"ooooooooooooooooooooo.....................................................................................................ooooooooooooooooooooo",
"oooooooooooooooooooooo...................................................................................................oooooooooooooooooooooo",
"ooooooooooooooooooooooo.................................................................................................ooooooooooooooooooooooo",
"oooooooooooooooooooooooo...............................................................................................oooooooooooooooooooooooo",
"ooooooooooooooooooooooooo.................................X...........................................................ooooooooooooooooooooooooo",
"oooooooooooooooooooooooooo...........................................................................................oooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooo.......................................................................................oooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooo.....................................................................................ooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooooo...................................................................................oooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooooooo...............................................................................oooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooo.........................................XX..................................ooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooo...........................XXXX.......XX.................................ooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooo........................XXXXX...X..XX................................ooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooo.....................XXXXX........X..............................ooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooo..................XXXXX.......X..............................ooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooo..............XX.XXX.....................................ooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooooo............XX..X....................................ooooooooooooooooooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooooooooooooooooooooooo.............X.............X...................oooooooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................ooooooooooooooooooooooooooooooooooooooooooooooooooo",
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"
};
Google Geocoding APIで簡単にいけるようで。
% curl -s 'http://maps.google.com/maps/api/geocode/json?sensor=false&address=埼玉大宮駅'
{
"results" : [
{
<中略>
"formatted_address" : "Omiya Station, Nishikicho, Omiya Ward, Saitama, Japan",
"geometry" : {
<中略>
"location" : {
"lat" : 35.906295,
"lng" : 139.623999
},
<中略>
},
"types" : [ "train_station", "transit_station", "establishment" ]
}
],
"status" : "OK"
}
% curl -s 'http://maps.google.com/maps/api/geocode/json?sensor=false&address=埼玉大宮駅' |\
jq '.results[0].geometry.location'
{
"lng": 139.623999,
"lat": 35.906295
}
大宮駅だけだと他にもある場合もあるので埼玉をつけている。
このあたりは適当でも流石Googleということでちゃんと検索してくれるようだ。
正確に自分の家の住所を入れればもちろんちゃんとした値になる。
これで昨日の東京アメッシュの入力値が得らえる。
大宮駅は京都にもあるんだね。
% curl -s 'http://maps.google.com/maps/api/geocode/json?sensor=false&address=大宮駅' |\
jq '.results[]|[.formatted_address,.geometry.location]'
[
"Omiya Station, Nishikicho, Omiya Ward, Saitama, Japan",
{
"lng": 139.623999,
"lat": 35.906295
}
]
[
"Omiya Station, Shijoomiyacho, Shimogyo Ward, Kyoto, Kyoto Prefecture, Japan",
{
"lng": 135.748756,
"lat": 35.003587
}
]
jqを使うとこのあたりの抽出は楽だ。
今年もinetdからのご請求の季節がやってきた。相変わらずsubjectは"[inetd]ご請求"だ。
消費増税で9800円から10080円に。
% echo $[9800/1.05*1.08] 10080.
あたりまえだが合ってる。
こんな感じで。
convert: unable to read font `/usr/share/fonts/TTF/arial.ttf' @ error/annotate.c/RenderFreetype/1120.
たしかにそんなファイルどころか/usr/share/fonts/すら存在しない。
arial.ttfはwindows自身が持ってるので、もう適当に
% mkdir -p /usr/share/fonts % ln -s c:/Windows/Fonts /usr/share/fonts/TTF
としてお茶を濁した。
昨日の件はぐぐると
mkdir /usr/share/fonts/TTF ln -s /cygdrive/c/Windows/Fonts/arial.ttf /usr/share/fonts/TTF/
という解もありそうだが、これだとarial.ttfだけ救うことになるのであまり得策ではない。
昨日のように設定すればWindowsのfonts全部がフルパスじゃなくて名前で使えるようになる。
% convert -list font
で指定できるフォントがリストされる。
Font: MS-ゴシック-標準
family: MS ゴシック
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/TTF/msgothic.ttc
Font: MS-明朝-標準
family: MS 明朝
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/TTF/msmincho.ttc
Font: MS-Pゴシック-標準
family: MS Pゴシック
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/TTF/msgothic.ttc
Font: MS-P明朝-標準
family: MS P明朝
style: Normal
stretch: Normal
weight: 400
glyphs: /usr/share/fonts/TTF/msmincho.ttc
このFont:の行に書かれている名前を指定すればok。
% convert -size 100x100 -pointsize 48 -font MS-明朝-標準 label:あ a.png
minttyはUTF-8にして使ってるけど問題ないようだ。
東京アメッシュではz-indexで3枚の画像を合成している。
map000.jpgとmsk000.pngとYYmmddHHMM.gifだ。
何の意味があるのか知らないがjpegとpngとgifと全部別になっている。
合成するのはconvertで簡単にできる。
% convert \ http://tokyo-ame.jwa.or.jp/map/map000.jpg \ http://tokyo-ame.jwa.or.jp/map/msk000.png -composite \ http://tokyo-ame.jwa.or.jp/mesh/000/201405102300.gif -composite \ compo.png
こんな感じでok。実際の雨量画像は5分ごとに12時間分だけ保存されている。
また
mesh_index.jsを見れば最新のタイムスタンプがわかる。
% curl -s http://tokyo-ame.jwa.or.jp/scripts/mesh_index.js | sed 's/,/,\n/g' Amesh.setIndexList(["201405110205", "201405110200", "201405110155", "201405110150", "201405110145", "201405110140", "201405110135", "201405110130", "201405110125", "201405110120", "201405110115", "201405110110", "201405110105", "201405110100", "201405110055", "201405110050", "201405110045", "201405110040", "201405110035", "201405110030", "201405110025", "201405110020", "201405110015", "201405110010", "201405110005"]); % curl -s http://tokyo-ame.jwa.or.jp/scripts/mesh_index.js | sed 's/^[^"]*"\|".*\|\r//g' 201405110205
現在の時刻から計算してもいいが、実際は更新されるまで1分ぐらいかかるので、
このファイルを見るのが確実。