/ 最近 .rdf 追記 設定 本棚

脳log[2007-01-30~]



2007年01月30日 (火)

[SN25P][Vista] びすたん アルティメット 到着

  • Ctrl+Wでエクスプローラが閉じられない。(beta2)
  • Winキー、アプリの頭文字の 2ストロークでよく使うプログラムの起動ができない。
  • Winキー、U、Hの 3ストロークで休止状態に移行できない。

beta2も RC1もインストールしたが、毎日使うものなだけに自転車のブレーキレバーの角度のようにちょっとした違いが気になって仕方がない。

不都合な点にはひとまず目をつむって Vistaに期待していることは

  • 空のNTFSフォルダにマウントされたボリュームに作成されたフォルダを正しくごみ箱に捨てられること。(フォルダがごみ箱に捨てられないから Shift+Delで直接削除している)
  • ジャンクション? シンボリックリンク? リパースポイント? の正しい取り扱い。フォルダのリンク(ショートカットに非ず)を削除するときに中身を削除せずリンクだけを削除すること。リンクにショートカットのような矢印が表示されるようになったのは進歩だけど「アクセスが拒否されました。」って言って開けないのはどうして?ショートカットにも劣るじゃない。ユーザーには触らせないということ?
  • 検索フォルダ。Thunderbirdで便利だった。思えばケータイのデータフォルダだってファイルの種類でフィルタリングしている。

なぜだろう。全てエクスプローラの問題だ。

Vistaに移行するついでに 64ビットにも移行することにした。OSのインストール自体は簡単に終わったが 64ビットVista向けのドライバが見つからない。

 サウンド (VIA Envy24PT)

SN25P(ベアボーン)の発売元の Shuttleが特設ページで Vista用のサウンドドライバをダウンロードできるようにしているが SN25Pのは 32bit版しかない。チップの製造元の VIAのサイトをのぞいてみたがこちらも 32bit Vista用ドライバしか出ていない。

SN25Pは Socket939で CPUが Athlon64だから Shuttleは以前から 32ビット版と 64ビット版の Audio、RAID、Chipsetドライバを用意していた。この、64ビット版 XP向けと思われるオーディオドライバを互換モードでインストールしたら音はなるようになったがコンパネアプリが起動しないので設定の変更ができない。

 チップセット (NVIDIA nForce4 Ultraモドキ)

nVidiaが Vista向けの nForce4ドライバを Beta2と RC1向けにしか出していない。待ってたら出るのだろうか。Vista向けの正式版ドライバは nForce3のしか出ていないようだけど。

 無線LAN (BUFFALO WLI-U2-KG54)

1月30日付けで新しいドライバディスクがダウンロード可能になっていて Vista用のドライバも収録されているがこれが 32ビット版のみ。

OEM元の Ralinkのサイトから RT2500の 32ビット版と64ビット版のドライバが一緒に収められたインストーラをダウンロードしてインストール。製品を挿してくれというメッセージのあと散々待たされて一応完了するのだけどまだ使えないみたい。デバイスマネージャからドライバの更新を選んで互換性のあるドライバをコンピュータ内から探して「BUFFALO WLI-U2-KG54 Wireless LAN Adapter」を選んでインストールすると使えるようになる。

 マウス (Logicool MX610)

せっかくの多ボタンとチルトホイールを生かすためには SetPointが必要。1月29日に 32ビットと64ビットそれぞれの Vista向けの SetPointがリリースされていた。

 Firefoxなど

アプリケーションは 32ビット版をインストールしてもそのまま動く。x86-64の名前が示す通り。dllと exeで32/64ビット版が混在することはできないらしいのでそこらだけ注意すれば良さそう。レンダリングエンジンを GeckoとIEで切り替える Firefoxの拡張があるけど IEが 64ビット版で Firefoxが 32ビット版だから無理とか?

 ATOK 2005

64ビットXPの対応状況を見ると 64ビットアプリの文字入力には使えないような。ATOK 2007は 32/64ビット Vista両対応だって。


2007年01月29日 (月)

出版が神の仕事だった子供の頃

活字が語る内容は全て真実だと思っていた。言葉には(唯一絶対の, 定められた)正しい意味があり、それを載せているのが辞書だと思っていた。なんとなれば本や辞書が作られる過程が全く想像できなかったのと見た目の精確さからそういう勘違いをしてしまったのだろう。今だって体裁の整った HTMLメールは企業からのメールだと思いがちで、フィッシングメールではないかと疑うのを忘れてしまいそうになる。

子供には「不思議なこと」が存在しない、というのもある。『ソフィーの世界』の、キッチンで宙に浮かぶママ、というのがそういう話ではなかったか。

[Ruby] 文字列リテラル連結

irb(main):001:0> RUBY_RELEASE_DATE
=> "2006-12-25"
irb(main):002:0> "aaa"\
irb(main):003:0* "bbb"
=> "aaabbb"
irb(main):004:0> "aaa"\
irb(main):005:0* %[bbb]
NameError: undefined local variable or method `bbb' for main:Object
        from (irb):5

こういうもんなの? "bbb" と %!bbb! は同じものだと思っていたが。

 追記:2007-12-12

'%04d-%02d-%02d'%[2007,12,12]
=> "2007-12-12"

String#% が呼ばれてるんだよ。


2007年01月20日 (土)

[FF12] 5、60時間プレイして (現在、帝国でリーフ集めを終わらせたところ)

前回(1月3日)

 コントローラー

PS1用のコントローラーの DUALSHOCKが、PS2のゲームでも使えることがあるらしい(DUALSHOCK2の機能を使ってない場合?)ので差してみた。

メニューを開く早さが体感 3割増。反応がもっさりしてたのはコントローラーが一因だった。セレクトで地図を開くとき以外*のあらゆる場面でゲームが高速化したみたいにサクサク操作できる。

 戦闘

こちらのとり得る選択肢が充実してきて、強敵に為す術がないということはなくなった。ヘイスト、バブル、ブレイブ、魔防破壊、バーサクなどなど。

ガンビットもそこそこ充実してきて単体で有効な条件だけでなく、一連の条件を設定することも可能になってきた。とはいえ未だにポイゾナもボキャルも自動化できないのは納得できないけど!

 楽しい

覇王の剣をとった後あたりからハマっている。以下に挙げる条件は序盤から変わってないのだけど技や魔法やガンビットや最大MPが充実して行動の幅が広がってきて、「なんとかなる」ことが多くなったのが大きい。

  • 行動範囲の理不尽な制限がない。(カヌー、バギー、チョコボ、船、飛空挺、魔法のじゅうたん、ひょうたん島、イベントをクリアするまで通せんぼなどなど)
  • 本筋から外れると強い敵。敵わなければ強くなってから再挑戦。
  • 本筋から外れなくてもゲージが緑色でプレイヤーを襲ってこない強い敵。
  • 苦労してもぐったダンジョンの奥には報酬。(店で防御力25程度の防具が最高のときに防御力50の防具とか)
  • 雑魚敵を倒す意味。(おたからと LP。LPは敵の強さによらず大抵 1しかもらえないから雑魚を大量に倒すのが効率的)

なんといっても、プレイヤーが常に複数の目的を持っているというのが良い。どのモブ、どのボスを倒しに行くのか、どのダンジョンを探索するのか、あるいはストーリーを進めるのか。これらの行動を制限するものは自身の強さのみ。初めて訪れる場所というのは一撃二撃で瀕死にされることもままある。そういうときは一体ずつ集中攻撃して経験値を稼いだり、すこし戻って雑魚狩りで LPを稼いでライセンスを充実させたり、あるいはストーリーを進めて装備を充実させたり。自身の強さと相談して再挑戦する時期を決めるのはプレイヤー自身。そういう自由がある。少し無理をしてぎりぎりの戦闘をこなすのも自由。久しぶりにゲームをしていると感じられる RPG。楽しい。

* セレクトとスタートに関しては DUALSHOCKと DUALSHOCK2に違いはなく、どちらもダメ。どれだけ奥まで押し込ませようとするのだ。ボタンの物理的なフィードバックと電気的なオンオフとの間にズレがあるから違和感を与えるのだよ

[Ruby][SQLite] sqlite3-ruby-1.2.0リリース

二年近くの長い沈黙を破って 2007-01-13にリリースされていた。

[Ruby] mkmf.rb

空白を含むパスで失敗するのでこのように↓。

 def link_command(ldflags, opt="", libpath=$LIBPATH)
   Config::expand(TRY_LINK.dup,
                  CONFIG.merge('hdrdir' => $hdrdir.quote,
+                              'srcdir' => $srcdir.quote,
                               'src' => CONFTEST_C,
                               'INCFLAGS' => $INCFLAGS,

2007年01月17日 (水)

[IE7][Hiki][HTML] IE7でマウスがおかしい

http://vvvvvv.sakura.ne.jp/ds14050/w/

Internet Explorer 7 で上の Hikiページを表示すると、右上のメニューを除いてテキストを選択することもリンクをクリックすることもできない。キーボードでの操作はできる。

スクリプトは仕込んでない。外部スタイルシートは hiki_base.cssと pain.cssが読み込まれている。 <style>タグが一カ所使われている。HTMLは Anothoer HTML-lintでチェックして対応がとれてないタグは存在しなかった。

(ページのどこでも)ダブルクリックするとまるで見当外れのページ右下の Generated が選択されるからスタイルシートの float辺りがくさい。

pain.cssをみてみると

div.main {
  float:right;
  width: 78%;
}

div.sidebar {
  float:left;
  width: 20%;
(以下略)

という記述があり、サイドバーの表示を floatで実現していた。

臭う、臭うぞ。でもここまで。そのうち直るでしょ。


2007年01月16日 (火)

[Hiki]ユーザー管理

 管理者

Hikiにはデフォルトで adminという名前の管理ユーザーが一人。Hikiをインストールして FrontPageを表示したら、まず管理者のパスワードを設定するよう促される。

 登録ユーザー

管理画面で edit_user.rbプラグインを有効にするとユーザー名とパスワードの組をいくつでも追加でき、ページの編集を登録ユーザーだけに許すということもできる。必ずしも編集権を登録ユーザーのみに制限する必要はない。

 仮ユーザー(仮称) のようなものがあればと思う

パスワードはなし。名を名乗るだけでなれる。ただし登録ユーザーと同じ名は名乗れない。

掲示板に書き込むときに名前を書くように Wikiを編集するときにも名前を入力できたらな、と思ったので。

パスワード無しの単なる自称なのでなりすましもできるし、しょうもないコメントを(ユーザー名として)入力することもできるけど、貢献してくれた人に名無しでいることを強要するのは間違い。ペンネームでもなんでも名乗る自由と匿名でいる自由が与えられていいと思う。善意の第三者の協力を期待するのなら。


2007年01月13日 (土)

[Ruby][Hiki] Hiki-0.8.6のインストロールインストゥール、install。

まずローカルで試してからアップロードしたのだがローカルの Apacheが Ruby-1.9.0を呼ぶので、FrontPageの表示からログインまでを可能にするために加えた変更点のリストをメモしておく。

 hiki/config.rb: Hiki::Config#initialize

-      instance_variables.each do |v|
+      instance_variables.each do |v| v = v.to_s;

vにシンボルが渡されて、次の行で v.sub!したときにエラーになっていた。

 hiki/command.rb: Hiki::Command#cmd_login

          if page && !page.empty?
-           redirect(@cgi, @conf.base_url + @plugin.hiki_url( page ), session_cookie( session.session_id ))
+           redirect(@cgi, @conf.base_url + @plugin.hiki_url( page ), [session_cookie( session.session_id )])
          else
-           redirect(@cgi, @conf.index_url, session_cookie( session.session_id ))
+           redirect(@cgi, @conf.index_url, [session_cookie( session.session_id )])

Cookieが session_id=SESSIONIDの形でなく SESSIONIDと key名なしの状態でブラウザにセットされるからログインに失敗していた。

Hiki::Command#cmd_logoutでは同じ引数を [session_cookie(session_id, -1)] としていたので同じように配列にした。

 hiki/storage.rb: Hiki::HikiDBBase#md5hex

-      Digest::MD5::new( s || '' ).hexdigest
+      Digest::MD5::hexdigest( s || '' )

リファレンスマニュアルには Digest::MD5.new([str]) とあるが引数の数が 0でないと叱られる。

 hiki/db/tmarshal.rb: TMarshal::dump_text

    when Array
-     "[\n"+obj.collect{|x| dump_text(x)+",\n"}.to_s+"]"
+     "[\n"+obj.collect{|x| dump_text(x)}.join(",\n")+"\n]"
    when Hash
-     "{\n"+obj.sort_by{|e| e[0].inspect}.collect{|k,v| "#{dump_text(k)} => #{dump_text(v)},\n"}.to_s+"}"
+     "{\n"+obj.sort_by{|e| e[0].inspect}.collect{|k,v| "#{dump_text(k)} => #{dump_text(v)}"}.join(",\n")+"\n}"

dumpに失敗していた。

原因となった Array#to_sのバージョンによる出力の違い↓。

Ruby-1.8.5p12> [1,2,3].to_s #=> "123"
Ruby-1.9.0 20061205> [1,2,3].to_s #=> "[1, 2, 3]"

リファレンスマニュアルには

to_s
   self.join($,) と同じです。

と書いてあるから to_sで(ある種の) joinを代用していても仕方ない。

と思ったがどちらにしろ Array#to_sの出力は $, に依存するので、後で(loadするときに) evalすることを考えれば今回の to_sの使用は不適切か。

[Ruby][Hiki] 差分の表示

上のエントリで FrontPageの表示とログインまでやったが、差分の表示もおかしかったので Array#to_s らしき部分を join('') に書き換えまくったら直った模様。

'string'.join は存在しなかったので、書き換えてエラーにならないということは考えたとおり Array#to_sだったか、そのコードが実行されてなくて発覚してないが実は間違いだった(実行されたらNoMethodErrorになる)かのどちらか ^_^; こういう実行してみないとわからないところは javascriptと同じでレアなコードパスのデバッグを難しくするね。

以下、リスト。

 style/default/hikidoc.rb: HikiDoc#escape_meta_char

+if(defined? ' '.ord) # Ruby-1.9
   def escape_meta_char( text )
     text.gsub( META_CHAR_RE ) do |s|
+      '&#x%x;' % s[1].ord
+    end
+  end
+else
+  def escape_meta_char( text )
+    text.gsub( META_CHAR_RE ) do |s|
       '&#x%x;' % s[1]
     end
   end
+end

いきなり Array#to_sと関係ないが String#[index] が Integerに代えて一文字の Stringを返すようになった対策。

 hiki/util.rb: Hiki::Util#word_diff

      if digest
-        return View.new( diff, src.encoding, src.eol ).to_html_digest(overriding_tags, false).to_s.gsub( %r|<br />|, '' ).gsub( %r|\n</ins>|, "</ins>\n" )
+        return View.new( diff, src.encoding, src.eol ).to_html_digest(overriding_tags, false).join(\).gsub( %r|<br />|,  ).gsub( %r|\n</ins>|, "</ins>\n" )
      else
-        return View.new( diff, src.encoding, src.eol ).to_html(overriding_tags, false).to_s.gsub( %r|<br />|, '' ).gsub( %r|\n</ins>|, "</ins>\n" )
+        return View.new( diff, src.encoding, src.eol ).to_html(overriding_tags, false).join(\).gsub( %r|<br />|,  ).gsub( %r|\n</ins>|, "</ins>\n" )
      end

 hiki/util.rb: Hiki::Util#word_diff_text

      if digest
-        return View.new( diff, src.encoding, src.eol ).to_wdiff_digest({}, false).join.gsub( %r|\n\+\}|, "+}\n" )
+        return View.new( diff, src.encoding, src.eol ).to_wdiff_digest({}, false).join(nil).gsub( %r|\n\+\}|, "+}\n" )
      else
-        return View.new( diff, src.encoding, src.eol ).to_wdiff({}, false).join.gsub( %r|\n\+\}|, "+}\n" )
+        return View.new( diff, src.encoding, src.eol ).to_wdiff({}, false).join(nil).gsub( %r|\n\+\}|, "+}\n" )
      end

join('')か join(nil)か統一しろよ、とセルフツッコミ。

 hiki/util.rb: Hiki::Util#compare_by_line_word

-          before_change = Document.new(line[1].to_s,
+          before_change = Document.new(line[1].join(''),
                                       doc1.encoding, doc1.eol)
-          after_change  = Document.new(line[2].to_s,
+          after_change  = Document.new(line[2].join(''),
                                       doc2.encoding, doc2.eol)

 hiki/docdiff/view.rb: View#apply_style

       if block_given?
-        source = yield block[1].to_s
-        target = yield block[2].to_s
+        source = yield block[1].to_a.join ''
+        target = yield block[2].to_a.join ''
       else
-        source = block[1].to_s
-        target = block[2].to_s
+        source = block[1].to_a.join ''
+        target = block[2].to_a.join ''
       end

block[i]は nilの可能性があるので to_a.join

 hiki/docdiff/view.rb: View#apply_style_digest

       if block_given?
-        source = yield entry[1].to_s
-        target = yield entry[2].to_s
+        source = yield entry[1].to_a.join ''
+        target = yield entry[2].to_a.join ''
       else
-        source = entry[1].to_s
-        target = entry[2].to_s
+        source = entry[1].to_a.join ''
+        target = entry[2].to_a.join ''
         end
       if  i == 0
         context_pre  = ""  # no pre context for the first entry
       else
-        context_pre  = @difference[i-1][1].to_s.scan(context_pre_pat).to_s
+        context_pre  = @difference[i-1][1].to_a.join('').scan(context_pre_pat).to_s
       end
       if (i + 1) == @difference.size
         context_post = ""  # no post context for the last entry
       else
-        context_post = @difference[i+1][1].to_s.scan(context_post_pat).to_s
+        context_post = @difference[i+1][1].to_a.join('').scan(context_post_pat).to_s
       end

 hiki/docdiff/view.rb: View#source_lines

   def source_lines()
     if @source_lines == nil
-      @source_lines = @difference.collect{|entry| entry[1]}.join.scan_lines(@eol)
+      @source_lines = @difference.collect{|entry| entry[1]}.join(nil).scan_lines(@eol)

 hiki/docdiff/view.rb: View#target_lines

   def target_lines()
     if @target_lines == nil
-      @target_lines = @difference.collect{|entry| entry[2]}.join.scan_lines(@eol)
+      @target_lines = @difference.collect{|entry| entry[2]}.join(nil).scan_lines(@eol)

[Hiki]セキュリティエラー続発

Hikiの設置が一段落したようなのでページの編集に取りかかる。が、こちらもすんなりとはいかない。プラグイン記法でできることが著しく制限されているのだ。

tDiaryは日記の著者を信用している(自分の日記を壊そうとする者はいないので。著者!=管理者となるレンタルサービスでは話が違って、セキュアモードでシステムを守る必要があるが)のに対し、Hikiはページ編集者を全く信用することができない。誰でも書き込めるのが Wikiだから。

そんなわけでセキュリティエラーが続発中。プラグイン記法で許されるのは単一のプラグイン呼び出しだけ。任意の文字列を埋め込むことも、プラグイン呼び出しを連ねることも、Rubyであれやこれやをすることもできない。全てをプラグインの中に閉じこめてしまい、Hikiページではそれを呼び出すしかないわけだ。(プラグインは Hikiの設置者が責任を持っているので信用されている)

{{CGI::escapeHTML @hoge.inspect}}

どころか

 {{CGI::escapeHTML '<abc>'}}

ですら通らないんだから。いやはや全く。

 いやいやいやいや

SecurityError (Insecure: can't intern tainted string)

これは Ruby 1.9.0に固有のエラーじゃまいか。だったら Hikiの方をちょこっと変更してもいいんじゃないか?

[Hiki][Ruby]プラグイン記法

 {{hoge a b 5}}      #=> hoge('a', 'b', 5)
 {{hoge 'a' b(5)}}   #=> hoge('a', 'b', 5)
 {{hoge ,a(, b)(5)}} #=> hoge('a', 'b', 5)
 {{hoge, a, b, 5}}   #=> PluginException('not plugin method: hoge,')
 {{hoge; hage}}      #=> PluginException

文法の緩さとか、一つのメソッドしか呼べないとか、嫌すぎる。

そりゃあ Rubyで

require digest/md5

という風にライブラリ名をクォーテーションで括らずに書けたら楽だなとかは考えるし、Symbolが Stringのサブクラスになったときは

require :sqlite3

が通るのを一番に確認したけど、

defined? printf
alias printg printf

を見て、

  • printfって何?クラスは?
  • printgと printfの間にカンマがないけどどういう文法? alias専用ルール?

というのと同種の嫌悪を感じる。


2007年01月11日 (木)


2007年01月09日 (火)

[BAD BOY]少し冷静になって考える

  • どの道のどの部分を走るか
  • どこに保管するか

車を運転することもある今では、以前みたいに自分の安全を車のドライバー任せにしてしまうことの迷惑さにも頼りなさにも無自覚ではいられない。(無法な運転は怖くてできない。自分にとってもドライバーにとっても怖い)

十分な広さのない歩道は走れないし、かといって車道にも十分な広さがないと身の危険か後続のイライラを感じることになるだろうし。

いざ自転車に乗ろうと思うと走る場所に困る。


2007年01月08日 (月) 成人の日。昔より一週間も早い。海の日をハッピーマンデーの対象にしたのは間違い。あれは 20日、夏休みの始まる前の日であることに意味があったのだから。

[]手袋

スノーボード用の手袋。ボードはやらないが、柔らかいのでスキーにもバイクに乗るときにも使う。

3、4年前に買った手袋が昨日ダメになったための予定外の出費。

インナーとアウターの分かれてない防水手袋は、乱暴に脱いでインナーの指先が裏返ったら終わりなのねん。指先の粘着テープと防水シートが絡んで団子になってもう指が通らない。

[BAD BOY] 買う。今年は買う。

DR250Rを買ったのが 2003年の 5月か 6月。その少し前の 4月か 5月にヤフオクで今乗ってる DRを見つけるまで悩んでたのが、DJEBELを買うか BAD BOYを買うか。(DJEBELは DR250Rの兄弟車で、主なところではタンクの容量とライトが違う)

DRを買ったので BAD BOYを買うお金はなくなったが今なら買える。問題は保管場所と乗る機会。人間は楽な方に流れていきますので、機会が確保できるかどうか。ガソリン高と運動不足が背中を押してくれるはず。なのだが、運動しないからと体脂肪が増えてるわけでもなく*、実のところどちらもあまり気にしていない。どうなる?

もうひとつ購入をためらわせるのが BAD BOYの人気。近所では見たことないのが救い。

自分の持ってる iPodは三世代目だが、当時はまだ猫も杓子も iPodという雰囲気ではなかった、ように思う。仮に今 iPodを持っていなくて携帯音楽プレーヤーを探しているとしたら、iPodを除外して良さそうなのを探した上でやっぱり iPodを買うと思う。バッテリーの保ち以外に勝るものが他のには無いからね。

なんだやっぱり iPodを選ぶんじゃないかと、書いて気付いたので迷わず BAD BOYを買ってこようと思います。BAD BOYの代わりは存在しないので。

* そのからくりは、昔から生活に運動が組み込まれていなくて、運動しないのが常態だからです。


2007年01月07日 (日) 掏摸。読めなかった。ふと原題が目に入った。FINGERSMITH。邦題の方が耽美な雰囲気があって好きだ。


2007年01月06日 (土) 1月2日に D言語 1.00 リリース

鼻から脳、出島、軍艦島

桜庭一樹 読書日記【第11回】を昨日読んだ。

鼻から脳のエピソードでは、語感の間抜けさと「さようなら、初恋」のミスマッチに笑いを堪えられなかった。

その後、桜庭氏が東京創元社の編集諸氏から「出島」と呼ばれている話が続く。

この話を読むまで、長崎の島と言えば出島しか知らなかった自分は、真似してこの作家を「出島」と呼ぶことはできない。

何の話なのかというとスラッシュドット ジャパンで今日、 長崎の軍艦島、来春から一般公開へという記事が出ていたよ。へぇぇ。というだけのこと。

物を知っている人というのは自分の知っていることに関連づけて更に効率的に知識を増やしていけるのではないか、と。


2007年01月05日 (金)

[][Amazon]いつのまにか* ISBNが 13桁になっていた。ASINと 新ISBNは一致してないみたいだし、JAN(ISBN-13)を使って本を ItemLookupできるようになるのだろうか。

Amazonで ISBNと ASINが一致しなくなるのが一番痛い。ASINの桁数を増やしてくれるのが楽なんだけど、Amazonにとっては楽じゃないんだろうなあ。

気になる AWSでの ItemLookup。 従来は [An ASIN]の部分に単に ISBNを入力するだけで本の情報を得ることができた。

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService
   &AWSAccessKeyId=[Your Access Key ID Here]
   &Operation=ItemLookup
   &ItemId=[An ASIN]

これに

   &IdType=EAN

というパラメーターを付ければ ItemIdとして ASINの代わりに JANを指定できる。新しい 13桁の ISBNは JANと一致しております。やったね。ただし、

If you select SKU, UPC, or EAN as the IdType for your request, you also need to include the SearchIndex parameter.

(IdTypeに SKU, UPC, EANを選んだら SearchIndexも指定する必要があるよ。)

SearchIndex is required any time you select SKU, UPC, or EAN as the IdType for your request.

(上と同じ内容だけど any time you select EANと書いてあって、よりハッキリ。)

書かれているので、同時に SearchIndexも指定しなければならない。

Amazon.co.jpで許されてる SearchIndexの値は以下の通り

  • Electronics
  • Music
  • Classical
  • DVD
  • Kitchen
  • Software
  • VideoGames

以上。本がありませんね。

2006-11-14版の ドキュメントによれば JANを使って ItemLookupすることはできないみたい。

 amazon.co.jp アソシエイト・セントラルに答えがあるじゃない

https://affiliate.amazon.co.jp/gp/associates/network/help/t4/a7/

転載しちゃって良いかな?

自動化された方法、またはプログラムを組むことによって、13桁のISBNからアソシエイト・リンクを作成することはできますか?

はい、13桁のISBN(以下、新ISBN)への移行後は、Amazon Webサービスの一部である、Amazon E-Commerce Service (ECS) のシステムを利用して、新ISBNをもとにアソシエイト・リンクを生成することが可能になる予定です。Amazon Webサービスでは、現在、ItemLookupの機能を利用して、流通コードであるEANやJANをキーにしたデータ参照が可能であり、この機能に新 ISBNを使用したマッチングを追加する予定です。こちらのサポート開始時期につきましては、E-Commerce Serviceの開発者フォーラム(英語版または日本語版)や、ニュースレターによりご案内しますので、定期的にチェックされることをお勧めします。なお、Amazon Webサービスのご利用には登録が必要です。登録がお済みでない方は、こちらより登録IDを取得してください。

見覚えがあるから一度は読んだはずなのに。

* 2007年からです。知らなかったわけではありませんが、忘れていました。


2007年01月03日 (水)

[FF12]3、40時間ぐらいプレイして (現在、雪の降るブルオミシェイス)

本筋の戦闘はボスが倒せないなんてこともなく、かつ戦闘がダルく感じるほど敵が弱いわけでもない。そして、本筋とは関係ないモブは全滅させられるほど強い。お金は貯まりやすく減りやすい。どれもうまくバランスがとれていると思う。

序盤から、普通の敵に混じって倒せない敵がうろついてるのも好ポイント。ドラクエで橋を渡るときのような緊張感がフィールドに生まれている。本筋とは関係のない方向にどんどん歩いていって強めの敵と戦うこともできる。

 12月13日では書けなかったガンビットについて

ガンビットはプレイヤーが

  • いかにケアルを選ぶ手間を省くか
  • いかに盗むを選ぶ手間を省くか
  • いかに密猟を選ぶ手間を省くか
  • いかにたたかうを選ぶ手間を省くか

考えるためのシステムだと思う。

だから 12月に書いたようにタイミング良くボタンを押して攻撃をガードするというのは、ガンビットと方向性が反対向きなので FF12にそれを求めるのは無理だったかもしれない。

ところで

  • 今の手持ちの条件ではチャージを選ぶ手間は省けない。沈黙の味方にボキャル、猛毒の味方にポイゾナもできない
  • ボスに密猟をしかけないようにガンビットをオフにする手間も
  • 敵の弱点に合わせて使う攻撃魔法を選び直す手間も省けない

ガンビットの条件がさっぱり増えない。

一度レジストされたら同じ敵に二度目は仕掛けない賢さがあってもよかったのでは?そしたらボスに効かない密猟を延々しかけることもないし、レジストされることの多い補助魔法をガンビットに組み込むこともできるし。

 FF12の戦闘は面白いのか?

大味な印象であまり面白くない。

  • 敵の攻撃はかわせない。
  • 敵も味方も離れた敵に攻撃を当てすぎ。
  • そのくせ飛行タイプに分類される敵には、たとえその敵が降下してきていても攻撃を当てられない。
  • 敵と味方の間に割り込んでいっても敵の攻撃が背後の味方に届くので盾になれない。
  • だから HPの低い魔法使いは生き残れない。役割分担ができない。
  • 結局はコマンドバトル。立ち位置、移動に意味はない。
  • 敵味方で団子になって範囲魔法打ちっ放し、最後まで立ってた方が勝ち。

コマンドバトルなのが悪いわけではなく、無用な期待をさせるのが悪い。見た感じ、FFTの地形や高低差を利用したり、魔法の発動時間を考えて敵を誘い込むor押し留める戦略性やベイグラントストーリーのアクション要素を期待させるのにどちらも存在しない。

 ついでにアナログコントローラーDUALSHOCK2についての不満

PS2で導入されたアナログコントローラーの「アナログ」の意味するところDUALSHOCK2は(セレクト/スタートを除いた)ボタンの押し具合が 256段階で表されることだったと思うけど、RPGでアナログコントローラーDUALSHOCK2を使うと弊害が目立つ。

つまり RPGでは 256段階の微妙な押し具合を判別する必要があるのは稀で、殆どはどこかに閾値を設定してオン、オフの二つに分けるのだと思うが、この閾値が高すぎる。FF12を含めてプレイしたどの RPGも*。押してるつもりなのに押してないと判断されることが多くて疲れる。

 瀕死パワーアップ

やりすぎ。

攻撃、回復、MP回復のバランスを忙しく保ちながらボスの HPを削っていって、あとちょっとというところで必ず敵の攻撃が激しくなる。死者続出で、復活と回復に専念しても追いつかず、わずかな余裕を見つけて攻撃してみたらそれまでの半分以下のダメージしか与えられない。倒せないっての。

これじゃあ、余裕で倒せるか、倒せないかのどちらかしかなくなるって。(なんとか倒せそうだ、は大詰めで倒せないだと判明する)

 2007-01-11追記: ミストナックと召喚を

ミストナックと召喚を全く使っていない(覚えてすらいない)ことを書かなかったのはフェアじゃなかったかもしれない。存在を忘れていたよ。

ミストナックってそんなに強いの?

* そうでないゲームもあったかもしれないが記憶に残るのは不満のあったゲームだけ、ということで。