5月前半

どうでも良いメモ集.

てんぷれーと難しい

スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践という本を読み始めた.Lua等のスクリプト言語に触ったことがなかったので何となく.それはそうと5章で「Luaヘルパークラス」というものが出てくる.これを使うとC/C++からLuaの関数を呼び出すのが楽になる(以下参照)

LuaHelper luah;
luah.SetLua(L);
LuaFuncParam params, results;
params.String("left").Number(100).Number(200);
if (!luah.CallFunc("on_mouse_click", &results, 2, &params)) {
    printf("%s\n", luah.GetErr());
} else {
    bool result = results.GetBool(0);
    const char *mes = result.GetString(1);
}

もうちょっと綺麗に書けないかな,と思ったので自分で何か書いてみた.可変長どころかテンプレート自体で何かを書いてみるのが始めてな気がする.むずい.せっかくなのでgistに置いた.以下利用例.

#include "luahelper.hpp"

int main(int, char**) {
    auto L = std::shared_ptr<lua_State>(lua_open(), lua_close);
    luaL_openlibs(L.get());
    luaL_dofile(L.get(), "sample.lua");

    kichi::LuaHelper LH(L);
    bool success;
    double ret1;
    std::string ret2;

    /* > sample.lua
       function sample(a, b)
           return a+b, "Waha-"
       end
     */
    std::tie(success, ret1, ret2) = LH.CallFunc<int, std::string>("sample")(1.0, 2);
    if (success) {
        std::cout << ret1 << ", " << ret2 << std::endl;
    }

    /* > fuga.lua
       return 1, "seikichi"
     */
    std::tie(success, ret1, ret2) = LH.DoFile<int, std::string>("fuga.lua")();
    if (success) {
        std::cout << ret1 << ", " << ret2 << std::endl;
    }
    return 0;
}

ちなみにgcc4.6の-std=gnu++0xで通った.相変わらず適当なC++力.

例会講座

サークルの講座(15分で適当な話題を発表)が久々に回ってきたので言語モデルとか漢字変換の話をした.2回生の頭にバイト先で受けた研修(?)を圧縮しただけですよ(ゲフッ.書いたコードはこんなん.全体的に投げやり.もうちょっとマシな言語モデルを作ろうと思っていたのだけれど,説明が面倒+準備開始が当日深夜 だったので残念な出来に.まぁいいか.

自炊

ScanSnapで自炊→バーコード自動認識→amazonAPIでタイトル取得 の幸せな日々を送っていたのだが,白黒の縞模様のページがあるとzbarからの返事が帰ってこなくなる.仕方ないのでulimit(1).

tmp=tmp
check=3
file="hoge.pdf"
page=$(pdfinfo $file | grep -E '^Pages' | sed -e 's/^Pages:\s*//')
pdfimages -j -l $check $file ${tmp}_h
pdfimages -j -f $(expr $page - $check) $file ${tmp}_t
for file in ${tmp}_*; do
    ulimit -t 10 && zbarimg -q $file \
        | uniq \
        | grep -E '^EAN-13:' \
        | grep -v -E '^EAN-13:192' \
        | grep -v -E '^EAN-13:191' \
        | sed -e 's/^EAN-13://';
done
rm ${tmp}_*

サークル

「今年は新入生と一緒にC++でゲーム作るかー!」と思って練習がてらに以前C#で書いたものを移植していた.普段Linux上で生活してるので,そっちでコード書けるのは快適.とは言えノートの方はWindowsなので,MinGWでごにょごにょしてたら時間がサクサク消えていった.ちなみにMinGW上でCMakeする場合は -G "MinGW Makefiles" としてやると良いらしい.何のこっちゃ.

Python

自炊関連でどーでもいいプログラムを動かしていたのだが,stderrに吐かせているログをファイルにリダイレクトするとエンコード何たらのエラーを吐く.もしやと思って確認してみると sys.stdout.encoding がリダイレクトするとNoneになっている(ちなみにリダイレクトしない場合はLANG見てそう).ということで明示的に.encode('utf8')してやって解決.

Juman

研究室の先輩(Mac)が上手く入れられんと言うので見てみた.ココ見て解決.どうでもいいがstraceってMacに無いのね,知らなかったぜ.