Hatena::Let

"Hatena::Let" でひとこと

8 fans

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

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

返信先のろまんば
感覚で言うとリフレクションが近そうだけど何か違う
noromanba

Hatena::Let

ヘッダの /* */ を // な行コメントにするやつ、不意に Internal Server Error 出るけど POST されてる現象起こるので微妙。user.js 兼用目的は 非 https で自動更新されない + 既定メタデータ以外拾わないので明確にオススメしない。@require も相まって地獄になってもうた
noromanba

Hatena::Let

返信先a-kuma3
Ten.Version HatenaStar.Version もう上がりそうにないんでいいと思います
noromanba

Hatena::Let

返信先a-kuma3
似たシーンよくあって、メソッド内の一部だけ上手く動的に書き換えるような仕組みってjs以外だとあったりしますか。
オリジナル取っといてオーバーライド -> 戻すだと結局コピペ多くなる問題。
# ワンちゃんパイセン言語造詣幅広そうなので。 ten-extra のヤバさはヤバい
noromanba

Hatena::Let

ここ公式ヘルプで相談所扱いになってるけど、困ってる・ハマってる人ほどヘルプ気づかない法則
# 現状の利用状況だと助けてくれる方々結構いるのに
a-kuma3
a-kuma3

Hatena::Let

ハイク界隈をにぎわせてるやつのやっつけ対応。
http://let.hatelabo.jp/a-kuma3/let/hJmfg_-o-rxf

本当は form.submit を横取りしたかったのだけれど、PC ページだと、Hatena.Haiku.EntryForm.submitAsync が呼ばれて、Ten.XHR で投稿されちゃうので、Form の onsubmit を指定しても意味がないという。

Ten.Class は、クロージャの中にメソッドの実装を隠しちゃうから、一部だけ書き換えるには、Ten.XHR の定義をコピって改変して上書きするしかないしなあ。
ページのリロードでリセットされちゃう Bookmarklet で、そこまでするか、っていう。
unarist

Hatena::Let

返信先unarist
あ、やっと理解した。コメントが途切れるんだ。pacochiさんのスターもそういうことだったのね...。
unarist

Hatena::Let

あれ、@includeの内容によって@javascript_urlが適用されなくなる?
c.f. http://let.hatelabo.jp/unarist/let/hJme-9yZ3b0r/rev/hJme-9yck8Rd
unarist

Hatena::Let

微妙にminifyされてるのでメモ。
http://let.hatelabo.jp/pacochi/let/hLHW8svRzY8o

1. observe('.columns-area>div:nth-child(4)', {childList}); で4列目の追加削除を監視
2. f: observe(タブ,{attributes})で一度表示したタブの表示非表示を監視、現在のタブ(n)に.status-listをセット
3. a🔇: 前の監視のdisconnect、現在の...現在の?タブのdisplayとclassNameをリセット
4. a🔈: 即時適用とobserve(n=.status-list, {childList})
5. x: 各種テキストをつないでテストしてdisplay:none設定。一度舐めたら.viewedをつけるが無効化時はこれも消える

愚直にaddedNodes見てたけどquerySelectorAllしなおした方が楽だな...
c.f. https://gist.github.com/unarist/ce93c77eee6ff9bf51491ff06a3109d3
unarist

Hatena::Let

backurlが修正されない代わりにhatelaboのログイン画面が新しくなってる・・・。
unarist

Hatena::Let

結論としては、何故かbackurlに https://let.hatelabo.jp を指定しているLet側が悪かった。
userscript: https://gist.github.com/unarist/5912a1d60239961059b63ffc3b9c6a89

でも https://let.hatelabo.jp/xxx から http://hatelabo.jp/xxx にリダイレクトするのもちょっと変だと思う。
unarist

Hatena::Let

Hatena::Let、というかはてラボのログインページ、backurlのオリジン部分を無視するのいいかげんどうにかならんのか。どうもならんだろうな。

* let.hatelabo.jpからログインするとhatelabo.jpへ
* let.hatelabo.jp/user/xxxxからログインするとhatelabo.jp/user/xxxxへ (404)
unarist

Hatena::Let

返信先のろまんば
最初と最後の行を捨てればいいってのは賢いですねえ。今度うちのUserScriptでも真似しようかな。
noromanba

Hatena::Let

返信先のろまんば
hredoc これだ、懐かしい
siteinfo regexp demo - Hatena::Let
function commentToText(commentFunc) {
return commentFunc.toString().replace(/^.*?\r?\n/, '').replace(/\r?\n.*?$/, '');
}
> https://github.com/to/tombloo/blob/d040ea4/xpi/chrome/content/library/01_utility.js#L2489
▼はてなハイクの今月のスポンサー

規約違反を通報

非表示設定

表示内容を選択