前言撤回日記

Fixing a CakePHP 404 error

080823cakephp.jpg
CakePHPというPHPフレームワークが便利で重宝しているのだけれども、ローカル環境で動いていた物がサーバにアップロードしたら動かなくなった。特定のactionで「The requested address was not found on this server」と表示される。
いろいろと原因を探っているうちに、app/config/core.phpでDEBUG定数を0(production)にした際に、controllerで$usesにセットしたmodelが読み込まれなくなり、そのためNot foundになるらしい所まで判明。

で、解決方法として、こちらに
CakePHPのdebugレベルをproductionにするとThe requested address was not found on this server.になる問題 (山本隆の開発日誌)

問題があったのは、app/tmpフォルダとその下のフォルダのアクセス権でした。
tmpフォルダの下には、cacheフォルダやlogフォルダがあります。
おそらく、ここにファイルを作成できなかったためエラーが発生していたのではないかと思います。


とあったので、とりあえずパーミッションを777に変更してみたものの残念ながらウチでは解決せず。
で、結果的にapp/tmp/cache/models/に入っているDB Listのキャッシュファイルを削除したら問題なく動作した。
どうやらmodelを追加する前の状態がキャッシュされていたため、新規に追加したmodelが読み込まれなかったようだ。

けっこうハマったので同じ悩みを抱えた人のためにもメモっておきます。

参考:Nabble – Re: 404 Not found on existing controller and action(ここでは特にpersistent/をクリーニングする、と書かれてますな。)

幅と高さと男と女

ちとヘビーにハマったのでメモ。

createEmptyMovieClipで空のムービーを作って、そこに画像データをロードした。
で、mxパッケージのTransitionManagerクラスでトランジッションさせようとしたところ、それが全然きかない。見事にパッと表示される。

この手の外部データ読み込みでありがちなのが読み込みタイミングの問題で、つまりは読み込みが完了していないデータに何らかの処理をしようとしても当然エラーになるというやつ。まあ初歩的なミスだ。

でもこの時はMovieClipLoaderクラスを使っていて、読み込み完了のイベントが発生してからトランジッションをかけていたのでそれはない。

でもって半日ウダウダしてやっと原因が判った。
FlashってどうもcreateEmptyMovieClipで作成したMovieClipに読み込まれたデータの幅や高さが取得できないくさい。

試しに新規ファイルを開き、

//テスト

this.createEmptyMovieClip(“test_mc”, this.getNextHighestDepth());
test_mc.loadMovie(“hoge.jpg”);

trace(test_mc._width+”, “+test_mc._height);


としたあと、適当なファイル名で保存。同じディレクトリに「hoge.jpg」という名前でjpgファイルを作成。

パブリッシュプレビューすると結果は「0, 0」。
という事はサイズ0のオブジェクトに対してTransition効果をかけようとしていたワケだ。

仕方がないからcreateEmptyMovieClipしたMovieClip内(この場合test_mc)に

test_mc.lineTo(500, 300);


なんつって画像の大きさに合わせて対角線を一本引いてしのいだ。
我ながらダッセーとか思うが、他になんかいい方法あるんでしょうか……。


追記(2006/2/22)
コメント欄にてご指摘いただきまして、本エントリーがガセであることが判明いたしました。多謝。
やはり読み込み判定のタイミングの問題だった模様。
>読み込み完了のイベントが発生してからトランジッションをかけていたのでそれはない。
なにが「それはない」か(笑)。

Terragen™ 2

070107terragen.jpg
景観3DCG作成フリーソフトウェア
Terragen™ 2

いくつか機能制限はあるものの、本格的な景観3D画像が作成できるフリーウェア。
今まで見たこの手のソフトの中では商用をふくめてもかなり高性能な方に入るだろう。マッピングが流れたりするような判りやすいCG臭さはまったくなく、サンプルを見るとあまりに自然すぎて、実は全部ロケでした、とか言われても信じてしまいそう。

Terragen 2 Images(イメージギャラリー)

何か自分でも作ってみるかと思い、とりあえずマニュアルのチュートリアルに沿って色々やってみたのが上の画像。ショボくてすんません。OS X版は現状はまだバグも残っていてなかなか思い通りには動いてくれなかった。

しかし今後に大きく期待できそうなソフトウェアであります。

via. 3D景観CG作成フリーソフト「Terragen 2 Technology Preview」登場 – GIGAZINE

DAVID

1万円以下でできる3Dスキャナ。

Institut für Robotik & Prozessinformatik

PCとWebCam、レーザー、板(スチレンボードとか)で3Dスキャナを作る。
上記のURLに作成方法と作成に必要なフリーウェアがある。
業務レベルで使えるほど制度は高くなさそうなのと、まだよく見てないので出力形式がなんなのかは判らないけど、とりあえずおもしろそう。

via. 年末年始の工作に最適?1万円以下で3Dスキャナーを作っちゃう方法 | p o p * p o p

足踏みSQL

さて仕事も少し詰まってきたものの、しばしそれらをうっちゃったままサーバ関連をいじくっていた。
まずはDBで遊ぼうと思ってmySQLをインストール。
これは公式サイトからパッケージをダウンロードしてダブルクリックするだけだったのでめちゃくちゃ簡単。おそらくMac OSX版が一番簡単なのではないだろうか。起動や停止もMySQL.prefPaneを使えばシステム環境設定パネルから行える。

そのあとがハマった。

PHP本の巻末に載っていたmySQLのインストール手順を見ながらrootのパスワードを設定し、anonymousユーザーを削除した。

mysql> SELECT Host,User,Password FROM mysql.user;

とすると、Userはrootのみになり、先ほど設定したパスワードが表示されている。
よしよし、今日はこれぐらいにしておこう。

翌日、さてテスト用のDBでもCREATEするか、と思ったらmysqlにアクセスできない。前日に設定したパスワードを間違いなく入力しているのにである。

$ /usr/local/mysql/bin/mysql
ERROR 1045 (28000): Access denied for user ‘kohashijunji’@'localhost’ (using password: NO)

$ /usr/local/mysql/bin/mysql -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘kohashijunji’@'localhost’ (using password: YES)

$ /usr/local/mysql/bin/mysql -u root
ERROR 1045 (28000): Access denied for user ‘root’@'localhost’ (using password: NO)

$ /usr/local/mysql/bin/mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@'localhost’ (using password: YES)

と言った具合。
suしてroot権限で実行しても結果は同じ。ことごとくアクセス拒否される。
さんざん悩んで、とりあえずパスワードを確認する事にした。
mySQLは起動時に–skip-grant-tablesオプションを指定するとユーザー確認用のデータを読み込まずに起動できる。
一旦mySQLを終了してからターミナルで

$ /usr/local/mysql/bin/mysqld_safe –skip-grant-tables

と打ち込んで起動する。
新規シェルを開いて

$ /usr/local/mysql/bin/mysql

でmySQLに無事アクセス。
前日のようにmysql> SELECTするとやはりrootユーザーと昨日設定したパスワードが表示される。でもアクセスはできない。さっぱり判らん。

再度あきらめてさらに翌日。ハタと思いついてMySQLのリファレンスに沿ってパスワードを再設定したところ、今度はちゃんとrootでアクセスできるようになった。
つまり、本に書かれていたパスワード設定のコマンドが間違っているようなのだ。
mySQLは設定されたパスワードを符号化してから入力されたものと比較する(あるいは入力された物を暗号化してから比較するのかも)。
本の解説ではrootのパスワード設定は

mysql> UPDATE mysql.user SET Password=’abcd’ WHERE User=’root’;
mysql> FLUSH PRIVILEGES;

となっている。だがそれではパスワードは暗号化されないのだ。暗号化されていないパスワードをさらに符号化して入力と比較しても当然一致するはずがない。
正しくは

mysql> UPDATE mysql.user SET Password=PASSWORD(‘abcd’) WHERE User=’root’;
mysql> FLUSH PRIVILEGES;

なんである。

こうした後でmysql> SELECTすると今度は暗号化されたパスワードが表示された。

ひとまずはメデタシであるが、仕事が詰まってきていまだにテスト用DBは構築できていない。すなわちスタートラインから一歩も進んでいない状態。
まるで免許を取ったのにずっと駐車場の中でエンジンをかけたり切ったりブレーキ踏んでみたりしているようだ。
はやく公道に出るところまで行ってみたいです。

note

060830monitor.jpg
そういえば最近、家の誰かが僕のノートPCを踏んだらしく、液晶が半分死んだ。
お気に入りのプルダウンメニューが入れ子になっているとカーソルがどこを指しているのかまったく判らなくなる。お手上げ状態だ。

そもそもこのノート、すでにバッテリーはヘタって一秒たりとも使えないし、ACアダプタのコネクタがイカれていて動かすとすぐに電源が落ちる。
つまりモバイルPCとしてはまったく役に立たなくなっているのである。まだ減価償却さえ終わっていないのに資産価値は実質ゼロ。

Winの環境はないと都合が悪いので、今後の対策として最有力なのが、液晶モニタとMacのノートを買う、という方法だろう。WindowsPCは据え置き型として使い、Macのノートを予備の作業環境としてキープしておく。

なかなか具合がよさそうだが、狭い仕事部屋でこのイカれたノートと液晶モニタの置き場所を確保しなくてはならないあたりがやっかいではある。やれやれ。

たがや

060828fireworks.jpg
わりと近所にいい具合に花火が鑑賞できるスポットがあるので、ちょいと撮ってみっかと思い立ち、なんの準備もなしに開始時間ギリギリに外へ出た。
で、撮ってみたもののどれもイマイチ。

そこで、実際撮ってみて学んだ事をいくつかメモしておく。

「持ち物」

  • レンズキャップ
  • 三脚
  • 70-300mmのズーム

「撮影に際して」
  • 街明かりが影響するからと言って絞りすぎると回析が起こって像がぼやける。
  • なので露出をもう少し開けてシャッタースピードをバルブにし、花火の炸裂していない時はこまめにレンズキャップを閉める。
  • 少し望遠よりのレンズを使ってみる。

とりあえずそんなトコロ。見晴らしのいい地平線上にぽつりぽつりと花火が浮いているのも壮大でいいのだが、やはり写真になると迫力に乏しい(上の写真も結構トリミングしている)。
したがってウチの撮影環境では今回使ったキットレンズよりも望遠側のレンズを付けた方がいい結果が得られそうな気がする。
あとは天候だなあ。曇ってると花火の光が雲に反射して空全体が明るくなってしまう。これでは主役が映えない。

来週もう一回やるようなのでいっちょ再トライしてみるとしよう。

シッポなし

あら、出てしまった。

ワイヤレスMighty Mouse。
アップル – Mighty Mouse

まだ今のマウス買って半年くらいしか経ってない。本当にマウスイヤーですね。
http://elbro.net/blog/archives/000376.html

単三電池二本入りか。一本でも動くあたり、気が利いている。
まあ実物さわってから買うかどうか判断する事にしよう。

作業環境再構築準備考

なんか今月始めあたりにOSの不具合で何度も再インストールを繰り返すハメになった。
その度ごとに作業環境の再構築。やれCD-ROMはどこに行ったシリアルナンバーが見つからないアップデータ拾いに行かないと初期設定ファイルはどこだetc、etc……。

で、コレを解決する方法を思いつきましたよ。
外付けHDとかリムーバブルストレージを一台買って、そこにディスクイメージやらインストーラやらアップデータやらフォントやらシリアルナンバーやらブックマークやら全部まとめてバックアップしておけばいいんだな。

利用規約的にどうなのかよく知らんけど、そんな事は何か言われた時にでも考えればいいだろう。

というワケで今度時間があるときにやっておこう。

ホントはさらにこの一連のインストール作業を(ユーザー登録にいたるまで!)Automatorとかで自動化できれば言う事ないんだけど、それはさすがにムリなんだよな……。

ColorTransformクラス

たしかFlash8からはColorクラスじゃなくてColorTransformクラスを使えってヘルプに書いてあったよなあ、と思ってサンプルを見ながらコードを書いたがエラーが出て使えない。
何度書きなおしてもダメ。読み込んだパッケージでエラーが発生しているらしく、パッケージを読み込ませなければエラーは出ない。
でも必要なパッケージを読み込んでいないから当然動作はしない。
試しにサンプルファイルをパブリッシュしてみると、何の問題もなく動作する。どうなっているのだ。

ああでもないこうでもないと、ほぼ半日費やした結果、原因が判明した。FlashPlayer7で書き出していたからであった。

何だ「Flash8から」じゃなくて「FlashPlayer8から」だったのか。ヘルプを読み返すと確かにそう書いてある。

こんな事で半日つぶすんだから、プログラマーの世界では優秀な人とそうでない人では100倍くらい生産性が違う、という話も納得がいく。

って、納得いってどうする。誰が見てもそれ以前の問題だろうよ。>自分

Copyright © 2004 elbro.net