忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2025/11/28 11:49 |
今週の実績 2011/04/17
2011/04/16の実績

CROSS†CHANNEL

誠実なプレイ 30
メッセージ送りをAボタンで10000回行った

CROSS POINT 10
シーンタイトル「CROSS POINT」に到達した

崩壊 10
シーンタイトル「崩壊」に到達した

逃避の果てに 30
宮澄見里ルートを見た

ミュージック登録率50% 30
ミュージックの登録率が50%に到達した

CROSS†CHANNEL 10
シーンタイトル「CROSS†CHANNEL」に到達した

ESCHATOS

突入 50
ESCHATOS:AREA20に現れた巨大母艦を撃破し、月面に突入した。

反撃 30
ESCHATOS:衛星軌道上の輸送艦を撃破した。

追跡 20
ESCHATOS:輸送船を追って衛星軌道上に到達した。

撃退 10
ESCHATOS:AREA5に現れた巨大母艦を撃退した。

2011/04/15の実績

ESCHATOS

ORIGINAL EASYクリア 20
ESCHATOS:ORIGINAL EASYモードをクリアした。

2011/04/14の実績

星霜鋼記ストラニア

直線主義 20
武器スロットを全てレーザーにした。

三刀流 20
武器スロットを全てソードにした。

2011/04/13の実績

円卓の生徒

魔を滅ぼせし英雄 5
討伐クエストのランク99にしてロンドエールへ戻りました。あなたのモンスター総討伐数、ぜひ知りたいです。

2011/04/10の実績

円卓の生徒

竜を倒せし者 50
クエスト「神の座」を達成しました。しかしあなたはまだオブリスの本当の力を知らない……。

Gears of War 2 (JP)

レベル 45 15
マルチプレイヤーでレベル 45 に到達した
PR


2011/04/17 18:49 | Comments(0) | TrackBack() | 実績
ZF1.11:Zend_Registry
Zend_Registryとは、一言で言うとまああれだ、グローバル変数。
クラス内とかメソッド内とかスコープを気にせず好きなところでZend_Registry::set('hoge', 'fuga');ってやって、それ以降の好きなところでZend_Registry::get('hoge');ってすると'fuga'を取得できます。

使いどころは何処かというと、スクリプトのパスやデータベースのパスワード等、最初に定義したら以後変更する必要のないものとなります。
大抵そういうのはdefine()で定義していると思いますが、define()は配列やオブジェクトを入れられないという欠点があります。
その点Zend_Registryは配列やオブジェクトをそのまま突っ込むことができるので、使い回しが格段に楽になります。
	$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
	Zend_Registry::set('link', $link);
とすると、以後はDBに接続する必要があればZend_Registry::get('link')でDB接続オブジェクトをシングルトン的に取得できます。

ただZend_Registryはsetで簡単に上書き可能なため、結局はグローバル変数を使用するのと同じ危険性をはらんでいます。
気がつかないところで上書きされるとエラーの温床になるので、運用にはルールを義務づけるとよいでしょう。

実は、$_REQUESTあたりのスーパーグローバル変数に値を突っ込むとクラスとかスコープとかを完全に無視してどこからでも読むことができるので、完全にZend_Registryの代用になったりするのですが秘密です。
まあ、そういう行儀の悪いことをしてはいけません。


2011/04/11 23:19 | Comments(0) | TrackBack() | PHP
買ったものリスト 2011/04/10
豆腐と湯葉の膳を頼んだのにデザートが抹茶のアイスだった。
どういうことだ。


ファミ通Xbox360 2011年5月号
☆☆☆☆

シューターにギャルゲーマーにFPSユーザ大歓喜と、とっくの昔に死んじゃった(どころか生まれてもいない)ハードとは思えない盛況を見せるXBOX360市場。
誌上にはほとんど出ないXBLAやインディーズも豊富で遊びの種が尽きることはありません。
とはいってもやはり総市場自体が小さいせいで売上もどうしても寂しいものがありますね。
せっかく今はいいハードになったんだからもうちょっと売れて欲しいものです。

しかしEver17のタイトでテンポよく再構成という部分が不安だ。
いや、少数派なのはわかってるんですがあの日常のだらだらしたところも好きだったんだよね。
あと3Dモデリングを単体で見るとぱっと見のっぺりしたかんじで違和感を受けるんだが、ゲーム画面内だと問題なく見えるのでこのまま問題なく行ってほしいところ。


森のテグー2 施川 ユウキ
☆☆☆☆☆

なんか全然知らないうちに2巻出てるじゃない!
普段行ってる本屋どこにも置いてないから全然気付いてなかったわ。

言葉の魔術師という敬称がまさしく相応しい彼の作風にしては、シチュエーションや設定をネタにした笑いが多い気がしました。
まあそれでも十分以上に面白いので文句はありませんが。
終わり方もまた日常の延長線上にあることの多い彼をして、大きな段落を乗り越え、そして新たな地平を目指して歩き始める、そんな終わり方になっています。
つうかもう終わりとか短かいな。
当然次回作にも期待しなければ。

森のテグー試し読み
http://blog.livedoor.jp/teguu/


黄昏乙女アムネジア1 めいびい
☆☆☆

表紙の大人っぽい謎めいた立ち姿とは裏腹な陽気でミステリアスな夕子さんと怪異調査部を立ち上げるお話。
あまりにも実体化しすぎているので恐怖感はありませんというか他人との整合性はどうなってるんだ一体。
僅かに謎の伏線を撒きつつ、しかし怪異そのものは夕子さん以外全く存在しない基本コメディの時折心理的シリアス話が混ざってくる今後が楽しみな作品となっています。


アラビアの夜の種族2 古川 日出男
☆☆☆

ハルギスおっとアーダムが退場し、いよいよアシュエルとヴァルの出番。
だがしかし、前半は筆者の筆力本領発揮で素晴らしいんだが後半がなんか端折りすぎというかいい加減すぎやしないかい。
ファラーに比べてサフィアーンの半生の適当っぷりといったら。
やはり負の感情を描いてこその古川日出男だよな。


エスカトス

しれっとストラニアも買ってるんですよ。
エスカトス。ストラニア。わかりにくいよね。
エスカトス。ストラニア。
エスカリア。ストラニクス。
エストニア。ストラトス。
エストロゲン。ストラディバリ。
エスカリボルグ。ストライダー。

でもずっと円卓。
ぎゃるがんも豚スイーツもアイマス2も大復活も絶賛放置でずっと円卓ですよ。
どんだけハマってんだ。

ちなみにバレットソウルは売ってなかった。


2011/04/10 18:46 | Comments(0) | TrackBack() | 買ったもの
今週の実績 2011/04/10
2011/04/09の実績

ESCHATOS

Hall of Fame 10
ESCHATOS:ランキングにスコアをアップロードした。 

エッグハンター 20
ESCHATOS:AREA14で輸送艦の3つの卵をすべて破壊した。

Islands of Wakfu

選ばれし者 5
第 1 のベールを通過した

2011/04/08の実績

円卓の生徒

冥府の王の覚醒 50
クエスト「冥府の城」を達成しました。しかし冥府の王は不滅のようです。蘇ったらまた倒してやりましょう。

2011/04/06の実績

円卓の生徒

神殺しの斧 10
バールスレイヤーを手に入れました。バールナイト30個分のずっしりとした重みを感じます。


2011/04/10 18:02 | Comments(0) | TrackBack() | 実績
PHP:file()のFILE_IGNORE_NEW_LINESの動作が不可解な件
先日
	$file = @file('hoge.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
ってやったのに行末の改行が消えたり消えなかったりしてあれえ?ってなりました。

とりあえず検証。

中身が「text\r\n」だけのテキストファイルを用意し、「file.txt」「file.csv」という名前で保存します。

file_ignore_new_lines.php
<?php
	$fileTxt = @file('file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
	$fileCsv = @file('file.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
	print('<pre>');var_dump($fileTxt[0],$fileCsv[0]);print('</pre><hr>');
一分の隙もない完璧な検証実験だ。

ローカルのWindows用XAMPP、Apache2.2.14、PHP5.3.1
	string(4) "text"
	string(4) "text"
色々おかしな設定のRHEL、Apache2.0.63、PHP5.2.1
	string(4) "text"
	string(5) "text
	"
サーバ単位で動作が違うとかならまだしも拡張子で動作が違うってどういうこった?

よく見てみたらアップ後のファイルサイズが、「file.txt」は5バイト、「file.csv」は6バイトになっていました。
実は前者はテキストモード、後者はバイナリモードで転送していたっていう。
Windowsの改行は\r\n、Linuxの改行は\nなので、最近のFTPソフトはこの改行を自動変換してくれる機能があります。
「file.txt」はテキストモード転送で\r\nが勝手に\nになっていたので改行が出なくなっていただけでした。

両者ともバイナリモードで転送したところ、無事に
	string(5) "text
	"
	string(5) "text
	"
となりました。
5バイトなので最後の\nが削除され、\rが残っています。

元々FILE_IGNORE_NEW_LINESは\nだけを対象としたもので、\rは対象外なのです。
ではなんで\r\nのままのはずのローカルでは改行コードが外れてるんだという話ですが、

file_ignore_new_lines.php
<?php
	$fileTxt = @file('file.txt');
	$fileCsv = @file('file.csv');
	print('<pre>');var_dump($fileTxt[0],$fileCsv[0]);print('</pre><hr>');

	string(6) "text
	"
	string(6) "text
	"
6バイトになっており、\r\n共に消えていません。
Windows用PHPなので気を利かせて\r\nどちらも消してくれたのかもしれません。
まあこんなふうに挙動が違うせいでバグが発生したりするんですがね!

ところでauto_detect_line_endingsという設定項目があります。

> onにした場合、PHPは fgets() および file() により読み込まれたデータを評価し、UNIX、MS-DOS、Machintoshの行末表記を使用しているかどうかを調べます。
> これにより、PHPがMacintoshシステムと相互運用できるようになりますが、 デフォルトはOffとなっています。


つまり…これを設定すれば改行コードを気にしなくてもよくなるってことなんだよ!

<?php
	ini_set('auto_detect_line_endings',1);
	$fileTxt = @file('file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
	$fileCsv = @file('file.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
	print('<pre>');var_dump($fileTxt[0],$fileCsv[0]);print('</pre><hr>');

XAMPP
	string(4) "text"
	string(4) "text"
RHEL
	string(5) "text
	"
	string(5) "text
	"

あれえ?


2011/04/07 22:52 | Comments(0) | TrackBack() | PHP
買ったものリスト 2011/04/03
横浜なんだけど何故か計画停電範囲から外れているのでいまいち省エネに身が入らない。
まあ元々エアコンは使わないし冷蔵庫は無いので生来の省エネと言えなくもないですが。
え?テレビとゲーム?それは別腹なんで。

つうか、どう考えても一日1箇所の持ち回り制にすべき。
一日の中でローテーションとかどこの馬鹿が考えたんだ?


かしましハウス プレミアムBOX 秋月 りす
☆☆☆☆☆

バンブーコミックス版は当然初版で全部持っていますが、いや、前は全部持っていたんだけど今もあるかどうかはわかりませんが、本作には特に思い出が、ということも特にないんですが、何故か思い入れのある作品です。

誰でも足を踏み外す、あるいは道を間違える転機となった作品、戻る道を間違えた作品などがあると思うのですが、私にとってはこれがその枝分かれを選択した作品のひとつです。
まあ最古の枝分かれ失敗はナディアとかロードスとかあそこらへんだったと思うのですが、そこらへんからどんどん道を転げ落ちていたので当時は既にすっかり裏道を歩いていましたが、そんな私が何故か躓いたのがこの一見なんでもないほのぼの4コマでした。
本作に出会わなければ4コママンガ自体買うようになることがなかったのではないかと思います。
特に物凄く面白い、爆笑できる、というような作品ではないのですが、なんだかよくわかりませんが私はずっと前から本作の魅力のような魔力のようなものに捕まってしまったままです。


れとろげ。1 くさなぎゆうぎ
☆☆☆☆

よくある浅薄な知識で話題性だけを狙った作品かな、と思ってたら想像以上に本気だった。
というか買った後で気がつきましたが、WEB連載の単行本化でした。

話は非常に濃いんですが、しかし画力がアレというか登場人物が正直見分けがつきません。
一人だけあからさまな泣きぼくろがいるのですが、それ以外は私には髪色でしか区別ができないのですが。


伝説兄妹3! おかもと(仮)
☆☆☆

2までと比べて主人公が真人間になりすぎじゃないでしょうか。
まあ主人公以外が異常すぎるせいかもしれませんが。
1のような尋常じゃない尖り方が無くなった代わりに、全体として小さくまとまってしまったという感があります。
いや、読んでみると実際全然そんなレベルじゃないのですが、なんだか全体的な印象として。


ムダヅモ無き改革6 大和田 秀樹
☆☆☆☆

ファイナルライジングサン!!!!!
ありとあらゆるもの全てを勢いだけでどうにかしてしまうイカサマ麻雀ついに完結。
単行本ではまだいいんだが誌上で見開き26ページってのはよく許可されたな。


ゆゆ式3 三上 小又
☆☆☆

盛り上がりも盛り下がりも一切無い、体育祭も文化祭もほぼ完全スルーで心底どうでもいい話ばかりが延々続くというあまりに特異な学園日常4コマ。
如何にも狙っているかのような性格造形にもかかわらず、言動が飛びすぎるせいで萌えとかそういう要素からはかなり外れています。
特に気負うことなくなんとなくだらだら読むのに最適な作品です。


2011/04/03 20:11 | Comments(0) | TrackBack() | 買ったもの
今週の実績 2011/04/03
2011/04/03の実績

円卓の生徒

センセーの事、チョー大好き♪ 10
チュップのソウルランクを10に上げました。チョー情熱的な彼女は、これからもあなたにチョー夢中です。

逃がしはせぬぞ、先生殿…… 10
マイのソウルランクをが10になりました。忠義に生きる女サムライの敬愛はあなたのものです。

ふふ、先生は興味深い方だ 10
ミンツのソウルランクを10に上げました。怪しい実験につき合わされないよう、ご注意を。

オイラたちは最高の家族だぜ 10
ポポログのソウルランクを10に上げました。彼は本当の宝物を手に入れる事ができたようです。

2011/04/02の実績

円卓の生徒

先生みたいな騎士になってみせる! 10
サウルのソウルランクを10に上げました。悩み多き少年も、自分に自信が持てたようです。

あなたの温もり、忘れません 10
マァリンのソウルランクが10になりました。遠慮なく抱き枕にしてあげてください。

2011/03/27の実績

円卓の生徒

先生こそ、ドワーフの真の友だ! 10
バーゴのソウルランクを10に上げました。こういう汗臭い関係も悪くはないものです。

ありがとうございます、先生…… 10
エルサのソウルランクを10に上げました。2人は仲良し親子です。

炉の達人 10
強化クエストのランク9にしてロンドエールへ戻りました。高性能な武具ほど、強化の加護を大きく受けるようです。

私たちの絆は永遠だ 10
ルーミのソウルランクを10に上げました。彼女の愛を受け入れるためにも、胃袋は鍛えておきましょう。


2011/04/03 19:54 | Comments(0) | TrackBack() | 実績
買ったものリスト 2011/03/27
FLAPPY DX100問#4を全面クリアしました。
http://www.netfarm.ne.jp/island/sb_flappy.htm
正直#3までと比べて完成度が低い面が多かったかんじです。
ヒントを全く無視してもクリアできたり、空中押しだけで即クリアになったりとか、別解に手抜きが多くてちょっと。
そんな中最後まで抵抗していたのが382面で、本当もうこの面だけ全然解法が思いつかなくてどうしようかと思った。
気がついてみれば簡単だったんですけどね。

しかしなんでラインナップ等をPCから確認できないのでしょうかね。


OL進化論31 秋月 りす
☆☆☆

昔からほとんど変わらない古典作品。
こんなに経っているのに未だに何の業務なのかすらわからないという謎会社に勤めるOLとおっさんたちの生活が毎度毎度十年一日のごとく繰り返されます。
正直新鮮みは全く無いんだけど、既に古典というか偉大なるマンネリの域に達してきた感があります。


アラビアの夜の種族(1) 古川 日出男
☆☆☆☆

こいつのせいでウィザードリィ外伝2砂の王が未完になってしまったという曰く付きの作品であるため、これまであえて避けていたのですが、先日遂に我慢できなくなって購入。
確かにウィザードリィ外伝2だな、というか話にだけは聞いていたハルギスの過去編のようだ。
ちょっと四天王のあたりの設定が無理矢理な気がしないでもないが、しかし非常に読み応えのある内容です。
しかしこれは作中作にする意味はあったんですかね。
確かに面白いけど寝食忘れて行方不明になるほどの魔力はないだろ、さすがに。


藤村くんメイツ1 敷 誠一
藤村くんメイツ2
藤村くんメイツ3
☆☆☆☆

恐怖の権化やさぐれ高校生の話かと思ったらわずか2話にして消滅してしまった。
そもそも主人公より遥かに悪質な電波が充満しているのになんで彼の噂だけが1年以上も続いていたのかと。

ということで脈絡も伏線も何もあったもんじゃない理不尽不条理ツッコミ漫画です。
深く考えずにだらだら読むが吉。
あとドル○ドンってなに?

ところで初っぱなに現れて以来ほぼ行方不明な月光は元気でやっているでしょうか。


2011/03/27 21:29 | Comments(0) | TrackBack() | 買ったもの
今週の実績 2011/03/27
デスマーチが3月で終わるかと思っていたら4月まで伸びたでござるの巻。

2011/03/26の実績

円卓の生徒

今夜はとことん呑むぞー! 10
ロロンのソウルランクを10に上げました。お酒の量はほどほどに。

2011/03/21の実績

円卓の生徒

最後の生徒 20
マァリンが生徒になりました。力を失った状態ですので、ビシバシ鍛えてあげましょう。


2011/03/27 21:27 | Comments(0) | TrackBack() | 実績
EC-CUBE SC_DB_DBFactory_MYSQL::getWhereConverter()を使用する
EC-CUBEは、MySQLの場合Viewを使用せず毎回テーブルをJOINしています。
View非対応の古いバージョンのMySQLのためにそのような作りになっているようですが、そのせいで恐ろしい弊害が発生します。


EC-CubeをMySQLで実装すると、遅すぎて使い物にならなくなります。
どのくらい酷いかって中野区立図書館を遙かに超えるレベル。

商品数わずか1000件程度でストレスを感じるほどの遅延が出るようになり、10000件登録しようものならTimeoutをいじらないといけないというどうしようもない出来映えです。

どうしてこんなことになってるのか/class/db/dbfactory/SC_DB_DBFactory_MYSQL.phpを見てみましょう。
SC_DB_DBFactory_MYSQL::viewToSubQuery()とかな。
なんだよこれ。

読んでみると、サブクエリで全件取得して、その後でWHERE句で絞り込みを行うというとんでもなく非効率な書き方のSQLとなっています。
なんかもうちょっとどうにかならんのか、と見ているとサブクエリ中に'&&noncls_where&&'という謎の文字列を発見しました。

具体的なSQLは長大すぎて引用できませんが、構造的には次のような作りです。
'SELECT * FROM ( SELECT * FROM dtb_products &&noncls_where&& ) AS T1 WHERE (検索)'

ビューを参照するSQLを実行すると、

SC_Query::select()
SC_DB_DBFactory::getInstance()
SC_DB_DBFactory_MYSQL::sfChangeMySQL()
SC_DB_DBFactory_MYSQL::sfChangeView()
SC_DB_DBFactory_MYSQL::viewToSubQuery()
SC_DB_DBFactory_MYSQL::getWhereConverter()

という順番でSQLが変換されます。
SC_DB_DBFactory_MYSQL::viewToSubQuery()でビューに相当するSQLに書き換えられ、SC_DB_DBFactory_MYSQL::getWhereConverter()'&&noncls_where&&'のような文字列を置換して返します。

つまり、'&&noncls_where&&'に抽出範囲を狭める条件文をねじ込めば、SQLの実行速度が速くなりそうです。
サブクエリの返り値が10000件と1件では圧倒的な差が生まれることは間違いありません。

で、具体的なSC_DB_DBFactory_MYSQL::getWhereConverter()はどうなってるかというと、
 
    function getWhereConverter() {
        return array(
            "&&crscls_where&&" => "",
            "&&crsprdcls_where&&" =>"",
            "&&noncls_where&&" => "",
            "&&allcls_where&&" => "",
            "&&allclsdtl_where&&" => "",
            "&&prdcls_where&&" => "",
            "&&catcnt_where&&" => ""
        );
    }

実装されていません。

さらに、コントローラからSC_DB_DBFactoryを直接触る術がないため、外部から値を注入することもできません。
selectするたびに毎回SC_DB_DBFactoryインスタンスを作成してるんだよねこれ。

どうにかするためにはSC_Queryを直接書き換える必要があります。

/eccube/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
    function getWhereConverter() {
        return array(
            "&&crscls_where&&"    => $this->where['crscls_where'],
            "&&crsprdcls_where&&" => $this->where['crsprdcls_where'],
            "&&noncls_where&&"    => $this->where['noncls_where'],
            "&&allcls_where&&"    => $this->where['allcls_where'],
            "&&allclsdtl_where&&" => $this->where['allclsdtl_where'],
            "&&prdcls_where&&"    => $this->where['prdcls_where'],
            "&&catcnt_where&&"    => $this->where['catcnt_where']
        );
    }

/eccube/data/class/SC_Query.php
    function select($col, $table, $where = "", $arrval = array()){
        $sqlse = $this->getsql($col, $table, $where);
        $dbFactory = SC_DB_DBFactory_Ex::getInstance();
        $dbFactory->where = $this->where;
        $sqlse = $dbFactory->sfChangeMySQL($sqlse);
        $ret = $this->conn->getAll($sqlse, $arrval);
        return $ret;
    }

以上で形ができました。
あとはSELECTを実行する際に、
    $objQuery->where['noncls_where'] = ' WHERE product_id = '.mysql_real_escape_string($product_id);
    $arrRet = $objQuery->select("*", "vw_products_nonclass AS alldtl", "product_id = ?", array($product_id));

などとすれば動作します。

上記はあくまで最低限の形なので、NOTICEが出たりコントローラに直接mysql_real_escape_string()があったりする残念な作りです。
SC_Query::escape()Pear_DB::escapeSimple()あたりを拾ってくるようにしたりした方がよいでしょう。
あと'&&noncls_where&&'以外の置換文字列はそもそも存在すらしていないので、追加するなり削除するなりしてしまいましょう。


ちなみにPostgresの場合は相当すっきりしたSQLになっていますが、これは単にCREATE VIEWに面倒ごとを突っ込んでいるだけです。
つうかMySQLにviewが実装されたのは2005年なんだからview非対応への対応とかもういいよ。


2011/03/21 19:37 | Comments(0) | TrackBack() | PHP

<<前のページ | HOME | 次のページ>>
忍者ブログ[PR]