YouTubeの広告ブロッカーブロッカーの研究

自由研究 としてYouTubeが広告ブロッカーを検知する仕組みを調べていた。有名な広告ブロッカーを狙い撃ちにしているのかと思いきや、僕が 研究用 に作った簡易的なブロッカーにもちゃんと反応していた。

https://www.youtube.com/s/player/5ae7d525/player_ias.vflset/ja_JP/base.js より抜粋

    g.E.onClick = function(k) {
        k && k.preventDefault();
        var p, t;
        dDL(k, {
            contentCpn: (t = (p = this.api.getVideoData(1)) == null ? void 0 : p.clientPlaybackNonce) != null ? t : ""
        }) === 0 ? this.api.zb("onAbnormalityDetected") : (SA.prototype.onClick.call(this, k),
        this.api.zb("onAdSkip"),
        this.api.onAdUxClicked(this.componentType, this.layoutId))
    }

クリックイベントkをdDLに渡し、その返り値が0ならonAbnormalityDetectedイベントが発行され、その結果広告ブロッカーやめろ画面に遷移する。

    dDL = function(k, p) {
        var t = 1;
        k.isTrusted === !1 && (t = 0);
        a3("ISDSTAT", t);
        qO(t, "i.s_", {
            triggerContext: "sk",
            metadata: p
        });
        return t
    }

dDLの実装を見るとisTrustedがfalseなら0が返る。
https://developer.mozilla.org/ja/docs/Web/API/Event/isTrusted

ユーザーを意図しない操作から守るためにブラウザが提供している機能なので、これを出し抜くのは結構難しい。相当な荒業でやる方法はあるようだが、addEventListenerが実行される前にinjectせねばならずなかなか難易度が高い。
https://qiita.com/i11u/items/0a6d38966c75314bacba

Chrome extensionのdeclarativeNetRequestを利用してbase.jsがダウンロードされるときに該当箇所を書き換えてしまえばいいのではと思ったのだが、preload+service workerが使われている影響かbase.jsのGETを捕捉できなかった。あとはプロキシサーバーを立ててbase.jsだけすり替えるとかできるのかなあ。なんならChromiumをforkしてisTrusted機能を殺してしまうのもありかもしれない。Chrome拡張という配布のしやすい形を諦めるなら選択肢はいろいろある。

あくまで 研究 ですからね。私欲のために実行しませんよ。こういう研究をしていると広告が流れてくれた方が都合がいいのだが、そう思っているときに限って意外なほどに流れない。こんなに頻度低かったかな…?と思ってしまい、それなら別にいいやとなってしまった。逆物欲センサー(だいぶ昔の言葉になってしまったな)。

webサービスをどう設計するかは作り手の自由だが、それと同時に我々が自分の所有する計算機でどのような計算を行うかも自由だ。つまりはそういうことだ。

こういう漠然とやりたいことはあるけどどうやるべきかもどう書くべきかもわからない状況、雑にCline+Claudeに書かせておいてよくわからないところはCopilotに説明させてあーそういう意味ねと納得したりしている。Clineが大きなスコープでの作業を得意とする一方でCopilotはインライン操作が充実していて細かい部分について質問しやすい作りになっている。LLMの特性と言うよりはプロダクトとUIの特性だね。

20250228 樋

(インターネットに書くとわかる人にはわかっちゃうと思いますが、このブログは昔からそういうスタンスなのであまり気にしてないです)

昨夜に日記を書いた後、気づくと部屋の廊下が水浸しになっていた。意味がわからなかった。見ると天井の火災報知器や照明から水滴がポタポタと落ちている。とりあえずありったけのバスタオルをかき集めて床を拭き、滴る水をたらいとボウルで受けるようにした。

幸い建物の管理会社は夜も通じるコールセンターを持っていたので電話してみたが、翌朝までできることはなさそうとのことだった。しかし滴下ペースを見ると所有するたらいでは翌朝までとても保たない。そこでゴミ袋を貼り合わせて簡易的な樋を作り、流し台に排水するようにした。

今日になって管理会社が建物に来て、ひとまず原因箇所の水を止めてくれた(詳細な原因はインターネットには書かないことにする)。しかし水が抜けるまでしばらくは漏れ続けるだろうとのことだった。聞くところによると僕より上層階でも被害が出ているとのことで、かつ1階共用部分にも水漏れがあったので、上層階から下の部屋に次々漏れ出しつつ1階まで壁の中を水が流れていったのだろう(定期的にバズる『A KITE』のアレ)。

僕の私財の損害は汚水(上水かもしれないが僕の部屋に漏れ出てきた時点では黄色く濁っていたので汚水と呼称せざるを得ない)を拭いて本来の用途を果たせなくなったバスタオルだけ。一方設備は(私はこの部屋の所有者ではない)火災報知器や照明などの電気設備がガッツリ濡れてしまったし、僕が気づくまで水浸しだった廊下のフローリングも浮いてきてしまっている。これが複数の部屋で起きていて、壁内・共用部にも色々起きてるだろうと考えると、損害の回復にはそこそこの金額が必要なのではないか。誰が払うのかは知りません。

僕としては大変なこともあるものだなあ…くらいの感想(あと睡眠不足)だけど、もしかしたら今後補修とかで騒がしくなるのかもしれない。そうなったら嫌だなあ。

20250227 HSS

遅めに起きて労働。待ちが多い日だった。ジムは少しサボってたので硬くなっていた。近所のスーパーが2日休んで改装したので見に行ってみたけど大して変わってなくてこれで2日?と拍子抜けした。

ここ数日は大きな考え事が頭を占めていてハァーサッパリサッパリしない。甘いものが欲しくなる。

20250224 裸足

項目 内容 得点
起床 9:51 8
散歩 ノー 0
朝食の栄養カバレッジ 3色カバー 100
体操 ノー 0
労働 休日 100
ジム 有酸素+筋トレ 100
勉強会 ノー 0
個人開発 実施 100
あすけん - 94
総合 1日の総合評価 65

↑仕組み化するとつまんねえな…温かみがない。でもまあそれは書いているときの気持ちであって読み手にとっては同じか…

遅めに起き、朝食。2時間空けてジムで全身やり、帰宅。猛烈に家事意欲が湧いてきたので自宅の布全部洗濯した。その結果靴下が尽き、以下の内容は全て裸足(+サンダル)で実行している。

スリッパは試用期間で十分なQOL貢献が認められたのでちょっと良いやつを買いたく、近所を色々歩いてみたが売っているところがなかった。唯一ありそうなところは改装期間で売り場が消滅しており…。そしてその改装の影響で買おうと思っていた野菜もお菓子も買えず、予定を変更せざるを得なかった。そして寒い。

夕食を食べ、洗濯物を取り込んで諸々再デプロイ。明日の朝食用にほうれん草を加熱。デイリータスク管理アプリケーションをもう少しClineでシバいて今に至る。

Dota2の7.38Dazzleの件は、Orb of Corrosionじゃない?スターティングでOrb of Brightを買うことでレーニングのダメージトレードで有利を取り、安く買えて殴り放題の能力と良いシナジーがある。

20250223 Dazzle 7.38 少し使ってみて

項目 内容 得点
起床 11:03 0
散歩 ノー 0
朝食 三色食品群のうち0色カバー 0
体操 ノー 0
労働 passion: 0点, discipline: 0点(休み) 0
ジム サボった 0
勉強会 ノー 0
個人開発 実施 100
あすけんの点数 - 64
総合 1日の総合評価 12

Dota2の新環境でのDazzleの可能性を探るべく色々試していた。結局レーニングでインチキ性能を誇るPoison Touchで有利を作り、そのままスノーボールするのが王道であることは変わっていない。そしてUltを活用するための攻撃範囲と攻撃速度はいずれもTalentで得られるので、急いでLv15にすることが一番大事なようだ。というかLv15TalentのAS90ってインチキもいいところなんだよな。そう思うと、これまでヒーリングサポートとして運用されるDazzleが取らなかったTalentの方に光を当てたかったというのが今回のreworkの意図だったのかもね。

アイテム面では、(CDRがなくなったので)少なくとも自分のマナ消費を賄うだけならマナ靴が必要ない。素ブーツだけあれば戦える。Ultの乱戦の真ん中で攻撃を振り続けられるというメリットを活かせないかいろいろ試してみたが、いつ何が欲しいかというのが難しい。結局Lv15まで入らないとUltは活用できず、サポートがLv15になる時間帯になってからWitch Blade程度のダメージが乗っても大したインパクトがない。Talentと違う能力が得られるという意味でDiffusalなんかも試してみたがやはり数字が足りない。好感触を得たのはLensかな。そもそもPoison Touchの射程が800なので、Talentの攻撃範囲上昇(875になる)を活用するためにはLensで伸ばす必要がある。Ultのキャスト範囲も拡大し、これがなかなかinitiateにはメリットが大きい。Ultは逃げる敵を追うのは得意だがバックライン狩りで本体を襲われると弱いという性質があり、フォーメーションが伸びたときに自分自身にGraveをかけやすいというメリットもある。後は無難にLv15までインパクトを出し続けるという意味ではGlimmer・Pavise・FS・Eulとかがいいと思う。

20250222 Cline+Claudeやってみた

昨日は国外出張から戻った友人の無事を祝って御徒町で飲んでいた。飲みはとても楽しかったのだが寒さと胃腸の弱さ(普段は全く自覚しないが飲み屋でだけ覿面に弱くなる)ゆえに酷い胃もたれを起こしてしまい、帰って苦しんで寝ていた。寝るタイミングを逃し、寝ないまま今日に突入。午前に用事を済ませ、昼はもつ煮屋で食べてきた。スタミナもつ煮ってなんだろう、大きいのかな?と思ったらニンニクモリモリで、なるほど写真じゃわからんかった!!となった。

mizchi氏の魂がまた震えているらしいのでとりあえず真似してCline+Claudeを導入してみた。Clineは任意のLLMのサポートを得ながらvscodeを自動操作するvscode拡張で、単なるコード生成を超えてシェルやpuppeteerまで操作して勝手に動作確認までやり始める。マジですごい。ClineのバックエンドになるLLMは幅広く選べるのだが、おすすめはClaudeらしい(ローカルollamaは遅すぎて無理だった。GitHub CopilotはVS Code LM APIという仕組みを通じて使えるのだが、トークンが激増するらしくすぐrate limitになった)。Claudeを使いたいときはClaudeに直接金を払ってもいいし、OpenRouterというサービスを使ってもいい。OpenRouterは様々な商用LLMを統一的なインターフェースでアクセスできるように集約したもので、ここにお金を入れておくと使ったLLMに使った分だけ支払われる。若干手数料は乗るのだが、AIアシスト開発はいろいろなモデルを試す段階だと思うので便利。Claudeとdeepseekを比べてみたけどやっぱりClaudeの方が強かった。

とりあえず20ドル入れていろいろ遊んでみたのだが、使い方によって課金額が結構違う。コンテキストをリセットしないまま長話をするとトークンが嵩んで高くつくようだ。その辺りに少し慣れた状態で、日々の日記のアレを生成するサービスを作らせてみた。20コミット1000行分くらいのちょっとしたもので3~4ドルくらいかな。Claudeとの1回の応答で0.02ドルくらい。

https://chao7150.github.io/discipline/

(以下はサンプルです)

項目 内容 得点
起床 7:30 100
散歩 実施・ゴミ拾いあり・犬0匹() 100
朝食 三色食品群のうち0色カバー 0
体操 実施 100
労働 passion: 0点, discipline: 0点() 0
ジム 有酸素+筋トレ 100
勉強会 実施 100
個人開発 実施 100
総合 1日の総合評価 59

Claudeはとても賢い。曖昧な自然言語で指示を出してもかなり正確に意図を読み取ってくれるという点で対人間インターフェースは非常に優秀。知識も豊富でライブラリの使い方とかもよく知っている。コードの整理・美学みたいなものは弱く、場当たり的な構造を作りがちに見える(まあ1つずつ指示を受けながら作っていくという条件なら人間でもそうなるかもね)。Claudeを活用してある程度まで野放図に成長してしまったアプリケーションに、後から人間の開発者が複雑な機能を追加するとなると辛いだろうな。

これ仕事で使えるようになったら俺の仕事何が残るんだろう。大きいアプリケーションを作ろうとなったらやっぱり人間エンジニアが整理しないと破綻するのかなあ。なんかそれも希望的観測のように思える。非エンジニアが直接プロンプトを叩いて(しかも何回細かい修正指示を出しても不満を言わない)かなりの精度のものが作れるだろうし、そんな時代にコードを美しく整理するということに意味があるんだろうか。衝撃的な体験だった。

Dota2 7.38 Dazzleに関する考察

7.38でDazzleに大きな変更が入った

影響ありそうな変更

サポート運用を前提として書いてるけどもうこれサポートヒーローじゃねえな?(気づき)

nerf

  • Bad Jujuの廃止
    • 自分のHPを犠牲にしながらスキルを高速回転させてHexやHealをばら撒くのが7.37のDazzleの仕事だったが、この変更によりその戦術は終了した。
  • HexがShardからUlt中発動に変更
    • UltはLv1で70秒間に15秒間しか発動できない。Poison TouchのCDは最短で15秒なので、一度のUlt中に一度しか打てない。つまり一度のチームファイトでもほぼ一度しか打てない。前向きに捉えるとShardを買う必要がなくなったのでそこで浮いた1500Gをどう活用するかというのが問題になる

buff

  • facet Poison BloomにWeaveの敵スタック倍加がついた
    • 割と大きい気がする。特に序盤のレーニングのド突き合いで結構違いが出てくるのではないか?敵に複数の味方ユニットが接触している状態でShadow Waveを流すと味方の数だけダメージ判定が入る(いわゆるHeal Bombというやつ)仕様があり、Weaveのスタックも味方の数だけ入る。たとえばWraith King Lv2で適当にスターティングアイテムを買っているとPhysical Resistが22%になるのだが、これに3体分のHeal Bombを当てると6スタックでPhysical Resistが9%まで落ちる。これは入るダメージが78%から91%に上がるということで、16%の火力アップになる。16%火力が上がれば必要攻撃回数は86%まで減る。
    • でもさ、冷静に考えるとWeaveってinnate化される前は1/2/3だったんだよね。それが不当に1フラットにされて、ここでようやく敵だけ1/1.5./2/2.5になってるので、実は戻ってすらいないのだ。
  • 新Ult Nothl Projection
    • うーんこれ難しい。単純に発動・終了のモーションが遅い、行動範囲が狭いというのがまず使いにくい。一方で本体を遠くに置いて敵の真ん中で活動できるという点は確かに強い。ただそれを活用するには7.37までとかなり違う考え方をしなければならない。というかはっきり言うと攻撃速度アイテムを上げてPoison Touch→可能な限りShadow Waveを入れつつ同じ敵を通常攻撃し続けてPoison BloomでHexを散布するのが一番強いと思う。サポートがやることじゃないように見えるんだけど、よく考えるとこの動きをするのに何のアイテムも必要ない。TalentでLv10→Poison Touch Attack Range、Lv15→Attack Speedを取るだけで成立する。Soulはシンプルに無敵なのでこの動きを妨害する方法は本体狙いしかないが、disableできないSoulからGlimmerやらEul(Soulから本体にEulは打てる。自分扱いらしい)やらGraveやらで守れるので、相手に嫌な二択を迫ることができる。

Dazzle以外の変更を見ると、Neutral Craftingの導入の影響が大きそうだ。Mana Draught/Trusty Shovel/Mystical Enchantmentで高い確率でマナ回復を付けれるようになったのでチーム構成にもよるがマナ靴を飛ばせる可能性がある(Poison Touch Lv2辺りからジャングル狩れるのも美味しい)。そしてShardも買う必要がなく、金銭的な余裕が大きい。Nothl Projectionとの組み合わせを考えると以下のような選択肢があると思う。

  • セービング
    • 普通に無敵のSoulから本体にキャストできるのかなり強いと思う
  • 攻撃速度
    • Witch Blade
    • Mage Slayer(Aghaいくなら?)
  • 攻撃範囲
    • Dragon Lance
  • Agha

まあやっぱり無難なのはセービングで、それがサポートに期待されることでもあると思う。でもIntサポートヒーローでありながら何のディフェンシブアイテムも買わずに15秒間敵の真ん中で殴り放題できるというのは独特な強みなので、そこを伸ばしていった方が面白いと思うんだよなあ。

20250220 下を向いて歩く

7:50頃起床。ゴミ拾い散歩(柴ーズ)、朝食、ノー体操、労働(特上)、ジム(軽、54.9kg)、夕食、勉強会、個人開発、歯磨き、今。

予告通り散歩しながらゴミ拾いをしてみた。やってみると意外と難しい。まず地面のゴミを探しながら安全に歩くのが難しい。そしてゴミに集中して歩いていると本来の目的である頭を空っぽにするというのが達成できない。タバコの吸い殻がとっくに鎮火しているのに持ち帰ってからもずっと臭う。まあときどきやればいいかな。

最近の労働は出勤から退勤までチョコたっぷりだが、余裕が失われているのであまり良くない。

個人開発はパケットキャプチャにした。というのももう一つの候補だったRustでGUIは、まず日本語入力が出来ないフレームワークは足切り、そしてせっかくRustなのにHTMLのラッパーみたいなやつ書かされるのも意味ねえなと思ったら選択肢がどんどん減ってしまいやる気をなくした。

とりあえずChatGPTに聞いてみるとpcapかpnetを使えということで、pnetの方が抽象化が親切で易しそうだったのでこちらを使うことにした。NetworkInterfaceからdatalink::channelでデータを引いてみるとEthernetPacket(このレイヤーだとパケットじゃなくてフレームじゃない?)が取れた。

https://www.infraexpert.com/study/ethernet4.html を見ながら、とりあえず何か意味のある情報を知りたくてget_ethertype()を取ってみると2048とたまに2054が出てきた。 https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml によるとそれぞれIPv4とARPらしい。ARPってこのレイヤーだったんだ…(記憶なし)。

そう言えばDota2に巨大アップデートが来て、僕がよく使っているDazzleにも大きなreworkが入った…のだが、Dazzleはいつもそうなのだが、ヒーローの本来の持ち味がなんだったがさっぱりわからない大胆というか無軌道な変更が入った。それがすごく弱い。しかもその変更が無限財産増殖グリッチに悪用でき、悪人が使うと強いというもうわけがわからないことになっている。

20250219 失敗は未定義

7:30頃起床。散歩、朝食、ノー体操、労働(上)、昼食(キッチンオリジン)、ジム(強、54.9kg)、夕食、勉強会(長)、歯磨き、今。

せっかく毎日散歩しているならゴミでも拾うかと思い、ゴミ拾い用のトングを買いに行った。それが昼。キッチンオリジンでカニクリームコロッケを買って帰ったのだが、家にソースがなくてちょっと締まりのない昼食だった(でも醤油もそんなに悪くなかったよ)。水菜のサラダは調理が楽なうえにカルシウムが豊富で結構いい感じ。

ジムはインターバルを伸ばして強度x回数を向上させた結果前より少しだけ力が増している。ジムで有酸素漕ぎながらアニメを見ていると、周囲の視線が気になってニヤついてはいけないという意識が働き、それが逆に笑いを増幅してしまうのでなぜか満足度が向上する現象が起きている。情報の内容だけではなくコンテクストも重要ということだ。

Rustで作っていたちょっとしたCLIツール(諸事情により非公開)が完成したのでもう一発Rustでなにかやってみたいなと思っている。もうwebサービス(というかHTTPリクエストとDBを中継するコントローラ)はどれだけやっても大した経験値にならないだろうしRustの得意分野でもなさそうなので、GUIデスクトップアプリケーションか、wiresharkの真似事みたいなやつをやってみたいなと構想している。してはいるのだが、平日に個人開発の時間を捻出するのはなかなか難しい。30代はpassionではなくdiscipline定期。ルーティンを堅持しながら少しずつ整理していきたい。

この前友人に「今後の人生のライフプランは?」と聞かれて困った。特にない…。目標がないということは失敗も未定義なので安心(?)なのだが、そういう人生を送っていることに後ろめたさがないわけでもない。でも「ライフプラン」的な何かを達成しなくても毎日求められている仕事を能力を発揮して解決し、ほかほかご飯食べてあったかい布団で眠れること自体が十分成功であるとも言えるし、それに「満足」できることは有益な能力だ。

オチはない。

20250218 今川焼き

8:00頃起床。散歩(柴・黒柴2)、朝食、体操、労働(上)、昼食(麺)、ノージム、夕食、買い物、勉強会、歯磨き、今。

黒柴ーズと柴(1Pカラー)はお友達だったらしい(新情報)。

労働は内容充実、ただしキリのいいところまでと思って延びてしまったのは良くなかった。昼食は近所の新しいラーメン屋に行ったが、許されざる美味しくなさで原辰徳。鰹節の雑味がモロにスープに残っており、意図するところがわからなかった。ジムは休養日。

買い物でちょっと新しい食への挑戦を意識した。サラダは新素材であるところの水菜を購入。冬だからね。加熱なしで食べられるしおもしろドレッシングを楽しみやすいプレーンな味に期待。通常の食事で不足するカロリーをお菓子で補いたくなったときに袋菓子を買ってしまうと逆にカロリーオーバーするので、1つずつ食べられる冷凍の今川焼きを買ってみた。そして米を炊き忘れたときにイライラしないように備蓄パックごはんも。

勉強会ではRSA暗号の仕組みに差し掛かっており、modの割り算が成り立つ条件について調べた。理屈としてはそう難しくないのだが、整数問題独特の手筋みたいなものを学生時代ほどは思い出せなくて勉強会仲間のmathematical monstersに助けてもらった。