/ 最近 .rdf 追記 設定 本棚

脳log[2006-04-10~]



2006年04月10日 (月)

[][][マンガ]

  • [文庫] 葉山 透【9S(ナインエス)〈7〉 (電撃文庫)】 メディアワークス
  • [コミック] むんこ【だって愛してる 1 (1) (まんがタイムコミックス)】 芳文社

2006年04月07日 (金)

[Amazon][HTML]アマゾンのおすすめページがリニューアルしてる。

15アイテムずつ表示するのは一緒だけど……

 ○ 情報量が増えてる

以前は「おすすめの理由は」っていうリンクがあるだけだったのに、「〜などを評価されたお客様におすすめします」って、最初から一冊だけだけどおすすめの理由が表示されてる。これはページの移動が減るなあ。

出版日も表示されてる。

 ○ その場で(ページ遷移無しで)評価が変更できる。でも Ajaxじゃない*

マウスオーバーに合わせて「嫌い(☆)」「好きではない(☆☆)」「普通(☆☆☆)」「好き(☆☆☆☆)」「大好き(☆☆☆☆☆)」と表示され、クリックすると評価が送信される。ページ遷移はない。

「持っています」「興味がありません」も従来はハイパーリンクだったものが、ページ遷移無しでアマゾンに送信されるようになっている。

ソースを覗いてみると、Javascriptが使用可能なら

window.location.href="〜"

とやってる。これは普通ページを移動するときに使うけど、そうはならない。からくりは以下のレスポンス。(注: id と名の付くものをそのまま載せるのはまずいかもしれないので正規表現に置換してある)

HTTP/1.x 204 NoContent
Date: Thu, 06 Apr 2006 18:42:18 GMT
Server: Server
x-amz-id-1: [0-9A-Z]{20}
x-amz-id-2: [0-9A-Za-z/=]{44}
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Connection: close
Content-Type: text/html; charset=Shift_JIS

Firefoxは 204 NoContent を受け取ったものだから新しいページを表示できなくて古いページを表示し続けるというわけ。

Javascriptが使用不可ならフォームを使って、(確認してないけど)スクリプトと同じ内容を POSTしてる。レスポンスも同じ 204 NoContentだろう。

 ○ 「次のページ」「前のページ」の他に、現在のページを再表示するリンクが追加。

評価などを変更しましたか? ここをクリックするとおすすめ商品の情報が更新されます。

というのがページ下部にある。内容は単なる javascript:location.reload() だけど需要のあるリンクだと思う。表示中のページに加えた評価 を加味した最新のおすすめを表示したいと思うもの。

キーボード派は F5を押せばいいと言うでしょうがキーボード派はお呼びでない様子。

 × 「持っています」「興味がありません」にはフォーカスが移らないのでキーボードで操作できない。

「興味がありません」を例にとるとソースはこう↓。丸々スクリプトで中身を出力してる。(スクリプトOFFなブラウザには <noscript><form>〜</form></noscript>が用意してあるので重複して表示しないように。)

<td style="white-space: nowrap;">
	<script language="Javascript" type="text/javascript">amz_js_showNotInterested(asin, notInterested);</script>
</td>

amz_js_showNotInterested()が何を返すかというと

function amz_js_showNotInterested(asin, notInterested){
    var imageID = "notInterested." + asin;
    document.write("<img src="+'"'+ + checkboxImages[notInterested] + +'"'+"");
    document.write("onclick="+'"'+"amz_js_sendNotInterested('" + asin + "', 'alt');"+'"'+" ");
    document.write("onmouseover="+'"'+"amz_js_notInterestedMouseOver('" + asin + "', 'alt');"+'"'+" ");
    document.write("onmouseout="+'"'+"amz_js_notInterestedMouseOut('" + asin + "', 'alt');"+'"'+" ");
    document.write("id="+'"'+ + imageID + +'"'+" ");
    document.write("border="+'"'+"0"+'"'+" valign="+'"'+"bottom"+'"'+" />");
}

一つの <img>要素。リンクでないただの画像にフォーカスは移りません。

というわけで、スクリプトが OFFの場合はフォームと画像ボタンが表示されるのでキーボードで操作できるはずだが、スクリプトONの場合はマウス必須。

 × ☆の評価もキーボードでできない。

☆の部分のソースを見ると、☆の画像は一つで、6つの<area>を持つ<map>を適用することで個々の☆のマウスオーバー効果やクリックの処理をしている。評価送信のトリガはハイパーリンクを使ったものではなく <area onClick="〜" />。だから、☆にフォーカスは移るんだけど Enterを押しても反応しない。クリックをエミュレートするキーボードショートカットがあれば何とかなるが。

因みに ☆評価に対応した <noscript> なフォームは用意されてないのでスクリプトオフでは☆自体が表示されないはず。

 × <html>が二つ?それってあり?

改行とインデントをいじって HTML要素の内容を省略したソースが以下。

<html>
  <head>
    <title>Amazon.co.jp: おすすめ商品</title>
    <script language="Javascript1.1" type="text/javascript"></script>
    <style type="text/css"></style>
    <style type="text/css"></style>
    <style type="text/css"></style>
  </head>
  <body>
    <html>
      <head>
        <title></title>
        <style type="text/css"></style>
        <script language="Javascript1.1" type="text/javascript"></script>
      </head>
      <body bgcolor="#FFFFFF" link="#003399" alink="#FF9933" vlink="#996633" text="#000000">
……
      </body>
    </html>
  </body>
</html>
  • Content-Typeヘッダは text/html
  • doctype宣言はない
  • <meta>タグもない
  • <img />, <br />など中身のない要素に XHTML風の記法
  • だけど <input>は <input />でなく <input>
  • 対応する閉じタグのない <li>, <p>, <option>もある
  • <b>といった物理要素もある

よくわからない HTML、ところどころ XHTML風味。何れにしろ Broken みたいなっ。

アマゾンみたいなサイトでは HTMLの理念理想よりブラウザ互換性の方が大事でしょうが、見映えと関係ない細かな部分ではソースの統一をして欲しいな。(<br />なんて <br>でいいでしょ)

 ○ おすすめ表示件数の上限が無くなった?

これまでは 100件ちょっとで「次のページ」が無くなって打ち止めになったけど、現在 400件目を過ぎたところまで表示してる。ここまでくるとおすすめの精度が悪くて参考にならない。でも自分で止めるところを決められるのは良い。

* Ajaxを XmlHttpRequest, MSXMLオブジェクトを利用した、ページ遷移を伴わないサーバーとの通信(HTTP GET/POST)、(とそれによるページ更新)とするなら


2006年04月06日 (木)

[][][マンガ]

  • [文庫] アイザック・アシモフ【われはロボット 〔決定版〕 アシモフのロボット傑作集 (ハヤカワ文庫 SF)】 早川書房
  • [文庫] 吉田 勝江, ルイザ・メイ・オルコット, Louisa May Alcott【若草物語〈上〉】 角川書店
  • [文庫] ルイザ・メイ・オルコット, 吉田 勝江, Louisa May Alcott【若草物語〈下〉 (角川文庫)】 角川書店
  • [コミック] 佐藤 秀峰【ブラックジャックによろしく (13) (モーニングKC (1488))】 講談社

2006年04月04日 (火)

MVC, O/Rマッパー, Ruby on Rails

これらが今 自分が必要としてるものの名前だということに気付きました。

るびま で Railsの記事を読んだときには Railsが結局何なのかが分かりませんでした。

るびま の 3号では複数の O/Rマッパーが紹介されてました。読み飛ばしてました。

MVCって単語はもう何年、目にして、素通りしてきただろう。

[][][マンガ]

  • [コミック] むんこ【らいか・デイズ 3 (3) (まんがタイムコミックス)】 芳文社
  • [コミック] 和月 伸宏【武装錬金 (10) (ジャンプ・コミックス)】 集英社
  • [文庫] 高殿 円【わが王に告ぐ―エヴァリオットの剣 (角川ビーンズ文庫)】 角川書店
  • [単行本] ジョー セルコ【プログラマのためのSQL 第2版】 ピアソンエデュケーション

原書は三版が出てるんだけど、読みたいときが買い時ってことで。


2006年04月01日 (土)

[Ruby][SQLite] create_function()が強力。俺の探してたのはこれだ。

SQLite3の提供する集約関数は avg, count, max, min, sum, totalが全てで、どれも数値を引数にとる。sumが与えられた数値の合計を返すように、与えられた文字列を全て連結して返す集約関数(MySQLの GROUP_CONCATがまさしくそれ)がないものかと探していた。それが無いなら無いで SELECT, JOIN, UNION, CASEといった標準的なものを使って、特定の列の値を(行をまたいで)連結したりできないものかと考えたけど、行と行の独立は破れなかった。

話は変わって、これ↓は昨日見つけた目から鱗ものの文書。

http://www.geocities.jp/mickindex/database/idx_database.html

対象読者として次のような項目が挙げられている。

  • なぜ"関係"モデルという抽象的な用語を使うのか分からない。"表"モデルでいいじゃない。
  • なぜ「= NULL」ではなく「IS NULL」と書かねばならないのか分からない。
  • E.F.Codd、C.J.Date、J.Celko、F.Pascal の本を読んだことがない。
  • IN述語とEXISTS述語では、IN の方が直観的に分かりやすいから好きだ。
  • IN述語、EXISTS述語、LIKE述語・・・「述語」って何だ?
  • テーブル設計のときは滅多に NOT NULL制約を付けない。しかもそれが大罪であることの自覚がない。
  • SQL で CASE式を使ったことがない。

「INは使ったことあるけど EXISTSは知らない」「何故 = NULLと書いたものが IS NULLと同じ結果を返さないのか分からない」「 CASE?そんなんあった?」「DEFAULT '' は多用するけど、NOT NULLは付けてない。付けるべき理由があるなら知りたいよ」と、冒頭からがっちりハートを鷲掴み。

このサイトの文書がどれも興味深く、有用なのはさておいて、CASEの存在を今まで知らなかったことに少なからずショックを受けた。SQLiteの本家サイトにもちゃんと記述されているというのに。(→Query Language Understood by SQLite: expression)

そこで改めて SQLiteでできることをおさらいしてみたところ発見されたのが create_function。(→C/C++ Interface For SQLite Version 3)

C/C++ APIだから Rubyから使うには dl を使わなあかんのかと思ったら、何と SQLiteといつもセットで利用しているsqlite3-rubySQLite3::Databaseオブジェクトにはその名も create_aggregateなんてメソッドが存在するのですねえ。一体今までどこに目を付けていたのかと……。

そんなわけで、無いなら作ってしまえ文字列連結集約関数〜♪。

require 'sqlite3'
database = SQLite3::Database.new('hoge.db');

# concatという不定数の引数をとる集約関数を作成。
# 第一引数(val)は連結される文字列。
# 第二引数(sep)は valと valの間に挿入されるセパレータ。
# 第三引数(sortval)は valを連結する前に並び替えたい場合にソートキーとして利用される文字列/数値。(省略されたり NULLの場合はソートしない)
# 第四引数(desc)はソートの昇順/降順を切り替える。(省略/NULL=>昇順, その他=>降順)
database.create_aggregate(name='concat', arity=-1){
	step {|func, val, sep, sortval, desc|
		func['separator'] = sep.to_s;
		func['sortdesc'] = !(desc.nil? || desc.null?);
		func['needsort'] = (func['needsort'] || !(sortval.nil? || sortval.null?));
		func['sortvaltype'] ||= (sortval.nil? || sortval.null?) ? nil : {:int=>:to_i, :float=>:to_f, :blob=>:to_blob, :text=>:to_s}[sortval.type];
		func['array'] ||= [];
		func['array'].push([ (sortval.nil? || sortval.null?) ? nil : sortval.send(func['sortvaltype']), val.to_s ]);
	}
	finalize {|func|
		arr = (func['array'] || []);
		arr = arr.sort_by{|x| x.nil? ? {:to_i=>0, :to_f=>0.0, :to_s=>''}[func['sortvaltype']] : x.first.dup } if(func['needsort']);
		arr.reverse! if(func['sortdesc']);
		func.result = arr.map{|x| x.last  }.join(func['separator']);
	}
}
  • val, sepなど集約関数の引数は SQLite3::Valueのインスタンス。SQLite3::Value#to_sは nilを返すこともあるので注意。
  • val, sepなど集約関数の引数はコールバックの度に上書きされるので、引数をそのまま func(SQLite3::Database::FunctionProxy)など、ブロックローカル変数以外の場所に保存すると ( ゜Д゜)マズー
  • コールバック用の step, finalizeを create_aggregateに渡す方法は Rubyの新文法ではなく sqlite3-rubyがコールバック関数を定義しやすいようにしてくれているだけ。
  • dupがないとソートした後で例外が発生する理由は?
  • スピードを考えたら(頻繁に使うクエリで)こんなの使っちゃダメ。

というわけで、探し物が見つかったということに満足しつつ、文字列の連結は集約関数でなく ERBスクリプトで行っている現在。

 authorizerを使えば

データベースに対するリードオンリーアクセスを保証したりもできるのねん。

CGI経由で渡された SQLも安全に実行できそうじゃね?

#!ruby -T4
eval(ENV['QUERY_STRING'])

と同程度かそれ以上に。

http://www.sqlite.org/capi3ref.html#sqlite3_set_authorizer から引用しておく。

The intent of this routine is to allow applications to safely execute user-entered SQL. An appropriate callback can deny the user-entered SQL access certain operations (ex: anything that changes the database) or to deny access to certain tables or columns within the database.


2006年03月31日 (金)

[][][マンガ]

  • [コミック] 浦沢 直樹, 手塚 治虫, 手塚 真【PLUTO (3) ビッグコミック】 小学館
  • [文庫] 高殿 円, 椋本 夏夜【カーリー ~黄金の尖塔の国とあひると小公女~ (ファミ通文庫)】 エンターブレイン
  • [文庫] 今野 緒雪【マリア様がみてる―くもりガラスの向こう側 (コバルト文庫)】 集英社
  • [文庫] 長谷 敏司【円環少女 (2) 煉獄の虚神(上) (スニーカー文庫)】 角川書店
  • [文庫] 長谷 敏司【円環少女 (3) 煉獄の虚神(下) (角川スニーカー文庫)】 角川書店

2006年03月27日 (月)

[][マンガ]

  • [コミック] 貞本 義行, GAINAX【新世紀エヴァンゲリオン (10) (カドカワコミックスAエース)】 角川書店
  • [コミック] 矢立 肇, 富野 由悠季, 美樹本 晴彦【機動戦士ガンダム エコール・デュ・シエル (8) (カドカワコミックスAエース)】 角川書店
  • [コミック] 上杉 匠【ショショリカ 7 (ガンガン WING コミックス)】 スクウェア・エニックス
  • [コミック] 木村 太彦【瀬戸の花嫁 9 (ガンガン WING コミックス)】 スクウェア・エニックス

2006年03月26日 (日)

[Firefox] Amazonからコピーした ISBNの末尾にスペースがくっついて邪魔なら

layout.word_select.eat_space_to_next_word = false

Windows版ではデフォルトで trueらしい。でも今回 探してた設定はコレ↑じゃなくて、画像を読み込めなかった時に表示される altテキストを(画像と同じ)置換要素として表示する方法。

画像を表示できなくて altを表示する場合でも IEのように widthと height属性*を尊重して欲しいわけ。widthが無効でその上 改行(&#x0D;&#x0A;)も有効でないと来たら、どうやって折り返したらいいの?

HTMLはいじらない。CSSで解決するなら

img { display: inline-block }

となりそうだが inline-blockは CSS2.1で追加された値なので Firefox1.5は未対応。どうしたらいいの?

* 非置換インライン要素に width, height属性は適用できない。

Final Fantasy: 12が発売されてから、(PSでは終盤で放棄してしまった) 9を PCで改めて始めてる俺がいますよ。

こんなこと書いたけど結構 6も 7も楽しんだんだよね。6は偶数作品らしく多数の、名前とストーリーを持ったキャラが魅力だし、戦闘もアクセサリの組み合わせが楽しかった。7のマテリアは、6で 2つまでしか装備できなかったアクセサリが 4組 8つまで装備できるようになったようなものだから当然あれやこれやと組み合わせを考える楽しみは尽きなかった。

8*は闇に葬って、

改めて 9をプレイすると至極真っ当なファンタジーをしてることに(2回目のプレイで)気付く。

境遇の違うジタン、ダガー、ビビ、スタイナーは旅をしながらそれぞれの生き方を模索し、成長していく。こんな王道のストーリーが今は気持ちいい。

ジタンとダガーの近づきそうで進まない仲と、二人の関係を冷静に観察しつつジタンにアタックするエーコと、いつの間にかエーコに子分のように扱われているビビの関係は微笑ましくて、見ていて本当に楽しい。

終盤になるとこちらの攻撃をトリガーにしてアクションを起こす敵が非常に多くなってイライラさせられた記憶があるが、今なら、打撃でカウンターが発生するなら魔法と召喚で攻撃するだけの余裕がある(と思う。まだ終盤に届いてない)。

* 陰気な?退屈な?思い出せないストーリー。新システムを作るために作られた面倒くさいだけのシステム、ジャンクション。キスティス先生だけが俺の楽しみだったよ。


2006年03月25日 (土)

[][][マンガ] 4点

  • [文庫] 清水 マリコ【侵略する少女と嘘の庭 (MF文庫J)】 メディアファクトリー
  • [文庫] 貴子 潤一郎【眠り姫 (富士見ファンタジア文庫)】 富士見書房
  • [コミック] 久世 番子【暴れん坊本屋さん (1) (Un poco essay comics)】 新書館
  • [ペーパーバック] Andy Riley【The Book of Bunny Suicides】 Plume

2006年03月23日 (木)

[][][マンガ] 7点

  • [コミック] ひぐち アサ【おおきく振りかぶって (Vol.6) (アフタヌーンKC (408))】 講談社
  • [コミック] いーだ 俊嗣, あさの あつこ【テレパシー少女「蘭」 2 ねらわれた街 後編 (2) (シリウスコミックス)】 講談社
  • [コミック] 久米田 康治【さよなら絶望先生 第3集 (3) (少年マガジンコミックス)】 講談社
  • [コミック] 畑 健二郎【ハヤテのごとく! (6) (少年サンデーコミックス)】 小学館
  • [コミック] 東雲 水生, 駒尾 真子, ひびき 玲音【初恋姉妹 (1) (IDコミックス 百合姫コミックス)】 一迅社
  • [コミック] 田丸 浩史【ラブやん 6 (6) (アフタヌーンKC)】 講談社
  • [コミック] ででん【ふらっとらいん (2) (Dengeki comics EX)】 メディアワークス

2006年03月21日 (火)

[WinXP] プログラムから開く->プログラムの選択->参照 で選んだアプリ(仮に hoge.exeとする)がプログラムの一覧に追加されなくて困ったときは

HKEY_CURRENT_USER\Software\Classes\Applications\hoge.exe\shell\open\commandか、あるいは HKEY_LOCAL_MACHINE\Software\Classes\Applications\hoge.exe\shell\open\commandの下にある、(既定)の文字列値が存在しない場所の hoge.exeを指しているかもしれない。hoge.exeを移動したなどの理由で。

大雑把に hoge.exeとその下のキーを全て削除するも良し、(既定)の文字列値を正しいパスに書き換えるも良し。(zipファイルを SUSIEで開こうとして何度 SUSIEを参照しても一覧に表示されなくて、この二、三日困っていたのだよ)

[FF12] Final Fantasy XII が面白そうだ

FFは腐ったアクティブタイムバトル(ATB)*に嫌気がさして 9までしかプレイしていなくて、12に関しても発売日が過ぎてから公式サイトをのぞいてみるような扱いだったのだけど

エグゼクティブプロデューサー 河津秋敏

原案/シナリオプロット/監修 松野泰己*4

というのを見て |д゜)をっ

Final Fantasy XII が最高すぎる件を読んで (*´д`*)ハァハァ

 2007-01-03

10月16日に書いたように聖剣LOMをクリアして、12月13日頃から FF12をプレイしている。

そうしたら聖剣LOMで一番良かった珠魅編を担当していた生田美和氏が FF12でもシナリオに関わっていた。

* ATBのコンセプト自体は良い。実装が悪い。初めて採用された IVでは成功していたが、エフェクトの長時間化への対応を怠って VIでは既に ATBの "アクティブ" な部分が失われていたように記憶している。(予め入力しておいたコマンドを順番に再生されても面白くないんだよ)

 (俺的最重要事項の) 「SYSTEM」(多分戦闘システムなどの解説が予定されてたはず) が発売日を過ぎた今も UNDER CONSTRUCTION なのってどうよ?

 SaGaシリーズの人(という認識)

*4 タクティクスオウガ、FFT、ベイグラントストーリーの人(という認識)


2006年03月14日 (火)

[][][マンガ] 2点。(龍虎の恋, カトレア)

  • [コミック] 藪 京介【私立聖カトレア小学校 2 (2) (BLADE COMICS)】 マッグガーデン
  • [文庫] 竹宮 ゆゆこ【とらドラ!1】 アスキー・メディアワークス

2006年03月12日 (日)

[] (メモ) キング、クックの本が未登録。著者名が空の本の一覧。

Explorerは自分が作成した \RECYCLERフォルダに適切なパーミッションを設定しない。(ドライブルートから継承したパーミッションによってはごみ箱が利用できなかったりする)