cat コマンドを Go で実装してみた

とあるコードのプロトタイプを作るがてら、簡易 cat を Go で書いてみた。C++ の template まわりのエラーとサーバーに混在する Boost のリンクエラーにめげそうになっていたので、やる気を取り戻せたかも。

Ubuntu の /bin/sh が /bin/dash へのシンボリックリンクになっている話

リンクエラーで困っていた時に起きた話です。知っている人はちゃんと対処しているのかもしれませんが。研究室で使っている他の Linux ディストリビューション (例えば Arch や Gentoo (アルファベット順)) では /bin/bash へのシンボリックリンクに設定(して|されて)いたので、研究室のサーバの Ubuntu で "ls -l /bin/sh" したときには驚きました。

[1] にも書いてありますが、/bin/sh を呼ぶスクリプトに "<<<" が用いられているとき、"Syntax error: redirection unexpected" というエラーメッセージが返ってくるのですが、これは /bin/sh が /bin/dash へのシンボリックリンクになっていて、dash は「そんなの知らないよ。」となることが原因のようです。

Ubuntu (9.04) を使い始めたときにも似たようなことがあったような...。

[1] http://stackoverflow.com/questions/2462317/bash-syntax-error-redirection-unexpected

Gnuplot で色々な部分の色を変更する

Gnuplot を使っていて、プロットする点や線以外の部分(凡例や軸など)の色を変えたいということがあったのですがいつもその場しのぎでやっていたので、備忘録的にコードとして残しておきます。以下のコードでは、軸などの部分を白にした sin(x) のグラフを eps で出力して、それを pdflatex で黒背景のスライドに挿入してみた例です。このシェルスクリプトを実行すると、図にあるような怪しげなスライドが出来上がります。

f:id:tetsuok:20120509081252p:plain

ar と ranlib で GW の1日潰した話

とある翻訳デコーダを gcc だけでなく clang でもコンパイルできるようにしようと思い、KenLM の人に連絡したところ、ビルドツールをサクッと変更してくれて、ついでにヤバい警告が起きているコードも修正することができ、「Linux の clang でコンパイルが通るように変更できたよ」とのメールが来たのでめでたしめでたしと思っていました。

が、Mac OS X (10.7) 環境では静的ライブラリとオブジェクトファイルのリンクに失敗してしまうという問題が起きました。なぜだ。なぜだ。とりあえず昼寝したり、テレビでマンチェスターシティの試合見たりしても一向に原因が分からない。

てっきり、ビルドツールの設定ファイルに間違いがあるんじゃないか、OS X 用の clang の jamfile がおかしいんじゃないか、などと思いつつエラーを見てたので、山のようにあるエラーメッセージの中に以下のような警告があるのを見落としてました。

ld: warning: ignoring file libLM.a, file was built for archive which is not the architecture being linked (x86_64)

gcc の場合でもアーキテクチャの指定はビルドツール側で設定してあるしそんなはずはないと思ってました。とりあえず上記のエラーメッセージで Web 検索したところ、[1] のページが見つかりました。「もしや自分も?」と思い ar と ranlib のパスを調べてみると

$ which ar 
/Users/tetsuok/local/bin/ar 
$ which ranlib 
/Users/tetsuok/local/bin/ranlib

なんと $HOME/local/bin に ar と ranlib を野良インストールしてました。原因はこれだと思い、/usr/bin/ar と /usr/bin/ranlib を使うようにしてもう一度ビルドしたら通りました。ビルドツールに問題があったのではなく、使っている自分のマシンの方に問題があったという、笑えないオチでした。

最近は専ら野良インストールなんてせずに Homebrew とかに任せていたので、これらのツールをインストールしていたことをすっかり忘れていた上に、まさかこれらが悪さをしているとは思ってもいませんでした。(二台の Mac でテストしてたので、自分のマシンのせいではないのかもと思ってたら大間違いでした。両方とも $HOME/local/bin に ar と ranlib をインストールしてました。) 

id:naoyat さんには感謝です。

 

[1] http://naoyat.hatenablog.jp/entry/2012/01/31/033312

GIZA++ の移植性が1ポイント向上した話

先日 GIZA++ の maintainer の Chris D. 氏に「OS X Lion 上で Apple の clang 3.1 でコンパイルがコケる* ので、送ったパッチを反映してほしい」と頼んだら、送ったパッチよりも更なる変更を加えてチェックインしてくれました。これで OS X Lion でも特にコードを修正したり、コンパイラを指定したりしなくてもコンパイルが通る** と思います。たいてい Linux とかでコンパイル & 実行している人が多いと思うので、誰得な話かもしれませんが。

* "ls -l /usr/bin/c++" してみると状況がお分かり頂けるかと思います。 ちなみに Arch Linux 上の clang 2.9 でもコンパイルがこけました。ちなみにちなみに変更適用前では make CXX=g++ でコンパイルした場合は成功してました。

** Linux 上の clang 2.9 以降のバージョンでもコンパイルが通ると思います。

引っ越し

tettsyun という hatena id を使っていたが、タイポされやすく、はてな Blog が誰でも作成できるようになったのでお引っ越し。