〜2014年11月下旬〜
以前のバージョンではcurlとgrepとtailを使っていたが、
% curl -sLI t.co/mRJEGu6T | grep Location: | tail -1 Location: http://support.microsoft.com/kb/2564553
curlだけでいけるとわかった。
% curl -sLI t.co/mRJEGu6T -w '%{url_effective}\n' -o /dev/null http://support.microsoft.com/kb/2564553
こっちのほうが長いが。
いろいろjqゴルフに挑戦したけど、入力がある場合は-sがないと無理っぽい。
% seq 10|jq -R -r -c 'split("\n")' ["1"] ["2"] ["3"] ["4"] ["5"] ["6"] ["7"] ["8"] ["9"] ["10"] % seq 10|jq -R -r -s -c 'split("\n")' ["1","2","3","4","5","6","7","8","9","10"]
この違い。というわけで-sもつけてください。
jqでできるのかとやってみるとできた。
% jq -s -R -r 'split("\n")|map(split(" "))|group_by(.[0])|.[]|min_by(.[2]|tonumber)|join(" ")' saitamashi-201411.log 2014-11-01 21:10 14.5 2014-11-02 06:40 13.1 2014-11-03 23:50 10.0 2014-11-04 06:20 8.2 2014-11-05 04:10 8.6 2014-11-06 07:10 13.1 2014-11-07 21:10 13.2 2014-11-08 04:30 9.0 2014-11-09 10:20 12.2 2014-11-10 23:40 10.2 2014-11-11 01:50 10.1 2014-11-12 22:40 9.6 2014-11-13 23:10 6.6 2014-11-14 04:40 2.7 2014-11-15 06:00 2.4 2014-11-16 05:50 5.5 2014-11-17 06:40 3.8 2014-11-18 01:30 5.6 2014-11-19 24:00 4.3 2014-11-20 03:20 2.4 % sort -k1,1 -k3,3n saitamashi-201411.log | awk '!a[$1]++' 2014-11-01 21:10 14.5 2014-11-02 06:40 13.1 2014-11-03 23:50 10.0 2014-11-04 06:20 8.2 2014-11-05 04:10 8.6 2014-11-06 07:10 13.1 2014-11-07 21:10 13.2 2014-11-08 04:30 9.0 2014-11-09 10:20 12.2 2014-11-10 23:40 10.2 2014-11-11 01:50 10.1 2014-11-12 22:40 9.6 2014-11-13 23:10 6.6 2014-11-14 04:40 2.7 2014-11-15 06:00 2.4 2014-11-16 05:50 5.5 2014-11-17 06:40 3.8 2014-11-18 01:30 5.6 2014-11-19 24:00 4.3 2014-11-20 03:20 2.4
ちゃんと同じになった。
jqでやってることをrubyで表現するとこんな感じだ。
% ruby -e 'puts $<.map(&:split).group_by{|x|x[0]}.map{|x|x[1].min_by{|y|y[2].to_f}*" "}' saitamashi-201411.log 2014-11-01 21:10 14.5 2014-11-02 06:40 13.1 2014-11-03 23:50 10.0 2014-11-04 06:20 8.2 2014-11-05 04:10 8.6 2014-11-06 07:10 13.1 2014-11-07 21:10 13.2 2014-11-08 04:30 9.0 2014-11-09 10:20 12.2 2014-11-10 23:40 10.2 2014-11-11 01:50 10.1 2014-11-12 22:40 9.6 2014-11-13 23:10 6.6 2014-11-14 04:40 2.7 2014-11-15 06:00 2.4 2014-11-16 05:50 5.5 2014-11-17 06:40 3.8 2014-11-18 01:30 5.6 2014-11-19 24:00 4.3 2014-11-20 03:20 2.4
100円ショップで買ったものなんで期待してなかったが、
カッターナイフで雑誌を分割してたら妙な感触がしてすぱっと切れていた。
よく見てみるといろんなところが穴だらけだった。
やっぱシートまな板じゃちょっと強度的にまずいようで。
A4の工作マットは結構強いがA4の雑誌を分割するときはもう少し大きくないとなあ。
まな板が丁度いい大きさだったんだが。今度は厚めのを買うか。
APIを使って外部から操作するのがいいんじゃないかとLDR APIについて調べていたら、
公式のドキュメントが存在しないことが判明。
ソースを見て有志の方がまとめているようで。
それはそれとして個々の記事を既読にする方法がなかった。
そういえばLDRはWebのUIもフィードごとに既読だもんなあ。
いつのまにかリストビューでfeed dateが表示されなくなった。
設定をいじくりまくったら、カラムビューのときだけ表示されることがわかった。
これだと縦に分割されるからせせこましいんだよなあ。feed dateの設定は見つからない。
なぜかVu<SPC>だと「ウ゛」になってしまう。
年に1度ぐらいしか困らないが、入力したいときはいちいちvuでぐぐってコピペしてたり。
直接~/.skk-uim-jisyoに書けばいいのか。
~/.uimは効いてるんだか効いてないんだかよくわからない。
jqにはslurpモードというのがある。
--slurp/-s: Instead of running the filter for each JSON object in the input, read the entire input stream into a large array and run the filter just once.
これが結構強力で、たとえばこんなよくある合計をもとめる計算も簡単にできてしまう。
% seq 10 | awk '{sum+=$0}END{print sum}' 55 % seq 10 | jq -c . 1 2 3 4 5 6 7 8 9 10 % seq 10 | jq -s -c . [1,2,3,4,5,6,7,8,9,10] % seq 10 | jq -s add 55
--raw-input(-R)と組み合わせると、全入力を1つの文字列として扱う。
あとはもうなんでもありなのでどんな入力でも扱えることになる。
つまりcodegolf用の言語としても結構優秀なのである。
% seq -f 'foo %g' 10 foo 1 foo 2 foo 3 foo 4 foo 5 foo 6 foo 7 foo 8 foo 9 foo 10 % seq -f 'foo %g' 10 | jq -s -R -c . "foo 1\nfoo 2\nfoo 3\nfoo 4\nfoo 5\nfoo 6\nfoo 7\nfoo 8\nfoo 9\nfoo 10\n"
講談社ノベルズ版のP84の件を確かめてみる。
A,E,H,R,T。この文字でできるすべての文字列は?
% goruby -e 'puts "AEHRT".pe.len' 120
地球は何番目?
% goruby -e 'puts "AEHRT".pe.ind("EARTH")+1' 28
55番目は?
% goruby -e 'puts "AEHRT".pe[55-1]' HEART
基本的にstartは含まれるが、endは含まれない。
だからrange(0:10)と書いたら0から9までを意味する。
.[0:10]も同じ。
The .[10:15] syntax can be used to return a subarray of an array or substring of a string. The array returned by .[10:15] will be of length 5, containing the elements from index 10 (inclusive) to index 15 (exclusive). Either index may be negative (in which case it counts backwards from the end of the array), or omitted (in which case it refers to the start or end of the array).
つまり[1,2,3,4][0:-1]と書くと-1は含まれないので[1,2,3]になる。
じゃあ4まで含めたいときはどうするかというと[1,2,3,4][0:]のよう省略する。
そこに負の値で変数を使って連続的に扱うときにすごく困る。