gitlabの更新が超簡単になった

gitlabのバージョンを上げようと思い,やり方を調べたところ,めちゃくちゃ簡単になっててビビった.gitlab upgraderというらしい.
こちらによると, script/upgrade.rbを実行すれば良いらしい.

sudo service gitlab stop

でgitlabを一旦止めてから,

cd /home/git/gitlab
sudo -u git -H ruby script/upgrade.rb

で完了.あとは,

sudo service gitlab start
sudo service httpd restart

でOK(↑Webサーバがnginxの場合はhttpdの代わりにnginx).
びっくりするくらい簡単だった.

ノマド大会

友人4人でノマド大会.
朝から四条ドトール.Macを充電しつつ黙々と作業.

昼時となり,Sunnyへ移動.集団で移動する,まさにノマド感.
昼食とガソリンを投入してからのノマド開始.

夕方になって糖分が欲しくなったのでさらに移動.
いつもの場所へ.

レアチーズケーキを食べてもうひと頑張り.
最後は打ち上げで,寿司を平らげて終了.

Zepp FINAL! 2014

チームしゃちほこの全国ツアー,Zepp FINAL! 2014〜ありがとうを伝えたくて〜@Zepp Nambaに行ってきた.第1部,タイガースイエローの公演に参戦.
簡単にチケットが手に入ったので気楽な気分で行ったけど間違いだった.
かなりの割合の人が公式のTシャツorパーカーで参戦.すごいアウェー感だった.
が,公演が始まったらももクロと変わらないノリ.むしろ激しいし,観客の動きも激しくて汗だくになった.
公演の詳細はナタリーで.

UMEKITA CELLAR

梅田,グランフロント地下のうめきたセラーが最近のお気に入り.
こちらのブログにお店の一覧が載っているが,いろんな良い感じのお店が並んでいる.
特にこのお店,
マーケットストア&カフェレストラン
DEAN & DELUCA
ディーン & デルーカ

大阪初出店,マーケットとレストランが融合した形態で,自家製パンが人気.ケーキも美味しい.
ここに来て何品か頼んでワイン飲むのが良い.で,最後にケーキでしめる.

CppUnit使ってみる(その2)

前回のコードに出てきた CPPUNIT_NS:: は,プリプロセッサによってCppUnit::に置き換えられるらしい.
結局,CppUnitというnamespaceで各クラスが定義されている.
前回の記事ではよくわかっていなかったが,CppUnitでテストを書く場合,
CppUnit::TestCase
CppUnit::TestFixture
の2つのクラスがあるらしい.
CppUnit::TestCaseはシンプルなクラスで,使う上で色々な関数をオーバーライドしたりしないといけない.
それを簡単にするのがCppUnit::TestFixtureクラス.これを継承して,setUp()とtearDown()と,各種テストを行う関数を書けばOK.
もうちょいTDDについて勉強したい.

大掃除

職場の大掃除.
ついでにキーボードのキートップを全部外して水洗いした.
ゼムクリップを伸ばして適当に曲げることで,簡易のキートップリムーバーを作り,キートップを全てはずした.
外してから気づいたけど,20センチくらいの細い紐を輪っかにして使う方が,キートップを痛めにくくて良さそう.
外したキートップは,ざるに入れて食器用洗剤でじゃぶじゃぶ洗った.
一つ一つ乾かしてからキーボードへ再装着.大体のキーの位置は覚えてるからわかるけど,Print Screen,Scroll Lock,Pause/Breakの並びあたりはあやふや.メジャーなキーボードであれば,Google画像検索でキーボードを参照しながらどこにキーを入れるかを確認する.
マイナーなキーボードの場合は,先に写真をとっておくのが吉.
ちなみに僕が使っているキーボードは東プレのRealforce

CppUnit使ってみる

テスト駆動型開発をきちんとやろうと思い,色々調べた結果CppUnitを試してみることにした.以下,初めてCppUnitを試したときのメモ.
MacでHomebrewを設定してあれば,

brew install cppunit

でインストール可能.使い方は,とりあえずコンパイルが通るコードを書く
add.h

int add(int x, int y);

add.cpp

int add(int x, int y){
    return 0;
}

これを評価するテストコードとして,次のようなものを用意する.
AddTest.cpp

#include <cppunit/extensions/HelperMacros.h>
#include "add.h"
class AddTest: public CPPUNIT_NS::TestFixture{
	CPPUNIT_TEST_SUITE( AddTest );
	CPPUNIT_TEST( test_add );
	CPPUNIT_TEST_SUITE_END();
	public:
	void setUp();
	void tearDown();
	protected:
	void test_add();
};
void AddTest::setUp(){
}
void AddTest::tearDown(){
}
void AddTest::test_add(){
	CPPUNIT_ASSERT_EQUAL(0, add(0,0) );
}
CPPUNIT_TEST_SUITE_REGISTRATION(AddTest);

こういう感じのやつを色んなクラスや関数に対して作れば良いみたい.
そしてmain関数のあるコードとして以下の様なものを用意する.
test.cpp

#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
int main(int argc, char **argv){
	CPPUNIT_NS::TestResult controller;
	CPPUNIT_NS::TestResultCollector result;
	controller.addListener(&result);
	CPPUNIT_NS::BriefTestProgressListener progress;
	controller.addListener(&progress);
	CPPUNIT_NS::TestRunner runner;
	runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
	runner.run( controller );
	CPPUNIT_NS::CompilerOutputter outputter( &result, CPPUNIT_NS::stdCOut() );
	outputter.write();
	return result.wasSuccessful() ? 0 : 1;
}

これでコンパイルができる.コンパイルはpkg-configを使って

g++ -a addtest test.cpp AddTest.cpp add.cpp `pkg-config --cflags --libs cppunit`

でコンパイルが通る.実行すると,

$ ./addtest
AddTest::test_add : OK
OK (1)

と表示される.次に,テストを追加する.

#include <cppunit/extensions/HelperMacros.h>
#include "add.h"
class AddTest: public CPPUNIT_NS::TestFixture{
	CPPUNIT_TEST_SUITE( AddTest );
	CPPUNIT_TEST( test_add );
	CPPUNIT_TEST( test_add2 );
	CPPUNIT_TEST_SUITE_END();
	public:
	void setUp();
	void tearDown();
	protected:
	void test_add();
	void test_add2();
};
void AddTest::setUp(){
}
void AddTest::tearDown(){
}
void AddTest::test_add(){
	CPPUNIT_ASSERT_EQUAL(0, add(0,0) );
}
void AddTest::test_add2(){
	CPPUNIT_ASSERT_EQUAL(3, add(1,2) );
}
CPPUNIT_TEST_SUITE_REGISTRATION( AddTest );

のように,test_add2を追加した.同様にコンパイルして実行すると,

$ ./addtest
AddTest::test_add : OK
AddTest::test_add2 : assertion
AddTest.cpp:30: Assertion
Test name: AddTest::test_add2
equality assertion failed
- Expected: 3
- Actual  : 0
Failures !!!
Run: 2   Failure total: 1   Failures: 1   Errors: 0

となった.足し算の結果がおかしいことがわかる.そこで,add.cppを修正して

int add(int x, int y){
	return x+y;
}

と修正してテストを実行したところ,

$ ./addtest
AddTest::test_add : OK
AddTest::test_add2 : OK
OK (2)

となりテストが成功した.

メディアセンターセミナー

京都大学学術情報メディアセンターの,メディアセンターセミナーで発表してきた.

発表内容は,この前PRMUで発表したもの+α.しかし今回の聴衆はパターン認識の専門家ではないので苦戦した.

ちょっと時事ネタを挟んでみたけど,ちょっとだけウケたかな…?

大阪で餃子食べた

今まで乗り換えでしか利用したことのなかった本町に行ってきた.餃子.

休日のオフィス街はコンビニも閉まってて変な感じ.

ノマドカフェ探し@京都(6軒目)

今回はノマドの定番(?)スタバ.今回紹介するのはスタバのカナート洛北店.
近くにケータイのショップがあるからか,各種Wifiが飛んでいて良い.電源はない.
壁を背に作業ができる席の数は非常に少ないけど,論文読む程度のことならどの席でも大丈夫なので,まぁ良い.
夏場は屋外の席もまぁまぁ良いのでは.