コミケ告知

サークル活動の詳細は circle タグの記事へ。
2015年4月16日木曜日

IntelliJをインストールしたら最優先ですべきたった1つのこと

フォントを変えるとかホワイトスペースの設定をするとかは、Intellijでなくともテキストエディタ系であれば必ずすることであって…最重要なのは、

  • Ctrl+Yのショートカットを潰すこと

なんと、Ctrl+YがRedoではないだけでなく、「一行消す」という恐ろしい機能に割り振られているのです…!今後どうなるのかわかりませんが、現在の14.x系ではそうなっています。これはつらい。




確かにRedoがCtrl+Shift+Zな操作系はあるけれども、Ctrl+Yに対してこういう潰し方をするのは、若干悪意を感じます。
2015年4月15日水曜日

fluentdで出力tagを書き換えるのに苦労した話

とても久しぶりにfluentdを使ってみることにしました。目的は、ローカルで集めたものをinfluxdbに飛ばすこと。後々はキューを挟むかもしれないけど、とりあえずは直接。あとは、ついでにCPUやらメモリやらの情報も飛ばそうと。既に実現例のたくさんある話の合わせ技です。


flutendが各ノードで扱うデータの流れは、大まかに2種類。
  • アプリの統計情報→fluentd→influxdb
  • dstat→fluentd(→dstat情報の整形)→influxdb
influxdbへの出力は、fluent-plugin-influxdb
dstatからの入力は、fluent-plugin-dstat

dstatの入力を、influxdbに流すために整形(というより要素ごとに分解)する必要がありますが、やることはそれくらいのはずです。

タグの整形をどうすべきか

さて、しかしその整形を気に入った形にしようとしたら、妙に時間を取られてしまいました。プラグインで自由に拡張できるfluentdであり、選択肢はすぐにいくつも見つかったのですが…
書き換えたらそこで仕事を終了して、またmatchの方に回すものが大半です。プリミティブな処理をチェーンしていく思想はわかりますが、今回やらなければならないのはそうではなく。
influxdbに出したいものは influx.* というタグで整理して <match influx> でひっかけて、この中にinfluxdbプラグインの設定を書いています。このinfluxdbプラグイン、タグ名がそのままinfluxdbのseriesとして使われるため、influx.dstat.node1.memory みたいな名前になってしまいます。influxdbに入れるデータにinfluxって付けたくないじゃろ…

結局、これを fluent-plugin-forest で実現しました。
<match influx.**>
type forest
remove_prefix influx
subtype influxdb
<case **>
host 192.168.1.11
port 8086
dbname test
</case>
</match>

ただ remove_prefix したいだけなのに大袈裟な気がします。何かもっといい方法はあるんでしょうか?
2015年4月8日水曜日

mvしてln -sするシェル関数を用意した

ファイルを移動して、移動先から元の位置にシンボリックリンクを張りたい。そんな場面がたまにあります。ぴったり合う物をすぐには見つけられなかったので、シェルスクリプトの練習も兼ねて作りました。
function mvln() {
function __mvln() {
local opts=$1
local src=$2
local dst=$3
if [ -d $dst ]; then
# When dst is dir, dst_file must be dir/filename
local file=${src##*/}
mv $opts -- $src $dst && ln -s -- ${dst}/${file} $src
else
mv $opts -- $src $dst && ln -s -- $dst $src
fi
}
### get options for mv
local OPTIND o opts
while getopts "bfv" o; do
case "${o}" in
[bfv])
opts="${opts}${o}"
;;
*)
return
esac
done
shift $((OPTIND-1))
if [ "${opts}" != "" ]; then
opts="-${opts}"
fi
### mv + ln -s
if [ $# -lt 2 ]; then
echo "mvln: too few arguments."
return
elif [ $# -eq 2 ]; then
__mvln "$opts" $1 $2
else
local dst_dir
for dst_dir; do true; done # get the last argument
if [ ! -d $dst_dir ]; then
mkdir -p $dst_dir || return
fi
for src_file in ${@:1:${#}-1}; do
local dst_file=${dst_dir}/${src_file}
__mvln "$opts" $src_file $dst_file
done
fi
}
view raw mvln.sh hosted with ❤ by GitHub

  • 書式はmvと同じ
  • b, f, vオプションだけ受け付けてmvに渡す
作成にあたり、以下の情報を参考にしました。
こんな単純なものが今まで作られていないわけが無いと思うので、検索に使うmv・ln・移動・シンボリックあたりの単語で余計なものが引っかかりすぎているだけのような気はしますが…。
(これは惜しかった → linux - Bash: move file/directory and create a link of it - Stack Overflow)