Mac OSX LionにHomebrewでインストールしたYAP Prologで状態読み込みができなかったときのメモ

環境

OSX 10.7.5
Homebrew 0.9.4
YAP 6.2.2

症状

YAPのsave_programで保存した状態を読み込もうとしたが読み込めなかった.

  • restore→Segmentation Fault
  • CインタフェースのYAP_FastInit→[ WARNING: threaded YAP will ignore saved state (ファイル名) ]というメッセージが表示され,状態が読み込まれず無視される

解決策

HomebrewのYAPをアンインストールして,自分でソースを落としてビルドしたら解決した.新たにインストールしたYAPのバージョンは6.2.3.

$ git clone git://yap.dcc.fc.up.pt/yap-6
$ cd yap-6
$ git submodule init
$ git submodule update
$ ./configure
$ make
$ make install

Ubuntu 12.10でCadiaPlayer3.0を動かすまでの道のり

General Game Playing Competitionで3回優勝しているCadiaPlayerは動かすまでが結構面倒なので,その手順をメモしておきます.

環境

Ubuntu 12.10
GCC 4.7.2
Boost 1.49.0

YAP Prologのインストール

$ cd
$ git clone git://yap.dcc.fc.up.pt/yap-6
$ cd yap-6
$ ./configure
configure: error: --with-readline was given, but test for readline failed

configureでエラーが出る.config.logを見てみると,

/usr/bin/ld: cannot find -lreadline
/usr/bin/ld: cannot find -lncurses

libreadlineとlibncursesが見つからないと言っているのでインストールする.

$ sudo apt-get install libreadline-dev libncurses5-dev

これでconfigureが通るようになる.

$ ./configure
$ make
$ sudo make install

CadiaPlayerのビルド

$ cd
$ wget http://cadia.ru.is/wiki/_media/public:cadiaplayer:cadiaplayer-3.0.tar.gz -O cadiaplayer-3.0.tar.gz
$ tar zxvf cadiaplayer-3.0.tar.gz
$ cd cadiaplayer-3.0
$ ./configure
configure: error: GNU MP not found, see http://gmplib.org/

./configureでエラーが出る.libgmpをインストールする.

$ sudo apt-get install libgmp-dev

これで./configureが通るようになる.

$ ./configure
$ make
/bin/bash: flex: command not found

flexをインストールする.

$ sudo apt-get install flex

再びmake.

$ make
g++ -DHAVE_CONFIG_H -I. -I..   -I/usr/include -Wno-deprecated  -g -O2 -O3 -MT gmprotocol.o -MD -MP -MF .deps/gmprotocol.Tpo -c -o gmprotocol.o gmprotocol.cpp
gmprotocol.cpp: In static member function ‘static bool cadiaplayer::agent::GMProtocol::hasMessage()’:
gmprotocol.cpp:8:20: error: ‘STDIN_FILENO’ was not declared in this scope

エラーメッセージで検索してみると,どうやらunistd.hをインクルードするといいらしい.
Bug #976551 “ftbfs with gcc 4.7 if not including <unistd.h>” : Bugs : widelands
doesn't compile with gcc 4.7 (?) - Technical Help - Forum - Widelands.org
agent/gmprotocol.cppに#include を書き足して再びmake.

$ make
cadiaplayer.o: In function `~posix_tss_ptr':
/usr/include/boost/asio/detail/posix_tss_ptr.hpp:48: undefined reference to `pthread_key_delete'

リンク時にエラーが発生する.-pthreadオプションを使うようにconfigureをやり直して再びmakeすると通る.

$ ./configure LIBS="-pthread"
$ make
$ make install

これでビルド完了.お疲れ様でした.

Ubuntu 12.10 + Eclipse JunoでEasyShellのOpen/Runが正しく働かなかったときの対処

  1. Windows->Preferences->EasyShellでEasyShellの設定画面を開く
  2. Shell Open commandの

    gnome-terminal --working-directory="{1}"

    gnome-terminal --working-directory={1}

    に修正する.


  3. Shell Run commandの

    gnome-terminal --working-directory="{1}" --command=./"{3}"

    gnome-terminal --working-directory={1} --command=./"{3}"

    に修正する.

毎回インストールしてるEclipseプラグイン

EasyShell

Vrapper

Mac OS XとUbuntuのウィンドウ切り替えショートカット

片方ばかり使っているともう片方のショートカットを忘れてしまいがちなのでメモ.

OS 異なるプログラム間の切り替え 同じプログラム内の切り替え
Mac OS X(10.7.5) Command+Tab Command+F1
Ubuntu(12.10) Alt+Tab Alt+半角/全角

Mac OSX Lionでcpp-netlibのビルドに失敗したときのメモ

環境

Mac OS X 10.7.5
cpp-netlib 0.9.4
GCC 4.7.0
CMake 2.8.11
Boost 1.53.0

手順

http://cpp-netlib.org/0.9.4/getting_started.html#getting-startedの通り

  1. https://github.com/cpp-netlib/cpp-netlib/downloadsからダウンロードし~/cpp-netlibに展開
  2. 下記のコマンド実行
$ mkdir ~/cpp-netlib-build
$ cd ~/cpp-netlib-build
$ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ../cpp-netlib
$ make

エラー

/usr/bin/g++   -g -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o  -o mime-roundtrip  /usr/local/lib/libboost_unit_test_framework-mt.a 
ld: duplicate symbol boost::detail::system_signal_exception::report() const in /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o) and CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o for architecture x86_64

原因

わかりません.

2013/06/02追記:GCC4.8.1だとエラーが増えました.

/usr/local/bin/g++-4.8   -g -Wl,-search_paths_first -Wl,-headerpad_max_install_names   CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o  -o mime-roundtrip  /usr/local/lib/libboost_unit_test_framework-mt.a 
duplicate symbol boost::detail::system_signal_exception::report() const in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_action::signal_action() in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_action::signal_action() in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_action::signal_action(int, bool, bool, char*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_action::signal_action(int, bool, bool, char*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::system_error::system_error(char const*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_handler::s_active_handler      in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_action::~signal_action() in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_action::~signal_action() in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_handler::signal_handler(bool, int, bool, char*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_handler::signal_handler(bool, int, bool, char*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_handler::~signal_handler() in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::detail::signal_handler::~signal_handler() in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::system_error::system_error(char const*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::execution_exception::execution_exception(boost::execution_exception::error_code, boost::unit_test::basic_cstring<char const>, boost::execution_exception::location const&) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::execution_exception::execution_exception(boost::execution_exception::error_code, boost::unit_test::basic_cstring<char const>, boost::execution_exception::location const&) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::execution_exception::location::location(char const*, unsigned long, char const*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
duplicate symbol boost::execution_exception::location::location(char const*, unsigned long, char const*) in:
    CMakeFiles/mime-roundtrip.dir/mime-roundtrip.cpp.o
    /usr/local/lib/libboost_unit_test_framework-mt.a(execution_monitor.o)
ld: 20 duplicate symbols for architecture x86_64

論文PDFの管理のためにMendeleyを使い始めた

最近,論文のPDFファイルの管理のためにMendeleyというサービスを使い始めました.それまではPDFに題名通りのファイル名をつけた後にDropboxに放り込んでいたのですが,ファイル名をつけるのが面倒だったり,論文を探すのが大変だったりしたので,もっとスマートな管理方法は無いものかと思っていました.

使いはじめるのにユーザー登録が必要なのが若干面倒ですが,しばらく使ってみたところ,これまでのDropbox管理に比べてかなり楽になりました.PDFをダウンロードしたら,それをMendeleyアプリのウィンドウにドラッグ&ドロップするだけでMendeleyの管理下におかれ,PDFファイルはあらかじめ指定したフォルダに適切なファイル名とともにコピーされます.論文のタイトルによる検索はもちろん,本文の横断的な検索も高速に行うことができます.今のところ1つのPCでしか使用していませんが,複数のPC間でのファイルの同期も可能なようです.

1つの大きな不満は,Read/Unreadステータスが用意されているにも関わらず,Mendeleyアプリ内で論文を開くと直ちにReadになってしまうことです.これでは実際に論文を読んだかどうかを管理するのに役に立ちません.この挙動については随分前から改善を求める声が多いようです.
don't automatically mark pdfs as 'read' – Customer Feedback for Mendeley