ストアマッチって・・・

Yahooショッピングで商品検索とかしたときに、右側あたりに「ストアのイチオシ」とかいう広告が出るのだけど、それって、バリューコマースがストアマッチというクリック課金サービスで提供している。N2ショッピングでそれを利用している。そんでもって、こいつの不具合に結構悩まされる・・・。

http://blogs.yahoo.co.jp/n2_shopping/5032734.html

http://blogs.yahoo.co.jp/n2_shopping/5284491.html

http://blogs.yahoo.co.jp/n2_shopping/7144569.html

http://blogs.yahoo.co.jp/n2_shopping/7344254.html

http://blogs.yahoo.co.jp/n2_shopping/7393461.html

まぁ、不具合に遭遇するのは仕方がないと思うのだけど、そもそもストアマッチのサポートとやりとりすると、なぜか、こっちがストレスがたまるのだよね(っていうか、顧客側がストレス溜るのっていいのか・・・)。という感じで疲れ気味。

仕組み的なところを見てみると、ストアマッチでは広告のリンクをクリックすると、meta タグでリダイレクトする HTML を表示して、転送している。一方、AdWords や Overture は 301 や 302 を返して、飛ばしているみたい。ストアマッチでは、meta タグで飛ばしているので、例えば、wget とかで飛ばすHTMLを取得すれば、実際のページに行かないでも課金されると考えられる(だから、アクセス数誤差の問題が発覚しやすい)。

そんな感じで、誤差問題については、クリックされる広告のだいたい10%はそれかなっという感じでしょうか。無駄な費用を取られるのも何なので、もっと賢くやってほしいと思う今日この頃。

String

String.java を見てみる。String は value(char配列), offset(valueの開始ポイントでint), count(文字数でint)を保持する。これらは final なので変更できない。基本的に、new したときにoffsetは0でvalueのchar配列に突っ込む。興味深いのは、substringしたときは、効率をあげるため、元のStringのvalueを利用して、offset で調整する(ということは、でっかい文字列をsubstringして、そのStringをセッションに突っ込んでおくと、でっかい文字列が保持されるのだろうか・・・)。この処理は、substring内でプライベートなコンストラクタを呼んでやっている(他にも呼ぶ場合があるのかもしれないけど、そこまで見てない)。

Integer

Integer.java を見てみる。Integerは、value(int)を単純にラップしているっぽい。このvalueはfinalだから変更できない(どおりで++とかないわけね)。前にも見たことがあるのだけど、-128~127のIntegerが必要ならvalueOfを使うと、キャッシュのIntegerを使ってくれる。1.5から導入されている “bit twiddling” メソッドあたりとか、こまごまとしたメソッドがあるので、社内勉強会で説明してもらおうっと。