Debug- Official Website -


犬土偶日記

海の近くに住みたい

Debug日記の使い方

話題:Webプログラミングとか

2009年07月06日

タカハシアイ

公開日時: 2009年07月06日 21時45分50秒

昨日の日記を書いてしばらくしてから高橋愛の写真集『私』の付録DVDを見た。疲労が激し過ぎて何もやる気になれなかつた。一通り見終つてから、DVD『I.』のオーディオコメンタリーをまだ聴いてゐないことを思ひ出した。DVD買つても1回しか見ないことが多い。ここでスルーしたらもう二度と見ないかもしれない。といふわけで、『I.』を再生することにした。メニュー画面でオーディオコメンタリー(副音声)をONにして再生した。最後まで見た。心が和む。愛タンは犬みたいだな。

DVD見終つたらもうすぐ朝になりさうな時間になつてゐた。inuzonの改造をすることにした。AmazonのWeb APIはすぐに名前や仕様が変る。AWS(Amazon Web Service)からA2S(Amazon Associates Web Service)になつたと思つたら今度はAmazon Product Advertising APIといふ名前に変つた。今回の変更はずいぶん鬱陶しい。これまでのリクエストに認証のための電子署名を含めなければならなくなつた。今は移行期間なのでつけなくても良いのだが、8月15日からは署名無しのリクエストは弾かれることになる。早めに対応せねばならん。これが実に鬱陶しい。AmazonのサーバーにAWSのアカウントIDやらリクエストパラメータを送ると商品のデータをXMLで返してくれる。それを煮るなり焼くなり好きに使つてWebアプリを作れるといふAPIだつたんだが、このリクエストに署名を付けなければならない。署名と言つても「犬土偶」とか名前を付けるわけではない。蛮族語で書かれたマニュアルを適当に読むと、リクエストにタイムスタンプを追加して、それをSecret Access Keyを使つて暗号化して作成した署名をリクエストの末尾に追加する必要がある。タイムスタンプはISO8601形式(GMT)。署名はSecret Access Keyを鍵にしてSHA-256のハッシュを使つて作るHMAC。よく分からんな。取り敢へずタイムスタンプを追加したリクエストのパラメータをまづアルファベット順にソートし、URLエンコードする(RFC3986)。そして、「GET」「ecs.amazonaws.jp」「/onca/xml」を改行で繋ぎ、その後にさらに改行に続けて、ソートしてURLエンコードしたリクエストパラメータをつける。その4行の文字列をSecret Access Keyを使つて暗号化し、HMAC-SHAを得る。それをさらにBase64にエンコードしたものが署名になる。リクエストURLの最後にSignature=*******といふ具合にこの署名をつける。大変だ。本当に大変だ。まづタイムスタンプを追加するために現時刻を取得するところから。暗号化する関数とか必死に探して苦労して作つてみた。早速自分のPC内で動かしてみる。動かん。変なエラーが出る。inuzonのTOPは表示されるのだが、検索フォームに「高橋愛」と入れるとエラーが出る。署名を追加するfunctionを呼び出す部分をコメントアウトすると動く。といふことはそのfunctionのどこかがをかしい。まづ署名を追加したリクエストURLを作成したところでプログラムを止めてそのURLを表示するやうにしてみた。デバッグプリントといふやつだ。1行づつ確かめていくしかない。で、作成されたURLを見ると特にをかしい感じはしない。そのURLをブラウザに直接コピーしてみた。さうしたら署名が間違つてゐるので受け付けませんといふやうなエラーが書かれたXMLが返つて来てゐた。をかしい。何も間違つてゐないはずだ。ここから数時間苦しむことになる。

散々色々試してみて、日本語で検索すると100%エラーが出るが、日本語を使はなければOKだといふことが判明した。といふことは文字コードの問題か。もしくはURLエンコードの部分か。最初にkeywordsといふパラメータをHTMLフォームから受け取つて文字コードを変へ、URLエンコードしてゐる。Amazonへのリクエストは全てUTF-8でなければならない。inuzonはEUC-JPで書かれたスクリプトで、内部エンコーディングもEUC-JPになつてゐる。そしてブラウザへの出力がShift_JIS。非常に鬱陶しい。Shift_JISのフォームから送られてくるデータはShift_JISのはず。それをUTF-8にエンコードしてAmazonに送つてゐる。署名をつけない場合はそれで通つてゐる。といふことは署名を作成する間に文字コードが変つてゐるかもしれないといふことだ。署名作成部分でURLエンコードをしてゐるので、二重にエンコードしないやうにフォームから受け取つた時にエンコードする部分は削除した。エンコード済みのやつはエンコードされないはずだからその必要は無いんだけどな。何をやつても上手く動かない。日本語だと必ずエラーが出る。英語だとエラーが出ない。どこがをかしいんだらう。また色々とコメントアウトしたりしながら1行づつ調べて原因を探る。署名作成しない場合のリクエストURLと署名付加時のリクエストURLを比べてみることにした。それぞれ『高橋愛』で検索して結果を得る。URLエンコードすると日本語は%の後に2桁の16進数(0〜9, A〜Fの15種類の文字で1桁を表現する数字)といふ形になる。UTF-8にエンコードしてからURLエンコードする。署名無しでもありでも同じはずなのだが、調べてみたらkeywordsパラーメータのURLエンコードされた文字列が全然違つてゐた。そのURLエンコードされた文字列をURLデコードしてみたら、どちらも「高橋愛」になつた。といふことは、どちらも「高橋愛」だが文字コードが違ふといふことだ。フォームからShift_JISの文字列を受け取つてすぐにUTF-8にエンコードしてからは文字コードを変へる部分は無い。といふことは、どこかの関数内で勝手にやつてゐるといふことだらう。リクエストURLを分割して必要な要素を取り出すためにparse_urlといふ関数を使つてゐる。リクエストパラメータを分割して処理するためにparse_strといふ関数を使つてゐる。たぶんそのどちらかの中で勝手に文字コードを変換してゐる。恐らく内部エンコーディングのEUC-JPに。PHPのマニュアルを適当に見てみたがそれらしい記述は無かつた。じつくり見てないけど。まあそれらの関数内で具体的に何をやつてゐるか調べなくてもプログラムを弄つて確かめれば済むことだ。パラメータ名がkeywordsの時はUTF-8にエンコードしてパラメータを繋ぐといふ条件分岐を入れてみた。で、動かす。動いた。やはりどこかの関数内で勝手に文字コードを変換してゐるらしい。日本語が入る可能性のあるパラメータはkeywordsだけだつたと思ふのでこれで良いだらう。何度も色んな日本語で検索して無事に動くことを確認し、サーバーへアップロード。Amazonへリクエストを送つてデータを取得するクラスを修正してアップしたのだが、ついでなのでinuzon本体のスクリプトもアップしておいた。これは弄つてゐないが、昨日まで動いてゐたやつよりは新しいバージョンだ。3月に昨日までのバージョンをアップした後、すぐに(たぶん翌日ぐらゐに)少し機能を追加したのだが、ショボいのでもつと色々付け足してから更新しようと思つてそのまま放置されてゐた。結局それから何も変つてゐないのだが、今までと少し違ふのでこの機会に更新しておいた。何が変つたか分かるかな。検索結果のリストにおすすめ度が表示されるやうになつた。別にどうでもいいけど。すげえ疲れた。もう朝。

眠くならなかつたのでパチ屋へ。地獄の始まり。勝つても負けても時間の無駄。朝から緑ドン。高確移行率なんかを見ながら勝負。最初だけ良い感じ。ボーナスは全然引けないが元々確率が低いので少ないゲーム数では判断不能だ。しばらく我慢して打ち続けた。打てども打てども当らない。設定差のあるボーナスが全くと言つて良いほど出ない。そして少し遅れて来た客が左隣で打ち始め、これが無残に設定6の様相。設定6の2倍ぐらゐのペースでBIGもREGも引きまくり、当然ARTは最初から連荘しつぱなし。すげえよ。夕方まで続いてたよ。俺が5000G回してもうダメだと判断して逃げる時もまだ続いてゐた。ARTが60連以上してその間にBIGもREGも引きまくりで一撃6000枚以上。どうなつてゐるんだ。俺は悲惨の一言。5000G以上も回してBIG10回とREG2回。設定を大幅に下回る。いつも通りだな。もつと早く見切つても良かつたのだが、一昨日かその前にそれで失敗してゐるからな。いや、あの時も5000G回して見切つたんだつたな。もういい。ヤメ。ウンコでも食つてろ。

休憩所で読書。昨日の夜から起きてゐるのでアホみたいにキツい。眠過ぎて死にさうだ。これはもうダメだ。家に帰る。明日は早くから並ばねばならん。といふわけで、読書は途中でやめた。そして緑ドンのシマへ。やはり俺の隣が猛爆するのは俺を悔しがらせるためなんだな。宇宙が不正を働いて隣を不当に出してゐる。履歴を見たら俺がやめてすぐに連荘が終了した感じだつた。そして俺が打つてゐた台。2時間でBIG5回、REG2回も追加してゐた。俺が全速力で7時間打つてBIG10回REG2回だつたのに。俺が打つてゐる時は宇宙が不正を働いて不当に当らない仕組みなんだな。死ね。ウンコ食つて死ね。ウンコで溺れろ。便所でウンコに顔埋めて窒息死しろ。死ね。苦しんで死ね。とにかく死ね。今死ね。すぐ死ね。たちどころに死ね。

パチ屋を出て少ししてから急激に雨。死ね。最初から雨ならカッパ着て濡れずに済んだのにパチ屋を出て少し経つてから降り出す悲劇。これでもまだ狙はれてないと言ふ奴がゐたら絶対に頭がをかしい。確実に狙はれてゐる。そんなに俺が怖いのか。苦しんで死ね。家に帰つたら一気に疲労が噴出。動けん。気絶寸前。でも飯を食はねばならぬ。無理して飯を食つた。食ひ終つてからしばらく動けなかつた。食器を洗はうと思つて立ち上がる時に力が抜けて椅子に叩き付けられた。立てん。何だこれ。あり得ん。気分も悪い。折角食つた飯を吐いてしまひさうだ。こんな状態で寝たら二度と起きないんぢやないかと思へる。しばらく休憩してから食器を洗ひ、コーヒーを入れて自室に戻つた。早めに日記を書かないと大変なので、何も考へずに猛烈な勢ひでタイピングしてゐる。例によつて推敲せずに更新する。どうでもいい。果てしなくどうでもいい。ウンコ舐めて死ね。風呂入つて寝る。明日は7月7日だ。七夕だ。激甘釘がそこら中にあるはずだ。牙狼で激しくリベンジする。牙狼に甘釘が無かつたら北斗だ。そこにも無かつたら歯を食ひ縛つて海だ。慶次?打たぬよ。エヴァを打つかもしれん。まあたぶん牙狼の甘釘台を取れるだらうと思ふ。朝起きれればな。これが何より難しい。そのためにも早くこんなクソ日記を書くのは終らせる必要がある。ウンコ食つて苦しんで死ね。アッヒャー!

話題:Webプログラミングとか

Info.
公開日時2009年07月06日 21時45分50秒
本文文字数4658文字 (タグ込み)
URLhttps://orca.xii.jp/debug/diary/diary.cgi?id=dogoo;date=20090706
RSS1.0https://orca.xii.jp/info/diary-dogoo.rdf
Comments

コメントはありません。

コメント投稿フォーム
文字色              
  • 名前を省略すると「名無しDebugger」になります。
  • メールアドレスの入力は任意です。
  • 海外からのコメントスパム対策のため、表示された漢字の読みを必ず入力してください。
  • 本文は必須項目です。投稿する場合は必ず記入してください。タグは使えません。
  • 改行が1つ入力された場合は強制改行として処理されますが、2つ以上連続する改行は段落の終了として処理されます。
  • 本文の行頭に「>」のある文は引用としてマークします。引用でない部分の冒頭に「>」は付けないでください。
  • コメントの削除は管理者若しくは日記執筆者しかできません。書き込む時は注意しましょう。
  • 全部記入が済んだら投稿ボタンを押す前に一度読み直して推敲しましょう。