プログラム

PHPフレームワーク Ethna

http://ethna.jp/ を参考にしながらEthnaを入れてみる。
何故突如Ethnaか?以下理由。

  1. 名前がかっこいい
  2. PHPフレームワーク=似たようなことを繰り返し書きたくない

前者の理由はともかく*1、後者の理由は以前、突如仕事として行わなければならなくなった際の苦労もあるので使いたかった。

ということで…。

      • -

公式サイトが充実しているのでメモを残す価値も無い気もするが、一応記録として残しておく。

Windowsマシンの方で使っているのがPHP4なので、以下のPEARコマンドで

$ ./pear.bat install http://ethna.jp/pear/Ethna-2.1.2.tgz*2
downloading Ethna-2.1.2.tgz ...
Starting to download Ethna-2.1.2.tgz (104,805 bytes)
........................done: 104,805 bytes
install ok: Ethna 2.1.2

あっさり入る。

  • 依存ライブラリの確認

Ethnaでは下記ライブラリが必要。

私のPCには上記ライブラリは格納済みなので割愛。

  • Ethnaコマンドの設定

上記の入れ方でインストールを行うとPEARフォルダの中にEthnaのバッチファイルが展開される。

  • rwx------+ 1 ******* なし 435 Jun 17 10:39 ethna
  • rwx------+ 1 ******* なし 978 Jun 17 10:39 ethna.bat

アーカイブから入れたときは、展開したアーカイブ内のbinディレクトリの中のファイルを抽出するとのこと。
PEARから入れた場合はいらないのかな。多分。

  • Ethnaコマンドを実行してみる

とりあえず実行。
PEARコマンドがあるディレクトリにはパスが通してあるので、Ethnaコマンドにもパスが入ることになる。

$ ethna

Warning: main(Smarty/Smarty.class.php): failed to open stream: No such file or d
irectory in c:\php\PEAR\pear\Ethna\Ethna.php on line 16
(以下略)

Smartyが見つからないようなので、php.iniを編集。include_pathを書き直す。
そういえば、別のプロジェクトの際の妙な設定が残っていた。Smartyは私の場合、C:\php\lib\smarty に置いているので*3

"PHP.ini"ファイル内
include_path = ".;c:\php\PEAR\pear;C:\php\lib;

これでもう一度実行

$ ./ethna
usage: ethna [option] [command] [args...]

available options are as follows:

-v, --version show version and exit

available commands are as follows:

add-action -> add new action to project:
add-action [action] ([project-base-dir])
(以下省略)

  • 実際に作ってみる

Ethnaのチュートリアルにならってサンプル作成。
自身のホームにtmpディレクトリを作成する。

$ mkdir tmp
$ ls -l
total 0
drwxr-xr-x+ 3 ****** なし 0 Jun 17 11:09 tmp

そのままの階層でプロジェクト作成を行う。
コマンドのusageに従えば、

add-project -> add new project:
add-project [project-id] ([project-base-dir])

ということなので、プロジェクトのIDをethna_sample、ベースディレクトリを先ほど作ったtmpディレクトリに設定。

$ ethna add-project ethna_sample tmp
error occured w/ command [add-project]
-> Only Numeric(0-9) and Alphabetical(A-Z) is allowed for Application Id

うむ、プロジェクト名は英数字のみですか。では、素直にやはり公式サイトのチュートリアルに従って名前をsampleで作成。

$ ethna add-project sample tmp
creating directory (tmp/sample) [y/n]: y
proejct sub directory created [tmp/sample/app]
proejct sub directory created [tmp/sample/app/action]
(途中省略)
file generated [skel.view_test.php -> tmp/sample/skel/skel.view_test.php]
file generated [template.index.tpl -> tmp/sample/template/ja/index.tpl]

project skelton for [sample] is successfully generated at [tmp]

これで一通りのスケルトンは作成されたことになる。
上で作成されたプロジェクトのWebサーバでの公開領域は~/tmp/sample/wwwなので、これを参照できる様にする。
Windowsの場合は、ローカルのWebサーバとしてAnHttpdを使わせていただいているので、この設定を変更する。
(変更は、オプション(0) -> 一般(G) -> ダイアログ内のドキュメントルートを修正)
上記の設定で、見える様になるはず。Webブラウザで閲覧してみると・・・。
f:id:hideack:20060617113659j:image
おぉ、ばっちりだ。

  • アクションを追加する

ここでアクションとはナニですか?となるわけですが、公式サイトを見ると

「アクション」とは何ですか?というのを正確に定義するのはちょっと難しいですが、要するに
1. ユーザから何らかのリクエストを受け取って(例えばURLへのアクセスや、submitボタンのクリック)
2. サーバ側で何らかの処理をして
3. 結果をブラウザに出力する
という一連の処理単位だとお考え下さい。

とのことなので、そういうことにする。*4
アクションを追加するときにはコマンドで "add-action" を指定する。

$ ethna add-action hello
file generated [skel.action.php -> /home/*****/tmp/sample/app/a
ction/Hello.php]
action script(s) successfully created [/home/*****/tmp/sample/app/action/Hello.php]

ふむ。追加された。
と、ここでタイムアップ。続きは後で。

*1:これはこれで非常に重要である。

*2:PHP5の場合はPEARチャンネルを使って入れるらしい。

*3:未だに適切な置き場なのか不明...。

*4:割切重要

MacOSXへMySQL導入。

家に戻っても、仕事と同じようなことをしているのは如何なものかという気もするが…。
Macだと飽きない。

ひとまずはダウンロード。このあたりから取得可能。
ダウンロードしたファイルをダブルクリック、中にある "mysql-standard-4.1.20-apple-darwin8.5.1-i686.pkg"(バージョンによって名前違う)をダブルクリック。展開後、インストールされる。*1
バイナリ類は /usr/local/mysql に預けられる。
またサーバのコントロールを「システム環境設定」から行える様にするには、同梱されている "MySQL.prefPane" をダブルクリックすればOK。これまた楽であっさり。
この環境設定パネルでサーバーを稼働させて、コンソールから試してみる。

$ cd /usr/local/mysql/bin
$ ./mysql

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.1.20-standard

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

ありゃ、一応もう動いたぞ。

*1:激しく楽でびっくり...。

RailsをMacにインストール

意外とあっさり。
http://rubyforge.org/projects/rubygems/ から、アーカイブ取得。私がつかったのはrubygem-0.8.11というやつ。ページの上部にある最新ファイルリリースからすぐ取得ができる。
これを適当なフォルダで展開。

$ tar xvzf rubygems-0.8.11.tgz

これで展開されたディレクトリ内に入ってセットアップスクリプト実行。
suでrootになっておく。

$ cd rubygems-0.8.11
$ ruby setup.rb

あとは、Rails本体をgem経由で取得する

$ gem install rails --include-dependencies

以上で完了。本当に入っているか見てみる。*1

$ which rails
/usr/bin/rails

なるほど。入った。

*1:念のため・・・

予約変数

Smartyには予約変数があるので、有効に使うとPHP側でアサインせずとも呼び出せる。

〜hoge.html?foo=(ココ) が渡される。

サーバーにフォームfoo2からPOSTされた値を取り出す

PHPのセッション変数$_SESSION['foo3']を取り出す

他にもいろいろあるらしい。便利だ。

Smarty – {html_select_time}

hoge.tpl

時刻を選択してください: {html_select_time prefix="hoge_"}

でいいそうだ。便利。*1
ただ、POSTする際の変数名はプロパティprefixで指定される接頭語+{Hour,Minute,Second}となる様子。(上の例だとhoge_Hour, hoge_Minute, hoge_Secondがフォームの値としてzzz.phpに渡される)

*1:むしろ楽をしすぎじゃないかと思ってしまう・・。

チューンアップ

速度大切。

メモメモ・・・。

"fedoraよん"でデフォルトでインストールされた
PHPにはグラフィック処理のライブラリが入っていないので、

% yum -y install php-gd

で入れる。

今度は…

今度はPerlだ!
・・・。
仕事の内容にもう少し統一性ありませんかねぇ。。。
ま、なんでもやります。

Builderパターン

あまりにもパターンのボキャブラリーが少ないので増やさないとダメだよなぁ。
本にある例題を多言語にコンバートして勉強中。
本日はBuilderパターン。

class MyClass
def initialize(str)
@str = str
end
attr_accessor :name
end

とあったとき、

class BuilderA
def initialize
@str = ""
end
def add1stParam
@str = @str + "hoge"
end
def add2ndParam
@str = @str + "foo"
end
def getMyClass
return MyClass.new(@str)
end
end

と、builderを作る。
で、directorも作る。

class DirectorA
def createMyClass(builder)
builder.add1stParam
builder.add2ndParam
return builder.getMyClass
end
end

これでパターンになる。メインを記述する。

builder = BuilderA.new
dirA = DirectorA.new
myclass1 = dirA.createMyClass(builder)
p myclass1.name

・・・ふむ。書けば納得。