忍者ブログ
[PR]
×

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



2025/11/27 21:44 |
PHP5.3 カッコつけないPHP
物凄い今更ですが、↓こちらで括弧の数勝負というのをやっていたのを発見しました。
http://e-arrows.sakura.ne.jp/2010/08/is-lisp-really-has-too-many-parenthesis.html
残念ながら我らがPHPのコードがありませんので、底辺ぺちぱーの端くれとして挑戦してみましょう。

プログラムの仕様は以下の通り。

・指定数までの階乗(factorial)を表示するプログラム
・指定数はコマンドライン引数で指定できる
・20を指定したときの表示は以下
・引数が指定されなかったときは1の階乗
・括弧として(){}[]をカウント

ん?「指定数はコマンドライン引数で指定できる」?
大丈夫!PHPだってコマンドラインで実行できるんです!
まあ普通そんなの使うくらいならPerlやシェルスクリプトで書きますけどね。

まずは素直に書いてみる。
	//引数
	if(isset($argv[1])){
		$count = (int)$argv[1];
	}else{
		$count = 1;
	}
	
	//階乗
	$factorial = 1;
	for($loop=1; $loop<=$count; $loop++){
		$factorial = $factorial * $loop;
		print($loop . "! = " . $factorial . "\n");
	}
簡単ですね。
括弧の数は20個となりました。
では実行。

> C:\xampp\php\php.exe ./factorial.php 20
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 6227020800
14! = 87178291200
15! = 1307674368000
16! = 20922789888000
17! = 3.55687428096E+14
18! = 6.402373705728E+15
19! = 1.2164510040883E+17
20! = 2.4329020081766E+18

はう!32ビット整数値の上限を超えてしまった!
いやー64ビットOSだったらこれで動くはずなんだけどなー
まあGMPとか使っての検証はまた今度ということで、とりあえずこのまま進めてみます。

表記上不要な要素とかを減らしてみます。
	//引数
		$count = empty($argv[1]) ? 1 : (int)$argv[1];
	
	//階乗
	$factorial = 1;
	for($loop=1; $loop<=$count; $loop++):
		$factorial = $factorial * $loop;
		print $loop . "! = " . $factorial . "\n";
	endfor;
括弧は半分の10個まで減りました。
これがエラーの発生しない最低限の書き方だと思います。

ではエラーとか気にせずとりあえず動けばいいやレベルの書き方で。
	//引数
		$count = $argv[1] ? $argv[1] : 1;
	
	//階乗
	$factorial = 1;
	for($loop=1; $loop<=$count; $loop++)
		print $loop . "! = " . $factorial = $factorial * $loop . "\n";
引数が無い場合Undefined offsetのNoticeが発生しますがとりあえず動きます。

括弧の数は…6個か、あまり減ってないな。
PHPは使い方が平易って部分を追求してるので、括弧の定義変更みたいな裏技チックな書き方があんまりできないんですよね。
まあ、できるけど私が知らないだけって可能性もありますが。

引数のデフォルト1ってのが厄介で、このせいでどうしても括弧二つでは足りないんですよねえ。
どうしてもデフォルトが0になってしまうので。

ん、ではこういうのはどうだろう。
	$factorial = 1;
	print "1! = 1\n";
	for($loop=2; $loop<=$argv[1]; $loop++)
		print $loop . "! = " . $factorial = $factorial * $loop . "\n";
括弧が4つまで減ったよ!
なに?なんか卑怯?
まあそんな気がしないでもない。


これ以上減らすのはさすがにPHPの言語仕様上無理なんじゃないかなあと思います。
とか言ってさっくり減らされたりしたら恥ずかしいですが。
PR


2011/06/01 22:49 | Comments(0) | TrackBack() | PHP
Dojo1.6.1 dojo djConfig="parseOnLoad:true"
詳解! Dojo Toolkit 1.0(Dijit編) - ウィジェットプログラミングのツボ
http://journal.mycom.co.jp/special/2008/dojo/002.html
> この設定を行っておくことで、後述する「dojoType」属性が付与された要素をDojoが収集し、UIウィジェットとして表示を行ってくれる。

どういうこと?
まずはサンプル。
マイコミジャーナルのサンプルは細切れになっていますが、くっつけて書くとこうなります。
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset =UTF-8">
	<style type="text/css">
		@import "dojo/resources/dojo.css";
		@import "dijit/themes/soria/soria.css";
	</style>
	<script src="../dojo/dojo.js" djConfig="parseOnLoad:true"></script>
	<script type="text/javascript">
		dojo.require("dijit.form.Button");
	</script>
</head>
<body class="soria">
		<div id="dijitFormButton" dojoType="dijit.form.Button"
			label="クリックして!"
			onClick="alert('こんにちは!');">
		</div>
</body>
</html>


2011/05/30 22:40 | Comments(0) | TrackBack() | JavaScript
買ったものリスト 2011/05/29
また散財してしまった。
20110529-zin.png
だが後悔すれど反省はせず。
今後もこの生き方を変える予定はない。


はつきあい2 カザマ アヤミ
☆☆☆☆☆

ギャアアア!絵が上手くなってるぅ!?
衛生兵を!衛生兵を呼べえ!!!!
がふぅ

心臓の弱い方には決して見せてはいけません。
「死因:ドキドキ死」って書かれたくなければ本書の使用には細心の注意をもって当たること。
しかしサラリーマンの回だけはその年齢でその対応はどうなの。
あと「そんな糸で大丈夫か?」「大丈夫だ、問題ない」は反則だろ。


ログ・ホライズン2 キャメロットの騎士たち 橙乃 ままれ
☆☆☆☆

1巻が出たばっかりと思ったらもう2巻が出てた。
前回の指摘はまさに正鵠を射っていたということか。
食の問題から出発して一気に世界の問題まで切り込む問題作。
ちょっとプレイヤーサイドにうまくいきすぎじゃねって気はしますが、一気に話が展開するさまは見ていて気持ちがいいですね。

ところでシルバーソードは何処に行ったん?
あと次巻のサブタイトルが「ゲームの終わり」っていきなり終わりかよ。


ラブやん15 田丸 浩史
☆☆

あれ?なんだこの感情?

…ああ、そうだ。
これがつまらないという感情だ。

なんかこうなんだ、いいかげん退屈というか、そう、偉大でないマンネリ。

20110529-xtremeloveplus.jpg
エクストリームラブプラスどうでしょう九州完結編
☆☆☆

ラブプラス+には、地方のDSステーションと通信するとご当地限定の衣装がもらえる、ご当地ラブプラスという機能があります。
http://www.konami.jp/products/loveplus_plus/info.html
で、予想通りというかなんというか全国巡りしちゃったりする人が現れるわけで。
こもれびのーとの人によるエクストリーム・ラブプラス自転車行脚、九州縦走編です。
なんでいきなり完結編買っちゃったかって九州出身だからってだけなんですがね。

本の内容としては正直特筆すべきことはないんだけど、作者の寧々さんに対する愛だけは痛いほど、否、イタいほど伝わってきました。

しかし北緯13度って桜島はどんだけ南国なんだ。


赤い刀 真

XBOX360春のSTG祭りのトリを務めるのが本作、赤い刀なのですが、正直いくら説明書を読んでもルールがわからん。
ハガネとかカタナってなんなんだよ。
まあいまだにエスカトスが終わらないので、やりこむにしてもその後になりそう。


2011/05/29 20:23 | Comments(0) | TrackBack() | 買ったもの
今週の実績 2011/05/29
2011/05/28の実績

赤い刀 真

弐号機 30
弐号機でクリアした。

256HIT!! 10
256HITを達成した。(赤い刀 または 赤い刀 ノービス のみ)

不意 5
念身中のアタックモード時に被弾してファイターに戻った直後、そのまま被弾した。(赤い刀 または 赤い刀 ノービス のみ)

128HIT!! 5
128HITを達成した。(赤い刀 または 赤い刀 ノービス のみ)

吸引力 5
アイテムを幻聖魂に吸着させた。(赤い刀 または 赤い刀 ノービス のみ)

壱号機 30
壱号機でクリアした。

十干帝王・西園寺芭蕉 50
十干帝王・西園寺芭蕉を撃破した。

十干十人衆・菖蒲&蘭 45
十干十人衆・菖蒲&蘭を撃破した。

重攻撃ヘリ・姫沙羅 35
重攻撃ヘリ・姫沙羅を撃墜した。

十干十人衆・薺 30
十干十人衆・薺を撃破した。(赤い刀 真 または 赤い刀 真 ノービス のみ)

攻撃ヘリ・犬槐 25
攻撃ヘリ・犬槐を撃墜した。(赤い刀 真 または 赤い刀 真 ノービス のみ)

十干十人衆・戦鬼・柊 25
十干十人衆・戦鬼・柊を撃破した。

潜水母艦・粗樫 20
潜水母艦・粗樫を撃墜した。

十干十人衆・石楠花 20
十干十人衆・石楠花を撃破した。

大型戦車・鎧門 15
大型戦車・鎧門を撃破した。

十干十人衆・秋明菊 15
十干十人衆・秋明菊を撃破した。

七十六式軌道重戦車・轟羅 10
七十六式軌道重戦車・轟羅を撃破した。

幻忍 15
念身中にボスを形態変化させた。 または撃破した。

十干十人衆・柊 10
十干十人衆・柊を撃破した。

念身 5
念身した。

巡洋攻撃艦・富士茨 5
巡洋攻撃艦・富士茨を撃墜した。

念身全開 5
祈導ゲージを最大にした。

初出撃 5
ゲームをプレイした。

2011/05/27の実績

エスカトス

ORIGINAL HARDクリア 30
ESCHATOS:ORIGINAL HARDモードをクリアした。

2011/05/26の実績

円卓の生徒

神竜を倒せし者 50
神の座で真の力を発揮したオブリスを倒しました。マスターモードの頂点を極めたあなたこそ、真の円卓の騎士です。

2011/05/25の実績

エスカトス

ADVANCED HARDクリア 30
ESCHATOS:ADVANCED HARDモードをクリアした。

倍率x20達成  30
ESCHATOS:スコア倍率x20を突破した。

2011/05/22の実績

エスカトス

JSS:倍率x50達成 20
JUDGEMENT SILVERSWORD:スコア倍率x50を突破した。


2011/05/29 17:44 | Comments(0) | TrackBack() | 実績
Dojo1.6.1 dojo.date
日時形式をブラウザだけで操作可能なライブラリです。
<html>
<head>
    <script src="../dojo/dojo.js"></script>
</head>
<body>
	<div id="dojoDateDiv"></div>
	
	<script type="text/javascript">
	dojo.addOnLoad(function(){
		//Dateオブジェクト
			var nowDate = new Date();
			var pastDate = new Date(2011, 0, 1, 20, 0, 0);//2011年1月1日
		
		//dojo.date読み込み
			dojo.require("dojo.date");
			//今月の日数を取得
				console.debug(dojo.date.getDaysInMonth(nowDate));
			//今年が閏年かどうか
				console.debug(dojo.date.isLeapYear(nowDate));
			//日時の比較
				//前者が新しければ1、古ければ-1、同じであれば0
				console.debug(dojo.date.compare(nowDate, pastDate, "datetime"));
			//日時の差を求める
				console.debug(dojo.date.difference(pastDate, nowDate, "day"));
			//日時を足す
				console.debug(dojo.date.add(nowDate, "hour", -24));
		
		//dojox.date.posix	
			dojo.require("dojox.date.posix");
			//今年が何週あるか
				console.debug(dojox.date.posix.getIsoWeeksInYear(nowDate));
			//今日が今年の何週目か
				console.debug(dojox.date.posix.getIsoWeekOfYear(nowDate));
			//今週の開始日
				console.debug(dojox.date.posix.getStartOfWeek(nowDate));
			//指定した週の開始日を取得 setという名前だがsetしない
				console.debug(dojox.date.posix.setIsoWeekOfYear(nowDate, 1));
			//日時を文字列として取得
				console.debug(dojox.date.posix.strftime(nowDate, "%Y年%m月%d日 %H時%M分%S秒"));
		
	});
	</script>
</body>
</html>


2011/05/27 23:53 | Comments(0) | TrackBack() | JavaScript
Dojo1.6.1 Dojoを使ってみる
無敵のJavaScriptツール、Dojoツールキット。
http://dojotoolkit.org/
解説記事なんかはいくつか見つかるのですが、そもそもDojoって何なんだという疑問には何故か誰も答えてくれません。
http://journal.mycom.co.jp/special/2007/dojo1/index.html
http://codezine.jp/article/detail/3476
要するにjQueryとかYUILibraryの仲間ってことでいいのか?

まずダウンロード。
http://dojotoolkit.org/download/
uncompressedは中にコメントが書いてある閲覧用、compressedはコメントなどを削除した公開用、Dojo Toolkitは便利なサンプルが山ほど入った開発用のようです。
とりあえずDojo Toolkitをダウンロード、適当に解凍します。
dojo/dojo.jsがDojoの中心となるJavaScriptで、それ以外はサンプルライブラリです。

サンプルといっても用意されているのはサンプルのJavaScriptで、HTMLは無いので作らないといけません。
今回作ってみるのはマイコミジャーナルのこのサンプル。
http://journal.mycom.co.jp/special/2007/dojo1/001.html
クリックすると入力した内容を表示するというよくあるボタンです。
名前を入力:

ソース
	<html>
	<head>
		<script src="./dojo.js"></script>
		<script type="text/javascript">
			dojo.addOnLoad(function(){
				dojo.connect(dojo.byId("button"), "onclick", function() {
					alert("こんにちは、" + dojo.byId("name").value + "さん!");
				});
			});
		</script>
	</head>
	<body>
	  名前を入力:<input type="text" id="name">
	  <input type="button" id="button" value="クリック!">
	</body>
	</html>
マイコミジャーナルでは解説のためあえて長く書いてありますが、まとめるとこんなものです。

ちなみに同じものをjQueryで作成するとこう。
	<html>
	<head>
		<script src="./jquery.js"></script>
		<script type="text/javascript">
			$(document).ready(function(){
				$("#button").click(function () {
					alert("こんにちは、" + $("#name").val() + "さん!");
				});
			});
		</script>
	</head>
	<body>
	  名前を入力:<input type="text" id="name">
	  <input type="button" id="button" value="クリック!">
	</body>
	</html>

あれ?全く一緒?

ハンドラの設定方法が多少違っていて、jQueryではセレクタで選択したオブジェクトにハンドラを連結するのに対し、Dojoではdojo.connectでオブジェクトとハンドラを結びつけるという形になっています。
それ以外はとりあえずほぼ同じです。

今回はほぼ同じですが、Dojoはalert()みたいな汎用メソッドまで捕捉できるみたいです。
http://journal.mycom.co.jp/special/2007/dojo1/005.html
jQueryではbindで特定のイベントを捕捉できますが、汎用メソッドではやり方がわかりませんでした。
http://semooh.jp/jquery/api/events/


2011/05/23 21:29 | Comments(0) | TrackBack() | JavaScript
買ったものリスト 2011/05/22
環境復旧がたいへんだ。
ATOK使いなのですが、インストールCDがどっか行ったため仕方なくMSIMEを使用中で、学習履歴とか変換登録とかが全滅したためもう大変。
他にもデスクトップからのショートカットを持ってきたらドライブレターが変わったから作り直しとかtclockが動かなかったので似たようなものを探したりとか。
あとスタートメニューがやたら使いにくいのはどうにかならんのかのう。


なれる!SE 2週間でわかる?SE入門 夏海 公司
なれる!SE2 基礎から学ぶ?運用構築
なれる!SE3 失敗しない?提案活動
なれる!SE4 誰でもできる?プロジェクト管理
☆☆☆☆☆

1巻読んで面白かったので一気買い。
2巻を読んだまさに当日巫女SE事件が起こったのだがこれがまさかのシンクロニシティか!
#特に強調するほどでもないが個人的にはn_ayase氏寄り

登場人物が福岡の地名ってどこのエクセルサーガだよ。
まあめいのはまは姪浜って書くから正確には同じじゃないですが。

で、タイトルについてなんですがそれってSEじゃなくてNEじゃね?
と思ったら後書きに書いてあった。
まあたしかに「なれる!NE」じゃ一般人にはなんだかわからんよな。

ITブラック企業の日常がわりと赤裸々に描かれ、知ってる人ならつい生暖かい目で見守りたくなること間違いなし。
個々の部品としての登場人物や能力は確かにフィクションですが、総合的な世界観としてはあくまで現実の延長線です。
変にファンタジーな世界になっているわけでもなく、業界人が読むにもある程度は耐える出来だと思います。
もちろんフィクションである以上最後はうまく解決につながるようになっていますが。
現実にはあんなにうまくいくはずもなく、デスマの挙句の空中分解がデフォです。

どうしてもひとつだけツッコミを上げるならば、ド素人が二日でCiscoルータの設定とか無理。絶対無理。断言するが無理。
しかも実機触らないで机上だけでとか余計無理。
CCNP所有の私が言うのだから間違いない。

あと本書を読んでついうっかりこの業界に憧れてしまった、血迷ってしまった人に向けて言っておくと、IT企業に美女がいるとかあり得ません。
ましてや美少女がいるなんて、寝ている間にバグを直してくれる妖精さん以上に遭遇確率低いですから。
あんな上司がいるんだったら私だって寝食忘れて高みを目指します。
そこんとこお間違えなく。


ログ・ホライズン1 異世界のはじまり 橙乃 ままれ
☆☆☆

ゲームをプレイしていたら突然その中に取り込まれた、能力値はそのまま、って何処のギャスパルクの復活だよ。
というわけで信念上高評価をするわけにはいかないのですが、なかなか読みやすくてテンポの良い作品です。
加筆修正されてこそいますが、作品自体は元々Web公開されていて今でも読めるので特に買わなくてもいいといえばいいんですがね。

ダンジョントライアル、SAO、ギャスパルクの復活などとの最大の違いとは「目標がない」ということでしょう。
このせいで「クリアしたら現実に戻れる」といったプレイを続けるモチベーションがなくなってしまうため、ゲームに消極的になってしまうだろうからメーカーの思惑的に失敗と言わざるを得ない。
あと死が無いというところが逆に閉塞感を高めているし色々危険な気がする。

しかしまあ、この世界が元気がない最大の原因は料理のせいだと思う。


2011/05/22 19:16 | Comments(0) | TrackBack() | 買ったもの
今週の実績 2011/05/22
2011/05/16の実績

NIN2-JUMP

蝶の様に舞い蜂の様に刺す 30
スコアアタックモードで3分以上生き残りました。

フジヤマ 10
アドベンチャーモードのワールド1をクリアしました。

2011/05/15の実績

Doritos Crash Course

Hopscotch 20
Bounced from trampoline to trampoline 12 times in a row

Frequent Flyer 15
Flew from fan to fan 20 times in a row

That's Gotta Hurt 10
Got smashed by 3 hammers in a row

Tarzan 10
Swung from rope to rope 10 times in a row

トラブル☆ウィッチーズ ねぉ!

オマエ遊びまくりよのう… 15
ARRANGE 360 MODE - SINGLE PLAYの3種類の難易度モード、ラクラク/ドキドキ/ハラハラをクリアする。(コンティニューOK)


2011/05/22 18:04 | Comments(0) | TrackBack() | 実績
PCを新調しました
昨夜唐突にPCが死んだ。
マザボが逝ったらしくHDDを認識すらしてくれない。

しかたないので新しいのを買ってきた。
ドスパラのショップブランドの適当なやつ。
OSは手元にXPがあるので入れなくてもいいんだけど 動作保障を7でしかやってないと言われたのでそのまま入れてもらった。
とりあえず今のところ超使いにくい。

死んだPCからHDDを抜き出し、データのサルベージを行った。
やはりHDD自体は問題なく動作しているようだ。

しかし、プロバイダのアカウントとか何も設定してないのに勝手にインターネットにつながってるんだがどーなってんのこれ。


↓起動しなくなったときの画面
20110522-pc.jpg


2011/05/21 22:05 | Comments(0) | TrackBack() | その他
spl_autoload_register()で__autoload()
前回__autoload()を紹介しましたが、__autoload()はひとつしか登録できません。
spl_autoload_register()を使うとオートローディングの実装を複数登録できます。
<?php
	//オートロード実装その1
	function autoload1($className){
		require_once('Zend/Loader.php');
		try{
			@Zend_Loader::loadClass($className);
		}catch(Exception $e){}
	}
	
	//オートロード実装その2
	function autoload2($className){
		class AutoLoad2{}
	}
	
	//spl_autoload_register
	spl_autoload_register('autoload1');
	spl_autoload_register('autoload2');
	
	//インクルードしていないクラスをインスタンス化
	new Zend_Filter_Word_DashToSeparator('/');
	
	//autoload2内で定義されているクラスをインスタンス化
	new AutoLoad2();
	
	//現在登録されているオートロード実装を確認
	spl_autoload_functions();
オートロードを駆使すれば毎回インクルードを行わずにすむようにはなりますが、駆使するほどたくさん登録すると却ってわかりにくくなりそうです。
通常はPearライブラリだけ入れておくくらいでいいのではないでしょうか。


2011/05/16 21:19 | Comments(0) | TrackBack() | PHP

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