「not found」を含む日記 RSS

はてなキーワード: not foundとは

2026-04-24

つの間にか消えていた

自分日記を読み返していたら、とあるブログについて触れていた。そのブログ音楽批評をしていた、というか私が読んだ記事音楽批評をしていた。THE BACK HORNART-SCHOOLなどのバンド名と曲名をググって出てきた記事をいくつか読んだ。もしかしたら「おもしれーその解釈」と思いながら読んだアニメギルティクラウン』の批評も同じブログだったかもしれない。記憶曖昧だ。しかし、読んだ記事はどれも「おもしれー」と思った記憶だけは残っている。

久しぶりにそのブログ記事を読みたいと思い、とりあえず日記記述を手掛かりに ”THE BACK HORN 晩秋” でググってみる。出てこない。日記には他にも『炭鉱カナリアとあるので、「こんなブログ名だったな〜」と思いググる。出てこない。色々試していると、そのブログを「最高のブログ」と言っているツイートを見つける。お、まだやってるのか?(暖簾のある店か)

 

やってなかった。見付けることが出来たのは、「単行カナリア」がはじまるきっかけになった人のブログだけだった。彼らがオフ会したことが書かれている記事があったので読んだ。晴れた日に木陰でさらさらと心地よい風を感じているみたいな、しみじみいい記事だった。この所感のありふれた形容は挿入されていた写真によるところが大きい。

記事にはブログへのリンクが貼られていた。

 

 

404 Blog is not found

お探しのページは見つかりませんでした。

 

 

インターネッツの儚さを思い知る。支部の素晴らしい小説が削除されていたときも同じ気持ちになったけれど、そのときは忘れた頃に作者が投稿し直していた。個人サイト二次創作サイトが消えたときも同じ気持ちになったけれど、そのときは別のサイトを別ジャンル運営しているのをたまたま見付けることが出来た。

 

ブログの人(ブロガーって言い慣れなさすぎて紫の人みたいになっている)が健やかであればいいと願う。

つの間にか消えていた

自分日記を読み返していたら、とあるブログについて触れていた。そのブログ音楽批評をしていた、というか私が読んだ記事音楽批評をしていた。THE BACK HORNART-SCHOOLなどのバンド名と曲名をググって出てきた記事をいくつか読んだ。もしかしたら「おもしれーその解釈」と思いながら読んだアニメギルティクラウン』の批評も同じブログだったかもしれない。記憶曖昧だ。しかし、読んだ記事はどれも「おもしれー」と思った記憶だけは残っている。

久しぶりにそのブログ記事を読みたいと思い、とりあえず日記記述を手掛かりに ”THE BACK HORN 晩秋” でググってみる。出てこない。日記には他にも『炭鉱カナリアとあるので、「こんなブログ名だったな〜」と思いググる。出てこない。色々試していると、そのブログを「最高のブログ」と言っているツイートを見つける。お、まだやってるのか?(暖簾のある店か)

 

やってなかった。見付けることが出来たのは、「単行カナリア」がはじまるきっかけになった人のブログだけだった。彼らがオフ会したことが書かれている記事があったので読んだ。晴れた日に木陰でさらさらと心地よい風を感じているみたいな、しみじみいい記事だった。この所感のありふれた形容は挿入されていた写真によるところが大きい。

記事にはブログへのリンクが貼られていた。

 

 

404 Blog is not found

お探しのページは見つかりませんでした。

 

 

インターネッツの儚さを思い知る。支部の素晴らしい小説が削除されていたときも同じ気持ちになったけれど、そのときは忘れた頃に作者が投稿し直していた。個人サイト二次創作サイトが消えたときも同じ気持ちになったけれど、そのときは別のサイトを別ジャンル運営しているのをたまたま見付けることが出来た。

 

ブログの人(ブロガーって言い慣れなさすぎて紫の人みたいになっている)が健やかであればいいと願う。

つの間にか消えていた

自分日記を読み返していたら、とあるブログについて触れていた。そのブログ音楽批評をしていた、というか私が読んだ記事音楽批評をしていた。THE BACK HORNART-SCHOOLなどのバンド名と曲名をググって出てきた記事をいくつか読んだ。もしかしたら「おもしれーその解釈」と思いながら読んだアニメギルティクラウン』の批評も同じブログだったかもしれない。記憶曖昧だ。しかし、読んだ記事はどれも「おもしれー」と思った記憶だけは残っている。

久しぶりにそのブログ記事を読みたいと思い、とりあえず日記記述を手掛かりに ”THE BACK HORN 晩秋” でググってみる。出てこない。日記には他にも『炭鉱カナリアとあるので、「こんなブログ名だったな〜」と思いググる。出てこない。色々試していると、そのブログを「最高のブログ」と言っているツイートを見つける。お、まだやってるのか?(暖簾のある店か)

 

やってなかった。見付けることが出来たのは、「単行カナリア」がはじまるきっかけになった人のブログだけだった。彼らがオフ会したことが書かれている記事があったので読んだ。晴れた日に木陰でさらさらと心地よい風を感じているみたいな、しみじみいい記事だった。この所感のありふれた形容は挿入されていた写真によるところが大きい。

記事にはブログへのリンクが貼られていた。

 

 

404 Blog is not found

お探しのページは見つかりませんでした。

 

 

インターネッツの儚さを思い知る。支部の素晴らしい小説が削除されていたときも同じ気持ちになったけれど、そのときは忘れた頃に作者が投稿し直していた。個人サイト二次創作サイトが消えたときも同じ気持ちになったけれど、そのときは別のサイトを別ジャンル運営しているのをたまたま見付けることが出来た。

 

ブログの人(ブロガーって言い慣れなさすぎて紫の人みたいになっている)が健やかであればいいと願う。

派遣社員へのパワハラ問題になりIT企業退職することになった」←これ

Not Foundなんスけど……いいんスかこれで

2026-04-20

anond:20260420092336

どんなコンテンツをお探しですか?(Page Not Found)

お探しの記事は見つかりませんでした。

URLが誤っているか、公開期間を終了した可能性があります

5秒後に自動トップページに移動します。

2026-02-04

増田は恐ろしいところ

ついたトラバを見にいこうとすると消えてるし

性器俗称ばかり書いてあるし

後で読もうとしてブクマすると「Not Found」だし

なんか自分id書いてるやついるし

安穏としたこと書くとAIとか言われるし

排泄や自慰の報告するやつが複数いるし

平日はどの日もすいすいすいようび~だし




字下げや京都ゴミ大学いたころの方がまだましだと思う

2026-02-02

anond:20260202145227

一回消されたから分かるが来るよ

あと運営に直接消された増田ブクマエントリごと消えてNOT FOUNDになる

2026-01-30

[]X魚拓スパムの覚書

2026-01-09

昨日からはてなブックマークに通知が来るんだが

ヤングエースUP」って漫画サイトがあるんだけど最近仕様変更した関係カドコミに移行したのよね

で多分これが問題なんだろうね

ヤングエースUPの過去はてブページってもうないのよね

なのに昨日からはてなブックマークに謎の「あなたが1番目にブックマークした「作品一覧」ヤングエースUP記事が注目されてる」として30ブクマ、100ブクマ毎に通知が来まくってて

確認したら去年のブックマークないしブコメが集中してて今頃30ブクマになったとか100ブクマになったとかじゃないものまで唐突にその表示で通知が来るようになった

そもそもカドコミを直接ブクマしてもタイトル画面がURLのまま(初ブクマ時はタイトル漫画タイトル登録されるのに時間経過でURL表示になったりそのURLからアクセスしてもNot Foundになったりする)ではてなブックマーク自体カドコミに対応してないのが丸わかりな中でこんな嫌がらせみたいな通知が今頃になって頻繁に来るのは本当に迷惑なので早く治して欲しい

そしてどうせならカドコミを直接ブクマ出来るようにして欲しいよね

最近別の漫画サイトのファイアクロスも直接ブクマ出来なくなってるし早急な仕様変更が求められてると思うんだよね

はてなブックマークが長らく仕様変更等に対応出来てないんじゃないか

そして治す気もないならマジで不便だよ。シェアしたいのに運営方針でさせて貰えない事ほどつらい事はないよ

2025-12-09

はてなブックマーク増田一覧向けNGフィルタ

はてなブックマーク増田一覧の、さらに「すべて」(1 user)をチェックしている希有な人向けのユーザースクリプトを公開します。

https://b.hatena.ne.jp/site/anond.hatelabo.jp/?sort=eid

// ==UserScript==
// @name        Hatena Bookmark Anond Filter
// @namespace   https://b.hatena.ne.jp/site/anond.hatelabo.jp/
// @description はてなブックマークの『はてな匿名ダイアリー』の記事のうち、指定したNGワードが含まれ投稿非表示します。
// @match       https://b.hatena.ne.jp/site/anond.hatelabo.jp/*
// @grant       none
// @version     2.1.2026.04.29.0027
// ==/UserScript==
/*
2.1.2026.03.25.0023 正規表現対応10 users 以上の人気記事を除外判定。
2.0.2026.01.28.0015 ポイント制を導入。
1.0.2025.12.09.0000 公開。
**/
(function(){
  const SCRIPTID = 'HatenaBookmarkAnondFilter';
  console.time(SCRIPTID);
  const FILTERED = 'filtered';/* フィルタ該当要素クラス */
  const CHECKED = 'checked';/* 二重チェック回避フラグ */
  const USERS = 10;/* 人気記事なら誤検知スパム解説などの可能性があるので除外する */
  const POPULAR = 'popular';/* 人気記事クラス */
  const ONCE = 1, AP = 2, INTERVAL = 3;/* 適用タイミング */
  const NGWORDS = {/* 合計100ポイント非表示判定(ただし1つの記事内で同じワード複数使われても1度しか加算しない) */
    '100': [/* 即NG確定ワード */
      'dorawii',
      'あおやまちゃん', 'アオヤマチャン', 'ボスマン',
      '大学たいてい', 'なんぴょん', 'れめくん', 'れめきゅん', 'えめくん', 'るまさん', 'るまおねえちゃん', '眠りの民', 'リュックサック野郎', 'boushi_inst', 'hakaikami', 'Rekyu', 'iloveootaku_2', 'osaka-sirokichi',/* 電気通信大学たいてい鉄道研究会れめくん(頻出) */
      /*A-G*/'a9w8ru6fqyxqfv9', 'admirail_togo', 'akibakko6348', 'alf1974al', 'amatukiseiru', 'anapgoeson', 'aoi_mizuho', 'asapgoeson', 'asupgo', 'asupgoeson', 'avoid_bds_kk', 'b6jbpsji91ieigt', 'bmi22yo', 'boushi_instrail', 'boushi_ob', 'buscholarx', 'bw0531', 'chihiro_love415', 'circlecavok', 'disney1007cla', 'dora22sibuya', 'donkotrain', 'ecotosk', 'electlone', 'factomodachi', 'fft_dareka', 'gmhtcyznf_abc', 'goesonanap', 'gyudon_honmono',
      /*H-N*/'h13_yokohama', 'h2twi', 'H2TWR', 'hamaishogo1111', 'haru_mofumoffu', 'hermitv8', 'hide1798038', 'hirabiscus', 'hinolovelove', 'hnmk0127_03', 'inaken17_', 'inte235dy', 'ixtabes', 'jamcombatge', 'kawachiasukanew', 'kaoru_ai1991', 'keio9730F', 'kiha2228', 'kihatena200', 'koreanlabsfc', 'koyounoyooko', 'kqlex1500', 'kunugiyamaosake', 'kurakamasan', 'kurotamaxxx', 'kt_ruma_1372', 'kt_up_date', 'lightningreen77', 'luckyyusha', 'mamadoll_kun', 'matya_uec', 'michee_n', 'minamihinawot', 'miniminicot', 'minori0151', 'mizunyanpanda', 'monkichi_22', 'mugen_08i', 'mukoroku651', 'nakano6409', 'nanpyong', 'new_oer', 'nimouec', 'NoName_thUFO', 'norannnde',
      /*O-U*/'oreizmmiporin', 'orenotanoshimi', 'osaka_sirokichi', 'papepoco', 'pasotokon', 'pm95uq', 'portrail', 'reme_kun', 'ruin_2002', 'rx00shiratama03', 's03_amurtk2731', 'sacchan03110319', 'sacchanenjoy', 'seishinyamate_', 'seisu_bot', 'senanana_cos', 'shinano_115', 'shineleaf1372', 'Shirasagi494', 'shop_bullet', 'shurimpy', 'soroisoroi', 'sui_pm95uq', 'sweidan821858', 'taiyaki_level2', 'takao_straight5', 'taking0000', 'tarotaromusic1', 'tc201_501', 'thomas_returnee', 'tocarbarn', 'tokusatsu_fan_0', 'toshikimiyazaki', 'train_magician', 'tx9y2cpwdz27255', 'u2fap5u4zw57811', 'uec15take', 'uecdaisuki', 'UECert', 'uecrail',
      /*V-Z_0-9*/'vampire_mio', 'vbdmnwefknmxsdm', 'vp20th', 'wafue', 'wakasato_', 'walkingniwatori', 'wataameexpress', 'ya4975349616894', 'yayoiulc', 'ymbk_arisa', 'yms_uec16', 'yorozun', 'yuuya_1104_uec', '__________ob', '_chocorail_', '_doitforthewin_', '_toeshin', '_unigmo', '100mph_no_yuuki', '16887y', '169_D51_protect', '205musashino', '2969364x', '2rtkvn34il2783', '36kyo', '86lilxw1',
      /(?!(.)\1{19,})(.{20,})\2{2}/,/* 20文字以上の文を3回以上繰り返す */
      /(?!(.)\1{29,})(.{30,})\2{1}/,/* 30文字以上の文を2回以上繰り返す */
      /(?!(.)\1{79,})(.{80,}).*\2/,/* 80文字以上の文が2回以上現れる */
      'テクウヨ', '自己放尿',
      ' ーーーーーーーー', 'https://anond.hatelabo.jp/20260107144223',/* AI問答貼り付け増田 */
      '†噛み締めて行こうな†', 'https://anond.hatelabo.jp/20250826121213#',
      '困難女性(コンジョ)', '困難女性(コンジョ)', 'コンジョ自警団',
      'Boost', 'Cash', 'Coin Master', 'Dice', 'Free', 'Gift', 'Guide', 'Follower', 'Generator',/*英文スパム*/
    ],
    '90': [/* ほぼNG */
      'megalodon.jp',
      'tadaup.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 => {
        if(parseInt(li.querySelector('span.entrylist-contents-users > a > span').textContent) > USERS) li.classList.add(POPULAR);
        else li.querySelector('li.entrylist-contents-category > a').textContent = li.dataset.matches;
      }, `.${FILTERED}:not(.${POPULAR}){display: none;}`, AP],
    ],
  };
  const rules = sites[Object.keys(sites).find(prefix => location.href.startsWith(prefix))];
  if(rules === undefined) return console.log(SCRIPTID, 'Not found any sites.');
  const scores = 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';
      const text = e.textContent.toLowerCase();
      let total = 0, matches = [];
      for(const score of scores){
        for(const word of NGWORDS[String(score)]){
          switch(true){
            case(typeof word === 'string' && text.includes(word.toLowerCase())):
            case(word instanceof RegExp && word.test(text)):
              total += score;
              matches.push(word);
              if(total >= 100){
                e.classList.add(FILTERED);
                e.dataset.matches = matches.join(', ');
                if(modifier) modifier(e);
                return;
              }
              break;
          }
        }
      }
    });
  };
  /* 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);
})();
/* Hatena Bookmark Anond Filter */
.filtered:not(.popular){
  display: block !important;/*上書き*/
  opacity: .25 !important;
}
.filtered:not(.popular):hover{
  opacity: .75 !important;
}
.filtered:not(.popular) li.entrylist-contents-category{
  background: red !important;
  font-weight: bold;
}

検索用: はてなブックマーク はてブ はてな匿名ダイアリー 増田 スパム 荒らし キーワード NGワード フィルタミュー非表示 削除 隠す ブロック 対策 ユーザースクリプト ユーザースタイル hatena bookmark anond spam keywords ngwords filter mute hide hidden display none block userscript JavaScript js css style

2025-11-01

投稿記事リンク記事ブクマしていたが後に削除されたアカウント
2025年05月27日ウクライナ戦争に参加した日本人義勇兵達の絶望の未来 - 76usersmgdothe
2025年05月30日ここ6~7年前から反社属性のオタク界隈関係者増えすぎじゃね? - 31usersmgdothe
2025年06月26日すまん、AIって全然使えなくね? - 547usersmgdothe parisbird
2025年06月30日すまん、AIってやっぱ有料でも使えんし格差拡大するだけじゃね?危険じゃね? - 53usersparisbird
2025年07月02日AIが技術的に根本から全く使えない3つの理由 - 58usersparisbird
2025年07月16日SNS界隈やエンタメ界隈ってもはや低強度紛争状態だよな - 5usersmgdothe parisbird
2025年08月25日政治にお熱な事は大いに結構だが、オタク界隈に関わるんじゃねえ - 2usersmgdothe parisbird
2025年08月28日ネット辞めたほうがQOL爆上がりすると気づいた、もう楽になろうぜ - 395usersmgdothe parisbird
2025年09月03日ウクライナに消えたぼくのフレンド - 154usersmgdothe parisbird
2025年09月04日ある日本人義勇兵の死~敗北者たちの黄昏~ - 11usersmgdothe parisbird
2025年09月07日IT企業経営者の兄が首を吊って自殺した - 341usersmgdothe parisbird cvtte56
2025年09月11子供がいじめを受けた、家庭のすべてが崩壊した - 6usersmgdothe parisbird cvtte56 akuaku-88
2025年09月11親族(15)がまさかの補導でパ〇活やってたことが判明【追記】 - 30usersmgdothe parisbird cvtte56 akuaku-88
2025年09月16日友人のIT企業社長が逮捕されてから人生終了するまでの話 - 54usersmgdothe parisbird GUNIT-011
2025年09月18日疑問なんだがITエンジニアってDV癖のあるやつ多いの?【補記】 - 219usersmgdothe parisbird GUNIT-011
2025年09月19日妹夫婦が性交渉の不一致で離婚することになった(ま~たIT系かい…) - 269usersmgdothe parisbird GUNIT-011 dorohedorone
2025年09月22日発狂されそうだけど、純粋に人間としてつまらんのよ増田は - 260usersmgdothe parisbird GUNIT-011 dorohedorone
2025年09月22日妹夫婦が性交渉の不一致で離婚危機だったが落し所が見つかった - 12usersmgdothe parisbird GUNIT-011 dorohedorone
2025年09月27日20代末から40歳まで11~2年しかないのに何で気が付かなかったの? - 347usersmgdothe parisbird GUNIT-011 dorohedorone
2025年09月29日婚活での虚しい嘘成功例、ハッキリ言って憐れである - 196usersmgdothe parisbird GUNIT-011 dorohedorone
2025年09月30日すまん、非モテ中年達はテロリストにでもなりたいの? - 115usersmgdothe parisbird GUNIT-011 dorohedorone
2025年09月30日いや、マジであんだけイキってて20歳末~40歳までお前ら何してたの? - 8usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月01日太字長文説教増田、ガチで予言者だろコイツ - 36usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月01日ぶっちゃけ日本のIT技術者のレベルが元々低いだけだよね① - 501usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月04日海外でITエンジニアをしていた時に予言された事通りに業界がなってる - 538usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月06日追記:2025年-俺達が信じたITの夢の果てにて - 52usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月07日割とマジで発達障害がITに向いてるって誰が言いだしたんだ? - 131usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月09日一生食えるスキルがない?何でITエンジニアになんかなったの? - 69usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月13日ネット民が恋愛できないのってぶっちゃけ日本の国策なんだが - 66usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月15日お前らの雲より高い恋愛願望叶える方法って真面目にテロしかなくね? - 119usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月17日増田が大好きななろう系が衰退してる理由 - 79usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月18日なろう系(カクヨムだの亜種含む)の層の人たちってこんなのだから - 44usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月18日正直ああいう人たちは恋愛脳じゃなくて「家族コンプレックス」だよね - 121usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月20日「日本のITは国に潰された!」👈そりゃ潰されるだろこんな業界 - 21usersmgdothe parisbird GUNIT-011 dorohedorone
2025年10月30日アラフォー元特殊作戦群、ハッキリ言って人生終わっている - 241userssft98 shotshow megapic gjchang PJ-F16 pmpan67
2025年10月31日やっぱり俺ら陸自の特戦群は日本人のオモチャ扱いか、人権ないんか - 168usersquiet001 burn-burnag1 bva-wwx gjchang PJ-F16 pmpan67
2025年12月23日国際勝共連合のテロリストだった父との思い出 - 524usersjack-o89 jaxfg4
2025年12月24日父の活動について追記:質問と回答① - 4usersjack-o89 jaxfg4
2025年12月25日国際勝共連合のテロリストだった父の「秘密戦争」① - 16usersjack-o89 jaxfg4 nanonanosts dorochangku hondeman egkun
2026年01月04日1980年代でアメリカ傭兵スクールに行った話 - 7usersdainabookskun necnectua egkun
2026年01月10日ネット商売して目立ってる人たちって「ヤクザ化」していく不思議 - 6usersdainabookskun necnectua gopic egkun
2026年01月11アメリカでITエンジニアからテロリストになった兄の話 - 420usersdainabookskun necnectua gopic
2026年01月11アメリカでITエンジニアからテロリストになった兄の話 追記 - 153usersgopic
2026年01月11アメリカでITエンジニアからテロリストになった兄の話 追記2 - 143usersgopic
2026年01月22日元ITエンジニアの兄がまたテロリストになってしまった - 5usersdainabookskun necnectua gopic

2025-09-02

増田豆知識

ブクマされた増田概要Not Foundになるのは「そのエントリ投稿けが削除された時」

同一人物記事が一斉に消えて、しかNot Foundにならないのは「アカウントが削除された時」

2025-07-18

今見るとhttps://anond.hatelabo.jp/20250717115805が消えてるんだけど(自作ゲーム宣伝する増田)

増田を消しただけだとブクマページに残ると思うんだけど、そっちがNot Foundになってるのってどういうことなの?

2025-06-25

anond:20250624172640

Not Foundにこういうことするとお前も消されるぞ

2025-06-24

anond.hatelabo.jp/20250624000759

ブクマページでNot foundになっていたのでなんだっけ?とグーグル検索したところ判明した回

2025-06-13

我が名はサイボーグdorawii

パーマリンク署名対象にするより堅牢自動化を作れた。

一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。

改めてスクリプト配布しちゃる

最初投稿してエントリページに移動した親タブ側のjsコード
// ==UserScript==
      // @name         PGP署名検出と別タブ自動編集
      // @namespace    http://tampermonkey.net/
      // @version      1.0
      // @description  PGP署名がない投稿自動編集ページへ誘導
      // @match        https://anond.hatelabo.jp/*
      // @grant        GM_setValue
      // @grant        GM_getValue
      // @grant        GM.openInTab
      // ==/UserScript==

      (function () {
        'use strict';

        const body = document.getElementById('entry-page');
        if (!body) return;

        const titleText = document.title;
        if (!titleText.includes('dorawii')) return;

        const pgpRegex = /BEGIN.*PGP(?: SIGNED MESSAGE| 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 });

      })();
親タブから開かれる編集ページの子タブのjsコード
 // ==UserScript==
      // @name         編集ページ処理と自動送信・閉じ
      // @namespace    http://tampermonkey.net/
      // @version      1.0
      // @description  編集ページで署名処理と送信、タブ自動閉じ
      // @match        https://anond.hatelabo.jp/dorawii_31/edit?id=*
      // @grant        GM_getValue
      // @grant        GM_xmlhttpRequest
      // @grant        GM_setClipboard
      // @grant        GM_notification
      // @connect      localhost
      // ==/UserScript==

      (async function () {
        'use strict';

        const shouldRun = await GM_getValue('open-tab-for-edit', '0');

        const textareaId = 'text-body';
        const textarea = document.getElementById(textareaId);

        if (!textarea) return;

        const content = textarea.value;

        const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/;
        if (pgpSignatureRegex.test(content)) {
          console.log('[PGPスクリプト] 署名が検出されたためそのまま送信します');
          return;
        }

        const httpRequest = (url, data) => {
          return new Promise((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 = new URL(window.location.href);

        // 2. ベースとなる部分 (例: "https://anond.hatelabo.jp") を取得
        const origin = currentUrl.origin;

        // 3. 'id' パラメータの値 (例: "20250610184705") を取得
        const idValue = currentUrl.searchParams.get('id');

        // 4. ベース部分とIDを結合して、目的URL文字列を生成
        //    idValueが取得できた場合のみ実行する
        let newUrl = null;
        if (idValue) {
          newUrl = `${origin}/${idValue}`;
        }

        // 5. 生成されたURL変数に代入し、コンソールに出力して確認
        console.log(newUrl);
        const valueToSend = newUrl;

        try {
          const signatureText = await httpRequest('http://localhost:12345/run-batch', valueToSend);
          console.log('バッチ応答:', signatureText);
          if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) {
            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をキャンセル
            const bodyText = textarea?.value || '';

            // reCAPTCHA トークンの取得
            const recaptchaToken = await new Promise((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 {
              const response = 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);
        }

      })();
node.jsで動かすローカルサーバーコード
const http = 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') {
    let body = '';

    req.on('data', chunk => {
      body += chunk.toString();
    });

    req.on('end', () => {
      const parsed = querystring.parse(body);
      const value = 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 server running at http://localhost:12345/');
});
@echo off
setlocal 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 > nul
    goto signloop
)
:postprocess

powershell -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)"

endlocal
exit /b
AutoHotkey(以前と同じ)
#Persistent
#SingleInstance ignore
SetTitleMatchMode, 2
WinWaitActive, pinentry
SendInput password
Sleep 100
SendInput {Enter}
ExitApp

動けばいいという考えで作っているので余分なコードも含んでいるかもしれない。

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

https://anond.hatelabo.jp/20250613185036 
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEv1FQAKCRBwMdsubs4+
SHHkAQDUOLgBcdji2T6MJ7h/vlMdFfGlWAzNdXijjE1gIuEPywEAiMNMZqhrMmtl
c7UqRuggNJ/UTa5xTIcKp622+7jJQQg=
=Lgkl
-----END PGP SIGNATURE-----

2025-06-09

dorawii

ようやく(ほぼ)すべてが自動化された。

あとはローカルサーバーの起動をスタートアップに設定する(方法AIに聞いて指示に従う)だけの消化試合

ここにほとんどAI頼りのコードを公開しておく。

事前にインストールしておくもの

autohotkey

nodejs

ユーザースクリプトを実行できる拡張機能

パスとかの注意

署名要求してくるパスワードを自動入力するahkファイルドキュメントAutoHotkey配下に置いた。

バッチファイル(make.sign.bat)はデスクトップに置いた。

以下コード

autopass.ahk
#Persistent
#SingleInstance ignore
SetTitleMatchMode, 2
WinWaitActive, pinentry
SendInput お前のパスワード
Sleep 100
SendInput {Enter}
ExitApp
run-bacth-server.js
// run-batch-server.js
const http = 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 server running at http://localhost:12345/');
});
makesign.bat
@echo off
setlocal enabledelayedexpansion

:: ミリ秒単位UTC時刻を取得
for /f %%a in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') do set timestamp=%%a

:: 署名するファイルset infile=%TEMP%\pgp_input.txt
set 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 > nul
    goto signloop
)
: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 blank line).
endlocal
exit /b
tempermonkeyとかに登録するユーザースクリプト
// ==UserScript==
// @name         PGP署名自動付加スクリプト(GM_xmlhttpRequest版)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  投稿前にPGP署名を付けてから送信(fetch未使用)
// @match        https://anond.hatelabo.jp/dorawii_31/edit*
// @grant        GM_xmlhttpRequest
// @grant        GM_setClipboard
// @grant        GM_notification
// / @connect      localhost
// ==/UserScript==

(function () {
  'use strict';

  const submitId = 'submit-button';
  const textareaId = 'text-body';
  const localServer = 'http://localhost:12345/run-batch';

  const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/;

  const httpRequest = (url) => {
    return new Promise((resolve, reject) => {
      GM_xmlhttpRequest({
        method: 'GET',
        url: url,
        onload: function (response) {
          resolve(response.responseText);
        },
        onerror: function (error) {
          reject(error);
        }
      });
    });
  };

  const interceptClick = () => {
    const btn = document.getElementById(submitId);
    if (!btn || btn.dataset.pgpIntercepted === 'true') return;
    btn.dataset.pgpIntercepted = 'true';

    btn.addEventListener('click', async function (e) {
      const textarea = 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 {
        await httpRequest(localServer); // バッチ実行

        const signatureText = await navigator.clipboard.readText();
        if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) {
          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すごいなと思うよ。そして思うのは今後重要になってくるのは文法とか自体に詳しいことじゃなくて、そのプログラムの処理内容を指示できるシステムエンジニア的な言語化能力のほうじゃないかなと思った。

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

20250609111559680 
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEbCbwAKCRBwMdsubs4+
SLueAPwOv7PBk4voAe5qlcCEvs/PJhmKc5QAb/1R43JMQFuDZgD/UTPEKsL/PhK9
jFGv2HDXK1dVjLNwvosgX9uYJh5xxwY=
=qiOE
-----END PGP SIGNATURE-----

2025-05-03

anond:20250503070028

asumi2021 試しに一つハテブで確認したけど、運営削除事例(NOT FOUND)ではなかった https://b.hatena.ne.jp/entry/s/anond.hatelabo.jp/20250423013729 (参考;昨年の自演事件 https://anond.hatelabo.jp/20241129214529)

not foundじゃなくても運営削除なんやろうなって時は結構あるやで

自演垢のBANと同時に消えるエントリnot foundじゃない削除の方が多いんよな

2025-05-01

はてな複垢自演を見かけたとき対処

最近になって増田複垢自演ブクマが行われてるのを初めて見たという人向けに基本的なことを少しだけ説明する。

運営通報する方法

自演が疑われる記事アカウントに対しては、以下のリンクにあるように、簡単運営通報できる仕組みが用意されている。

問い合わせフォームから通報する時は、自演の疑いがあるアカウント記事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パターンがある。

https://b.hatena.ne.jp/q/anond.hatelabo.jp%20not%20found?target=all&date_range=all&sort=recent&safe=off&users=1

なぜ通報する必要があるのか

誰がどう見てもわかるくらい堂々と自演が行われていた場合であったとしても、基本的運営というのは利用者から通報がなければ動くことはない。

自演行為に対してブコメ増田で「運営は何してんだ、ちゃん対処してくれよ」的なことをいくら書いたところで対処されることはないので、もし本当に何とかしてほしいと思っているのであれば、自分から通報なり問い合わせをして運営側に問題認知してもらうほかない。

もし暴れていた自演アカウント荒らし投稿が消えたなら、それは誰かが通報たからだと思ったほうがいい。

ログイン ユーザー登録
ようこそ ゲスト さん