Hatena::Let

"Hatena::Let" でひとこと

9 fans

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

noromanba

Hatena::Let

これからFirefox ESR 52組のサポートで分断が起きそう
noromanba

Hatena::Let

返信先のろまんば
タイミング的に人間性チェッカー入ったときっぽい。リファラ入れてみたけどダメだった。どうもvalidなURLか見てるような挙動なんだけど、@include
http://* だと問題なさそうで謎
noromanba

Hatena::Let

@include、複数あったり、* 入ってると今まで問題なかったvalidなやつも保存できない。自動保存出来なかったり、HTTP
502返ってくる。自動保存自体も挙動が怪しい。
noromanba

Hatena::Let

久しぶりに書いたら@includeの判定さらにおかしくなってた
noromanba

Hatena::Let

返信先のろまんば
重い腰上げてリハビリだウオオオ
spin - Hatena::Let
# 現実逃避
a-kuma3

Hatena::Let

返信先a-kuma3

全てのブックマークのタブを追加するようにして、記事につけられたスターを表示するようにしてみた。

Twitter の click 数は取得しようと思えばできるけど、ツイートの URL を手に入れる手段がない (´・ω・`)
a-kuma3

Hatena::Let

返信先a-kuma3

ブックマークしたページのスターもつけようかと思ったのだけれど、スターの処理をやってる MutationObserver が邪魔をする (´・ω・`)

MutationObserver に通知が来たときに、Hatena.Star.EntryLoader.entries を空にして、追加されたノードで .entries を作っているので、同時に EntryLoader を動かすと、どれかの処理が抜けてしまう(entries.json の結果が返ってきてから .entries の内容と突き合わせて、スターの配置をしていくから)。

この問題は、素のままのコメント一覧ページにもあって、530 を超えるコメントがあるコメント一覧ページを表示した後に、ページ末尾まで飛んで、一回目の AutoLoader の処理が終わるまで上下キーを押してスクロールイベントを出し続けると、一回目の AutoLoader で読み込んだコメントのスターが展開されきる前に、二回目の AutoLoader の処理が終わると、一回目の .entries がつぶされてしまうので、スターがごっそり抜け落ちてしまう。

タブを増やして、スターの処理も自分でやらなきゃダメかな。


a-kuma3

Hatena::Let

返信先a-kuma3

http://let.hatelabo.jp/a-kuma3/let/hJmfy_yqmbJ2
一覧を作りなおすことにした。
タブを増やしても良いかな、とか思ったけど、スターの処理を MutationObserver がやってくれるので、そちらにお任せしようと。
# 短い命になりそうだし
a-kuma3

Hatena::Let

返信先a-kuma3

右側のアイコンのリストを、真ん中のコメント付きのリストに混ぜ込む、という戦略を立てたのだけれど、
真ん中のリストが AutoLoader になってる(早めに読み込まれるので気が付かなかった)ので、
右側のリストだけ増やしていくとコメントありをコメントなしと間違って、重複しちゃう。

一から作るしかないか。
a-kuma3

Hatena::Let

はてなブックマークのイメチェンで、コメントなしのブクマにスターがつけにくくなった
ネタは近くにあるので、Bookmarklet で対応できるとは思うものの、如何せん場所がキツキツ。
どうしたものか(お題提供 :-)
noromanba

Hatena::Let

「俺、夏休みの課題終わったら赤ペン先生するんだ…いっぱい Fork して…自分のもメンテしてさ…きっと待っててくれるよな…
noromanba

Hatena::Let

返信先unarist
ぼくの好む書き方は暗黙変換使ってるので微妙だとは思います。黎明期みたく [].join(',') すればいいけど見辛くなるのがネック。セレクタAPIまでグローバル汚染あるのか…結構古いハックですね
unarist

Hatena::Let

のろまんばさんのこれ http://let.hatelabo.jp/noromanba/let/hJme3Pyylqos がthehackernewsで動かなくて、調べてみるとCloudFlareがdocument.querySelectorを横取りしていて、文字列でない可能性を一切考えず引数をsplit(',')していた。ううむ。
unarist

Hatena::Let

既にありそうですけど、Hatena::Let に CodeMirror を組み込んでみました。
https://gist.github.com/unarist/1fb6ce33daa34ecdbd5f2060d32c65a3
配色は完全に好みなのでなんか適当に。
noromanba

Hatena::Let

返信先a-kuma3
知ってる範囲でおぼろげですが、最初 AOP 流行った頃だと、設計から AOP で ログインセッション取り回しラク〜
みたいな感じで、共通語で言う weave かなと思います。後付けとか二次三次で入れてくのは見たこと無いですが、あったかもしれませんね。
AOP、最近一部で見直されて、軽量な言語でやってたりするので楽しみです
# お題期待してる人達意味分かんないと思うけどハイクの仕組みだから勘弁して
a-kuma3

Hatena::Let

返信先のろまんば

>何にせよ粒度が細かくなんないと外部からは辛いっすね
素性正しく作ると OOP は、予想外の仕様変更に強い。
普通に継承と委譲だけで結構どうにかなっちゃうところに、後付けでちょろっと変更できる手段も用意されてると嬉しい場面があったり、という感じか。

AOP は、おんぼろ煙突なコードに手を入れる際の一発目としては有効なケースも多々あったんだと思います。
そのころって、大手が J2EE に突貫してコードを量産したものの、期待していたほど再利用も難しければ、保守性も向上しない。
そんな煮詰まり感が漂い出したころの次の一手という期待感があったのかも。

ただ、二発目、三発目と続くと、とっちらかった感じは元のコードの何倍にもなったでしょうから、こりゃあなあ、という感じだったのかな。
きちんと OO できる人には、元からちゃんとやっておけば要らんじゃん、という感じだし。
noromanba

Hatena::Let

返信先a-kuma3
特異~・モンキーパッチ・ダックタイプあたりですね。何にせよ粒度が細かくなんないと外部からは辛いっすね。
AOP、 javassist のバイトコード書き換えとかヤバいなコレよく担保されるな、後発の C# はまだ安心な感じという思い出。
# [emoji:B56]コミッタになれば解決!
ajeetping
a-kuma3

Hatena::Let

返信先のろまんば

メソッドの一部ではないですけれど、Ruby の特異メソッド定義は、javascript のメソッド書き換えとできることが同じです。
https://docs.ruby-lang.org/ja/2.0.0/doc/spec=2fdef.html#singleton_method

他にもやり方はいろいろあるらしい。
https://blog.kazu69.net/2014/11/23/examined-how-to-override-monkey-patch-methods-in-ruby/

Python も似たようなことができるっぽい。


言語の範疇ではないですけれど、java のバイトコードを書き換えちゃう Apache BCEL とか AspectJ とか。
アスペクト指向とか一瞬 流行りかけたような気もしますが、やっぱり使いどころが難しいというか主役をはれるような玉ではなかったというか。

C# でも似たようなことができるだろうと思って探してみたら、やっぱりあった。
http://urasandesu.blogspot.jp/2011/10/c-apply-monkey-patch-to-any-static.html#hello_profiling_api


そういえば、java には JVMPI とか JVMDI があったなあと思ったら、古かった (´・ω・`)
https://docs.oracle.com/javase/jp/6/technotes/guides/jpda/

c で書かなきゃいけないのは変わらず。


(続きを読む)
noromanba

Hatena::Let

返信先のろまんば
感覚で言うとリフレクションが近そうだけど何か違う
▼はてなハイクの今月のスポンサー

規約違反を通報

非表示設定

表示内容を選択