はてなキーワード: ワッチとは
年単位で埋め立てスクリプトに荒らされていることでお馴染みの5chニュース速報(嫌儲)。
スクリプトは自動生成された文章と海外画像SNS(imgur)にアップされたグロ画像を織り交ぜて果てのない回線数(ワッチョイ)でレスしまくるため、NGワード・NGネーム・NG IDによって無視することは不可能であり住民には対抗手段がなかった。
運営がグルで荒らしてるとさえ思えるくらい、荒らしに対して運営は無策であった。
そこでつい先日発案されたのが嫌儲のデフォルト名無し「番組の途中ですがアフィサイトへの転載は禁止です」を住民個々がNGネーム登録し、それぞれが名前欄に別物を入力してレスするというもの。
デフォルト名無し(名前欄無記入)で荒らすスクリプトが名前欄変更に対応するまでのイタチごっこと思われたが、なぜだが対応してこない。
これにより、スレが埋められること自体は仕方ないものの、スクリプトを完全に無視して会話することが可能になった。
対応してこない理由には、スクリプトをどこかで拾ったまま使用しているからイジる技術がない説、荒らし業務受注先の許可が必要説(土日であるため)などがある。
住民はもちろん自由に名乗るのだが、「安倍晋三」を名乗る住民が圧倒的多数派であるため安倍晋三以外を正規表現NGすることで掲示板がまともに機能するようになった。
荒らしのブラックリスト方式から住民ホワイトリスト方式というわけだ。嫌儲の宿敵安倍晋三により個々の名前欄の文が鮮明に統一されるとは皮肉なものだ。
スクリプト荒らしは自民党委託のDAPPIによる業務説もあるため、住民を真似て安倍をバカにする名前欄には対応できないとの期待もあった。
昔から嫌儲による安倍への愛執は並々ならぬものがあり、安倍の亡き今でも安倍は親しまれ、貶められ、ネタとして崇められ、安倍語録がレスに使われ、生成AIにより新たな安倍画像が生まれていた。
(親しまれる例:安倍を「安倍ちゃん」と呼ぶ、意味もなく「安倍晋三」とレスする、スレタイに関連する安倍の画像を貼る等)
(貶められる例:安倍を「カラーコーン」と呼ぶ(安倍銃撃現場に赤いカラーコーンが置かれ、墓標のようなそれに野田佳彦が合掌したことから)等)
(崇められる例:安倍を「聖帝」と呼ぶ等)
(安倍語録レス例:意味のない○○だよ、くだらない○○で終わっちゃったね、○○すればいいというわけではない、○○したが○○していない、いわばまさに、非常にしつこい等)
嬉しい副作用として、安倍晋三を名乗るというバカのような踏み絵を行うことで、なぜだかスクリプト荒らしでないネトウヨ・ネトサポと呼ばれる自民・維新を擁護するレス、更にアフィリエイトまとめサイトが好むレス(男女対立分断、弱者男性系)が激減した。元々嫌われていたコテハンや、こういう時に名前欄で個性主張する住民(往々にしてつまらない)のレスも無視できるようになった。
これは安倍バリア、ABフィールド、アベガード等と呼ばれている。(エヴァのATフィールド、広告ブロックアプリのAdGuardが由来)
切り落としたメドューサを首を武器にした英雄ペルセウス、盾に猫をくくりつけて古代エジプト軍の戦意を削いだ古代ペルシア、処刑されたのに救世主として持ち上げられるキリスト、そして安倍昭恵の「思い出していただければ何よりの供養」という言葉も引用され、嫌儲では今日も安倍晋三はネタにされている。
5chで半年以上前のレスに反論してみると数分でシュバって来る人がいることあるけど、ああいうのって発達障害なの?
↓
同じ奴ではないんやろ
↓
数分で自分事のようにいきり立つ書き込みする奴なんて本人に決まってるよな
↓
↓
↓
今どきIDなし板なんてあるんだっけ?
↓
実際あるんだからしょうがない
↓
まともな反論記事または動画を上げる→5ch連中なんて外じゃ絶対書かないからスレ内で誹謗中傷してくる→開示
↓
↓
(論文の要件のうち)新規性はともかく他のニ要件をクリアすると思えん
↓
特許じゃないんだから新規性なんていらんぞ。正しいと主張するならそれ(有効性)しかいらんやろ。
↓
正しいけど無意味な主張ってありそうだが
↓
↓
西から登る説や地球平面説唱えてる人の主張に対しての論点だと普通に意味ある
↓
平面説って地球の端っこが崖とかそういう話じゃなく?
↓
ジュラシックパーク → ジュラシッパ
ハーミットパープル → ハーミッパ
ヒューレットパッカード → ヒューレッパ
フルジップパーカー → フルジッパ
―
iPad Pro → アイパップ
ティーカッププードル → ティーカップー
―
―
糸割符制度 → イトワッセ
ブルドックソース → ブルドッソ
ヴォイニッチ手稿 → ヴォイニッシュ
ブリティッシュショートヘア → ブリティッショ
ブルシットジョブ → ブルシッジョ
―
アスコットタイ → アスコッタ
いなかっぺ大将 → いなかった
―
ビーバップハイスクール → ビーバッハ
スコティッシュフォールド → スコティッフォ
―
―
スタンダップコメディ → スタンダッコ
シークレットサービス → シークレッサ
マーガレット・サッチャー → マーガレッサ
長文になるが言わせてもらう。
id制だと、何を書き込んでも、それに付与されているid次第で爪弾きにする人がいるから問題なんだ。
たとえば専八が普段と違ってまともなことを書いても、idと結びつけて覚えていたり、NG登録してしまっていたりする人は、その書きこみすらスルーするだろう。
専八という人間が本質的に悪なんじゃなくて、専八が今までよく書いてくるような内容の書きこみが悪なのだ。
つまり、そのような内容の書き込みをした人間は「その書き込みについて」等しく糾弾されるべきなわけ。
逆にそういった内容に当てはまらない書き込みをした分には、専八も含めて(というより、誰か書いたかと言うこと自体意識しないで)平等に友好的にもてなされるべきだ。それが匿名制のあるべき姿というものだろう。
内容で判断されるべきなのだから、「誰が書いたのか」にこだわるのはナンセンスだ。
最近の書き込みを見ると上四桁で判断してしまおうという人もいる始末だな。
それでは一度目をつけられたら、いくら心を入れ替えても無駄ということではないか。実社会と何も変わらなくなってしまうではないか。それこそ何のための匿名掲示板なんだ。
その日変なことを書いて叩かれたとしても、反省し、翌日別人として空気を読んだ書き込みができれば、昨日のことはとやかく言われない。そもそも昨日の誰だったなど問われもしない。善行も悪行も一日で(とりわけid無しスレなら次の瞬間から)リセットされる気楽さ。それが匿名掲示板の良さだったはずだろうが。
#外航船員に限る。
荷物入れ
・登山バッグ
・キャリーオンバッグ
外地乗船の場合も含めて考えると、キャリーオンバッグは過剰かも。
PCCの場合はランプウェイ(車の通り道)から乗り込めると思うから、気にしなくてもいいけど、
その他はギャングウェイ(狭い階段)だからスーツケースが重くなりすぎないようにしよう。
ギャングウェイワッチの部員がクレーンを動かしてくれることを期待しつつ見上げてみよう。多分気づかないけど。
取り出しやすいところに作業着、トーチと安全靴(機関士の場合)、デジカメ、メモ帳は入れておこう。
忘れたら取りに帰らされるぞ!その他書類で会社が忘れることもあるから、先輩にも確認。
何が何でも書類だけは肌身離さず持っといて、ロストバッケージしても仕事できるようにしとこう。
仕事用
・トーチ タンク点検もあるから航海士機関士問わず。ヘッドライトも便利っちゃ便利だけど、トーチは必須。
・耳栓 2,3セット
・ゴーグル 時たま使うけど、船内にも基本ある。
船内備品は粗悪品も多いから(買付地の関係)、耐久性が求められるものは自分で持っておくとよい。
そういう意味ではボールペンは必須。職務上手書きが多いから、新品で使えないゴミを
つかまされると悲しい気分になる。
・普段着 4,5着(作業着の下に着る用と普段使い用) 乗船時の恰好は綺麗目にして上陸でも着れるものが吉
・タオル 5枚ぐらい
・髭剃り 日本人来るなら身だしなみを整えとこう。
・ゴシゴシタオル
・洗顔
・洗剤 柔軟剤はよりけり
・寝巻 着ている人を見たことないけど、寝るときは基本動きやすいもので。
・目薬 船内乾燥してるので
・薬 酔い止めとか腹痛用とか。飲料水がよろしくないこともあるから。
生活日用品は、乗船後の私物品買い付けや上陸地で手に入るから心配せず1セットで。
ただ、こだわりがあるなら下船まで持つように入れておこう。
その他
・充電器 Cタイプ、Bタイプ、ライトニング、カメラ用、パソコン用と忘れないように
・コンセント変換アダプタ 下船地が読めないなら1個持っとこう。
・POKEFI 通信安いし、窓際に置くルーターとして使えるから便利。
娯楽
・楽器 エレキ単音なら隣室に聞こえないと思う。レクルームならアコギとか弾いても怒られない。
・釣り 沖待ち中とかならお好きにどうぞ。
・お酒
次の乗船に持って行ってみるものをこっそり追加(2023年3月13日)
・消臭剤
以上。足りないものがあったら教えてね。
なので昔から、好きだったゲーム実況者に絡みまくってそれからコメNGやブロックをされたりを繰り返している
おかげで今好きなゲーム実況者はおらず、まともに働いて幸せに暮らしている
つい最近、某掲示板で色々書いていたらワッチョイありだったらしく、特に殺害予告などの法を犯すことはしていないのだがアク禁を喰らった
権利者にやられたのか他のユーザーの通報だったのかは分からないが、俺を貶めるムードだったこともあったのでアク禁を喰らったのかと
閲覧も書き込みも出来なかったので、その掲示板の民度的に同じ世界に居られなくなって寧ろ良かったと思っている
最近は「これマズイな」と感じたらURLをNGにするアドオンに反射的にブチ込んでいる
俺はどうやらメンタルがコントロール出来ないので、こうやって既成事実を作るか、他の手段によって自分を押さえつけないと甘えた世界に身を投じてしまうのだ。
自動で安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋)
/**************************************
以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>
//CSVファイルが置かれてるディレクトリのパス。投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";
'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';
//ファイルのパス。CSVは絶対パスで、拡張子も必要。iimは相対パスでよく、拡張子不要。
const FILE_PATHS = {
textCsv: CSV_DIR + 'textNoAnker.csv',
//レス用投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。
replyTextCsv: CSV_DIR + 'textReply.csv',
};
baseWaitTime: 5,
//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ
waitTimeRange: 5,
//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)
waitTimeForAvoidingPunishment: 60 * 30,
//メール
mail: 'sage',
//名前設定
name: '',
//以下、偽装ワッチョイ設定。浪人でワッチョイを非表示にしてるときだけtrueにしてね。
//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。
//妙なニックネームの後に付く8桁の文字列をランダムで決めて付加するかどうか。
},
//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。
//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrueの場合、投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。
//最初に取得するアンカー無し投稿文CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力。
noAnkerPostTextCsvStartRow: 1,
//最初に取得する返信用投稿文CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力。
//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。
//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。
minAnker: 895,
//返信する場合、名前に以下の文字列を含む投稿にアンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列で複数指定可能。指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能。
//↑とは逆に、名前に以下の文字列を含まない投稿にアンカーをつけて返信する。↑と併用も可能。
//返信する場合、本文に以下の文字列を含む投稿にアンカーをつけて返信する。
filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演で擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],
},
//自分のIPアドレスの確認。VPNとかでIPを変更してマクロを動かしてるとき、突然VPNが作動しなくなってIPが元に戻ったときにマクロを止めるためのもの。
//以下の文字列が自分の現在のIPアドレスに含まれている場合、マクロを一時停止する。基本的に自分の本当のIPアドレスを入力。
},
//浪人設定。最後に動作を確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないから確認できずわからない。
//浪人にログインしてるかどうかをチェックするかどうか。trueならする。falseならしない。trueにしていてもし浪人にログインしていないことを確認したらログインしにいく。
password: '1234',
},
};
/**************************************
設定箇所終わり。
https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>
/**************************************
・NULL演算子(??)は使えない。論理積(&&)は使える。
・オブジェクトの分割代入はできない。
・importはできない。 <h3>o- *************************************/</h3>
/**************************************
関数 <h3>o- *************************************/</h3>
/**
* ここから始まる。
*/
checkSettings();
var _TextCsvCursors = new TextCsvCursors(
SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0
? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1
: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
SETTINGS.postSettings.replyPostTextCsvStartRow > 0
? SETTINGS.postSettings.replyPostTextCsvStartRow - 1
: SETTINGS.postSettings.replyPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
);
var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);
const _MyPosterName = new MyPosterName({
name: SETTINGS.nameSettings.name,
});
const _ThreadUrl = openPromptThreadUrl();
//ループ
while (true) {
SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();
//スレを開く
openUrl(_ThreadUrl.fullUrlHttps());
//浪人にログインする設定なら、浪人にログインしているかどうかを確認し、していなければログインしにいく。
if (SETTINGS.roninSettings.checkLogin) {
}
}
if (SETTINGS.postSettings.replyPost) {
const targetAnkerNumber = createPostDOMList()
.filterPostnumberHigher(_LoopStatuses.currentMinAnker())
.filterByPostername(SETTINGS.postSettings.filterNames)
.filterByPosternameNotIncluded(
SETTINGS.postSettings.filterNamesNotIncluded,
)
.filterByText(SETTINGS.postSettings.filterText)
if (targetAnkerNumber !== null) {
const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);
messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);
return {
...r,
updatedLoopStatuses:
_LoopStatuses.updateMinAnker(targetAnkerNumber),
};
}
}
if (SETTINGS.postSettings.noAnkerPost) {
//返信対象無し、或いは返信しない設定の場合。アンカー無し投稿文を作る。
const r = _TextCsvCursors.takeNextRowTextAsNoAnker();
messageDisplay('返信対象無し。アンカー無し投稿。');
return {
...r,
updatedLoopStatuses: _LoopStatuses,
};
}
return null;
})();
if (p) {
//投稿。
nickname: SETTINGS.nameSettings.nickname,
korokoro: SETTINGS.nameSettings.korokoro,
area: SETTINGS.nameSettings.area,
}),
SETTINGS.mail,
p.text,
);
//_TextCsvCursorsと_LoopStatusesを更新。
_TextCsvCursors = p.updatedTextCsvCursors;
_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
} else {
`返信対象が現われるのを待機中...。`,
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
}
wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));
}
}
/**
* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。
* @param {string} serverName サーバー名
* @param {MyPosterName} _MyPosterName
* @param {string} postMail メール
*/
serverName,
postMail,
_MyText,
retryTimes = 0,
) {
const r =
retryTimes === 0
? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(
postTo5chTread,
)
serverName,
postMail,
_MyText,
).postSubstring(retryTimes, postTo5chTread, postConfirm);
if (r) {
back();
return;
}
wait(7);
const error = createPostErrorMessage().analyze();
messageDisplay(error.message);
if (error.order === 'KILL') {
kill();
} else if (error.order === 'SKIP') {
return;
} else if (error.order === 'TRUNCATE') {
back();
serverName,
postMail,
_MyText,
retryTimes + 1,
);
} else if (error.order === 'WAIT') {
wait(SETTINGS.waitTimeForAvoidingPunishment);
serverName,
postMail,
_MyText,
retryTimes,
);
} else if (error.order === 'LOGIN') {
serverName,
postMail,
_MyText,
retryTimes,
);
}
return;
}
/**
* 現在のIPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。
* @returns
*/
function checkCurrentIpNotTheIp() {
openUrl('https://www.cman.jp/network/support/go_access.cgi');
const _IpAdress = createIpAdressFromCMan();
if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {
pause('現在のIPに指定した値が含まれていることを確認。');
}
return;
}
/**
* @returns
*/
if (
SETTINGS.postSettings.noAnkerPost === false &&
SETTINGS.postSettings.replyPost === false
) {
return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&
SETTINGS.postSettings.replyPostTextCsvStartRow < 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',
);
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||
SETTINGS.postSettings.replyPostTextCsvStartRow === 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',
);
}
}
/**
* 入力フォームを表示して入力されたスレのURLを受け取る。
*/
function openPromptThreadUrl() {
const url = prompt('スレURLを入力');
}
/**
* 開いてるスレのレス全て読み取ってPostListインスタンスを作って返す。
* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。
*/
const posts = window.document.getElementsByClassName('post');
return new PostList(Array.from(posts).map((e) => new Post(e)));
}
/**
* 開いてるスレのレス全て取得してPostDOMListに格納して返す。
* @returns
*/
function createPostDOMList() {
const posts = window.document.getElementsByClassName('post');
for (let index = 0; index < posts.length; index++) {
//HTMLCollectionからElementを1つずつ抽出して配列に。
arrPostDOMList.push(posts.item(index));
}
return new PostDOMList(arrPostDOMList);
}
/**
* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。
*/
function createPostErrorMessage() {
window.document