Just another Ruby porter,

〜2013年4月下旬〜


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

2013-04-21 (Sun)

sponge(1)

moreutilsパッケージにspongeという名前のコマンドがある。
これはよくあるだめな例(bar.txtが空になってしまう)の

% foo1 bar.txt | foo2 | foo3 > bar.txt

のようなことをしたい場合に使える。

foo1 bar.txt | foo2 | foo3 | sponge bar.txt

とするとspongeが標準入力を読み終わってからbar.txtに書き込むのでbar.txtを壊さない。

% seq 10 > seq10
% sed '5d' seq10 | grep -v '[28]' >seq10
% ls -l seq10
-rw-r--r-- 1 eban eban 0 2013-04-22 01:31:30 seq10
% seq 10 > seq10
% sed '5d' seq10 | grep -v '[28]' | sponge seq10
% cat seq10
1
3
4
6
7
9
10

マニュアルより:

sponge  reads standard input and writes it out to the specified file. Unlike a
shell redirect, sponge soaks up all its input before opening the output file.
This allows constructing pipelines that read from and  write  to the same file.
It also creates the output file atomically by renaming a temp file into place, and preserves the permissions of the output file if it already exists. If the output file is a special file or symlink, the data will be written to it.

moreutilsなんてインストールしないと思うが他にも結構面白いコマンドがある。


2013-04-22 (Mon)

crontabの環境変数設定

crontab内では%を\%のようにエスケープしないと改行になってしまうが、
環境変数を設定するところではその意味はないので\つけるとそのまま\ごと設定されるので注意。
逆に言うとdateのフォーマットストリングは%だらけになるので環境変数で定義するとすっきりするかもしれない。


2013-04-23 (Tue)

chronic(1)

moreutilsには

chronic: runs a command quietly unless it fails

とさりげなくかかれてるコマンド。
二重否定っぽい表現でわかりにくいが、要するに失敗したときだけ表示する。

% chronic ls
% chronic ls hoge
/bin/ls: hoge にアクセスできません: そのようなファイルやディレクトリはありません

この挙動の何がうれしいかというとcrontabで失敗したときだけメールが飛ぶようにできる。
crontabで実行してるコマンドの頭に追加するだけでいい。


2013-04-24 (Wed)

news topicsをlivedoorで

Yahooだと8つしか出てこないのでlivedoorにしてみた。

% curl -s news.livedoor.com | nkf -w | awk '/detail/&&$0=$NF' FS='>' RS='</a></li>|\n'
菌がどんどん寄り付くNG行為とは
「カリスマ介護士」が強姦容疑
AP通信の偽ツイートで市場混乱
ボストン爆破、動機について供述
カルピスがFacebookで謎サービス
香川、「80億円軍団」で存在感
キヨシ激怒 助っ人左腕2軍降格へ
育成降格から復活したGの苦労人
佐藤琢磨、失意から4年目で快挙
大島優子が芸人を断髪、丸刈りに
佐藤健「カノ嘘」新キャスト発表
堺雅人に興味がなかった菅野美穂
「スター・トレック」予告編公開
アクションが見ものの犯罪ドラマ
最も美しい20歳に選ばれた女優
「オス化女子」予備軍の特徴
年中悩まされる冷え性の改善策
「秘密にすべき」な女子の趣味
危険な夢から読み解くメッセージ
一途男と束縛男を見分ける方法
人気ポテトチップスメーカーTOP5

これを30分間隔ぐらいでcronで動かして適当にshuf -n1して、
tmuxのステータスラインに表示するのはいいかもしれない。


2013-04-25 (Thu)

Ubuntu 13.04

今回は13.04にちなんで13:04 BSTにリリースしたらしい。

% date -d'4/25 13:04 BST'
Thu Apr 25 21:04:00 JST 2013

Ubuntuはこういうネタをちょいちょい仕込んでくるので面白い。
それよりuim-skkが使えなくなってちょっと困ってる。
調べねば。


2013-04-26 (Fri)

Ubuntu 13.04その後

uim-skkが使えないと思ったのは単に言語サポートがデフォルトに戻っていただけだったらしく、
キーボード入力に使うIMシステムをuimにすればいけた。
それよりもgnome-terminalでtmuxを使っているとnew windowするたびに行数が1行減ってしまって困る。
設定で50行としてるのになぜか49行になってしまうのも困ったもんだ。

あとUbuntu serverでdo-release-upgradeすると

% sudo do-release-upgrade
Checking for a new Ubuntu release
Traceback (most recent call last):
  File "/usr/bin/do-release-upgrade", line 145, in <module>
    fetcher.run_options += ["--mode=%s" % options.mode,
AttributeError: type object 'DistUpgradeFetcherCore' has no attribute 'run_options'

と言われて上げられない。
ぐぐってみると How to upgrade to Ringtail daily build?というのが見つかったが、どうしたもんかな。
どうせVPSだからやっちゃってもいいんだよなと思いつつちょっと待とう。


2013-04-27 (Sat)

ビビッドレッド・オペレーションのあれ

今頃確認してたりするんだけど、第2話に出てきたやつ。

class DRbUnknownError < DRbError
super(unknown.name)

end
ttr_reader :unknown
def self._load(s)        Marshal::Load(s)

def self._load(s)  Marshal::load(s)
end

裏返しなので読みづらい。
コピペじゃなくてコメントを除いてたりするところなんかはわかっててやってるんだろうけど、
attr_readerがttr_readerだったり、ところどころ省略されてたりでなんか中途半端。
咳さんも満足?


2013-04-28 (Sun)

Ubuntu Server 13.04

1日待っても状況が変わらなかったので、結局

% sudo sed -i~ 's/quantal/raring/g' /etc/apt/sources.list
% sudo apt-get update
% sudo apt-get dist-upgrade

したのであった。

weechatのメッセージが日本語になってなんか違和感が。


2013-04-29 (Mon)

Retry the previous command until it exits successfully

いやいや。そんなまどろっこしいことしなくても

until !!;do :;done

でいいよね。


2013-04-30 (Tue)

WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.9.0

なんかメールがいっぱいたまってるなと思ったらタイトルで埋まっていた。
Ubuntu 13.04に上げたのでlibxmlも上がった。
bundle使ってるとnokogiri自身は上がらないわけで適宜bundle updateが必要になるわけか。

% bundle update
Fetching gem metadata from http://rubygems.org/.........
Fetching gem metadata from http://rubygems.org/..
Using bundler (1.2.3)
Installing nokogiri (1.5.9) with native extensions
Your bundle is updated! Use `bundle show [gemname]` to see where a bundled gem is installed.

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