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とか、新しいコンポーネントも便利そうです。


LeopardでMacPorts(3)PHP5

前々回前回に続いて、PHP5のインストールです。

インストール

まずは、インストールのコマンド。

MacPortsのPHP5で指定できるvariantsは結構種類があります(「port variants php5」で一覧)。

今回は、apache2に対してmysql5も使用することにします。pearも使いたい。

$ sudo port install php5 +apache2 +mysql5 +pear

インストール後、以下3つの操作を行います。

(1)httpd.conf にLoadModuleを追加する

$ cd /opt/local/apache2/modules

$ sudo /opt/local/apache2/bin/apxs -a -e -n “php5″ libphp5.so

指示通りのコマンド実行で/opt/local/apache2/conf/httpd.conf にLoadModule行が追加されます(sudoだけ追加してます)。

(2)php.iniの配置

$ sudo cp /opt/local/etc/php.ini-dist /opt/local/etc/php.ini

とりあえずは素のままで。

(3)Apacheの設定ファイルでAddTypeする

/opt/local/apache2/conf/extras-confディレクトリにmod_php.confがインストールされているので、これをインクルードする定義をhttpd.confに加えます。

[httpd.conf]

# PHP

Include conf/extras-conf/mod_php.conf

動作確認

Apacheを再起動&phpinfo()を実行して動作確認します。

CLI版も試しておきましょう。

$ /opt/local/bin/php -v

PHP 5.2.5 (cli) (built: Nov 18 2007 13:42:29)

Copyright (c) 1997-2007 The PHP Group

Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

pearも確認。

$ pear list

インストールオプションについて

phpinfo()すれば、インストールされたモジュールのコンパイルオプションはわかるんですが、MacPortsのvariantsとの関係を探ってみました。

「/opt/local/var/macports/sources/rsync.macports.org/release/ports/www/php5/Portfile」を見てみると、なにやら見たことのあるコンパイルオプションらしき記述がありました。

configure.args \

–mandir=${prefix}/share/man \

–infodir=${prefix}/share/info \

–with-config-file-path=${prefix}/etc \

–enable-calendar \

–with-iconv=${prefix} \

–enable-exif \

–enable-ftp \

–enable-wddx\

–with-zlib=${prefix} \

–with-bz2=${prefix} \

–without-mysql \

–without-sqlite \

–without-pdo-sqlite \

–with-libxml-dir=${prefix} \

–with-gettext=${prefix} \

–with-xml \

–with-expat-dir=${prefix} \

–with-xmlrpc \

–enable-soap \

–enable-filepro \

–enable-bcmath \

–enable-trans-sid \

–enable-mbstring \

–enable-dbx \

–enable-dba \

–with-openssl=${prefix} \

–with-mhash=${prefix} \

–with-mcrypt=${prefix} \

–with-xsl=${prefix} \

–with-curl=${prefix} \

–with-pcre-regex=${prefix} \

–with-gd \

–with-jpeg-dir=${prefix} \

–with-png-dir=${prefix} \

–enable-gd-native-ttf \

–without-pear \

–with-freetype-dir=${prefix}

variantsにあるmysql関連やpearはwithoutされてます。

同じPortfile中で、variant mysql5、variant pearの辺りを見ると、さらにコンパイルオプションを書き換えているようです。ちゃんとしたPortfileの記法はわかりませんが、元のコンパイルオプションを知ってるんで、なんとなく把握できたかな。

やらないと思うけど、Portfileを書き換えれば、好きなコンパイルオプションに変更できるんだろうな。

バージョンの違い

ちなみに。現在のMacPortsではPHP 5.2.5がインストールされましたが、Mac OS Xに元から入ってるのは、こんなバージョンです。

[Leopard]

$ /usr/bin/php -v

PHP 5.2.4 (cli) (built: Sep 23 2007 22:34:35)

Copyright (c) 1997-2007 The PHP Group

Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

[Tiger]

$ /usr/bin/php -v

PHP 4.4.7 (cli) (built: Jul 10 2007 10:54:32)

Copyright (c) 1997-2007 The PHP Group

Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

Technorati Tags: ,


Zend Framework本、読了



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

Zend Framework本、読了です。ちょっと索引が弱いなーという気はしましたが、Zend Frameworkの入門書ということで、どんなもんか理解するには十分でした。書籍があるのはいいことだよね。雑誌、ムックとか増えるといいな。

MVCを知らない人が初めて読んで理解できるだろうかとも思いますが、MVC本じゃないし。サンプルのアプリケーションを設計・開発と作る章があるので、十分なのかな。

このサンプルアプリケーションの設置で一瞬悩んだのが、初期設定ファイルの読み込み。Zend_Controllerの典型的なレイアウトに沿って、ウェブからアクセスされるドキュメントルートとアプリケーション関連のファイルを置くディレクトリが同階層にあることになってるんですよ。それで初期設定ファイルの読み込みが「../」ってなってたんですが、実際にはそうなってないわけで。いくつもファイルを修正したり、パスを通したりしました。

書籍ではZend Framework1.0.1を使って解説していましたが、読み終わったところで1.0.2がリリース

書籍中で指摘していたバグが4つあって報告済みとのことだったんですが、 まだ治ってない?

Issue Tracker(JIRAです)を探したものの、Zend_Filter関連の3つは見つけられず。Zend_Mailのバグはこれかな。

Zend Frameworkのドキュメントは日本語版もあるし、ダウンロードもできるんで、落として斜め読み。基本的なもの以外にも、おもしろそうなコンポーネントがちらほら。

まずはZend_Localeでの地域化とZend_Localeでの多言語対応。あらかじめ配慮しておけば、簡単に多言語サイトが作れそう。

Zend_Gdataもおもしろそう。Google Calendar、Google Spreadsheetsのデータにアクセスできる。Google Apps Provisioningというのは知らなかったな。Google Appsの設定を変更できるので、メーリングリストの登録や削除なんかをするためのウェブインターフェースを作れそう。

Technorati Tags: ,


Zend Framework本

6月末にリリースされたZend Frameworkですが、初の書籍が出たということで購入してみました。

Zend Frameworkはβ版の頃に触ってみただけなので、再度勉強したいと思います。

PHPのフレームワークは、いろいろありすぎて日和見していたんですが、Zend FrameworkはZend自体が開発してるということもあり、期待してました。少人数の開発であっても、フレームワークを使うのはいいことだと思っているので、癖のないシンプルなものが普及して欲しいなあと思っています。



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

Technorati Tags: