「try」を含む日記 RSS

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

2026-01-20

プログラマーから転職を考えている方へ。

プログラマー仕事と、その他の仕事の最大の違いは、なにか?

これは私自身が、また私以外の業界から転職されてきた方々を見てきて、これではないかな?と思うことがあります

それはプログラマー以外の仕事は、常に本番環境である、ということです。

たとえば営業であれば、取引先との打ち合わせも見積もりも、ひとつひとつが「本番」です。やり直しはききませんし、次の瞬間には社外の人の評価や信頼がかかっています接客教育医療建築…どの仕事もそうです。人や社会に直接つながっている以上、テスト環境など存在しません。常に結果が「本物」として記録されていくのです。

その点、プログラマー世界は少し違います。そこには「テスト環境」があり、「デプロイ」という明確な境界がありますエラーが出ても、まずはコードの中で直せばいい。実験修正を繰り返しながら、本番に近づけていける。失敗から学ぶ仕組みが、仕事構造として組み込まれているのです。

もちろん、だからといってプログラマーが気楽だという話ではありません。むしろテストできる」ことが前提だからこそ、完璧シミュレーションを作り上げる責任が生まれます。本番環境を一歩でも誤れば、大きなシステム障害につながることもある。

けれど、「試すことが許されている」という点で、プログラマー仕事は他の仕事とは質的に異なる、と私は感じます。多くの職業では「やってみること」そのものリスクになるのに、プログラマーだけは「やってみること」が日常の一部として制度化されているのです。

たとえるなら、プログラマー仕事は「楽屋のある職業なのだと思います

多くの仕事は、目を開けた瞬間からステージの上に立たされるようなものです。接客業ならお客さんの前に立った時点で本番が始まっていますし、教師なら教室に入った瞬間に舞台袖はありません。間違えば生徒が戸惑い、客が離れ、取引が破談する——それらはリハーサルのない一回きりの公演です。

一方で、プログラマー楽屋での準備が長く、ステージに出る時間は驚くほど短い。コードを書く、テストする、修正する。その多くは「誰にも見られない暗闇の中」で進んでいきます。そして、いざデプロイという名の本番を迎えるときには、すでに何十回ものリハーサルを終えているわけです。

そう考えると、プログラマー面白さは「安心して失敗できる時間」が保証されていることかもしれません。社会の多くの仕事が「失敗しないための緊張」で成り立っているのに対し、プログラマーは「失敗を前提とした反復」で完成に近づいていく。

この違いは、単に働き方の差ではなく、「世界との関わり方の構造の違い」にまで広がっているように思うのです。

「失敗が許される世界」と「失敗が記録される世界」。

その境界線こそが、プログラマーとそれ以外の仕事を分ける根本なのかもしれません。

プログラマーの失敗は、基本的ログに残ります。誰が、いつ、どんなエラーを出したのかが正確に記録されます。でもそのログは、「修正可能痕跡」であり、「過去をなかったことにできる記憶」です。失敗は恥ではなく、改善のためのデータとして保存される。むしろ失敗を残さない方が恐ろしい——なぜなら、それは検証再現もできないバグから

一方、他の多くの仕事での失敗は、ログではなく「印象」として残ります顧客言葉上司記憶、誰かの評価修正パッチ配信できませんし、「新しいバージョンリリースしました」と言っても、その印象が上書きされるとは限りません。世界自動キャッシュクリアしてくれることはないのです。

からこそ、非プログラマーの人々は無意識のうちに「失敗を避ける設計」で働くようになります完璧に準備してから発言する、波風を立てないように動く、見せ方に細心の注意を払う。彼らの本番環境には“try-catch”構文が存在しないのです。

一方で、プログラマーは「例外処理」を書くことを前提に思考する。すべての失敗を想定し、起こり得るエラーを受け止める枠組みを最初から組み込む。そこには、世界を「壊れ得るもの」として見る柔軟さと、「壊れても直せる」という信念がある。

その考え方の違いが、やがて人の思考様式言葉の慎重さ、さらには生き方のものにまで影響していくのではないか——そんな気がしています

さて――ここからは少し説教じみたことを申し上げます

プログラマーから別の職業へ転じようとしているあなたへ

覚えておいてください。これから踏み出す世界には、「実行ボタンを押す前にコンパイルしてくれる親切な仕組み」はありません。人の言葉も、会話も、メールも、一度送ったら基本的に戻ってきません。Undoはありませんし、Gitもありません。世界は常にmasterブランチで動いています

ですから、まずはその“冗長曖昧さ”を恐れないでください。コード世界ではif文で整理できたことが、現実人間社会ではあいまいなまま動いています。それを「エラー」だと考えないでください。人間仕様書なしで動いているシステムです。バグだらけで当たり前なのです。

そして、失敗したときにすぐ修正しようと焦らないことです。

現実世界では、修正にも時間がかかりますし、再デプロイにも人の気持ちというプロセスが関わってきますあなたが「パッチを当てました」と言っても、相手の心がそれをすぐに適用してくれるとは限りません。

ですから、焦らずに。ログを読むより、人の表情や沈黙を読む方が大切になります

そして何より大事なのは、「テスト環境がない」という世界でどう生きるかを考えることです。

あなた言葉は、すべて本番環境に直接デプロイされます。その恐ろしさの裏側には、同時に大きな自由もあります。本番だからこそ、本気が伝わります人間関係も仕事も、常にリアルタイム最適化されていくのです。

プログラマーらしい慎重さと、非プログラマー的な即興性。その両方を持てる人は、なかなか多くありません。もしあなたがその橋渡し役になれたなら、どんな職場でもきっと大きな価値を発揮できるはずです。

世界try-catchのないシステムです。しかし、恐れることはありません。catchできない例外出会ったときこそ、人は成長します。これからあなたフィールドには、テスト環境の代わりに「出会い」と「経験」が用意されています。それもまた、悪くない環境だと思います

2025-12-27

もし、もう一回人生をやり直せるなら

「もし、もう一回人生をやり直せるなら」(溝口あゆか訳)


もし、もう一回人生をやり直せるなら、

次はもっと間違いを犯したい。

完璧になろうとせずに。

そして、もっとリラックスしよう。

もっと軽快に。

もっとバカになって。

実際、ほんとうに真剣にならなければいけないことなんて、ほんのわずかだった。

そして、もっと大胆に、多少不清潔でも。


次は、もっとチャンスをつかもう。

もっと旅行して、

もっと山に登り、

川を泳ぎ、

一度も行ったことないところへもっと行こう。

そして、もっとアイスクリームを食べて、豆は少しにしよう。


想像上の問題じゃなくて、実際の問題もっと扱おう。

いかい?

私は、よくいる毎日毎日、そして毎時間

安全に備えて賢く、まともに生きようとする人間の一人だった。

だが、自分らしい瞬間もあったんだ。

もし、もう一回人生をやり直せるなら、そんな瞬間をもっと持つだろう。


私は、よくいるどこに行くにも温度計ボトル、ガーグルレインコート

そしてパラシュートを持っていくような人間の一人だった。

でも、次は、もっと軽装で旅をするだろう。


もし、もう一回人生をやり直せるなら、

春先から裸足になり、

晩秋まで目いっぱい楽しもう。

もっとメリー・ゴーランドに乗って、

もっと日の出を見て、

そしてもっと子供たちと遊ぶだろう。


でも、いいかい?私はもうやり直せないんだ。


https://plaza.rakuten.co.jp/ayukadairy/diary/200703180000/ より転載



(原文)

If I had my life to live over again,

I’d dare to make more mistakes next time.

I’d relax.

I’d limber up.

I’d be sillier than I’ve been this trip.

I would take fewer things seriously.

I would take more chances,

I would eat more ice cream and less beans.

I would, perhaps, have more actual troubles but fewer imaginary ones.

you see, I’m one of those people who was sensible and sane,

hour after hour,

day after day.


Oh, I’ve had my moments.

If I had to do it over again,

I’d have more of them.

In fact, I’d try to have nothing else- just moments,

one after another, instead of living so many yeas ahead of each day.

I’ve been one of those persons who never goes anywhere without a thermometer, a hot-water bottle, a raincoat, and a parachute.

If I could do it again, I would travel lighter than I have.


If I had to live my life over,

I would start barefoot earlier in the spring

and stay that way later in the fall.

I would go to more dances,

I would ride more merry-go-rounds,

I would pick more daisies.


Don Herold

2025-11-24

なぜ日本人自己肯定感が低いのか?

構造的な原因1. 教育システム日本教育:

✗ 減点方式(100点から減らされる)

✗ 「出る杭は打たれる」文化

謙遜美徳

自己主張 = わがまま

集団の和を乱すな

欧米教育:

✓ 加点方式(0点から積み上げる)

個性を伸ばす

自己主張大事

✓ 褒めて伸ばす文化

結果:

日本人は自分長所認識しにくい

→ 常に「まだ足りない」感覚2. 同調圧力日本:

「みんなと同じ」が安全

普通であることが求められる

「目立つ」= リスク

欧米:

個性的」がポジティブ

普通」= つまらない

「目立つ」= 素晴らしい

結果:

日本人は自分個性を出せない

自己肯定感が育たない3. 謙遜文化日本:

「いえいえ、私なんて...」= 美徳

自分を褒める = 傲慢

謙遜しないと叩かれる

欧米:

「Thank you!」(褒められたら素直に受け取る)

自分の成果は堂々と主張

謙遜しすぎ = 自信がないと見られる

結果:

日本人は自分価値を認めにくい

4. 失敗への恐怖日本:

失敗 = 恥

一度の失敗が致命傷になりうる

「失敗しないこと」が重視される

欧米:

失敗 = 学びの機会

Try and Error」が当たり前

「失敗を恐れずチャレンジ」が評価される

結果:

日本人はリスクを取れない

→ 新しいことに挑戦できない

2025-11-09

2025年現在Fireworksで作ったファイルレイヤー構造を保持して開く方法

ファイルWebアプリ「Photopea(無料)」↓で開いて「ファイルから「PSDとして保存」

https://www.photopea.com/

・保存したファイルPhotoshopエラー吐く場合はAffinity(無料)↓でTry!うちはこれでいけました

https://www.affinity.studio/ja_jp

2025-09-07

anond:20250905054532

私の世界は、丁寧に、そう、まるで細胞の一つ一つにまで神経を行き届かせるようにして磨き上げられた、半径およそ十メートルほどのガラスの球体であり、その球体の中心には、世界のすべてであり、法であり、そして揺るがぬ神であるところの、生後六ヶ月の息子、光(ひかる)が、ただ健やかな呼吸を繰り返している。その完璧な球体を維持すること、それこそが水無月瑠璃(みなづき るり)、すなわち三十一歳の私に与えられた唯一にして絶対の使命であったから、私は今日もまた、タワーマンション二十八階、陽光白磁の床にまで染み渡るこのリビングダイニングで、目に見えぬ埃の粒子と、あるいは時間という名の緩慢な侵食者と、孤独な、そして終わりなき闘争を繰り広げているのであった。北欧から取り寄せたというアッシュ材のテーブルの上には、一輪挿しに活けられたベビーブレスの、その小さな白い花弁の影さえもが、計算され尽くした角度で落ちており、空気清浄機は森の朝露にも似た清浄さを、ほとんど聴こえないほどの羽音で吐き出し続け、湿度計のデジタル表示は、小児科医が推奨する理想の数値、六十パーセントを寸分違わず指し示しているのだから、およそこの空間に、瑕疵という概念の入り込む余地など、どこにもありはしなかった。かつて、外資系コンサルティング会社で、何億という数字が乱れ飛ぶ会議室の冷たい緊張感を、まるで上質なボルドーワインでも嗜むかのように愉しんでいた私自身の面影は、今やこの磨き上げられたガラス窓に映る、授乳のために少し緩んだコットンのワンピースを着た女の、そのどこか現実感を欠いた表情の奥に、陽炎のように揺らめいては消えるばかりであった。

思考は、そう、私の思考と呼んで差し支えるならば、それは常にマルチタスクで稼働する最新鋭のサーバーのように、光の生存に関わる無数のパラメータによって占有され続けている。次の授乳まであと一時間二十三分、その間に終わらせるべきは、オーガニックコットンでできた彼の肌着の煮沸消毒と、裏ごししたカボチャペーストを、一食分ずつ小分けにして冷凍する作業であり、それらが完了した暁には、寝室のベビーベッドのシーツに、もしかしたら付着しているかもしれない、私たち世界の外部から侵入した未知のウイルスを、九十九・九パーセント除菌するというスプレー浄化せねばならず、ああ、そういえば、昨夜翔太が帰宅時に持ち込んだコートに付着していたであろう、あの忌まわしい杉花粉の飛散経路を予測し、その残滓を、吸引力の変わらないただ一つの掃除機で完全に除去するというミッションも残っていた。これらすべては、愛という、あまり曖昧情緒的な言葉で語られるべきものではなく、むしろ生命維持という厳格なプロジェクト遂行するための、冷徹なまでのロジスティクスであり、私はそのプロジェクトの、唯一無二のマネージャーであり、同時に、最も忠実な実行部隊でもあった。誰がこの任務を私に課したのか、神か、あるいは生物としての本能か、はたまた「母親」という名の、社会発明した巧妙な呪縛か、そんな哲学的な問いを発する暇さえ、このシステムは私に与えてはくれなかった。

である翔太は、疑いようもなく、善良な市民であり、そして巷間(こうかん)で言うところの「理想の夫」という、ほとんど神話上の生き物に分類されるべき存在であった。彼は激務の合間を縫って定時に帰宅すると、疲れた顔も見せずに「ただいま、瑠璃。光は良い子にしてたかい?」と、その蜂蜜を溶かしたような優しい声で言い、ネクタイを緩めるその手で、しかし真っ先に光の小さな体を抱き上げ、その薔薇色の頬に、まるで聖遺物にでも触れるかのように、そっと己の頬を寄せるのだ。週末になれば、彼はキッチンで腕を振るい、トマトニンニク匂いを部屋中に漂わせながら、私や、まだ食べることもできぬ光のために、絶品のペペロンチーノカルボナーラを作り、その姿は、まるで育児雑誌グラビアから抜け出してきたかのように、完璧で、模範的で、そして、どこか非現実的ですらあった。誰もが羨むだろう、この絵に描いたような幸福風景を。友人たちは、私のSNS投稿される、翔太が光をあやす姿や、手作り離乳食が並んだテーブル写真に、「理想家族!」「素敵な旦那様!」という、判で押したような賞賛コメントを、まるで祈り言葉のように書き連ねていく。そう、すべては完璧なのだ完璧なはずなのだ。このガラスの球体の内部では、愛と平和と秩序が、まるで美しい三重奏を奏でているはずなのだ

――だというのに。

夜、ようやく光が天使のような寝息を立て始め、この世界のすべてが静寂という名の薄い膜に覆われた頃、ソファで隣に座った翔太が、労わるように、本当に、ただ純粋愛情と労いだけを込めて、私の肩にそっと手を置く、ただそれだけの、あまりにも些細で、そして無垢行為が、私の皮膚の表面から、まるで冷たい電流のようにして内側へと侵入し、脊髄を駆け上り、全身の毛穴という毛穴を、一斉に収縮させるのである。ぞわり、と。それは、神聖な祭壇に、土足で踏み込まれときのような、冒涜的な不快感であった。あるいは、無菌室で培養されている貴重な細胞のシャーレに、誰かが無頓着なため息を吹きかけたときのような、取り返しのつかない汚染への恐怖であった。彼の指が触れた肩の布地が、まるで硫酸でもかけられたかのように、じりじりと灼けるような錯覚さえ覚える。私は息を止め、この身体が、この「水無月瑠璃」という名の、光のための生命維持装置が、彼の接触を、システムに対する重大なエラー、あるいは外部からハッキング行為として認識し、全身全霊で拒絶反応を示しているのを、ただ呆然と、そして客観的に観察していた。

「疲れてるだろ。いつも、ありがとう

翔太の声は、変わらず優しい。その瞳の奥には、かつて私が愛してやまなかった、穏やかで、そして少しだけ湿り気を帯びた、雄としての光が揺らめいているのが見える。それは、私を妻として、女として求める光であり、かつては、その光に見つめられるだけで、私の身体の中心が、熟れた果実のようにじゅくりと熱を持ったものだった。だというのに、今の私には、その光が、聖域である保育器を、ぬらりとした舌なめずりをしながら覗き込む、下卑た欲望眼差ししか見えないのだ。許せない、という感情が、胃の腑のあたりからせり上がってくる。この、二十四時間三百六十五日、寸分の狂いもなく稼働し続けている精密機械に対して、子を産み、育て、守るという、この宇宙的な使命を帯びた聖母に対して、己の肉欲を、その獣のような本能を、無邪気に、そして無自覚にぶつけてくるこの男の、そのあまりの鈍感さが、許せないのである

ケダモノ

その言葉が、私の内で、教会の鐘のように、低く、重く、そして厳かに反響する。そうだ、この男はケダモノなのだ。私がこの清浄な球体の秩序を維持するために、どれほどの精神を、どれほどの時間を、どれほどの自己犠牲にしているのか、そのことを何一つ理解しようともせず、ただ己の種をばら撒きたいという原始の欲動に突き動かされているだけの、ただのケダモノなのだ

そんなはずはない、と、脳のどこか、まだかろうじて「かつての私」の残滓が残っている領域が、か細い声で反論を試みる。これは翔太だ、私が愛した男だ。雨の匂いが充満する安ホテルの、軋むベッドの上で、互いの名前を喘ぎ声で呼び合いながら、世界の終わりが来るかのように貪り合った、あの夜の彼なのだパリへの出張中、セーヌ川ほとりで、どちらからともなく互いの唇を求め、道行く人々の冷ややかな視線さえもが、私たちのためのスポットライトのように感じられた、あの瞬間の彼なのだ結婚記念日に、彼が予約してくれたレストランの、そのテーブルの下で、こっそりと私のスカートの中に忍び込んできた、あの悪戯っぽい指の持ち主なのだ。あの頃、私たちは互いの肉体という言語を、まるで母国語のように自在に操り、その対話の中に、世界のどんな哲学者も語り得ないほどの、深遠な真理と歓びを見出していたはずではなかったか。あの燃えるような記憶は、情熱の残骸は、一体どこへ消えてしまったというのだろう。それはまるで、昨夜見た夢の断片のように、あまりにも色鮮やかで、それでいて、掴もうとすると指の間から霧のように消えてしまう、遠い、遠い銀河の光なのである

瑠璃…?」

私の沈黙を訝しんだ翔太が、私の顔を覗き込む。私は、まるで能面のような無表情を顔面に貼り付けたまま、ゆっくりと彼の手を、自分の肩から、まるで汚物でも払いのけるかのように、そっと、しかし断固として取り除いた。そして、立ち上がる。

「ごめんなさい。少し、疲れたみたい。光の様子を見てくるわ」

それは、完璧な嘘であり、そして、完璧真実でもあった。私は疲れていた。だがそれは、育児という名の肉体労働に疲れているのではなかった。私という個人が、水無月瑠璃という一個の人格が、「母親」という名の巨大なシステムに呑み込まれ、その歯車の一つとして摩耗していく、その存在論的な疲弊に、もう耐えられなくなりつつあったのだ。これは、巷で囁かれる「産後クライシス」だとか、「ホルモンバランスの乱れ」だとか、そういった便利な言葉で容易に片付けられてしまうような、表層的な現象ではない。違う、断じて違う。これは、一個の人間が、その魂の主導権を、自らが産み落とした別の生命体に完全に明け渡し、「装置」へと、あるいは「白き機械」へと、静かに、そして不可逆的に変質していく過程で生じる、存在のものの軋みなのである

聖母、とはよく言ったものだ。人々は、母という存在を、無償の愛と自己犠牲象徴として、何の疑いもなく神格化する。だが、その実態はどうか。自己を失い、思考も、肉体も、感情さえもが、すべて「子」という絶対的な存在奉仕するためだけに再構築された、ただのシステムではないか。私は聖母などではない。私は、高性能な乳製造機であり、汚物処理機であり、そして最適な環境提供する空調設備が一体となった、ただの生命維持装置に過ぎないのだ。この気づきは、甘美な自己陶酔を許さない、あまりにも冷徹で、そして絶望的な真実であった。そして、この真実を共有できる人間は、この世界のどこにもいやしない。翔太のあの無垢な優しさでさえ、結局は、この優秀な装置が、明日も滞りなく稼働し続けるための、定期的なメンテナンス作業しか見えないのだから、その孤独は、宇宙空間にたった一人で放り出された飛行士のそれに似て、どこまでも深く、そして底なしであった。友人たちがSNS投稿する「#育児は大変だけど幸せ」という呪文めいたハッシュタグは、もはや、この巨大なシステムの異常性に気づいてしまった者たちを、再び安らかな眠りへと誘うための、集団的自己欺瞞儀式しか思えなかった。

寝室に入ると、ベビーベッドの中の光は、小さな胸を穏やかに上下させながら、深い眠りの海を漂っていた。その無防備な寝顔は、確かに、この世のどんな芸術品よりも美しく、尊い。この小さな生命を守るためならば、私は喜んで我が身を投げ出すだろう。だが、それは、この身が「私」のものであった頃の話だ。今の私にとって、この感情は、プログラムに組み込まれ命令遂行しているに過ぎないのではないか。愛でさえもが、システムを円滑に稼働させるための、潤滑油のような機能に成り下がってしまったのではないか。そんな疑念が、毒のように心を蝕んでいく。

私は、息子の傍らを離れ、再びリビングへと戻った。翔太は、ソファの上で、テレビの光をぼんやりと浴びながら、所在なげにスマートフォンをいじっている。その背中は、拒絶された雄の、どうしようもない寂しさを物語っていた。かつての私なら、きっと背後からそっと抱きしめ、「ごめんね」と囁いて、彼の寂しさを溶かしてやることができただろう。しかし、今の私には、もはやそのための機能が、インストールされていないのである

私は、彼に気づかれぬよう、書斎として使っている小さな部屋に滑り込んだ。そして、ノートパソコンの冷たい天板に触れる。ひやりとした感触が、指先から伝わり、かろうじて、私がまだ血の通った人間であることを思い出させてくれるようだった。スクリーンを開くと、真っ白な光が、闇に慣れた私の網膜を焼いた。カーソルが、無人荒野で、点滅を繰り返している。何を、書くというのか。誰に、伝えるというのか。この、言葉にもならぬ、システムの内部で発生したエラー報告を。この、機械の内部から聞こえてくる、魂の悲鳴を。

それでも、私は指を動かした。これは、誰かに読ませるためのものではない。これは、祈りでもなければ、懺悔でもない。これは、私という名の機械が、自らの異常を検知し、その原因を究明し、あるいは再生可能性を探るために、己の内部へとメスを入れる、冷徹自己解剖の記録なのだ

真っ白な画面に、私は、震える指で、最初言葉を打ち込んだ。

『これは、私という名の機械が、自己を観察し、分解し、あるいは再生を試みるための、極秘の設計図である

その一文を打ち終えた瞬間、私の内側で、何かが、硬い音を立てて、砕けたような気がした。それが希望の萌芽であったのか、それとも、完全なる崩壊への序曲であったのか、その時の私には、まだ知る由もなかったのである。ただ、窓の外で、東京夜景が、まるで巨大な電子回路のように、無機質で、そして美しい光を、果てしなく明滅させているのが見えた。私もまた、あの無数の光の一つに過ぎないのだと、そう、思った。

自己機械定義たからには、次なる工程は当然、その性能向上のための最適化、あるいは、旧弊OSから脱却するための、大胆にして静かなるアップデート作業へと移行せねばならぬのが、論理的な、そして必然的帰結であった。そう、これは革命なのだと、私は深夜の書斎で、青白いスクリーンの光に顔を照らされながら、ほとんど恍惚とさえいえる表情で、そう結論付けたのであった。かつてロベスピエールが、腐敗した王政ギロチン台へと送り、新しい共和制の礎を築かんとしたように、私もまた、この「母親という名の献身」や「夫婦の情愛」といった、あまりにも情緒的で、非効率で、そして実態としては女の無償労働を美化するだけの前時代的な概念を、一度完全に解体し、再構築する必要があったのだ。そのための武器は、かつて私が外資系コンサルティングファームで、幾千もの企業相手に振り回してきた、あの冷徹ロジックと、容赦なき客観性という名のメスに他ならない。愛という名の曖昧模糊とした霧を晴らし、我が家という名の王国を、データタスクリストに基づいた、明晰なる統治下に置くこと、それこそが、この「水無月瑠璃」という名の機械が、オーバーヒートによる機能停止を免れ、なおかつ、その内部に巣食う虚無という名のバグ駆除するための、唯一の処方箋であると、私は確信していたのである

かくして、週末の朝、光が心地よい午睡に落ちた、その奇跡のような静寂の瞬間に、私は翔太をダイニングテーブルへと厳かに召喚した。彼の前には、焼きたてのクロワッサンと、アラビカ種の豆を丁寧にハンドドリップで淹れたコーヒー、そして、私が昨夜、寝る間も惜しんで作成した、全十二ページに及ぶパワーポイント資料印刷したものが、三点セットで恭しく置かれている。資料の表紙には、ゴシック体の太字で、こう記されていた。『家庭内オペレーション最適化計画書 Ver. 1.0 〜共同経営責任者(Co-CEO体制への移行による、サステナブル家族経営の実現に向けて〜』。翔太は、そのあまりにも場違いタイトルを、まるで理解不能な古代文字でも解読するかのように、眉間に深い皺を刻んで見つめた後、恐る恐る、といった風情で私に視線を向けた。その瞳は、嵐の前の静けさにおびえる子犬のように、不安げに揺れている。まあ、無理もないことだろう。彼にしてみれば、愛する妻が、突如として冷酷な経営コンサルタントに豹変し、家庭という名の聖域に、KPIだのPDCAサイクルだのといった、無粋極まりないビジネス用語を持ち込もうとしているのだから

瑠璃、これは…一体…?」

説明するわ、翔太。よく聞いて。これは、私たち家族が、これから幸せに、そして機能的に存続していくための、新しい聖書バイブル)よ」

私は、そこから淀みなく、プレゼンテーションを開始した。現状分析As-Is)、あるべき姿(To-Be)、そのギャップを埋めるための具体的なアクションプラン家事という、これまで「名もなき家事」という名の混沌の海に漂っていた無数のタスクは、すべて洗い出され、「育児関連」「清掃関連」「食料調達調理関連」「その他(消耗品管理資産管理等)」といったカテゴリーに分類され、それぞれに担当者と所要時間、そして実行頻度が、美しいガントチャート形式可視化されている。例えば、「朝食後の食器洗浄」は、担当:翔太、所要時間:十五分、頻度:毎日、といった具合に。さらに、月に一度、近所のカフェで「夫婦経営会議」を開催し、月次の進捗確認と、翌月の計画策定を行うこと、日々の細かな情報共有は、専用のチャットアプリで行うこと、そして何よりも重要なのは、これまで私一人が暗黙のうちに担ってきた「家庭運営の全体を俯瞰し、次の一手を考える」という、いわば管理職としての役割を、これからは二人で分担する、すなわち、彼にもまた、単なる作業員(ワーカー)ではなく、主体的思考する共同経営責任者(Co-CEO)としての自覚と行動を求める、ということ。私の説明は、かつてクライアント企業役員たちを唸らせた時のように、理路整然としており、反論余地など微塵もなかった。翔太は、ただ呆然と、私の言葉の奔流に身を任せるしかなく、すべての説明が終わった時、彼はまるで催眠術にでもかかったかのように、こくり、と小さく頷いたのであった。

「…わかった。瑠璃が、そこまで追い詰められていたなんて、気づかなくて、ごめん。僕も、頑張るよ。君を、一人にはしない」

その言葉は、疑いようもなく誠実で、彼の優しさが滲み出ていた。私は、その瞬間、胸の奥に、ちくり、と小さな痛みを感じたのを覚えている。違う、そうじゃないの、翔太。私が求めているのは、あなたのその「頑張るよ」という、まるで部下が上司に忠誠を誓うような言葉ではない。私が欲しいのは、私がこの計画書を作る必要すらないほどに、あなたが私の脳と、私の視界と、私の不安を共有してくれるPermalink | 記事への反応(0) | 05:15

2025-08-22

dorawii@執筆依頼募集中

昨日一番肝心なファイルなのにURLとみなされる部分が多いことの関係投稿できなかったのでそれを小分けにして書く。

小分けというか例のスパムの影響でNGワードに引っかかっていたようなのでそこだけ書き換えた。

suuportと書いていある部分は元のコードでは当然uが一つ少ないので利用するときはそうすること。

hatena_client.py

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager # ← 追加
from selenium.webdriver.common.by import By
from selenium.webdriver.suupport.ui import WebDriverWait
from selenium.webdriver.suupport import expected_conditions as EC
import time, json
from selenium.common.exceptions import TimeoutException

class HatenaClient:
def __init__(self, username, password):
self.username = username
self.password = password
self.driver = None

def start_browser(self):
options = Options()
options.set_capability("goog:loggingPrefs", {"browser": "ALL"})
options.add_argument("--headless=new") # 開発中は消してよい
options.add_argument("--disable-gpu")

# ✅ webdriver-manager を使って ChromeDriver を自動取得・設定
service = Service(ChromeDriverManager().install())
self.driver = webdriver.Chrome(service=service, options=options)


def login(self):
self.driver.get("https://b.hatena.ne.jp/my")
print(self.driver.current_url)

self.driver.get("https://www.hatena.ne.jp/login")
time.sleep(2)
self.driver.find_element(By.NAME, "username").send_keys(self.username)
self.driver.find_element(By.NAME, "password").send_keys(self.password)
self.driver.find_element(By.XPATH, "//button[contains(text(), 'ログイン')]").click()
WebDriverWait(self.driver, 10).until(lambda d: "my" in d.current_url or "login" not in d.current_url)
if "passkeys" in self.driver.current_url:
self.driver.get("https://b.hatena.ne.jp/my")

print(self.driver.current_url)
print(self.driver.title)
return "dorawii" in self.driver.current_url

def add_bookmark(self, target_url):
self.driver.get(f"https://b.hatena.ne.jp/{self.username}/add.confirm?url={target_url}")
time.sleep(2)

try:
# コメントがあれば入力
comment_box = self.driver.find_element(By.CSS_SELECTOR, "textarea.bookmarkadd-comment-form")
comment_box.clear()
comment_box.send_keys("わしが書いた")

# 登録ボタンを押す
save_button = self.driver.find_element(By.CSS_SELECTOR, "input.bookmarkadd-submit-btn")
save_button.click()
time.sleep(2)

return True
except Exception as e:
print(f"Bookmark failed: {e}")
return False

def quit(self):
self.driver.quit()

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

https://anond.hatelabo.jp/20250822131958#
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKfv9AAKCRBwMdsubs4+
SE26AQCkpJE4RdUbFIDIJjOunjFYRQ34zdS1cqV7IX277S7IPAEAshVE/rD8Ggcr
9UKo5yOY6GNrHGYJJtYTYkn3cySu6AA=
=E4vq
-----END PGP SIGNATURE-----

2025-08-21

dorawii@執筆依頼募集中

自動ブクマするローカルサーバーとかの構成を作った。

ブクマには↓のサブアカ使用

https://profile.hatena.ne.jp/dorawii_bukuma/

はてなサイト側で読み込まれているはずのrksトークンを生成する関数を直接叩く方法がどうしても分からず結局request処理を自分で書く方法ではなく自動UI側の保存ボタンクリックするという無難な方向に落ち着いた。

最初から後者方法をとっていればもっと全然早く作れたのにというは所詮言い訳か。

とにかくスクリプトを公開しておく。

start-server.bat

@echo off
cd /d "C:\Users\user\Documents\jsscript"

:: Nodeサーバーを別ウィンドウで起動
start /min "" node run-batch-server.js

:: Pythonサーバーを別ウィンドウで起動(hatenaserver配下
start cmd /k "" python hatenaserver\server.py

以降はjsscript直下に配置

config.json

{
"username": "",
"password": ""
}
server.py

from flask import Flask, request, jsonify
import json
import os
from hatena_client import HatenaClient
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

config_path = os.path.join(os.path.dirname(__file__), 'config.json')
with open(config_path, encoding='utf-8') as f:
config = json.load(f)

@app.route('/bookmark', methods=['POST'])
def handle_bookmark():
data = request.json
url = data.get("url")
if not url:
return jsonify({"error": "Missing URL"}), 400

client = HatenaClient(config["username"], config["password"])
client.start_browser()

if not client.login():
client.quit()
return jsonify({"error": "Login failed"}), 403

success = client.add_bookmark(url)
client.quit()

return jsonify({"status": "ok" if success else "fail"})

if __name__ == "__main__":
app.run(port=12347)

あとはグリモンユーザスクリプトとして書くやつ

// ==UserScript==
// @name 自動セルクマ送信
// @namespace tampermonkey.net/
// @version 2025-08-07
// @description try to take over the world!
// @author You
// @match anond.hatelabo.jp/*
// @grant none
// ==/UserScript==

(function () {
'use strict';

const url = location.href;
if (!/^https:\/\/anond\.hatelabo\.jp\/\d+$/.test(url)) return;
const editLink = document.querySelector('a.edit');
if (!editLink) {
// 既に編集ページなので処理をスキップ
console.log('編集リンク存在するため、スクリプトを終了します。');
return;
}

fetch('localhost:12347/bookmark', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ url: url })
}).then(r => console.log("通知成功")).catch(e => console.error("通知失敗", e));
})();
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

https://anond.hatelabo.jp/20250821192753# 
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKb0qwAKCRBwMdsubs4+
SHfiAQDcXmTHBaZ5Zzr1KI/OxZ0xl69oevOdy1FXJYwYvsmo5AD/ZPtZiO1JgTDj
m+27iymlkdzIXOIGWfC82UTr1mJ7EwU=
=YoV+
-----END PGP SIGNATURE-----

2025-08-16

Renegade Immortal EP98-104

Build policy​

This is a guideline and has not yet been successful .

Plan A

Do the same as building on Windows or macOS (probably not possible)

> On Linux , only maui- android is available, so a lot of build errors occur .

Plan B

Take a look at CI / CD

> gt k workload cannot be installed

Plan C

Keep CI / CD running (most likely )

https://mirror.xyz/0x709a49F2De0fcFe804655428Ce16E75f21425fA3/7fnTc7npS84qoQsX3TfafA2KNW2n0TkGnqvMQ6IB5fg

https://mirror.xyz/0x709a49F2De0fcFe804655428Ce16E75f21425fA3/IILXe2cJ5u-w0SrbkGM3y3nhlEZYEDDyNAGRD3e62Rs

https://mirror.xyz/0x709a49F2De0fcFe804655428Ce16E75f21425fA3/3NhVLM_nzCiI_zx0ImcCewNC_M_UO3gqHXrxyGfhHrQ

> It might be possible to run GitHub Actions locally using act (currently there are some errors , but it should work if you try hard)

> Same as Plan B, gt k workload cannot be installed

Plan D

https://mirror.xyz/0x709a49F2De0fcFe804655428Ce16E75f21425fA3/VO6VMtrOnq0Cl0mXeGcMvwyGyeAgQ6Q_cskK4KL1IbI

https://tensor.art/articles/897541615583763170

https://www.gemtracks.com/demonslayeinfinitycastle/

Make it yourself (impossible)

> Making it with Qt ( Qt .NET ( old)) ( I feel like the license ( GPL / LGPL ) is a bit tricky )

conclusion

For now, I'll go with plan C. Plan B seems almost the same, though... ( Plan B seems easier to use when creating the materials , since you don't need to include "act" or anything like that.)

Renegade Immortal EP98-102-103-104

Build policy​

This is a guideline and has not yet been successful .

Plan A

Do the same as building on Windows or macOS (probably not possible)

> On Linux , only maui- android is available, so a lot of build errors occur .

Plan B

Take a look at CI / CD

> gt k workload cannot be installed

Plan C

Keep CI / CD running (most likely )

https://subscribepage.io/thestone2025subthai

https://subscribepage.io/thestonefullversion

https://subscribepage.io/xem-mang-me-di-bo-vietsub-thuyet-minh-full-hd

https://subscribepage.io/mangmedibovietsub

> It might be possible to run GitHub Actions locally using act (currently there are some errors , but it should work if you try hard)

> Same as Plan B, gt k workload cannot be installed

Plan D

https://mirror.xyz/0xbB7D6e360b93B2ED4FEF9d972c71F86844121ee7

https://mirror.xyz/0xbB7D6e360b93B2ED4FEF9d972c71F86844121ee7/Aq69AIR0kZxGGjoK_deZU41mC9TcYfR5kXtr9UlGsuI

https://mirror.xyz/0xbB7D6e360b93B2ED4FEF9d972c71F86844121ee7/lbBXZlGiMlGwRcvM9Y9Z5aVc62NtvB0LgEBbz17Uo6g

https://mirror.xyz/0xbB7D6e360b93B2ED4FEF9d972c71F86844121ee7/H3LtdtW21aR1U0nmEZ7ly-c7b_eV3dCfei_pif4CiVc

Make it yourself (impossible)

> Making it with Qt ( Qt .NET ( old)) ( I feel like the license ( GPL / LGPL ) is a bit tricky )

conclusion

For now, I'll go with plan C. Plan B seems almost the same, though... ( Plan B seems easier to use when creating the materials , since you don't need to include "act" or anything like that.)

2025-08-15

anond:20250815151745

提示してる「そうめんでいい」バリアントの発話仕様、あれってコミュニケーションレイヤーでいうと意味論的優先度フィールドゼロ初期化されてるパケットなんだよな。

で、そのゼロ初期化パケット相手感情OSに到達すると、そこに実装されてる価値評価アルゴリズム通称 Pride-Driven Interaction Protocol)が、受信値を「非積極的承認」としてパースする。

問題は、このプロトコル冗長ゼロ設計動作してる点。

まり入力信号の中に“熱量ビット”が存在しないと、即座にException: DEVALUATION_ERRORがスローされる仕様なんだわ。

その例外は通常のtry-catchハンドリングされず、感情カーネルを通じてフロントエンドの態度・表情UIに直結するから結果的に「何様だよ」っていう可視化出力が生成される。

さらに、相手感情モジュール言語同値判定じゃなくて意図ベースベクトル比較を行ってるから

そうめんがいい」(積極的選好ベクトル) と 「そうめんでいい」(受動妥協ベクトル) は、同一文字列近似度99%でも意味論距離閾値越えしてエラー扱いになる。

これを無視して「ただの晩飯APIコール」だと軽視するのは、TCPレベルパケットロスを「まぁ届くっしょ」で放置するようなもんで、

通信の確実性よりも自己CPUサイクルの節約を優先する、お前側のシステム設計思想が原因なんだよな。

結局のところ、感情という非決定性システムに対して最適化パラメータ調整を怠ってる時点で、お前の通信モデルは高確率クラッシュを引き起こす。

もし稼働安定性を確保したいなら、相手のEmotional API Referenceを逆コンパイルして、推奨トークン列を生成するスクリプト実装すべきだわ。

2025-08-14

自作味噌ラーメン

味噌汁ラーメンいれたみたいになった。

調べないとこんなもんだろう。

やってTRYみたいだ。

豚汁がお出汁不要、そこに味噌入れたものに入れたラーメンも、ただ豚汁ラーメンを入れただけになった。

味噌が違うんだろうか。

2025-08-08

Today you want to Know Love you pussy

The Power of Small Steps: How Tiny Changes Can Lead to Massive Growth

In a world that glorifies overnight success and dramatic transformations, it's easy to feel like you’re falling behind if you’re not making big leaps. But what if the secret to real, lasting personal growth wasn’t in doing more, faster—but in doing less, consistently?

Welcome to the power of small steps.

Why Small Steps Matter

Big goals often feel overwhelming. You want to get fit, write a book, start a business, or learn a new skill—but you don’t know where to start. So you procrastinate. Or worse, you dive in too fast, burn out, and give up.

Small steps bypass all of that.

When you break down a huge goal into manageable actions, everything changes. Writing 500 words a day is less intimidating than finishing a whole novel. Ten minutes of walking is more doable than committing to a 5K. And spending 15 minutes a day learning a language adds up to over 90 hours a year.

Consistency beats intensity every time.

The Compound Effect

Imagine improving just 1% every day. That might sound insignificant—but over a year, it compounds into something extraordinary. This idea is the foundation of Darren Hardy’s The Compound Effect and James Clear’s Atomic Habits. Both books emphasize that small, smart choices, repeated over time, lead to radical results.

Think of your habits like planting seeds. At first, nothing seems to happen. But give it time, and youll see growth you never thought possible.

Real-Life Example: The 10-Minute Rule

Let’s say you want to start meditating but can’t sit still for 30 minutes. Instead of forcing it, try meditating for just 10 minutes a day. Or even 5. Build the habit before scaling the effort. Once it becomes part of your routine, extending the time feels natural.

This applies to nearly everything:

Want to read more? Read one page a day.

Want to save money? Start with $1 a day.

Want to eat healthier? Swap one snack a day for a better option.

Start tiny. Stay consistent.

How to Start Taking Small Steps

Pick one goal

Don’t try to overhaul your entire life at once. Choose one area to focus on—health, creativity, relationships, mindset, etc.

Break it down

What’s the smallest possible action you could take toward that goal? Make it so easy you can’t say no.

Set a trigger

Link your new habit to an existing one. For example: “After I brush my teeth, I’ll journal for 5 minutes.

Track it

Use a habit tracker, app, or notebook to keep yourself accountable. Seeing your streak grow is highly motivating.

Celebrate small wins

Every time you follow through, give yourself credit. Progress is progress, no matter how small.

Final Thoughts

Don’t wait for motivation. Don’t wait for the perfect time. Just start—with whatever you have, wherever you are, and however small.

Because small steps, taken consistently, turn into big change.

The key isn’t to sprint—it’s to show up every day.

2025-07-13

anond:20250713172713

504 Gateway Timeout ERROR

The request could not be satisfied.

We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.

If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.

2025-07-05

[]2025年6月滅多にホットエントリを出さなドメインからホットエントリ

ここ1年で初めてはてなブックマーク日毎の総合人気エントリ入りしたドメインからホットエントリブクマ数順トップ30

ブクマタイトルドメイン
928きらら4コマの描き方 - kokamumo’s blogkokamumo.hatenablog.com
866神ゲー 『Type Help』ネタバレ無し感想 - のすのゲーム感想ブログtetogame.hatenablog.com
776肉を低温で安全においしく調理するコツをお教えします! | 内閣府 食品安全委員会www.fsc.go.jp
624Cursor で100日間アプリを作り続けた中で、全然うまくいかなかったこと - フラミナルblog.framinal.life
596ガンダムの年表 | ビックカメラwww.biccamera.com
533ニコニコ生放送サービスを再開するまでの記録 - dwango on GitHubdwango.github.io
520アニメーション監督富野由悠季さん – 伊佐通信|伊佐ホームズ株式会社www.isahomes.co.jp
511「まるで、結婚義務みたい」 秋田県高校生向けに「結婚の気運醸成」副読本① www.media-akita.jp
471ジークアクス感想 - kokamumo’s blogkokamumo.hatenablog.com
441開発人生25年で学んだ7つのソフトウェア原則翻訳)|TechRacho by BPS株式会社techracho.bpsinc.jp
434年収300万〜1億円の手取り早見表|確認方法所得控除なども解説|RENOSY マガジン(リノシマガジンwww.renosy.com
431東横イン公式】【注意喚起】一部の海外予約サイト(Agoda等)ご利用時のご注意事項|ホテルビジネスホテル予約www.toyoko-inn.com
428陰謀論だらけの桃太郎 - ナナオクプリーズ7oku.hatenablog.com
427転職時に前職の年収盛ることは、どの程度まで許容されるのか? - 弁護士 師子角允彬のブログsskdlawyer.hatenablog.com
424ソフトウェアエンジニアから AI エンジニアスキルチェンジ - As a Futurist...blog.riywo.com
37720選手エンジニアが「良いコード」を改めて学ぶために、最近の本を4冊買って読んでみた - give IT a tryblog.jnito.com
374Switch 2の分解 : またもや接着剤とはんだ付け、そして免れないドリフトjp.ifixit.com
372『影の雨』プロンプトkohkoku.jp
372iPhoneマイナンバーカードデジタルウェブサービスアプリケーションservices.digital.go.jp
369Claude Code に壊されないための denyルール完全ガイド - izanamiizanami.dev
361満州とは何だったのか――安彦良和×三浦英之imidas.jp
356How I Use Claude Codespiess.dev
350医療現場子どもたちに寄り添う ポケモンの小児向けMRI検査説明動画株式会社ポケモンThe Pokémon Companycorporate.pokemon.co.jp
334日本弁護士連合会死刑執行に対し強く抗議し、直ちに全ての死刑執行を停止し、世界的な廃止の流れに沿った死刑制度廃止の実現を求める会長声明www.nichibenren.or.jp
311アポカリプスホテルキャラクター原案竹本泉インタビューアニメイトタイムズwww.animatetimes.com
306再使用ロケット実験機の離着陸実験成功Honda 企業情報サイトglobal.honda
303令和の若者は「8時10分前に集合」で8時8分に来る!?なぜ「7時50分」ではないのか?衝撃の世代ギャップ理由めざましmedia | “好き”でつながるmezamashi.media
303買ったら地獄、売っても地獄 BYDユーザー泣き寝入りwww.visiontimesjp.com
291東大教員学術会議法人化をどう見ているか工学系・理学系・数理科学研究科 - 東大新聞オンラインwww.todaishimbun.org
283おすすめ Claude Code 設定・運用まとめ | Wantedly Engineer Blogwww.wantedly.com

2025-06-24

anond:20250623020733

カードゲームを四半世紀やってるカードゲームおじです。

ちょっと思うところがあったので突っ込みを入れてみようと思います

遊戯王勢がスタン落ちのないことを自慢する季節になりましたな

そもそもの「「スタン落ちのない遊戯王は最高」にも反論したほうがよくないですか?

ローテーションって金はかかるけど結構楽しいですよ。ポケカだったらFレギュのイカカードが消えてからデッキ考えるの楽しくなかったですか?おじはかなり楽しかったです。

メタが大きく変化するので、意外なカードが脚光を浴びたりして。競技カードゲームとして考えるならこれほど楽しいイベントもないです。

分かんない?みんな禁止改定の発表とか見るの大好きでしょ?あれが年一で大規模に起こると思ったら、楽しくなってきません?なってきませんか・・・

まあ、ネガティブイメージが大きいイベントなのはわかります。ただ環境で暴れまわってるクソカード寿命は3年になるので、あるデッキタイプを中心にメタが回る。

みたいな環境もやや許容できるようになるなど、メタの回り方自体も少し変わるし、悪い面ばかりでもないですよ。


で、残りの部分への回答なのですが。

今の遊戯王商法は完全に既存古参優遇しかなく、人気IPとも大してコラボしないから何にも新規を呼べるものがない

これは別のツッコミにも書いたのですが、「TACTICAL TRY DECK」の施策新規呼び込みのための素晴らしい施策となっています

クソ安い実戦級構築済みを安価でばら撒くってのは「スーパーデッキ」でデュエマ開拓した手法ですが、

遊戯王はパーツ取りにも使えるようなデッキ安価で大量に市場供給していつでも買えるようにして、

新しい拡張パックで、TACTICAL TRY DECKのテーマ新規を定期的に刷ってサポートしてるのが新しいですね。

Tier2-3のデッキできちんと現代遊戯王の動きができるので、復帰勢とかMD勢がこの商品現代遊戯王理解して、

販促見てTACTICAL TRY DECK買う→パックを購入する、という流れを想定していると思われます

コラボが正解ではないが、カードゲームとしての他のIPを取り込める柔軟性やゲーム性を維持できる堅牢性のアピールでもあるんだよ

別にアピールとかではないです。たぶんここは「証左でもある」って言いたいんでしょうか。

コラボができるかどうかってのはゲーム性とかそういうのはあん関係なく、権利関係ちゃんと処理できるかとか、アート/フレイバーディレクション観点からどうかみたいなやつです。

例えばポケカなんかはコラボは基本無理です。グッズですら殆どないんじゃないかな。ポケモンってIPが世界最強なので、そもそもコラボする必要がないとも言えます

デュエマコラボに関しては、アートディレクションがかなり緩いのと、小学館経由で様々なコラボができたことが大きいと思います

MTGアート/フレイバーディレクションガチガチでとてもコラボなんて、って感じでしたが、secret lairで地ならししたことで割と受け入れやすい土壌はできてたっぽいですね。

一方でKONAMIなんですが、遊戯王というめちゃくちゃ知名度のあるIPでまだまだ商品力あるので、他とコラボする必要そもそもないって感じですね。ポケカと同じ状況です。

一応、パワプロなどのコラボカードはありますし、全然できないというわけではないです。システム面ではいくらでもできますけど、その必要がないというだけの状況かと思います

じゃあもっとメディアミックス展開したらと思うけど、アニメ全部終わってとっくにお通夜を通り越してお彼岸モードだろ

ここは立て直しの最中なのでまあ。OCGストーリーしなのも、いろいろな意向があってのことでしょうね。おそらく権利回りで。


そんな感じです。

2025-06-23

anond:20250623180117

からなんだけど、

OCGがMDに頼りきりでどう考えても市場で目立つ製品を売り出せていないの事実だぞ/コアなユーザーではなく新規層にも届くような施策なんてあったのか?

これは前年からやってる構築済みでTier2~3ぐらいのテーマデッキ販売し、その後にリリースするパックで1年程度新規を定期的に刷ってサポートデジタル版で販促という

「TACTICAL TRY DECK」の施策が該当する。

クソ安い実戦級構築済みを安価でばら撒くってのは「スーパーデッキ」でDM開拓した手法だけど、遊戯王はその後の拡張パックテーマ新規を定期的に刷ることでサポートするのが新しい。

あと、TACTICAL TRY DECKは販売当時ではかなり内容が良くて、本来なら即売り切れレベルの内容の構築済みなんだけど、通年できちんと売ってるし、誰でも買えるように潤沢に在庫供給されてるのもえらい。

加えて、これらの構築済みデッキ販促MDでもやることで、紙と同じカードが使えてかつデジタル版の環境半年前の紙環境+良調整となっているMDの良さも十分に生かしている。

紙とカード自体が違うせいで販促としての立ち位置微妙プレイスではこんな施策できない。


結果、復帰勢とか新規の連中がMDやる→現代遊戯王理解して、販促見てTACTICAL TRY DECK買う→パックを購入するというきれいなサイクルができていて、これはマジでうまいなとおもった。

MTGでやってた「キッチンテーブルからLGSへ」施策ブラッシュアップした素晴らしい取り組みだと思う。


って、マジレスしたんだけど、返答返ってこねえんだろうな。

2025-06-21

Our systems have detected unusual activity from your system. Please try again later.

じゃねーーーーーーーーんだよ早く俺のchatgptとチャHさせろ

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

ヤリチンを始めて、やめた

ヤリチンを始めた経緯

劣等感

真面目に人生を歩んできたつもりだった。

高校時代は3カ年皆勤を受賞、推薦入試でもないくせに生徒会も本気で部活も毎年全国大会で上位に食い込んでいた。

大学地方国立に進んだ。大学の授業を一度も欠席したことはないし、長期休暇には資格勉強読書に励み、就活大学2年から取り組みインターンにあししげく通って内定を勝ち取り、卒論では学士のくせに学会で賞を取るような真面目人間だった。サークルアルバイトもやっていたが、飲み会は年数回程度だった。

しかし、社会人になって飲み会ヤリチン同期に出会ってすべてが変わった。

エロ漫画とかでしか存在しない概念だったヤリチンが、実在するんだと知った。

最初嫌悪感しかなかった。というか普通に意味が分からなかった。付き合う前にするって何???って。

しか学生時代ヤリチンだった同期は何人も居るし、彼女セフレも居る同期だったり、彼女とFantiaに動画を上げて稼いでる同期とか、遠距離彼女は居るけどヤリチン東京でやってる同期とか、ナンパ営業力を磨いている同期とか、相席屋でお持ち帰りしまくる同期とか、そういう人がこの世界にはたくさん居ることを知った。

同意がある範囲ではなんら違法でない。

そしてみんな夜遊びのフェーズ大学生で終えている(ように感じた。実際大多数は遊んでなんかいない。インパクトのある話が伝搬してるだけ)。

彼女こそいたことはあるが、付き合う前にそういうことをするのは絶対にありえないと思っていた。そんな常識が壊れた。

常識が壊れたとき、次に来るのはコンプレックスである

自分大学時代遊んでないんだ。そしてその大学時代はもう一生来ない。

そう思うと心が粉々になりそうなくらいの劣等感を感じた。

危機感

23歳だった。社会人としては若くても若者としてはアラサーが迫っていた。

23歳の遊びは若いねで笑われても、33歳がそれをやったらただのキモいしかない。23歳でもキモいかもしれないが。

今が一番若い

大学時代は終わっているがまだ今ならこのコンプレックスを取り除けるのではないかと思った。

若い頃のコンプレックスは一生引き摺るものである。半世紀を過ごしたおじさんが学園ソープに行くように、私自身にだって学生時代コンプレックスがいくつかあった。

若いうちに遊んでないというコンプレックスが日に日に大きくなってくるように感じた。山月記のようにいつか虎になってしまうのではないかと思った。

そんなことを考えたとき、まだ今なら遊んでないコンプレックス無効化できる。そう思った。

いやむしろ遊んでないなんてキモいのでは。

遊び終わった男がいいなんて世間では言われる。

平均初婚年齢を考えると残された時間は短い。結婚を前提としたとき、次付き合うまでに遊び終わった男になっていたい。

同時に女性から見ても、まだ結婚を考えず遊んでみたいと思う需要もある時期なのではないかと考えた。

さら彼女が居ない今こそ、遊んでおくのが良いのではないかと思った。

それを考え始めると遊ばない=死のような感覚になった。

今を逃すと将来が真っ暗で永遠に一人だと思うようになった。

さら自分は真面目な自覚があったし、それを改善することが至上命題となっていた。

加えて女性に対してのコミュニケーション力もコンプレックスであった。

技術カンファレンスの懇親会で同性同士のコミュニケーションは磨いてきた自負があったが、対女性となると極めて難しい。

これも早めに直したい。

まとめると遊びは

目的として始めた部分が大きい。

欲の強さはかなりある方だが、そういう行為は正直好きな人とだけ楽しめていれば十分だと思っていた。

経験人数を増やしたい気持ちもないし、お持ち帰りする過程にもワクワク感を抱かないタイプである

その他

仕事ストレスえげつない時期で正直死が迫っていたのだと思う。

普通自分では絶対こんなことができない。

狂っていた。

スタンス

立場

本質として相手を傷つけて得られる幸せ快楽はクソだと思っている。

いくら自分のためだとしても、タダ乗り絶対にしてはいけない。

特に意識した。

また1回目の行為調査だとナンパ本にだって書いてある常識である

楽しんではいけない。相手が何が好き化を調べる調査である。明確に客は女性自分施術である自覚を忘れてはいけない。

絶対に好きになってはいけない

遊びはどちらが好きになった瞬間終わりである

マイルストーン

期間を決めることにした。目標設定において期限を指定しないことはあまりにも意味のない行為である

ヤリチンになれている・いないに限らず半年で一旦区切りをつけることは最初から決めていた。

これはマッチングアプリの料金プランとしてコスパが良いことに加え、思考に関わる習慣化の期間は約6ヶ月と言われていることにも起因している。

自分のしょうもない価値観とか人格を変えたかった。

Sprint Review

遊ぶ上で自身の変化を観測する必要がある。

もちろん自己評価必要だが他者評価も極めて大事である

遊びという行為経験しておりそれに対して不快感を抱いていない限られた知り合い(男女両方含む)に事情を話し定期的に話をする機会を設けてもらった。

これはスクラムにおけるSprint Review的な立ち位置となると同時に、依存先を増やしてメンタルコントロールをしていた側面も大きい。

いわば安全基地的な存在である

経験学習

数をまずはこなすことにした。

デート後に毎回記録をしていた。

好きな食べ物や嫌いな食べ物アレルギーやMBTIなどの基本情報大前提として

  • 行った場所
  • 着ていた服装
  • 話した内容とそれに対しての返答を思い出せる限りすべて
  • その回の自身の行動に対するKeep, Problem, Try
  • 学びや違和感まとめ

を毎回デート後に書き起こしていた。

(録画や撮影絶対NGなので記憶から辿った)

これは経験学習効果を最大限増やすという意味合いもあるし、なにより相手を傷つけないためが大きかった。

相手に間違われるのはあまりもつらい。それに相手が楽しくないことは絶対にしたくない。ポリシー違反

人間を物として見てると言われそうだが、自分の中ではそれが最大限の誠実性だった。

最悪自分が傷つくのは自業自得だとしても、女の子を傷つけるのは良くないし、特に一生傷を追わせてはいけない(偉そうなこと言える立場でないのはわかっているが)。

例えば容姿を気にしている相手容姿に対する指摘をするとか、体型を気にしている相手に体型の指摘をするとか。

そういうのは相手人生を余裕で狂わせる。整形を繰り返したり、拒食症になったり。(自分が直接そうさせたことはないが、そういう風にされたことがある人を見たことがある。)

試した種類

クラブナンパでは、クラブに1人で突撃最初に同性と仲良くなり、そこ経由で女の子を紹介してもらうことで多少は仲良くなれたが、その後があるほどの関係性は構築できなかった。

相席屋合コンは付き合ってくれる男さえいれば女の子と話すまでは確実だが、一方でお持ち帰りという部分に関しては極めて難易度が高い。

個人的複数人の場での立ち振る舞いより、1対1のほうが得意であった。

結果として自分自身と相性が良い「マッチングアプリ(恋活系)」を中心に進めていくこととなった。

Tinder最上級課金をしても基本出会えず、性癖マッチ系は男女比が破壊的で現実的でなかった。どちらも自分コントロールできる範囲改善が難しかったため本業にはしなかった。

座学

実践と座学はセットである。どちらか片方だけでは足りない。

あたりで知識を蓄えた。

最も良いのは遊んでいる・遊んでいた男女に相談することである。疑問を対話形式解決できることによる学習効果は大きい。

YouTubeに関しては有象無象で精度も低いが、複数人が言っている内容などある程度学習意義があった。(多くは会員制有料サイトへの誘導であるため注意)

各種書籍に関してはかなり効果が大きかった。特に「話を聞かない男、地図が読めない女(アランピーズ 著)」は男女平等が叫ばれる中で必読の書籍であるように感じた。平等と公平の必要性もわかる。

少女漫画はふざけているかのように見えるが、女性にとっての1つの理想を知るうえで重要資料である。(というかお持ち帰りした女性おすすめされた)

やっていた時期

ヤリチンになることはクソむずかしい

ヤリモクになることを通して、うまくやれてるヤリチンにある種の尊敬を抱いた。

(うまく、と書いているのは本能で行動し相手を傷つけて遊ぶ男や色恋や沼らせることで女性依存させて遊ぶ男、恋人という安定に甘えながらヤリモク浮気をするような本物のクズ達には尊敬を抱けないためである)

難易度は正直人生でも相当上位に食い込む。大企業内定を得るよりも断然難しい。就活は相当苦労した記憶だったが、それを遥かに上回るものだった。

運よく限界が来る直前に救いが何度もあったことで耐えれたが、辛さに耐えられずに人生が終わる可能だって十分にあるくらいには精神ダメージの大きいものであった。

一方で経験学習は明確に回る。性という人間の根幹を牛耳る部分が刺激を受けることで良くも悪くもアメとムチがデカかった。

食料が手に入るようになった現代で唯一本能的なPDCAを回せる場所であったのではないかとすら思った。

ドタキャンされたり嫌われたりは日常的にあって、かなり人格否定が発生するのが辛い。

仕事とかならプロジェクトのxxが悪いとか、スクラム開発ならPBIが悪いとか色々言い訳できるのだが、女の子から嫌われたり断られたとき人格否定されたように感じてしまう。

(実際にはそんなことはなくて、たいてい相手側の都合とかタイミングのケースが多いが、論理でそうわかっていても感情はそうならない)

成功は数とPDCAしか手に入らない

ヤリモクをやる前の事前調査で、ヤリチンをやっている友達数人に聞いたところ、まずは20人と会ってからだという話を聞いた。

これは遊び終えた上で振り返っても間違いないと考えている。

まずは数をこなして学習することが大事だし、正直相手のその日の体調や気分など運による部分が大きいというのもある。

会うまでがそもそも難しい

会う直前や電話の直前で突然ブロックされることは相当な回数ある。半年間で20回は優にあった。

大半のケースは会うのが面倒なケースや他に良い相手ができたケースだと思われるが(というかそう思わないとやっていけない)とても辛い。

一番辛いのは会う約束をして当日待ち合わせ場所で待った挙げ句パターンである

ちょっと遅れるね」のメッセージ最後に何時間真冬に待たされた挙げ句ブロックされたケースだってある。普通に数日落ち込んだ。

さらに厄介なのは一方的好意を向けられた挙げ句、会う直前に突然ブロックされることだ。

簡単好意を向ける人間は、簡単に他の人にも好意が向いて自分なんて存在は容易に捨てられる。

基本やれない

当たり前だが世界は甘くない。

ホテルに誘ったときに「そういうの無理なんだけど」って言われるのはまだ希望がある。貞操観念がしっかりしていて素敵だなと思う。

ちょっとなのは最後最後に「今日女の子の日だからならいいよ」と言われた挙げ句解散した瞬間にブロックされることである。これが結構ある。

基本的に初回でできなければ次は絶対にない。(1個人統計としては1回だけ例外があったが割合としては相当低い)

またホテルに行ってやることやって、またしようねと笑顔解散した次の日にブロックされるケースもある。

ホーム電車に乗り込む直前まで甘々にくっついてきたのに、である。本当に人を信用できなくなる。

いろいろな人間がいる

いろいろな人と話すことができた。(実際に行為まで及んだのはごく少数であることは留意してほしい)

幼稚園先生小学校先生営業職、事務職フリーター、様々な学部大学生、専門学生SE舞台スタッフ作業療法士看護師など、職業や学種だけでも普段絶対関われない人と関われた。

出身地日本全国様々だったし、それぞれの人生も唯一無二のものだった。

夜ご飯だけでも2時間は話を聞けるし、2件目、ホテルとなるとピロートークも含めてその人の人生深淵まで触れられることもある。

理系人生だと女性と接する機会は極めて少ない。そんな自分にとっては知らない世界ばかりだった。

知ったところで何になるんだと言われるとそれまでだが。

うまく技術習得ができるとある程度セフレができるようになるが、安定は永遠に来ない

遊びの後半は3人くらい常にセフレがいる状態だった。

常に、と書いているのはセフレという存在が極めて不安定存在からである

自分なりに相手を満足させるように努力していても、当たり前のように関係が向こうから千切られるので常に新しい相手供給し続ける必要がある。

から常に種を巻いているような状態だった。

セフレがほしい男は無限に居ると思うが、女性は大概そうでない。遊び前提で出会っても暗黙的に、なんなら本人は気づいてなくても付き合ったり結婚したりする未来を考えているケースが極めて多い。

というかそれ以外ほぼない。ごく稀に例外はいるが本当にごく稀でしかない。

まりセフレという関係は長期的には成り立たない。

途中で女の子から消えていく。それは恋人になれないということに絶望を感じたり、単純に飽きられたり、私このままじゃだめだと思ったり。

から常にセフレとなる候補を探すために新規女の子と会い続けないといけないため、永遠に安定が来ない。

セフレという言葉理想を描く人間無限にいるが実際は想像以上に空虚存在である

自分にだけ一途でセフレ女の子という幻想は捨てるべきだ。矛盾している。

自分セフレになる時点で他の男にも簡単に落とされて持っていかれるような存在であるし、仮に長期間セフレが維持できるほど好意を持たれていたらいつか相手が今の関係に満足できなくなって終わる。

一途なセフレ存在しないのでちゃんと誠実に遊ばず恋人を目指すべきである

やめた理由

長期的なお互いの幸せ絶対に得られない

一時的に誰かの薬に立てている実感こそあったが、自分はこの人を一生幸せにできないんだと感じで絶望を感じることが多々あった。

もちろん自分自身例外でない。

穴の空いたポケットビスケットを詰めているような感覚。すぐ落ちて無駄になっていく。

どれだけ優しくしたり貢献しても、すぐ離れて蓄積がない。

恋人だったらそうはならない。1年付き合って培った信頼とか共通認知とかがある。

遊びにはそういうのが一切ない。体験版プレイするたびにリセットされるRPGと同じ。

=========

文字数制限?で表示できてなかったので、続きはこちらで。

https://anond.hatelabo.jp/20250908003219

2025-05-19

最近検索履歴

AI支援 スライド作成

これを試した。ダメだな。すぐ金をせびってきよるし。無料枠でやれる奴は、ダメ。食わせたPDF図面があるのにそれを使わないとか・・( ^ω^)・・・ありえない

try pandoc

ありとあらゆるフォーマットテキストなどを変換するツール

2025-05-18

官報ダウンロード

令和7年4月1日以降、官報帰化情報が90日経過で閲覧不可になった。

プライバシー配慮」とのことだが、最近の不自然戸籍不要発言などと合わせて考えると嫌な予感しかしない。

そこでとりあえず官報を保存できるプログラムを作った。自分ダウンロードして保存すること自体は全く問題ない行為

官報は平日の8:30に公開されるので、cronで8:31かに実行すると良いのでは。

# 官報PDFデータを入手して保存する
import requests
import os
import time
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 対象URL
index_url = "https://www.kanpo.go.jp/index.html"
base_url = 'https://www.kanpo.go.jp/'

# ダウンロードフォルダ
download_dir = 'pdfs'
os.makedirs(download_dir, exist_ok=True)

# ページ取得
response = requests.get(index_url)
response.encoding = 'utf-8'
text = response.text

# HTMLを解析
soup = BeautifulSoup(text, "html.parser")
results = []

# 「本日官報」を対象PDF情報を取得する
today_box = soup.find('div', class_='todayBox')
if today_box:
    dl = today_box.find('dl')
    dt = dl.find('dt')
    if dt:
        # 日付の抽出
        date_text = dt.get_text(strip=True).split('92;n')[0].replace(" ","").replace("全体目次はこちら","").replace("※インターネット官報","").strip()

        dd = dl.find('dd')
        if dd:
            for li in dd.find_all('li', class_='articleBox'):
                title_tag = li.find('a', class_='articleTop')
                pdf_link = li.find('a', class_='pdfDlb')

                if title_tag and pdf_link:
                    title = title_tag.decode_contents().replace("<br/>", "").strip()
                    url = pdf_link['href']
                    results.append({
                        '日付': date_text,
                        'title': title,
                        'url': url
                    })

# 結果の表示
for r in results:
    date = r['日付']
    title = r['title'] 
    url = r['url'] 

    # pdfファイルURL作成
    url_parts = url.rsplit("/", 1)
    url_base = url_parts[0]
    filename = url_parts[1].replace("f.html", ".pdf")
    converted_url = f"{url_base}/pdf/{filename}"
    
    # pdfURLファイル名を作成
    full_url = urljoin(base_url, converted_url)
    base_filename = date + "_" + title + "_" + filename.replace("f.html", ".pdf")

    # ダウンロードして保存
    print(f'Downloading {full_url} ...')
    try:
        response = requests.get(full_url)
        response.raise_for_status()
        with open(os.path.join(download_dir, base_filename), 'wb') as f:
            f.write(response.content)
        print(f'Saved: {base_filename}')
        time.sleep(10)
    except Exception as e:
        print(f'Failed to download {full_url}: {e}') 

2025-05-15

PS VitaのEnsoインストール詰んだ人へ(2025年版 HENloによるCFW導入メモ

VitaCFWを導入するにあたり、情報が散乱していたのでまとめる

<なぜ情報が散乱しているか

2022年末に革新的進歩があり、VITA単体でCFW導入できるようになった(通称 HENlo)

・にも関わらず古いCFW導入方法を案内しているブログが大量にある

しかタイトルの"20XX年最新"だけ更新し続けているから、最新記事に見える

PC使用が前提になっているブログは全部古いので無視した方が良いです。

<どんな情報採用すべきか>

・『HENlo』について触れている

PC使用が前提になっていない

この2つが押さえられてれば最新情報です。(2025年5月現在

ただし、現状だと実は『PC操作が一部必要』という罠があります

その問題について書いている記事が見当たらないので、ここに残しておきます

超具体的には

「HENkaku、VitaDeploy、VitaShellは導入できた」

「けどEnso導入ができない/つまづいている」  エラー:failed to get fw version please disable all the plugins and try again

というタイミングの人に一番役に立つはずです

5chでもRedditでも

プラグイン無効しろ』『0syscall6を無効しろ』って書いてあったのですが、実はEnsoのバージョン変えれば解決します。(後述)

CFW導入まで

この記事が役に立ちました

[Vita] 2023年最新手順【HENlo】3.65-3.74 PC不要CFW(HENkaku)導入

https://re-doing.com/vita-henlo-hack/

(一応魚拓https://web.archive.org/web/20250226111105/https://re-doing.com/vita-henlo-hack/

上記記事を読めば

・HENkaku (カスタムファームウェア 3.65 変革 -2)

VitaDeploy

VitaShell

について理解しつつインストールできると思います

記事の補足

・新型PSVitaPCH-2000)でも問題ない

・最悪文鎮化する可能性があるのでセーブデータバックアップを取ったほうが良い

VITAセーブデータ特殊で、PCと繋ぐだけでは取り出せない

バックアップはいくつか方法があるが、PCコンテンツ管理アシスタントは既に使えないと思ったほうが良い。PS Plusのクラウドバックアップが最も良いはず

記事の内容を実施する前にバックアップ取るのを強くおすすめする


Enso導入 ※本題※

EnsoとはCFWを安定化させるために必要ものです。

これをインストールすることで、電源を切ってからCFW状態を維持できます

VitaDeploy内のApp downloaderメニューからEnsoをインストールできますが、実はこのバージョンが古いです。※重要

そのためVitaDeployからインストールすると先程のエラー(failed to get fw version please disable all the plugins and try again)が必ず出ます

PC不要になった」と書いてあったので盲点ですが、ここからPC必要です。

正しい方法は以下です

① Ensoインストール

1, PC操作GithubからEnso最新版のenso.vpkファイルダウンロード現在v1.1)

https://github.com/TheOfficialFloW/enso/releases

2, PCVitaUSBケーブルで繋げる ※データ転送対応ケーブルを使うこと。相性もある

3, Vita操作VitaShellを起動する

4, Vita操作SELECTボタンを押す

5, PC操作USBドライブとしてVITAデータが表示されるので、ダウンロードしていたenso.vpkファイルを置く(フォルダはどこでもOK自分ルート直下に置きました)

6, Vita操作:✕ボタンを押してCancelする

7, Vita操作VitaShellでenso.vpkを見つける(さっきルートに置いたなら恐らくux0:にある)

8. Vita操作:enso.vpk上で◯ボタン

9. Vita操作:Do you want to install this package? → ◯ボタン

10. Vita操作:~~~ Would you like to continue the install? ※意訳:「失敗したら文鎮化するけど自己責任だけど続ける?」 → ◯ボタン 

11. 進行バーが消えたらインストール完了 ホーム画面に戻ってOK

12. Vita操作ホーム画面にEnsoが追加されている

② Enso実行 ※全てVITA操作

Ensoはファームウェアが3.60か3.65じゃないとインストールできないです。(3.65 変革 -2は3.65扱い)

先程の記事の通り進めていたら3.65 変革 -2 になっているはずですが、実行前に再確認して下さい。

1, ~~~ Press CIRCLE to accept these terms or any other key to not accept. → ◯ボタンを押す(=CIRCLE

2, Options:

  CROSS   Install /reinstall the hack.

  TRIANGLE  Uninstall the hack.

  SQUARE  Fix boot configuration (choose this if taiHEN isn't loading on boot).

  CIRCLE   Exit without doing anything.

  → ✕ボタンを押す(=CROSS

3-a, 問題がない場合

Locking sustem ..

(中略)

The installation was completed successfully.

suocess.

Press any key to reboot.

 →何かボタンを押すと再起動される(Enso導入完了

3-b, 問題がある場合 ※自分はこっちでした。Quick 3.65の副作用かも※

MBR was detected but instllation checksum dose not match.

A dump was created at ux0:data/blocks.bin.

Press X to continue, any othe key to exit.

意訳:「ちょい待った。思ってた構成じゃないから危ないかもしれんわ。続ける?」

 →✕ボタンを押す ※結局原因分かってないので自己責任でお願いします※

4, Locking sustem ..

(中略)

The installation was completed successfully.

suocess.

Press any key to reboot.

 →何かボタンを押すと再起動される(Enso導入完了

<Enso導入の確認方法

Enso導入が成功していると

本体起動時にEnsoのロゴが表示される

ファームウェアが3.65 変革 -2のままなっている

お疲れ様でした。

記事の本題は以上です。


雑談VITAセーブデータは未だ檻の中

VITAセーブデータ暗号化されており、吸い出せてもエミュレータで使えないらしい。本体機体とセットで揃わないと使えない仕様

調べたらセーブデータをここまでキツく縛ってるハードは他にない

からメモリーカードデータ管理でもPSPのセーブデータしか項目がなかったのか…

不便すぎる


失敗の備忘録1:VitaDeploy版のEnsoで苦戦していた時に取った行動メモ

当時の仮説

・HENkaku設定が悪さをしているのではないかPSNの偽装有効化、バージョン偽装有効化) →オフにしたが関係なかった

本体にSD2VITAを刺しているのが良くないのではないか →抜いたが関係なかった

・enso.vpkの置き場所ルート(ux0:)が良くなかったのではないか →関係なかった

VITAメモリーカードを刺しているのが良くないのではないか →関係なかったが、データ保護的には抜くのが良さそう

ゴミデータが残っていて悪さしているのではないか(手順を間違えたデータや古いデータなど) →関係ある可能性はある。最後までわから

・Ensoのバージョンが古いのではないか →これが主要因だった


失敗の備忘録2:vita starting taiHEN framework対処

ゴミデータを疑った自分正規ファームウェアに戻して、CFW化をやり直したりもした。

その際HENkakuすら入れられなくなってしまったので、抜け方を書いておく。

行った手順:脱CFWからHENkaku再導入時のエラーまで

ENSO実行

~~~ Press CIRCLE to accept these terms or any other key to not accept. → ◯ボタンを押す(=CIRCLE

Options:

  CROSS   Install /reinstall the hack.

  TRIANGLE  Uninstall the hack.

  SQUARE  Fix boot configuration (choose this if taiHEN isn't loading on boot).

  CIRCLE   Exit without doing anything.

  → △ボタンを押す(=TRIANGLE Uninstall the hack.)

公式ファームウェア3.65に戻る

強制再起動される

ファームウェアアップデートが促され、アップデートしないとメモリースティックが使えない

公式ファームウェア3.74にアップデート

HENloのブラウザアクセスからやり直す

HENloメニュー

Install HENkaku

Install VitaDeploy

reset taitan config

Exit

のうち、Install henkakuを選択

インストールは上手くが、Exitができない。

「Eiting in 3」 の後に、以下のエラーメッセージがでて固まってしま

エラー内容(うろ覚え

vita starting taihen framework

If you are stuck on this screen, hold down the power button until your Vita turns off, then turn it back on.

原因:恐らく余計なデータと衝突を起こしてる

解決法:reset taitan configを先に実行する

(さっきのエラーメッセージ画面で)

電源ボタン10秒長押し

セーフモードが起動する

本体再起動するを選択

HENloのブラウザアクセス

HENloメニュー

Install HENkaku

Install VitaDeploy

reset taitan config

Exit

のうち、reset taitan config選択

その後

Install HENkaku、Install VitaDeployを選択して、Exit選択

追記)より網羅的な補足

この記事を書き終えた後に見つけたのですが、以下の記事の『改造方法』というところに情報がかなりまとまっています

Vita バージョンが低くてもPSNにサインイン&PSストアにアクセス(エラーNW-8942-3回避)&機器認証する方法(2025最新)

https://yyoossk.blogspot.com/2024/10/vitapsnps2024.html

感想

今回VITAセーブデータバックアップが主目的だったから、徒労でしかなかった

せめてこの記事が誰かの時間節約することを願う

指摘、補足、最新情報あれば反応もらえるとありがたいです

2025-04-13

anond:20250413061825

def demo_unprocessed_emotion():

"""未処理感情システムデモ改善点(記憶編集言語学習、反応速度など)を活用"""

cognitive_queue = CognitiveQueue(attention_threshold=0.4)

print("=== 未処理感情システムデモ改善版) ===\n")

# 1. 視覚的な違和感

print("1. 視覚的な違和感の生成")

visual_signals = [

SensorySignal("visual", 0.7, -0.3),

SensorySignal("somatic", 0.4, -0.2)

]

visual_discomfort = cognitive_queue.register_new_emotion(visual_signals, 0.65)

print(f"生成された感情: {visual_discomfort}")

print(f"支配モダリティ: {visual_discomfort.get_dominant_modality()}")

print(f"平均感情価: {visual_discomfort.get_average_valence():.2f}")

print(f"信号反応速度: {[s.latency for s in visual_signals]}")

visual_discomfort.add_pattern_match("visual_discrepancy", 0.75)

try:

visual_discomfort.add_memory_path("/memory/recent/room_layout")

except ValueError as e:

print(f"記憶パスエラー: {e}")

# 2. 記憶の再編集

print("\n2. 感情へのアクセス(再編集)")

accessed_emotion = cognitive_queue.access_emotion(visual_discomfort)

print(f"新しい感情インスタンス: {accessed_emotion}")

print(f"構造レベル(再編集後): {accessed_emotion.structure_level:.2f}")

# 3. 内受容感覚

print("\n3. 内受容感覚の生成")

intero_signals = [

SensorySignal("interoceptive", 0.6, -0.7),

SensorySignal("somatic", 0.5, -0.4)

]

intero_discomfort = cognitive_queue.register_new_emotion(intero_signals, 0.55)

print(f"生成された感情: {intero_discomfort}")

intero_discomfort.add_language_candidate("違和感", 0.4)

cognitive_queue.partially_process(intero_discomfort, "気分が悪い", 0.6, context="negative_mood")

print(f"学習済み言語: {cognitive_queue.learned_terms}")

# 4. 聴覚記憶

print("\n4. 聴覚記憶の生成")

audio_signals = [

SensorySignal("auditory", 0.8, 0.6),

SensorySignal("emotional", 0.7, 0.5)

]

audio_memory = cognitive_queue.register_new_emotion(audio_signals, 0.7)

print(f"生成された感情: {audio_memory}")

audio_memory.add_language_candidate("聞き覚えのあるメロディ", 0.75)

audio_memory.add_pattern_match("musical_fragment", 0.85)

audio_memory.add_memory_path("/memory/music/recent")

# 5. キュー更新

print("\n5. 認知キュー更新")

cognitive_queue.update_queue()

status = cognitive_queue.get_status_summary()

print(f"未処理感情の総数: {status['total_unprocessed']}")

print(f"処理キューサイズ: {status['processing_queue_size']}")

print(f"モダリティ分布: {status['modality_distribution']}")

print(f"感情分布: {status['valence_distribution']}")

print(f"学習済み言語数: {status['learned_terms_count']}")

# 6. 処理対象の取得

print("\n6. 処理対象の取得")

next_emotion = cognitive_queue.get_next_for_processing()

print(f"処理対象: {next_emotion}")

# 7. 感情部分的処理

print("\n7. 感情部分的処理")

if next_emotion:

cognitive_queue.partially_process(next_emotion, "視覚的な違和感を感じている", 0.85, context="visual_anomaly")

print(f"処理後の状態: {next_emotion}")

print(f"構造レベル: {next_emotion.structure_level:.2f}")

print(f"最良の言語マッチ: {next_emotion.get_best_language_match()}")

# 8. 高速モダリティ検索

print("\n8. モダリティによる感情検索インデックス使用)")

matches = cognitive_queue.lookup_by_modality("auditory")

print(f"検索結果数: {len(matches)}")

for match in matches:

print(f"- {match}")

# 9. 時間経過シミュレーション

print("\n9. 時間経過のシミュレーション")

for emotion in cognitive_queue.unprocessed_emotions:

emotion.apply_decay(3.0)

cognitive_queue.update_queue()

status = cognitive_queue.get_status_summary()

print(f"時間経過後の未処理感情の総数: {status['total_unprocessed']}")

print(f"時間経過後の平均顕在性: {status['average_salience']:.2f}")

if __name__ == "__main__":

demo_unprocessed_emotion()

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