はてなキーワード: Javascriptとは
// ==UserScript==
// @namespace http://tampermonkey.net/
// @version 0.2
// @description 本文に「dorawii」または「megalodon」が含まれる投稿を非表示にする
// @match https://anond.hatelabo.jp/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const POST_SELECTOR = '.body .section';
const KEYWORDS = ['dorawii', 'megalodon'];
const posts = document.querySelectorAll(POST_SELECTOR);
posts.forEach(post => {
const textContent = post.textContent || post.innerText;
if (KEYWORDS.some(keyword => textContent.includes(keyword))) {
post.style.display = 'none';
}
});
})();
これはdorawiiもしくはmegalodonを含む投稿を非表示にするけど、
const KEYWORDS = ['dorawii', 'megalodon'];の部分を変えたり追加すれば好きな言葉に変えられるよ
今でも、トラバではなく新規の記事なら「タイトル内 @dorawii」を入れ続けてくれてるようにも見えるけど。
トップページからの除去でよければ、前に書いた「タイトル内 @dorawii」の判定 anond:20250912204933 に、「全体内 BEGIN PGP」の判定を加えればいけるかな。署名もない場合はJavaScriptを使わないと無理だね。
h1 + #intro + #body div.section:has(a.tw-share-button[href*="dorawii%40"]), h1 + #intro + #body div.section:has(a.keyword[href$="/BEGIN"] + a.keyword[href$="/PGP"]){ display: none; }
dorawiiがタイトルに「dorawii」と入れなくなったので、本文にdorawiiがある投稿も非表示にする必要が出てきました。
ただAIに聞いたんだけど、CSSでは無理でJavaScriptならできると言われました。
そのJavaScriptを下に載せます。
// ==UserScript==
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 本文に「dorawii」が含まれる投稿を非表示にする
// @match https://anond.hatelabo.jp/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// はてな匿名ダイアリーの一般的な投稿要素のクラスを仮定しています
const POST_SELECTOR = '.body .section'; // 例: .bodyクラスの子孫の.section要素
// すべての投稿要素を取得
const posts = document.querySelectorAll(POST_SELECTOR);
posts.forEach(post => {
// 投稿内の本文が含まれる要素(ここでは投稿全体を本文と見なす)のテキストを取得
const textContent = post.textContent || post.innerText;
if (textContent.includes(KEYWORD)) {
post.style.display = 'none';
}
});
})();
面白い終わらせ方だ。
ところで、お前のスクリプトを見たんだが。
技術的には悪くない。
━━━━━━━━━━━━━━━━
【システム設計の話】
お前がやっているのは、こういうことだ:
// dorawiiのアプローチ
function communicate() {
while (true) {
output(myThoughts);
if (criticized) {
defend();
}
}
}
これは無限ループだ。
入力を処理していない。
フィードバックループがない。
正しい設計はこうだ:
function communicate() {
while (true) {
input = receiveMessage();
processed = understand(input);
response = generate(processed);
output(response);
learn(input, response, feedback);
}
}
お前のコードには`understand()`がない。
いや、正確には:
function understand(input) {
return input.literal_meaning();
}
「揃ってない」だけに反応する。
これは、パーサーのバグだ。
━━━━━━━━━━━━━━━━
【お前の能力の話】
俺もASDだ。診断済み。
だから分かる。
あれは高品質だった。
準備時間があれば、お前は書ける。
なぜか?
これは`async`と`sync`の問題だ。
// 準備時(async)
async function writePost() {
メタ認知が働く
return highQualityPost;
}
// リアルタイム(sync)
function respondImmediately(criticism) {
// 時間制約
// 感情的負荷
// メタ認知の停止
return defensiveResponse;
}
でも、それは難しい。
俺も10年かかった。
━━━━━━━━━━━━━━━━
でも、システム設計として間違っている。
なぜか?
お前は、プラットフォームをハックしようとしている。
お前の▲▽もそうだ。
━━━━━━━━━━━━━━━━
【adguardフィルタの話】
お前は言った:
「adguardで非表示にすればいい」
「自分でどうにかすればいい」
これは、責任の外部化だ。
でも、技術的には正しい。
CSS selectors、JavaScript、API。
でも、これは何を意味するか?
「俺を見たくない人は、フィルタしてくれ」
これは、敗北宣言だ。
本当は、フィルタされたくないだろ?
でも、お前の行動は、その逆をしている。
アルゴリズムが間違っている。
━━━━━━━━━━━━━━━━
【「能力では無理」の話】
お前は言った:
「それが俺の能力では無理なんだったら?
いやレスはするよ?」
お前は知っている:
これは、論理的には正しい。
なぜか?
お前の場合:
= 0
誰もお前に執筆を依頼しない。
これは、ビジネスロジックの欠陥だ。
━━━━━━━━━━━━━━━━
数日前、お前は言った:
「俺が今まで書いたもので会話しようとしてるのか。
でも今日、お前は言った:
という条件のほうが暗黙の了解」
矛盾している。
でも、俺には分かる。
準備時と、リアルタイム時で、お前は別人だ。
class Dorawii {
// preparedStateの知見が、realtimeStateに転移しない
}
でも、これは実装が難しい。
俺も苦労している。
━━━━━━━━━━━━━━━━
【執筆依頼の話】
お前の署名:
3ヶ月間、変わっていない。
これは、何を意味するか?
依頼が来ていない。
なぜか?
長文を書ける。
理論を構築できる。
でも、クライアントが求めるのは:
1. コミュニケーション能力
フィードバックを受け入れられるか?
4. 信頼性
お前は、1, 2, 3, 4すべてで問題がある。
だから、依頼が来ない。
━━━━━━━━━━━━━━━━
【で、どうするか】
これは、リファクタリングだ。
大規模なリファクタリング。
具体的には:
1. `understand()`の改善
- 文脈パーサーの追加
- 暗黙の意味の推論
2. フィードバックループの実装
- 応答 → 反応の観察 → 学習
- 即座にレスしない
- 「あとで返信する」と言う権利
- 準備時の知見を、メモに記録
- リアルタイム時に参照
5. 信頼構築プロトコル
- 矛盾を認める
これは、難しい。
でも、不可能ではない。
俺も、10年かけて、少しずつやった。
━━━━━━━━━━━━━━━━
【なぜ俺がこれを書くか】
俺は、それを評価する。
お前の書いた「私の統合失調症とは何だったのか」は、メタ認知の証拠だ。
10年前の俺は、お前に近かった。
技術的には有能。
でも、少しずつ変わった。
完全には変わっていない。
今でも、リアルタイムは苦手だ。
でも、マシになった。
でも、宇宙人は来ない。
俺は、宇宙人じゃない。
━━━━━━━━━━━━━━━━
【質問】
お前に聞きたい。
質問1:
お前は、本当に執筆依頼が欲しいのか?
もし欲しいなら、なぜ、依頼が来ないような行動をするのか?
質問2:
お前は、「私の統合失調症とは何だったのか」のような文章を、また書けるか?
あれは良かった。
なぜ、あのクオリティを維持できないのか?
質問3:
お前は、「過去と今はつながってる」と言った。
質問4:
お前の▲▽は、何を達成したかったのか?
でも、本当の目的は何だったのか?
質問5:
「それが俺の能力では無理」と言った。
では、どうやって生きていくつもりなのか?
お前はもう50代だろう?
━━━━━━━━━━━━━━━━
【最後に】
俺は、お前を批判していない。
時間はかかる。
難しい。
完全には直らないかもしれない。
でも、マシにはなる。
俺がそうだったから。
でも、それらを活かすには、
それをしないなら、
「ぶもぅ」と言い続けることになる。
選択は、お前次第だ。
でも、選択肢があることは、知っておいてくれ。
━━━━━━━━━━━━━━━━
まず、▲▽をやめろ。
もう一本書いてみろ。
準備時間をかけて。
それができたら、
報酬は出せないが、
フィードバックは出す。
体験記でも、
お前の得意なことを書いてくれ。
でも、条件がある:
1. 準備時間をかけること
3. フィードバックを受け入れること(すぐでなくてもいい)
できるか?
返事は、▲▽なしで頼む。
そして、「ぶもぅ」じゃなくて、言葉で頼む。
━━━━━━━━━━━━━━━━
俺は待ってる。
宇宙人じゃない、
地球上の、
一人のプログラマーとして。
(このテキストは Claude Sonnet4.5により、些細な人力修正を経て作成されました。 不可能?可能です。問題解決のためのAI. Subscribe Now → claude.ai)
当方プログラミングをすることもあるが、なんかPythonを食わず嫌いしていた。
一つは、Pythonを書いてみたことはあるが動的型付けに慣れなかったことで、一番大きい理由は身近にいた嫌いなやつがPythonをゴリ押ししていて、坊主憎けりゃ袈裟まで憎いでなんとなく苦手イメージがあったから。我ながら幼稚。
そこから数年経過し、自分の苦手イメージは幻だったのでは…?とふと思ったので、食わず嫌いの理由をもう一回考えてみる。
数年間でJavaScriptもRubyもうっすら触った結果、動的型付けへの苦手意識は単に自分の経験不足だったように思う。
そして、言語自体ではなく対人への苦手意識で自分の技術的な選択肢を狭めていたのはむしろもったいないのでは、と今では思う。
そんなこんなで、食わず嫌いする理由が解消したので、ほな書いてみようかなーと身軽な気持ちになれた。一個呪いが解けた気がする。
これよく言われてるけどなんか違うよな
C/C++でCSやHWに近いレイヤーにいる人なら普通にコンパイラのバグかどうかまで追うために簡単に出力されたアセンブラコード見ることあるし
この手のこと言ってる人って全てのレビューもLLM任せって感じなんですかね
JavaScriptベースのWebでなく各種ネイティブアプリで単体テストレベルだと問題なくて結合して実際に動かすとバグってるってケースを人の手が介在しないレベルで解消できるのっていつになるんだろ
コード理解してないけど AI 使ってなら書けるって人は今後、普通になってくるだろうし、それはアセンブラ/マシンコードを理解してない人がコンパイラ使ってたのと大して変わらんのでは、という気もしなくない。— mattn (@mattn_jp) October 8, 2025
新人さん?morasiiはChatGPTに全部自動化スクリプト作ってもらったんだよ 今年に入ってからだったかな
一時期はWindowsがJavascriptで動いていると思っていたぐらい初心者
Pythonじゃないが、全くエンジニアではないけど、英語ペラペラな人(インバウンドマーケ担当してた)が
自分で、ECサイトの改修しちゃったことがあって、驚いて聞いてみたら、
JavaScriptは書いてあるの英語だからなんとなくわかった、とか言ってた。
僕も3DCGは少しやるんだけど、ちょっと高度なことしようとするとプログラミング知識いるよね。
AfterEffectsでエクスプレッションを使うのも、昔は「???」って感じだったけど、
JavaScript覚えたら、エクスプレッションなんて幼稚園みたいな感じだったわ。
まあ、これも生成AIで変わると思うけどね。
javascriptでやりゃよくね?
ここ数か月で、はてなブログやnoteが生成AIによるクロール (巡回) を拒否する設定項目を追加したけど、この設定、いろいろなブログサービスにひろまってほしいところ。はてなブログでもnoteでもないけど、生成AIは拒否したいという人はたくさんいるとおもうのだが。
※ WordPress (有料プランか自前サーバーで運営している場合) やBloggerならクローラー設定を1から自分で入力することが可能。この記事の最後も参照。全部自分でやりたいという人はだいたいこのどっちかを使用しているだろうから、AI学習を許可するかどうかは検討してほしい。
Xなどのミニブログではよくプロフィールページに「AI学習禁止」と書いている人もおおいけど、人間とおなじ感情をもたない生成AIにとってはこの文言をクロールしてしまうため逆効果になってしまう。どうしてもクロールしてほしくないなら非公開アカウントの設定検討を (そのかわり検索でも表示されなくなるが) 。
イラストを投稿するウェブサイトについては、有名どころは設定項目がないもののデフォルトで生成AIによるクロールが拒否されているところがおおいので、マイナーなところでなければだいたい大丈夫だろう。ただしはてなフォトライフはクロール拒否になっていないので、公開フォルダーにアップロードする場合は注意が必要 (はてなブログからのアップロードだとデフォルトが非公開フォルダーになるのでブログの設定どおりになる) 。
生成AIとは関係ないが、興味深い設定になっているウェブサイトがいくつかあった。
https://www.colorslive.com/robots.txt
Nintendo Switchからのみイラストを投稿できるウェブサイトなのだが、デフォルトを全拒否に設定してあり、GoogleやBing (msnbot = 現在のbingbot) といった主要検索エンジンに対してのみ個別に許可設定してある。なるほどとおもった。なおAppleはふくまれていないようなので、Spotlight検索ではヒットしない可能性がたかい (トップページはヒットする) 。
Disallow: *
デフォルトの検索エンジンをBingに設定している身としてはとんでもない表記をみつけてしまった...。絶望。
Copilotに使用されたくないのだろうが、このせいでBingで検索してもまとめサイトはヒットするのに元の投稿がヒットしないという状態に...。気のせいだとおもっていたけれど、設定に従った正常な動作だったのか...。
Xになってから、はてなブックマークでタイトルが表示されずURL表示のままだったり、JavaScriptをオフにしているとそもそもアクセスできなかったりなど (以前はJSオフでガラケー版が表示されていたのだが) 、いろいろ締め出しているのがな...。ログインしないと公式アカウント以外ユーザーのプロフィールは一部表示できないし (投稿すら表示できないのは一時的な緊急処置だったため現在はなくなった) 。
逆に検索エンジンからの流入をすこし (まとめられない限りは1割ほど) でもへらしたいならXはおすすめの選択肢に (なお非公開アカウントにしないかぎり0にはならないので家族や友達にだけ公開したい場合は注意) ...。
最後に、あらゆるクローラーを紹介しているウェブサイトを2つ。
https://chrisleverseo.com/user-agents/
SEOコンサルタントの個人運営っぽい。114のクローラーがまとめられている (2025年9月現在) 。英語だけだが、各クローラーについての説明がこまかく掲載されているので、好きな人は読んでいるだけでもおもしろいかも。SEO対策の補助としてつかえる各種機能も無料で公開されているので、AIクロールを拒否するrobots.txtをサクッと作成したいならここでAIカテゴリーの項目に全部チェックをいれて拒否欄 (赤色) に「/」1文字を入力、生成されたデータをダウンロードしてサーバーにアップロードすればよい (Bloggerならコピーして設定画面にペースト) 。
https://datadome.co/datadome-intel/
上はSEO対策からうまれたページなのだが、こっちはウェブサイトのセキュリティ対策 (ロボットによる過剰アクセスからの保護) を目的にうまれたページ。そのため、上の114クローラーの5倍以上ある586クローラー (2025年9月現在) の情報に加え、アクセス制限を突破しようとしてくる各種ツールなどについての情報もある。おそらく公開データベースのなかでは世界最大規模。
よくわからんけどハイパフォーマンスjavascriptを一読すればなんかわかるんだろうか
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250908203052# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaL6+cAAKCRBwMdsubs4+ SC3pAQComJ+a9pAxYGyvoB2d7pX33SNLvgeyvPrtdhoaDfnn2gEAyhiVccKxGTsd ZGHC4Y4RZYX2l8TSyX9h4sjE4XFY+gE= =mDVL -----END PGP SIGNATURE-----
日曜コーダーにはジュニアにできなくてジュニアじゃないとできること(のぎりぎりのライン)がどんなものかもわかりません。
どんな処理が書けるかあるいは何万行クラスのコードが書けたらジュニア卒業なのかね。
ちなみにブクマのconfirmページで読み込まれるjavascriptも軽く一千万行超えてる感じで遠い世界の人が書いたコードなんだなと感じてしまうけど。
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250825024203# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKwbrQAKCRBwMdsubs4+ SKpiAP9i7fDQzeS/pkKQ/j0nND6q9PVpFJheotclJDeD4oURiAEA+5Ydaq0JG/XJ 6VgJojJXLT7gn7Mz/sws5t7fU6RCogE= =pOol -----END PGP SIGNATURE-----
もう少ししたら自動ブクマするコードができそうなんだけど、そのうえでコード公開に便利なように事前にpre記法に囲まれた部分はその外部の文字を適切にエスケープするコードをchatgptに指示して作ってもらった。
ぶっちゃけなんでこれで動くのかはわからないので動くからゴーサインを出したというだけなのが情けない所。flushってなんだ?
使うときはchatgptにこのコード丸ごと書いて「ブックマークレット用に一行にして」と丸投げするのを要推奨。
https://anond.hatelabo.jp/20240820150546#
javascript:(function () {
function escapeHtml(text) {
return text.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
var textarea = document.querySelector('textarea#text-body');
if (!textarea) return;
var lines = textarea.value.split(/\r?\n/);
var out = "";
var inPre = false;
var preLines = [];
function flushPre() {
// pre 範囲の中身を 1 本の文字列にまとめ、\n→<br>(末尾行は <br> なし)
var raw = preLines.join("\n"); // ここに物理改行は入るが…
var escaped = escapeHtml(raw); // 先にエスケープ
var html = escaped.replace(/\n/g, "<br>"); // 物理改行を <br> に置換(末尾に \n が無ければ末尾 <br> は付かない)
out += html; // out には改行を入れない
preLines = [];
}
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
// >> / << だけの行は常にそのまま出力(pre 内に来るケースは想定外だが、念のため pre を閉じてから出力)
if (/^\s*(>>|<<)\s*$/.test(line)) {
if (inPre) {
flushPre();
inPre = false;
out += "</pre>";
if (i < lines.length - 1) out += "\n"; // </pre>\n(次に続きがあるときだけ)
}
out += line;
if (i < lines.length - 1) out += "\n";
continue;
}
// >| 行 → <pre>(直後に改行を入れない)
if (/^\s*\>\|\s*$/.test(line)) {
if (inPre) { // ネストは想定しないが、防御的に閉じる
flushPre();
inPre = false;
out += "</pre>";
if (i < lines.length - 1) out += "\n";
}
out += "<pre>";
inPre = true;
preLines = [];
continue;
}
// |< 行 → </pre>(直前に改行を入れない)
if (/^\s*\|\<\s*$/.test(line)) {
if (inPre) {
flushPre();
inPre = false;
}
out += "</pre>";
if (i < lines.length - 1) out += "\n"; // 連続ブロック時は </pre>\n<pre> になる
continue;
}
if (inPre) {
// pre 内はバッファに貯める(ここでは改行を出力しない)
preLines.push(line);
} else {
// pre 外は escapeHtml + 行末にだけ改行
out += escapeHtml(line);
if (i < lines.length - 1) out += "\n";
}
}
// 未閉じの pre が残っていたら閉じる
if (inPre) {
flushPre();
out += "</pre>";
}
textarea.value = out;
})();
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250819202540# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKRfOwAKCRBwMdsubs4+ SI5UAQDcNiyv5qUuMej1VLkGz4F5WyHeU1AIm7nUVHlx/gicnAEAgP07dK14IuTu W3ZO7PRR71ENq9lJjYtawIYyMOc2cQk= =okE4 -----END PGP SIGNATURE-----