いつか作ります RSSフィード

2009-06-24

[]PHPではガンガン変数を複製してかまわない 21:22 PHPではガンガン変数を複製してかまわない - いつか作ります を含むブックマーク はてなブックマーク - PHPではガンガン変数を複製してかまわない - いつか作ります PHPではガンガン変数を複製してかまわない - いつか作ります のブックマークコメント

期待したのに!

Don't copy variables for no reason. Sometimes PHP novices attempt to make their code "cleaner" by copying predefined variables to variables with shorter names. What this actually results in is doubled memory consumption, and therefore, slow scripts. In the following example, imagine if a malicious user had inserted 512KB worth of characters into a textarea field. This would result in 1MB of memory being used!

BAD: $description = $_POST['description']; echo $description;

GOOD: echo $_POST['description'];

大嘘をこくなクソッタレ。

検証

面倒なので、メモリ使用量は上限で測る。つまり、落ちるか落ちないかだけ見る。

//前提1:これは落ちない

$str1 = str_repeat('1', 30000000);

//前提2:これは落ちる(メモリ不足)

$str1 = str_repeat('1', 30000000);

$str2 = str_repeat('1', 30000000);

という状態になるまで適当に数字をいじる。ここから開始。で、

変数を複製してみる

//これは落ちない

$str1 = str_repeat('1', 30000000);

$str2 = $str1;

googleの主張に拠ればこのコードを実行したら前提2のコードと同じだけメモリを食う、つまり前提1の倍メモリを食うので、落ちなければいけない。のだが、実際は落ちない。ここ、驚くところね。

つまり、PHPでは、変数を別の変数に代入しても、メモリ上では変数は複製されない。

ちなみにこうすると落ちる。

//これは落ちる

$str1 = str_repeat('1', 30000000);

$str2 = $str1;

$str2 = $str2 . '1';

ポインターを示すのが面倒なので結論だけ言うと、PHPは値を複製しても、本当に必要になるまでは値を複製せず、同じメモリ位置を参照し続ける。オリジナルとは別でメモリを確保する事が必要になった時に改めて別の場所にメモリを確保し、値を複製する。

最後の例だと、$str2が更新される時点(3行目)で初めて値が複製される。2行目の時点では30000000文字の文字列はメモリ上に1つしか存在しない。変数を複製しても、2倍のメモリが消費される、という事はない。

ちなみに、関数の引数でも同じ事が起きる。見た目には値渡しと同じように動作するのだが、実際は参照が渡されている。だから、引数に再代入するとかいう野蛮な行為にさえ及ばなければ、関数にはガンガン値渡しをして問題ない。メモリ管理などという低俗な事はC層が勝手にやってくれる。

(厳密にはポインタっぽいものの分や、こういう小賢しい管理をするためにメモリを食うので、変数のコピーがゼロコストというわけではない。が、そんな性能差を気にするようなシチュエーションならそもそもPHPなんぞ使うべきではない)

つうかechoとprintの性能差がどうのとか言ってるし。何ナノ秒の差だよそれ。これだからPHPerはダメだといわれるんだ。

ここにまた新たなPHP伝説が誕生した。

たとえGoogle社員でもPHPerは駄目

追記:

流石にツッコミが入ったらしく、修正が入っている。現在のサンプルならばメモリ消費量が増えるので、指摘自体は正しくなっている。

2009-06-17

Amazonアフィリエイトは「強者のアフィリエイト」 19:58 Amazonアフィリエイトは「強者のアフィリエイト」 - いつか作ります を含むブックマーク はてなブックマーク - Amazonアフィリエイトは「強者のアフィリエイト」 - いつか作ります Amazonアフィリエイトは「強者のアフィリエイト」 - いつか作ります のブックマークコメント

アマゾンは、一言で言うと「強者のアフィリエイト」です。再訪問期間が短くて料率が高いということは、ブログ記事からストレートに直接購入させられる力を持っているアルファブロガーには有利です。

まったく別次元でも、Amazonは強者のアフィリエイトだし、カラメルや楽天は弱者のアフィリエイト。

Amazonは「強い」ネットショップであり、楽天やカラメルは「弱い」ネットショップ。つまり、オンラインで書籍やゲームを購入する人は、放っておいてもAmazonに来る。だから、Amazonは自己のオンライン書店業界のシェアを伸ばすためにアフィリエイトをする必要が無い。Amazonのアフィリエイトは純粋に販促であり、売上を増やすために存在する。

(もう少し考えると、書籍/ゲームのオンライン広告業界を丸ごと食うために存在する、という側面もある。自前の通販サイトを持たない出版社、あるいは著者が何かの本を売りたいと考えた場合、自分らで宣伝ページなりを作るにしても、一番下には結局Amazonアフィを貼り付ける事になる)

いっぽう楽天やカラメルは、そんな地位をいまだ築けていない。楽天はいっけん好調だが、例えばAmazonがエレクトロニクスに進出すればエレクトロニクス分野が丸ごと持って行かれるような、そんなレベルでしかない。カラメルに至っては、存在すら知らない人が大多数だろう。楽天やカラメルにとってのアフィリエイトは、自サイトへの主な誘導手段になる。報酬は「サイトへの誘導」の対価である。

カラメルを名前すら知らない人がアフィリエイトを踏んでサイトを訪問し、週末にのんびり眺めて可愛いブーツでも買ってくれたら、それはカラメルにとってはとてもありがたい事であり、だから報酬が乗る。いっぽう、俺がdankogaiのブログから書籍に飛んで、でもその場では買わず、週末にエロゲをAmazonで買ったとしても、それは別にdankogaiによってAmazonに誘導されたからではない。だから報酬が乗らない。

ということをぼんやり考えた。まあ、カラメルや楽天が短期、高料率の「強者のアフィリエイト」を、現行の「弱者のアフィリエイト」と併設する、という手は普通に考えられる気がするけど*1

*1:デメリットもあるかもしれないけど、あんま深く考えてないんでパス

2009-06-14

エロゲ規制の今後の展開予測 21:58 エロゲ規制の今後の展開予測 - いつか作ります を含むブックマーク はてなブックマーク - エロゲ規制の今後の展開予測 - いつか作ります エロゲ規制の今後の展開予測 - いつか作ります のブックマークコメント

  • 陵辱っぽい要素を含むエロゲが「自主規制」
  • ついでなので、ロリっぽい要素を含むエロゲも自主規制される
  • ついでなので、フェミ団体あたりからの圧力でエロゲ自体が全面規制される
  • エロゲをショップで販売するのは全面禁止に
  • 当然の如く、各社DL販売に主軸を移す(移さざるを得ない)
    • ソフ倫、メディ倫の発言力、事実上ゼロに
  • オンライン販売も規制されるも、無修正エロ動画のように「うちは海外企業です(キリッ」メソッドで逃れる
  • 国内法の規制を一切気にしなくなるのでモザ無しとかも全面解禁
    • 「モザありとか何時代だよwww」派と「いや、モザイクあった方がエロいだろ」派の絶え間ない闘争の時代が幕を開ける
    • 設定上は18歳ですメソッドも不要になり、幼女を拉致監禁するゲームが規制前よりむしろ増える

いずれにせよ、この業界が生き残るにはオンライン販売+Steamのような強力な著作権保護システムの導入が不可欠だと思っているので、規制自体はたいした問題ではない、と思っている。規制が入ろうが入らなかろうが、数年後には現在のシステムは破綻する。プログラミングの世界でよく言われる話でもあるが、10年前には存在しなかった市場を、根拠もなく5年後も変わらぬ形で存在するだろうと考えるのは愚か者のすることだ。

どうして規制される事になったのか、どの辺で歯車が狂ったのかといえば、エロゲのPOPを公道上に平気で出すアホとか、エロゲをアニメ化するアホとか、エロゲを家庭用移植するアホが出た辺りだろうが、最初から狂った業界だし、割と心からどうでもいい。エロSteamの座を取る、次代のエロゲ業界の覇者がどこになるのかには少しだけ興味があるが。

まあ、リアル空間を占有できないようになれば、社会問題化する可能性は激減するだろう。つうか、ジュニアアイドルを先に規制しろよ。

新着エントリは上に追加。コメントは「はてなユーザのみ」、公開設定はパブリック (だれでも閲覧ができます)。