月別アーカイブ: 2014年4月

distccとclangを使って異なる環境のマシンで分散コンパイルする

distccという、ネットワーク越しに複数のマシンを使って分散コンパイルを行うツールがある。これを使うと、最低限の設定で、同じアーキテクチャ・OSのマシン複数台での分散コンパイルができる。だが、アーキテクチャ・OSの異なるマシンを使いたい場合はどうか。その場合はクロスコンパイラを使う必要がある。

しかし、全てのマシンにクロスコンパイラを導入するのは面倒である。特に、ビルドしたいターゲットの環境のGCCがパッケージ管理システムに登録されていない場合は、わざわざ自前でGCCをビルドしなければならない。これはできればやりたくない。

そういう時は、コンパイラとしてclangを使おう。最近のclangは、-targetオプションを指定することでクロスコンパイラとして使うことができる(昔は-ccc-host-tripleだった)。clangは大抵の環境でパッケージとして用意されていると思うので、容易に導入できるだろう。-targetオプションに指定する文字列は、$ clang --versionで出てくる文字列を使えば良いだろう。

例えば、必ずしもMacばかりではないマシンを使って、Mac向けのプログラムをビルドしたい場合、configureには次のようなオプションを与えれば良い:

$ ./configure CC="distcc clang -target x86_64-apple-darwin13.1.0" CXX="distcc clang++ -target x86_64-apple-darwin13.1.0"

ただし、DISTCC_HOSTSなどの環境変数は適切に設定されており、ビルドに使うマシンではdistccdが動いているものとする。あとは$ make -j10のように適当に並列ビルドのオプションを指定すれば、適当に分散コンパイルしてくれる。

distccにはプリプロセッサの処理も分散させるpump modeという動作モードがあるが、どうも-targetオプションには対応していないようで、うまく動いてくれなかった。

ImageMagickの使い方に関する自分用メモ

自分で使ったときのメモ。備忘録。

加算合成・比較明合成

入力を1.jpg, 2.jpg, ..., n.jpg、出力をoutput.jpgとする。

加算合成:

$ convert 1.jpg 2.jpg ... n.jpg -background none -compose plus -flatten output.jpg

比較明合成:

$ convert 1.jpg 2.jpg ... n.jpg -background none -compose lighten -flatten output.jpg

 アニメーションGIFを作る

2つの画像が切り替わる(2コマ)アニメGIFを作りたい。

1コマ目をa.png, 2コマ目をb.pngとし、0.01*t 秒で1コマ目から2コマ目に切り替わるとする。繰り返しはしない。

$ convert -delay t -loop 1 a.png b.png output.gif

-loop 1-loop 0に変えると無限ループになる。詳細はこの辺とかを参照。

UT-mateの使い勝手を上げるGreasemonkeyスクリプト

東大の後期課程や大学院に在籍する人は必ずお世話になるであろうUT-mateだが、その使い勝手はお世辞にも良いとは言えない。まず、ログイン画面でEnterキーを押してもログインできない。他にもいろいろある。

さて、世の中のWebブラウザには、ユーザー側でWebページの見た目とか使い勝手をいじくれるものがある。Firefoxの場合はGreasemonkeyという拡張機能をインストールすれば、そういう”user script”を導入できるようになる。つまり、Greasemonkeyを導入したFirefoxであれば、user scriptによってUT-mateのページを構成するHTMLとかをいじることができ、使い勝手を向上させられる可能性があるということだ。(他のブラウザは筆者はあまり使っていないのでこの記事では扱わない)

というわけで私が書いたuser scriptがこれ→Better UT-mate.user.jsになる。Greasemonkeyを導入済みであれば、このリンクをクリックすることでこのuser scriptをインストールできるはずだ。ソースを見れば分かる通り、至極簡単なスクリプトであって、怪しい動作はしない。

現在のところ、実装している機能は

  • Enterキーでログインできるようにする
  • 「シラバス参照」で、Enterキーで「授業科目決定」ボタンや「検索開始」ボタンを押せるようにする
  • 【2014年9月30日更新】タイムアウトを阻止

である。気が向いたらさらに機能を追加するかもしれない。

【2015年9月3日】GitHubに公開。user scriptへのリンクをGitHubのものへと変更。