今日のデスクトップと notify-send

お部屋の模様替えよろしく、気分を変えたいときは OS のデスクトップをいじると心機一転、開発も進むというものです(本当か?)。 🙂

ぼくは GNOME なので、こういうときは gnome-look。 もちろん GNOME のテーマから始まり、フリーの壁紙からアイコンまでありますのでほかの OS の人も見てみるとインスピレーション向上に一役買うかもしれません!。

Eyecandy for your GNOME-Desktop – GNOME-Look.org

desktop11

みてたら、screenlets でよさそうなのをみつけたので、入れてみました。 右下のフォルダ一覧です。

desktop10 

Folderview Screenlet GNOME-Look.org

要は Nautilus ショートカットなんですが、グループ化できてごっそり移動できるのが便利かもです。 もちろんいくつでもつくれて、背景色とかも変更できます。

desktop12

一番操作があると思われる、Apache の htdocs を設定しておきました。 screenlets らしく背景も透過していておしゃれであります。 🙂

透過といえば Ubuntu 9.04 で搭載された通知システム。 Pidgin とかいくつかのソフトが対応した状態で出荷されているようです。

Ubuntu のパッケージでありませんが、 ぼくの大好きな twitter クライアントの twitte.rb さんもオプション入れるとこの通知ができます。

desktop20

その前に、notify-send コマンドをインストールしておきます。

$ sudo apt-get install libnotify-send

これで $ notify-send ほげ とかやって右上に表示されれば成功です。

で、オプション設定。

desktop21

Use notufy-send にチェックを入れれば良いかと思います。

desktop22 

にょきっとな。 いいでしょ。 🙂

songbird もこれに対応できないかなと思いました。 ・・・ songbird のプラグイン、、作り方分からない。。(笑)

WordPress のソースを解析する方法

WordPress のコアファイル数は *.php だけだと、たぶん 260~270 あると思いますが、なにかしらの調査があって調べようと思うと最初はどこに何が状態になると思います。 ということで、ここは IDE の力を借りて簡単にソースを追う方法を紹介してみます。 というかぼくがいつもやっている方法です。 🙂

使っているのはおなじみの Eclipse PDT。 紆余曲折ようやく Ubuntu でも 2.0 が使えるようになったので PDT 2.0 であります。 面倒だったのでまだ英語のままです。

eclipsepdt10

これですね。

IDE というのは、プログラム言語をある程度知っています。 これが関数であるとか、ここが変数のスコープであるとか、という部分をパースしてくれているので、ふつうの検索とかより賢い検索であるとか、カーソルジャンプが使うことができます。

PHP は、言語仕様として、 requre とか include を動的にすることができるので IDE が無力になる場合もあるのですが、それでもある程度まではイケます。 動かすまでどういうプログラム構成になるか分からないというところが、PHP の最大の特徴のような気もします(笑) まぁ DI とかもそうですね。

てなわけで、ケース1。 page_navilink という関数があったとして、これってどこにあるんだっていう grep の例。

PDT では PHP Seach という機能が使えます。 ここで、Limit To を Declarations に設定すると定義部分だけ抽出して検索結果を返してくれます。

eclipsepdt11

おお、general-template.php にあるのね~。

eclipsepdt12 

ソースにぴょん。

eclipsepdt13

ふつうの grep だと、呼び元先、そのほかコメントとかにあるのもだしてきちゃうので、この Limit は賢いです。

ケース2。 じゃーこの page_navilink 関数はどこで使ってるの?

関数を改修しようとして、影響範囲を調べるのによくあるパターンです。 実は PDT には、Java IDE でおなじみの Call Hierarchy というメソッド呼び出し検索機能があるっぽくみえます。 関数なぞって右クリックして実行。。

eclipsepdt14

にゃーんも、でね~(汗)

[news.eclipse.tools.pdt] Re: ‘Open call hierarchy’ (Ctrl-Alt-H) doesn’t

Call Hierarchy is not implemented yet in PDT 2.0.

[tegaki]くらぁ~!(笑)[/tegaki]

というわけで、残念ながら Call Hierarchy 機能は使えないのですが、呼び元検索であれば先ほどの PHP Serach で代用できます。

Limit を References に。

eclipsepdt15

ほうほう、これから呼ばれているのか、の図。

eclipsepdt16

なんて感じですね。 いくつかの呼び出しをみれば使い方も分かってきます。

最後ケース3。 テーマをいじってたときに、the_tags という関数の使い方を見たくなったとき。

IDE を使う一番らくな部分が、定義ジャンプです。 the_tags の定義部分にボタン一つで飛ぶ機能であります。

こればっかりは、見ていただいた方が早い!1分動画なのでみてみて~。 🙂

検索すらいりません。 F3 押すだけでどんどんとべますので、ソースを追うときは恐ろしく効率的です。 テーマ表示部分のフィルターみつけるときはこの方法が一番早く見つけられるかもしれません。 あと、PHPDoc 形式にコメントがちゃんとなっていれば、カーソルあわせでホバーもします。

さてさて、ほかにも IDE には、それっぽいところにブレイクはっておいて、そっからステップで追っていくとかいろいろ小技があるのですが、少し大きめのアプリであれば使ってみる価値はあると思います。

以上、ひろまさワンポイント(!?)でした。

Ubuntu 9.04 の MonoDevelop 2.0 でデバッガがうまく動作しない

Ubuntu 9.04 で楽しみにしていたことのひとつに、オープンソース .NET 実装 mono の開発環境が MonoDevelop “2.0” と 2 系になることでした。 もちろん、コンパイルすれば 2.0 はどこにもで入るわけですが、やっぱり標準パッケージになっていると安心感が違います。 🙂

 monodevelop02

MonoDevelop 2.0 で注目していたのはデバッガが動作すること(1.0 ではできなかったのです)だったのですが、いっくらやってもうまくブレイクできません。。

[tegaki]しょぼん。。[/tegaki]

一応、インストールパッケージなどを確認して本日再挑戦してみました。 超簡単なプログラムにブレイクいれて、てい。

monodevelop01

・・・。 さようなら。。

現象としては、だんまりしたままうんともすんともです。

こういうときはログを・・・。

## DebuggerServer started
Cannot read symbol file `/usr/lib/mono/2.0/mscorlib.dll.mdb':
  Could not find file "/usr/lib/mono/2.0/mscorlib.dll.mdb".
WARNING: Got event 137f for unknown pid 15158
WARNING: Got event 137f for unknown pid 15159

はい? たしかに該当ファイルはないようです。 で、このログをたよりにバグを探していくと、ありました。

Mono – MonoDevelop IDE – error on debugger init (mscorlib.dll.mdb)

I think the problem is that you’re trying to use mono-debugger-2.0 which seems to be buggy. Use the SVN version, it works for me but the 2.0.

Bug #367232 in mono-debugger (Ubuntu): “mdb stops with "Got event 137f for unknown pid 8522"”

Binary package hint: mono-debugger

Hi, the mono-debugger in Jaunty has a serious bug in it, which prevents it from debugging.

This has to do with a race condition, which only appears with newer kernels.

Ubuntu のバグ登録日は 4/26 ということで、ついこの前ですね。

2.4 系の mono-debugger では修正されていることですが、Ubuntu は 2.0 系を使っているので修正するにはバックポートになりそうですが、はたして誰か拾ってくれるかどうか・・・。 どなたかお願い。。(笑)

ただ不思議なのは、ごちゃごちゃやったら一度だけうまくうごいたことがあるのです。。 なにかカーネルが絡んだ不具合のようなので難しい問題なのかもしれません。

まぁまぁうちの環境の不具合じゃないということが分かっただけでも収穫であります。 果報は寝て待て 🙂