| @技術/プログラミング

糸島の海

自作の Lokka プラグインに Amazon の Product Advertising API に問い合わせてアフィリエイトリンク付きの商品画像を返すやつがある。 Amazon 上の商品管理番号を <!-- ASIN=XXXXXXXX --> みたいな感じで本文中に書いとくと良い感じに小銭を稼げるかたちのリンクにして画像を表示してくれるという便利なやつ。

Amazon の規約上、 Amazon Product Advertising API に対しては一秒間に一リクエストしか送ってはいけないことになってるので、データを取得する度に 1 秒 sleep するようにしていたけど、一ページ内で複数のリンクがあるときにキャッシュがエクスパイアして Amazon の API を叩くとめっちゃレスポンス遅くなってださかったので非同期で取るようにした。ページコンテンツ本体はサクッと返して、商品情報などの取得はページがレンダリングされたあとに JavaScript で行う。 Amazon から JSON を取ってくる処理自体は Ruby にやらせる。

+----------+            +----------------+             +--------------------------------+
|          | +--------> |                | +---------> |                                |
|  client  |            |  Ruby (Lokka)  |             | Amazon Product Advertising API |
|          | <--------+ |                | <---------+ |                                |
+----------+            +----------------+             +--------------------------------+

最初は雑に body の innerHTML を正規表現で replace したりしてたんだけど、そうすると Twitter のウィジェットなど本文内に埋め込んである script タグが動かなくなる問題に気がついた。 HTML 5 の仕様で、 innerHTML = で挿入されたコンテンツの script タグは無視されるらしい。なるほど〜。

ということでもうちょい調べたら DOM には Node.nodeType というプロパティがあって、COMMENT_NODE など type を持っているらしい。

<!-- ASIN=XXXXXXXX -->COMMENT_NODE として扱われるので、こいつの後ろに document.createElementして JavaScript で動的に生成された要素を突っ込むようにした。 Promise を使ってナウでヤングな感じに書いた。

let promise = new Promise(function(resolve, reject) {
  request.open('GET', url);
  request.onreadystatechange = function() {
    if (request.readyState != 4) {
      // リクエスト中
    } else if (request.status != 200) {
      // 失敗
      reject(request.response);
    } else {
      // 取得成功
      let formatter = new Formatter(request.response);
      let result = formatter.formatItem();
      resolve(result);
    }
  };
  request.send();
});
promise.then(function(result) {
  let previous = node.previousSibling;
  let parent = node.parentNode;
  let d = document.createElement('div');
  d.className = 'amazon';
  d.innerHTML = result;
  parent.insertBefore(d, previous.nextSibling);
}).catch(function(error) {
  console.log(error);
});
return promise;

意地でも jQuery 使うまいと思ってやってみたけど意外と大丈夫だった。楽をせずに素の JavaScript を書いていると精神が浄化されるような感覚があってよい。写経に通じるものがある。写経やったことないけど。

| @技術/プログラミング

むかしやってた映画のブログ( WordPress )のデータをこのブログに取り込もうとしたら、 mysqldump しといたデータが文字化けして読めなかった。 映画ブログのデータベースの文字コードは utf-8 にしてたけど、 Dreamhost の MySQL サーバーの defualt-character-set がおそらく latin1 になっていたと考えられ、 mysqldump するときに utf8 のデータが latin1 として export されてしまい文字化けを起こしていたっぽい。

vim で開いて e ++enc=utf8 してみたり、 nkr で変換しようと試みたり、ググって出てきた Perl のスクリプトで変換しようと試してみたけど直らなかった。この変換は MySQL 自身にやらせないとダメなのではと思い、以下を試したがダメ。

  • [x] latin1 で DB 作成し latin1 で import 、 utf8 で export
  • [x] latin1 で DB 作成し utf8 で import 、 utf8 で export

結局、 Stack Overflow にあった以下の方法で解決できた。

一旦文字化けしたまま utf-8 の文字列として import し、以下の SQL を流す。

UPDATE [table_name] SET [column_name] = CONVERT(BINARY CONVERT([column_name] USING latin1) USING utf8);

やっぱり MySQL で化けたデータは MySQL で直すしかないみたいだった。

| @散財

先日買った Weber コンパクトケトル の感想。

ワンタッチケトルと勘違いしてコンパクトグリルの方を購入してしまっていた。

簡単なバーベキューをする分には問題ないが、グリルの深さが浅いため空気の量が不足し、温度はあまり上がらないみたい。ステーキ肉を焼いてみた限りだと火力に不足はなかったが、コストコで売ってるような巨大な塊肉をローストするのには向かないっぽい。

見た目に関しても、リンゴのような丸みのワンタッチケトルの方がエレガントに見える。近所のバーベキュー屋や金持ちの家にあるのはそれで、買ったけど何かださいなぁ、思ってたのと違うなぁと感じてたけど、似た別の製品を買っていたということだった。

加えてなによりも大きいのが灰を掻き出すシステムの違いだ。こちらは排出フィンの取っ手が本体下部に付いているため、開け閉め時に耐熱手袋をつけなければならない(初めて使ったとき勝手がわからず手を火傷してしまった)。ワンタッチケトルの方は長さのあるレバーが付いていて素手でもフィンの切り替えができる。便利極まりなさそう。

さらにフィンの形状がコンパクトケトルに比べてより積極的に灰を掻き出すような構造になっており、ただ穴が開いたり閉じたりするだけのコンパクトケトルとは構造が異なる。穴が空いているだけだと底に溜まった灰を掻き出すことが難しい。掻き出し機構とセットになっているフィンは相当便利だと思う。

コンパクトグリルは名称にコンパクトと付いているが結構大きく保存場所はとるし、組み立ててしまった後では解体は難しくキャンプに持ち出せるようなメリットもない。値段もほとんど差がないのでどうせ買うならワンタッチケトルの方がよいと思う。自分はヨドバシでワンタッチケトルより少し安く売られているためコンパクトケトルを買ってしまったけど、 Amazon だったらワンタッチケトルでも同じくらいの値段で買える。

| @散財

森井ゴンザレスさん(@morygonza1ez)が投稿した写真 -

家から近い海沿いの金持ちの家やバーベキュー屋に置いてある黒色で円形のバーベキューグリルが突如として欲しくなってしまい、勢いで買ってしまった。コストコで激安販売されているというネット上の情報を目撃して行ってみたけど今は売っていないみたいで買えず、コストコの店内からヨドバシのオンラインショップで購入。翌日届いた。あいにくの雨でまだ火入れできていない。一緒にスターター(チムニーというやたら可愛い商品名)も買った。なんか火起こしが劇的に楽になるやつらしい。コストコで豆炭も大量購入しておいたのでバーベキューやるのが楽しみ。ただグリルを買うので散財してしまったのでバーベキューやるにしてもしばらくは肉なしかな…。

| @料理/食事

糖質制限やって(糖質制限で脱デブ成功しました)、体重は9kgくらい落ちた。現在だいたい71kgくらいで、休みの日に食べ過ぎたりすると73kgくらいになることもあるけど、71kg前後をキープできている。BMIも24前後で真人間。

糖質制限をやってよかったのは、白米や麺やパンを腹一杯食べなくても満足感を得られるということを体に覚えさせられたことだった。これさえ頭がわかっていれば太ることはないと思う。肉や乳製品をたくさん食べても、炭水化物を食べなければ不思議と体重は増えない。

糖質制限、なんといっても金がかかる。カロリーや満腹感を得るためには炭水化物が一番経済的だということがよくよくわかった。納豆のような安いタンパク質でも、それだけで空腹を満たそうとするとかなりたくさん食べなければならず、結構な金額になる。

炭水化物ばかり食べることで太ったり糖尿病になったりする。経済的に余裕があり糖質以外で空腹を満たすことができる金持ちの方が太らず糖尿病にもならず健康でいられる。

貧者の糖質制限としてはピーナッツが良い。ピーナッツはアーモンドやくるみ、カシューナッツで構成されるミックスナッツよりも糖質が多いが、ミックスナッツは何しろ高い。Amazonでまとめ買いしても結構する。100gで300円前後が相場。ピーナッツだど100gで100円くらいでコンビニやスーパーで買える。このくらいだと気軽に買えてよい。ピーナッツは糖質が多いとはいえ、100gも食べれば腹一杯になるので食べ過ぎることがない。結果的に糖質の摂取量を少なく抑えられる。とはいえミックスナッツはうまいのでお金持ってる人はミックスナッツ食べましょう。

| @WWW

The Old Reader

Google Reader 死んだ後、 The Old Reader 使ってる。 Feedly は高すぎてとてもじゃないけど使えなかった。無料で使うという手もあるけど、自分にとってフィードリーダーは気になるブログを放り込んどいて斜め読みし、後からおぼろげな記憶を頼りにキーワード検索して情報にアクセスする場所なので、全文検索できなかったら意味なかった。なので当然有料プランを利用することになる。

The Old Reader のプレミアムアカウントは安くて、初年度は年間 10 ドルで使える。見た目もスッキリしていてその名の通り古き良き Google Reader を彷彿とさせる。前 Feedly をちょっと試したときは UI がリッチすぎて重く使いたいという気にさせられなかった。このくらいシンプルな方がフィードのコンテンツを読むという用途には向いてると思う。購読対象のブログの UI がリッチすぎるので中身だけ手っ取り早く読みたくてフィードリーダーを使っているのだから、フィードリーダー自体の UI がリッチになっていったら本末転倒感ある。少なくとも自分にとっては。

The Old Reader はフィードの更新間隔がクソで、プレミアムアカウントのユーザーが登録しているフィードは 30 分おきにフィードをフェッチするとあるんだけど、全然そんなことなくて、平気で 4 時間遅れたりする。偏りがあって、頻繁に更新されるブログのフィードは頻繁にチェックされるけど、頻繁に更新されないブログのフィードはあまりチェックされないみたい。クローラーのつくりとしては正しいのかもだけど、利用者としては不満が残るなぁ。

| @料理/食事

チャーハン

turk というフライパンを買ってとても良かったと書いている人の記事を読んだ。確かに良さそうだった。

自分は去年、 T-fal のインジニオ・ネオという四枚セットのフライパン・鍋セットを買って、とても良かった。四枚セットで1万円しないくらい( Amazon のタイムセール)。 turk のフライパンに比べたら安いけど、自分的には十分高い。 T-fal のフライパン、前も買ったことあったけど4000円くらいするのに割とすぐテフロンはがれて焦げ付くようになったので、今回もそうなりはしないかと不安に思いながら清水の舞台から飛び降りる思いで買った。

南部鉄器のホットケーキ用フライパンも家にあってこいつも使うけど(分厚い肉を焼くときに重宝する)、異常に重いし深さが浅くて普通の炒め物に使うとどんどん中身がはみ出ていってしまってコンロがめちゃくちゃ汚れる。

それからすると T-fal は程よい深さで重さも軽くほとんど油ひかなくても焦げ付かない。当然炒め物してもはみ出ない。正直最高。インジニオ・ネオは高いと思ったけど、3500円くらいのバラ売りのT-falのやつよりも断然ものが良いと感じる。なんかチタンコーティングされてるっぽい。これまで使ってきたやつよりもコーティングのハゲの進行がゆるやかな感じがある。

インジニオ・ネオシリーズを気に入ってしまったので、ウォックパン(底が平らな中華鍋)を追加で買ってみた。5000円弱したけどこれも正直最高。 IH クッキングヒーターではうまいチャーハン作るの無理だと思ってあきらめてた(聖典にガスでやれとある)んだけど、T-falのウォックパン使うと野菜炒めもチャーハンも劇的にうまいのが作れる。野菜炒めは炒めすぎにならず野菜の食感を残すことができるし、チャーハンはパラパラになる。深さがあるので振っても具材が飛び出ない。

結論としては良い調理器具は良い。人生短いのだからフライパンくらい良いの買ってもいいと思う。僕も庭から二億円出てきたら turk 買ってみたい。