2012-11-20

Unity 使い辛いよー

最近、やっとPreciseに移行し始めてますが、Unityがすげー使い辛くて困ってます。

Alt+Grave (`) のキーアサインが変更できない問題

英語キーボードで漢字変換をする場合は、Alt+GraveをIMEのon/offに割り当てるのが一般的かと思いますが、これができない。というか、デフォルトでAlt+Graveにアサインされている機能が、普通の設定ツールでは見えない。ハードコーディング?変更できなくはないっぽいけど、面倒そうなのであきらめた。

Gnome Terminal のフォントサイズを変更すると、ターミナルの行数・列数が変わってしまう。そして、仕方ないのでターミナルのサイズを変更しようとすると、ターミナルの行数・列数がCompizを表示してくれない問題

タイトル長いですね。Gnome-Terminal使ってて、文字が読みづらいからフォントを大きくしようとするとしましょう。するとCompiz君、律儀にウィンドウサイズを一定に保とうと努力してくれます。結果、ターミナル上での列数が変わってしまいます。80列に固定して欲しいのにorz

まー、それは許すとしても(もとい、依然として解決策不明なので)、じゃー手でウィンドウをリサイズしようとすると、リサイズ中はカラム数が分からない。何という無理ゲー。これは既にBugが上がってて、解決策も乗ってます。
sudo apt-get install compizconfig-settings-manager compiz-plugins-extra
ccsm
で設定マネージャが起動するので、左のカテゴリから「ユーティリティ」を選択、「Resize Info」というのがあるので、それを有効にすれば解決です。

デフォルトでオンにしておいて欲しい。

MyUnityがデフォルトでインストールされない

徹底的に設定ツールはデフォルトでインストールしない方針なのでしょうか。大して設定する項目があるわけじゃないけど、とりあえずインストールされててもいいんじゃないかと。

2012-07-28

シェル操作課題への回答

http://d.hatena.ne.jp/Yamashiro0217/20120727/1343371036
シェル操作課題ということで bash のみでやってみた。CSVじゃなくてあくまでもカンマ区切りということでクォーティング処理とかは全くなし。ファイル名が与えられてないので、すべてhoge.logとします。

問1 このファイルを表示しろ

$(< file) は個人的には好きではないのだけど、外部コマンドなしだとこれになる。
echo "$(< hoge.log)"

問2 このファイルからサーバー名とアクセス先だけ表示しろ

IFS元に戻すの面倒なのでサブシェル内で。
(IFS=","; while read server t uid dest; do set -- "$server" "$dest"; echo "$*"; done < hoge.log)

問3 このファイルからserver4の行だけ表示しろ

これまた念のためサブシェル内で。
(while read line; do [[ "$line" == server4,* ]] && echo "$line"; done < hoge.log)

問4 このファイルの行数を表示しろ

これもやっぱりサブシェル内で。
(declare -i i; while read line; do let "i++"; done < hoge.log; echo $i)

問5 このファイルをサーバー名、ユーザーIDの昇順で5行だけ表示しろ

うーーーーーーん、ソートを実装するのは面倒だけどしゃーない。ワンライナーは厳しいので適宜改行入りです。それと7bit前提。バブルソートとか書くの久しぶり。
function lt() {
  # return 0 if $1 < $2, else return 1
  local IFS=,
  local -a x y
  x=($1)
  y=($2)
  local -ir server=0
  local -ir uid=2
  [[ "${x[server]}" < "${y[server]}" ]] && return
  [[ "${x[server]}" > "${y[server]}" ]] && return 1
  (( ${x[uid]} < ${y[uid]} )) && return
  return 1
}
IFS=$'\n'
logs=($(< hoge.log))
declare -i i j
for ((i=0; i < ${#logs[@]}-1; i++)); do
  for ((j=1; j < ${#logs[@]}-i; j++)); do
    lt "${logs[j]}" "${logs[j-1]}" || continue
    s=${logs[j-1]}
    logs[j-1]="${logs[j]}"
    logs[j]="$s"
  done
done
for ((i=0; i<5; i++)); do
  echo "${logs[i]}"
done

問6 このファイルには重複行がある。重複行はまとめて数え行数を表示しろ

せっかく前問でソート作ったので、ソートして重複除去でもいいんだけど。。。
declare -a cache
function is_cached() {
  local -i i
  for ((i=0; i < ${#cache[@]}; i++)); do
    [[ "${cache[i]}" == "$1" ]] && return
  done
  return 1
}
declare -i i=0
while read line; do
  is_cached "$line" && continue
  let "i++"
  cache+=("$line")
done < hoge.log
echo $i

問7 このログのUU(ユニークユーザー)数を表示しろ

またユニークあるんだったら、今度は連想配列で。
declare -A uids
IFS=","
while read server t uid dest; do
  uids[${uid}]=1
done < hoge.log
echo ${#uids[@]}

問8 このログのアクセス先ごとにアクセス数を数え上位1つを表示しろ

だんだんbashで書くのが面倒になってきた(汗
declare -iA dests
IFS=","
while read server t uid dest; do
  dests[${dest}]+=1
done < hoge.log
declare -i max=0
for dest in "${!dests[@]}"; do
  ((max >= dests[${dest}])) && continue
  max=${dests[${dest}]}
  d=${dest}
done
echo ${max} "${d}"

問9 このログのserverという文字列をxxxという文字列に変え、サーバー毎のアクセス数を表示しろ

ソートしろとか言われてないのでこれで許してください
declare -iA servers
IFS=","
while read server t uid dest; do
  servers[${server}]+=1
done < hoge.log
for server in "${!servers[@]}"; do
  echo ${servers[$server]} ${server/server/xxx}
done

問10 このログのユーザーIDが10以上の人のユニークなユーザーIDをユーザーIDでソートして表示しろ

なー、なんとまたソートしなきゃじゃん。めんどー。ちゃんとしたソート関数定義しておけばよかったorz
declare -A uid_set
IFS=","
while read server t uid dest; do
  [[ ${uid} -ge 10 ]] && uid_set[${uid}]=${uid}
done < hoge.log
declare -ai uids
uids=("${!uid_set[@]}")
declare -i i j
for ((i=0; i < ${#uids[@]}-1; i++)); do
  for ((j=1; j < ${#uids[@]}-i; j++)); do
    ((uids[j] < uids[j-1])) || continue
    u=${uids[j-1]}
    uids[j-1]="${uids[j]}"
    uids[j]="$u"
  done
done
for ((i=0; i<${#uids[@]}; i++)); do
  echo "${uids[i]}"
done

2012-04-25

花粉症の薬がジェネリックだった

(妻の実家の)近所の病院に行ったら、何の選択肢も示されず「薬出しておきます」と。で、出てきたのがジェネリック医薬品だった。医療費抑制のためなのだろうか。

ちなみに、ここら辺には調剤薬局があるものの、どこも院内処方らしい。これまた医療費抑制のためなのだろうか。

2012-01-01

2011年を振り返る

昔は、毎年年末に「今年を振り返って」というタイトルで書いてたのですが、気がつくと年を越してることが多く、2年連続で昨年を振り返るバージョンになってしまいました。

仕事編

  • 3月11日、あまり自分にできることがなかった。なんかもっとできることがあったかもしれない
  • 2011年も年末はオンコール(障害対応のため待機)だった。2010年末はプライマリーだったけど2011年末はそのバックアップだったのでいくらかはましだったけど、PCを常に持ち歩かなければならなかったことに変わりはない。
  • チームメンバーが増えた。
  • 途中でオンコールのシフトが12:00~24:00(アメリカが夏時間中は11:00~23:00)になった。結構つらい。
  • 組織改編でいろいろあったし、マネージャーも変わった。
  • 勤続5年になった。気が付いたら周りは知らない人だらけみたいな感じ。
プライベート編
  • 3月11日、地震の約1時間前に姉のところに甥っ子が生まれた。姉は関東にいたので直接的な被害はなかったけど、その後の水探し、新生児用オムツ探しと大変だった。
  • オープンソース?それ新しいソース?的な、OSS界隈では何もしない1年だった。
なんというか、個人的には大きな変動のない1年でした。嵐の前の静けさ?今年1年が、自分にも皆さんにも良い年であるよう願っています。

prometheusのrate()関数の罠

 久しぶりのAdventカレンダー挑戦、うまくいく気がしません。 閑話休題。実のところ、rate()関数というよりは、サーバー側のmetric初期化問題です。 さて、何らかのサーバーAがあったとして、それが更に他のサーバーBにRPCを送っているとします。サーバーBの方でホワイトボ...