Just another Ruby porter,

〜2013年12月中旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2013-12-11 (Wed)

find -lsは日本語のファイル名があるとなぜか8進数

これどうしたもんかとどうせなら-printfでls -l相当に近づけるべくごにょごにょしてみたが、
秒だけがなぜか小数点以下もつけくれるもんで結構うっとうしい。

% touch あいうえお
% find . -ls
31209908    4 drwxr-xr-x   2 eban     eban         4096 Dec 12 02:17 .
31209910    0 -rw-r--r--   1 eban     eban            0 Dec 12 02:17 ./\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212
% find . -printf '%08s %C+ %p\n'
    4096 2013-12-12+02:17:37.4381328510 .
       0 2013-12-12+02:17:37.4381328510 ./あいうえお

とにかく秒のところにはwith fractional partが決まり文句になっていて、
省略できるのは%Ccだけのようだ。

% find . -printf '%08s %Cc %p\n'
    4096 Thu Dec 12 02:17:37 2013 .
       0 Thu Dec 12 02:17:37 2013 ./あいうえお

サイズとかはhuman readableになるようなオプションはなさげ。


2013-12-12 (Thu)

久し振りに立ち上げたFirefox

使ってないPCを久し振りに起動してFirefoxを立ち上げたら、下段になんかメッセージが出てきた。

お久しぶりです! 
Firefox はしばらく使われていなかったようです。
プロファイルを掃除して新品のようにきれにしますか?
Firefox をリセット(E)...

まあ、使ってないしどうなるか見てみたいのでリセットしてみた。

Firefox を初期状態にリセットしますか?
次のデータが保存されます
  ウィンドウとタブ
  履歴とブックマーク
  保存されているパスワード
  入力フォームの履歴
  Cookie
Firefoxの再起動後、その他のデータは削除されます。
  Firefox をリセット キャンセル

保存じゃなくて逆に何を削除するのか教えて欲しいが、
まあ、それくらい残ってればいいかと続行してリセット。
設定移行ウィザードでもろもろインポートされる。

Firefox のリセット
  Firefox 古いデータを掃除している間、しばらくお待ちください...
おかえり!
Firefox はプロファイルをリセットできました。以下は開いていたウィンドウとタブの一覧です。
これらを復元するか、または白紙の状態で開始できます。

で、どうなったかというと拡張が全部削除された。盲点だった。
なんか清々しい気分だ。安易すぎた。まあ、いいか。


2013-12-13 (Fri)

tenki jpの構造が変わった

divが増えた。そうなると1個tableがずれて前にある同じ構造の10分観測値のほうにぶちあたった。
つまり10分間隔になった。そんな頻度でクロールしないので、正確には10分単位ででたらめな間隔になった。

XPathの

//*[@id="bd-main"]/div[4]/table/tbody/tr[2]

div[4]をdiv[5]にすればいけるが、また増えたら書き換える必要がありなんとかしたいところ。
そもそもこのXPathはGoogle Chromeの要素の検証のElementsタブで右クリックしてCopy XPathしたもの。
これはこれで便利だが、他にも表現できる。

tenki jpのアメダス実況のページには10分観測値と60分観測値がある。
これはtableで、両方ともclass="amedas_table_entries"になっている。
classが違ってれば簡単な話だが、まあ、CSSで共通のスタイルにするという目的なんだから同じで当たり前。
それはそれとして、divの階層ではなくtableのほうで考ると

//table[@class="amedas_table_entries"]/tbody/tr[2]

とも表現可能で、その2つの観測値tableの欲しいところを指すことになる。
あとはYahoo! PipesのTailを使えば後ろの1個だけが抽出可能になる。
一応これで解決した。でもそこもXPathだけでいけるはずだ。
最初は

//table[@class="amedas_table_entries"][last()]/tbody/tr[2]

を試したが、なぜか変わらない。2つ残る。いろいろぐぐってみると優先順位かと思い当たった。

(//table[@class="amedas_table_entries"])[last()]/tbody/tr[2]

ここにカッコが必要。これでTailが不要になった。

divの個数には依存しなくなったが、はたしてどうなることやら。
間隔はでたらめでも情報は増えるし、放置しておいてもよかったのかもしれない。
ちょっとうっとうしいが。


2013-12-14 (Sat)

nasne 2.10 録画された番組のチャプター情報の表示・操作

torneでフラッシュ送りすると情報表示されるが、
そのときに妙な区切りみたいなものが出る番組があることに気づいた。
何が違うのかと思ったらnasneで録った番組だ。 これだな。

■“ナスネ” システムソフトウェア バージョン2.10以上で録画された番組のチャプター情報の表示・操作

“ナスネ” システムソフトウェア バージョン2.10以上で録画された番組のチャプター情報の表示および操作に対応しました。
チャプターが設定されたビデオでは、タイムバーにチャプターマークが表示され、左スティックの左右でチャプタージャンプができます。

これはめちゃめちゃ便利。チャプターと言ってるが、要するにCMスキップなわけで。
今まではリモコンのFLASHとNEXTに違いがなかったが、
やっとNEXTがNEXTとして機能するようなった。

それにしてもなぜnasneだけなのか。


2013-12-15 (Sun)

tenki jp + Yahoo! Pipes + IFTTTの組み合わせ

tenki jpのHTMLからYahoo! PipesとIFTTTと2つ経由してtwitterにつぶやいているので、
たぶんかなり取り零しが起こるんじゃないかと思っていたが、
思ったほど起きない。むしろアメダスRSS本家があった頃よりも更新が速かったりする。
しかも本家は気温、降水量、風向き、風速が別のitemになってたので、
IFTTTで気温しかtwitterにつぶやけなかったが、まとめられるようになった。
なんかいいことづくめのような?

取り零しに関しては本当は最新の1個だけじゃなくて数個RSSに入れとけばいいんだけど、
tableのrowspanのせいでXPathが書けない。これなんとかなるもんかな。


2013-12-16 (Mon)

なぜチャプター情報はnasneだけなのか?

がつぶやいていた。
裏でゲームが動いてるかもしれないからという理由か。
うちのPS3はtorne専用で使ってるからそんな心配いらないんだが。


2013-12-17 (Tue)

tail -1 | awk

最後の行だけawkでなんか処理させたいときはtail -1を呼ばなくても、
END{print $1}のようにEND{}でいける。$0とかNFとかもそのまま保持されている。

mean color of an image

というわけでこれなんだけど、

convert image.jpg -resize 1x1 txt: | tail -1 | awk '{gsub(/[,\)]/," "); print $3+$4+$5}'

tail -1は不要になり

convert image.jpg -resize 1x1 txt: | awk 'END{gsub(/[,\)]/," "); print $3+$4+$5}'

と書ける。が、しかしこれバグってる。

% convert 0000.jpg -resize 1x1 txt:
# ImageMagick pixel enumeration: 1,1,255,srgb
0,0: (219,223,206)  #DBDFCE  srgb(219,223,206)

なんだから、$3が(219になってしまう。ってことは0とみなされる。
/[,(]/にしないとまずい。あとmeanっていうなら3で割るよねえ。

% convert 0000.jpg -resize 1x1 txt: | awk 'END{gsub(/[,(]/," "); print ($3+$4+$5)/3}' 
216

実をいうとconvertにはmeanを計算する機能もある。

% convert 0000.jpg -format "%[mean]" info: 
54798.2
% identify -format "%[mean]" 0000.jpg
54798.2

まあ、結局はidentifyなんだけど、この値は65535がmaxなので

% echo $[54798.2*255/65535]
213.22256809338521

ってことになるが、微妙に結果が違う。そのあたりは-resizeのアルゴリズムに依る。

% convert 0000.jpg txt: | head                                                                 
# ImageMagick pixel enumeration: 590,450,255,srgb
0,0: (180,220, 97)  #B4DC61  srgb(180,220,97)
1,0: (196,225,145)  #C4E191  srgb(196,225,145)
2,0: (133,169, 95)  #85A95F  srgb(133,169,95)
3,0: (118,158, 62)  #769E3E  srgb(118,158,62)
4,0: (111,149, 46)  #6F952E  srgb(111,149,46)
5,0: (130,166, 66)  #82A642  srgb(130,166,66)
6,0: (150,175,109)  #96AF6D  srgb(150,175,109)
7,0: (132,160, 86)  #84A056  srgb(132,160,86)
8,0: (129,164, 70)  #81A446  srgb(129,164,70)
% convert 0000.jpg txt: | awk -F'[(, ]+' 'i++{sum+=$3+$4+$5}END{print sum/(NR-1)/3}'            
213.223

%[mean]はほんとに機械的に平均を計算している。
今回はgsubじゃなくてFSを設定する方法でやってみた。
i++は先頭だけ除くという意味。ああ、意味的には!/^#/のほうがわかりやすいか。


2013-12-18 (Wed)

no-ipから例のお知らせが来ない

この対策でうまくいったのか?
23日後ってのは今となっては意味不明だ。
たぶんその前のメールが23日前だったんだろうと思い、
メールを確認したら30-7ということだった。
30日間有効だけど、更新しないとその7日前に通知が来る。
ってことはあれでうまくいったようだ。
まず適当に127.0.0.1と設定し、続いて本当のIPアドレスを設定する。
これを23日以内で繰り返す。cronの設定は面倒なので1日と16日の月2回にしよう。


2013-12-19 (Thu)

androidでまともにswipeさせる

最近のandroidだとinputコマンドにswipeがあるが、
これを使っても起動時のアンロックがうまくいかない。
そこで定番はgeteventしてsendeventになるが、これが使いにくい。
何しろgeteventした結果をそのままsendeventには使えないから。
16進と10進、余計な:を削除とか。
まあそれは変換すればいいだけだけど、問題はタイミング。
adb shell sendeventじゃ論外に遅いし、android上で直接sendeventを動かしてもやっぱり遅い。
1個のイベントをいちいちコマンド起動してちゃ、まったくもって間に合わない。

そこでこのイベントを一気に食わせる方法があるかとぐぐってみたら、
adb - Android simulate fast swipeを発見した。
なるほど、/dev/input/event?を直接触ればいいんだ。

For example

adb shell
cd /mnt/sdcard
cat /dev/input/event2 > events
Do a few touch screen events, then ctrl-C to kill cat

Now you can play back the captured file of binary events:

cat events > /dev/input/event2

これでばっちりアンロックもできた。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


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

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