「文字列」を含む日記 RSS

はてなキーワード: 文字列とは

2022-08-15

Webはてブミュー機能作った

勝手に tampermonkey とかに突っ込んで使ってヨロ

スクリプト保守とかするつもりないから、保守とかするつもりのあるパワーの溢れた人が

これ参考とかにしてもっとかっちょよくしたのを greasy fork あたりに公開してくれ

そしたら俺もそれ使う

使い方:

ブラウザの開発環境を開いて、開発コンソールを開く

localStorage.hatebu_ng_word_list に非表示トリガーになる文字列を|区切り登録する。

localStorage.hatebu_ng_word_list = "池田信夫|フェミ|弱者男性|やまもといちろう"

実際のコード

大なり小なり(>)が実体参照で表示されるのはよくわからん。使う人で適宜コードを直してくれ。

// ==UserScript==
// @name         はてブの一覧NG記事非表示
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       masuda
// @match        https://b.hatena.ne.jp/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=hatena.ne.jp
// @grant        none
// ==/UserScript==

(function() {
	'use strict';

	if (!localStorage.hatebu_ng_word_list) {
		return;
	}
	console.log("はてブの一覧NG記事非表示", localStorage.hatebu_ng_word_list);

	/*
	 * 例:
	 * localStorage.hatebu_ng_word_list =
	 * "池田信夫|フェミ|弱者男性|やまもといちろう|togetter.com";
	*/
	let words = localStorage.hatebu_ng_word_list.split('|').map(w => new RegExp(w));

	function entryDelete(els) {
		els.forEach(el => {
			let hit = false;
			words.forEach(w => {
				hit = hit|| w.test(el.textContent);
			});
			if (hit) {
				el.remove();
			}
		});
	}

	// entrylist-header-main li 1つ目のアイテム
	entryDelete(document.querySelectorAll('.entrylist-header-main > li'));
	// 2つ目以降の li アイテム
	entryDelete(document.querySelectorAll('.entrylist-item > li'));
})();

文字正規表現として評価されて、ヒットした記事項目をページから削除する(DOMから要素を削除する)。

際限なくNG登録できるけど、沢山非表示するとつまらない一覧になる

anond:20220815025553

字下げ増田あなた投稿に含まれる何らかの文字列に反応して『お前』に対する""日記""を書いただけだ

増田投稿の内容に反応したので自分の"日記"の関連記事としてトラバをつけただけで、増田に何か言っているわけではないので増田が何か気にする必要はない

2022-08-14

正規表現先読みを使って、マッチから除外されるべき表現を書く

IPアドレス(IPv4)にマッチする正規表現は以下である

^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$

(出典:https://www.javadrive.jp/regex-basic/sample/index4.html)


0~255を判定している部分は置いといて、0~255を判定する記述が二つに分かれているのが気になる。

間に"."が挟まるからだ。

IPアドレスでは先頭に"."があってもおかしいし、末尾に"."があってもおかしい。

そのため、まずipアドレスの先頭三組("0~255".)だけドット付きで判定し、最後の一つだけドットなしで判定させている。

しかしそれなら、間に"."が挟まっても挟まらなくてもどっちでもマッチするように書いたあと、

その後、マッチした文字列の全体のフォーマットが正しいかを判定すればいいのではないか

例えば以下のように。

^(?=^(\d+\.){3}\d+$)((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.?){4}$

0~255を判定する部分が一つになっている。にもかかわらず末尾に"."がついてしまパターンマッチしないのは

(または、途中の組で"."がつかないパターンマッチしないのは)、

先読みで正しいフォーマットだけにマッチするようにして、それ以外の文字列をはじいているからだ。


正規表現が単純に短くなったし、「全体のフォーマットを判定する先読み部」と「各8bit+"\.?"の複雑な判定部分」に分けて描くことができた為、

ある意味、読みやすくすらなったと感じる。

先読みを使うことで、判定対象となる文字列の、「各部分判定の複雑さ」と「全体のフォーマットの判定の複雑さ」を分けることができる。


次に、0~255判定も複雑になっている。

正規表現では"0以上255以下"のような、複数桁にまたがる数の大小判定は出来ない。

例えば"2"と"10"では、数としては当然"10"が大きいが、辞書順で考えれば"2"の方が後に来る。

そして正規表現数字の並びを数として判断しない。

まり辞書順に並んだ文字列の中から、0~255の範囲だけにマッチするような正規表現を書かないといけない。そのため複雑になる。


しかし、0~255のような複数桁にまたがる数の大小判定ができないとしても、

全ての0~255に当てはまる厳密なパターンを書く((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))より、

ある程度絞れる範囲だけ書いた後、除外したいパターンを書いて弾いた方が、読みやすく、意図理解やすくなるのではないか

例えは以下のように。

^(?![3-9]\d\d)(?!2[6-9]\d)(?!25[6789])(?!0\d)\d{1,3}$

まず、上記正規表現末尾の\d{1,3}で、1~3桁のあらゆる数字列にマッチする。

しかし、正規表現左側に書いた4つの先読みで、

・300以上999以下を否定先読みで除外

・260以上299以下を否定先読みで除外

・256以上259以下を否定先読みで除外、また、

数字列の先頭が0になるパターン否定先読みで除外

するように記述されている。

「元々の0~255判定部分より複雑じゃん」と言われればそうなのだが、読み方が異なっている。

元々の正規表現は、

「250以上255以下、または、240以上249以下、または、100以上199以下、または、0~99」という読み方になる。

先読みで除外する方の正規表現は、

「3桁の数字列にマッチする、かつ、300以上999以下を除外、かつ、260以上299以下を除外、かつ、256以上259以下を除外、かつ、先頭が"0"の2ケタ以上の数字列を除外」という読み方になる。

個人的意見になるが、「~、または、~」の連言では、「対象となる範囲の全体感と、除外されるべきパターン」が見えないため、どういった範囲の話をしているのかがピンとこない(場合もある)。

一方、「~、かつ、~~を除外」では、「対象となる範囲の全体感と、除外されるべきパターン」がそのまま書かれているため、対象文字列のどの部分のことを言及しているのか(比較的)理解やすい(、と言いたい)。

ちょっと無理がある言い方か。


つの変更を組み合わせたIPアドレス(IPv4)を判定する正規表現は以下になる。

^(?=^(\d+\.){3}\d+$)((?![3-9]\d\d)(?!2[6-9]\d)(?!25[6789])(?!0\d)(\d{1,3})\.?){4}$

「元々の正規表現より複雑じゃん」と言われればそうなのだが、

"(?=..."や、"(?!..."で始まる部分は、「除外または許可されるべきパターン指定している部分」であり、文字マッチを行っていない。

先読み部分を無視して、文字マッチする部分だけに注目すると、この正規表現マッチしようとしている文字列の全体感が把握できる。

((\d{1,3})\.?){4}

これは、IPアドレス(IPv4)のざっくりとした範囲説明として、意図が十分伝わる記述であると思う。

2022-08-13

anond:20220813111148

文字列の反転とか木の巡回とか出来ない人はさすがにエンジニア名乗るべきではない

anond:20220813105857

文字列を反転させなさいとか木を巡回しなさいとか

・できる人もできない可能性がある(ライブコーディングによる緊張・ふだんの一般的環境との相違・一般的な条件との相違)

・できない人もできてしま可能性がある(実務とは関係ない問題であり、paizaとかやってる土日ちょっと勉強勢のほうがむしろよく見かける問題

最悪だな。

まともなエンジニア採用する方法

まともなエンジニア採用する方法はただ一つ。コーディング面接だよ。簡単問題で良いんだよ。文字列を反転させなさいとか木を巡回しなさいとか。そんなんで良いんだよ。経験10年とか言ってるおっさんも意外とできないもんなんだよ。土日に勉強とか言ってるアホを弾く一番簡単方法だよ。

プログラマー生産性は人により100倍くらい差があるというけれど

 割りとマジだよねと思う出来事をふと思い出したので書いてみる。

 といっても後輩が俺の思ってもいないところでつまづいて、それに俺がカルチャーショックを受けたというだけの話。

 問題の話なんだけど、とある有名サービスJSON APIを叩いて呼び出し結果を手元のオブジェクトマッピングするというただそれだけのコードを書くというもの

 普通に考えて一日もしないで出来ると思うような代物だけど、三日以上悩んで彼はそれでも出来なかった。

 何があったかというと、そのJSON API

{ ..., "count": 10000000000000000000000000000000000000, ...}

 という感じで多倍長整数リテラルとして書かれているのを前提として受け取る仕様だった。

 JavaScriptの通常の整数と違って、JSON整数リテラル仕様上大きさの制限記載がないので、上のようなのも合法

 で、彼の使ってたプログラミング言語オブジェクト から JSONの変換ライブラリが、多倍長整数文字列("")としてシリアライズするような仕様なことがわかって、彼は行き詰まった。

 そこで何をやり始めたかというと、JSON整数がそのまま1000000000000000みたいにシリアライズされるライブラリ探し始めたんだけど、それは見つからないまま。

 というわけで「増田さん、詰まってるんですけど……」と言われて助け舟出すことになったはいものの、彼のコード見るとJSON抽象構文木クラスがそのまま使えるようだった。

 なので、

String serialiaze(Ast.JsValue value) {
    return switch(value) {
        case Ast.JsNull nullValue-> "null";
        case Ast.JsInt bigIntValue -> bigIntValue.toString();
        case Ast.JsArray arrayValue -> arrayValue.stream().map(v -> serialize(v)).collect(Collectors.joining(", ", "[", "]"));
        // 他のJSONの木についても同様に処理
        default -> throw new RuntimeException("cannot reach")
    };
}

 1時間しない内にこんな感じのコード言語Javaじゃなかったけど、だいたいこういう感じ)を書いて無事問題解決。細かいタイポとかあるかもだけど、日記では確認してないのでそれはおいといて)。

 結局、JSONの形が期待と違って、しか既存APIじゃいいのがなかったのに延々API探すことしか出来なかったのが問題解決できなかった原因だけど、このくらいのは割りとちょこちょこある。

 きっと、それから一週間放置しても問題解決できなかっただろうし、どうも同じチームの同僚も問題解決できなかったようだった。

 最近APIは叩けるけど、そこでトラブルとどうにもならなくエンジニアにちょくちょく遭遇するんだけど、やっぱりもうちょっと基礎出来てないと駄目だなと思った出来事だった。

 具体的には、再帰が相性が良いプログラムを書けるとか、APIに頼れないときはさっさと自作する頭の切り替えとかもろもろ。

 それと、情報大学出てるのなら、せめて木構造に対してはサクっと再帰関数くらい書けてほしかったなと思う出来事だった。

2022-08-07

https://togetter.com/li/1926735

有機栽培林子 @kntc_ringo_poyo

@KK__cyclist 生徒と学校ちょっといろいろありまして おそらくそれの報道記事かと

これ自体憶測ではあるけど、色々と察する話だ。自分学生側なら絶対ネタにしたいし、自分教員側なら絶対に阻止したいだろうな。

根性ある子供責任感のある大人対立ほど見ていて気持ちいいものはない。

検閲されました。」の文字列掲載を許すだけでも、教員側もそれなりに肝が座ってるんだよな。

2022-08-03

anond:20220803122025

 

ここら辺はRustの用途上ああなるのはやむを得ない感じがあるけど

 

 

 

これはRustの用途から考えてマジでうんちだよね

Rustの嫌いなところ

2022-08-01

anond:20220731183342

自動安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋) 

/**************************************

以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>

//CSVファイルが置かれてるディレクトリパス投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";

const CSV_DIR =

'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';

//ファイルパスCSV絶対パスで、拡張子必要。iimは相対パスでよく、拡張子不要

const FILE_PATHS = {

//投稿文が書かれたCSVファイル

textCsv: CSV_DIR + 'textNoAnker.csv',

//レス投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。

replyTextCsv: CSV_DIR + 'textReply.csv',

};

const SETTINGS = {

//投稿後の基本待ち時間

baseWaitTime: 5,

//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ

waitTimeRange: 5,

//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)

waitTimeForAvoidingPunishment: 60 * 30,

//メール

mail: 'sage',

//名前設定

nameSettings: {

//名前名無しなら''。

name: '',

//以下、偽装ワッチョイ設定。浪人ワッチョイを非表示にしてるときだけtrueにしてね。

//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。

nickname: false,

//妙なニックネームの後に付く8桁の文字列ランダムで決めて付加するかどうか。

korokoro: false,

//IPランダムで決めて付加するかどうか。

ip: false,

//地域ランダムで決めて付加するかどうか。

area: false,

},

postSettings: {

//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。

noAnkerPost: false,

//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrue場合投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。

replyPost: true,

//最初に取得するアンカー無し投稿CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力

noAnkerPostTextCsvStartRow: 1,

//最初に取得する返信用投稿CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力

replyPostTextCsvStartRow: 1,

//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。

textCsvLoop: true,

//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。

minAnker: 895,

//返信する場合名前に以下の文字列を含む投稿アンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列複数指定可能指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能

filterNames: [],

//↑とは逆に、名前に以下の文字列を含まない投稿アンカーをつけて返信する。↑と併用も可能

filterNamesNotIncluded: [],

//返信する場合、本文に以下の文字列を含む投稿アンカーをつけて返信する。

filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],

},

//自分IPアドレス確認VPNとかでIPを変更してマクロを動かしてるとき、突然VPN作動しなくなってIPが元に戻ったときマクロを止めるためのもの

ipSettings: {

//自分現在IPアドレス確認をする。

checkIp: true,

//以下の文字列自分現在IPアドレスに含まれている場合マクロを一時停止する。基本的自分の本当のIPアドレス入力

avoidTheIp: '133.206.99.224',

},

//浪人設定。最後動作確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないか確認できずわからない。

roninSettings: {

//浪人ログインしてるかどうかをチェックするかどうか。trueらするfalseならしない。trueにしていてもし浪人ログインしていないことを確認したらログインしにいく。

checkLogin: false,

//浪人ログインメールアドレス

mailAdress: 'abc@def.com',

//浪人ログインパスワード

password: '1234',

},

//false: run()実行させず(デバッグ用)

run: true,

//true: 投稿処理だけしない デバッグ

skipPost: false,

};

/**************************************

設定箇所終わり。

書き込めない時の早見表 - 5ちゃんねるwiki

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>

/**

* ここから始まる。

*/

function run() {

//設定ミスがないか調べる。

checkSettings();

var _TextCsvCursors = new TextCsvCursors(

new TextCsvCursor(

SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0

? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1

: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,

FILE_PATHS.textCsv,

SETTINGS.postSettings.textCsvLoop,

),

new TextCsvCursor(

SETTINGS.postSettings.replyPostTextCsvStartRow > 0

? SETTINGS.postSettings.replyPostTextCsvStartRow - 1

: SETTINGS.postSettings.replyPostTextCsvStartRow,

FILE_PATHS.replyTextCsv,

SETTINGS.postSettings.textCsvLoop,

),

);

var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);

const _MyPosterName = new MyPosterName({

name: SETTINGS.nameSettings.name,

});

//スレURL指定

const _ThreadUrl = openPromptThreadUrl();

//ループ

while (true) {

//IP確認する設定なら、それをする。

SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();

//スレを開く

openUrl(_ThreadUrl.fullUrlHttps());

//浪人ログインする設定なら、浪人ログインしているかどうかを確認し、していなければログインしにいく。

if (SETTINGS.roninSettings.checkLogin) {

if (!checkRoninLogin()) {

loginRonin();

continue;

}

}

//投稿に使うテキスト取得。

const p = (function () {

if (SETTINGS.postSettings.replyPost) {

//返信あり設定の場合。返信対象が無いか調べる。

const targetAnkerNumber = createPostDOMList()

.filterPostnumberHigher(_LoopStatuses.currentMinAnker())

.filterByPostername(SETTINGS.postSettings.filterNames)

.filterByPosternameNotIncluded(

SETTINGS.postSettings.filterNamesNotIncluded,

)

.filterByText(SETTINGS.postSettings.filterText)

.lowestPostNumber();

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) {

//投稿

postThenCheckError(

_ThreadUrl.serverName(),

_MyPosterName.randomize({

nickname: SETTINGS.nameSettings.nickname,

korokoro: SETTINGS.nameSettings.korokoro,

ip: SETTINGS.nameSettings.ip,

area: SETTINGS.nameSettings.area,

}),

SETTINGS.mail,

p.text,

);

//_TextCsvCursorsと_LoopStatusesを更新

_TextCsvCursors = p.updatedTextCsvCursors;

_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();

messageDisplay([

`投稿回数: ${_LoopStatuses.currentPostCount()}`,

`minAnker: ${_LoopStatuses.currentMinAnker()}`,

`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,

`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,

]);

} else {

messageDisplay([

`返信対象が現われるのを待機中...。`,

`投稿回数: ${_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 メール

* @param {MyText} _MyText

* @param {number} retryTimes

* @returns {void}}

*/

function postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes = 0,

) {

const r =

retryTimes === 0

? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(

postTo5chTread,

postConfirm,

)

: new ValuesOfPost(

serverName,

_MyPosterName,

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();

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes + 1,

);

} else if (error.order === 'WAIT') {

wait(SETTINGS.waitTimeForAvoidingPunishment);

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

} else if (error.order === 'LOGIN') {

//動作未確認

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

}

return;

}

/**

* 現在IPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。

* @returns

*/

function checkCurrentIpNotTheIp() {

//IP確認ページへ飛ぶ

openUrl('https://www.cman.jp/network/support/go_access.cgi');

const _IpAdress = createIpAdressFromCMan();

if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {

pause('現在IP指定した値が含まれていることを確認。');

//ポーズ解除したならもう一度確認しに。

checkCurrentIpNotTheIp();

}

return;

}

/**

* 設定に致命的な問題が無いか検査

* @returns

*/

function checkSettings() {

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を受け取る。

* @returns {ThreadUrl}

*/

function openPromptThreadUrl() {

const url = prompt('スレURL入力');

return new ThreadUrl(url);

}

/**

* 開いてるスレレス全て読み取ってPostListインスタンスを作って返す。

* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。

* createPostDOMListを使う。

* @returns {PostList}

*/

function createPostList() {

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');

var arrPostDOMList = [];

for (let index = 0; index < posts.length; index++) {

//HTMLCollectionからElementを1つずつ抽出して配列に。

arrPostDOMList.push(posts.item(index));

}

return new PostDOMList(arrPostDOMList);

}

/**

* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。

* @returns {PostErrorMessage}

*/

function createPostErrorMessage() {

return new PostErrorMessage(

window.document

.g Permalink | 記事への反応(0) | 15:40

デウス・エクス・マキナ問題の整理

2022-07-29

anond:20220729160931

リンクだけの記事は作れないとかいくつ以上のリンクは貼れない(まあimgurなら文字列だけ貼ればいいだけ)細かいことを抜きにして言ってるんだろうけどまあ間違ってないと思う

2022-07-28

anond:20220728121348

プロセカをブロックしようとするのは素人

プロは「プロセカ」という文字列が目に入った瞬間に意識遮断する。

2022-07-27

anond:20220727184845

話の中身を理解できてないか

文字列の正しさに異様なこだわりがあるから

2022-07-16

Chromeでページ内検索してヒットしてもページ内に文字列が見つからない

まじでイライラするんだがなんなんだよあれ

2022-07-10

グロ画像に混じったマグロ画像

5chの連投スクリプトが送ってくるグロ画像は、まあグロい。グロくなかったらグロ画像じゃなくなるからだ。人間バーンしたり、ズギャーンしたり、バコーンしたりしてる画像がたくさんある。体感ではボコッが一番多い。

少し前になんJだかなんGだかで以前猛威を振るっていたのが、エロ画像スレを建てると見せかけてグロ画像を貼るというスクリプトだ。まあ、エロ画像グロ画像は一文字違いだから大して変わらないかもしれない。

基本的に「巨」と「乳」をNGワードに入れるか性欲を捨てるかすれば簡単回避できる荒らしから、この害悪度の道を歩んだID腹筋スレみたいなのはまり相手にされなかった。しかし俺は相手にした。「乳」をNGワードに入れることも性欲を捨てることもできなかったからだ。開いた。グロ画像だった。閉じた。開いた。グロ画像だった。閉じた。開いた。ID腹筋スレだった。一周回って安心感みたいなものを覚えながら、冷たい床に両手をついた。そんな風にして、流れ的に俺はグロ画像を踏みまくった。そして、「>>1 グロ」というレスを残した。

しかし、最初の数回の時点で、俺はスクリプト異変に気付いた。スレタイ時点ではいつもと変わらず、「【悲報おっぱいかけ算九九 乳の段」みたいなザ・電子ゴミって感じの益体もない文字列だった。しかしザ・電子ゴミって感じの益体もない文字列をタップした俺の目に入ってきたものは、グロ画像でもID腹筋スレでも、エロ画像でもなかった。

マグロだった。

紅とは言えないが赤とはいえるくらいの、少し薄い色をしたマグロ寿司が、スーパーか何かのトレイに入って、グロ画像の代わりに俺を見ていた。

目を擦ったしリロードもしたが、マグロマグロのまま、低めの解像度で俺のスマホディスプレイ占有していた。俺は仕方なく「>>1 マグロ」とレスして、その場を去った。

そのあとも、マグロは定期的に現れた。

スクリプトが何かの間違いを犯した、としか考えられなかった。俺が落ち込んでいる時も舞い上がっている時も、マグロは等しくそこに現れて、めちゃくちゃ美味そうというほどでもないが普通に食べられそうな外見で、俺に何かの感情を抱かせようとしてくる。その感情が何か知りたくても、俺は知ることができなくて、そのまま次のグロ画像ないしID腹筋スレへと旅立つしかなかった。

いつしか、俺はマグロを求めるようになっていた。やったエロ画像だと考えながら、あるいはどうせグロ画像だと考えながら開いたスレの>>1に存在するマグロを見た時の、あのどうしようもない感情名前を付けたかった。十連ガチャを引いているような感覚もあった。いつしか、俺にとって「マグロは当たり」という考えが刷り込まれるようになった。スレタイがエロ画像である以上、当たりはエロ画像ということになり、そうなると三段論法マグロエロ画像ということになる。マグロエロ画像だった。

あれから数か月、俺の観測範囲内では、偽装エロ画像スレを見ることもなくなってしまった。今のスクリプト夏目漱石か何かから生成した支離滅裂文章を連投したり、マグロ抜きのもっと厳選したグロ画像を連投したり、そういうことをするのに留まってしまった。けれども俺が夢の中とか、街角とか、ふと目に入ったネット広告とかで、ふと赤々としたマグロ発見した時に、何度でも去来する感情だけは、決して途絶えることもなく、延々と人格の中で残響している。

ああ、マグロ

anond:20220710104348

なんJ または なんGに出現するスクリプトの種類について説明しま

現在5chに出現するスクリプトには複数の種類があり、それぞれ特徴があります

グロスクリプト

ランダム文章に加えてグロ画像を貼り付けてくるスクリプト

スクリプト勢最古参であり最も害悪存在

ただし出現するスレッドは手動で決めているようで、野球スレには基本出現しない

よって「益虫ではないか」という意見もあるが、パート化しているウマ娘スレ遊戯王スレにも湧かないため「ただのオタクのなんじゃないか」とも言われている

IDの末尾がd(ドコモ回線)という特徴があるため、

住民は多少巻き込みをしてでも末尾dを丸ごと非表示にせざるを得ない状況になっている

ちなみにグロ画像の選定は過去安価で「グロ」と書かれた画像から選んでいるため、ちょいちょいマグロ画像が混ざる

漱石スクリプト

夏目漱石の著書からランダム文章を書き込んでくる

出現当初は書き込み数もおとなしめでグロスクリプトの影に隠れている存在であった

出現スレッドは完全にランダムであり、野球スレにも出現するスクリプトであるもの

「まぁ実況する分には無視できるしどうでもいいわ」という評価だった

しかし日増しに書き込み数が増加

なんG(J)民のアイデンティティであるやきう」を阻害するスクリプトと化している

末尾dだったりa(au回線)だったりM(貧乏回線)だったりする

最近末尾0も出現 対応困難

末尾0スクリプト

ランダム文字列を貼り付けてくるスクリプト

画像は貼らないもの文字列の選定や出現傾向はグロスクリプトに似ているため同一人物による犯行ではないかと囁かれている

厄介なのは『末尾0』ということ

これは固定回線を示すIDなので丸ごと非表示にする対策を取るとほとんどのレスが見えなくなってしま

発情スクリプト

3日ほど前から出現したスクリプト

変態おじさんみたいな文章をすごい勢いで書き込んでくる

こちらも末尾0

とにかく書き込み速度が半端ではないため出現するとスレッド機能不全になる

出現するスレ傾向は未だ掴めず

2022-07-08

郵便で「ログインしてアンケート回答してな。IDパスワードはこれな。」

ってくるじゃん。

その文字列が1とIとlが入り混じってるし、0とOも入り混じってる。

親切なところは(イチ・アイ・エル)、(ゼロ・オー)みたいに書いてくれるのにそれもないし。

見事3連続失敗してロックされて電話する羽目になった。

もちろん電話は話し中で繋がらない。

もう終わりだよこの国

2022-07-03

Core Keeper Dedicated Server をサービス登録する

なんで?

手順

/etc/systemd/system に corekeeperds.service って名前で以下の内容のファイルを作る。

[Unit]
Description=Core Keeper Dedicated Server
Documentation=

[Service]
Type=exec
User=steam
Group=steam
TimeoutStartSec=0
Restart=always
RestartSec=30s
WorkingDirectory=/home/steam/Steam/steamapps/common/Core Keeper Dedicated Server/
ExecStartPre=/home/steam/steamcmd +login anonymous +app_update 1007 +app_update 1963720 +quit
ExecStart=/usr/bin/env "/home/steam/Steam/steamapps/common/Core Keeper Dedicated Server/_launch.sh"
SyslogIdentifier=CoreKeeperDS

[Install]
WantedBy=multi-user.target

※ ExecStart はバグっているので空白のあるパスを食わせるとうまく処理できない。なので /usr/bin/env 経由で文字列を食わせている。古の知識

作ったら、

chmod 755 /etc/systemd/system/corekeeperds.service
systemctl daemon-reload

して、完了

あとは

systemctl start corekeeperds.service

サービス開始。

systemdがプロセスを死活監視して、異常終了した場合(この辺の挙動は 後述の Note 参照)に勝手再起動してくれるようになります

状態

systemctl status corekeeperds.service

で見て、

止めるとき

systemctl stop corekeeperds.service

で。(時間かかる)

Note

Restart=on-failure で大丈夫だと思うのですが、うまく上がってこないときalwaysかにした方がいいかもしれません。

Restart の各設定値の挙動については以下が詳しいです。

https://tex2e.github.io/blog/linux/systemd-restart-config

ごめん

ぼっちなので、私のサーバーには Dedicated Server が落ちるほどプレイヤーが来ません。

なので Systemd への登録で、ちゃん再起動するかどうかは確認できてない感じです。

出来なかったらごめんなさい。

anond:20220627125211

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