2011年6月14日火曜日

プライベートなパッケージだけにroscdするotlcdを作ったよ

Minecraftがこのブログのトップにあると色々不安なので更新します。

私は一応趣味でrosのパッケージを作ってみています。
大体パッケージ名はotl_hogehogeという名前になっています。
rosはwikiのドキュメントとかがいきなりパッケージ名なので、これが他の人とかぶると困るからです。

普段、自分が作ったパッケージに移動(cd)するには

$ roscd otl_
と入力して、Tabを押してそこから目的のパッケージを探しています。

これをもっと簡単にするotlcdを作ります。

$ otlcd
と入力して、Tabを押すと
$ otlcd otl_
と展開されて、もう一度Tabを押すと候補("otl_"で始まるパッケージ)一覧が表示される、という状態にしたいです。


というわけでroscdを参考に、というか、ちょっとだけいじって作ってみました。
ソースは以下のような感じ。

function _otlcomplete_sub_dir {
    local arg opts rosvals
    COMPREPLY=()
    arg="${COMP_WORDS[COMP_CWORD]}"
    _ros_decode_path ${arg}
    if [[ -z ${rosvals[2]} ]]; then
        opts=`_ros_list_locations | grep ^${OTLCD_PREFIX}`        IFS=$'\n'
        COMPREPLY=($(compgen -W "${opts}" -S / -- ${rosvals[0]}))
        unset IFS
    else
        if [ -e ${rosvals[1]}${rosvals[2]} ]; then
          opts=`find -H ${rosvals[1]}${rosvals[2]} -maxdepth 1 -mindepth 1 -type d
 ! -regex ".*/[.].*" -print0 | tr '\000' '\n' | sed -e "s/.*\/\(.*\)/\1\//g"`
        else
          opts=''
        fi
        IFS=$'\n'
        COMPREPLY=($(compgen -P ${rosvals[0]}${rosvals[2]} -W "${opts}" -- ${rosvals[3]}))
        unset IFS
    fi
}
alias otlcd=roscd
complete -F "_otlcomplete_sub_dir" -o "nospace" "otlcd"
これをotl_bashパッケージにotlbashというファイル名で作りました。
赤いところをいじってあとはrosbashのコピペです。
(やっつけ感がすごくてすみませんがsubversionにいれておきました)


.bashrcでsetup.bashを読み込んだあとで以下の記述を追加すると使えます。

export OTLCD_PREFIX="otl_"
source `rospack find otl_bash`/otlbash
OTLCD_PREFIXに好きな文字列を入れられるので、もし私と同じようなprefixをパッケージ名に付けている人はいかがでしょうか?

2011年6月13日月曜日

Minecraft

こんばんわ。おひさしぶりです。

最近本当にネタがありませんので
私が最近はまっているゲームを紹介します。

マインクラフトです。
http://www.minecraft.net/
15ユーロくらいします。↓は公式PV。


FPS視点で、素材を集めて、道具を作り、またその道具で素材を集める。
集めた素材で家を作ったり、トロッコを走らせたりさせます。

ロボットとか作っちゃう男の子にはたまらないゲームです。
マルチプレイにも対応しており、複数人で協力して巨大建造物を作ったりもできます。


あとは、このゲームをプレイしている人の作る動画が面白い。


Classic版は無料なのでWeb上で試してみたらいかがでしょうか。
http://www.minecraft.net/play.jsp

もちろん私は買いました。
意外とまだ長時間やっていません。いったんやりだすと止まらないので自重しております。

以上完全に雑談でした。