Just another Ruby porter,

〜2013年5月上旬〜


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

2013-05-01 (Wed)

synergyを使うとコピペが化けるようになってしまった

Ubuntu内同士では全然問題ないが、WindowsからUbuntuへコピペしようとすると化ける。

\Uffffffff\Uffffffff/plain

こんな感じに。それどころかWindows内同士でもばけばけに。
特にgvimではyypすらできない。ばける以前にエラーになってしまう。

ひょっとしてクリップボードのあれかと思いParcelliteを終了させたら直った。
こいつかー。うーむ。選ぶならsynergyのほうだよな。


2013-05-02 (Thu)

久し振りのGWの谷間出勤

諸般の事情により出勤しているんだけど、電車の一旦ドア閉め乗車がなかったり、
夕食の社食がなかったりといろいろと新鮮だ。


2013-05-03 (Fri)

Ruby 1.4の頃の-eの実装とirb

昨日までのirbはこんな感じになっていた(すでに変更された)。

require "irb"

if __FILE__ == $0
  IRB.start(__FILE__)
else
  # check -e option
  if /^-e$/ =~ $0
    IRB.start(__FILE__)
  else
    IRB.setup(__FILE__)
  end
end

この-eオプションのチェックはなんか意味不明なことになってるが、
元々Ruby 1.4の時代はsample/irb.rbでこうなっていた。

require "irb/main"

if __FILE__ == $0
  IRB.start(__FILE__)
else
  # check -e option
  tmp = ENV["TMP"] || ENV["TMPDIR"] || "/tmp"
  if %r|#{tmp}/rb| =~ $0
    IRB.start(__FILE__)
  else
    IRB.initialize(__FILE__)
  end
end

-eはその内容が一時ファイルに一旦書かれてそのファイルを読むような実装になっていたのである(evalも)。

% ruby-1.4.6 -ve 'p $0'
ruby 1.4.6 (2000-08-16) [i386-linux]
"/tmp/rbeSYKcv"

ただこれちゃんと動いていたのか不明である。
if __FILE__ == $0はrequireされてるかどうかの判断で、-eオプションのチェックはrequire側になる。
ということは

% ruby -rsample/irb -e 'p $0'

のようなケースしかないわけだが、本当にこんな使い方を想定していたのか?


2013-05-04 (Sat)

4月のspam

226通。いやーここまで減ると全部チェックできる。

IDE HDDのピンを折る

RD-H1のHDDを300GBから500GBに換装しようと思い、HDD外してIDE-USBケーブルつないだはいいが、
ぼきっと音がしてまさかと確認してみると1本丸々根元から折れている。
しかもIDE-USBケーブル側のメスに突き刺さっている。もうどう考えても抜けない。
つまり、HDDもIDE-USBケーブルも両方とも使い物にならなくなった。
で、よく見ると500GBはIDEじゃなくてSATAだし。なんだよ、おい、ソフマップ。
半年ぐらい遊ばせただけに。買ってすぐ確認すべきだった。

で、300GBのIDE HDDはまだ遊んでたので、こいつで代用。
500GBも特に使い途もないしSATA HDDをIDEへ変換する基板でも買ってくるか。


2013-05-05 (Sun)

SATA HDD用IDE変換基板を買ったはいいが、意味がなかった話

またソフマップ行って玄人志向のSATAD-IDEという変換基板を買って500GBつないで試したら見事に認識された。
しかし残り時間が見覚えのある113時間になっていて変だなとぐぐってみると、
やはりデフォルトの250GB分しか使えないらしい。
となると300GB IDEで十分で500GB SATAをつなぐ必要はないわけで。

あ、Ubuntuで見てみるか。SATAになったのでつなげる手段はいろいろあるし。
gpartedとかで広げればいけたりして。


2013-05-06 (Mon)

RD-H1のHDDのフォーマットは何やらわからんものだった

パーティションすらないようで、独自フォーマットじゃpartedで広げるどころの話ではなかった。
まあ、SATAでも換装可能とわかったので次にこわれたときの保険だな。

PNGの最適化ツールを探して

有名どころのoptipngはパッケージがあるからいいとして、
pngout, pngrewrite, pngwolf, defluffといろいろあることがわかった。
減色処理後はpngoutが効くような気がする。
減色処理はpngcrushとかpngquantで。convertや ImageWorsenerでもいい。


2013-05-07 (Tue)

inetdからご請求

今年もやはりSubjectは「[inetd] ご請求」だけだった。頑固だねえ。そんな時期になったか。
もう考えずに更新した。


2013-05-08 (Wed)

Unicode 16進文字列を表示する

zshだとそのままechoすれば表示できてしまう。

% echo '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002'
我々はシェル芸人だ。

しかし残念ながらbashだとそのまま表示される。

$ echo '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002'
\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002

どうしたもんかと思ったら、$''でいけることがわかった。

$ echo $'\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002'
我々はシェル芸人だ。

これならzshでもいける。あとprintfを使う方法もある。

$ printf '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002\n'
我々はシェル芸人だ。
% printf '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002\n'
我々はシェル芸人だ。
$ /usr/bin/printf '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002\n'
我々はシェル芸人だ。

builtinだけでなく/usr/bin/printfでもいけるので、
変数にあらかじめ入ってるときなんかはこっちを使ったほうが楽かもしれない。


2013-05-09 (Thu)

ログファイルを2個だけ残してあとは消す

日付入りのファイル名でログを残すのはよくあるが、放っておくと際限なくたまってしまう。
そこで最新の2個ぐらい残してあとは消したいがどうするか?

% ls -l
total 0
-rw-r--r-- 1 eban eban 0 2013-05-05 12:00:00 foo.log.0
-rw-r--r-- 1 eban eban 0 2013-05-06 12:00:00 foo.log.1
-rw-r--r-- 1 eban eban 0 2013-05-07 12:00:00 foo.log.2
-rw-r--r-- 1 eban eban 0 2013-05-08 12:00:00 foo.log.3
-rw-r--r-- 1 eban eban 0 2013-05-09 12:00:00 foo.log.4
% ls -t1
foo.log.4
foo.log.3
foo.log.2
foo.log.1
foo.log.0

foo.log.{3,4}だけ残したい。削除するはその残りなので1行目と2行目を消す。

% ls -t1 | sed 1,2d
foo.log.2
foo.log.1
foo.log.0

tailを使う場合は意味合い的には3行目以降表示する。+を使う。

% ls -t1 | tail -n +3
foo.log.2
foo.log.1
foo.log.0

あとはrmで消せばいい。

% 
% rm `ls -t1 | sed 1,2d`
% ls -t1
foo.log.4
foo.log.3

しかしこれだと3個たまるまではrmの引数が空になってしまいエラーになる。

% rm `ls -t1 | sed 1,2d`
rm: オペランドがありません
Try 'rm --help' for more information.

rm -fにしてもいいが、xargsを使う方法がある。

% rm -f `ls -t1 | sed 1,2d`
% ls -t1 | sed 1,2d | xargs -r rm 

-rで入力が空なら実行しない。

--no-run-if-empty
-r     If the standard input does not contain any nonblanks, do not run the command.  Normally, the command is
       run once even if there is no input.  This option is a GNU extension.

さらにファイル名に空白を含んでいてもデリミタを改行(-d'\n')にすればok。

% ls -t1
foo bar.log.4
foo bar.log.3
foo bar.log.2
foo bar.log.1
foo bar.log.0
% ls -t1 | sed 1,2d | xargs -r rm
rm: `foo' を削除できません: そのようなファイルやディレクトリはありません
rm: `bar.log.2' を削除できません: そのようなファイルやディレクトリはありません
rm: `foo' を削除できません: そのようなファイルやディレクトリはありません
rm: `bar.log.1' を削除できません: そのようなファイルやディレクトリはありません
rm: `foo' を削除できません: そのようなファイルやディレクトリはありません
rm: `bar.log.0' を削除できません: そのようなファイルやディレクトリはありません
% ls -t1 | sed 1,2d | xargs -r -d'\n' rm
% ls -t1
foo bar.log.4
foo bar.log.3

2013-05-10 (Fri)

空白を含んだファイル名とIFS

昨日の件で空白が含まれたファイル名があるときにxargsを使わずに消すにはどうするか?
引数の区切りはシェル変数IFSで決まっていて、普通は空白、タブ、改行の3つになっている。
これを改行だけにすれば解決する。

% ls -t1
foo bar.log.4
foo bar.log.3
foo bar.log.2
foo bar.log.1
foo bar.log.0
% rm -f `ls -t1 | sed 1,2d`             
% ls -t1
foo bar.log.4
foo bar.log.3
foo bar.log.2
foo bar.log.1
foo bar.log.0
# 消えてない
% (IFS=$'\n'; rm -f `ls -t1 | sed 1,2d`)
% ls -t1
foo bar.log.4
foo bar.log.3

IFSを元に戻すのが面倒なので()を使って子プロセスで動かしている。

zshはなぜかIFSにNULも含まれている。


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