「てST」を含む日記 RSS

はてなキーワード: てSTとは

2023-01-26

VPS自宅サーバーにインストールしたいSaaS代替Webアプリ38選

シェアウェア(という表現はおいておいてのやつ。https://anond.hatelabo.jp/20230124045812)の記事面白かったので、自分の得意分野の領域でいろいろ紹介します。

基本的に、SaaSサービスは便利だけど、あれもこれもと契約していったらサブスク破産するので、

ものによってはセルフホストした方がいいと思ってる派。

Dropbox/GoogleDrive/box代替

NextCloud

もともとownCloudっていうDropbox代替があったんだけど、そこから分派して今も機能開発が続いている。

興味深いのはLAMP構成なので、VPS自宅サーバーじゃなくても、レンサバで動くのがいいよね。

データ保存領域オブジェクトストレージ(S3互換)も利用できるので、例えばWasabiなんかと契約してお安く済ませてしまうのも全然アリかと。

Trello代替

Wekan

最近カンバンシステムって、単体で使うんじゃなくていろんなアプリの中で使われる印象なので、今更Trelloだけ使いたい、なんてニーズはないかもだけど、

そこまで複雑でなく小規模なプロジェクトとかだと、意外とTrelloだけでいいよね、みたいなこともあるかな

そういう時は、これを使うといいかも。

Slack代替

Mattermost

ちょっとUI雰囲気が違うだけで、まんまSlackです。絵文字の追加もできるし、APIもあるし。人によって好き嫌い分かれるスレッド機能も、まあ、あのスレッド機能のまま。

その他のSlack代替選択肢
  • Rocket.chat
  • Zulip

この2つは使ったことないので、名前だけ挙げておきます

Zapier/IFTTT/Make代替

n8n

n8nと書いてnodemationと読ませるらしい。初見殺しすぎんだろ。

Zapier使ったことある人はすぐわかると思います

ZapierやIFTTT無料枠あるけど、あれもこれもやり出すとすぐ無料枠埋まっちゃうので、これ結構いいと思うんだけどな。

その他のZapier/IFTTT/Make代替
  • Huggin
  • Windmill

kintone代替

Exment

kintone使ってる会社増えてると思うんだけど、まだまだ1ユーザー1500円ってのは高いので、零細企業は導入し辛いと思う。

で、それの代替になるのがExment。UIがkintoneとは少し違うので代替と言い切れないかもしれないが、

やれることはkintoneのソレと全く同じなので、用途代替はできる。

開発も日本企業なので、UI日本語化されている。LAMP構成なので、レンサバでも動くよ!

Airtable代替

NocoDB

そもそもAirtableって何やねんって人もいるかもしれないけど、kintoneとGoogleスプレッドシートをいいとこ取りして、Trelloとガントチャートを足した感じ。

これのOSS版です。結構再現度高いので良い感じ。

ZoomGoogleMeet・Microsoft Teams代替

Jitsi

これもまあまあいい感じでZoom再現してますZoomの方が新機能の追加早いけど、Jitsiも頑張って追いついている感じです。

ただ、やる内容が複数人でのリアルタイム動画配信なので、サーバースペック回線スペックはまあまあ必要なので要注意。

BigBlueButton

こちらは使ったことないんだけど、よりオンライン授業向けらしい。

Calendly代替

Cal.com

最近よく見かけるようになった、オンラインミーティングとかの予定をブッキングさせるSaaS

あれのはしりがCalendlyで、日本でもいくつかそれのSaaSができてますね。

あれらも無料枠だと1カレンダーだけしかできなかったりするんだけど、これなら好きなだけブッキングさせられます

Intercom、Zendesk代替

Chatwoot
Papercups

ECサイトとか、Webマーケティングを重視してるサイトによくある、画面右下に吹き出しアイコンがあって、チャットウインドウがぴょこっと出てくるやつ。

日本ではWeb接客とか言われてるけど、あれの代表的SaaSがIntercom。Zendeskは、どちらかというと内部ツール向きかな。

これのOSS版がChatwootとPapercups。自社サイトWeb接客入れたいけど、費用抑えたい、って時にどうぞ。

Backlog/Asana代替

OpenProject

この手のツールがないと仕事にならないという人も多いと思います

これまでだとRedmineがそれのOSS版的立ち位置でしたが、さすがにイマドキあのUIはないなぁ、と。

OpenProjectは、Microsoft Projectの代替イメージしてるみたいですが、

ガントチャートカンバンデフォルトで使えるので、BacklogやAsanaの代替にはちょうど良いでしょう。

ただ、そんな高度なことしてるわけではないのに、サーバー要求スペックちょっと高めなのでご注意を。

Google Analytics代替

Matomo

UA廃止GA離れが始まってるとも聞きますが、疎開先として有名。

PHPで動くので、PHPWordPressでできたサイトに一緒に入れちゃってもいいと思う。

HeadlessCMS関連

HeadlessCMSは、データ表示を持たず、フロントエンドAPIを通じてデータを渡すタイプCMSのこと。

このジャンルでは、SaaSだとContentfulが有名だけど、OSSでもいろいろある。

Strapi

Node.js製。歴史があるので、結構いろんなことができる。

WordPressのGutenbergエディターを取り込んだプラグインなんかもある。

User認証も持ってるので、CGM的なサイトを作ろうと思ったらできなくもない。

Directus

これもNode.js製。利用できるDBが幅広く、既存データベース活用できる。

なので、既にPostgresSQLとかでデータを持ってるんだけど、

非エンジニアにもデータを触らせるためのフロントエンドが欲しい、ってニーズに良いかも。

こちらもUser認証デフォルトで持ってる。

Cockpit CMS

PHP製。SQLiteMongoDBで利用可能MySQL/PostgreSQL使えないのがちょっと残念。

Shopify代替

Medusa.js

近年、本腰入れて自社ECサイトをやろうと思うと必ず選択肢に上がるShopify。

インテグレートパートナー向けのエコシステムも充実してるので、取り組み始めるエンジニアシステム会社も多い。

ヘッドレスコマースや越境ECには向いているものの、これをセルフホストしたい、というニーズに応えたのがmedusa.js

ざっと見てみただけだけど、モダン構成で、今時のフロントバックエンドを分けた構成でやりたい、というのには向いている。

プラグインmedusa-marketplace.jsというのもあり、Amazon的なマーケットプレイスも実現可能

Figma代替

Penpot

昨年、Adobeに買収され、デザイナーたちを驚愕させたFigma

先日はAdobe XD終了のお知らせとなり、UIデザイナーたちの不安は募るばかり。

そんな提供企業に振り回されたくないなら、このPenpotでUIデザインしよう。

Figmaほど機能実装はされていないが、まあまあ一通りのことはできる。

Figma代が嵩むとお嘆きの制作会社なんかは、一考の余地あるんじゃなかろうか。

Google Form代替

Oh My Form

企業によっては、コンタクトフォームをたくさん作りたいという会社もある。

例えばセミナーを頻繁に開く企業だったりとか、

人材採用フォーム職種別に細かく分けたい(しかも頻繁に募集職種が変わるとか)

などの要望によって、GUIフォームを作りたい局面がある。

Google Formで大体解決しそうだけど、それをGoogleに頼りたくないならこちら。

まあまあ機能豊富なので、人によってはGoogleFormよりもこちらを好むかも。

Gmail代替

Mailu

DockerベースWebメールUI。送受信に必要ものを、丸っとDockerで用意してくれているので便利。

SalesForce/HubSpot代替

SuiteCRM
Mautic
Erxes

HubSpotは、いわゆるMarketing AutomationCRMを一体にしたツール無料枠もあるが、かなり限定されている。

上記でいうと、Erxesが単体で一番近い機能を持っている。

MauticはMarketing Automationよりの機能が多く、ユーザーサイト上での回遊をビジュアル化してくれたりする。

SuiteCRMはザ・CRMという感じ。SalesForceデフォルトで使う感じに近い。

ツールが分かれてしまうのは辛いところだけど、それぞれにAPIがあるので、うまく繋げられると強力なツールになってくれるはず。

Sendgrid/Mailgun代替

Postal

Webサービス作ってると、メールの通知や一斉配信などがあると思う。

通常これらはSendGridや、AWS SESなどで処理すると思うが、これらにもOSS代替がある。

PostalDockerメール周りのもの全部用意してくれているので、かなり楽。

Jimdo/Wix代替

Microweber

WordPressモダンにしたような感じで、EC機能デフォルトでついてる。マルチサイトも標準。

Jimdo/Wix代替と書いたが、もちろん自分サイトをMicroweberで作ってもいいが、

自前ホスティングして、JimdoWixのようなサービスを始めることもできる。

テンプレートをいくつか作っておいて、Stripeを仕込んでおけば、今日からあなたJimdo/Wixのような事業を始められるわけだ。

STUDIO/Webflow代替

Webstudio

JImdo/WixSTUDIO/Webflowは一緒くたに語られがちだが、明確な違いがある。

前者はプリディファインドなブロックGUI構成するのに対し、後者DOM要素ベースで構築していく。

まりよりHTML/CSSによる細かなデザインコントロールがしやすく、Webデザイナーが親しみやすい。

それのOSS版がWebstudio。まだアルファ版だが、フロントエンドはそれなりによくできているので、

バックエンドを自前で用意してStripeを仕込んでおけば、今日からあなたも(以下略

Facebook代替

friendica

Facebookなんか使わねーよ、っていう人も多いかもしれないが、

特定コミュニティの中でコミュニケーション取るには、FacebookUI機能は優れていると思う。

なので、サークルとか同窓会、あと自治会とかPTAなんかにいいんじゃないだろうか。

LAMPなので、レンサバでもいけると思う。

Netflix代替

Jellyfin

Netflix代替って、Amazon Primeとかじゃねーの、と思われるのかもしれないが、そうではなくて、

あなたNetflixみたいな商売したいならこれを使うといいよ、というのがJellyfin。

いや、そんな商売しないよ、と思うかもしれないが、

使いようによっては、おじいちゃんおばあちゃん向けの子動画配信サービスとして構築するとか、

Stripeと連携して、劇団バンドオリジナル配信サイトを構築するなんかも面白いと思う。

YouTube/Vimeo代替

PeerTube

今更誰もYouTubeVimeoの後追いをしようとはしないでしょうが

複数ユーザーから動画のアップを受け付けて、それを閲覧したい用途もあると思う。

例えば、軽音部で複数バンド練習風景を録画したのを定期的にアップしたりとか。

学習塾で、授業の録画を授業ごとにアップしていったりとか。

YouTube Live/Facebook Live/ニコ生/Twitch代替

Owncast

ZoomGoogle Meetのような双方向ではなく、一対多の一方通行配信

個人的には、企業のウェビナーツールとしての可能性を感じる。(Zoomのウェビナープランとか高いもん)

メールワイズ/Re:lation代替

FreeScout

つのメールドレス複数人運用したい時のツールメールワイズとRe:lationどちらも日本SaaS

FreeScoutはOSSだけど、海外製。一応日本語化もされてるっぽい。

ECサイト顧客問い合わせや、営業チームのプライマリ対応なんかに良いと思う。

Bubble代替

Budibase
AppSmith
ToolJet

Bubbleってなんぞ? という人のためにお伝えしておくと、ノーコードベースWebアプリ開発ツール

データエンティティ設計したら、自動的CRUDを作ってくれて、フォームを配置するというような感じ。

Bubbleはそれ系の老舗で、歴史が長い分ノウハウも溜まっており、連携できるサービスも多い。

ただ、ベンダーロックインされるし、季節的なキャンペーンとかでは、アプリ使用しない期間もサブスク費用がかかる。

Budibaseは、Bubbleの思想に一番近い感じ。凝ったUI必要なければ、ざっくりコレでなんでも作れちゃう

AppSmithも同じような感じだが、これはDBをあらかじめスキーマ定義しておかないといけないところが若干不便かな。

ToolJetはルーティングURL概念がなく、本格使用を諦めたんだけど、最近アップデートしたらしいので、そこのところどうなってるかまた確認ときたい。

他にもこの手のやつあったら、いろいろ教えて欲しい。単純に好きなので。

「こういう用途のやつ、ある?」みたいな質問も歓迎。

見つかったら追記します。

2023-01-06

Reactで小数点入力できない問題

みんなどうしているのか?いまいちベストプラクティスが見つからない。

例えば、テキストボックスに"1.1"を入力しようとして、"1."まで入力したとする。

数値に変換してstateを保存しようとすると、変換の際に末尾の小数点がそぎ落とされて、表示されるのは"1"になってしまう。

レンダリングが早いので、ユーザーからすると、小数点入力が受け付けられていないように感じる。

仕組みが分っていれば、"11"を入力してから間に小数点を挿入すれば入力可能だが、ユーザーにそれを求めるわけにもいかない。

スカイリムおもしれえええええええ

正月暇だからてsteamセールで売ってたスカイリムに手を出した

なんか有名だしやってみるかと軽い気持ちだったのに、正月休みが全部スカイリムに吸い取られた

面白すぎる なんだこれは

2022-12-26

日本舐められすぎワロタ

会社潰れてもう何もやる気せーへんわバカらしいと思って

Switchクリスマスセールソフト探してたんだけどあんまいいソフトねーのよ

 

で、米国アカウントに切り替えたらGOD EATER3が$8.99だったのね

日本アカウントに切り替えたら7680円なのよ

米国版もちゃん言語Japanese入ってるのに

 

いや、コンマイ日本舐めすぎやろ

前々からコンマイソフトてSteamでも日本にだけは売ってあげませんよとかやってたけどよ

クリスマスセールくらい合わせろや!

 

ちなみにネプテューヌメアリスケルターシリーズを展開するコンパイルハート

言語Englishしか入ってない完全米国版を販売してました

そこまでやるなら許す

2022-12-13

Unityビジュアルスクリプティング無料アセットだけで作った有料ゲームが初めてsteamで売れた。無料版遊んでくれた人が買ってくれた。嬉しい。某コミュニティ質問するたびに「ビジュアルスクリプティングじゃまともなゲームは出来ないかゲーム作りはコーディング勉強してから出直してこい」と繰り返し言ってきた奴よ。俺のコーディング無しゲームお金を払ってくれた人たちがいたぞ!

2022-11-30

anond:20221130210306

俺も就活ミスった既卒フリーター実家帰って塾でバイトしながら、個人ゲーム作ってSteamにあげてる。まだ収益出てないけど。

頑張ろう。

2022-11-19

C#で数行のSQL書くのにヒアドキュメントやめてStringBuilder使えって言うの、何かに取り憑かれてない?

2022-11-06

1K(9畳)部屋に最良のホームシアター環境を作りたい

テレビオーディオも無い部屋なので1から揃えたい。映像は主にアニメ円盤(BD)とBS放送(のアニメ)。

予算ざっと100万~程度。金にも広さにも限度はあるが最良の環境を作りたい。

テレビ

プロジェクタースクリーンを設置する壁が確保できそうにないので除外。

サイズは65インチ限界そう。壁面に置くのも難しいので角への斜め置きを想定。

賛否両論のQD-OLED店頭で見比べると確かに赤や緑の原色ギラギラ感が良し悪しのようだけどソースアニメなら悪くないのではないかという説に乗ってみたい。

徐々に価格も落ちてきていて良い感じ。

有機ELとしては明るくてなんかとにかく評判良いらしい(kakaku情報)。パナのサイトを見てても何か凄そう感がある。あとA95Kよりは安めっぽい。

BDプレーヤ(レコーダ)

正直録画はしないのでレコーダ機能不要4k放送も受信できない(JCOM環境なので契約てSTB設置しないとダメらしい)ので4kチューナー不要

BD/UltraHD-BD円盤再生画質を重視したい。

4kアップコンバートについては言及が少なく、あまり画質面では良く無さそう。

4kブラビアモードを訴求しているが画質改善の能書きが少ない。

最上位を目指すならこれらしい。特に4kアップコンバートが優れていて地デジ/BSはこれを経由して見た方が画質が良いとか。能書きも多いが24p/30p変換出力って何が嬉しいの程度の知識だと、ピュアディオ系の匂いがしてくる。

とにかく色々高い部品を使ってるんだろうなというのはわかるが、LANチップが🦀なのはワロタhttps://panasonic.jp/diga/products/zr1/circuit.html)。🦀がダメとは言わないが格落ち感が凄い。

スピーカ

ワイヤレスで設置が簡単そう、以上。

騒がしい量販店だと、試聴してもいまいち効果が分かるような分からないようなという感じ。

  • HT-A7000 約14~16万

置き場所的にHT-A9が無理そうならこっち。ただし後でリアスピーカーを追加で買うとHT-A9よりも高くなってしまう。

2022-10-29

anond:20221019185819

サポートAIガチャAIの違いだと思う

無論音楽業界で受け入れられてるのはコード聞き取り(Chord Tracker)や整音(izotope等)を自動でしてくれる前者

無論イラスト業界でも望まれてるのは前者なのに後者が出てきたからな

音楽AI 自体クリーンデータしか使わないってStable Diffusionが言ってるからそんなに盛り上がらないのが確定してるし

歌手作曲家アレンジャーレコーディング/マスタリングエンジニアどれを取っても奥が深いし

万能調味料だけど整音にAIを使いすぎると尖った曲が生まれずハンコ絵みたいな薄っぺらい曲しかまれいからあえて使わない奴や嫌ってるやつも居る

それだけの話し

2022-10-12

AI画像生成技術オタク趣味者と消費者に分断する

第1世代の「オタク」の多くは趣味探究生産を旨としていた、ただ消費するだけの存在ではなかった、とよく言われるが

世代が下るごとに、オタクの中にも「特定ジャンルエンタメ消費者」的な意識を持つ人々が明らかに増えていっている。

そしてStable DiffusionやnovelAI Diffusionの登場で、この「趣味者としてのオタク」と「消費者としてのオタク」の断層が決定的になったと思う。

消費者としてのオタク」は、たとえば自分好みの絵師タッチ自分好みの絵が出力できればうれしいから、AI技術の進展を歓迎するだろう

趣味者としてのオタク」は、たとえばDanbooruを利用した機械学習オリジナル絵師努力技術剽窃貶めるものだと警鐘を鳴らすだろう

実際、Danbooruから学習批判する声に対して、オタク界隈からもちらほらと

技術進歩否定する」「老害」といった物言いが見受けられるようになってきた。

折しも最近の『2.5次元の誘惑』では、「オタクは愛で生産と消費を結びつける」「みんな仲間」という(美しい)話をやっているが

テクノロジー進歩によって、消費系のオタクが、消費したい対象人間生産者に頼らずとも無限供給してもらえるようになったら

そこに愛は残るのか? 消費者人間生産者と仲間でいつづけられるのか?

2022-09-14

anond:20220914125535

解決策はわかってるよね。PS5を潤沢に供給てState of Playもちゃんとした日本語音声のものを出せばいいんだよ。やらないから廃れる。それだけ。

2022-08-18

anond:20220818115438

007”ってintじゃなくてstringじゃねーかクソが!

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-13

PS5の競合ってSwitchじゃなくてSteamだよね

2022-06-27

オレの人生最初プログラム晒す anond:20220626151746

10 PRINT "aaa"

20 GOTO 10

これだけだw

しかPC-8001だな。初めて実機に触る以前に、テレビでやってたパソコンサンデーとかなんとかの番組で、PRINT文で好きな文字列を表示できることと、GOTO文で好きな行番号へ飛べることを理解していた。

aaa無限に表示&改行されて、上へスクロールしてすっ飛んでいったのでめっちゃビビって慌ててSTOPキーBREAKキーだったっけ?)を押して止めたw

2022-05-31

anond:20220531160822

MuseDashのDLCが高くなるって聞いて本体もちょうど安くなってたので合わせてSteamで買った

Maharajah - アリスシャッハと魔法楽団

ってのがよかった

2022-05-16

昔の人の歩く能力すげーな

この前、「俺はどこまで歩けるか試したい」とか意気込んで歩き出したけど、結局途中で疲れて電車で帰ってきたんだけど、

それでも結構歩いたよな。と思ってStrava見たら4時間、20kmっていう数字見て、あれれ・・になったよ。

 

昔の人って7時間とか歩いたんやろ。それも毎日。凄いな。

2022-05-12

自殺報道ガイドラインは将来的には消滅する

なぜそうなるか、順を追って説明する。

STEP1:自殺報道ガイドライン違反が相次ぎ、国が放送免許を盾にガイドライン遵守を放送局に強く求めるようになる

これは誰もが想像つくだろう。今回なぜか厚労省から通達が出たが、そのうち他の省庁も同調してくるようになり、最終的に総務省同調する。

ガイドライン」なのに法律と同等の扱いをするのはどうなのかという声も一部で出るが、黙殺されるだろう。

STEP2:著名人自殺で亡くなった場合、死因が報じられなくなる

病死場合事故死の場合は大々的に、詳細に報じされるが、自殺場合は小さく「○○日に亡くなった」とだけ報道されるようになる。死因についても伏せられる。病死事故死の場合追悼番組も出てくるが、自殺場合はそれすらも無くなる。ここまではガイドラインの狙った通りになるだろう。

STEP3:自殺で亡くなった著名人について、バイラルメディアタブロイド紙が死因をしつこく追いかけるようになる

ここから想定外になると思われる事象。死因が伏せられた著名人に対して、「真実を追及する」という題目で死因を追いかけるメディアが出てくる。メジャー放送局や大手新聞社はそういうことをやるわけにはいかないので、バイラルメディアタブロイド紙の出番になる。Youtuberもそれに乗っかってくる。

その結果、そっとしておいて欲しい遺族がどこの馬の骨と分からない連中からいかけられるようになる。今はメジャー放送局や大手新聞社記者という「どこの馬の骨なのか一応わかる連中」に追いかけられている分だけまだマシなのだが(抗議を受け付けてくれる場所があると言う意味で)、その要素すら消えてしまう。

STEP4:著名人自殺で亡くなった場合、「亡くなった」という事実すら伏せられ「休養」で誤魔化されるようになる

STEP3の結果もたらされる事象としては、「そもそも亡くなったこと」が伏せられるということが考えられる。出演中の番組舞台がある場合はその人が突然消えることになるので、表向きは「体調不良で当面休養のため降板」というプレスリリースが行われるだろうが、本人が死んでいるのでいろいろ不自然ものとなる。そしてSTEP3と同様バイラルメディアなどに追いかけられ、実は自殺していた・・・という報道が相次ぐようになる。

STEP5:「休養」が「自殺」を意味する単語と化してしまい、NGワード化してしまう。

そしてこういう事象に繋がる。もはや本末転倒である芸能界NGワード化したのだから一般社会でもNGワード化してしまい、「休養」「休暇」などの言葉がつかえなくなってしまう。

STEP6:自殺報道ガイドライン撤廃される

そして、このような本末転倒なことが起きている根本原因は何だと言う声が日本全国から上がるようになり、元をたどれば自殺報道ガイドラインのせいということに(当然だが)なり、このガイドライン撤廃される。

2030年には自殺報道ガイドライン消滅すると見ている。この増田を保存しておいた方がいい。

2022-05-03

ドローン操縦なんてSteamのゲームに混ぜとけばゲーマーがタダでやってくれるでしょ

2022-01-11

anond:20220111184253

ソシャゲの素材流用してsteamゲー出して小銭稼いでる所もあるぞ。やらないのは言い訳

10年くらい前に「Google+」でフォロワー日本一として有名になってStudygiftという学費支援サイトお金を集めたけど実は大学退学してましたってことでトラブルになった坂○綾○さんって今何してんのかな。

結婚して名字変えてひっそり暮らしてたりするのかな。

シナガさんとは連絡とってたりするのかな。

2022-01-09

anond:20220109194218

Capsが遠いって赤ちゃんハンドかい

近くて誤打されるのを嫌ってStepped Capsとかあるくらいなのに

2021-12-17

教えてSteam博士(317) あるあるトホホスクショ投稿したのにひとついいねもつかないです

博士増田くんはフレンドの登録はあるかね」

増田くん「友達はいないけど平気です貯金もあります

博士「なるほどそれだといいねはつかんよ」

増田くん「面白いからいいねがついてるんじゃないんですか」

博士「あれはフレンドが投稿たから仕方なくつけてるだけで、評価とはまた別のものじゃ」

増田くん「神絵師の公開ブックマークがお返しのしがらみでへぼいのと同じ理屈ですか」

博士「まあ、そんなとこじゃよ」

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