Hatena::ブログ(Diary)

b6note このページをアンテナに追加 RSSフィード Twitter

2012/03/06(Tue)

phpのマジックメソッドとかのパフォーマンス

マジックメソッドで並みいるgetterを整理してみたくなったので
少し調べためも

phpバージョン

ほげほげ

コード

<?php
<?php

class Hoge {

	private static $hoge;

	public function __construct() {
		$this->fuga = 123;
		$this->piyo = 123;
		self::$hoge = 123;
	}

	public static function get_hoge() {
		return self::$hoge;
	}

	public function get_fuga() {
		return $this->fuga;
	}

	public function __call($name, $args) {
		return $this->$name;
	}

	public function __get($name) {
		return $this->$name;
	}

}

$hoge = new Hoge();

$times = 1000000;

echo "static method.\n";
$start = microtime(true);
for ($i = 0; $i < $times; $i++) {
	$tmp = Hoge::get_hoge();
}
$past = microtime(true) - $start;
echo $past . " sec.\n";

echo "instance method.\n";
$start = microtime(true);
for ($i = 0; $i < $times; $i++) {
	$tmp = $hoge->get_fuga();
}
$past = microtime(true) - $start;
echo $past . " sec.\n";

echo "magic method __call.\n";
$start = microtime(true);
for ($i = 0; $i < $times; $i++) {
	$tmp = $hoge->get_piyo();
}
$past = microtime(true) - $start;
echo $past . " sec.\n";

echo "magic method __get.\n";
$start = microtime(true);
for ($i = 0; $i < $times; $i++) {
	$tmp = $hoge->piyo;
}
$past = microtime(true) - $start;
echo $past . " sec.\n";

結果

static method.
2.1691780090332 sec.
instance method.
2.7707538604736 sec.
magic method __call.
6.9698939323425 sec.
magic method __get.
0.43218612670898 sec.

__getが早いのはなんかコードが悪くて最適化とかされてるのでしょうか


参考:
http://bouyke.com/archives/638

2011/12/07(Wed)

みゆっき☆Thinkでしゃべってきた


ドワンゴ研究開発チャンネルの番組、「みゆっき☆Think」第10回に
出演、お話してきますた

テーマは「チーム開発」だった。現役高校生みゆっきに知ってほしいことって
ことで、「チームの中でプログラマが気にすべきこと」を数点に絞って話した。
脱ぼっち!脱ぼっち!


チーム開発〜脱ぼっちマインド〜
※はてなに埋め込むと表示が崩れて見にくいようなのでSlideshareでご覧ください><

そのうちオフィシャルなブログhttp://info.dwango.co.jp/rd/)にもレポートが上がります。
あと、 http://ch.nicovideo.jp/channel/dwango-engineer ここから
動画が見られるようになると思われる。

2011/11/11(Fri) カンマの位置

要素を列挙するときのカンマ位置とかについて

http://d.hatena.ne.jp/kitokitoki/20111109/p1
これを見て
自分の意見としてはすぎゃーん(id:sugyan)のいうとおり
要素を追加するときに既存の行への変更が要らなくなるから
または削除するときも最後のカンマを消し忘れる恐れがなくなるから
に他ならないと思った。

具体的に言うと

試しにエディターをひらいていただいてですね、

 [
   aaaaaaa,
   bbbbbb,
   ccccccc
 ]
(↑これが元記事でいうカンマラスト??)
 [
   aaaaaaa
   ,bbbbbbb
   ,ccccccc
 ]
(↑これがカンマファースト??元記事の語義を少し掴みかねているのですが)

の二つをエディタにコピーして、
要素"ddddddd"を追加してみれば分かりやすいと思うのですが、

あきらかに前者の方が「要素"ddddddd"を追加する」行為は
めんどくさいですよね。

このカンマを行頭に記述するかどうかってのは、
その編集手間を軽減することが大事な点だと思うのです。

つまりプログラミングじゃなくても

プログラミング言語に限らず、
たとえば設定ファイルとかで

 a
,b
,c

みたいに、カンマを行頭に置いて
項目を列挙するのはある意味常套手段だと思うのです。
JSと全然違う分野で挙げると、たとえばSQLMySQLへのINSERT文です。
INSERT INTO table(hoge) VALUES
(1)
,(2)
,(3)
,(4)
;

とか。

たとえばOracleの制御ファイルの中で
(
col1    TERMINATED BY ','
,col2   TERMINATED BY ',',
,col3   TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"',
,col4   TERMINATED BY ',',
,col5   TERMINATED BY ';'
)

とか。
こういうのを編集しようとしたとき、
行頭にカンマがあったほうが明らかに
編集しやすいですよね。

編集しやすいってことは人が注意を注ぐべき
ポイントが減るってことで、
っていうことはバグが減るわけで、
そういう点から生まれた書き方・文化じゃないかと思います>行頭カンマ。
たしかにdiffも見やすくなるけど、それよりも「ミスが減る」ってのが重要だと思う。

大事なのは最後の余分なカンマを許容してくれること

行頭カンマは、「要素列挙の最後がカンマで終わることを許されない場合」の
対応策であって、人間としてはやはり各行の最後にカンマを書けると自然に編集できると思います。
(文章的に最後が「,」で終わるのは気持ち悪い、というのはある。)

array(
 a,
 b,
 c,
);

このとき、cの後ろのカンマ有無を許容することが、大事です。
人間の感覚×文法の許容点。いわばラスト要素後ろのカンマを許してくれるのは
一種のシンタックスシュガーに他ならないと思います。
(ってことは人間向けに書きやすくしてくれているという理解)
「最後にカンマが有っても無くてもどっちでも許容する」ってことです。

それによってミスが減れば幸せではないですかね。

でもって末尾カンマは許容されてることが多い印象です

PHPでもRubyでもIE以外のjsでも、配列等の
末尾にカンマがあってもゆるしてくれます。
元記事にある引用の
「今は Node 周辺だけだけど、たぶんそのうち市民権を得る気がしてる。」
というのはちょっと意図がよくわかりませんでした。

問題は

たとえばjsで言えば、配列の末尾を","にしたときIEだとエラーになっちゃうとか
そういう動作環境によって解釈が違う可能性がある場合だと思います。
もうみんなカンマで終わることを許したらいいんですよ。ほんとに。
空気嫁よ!!!!!
IEェ...

2011/09/23(Fri)

FreeBSDのprintfを読んだ

読んだ読んだー

スライド

プロジェクターじゃなくて手元のPCで見てもらう用なので字ちっちゃいです><

printf

読みやすかった

ソースがprintf.cだけなんで、いちいちmakeしなくても
Vimで読みながらquickrunで動作確認して...というのが
大変手軽にできました。

もうちょい綺麗なコードにできそうな

以前findを読んだときに綺麗だと言ったけど、
printfはもうちょっと綺麗にできそうな気がした。
出力する箇所と方法が散らばってるところとか、
doformat()とgetnum()の両方で複数回 符号の有無を判断してるところとか、
doformat()の中でフォーマット文字列の途中に一旦nullを入れちゃうところとか。
(↑動くから別にいいけどちょっと分かりにくいと思った)

PF関数じゃなくて関数マクロにしてるのは
関数にすると引数が増えるから?

コメント /* NOTREACHED */ の効果、勉強になった

知らんかった。
/* FALLTHROUGH */ は仕事で見たことあって、なんとなく知ってた。

以上

お疲れさまでしたー

自分が勉強したくてやってるゆるゆる勉強会で
勉強できてるっていいですね、仲間に感謝。

2011/07/24(Sun)

「ちんこの行く方へ」

このエントリを書いた経緯
f:id:akitsukada:20110724225956p:image
http://twitter.com/#!/akitsukada/status/95127686787244032
http://twitter.com/#!/akitsukada/status/95127760342761472
http://twitter.com/#!/akitsukada/status/95127841183760384
http://twitter.com/#!/akitsukada/status/95127881973374977

件名:ちんこの行く方へ

あるあさ ちんこがぼくにいったんだ

「ついてこいよ もっとたのしくいきようよ」

それをきいてはじめて知った

ぼくにちんこがついていると思っていたけど

違ったんだね

ちんこにぼくがついていたんだ

ぼくは単なるおまけだったんだ

すっきりしたよ

これからは ぼくがきみについていく

どんなところにも きみとならイケる

ぼくはきみについていく

そう

ちんこの行く方へ

細かいところが思い出せないけど、
たしかこんなのだったと思う。

迷惑メールのくせにURLもついてなくて、
当時彼女もいなかった僕はなんだか妙に関心してしまって、
不覚にも少し共感してしまうものがあったりして、
たまにこのメールを読みなおしてはクスっと笑ったりしていたのです。

だれか同じようなメール保管してる方いませんかね??

あー携帯捨てる前にこのメールだけ保管しておけばよかったなーミスった。