はてなキーワード: インスタンスとは
イーロン・マスク氏の Twitter 買収は Twitter の終わりの始まり、とか言う意見を見聞きする様になったんだが、
個人的に Twitter はこのまま消滅した方が社会的に良いと思ってるので、その点について書こうと思う。
※ 追記: スマホで読み返したら読みづらかったし、文章が雑だと感じたので全面的に改稿しています
ちなみに三行しか読みたくない人に向けて話をまとめておくとこうなる:
あと最期のおまけの話は Twitter の代わりはない。諦めろ と言うのが俺の考えです。
まず第一に今の Twitter が無い方が良いと思う理由がこれ。
直近で思い出すと木村花さんの事件が代表的だが、今の Twitter での炎上は一般大衆が DM やリプライ、
リツイートで 誰でも簡単に 他人に悪意をぶつけられる様になっている。
つまり誰でも手軽に集団で精神的暴力を見ず知らずの相手に振えるようになってる。
そしてこの文脈で言うと、10年以上前の昔は炎上の舞台がブログのコメント欄とか 2ch だったため、
炎上させるには自分から相手の領域へ殴り込んでコメントを残さない限り暴言を吐けなかった。
しかもコメント欄も当事者が閉じれたから、そうなったらそれこそ 2ch でギャーギャーと騒ぐぐらいしかできなかった。
まず炎上の現場が自分の領域(自分が管理するブログ)から他人の領域(この場合 Twitter)に変わった。
その上、誰が見ても酷い暴言を吐いた連中の IP とか分からなくなったし(とは言え自前ブログだと今でも大体 IP は分かる)、
Twitter は一度ひどく炎上すると二度と社会復帰できない惨事の現場になった。
と言うのも Twitter でパブリックエネミーとして炎上すると、顔が割れて本名バレしたら就職や進学に影響が出るのが常になったし、
パブリックエネミーではない理不尽な炎上でも、 Twitter が他の SNS での関連付けされていたらすべての SNS から丸ごと退場、と言う結果になる。
つまり一度追い込まれたら SNS に復帰できないどころか、現実社会でも人を追い込める構造になってしまった。
んでさらに性質の悪いことに、一度 鍵垢とかアカ消しなどで Twitter から逃げだしたとしても炎上案件を面白半分で拡散するアルファ垢とかが普通にいるし、
そう言うクソアルファのツイートを対した思慮もなく拡散するバカがアホみたいに居たりするんだよな。
そしてそう言う連中がいるから、一度炎上で火が付くと余程燃やした側に非が無いと炎上は止まらなくなったし、
その結果として、Twitter は人を追い込んで自死(自殺)へと仕向ける事が出来るプラットフォームになった。
つまり昔の放牧的で日本語すら通らなかった Twitter は気がついたら無くなってて、人を死に追い遣ることも出来る惨状の SNS になった。
なんで俺は死人が出る、と言う理由で今の Twitter は無くした方が良いと思ってる。
次の理由がこれ。
直近のニュースで、複合的な理由が要因となって「いいね(like)」だけで民事の名誉毀損が認められた、
いわゆる「いいね罪」が発生する様になった、と言う事が表現の自由戦士界隈で話題になってたみたいだが、
俺はこれを当然の結果だと思ってる。
と言うより、さっきも木村花さんの事件に言及した様に Twitter で死人や人生を破壊される人が出れば出るほど、
司法や国家権力は「個人を守る」ために、特定の言論へ一定の圧を掛ける判決や規制を出さざるを得なくなる。
なんでかって言えば SNS で死人や被害者が出ている現状を放置する社会、なんて被害者の側からしてみればたまったもんじゃないし、
そう言う社会悪の放置は、往々にして政治の現場へ一定の圧になってくる。んで、この政治側に掛けられる圧が「大義」に化ける。
そしてそう言う「大義」が大手を振って歩ける様になった結果、侮辱罪は厳罰化されたし、それでも SNS で個人への精神的暴力が止まらず、
より酷い状況を生み出すんであれば、たぶん名誉毀損罪とかも厳罰化されるだろう、と俺は思ってる。
んでそう言う「大義」にかこつけて「言論の自由」を規制したい連中は暗躍するわけで、今の惨事が罷り通る Twitter は既に言論の自由の敵になった、と俺は考えている。
そしてこの手の話が最終的に極まって行けば、極論だけど Twitter みたいな SNS は規制省疔直轄の許可制とかになりかねないでねーの、と俺個人は思ってます。
これはまあオマケみたいは話ではあるんだけど、Twitter も含め 、例えば Facebook とか Instagram 、
YouTube とか TikTok とかなんでもそうだが、国外の SNS は前提として 日本国における言論の自由は無い。
と言うのもこれらの SNS はすべて諸外国の法律下に既にあって、その上で日本の規制とかが入ってるから、
他国の規制と自国の規制、その両方の法規制の元に置かれている。
で、これの何が都合の悪いか、と言うと、例えば日本の法律では許されている言論であっても、
サービス提供を行なう本社がある国では違法となる言論があった場合、日本に居ながらにして他国の法律が適用される、とかそう言う事になる。
なんで例えばアメリカでクソったれな言論規制法が出来上がって施行されたとすると、
その法に対し違憲判決が出ない限り Twitter などのアメリカ系 SNS は、日本を含めどの国に対してもそのクソったれな規制下に置かれてしまう。
なのでそう言った意味で、そもそもとしてアメリカ企業が運営する Twitter には日本の言論の自由はない。
そしてさらに性質の悪いことに、Twitter 社はトランプ大統領が現役だった時、トランプ大統領が無茶苦茶を言い出したことに対して、
マニュアル運用でトランプ大統領を黙らせようとし、最終的にトランプ大統領が退任した後、アカウントを凍結して Twitter からトランプ元大統領を叩き出した。
んで、自国の要人、しかも大統領にさえ(抵抗権として)牙を向いた Twitter 社が、他国の要人が似たような事をしだした時、
同じ様な行動を取らない、なんて保障はあると思うか?思う思わないは個人の意見に相異はあるだろうが、俺としてはそうは思わない。
つまり Twitter と言う会社は、自社や自国にとって都合の悪い意見 を政府要人が言い出した場合に相手を黙らせた前科があり、
そう言った意味で日本の政府要人、あるいは公共機関の Twitter アカウントが凍結されない、なんて保障は俺は無いと思ってる。
なのでそう言った意味で俺は今の Twitter を信用・信頼すべきではないと思うし、イーロン・マスク氏の暴走がどう影響するか分からんが、
自体がより悪化する方向へ傾くのであれば、俺は Twitter にご退場を願った方が良いと考えてます。
そう言った理由で俺は Twitter と言うサービスは、ある面では無くなった方が良いんじゃないかと思ってるんだが、
では Twitter の代わりになるサービスはあるか?と聞かれたら、それはたぶん無い。諦めろ、と言うのが俺の結論。
と言うか第二・第三の Twitter もどきが出てきたところで、 Twitter の二の舞になるからそもそもそんなサービスは存在すべきではない、と思ってる。
あと Twitter の代用、と言う文脈でマストドンなどの連合系インスタンス群(Fediverse)が代用候補に上げられるが、
マストドンや misskey 、Pleroma なんかでも同じで、連合系インスタンスであっても、規模がデカくなればなるほどTwitter と同じ末路を辿るだろう、と考えてる。
と言うか連合系インスタンスが比較的平和なのは、ユーザー数が少なく良識のある面々が多数派だからであって、
そうではないクソみたいな連中が雪崩れ込んできたら、あっと言う間に Twitter の様な荒廃した世界になるのがオチとしか俺は思えない。
しかもマストドンとかは技術的な面倒を見れるのであれば誰でもインスタンス立てられるから、
誹謗中傷や暴言、陰謀論、排外主義や差別主義、と言った最悪な言動に特化したインスタンス「も」立てられると言う面もあったりする。
とは言えそう言った最悪系のインスタンスは他のインスタンスの連合から弾き出せるし、
Pawoo みたいに海外の法律的に連合を組めない(主にえっちなイラストが原因)もあるから、これが一概に悪いとは思わない。
が、ユーザーが増えれば増えるほど SNS 系のサービスは治安が悪くなるから、俺としては大規模な Twitter もどきを増やす利点を見出せない。
なんで俺個人としては、連合系インスタンスは行儀の良い面々だけで運用されるインスタンスでもない限り治安は最悪になるだろうし、
Twitter で誰とでも暴言吐いて論戦出来る場なんて用意すべきではないと考えてる。
そのためこの節の最初の方でも言ったけど Twitter の代わりは無いし用意すべきでもない。素直に諦めろ、
と言うのが俺の結論です。なので誰にとっても救いはない。
それは増田では?というかエアプやろ?キラキラWEB系とか言ってる時点で情弱商法に騙されそう
Radius も Active Directory も無い世界線どころか、DHCPサーバ側でMACアドレスとIPアドレスの組み合わせを予約しておくことすらできない世界線の増田
最近でも Azure AD なんか導入している企業ないマン、Microsoft365 や Google Workspace は存在しない+それらと連携させるセキュリティプロダクトは存在しないマン、
AWS や VM や Dockerが存在しない世界線マン、AWS で起動テンプレートを作らないインスタンスを複製しないマン、Debianと契約するマン、
Linus Torvalds を知らないマン、資産管理の意味が理解できないマン、フリーデスクの基本的な運用を知らないマン、基幹システムにアクセスしないマン、
Teamsなどのコミュニケーションツールが存在しない世界線マン、今時は Teams などのコラボレーションプラットフォームに内線を統一する流れなのに
一昔前の BYOD で個人の携帯にアプリで内線を割り当てるどころか固定電話を廃止して携帯定額通話でドヤ顔マン、ユニコーン企業で働いてる設定なのにお局云々マン、
AWSで年収1000万余裕マン+AWSについての歴史改変マン、既存の不正検知AIプラットフォームは使用せず依頼を受けてサイゲ参考に不正検出システムを作ったマン、
Pythonは仕事は無いマン、デスクをデコるマン、リモートワークできないマン、Macドヤ顔マン・・・・・ほか、上げたらキリがない
Radius も Active Directory も無い世界線どころか、DHCPサーバ側でMACアドレスとIPアドレスの組み合わせを予約しておくことすらできない世界線の増田
最近でも Azure AD なんか導入している企業ないマン、Microsoft365 や Google Workspace は存在しない+それらと連携させるセキュリティプロダクトは存在しないマン、
AWS や VM や Dockerが存在しない世界線マン、AWS で起動テンプレートを作らないインスタンスを複製しないマン、Debianと契約するマン、
Linus Torvalds を知らないマン、資産管理の意味が理解できないマン、フリーデスクの基本的な運用を知らないマン、基幹システムにアクセスしないマン、
Teamsなどのコミュニケーションツールが存在しない世界線マン、今時は Teams などのコラボレーションプラットフォームに内線を統一する流れなのに
一昔前の BYOD で個人の携帯にアプリで内線を割り当てるどころか固定電話を廃止して携帯定額通話でドヤ顔マン、ユニコーン企業で働いてる設定なのにお局云々マン、
AWSで年収1000万余裕マン+AWSについての歴史改変マン、既存の不正検知AIプラットフォームは使用せず依頼を受けてサイゲ参考に不正検出システムを作ったマン、
ワイも増田も
MMMO (M 無教養で M 無能で M 無収入な O オタク) か
MMMM (M 無教養で M 無能で M 無収入な M マン) で
年がら年中、就職できないとかやってるし、ひどいお仕事増田見るからな
Radius も Active Directory も無い世界線どころか、DHCPサーバ側でMACアドレスとIPアドレスの組み合わせを予約しておくことすらできない世界線の増田
最近でも Azure AD なんか導入している企業ないマン、Microsoft365 や Google Workspace は存在しない+それらと連携させるセキュリティプロダクトは存在しないマン、
AWS や VM や Dockerが存在しない世界線マン、AWS で起動テンプレートを作らないインスタンスを複製しないマン、Debianと契約するマン、
Linus Torvalds を知らないマン、資産管理の意味が理解できないマン、フリーデスクの基本的な運用を知らないマン、基幹システムにアクセスしないマン、
Teamsなどのコミュニケーションツールが存在しない世界線マン、今時は Teams などのコラボレーションプラットフォームに内線を統一する流れなのに
一昔前の BYOD で個人の携帯にアプリで内線を割り当てるどころか固定電話を廃止して携帯定額通話でドヤ顔マン、ユニコーン企業で働いてる設定なのにお局云々マン、
AWSで年収1000万余裕マン+AWSについての歴史改変マン、既存の不正検知AIプラットフォームは使用せず依頼を受けてサイゲ参考に不正検出システムを作ったマン、
https://www.youtube.com/watch?v=yhDLmGpjdms
これよりもっとひどい動画はごまんとあるが、ここまでタイトルで煽っている以上指摘するわ。
プロフィール見るとCTOを経て独立してプログラミングスクールの会社やっているっぽいけど、すごい時代だな。
晒しになっちゃったけど、他にも有名(と思われる)プログラミング系YouTuberが実際にコードを書いている場合でひどいのはザクザク見つけられるから、見つけてため息をつくといいと思います。
これまでいろいろな書籍やサイトから情報を得てきて、オブジェクト指向のプログラムを、「知識とスキルを持った職人をいっぱい雇ったプロジェクト」というように理解している。
極論を言えば、オブジェクト指向=擬人化思考というように捉えているけれど、この理解はどの程度あっているのだろうか?
とすると、
職人は、会社の指示によって働き、持っている知識とスキルを使って仕事をする。
知識やスキルは、各職人が会社に指示されたマニュアルを読んで覚える。
とか
オブジェクト指向が特に有用なのは、特に複数の会社と協力して作業する場合である。
そのような大規模なプロジェクトであるならば、各企業の職人一人一人に指示するよりも、マニュアル一つで指示した方が簡単だし、間違いが少ない。
オブジェクト指向の三大概念として、いろいろな媒体で紹介されている「継承」「ポリモーフィズム」「カプセル化」も、それぞれ「一つのマニュアルを用意して、職人に利用してもらいやすくする」「各職人は、自分にとって必要なマニュアルの一部を読んで知識とスキルを手に入れる(ここの理解は自信がない)」「マニュアルは、職人によって勝手に書き換えられないようにするべき」みたいな感じでなんとなく理解している。
ただ、根本のオブジェクト指向がよくわかっていないため、これが合っているのかもわからない。
のだけれど、なんとなく色々勉強してきて、複数人とプログラムを組むとか、大きなプロジェクトとかでもない限り理解していなくても問題なさそうなので、回収率100%を超える競馬プログラムが出来上がるのを夢見て寝ます。
MacユーザーがOculus Questだけ買って、PaperspaceというクラウドゲーミングサービスでPC版VRChatを1年やってみたらかなり良かった。やり方を書き置きしておきたい。
※2022年9月時点でのHow to・セットアップ方法の記事がなかったので、先人のブログを引用しながら、変更点注意点などを書き残しておきます
コロナ禍で好きな音楽の現場へ行く事が難しくなり悶々としていた2021年夏頃、友人に「VRChatのVRクラブがおもろいから、騙されたと思ってOculus Quest2一緒に買って始めてほしい」と言われ、4万空中に投げたと思って、ノリだけでOculus Quest2を買う。
元々VRChat自体に憧れはあったが、家にはMacbookとオフィス向けWindowsしかなかった為環境がなく、諦めていた。しかし
・Paperspaceなるクラウドゲーミングサービス (つよつよグラボを積んだPCをネット通して借りれる)
・Virtual Desktop(\2000) (Questと接続されてないPCを繋ぐQuestアプリ)
・Oculus Quest2(当時4万弱)
・Paperspaceを起動する端末(MacでもWindowsでもスマホでもOK)
の4つが揃うだけでプレイできるらしい。価格は1$前後/1h。手元に必要なものはブラウザが立ち上がるPCとQuestのみ。初期投資に必要な金額は4万前後。
まぁちょっと旅行行ったと思って4万払ってみよう、体験版と思ってやってみるか〜 と思って始めたが、これが思いのほか快適で結局1年間使い続けてしまった。
もし「Quest版のVRChatをやってみたけど全然おもしろくなかった」「PC版でガッツリやってみたいけど家にあるPCのスペックが足りない、或いはMacしかない」という人がいればぜひ参考にしてもらいたい
※海外鯖の為、pingは100msほどあり軽度のラグが生じ、FPS系のゲームには向かない。
ただ、昔のSkype程度のラグのため、VRChatで会話コミュニケーションを行うにはほぼ不便を感じなかった。
https://suna.hateblo.jp/entry/2019/06/30/015730
とりあえずP5000インスタンスを借りる承認が降りるまでは、やや時間がかかる(多分手動で承認作業をしてもらっている)のでSubmitのところまで記事に従ってやっておくが吉。
※この申請が通るまでは待ちなので、インスタンス構築手順は進められません。また、お金はこの時点ではかかりません。
[追記]上記ブログ内「3. 鍵がついているけどP5000をクリックする」の工程の画面が、2022年9月現在と大きく異なるようです。
Machine Type からP5000(鍵マーク付)を選択
→ 上記ブログの内容を参考にRequest Approvalへ申請理由を記入
---
上記ブログについて、2022年9月現在では記事内8番の工程より先は大きく内容が異なる。そのため一旦無視を推奨する。
また、設定方法でも異なる部分が多くあるため、6点ほど注意点を書き残しておく。
①paperspace導入時(インスタンス構築手順)の最初の画面が現在はブログのものと大きく異なっている。
最初の画面でcoreを選択 → Help us~~ の画面で 利用目的を「hobbyst」「gaming」「just me」にしてcontinue を押し、マシン作成の画面に移行してください。
②インスタンス構築の手順に入る前に、先にクレカ情報を登録する。(P5000の申請を行うための必須作業。登録のみなので支払いは発生しません)
ページ右上の■から「Billing」を選択して、「Payment Method」の項目に名前と住所(英語表記)・クレカ情報を入力して、Addしてください。
③設定内容は変わらないが、選択部分の文字表記等が異なる部分がいくつかある。
ブログと同じマシン設定の場合の、項目名および選択・変更するものの表記は以下(参考にしてください)。
Machine Type P5000
Region WEST COAST(CA1)
Desksize 100GB ※デスクサイズの変更については後述
Advanced options オン → ブログを参考にPublic IP、Auto-Shutdown、 Auto-Snapshotを設定。
④記事内9番の工程「VirtualDesktopをインストールする」は ”Oculusから” 購入・インストールする。
SteamでもVirtualDesktopを販売しているのだが、こちらから買えるものは今回使う用途のものではありません。買っても無駄金になります。気をつけてください。(自分と友人らはここでしっかり詰んだ)
⑤この記事の11番「サイドロード版のVirtual Desktopをインストールして起動する。」
⑥月額の課金額が変わるが、HDD容量が足りなくなるのでDesksizeは100GBに増やしておく。
※もし50GBでマシンを作成してしまった後であっても"Upgrade Machine"の項目からワンクリックで増やせます。
---
①OculusからVirtual Desktopアプリを購入(\2000)
※繰り返しになるが、Steamで売っているVirtual Desktopは、今回の環境時では使わない。間違って買ってしまった場合には返金をお願いしましょう。
※Virtual Desktopストリーマーを先にインストールすると不具合が出るパターンがあるようなので、なるべく最後にインストールすることを推奨
①ブラウザでpaperspaceにログイン、クラウドPCのマシンを立ち上げる
②paperspaceのマシンの起動を待っている間に、手元のOculusを起動
④Virtual DesktopからpaperSpaceのマシンへ接続(うまくOculusアプリのインストールとID連携が済んでいれば、Virtual Desktopを起動するだけで自動でつながる)
⑤Oculus左手の 三 のボタンを押して、VirtualDesktopのメニューからVRモードでVRChatを立ち上げる
西海岸のクラウドPCと繋いでゲームをするため、お使いの各家庭の回線環境に依存する部分はあるかと思うので注意。
※ただ、iphoneのテザリングでもギリ使えたという話もあるので、相当回線速度が低くなければ意外といける可能性あり
上記の手順を踏めば、家にWindowsゲーミングPCがなくても、PC版VRChatをVRモードで遊ぶことができる。
個人的な感想だが、ことVRクラブにおいては、デスクトップモードとVRモードでは体験が全く別物で、
デスクトップモードはDOMMUNEやTwitchを見ている感覚と大差はない +マビノギとかのネトゲをやっている感覚って具合で
ぜひ上記記事を参考にして、クラウドゲーミングPCを導入してみてください。
(マジでNVIDIAのGeForce NOWとかがVRChatに対応してくれたらコスパも良くてちょうど良いんだけどな・・・)
そもそもオンプレミスのシステムをクラウドに載せ替えてコストダウンできるという発想が間抜けだ。頭が悪い。クラウドはオンプレミスよりも高コストだと、ガートナーすら指摘している。クラウドにするのであれば、クラウドに適応したシステムに再構築すべきだ。例えば、静的ファイルは S3 + Cloudfront にして配信サーバーを少なくするとか、アプリケーションサーバーは需要に応じてインスタンスをスケールするようにして省力化するとか、データベースサーバーを Aurora か RDS にしてバックアップの手間暇をなくしたりするとか、でもしないとクラウド化で高コスト化しちゃうよ。
やっぱ Throwable はきちんと catch() して、ログくらい出してもいいと思うんだよ。
Throwable 派生のインスタンス作って、スタック巻き戻して、catch() に処理を移す、程度の余裕はあったって事でもあるわけでしょ。
ログくらい出していいじゃん。
その後は exit() するべきだろうけど。
「そんな状態で出るログなんて信頼できない」「他の部分まで破壊されて問題解析をややこしくする」という意見もあるけども。
しかしだね、今もう既にログが出てないせいで、顧客に「原因これです、ログにも出てます」と報告できなくて、ややこしい問題に陥ってるんだわ。
てかメモリの様子診てる限り、これ落ちてるのメモリ不足でしょ。どこでリークしてるのか知らんけど。
てかredisでメモリ食いすぎじゃね?こんなにいるんだっけ?知らんけど。
でも「そんな問題解決法はいやだ、もっと他に無いか」と言われる。
やってられん。。。
自動で安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋)
/**************************************
以下の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
社内のクラウドインフラを使って社内向けの数十PJを管理するアプリケーションを提供していた。
管理者権限があったので、結構自由にいろいろできる状態だったんだけど、
ゴミインスタンスが増えたことに気づいて削除するスクリプトを書いて実行した。
手に汗どころじゃないくらいの冷や汗がでた。夢だといいなって本当に願ったけど現実だった。
なんでスクリプトで削除するなんていう危険な作業を動作確認もせず、ダブルチェックもせずにやってしまったのか。。。
30分ほど調べたらどうやら削除コマンドは本当の削除ではなく、インスタンスの停止になっていて1週間後くらいに本当に削除するなんていう
神仕様になっていることがわかった。削除フラグを消してインスタンスを全部立ち上げることで半日くらいの停止で済んだ。
この議論には相互性がない。あなたと同じように、相手のほうも相手でメインルーチンを走らせており、時にあなたを含む他者をサブルーチン的に利用しているのだから。
つまり、あなた側の視点だけで関わり合いのある他者を機能的に命名してしまうと、あなたというドメイン内での局所的な命名のような命名が、同時に動作しているメインルーチン数だけ存在することになり、命名管理のコストが爆発する(というか、事実上、できない)。他者(あなたにとってのサブルーチン)が、あなたが定めた局所的な命名規則によって呼び出されることを保証できないのなら、それはプログラム的な意味での「呼び出し名」として成立していない。
よって、一意性がある命名を用いて、どのようなドメインからでもおおむね目的のサブルーチンの呼び出しを可能にしていることには、合理性がある。増田のような視点で言えば、会社の役職である「総務課長」や「営業主任」などは、相手が司る機能性に着目した命名とも言えるが、そうした役職は同時に複数存在しうるので、個別のインスタンスを指定して呼び出すには、やはり一意性がある命名を利用することが合理的だ。
また、他者の「機能」は自分との関係で変化する。機能が変わるごとにサブルーチンとしての他者の呼び方を変更することは、両者がドメイン(たとえば家庭)を共有している場合は低コストで可能だが(たとえば子供ができたあとに互いを「パパ・ママ」呼びするなど)、そうでない場合は、機能が変わるたびに命名を変えるのは、メインルーチン側から見ても合理的でない。
人間が他者との相互通信のコストを最小化するには、「他者を機能で命名して、変更があった場合は頭の中でテーブルを書き換える」より、「お互いにユニークに定められたマシン名を直接叩く」ほうがよいのだ。