CなんかSI的なことをしたくないとかなんとかいいながら、結局リファクタリングだとか他人のコードにいちゃもん付けるとかが特殊技能として身に付いてしまってるので、結局学部実験でも誰もやんないような特殊でニッチな妙なことをさせられています。南無。

はい。そんなこんなで、compizなるものをhackして、なんとデスクトップを3次元にしてしまおうなんてことをしてる訳です。(もちろん3次元にすることが目標な訳じゃないですが)
マニュアル見てプラグインとか作ればいいじゃんとかいう声が聞こえてきそうですが、「マニュアルとコードが全く一致してない」だとか「サンプルコード?君にはそんなもの必要ないさ!」とか書いてあるので、渋々ソースを見ております。はい。

そんな愚痴はおいておいて、今日は正しくcompizをhackするためのコツを書いてみましょう。というか、ソースが手に入るソフトウェアをhackする場合の普通な心がけです。なのでリアルハッカーにはつまらない内容かも知れません。(バイナリハックはブログで説明しだすと死んでしまうので、自分で勉強してください)

まず必須項目

  • Ubuntu
  • compiz0.7.3
  • IDE (eclipse + subclipse + cdt)
  • subversion
  • Makefile (拾ってきたやつ。ちょっと書き換えて使う

まずubuntu。
理由は特にないんですが、ubuntuでcompiz動かしてる人が割と多そうだったので、これにしました。なんにしてもdistrowatch的にも最近人気のディストリビューションです。
実際compiz動かすだけでも若干つまづくので、ubuntuがおすすめです。

次にcompizのバージョン。普通にapt(synaptic)で入れると0.5くらいが入るようですが、なんと最近のバージョン0.7.xとは中身が結構違います(死。実際はまった・・・・
未来のことを考えるなら、開発を始める前に新しいのにしておきましょう。
幸いにも野良リポジトリquatro eyecandy repositoryがありまして、そこから拝借できます。
これをここに書いてある通りソースに追加してsynapticを起動すると0.7.3を入れられます。

IDEは必須です。netBeansでもeclipseでもいいと思います。
なにせドキュメントがないものですから、ソース見てあっちこっちコードジャンプします。
定義探すのにいちいちgrepとかしてたら日が暮れてしまうので、素直にIDE使いましょう。IDE入れてから相当スピードアップしました。

subversionはいわずもなが。必須です。
なにせドキュメントがないものですから、動作を予想して、値を書き換えて、コンパイルして確認というのを死ぬほど繰り返します。
そうすると、前のバージョン残ってないと、どこをどう変えたかなんて覚えていられません。
IDEをお勧めする理由の一つでもありますが、割と差分を見比べるようなこともしょっちゅうやります。

最後にMakefile。これまた重要。
なにせドキュメントがないものですから(何度でも繰り返しますよ。えぇ)、なにをどうコンパイルしてどこにおいておけばいいかなんてさっぱりわかりません。
だから、適当なMakefileから拝借しました。
それがこれ
PLUGIN=のところをコンパイルしたいプラグイン名にかえれば使えます。
やってることは単純でlibtoolを使ってsoファイルを作り、ホームディレクトリにインストールするだけです。
場合によってはld.soが探せるように設定しないとダメかもしれません。(俺は設定した)

以上が基本編です。

実際hackする場合は/usr/lib/compizにあるlibhogehoge.soというhogehogeプラグインをリネームして無効化して、自分でソースからコンパイルしたhogehogeプラグインを使うようにします。
こうすることで、既存のプラグインからhackが進められるようになります。

実はキーバインドいじるためにはxmlを作ったりとか、gconf-editor使ったりとか色々するのですが、その話はまた今度。

蛇足:

たまに、ITネタ書いておかないと、「はらじゅんは実はプログラムかけない疑惑」が再浮上しそうなので、思い出した頃に書こう。
単にプログラミング自体はそんなに好きではないだけなので。

プログラミングは広大なエンジニアリング領域のほんの一領域にしかすぎなくて、私にとっても思いついた理論とかを実装するところでしかないです。
なのでまぁ、あんましプログラミングネタは書かないというわけでした。

※ただ、好きじゃないだけあって、超速でプログラミングとか正直できません。はい。しかも、実際プログラミング自体の知識も平均以上hacker未満です。はい。

なので、プログラマーというよりはエンジニアです。