忍者ブログ
[PR]
×

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



2024/05/03 13:28 |
買ったものリスト 2014/08/10
久々にMinecraftの自作MODを更新。



ロールプレイングゲームサイド Vol.1
☆☆☆☆☆

ジャンル別ゲームサイドになってから頑なに避けられていたRPGゲームサイドがついに発刊。
これまでCRPGの元祖と言われていたWizardryやUltima。
しかし本当の起源はそれらよりさらに古く、なんとTRPGのD&D発売と同年の1974年まで遡るという。
その名もMonster Maze。
しかし当時の厳しいストレージ事情により、本作は現存していないということらしい。
現存する最古のCRPGは1975年のpedit5
この時点で既にWizardryよりも6年早い。
さらに世界最古のリアルタイムRPGであるDND(A similar game also named DNDのほう)が1976年、世界初のオンラインRPG!であるOublietteが1977年と、遙か未来に初めて実現されたと思われていた要素は、CRPG黎明期において既に存在していたのである。

そのあたりの詳しい歴史や、一部ゲームの制作者インタビューなどが掲載されています。
非常に貴重な資料なので、少しでも関心があるようであれば是非とも購入すべき。


アドベンチャーゲームサイド Vol2
シューティングゲームサイド Vol9
☆☆☆☆

RPGゲームサイドを見た後では資料性が霞んでしまうのは仕方ない。
しかしまあこの手の本は他にはほとんど無いのでとりあえず買いましょう。


タケヲちゃん物怪録3
タケヲちゃん物怪録6
☆☆☆

うーん、なんか話が進まなくなってきたような。
西洋妖怪どうしたんだよ。
と思ったら何故か5巻を飛ばしていた。
PR


2014/08/10 20:20 | Comments(0) | 買ったもの
PHPのストリームフィルタでCSV読み込み
利用できるフィルタのリスト』という謎の項目があります。
filter_input()とかのFilterとはまた別の、PHPにデフォルトで用意されているフィルタです。

何ができるかというと、入出力ストリームに対して操作が可能です。
ストリームとはfopen()とかでオープンされるリソースで、というか他に何か使えるものあるんですかね?
<?php
	
	$text = 'abcdefg';
	
	// ストリームフィルタ
	$crypt   = 'mcrypt.'.MCRYPT_3DES;
	$decrypt = 'mdecrypt.'.MCRYPT_3DES;
	$params = array('iv'=>'hoge', 'key'=>'fuga');
	
	// 書き込み
	$fp = fopen('foo.txt', 'w');
	// 暗号化ストリームフィルタを適用
	stream_filter_append($fp, $crypt, STREAM_FILTER_WRITE, $params);
	fwrite($fp, $text);
	fclose($fp);
	
	// 読み出し
	$fp = fopen('foo.txt', 'rb');
	// 復号ストリームフィルタを適用
	stream_filter_append($fp, $decrypt, STREAM_FILTER_READ, $params);
	$text = fread($fp, 10000);
	fclose($fp);
	
	var_dump($text); // abcdefg
foo.txtは人間には読めない形に暗号化されていますが、fread()するだけで透過的に復号されます。
あとはラッパークラスなりで囲えば簡単に暗号化ファイル操作クラスができあがります。

デフォルトのフィルタには、str_rot13()みたいな絶対使わないのがあるわりに有用なものがあまりありません。
ストリームフィルタは自作可能なので、役に立ちそうなものを自作してみます。
<?php
	/*
	* SJISのCSVをUTF-8で取り込むフィルタ
	*/
	class fgetcsv_filter extends php_user_filter{
		/**
		* @Override
		* @param resource 入力ストリーム
		* @param resource 出力ストリーム
		* @param int 変更したデータ長を参照渡しで返す
		* @param boolean フィルタチェインの最後の処理であればtrue
		* @return int PSFS_PASS_ON / PSFS_FEED_ME / PSFS_ERR_FATAL
		*/
		public function filter($in, $out, &$consumed, $closing){
			$locale = setlocale(LC_ALL, 0);
			setlocale(LC_ALL,'ja_JP.UTF-8');
			while ($bucket = stream_bucket_make_writeable($in)) {
				$bucket->data = mb_convert_encoding($bucket->data, 'UTF-8', 'SJIS-win');
				$consumed += $bucket->datalen;
				stream_bucket_append($out, $bucket);
			}
			setlocale(LC_ALL, $locale);
			return PSFS_PASS_ON;
		}
	}
	// fgetcsv_filterをfgetcsv_regという名前で登録
	stream_filter_register('fgetcsv_reg', 'fgetcsv_filter');
	
	$fp = fopen('hoge.csv', 'r');
	// $fpにfgetcsv_regフィルタを適用
	stream_filter_append($fp, 'fgetcsv_reg');
	
	// 以後普通に読める
	$data = fgetcsv($fp);
	var_dump($data);

hoge.csv
1ソ,Ⅱ表,③能,"ⅳ
"
CSVの文字コードはSJISです。
結果。
  array(4) {
    [0]=>
    string(4) "1ソ"
    [1]=>
    string(6) "Ⅱ表"
    [2]=>
    string(6) "③能"
    [3]=>
    string(5) "ⅳ
"
  }
文字化けせずに読み込み成功しました。
めでたし。

まあ正直わかりにくいので、あえてストリームフィルタを使わなくてもfgetcsv_reg()でいいじゃないという気もしますが。



2014/08/08 22:48 | Comments(0) | PHP
骸骨楽団とリリア、パーフェクト
苦節8ヶ月、ついに骸骨楽団とリリアのボタントコトンでパーフェクトを達成!

これでボタントコトンの全曲パーフェクトになりました。
タッチは全然プレイしてなかったりするのですが、通勤中にタッチは難易度高すぎるので仕方ないね。

途中2ヶ月ほどシアトリズムに浮気していた時期があったので、実質半年くらいかかりました。
いやあ正直一本のソフトをここまで飽きずにプレイし続けられるとは驚き。
というかまだ全然飽きてない。

タッチトコトン達成率。
割と微妙な腕前だということがよくわかる。

達成率曲名
99.25 ロミオとシンデレラ
98.97 エレクトリック・ラブ
98.96 深海少女
98.96 インタビュア
98.89 shake it!
98.87 アマツキツネ
98.85 クローバークラブ
98.83 えれくとりっく・えんじぇぅ
98.76 SING&SMILE
98.70 ファインダー
98.70 メランコリック
98.66 アゲアゲアゲイン
98.66 悪ノ娘
98.54 私の時間
98.52 マトリョシカ
98.51 ハロープラネット
98.51 千本桜
98.49 テレカクシ思春期
98.49 ココロ
98.41 逆さまレインボー
98.40 ゆめゆめ
98.35 1/6 out of the gravity
98.32 ドレミファロンド
98.25 ピアノガール
98.23 スイートマジック
98.09 いーあるふぁんくらぶ
98.09 glow
97.97 サンドリヨン
97.96 ハッピーシンセサイザ
97.95 どうぶつ占い
97.95 ワールドイズマイン
97.95 子猫のパヤパヤ
97.74 アドレサンス
97.67 君の体温
97.65 on the rocks
97.64 スノーマン
97.58 NoLogic
97.56 トリコロールエアライン
97.55 ハロ/ハワユ
97.50 LOL
97.40 妄想スケッチ
97.22 PIANO FORTE SCANDAL
97.20 悪ノ召使
97.19 1925
97.17 ありふれたせかいせいふく
95.98 インビシブル
95.47 骸骨楽団とリリア


初音ミク Project mirai 2 プレイ感想
初音ミク Project mirai 2 初回プレイ感想


2014/08/04 21:01 | Comments(0) | ゲーム
買ったものリスト 2014/08/03

東プレ Realforce108US 静電容量無接点方式 ALL30g ホワイト USB SJ38D0

10年以上前から使っていたRealforce106が、最近になってついに不調になりました。
スペースが真ん中を押さないと押しにくくて引っかかるような感じになってしまったのです。
さすがに長く使い続けていたせいでしょうか。
というか10年使ってそれくらいしか不具合が出ないというのがすごい。
そんなわけでしばらく前から代わりを探していたのですが、何故か何処に行っても売り切れで、諦めかけていたところツクモ電機でついに在庫を確認。
ようやくゲットしました。
いやあ快適快適。
なんかボタン押したときの音が106より大きいような気がするが気のせいだろうか。




隣人を妹せよ1 森乃 葉りふ
隣人を妹せよ2
☆☆☆

隣に引っ越してきた子が自分をお兄ちゃんと呼ぶとかそんな展開あってたまるか!!!!
くそうらやま!!
まあ実によくある日常ハーレム系ですが、男が去勢されていないタイプなので少しだけ展開が楽しみではあります。
でも姉はいらなかった。


だめっこどうぶつ6 桑田 乃梨子
☆☆☆

なんかすごい久しぶりに見たような気がする。
たぶん途中巻を飛ばしてるんだろうけど飛ばしても大して変わらないからまあいいか。
うる野の駄目っぷりは相変わらず、というかここまで酷かったっけ。
ちーちゃん出番ほとんど無いな。

パチュリーのズボラ飯 特盛 168
https://16815.booth.pm/items/13605
☆☆☆☆

パチュリーがズボラにごはんを食べる。
ってそういえば私元ネタのほう見たことなかった。
だからどの程度再現しているのかはわかりません。
が、本作単体ではそれなりに面白かった。
あと食べてる顔がエロい。
何故か魔理沙が香霖にぞっこん。
なんかよくわからないが楽しそうでよかった。



2014/08/03 20:58 | Comments(0) | 買ったもの
POH Lite 20万人月プロジェクト
https://paiza.jp/poh/kirishima

> ※ 実際のプロジェクトではこの様には行きませんので、人員を増やす場合は慎重に検討する事をお勧めいたします。

1万円の下請けってどんなところなんだろうか。
まあ典型的なナップザック問題なので、さっくり解いてしまいましょう。
<?php
	// 入力をパース
	$input = file('php://stdin', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
		// 1行目は必要人数
		$ninzuu = (int)$input[0];
		// 2行目は会社数 使わない
		// $kaishasuu = (int)$input[1];
		// 3行目以降は人数+価格 最大50社しかない
		unset($input[0]);unset($input[1]);
		$list = array_map(function($a){
			// 0=>人数,1=>価格
			$t=explode(' ', $a, 2);
			return [(int)$t[0],(int)$t[1]];
		}, $input);
	
	// 動的計画法
	$data = [0=>0];
	foreach($list as $key1=>$val1){
		// 1社で越えている場合は0にだけ足せばいい
		if($val1[0]>=$ninzuu){
			if(isset($data[$val1[0]])){
				$data[$val1[0]] = min($data[$val1[0]], $val1[1]);
			}else{
				$data[$val1[0]] = $val1[1];
			}
			continue;
		}
		
		foreach($data as $key2=>$val2){
			// 既に人数を越えている場合は計算不要
			if($key2 >= $ninzuu){ continue; }
			
			// 対象人数の金額を登録
			$num = $key2+$val1[0];
			if(isset($data[$num])){
				// 既に値がある場合は安い方
				$data[$num] = min($data[$num], $val2+$val1[1]);
			}else{
				$data[$num] = $val2+$val1[1];
			}
		}
	}
	
	// 最低人数越えのキーのうち、最低金額のものを選択
	$minTotal = 250000000;
	foreach($data as $key=>$val){
		if($key >= $ninzuu && $val < $minTotal ){
			$minTotal = $val;
		}
	}
	print($minTotal . PHP_EOL);
普通に動的計画法を適用しただけです。
実に簡単ですね。
人数をキーにしたせいで動的計画法というより総当たりになってしまった気もしますがまあいいや。
さっそく実行。

http://paiza.jp/poh/kirishima/result/bebdc876df9e6cd24b4ee916a06eeea3

Test case 1 通過 実行時間: 0.01 秒
Test case 2 通過 実行時間: 0.01 秒
Test case 3 通過 実行時間: 0.01 秒
Test case 4 通過 実行時間: 0.01 秒
Test case 5 通過 実行時間: 0.01 秒
Test case 6 通過 実行時間: 0.27 秒
Test case 7 通過 実行時間: 3.33 秒

あっさり合格しました。
めでたし。

まあ、ここに辿り着くまでに実は2回も失敗しているのですが。


http://paiza.jp/poh/kirishima/result/4f809703f962fdb735dd00dd83943b22

最初、何も考えずに『単価の安い順に足していく』という頭の悪すぎる実装をやってしまいテスト5で失敗。
10人でいいプロジェクトに単価の安い100人を送り込まれてもねえ。


http://paiza.jp/poh/kirishima/result/a5ec246afdb9c754e44f003bae62ab97

まじめに考えてきちんと動的計画法を適用したのに何故かテスト7だけ失敗。
その日は何処にも間違う要素無いだろうがーなんでだーと延々悩んで結局答えが出なかったのですが、翌日見直してみたら
    $minTotal = 5000000;
とか書いてあって即死。
いやあこれは酷い。

さてこのアルゴリズム、テスト7では3秒以上かかっていますが、PHPで既に0.01秒というおかしな値が達成されています。
いったい果たしてどんな書き方がなされているのでしょうか。


2014/08/01 23:37 | Comments(0) | PHP
DateTime::getTimestamp()すると日付が変わる件
<?php
	$date = new DateTime('2014/01/01 00:00:00', new DateTimeZone('Asia/Tokyo'));
	$date->modify('first day of -1 second');
	
	var_dump($date->format('Y-m-d H:i:s')); // 2013-12-31 23:59:59
	var_dump($date->getTimestamp()); // 1385909999 → 2013-12-01 23:59:59
	var_dump($date->format('Y-m-d H:i:s')); // 2013-12-01 23:59:59
何故か日付が変わっています。
なんだこれ。

更に深刻なことにはDateTimeImmutableでも発生します。
<?php
	$date = new DateTimeImmutable('2014/01/01 00:00:00');
	$date2 = $date->modify('first day of -1 second');
	var_dump($date2->format('Y-m-d H:i:s')); // 2013-12-31 23:59:59
	var_dump($date2->getTimestamp()); // 1385909999 → 2013-12-01 23:59:59
	var_dump($date2->format('Y-m-d H:i:s')); // 2013-12-01 23:59:59
あかんこれ。

ポイントは'first day of -1 second'と複数の変更を一気に指定するところです。
    $date->modify('first day of');
    $date->modify('-1 second');
と分けて記述すると何故か発生しません。

また'-1 minute'や'-1 hour'では発生しますが'-1 day'や'+1 second'は正常に計算されます。
'first Saturday of next month -1 second'や'Monday next week -1 second'などでも発生しません。
'first day'や'last day'と一日以下のマイナス計算が入っているとバグる模様。

カレンダーを作ったときに見つけたのですが、意味がわからなかったので放置していたところ、先日バグレポートが上がっていました。
せっかくだから報告でもしてみればよかったかな。

このバグは、PHP5.6RC2の時点ではまだ修正されていません。
DateTime関連は何気にバグやバグだかなんだかわからない挙動があったりするので、使うときは気をつけないといけませんね。



2014/07/28 21:33 | Comments(0) | PHP
買ったものリスト 2014/07/27

放課後アトリエといろ1 華々 つぼみ
放課後アトリエといろ2
放課後アトリエといろ3
放課後アトリエといろ4
☆☆☆☆☆




野火 大岡 昇平
☆☆☆

あれれ、解説に「しなかったのは何故か」とか書いてあるんだが能動的ではないとはいえしてるよな。
どういうことだ。
極限状態における人間のわがままさ、自分本位さを描き出す本作。
神だ信仰だとか言っても食料にはかなわなかったよ、そんな話。
尊厳とかなんとか言っても所詮肉だし。
まあ私も完全に戦後世代で餓死戦死に近い状態など全く経験したことがないから、本作の描写が本当にそんなものなのかはわからないですが。

んで結局野火は何だったんだ。爆撃の目印?


2014/07/27 22:07 | Comments(0) | 買ったもの
Smartyで配列のキーにハイフンが使えない理由
【Smarty】配列のキーにハイフンを使ったらアウトらしい
http://qiita.com/seihowlow24/items/713e12c459fa47df7eb1

こういう記事がありました。
Smartyでは連想配列のキーに-を使用できないという問題です。

では何故使えないのかというのを少し調べてみたので記載。
使用したバージョンはSmarty3.1.19。

まあ言ってしまうとマイナスと区別が付かないからです。

index.php
<?php
	$hoge = [
		'a'=>10,
		'a-1'=>5,
	];
	$smarty->assign('hoge', $hoge);
	$smarty->display('index.html');

index.html
	{$hoge.a-1}

{$hoge.a-1}は$hoge['a-1']ではなく$hoge['a']-1と解釈され、結果は「9」になります。

実際コンパイル後のファイルは
<?php echo $_smarty_tpl->tpl_vars['hoge']->value['a']-1;?>
となっています。
これはSmartyが演算をサポートするかぎりどうしようもないですね。
http://www.smarty.net/docs/ja/language.math.tpl

PHPの配列キーには他の演算子や記号や日本語なども大概入れられますが、Smartyテンプレートでは大半が使用できません。
$など使っただけでFatal errorが発生します。


index.php
<?php
	$hoge = [ 'some-key'=>'val' ];
	$smarty->assign('hoge', $hoge);
	$smarty->display('index.html');

index.html
	{$hoge.some-key}
コンパイル後。
<?php echo $_smarty_tpl->tpl_vars['hoge']->value['some']-'key';?>

$_smarty_tpl->tpl_vars['hoge']->value['some']は未定義なのでNULL - 'key'というよくわからない演算となり、結果は「0」となります。
当然Undefined indexのNoticeも発生します。

おっと、参考サイトと何故か結果が違ってますね。
参考サイトは『{$hoge['some-key']}と書けない』とか言ってるので、だいぶ古いバージョンだと思われます。
最近のバージョンでは{$hoge['some-key']}と問題なく書くことが可能です。
こちらであれば記号や日本語などの配列キーもそのまま使えるので、常にこちらの記法で書くとか決めてしまってもいいかもしれません。


ちなみに構文解析の実体はSMARTY_SYSPLUGINS_DIR.smarty_internal_templatelexer.phpあたりにありますが、

preg_match('/\G(\{\})|\G(\{\*([\S\s]*?)\*\})|\G(\{\s*strip\s*\})|\G(\{\s*\/strip\s*\})|\G(\{\s*literal\s*\})|\G(\{\s*(if|elseif|else if|while)\s+)|\G(\{\s*for\s+)|\G(\{\s*foreach(?![^\s]))|\G(\{\s*setfilter\s+)|\G(\{\s*\/)|\G(\{\s*)|\G(<\?(?:php\w+|=|[a-zA-Z]+)?)|\G(\?>)|\G(\s*\})|\G(<%)|\G(%>)|\G([\S\s])/iS', $contents);

うん、これ読むの無理。
これとかSmarty_Internal_Templateparserはいったい何なのか誰か教えて下さい。


2014/07/25 22:49 | Comments(0) | PHP
PHP5.6.0 「第23回オフラインリアルタイムどう書くの問題」をPHPで解く
http://qiita.com/Nabetani/items/7ba11167ea28c929fcf2
http://nabetani.sakura.ne.jp/hena/ord23snakemoinc/
くねくね増加列

5*5のマス目から単調増加列を全て取り出した場合、最も長いものを探す。
<?php
	class SNAKEMOINC{
		/**
		* くねくね増加列
		* @param String 「01224/82925/69076/32298/21065」みたいな文字列
		* @return int 「6」みたいな数値
		*/
		public function get($input){
			$input = str_replace('/', '', $input);
			
			$tmp=[];
			for($i=0;$i<strlen($input);$i++){
				// 各升スタートでの最大長を取得
				$tmp[] = $this->getMax($input, $i, 1);
			}
			// 一番長かった枝
			return max($tmp);
		}
		
		/**
		* 最長ルートを取得
		* @param  String input
		* @param  int 開始位置
		* @param  int 現在のルート長
		* @return int 最大ルート長
		*/
		private function getMax($input, $pos, $loop){
			$tmp=[$loop];
			foreach($this->getLargeAdjacent($input, $pos) as $val){
				$tmp[] = $this->getMax($input, $val, $loop+1);
			}
			return max($tmp);
		}
		
		/**
		* 隣接4箇所のうち、自分より大きいところがあれば取得
		* @param  String input
		* @param  int 現在位置
		* @return []  隣接位置
		*/
		private function getLargeAdjacent($input, $pos){
			$ret = [];
			foreach($this->getAdjacent($pos) as $val){
				if($input[$pos] < $input[$val]){
					$ret[] = $val;
				}
			}
			return $ret;
		}
		
		/**
		* 隣接4箇所の位置を取得
		* @param  int 現在位置
		* @return []  隣接位置
		*/
		private function getAdjacent($pos){
			if($pos>=5){ $ret[] = $pos-5; } // 上
			if($pos<20){ $ret[] = $pos+5; } // 下
			if($pos%5!==0){ $ret[] = $pos-1; } // 左
			if($pos%5!==4){ $ret[] = $pos+1; } // 右
			return $ret;
		}
		
	}
	
	// テスト
	$test = [
		['01224/82925/69076/32298/21065', '6'],
		/* 省略 */
	];

	$snakemoinc = new SNAKEMOINC();
	foreach($test as $key=>$data){
		$answer = $snakemoinc->get($data[0]);
		if($answer !== (int)$data[1]){
			print('えらー');
		}
	}

極めてふつーに、伸ばせるところに手を伸ばしているだけです。
メモ化すら行っていないという手抜きっぷり。
まあ計算量が問題になるサイズではないからいいでしょう。
かかった時間は50分くらい。

ところで概ね毎回のことなんだが、他人の回答例を見てみても全く理解できぬ。


2014/07/21 22:53 | Comments(0) | PHP
買ったものリスト 2014/07/20
遺産相続したので高級寿司を食べてみた かるふぉるにあろ~る
☆☆☆☆☆
http://blog.livedoor.jp/geek/archives/51447227.html
https://twitter.com/cal_roll

手取り17万の普通のOLが祖母の遺産を相続した。
どう使おうか考えた結果、祖母が好きだった寿司を、せっかくなので行ったことのない高級寿司を食べてみようという謎の発想に至ったみたい。
普段は普通のOLなので、遺産は寿司以外には一切使用しないというある意味ストイックな方です。

実際行ってみた12店舗の感想が書いてあるわけですが、基準が普通のOLなのでとにかく美味しかった話しか書いてない。
くだらない蘊蓄など全くなく、とにかく食べて幸せだった、そんな気持ちが溢れてきます。
うますぎサテライトってなんだよ。
下手なグルメ本よりよっぽど行ってみたくなる内容なのですが、「すべてが神です。新世界の神です。コストパフォーマンスも神です。」とべた褒めである『すし浅尾』のコスパはというと、大人二人で48600円。

……この世には同じ世界線に存在していながら、絶対に足を踏み入れることのない場所が存在するということがよくわかりました。
一生に一度くらいは行ってみたいけど、そんな機会あるやらどうやら。

最後に使った金額がまとめられていたのですが、なんと2ヶ月で75万。
一年持たないぞ遺産。

私的標本 捕まえて食べる話
☆☆☆☆
http://www.hyouhon.com/
http://yaplog.jp/hyouhon/archive/1983

こちらはアウトドアで自分で魚を捕って食う話。
まずは東京のそこらの川で普通にウナギが捕れるんだっていうことにびっくりし、ウナギ以外にも豊富な海の幸があり、素人でもそれを手にすることができるのだということに二度びっくり。
まあ中には川とか日本海とかの話もありますが、わりと来週試してみようとかで通用しそうなレベルだとは思ってなかった。

同人誌なのに100ページ以上、カラーページも豊富で読み応えのある作品でした。
一部はデイリーポータルZでも読めるしサイト上の方が写真も豊富だったりするのですが、まあそこは本という形が大事ということで。
http://portal.nifty.com/2009/10/13/b/
http://portal.nifty.com/2009/05/19/b/


ヒャッハーだよ♪ ふなっしー まえだくん
☆☆☆

ゆるキャラ自体には特に興味はないんですが、このコミックが非常に破天荒だということはどこかで聞いていたので試しに読んでみた。
本気でぶっ飛んでた。
第一話からして、梨を切ろうとしてうっかり自分の手を切っちゃったとかそんなかんじ。
コロコロなので完全に子供向けギャグ漫画です。
頭を空っぽにして読むとよいでしょう。
なんかたまにツボに入る。


暗殺教室9 松井 優征
暗殺教室10
☆☆☆☆

ぶっ飛んだ設定ながら、現代社会に対する何らかの何かをこう何かしてるような気がしないでもない本作。
普通ならそろそろマンネリが見えてきそうな頃ですが、全く飽きさせずに魅せてくれます。
ただ本職にも勝たせてしまうのはさすがにどうなんだろうか。
それにしても10巻は金かかってそうだ。


2014/07/20 21:17 | Comments(0) | 買ったもの

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