
はてなキーワード:Not Foundとは
「ヤングエースUP」って漫画サイトがあるんだけど最近仕様変更した関係でカドコミに移行したのよね
で多分これが問題なんだろうね
なのに昨日からはてなブックマークに謎の「あなたが1番目にブックマークした「作品一覧」ヤングエースUP記事が注目されてる」として30ブクマ、100ブクマ毎に通知が来まくってて
確認したら去年のブックマークないしブコメが集中してて今頃30ブクマになったとか100ブクマになったとかじゃないものまで唐突にその表示で通知が来るようになった
そもそもカドコミを直接ブクマしてもタイトル画面がURLのまま(初ブクマ時はタイトルが漫画タイトルで登録されるのに時間経過でURL表示になったりそのURLからアクセスしてもNot Foundになったりする)ではてなブックマーク自体がカドコミに対応してないのが丸わかりな中でこんな嫌がらせみたいな通知が今頃になって頻繁に来るのは本当に迷惑なので早く治して欲しい
そしてどうせならカドコミを直接ブクマ出来るようにして欲しいよね
最近別の漫画サイトのファイアクロスも直接ブクマ出来なくなってるし早急な仕様変更が求められてると思うんだよね
はてなブックマークが長らく仕様変更等に対応出来てないんじゃないかな
はてなブックマークの増田一覧の、さらに「すべて」(1user)をチェックしている希有な人向けのユーザースクリプトを公開します。
https://b.hatena.ne.jp/site/anond.hatelabo.jp/?sort=eid
// ==UserScript==// @nameHatenaBookmarkAnond Filter// @namespacehttps://b.hatena.ne.jp/site/anond.hatelabo.jp/// @descriptionはてなブックマークの『はてな匿名ダイアリー』の記事のうち、指定したNGワードが含まれる投稿を非表示にします。// @matchhttps://b.hatena.ne.jp/site/anond.hatelabo.jp/*// @grant none// @version2.0.2026.01.28.0015// ==/UserScript==(function(){constSCRIPTID = 'HatenaBookmarkAnondFilter';console.time(SCRIPTID);const CLASSNAME = 'filtered';/*フィルタ該当要素*/const CHECKED = 'checked';/*二重チェック回避フラグ*/const ONCE = 1,AP = 2, INTERVAL = 3;/*適用タイミング*/constNGWORDS = {/* 合計100ポイントで非表示判定(ただし1つの記事内で同じワードが複数使われても1度しか加算しない) */ '100': [/*即NG確定ワード*/ 'dorawii', 'あおやまちゃん', 'ボスマン', 'MNK', '電気通信大学たいてい', 'なんぴょん', 'れめくん', 'リュックサック野郎', 'boushi_inst', 'hakaikami', 'Rekyu', 'iloveootaku_2',/*電気通信大学たいてい鉄道研究会れめくん(頻出)*/ /*A-G*/'a9w8ru6fqyxqfv9', 'admirail_togo', 'akibakko6348', 'alf1974al', 'amatukiseiru', 'anapgoeson', 'aoi_mizuho', 'asapgoeson', 'asupgoeson', 'b6jbpsji91ieigt', 'bmi22yo', 'boushi_instrail', 'boushi_ob', 'buscholarx', 'bw0531', 'circlecavok', 'disney1007cla', 'dora22sibuya', 'donkotrain', 'ecotosk', 'electlone', 'factomodachi', 'fft_dareka', 'gmhtcyznf_abc', 'goesonanap', 'gyudon_honmono', /*H-N*/'h13_yokohama', 'h2twi', 'H2TWR', 'hamaishogo1111', 'haru_mofumoffu', 'hermitv8', 'hirabiscus', 'hinolovelove', 'hnmk0127_03', 'inaken17_', 'inte235dy', 'ixtabes', 'jamcombatge', 'kawachiasukanew', 'kaoru_ai1991', 'keio9730F', 'kiha2228', 'koreanlabsfc', 'koyounoyooko', 'kqlex1500', 'kurakamasan', 'kurotamaxxx', 'kt_ruma_1372', 'lightningreen77', 'mamadoll_kun', 'matya_uec', 'minamihinawot', 'minori0151', 'monkichi_22', 'mugen_08i', 'mukoroku651', 'nakano6409', 'nanpyong', 'new_oer', 'nimouec', 'NoName_thUFO', 'norannnde', /*O-U*/'oreizmmiporin', 'orenotanoshimi', 'osaka_sirokichi', 'papepoco', 'pasotokon', 'pm95uq', 'reme_kun', 'ruin_2002', 's03_amurtk2731', 'sacchan03110319', 'seisu_bot', 'senanana_cos', 'shinano_115', 'shineleaf1372', 'shop_bullet', 'shurimpy', 'soroisoroi', 'sui_pm95uq', 'sweidan821858', 'taiyaki_level2', 'takao_straight5', 'taking0000', 'tarotaromusic1', 'tc201_501', 'tocarbarn', 'toshikimiyazaki', 'train_magician', 'tx9y2cpwdz27255', 'u2fap5u4zw57811', 'uec15take', 'uecdaisuki', 'UECert', 'uecrail', /*V-Z_0-9*/'vampire_mio', 'vbdmnwefknmxsdm', 'vp20th', 'wafue', 'wakasato_', 'walkingniwatori', 'wataameexpress', 'ya4975349616894', 'ymbk_arisa', 'yms_uec16', 'yuuya_1104_uec', '__________ob', '_chocorail_', '_doitforthewin_', '_toeshin', '_unigmo', '100mph_no_yuuki', '169_D51_protect', '2969364x', '2rtkvn34il2783', '36kyo', '86lilxw1', /*tadaup.jp*/'1dOaKWk3.jpeg', '1sL2VBZ5.jpeg', '1uNK2iEP.jpeg', 'CBUHadpD.jpeg', 'CgJlF4Wr.jpeg', 'CGTtm0Ev.jpeg', 'CIxj8clS.jpeg', 'CqbERPdQ.jpeg', 'CTZsA2wM.jpeg', 'CWY2m7rS.jpeg', 'CZVCEgd1.jpeg', 'テクウヨ', '自己放尿', ' ーーーーーーーー', 'https://anond.hatelabo.jp/20260107144223',/*AI問答貼り付け増田*/ '†噛み締めて行こうな†', '困難女性(コンジョ)', '困難女性(コンジョ)', 'コンジョ自警団', ], '90': [/*ほぼNG*/ 'megalodon.jp', '鉄道研究会', '鉄研', '通勤特快', '不正乗車', 'こども料金', '性慾', '穢い', 'エッタ', 'キセル', 'uec', ], '10': [/*NG*/ '電気通信大学', '電通大', '駿河台大学', '大学院', '学生課', '教務課', ], };const sites = { 'prefix': [ ['selector', '(modifier)', '(css)', '(REPEAT)'], ], 'https://b.hatena.ne.jp/site/anond.hatelabo.jp/': [ ['section.entrylist-unit li.js-keyboard-selectable-item', li => {li.querySelector('li.entrylist-contents-category > a').textContent = li.dataset.matches}, `.${CLASSNAME}{display: none;}`,AP], ], };const rules = sites[Object.keys(sites).find(prefix => location.href.startsWith(prefix))]; if(rules === undefined) returnconsole.log(SCRIPTID, 'Not foundany sites.');constscores =Object.keys(NGWORDS).map(Number).reverse();/*数値インデックス順に取り出されたkeysを逆順にして100から並べ直す*/const filter = function(selector, modifier){/*各要素に対してNGワード判定して、該当したら追加でmodifierも適用する*/ document.querySelectorAll(selector).forEach(e => { if(e.dataset[CHECKED]) return; e.dataset[CHECKED] = 'true';consttext = e.textContent.toLowerCase(); lettotal = 0,matches = []; for(constscore ofscores){ for(constword ofNGWORDS[String(score)]){ if(text.includes(word.toLowerCase())){total +=score;matches.push(word); if(total >=100){ e.classList.add(CLASSNAME); e.dataset.matches =matches.join(', '); if(modifier) modifier(e); return; } } } } }); }; /* ONCE(一括適用) */ rules.forEach(rule => {const [selector, modifier,css] = rule;console.log(SCRIPTID, 'ONCE:', selector); filter(selector, modifier); if(css){const style = document.createElement('style'); style.dataset.script =SCRIPTID; style.type = 'text/css'; style.textContent =css; document.head.appendChild(style); } }); /*AP(AutoPagerize) */ rules.filter(rule => rule[3] ===AP).forEach(rule => {const [selector, modifier] = rule; document.addEventListener('GM_AutoPagerizeNextPageLoaded', e => {console.log(SCRIPTID, 'AP:', selector); filter(selector, modifier); }); }); /* INTERVAL */ rules.filter(rule => rule[3] === INTERVAL).forEach(rule => {const [selector, modifier] = rule; setInterval(function(){console.log(SCRIPTID, 'INTERVAL:', selector); filter(selector, modifier); },1000); });console.timeEnd(SCRIPTID);})();
/*HatenaBookmarkAnond Filter */.filtered{ display: block !important;/*上書き*/ opacity: .25 !important;}.filtered:hover{ opacity: .75 !important;}.filtered li.entrylist-contents-category{background:red !important; font-weight: bold;}
検索用:はてなブックマークはてブはてな匿名ダイアリー増田スパムキーワードNGワードフィルターミュート非表示 削除 隠すブロックユーザースクリプトユーザースタイルhatenabookmarkanondspam keywordsngwords filter mutehide hidden display none blockuserscriptJavaScriptjscss style
| 投稿日 | 記事リンク | 記事をブクマしていたが後に削除されたアカウント |
| 2025年05月27日 | ウクライナ戦争に参加した日本人義勇兵達の絶望の未来 - 76users | mgdothe |
| 2025年05月30日 | ここ6~7年前から反社属性のオタク界隈関係者増えすぎじゃね? - 31users | mgdothe |
| 2025年06月26日 | すまん、AIって全然使えなくね? - 547users | mgdothe parisbird |
| 2025年06月30日 | すまん、AIってやっぱ有料でも使えんし格差拡大するだけじゃね?危険じゃね? - 53users | parisbird |
| 2025年07月02日 | AIが技術的に根本から全く使えない3つの理由 - 58users | parisbird |
| 2025年07月16日 | SNS界隈やエンタメ界隈ってもはや低強度紛争状態だよな - 5users | mgdothe parisbird |
| 2025年08月25日 | 政治にお熱な事は大いに結構だが、オタク界隈に関わるんじゃねえ - 2users | mgdothe parisbird |
| 2025年08月28日 | ネット辞めたほうがQOL爆上がりすると気づいた、もう楽になろうぜ - 395users | mgdothe parisbird |
| 2025年09月03日 | ウクライナに消えたぼくのフレンド - 154users | mgdothe parisbird |
| 2025年09月04日 | ある日本人義勇兵の死~敗北者たちの黄昏~ -11users | mgdothe parisbird |
| 2025年09月07日 | IT企業経営者の兄が首を吊って自殺した - 341users | mgdothe parisbird cvtte56 |
| 2025年09月11日 | 子供がいじめを受けた、家庭のすべてが崩壊した - 6users | mgdothe parisbird cvtte56 akuaku-88 |
| 2025年09月11日 | 親族(15)がまさかの補導でパ〇活やってたことが判明【追記】 - 30users | mgdothe parisbird cvtte56 akuaku-88 |
| 2025年09月16日 | 友人のIT企業社長が逮捕されてから人生終了するまでの話 - 54users | mgdothe parisbird GUNIT-011 |
| 2025年09月18日 | 疑問なんだがITエンジニアってDV癖のあるやつ多いの?【補記】 - 219users | mgdothe parisbird GUNIT-011 |
| 2025年09月19日 | 妹夫婦が性交渉の不一致で離婚することになった(ま~たIT系かい…) - 269users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年09月22日 | 発狂されそうだけど、純粋に人間としてつまらんのよ増田は - 260users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年09月22日 | 妹夫婦が性交渉の不一致で離婚危機だったが落し所が見つかった - 12users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年09月27日 | 20代末から40歳まで11~2年しかないのに何で気が付かなかったの? - 347users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年09月29日 | 婚活での虚しい嘘成功例、ハッキリ言って憐れである - 196users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年09月30日 | すまん、非モテ中年達はテロリストにでもなりたいの? -115users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年09月30日 | いや、マジであんだけイキってて20歳末~40歳までお前ら何してたの? - 8users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月01日 | 太字長文説教増田、ガチで予言者だろコイツ - 36users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月01日 | ぶっちゃけ日本のIT技術者のレベルが元々低いだけだよね① - 501users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月04日 | 海外でITエンジニアをしていた時に予言された事通りに業界がなってる - 538users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月06日 | 追記:2025年-俺達が信じたITの夢の果てにて - 52users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月07日 | 割とマジで発達障害がITに向いてるって誰が言いだしたんだ? - 131users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月09日 | 一生食えるスキルがない?何でITエンジニアになんかなったの? - 69users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月13日 | ネット民が恋愛できないのってぶっちゃけ日本の国策なんだが - 66users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月15日 | お前らの雲より高い恋愛願望叶える方法って真面目にテロしかなくね? -119users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月17日 | 増田が大好きななろう系が衰退してる理由 - 79users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月18日 | なろう系(カクヨムだの亜種含む)の層の人たちってこんなのだから - 44users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月18日 | 正直ああいう人たちは恋愛脳じゃなくて「家族コンプレックス」だよね - 121users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月20日 | 「日本のITは国に潰された!」👈そりゃ潰されるだろこんな業界 - 21users | mgdothe parisbird GUNIT-011 dorohedorone |
| 2025年10月30日 | アラフォー元特殊作戦群、ハッキリ言って人生終わっている - 241users | sft98 shotshow megapic gjchangPJ-F16 pmpan67 |
| 2025年10月31日 | やっぱり俺ら陸自の特戦群は日本人のオモチャ扱いか、人権ないんか - 168users | quiet001 burn-burnag1 bva-wwx gjchangPJ-F16 pmpan67 |
| 2025年12月23日 | 国際勝共連合のテロリストだった父との思い出 - 524users | jack-o89 jaxfg4 |
| 2025年12月24日 | 父の活動について追記:質問と回答① - 4users | jack-o89 jaxfg4 |
| 2025年12月25日 | 国際勝共連合のテロリストだった父の「秘密戦争」① - 16users | jack-o89 jaxfg4 nanonanosts dorochangku hondeman egkun |
| 2026年01月04日 | 1980年代でアメリカ傭兵スクールに行った話 - 7users | dainabookskun necnectua egkun |
| 2026年01月10日 | ネット商売して目立ってる人たちって「ヤクザ化」していく不思議 - 6users | dainabookskun necnectua gopic egkun |
| 2026年01月11日 | アメリカでITエンジニアからテロリストになった兄の話 - 420users | dainabookskun necnectua gopic |
| 2026年01月11日 | アメリカでITエンジニアからテロリストになった兄の話 追記 - 153users | gopic |
| 2026年01月11日 | アメリカでITエンジニアからテロリストになった兄の話 追記2 - 143users | gopic |
| 2026年01月22日 | 元ITエンジニアの兄がまたテロリストになってしまった - 5users | dainabookskun necnectua gopic |
Permalink |記事への反応(10) | 17:10
一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。
// ==UserScript== // @namePGP未署名検出と別タブ自動編集 // @namespacehttp://tampermonkey.net/ // @version 1.0 // @descriptionPGP署名がない投稿を自動編集ページへ誘導 // @matchhttps://anond.hatelabo.jp/* // @grantGM_setValue // @grantGM_getValue // @grantGM.openInTab // ==/UserScript== (function () { 'use strict';constbody = document.getElementById('entry-page'); if (!body) return;consttitleText = document.title; if (!titleText.includes('dorawii')) return;constpgpRegex = /BEGIN.*PGP(?: SIGNEDMESSAGE| SIGNATURE)?/;const preElements = document.querySelectorAll('div.body pre'); let hasPgpSignature =false; for (const pre of preElements) { if (pgpRegex.test(pre.textContent)) { hasPgpSignature =true; break; } } if (hasPgpSignature) return;const editLink = document.querySelector('a.edit');const childTab =GM.openInTab(editLink.href, {active:false, insert:true,setParent:true }); })();
// ==UserScript== // @name編集ページ処理と自動送信・閉じ // @namespacehttp://tampermonkey.net/ // @version 1.0 // @description編集ページで署名処理と送信、タブ自動閉じ // @matchhttps://anond.hatelabo.jp/dorawii_31/edit?id=* // @grantGM_getValue // @grantGM_xmlhttpRequest // @grantGM_setClipboard // @grantGM_notification // @connectlocalhost // ==/UserScript== (async function () { 'use strict';const shouldRun = awaitGM_getValue('open-tab-for-edit', '0');consttextareaId = 'text-body';consttextarea = document.getElementById(textareaId); if (!textarea) return;const content =textarea.value;constpgpSignatureRegex = /-----BEGINPGP SIGNEDMESSAGE-----[\s\S]+?-----BEGINPGP SIGNATURE-----[\s\S]+?-----ENDPGP SIGNATURE-----/; if (pgpSignatureRegex.test(content)) {console.log('[PGPスクリプト]署名が検出されたためそのまま送信します'); return; }consthttpRequest = (url, data) => { return newPromise((resolve,reject) => {GM_xmlhttpRequest({ method: 'POST',url:url, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: `value=${encodeURIComponent(data)}`,onload: function (response) { resolve(response.responseText); },onerror: function (error) {reject(error); } }); }); }; //textarea の値を取得 // 1.現在のページのURLからURLオブジェクトを作成const currentUrl = newURL(window.location.href); // 2.ベースとなる部分 (例: "https://anond.hatelabo.jp") を取得constorigin = currentUrl.origin; // 3. 'id'パラメータの値 (例: "20250610184705") を取得constidValue = currentUrl.searchParams.get('id'); // 4.ベース部分とIDを結合して、目的のURL文字列を生成 //idValueが取得できた場合のみ実行する let newUrl = null; if (idValue) { newUrl = `${origin}/${idValue}`; } // 5. 生成されたURLを変数に代入し、コンソールに出力して確認console.log(newUrl);constvalueToSend = newUrl;try {const signatureText = awaithttpRequest('http://localhost:12345/run-batch',valueToSend);console.log('バッチ応答:', signatureText); if (!signatureText.includes('BEGINPGP SIGNEDMESSAGE')) { alert('PGP署名がクリップボードに見つかりませんでした。'); return; }const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n';textarea.value = newText;console.log('[PGPスクリプト]署名を貼り付けました。送信を再開します。');const form = document.forms.edit;const newForm = form.cloneNode(true); form.replaceWith(newForm); newForm.addEventListener('submit', async (e) => { e.preventDefault(); //HTML標準のsubmitをキャンセルconstbodyText =textarea?.value || ''; //reCAPTCHAトークンの取得constrecaptchaToken = await newPromise((resolve) => { grecaptcha.enterprise.ready(() => { grecaptcha.enterprise.execute('hoge', {action: 'EDIT' }) .then(resolve); }); }); // POSTするデータの構築const formData = new FormData(newForm); formData.set('body',bodyText); formData.set('recaptcha_token',recaptchaToken); formData.set('edit', '1');try {constresponse = await fetch(newForm.action, { method: 'POST',body: formData, credentials: 'same-origin' }); if (response.ok) {console.log('送信成功'); window.close(); } else {console.error('送信失敗',response.status); } }catch (err) {console.error('送信中にエラーが発生', err); } }); //プログラム的に送信トリガー newForm.dispatchEvent(new Event('submit', { bubbles:true })); }catch (e) {console.error('バッチ呼び出し失敗:', e); } })();
consthttp =require('http');const { exec } =require('child_process');const querystring =require('querystring');const server =http.createServer((req, res) => { if (req.method === 'GET' && req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.method === 'POST' && req.url === '/run-batch') { letbody = ''; req.on('data', chunk => {body += chunk.toString(); }); req.on('end', () => {constparsed = querystring.parse(body);constvalue =parsed.value || 'default'; // 値を引数としてバッチに渡す exec(`C:\\Users\\hoge\\Desktop\\makesign.bat "${value}"`, { encoding: 'utf8' }, (err, stdout, stderr) => { if (err) { res.writeHead(500); res.end('Error executing batch: ' + stderr); } else { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end(stdout.trim()); } }); }); } else { res.writeHead(404); res.end('Not found'); }});server.listen(12345, () => {console.log('Batch serverrunningathttp://localhost:12345/');});
@echo offsetlocal enabledelayedexpansion::署名するファイル名set "infile=%~1"set outfile=%TEMP%\pgp_output.asc:: 以前の出力があれば削除if exist "%outfile%" del "%outfile%":signloop::AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える)start "" /b "C:\Users\hoge\Documents\AutoHotkey\autopass.ahk"::PGPクリア署名を作成echo %infile% | gpg --yes --clearsign --output "%outfile%"::署名が成功していればループを抜けるif exist "%outfile%" (goto postprocess) else ( timeout /t 1> nulgoto signloop):postprocesspowershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body =Get-Content '%outfile%' -Raw;Write-Output ($header + \"`r`n\" + $body + $footer)"powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body =Get-Content 'signed.asc' -Raw;Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)"endlocalexit /b
#Persistent#SingleInstance ignoreSetTitleMatchMode, 2WinWaitActive, pinentrySendInputpasswordSleep 100SendInput {Enter}ExitApp
動けばいいという考えで作っているので余分なコードも含んでいるかもしれない。
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20250613185036 -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEv1FQAKCRBwMdsubs4+SHHkAQDUOLgBcdji2T6MJ7h/vlMdFfGlWAzNdXijjE1gIuEPywEAiMNMZqhrMmtlc7UqRuggNJ/UTa5xTIcKp622+7jJQQg==Lgkl-----ENDPGP SIGNATURE-----
ようやく(ほぼ)すべてが自動化された。
あとはローカルサーバーの起動をスタートアップに設定する(方法をAIに聞いて指示に従う)だけの消化試合。
署名時要求してくるパスワードを自動入力するahkファイルはドキュメントのAutoHotkey配下に置いた。
バッチファイル(make.sign.bat)はデスクトップに置いた。
#Persistent#SingleInstance ignoreSetTitleMatchMode, 2WinWaitActive, pinentrySendInput お前のパスワードSleep 100SendInput {Enter}ExitApp
//run-batch-server.jsconsthttp =require('http');const { exec } =require('child_process');const server =http.createServer((req, res) => { if (req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.url === '/run-batch') { exec('C:\\Users\\you\\Desktop\\makesign.bat', (err) => { res.writeHead(200); res.end(err ? 'Error' : 'OK'); }) ; } else { res.writeHead(404); res.end('Not found'); }});server.listen(12345, () => {console.log('Batch serverrunningathttp://localhost:12345/');});
@echo offsetlocal enabledelayedexpansion::ミリ秒単位のUTC時刻を取得for /f %%a in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') doset timestamp=%%a::署名するファイル名set infile=%TEMP%\pgp_input.txtset outfile=%TEMP%\pgp_output.asc:: 以前の出力があれば削除if exist "%outfile%" del "%outfile%"::タイムスタンプを原文として保存echo %timestamp%> "%infile%":signloop::AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える)start "" /b "C:\Users\infini\Documents\AutoHotkey\autopass.ahk"::PGPクリア署名を作成gpg --yes --clearsign --output "%outfile%" "%infile%"::署名が成功していればループを抜けるif exist "%outfile%" (echo [INFO]署名成功goto postprocess) else (echo [WARN]署名失敗、再試行します… timeout /t 1> nulgotosignloop):postprocess::PowerShellで余計な改行なしに |< をつけてクリップボードにコピーpowershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body =Get-Content '%outfile%' -Raw;Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)"echo Done.signed.asc created and clipboard updated (no extra blankline).endlocalexit /b
// ==UserScript==// @namePGP署名自動付加スクリプト(GM_xmlhttpRequest版)// @namespacehttp://tampermonkey.net/// @version 1.0// @description投稿前にPGP署名を付けてから送信(fetch未使用)// @matchhttps://anond.hatelabo.jp/dorawii_31/edit*// @grant GM_xmlhttpRequest// @grant GM_setClipboard// @grant GM_notification// / @connectlocalhost// ==/UserScript==(function () { 'use strict';const submitId = 'submit-button';consttextareaId = 'text-body';const localServer = 'http://localhost:12345/run-batch';constpgpSignatureRegex = /-----BEGINPGPSIGNEDMESSAGE-----[\s\S]+?-----BEGINPGPSIGNATURE-----[\s\S]+?-----ENDPGPSIGNATURE-----/;consthttpRequest = (url) => { return newPromise((resolve,reject) => { GM_xmlhttpRequest({ method: 'GET',url:url, onload: function (response) { resolve(response.responseText); }, onerror: function (error) {reject(error); } }); }); };const interceptClick = () => {constbtn = document.getElementById(submitId); if (!btn ||btn.dataset.pgpIntercepted === 'true') return;btn.dataset.pgpIntercepted = 'true';btn.addEventListener('click', async function (e) {consttextarea = document.getElementById(textareaId); if (!textarea) return;const content =textarea.value; if (pgpSignatureRegex.test(content)) {console.log('[PGPスクリプト]署名が検出されたためそのまま送信します'); return; } e.preventDefault(); e.stopImmediatePropagation();console.log('[PGPスクリプト]署名が見つからないため処理を停止し、署名を取得します');try { awaithttpRequest(localServer); //バッチ実行constsignatureText = await navigator.clipboard.readText(); if (!signatureText.includes('BEGINPGPSIGNEDMESSAGE')) { alert('PGP署名がクリップボードに見つかりませんでした。'); return; }const newText = content.replace(/\s*$/, '') + '\n' +signatureText + '\n';textarea.value = newText;console.log('[PGPスクリプト]署名を貼り付けました。送信を再開します。');btn.click(); //イベント再発火 }catch (err) { alert('PGP署名の取得または貼り付けに失敗しました。\n' + err); } },true); }; window.addEventListener('load', () => {setTimeout(interceptClick, 1000); });})();
プロミスメソッドとか全然まだ理解してなくてそのなかに関数代入したその関数にオブジェクトのプロパティにresponseを?いやまあそのあたりのコードが示すデータの流れが全然理解できないような人間でもここまでできちゃった。
AIすごいなと思うよ。そして思うのは今後重要になってくるのは文法とか自体に詳しいことじゃなくて、そのプログラムの処理内容を指示できるシステムエンジニア的な言語化能力のほうじゃないかなと思った。
-----BEGINPGPSIGNEDMESSAGE-----Hash: SHA51220250609111559680 -----BEGINPGPSIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEbCbwAKCRBwMdsubs4+SLueAPwOv7PBk4voAe5qlcCEvs/PJhmKc5QAb/1R43JMQFuDZgD/UTPEKsL/PhK9jFGv2HDXK1dVjLNwvosgX9uYJh5xxwY==qiOE-----ENDPGPSIGNATURE-----
最近になって増田で複垢自演ブクマが行われてるのを初めて見たという人向けに基本的なことを少しだけ説明する。
自演が疑われる記事やアカウントに対しては、以下のリンクにあるように、簡単に運営に通報できる仕組みが用意されている。
問い合わせフォームから通報する時は、自演の疑いがあるアカウントと記事のURLを忘れずにコピペすること。
https://hatena.zendesk.com/hc/ja/articles/900004879046
真偽不明だが、上記の通報機能を使ったけど運営に届いていなかったという報告が増田に投稿されている。
https://anond.hatelabo.jp/20220810222751
ちゃんと通報が届くのか不安な人は以下の問い合わせフォームを利用したほうがいいかもしれない。
https://hatena.zendesk.com/hc/ja/requests/new
もし通報したアカウントが本当に自演していた場合はきっちりBANされるようになっている。
ただし通報が完了してから即対処されるわけではない。問い合わせにも順番待ちというものがあることと、運営による状況の確認作業が必要だということは留意する必要がある。対処までの時間は場合によって異なり、数時間から数日程度と幅があるのだが、通報したのが土日祝日などの運営が休みの日だと、休み明けになってからの対応となる。
テクウヨ増田に関しては、ほぼ毎回通報していたのだが、通報した日の夕方にBANされてその日の夜にまた復活するというパターンが多かった。
自演していたアカウントがBANされたとしても、記事の方も一緒に削除されるとは限らない。そのまま残っていることも往々にしてある。
そして記事が削除された場合であっても、ブクマページがNot Found状態になる場合とならない場合の2パターンがある。
誰がどう見てもわかるくらい堂々と自演が行われていた場合であったとしても、基本的に運営というのは利用者からの通報がなければ動くことはない。
自演行為に対してブコメや増田で「運営は何してんだ、ちゃんと対処してくれよ」的なことをいくら書いたところで対処されることはないので、もし本当に何とかしてほしいと思っているのであれば、自分から通報なり問い合わせをして運営側に問題を認知してもらうほかない。
top 41 - 60
top 21 - 40