a-kuma3 はてなハイク市民 (プラチナ 1,780日)

a-kuma3さんのエントリー

id:a-kuma3のミニブログ

61 fans

書き込むには、ログインまたはユーザー登録を行ってください。 初めての方へ

a-kuma3

ビール部

カジカさん、アクセサリーを取り忘れ。
f:id:a-kuma3:20180422161326j:image

味噌汁と塩焼きでいただきました。
f:id:a-kuma3:20180422195326j:image
a-kuma3

Hatena::Let

返信先のろまんば

>Proxyカッコイイ
コンストラクタの場合、handeler.apply じゃなくて hander.construct があるのが 良いなあ
a-kuma3

Hatena::Let

返信先のろまんば

this を気にして使うんだったら、Reflect を使うのが正解、ってんじゃないような気がする。
target[prop] か、receiver[prop]なだけで。

getter/setter で、Proxy 自身が手に入る意味は分かったけど、これは難しいな。
a-kuma3

ビール部

明るいうちからのビールと焼肉。幸せ :-)
http://cdn-ak.f.st-hatena.com/images/fotolife/a/a-kuma3/20180421/20180421165359.jpg
a-kuma3

Hatena::Let

返信先a-kuma3

>気になってる動作があるので、
Reflect.get の receiver とは、関係なかった。


XHR の responseText を改変したくて、こんなコードを書きました。

const xhr = new Proxy(original_xhr, {
 get: (target, prop, receiver) => {
  let v = target[prop];
  if (prop === 'responseText') {
   // prevent preload images.
   v = v.replace(/<img src=/g, "<img data-src=");
  }
  return v;
 },
});

この xhr は、後で getResponseHeader() が呼ばれるのですが、そこでこんなエラーが出ちゃう。
TypeError: 'getResponseHeader' called on an object that does not implement interface XMLHttpRequest.

まあ、メッセージの通りではあるんですが、こんなチェックが入っているんだなあ、と。

メソッドの getter も改変することになりました。
xhr = new Proxy(original_xhr, {
 get: (target, prop, receiver) => {
  let v = target[prop];
  if (prop === 'responseText') {
   // prevent preload images.
   v = v.replace(/<img src=/g, "<img data-src=");
  } else if (typeof(v) === "function") {
   const method = v;
   v = function() {
    return method.apply(target, arguments);
   };
  }
  return v;
 },
});

# 不細工 (´・ω・`)


a-kuma3

パスタ部

先週つくったマッシュルームのアヒージョを使ったパスタ。
f:id:a-kuma3:20180421122017j:image

その前に作ったホワイトマッシュルームを使ったアヒージョよりも、今回のブラウンマッシュルームを使った方が美味しくて(キノコの差だと思う)、パスタも美味しくできました :-)、
a-kuma3

Hatena::Let

返信先のろまんば

Hatena::Haiku::Search ってサービスがお亡くなりになって、やっぱり不便で、MutationObserver 使って、強制的に Auto Pagerize を発動させつつ、関係ない投稿を消し続けるという Bookmarklet を書いたことがありまして、そのときに ten-extras.js は ちょっと読んだことがあります。

MutationObserver を使ったやつは、Star の処理とかも入るのでかなり遅くって、速くしたいなあと思ってたんですが、この Proxy で Hook するのはかなり軽くできそうです :-)
a-kuma3

Hatena::Let

返信先のろまんば

なるほど。
気になってる動作があるので、後で確認してみます。
a-kuma3

はてなブログ

返信先のろまんば

あ、「変更する」ボタンが表示されてる。
f:id:a-kuma3:20180421114156p:image

ハイクったときにはボタンが表示されていなかったような気がしたけど、気のせいだったかな...
a-kuma3

タモリ倶楽部

京急の回送が目の前を過ぎると、先頭車両に南田とかダーリンハニーが乗ってるかも、とか思って見ちゃうもんな :-)
a-kuma3

はてなブログ

返信先a-kuma3

>ネックは、はてなスターとはてなキーワードな気がする。
はてなキーワードは、やっぱりというか http なままだ。
金を払ってキーワードリンクを無効にしろ、と。

ただ、[]https://d.hatena.ne.jp/[] が(status 200 とはいえ)Location: で []http://d.hatena.ne.jp[] に飛ばされているので、もしかしたらやる気になってるのかも知らん。
# リダイレクトは、前から?


で、全てのブログで使えるって?
f:id:a-kuma3:20180419114424p:image

# なんの地雷を踏んでいるんだか...
a-kuma3

Hatena::Let

返信先a-kuma3

Reflect は、Proxy とペアで使うと、Proxy に指定するハンドラと引数が同じだから、気持ち良いよね、っていうことかな。
気持ちは、分からんでもない。
a-kuma3

Hatena::Let

返信先a-kuma3

書いてみた。
http://let.hatelabo.jp/a-kuma3/let/hJmc2r6j5rMx

Auto Pagerize では、http://h.hatena.ne.jp/js/updu/ten-extras.js の TL.DataSource.TimelinePage.prototype.loadData で XHR でデータを取り、ひとつの投稿を TL.Entry というクラスにラップして、後の処理で一覧に埋め込んでる。
処理を横取りするところはいくつかあるけど、constructor を Hook してみたかったので、見せたくない投稿は内容を空にする、という処理をコンストラクタに埋め込んでみた。

apply は、名前通りの Proxy パターン以外にも、Decorator パターンとか、Chain of Responsibility パターンで使えそう。

どちらも、Function がグローバルスコープになってないとダメなので、今どきのパックされてるやつだと使えないかも、という気はしてるけれど、アドオンだったら、ちょっと違うかも(無理かな)。
a-kuma3

Candy Crush Saga

バブルガムヒルが開始した直後のキングは、バブルガムトロル(そりゃそうか
f:id:a-kuma3:20180417222712p:image

一番乗り :-)
f:id:a-kuma3:20180417222727p:image

でも、速攻でキングの座を奪われ、1G しか獲得できなかった orz
a-kuma3

その報告はしなくていいです

十年超えたら一年車検って、もう過去のことなのですね。
二十年以上前に改定されてた。
a-kuma3

Hatena::Let

返信先のろまんば

Proxy は、Proxy じゃないとできないことがあるけれど、Reflect は、それがないとできないことがあるのかな、って。
何度か使ってみないと分からないかな
a-kuma3

Hatena::Let

返信先のろまんば

Extending Constructor むずかしい。
class の extends あるから、あくまでもサンプルなんでしょうが。

理解がおっつかないという意味での「お腹いっぱい」なので、既存のコードのすげ替えには便利なはず。
Proxy は、インスタンスが、元ネタと違うので、それを置き換えられれば、というところ。
constructor のすげ替えは、Proxy じゃないとできない(はず
a-kuma3

Hatena::Let

返信先a-kuma3

この感じ、どこかで見たことがあると思ったら java.lang.reflect.Proxy か。
デザパタの Proxy というイメージがあまりなくて、これは Hook だ、と思った記憶が。
a-kuma3

Hatena::Let

返信先のろまんば

Proxy のサンプルだけでお腹いっぱい(というか、消化不良気味

Reflect の方は便利さがイマイチ分かってない。
リフレクションにあたるメソッドや構文が散らばってるので、集めてみました的な感じなのかな...
a-kuma3

noromanba のろまんば

返信先のろまんば

本人が入力をしないシステムだとして、こんな選択肢があるものもある。
- 未設定
- 男
- 女
- 指定しない
- 男だけど女
- 女だけど男

生物学的な性別が重要だけど、社会システムとしての性別も大事、みたいな。
「だけど」のやつは、戸籍上の氏名と別の名前を表示したりもする。
▼はてなハイクの今月のスポンサー

表示内容を選択