今更findParent~

Zend FrameworkのDbテーブルリレーションを使って、初めて親テーブルの
データを取得したんですが、返り値ってZend_Db_Table_Rowなんですね。

子テーブルのデータをとってくるときと一緒で、Zend_Db_Table_Rowsetの
つもりで current() を呼び出してエラーになってしまっていました。

子は複数だけど、親は1つっていう考えになってるんですかね。

ほーって思ったので、メモしておきます。

Exceptionとか

出張で、家に2週間いなかったのも手伝って、全然更新してませんでした。
その間、初めて業務関係でZend Frameworkをいじれていました。

ある程度の規模のものを作っても全然楽。開発スピードが違う。
特に、ErrorHandler、ErrorControllerを使ったエラー処理は便利。
Exceptionをthrowしておけば、エラーは拾ってくれるし、
Exception内のデータから、エラーの原因も特定できる。
何より、エラーのための処理をソースにあまり書かなくていいから、
可読性がものすごくあがる。これはかなりメンテナンスしやすい!!
Exceptionは、エラー発生ファイル、ライン数、そこまでのトレース情報までわかる。

あと、Smartyの便利さに改めて気づきました。
Smartyから、post、sessionの情報を参照できるのは使うと、手放せません。
まだやったことない方はぜひお試しください。

ViとSubversion

Mac OSX Leopardに入っているサブバージョンを使おうと
調べていたら、eclipseが出てきて文字化けでめんどくさくなったり、
viを使いやすいようにすることに興味が出たり。

結局、サブバージョンのクライアントを決めきれずに、今日は終了。
eclipseはphpファイルはいいのだけど、smartyを使ったhtmlファイルの
デフォルト文字コードがSJISになってしまって、文字化け。。。
htdocsを書いていないと、UTF-8になってくれない。

また時間見つけて調査すると思う。

見つけた資料となるサイト

http://d.hatena.ne.jp/tenkousei/20080120/1200825816
http://d.hatena.ne.jp/zariganitosh/20071103/1194140667
http://www.moongift.jp/2008/06/versions/
http://scplugin.tigris.org/servlets/ProjectDocumentList

http://www.minfish.jp/blog/archives/2006/01/osxvi.html
http://www.asahi-net.or.jp/~wv7y-kmr/memo/vim_php.html
http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/

Eclipse3.3にした

PDTを使うのに、3.3にしようとしたが、Eclipse Classicから
いろいろインストールして、動くようになった。
けれど、ヘルプ→ソフトウェア更新から、更新しようとするとエラー多数。

なんでだ?と思い、PDTのall-in-oneパッケージもインストールしてみる。
これならエラーでないかと思ったけど、やっぱり出る。
使えるならいいやと思わないといけないものなのか!?

とりあえず、今のまま仕事で使ってみよう。
家で開発するときは、ターミナルでviで十分だなと思っているんだけど、
いい感じなら、家にもEclipse入れてみようかな。
家なら、ApacheもMySQLもPHPもローカルにインストールされているから、
ちゃんと統合開発環境を作れそう。

それをやるなら、サブバージョンもやってみようかな。
ソース消えたら、かなりショックだし。

参考にさせていただいたサイト
http://download.eclipse.org/webtools/downloads/
http://download.eclipse.org/tools/pdt/downloads/
http://www.eclipse.org/mylyn/downloads/
http://server.seasar.org/manual/install_subclipse.html
http://hp.vector.co.jp/authors/VA000137/eclipse/smarty_editor/smarty_editor.html
http://zone.maple4ever.net/documents/xampp_eclipse06.html
http://de-lab.com/article/eclipse_aptana

6月8日追記
Macにインストールすときの注意点
http://d.hatena.ne.jp/alice_qux/20080209/1202551093

vimrcの項目

結構前に、オオヒダさんに教えてもらったのが出てきた。
忘れないようにここにメモっておく

~/.vimrc においてください

set nonumber
set showmode
set showmatch
set matchtime=1
set cmdheight=2
set autoindent
set tabstop=4
set expandtab
set shiftwidth=4
set ignorecase
set smartcase
set wrapscan
set laststatus=2
set showcmd

PDTとかいうもの

http://www.thinkit.co.jp/article/73/3/

ラインデバッグができるのは、便利だと思う。
特にZendだと、例外がthrowされたら、全部Error_Controllerに行くから、
どこでエラーが起こったかを特定するのに、データ取得用の処理が必要。
(サービスとしてリリースするときは必ず必要だけれど)

ラインデバッグができたら、開発中は手間が低減される。
そこが魅力的。どのくらい使えるものなのか、試してみる価値はありそう。

ムームーDNS

このブログは、hetemlというサーバで運用しています。
co-hey.comのドメインは、ムームードメインで管理しています。

そのムームードメインで、ムームーDNSという機能が使えるようになりました。
今までは、co-hey.comにサブドメインを作っても、ヘテムルのページしか表示されなかったですが、
ムームーDNSを使うと、paperboy&co.のサービスなら、
co-hey.comのサブドメインを設定できるようになったのです。

言葉で説明するとわかりづらいですね。自分でも読んでてわかりづらいと思いました。
違うサービスを、同じサイトのURLのようにあつかえるのです。これも微妙ですね。

こういうことです。
https://life.co-hey.com (ヘテムル)
http://photo.co-hey.com (プチ)

やろうと思えば、http://blog.co-hey.comをJUGEM PLUSにすることも、
http://shop.co-hey.comを、Color Me Shop! Proにすることもできます。(売る物がないですが。)

MTもいいですが、JUGEM PLUSだと機能が随時追加されていくし、ポータルがあるから、
ブログを見に来る人の数も違ってきます。
私もJUGEMで、また趣旨の違ったブログを書き始めようかと考えています。
何について書くかがさっぱり浮かばないので、いつになるかは未定です。

ヘテムル、Color Me Shop! Pro、JUGEM PLUS、Grouptubeは
初期費用無料キャンペーンもやってるみたいです。
キャンペーンページはこちら



Zend Frameworkバージョンアップ

今まで使っていた、Zend Framework 1.0.3を、1.5.1にバージョンアップしました。

まだ細かいところは検証してませんが、最初に引っかかった問題を書いておきます。

今まで、下記の【1】のように書いていた index.php を、
【2】のように書き換えないと動かなかったです。
不便だなと感じましたが、1行の修正なので大した修正ではないです。
※ /xxx/yyy/xxx/ 配下に contrllersディレクトリが存在します

【1】

$add_path = . '/xxx/yyy/ZendFramework/library' . PATH_SEPARATOR
      . '/xxx/yyy/zzz';

ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . $add_path);

require_once('Zend/Loader.php');
Zend_Loader::loadClass('Zend_Controller_Front');

$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory('controllers')
         ->dispatch();

【2】

$add_path = . '/xxx/yyy/ZendFramework/library' . PATH_SEPARATOR
       . '/xxx/yyy/zzz';

ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . $add_path);

require_once('Zend/Loader.php');
Zend_Loader::loadClass('Zend_Controller_Front');

$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory('/xxx/yyy/zzz/controllers')
    ->dispatch();

相対パス、絶対パスでの指定では動作したのですが、
パス設定をした後に、パスを利用したディレクトリ指定ではNGでした。

.htacessでRewriteを可能にする

今作っているプログラムは、Zend Frameworkを利用しているので、
.htaccessが利用できる必要があります。

前回の記事で書いたphpMyAdminを設置した後、作りかけのプログラムを
サーバからダウンロードしてきて設置したところ、見事に動きません。
調べていくと、RewriteEngineが動いてない様子。

Apacheの設定に問題がありました。
configureのオプションも、httpd.confの記述も不足していました。
以下のサイトを参考に、Apacheのmakeをやりなおして解決!!

こちらの記事に書いていた configureの内容も修正してあります。
一番最後の “–enable-rewrite=shared” の部分が付け足したところです。

mod_rewriteを有効にする方法
http://memorva.jp/memo/linux/mod_rewrite.php

htaccessを有効にする方法
http://www.site-cooler.com/tips/apache_htaccess.htm
http://httpd.apache.org/docs/2.2/ja/mod/core.html#allowoverride

fetchRowとfetchAllの違い

fetchRow、fetchAllどちらもDBから行を取得するメソッドです。

相違点は以下

fetchRow
 1. 単一の行を取得
 2. 返り値の型は、Zend_Db_Table_Row
 3. 0件取得の場合は、nullを返却

fetchAll
 1. 複数の行を取得
 2. 返り値の型は、Zend_Db_Table_Rowset
 3. 0件取得の場合は、Zend_Db_Table_Rowsetを返却

注目するところは、3です。
fetchAllは、0件でもZend_Db_Table_Rowsetを返却します。
なので、取得の有無で、nullかどうかでは判定できません。

私はどちらもnullが返ってくると勘違いしていたので、ミスりました。