« 2007年05月 | メイン | 2007年07月 »

2007年06月 アーカイブ

2007年06月03日

あっ、上手い

マウスで動く的を狙って撃つ系のFlashゲームをやってたのですが
誤って画面外をクリックしたときに、GoogleAdsをクリックしました。
なるほどなぁ

2007年06月05日

PHPで 配列 +=

PHP4で、配列 += 配列 という文法を知ったので試す。
連想配列のバヤイ
$hash = array(
    "a" => 1,
    "b" => 2,
);
$hash += array(
    "c" => 3,
);
var_dump($hash); // → "a"~"c"まで格納されている
配列のバヤイ
 $arr = array(1, 2);
 $arr += array(3);
 var_dump($arr); // → おや? [0] ~ [1] までしか格納されていない
じゃあ、こうしよう
 $arr = array(1, 2);
 $arr += array("", "", 3);
 var_dump($arr); // → [0] = 1, [1] = 2, [2] = 3
OKKK

末尾に追加というよりは、無いキーの値だけ追加するんスね。
prototype.js の Object.extend みたいな感じか。
調子に乗って
 class Foo {
     var $a = 1;
     var $b = 2;
 }
 $foo = new Foo;
 
 class Bar {
     var $c = 3;
 }
 $bar = new Bar;
 
 $foo += $bar;
 var_dump($foo); // → Fatalエラー
んだよもおお

2007年06月06日

たのみすぎた俺が悪い

弁当屋にいきました。
店員が初心者のようで、オーダーは間違えまくるし、手順もよくありません。
ある人が弁当+2品の注文をしました。
弁当が完成してその人が受け取るときに、店員が渡す品を間違えました。
間違えてると言われて、また渡したものも間違ってました。
あー畜生、わしがイライラする。
やっと、無事オーダー通りの弁当を受け取ることができたようです。
店員のモタモタっぷりに、若干店内が微妙な雰囲気の中
「たのみすぎた俺が悪いな」
と、その人はいいました。
この21世紀に・・・あんた、なんていい奴なんだ。

機会があったら、わしも使おう

2007年06月07日

JSでStringオブジェクトにプロパティを追加できない?

javascriptで
文字列リテラルを使って宣言したStringオブジェクトにプロパティを追加しようと思いました。
var str = "oops";
str._a = 12345; // _aプロパティを追加
で、参照する
alert(str._a); // ---> undefined
・・・おやー?
ちなみに、この宣言方法だと可能です
var str = new String("sorry");
str._a = 1;
alert(str);    // ---> "sorry"
alert(str._a); // ---> 1
なぜだろう?
「何故駄目なのか」「できる方法があるのか」等など、正直全くわかりません。
誰か「ここ読めばいいよ」だけでも教えていただけると、飛び跳ねて喜びます。

連想配列のキーにStringオブジェクトそのものを使えるのか

Rubyの本を読んでいて
「ハッシュのキーに、オブジェクトを使うことができます」と書いてあったので
javascriptでできるのかなとやってみた。
var foo = new String("foo");
var bar = new String("bar");
 
foo._toUpper = function(){return "FOO"};
bar._toUpper = function(){return "BAR"};
 
var hash = {};
hash[foo] = 1;
hash[bar] = 2;
 
for (var i in hash) {
    alert(i._toUpper()); // ---> "_toUpper is not a function" のエラー
};
できなかった。
javascriptは基本文法に近づく程特殊ルールが多くなってきて、それが少々気持ち悪いような。
それとも、それが特殊に見えちゃうのは、自分の理解不足なのかなぁ。
後、Ruby本を読んでると、「javascriptとかPHPでどうなんだろ」という確認点が沢山出てきて、面白いです。
「言語は色々やった方がいいよ」ってのが、段々と身にしみてきたような気がします。
(程度や重要性の検討は必要だと思いますが)

2007年06月08日

「ネギま!」が意外に面白い件について

「魔法先生ネギま!」が7巻まで家に転がっていたので
特に読む気も無くペラペラとページをめくっていたら
意外に(本当に意外に)、なかなか良い点のあるマンガだった。
ビックリしたのでブログに書く。
特にどんなところが良いかというと、
お話のディティールひとつひとつが異様にロジカルであるということ。

漫画内でも突っ込まれないような些細な点であっても
話の筋、キャラクターの設定、キャラクター間のパワーバランスを考えて描いてある。
例えば、ツッコミ役のキャラがいる。
シティハンターの香のような位置付けのカワイイ・・・まぁ全員カワイイのだけど・・・
少女がいるのだけど
こいつはどうやら、魔力を無効化する能力があるらしい。

「ネギま!」も、人の尊厳とか世界の平和の為に戦う漫画のようなんだけど
上記の特性はそこで明らかになったもの、と、ここまでは良くある話。

んで、そのツッコミキャラは誰にでもツッコむ
普段エラソーにしている(んで、勿論こいつもカワイイ)大魔法使いにもツッコむ。
ハリセン(戦いの武器でもある)で頭をはたいてツッコむ。

大魔法使いはいつも魔法でバリアを張っているという設定なので
他の人は頭をはたいたり出来ないのだが、
そのツッコミキャラは「魔力を無効化できる」ので、頭をパコんと叩いてツッコめる。

なるほどなぁ。
他も半分眠りながら読んだだけでもこれだけあった
端折って書くので、訳わからない方はごめんなさい
  • 老体の理事長が、長時間5秒に1回判子をつき続けることができたのは、理事長も常人ではないため
  • エヴァに「単なる魔力タンク」と形容されたネギとこのかのイメージの絵で、このかの方が魔力の量が若干多く描かれている(前に「このかの方が才能がある」という伏線があった)。
  • くーふぇが「自分は楓や真名より弱い」という強さの上下を表す台詞をハッキリ言っている。(直前の戦いでの、漫画上の強さの表現とピッタリ一致している)
  • 楓の修行中にネギが落ちてくる話で、ニンジャなのにキャンピング用テントを使って修行しているということがわかる風景をわざわざ入れている。(明示的にテントを描く必要性が無い流れで、かつ、設定面への気遣いが無いとうやむやにしがちな部分だと思う)
著者近影に「全てのキャラクターに、1巻から最後まで行動の一貫性を持たせたい」と書いているけど、そのマニフェストは伊達じゃないな。
そういった細やかな部分への理屈っぽさが、一応技術者の自分には心地良かった。

今度読んでみようっと。

2007年06月09日

「ネギま!」がやっぱり面白かった件について

8巻~18巻まで読みました。
熱血する少年漫画として、少なくとも今連載中の漫画の中ではピカイチだと思いました。
自分の論文能力は低いので、総合的な感想は控えますが、
いわゆる「モエる漫画」でもなければ、戦ってるだけの漫画でもありませんでした。
熱血少年漫画が読める人なら、オススメします。
作者本人も興味深い人で、
元プログラマで、背景を描くのに3Dモデリングツールを使ってたりしているようです。
なんか理屈っぽいと思った。

また、バリバリの「プロ」漫画家らしいので
「今後の作品も含めて最終的に一番お客が付く内容を書いたら、こういう風になったんだ」
という方針から出来た漫画であれば、それはそれですげー興味深い!
それにしても・・・
本当に『A・Iが止まらない!』と『ラブひな』を描いていた作者か?
いい意味で予想を裏切ってくれた度合いが凄かったなぁ。

2007年06月11日

"str" と new String("str") の違い

文字列リテラルを使って宣言した文字列にプロパティを足せないのは何故?の続き。

回答らしきものに一歩近づいたので、途中経過を忘れない内にまとめ。
まずは、
(new String("str")).valueOf() が "str" と等しかったということを知った。
var s = new String("foo");
ss = s.valueOf();
 
alert(s);          // -> "foo"
alert(typeof(s));  // -> "object"
 
alert(ss);         // -> "foo"
alert(typeof(ss)); // -> "string"
ぬぁるほどね

で、くどいですけど、メソッドを呼べないことも確認
var s = new String("foo");
s._a = function(){return "bar"};
ss = s.valueOf();
alert(s._a());     // -> "bar"
alert(ss._a());    // -> エラー
「じゃあ、なんで二つの"文字列"を持つ必要があるんだろう?」
という疑問が出たので調べると

どうやら、一般的なプログラムの概念として
データの型には、基本型(プリミティブ型 原始型 単純型 組み込み型 とも呼ばれる) と 複合型 というものがあるようで、
"str"は前者、new String("str") は後者、の概念に基づいているようだ。

まぁ、javascriptの基本型は、一般的な基本型とは違うらしく
それについては、檜山正幸のキマイラ飼育記-プログラマのためのJavaScript (3):参照について考えてみる に重要なことが書いてあるっぽいけど、正直ほとんど理解できない。
また、上記だけでは説明が付かないこともある
String.prototype._a = function(){return "foo"};
alert("dummy"._a()); // -> "foo"を出力
prototypeを拡張すると使えるんだって、この人に教えてもらった。
・・・ということで、途中経過のまとめ終わり。

残りの疑問は、自分の手に余りそうなのでしばらく放置しよう。
そうすると小人が解決してくれるらしいよ!

2007年06月12日

JSONはセキュリティ上危険?

「サーバ側がJSONデータとして出力したテキストを
クライアント側のjavascriptが非同期通信で取り込み、evalを使ってパースする。」
という手順がセキュリティホールになるらしいと、エントリ上でみました。

しかしながら、
ググって調べても具体的に危険な点を示しているエントリが見つからない。
どこが危険といわれているんだろ?
確かに、eval内に自由な情報が入りうると困るけど
そのためには
1. 悪意ある者の意図通りのリクエストをクライアントに投げさせる
2. 利用者としてサーバ側のデータにjsスクリプトを挿入して、他の利用者にjsを実行させる
の必要がある。

1については、あくまで「意図的に投げさせる」までがセキュリティホールなので
JSONもevalも関係ないし

2については、どちらかといえばXSSのようなサーバ側の問題なので
気をつければ簡単に対処可能なはず。

やられたときのダメージの大きさなのかなとも思ったんですが
そもそも、javascriptなんて、HTML上でいくらでも書くことができるので
そう考えるとXSSの方が痛いよなぁ。
HTMLソースとしてjavascriptを書ける時点で、常時evalみたいなもんだし。
よくわからないですけど、
とりあえずは、2に気をつければいいのかしらん。
↓追記

続きを読む "JSONはセキュリティ上危険?" »

2007年06月14日

さくら専用サーバにApache1.3+PHP4+MySQL4.1+Ethnaな開発環境を作る(1)

人様のさくらの専用サーバ
Apache1.3 + PHP4 + MySQL4.1 + Ethna な開発環境を作ることになりました。
勿体無いので手順を淡々とまとめます。
今回は開発ツールのインストールを行うということで
cvsup, ports, zsh, vim, screen, lv を使える状態にするところまで書きます。

じゃあ、早速開始。
OSの選択
OSは「FreeBSD 6.2-RELEASE」「Fedora Core 6」のいずれかから選べるのですが
FreeBSDを選択しました。
cvsupとportsのインストール
FreeBSDにはportsというパッケージ管理システムがありますが、
さくらの専用サーバにはそれがデフォルトでインストールされていないので入れる必要があります。
更に、portsを入れるためにcvsupというコマンドが必要になるので、それを最初に落としてこなくてはなりません。
という訳でコマンド
cd /usr/share/examples/cvsup/
wget ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/net/cvsup-without-gui-16.1h_2.tbz
pkg_add cvsup-without-gui-16.1h_2.tbz
cp -ip ports-supfile ports
vi ports
 ↓
viでportsファイルの一部分を以下のように編集する
#*default host=CHANGE_THIS.FreeBSD.org
*default host=cvsup3.jp.freebsd.org
※cvsup3.jp.freebsd.org のホスト名は変わり得るので、実行時に調べてください。
で、続きのコマンド
 ↓
/usr/local/bin/cvsup -g -L 2 ports
 ↓
(※portsのインストールがログを出力しながら開始)
 ↓
 Checkout ports/x11-wm/yawm/pkg-descr
Shutting down connection to server
Finished successfully
インストールが成功して、ログの末尾にこんなのが出力されました。
ちなみに、(ports-allなので)portsのインストールに30分以上かかりました。

参考サイト
make.confの設定
makeコマンドの共通設定を書き換えて、GUI用のソフトがインストールされないようにします。
vi /etc/make.conf
でファイルを開いて、以下を追記します
WITHOUT_X11=yes
参考サイト
zshのインストールと設定
コマンド
cd /usr/ports/shells/zsh
make
make install
chsh
viが立ち上がるので標準シェルを変えてください
zshの位置がわからなければ、「find / -name "zsh"」で調べることができます。
後は「/root/.zshrc」ファイルを作成し、いいように設定を書いて終わり。
vimのインストールと設定
コマンド
cd /usr/ports/editors/vim
make
make install
後は「/root/.vimrc」ファイルを作成し、いいように設定を書いて終(ry
特に設定しないでも、全角文字は使えました。
screenのインストールと設定
コマンド
cd /usr/ports/sysutils/screen
make
make install
後は「/root/.screenrc」ファイルを作成し、い(ry
lvのインストール
コマンド
cd /usr/ports/misc/lv
make
make install
・・・というか、
portsが入ってしまえば、後は「/usr/ports」以下から、入れたいソフト名で検索して
同名のディレクトリへ移動してmake~make install をするだけでOKでした。
(複雑な設定を要する場合は、make config で設定をする必要がある)
とりあえず、今日はここまでにします。
飽きつかれた。

2007年06月15日

初めての

生まれて初めて携帯で写真を撮りました。
(「エッ?あんた技術屋じゃ・・・しかもWeb・・・」とか言わないで下さい)

なかなか楽しいものだということを、認めざるを得ません。
しかしながら、久々に携帯を持つと、異常に邪魔です。
携帯しなくても携帯していることになる携帯電話が欲しいなー

2007年06月18日

さくら専用サーバにApache1.3+PHP4+MySQL4.1+Ethnaな開発環境を作る(2)

前回の続き
今回は、Apache1.3とPHP4のインストールと設定を行います。

とゆうことで開始。
【Apache1.3のインストール】
cd /usr/local
mkdir src
wget http://ftp.kddilabs.jp/infosystems/apache/httpd/apache_1.3.37.tar.gz
tar xvzf apache_1.3.37.tar.gz
cd apache_1.3.37
./configure --prefix=/usr/local/apache1_3 --enable-module=so
make
make install
【PHP4のインストール】
cd /usr/local/src
wget http://www.php.net/get/php-4.4.7.tar.gz/from/fr.php.net/mirror
tar xvzf php-4.4.7.tar.gz
cd php-4.4.7
./configure \
 --prefix=/usr/local/php4_4 \
 --enable-cli \
 --with-mysql=/usr/local/mysql \
 --enable-mbstring \
 --enable-mbstr-enc-trans \
 --enable-mbregex \
 --with-apxs=/usr/local/apache1_3/bin/apxs \
 --with-config-file-path=/usr/local/php4_4/etc \
 --with-zlib-dir
make
make install
※ "--enable-cli"はデフォルト有効かもしれないので不要かもしれません。
※ "--with-mysql"について、今はMySQLはありませんが、先読みで設定してます。
※ "--with-zlib-dir"がEthnaインストール時に必要でした。2007/06/25追加
※ "--enable-mbstr-enc-trans"と"--enable-mbregex"が必要そうなので入れました。2007/07/02追加
※"--with-config-file-path=/usr/local/php4_4/etc/php.ini"だったのを変更しました。ファイル名を含めるとダメなようです。2007/07/02修正
※ その他のオプションは、おそらく最低限知っておいた方がいいものです。
軽く解説をつけます
--prefix → PHPのインストール先ディレクトリのパス
--with-mysql → 使用するMySQLディレクトリのパス
--enable-mbstring → マルチバイト文字関連の関数を使用可能にする
--with-apxs → Apache apxsツールのディレクトリのパス
--with-config-file-path →php.iniの設置先ディレクトリのパス
--with-zlib-dir →zlib(zipファイルを操作するために必要)設置先のパス
【Apache2.2のポートを変えて再起動する】
さくら専用サーバは、初期設定でApache2.2がインストールされています。
今回は、Apache1.3をメインで使用するので、Apache2.2に割り当てられている標準の80番ポートを変更します。
ということで、httpd.confを開き
vi /usr/local/etc/apache22/httpd.conf
以下のように、80番ポートを8081番に書き換えます
#Listen 80
Listen 8081
※ちなみに、8080番は駄目でした。理由はわかりません :-)
で、以下のコマンドで
/usr/local/sbin/httpd
再起動します。

動作確認
次のパスに
vi /home/htdocs/info.php
以下の内容のファイルを作成し
<?php phpinfo();
ブラウザで http://xxx.xxx.xxx.xxx:8081/info.php を叩いて動けばOKです。
【Apache1.3の設定を行い起動させる】
httpd.confファイルを開いて
vi /usr/local/apache1_3/conf/httpd.conf
ユーザとグループを以下のように変更
#User nobody
#Group nobody
User www
Group www
拡張子にPHP4を関連付ける
LoadModule php4_module        libexec/libphp4.so
AddType application/x-httpd-php .php .phtml
※LoadModuleの行は既にあるはず

httpd.confの変更が終わったので
/usr/local/apache1_3/bin/apachectl restart
上記のコマンドで再起動します。

動作確認
vi /usr/local/apache1_3/htdocs/test/info.php
<?php phpinfo();
の内容のファイルを作成し、
ブラウザで http://xxx.xxx.xxx.xxx/info.php を叩いて動けばOKです。
残りはMySQLとEthnaだーっと。

2007年06月19日

javascriptでSingletonパターン

javascriptでSingletonパターンを試してみる
var Foo = function(){
    this._a = 1;
};
 
Foo.singleton = function(){
    var self = arguments.callee;
    if ("_instance" in self === false) self._instance = new Foo;
    return self._instance;
};
 
var foo1 = Foo.singleton();
alert(foo1._a); // -> 1
 
foo1._a = 2;
 
var foo2 = Foo.singleton();
alert(foo2._a); // -> 2
 
alert(foo1._a); // -> 2
 
var bar = new Foo;
alert(bar._a); // -> 1
できたっぽい・・・けど、これでいいのか?
と、調べたら
最速インターフェース研究会に記事があった。
大枠は外して無さそうだなー。

2007年06月20日

javascriptのURIエンコードをRubyでデコードする

PHPの時に苦労した記憶があるので
勇んで記事を書こうと思ったら、サクっと出来てしまった。
javascript側はencodeURIComponentでエンコードする。
こんなコードをHTMLに埋め込んで、適当な文字列をURIエンコードした出力をコピペでゲットする
<script type="text/javascript"><!--
document.write(encodeURIComponent("おお、kjirouよ! 死んでしまうとはなさけな% &?い!!"));
// --></script>
※HTMLのcharsetはUTF-8にすること
Ruby側はURI.unescapeでデコードする
例えばこんな感じで動作確認する
require "uri"
$KCODE = "UTF"
p URI.unescape('ここに先程のjavascriptでURIエンコードした文字列をコピペ');
※ブラウザやターミナルの文字コードの設定は正しく行うこと

これで無事エンコード+デコードできました。
参考リンク
PHPでも簡単に出来ました。
どうやら、文字コードがUTF-8じゃなかった場合の記憶と、ごっちゃになってたようです。

RubyでCSV行を追加書きする

素直な使い方はこうなんですけど
require "csv"
CSV.open("/path/to/filename.csv", "w") do |writer|
  writer << ['aaa', 'bbb', 'ccc']
end
これだと(理由はわかりませんが)ファイル末尾に追加書きするモードがありません。
だので、こうしたら
outfile = File.open('/path/to/filename.csv', 'a')
CSV::Writer.generate(outfile) do |writer|
  writer << ['aaa', 'bbb', 'ccc']
end
上手くいきました。
動いてるのでよしとしてますが
「何故、通常の使い方で"a"モードが無いのか」の理由は調べてません。
もしかしたら、やっちゃいけないのかもしれないス
【追記 2008-01-30】
以下のコードで、上書きモードで書き出したCSVファイルの尻が切れることがありました。
outfile = File.open('/path/to/filename.csv', 'w') # 上書きモードに変えて行っていた
CSV::Writer.generate(outfile) do |writer|
  writer << ['aaa', 'bbb', 'ccc']
end
対処としては、CSV.generate にメソッドを変更したら治りました。
ソースは追いきれず、理由は不明のままです。

続・javascriptでSingletonパターン

【後日追記】
もうちょいマシな書き方になりました → コチラの記事へどうぞ

自分用はこんな感じにしようかしらん(99.99%パクリ)
/**
 * インスタンスを生成する
 *
 * var foo = Foo.applyNew([param1, param2]);  は
 * var foo = new Foo(param1, param2); と等しい。
 */
Function.prototype.applyNew = function(args){
    var Scope = function(){};
    Scope.prototype = this.prototype;
    var scope = new Scope();
    var instance = this.apply(scope, args || []);
    return (instance instanceof Object) ? instance : scope;
};
 
/**
 * Singletonパターンでインスタンスを生成する
 */
Function.prototype.singleton = function(){
    var self = arguments.callee;
    if ("_instance" in self === false)
        self._instance = this.applyNew(arguments);
    return self._instance;
    };
Function.prototype.singleton = function(){
    if ("__instance__" in this === false)
        this.__instance__ = this.applyNew(arguments);
    return this.__instance__;
};
テスト
var Foo = function(a, b){
    this.a = a;
    this.b = b;
};
 
var f1 = Foo.singleton(1, "one");
var f2 = Foo.singleton();
 
f2.a = "two";
f2.b = 2;
 
alert(f1.a); // -> "two"
alert(f1.b); // -> 2
OKPK
にしても、これ両方とも約2年前の記事なのか。
世の中は一体どうなってんだ・・・。
あああ、間違ったぁぁぁ!

最初のソースだと、Function.prototype.singletonでひとつのインスタンスしか保持できないので、 複数のクラスでsingletonを使用出来ない!

以下、修正後のソースでテスト
var Foo = function(a){
    this.a = a;
};
var Bar = function(b){
    this.b = b;
};
 
var f = Foo.singleton(1);
var b = Bar.singleton(2);
 
alert(f.a); // -> 1
alert(b.b); // -> 2
 
f.a = 11;
b.b = 22;
 
var ff = Foo.singleton();
alert(ff.a); // -> 11
var bb = Bar.singleton();
alert(bb.b); // -> 22
OKPKPKK!(多分)

2007年06月22日

javascriptでStrategyパターン?

これはStrategyパターンと呼んでいいのだろうか?
var Human = function(){
    this.firstName = "亮";
    this.lastName = "諸葛";
    this.azana = "孔明";
};
 
Human.prototype.sayName = function(format){
    alert(format(this.firstName, this.lastName, this.azana));
};
 
var foo = new Human();
 
foo.sayName(function(firstName, lastName){
    return lastName + firstName; // -> "諸葛亮"
});
 
foo.sayName(function(firstName, lastName, azana){
    return "我が名は" + lastName + firstName + " 字は" + azana; // -> "我が名は諸葛亮 字は孔明"
});
デザパタとか関係無しに自分がやりたいことは
上記例ならsayName関数に渡すformat関数のInterfaceを決めて
(javascriptなので言語のサポートはありませんが)
ロジックの一部分を関数で渡せるようにしたいということです。

それをStrategyパターンと呼んでいいのかなぁと。
ココとかココとかココを見ると、上記で合っているようですが
ココを見ると、「処理対象により、ロジックを変える」という側面も併せ持つ必要があるように書いてある。

Javaはほとんど書いたことが無いので、この辺が限界スかね
残念無念。

2007年06月25日

"javascript:void(0);"をhrefに指定したときにハマる

element.href = "javascript:void(0);";
とか
<a href="javascript:void(0);" />
を指定した際に、IE6で意図しない挙動になったという話。
こんなHTMLを書いて
<img id="image" src="./test.gif"/>
<a id="switch_error" href="javascript:void(0);">SWITCH_ERROR</a>
<a id="switch_success" href="javascript:void(0);">SWITCH_SUCCESS</a>
javascript側でこんなのを設定する
document.getElementById("switch_error").onclick = function(){
    document.getElementById("image").src = "./test2.gif";
};
 
document.getElementById("switch_success").onclick = function(){
    document.getElementById("image").src = "./test2.gif";
    return false;
};
リンクを押下すると、test.gif が test2.gif に変わるという意図のコードである。
特になんでもないコードだと思いきや
IE6の場合は、SWITCH_ERRORのリンクを押下した場合に、
画像部分が空白になる。

そこで、SWITCH_SUCCESS リンクのonclickように、
return false を入れると意図通りに動作するようになる。

XP-FireFox1.5では、両方とも動作した。
これは・・・IEが悪いってよりは
そもそも、hrefにjavascript:void(0); を入れて制御すること自体が
気持ちよくない仕様に見えるんですけど、やり方がわからないス。

まぁいいや、動いたし。

30分ハマり

2007年06月29日

「舞姫 テレプシコーラ」を読み途中

友人に借りて
山岸涼子の「舞姫 テレプシコーラ」を読んでいます
舞姫(テレプシコーラ) 1 (1)
  • 舞姫(テレプシコーラ) 1 (1)
  • メディアファクトリー(2001-06)
  • メディアファクトリー
  • (著)山岸 凉子
  • 定価:¥ 620
  • 新品価格:¥ 620
  • 中古価格:¥ 358
  • ASIN:488991787X
・・・が、あまりの空美の不幸さに3巻でストップ中・・・。

アラベスク的なノリだと思って読んだら
山岸涼子節が全開でカウンターを食らいました。
気力充分じゃないと読めないな、これ。

About 2007年06月

2007年06月にブログ「それなりブログ」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年05月です。

次のアーカイブは2007年07月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.34