Home > アーカイブ > 2007-11

2007-11

CakePHP勉強会を開催します

この記事の所要時間: 023

申込については近日中に行う予定ですので、またお知らせいたします。しばしお待ちを。

CakePHP勉強会を開催します[告知] | Shin x blog

先日告知したCakePHP勉強会の申込を開始しました。

events.php.gr.jpから申込できますのでCakeな皆さんは是非ご参加下さい。

しかしうえちょこさんshimookaさんエントリ早すぎです;-)

CakePHP勉強会を開催します[告知]

この記事の所要時間: 035

ちょいフライング気味の告知です;-)

12/7に都内でCakePHPの勉強会を行います。

これまでPHP勉強会、カンファレンスなどでyandoさんによる発表が行われていたのですが、今回はCakePHPに特化したイベントになります。

発表者には、yandoさんはもちろんの事、青い人ことakiyanさんにもお願いしています。(私もできれば何かネタを持って行くつもりです。)発表のネタをもとにディスカッションなどできればと考えています。

申込については近日中に行う予定ですので、またお知らせいたします。しばしお待ちを。events.php.gr.jpにて申込を開始しました。

JavaScript第5版読書会#1に参加しました。

この記事の所要時間: 257

大阪で行われたJavaScript第5版読書会#1に参加しました。

読書会への参加が初でしたし、考えてみればPHP以外のイベントに参加すること自体が久しぶりなので色々と新鮮でした。参加された皆さんお疲れさまでした。

はじめての読書会

まず読書会について。

今回はページ数を区切って皆でを読んでいきました。読んでいる中で疑問点があれば逐次それを議論するという形です。

私の場合、雰囲気に慣れていないせいか、なかなか集中して読むことができませんでした。少し落ち着いて来て読み出したものの、突然発生する議論に気を取られてしまい、結局本読みにはあまり集中できませんでした。

正直、本はどうでも良くて議論を聞いている方が楽しかったというのもあります;-)

「読書会」とはなっていますが、本を読むというよりは、本を題材に議論(意見交換)する会という風に認識しておいた方が適切なのかもしれません。(慣れの問題かもしれませんが。)

次回参加する時はもう少し事前に読み込んでおこうと思います。

懇親会

読書会ではそんな感じでほとんど発言することなく終わったのですが、懇親会では色々な方とお話ができました。JavaScriptの勉強会なのでWeb系の人が多いのかな、と想像していたのですが、意外とWeb系の仕事をされている方は少なかったです。今回は学生さんも多かったです。

読書会とは違ってくだけた雰囲気でうち解けることができたので、この雰囲気のまま読書会ができたらなあと感じました。「食事」->「読書会」という流れも面白いかもしれません。

何気にTwitter検索を使って下さっている方が多くて驚きました。お話できて嬉しかったです。これだけでも作った甲斐がありました。;-)

JavaScriptやら他言語やら

メモと記憶をつらつらと。

  • Jashがかなりいけてる。
  • undefinedはただの変数。undefined型はまた別。void演算子でundefined型の値を設定できる。
  • new Array(N)で初期値を設定する方法(デフォルトでは全ての値がundefined)
  • 全ての変数、関数はオブジェクトのプロパティと言える。グローバル変数はグローバルオブジェクトのプロパティ。
  • 多値代入の話(PHPではlist($a,$b) = array(1,2))
  • 三項演算子は意外と使わない?(自分は使う派)
  • windowオブジェクトのwindow/selfプロパティはwindow自身を参照している。
  • ブロックレベルのスコープは無い。
  • クロージャは関数クラスのインスタンスとして考ると認識しやすい。
  • 関数型言語はとにかくソースが短くできる。
  • 関数型言語も万能じゃない。システムにより向き不向きがある。
  • JavaScriptは真面目にやると中々面白い

てな感じで

PHPerな自分にはアウェイ感たっぷり(wなイベントだったのですが、いろんな刺激を受けて楽しかったです。今回はRuby関係の方が多かったので、次はRubyのイベントにも参加したいと思います。(ただ15日は別件でムリそうですけど。。。)

毎度のことながら行く前は少し億劫なのですが、帰る時は満足感いっぱいでした。

追記:多値代入

多値代入(多重代入・分割代入)は結構色々な言語でできるんですね。[スクリプト言語の比較::多重代入]

JavaScriptは1.7から対応しているようです。[New in JavaScript 1.7 – MDC]

CakePHP 1.2でPostgreSQLを使うとエラーが出る

この記事の所要時間: 212

あ,そうだ。PostgreSQL だともうなんだか色々エラーが出てるので諦めちゃいました……。

1.2を試してみました – まゆの日記

同じエラーかどうか分かりませんが、同じような現象があったので。

CakePHP1.2.0.5875 pre-betaでPostgreSQLに接続しようとすると以下のようなエラーが出ました。

Warning (2): pg_query() [function.pg-query]: Query failed: ERROR:  syntax error at end of input at character 20 [CORE\cake\libs\model\datasources\dbo\dbo_postgres.php, line 123]

原因は[app/config/database.php]に追加された「schema」パラメータです。このパラメータを使うとPostgreSQLにてschemaを指定できるのですが、デフォルトの設定では空文字になっており、それをそのままDBへ発行するのでSQLエラーとなります。

解決策としてはschemaパラメータにschemaを指定します。テーブル生成時等にschemaを指定しなければデフォルトで「public」になります。個別にschemaを指定している場合はそれを設定します。

[app/config/database.php]

class DATABASE_CONFIG {
	var $default = array(
		'driver' => 'postgres',
		'persistent' => false,
		'host' => 'localhost',
		'port' => '',
		'login' => '1x1',
		'password' => 'pass',
		'database' => 'inquiry',
//		'schema' => '',
		'schema' => 'public',   <--- schema
		'prefix' => '',
		'encoding' => ''
	);
}

なおschemaパラメータを指定しない場合もpublicが使われます(厳密に言うとDboPostgresで定義されている値が使われます。)つまりschemaパラメータを削除してしまう手もありますが、内部動作は変わる可能性があるので、database.phpで明確に指定しておいた方が無難でしょう。

あるはずのない「パチ(ンコ|スロ)での必勝法」が実はあったという話

この記事の所要時間: 228

タイトルはリンク先からです。

「海物語の確変中にさんごリーチが来たら3連チャン」とかいう話しではありません。:-Pあと自分が良く打っていたのは7年程前なので今は状況が違うかもしれません。

via: Life is beautiful: あるはずのない「カジノでの必勝法」が実はあったという話

エントリにある期待値の考え方は、実はパチンコ(スロ)もあてはまります。パチンコでも投資<回収になる期待値が存在するので、そういった台を打ち続けることにより利益を得ることができます。

パチンコやスロットは24h営業しているわけではなく一日の間に開店と閉店があります。ですので台の調整(釘や設定等)は閉店の間に行われます。店側は閉店時に行う台の調整によって出玉率(期待値)を変化させます。

通常、営業時に台を調整することは禁じられているので、台の状態(期待値)は営業中に変化することはありません。つまり期待値が目標値を上回る台を開店時から閉店時から打ち続ければ良いわけです。

話しは簡単なのですが、実際にこういった台は店に存在するのでしょうか。

私個人の経験ですが、「一日打ち続ければ利益が出るといった台」は間違いなく存在していました。もちろん地域、店、また機種によってそういった台が存在する頻度にばらつきはあります。ただ日頃から情報収集を行い、店を観察し、といった行動を行えばそういった台を見つけることはそれほど難しくありませんでした。(もちろん期待値が高い台を見つけるのは難しくなりますが。)

特にパチンコの場合はざっくり言うと「調整=釘」なので、打たずとも台を見ていくだけである程度期待値が高い台を探すことができます。スロットに関しては表面的には調整(設定)は分からないのですが、ある手順で打つことにより設定を確認できる機種があったりしました。また出玉推移や大当たり回数などである程度設定を推測することも可能でした。

そもそも「わざわざそんな店が損するような台が存在するのか」という話しをあるのですが、当然ながら店全体での期待値はマイナス(店側に有利)になっているはずです。ただ集客という意味では出玉感が重要なようで、ある程度出す必要があります。(全く出ない店には客は集まらない)よって実際は期待値がプラスの台、マイナスの台をおり混ぜて設定します。一台一台で見ると店側で損が出ていても、店全体では利が出れば良いわけです。

こういったことは何ら特別な事ではなく、コンビニに打っているパチンコ雑誌を買えば手に入る情報です。ただこの期待値を得る感覚がなかなか実感できず、オカルト的な攻略法に走って損する人が多いのではないでしょうか。

# まあ、あくまでも「娯楽」なんでムリに稼ぐ必要も無いのですが:-p

なんかダラダラと書きましたが、まあパチプロと言われる人が実際に存在しているわけですから、パチンコ(スロット)で勝つ(利益を出す)方法はあるというわけです。

PHP E_STRICTで表示されるエラーメッセージを調べてみた

  • 2007-11-17 (土)
  • PHP
この記事の所要時間: 649

年内のPHP4サポート終了に向けて、PHP5への移行が進む昨今です。

PHP5で推奨されていないスクリプトをチェックするのがE_STRICTです。E_STRICTが有効なのは分かっていたのですが、実際にどんなスクリプトがE_STRICTに引っかかるのかが、あやふやでした。

そこでE_STRICTで出力されるメッセージをPHPのソースから抜き出してみました。どのようなスクリプトがE_STRICTに引っかかるのか(引っかからないか)のヒントになればと思います。

ちなみにE_STRICTの活用方法としてマニュアルには[-l]オプションによるチェックが書かれていますが、スクリプトを実行しないと発生しないE_STRICTもあるので、実際には実行して確認する方が良いです。

1. Accessing static property %s::$%s as non static

インスタンス変数をクラス変数としてアクセスしている。

クラス変数としてアクセスするなら宣言時にstaticを付けます。

なお再現させようとするとE_STRICTの前に「Fatal Error:Access to undeclared static property」が発生しました。

2. Assigning the return value of new by reference is deprecated

new演算子の戻り値を参照で受け取ろうとする。

PHP5では[=]で参照渡しとなるのでインスタンス化したオブジェクトを[=&]で受け取る必要はありません。

3. Creating default object from empty value

空の値からデフォルトオブジェクトを作ろうとしている。

null or 空文字 or 未定義のインスタンス変数をオブジェクトと見なして、さらに->でそのインスタンス変数を参照しようとすると発生します。分かりにくいので↓ソースです。

<?php
class Hoge {
  public $a = null;
}

$obj = new Hoge();
$obj->a->b = 1; // E_STRICT
?>

4. Declaration of %s::%s() should be compatible with that of %s::%s()

継承によりメソッドをオーバーライドする場合は、継承元と同じメソッド定義にする。

  • 親クラスと引数の数が異なるとNG
  • デフォルト値のあり・なしが異なるとNG(値は変わってもOK)
  • Typehintも同じでないとNG

5. Function %s%s%s() is deprecated

関数XXXは非推奨。ソースをgrepした中ではdl()が非推奨となっていました。

6. Implicit cloning object of class ‘%s’ because of ‘zend.ze1_compatibility_mode’

zend.ze1_compatibility_mode=on設定時のみ発生。

オブジェクトを参照するとひたすら発生しました。zend.ze1_compatibility_mode=onにする時はE_STRICTは切った方が吉です。。。

7. Non-static method %s::%s() cannot be called statically

1.のメソッド版。クラスメソッドとして呼ぶなら、メソッド定義時にstaticを付ける。

似たメッセージとして以下のようなものがあります。

  • Non-static method %s::%s() cannot be called statically, assuming $this from compatible context %s
  • Non-static method %s::%s() should not be called statically, assuming $this from incompatible context

8. Only variables should be assigned by reference

メソッドの戻り値を[=&]で受け取ろうとすると発生。[=]で受け取ればokです。

似たメッセージとして以下のようなものがあります。

  • Only variables should be passed by reference

9. Redefining already defined constructor for class %s

PHP4版コンストラクタ(クラス名と同じメソッド)とPHP5版コンストラクタ(__construct)が定義されている。

できればコンストラクタは__constructにします。PHP4のソースをそのまま使用するなら__constructを記述しないようにします。

10. Resource ID#%ld used as offset, casting to integer (%ld)

リソースIDを連想配列のインデックスとして使用すると発生します。

実際のシステムで発生するシチュエーションが良く分からないのですが、以下のソースでは確かに発生します。

<?php
$fp = fopen("hoge", "r");

$array = array(1 => "a", 2 => "b");
var_dump($array[$fp]);
?>

11. Static function %s%s%s() should not be abstract

クラスメソッドはabstractにしない。

クラスメソッドにしたところでabstractだと呼びようがありません。

12. Usage of {} to access string offsets is deprecated and will be removed in PHP 6

{}による文字列へのアクセスはPHP6で消えるので非推奨です。マニュアルでは[]でのアクセスを推奨しています。

ただこのメッセージはソースには含まれていますが、「#ifdef 0_ilia」となっているので、通常のbuildでは表示されません。(以後のリリースで有効化?)

13. is_a(): Deprecated. Please use the instanceof operator

is_a()は非推奨。代わりにinstanceofを使います。

<?php
class Hoge {
}
class Bar extends Hoge {
}

$obj = new Hoge();
var_dump(is_a($obj, 'Hoge')); // E_STRICT
var_dump($obj instanceof Hoge); // ok
?>

14. It is not safe to rely on the system’s timezone settings …

タイムゾーンの明示的な設定をせよ。デフォルトセッティングをあてにしてはいけない。

全文は以下な感じです。

It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in 

環境変数で設定するか、date_default_timezone_set(‘Asia/Tokyo’)で設定しておけばokです。

これからはE_STRICT対応で?

以前はvarでインスタンス変数を定義しただけでE_STRICTが発生していたため、PHP4のソースを移行する際は正直あまり使っていませんでした。ただ5.1.3でこの処理は削除されていますので、PHP4なソースでも使ってみようと思います。

早速PHP5で動作しているPHP4なソースをE_ALL|E_STRICTで実行してみると7.関連でエラーが多数出てきました。。。うーん、これ全部直すのか。。。

CakePHP1.2をベースにしたオープンソースシステム-NoseRub

この記事の所要時間: 132

CakePHP1.2はまだpre-betaの状態ですが、既にこれをベースとしたオープンソースシステムが公開されています。

それがNoseRubです。

NoseRubはざっと見た感じ「マイクロブログ」に分類されるシステムです。様々なRSSフィードをアグリゲートできるようでTwitterというよりJaikuに近い印象を受けました。NoseRubの内容については上記サイトにこのシステムを利用したサービスが公開されている(ここなど)のでそちらを参考にして下さい。

 

ここで大事なのはこのシステムがCakePHP1.2ベースで作られているという事です。

1.2に関してはpre-betaという事もあり、箇所箇所の情報は見られるのですが、これを実際のシステムに組み込むノウハウがまだ共有されていない状態にあります。その中において実際にサービスとして動作するシステムがオープンソースで公開されているのはとても有り難いことです。

実際にダウンロードして中身を見てみました。ソースはわりと丁寧に書かれていて読みやすいです。やはり根本のフレームワークは理解しているので処理を追いやすいですね。まだ導入部分しか読んでいませんが、細かな実装のヒントが見つかり、これはかなり参考になりそうです。

ちなみに最新版であるNoseRub0.5.1はCakePHP1.2.0.5875 pre-betaベースとなっていました。

これから1.2で実装したい方は是非一度ダウンロードして参考にしてみて下さい。

# ホント、オススメです!

 

ちなみにCakePHPを使ったシステムやサービスなどは以下のサイトに公開されています。

Cake Apps/Sites In The Wild – Cake PHP | Google グループ

FeedBurnerパブリッシャーバズに紹介されました

この記事の所要時間: 041

FeedBurnerパブリッシャーバズにFeedBurnerを利用しているblogとして紹介されました。

FeedBurnerを使った雑感などをざっくり書いてますので、良かったら見てみて下さい。

 

ところでパブリッシャーバズって知ってますか?私は今回のお話が来るまで知りませんでした。。。><

メールを頂いてからどんなblogが紹介されているのかな、と過去に紹介されているblogを見たのですが、なかなかバラエティに富んでいます。内容はもちろんのこと購読数などもまちまちでした。実は今回のお話が来たのは、購読数が一定数を超えたからとか伸び率が高いからなど良いように想像していたのですが、あまり関係無いようでした。:-P

うーん、ホントどんな基準で選んでるんだろ。

自分の本が書店に並んだ

この記事の所要時間: 67

先月末に共著者として執筆したCakePHPガイドブックが書店に並びました。

書籍を執筆するということはとても貴重な体験でした。以前から書籍や雑誌の記事を執筆したいという想いはありましたし、いずれ実現したいと思っていました。しかしそれはあまりにぼんやりとしたもので、目標というよりは憧れでした。それがひょんな事から執筆に参加することができ、本が出版されました。

いろいろな事があった出版への道のりでしたが、執筆に関わる前(実際に執筆するなど想像もしていなかった頃)に疑問に思っていた事が実際どうであったかについて書いてみます。

執筆のいきさつは?

そもそもなぜ執筆する事ができたか。これまで私は書籍どころか雑誌等に寄稿したことなども全く無く、まともに原稿を書いた経験はありませんでした。

何人かの人には「企画持ち込んだの?」とか聞かれたのですが、実は出版社側からオファーがありました。いや、ホントですよ。オファーはありましたよ。ありました、ありました、堂園さんに:-D。

知名度も何も無い自分にお声がかかるはずはありません。。。出版社から堂園さんへCakePHP本のオファーがあり、堂園さんから共著で執筆しませんか、とお声をかけて頂いたという流れです。

お話を聞いた時は是非やりたいと返答はしたものの、この段階では全くリアリティーが無く、自分(達)の本が出るかどうかは半信半疑といったところでした。

書く内容はどうやって決める?

出版社の担当の方と執筆者3人との打ち合わせ時に大枠を決めました。ここでは、3部構成にする、執筆者ごとに担当する決める、部の大まかな構成を話し合いました。目次構成などは以後オンライン上でWikiやMLを通じて決定しました。

書く前は目次だけどうやって決めるんだ?とか思っていたのですが、やってみると意外と決まるものですね。あとこの段階の目次は仮なので書き進めている中で変えていくのもアリです。

ちなみに私が担当したのは3部の応用編(Ajax除く)でした。私自身書きたい内容だったというのはもちろんなのですが、ここでは各章にそれほど繋がりが必要でなく、blogや雑誌の記事を書く感じで短いページ数の内容を数多く書くという作業だったので、書きやすいのではという配慮もありました。(実際これは助かりました。;-))

何を使って書くの?

3人ともWordで原稿を書き、MLで送るというパターンを取りました。書き方自体は執筆者が望めばいかようになるようです。今回は3人とも特にこだわりが無かったので、皆が共有しやすいようにこのような形になりました。

あと上でも触れましたが、情報共有はMLとWiki、原稿共有にはFTPサーバを使いました。

書くのって大変じゃない?

大変でした。;-)

調べて書く、書いて気になった箇所を調べる、というのはblogと同じなので(まあこれも大変ですが)、気にならないのですが、表現というか上手く文章にするのが大変でした。自分の文章力の無さを痛感しました。。。

また、少ないながらも投稿後すぐにアクセスやSBMで反応して貰えるblogとは異なり、章を書き終えてもすぐには反応が得られないので、気力を補うという部分が少ししんどかったです。ただこの点については共著だったおかげで、お二人に救われました。

書くための時間は早朝や夜中などのオフタイムが中心でしたが、仕事に余裕がある時は日中、事務所で書いてました。休日は午前中だけ書いて、午後から家族と過ごすような感じでした。

書く場所は事務所や家もあるのですが、カフェが一番はかどりました。あとこの頃は東京出張が多かったので新幹線の中も貴重な原稿書きの時間でした。自分の場合、全くプライベートな空間より少し公共の場の方が集中できて良かったです。(もちろんNCイヤホンは必須ですが;-))

報酬は?

本を書く話を友人にすると「印税生活やな!」とちゃかされるのですが、全くもってそんな事はありません。(いや本がアホほど売れれば別ですが、技術本なんで;-))

これまで本を書いたという人からは「儲からない」と聞いていました。(中にはオファーがあっても仕事の方が儲かるので断っているという人もいました。。。)

実際に提示された内容は書けませんが(・・・)、具体的な数字を見た時は率直に「それほど悪くはないんだなあ」と思いました。まあただ一つ言えることは、時給計算はしてはいけません。悲しくなります。

まあ何より「本が出る」という事の方が大きいですのでこれは納得です。

実際に本が書店に並んで

はじめはもっと感慨深いかと思っていたのですが、色々とドタバタあったのもあって、ホッとした気持ちの方が大きかったです。あと何だか気恥ずかしいような気もあります。

もともと本屋は好きなのですが、あちこちの書店に行くのがさらに楽しみになりました。先日ある書店でまさに目の前で本を手に取ってくれている人がいたので、思わず声をかけそうになりました。;-)

周りの反応は様々ですが、やはり技術系の方の方が受けが良かったです(お祝いケーキも頂きました!)。妻は書いている時は半信半疑な感じだったのですが、実際に書店で見た時は喜んで貰えました。

あといくつかのblogではレビューを書いて頂きました。blogやサービスに言及されるのとはまた何か違う感じがしますね。嬉しいです。

謝辞

色々とありましたが、こうして無事に本を書くことができたのは多くの方との関係があったからと思います。

まずid:shimookaさん。私がこの本に関わるストーリーはshimookaさんとの出会いが原点です。以前から本を書く事に対する憧れはあったものの、環境や状況のせいにして一歩を踏み出すことをしていませんでした。しかしshimookaさんの著作で同じような環境の人が実際に事を成し遂げているのを知りました。自分が単に言い訳しているだけなんだと悟りました。もちろんこの時点では執筆の話しなど全く無かったのですが、ここから流れが変わったような気がしています。

マイコミ出版の方々にはお世話になりました。ずぶの素人の私が執筆することができたのは皆さんのアドバイスのおかげでした。あと編集を担当していただいたT氏にはプロの仕事を見せて頂きました。(その成果は書籍に現れています!)

そして共著者である堂園さん、安藤さん。お二人との出会いなくしては今回の書籍はあり得ませんでした。きっかけそのものを頂いたのももちろんですし、内容や目次、原稿についても多くのアドバイスを頂きました。お二人の原稿はもちろんのこと、ML内でのやり取りや仕事の進め方など多くの事を勉強させて頂きました。書籍に限らずCake関係や開発などでまたご一緒できればと思います。(そろそろCakePHP勉強会やりましょうか!)

他にも多くの方にアドバイスや励ましを頂きました。皆さん本当にありがとうございました。

最後に実態の見えないよく分からない事に興じているダンナを明るく支えてくれている妻、いつも愛くるしい笑顔で父を励ましてくれた2人の娘にありがとうと言いたいと思います。ありがとう。

# というような謝辞をいつか書いてみたかった:-D

# 謝辞ってみんな同じような事かくよな、と思ってたけど、なんだか自分もこういう気持ちになった。:-p

PHPSpecマニュアルが登場

  • 2007-11-07 (水)
  • PHP
この記事の所要時間: 045

via: PHPSpec Manual (Work In Progress) – Maugrim The Reaper’s Blog

RSpecのPHP版、PHPSpecのマニュアルが公開されています。

PHPSpec Reference Manual

現在はドラフトでこれから順次更新されていくようです。

RSpec自体試したことはないのですが、興味がある分野なので期待しています。

RSpecって何?な方は、Rubyist Magazineが参考になります。

技術の流れとして、以前はJava->PHPなトレンドでしたが、ここ最近はRuby->PHPとなっていますね(Cakeしかりです)。PHP独自のものが少ないのはやはり実用言語だからでしょうか。

# そんなPHP界で異彩を放つPieceFrameworkは面白い試みだと思います。;-)

Home > アーカイブ > 2007-11

検索
フィード
メタ情報

Return to page top