2012年12月25日

気がつくと積み本がいっぱい

11月はアリアンロッド系のリプレイしか買ってない気がする。
というか、本買ったかな?

ちなみにちょっと部屋を掃除した所いくつか読んでない積み本が何冊か出てきました。

・プライムナンバーズ
・ゲームエンジンプログラミング
・意味が分かれば数学の風景が見えてくる
・コードコンプリート 第2板 上巻
・独習デザインパターン

ほとんど辞書みたいな規模の本が何冊か積んでいる所です。
上3冊は途中まで読んでる所で、
下2冊は手すら付けていないと言うところを考えると、
1ヶ月程度じゃ読み切れなさそうな量の本が溜まっているようです。

まぁ、しばらくは消化出来そうにない気がする
posted by 迷い猫 at 00:35| Comment(0) | TrackBack(0) | 日記(Books) | このブログの読者になる | 更新情報をチェックする

2012年12月06日

【PHP】グローバル浸食 $GLOBALSにおけるシステムが吹っ飛ぶレベルの危険な仕様

寝ようとしている時にふとPHPの仕様レベルの設計で引っかかって半日くらい原因解明にとられた事を思い出しました。

で、この仕様ってPHP4で出たのは覚えているのですが、
PHP5になっても同じ仕様だったような気がしていたすごく気になったので、
日付が変わった時間にパソコンを付けてチェックコードを出して見た訳なんですが、

PHPの恐るべき恐怖がここに詰まってる

すごいなぁ。
おそろしいなぁ。
PHP5でも動くってことは、これは完全にPHPの仕様としてのシステムなんだよなぁ。



問1.下記のコードにて出力されるメッセージを答えなさい
$dir = 'directory path';
echo $dir;
まぁ、これはそのまま
directory path
と出力されます。



問2.
$GLOBALS['dir'] = 'BaseDir/';
$dir = 'directory path';
echo $GLOBALS['dir'] . $dir;
このソースコードの結果は
directory pathdirectory path
となります。
BaseDir/directory path
とはなりません。



初心者どころか、PHPでメシ食ってるような人でも発生させてしまう危険性のある
グローバル浸食という現象です。
※それっぽいワードが見つからなかったので自分で名付けてみましたw

ちなみに$GLOBALSで始まる配列はグローバルスコープと呼ばれる物でして、
「関数とかクラスの外で定義した変数を関数とかクラスで使いたいです」
「でもglobalでいちいち変数を呼び出すとか、変数を侮辱してるみたいで他の言語でも嫌われてアンチが沸くような記述だからやりたくない」
「defineは変更出来ないから、変更出来なきゃダメダメです」
「だったらこの$GLOBALS変数で一気に解決よ」

というような使い方をされる事が多いです。


多いんです。


小さいシステムの上ではdefineだったりするのに、
大きいシステムでは、固定値の一括管理のつもりなのか、
$GLOBALSにデータベースのパスワードとか、ディレクトリのなんたらの情報とか、ライブラリで使用する設定用配列とか、
グローバルという名前が付いているからという理由で
重要度があって尚かつ関数やクラス内などあらゆる場所で使われる可能性があるデータなんだし使っちゃおう
といった感じに使われる事がちょこちょこあります。



で、$GLOBALSの動きをちゃんと説明しますと、
$GLOBALSはPHPのソースコード内で定義されるすべての変数を保持する変数と言う意味合いを持っています。
ですのでvar_dump($GLOBALS)でいろいろと中を覗いてみてください。
$_GETや$_POST、$_SERVERのような定数みたいなもんだと思っていた変数が
['_GET'] ['_POST']のように連想配列で格納されています。
もちろん['GLOBALS']と自分自身も格納しているわけです。

var_dumpの後ろで一つ変数を作ってみてください。
そうすると$GLOBALS['今作った変数']というような項目が増えます。



大体この動きで理解出来たと思いますが、
PHPで使用されるすべての変数は$GLOBALSから使用も変更も出来るし、
$GLOBALSの中にある変数も$・・・という物からアクセスする事が出来ます。
※関数やクラスの中で作られる変数は若干特殊な為、グローバルスコープからは見えません

故にグローバルだからという理由だけでグローバル変数に大切なデータをつっこんでおくと、
うっかり普通に定義した変数の名前を被らせて、そのまま後の処理でめちゃくちゃなバグが起こる危険性があります。



グローバルに使いたい定数はちゃんとdefineで定義しておきましょう。






あっ、ちなみに私はグローバルスコープとかに普通に定数とかつっこんじゃってますw

PHPの変数名には使用出来ない文字ってのがあるので
$GLOBALS['@dir']のように変数名に使えない@から始まる名前を与える事で、
グローバル浸食の発生を押さえ込む事が出来ます。

defineは確かに強固だけど、データによっては配列として保持しておきたいじゃないですか。
とあるライブラリを狙い通りに起動させる為には配列の定数を入れることできっちり動くってパターンもあるんですよ。

そういう理由もあって
固定値でしか使用しないものはdefine
配列として置くと後で見やすい物はGLOBALS
と使い分けていたりします。


どうしても$GLOBALSにデータを突っ込んでおきたい場合は
 $GLOBALS['@〜']な名前で定義すればグローバル侵食は起こらない!

2012年11月11日

2012年10月 購入図書

アリアンロッド・リプレイ・ヴァイス 1
プロ直伝 ゲームプログラミング入門
日本のまつろわぬ民
怪異の風景学
世界の神話101


アリアンロッドの投稿ネタのためのきっかけがほしいなと思って、
そこそこ民俗学系の本をかじったりしてるところです。

ちなみにゲームプログラミング入門は日系ソフトウェアのネタをいくつか詰め込んだものという事で、
数種類のゲーム開発方法が書かれているので、
漠然とゲームを作ってみたいという人にとっては非常にいい本です。
それとPS Vitaの開発について書かれた現時点では非常に珍しい本なので、とりあえず買っておいた。
まだPlayStationMobileは正式リリースされてないから、普通の本にはなりにくいのはしょうがないんですけど。
posted by 迷い猫 at 02:00| Comment(0) | TrackBack(0) | 読書続き(図書館) | このブログの読者になる | 更新情報をチェックする

2012年10月03日

2012年9月 書籍分

アリアンロッド2E・サガ リプレイ・デスマーチ7、8巻
XNA GameStudioで始めるゲームプログラミング
ゲームエンジンプログラミング
これからはじめるVisualC#2010


林トモアキ作品でミスマルカ以外を読んでた事もあってか、
単行本はほとんど買ってない。

ちなみに私が使える言語は
PHP:一通り使えるくらいには理解している
Java:スレッド処理以外の基本機能に関しては一通り理解している
AndroidSDK:FWを使った機能であれば大方使う事が出来る
AndroidNDK:使おうと思えば使える。
C++:基本的な部分のみなら使える

ざっとこんな感じなんですが、
もう少し垢抜けた何か楽しくなる、仕事では使わない技術が欲しいと思っている所なんです。

そんなわけで、3冊。
どれも難しいというよりは、読む時間が足りなくて、あまり読み進めていなかったりするけど
posted by 迷い猫 at 22:52| Comment(0) | TrackBack(0) | 日記(Books) | このブログの読者になる | 更新情報をチェックする

2012年09月11日

2012年8月 書籍分

アリアンロッド2E リプレイ・キャプテンRED 1巻
HSP3.3 プログラミング入門
リーダブルコード


思い出せないけど今月はあまり本を買ってなかったっぽい?
その代わり9月分は結構な本を買った気がするけど
posted by 迷い猫 at 01:32| Comment(0) | TrackBack(0) | 日記(Books) | このブログの読者になる | 更新情報をチェックする

2012年08月26日

【PHP/Smarty】Fatal error: Class 'Smarty_Internal_TemplateCompilerBase' not found in /usr/local/apache/www/htdocs/prestadev.pl/tools/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php on line 127

PHPベースでちょこっとフレームワークを自作してたら、
下記のようなエラーが出てきて、半日開発が止まりました。
Fatal error: Class 'Smarty_Internal_TemplateCompilerBase' not found in /usr/local/apache/www/htdocs/prestadev.pl/tools/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php on line 127


というか英語サイトとかばっかり出てくるのに、
これだ!という解決作がどうしても見つけられなかった訳なんですよ。

で、細かくいろんな条件を変えたりして、時にはSmartyのキャッシュに惑わされたりして、
私の環境ではある特定条件下で発生する事が発覚しました。

【条件と回避方法】
1.Smartyのバージョンが3.xである事
 Smartyのバージョンを2.xにダウンさせる事で、このエラーは出なくなります。
 バージョンダウンして問題無いのであれば、こちらをおすすめします。
 多少の性能ダウンは起こるかもしれませんが、
 このバグを回避する手間暇を考えると、おそらくすごく楽です。

2.__autoloadを使っている
 index.phpからClassLoader機能を持つファイルをインクルードして、
 Smartyをインクルードするような処理が部分的にありました。
 ちなみにSmartyをインクルードする部分だけをautoloadを一切返さずに読み込む事で、
 なぜか回避する事が出来ます。

 私のソースコードでは、
 Smartyを継承しているクラス(SmartyControl)をautoloadで読み込み、
 SmartyControl.phpの先頭でダイレクトにSmarty.classを読み込むソースです。
 このソースコードにて、
 SmartyControlをautoloadを使わずにダイレクトインクルードする事で
 なぜかこのバグは発生しなくなりました。

 見た感じ、autoloadでクラスを読んだ場合に、
 さらにその中でincludeが発生すると、
 普通にincludeを読み込むのとは少し違う動作をしているっぽいのですが、
 残念ながら具体的に何が原因でバグになっているのかは分かりませんでした。

【結論】
Smarty2.xに置き換えるか、
Smarty周りのインクルードを単純なインクルードに差し替えてしまえば、
高い確率で回避する事が出来る。
これ以上調べるのは骨が折れるので、手を出したくない。

2012年08月08日

2012年7月分 書籍

アリアンロッド・リプレイ セカンドウィンド5巻
ソードワールド2.0リプレイ 魔法少女フェアリーフォース!
人類は衰退しました 1〜7巻
W.B.イエイツ編『ケルト妖精物語』
「妖精・天使」眠れないほど面白い事典
よくわかる伝説の「聖地・幻想世界」辞典

冊数は一応読んでるっぽい。
アリアンロッドの投稿ネタの為に妖精関係のネタが欲しかったので、
妖精関係の本が少し多めになってます。
人類は衰退しましたはアニメが普通に面白かったから、一気に買っただけ。
posted by 迷い猫 at 23:21| Comment(0) | TrackBack(0) | 読書続き(図書館) | このブログの読者になる | 更新情報をチェックする

2012年07月28日

ブックファーストはダメな本屋

※この日記はブックファースト新宿店について書かれています。
 それ以外のブックファーストに付いては経験値が足りない為、該当しない可能性が考えられる事をご了承ください。



新宿のブックファーストだとポイントカードがあって、
1%〜3%のポイントが付くんで、
仕事帰りにちょくちょく立ち寄るんですけど、

なぜか気に入った物が見つからず、
結局紀伊国屋とか池袋のジュンク堂まで足を伸ばして本を買う事が多いです。

前々から、
ポイントが付くからお得なんだけど、
なぜかブックファーストは満足度が低いと感じていました。

そして最近ブックファーストで本を探しても面白く無い理由がいくつか見つかったので、
メモがてら書いてみようかと思います。




1.迷いやすく分かり難い
新宿店の地下1階の特徴なんですが、
そのまま入口から入ると、左右と前に道が広がってる。
ただし左右には基本行けないというか、無駄になる為、前に進むが、
それは前じゃなくて微妙に斜めである事と、
そのまま進むと島が中心にあり、通行の為にさらに左右どちらかに移動しなければいけない。

情景的に分かり難いんで、ポイントだけ言うと、
斜めの棚やディスプレイがあったり、
メインストリートとなる道が少なく、狭い通路が多い
歩きにくい。

カクカクした設計にしろとは言わないけど、
曲がる回数が多く見通しがすごく悪いんで、
本屋としてはすごく歩きにくいです。
特に単行本コーナーから戻ってくるときなんかは、
どこで曲がれば出口まで一直線なのか分からなくなる事が多い。

単純に棚の配置が悪くて、どこに何があるかというのが探しにくいんですよ。
大型書店ともなると、配置が悪く迷いやすいという設計は致命的にストレスが溜まる。



2.関連書籍の置き方が悪い。
今日は漫画とかのコーナーに行ってきたんですが、
「映像化作品コーナー」
の中で話題作を探した所
“最新刊はあるのにそれ以外の巻は置いてない”
“最新刊を除くすべての巻がそろっている”
“映像化にはあるが出版社別の棚には置いていない”
“そこそこ古く、現時点ではあまり注目されて無さそうな作品が並んでいる”
“結構な話題作でも映像化コーナーには並んでいない”

もうね、酷いとしか言えない。

映像化作品だろうと、普通の人は1巻目から読みたいんだから、1巻から全部並べて置くべきだと言う事。
そして最新刊だけ置いていないというのは、
その本を探しに来たユーザーをないがしろにしていると言う事。
映像化作品は大量に出来るんだから少し古い作品は追い出してしまっても問題無いはずだと言う事。

すっごく探しにくい。
本の並び1つだけど、これだけ探しにくいとは思わなかった。

最新刊しか置いてなかったのは「人類は衰退しました」
 それ以外の1〜6巻はどの棚にあるのか、話題作なのに置いてある棚を見つける事が出来ませんでした。
 ※今期映像化、2chやニコ動でもかなりの話題作となっている。最新刊は2週間前発売

最新刊が置いていなかったのは「そらのおとしもの」
 映像化されて結構時間たったし、1〜14巻まで置くなら最新刊もこっちに置こうよ。
 結局最新刊コーナーまで歩いてやっと見つけたし。
 ※2009,2010にアニメ化、2011映画化、3期アニメ化はアナウンスされているだけで情報は無し、最新刊は前日発売

映像化にはあるが出版社別の棚には置いていないのは「境界線上のホライゾン」
 電撃の看板作品なのに電撃文庫のコーナーには一切置いていない。
 一応映像化コーナーに移動しましたというテープは貼ってたけど、すっごく目立たない
 ※2011,2012アニメ化、電撃文庫の看板タイトル

細かい部分は見ていないけど、それでもこれだけ不満点爆発でした。



3.本配置が目立たない
なんとなく思っていた事なんですが、
単行本というのは基本的に小さい本ばかりなので、
探す場合は背表紙でしか探せない事が多いです。
ただブックファーストの単行本は“主にラノベ系ですが”一番上から一番下までぎっしり本が詰まっています。
PHP文庫とかそういう本に関しては中腰の棚があって、そこに横並びに新刊などが並んでいるので、
そこそこ探す事が出来るのですが、
ラノベ系に関しては、上から下までぎっしり詰まっている為、
表示で目立つラノベなのに、目立たないんです。
ラノベって結構表紙買いが多いジャンルなのですけど、
ブックファーストのように表紙が出てない事が多いと、
ときめく事はないので、
自分が今まで買った作品や探している作品といった
“タイトルを知っている作品”以外は手に取る事も見る事も極端に少なくなります、

ブックファーストに本を探しに行って、
その後でポイントが付かない別の本屋によって本を買う事が多い。
たぶんこの部分の影響が大きいんです。
ブックファーストでは表示が出てないから気がつかなかった、
もしくは迷路に紛れたりしてときめかなかった、
そういう本を別の本屋で見つけて購入してしまう。

ちなみにジュンク堂に寄らずに紀伊国屋とかに行くこともあるけど、
そっちの場合の不満点ってやっぱ少ないんだよね。



結論
・本棚配置は根本的に悪い。
・広い道を造るべき。
・ラノベをもっと表紙買いさせろ。
・出版社別の本棚には扱っているすべての本を置くべき。

ブックファースト新宿店の責任者は自信の店舗から、人間の深層心理や行動原理についての本を10冊ほど購入して、読むべきだと思う。
posted by 迷い猫 at 01:53| Comment(0) | TrackBack(0) | 読書続き(図書館) | このブログの読者になる | 更新情報をチェックする

2012年07月06日

アリアンロッド用確率計算【詳細】

私が参加したアリアンロッドセッションにて、12Dを3回振ってもクリティカルが出ない
という結構珍しい確率が出てきたので、
前回作った計算プログラムをベースに、
もうちょっと深いレベルで確率を出してみた。


D 分数 パーセント 振り直し 3回
2 1 / 36 02.77 % 05.47 % 08.09 %
3 16 / 216 07.40 % 14.26 % 20.60 %
4 171 / 1296 13.19 % 24.64 % 34.59 %
5 1526 / 7776 19.62 % 35.39 % 48.07 %
6 12281 / 46656 26.32 % 45.71 % 60.01 %
7 92436 / 279936 33.02 % 55.13 % 69.96 %
8 663991 / 1679616 39.53 % 63.43 % 77.89 %
9 4608946 / 10077696 45.73 % 70.55 % 84.02 %
10 311*10^5 / 604*10^5 51.54 % 76.52 % 88.62 %
11 206*10^6 / 362*10^6 56.93 % 81.45 % 92.02 %
12 134*10^7 / 217*10^7 61.86 % 85.46 % 94.46 %
13 866*10^7 / 1306*10^7 66.35 % 88.68 % 96.19 %
14 551*10^8 / 783*10^8 70.40 % 91.24 % 97.41 %
15 348*10^9 / 470*10^9 74.03 % 93.26 % 98.25 %
16 218*10^10 / 282*10^10 77.28 % 94.84 %
17 135*10^11 / 169*10^11 80.16 % 96.07 %
18 840*10^11 / 1015*10^12 82.72 % 97.02 %
19 517*10^12 / 609*10^12 84.97 % 97.75 %
20 317*10^13 / 365*10^13 86.95 % 98.30 %
posted by 迷い猫 at 00:44| Comment(0) | TrackBack(0) | 日記(Books) | このブログの読者になる | 更新情報をチェックする

2012年07月05日

2012年6月分

ゲーマーズフィールド過去分6冊
悲鳴伝
アリアンロッド・サガ・リプレイ 9巻
這い寄れニャル子さん 4,5巻
GOSICK 7巻


そこそこ本買った。
悲鳴伝はさすが西尾維新って感じで、癖はあるし、
フラグ回避を放棄するような、
それでいながら変な部分にあるフラグは見事に回収していくと、
非常に特異で特殊な話だった。
posted by 迷い猫 at 23:33| Comment(0) | TrackBack(0) | 読書続き(図書館) | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。