Just another Ruby porter,

〜2015年12月下旬〜


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

2015-12-21 (Mon)

プラグが抜けていたことに1ヶ月気づかず

なんか全然充電されないないなとUSB ACアダプタを疑っていたが、
なんとテーブルタップのプラグが抜けたままになっていた。
まさかそんな単純な理由とは。


2015-12-22 (Tue)

Windows7のWindows Updateでログオンしているユーザーがいる場合には自動的に再起動しない

備忘録。
ローカルコンピューターポリシーの[管理用テンプレート]-[Windows コンポーネント]-[Windows Update]
スケジュールされた自動更新のインストールで、ログオンしているーザーがいる場合には自動的に再起動しない
を有効に。


2015-12-23 (Wed)

FirefoxのPocket拡張

43で無効にされちゃったので更新を確認してみたら、新しいバージョンはないようで。
それどころかFirefoxとPocketが統合されてすぐに削除されていた。
これって全然機能が違うので残念な話だ。44になったら完全に使えなくなるな。


2015-12-24 (Thu)

Did you mean?

明日リリース予定のRuby 2.3.0ではdid_you_meanというgem packageがdefaultで有効になる。
こんな感じだ。

% ruby -e 'ptus "hoge"'
-e:1:in `<main>': undefined method `ptus' for main:Object (NoMethodError)
Did you mean?  puts

なかなか賢い。


2015-12-25 (Fri)

Ruby 2.4.0

Ruby 2.3.0がリリースされれば当然のことながらtrunkは2.4.0になるのである。

% ruby -v ruby 2.4.0dev (2015-12-25 trunk 53302) [x86_64-linux]

インストールしたら、もろもろgemを更新しないといけなくなってちょっと後悔した。


2015-12-26 (Sat)

第20回シェル芸勉強会にUstで参加 #シェル芸

例によってUstで参戦。

_ Q1 グループごとの最大数:

最初はfile_{A,B}とか使ったけど、
これじゃC,Dと増えたら破綻するので、
ちゃんとグループをlsから得るようにした。

$ ls | grep -o file_. | uniq | xargs -I@ sh -c 'echo -n "@ ";sort @* | sort -n | tail -n1'
file_A 233333
file_B 9912

短くしてみたら、なんか結局解答例と変わらない結果に。

$ grep ^ * | sed 's/-.:/ /' | sort -k1,1 -k2,2nr | uniq -w6
file_A 233333
file_B 9912

_ Q2 コードを抜き出して実行:

普通にsedで不要な部分をけずってついでにgrep的に。

$ curl -s http://ja.uncyclopedia.info/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8 | sed -n '/^\$ eval/s/\$ //p' | bash

sed -n 's///p' で置換が実行されたときだけ表示できる。

_ Q3 奇数を昇順、偶数を降順:

これもpasteを使うこうなる。

$ paste -d ' ' <(grep '[13579]$' Q3 | sort -n) <(grep '[02468]$' Q3 | sort -rn)

trでやるかpasteのオプションでやるかの違い。

_ Q4 自分以外の端末をkill:

これはzshだと$TTYで参照できるのでちょっと楽。
あと/dev/をけずるよりも足すほうが簡単。

% ps h | awk '"/dev/"$2!=tty&&$0=$1' tty=$TTY | xargs kill -9

_ Q5 最大公約数:

1年前の約分をそのまま流用。

$ echo 1071 1029 | ruby -ane 'p eval$F*".gcd("+")"'
21
$ echo 1071 1029 | awk '{while ($1 = $2 % ($2 = $1));print $2}'
21
$ echo 1071 1029 | (read m n; while ((n=m%(m=n)));do :;done;echo $m)
21

_ Q6 ファイルQ6の中の人の名前について、誰が1列目と2列目の何番めに記述されているかを求めましょう:

これもひねりなし。

$ awk -F' ' '{for(i=1;i<=NF;i++)a[$i]=a[$i]" "i}END{for(i in a)print i a[i]}' Q6
武田 4 2
上田 2 3
吉田 3 1
山田 1 4

_ Q7 魚:

どこかのサイトから拾ってくるというのはお約束なので省略。
jotを使った方法。

$ printf $(jot -s '' -w'\u%x' 395 0x9b5a)

jotは16進でも指定できるんだな。しかし回数指定が面倒。

_ Q8 漢数字:

gemにはzen_to_iってのがあるので。

$ ruby -rzen_to_i -ne 'puts $_.zen_to_i' Q8
5735
4003
45
96233
11
112

sedで変換してbcの場合、一百とかないのでその例外処理をどうするかだけ気をつける。

$ sed 'y/一二三四五六七八九/123456789/;s/十/*10+/;s/百/*100+/;s/千/*1000+/;s/万/*10000+/;s/\(^\|+\)\*/\1/g' Q8 | bc
5735
4003
45
96233
11
112

GNU trはマルチバイト対応してないので、GNU sedを使うしかない。

無理矢理gawkで。

$ gawk '{s=0;for(i=1;$i;i++){j=index("一二三四五六七八九十百千万",$i);if(j>9)s+=k*10^(j-9);else{k=j;i==NF&&s+=j}}}$0=s' FS= Q8
5735
4003
45
96233
31
112

2015-12-27 (Sun)

Zshで直前に実行したコマンドラインを表示する #シェル芸

直前のコマンドラインにハッシュタグ「#シェル芸」をつけてツイートするためのコマンドを作りました。 - くんすとの備忘録
これはbashだけど、aliasの部分をzshに合わせてあげればzshでも使えるようになる。

alias show-current-cmdline='history -p !!'

の部分を

alias show-current-cmdline='fc -ln -1 -1'

とすればok。


2015-12-28 (Mon)

忘年会

馬場のシェーキーズがなんと4月に閉店していた。
事前に柴田さんが察知してなければ途方に暮れるところだった。
というわけで秋葉原のHUBで。
例によって20分ぐらい彷徨った。よく見つかった。よかった。
なんかいろいろ話した。場所が秋葉になったので新しい人も増えた。
家に着いたらヤニ臭くて参った。

@_ko1,@a_matsuda,@eban,@gotoken,@gotoyuzo,@hemge,@hsbt,@nahi,@takkanm


2015-12-29 (Tue)

Zsh repeatの罠

Zshにはrepeatという繰り返し実行できる便利な内部コマンドがある。 でも直感に反する挙動になっている。

% repeat 2 echo a
a
a
% repeat 2 echo a > tmp.txt
% cat tmp.txt
a

なぜか1個しかない。これはつまり

echo a > tmp.txt

を2回実行していることを意味する。
繰り返し実行した結果を保存するには>>を使うか、

% repeat 2 { echo a; } > tmp.txt   
% cat tmp.txt
a
a

のように{}を使う必要あり。
()だとだめ。


2015-12-30 (Wed)

cURLでダウンロードしたい複数のURLをファイルで指定する #シェル芸

wgetなら-iで簡単にできるが、man curlしてもそんなオプションはないように思える。
しかし、-K(--config)の設定ファイルでurlを複数指定すればいける。
-K -とすれば標準入力から設定ファイルを受けつけるので、

% curl -Ls yahoo.co.jp | grep -aPo 'img src="\K.*?\.(png|jpg|gif)(?=")' | sort -u | sed 's/^/-LO\nurl=/' | curl -sK -

とすれば画像を落とせる。

-LO
url=http://k.yimg.jp/images/clear.gif

というような文字列を生成している。
-LOは

sed 's/^/url=/;1i-LO'

のように最初に1回指定すればいいような気がするが、
なぜか毎回指定しないといけないようで。


2015-12-31 (Thu)

漢数字変換バグ

kを初期化してないので「百」のときに0になってしまうバグがあった。

% echo 百 | gawk '{s=0;for(i=1;$i;i++){j=index("一二三四五六七八九十百千万",$i);if(j>9)s+=k*10^(j-9);else{s+=(k=j)*(i==NF)}}}$0=s""' FS=
0
% echo 百 | gawk '{s=0;for(i=k=1;$i;i++){j=index("一二三四五六七八九十百千万",$i);if(j>9)s+=k*10^(j-9);else{s+=(k=j)*(i==NF)}}}$0=s""' FS=
100

なんかまだバグがありそう。十万で破綻するとか。


<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!