日々のできごとと写真

XAMPPをVistaで使おうとしてハマるワナ


2009-02-04 00:56 | IT | コメントをする »

xampp_vista

Windows環境で使っているXAMPPに含まれるApacheやPHPのバージョンが若干古いので、最新のものに入れ替えようとしてハマったことを記します。

環境

  • Windows Vista SP1
  • XAMPP 1.7.0
    • Apache 2.2.11
    • MySQL 5.1.30
    • PHP 5.2.8
    • phpMyAdmin 3.1.1
    • FileZilla FTP Server 0.9.29
    • Mercury Mail Transport System v4.52
    • OpenSSL 0.9.8

apache friendにある1.7.0のZIPアーカイブ版を利用しました。
ダウンロード後、C:\xamppに展開することにします。

PHPのcliでエラー

早速、PHPが正常に動くか確認するため、コマンドラインでバージョン情報を確認します。

c:\xampp\php>php -v
PHP 5.2.8 (cli) (built: Dec  8 2008 19:31:23)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

すると、もれなく

CLIは動作を停止しました

と、エラーが出現します。強制終了の雰囲気ですが、コマンドは実行されます。
うーん、気持ち悪い。
原因は既出で、php_mysqli.dllが原因のようです。

extension=php_mysqli.dll

;extension=php_mysqli.dll

とコメントにすることで対処できるんですが、じつは1.7.0では(どのバージョンからは不明)対応済みのdllが用意されています。
xampp\php\extをのぞいてみると、「php_mysqli_5.0.51a.dll」というファイルがあり、これを「php_mysqli.dll」にリネームすることで回避できます。

php -i
#snip
mysqli

MysqlI Support => enabled
Client API library version => 5.1.30
Client API header version => 5.0.51a

バージョンがバラバラなのがかなり気持ち悪いんですが、MySQL5.1.30に対しても問題なく動きます。

eAcceleratorでエラー

デフォルトではOFFにされていますが、PHPのアクセラレータのひとつ、eAcceleratorがバンドルされているので、これを有効にしてみます。
php.iniを修正します。

よくあるミス
XAMPPにはphp.iniが2つあります。
ひとつはxampp\php の下、もうひとつはxampp\apache\bin の下。
前者はCLI用のiniファイルで後者はApacheモジュール用のiniファイルですので、注意しましょう。

セミコロンをすべて外します。

矩形選択

こういう作業は矩形選択(箱型選択)できるエディターが便利ですね。
(上記エディターはK2Editor

さて、実行してみましょう。

php -i
#何も表示されずに終わってしまう・・・

php -v
#こっちもだ・・・

ログもエラーも出ないので、困った・・・。
CLIからの追跡はあきらめて、PHPモジュールの方のphp.iniのeAcceleratorを有効にして、ApacheからPHPを実行して経過をみてみます。
すると、Apacheが起動せず、強制終了します。

eacceleratorが有効にならない

ということなので、Apacheのエラーログ(xampp\apache\log\error.log)を確認します。すると、

PHP Warning:  [eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.2.7. Rebuild it for your PHP version (5.2.8) or download precompiled binaries.\n in Unknown on line 0

衝撃の事実。xampp1.7.0にバンドルされているeAccelerator.dllは(ある意味伝説の)5.2.7 をターゲットにコンパイルされているので、バージョンが合わないというエラーです。

こちらのサイトに5.2.8用にビルドされたdllがダウンロードできるので、こちらをxampp\php\ext\eAccelerator.dllと差し替えます。

c:\xampp\php>php -v
PHP 5.2.8 (cli) (built: Dec  8 2008 19:31:23)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
    with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

ちゃんと認識されました。

それから忘れがちなのが、ACLが有効になってるとサーバーの立ち上げなどにAdministrator権限が必要なので、xampp-control.exeなどを実行するときには、右クリック→管理者として実行(A) で起動しましょう。sudoですね。
リソースが許すの出れば、サービスに登録してしまうと楽です(セキュリティーには気をつけて)。

今回なんでVista環境にxamppを入れたかというと、このブログでも使ってるWordPressのコードを読んで見ようと思ったからです。
ソースをちらっと見たことある人ならわかると思うんですが、結構ヒドいコードです。
PHPのカオスさがそのまま如実に表れてるというか。
なので、debugツールを使って楽をしようと導入したわけです。
XDebugかZend Debuggerを使って、少しずつ解析していって、経過を載せたいと思います。

ひょんなことからパンを作ることになった


2009-02-02 00:54 | おいしい, 日記 | コメントをする »

ABCCS

クッキングスクール?料理教室?

ABC Cooking Studioに通っている友達の紹介で、無料で体験ができるということで連れて行ってもらいました。
作るものはチョコブレッド(パン)とベリーのコンポート。むむ。

最近料理教室が流行ってるみたいですね。
ABC Cooking Studioは女性限定の教室ですが、「+m」という教室が丸の内と銀座に2か所あって、そこは男子も通えるんだそうです。
今日は銀座ファイブにある銀座の方の+mへ行ってきました。
日曜日ということもあって、実際に女の人に交じって料理作りに奮闘する男の人がちらほら。
ちなみに皆さんが今日作ってたのは「ホウレン草の手打ちパスタ~サーモンクリームソース~」と「魚介と野菜のフリット」でした。

体験スタート

教室に着くとロッカーに荷物を預けて、今日の先生との挨拶を済ませ、エプロンとハンドタオルを借りてキッチンへ。
無料体験ということで、作る材料はすでに計量済み。(実際の教室では計るそうです。)
さらに小麦粉・イースト・砂糖などの入ったボールと小麦粉・塩の入ったボールと二つに分けて置いてありました。
イーストの入った方のボールに(これもすでに計量済みの)溶き卵を流し入れ、熱いお風呂ぐらいの温度のお湯を入れ、こねます。
そこへ塩の入った方のボールに無塩バターを入れ、中身をすべてイーストの方のボールに入れて混ぜます。
まとまったらボールから取り出し、机の上でこね延ばして、1次発酵40℃のオーブンで20分。
発酵中には使った物を洗います。
調理で使ったものは都度自分達で洗うんですね。

驚きの連続

っていうか、オーブンで40℃とか設定できるの知らなかったー。
材料も全部計ってあって、3分クッキングをやってるみたいな感じで面白いもんですね。
無料体験の方は先生がマンツーマンだったんですが、手打ちパスタを作ってる本番チームはマイクを付けた先生が中央にある教壇風キッチンで調理をしていて、その手元(コンロとまな板)を2台のカメラが映していて、生徒さん達は壁にかかってる液晶画面でそれを見ながら各々調理を進めていくという、IT全開のスタイルでした。

あまりべったりと教えられるのが苦手な人にはちょうどいい距離感で、これはいいスタイルだと思いました。
わからないところは別にサポートする先生がいるようなので、置いて行かれることもなさそう。
最初ビデオみて進めてるのかと思ったけど、違いました。

後半戦

さて、発酵が終わってふっくらした生地を広げて30cm角程に延ばします。
その真ん中にチョコレートシートを乗せて包みこみます。
チョコを含んで縦長になった生地を3つ折りにして延ばし、3つ折りにして伸ばしを繰り返すと生地ごしにチョコレートがマーブル柄に透けてきて、いつかチョコがはみだしやしないかとひやひやしながら作業しました。
なんとかまとまったところで、生地を三等分して渦巻きになっている切り口を上に並べて、2次発酵を25分。

洗い物をした後は休憩ということで、試食スペースでコーヒーを飲みながら休憩。
教室もきれいだし、ジュースやコーヒー、ワインまで置いてあるドリンクコーナーがあって、そこから自由に飲み物を頂いて、無料なのに至れりつくせりだー。

2次発酵が終わったら、表面に卵黄を塗って、アーモンドスライスを乗せ、ついに焼きます。

休憩しながら待つこと18分。できあがり。

焼きあがり

コンポートの方は材料のオレンジを切っただけで、煮込む作業は全部やってもらったので、気がついたらできていた感じでした。

箱にパンとコンポートを入れてもらって、終了。お疲れ様でした。

まとめ

無料体験なんだから入会を促すような勧誘が当然あるんだと思ってたんですけど、なーんにもなく普通にパン作ってコーヒー飲んでコンポート作ってもらって、それをお土産にもらって帰ってきたっていう、なんとも恐縮してしまうほど、素晴らしい体験でした。

それでは申し訳ないから、ブログで若干宣伝しようかなーと、思ってしまったくらい。

料金プランをみてみたら、1授業が4,500円程(回数券方式なので値段が微妙に変わる。12回から。)で、自分の都合に合わせてどこの教室にいってもいいみたいです。(男子は丸の内・銀座限定)

個人的に料理は自分で作って失敗して上手くなるものだと思っているので、教室で習って覚えるというのがしっくりこないんですが、作ってるものがパーティーでふるまったり、休日に1日かけて楽しみながら作るようなものだと、習うっていうのがマッチするのかなーと思ったりしました。
今日やってた生パスタとか、家庭料理じゃないですからね。

料理(調理)は科学変化をどう制御するのかという物理面と、つくる相手を思う精神面が両立しないとうまくいかない、とても奥が深い技術ですねぇ。

いただきます!

この箱にパンが
こういう感じで入ってました
いただきます

このウェブサイトにアクセスすると、コンピュータに損害が生じる可能性があります。


2009-02-01 23:54 | 日記 | コメントをする »

Googleエラー

こんなメッセージが、このフォントサイズで出てきたらびっくりしますよ。
しかもGoogleの検索結果で。

さすがにキーワード「google」で検索しても下のような結果になったときは、googleの不具合だと思ったんですが、事態は意外と深刻なんじゃないかと思いました。

検索結果

わかっていたことですが、インターネットで検索エンジンを無料で提供している1企業のシステムが不調になっただけで、多くのユーザーが影響を受けるということ、ですよね。

公共の電波を使って放送をしている放送局のような公共性が求められてるのと、ほぼ同じだと感じました。
また、ある人は「自分のウェブサイトをキーワードとともにgoogleにインデックスしてもらうということは、銀行にお金を預けるようなもの」だと言っていました。
より長くより多くインデックスしてもらうことで、多くのリクエスト(お金)を集めることができるってことで、こちらも公共性の高い事業の例えだと思います。

しかし、天下のgoogleをもってしてもヒューマンエラーを起こしてしまうってところには親近感が湧きました。
rm -fR / 的なてんやわんやがあったんだろうなぁ。

OpenPNE3.0がリリースされたのでインストールまでしてみる


2009-01-29 01:35 | IT | 2 コメント »

openpne3.0

昨日、新生OpenPNE3.0.0がリリースされました。
今回のリリースの大きな特徴はなんといってもベースとしてsymfonyを採用したことです。

しかも開発のコミュニティーを見ているとsymfonyの採用バージョンを1.1から1.2へと途中で変えたり、いろいろ試行錯誤があったようです。

最新ソースはこちらのリポジトリか、zipファイルで取得できます。

インストール

それでは作業を進めていきます。
ソースのダウンロードと、展開を行います。

wget http://downloads.sourceforge.net/openpne/OpenPNE-3.0.0.zip
unzip OpenPNE-3.0.0.zip

展開されたファイル群の中からNOTICEを見てみると、

This product needs the third-party softwares listed blow to run.
 - PHP: Hypertext Preprocessor (5.2.x)
 - symfony (1.2.x)

と、symfony1.2以上、PHP5.2以上が必要だと明記されています。
この環境にはすでにsymfony1.2.2とPHP5.2.6がインストールされていますのでこのまま進めてみます。
DBはMySQLを利用し、
dbname=openpne3, username=openpne3, password=password, host=localhost を用意しておきます。

OpenPNE用taskが追加されており、openpneで始まるtaskが用意されています。
利用可能なタスクは

symfony -T

で確認できます。

DBの設定とデータの初期化を行います。

symfony openpne:install

DBに関する設定をウィザード形式で進めていきます。

Choose DBMS (mysql, pgsql or sqlite)
mysql

Type database username
openpene3

Type database password (optional)
password

Type database hostname
localhost

Type database name
openpne3

Type database socket path (optional)

The DBMS                mysql
The Database Username   openpne3
The Database Password   ******
The Database Hostname   localhost
The Database Name       openpne3

The Database Socket
Is it OK to start this task? (y/n)
y

#以下処理が流れていきます

設定が無事終わったら、パーミッションの設定を行います。

symfony openpne:permission

これでアクセス可能になります。

って簡単にいかない

順調に行けば上の通りなんですが、今回の環境ではスムーズには行きませんでした。
必要な環境はこちらに書かれています。

XSLがない

[propel-sql] Could not perform XLST transformation.
Make sure PHP has been compiled/configured to support XSLT.

PHPのXSLエクステンションが入っていないらしい。
この環境のPHPはソースコンパイルでいれたものなので、ソースからエクステンションのみコンパイルします。

cd ~/php-5.2.6/ext/xsl
phpize
configure
make
sudo make install

configure途中で

configure: error: xslt-config not found. Please reinstall the libxslt>= 1.1.0 distribution

なんて出る場合は、libxsltをインストールしてから、再度configureを実行します。

sudo yum install libxslt-devel

生成されたxsl.soを読み込むようにphp.iniを編集します。

sudo vi /etc/php.ini
extension=xsl.so

読み込まれたかどうかを確認します。

php -i |grep xsl
xsl
libxslt Version => 1.1.11
libxslt compiled against libxml Version => 2.6.16
libexslt Version => 1.1.11

これで大丈夫です。

PDOがない

Execution of target "insert-sql" failed for the following reason:
/usr/local/lib/php/symfony/plugins/sfPropelPlugin/lib/vendor/propel-generator/build-propel.xml:275:1:
 [wrapped: could not find driver]
   [phing] /usr/local/lib/php/symfony/plugins/sfPropelPlugin/lib/vendor/propel-generator/build-propel.xml:275:1:
 [wrapped: could not find driver]

 Some problems occurred when executing the task:
   build-propel.xml:275:1:  [wrapped: could not find driver]
   Read the logs to fix them

なにやら真っ赤です。
could not find driverということなので、DB接続ドライバーがないというエラーです。
symfony1.2が採用しているORMのPropelが1.3になっていて、このライブラリがpdo_mysqlを必要としています。

xslと同じ要領で

cd ~/php-5.2.6/ext/pdo_mysql
phpize
configure
make
sudo make install

入ったかどうかを確認します。

php -i |grep pdo
pdo_mysql

OKです。

さらにメモリーエラー

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to
allocate 35 bytes) in
/usr/local/lib/php/symfony/util/sfToolkit.class.php on line 191

これは素直にメモリの作業領域が足りないので、php.iniのmemory_limitの値を大きくします。

sudo vi /etc/php.ini
memory_limit = 64M

容量はメモリの許す範囲で。

番外編

openpneタスクコマンドでインストールしない方法もメモしておきます。
通常のsymfonyアプリケーションの手順になります。

DBの設定のためconfigディレクトリにdatabases.ymlを作成して、設定を書き込みます

vi config/databases.yml


all:
 propel:
   class:        sfPropelDatabase
   param:
     classname:  PropelPDO
     dsn:        mysql:dbname=openpne3;host=localhost
     username:   openpne3
     password:   password
     encoding:   utf8
     persistent: true
     pooling:    true

それから同じくconfigディレクトリのpropel.iniの一部を修正します。

vi config/propel.ini
propel.database.url        = mysql:dbname=openpne3;host=localhost
propel.database.password   = password
propel.database.user       = openpne3
propel.output.dir              = {ProjectRoot}#ここにはプロジェクトのパスを

DBにスキーマーを設定します。(DDL)

symfony propel:insert-sql

初期用のデータをインサートします。(DML)

symfony propel:data-load

これで動くようになりました。

所感

symfonyは採用されているプロジェクトはちらほらあるんですが、公式サイト以外ではなかなかまとまった情報が出てこなくて、ベストプラクティスみたいなものが手探りな感じがあるので、その辺りがあぶり出てくるといいなとsymfonyユーザーとしては期待しています。
少しソースをみたところだと、sfAction→sfOpenPNE*Action→通常のActionというように、間にOpenPNE用拡張クラスを入れていて、通常のActionに手をいれやすく設計されてますね。
もう少し読んでみたいと思います。

最強のUSBメモリ


2009-01-27 01:15 | IT, 写真 | 4 コメント »

最近の携帯は外部メモリーにmicroSDを採用していることが多くて、知らずにmicroSDを使っている人は結構多いと思います。
それと同時に、microSDに必ずといっていいほどついてくる、通常サイズのSDカードに変換するアダプター。
これも同じくらいの人が持ってるんじゃないかと思います。

でも、SDカードサイズになったからって、そもそもSDカードリーダーを持っている人がどのくらいいるんでしょうか。
ノートPCならまだ装備している機種もあるかもしれませんが、これはこれで、たぶんSDカードリーダがついてること自体知らない人が多いんじゃないでしょうか。

一方、PCの世界でもっとも普及しているリムーバブルメディアというとUSBメモリーで、こちらはUSBメモリーのことを「USB」って呼んじゃうくらい市民権を得ていて、この携帯の標準外部メディアのmicroSDとPCの標準外部メディアのUSBメモリーが融合したのがこの商品!

これ見つけたときは感動しました。
これはアダプターだけですけど、microSD込でUSBメモリーとして売っているものもあります。

パッケージ

このサイズ。microSDより一回り大きいくらいです。
このサイズ

カバーを取ると、ほとんどUSBの端子部分。
ほとんど端子部分

端子を見てみると、USBの構造をうまく利用していて、この上半分の端子の中にmicroSDを挿します。
この上側にmicroSDを挿します

ここに、こうやって入れてしまいます。
吸い込まれるように

結構堅いんで、ビビらずにザスッと。黄色い三角の部分がイジェクト用のスライドなので、これが上がばOK。
入ったー

PCに挿してみるとこんな感じ。突出部分が5mmということです。
挿すとこんな感じ

当然、問題なく認識されます。
ちゃんと認識されます

VistaではSDカードリーダとして認識。当り前か。
SDカードリーダーと認識しています

受け渡したり持ち歩くには小さすぎて不便だし、なくしたりしそうでリスキーですが、常時挿しっぱの環境では小さくて邪魔にならないし、誤って抜けたりしにくいのでリスクも少なくなります。

現在自宅サーバーでは通常サイズのUSBメモリをバックアップメディアとして使ってるんですが、蹴っ飛ばしてしまいそうで怖いんですよね。
こういう用途には最適な商品です。