2011.12.11
■ USP MAGAZINE の志にしびれた
冒頭のページに、この変動の時代をいかに技術者として生きていくべきかを考えるうえでの志が述べられておりました。
- UNIX 哲学を学び、実践すること(Simple is Beautiful)
- 自立した技術者による協働を目指すこと(Independent Engineers)。
- 手しごとと工夫を大切にすること(Craftmanship)
- 自然であること、Free であること(Open Mind)
- 本質を見極め、自分の頭で考え行動する技術者たること(Sophisticated Engineers)
■[Ruby] コマンドを呼び出すときの引数指定が面倒なとき
C言語で何度かみた(lv/lgrep, pkill/pgrep)。引数で処理を振り分ける方式だと、コマンドを打つのが面倒。そんなときは、File::basename($0) をみるというのも手。最近だとこんなのを書いた。
tweet = Tweet.new command = File::basename($0) date = `date +\"%Y/%m/%d %A %H:%M\"` if command === "kita" message = "#出社 #{date}" elsif command === "kaeru" message = "#退社 #{date}" else warn "kintai-tweet.rb は kita か kaeru という名前でシンボリックリンクを作成してそれを実行するという使い方です。" exit 1 end
■[Ruby] コマンドで引数 "-" に対応させる
oauth gem のサンプル yql.rb より。そういえばこういうの、書いたことなかったです。
option_parser = OptionParser.new do |opts| ... option_parser.parse! query = ARGV.pop query = STDIN.read if query == "-"
■[Ruby] コマンドで使う while line = gets で先ほど知ったこと
#!/usr/bin/env ruby # encoding: utf-8 while line = gets line.chomp! puts line end
こんなのを雛形にしていくつもその場かぎりの雑な整形スクリプトをつくって仕事をこなしてました。
gets と書けば カーネルメソッド Kernel.gets で、それは STDIN.gets みたいなものなんだろーと思っていたのですが、
Kernel#gets は ARGF.gets 相当だったのですね。
それだと融通がきいて、引数があればそのファイル、なければ標準入力から gets します。
■[シェルスクリプト] unzip したときにそこにファイルをぶちまけないようにする
問題
beyond.js の zip ファイルを unzip beyond.zip と解凍すると、直下のディレクトリに大量のファイルが作成されてしまいました。この場合は、beyond というディレクトリの下にファイルが作成されるのが、期待していた挙動です。
対策
雑ですが、とりあえず以下のような ~/bin/unzi を作成してみました。
#!/bin/bash target_dir=${1%.*} if unzip -l $1 | grep -q ${target_dir}/ ; then unzip $1 else mkdir $PWD/$target_dir unzip $1 -d $PWD/$target_dir fi
