Ubuntu LTS 8.0.4を使ってみた

Macのターミナルでほとんど用をなすので、Linuxに触らなくなってしまったのですが、Linuxディストリビューションも触っておこうということでUbuntuに手を出してみました。

Ubuntuにしたのは、セミナーで「Macじゃないノート型を持っているなと他人のパソコンを気にしていたら、Ubuntuだった」ということが最近多くなってきたから。久しぶりに使うLinuxとしていいかもしれないなと。

といっても、VMware用仮想マシンなんてものが配布されているので、ダウンロードからインストール(というかVMWare側の設定)まで10分もかからず。その後のアップデートとかVMWare Toolsのインストールのほうに手間取ったくらいです。

1CPU(MacBook Pro自体は2CPU)/メモリ512MBの環境でもサクサク動きます。

いろいろインストールしてみたんですが、Synapticパッケージマネージャを使って、ほとんどGUIで済んでしまった(何を入れればいいのかわからないと辛いけど)。今のところ、インストールしたのはこんな感じ。

・Flash Player
→ 最初、Adobeのサイトからダウンロードしようとして、うまくインストールできず。

・Apache2/MySQL/PHP
→PHPがSuhosin(Hardened PHPの)だった。

・Java(JRE)
→Selenium RCを使いたかったんです(最終的にはSelenium Gridを使いたい)。

Synapticパッケージマネージャは、APTのGUIフロントエンドらしいので、同様のことはapt-getコマンドでもできるはず。

Mac + MacPortsで十分実用的なんだけど、やっぱりUNIXとして使えるようにするまではそこそこ面倒。その点、UbuntuはGUIがMax OS Xほどじゃないけれど、UNIXとしては使いやすいような気がします。

PHPを使っていたら、XSLTProcessorクラスがない!とか言われて、慌ててphp5-xslを追加しなきゃいけなかったんですが、必要なものを追加していくというのも良いですよね。

EeePCみたいな用途なら(ブラウザでGoogle Appsを使って)、Ubuntuで十分かもしれない。

インストールメモはあるんで、あとでまとめるかも。


phingってどうなんでしょう?

最近、phingを使い始めました。JavaでいうAntみたいなものです。

ちなみに、PHP 5.2.5、phing 2.3.0, PHPUnit 3.2.21, PhpDocumentor 1.4.2, xdebug 2.0.3といった環境です(Mac OS Xです)。

まだ、exampleを動かしたくらいなのですが、変だなあと思った点がいくつか。

・exampleがそのままじゃ動かない

build.xmlとかTestCaseファイルとかをちまちま修正しないといけませんでした。

phingと連携する、phpunitとの組み合わせの問題なのかもしれないけど、最初のexampleくらい、簡単に動かせるようになって欲しい。

・PhpDocumentorTaskの動作がおかしい

$ phing docs

と単独でタスクを実行すると、うまく動くのですが。

<target name=”build” depends=”test,prepare,reports,docs”>

となっていて依存性がある状態でphing buildを実行するとdocsの処理中にエラーになりました。

docsをdependsから外したり、docsを最初に実行するようにdependsを修正するとOKなんですが、主旨からするとdocsは最後に実行して欲しいところです。

・dependsの実行順序について

phingドキュメントのGeting Startedを見ると、

 <target name="D" depends="C,B,A" />

Suppose we want to execute target D . From its depends attribute, you might think that first target C , then B and then A is executed. Wrong! C depends on B , and B depends on A , so first A is executed, then B , then C , and finally D .

となっているのです。Dを実行したいとき、depends属性によって、C->B->Aの順に実行されると思うだろうけど、間違い。A->B->Cが実行されて、Dが最後に実行される、と書いてあるように読める。

でも、実際の動きと違うんだよなあ。まあ、実際の動きが正しいんだろうけれど。

最後のはともかく、phpdocタスクは正しく動かしたいなあ。


もくもく会@ディノに参加してみた!

今日は、夕方から営業に出て、そのまま帰宅するのも早いなあという時間だったので、前から気になっていた「もくもく会」に参加してみました。

もくもくと自習やら作業やらする会ということらしく、kunitさんの「もくもく会発動」で知ったのですが、本家?もくもく会に触発されて始まったらしいです(別に木曜って決まりがあるわけではないんですね)。

弊社はまだちゃんとしたオフィスがないので、僕も社員も毎日もくもく会状態なわけですが、会社が小さい分、外からの刺激は貴重です。

今回の第3回は最終週なので、もくもくとではなく、ピザ+ビアパーティー形式。会話できるとなると、初参加しやすいです。

プレゼンもありということだったので、一応、先日iPhonista Nightでのライトニングトークとか、KeynoteとiPhoneでプレゼンする方法とか、何か話すことはできたと思うんですが、新参者なので遠慮してしまいました。ビールで酔っぱらう前に発表すればよかったんですが、打ち解けるまでにはかなり酔いが。

あと、phingに詳しい人がいれば、聞きたいこととかもあったんだけどな。

来月からは毎週火曜日ということで、定期的に参加してみようかな。

というわけで、同席した皆様&今後お会いする方々、よろしくお願いいたします。

はてなではgofurukawaですが、全く活動してません(かなり前に買ったはてなポイントがそのまま残ってる)。


Apacheのmod_rewrite

Zend FrameworkでMVCを使うには、mod_rewriteを使って、全てのリクエストをフロントコントローラー に転送することになるんですが、ローカルでテストするときだけ、なぜかうまく行かなくて悩んでました。

RewriteEngine on
RewriteBase /apps/
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

dp.SyntaxHighlighter.ClipboardSwf = ‘/blog/syntaxhighlighter/clipboard.swf’;
dp.SyntaxHighlighter.HighlightAll(‘code’);

こんな感じでApacheに設定すると、/apps/loginにアクセスするとloginコントローラーのデフォルトアクションが呼ばれます。

テストサーバ上ではうまく動いているのと、/apps/index.php/loginとリクエストすれば同じ形になるので、ローカルでおかしいのは追求せずにいたんですね。

mod_rewriteはちゃんとロードされていたので、ちょっと現実逃避でmod_rewriteの使い方を調べてみたら、Options FollowSymLinksが必要らしいです。Apacheのエラーログにもちゃんと出てました(←全く見てない)。

「mod_rewrite Options FollowSymLinks」でググったら、一発で出てきました。

mod_rewriteを使うには「Options FollowSymLinks」が必要

いやあ、ちゃんとエラーログくらい見なきゃいけませんね。


PHPのvar_dumpで悩む

最近、Zend Frameworkを使ってMVCなアプリを作っています。ほかのフレームワークやらテンプレートをそれほど使い込んだことはないんですが、やはり便利。言い方悪いですが、頭のいいPHP使いが考えて作ってる感があります。フレームワークのソースを追いかけては、なるほどなと思ったり。

デバッグする際、やっぱり初期段階では手軽なvar_dumpを使うんですよね。Zend_DebugZend_Logを使うのが作法なのかもしれませんが、ライブラリを読み込んだり、見栄えをよくするwrapperを作るのは面倒なので、素のvar_dumpを使っています。

たとえば、配列をvar_dumpすると、こんな感じに画面に表示されます。見にくいです。

var_dump.jpg

ソースを見ると、こんな感じ。

var_dumps.jpg

見にくいんですが、ソース見ればいいし、嫌なら<pre>で囲むという手も。ほかに表示がなければ、text/plainにしちゃうとか。
ところが、ふと気づくとローカルでテストしてるときだけ、カラフルになってることに気づきました。

var_dump_xdebug.jpg

ソースを見ると、<pre>とか<b>とか<font>が使われてます。これはなぜ?

php.iniを見たり、色々調べたりして悩んだ挙げ句、ようやく気づきましたよ。xdebugが有効になってるからでした。

いや、便利なんですが、原因がわからないというのは気持ちが悪いものです。

PHPUnitxdebugPhpDocumentorPhingをだだっとMacBook Proにまとめてインストールしたんですよ。その中に原因があるんだろう→extensionなxdebugが一番怪しいと気づくべきでした。

“PHPフレームワーク Zend Framework入門” (藤野 真吾)

1.5のプレビューリリース版がもう出ているので、1.0ベースの入門書は今のうちに勉強しておくべきかも。

Zend_LayoutとかZend_Formとか、新しいコンポーネントも便利そうです。