emacs25にバージョンアップ

有志の方がIMEパッチを適用して64bitでWindowsビルドしてくれているのでこちらを利用。ありがたや。

https://github.com/chuntaro/NTEmacs64

設定を何も変えずにexeだけ置き換えて動いたのに感動。

diredでドット始まりのファイルが先頭に来なくなった。

(setq dired-listing-switches "-aGlhv")

v を足したら元に戻った。

MoinMoinでWebP画像を表示する

moin-1.9.8を使っています。PNG画像を減色して貼り付けていたのですが試しにWebPにしたらめちゃめちゃ小さくなるじゃないですか!
しかしmoin-1.9.8はWebPをアップロードしても画像とは認識してくれませんでした。
むむぅ。

ということでMoinMoinのコードを読んでみる。imgタグを生成してるのはここ。

http://hg.moinmo.in/moin/1.9/file/dbe605c5867c/MoinMoin/action/AttachFile.py#l1161

1160     # destinguishs if browser need a plugin in place
1161     if mt.major == 'image' and mt.minor in config.browser_supported_images:
1162         url = getAttachUrl(pagename, filename, request)
1163         request.write('<img src="%s" alt="%s">' % (
1164             wikiutil.escape(url, 1),
1165             wikiutil.escape(filename, 1)))
1166         return
1167     elif mt.major == 'text':
1168         ext = os.path.splitext(filename)[1]

ふむふむMIMEタイプがbrowser_supported_imagesにあればimgタグになるようになってるな。

browser_supported_imagesを確認してみる。

http://hg.moinmo.in/moin/1.9/file/dbe605c5867c/MoinMoin/config/__init__.py#15

14 # List of image types browser do support regulary
15 browser_supported_images = ('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', )

あ、やっぱりwebpが入ってない。
ということでwikiconfig.pyでもろもろ追加。

import mimetypes
mimetypes.add_type('image/webp', '.webp', True) ### .webp は image/webp
import MoinMoin.config
MoinMoin.config.browser_supported_images = tuple(list(MoinMoin.config.browser_supported_images) + ['webp']) ### webpも画像

これでサーバーを再起動したら見事に.webpが画像として表示されました~。
これで軽量画像ライフが送れます。

chrome以外では表示できないらしいけどねっ。

C++単体テストTIPS ~みんなともだち~

テストコード書いてると対象のクラスのprivateメンバの値が知りたいときがよくある。

class MyTest;
#define private \
    friend class ::MyTest; private
#include <TargetClass.h>
#include <cxxtest/TestSuite.h>

class MyTest : public CxxTest::TestSuite {
public:
    void testHoge() {
        auto p = new TargetClass();
        TS_ASSERT_EQUAL(100, p->privateMember_); // friendになってるのでprivateにもアクセスし放題
    }
};

こんな感じ。

最初はprivateをpublicに置き換えようとしたが、そうするとprivateメソッドのマングルが変わってしまいリンクエラーになったのでfriendを使うことにした。

テストが捗る。

sqlite3でダメ文字を入れてしまったときの対処

うっかりダメ文字をINSERTしてしまって困った。

# hoge.py
conn = sqlite3.connect('hoge.db')
conn.text_factory = lambda raw: raw.decode('utf8', errors='replace')

これは便利。