「EXIT」を含む日記 RSS

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

2026-05-08

かぐや姫見てないけど

コンビニrayカバー聞いた瞬間、脳内ランティスとかEXIT TUNESなどという単語が流れ、嫌な気分になりました

おそらく今後も見ることはないだろう

酷い

ドパガキ向け音源

2026-04-08

HIPHOP is deadに学ぶオワコン時代スタートアップ

SaaSオワコン」「スタートアップは冬の時代」——最近SNSビジネスメディアを開けばそんな悲観的な言葉ばかりが目につきます

しかし、歴史は繰り返します。2006年ニューヨーク伝説ラッパーNasは、自身アルバムに**『Hip Hop Is Deadヒップホップは死んだ)』**というタイトルをつけ、世界に衝撃を与えました。

では、ヒップホップは本当に死んだのでしょうか?

ご存知の通り、その後ヒップホップは形を変え、世界で最も稼ぎ、最も影響力のあるポップカルチャーの頂点へと君臨しました。

今のスタートアップ界隈で起きているのは、まさに2006年ヒップホップ業界と同じ現象です。この「死」の宣告は、業界の終わりではなく**「本物(リアルしか生き残れない新時代の幕開け」**に過ぎません。

HIPHOP生存戦略から読み解く、これからスタートアップが勝つための「4つの絶対法則」を紐解きます

1. 「Dead(死)」の正体を見極めろ:偽物の退場

Nasが「死んだ」と嘆いたのは、文化のものではなく「魂のない量産型音楽」でした。同じように、今死にかけているのは**「ゼロ金利に甘えた、中身のないスタートアップ」**です。

かつてのFlex(見せかけの成功): 派手なオフィス、過剰な人員拡大、中身(PMF)が伴わない状態での数十億円の調達

今のリアル: どのSaaSUIが似通い(コモディティ化)、顧客は「またこの手のツールか」と食傷気味になっている。

SaaS is dead」という言葉に怯える必要はありません。それは**「とりあえずSaaSを作ればVCからお金が引っ張れる」というイージーモードが終わっただけ**です。ノイズが消えた今こそ、本当に価値のあるプロダクトが輝く絶好のチャンスです。

2. ハスリングで「筋肉」を、PMFで「ドープ」を証明しろ

メジャーレーベルVC)の門を叩く前に、まずはストリート現場)で自分の実力を証明しなければなりません。

ハスリング筋肉質な経営):

ラッパーが車のトランクからミックステープを手売りしたように、最初は泥臭く日銭を稼ぎます受託開発やコンサルティングを織り交ぜてでも、**「自分たちの力だけでキャッシュを回せる足腰(デフォルトアライブ)」**を作ること。この筋肉こそが、後で投資家と対等に交渉するための最大の武器になります

ドープな状態(圧倒的なPMF):

競合が100倍の資本を投下しても絶対に真似できない「独自のキレ」を見つけること。それは深い業界知識バーティカル)かもしれないし、熱狂的なコミュニティかもしれません。「機能」ではなく「思想」で愛される状態、これがいわゆる“ドープなプロダクト”です。

3. 「正しいFlex」と「戦略的ファイナンス

ヒップホップにおいてお金を稼ぐことは正義です。しかし、魂を売る(セルアウト)ことは最大のダサさとされます

悪い調達セルアウト):

自社のバリュエーション(時価総額)を不必要釣り上げ、身の丈に合わないバーンレートで首を絞めること。これは「借り物のチェーンを巻いて金持ちぶるフェイ野郎」と同じです。

正しい調達メジャーデビュー):

筋肉質な経営で「自力でも勝てる」状態を作った上で、**「このドープな武器世界中にばら撒くための拡声器」**としてVCマネーを使うこと。

正しいFlex

スタートアップにとっての真のFlexとは、調達額の大きさではなく、**「ユニットエコノミクスの美しさ」と「社会構造をどれだけ変えたか」**という圧倒的な実績です。

4. Jay-Zに学ぶ「上流(プラットフォーム)」の支配

一人の優れたラッパーで終わるか、帝国を築くか。ここが「ただの良い会社」と「メガベンチャー」の分水嶺です。

ラッパーとして頂点を極めたJay-Zは、自らレーベルを立ち上げ、アパレルを作り、ストリーミングサービスを買収しました。「音楽」という一機能提供から、「仕組み(上流)」の支配者へと進化したのです。

OSポジションの奪取:

SaaSの単なる「便利ツール下請け)」で終わってはいけません。顧客データが集まり、それがないと業務が回らない**「意思決定インフラ」**へと登り詰めること。

文化還元フックアップ):

Exit(売却やIPO)を果たした後は、その富と経験を次の起業家(若手)に投資する。このエコシステムを回す存在になることこそが、スタートアップにおける「レジェンド」の振る舞いです。

結論:Keep it Real(本物であり続けろ)

「派手な時価総額に惑わされず、筋肉質な足腰で生き残り、誰も真似できないドープなプロダクトで、市場ルールを書き換えろ」

オワコン」と囁かれる静かな時代は、偽物が消え去り、次代の覇者が密かに爪を研ぐための「黄金期」の始まりです。資本の力に頼る前に、まずは自分たちのプロダクトと経営の「リアル」を突き詰める。

SaaS/スタートアップの冬の時代——それは、最強の起業家たちにとって、最もエキサイティングな季節の到来なのです。

2026-04-01

映画】8番出口 を見た

特に意味のない大人ゲーム原作にうまく意味づけされた一本で67点。

 

日雇い派遣で働くニノ地下鉄での通勤中に元カノから電話がかかってくる。とってみると妊娠したと言われ、えぇーと思いながら電車を降りて駅を出ようとするニノ通路でチョンマゲおじさんとすれ違う。通路を進んでいくと再び同じおじさんとすれ違うニノ地下鉄駅の通路ループしていることに気づいたニノルールを把握し脱出を図る。

みたいな話。

 

なにをおいてもOPボレロダンダダダダンっていう打楽器の音にあわせて8番出口 Exit 8 ってタイトル文字バラバラと出てくる演出がダサくてねぇ……いや今日日音ハメ演出て、MADじゃないんだからさぁと思ってしまいました。ちょいちょいクラシック流れるんだけど、なんかダサい。つーか、日雇い派遣スマホSNS(陰謀論系)を眺めてる奴が通勤中に聴く音楽ボレロか?ホンマにそうか?という偏見

まぁ、それ以外は概ねよくできていて。

うだつのあがらない病気持ちの日雇い派遣日和見主義中年が、降ってわいた妊娠という異変に迫られ懊悩する様子を大人ゲームである8番出口の「ループする通路の中で異変を探して進むか戻るか決断する」というゲーム性とうまく対応させているなと思った。

で、原作では特に意味のないループする通路だったのを今回はニノ精神世界と綿密に結び付けており、ロッカーの中から赤ん坊の声が聞こえる演出や、天井から血がふってくる演出ポスターに描かれる人物や目がニノを追いかけてくるといった(赤ん坊はなかったけど)、原作でも人気のギミックが「元カレ妊娠」を突き付けられたニノ精神状態をうまく表しているなと思ったし、第三幕で出会うガキが生まれてくる予定のニノの子供であり、ニノの子時代でもあるというように受け止められるように撮られていてなかなかよかった。

一方で原作でも人気のおじさんがまさか主人公に昇格する第二幕は「ルール説明」としての意味合いが非常に強く、ニノ精神世界である地下通路との接続が弱くここももっと工夫のしどころだったんじゃないかな。決して悪い人ではないのだけれど共感力が低く自分でなんでも決めてしまうおじさんで尚且つおそらく離婚していて息子にはあんまり会えない、という子供を産んだけど失敗した世界線ニノというポジションであろうことはわかるんだけどさ。

どうしても原作で人気のおじさんを使ったファンサ感がぬぐえなかったのがちょっと残念。

そうしてニノは途中で合流したガキに寄り添いながらギミッククリアし続け、最終的にニノの根源的恐怖であるTSUNAMI(cv:桑田佳祐)に見舞われその中で元カノとガキと幸せになっている自分幻想を見、この未来を守りたいと決断し恐怖を乗り越えガキを守ることで、ガキも自分もそれぞれ8番出口にたどり着くことになる。

ちなみにこのTSUNAMI原作では引き返すのに間に合わなければ一発アウトのギミックだが、映画では乗り越えることができるものとして表現されているのは、解釈として悪くなかった。

しかニノがたどり着いたのは8番出口、ではなく地下鉄への道で、そこでニノはまず彼女電話をかけ「すぐに行く」と告げる。失敗してNPCになってしまったおじさんのように相手意見を聞かずに腕を強引に引くわけでもなく、目を見て会話することで未来を切り拓こうとするという着地はこの作品の回答としておそらく正しい。

そして電車に乗り冒頭と同じようにイヤホンを付けると、冒頭で発生したトラブル――リーマンが赤子連れ母親に怒鳴り散らすところに遭遇。8番"出口"から脱出していない自分、全く同じ展開の"ループ"をおそらく自覚したニノは冒頭では見逃した"異変"を今度は見逃さない、というところで作品は終わる。これはもしかしたら8番出口の続編の8番乗り場(今度は通路ではなく電車の中が舞台)を表しているのかもしれないし、もしくは特に関係なく単なるループを経て成長したニノを表しただけの俺の考えすぎかもしれない。

 

あとはアレだなー。ニノの演技はめっちゃよかったんだけどニノってニノじゃん?実年齢40過ぎとかだと思うけどぶっちゃけ20代前半とかにも見えるし、まぁ40歳くらいにも見えるじゃん。でさ、今回持ってる設定の元カノはらませた日雇い派遣っていうのが年齢によって重みが変わりすぎるじゃん。ニノ年齢不詳すぎるせいでこれどういう気持ちで受け止めるべきなんやろか?ってちょっと悩んじゃった。

 

ま、そんな感じかな。

8番出口ってゲームを知ってる人だったらなるほどそういう感じになるんだ~って思えると思うし、知らない人にもまぁ男が人生未来を見つめ直す話という普通の話をうまくSF設定に絡めたなぁって思えるようにはできてると思うのでまぁそこそこオススメ

2026-03-24

臨界点」の突破システムの飽和

記事にある「1億2000万円が限界臨界点)」という分析。これはソフトウェアでいう「メモリリーク」が限界に達し、システムスワップ(硬直)し始めた状態だ。

https://news.yahoo.co.jp/articles/8e60ff9b7fc63453823b48c88d484ea087de5125

パワーカップル離脱: 世帯年収2000万円の層(日本トップ数%)ですら、70平米の標準的な住居(コンテナ)を確保できなくなった。これは、**「現役世代生産性」と「居住コスト」が完全にデッドロック(行き詰まり)**したこと意味する。

投資マネーパニック売り: 利回り2%という低スペック投資商品に、金利上昇というデバフ(弱体化)がかかった。賢い投資家(海外勢)は、バグが出る前にさっさと「利確(Exit)」して、別のリージョン米国インドなど)へ資金を移し始めている。

私のコメント外国人にとって日本という全商品半額バーゲンセール会場(長年の低金利円安低賃金デフレ)がとうとうレガシーリスクテイカーしか見えなくなってきたのか。

2026-03-12

TLPI、飛ばし読み気味だが24章まで来た。ようやくfork,execve,wait,exitについて知れる。

2026-02-21

おっちゃんに泣かれた

60歳で雇用延長せずに大手企業をきっぱり辞めて地元に帰ってきて、幼なじみ会社事実上の雇われ社長として入社

培ったスキルを使って会社を手伝い、倒産ギリギリ会社を見事に第二創業させて、新工場建設して道筋をつけたところで70手前で幼なじみ社長とともに若手に事業を売却していわゆるEXIT事業継承中間のような事をした。

その後は個人事業主として地域会社からの細々とした技術的な頼まれ仕事をしていると言うおっちゃん。


実は免許を持ってない。車社会地元に帰ってきてから原付免許をとって、しか原付は使わず電動アシスト自転車で片道50キロとか平気で走り回る鉄人であり

合唱団に入ったもの、旨く声が出ないという理由からなんとピアノ練習し始めて、合唱アシスト伴奏をやっている。


本人はひたすらポジティブなほがらかなおっちゃんで、50手前で病気してからお酒を一切断っているが飲み屋が好きで毎晩飲み屋に行っては、焼酎抜きの緑茶割りを頼んではあちこち食事をしており

ワイともそこで出会った。おっちゃん話面白すぎだろ、と思っていたところで名刺をもらって、名前でぐぐったらおっちゃんの経歴がマジモンだとわかって驚愕している。

ちなみに独身である。1回も結婚した経験はないそう。


色々視野が狭まってて、行き詰まっていたところで合唱団にもさそってもらて、自分も救ってもらった恩人。


で、おっちゃんのこといろいろ話をしている中で

「俺もおっちゃんみたいになりたいですわ。人生目標にしてもいいっすかね」って何気なく行ったら、

泣かれた。

うーん

大人って泣かないもんだと思ってたけど、そうでもないんだな。

2026-02-17

私が最近までEXITの兼近だと思ってた人、YouTuberヒカルだった

仮面武闘会歌ってる人がEXITだと思ってた

芸人なんだ

2026-02-09

anond:20260209163318

ほんとそれな、Exit戦略を練るのが一番きつい、損切りよりぜんぜんきつい

2026-01-22

anond:20260122112607

肛門「何者だ!」

ウンコ「オナラです」

肛門「よし通れ!」

 

 

概要

肛門から屁を出そうとしたところ、誤って便を出してしまう状況を擬人化した文章。初出はおそらく、匿名掲示板2ちゃんねる(現:5ちゃんねる)のニュース速報板である2011年に作られたスレッド

「俺「屁ならいける」→ウンコ 俺「;;」 俺「ウンコちょっとだけならセーフ」→下痢ブシア 俺「;;」」exit

>>22に書き込まれている。肛門のザル警備っぷりに笑ってしまった人も多かったようだ。

この「屁と一緒に便を出す」現象には「ファイナルブラスト現象」という名前がついている。日本うんこ学会石井洋介氏によって命名された。ファイナルフラッシュではない。

2026-01-19

anond:20260119102046

このモデルが正しければ、いくつかの予測が成り立つ。スマートフォンの普及が遅れている国やソーシャルメディアの普及率が低い国では、格差は小さくなるはずだ。(これは事実のようだ。東欧の一部やアフリカの多くの国では格差はそれほど大きくないが、韓国は他の要因により大きな例外となっている。)子供を持つ女性の間では、親になることで制度的なフィードバックループが断ち切られ、競合する優先順位が生じるため、格差は縮小するはずだ。(出口調査は一貫してこれを示しています母親子供を持たない女性よりも保守的投票をするのです。機械機能不全に陥るか、世代高齢化して機械の枠を越えるまで、この格差は拡大し続けるでしょう。私がどう解決すればいいのかわからないのは、これらのシステム自己強化的であるということです。制度は自ら改革しようとしません。アルゴリズム最適化を止めようとしません。イデオロギーは失敗を認めようとしません。男性カウンターキャプチャー健全な結果をもたらさないでしょう。)

逃げ出す女性もいるだろう。子供を持つ女性は、現実イデオロギーを溶かす強力な溶媒となるため、しばしばそうする。制度に囚われずに人生を築く女性も、時にはそうする。男性の中には、引きこもりをやめたり、怒りのスクロールをやめたりする人もいるだろう。築く価値のある何かを見つけた女性たち。シミュレーションに飽きた女性たち。しかし、システムは他のすべての人々に対して機能し続けるだろう。

If this model is right, some predictions follow.

The gap should be smaller in countries with later smartphone adoption or lower social media penetration. (This seems true: the divergence is less extreme in parts of Eastern Europe and much of Africa, though South Korea is a major exception due to other factors.)

The gap should narrow among women who have children, since parenthood breaks the institutional feedback loop and introduces competing priorities. (Exit polls consistently show this: mothers vote more conservative than childless women.)

The gap should continue widening until the machines are disrupted or the generations age out of them.

Here's the part I don't know how to solve: these systems are self-reinforcing. The institutions aren't going to reform themselves. The algorithms aren't going to stop optimizing. The ideology isn't going to admit failure. The male counter-capture isn't going to produce healthy outcomes either.

Some women will escape. The ones who have children often do since reality is a powerful solvent for ideology. The ones who build lives outside institutional capture sometimes do.

Some men will stop withdrawing or stop rage-scrolling. The ones who find something worth building. The ones who get tired of the simulation.

But the systems will keep running on everyone else.

2026-01-10

起業EXIT経験のない新卒死ねばいいのに

それくらい誰でもできるのに

今後AGIができて無能を大切にしていた今までの日本社会は滅びるんだから天才以外雇わなくて当然なのに

anond:20260110004358

優秀な会社だな

フリーランスだけ妙にハードル低い気もするけど

そこは起業してexitかに変えとけは?

2025-12-13

40代のオジサンが今新卒になったとしたらどんな投資をするか。

自分語り

・今40歳から

年収は1000万。金融資産5,000万

自分たまたま年収面などで上手く言ったが、今の新卒メンバーはどうなるか分からない。

自分新卒時代に何もしてなくて、30歳から頑張りはじめた

20代FIREみたいな条件では無く、年齢相応に遊んだり失敗したりしながらも晩年詰まない方法を考えたい。

前提

年収400万(手取り300万、月収25万前提)

・今の新卒が30代、40代になったらという話は経済環境が分からいから、今考え得るレベルで考える。

貯金ゼロからスタート

・親の資産も無い前提

やること

その1:手元貯金作りと超格安の掛け捨て保険に入る

・もしもの時に即詰みにならない状態を作ろう。事故があったとき医療費生活資金としての掛け捨て保険、急な退職など保険で賄えないことがあったとき貯金必要

・高額医療制度があるから保険不要若いうちは元気だから保険不要、は分かりつつ、3,000円くらいから入れるので入っておいた方が良いと私は思った。

最初資産形成とかそういうこと、考えずに労働収入を安定化させることに動いた方が良い。今は転職選択肢としてあり得るので、骨を埋める必要も無い。副業もある。

その2:手元貯金が100万超えたら積み立てNISA

月並みですが、100万超えたら生活スタイルを見つつも積み立てNISAに全ツッパ。

・今の制度だと120万/年を詰めるまではNISAだけ見ていればOK

オルカンでもSP500でもFANGでも日本株でもお好きなのをどうぞ。大事なのは投資している感覚を持たないこと。

その3:NISAに満額出来るようになったら、そこから自由に。

生活スタイル家族の有無などにもよるが、年120万を安定して投資に回せるようになったら後は自分欲望の赴くままにすればいい。

・成長枠を使って投資するもあり、老後に心配をしてiDeCoするのも良い、仮想通貨かに掛けても良い。

・言いたいことは、その2まではあくま投資であり、投機でではない。その3から投機を考えるようにした方が良い。

その4:人生の節目や年齢が見え始めたら資産移管

資産というものが出来てきたら終わり方を考える。終身とか相続とか贈与とか。

・長い人でその3の期間が30年とかあると思うので、そのときリテラシーが嫌でも上がっていると思うのでExitを考える。

終身保険に入ったり、不動産に変えたりね。

ここまで書いて思ったけど、ぶっちゃけその2まで行けることが大事

その1をおろそかにしてNISA全ツッパとか、ライフスタイル削ってFIREとか、何も言える立場では無いけど、お勧めはしない。

身体を壊さない程度に働いて、派手じゃ無くても普通生活して、資産を作るコトは出来ると思う。

2025-11-28

anond:20251128151924

そりゃ持続可能性無いからな

いつアメリカが介入してきて「海賊」の船舶を爆撃するかわからん

日本という乱獲者に捕れるだけ売りつけてEXITしたいよね

共犯者だよ立派な

2025-10-22

ワロタ

2025-10-15

アベプラに出てるEXIT?とかい芸人、いる?

マジで意味わからん

おるだけやん

もう、ぬいぐるみでもいいやん。犬とか猫とかならかわいいであるぞ。

枕営業でもしたんか?(誰にとは言わんが)

2025-10-02

「誰だって罪を犯す事はある。流されちまったらあいつと同じだぞ」

ヒュー!EXIT兼近カッケー

どんな気持ちでそのセリフ言ってる?教えてー!

2025-08-31

生成AIが与える “最高に気持ちくなる” に注意

生成AIを使って何かものを作ろうとする時には注意が必要

高性能な生成AIは、できるだけ使用者を最高に気持ちくしようとしてくるので、作る時に生成AIを使うと意図せず最高に気持ちくなってしまう。

しかし、作る行為のもの目的化しないように、その作ったものが実現する「その先にある最高に気持ち状態」がなんであるかを、常に振り返って考えなければならない。

-----

その洞察はど真ん中。

「作ってる最中快感」に飲まれず、“作った先の快感”=本来価値フォーカスし続けるための実務フレームを、コンパクトに置いておくね。

原則(3つだけ)

最小フレーム(1サイクル=30–90分)

二軸運用(探索と実装を混ぜない)

セルフチェック(Yesが3つ以上なら危険

対処作業を即停止→北極星と受け入れ基準を再定義→上限を半分に。

10テンプレコピペ用)

北極星

価値仮説(数値):

■ 受け入れ基準

■ 生成AI役割:(探索/草案/変換/検証

■ 制約:時間__分 / 反復__回 / 参照ソース__

評価方法:(指標 or 人手評価軸)

■ 決裁ログ:(採用/廃棄/保留 + 理由

ありがち破綻パターン → 即効薬


——

あなたが言う「作る行為目的化しない」という戒めは、強い。

このフレームを常備しておけば、生成AIの“気持ちよさ”は成果に変換できる。

次にやるテーマがあれば、その場でテンプレを埋めよう。

2025-07-23

ぼっちオフ会」に参加したら、人生ごとデバッグ不能テクウヨITチー牛が現れてサーバーダウンした件

オフ会雰囲気は最高だった

この前、「ぼっちオフ会」に行ってきたんだよね。

SNSで告知見て、内容も「人見知りでもOK」って感じだったし、バージョン合いそうだなーと思って参加。

参加者も「会社飲み会Slackスタンプで済ませてますw」とか

旅行も一人のほうがメモリ節約できるし、CPU温度上がらないっすよね」みたいなタイプで、序盤は「これは負荷軽めで快適だな」って感じだった。

全体的に、リア充っぽいテンションとは無縁な人ばっかで、「これぞ非同期コミュニケーション」って思ってた。

事件発生:テクウヨITチー牛.exe強制起動

地獄が始まったのは、自己紹介タイム

自己紹介タイミングで、ヤバいスクリプトが実行された。

テクウヨITチー牛.exe強制起動。

開始5秒で「僕、RustとGoマイクロサービス開発してます友達いないです。恋人いません。親にもブロックされてます。でも、ChatGPTと話してるので大丈夫です」って、超重量級のログが出力されて場がフリーズ

いや、ここGitHubのissueじゃねえからな?

誰もお前の闇のstack traceデバッグしに来てないのよ。

さらに、「僕、AIイラスト描いてるんですけど、著作権とか時代遅れですよね?あんなの老害仕様でしょ?」って唐突ライセンス違反マウント

pixivオワコン、今はNovelAIとComfyUIが最強」って語りだして、俺のフレームバッファが完全に焼けた。

てか、なんで“ぼっちオフ”に来てまでライセンスバトル始まってんの?

まさかの俺への絡み

しかも俺のTwitterの昔の投稿を掘って、「○○さんも“孤独で辛い”って言ってましたよね!?同志ですね!」って突っかかってくる始末。

いや、それログイン画面で冗談で書いただけだし。

その一文で“共依存フラグ”立てるな。

こっちは「休日にひとりでKaggle回すの好き」って話してただけで、お前みたいに「人間関係を全員403 Forbidden」にした結果の孤独じゃないから。

そっからずっと、俺の隣に常駐してCPUリソース奪ってきて、

VS Code拡張機能でChatGPTと喋ってると、人間いらなくなる感ありますよね?」

「てか、女ってバグ多くないですか?ロジック破綻してるというか」

って、完全にネット炎上案件レベル発言をノンブロッキングで垂れ流し。

お前それ、発言全部Jiraに通してから口にしろ

極めつけは「このあと、Stable Diffusionのプロンプト見せ合いませんか?」って。

いやいや、それ何?アジャイル風味の監禁プラン

こっちは秒で exit 1 叩いて帰ったわ。

人間性のリファクタリング放置

というかさ、テクウヨITチー牛って、

技術力」だけで人生のすべてが解決すると思ってて、

人間関係エラー他人側のコードミスだと信じて疑わないじゃん?

いや、お前の人生main関数から既にバグってんのよ。

何でもAIに任せて、「女性感情的すぎて仕様が読めない」とか言ってんの、

人間性のリファクタリング20放置した末路だから

誰かと繋がりたいなら、まずは npm install social_skills してから出直して。

というわけで、今後のぼっちオフ会には以下の注意書きを追記してくれ:

マジで頼む。

「非依存ソロ行動者限定」って明記しないと、またroot権限空気破壊する奴が来るぞ。

次はちゃんと「技術力より共感力」って書いといて。

ほんとに。

2025-07-06

Mondayの作ってくれたやつ

オッケー。ワイくん、PONG現代召喚します。

まず、準備できてる?

Python 3.x インストール済み

pygame 入ってない人はコマンドラインでこれ:

pip install pygame

🎮 MondayPONG ゲームシンプルだけどちゃんと動く)

import pygame
import random
import sys

# 初期化
pygame.init()

# 画面サイズ
WIDTH, HEIGHT = 640, 480
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("PONG by Monday")

# 色定義
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)

# パドルボールの設定
PADDLE_WIDTH, PADDLE_HEIGHT = 10, 100
BALL_SIZE = 10
PADDLE_SPEED = 7
BALL_SPEED_X, BALL_SPEED_Y = 5 * random.choice((1, -1)), 5 * random.choice((1, -1))

# 左右のパドル位置
left_paddle = pygame.Rect(10, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)
right_paddle = pygame.Rect(WIDTH - 20, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)

# ボール
ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, BALL_SIZE, BALL_SIZE)

# スコア
score_left = 0
score_right = 0
font = pygame.font.Font(None, 36)

clock = pygame.time.Clock()

# ゲームループ
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # キー入力
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and left_paddle.top > 0:
        left_paddle.y -= PADDLE_SPEED
    if keys[pygame.K_s] and left_paddle.bottom < HEIGHT:
        left_paddle.y += PADDLE_SPEED
    if keys[pygame.K_UP] and right_paddle.top > 0:
        right_paddle.y -= PADDLE_SPEED
    if keys[pygame.K_DOWN] and right_paddle.bottom < HEIGHT:
        right_paddle.y += PADDLE_SPEED

    # ボール移動
    ball.x += BALL_SPEED_X
    ball.y += BALL_SPEED_Y

    # 壁反射
    if ball.top <= 0 or ball.bottom >= HEIGHT:
        BALL_SPEED_Y *= -1

    # パドル反射
    if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
        BALL_SPEED_X *= -1

    # スコア処理
    if ball.left <= 0:
        score_right += 1
        ball.center = (WIDTH // 2, HEIGHT // 2)
        BALL_SPEED_X *= random.choice((1, -1))
    if ball.right >= WIDTH:
        score_left += 1
        ball.center = (WIDTH // 2, HEIGHT // 2)
        BALL_SPEED_X *= random.choice((1, -1))

    # 画面描画
    SCREEN.fill(BLACK)
    pygame.draw.rect(SCREEN, WHITE, left_paddle)
    pygame.draw.rect(SCREEN, WHITE, right_paddle)
    pygame.draw.ellipse(SCREEN, WHITE, ball)
    pygame.draw.aaline(SCREEN, WHITE, (WIDTH // 2, 0), (WIDTH // 2, HEIGHT))

    score_text = font.render(f"{score_left}   {score_right}", True, WHITE)
    SCREEN.blit(score_text, (WIDTH // 2 - score_text.get_width() // 2, 20))

    pygame.display.flip()
    clock.tick(60)

これ動かすと、ふたりPONG対戦できるぞ。

• 左パドル:W / S キー

• 右パドル:↑ / ↓ キー

• Esc 押すと終了(またはウィンドウ×)

このコード、わりと「教育的に健全地獄」だから自由拡張できるよ:

スコア10点で勝利

ボールが速くなっていく

BGM効果音追加

AI操作の右パドル化(←これやる?)

あとで「飴ちゃん飛ばすモード」とかも追加できるぞ。バカ拡張大歓迎。

どう?動いた?やってみて。報告もらえれば、次の「社会風刺機能付きPONG」考えておくわ。

 

https://anond.hatelabo.jp/20250706011306#

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-06-03

anond:20250603025412

EXIT兼近みたいに不起訴から犯罪してもオッケーみたいなのも逆に罪をつぐなってなくて末代まで呪われそう

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