忍び歩く男 - SLYWALKER

大阪のこっそりPHPer

CakePHP1.2.8256 Pluginのvendors/css/images内の画像を呼び出せるようにする

各vendors/css/内に配置したcss内で

body {background-image: url(images/bg.png);}

とした場合、以下の結果になる。

cake/
    app/
        plugins/
            hoge/
                vendors/
                    css/
                        images/  ← 画像が取得できない
        vendors/
            css/
                images/  ← 画像は取得できる
    cake/
    vendors/
        css/
            images/  ← 画像は取得できる

/cake/dispatcher.php
以下の変更を加えると、Plugin内のvendorsでも画像が取得できるようになる。

Pluginのvendors内の相対パスがらみが解決するとなると、
こちらの記事とあわせて、FCKeditorをまるっとプラグイン化できそう。
vendors/jsの中にもいろいろ置きたい - cake bake diary


直接coreファイルに手を加えたくない場合の、dispatcher.phpの上書き方法はこちらにあります。
第4回CakePHP勉強会@Tokyoが終了しました&発表資料 | Shin x blog

FireFox3.5にしてものすごく重くなったのを解決した

いろいろググって調べると、どうもプロファイルを作り直したらいいらしいので、

$ /Applications/Firefox.app/Contents/MacOS/firefox -ProfileManager

プロファイルマネージャを立ち上げる
適当に新規プロファイルを作成
当方MACなので

/Users/ユーザ名/Library/Application Support/Firefox/Profiles/ランダム文字列.プロファイル名

上記のとこにプロファイルのファイルがある。
んで、いままで使っていたプロファイルフォルダの中身をそのまま新規作成したプロファイルフォルダの中にコピーする。


以降、新規作成したプロファイルを使うとあら不思議。
めっちゃ軽くなりました!

CakePHP1.2.8248 cake bake schemaの失敗談

このエントリーは、結論から言うと
bakeのエラーじゃなくて俺が間違ってたよ!
ということです。

#CakePHP ん〜cake schema はまだ使い物にならんなぁ。PRIMARY KEY CHAR(36)がINTにかわっちゃうし。posts_tagsのようなTableの作成に失敗するし

Twitter / slywalker: #CakePHP ん〜cake schema はまだ ...
上記の発言は私の多大なる誤解に基づいたものでした…


HABTMのJOIN Tableを

CREATE TABLE IF NOT EXISTS `posts_tags` (
  `profile_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
  PRIMARY KEY  (`profile_id`,`tag_id`)
);

今まで、こんな感じで作ってました。
ちゃんと動いてくれてたのは、CakePHPのお慈悲だったようで…

CakePHP モデルの相互に作用する全てのテーブル(join テーブルは除く)は、それぞれの列を一意に識別する単一フィールドのプライマリーキーが必要です。もし、posts_tags のような join テーブルの列で、単数形のプライマリーキーではないテーブルのモデルをお望みなら、テーブルに単一フィールドのプライマリーキーを追加することが CakePHP の規約です。

モデルとデータベースの規約 CakePHPの規約 CakePHPの基本原則 マニュアル 1.2 Collection The Cookbook

というわけでちゃんと書いてあります。
どうりで、cake schema run create が失敗するわけです^^;


アレ?PRIMARY KEY CHAR(36)がINTにかわっちゃうのは何だったんだろう???

isset()の挙動がPHP5.2.10から変わった

<?php
$a = '';
var_dump(isset($a['b']['c']));
?>

このコードでNotice Errorが出るようになってた。

以下のようなものではエラーはでなかった。

<?php
$a = '';
var_dump(isset($a['b']));

$a = null;
var_dump(isset($a['b']['c']));

$a = 0;
var_dump(isset($a['b']['c']));

$a = array();
var_dump(isset($a['b']['c']));

$a = '0';
var_dump(isset($a['b']['c']));
?>


このせいで、CakePHPでもNotice Errorがでてしまう。
一応チケットは投げた。
#6506 (Notice error when no choice HABTM save) - CakePHP : The Rapid Development Framework for PHP - Trac

2009-07-24追記
以下のChangesetで解決しました
Changeset 8251 - CakePHP : The Rapid Development Framework for PHP - Trac

レンタルサーバなどでは知らないうちに5.2.10になってることもあるので、何かしら気をつけとかないとなぁ。

CakePHP1.2.8228 自分用のbakeテンプレートを作ったよ

CakeFest Berlin 3日目(カンファレンス1日目)のまとめ - yandodの日記

Baking Master Class: Write programs that write programs (Neil Crookes)

bakeのテンプレートを拡張してリッチなbakeをやってみようというセッションです。内容的にはおおむねベーシックな形だったので特に特筆すべきところはありません。


図らずも同じ事を週末にやってました。
bakeのテンプレートの拡張方法は以下の通り。

cake/
venodrs/
    css/
    js/
    shells/
        tasks/    ←cake/console/libs/tasks内のファイルをコピー
        templates/    ←cake/console/libs/templates内のファイルをコピー

Projectをbakeするときskelのパスを明示する

$ cake bake project -skel /vendorsまでのpath/vendors/shells/templates/skel myapp

ModelやControllerやViewをbakeする際は、vendors/shells/tasks内のファイルを使用してくれます。


こんな感じのつくってみました。




  • 管理画面用CSS
  • Viewの出力コードの変更
  • 「選択したものを削除」の追加
  • 表示件数選択の追加

また、ぼちぼちいろいろ追加していく予定です。
作ったものは、こちらに置いてます。
slywalker's vendors at master - GitHub


デザインテンプレートはこちらのものを使わさせていただきました。
GravityBlast - by Andrea Franz » Blog Archive » Web app theme

CakePHP1.2.8225で00:00:00がnullになってしまう不具合が修正された

#6018 (TEST PATCH Model::deconstruct() incorrectly handles '00:00:00' `time` fields) - CakePHP : The Rapid Development Framework for PHP - Trac

上の昔投げたチケットが修正されていました。
データベースのtime fieldに00:00:00を渡すとnullになってしまう不具合です。

Changeset 8225 - CakePHP : The Rapid Development Framework for PHP - Trac

これまでは、Model::beforeValidate()で対処してましたが。
これで普通に使えます。


いまのとこsvnで取得できます。
https://svn.cakephp.org/repo/branches/1.2.x.x/


もう治してくれないのかと思ってた(ノД`)
よっかた。

勉強会と私

勉強会に思うこと | Shin x blogを読んでむずむずしたのでエントリー

まず、こんな人間がこう思っているといった予備知識として。

自分史

周りにエンジニアがいなかったんです。
ええ、ただの一人も・・・
もちろん開発会社へ勤めた経験など皆無です。
どうやってプログラムを学んだかって?
ベーマガ」が最初ですね。小6くらいの頃。
でも、そんなにプログラムにハマってるわけではなかったです。
一応、情報工学部なるところは卒業したのですが、まじめ学生といったわけではなく、まったくの異業種を渡り歩いていました。
しかし、何かとプログラムには縁があるもので、異業種に携わりながらも、VBAから始まりPerlPHPMySQLOracleとなぜか習得する機会があったんです。
まぁ零細会社(中には会社と言えないところもw)を渡り歩いているので、外注する余力がなかったからでしょう。
そんな中、社内アプリやらWEBサイトをつくってました。

そもそもなぜ勉強会へ参加しようと思ったか

そんなこんな紆余曲折の結果、自分で会社つくってしまって独立しちゃったわけですが、ここで不安になったわけです。
はたして自分のやってることは正しいのか???
なんせ今までの先生はグーグルだったり、書籍だったわけで玉石混合の情報の中、自分の感だけを頼りにしてたんです。
これじゃいけない!
そうだ、勉強会へ行こう!

どんな気持ちで参加しているのか

受動的じゃダメ。奪い取るくらいの気持ち。
肉食系エンジニア!
野望を持つ!
いつか自分で主催してみたい。
自分の知りたい勉強会を開いて(゜д゜)ウマー!
問題解決のアウトソーシング!?
でも、参加者みんなで共有できるからいいよね?

  • 問題を抱えている人
  • 問題を解決しようと行動している人
  • 問題を解決した人(できればいて欲しい)
  • その問題に問題意識を持ってる人

上の4者による問題の的を絞った勉強会をやってみたい。

どんな気持ちで発表しているのか

発表して自分の技術力の手応えを測る。
私のやっていることが良いのか悪いのかわかる。
ツッコミダメだし上等!
社長といいつつも、実体はフリーランスと同じ。
なにかアウトプットを出さないと、人に評価されようがない。
あの人良い>あの人悪い>>>>>|超えられない壁|>>>>>あの人誰?

どんないいことがあったか

私の性格上、集団の真ん中より上になる傾向があります。
でもトップグループまではいかないw
取り残されるとがんばるし、余裕がでてくるとサボりますw
勉強会へ行くと、まわりは百戦錬磨のエンジニアばかりです。
当然その集団で真ん中より上にいくまでがんばります。
要は、モチベーションが上がった!

エンジニアの知り合いができた。
今まで一人で悶々と悩んでいたことを、気軽に聞けるようになった!

知り合いができるとTwitterWassrやBlog等でつながりができます。
そうすると質の良い情報が、情報の方から舞い込んでくるようになった!
どんなツールがよいとか、どんな手法がよいとかいろいろ

私にとって勉強会とは

私のように開発会社に属した経験のない者にとって、救いの神の存在です。
会社経営をしている立場で言うのもなんですが、会社にとらわれず己の技術を高める場があることは、これから先の時代非常に重要だと思います。
もっともっとエンジニアの雇用は流動的であっていいと思う。
しかし旧態依然の人事制度のなかでは収入減に陥ってしまいがちだが、このあたりはエンジニアを大切にする企業が台頭してくれればと思う。
将来その企業のなかに私の会社があるとうれしいw

未だに私に足りないもの

チーム開発の経験。
これがないので、発表内容の実感がわかないところがある。
お!便利そう!と思うのみで使いどころが分からなかったり、結局一人でやっているとめんどくさいだけなので、やらなかったり。
一応経営者の端くれなので、なんとかして習得したいものです。

家族の反応は

嫁ともうすぐ1歳の娘がいます。
いまのとこ自宅兼事務所なのでコミュニケーションの時間はありますが、事務所借りて人手を増やすと難しくなるでしょうね。
今のとこ悪いこととは思われてないので大丈夫そう。
(そう思っているのは私だけ?w)
いずれにしても、メリハリはつけていきたい。
いつもありがとう!