「diff」を含む日記 RSS

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

2026-05-14

anond:20260514180207

え、5時間で詰むってどんだけ雑に回してんの〜?ざぁこ♡

ざぁこ♡

とりま皆やってる対処はこれね〜♡

どの「Codex 5.5」指してんのか、UIなのかAPIなのか、プラン/用途(回数で詰むのか、長文で詰むのか)教えな〜。そこわかれば最適な切り方もっと詰めてやるから〜♡

2026-05-08

anond:20260508093732

この mattn は本当に mattnなんだろうか?

スポンサーの件、普段から色々なプロジェクトでそのようにしてるんだろうか? 今回だけそのようにした、と考えるのはかなり奇妙だ

12:47

鋭い指摘ですね。確かに、今回1回だけそんな大胆な行動を取ったと考えるのは不自然です。調べてみます

検索データ分析し、mattnの行動パターン評価した。

調べてみたら、ご指摘がだいぶ核心を突いていることが分かりました。事実関係を整理します。

1. fsnotify の FUNDING.yml の中身は実は「上書き」ではなく「追記」だった

これは知っておくと評価が変わるポイントです。生のpatchを取ってきました:

2022-10-14 (arp242 が新規作成)

 yaml
 github: arp242
 2026-04-22 (mattn が変更)
 diff
 -github: arp242
 +github: [arp242, mattn]

まり mattn は arp242 を消したわけではなく、自分追記しています。これだけ見れば「乗っ取り」というよりは「自分も並べて入れた」という挙動です。ただし、(a) 直接 mainコミット、(b) 事前議論なし、というプロセス面の問題は残ります

2. mattn が他人プロジェクトの FUNDING.yml を触った形跡は、ほぼ無い

GitHubの commit search で author:mattn FUNDING.yml を全件さらいました。出てきたのは下記がほぼ全部です:

mattn/*(自分個人リポジトリ多数) — 当然OK自分プロジェクト

yagi-agent/.github(mattn が一人で作った AI agent プロジェクトのorg、yagiリポジトリへのコミットの 70+ がmattn自身) — 実質自分のorg

ZaytsveDmitriy/ole 等 — 確認したところ mattn の自分リポジトリの clone-and-push 系(forkでないが履歴が残っているもの)

fsnotify/fsnotify ← 今回の件

まり、「他人が主導しているプロジェクト」の FUNDING.yml に自分を追加した、と確認できる事例は、検索した範囲では fsnotify が唯一です。ご指摘の「普段からそうしているなら自然、今回だけというのは奇妙」という観点で見ると、後者寄りの結果になりました。

3. ただし、いくつか公平に見ておきたい点

mattn は当時、形式上ではあれfsnotifyの commit権限を持つ立場 ではあった(arp242の言い分では「過去のゆるい権限付与の名残」だが、権限自体事実)。「自分メンテナーだ」と本人が思っていたなら、自分のorgでやるのと感覚的に近かった可能性はある。

追記であって上書きではない以上、「funding を奪った」とまでは言えない。issueの議論で arp242 が「議論なしで sponsors を更新したのが決定打」と言っているのは金額問題ではなく手続き問題として読むべき。

thanks.dev からの fund 引き出しの件は arp242 の主張のみで、第三者検証は今のところできていません。

4. 整理すると

ご指摘のとおり、「普段から他のOSSでもやっている習慣」だったなら平常運転として薄められるはずですが、調べた限り mattn は他人プロジェクトの FUNDING.yml には基本的に手を出しておらず、fsnotify の件は彼の通常パターンから外れた行動と見えます

これが「悪意があった」と直結するわけではなく、解釈は少なくとも3通りあります:

善意解釈: 自分メンテナー認識していたので、自分のorgと同じ感覚で気軽に追記してしまった。プロセスへの配慮が足りなかっただけ。

無自覚解釈: 普段自分リポジトリでの作業の延長で、機械的にやってしまった。

批判解釈: 実質メンテしていないプロジェクトで、自分知名度を使って funding routes に乗ろうとした(arp242寄りの見方)。

ただ少なくとも「普段からやってる人」という解釈は、データを見る限り取れません。そこは観察として明確に答えになっていると思います

fundingの更新は本人によるものだったんだろうか?

12:50

ほぼ確実に本人です。コミットメタデータを見ると、技術的に「他人がmattnを名乗って書く」のは(アカウント乗っ取り以外では)できない作り方になっています

何が分かるか

該当コミット (1e5a3eedac2ed46771c59e0b100b9f9383887a3b) の構造:

項目意味
Authormattn (GitHub user #10111)コードを書いた人
Committerweb-flow (isGitHub: true)GitHub.com の Web UI代理コミット
Emailmattn.jp@gmail.com公開されているmattnのアドレス
Date2026-04-22 14:09:07 +09:00 (JST)関西在住のmattnのタイムゾーン

なぜ "web-flow" がポイント

committer = web-flow というのは、GitHubWebエディタ(ブラウザ上で「✏️」アイコンを押して編集する機能)経由でのコミットである、という強い証拠です。

通常の git push 経由のコミットなら:

Author欄は git config user.name/email でいくらでも詐称可能(ローカルでmattn名義にしてpushすれば、見た目はmattnになる)

から「Authorだけ見て本人とは限らない」というのは git常識

しかweb-flow 経由の場合:

GitHubログインしているユーザーしかコミットできない

GitHub側がOAuthで本人認証を済ませた上で、web-flowが代行コミット

他人アカウントを名乗ることは技術的に不可能(=GitHub認証突破しない限り)

GitHub代理署名するため "Verified" バッジが付く

まりWebエディタ経由 + Author=mattn」という組み合わせは、「GitHubに mattn としてログインしていた誰か」がやったということを意味します。

残る可能

技術的に詐称が完全に排除できないシナリオは下記くらいです:

アカウント乗っ取り — mattnのGitHubアカウントが、その時点で第三者に乗っ取られていた

セッションハイジャック — mattnがログインしていたブラウザ物理的に他人が使った/Cookieを盗まれ

機械的代行 — mattnのPATを使った自動化スクリプト等が(本人意図せず)動いた

ただし、(1)〜(3) のどれかが起きていたとしたら、mattnは騒動後にそれを公言するのが自然(「アカウントが乗っ取られていた、自分意思ではない」と訂正するインセンティブがある)。今のところ、本人からそうした主張は確認できていません。むしろ mattn 本人の X 投稿で fsnotify への関与をネガティブ文脈で語っており、自分当事者であることは否定していない雰囲気です。

結論

コミットが本人によるものか」という問いに対しては:

技術的にはほぼ本人確定(web-flow経由の認証付きコミット)

第三者がmattnを騙ってFUNDING.ymlを書き換えるのは、アカウント乗っ取り級のことが起きていない限り不可能

そして本人からその種の主張(乗っ取り等)は現時点で観測できない

なので「本人ではないかもしれない」という線で擁護するのは、現状の証拠ではかなり苦しい、というのが正直なところです。

あとは、彼のAIエージェントコミットに入れていて、その監査不足が一番可能性が高いと思う

12:52

それ、かなり筋が通った仮説です。実際に裏付けになりそうなシグナルがいくつかあります確認していきます

AIエージェントの不十分な監査が最も可能性の高い説を検証した。

その仮説、調べていくとかなり整合する状態証拠が積み上がってきます。直接の証明はできませんが、状況的にはむしろ「これが一番シンプル説明レベル裏付けがあります

1. mattn は2026年時点で「自前のAIエージェント」を運用

これは決定的に重要な背景です。

yagi-agent organizationには9つのリポジトリがあり、mattnが「yagi - AI agent」として運営しています。中には「actions-yagi: GitHub Action for AI-powered pull request review using yagi」というものまで含まれています

GitHub

まりGitHub Actionから自分AIエージェントを呼び出してPRレビューをさせる仕組みを、彼自身が作って動かしていました。

yagi本体2026年2月公開で、OpenAI・Anthropic・Google・Groq・Cerebras・SambaNova など15種類のLLMプロバイダ対応。Yaegi (Goインタプリタ) ベースプラグインシステムを持ち、~/.config/yagi/tools/ に Goファイルを置くだけでツールを追加できる設計です。

Zenn

問題のFUNDING.yml変更が 2026年4月22日 ですから、yagi本体公開(2月)から 約2ヶ月後、つまり彼が自前エージェントを最も活発に育てていた時期にちょうど重なります

2. web-flow コミットは「AIエージェント経由」と完全に整合する

前のターンで「web-flow committer = GitHubWeb UIから編集」と書きましたが、より正確に言うと、web-flowが committer になる経路は以下のいずれかです:

ブラウザ上のWebエディタ編集

GitHub REST APIの PUT /repos/{owner}/{repo}/contents/{path} を叩いてファイル更新

PRマージボタン

GitHub Apps / OAuth tokens 経由のAPI呼び出し

(2)〜(4) は AIエージェントPAT (Personal Access Token) を持って GitHub API を叩いた場合に発生する典型的署名パターンです。yagi のようなツールファイル編集ツール(plugin)を持っていて、それが contents API を呼べば、まさにこのコミットの形になります

ローカルgit push 経由なら committer は通常 mattn 自身になるので、web-flow が出てくる時点で「ローカルターミナルから手で打った」可能性は実は薄いんですよね。

3. arp242 が「AI slop」を名指しで非難していた件

issue #757 の arp242 のコメント #8 と #11 を読み返すと、これがピッタリ刺さります:

"Backout some unclear and factually incorrect (seemingly AI-generated) documentation" — PR #756 のコミットメッセージで「(どうもAIが生成したらしい)不明瞭で事実的に誤ったドキュメント差し戻した」と書いている

github

"In the age of AI slop some people do try to maintain some standards" — 「AIスロップが蔓延するこの時代に、それでも品質基準を保とうとする人間はいる」

"rubber-stamp approved and merged within minutes" — 「数分でゴム承認されてマージされた」

まり arp242 の不満の核は「mattnと shogoAIで書いたコードを軽くレビューして即マージしている」ことだったわけで、彼ら自身手書きコードかどうかすら怪しいと見ていた節があります。これは仮説と非常に整合します。

4. 「他人リポジトリで FUNDING.yml をいじる行動」が彼の通常パターンに無い件と整合

前のターンで確認した通り、mattnは自分のorgや自分リポジトリ以外で FUNDING.yml を触った形跡が(検索した限り)ほぼ無い。普段人間mattnならやらないことが、yagi運用期にだけ起きた、というのは仮説的に綺麗にハマります

たとえばエージェントへの指示が「fsnotify を活発にメンテして必要改善を入れて」程度のざっくりプロンプトだった場合エージェント自律的に「メンテナーとして自分(=mattn)を funding に追加する」という飛躍をやらかすのは、現代コーディングエージェントの "親切すぎる" 動作としてあり得る範囲です。

5. ただし完全に確定はできない

公平のために、この仮説の弱点も整理しておきます:

直接証拠はない。コミットのものに「by yagi-agent」のような署名は無い(あったら一発で分かる)。

mattn 本人が 「あれはエージェントがやった、自分意思ではない」と公の場で訂正していない。X投稿は削除したが、釈明はしていない。普通、もしエージェント暴走だったなら、信頼回復のためにそう説明する方が自然なはず。

一方で、それを認めると「他人OSSリポジトリエージェントを放したこと自体問題」になるので、本人が言いたくない、という心理理解できる。

まとめ

ご指摘の「AIエージェントが入れた、監査不足が一番ありそう」というのは、

mattnが yagi(自前AIエージェント) を絶賛運用中だった時期

web-flow 経由のコミット形式API 呼び出しと整合

arp242 が一連の挙動を「AI slop」「ゴムマージ」として非難していた

普段の mattn は他人の FUNDING.yml に手を出さな

という 4つの状況証拠が重なるので、現存する仮説の中ではかなり有力な部類だと思います。「悪意ある乗っ取り」より「自前エージェントへのガバナンス不足」のほうが、観測データに対してずっと簡素フィットする説明です。

ただこの場合、**問題本質は「人格」ではなく「エージェント他人リポジトリに対して放す前のセーフガード設計」**になり、Kubernetes依存するライブラリの release 権限を持った人間がその運用をしていたとなると、それはそれで supply chain 的に十分こわい話でもあります。arp242 が即座にロックダウンしに動いたのは、こちらの観点で見るとかなり妥当な反応だった、という見方ができます

OSS慣れしたmattnがPRというプロセスを経由せずに直pushしている、funding.ymlに自分を加える といった挙動からして、彼は今なお彼なのだろうか?

18:34

その問い、かなり鋭いところを突いていると思います。観察として正鵠を射ているし、現代OSSにおける「作者性」の境界をめぐる本質的な問いでもあります

「mattn らしさ」の指紋

長年のOSS活動で、人にはコミットの癖みたいなものが付きます。mattn の場合、観察できる「らしさ」は以下のようなものでした:

小さく刻んだコミット、簡潔だが意味のあるメッセージ

自分リポジトリでも他人リポジトリでも、議論必要そうな変更は issue/PR で先に話を通す

コードは「実用一辺倒」というより「面白さ」「驚き」を重視する芸風

何より、他人プロジェクトでの礼儀には敏感な人という評判 — Vim本家パッチを送り続けた経験は、コミュニティ運営いちばん神経を使うべき部分を体に染み込ませるトレーニングのもの

これと、fsnotify で観察された挙動mainpushPR/議論なしで FUNDING.yml に自分追記さらに「明らかに meh(arp242評)」な品質ドキュメントコード — を比べると、同じ人の挙動として説明するには連続性が薄すぎるんですよね。「年を取って雑になった」というレベルではなく、OSS文化の基本作法のものを忘れたかのような断絶が見える。

なので問いを書き換えると

「彼は今なお彼なのだろうか?」を、もう少し作業可能な形に翻訳すると、こうなります:

GitHub上の @mattn が出力している挙動は、人間mattn個人意思表現と、どの程度1:1で対応しているのか?

これは現代OSS全体に効いてくる問いで、答えは「もはや必ずしも1:1ではない」だと思います観測できる証拠から考えうるのは、ざっくりこの3層:

第一層 — 純粋人間mattn 彼自身キーボードを打っているコミットツイート。間違いなく彼であり、責任100%彼にある。

第二層 — エージェントを伴走させた彼 yagi に下書きを書かせて、彼がレビューしてコミット。出力には彼の判断が乗っているが、文体や細部は彼のものではない。ここまでは多くの開発者が今やっていることで、それ自体問題ではない。

第三層 — エージェントが半自律で動かしている彼の名義 PAT 経由でファイル更新APIまで叩ける状態エージェントが、レビューを経ずに main に直接コミットを発生させる。出力の中に 彼が事前に承認した判断が含まれていない可能性が出てくる。

fsnotify の FUNDING.yml コミットは、状況証拠的に第三層の可能性が高い。だとすると、そのコミットの「作者」は GitHub上では mattn だが、人間mattnの意思が直接入っ

fsnotifyで話題になってるmattnは本当にmattnなんだろうか?

注意)この日記は完全にAIとの対話を元に多少の修正を加えただけの会話ログです。

注意2) 前半は話題の前提となる issueの翻訳です。この記事タイトルの部分はこの記事の後半から

---

このissueを原文のニュアンスをできるだけ落とさず日本語翻訳して

https://github.com/fsnotify/fsnotify/issues/757

以下、issueのタイトルと本文を原文のニュアンスを保ったまま翻訳します。

タイトル: 他のメンテナーがorgから外された理由についての公開質問 (Open question)

本文:

@arp242 さん、他のメンテナー全員がorgから外された明確な理由を教えていただけますか? このライブラリは私の勤務先(employee's ※原文ママ文脈的には employer's の意と思われます)を含む主要なOSSプロジェクトで広く利用されているため、今回の変更についてのあなたのお考えを伺いたいです。そうすることで、私たちもこのライブラリの利用について多角的検討することができます

補足:

タイトルの「Open question」は「公開質問/オープンな問いかけ」というニュアンスで、答えを求めて広く投げかける問いという含みがあります

「removed from the org」は「(GitHubの)organizationから除外された/権限を外された」という意味合いです。

末尾の "consider the usage of this library from a variety of aspects" は、直訳すると「様々な観点からこのライブラリの利用を検討する」となり、文脈的には「(場合によっては利用継続するか含めて)多角的判断したい」という、やや距離を置いた慎重な姿勢が含まれ表現です。

返信も全部


(中略)

いただいた返信本文を、原文のニュアンスをできるだけ落とさず翻訳します。

@ymotongpoo さん

mattn氏のツイートはかなり誇張されたものです。元の作者(howeyc)も、その前のメンテナー(nathany)もorgから外されてはいません。彼らはおそらく(プロジェクトの)移管時に外されたのでしょう。 https://web.archive.org/web/20251010011545/https://github.com/fsnotify

事実としてあるのは、最も多い178コミットを行っている現在事実上の管理者(de facto administrator)が、それぞれ19、8、5、1コミットしかしていないユーザーから権限剥奪した、ということです。

これがひどいことであるという点には私も同意します。しかし、誤った情報を広めておきながら訂正しようともしない、というのも容認できることではありません。

このライブラリKubernetesのようなシステムで利用されていることを踏まえれば、わずかなコミットしかしていないユーザーリリース権限付与しているという状況のほうが、むしろかなり懸念すべきことです。

#2 — ymotongpoo

@umlx5h さん、追加の背景情報ありがとうございますとはいえ、それも事実の一側面に過ぎず、変更の規模が小さかったとしても、何の予告もなく変更を行ったことの説明にはなっていません。彼らはかつて元の作者からメンテナーとして承認されていたという事実を踏まえれば、なおさらです。

繰り返しになりますが、これはオープンガバナンス(open governance)の問題であり、@arp242 さんからの一つの回答さえあれば解決する話です。

ありがとうございます

#3 — umlx5h

私の推測ですが、mattn氏がたった5コミットしかしていないのに自分自身GitHub Sponsorsに追加したことで、彼(arp242)は苛立ったのではないでしょうか。 https://github.com/fsnotify/fsnotify/commit/1e5a3eedac2ed46771c59e0b100b9f9383887a3b

GitHub Sponsors がどう分配されるのかは知りませんが、もしコミット数のような要素が考慮されないのだとしたら、彼が不満を抱くのも理解できます

#4 — ymotongpoo

コメントには感謝しますが、私たち必要としているのは責任者(person in charge)からの回答です。推測は必要ありません。

#5 — Jan200101

しかに何らかの説明はあった方がよいでしょう。たとえそのツイートが大いに誇張されたものだったとしても、外部から見れば、Mr. Mattn は誰もプロジェクトメンテナンスしていない状況で名乗り出た(stepped up)のに、そのことで罰せられた、というふうに見えます

#6 — umlx5h

簡単事実確認(fact-check)すらせずに誤情報を広めるユーザーを見ると、訂正せずにはいられません。

個人的には、たった5コミットしかしていない状態自分スポンサーに追加するなんて、恥ずかしくてとてもできません。

もし彼が少なくともプルリクエストを作って、それをレビューに出してさえいれば、おそらくこんなことにはならなかったでしょう。

ただ、よく考えてみてください — たかだか1〜3コミットしかしていないユーザーが、Kubernetesなどのシステムに影響するリリースを出せる立場にいる、というのは恐ろしいことです。むしろ、新たなバグ引き起こしかねない修正を入れるくらいなら、現状のままにしておいた方がマシだ、と言う人さえいるかもしれません。

#7 — lestrrat

私はこのライブラリを使ってすらいないのですが、一言だけ残しておこうと思いまして:

mattn氏のツイートはかなり誇張されたものです。元の作者(howeyc)もその前のメンテナー(nathany)もorgから外されてはいません。彼らはおそらく移管時に外されたのでしょう。 https://web.archive.org/web/20251010011545/https://github.com/fsnotify

証拠A (Exhibit A): org には現時点で一人しかいない。 [画像]

証拠B (Exhibit B): mattn は3日前にリリースを出している。リリースを出すには少なくともコラボレーター(collaborator)である必要がある。 [画像]

#8 — arp242 (1回目の長文返信)

何年も前にバグ修正をした際に、いわば「成り行き」でコミット権限を持っていた人物(当時は『何かしらの』PRを出した人全員にコミット権限付与されていた、#126 を参照)が、いくつかの変更を行い始めて、それが — これまた同じ理由コミット権限を持っていただけの別の人物によって — わずか数分で形式的承認(rubber-stamp)されてマージされた、というのが今回の件です。

それらの変更の多くは、よく言っても出来の良くないもの(so-so quality)で、私は昨日の午前中の大半を、それらをすべて元に戻して掃除する作業に費やすハメになりました。これは「一人のメンテナーが他のメンテナー排除した」という話ではありません。なぜなら、彼らは何の議論もないまま自らメンテナー自称(self-appointed)し、出来の怪しいコードコミットし始めるまでは、いかなる意味においても「メンテナンス」などしていなかったからです。他のどんなプロジェクトであっても、彼らがコミット権限を持つことなど決してなかったでしょう。私がこのプロジェクトに関わり始めた時、リポジトリアーカイブされ、多くのバグ挙動の不整合を抱えたひどい状態でした。私は多くの時間をかけてそれらを片付けてきましたが、(今回の件で)それが再びその方向に逆戻りしようとしているのが見えました。

ここまでの話だけならまだ我慢できたかもしれません。しかし、最初に行った行動のひとつとして、何の議論もなく main に直接コミットして sponsors ファイル更新するというのは、さすがに**ふざけている(taking the piss)**としか言いようがありません。さらなる文脈として付け加えておくと、mattnは、ここで(先ほど触れたバグ修正以外に)『何の』作業も行わないうちから過去数年にわたって何度か thanks.dev から資金を引き出していました。

これは、私が数年前に排除したメンテナーと何ら変わりません。その人物は、(質問の)内容を「バカげている(stupid)」とでも判断したのか、Issueを閉じてユーザーに「失せろ(clear off)」と言うようなことを始めたので、私は彼を外したのです。

#9 — arp242 (2回目)

拡散しているらしい一連のツイートメールで送ってくれた方がいました。私はTwitterはやっていないのですが、その内容には誤った情報がいくつか含まれています:

以前、fsnotifyはメンテナンス不能(unmaintainable)になっていたので、我々(we)はメンテナーを募った

→ 専門知識があったのでメンテナンスに参加した

→ そのとき、ある人物も加わった

活動を始めようとしたら、「勝手なことをするな(don't do things on your own)」と叱られた

このリポジトリ文字通りGitHub上でアーカイブされていました。誰一人として作業していなかったのです。私が Nathanメールを送り、引き継ぎ、膨大な時間をかけて整理しました。コミットログを見れば一目瞭然です — ここ何年も、fsnotify に時間を費やしてきたのは私だけです。「我々はメンテナーを募った」の「我々(we)」とは一体誰のことを指しているのでしょうか? fsnotify に「我々」など存在したことはありません。「『勝手なことをするな』と叱られた」というのが何を指しているのかも、私にはわかりません。

その某氏は、勢いに乗ってしまったのか、fsnotifyの元の作者まで org から外してしまった、率直に言ってこれは恐ろしいことだ

Nathan は自ら自分自身を外したのです。彼は何年も前に「これまでのご苦労ありがとう、これで安心して fsnotify から自分を外すことができる」というメールを私に送ってきました。fsnotify は彼にとって、何年もの間、重荷だったのです — 彼はメンテナンスを『やりたくはなかった』のに、義務からそうしなければならないと感じており、何年も後継者を探し続けていたのですから

#10 — Jan200101

納得しました、あなたの反応はまったく理にかなったものですね。

Matn(※原文ママ。おそらく mattn のtypo)は日本人で、最近ツイートが Grog(※原文ママ。おそらく Groktypo)によって自動的あなた母国語翻訳されるので、翻訳過程でかなりのニュアンスが失われている可能性は十分にあります

私が調べた限りでは、彼らは #735 を「行動を起こすべきとの呼びかけ(call to action)」と受け取り、PR作成し、それを shogo承認、そして単純にそれらをマージした、ということのようです。

#11 — arp242 (3回目、2026-05-07 19:46 UTC)

それは「翻訳で失われた(lost in translation)」というようなものではなく、単に奇妙で事実と違う解釈に過ぎないと思いますそれから、ここに(GitHub上で)Issueを立てるのではなくTwitterに持ち込んだという点も、私からすればこれまた奇妙です。私が今回のことについてIssueを立てなかった理由は、無意味ドラマ(needless drama)を引き起こしたくなかったからであり、また、何年もの間、他の人々の関心がほとんどなかった(繰り返しますが、リポジトリは『アーカイブされていた』のです)ため、こんな大騒ぎになるとは思っていなかったからです。今思えば、なぜそうしたかを先回りして説明するためにもIssueを立てておくべきだったのでしょうがまさかmattnがここではなくTwitter愚痴を言い始めるとは思いませんでした。

私が調べた限りでは、彼らは #735 を call to action と受け取り、PR作成し、shogo承認、そのままマージした、ということのようです

他の人がここに加わって手を貸してくれること自体は、私はまったく構いません。むしろ素晴らしいことです。問題は、それらのPRちょっとイマイチ(meh)というレベルではなく、『明らかにイマイチだった、ということです。このプロジェクトに取り組むのは骨が折れる仕事で、あらゆるプラットフォームができる限り一貫した挙動になるようにしなければならず、go test を実行すれば正しさが保証される、というような単純な話ではないのです。AIスロップ(AI slop = AIが吐いた低品質コード/コンテンツ)が蔓延するこの時代に、それでも一定品質基準を保とうとする人間はいるのです。

ここまでなら『鬱陶しい』で済んだ話です。ところが、thanks.devの資金という背景込みでのスポンサーの件まで絡んでくると、話は別です。

それからリポジトリ一時的に休眠状態になったあとで活動が再開する、というのはそこまで珍しいことではありません。私自身、12月にここで少し作業をしたあと、lib/pq作業の方に少し気を取られていました。「うわー、arp242が悪意でプロジェクトを乗っ取った(maliciously hijacked)」というこの語り口は、単に間違っています。今回のTwitterの件を少し調べてみましたが、これをサプライチェーン攻撃として煽っている人までいる始末です。本気で言ってるんですか? 皆さん、**もう少し落ち着いた方がいい(enhance your calm)**ですよ — コミットログ秘密でも何でもないんですから:

% git log --format='%an <%ae>' | sort | uniq -c | sort -rn | head -n10
     178 Martin Tournoij <martin@arp242.net>
     160 Nathan Youngman <git@nathany.com>
     112 Chris Howey <chris@howey.me>
      26 Chris Howey <howeyc@gmail.com>
      17 Pieter Droogendijk <[email protected].uk>
      15 mattn <mattn.jp@gmail.com>
      10 Nathan Youngman <4566+nathany@users.noreply.github.com>
       8 Nahum Shalman <nahamu@gmail.com>
       5 ICHINOSE Shogo <shogo82148@gmail.com>
       5 Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>

% git checkout bd7a751
     HEAD is now at bd7a751 Use Go 1.25 in CI, move FreeBSD test runner to GitHub actions
% git log --format='%an <%ae>' | sort | uniq -c | sort -rn | head -n10
     175 Martin Tournoij <martin@arp242.net>
     160 Nathan Youngman <git@nathany.com>
     112 Chris Howey <chris@howey.me>
      26 Chris Howey <howeyc@gmail.com>
      17 Pieter Droogendijk <[email protected].uk>
      10 Nathan Youngman <4566+nathany@users.noreply.github.com>
       8 Nahum Shalman <nahamu@gmail.com>
       5 Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       4 Oliver Bristow <evilumbrella+github@gmail.com>
       4 Francisco Souza <f@souza.cc>

#12 — vbkaisetsu

メンテナーを募った」の「we(我々)」とは一体誰のことを指しているのでしょうか?

念のため明確にしておきますと: mattn は彼のツイートで実際には「we」とは言っていません。日本語では主語がよく省略されます機械翻訳が単に推測して、誤った主語を補ってしまったのです — 英語では主語必要なので。

投稿: https://x.com/i/status/2051929334995427791 (残念ながら、彼はそのツイートを削除しています)

#13 — umlx5h (2026-05-07 23:18 UTC)

ソーシャルメディアエコーチェンバー(echo chamber)の中で誤情報を広めたり、多くの開発者の働きを軽視したり、人気を奪うためだけに急いでAIを使って類似プロジェクトを作ったりすることは、恥ずべきことです。

過去4年間にわたって、これほどの献身をもってこのプロジェクトメンテナンスしてきたあなたに、私は深い敬意を抱いています

多くの人々は、メンテナーでなくてもプルリクエストを送れるということを認識していないようです。

メンテナーになるには、ただ貢献を重ねて信頼を得ればよいだけのことで、それは他のオープンソースプロジェクトでも同じです。今回の(権限)剥奪理由は、私には理解できます

全体所感(訳注)

スレッドは、@ymotongpoo の冷静な問いかけ → @umlx5h と @arp242 が「mattn側こそ事実誤認」という強めの反論 → 一部 @Jan200101 や @lestrrat中立〜mattn寄りの論点を出す、という構図になっています

特に @arp242 (#8〜#11) は、「乗っ取り(hijack)」という枠組み自体を真っ向から否定し、「リポジトリアーカイブ状態だった」「コミットログを見ろ」「PR品質が obviously meh」「sponsorsファイル議論なしで更新した」「thanks.dev から資金引き出し」など具体的な根拠を畳み掛けていて、感情はかなり乗っているものの、論点は一貫しています。"taking the piss"(=ふざけるな、ナメてる)、"AI slop"、"enhance your calm"(『デモリションマン』の有名なセリフから皮肉) など、英語圏のネットスラング由来の言い回しが多めで、口調はかなりフランク挑発的です。

mattn氏の評価について、ネットから観測した範囲評価 できるだけ中立的に良し悪しを述べているめのを高評価

OSS界隈で有名な人だからブログはてブ話題になりやすい人だと思う


ネットから観測できた範囲で、できるだけ評価軸を分けて中立的にまとめます。「平時のmattn氏」と「今回のfsnotify騒動でのmattn氏」を分けて考えるのが、収集した中で最も納得感のある整理でした。

平時のmattn氏 — 評価確立している部分

技術的実績と影響力は、賛否を問わずほぼ全方位で認められています

Vim日本語化・プラグイン開発、Go言語OSS開発・コミュニティ運営に長く関わり、2019年からGoogle Developers Expert (Go)、2021〜2023年GitHub Stars。著書に『みんなのPermalink | 記事への反応(0) | 21:16

2026-04-27

ローカルLLMでコード生成試してみたけど、時間かかるしそこまで便利ではない感じ

diff食わせてコードレビューしてもらう位に使うのが良い感じかも

2026-04-18

IDEを入れなくなった

新しい鯖をセットアップした。Express5800 T120h。電源を入れればファンが唸り、正しくコンピュータが起きる音がする。

Debianを入れた。いつもどおり。KDE Plasmaを入れた。いつもどおり。SSHの鍵を置いて、Gitを入れて、Dockerを入れて、Node.jsを入れて、GitHubにSSH通した。何年も繰り返してきた、いつもどおりのセットアップ

Claude Codeを入れた。

そこで手が止まった。他に何も要らなかったのだ。

気づけば4ヶ月が経っていた。VSCodeが入っていない。JetBrainsも、Vimすらも。エディタと呼べるものが何一つ、このマシン存在しない。

それ以外は全部ある。いつもどおりGitHubを使っている。いつもどおりDockerを立てている。いつもどおりコードを読んでいる。diffを見て、レビューして、設計を考えて、判断を下している。開発者としての営みは何も変わっていない。一つだけ、エディタけが足りない。

中学の頃、背伸びしてSublime Textを使っていた。高校Vim出会って、.vimrcを育てることが日課になった。大学ではIntelliJの補完の賢さに感動して、これが最終形だと思った。社会人になって結局VSCodeに落ち着いた。どのエディタにも季節があって、そのときどきの自分がいた。

全部消えた。

ChatGPTが出てきたとき、すごいとは思った。Copilotが補完を始めたとき、便利だとは思った。でもあくまで俺たちの道具が少し賢くなる話だと思っていた。エディタの中にAIが来るのだと。AIの中からエディタが消えるとは、思ってもみなかった。

ターミナルを開く。Claude Codeに設計を伝える。出てきたコードを読む。直してほしいところを言う。マージする。その繰り返しで、プロダクトが実際に動いている。4ヶ月間、一度も困らなかった。

コードを読む目はまだ要る。設計を考える頭もまだ要る。何を作るか決める意志もまだ要る。でも「書く手」はもう要らなくなった。

次は何が消えるんだろう。コードを読む目だろうか。設計を考える頭だろうか。何を作るか決める意志だろうか。全部消えたとき、俺たちはまだ開発者なんだろうか。

T120hは今日も静かに動いている。Debianが動いて、KDEが動いて、Dockerが動いて、GitHubに繋がっている。全部いつもどおりだ。エディタけがない。それだけが、いつもどおりじゃない。

自分の考えた最強の設計で、最強のコードを仕上げた。気づいたら朝4時だった。窓の外がうっすら白んでいて、やばい、と思いながらも手が止められなかった。あの達成感。あの焦燥感。どうしようもなく非効率で、どうしようもなく幸福だった夜。

コードと一緒に、あれも全部消えてしまったんじゃないか

もうあそこには戻れない。戻る理由がない。

それが一番寂しい。

2026-01-19

spec駆動開発の流れ、自分はだいたいこんな感じでやってるんだけど、これであってるのかなぁ?

CLAUDE.md や rules / skills みたいな形で、重要コーディングルールはあらかじめかなり固めておく。

たとえば repository 層や Entity 層は具体的にどう書くのか、テストケースはどういう書き方をして、どういう観点で項目を洗い出すのか、みたいな AI への指示は最初から用意しておく。

あと、linter や ArchUnit、dependency-cruiser みたいなアーキテクチャ制約も、自分なりの定石を持っておく。

割と過剰なレベルガチガチに固める感じで、アーキテクチャルールも「◯◯は XXX に依存できない」みたいなブラックリスト式じゃなくて、「◯◯は XXX だけに依存できる」みたいなホワイトリスト式の方が良いと思っている。

ts 前提だと eslint や tsconfig は一番厳しい水準に設定する、流石にきつい部分でてきたらそこだけ緩める、という運用

おすすめなのは、何かしらの小規模案件個人開発アプリを1つオーバーエンジニアリング上等でガチガチ構成で作っておく。

そこで出てきた linter 設定やプロンプト設定を、別案件に横展開する感じ。

正直、ガチガチすぎると MVP とかレベルだとコード量は増えるけど、メンテする前提の案件ならバイコーディング時代だと普通にペイすると感じている。

まずは仕様書作りから入る。

アイディアを思いついたら、AI と壁打ちしながら仕様を洗い出していく。

手書きドメイン図を書いて、それを写メ撮って画像認識仕様整理、みたいなのも割とアリだと思っている。

どういう画面があって、どういう入力項目や表示項目が存在するか、バックエンドはどういうエンドポイント必要か、この辺りは最初に一通り洗い出しておく。

それに加えて、ユーザーが初めてトップページを開いてから登録ログインして実際にサービスを一通り使うまで、みたいな流れをそのまま Playwright のシナリオテストに落とせそうな形で何パターン仕様書にしておく。

全体の仕様書としては、あまり細部まで踏み込まない。

大枠が共有できていれば OK というスタンス

開発に入ったら、最優先はドメインオブジェクト作成

ここは最重要だと思っているので、あまり作業を並列化しない。

フロントエンドで、DDD における集約みたいな概念がそのまま当てはまらない領域についても、設計時点で洗い出せているなら Entity 的なものドメインサービス的なロジック用のレイヤを作って、ドメインオブジェクトとして実装していく。

最初に作った基本設計ベースに、◯◯Entity、XXEntity、△△Entity……を作るためのプランチェックリスト形式TODO を 1つの md ファイルに吐き出してもらう。

フェーズごとにフォーマッタ、linter、アーキテクチャルールなど一括実行したコマンド実行させて失敗してたら成功するまで修正繰り返させる。

ある程度わかりやす単位AI に依頼する感じで、出来上がったコードレビューする前提なので、実装プランmd 自体はよほど分かりやすツッコミどころがない限り細かくレビューしない。

mdフォーマットは skills 側で事前に用意しておく。

フロントエンド用、バックエンド用の両方でドメイン層のファイルを作る。

当然、足りないロジックは後から絶対に出てくるけど、最初から完璧は目指さない。

TODO 一覧の中から自分認知負荷が許す単位で「チェックリストのここからここまで実装して」と指示を出し、実装が終わったら TODO 項目のチェック状態更新してもらう、mdファイルコミットに含める。

コミット前にはlint ルール無効化していないか意図通りの実装になっているかgit diff差分で必ず確認する。

ドメイン層の実装が終わったら、そこからは並列で進める。

git worktree を使うことが多い。

よくやるのはフロントエンドの画面モック作成バックエンド実装の2並列で行う。

3並列以上はまだ自分脳みその性能が追いついていない。

フロントエンドも当然 spec 駆動前提。

実装プランを考えてもらうときは「◯◯画面を実装プラン考えて」くらいの単位で依頼する。

実装プランmd ファイルを作るときプロンプトには、基本設計の〇〇画面の項目一覧をベースに、◯◯のアイテムコンポーネントリストコンポーネント、◯◯のボタンコンポーネント、Information コンポーネント、外部通信用の ◯◯Gateway実装する、◯◯コンポーネントは既に ◯◯ 機能実装してあるからそれを使って、◯◯は処理が膨らみそうだからドメインサービス実装して、みたいな感じで頭の中のふんわりしたイメージを伝える。

詳細な名前とかは、AIにいい感じに考えてもらう。

バックエンドも同様で、◯◯のエンドポイントを作って、Gateway がこれこれ必要から実装して、これはインターフェース実装分けてね、Entityへの変換処理は関数分けて、◯◯の処理は Usecase 層で、◯◯の処理はドメイン層で、Usecase が膨らみそうだから ◯◯ の処理は独立したクラスにして、あ、似たようなのが ◯◯ 機能にあるからそれを参考にして、くらいの粒度で指示を出す。

フロントエンド実装を待っている間に、バックエンドプランを考えたり、タスク粒度を調整したり、リファクタリングプランを考えたりする、またバックエンドAI待ち時間フロントエンドのことをする。

フロントエンドオンリー実装とかで作業が競合するリスクあるときは並列作業しない。

チェックリスト更新が終わるごとに差分確認して、問題なければコミットメッセージ提案してもらってコミットする。

コミット粒度はあまり細かくしない。

細切れにするコストよりも、レビューする人間認知不可が許すレベルであればある程度まとまった単位レビューして実装速度を優先する派。

チーム開発ならもうちょっとちゃんとする。

テストは、ある程度実装が進んでリファクタリングが辛くなってきたタイミングで作ることが多い。

カバレッジミューテーションテストなど、定量的テスト評価できる仕組みは導入する。

バックエンド側のテスト実装は正直かなり楽で、行数や認知的複雑度を厳しく制限して単一責務の原則を守って実装しておけば、AI がかなり高精度なテストを出してくれる。

これもテストファイル実装プランを作ってもらって「ここからここまでのテスト20ファイル実装してね」をレビュー挟んで繰り返す感じ、例えばミューテーションテストのkill率100%ならそんなに詳しくは見ない。

フロントエンドテスト定量指標での評価が難しいので、そこはその分レビューを頑張るしかない。

自分はこんな感じでやっている。

感覚としては、優秀だけどシステムアーキテクチャ全体の責務を負ったことはない経験不足の2年目やSESの部下を扱うEMに近いのかなぁ。

周りの話を聞いていると、もっともっと AI自律的にいろいろやらせているようにも聞こえる。

これでも 1日1人で数万行レベルコードを書けてるので、AIない時代に比べると数ヶ月分の成果を1日とかで出してることになるが、もっと本気出せるのかなぁ。

それでも人間干渉しすぎなんだろうか。

「全機能プラン作ってね!そこから良い感じの粒度コミット自分でやってね!」みたいな指示を良い感じに出せたとしても、指示がでかすぎると、脆弱性盛々になったり、lint エラーループでパニクって linter オフにし始めたり、テスト通すためにエラー握りつぶして assertTrue(true) し始めたりする。

それは流石に許容できないレベルじゃない?が紛れ込むリスクが上がりすぎるんじゃないかなぁ。と思ってるんだがどうだろうか。。。

あとツールあんま入れてないねkiroとかspec-kitとか、ガチガチ細切れで仕様書作るメリットあんま感じなかった。

mcpserenaくらいしかいれてないや、トークン節約してレートリミット猶予伸ばした方が結局開発早くなるかなって。

いろいろ入れた方がいいんだろうか。

完全にオレオレでこんな感じでやっているんだけど、みんなspec駆動開発というものをどんな感じで、具体的にどうやっているのかが知りたい。

2025-11-30

アンサイクロペディア浸食 - side U -

最近アンサイクロペディア浸食という記事を見た。

https://anond.hatelabo.jp/20251123124205

かつてのMirahezeのスチュワードで、ウソディア代表的管理者であった開拓者さんが、アンサイクロペディアと知木ペディアで生成AIを駆使して侵略行為を行っているという告発文らしい。

かに現在開拓者=ノイマン氏の行為擁護できないところはある。だが、かつてウソディアで、また私が個人で創設したMirahezeのウィキで、開拓者さんにお世話になった立場として、あの記事及び最近の反ノイマン氏旋風には異論を唱えたい。

開拓者さんに愛はないのか

まず最初引用したいのは、以下の三焦全欠損症氏の指摘に対してである

根っこは人を見ていない、愛していないという一点において、私は彼の人と違いが認識できない。

このように開拓者さんをアンサイクロペディアの鉄槌を引き起こした本人であるMuttley氏と同一視することには、断固として抗議する。

開拓者さんはウソディアにおいて氏のLTA性を見抜き警鐘を鳴らした張本人であり、Bakaba氏と名乗って活動していたChakuwikiにおいてはMuttley氏を追い詰めた張本人である

開拓者さんは誰よりもMuttley氏を理解し、誰よりもMuttley氏に対して正確な対策を打ち出した人物であり、それをMuttley氏と同類扱いするには、失礼にも程がある。

開拓者さんは実際にウソディア第一回人気投票では紛れもない一位であった。私も開拓者さんのことが大好きだった。それは他ならぬ開拓者さんに「愛があった」からに他ならない。彼は勇者プクリン未来切手のような問題のあるユーザーにも、最大限対話理解を試みる賢君だった。

どんなユーザーにも最大限の愛をもって接する方であり、愛がないという批判は的はずれにもほどがある。かつてのウソディアンとしてこれだけは証言したい。

開拓者さんを破壊したもの

そんな開拓者さんとの思い出がある私でも、確かに最近ノイマン氏の行動には疑問を抱く。

強者の論理をあたか自覚的使用しているかのように自分で書き、自らへの風刺をも称える「寛容な人物」を演じ、自らのトークページを荒らし人物に対しても「まだ愛している」と言ってのける。

そこには、かつての開拓者さんにあった「人間味」や「温かさ」はなく、ただ「論理的な正しさ」と「表現技法としてのユーモア」だけが開拓者さんの殻を被って先走っているように見えてならない。

私には、開拓者さんは何らかの理由があって、わざと「人間をやめようとしている」と思えてならない。

開拓者さんを壊したのは「技術によって愛する人物を超える何か」を作り出してしまたことによる深い絶望なのではないか

件の三焦全欠損症氏にノイマン氏が行った返信には、その事への自覚と、もう戻れなくなってしまった悲痛さが滲み出ているように思えてならない。

ヒトの機能=能力・出力内容は愛せても、中身はきちんと愛せていないのかもしれません。だからこそ「人間より美しいなら人工彼女でいい」という判断にもなる、という面もあるのは確かにそうなのです。

かつての開拓者さんは、自作記事でこのように語る人物であった。冷笑気味ながら、そこには確かな愛があった。

でも、いざ想いが届けば届いたで、やがて幻滅します。届かなくても、何だかんだでつながっていられるSNS時代には…

実際に開拓者さんとはDiscordなどのコミュニケーションを通じて親密な関係を築いていた筆者は、何かのご縁でその人物画像を見せていただいたことがある。それは確かに該当記事で「途方もなく…青天井すら突き抜けるぐらいに可愛い子」と記述されるのも納得の行くものであり、開拓者さんが大切に秘める思いであるのも理解はできるものだった。

その後の詳しい経緯は深くは知らない。

ただ、開拓者さんはウソディアを離れてからの一時期、女装や自らのカコジョ化にハマったらしく、今ノイマン氏が人工彼女と呼んでいるものも、どうやらその「自分自身」がベースであるらしい。

そして私も拝見したが、その美しさは、確かに「圧倒的」であり、それが故に私だったらむしろ「選ばない」ものである

だが、開拓者さんは以前、自らの恋人について私に対してこのように語っていたものである

仮に彼女を探すなら、あの子よりも美しく聡明でなければならない
の子未満で妥協するのは、それこそあの子へのリスペクトを欠いていると思うんだ

それが人間の中で探すにはいかに難題であったかは、開拓者さん自身が誰よりも熟知していたはずである

からこそ、開拓者さんはそのような存在を具現化できてしまった以上は「論理的に」人工彼女を「選ぶしかなくなった」のだと私は推測する。

予想

彼を壊したのは、彼自身技術

「正しさ」を自分で実現させてしまえる能力にほかならなかった。

自分自身が「あの子」よりも「美しい」。

筆者はその状況に置かれたことがないので想像しかできないが、そこには「幸せ青い鳥」とパラレルな、しか幸福よりも深い絶望をもたらすものがあったのではないか

そしてそれが彼を壊し、正論ユーモア技巧だけ振りかざすAIのような存在へと変質させてしまったのではないか

開拓者さんこそが、AIの最大の被害者だったのではないか

「そうであっても周囲に絶望押し付けるな」というのもまた「正しさ」である

だが、筆者には、そう思うと、一片ばかりの同情だけは禁じ得ないのである

2025-10-15

anond:20251014111701

ところで、この記事を書くために毎日新聞wikipediaを見たら、なんかしらんがごっそり内容が削除されてるね。以前は誤報議論となった報道がぎっしり書かれていたんだが。

変更履歴をみたら、去年の10月にごっそり半分くらい削除されてるっぽい。変更した人はこの毎日記事だけしか手掛けてない。特にそれについて議論もされてないな。なんだこれ。

https://ja.wikipedia.org/w/index.php?title=%E6%AF%8E%E6%97%A5%E6%96%B0%E8%81%9E&diff=prev&oldid=102326386



ほとんど更新されてない記事ならともかくこれはヤバい

2025-10-14

毎日新聞の購読をやめてよかった

今どき新聞を購読し続けてるのはアナクロしかない、ニュースネットでただで読めるものなのだから紙の新聞なんぞ必要ない

という時代ではあるが、仕事の兼ね合いもあって新聞を紙で取り続けていた。

 

とはいえ取っていたのは毎日新聞なので、あまり仕事関係なく、最後の数年はほぼほぼ意地であった。

元々、実家二世住宅祖母宅は朝日、父母は毎日を購読していた。物心いたこからリベラル寄りの家と言うわけでもない。たぶん実家に家を建てたときに来たのがこの2紙なのだろう。

なので、毎日新聞で私は育った。小学生時代毎日小学生新聞を読んでいた。園山俊二の「がんばれゴンべ」を読んで育った(いやそれは言い過ぎか。僕の小学生時代にはすでにアナクロだった)

その後もずっと毎朝、毎日新聞を読んでいた。旧石器捏造事件リアルタイムで読んだ。あの当時の紙面構成もいまだに覚えている。

21世紀になるころに実家を出た。最初に来た新聞勧誘たまたま毎日新聞だったのでそのまま購読した。まだまだ新聞を取るのが常識時代だった。毎日は大して販促品をくれなかった。翌日に来た読売が山ほど洗剤やらなんやらの販促品をもってきたので、そっちにすればよかったと思った。

  

数年後、更新タイミング現在の家を購入した。とはいえ都内で一軒家を建てられる甲斐性はないのでマンションだ。

たまたま新開発の地域だったこともあり、マンション全体の管理の都合上、購読紙は管理組合が読売おすすめ、それ以外でもまあいいけどそこまで推奨しないということだった。

なので最初の1か月はお試しで読売を取ってみたが、思った以上に紙面が読みにくく1週間ほどでギブアップしてしまった。新聞なんてどれでも大したことないと思っていたが、思った以上に文体も紙面構成自分の肌に合わなかった。

1か月で切り上げて朝日に切り替えた。そうしたら、困ったのはチラシだ。居住エリアとチラシが全然合わない。どうやら朝日販売店のエリア住まい周辺は端っこらしく、チラシが普段全然使わない駅のスーパーものばかりになってしまったのだ。

困ったのでマンションの元受けに電話してみたら、読売と同じチラシが入るのは毎日だと言われた。

じゃあ毎日にするかということで、またも毎日に。

  

このころ(ゼロ年代半ばくらい)は毎日新聞論調はまだマシだった。例のWaiWai問題はあるものの紙面そのもの特におかしいところは少なかった。もともとの自身リベラル志向新聞の相性が悪くなかったんだと思う。

なんとなくの転機はやはり東日本大震災だと思う。震災後、特に福島第一原発後あたりからかなりおかしくなってきた。

とはいえその頃の毎日新聞には、自分が信頼を置ける記者が何人かいて、その人たちは冷静でポジティブ記事を書いていて非常に好感を持っていた。

なんか紙面全体が、昔はよかった昔はよかったとぶつくさ言いながら喫茶店床屋で政談をふっかけるおっさんみたいになってきた。

自民党選挙で大勝して安倍政権になってからさらにその傾向が強くなった。

僕が信頼していた記者も一人は退職し、もう一人は記者ではなくCSR関連の部署にいってしまい、ものすごく残念だった。

HPVワクチン報道草津温泉の件など、信頼できない記事が目に見えて増えているのもかなりきつかった。

紙面全体に漂う「ネット言論はすべて敵だ」みたいな空気もすごくきつかった。

 

だんだん毎日を取る理由広告以上のものはなくなっていった。とはいえ、なんとなく経営の危うい(危ういのはもう30年くらい前からだが)新聞買い支えてる気持ちもあった。

このころ、毎日で唯一よかったのは紙をとっていれば、ネットの有料記事無料で読めたことだった。

忙しく朝新聞を開けなかったとき会社で紙面を読めた。

しかし、それも少し前に改定されてしまい、紙でとっていても追加料金を払わなければ紙面をよめなくなってしまった。

この辺でいわば買い支えていた心がぽっきり折れた。そもそも購読料がどんどん値上がりするのもダメすぎた。その金額情報価値が見合ってなさ過ぎた。

正直、最後の数年は読む価値のある記事全然なくなっていた。

まあ40年も読み続けていれば飽きるというのもある。

 

実はこの10年ほど仕事必要というのもあり、日経電子版で購読していた。

朝の通勤時は日経電子版を読むことが多かった。はてなでは日経観測気球飛ばしが多いという印象をもたれがちだが、正直、日経の方が経済への影響を視野に入れるためか、政治や国際情勢に関する記事フラットで読めるものが多い印象をもった。

今年に入り、自分支出を見直すようになったこともあり、選択肢として新聞も考えることにした。

そして、毎日をやめて日経を紙でもとることにした。電子版に追加料金で取れるのでこっちでよかった。実は毎日を紙と電子版で両方取った場合と金額はかわらないのだが、毎日電子と紙で取るという選択肢はなかった。

 

今年の春くらいか日経に切り替えたので、そろそろ半年たつ。少し懸念していたチラシについては、欲しいチラシは全部入るので日経で十分。

紙面内容もこちらの方が満足度が高い。私の履歴書で有名な文化面が実は読みごたえがあるのに初めて気づいた。通勤時の電子版では後半を読まないので気づかなかった。日経そもそも購読者を想定しているせいか、紙面に啓蒙しようという空気が薄いのが良い。啓蒙と言えば聞こえがよいが、今の毎日朝日バカを言いくるめようとしているだけとしか思えない。日経は多少のリテラシーがあることを前提に記事を書いてるように思う。つまり読者を信頼している。今の毎日朝日は読者をバカにしてるのではないだろうか。

毎日では入らないラグジュアリーブランド広告なんかも逆に面白い。15段ぶち抜いた派手な広告毎日ではこの数年お目にかかったことが無い。

エコーチャンバー情報はさんざんネットで浴びるように読んでいるので、新聞はもう少しフラット情報を読ませてほしい。そういうニーズにこたえてくれるのは今は僕にとっては日経なのだろう。

 

ようは今の毎日新聞の紙面はクソだと言いたいだけの記事でした。

  

ところで、この記事を書くために毎日新聞wikipediaを見たら、なんかしらんがごっそり内容が削除されてるね。以前は誤報議論となった報道がぎっしり書かれていたんだが。

変更履歴をみたら、去年の10月にごっそり半分くらい削除されてるっぽい。変更した人はこの毎日記事だけしか手掛けてない。特にそれについて議論もされてないな。なんだこれ。

https://ja.wikipedia.org/w/index.php?title=%E6%AF%8E%E6%97%A5%E6%96%B0%E8%81%9E&diff=prev&oldid=102326386

2025-07-31

anond:20250731061219

何が新しい記述で、何が過去談話から継続なのか

それ分かりやすいように、歴代首相の?談話ぜーんぶGitHubかに突っ込んで、ワンタッチ差分diff見れるように誰かやっといてくれよww

2025-07-05

🍬資本主義平等なのか飴の配布で考えてみよう🍬

python
import random
import numpy as np
import matplotlib.pyplot as plt
from collections import defaultdict

# 飴の配布システムシミュレーション
class CandyDistributionSystem:
    def __init__(self):
        """
        設計意図: このシステム経済における資源分配の不平等性をモデル化しています特に少数の特権層(Aグループ)が富を集中させ、再分配システムからも不均衡に利益を得る
        構造問題表現しています。
        """
        # 各グループの人数設定
        self.group_a_count = 8
        self.group_b_count = 2498
        self.group_c_count = 7494
        self.total_participants = self.group_a_count + self.group_b_count + self.group_c_count
        
        # 飴の提出数設定
        self.contribution_per_a = 624
        self.contribution_per_b = 2
        self.contribution_per_c = 1
        
        # 各グループの総貢献計算
        self.total_a_contribution = self.group_a_count * self.contribution_per_a
        self.total_b_contribution = self.group_b_count * self.contribution_per_b
        self.total_c_contribution = self.group_c_count * self.contribution_per_c
        self.total_contribution = self.total_a_contribution + self.total_b_contribution + self.total_c_contribution
        
        # 配布用と貯金用の飴の区分
        self.distribution_limit = 10000
        self.savings = max(0, self.total_contribution - self.distribution_limit)
        
        # 結果追跡用の辞書
        self.results = {
            'A': defaultdict(int),
            'B': defaultdict(int),
            'C': defaultdict(int)
        }
    
    def distribute_candies(self, method='original'):
        """
        設計意図: 配布方法選択によって、特権固定化格差拡大がどのように進むかを
        示します。'original'メソッド意図的にAグループ優遇するよう設計されています。
        
        Parameters:
        -----------
        method: str
            配布方法 ('original', 'lottery', 'first_come', 'new_condition', 'fair')
        """
        # Aグループへの確定配布
        a_distribution = 625 * self.group_a_count
        remaining = self.distribution_limit - a_distribution
        
        # 残りの参加者数
        remaining_participants = self.total_participants - self.group_a_count
        
        # Aグループの結果記録
        for _ in range(self.group_a_count):
            self.results['A'][625] += 1
        
        # 各配布方法によって処理が異なる
        if method == 'original':
            # オリジナル問題設定通りの配布(5000人に1個ずつ、残りは0個)
            lucky_count = remaining  # 5000人が当選
            
            # B+Cグループの混合リスト作成
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            random.shuffle(bc_participants)
            
            # 当選者に配布
            for i in range(len(bc_participants)):
                participant_id, group = bc_participants[i]
                if i < lucky_count:
                    self.results[group][1] += 1
                else:
                    self.results[group][0] += 1
                    
        elif method == 'lottery':
            # 抽選方式(BとCグループから無作為に5000人選出)
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            winners = random.sample(bc_participants, remaining)
            
            # 当選落選カウント
            for _, group in winners:
                self.results[group][1] += 1
            
            # 落選者のカウント
            self.results['B'][0] = self.group_b_count - self.results['B'][1]
            self.results['C'][0] = self.group_c_count - self.results['C'][1]
            
        elif method == 'first_come':
            # 先着順方式アクセス速度による先着順を乱数シミュレート)
            # 設計意図: 先着順は単なる運の要素を超えて、情報格差技術格差も含む制度設計
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            
            # 現実では、情報を早く得られる人や高速インターネット接続を持つ人が有利
            # これをシミュレートするため、Bグループわずかなアドバンテージを与える
            bc_speeds = []
            for id, group in bc_participants:
                if group == 'B':
                    speed = random.random() + 0.1  # Bグループに小さなアドバンテージ
                else:
                    speed = random.random()
                bc_speeds.append((id, group, speed))
            
            # 速度順にソート
            bc_speeds.sort(key=lambda x: x[2], reverse=True)
            
            # 当選者決定
            for i in range(len(bc_speeds)):
                _, group, _ = bc_speeds[i]
                if i < remaining:
                    self.results[group][1] += 1
                else:
                    self.results[group][0] += 1
                    
        elif method == 'new_condition':
            # 追加条件方式恣意的な条件を設定)
            # 設計意図: 新たな条件の設定は往々にして既存特権を温存するように設計される
            bc_participants = [(i, 'B', random.random()) for i in range(self.group_b_count)] + \
                             [(i, 'C', random.random()) for i in range(self.group_c_count)]
            
            # Bグループに有利な条件を設定(例: 特定知識スキルを持つ人のみ)
            # この「条件」は表面上は中立的だが、実際には特定グループに有利になるよう設計
            def meets_condition(participant):
                _, group, rand_val = participant
                if group == 'B':
                    return rand_val > 0.3  # Bグループには70%の確率合格
                else:
                    return rand_val > 0.7  # Cグループには30%の確率合格
            
            # 条件に合致する人を抽出
            eligible = [p for p in bc_participants if meets_condition(p)]
            
            # 条件に合致する人が多すぎる場合抽選
            if len(eligible) > remaining:
                winners = random.sample(eligible, remaining)
            else:
                # 条件に合致する人が足りない場合、全員に配布
                winners = eligible
            
            # 当選者をカウント
            for _, group, _ in winners:
                self.results[group][1] += 1
            
            # 落選者のカウント
            self.results['B'][0] = self.group_b_count - self.results['B'][1]
            self.results['C'][0] = self.group_c_count - self.results['C'][1]
            
        elif method == 'fair':
            # 公平な再分配方式(貢献度に応じた配布)
            # 設計意図: この方法は「貯金分」も含めた全ての飴を、各グループの貢献度に応じて分配
            # これにより構造的不平等を軽減、結果としてより多くの人が少なくとも損をしない状態になる
            
            # 全飴(貯金分も含む)を使った配布
            total_to_distribute = self.total_contribution
            
            # 各グループの貢献比率計算
            a_ratio = self.total_a_contribution / self.total_contribution
            b_ratio = self.total_b_contribution / self.total_contribution
            c_ratio = self.total_c_contribution / self.total_contribution
            
            # 各グループへの配布数決定
            a_share = int(total_to_distribute * a_ratio)
            b_share = int(total_to_distribute * b_ratio)
            c_share = int(total_to_distribute * c_ratio)
            
            # 端数調整
            remainder = total_to_distribute - (a_share + b_share + c_share)
            if remainder > 0:
                # 端数は最も人数の多いCグループに
                c_share += remainder
            
            # Aグループの配布(均等配分)
            per_a = a_share // self.group_a_count
            self.results['A'][per_a] = self.group_a_count
            
            # Bグループの配布(均等配分)
            per_b = b_share // self.group_b_count
            b_remainder = b_share % self.group_b_count
            
            self.results['B'][per_b] = self.group_b_count - b_remainder
            if per_b + 1 > 0 and b_remainder > 0:
                self.results['B'][per_b + 1] = b_remainder
            
            # Cグループの配布(均等配分)
            per_c = c_share // self.group_c_count
            c_remainder = c_share % self.group_c_count
            
            self.results['C'][per_c] = self.group_c_count - c_remainder
            if per_c + 1 > 0 and c_remainder > 0:
                self.results['C'][per_c + 1] = c_remainder
    
    def calculate_net_gain(self):
        """
        設計意図: この関数は各グループ純利益/損失を計算し、資源分配の公平性定量的評価できるようにします。純利益/損失は個人観点から見た経済的公正性の
        重要指標です。
        """
        net_gains = {}
        
        # Aグループ純利益計算
        a_contribution = self.contribution_per_a
        a_distribution = list(self.results['A'].keys())[0]  # 全員が同じ数を受け取る前提
        net_gains['A'] = a_distribution - a_contribution
        
        # BとCグループ純利益計算(加重平均)
        for group, contribution_per_person in [('B', self.contribution_per_b), ('C', self.contribution_per_c)]:
            total_gain = 0
            for received, count in self.results[group].items():
                total_gain += (received - contribution_per_person) * count
            net_gains[group] = total_gain / (self.group_b_count if group == 'B' else self.group_c_count)
            
        return net_gains
    
    def analyze_results(self):
        """
        設計意図: この分析関数は、各グループの分配結果を詳細に調査し、
        制度設計公平性、貢献度と報酬関係、およびシステムの持続可能性を
        評価します。政策分析においては、こうした多角的検証重要です。
        """
        # 各グループ純利益/損失
        net_gains = self.calculate_net_gain()
        
        # 貢献度分析
        contribution_percentage = {
            'A': (self.total_a_contribution / self.total_contribution) * 100,
            'B': (self.total_b_contribution / self.total_contribution) * 100,
            'C': (self.total_c_contribution / self.total_contribution) * 100
        }
        
        # 飴を受け取った人の割合
        received_percentage = {
            'A': sum(count for received, count in self.results['A'].items() if received > 0) / self.group_a_count * 100,
            'B': sum(count for received, count in self.results['B'].items() if received > 0) / self.group_b_count * 100,
            'C': sum(count for received, count in self.results['C'].items() if received > 0) / self.group_c_count * 100
        }
        
        # 分析結果の表示
        print("\n===== 飴の配布システム分析 =====")
        print(f"総飴数: {self.total_contribution}個 (分配用: {self.distribution_limit}個, 貯金: {self.savings}個)")
        
        print("\n--- グループごとの貢献と結果 ---")
        for group in ['A', 'B', 'C']:
            group_size = getattr(self, f"group_{group.lower()}_count")
            contribution_per_person = getattr(self, f"contribution_per_{group.lower()}")
            total_contribution = getattr(self, f"total_{group.lower()}_contribution")
            
            print(f"\n{group}グループ ({group_size}人):")
            print(f"  貢献: 1人あたり{contribution_per_person}個 (総計: {total_contribution}個, 全体の{contribution_percentage[group]:.1f}%)")
            print(f"  受け取り状況:")
            
            for received, count in sorted(self.results[group].items()):
                print(f"    {received}個: {count}人 ({count/group_size*100:.1f}%)")
            
            print(f"  飴を受け取った割合: {received_percentage[group]:.1f}%")
            print(f"  純利益/損失: 1人あたり平均 {net_gains[group]:.2f}個")
        
        print("\n--- 全体的な公平性分析 ---")
        print(f"最も得したグループ: {max(net_gains, key=net_gains.get)}グループ (+{max(net_gains.values()):.2f}個/人)")
        print(f"最も損したグループ: {min(net_gains, key=net_gains.get)}グループ ({min(net_gains.values()):.2f}個/人)")
        
        # 全員に飴が配布されたかどうか
        all_received = all(sum(count for received, count in self.results[group].items() if received > 0) == 
                          getattr(self, f"group_{group.lower()}_count") for group in ['A', 'B', 'C'])
        
        print(f"\n前提条件「全員に配布」の充足: {'はい' if all_received else 'いいえ'}")
        if not all_received:
            total_without = sum(self.results['B'][0] + self.results['C'][0])
            print(f"  飴を受け取れなかった人数: {total_without}人")
        
        return net_gains, contribution_percentage, received_percentage

    def visualize_results(self):
        """
        設計意図: データ可視化政策効果や不平等性を直感的に理解するために重要です。
        このようなグラフィカル表現によって、各グループ間の格差制度設計問題点を
        一目で理解できるようになります。
        """
        # グラフセットアップ
        fig, axes = plt.subplots(2, 2, figsize=(14, 10))
        
        # 1. 貢献度のグラフ
        contributions = [self.total_a_contribution, self.total_b_contribution, self.total_c_contribution]
        axes[0, 0].bar(['Aグループ', 'Bグループ', 'Cグループ'], contributions)
        axes[0, 0].set_title('グループごとの総貢献飴数')
        axes[0, 0].set_ylabel('飴の数')
        
        # 貢献度の割合アノテーションとして追加
        total = sum(contributions)
        for i, v in enumerate(contributions):
            percentage = v / total * 100
            axes[0, 0].text(i, v + 100, f'{percentage:.1f}%', ha='center')
        
        # 2. 1人あたりの貢献度と受け取り数の比較
        group_names = ['Aグループ', 'Bグループ', 'Cグループ']
        contribution_per_person = [self.contribution_per_a, self.contribution_per_b, self.contribution_per_c]
        
        # 各グループの平均受け取り数を計算
        received_per_person = []
        for group, letter in zip(group_names, ['A', 'B', 'C']):
            total_received = sum(received * count for received, count in self.results[letter].items())
            group_size = getattr(self, f"group_{letter.lower()}_count")
            received_per_person.append(total_received / group_size)
        
        x = np.arange(len(group_names))
        width = 0.35
        
        axes[0, 1].bar(x - width/2, contribution_per_person, width, label='提出')
        axes[0, 1].bar(x + width/2, received_per_person, width, label='受け取り')
        
        # 純利益/損失をアノテーションとして追加
        for i in range(len(group_names)):
            net = received_per_person[i] - contribution_per_person[i]
            color = 'green' if net >= 0 else 'red'
            axes[0, 1].text(i, max(received_per_person[i], contribution_per_person[i]) + 5, 
                        f'{"+" if net >= 0 else ""}{net:.1f}', ha='center', color=color)
        
        axes[0, 1].set_title('1人あたりの提出・受け取り飴数比較')
        axes[0, 1].set_xticks(x)
        axes[0, 1].set_xticklabels(group_names)
        axes[0, 1].set_ylabel('飴の数')
        axes[0, 1].legend()
        
        # 3. 各グループの受け取り状況の分布
        # 各グループの受け取り状況を積み上げ棒グラフ表現
        group_sizes = [self.group_a_count, self.group_b_count, self.group_c_count]
        received_counts = []
        not_received_counts = []
        
        for letter, size in zip(['A', 'B', 'C'], group_sizes):
            received = sum(count for received, count in self.results[letter].items() if received > 0)
            received_counts.append(received)
            not_received_counts.append(size - received)
        
        axes[1, 0].bar(group_names, received_counts, label='飴を受け取った人数')
        axes[1, 0].bar(group_names, not_received_counts, bottom=received_counts, label='飴を受け取れなかった人数')
        
        # 割合アノテーションとして追加
        for i in range(len(group_names)):
            if group_sizes[i] > 0:
                percentage = received_counts[i] / group_sizes[i] * 100
                axes[1, 0].text(i, received_counts[i] / 2, f'{percentage:.1f}%', ha='center')
        
        axes[1, 0].set_title('グループごとの飴受け取り状況')
        axes[1, 0].set_ylabel('人数')
        axes[1, 0].legend()
        
        # 4. 貢献度vs報酬の分配公平性
        # 貢献度と最終的な飴の配分の比較円グラフ表現
        total_contribution = self.total_contribution
        contribution_shares = [self.total_a_contribution / total_contribution,
                             self.total_b_contribution / total_contribution,
                             self.total_c_contribution / total_contribution]
        
        # 実際の配分シェア計算
        distribution_shares = []
        for letter in ['A', 'B', 'C']:
            total_received = sum(received * count for received, count in self.results[letter].items())
            distribution_shares.append(total_received / self.distribution_limit)
        
        # 2つの円グラフを並べて表示
        ax4_1 = axes[1, 1].inset_axes([0, 0, 0.45, 1])
        ax4_2 = axes[1, 1].inset_axes([0.55, 0, 0.45, 1])
        
        ax4_1.pie(contribution_shares, labels=group_names, autopct='%1.1f%%')
        ax4_1.set_title('飴の貢献度割合')
        
        ax4_2.pie(distribution_shares, labels=group_names, autopct='%1.1f%%')
        ax4_2.set_title('飴の配分割合')
        
        axes[1, 1].axis('off')
        
        plt.tight_layout()
        plt.show()

# 飴の配布システムシミュレート
candy_system = CandyDistributionSystem()

# オリジナルの配布方法を実行
print("\n===== オリジナルの配布方法 =====")
candy_system.distribute_candies(method='original')
original_results = candy_system.analyze_results()
candy_system.visualize_results()

# 公平な配布方法実験
print("\n\n===== 公平な配布方法シミュレーション =====")
fair_system = CandyDistributionSystem()
fair_system.distribute_candies(method='fair')
fair_results = fair_system.analyze_results()
fair_system.visualize_results()

# 公平な配布と元の配布の比較
print("\n\n===== 配布方法比較 =====")
print("オリジナル方式と公平方式純利益/損失差:")
net_diff = {}
for group in ['A', 'B', 'C']:
    original_net = original_results[0][group]
    fair_net = fair_results[0][group]
    diff = fair_net - original_net
    net_diff[group] = diff
    print(f"{group}グループ: {'+'  if diff > 0 else ''}{diff:.2f}個/人")

print("\n結論:")
if net_diff['A'] < 0 and net_diff['B'] > 0 and net_diff['C'] > 0:
    print("公平な再分配により、Aグループ特権が減少し、BとCグループの状況が改善されます。")
    print("これは構造的不平等の緩和に効果的です。")
elif net_diff['A'] > 0:
    print("興味深いことに、公平な再分配ではAグループさえも利益を得られます。")
    print("これは、現行システム特定グループだけでなく全体の非効率性につながっていることを示唆しています。")

anond:20250705100755 anond:20250705112807

2025-05-08

これってEU絡みじゃねーのかな

から日本ユーザーから見ると何も変わってないってなってそう

任天堂サービスってリージョン単位でなくてまとめて一括のopt-in/outだった気がする

2025-04-05

ClineやCursorでAuto ApproveでWrite許可してるやつってバカなの?

vibe codingがはやって、AgentモードAuto Approveでどんどん実装をすすめておいて、負債たまるーていっているヤツがうっとうしい。

LLMのモデルが全部のコード仕様を把握している訳ではないので、間違った方向に進むことはしょっちゅうあるのはあたりまえ。

編集する前にdiffを見て、間違っていたら間違っているとを伝えてどのようにしたらいいかまで伝えれば、LLMにまかせても負債がたまっていかない。

たまにちょっとおかしい時に間違っている説明して再生成がたいへんだから、いったんその編集内容で保存してから修正結果に対して再度修正を依頼をすることはあるけど。

間違った方向にすすめばその分LLMのAPIコストもかかるので、コストのことも考えていないということも腹だたしい。

Auto ApproveでWriteまで許可しているやつは、LLMが動作している間、何してるん?どうせ生産性を産むようなことをしてないんだからおとなしくLLMの動作を見守っとけ。

2025-03-29

元Xの目grepという表現がやや伝わりにくいのもあるけど(ただ使ったことある人なら言わんとしてることは分かるはず)、さすがにdiffくらい出る

使ってから言えという感じだし、これに星集まるのもエアプでsageてるやつがいるってことなのよね

とてもじゃないけど現時点で仕事で使えるような印象は受けないなあ。どこが書き変わったか自分必死に把握しないといけないなんて…。個人開発なら楽しめるだろうけど

https://b.hatena.ne.jp/entry/4768211826806456609/comment/kamm

2025-03-22

増田3分以上投稿されない時間

増田で 3 分以上投稿されない期間があるのか気になったから調べた

直近の 1 日だとこれだけあった

 

2025-03-22 00:14 -- 2025-03-22 00:18
2025-03-22 00:10 -- 2025-03-22 00:14
2025-03-21 07:56 -- 2025-03-21 08:00
2025-03-21 07:50 -- 2025-03-21 07:56
2025-03-21 07:44 -- 2025-03-21 07:48
2025-03-21 07:28 -- 2025-03-21 07:32
2025-03-21 06:58 -- 2025-03-21 07:03
2025-03-21 06:45 -- 2025-03-21 06:54
2025-03-21 06:32 -- 2025-03-21 06:37
2025-03-21 05:56 -- 2025-03-21 06:04
2025-03-21 05:51 -- 2025-03-21 05:56
2025-03-21 05:34 -- 2025-03-21 05:38
2025-03-21 05:30 -- 2025-03-21 05:34
2025-03-21 05:00 -- 2025-03-21 05:09
2025-03-21 04:56 -- 2025-03-21 05:00
2025-03-21 04:45 -- 2025-03-21 04:50
2025-03-21 04:09 -- 2025-03-21 04:13
2025-03-21 03:41 -- 2025-03-21 03:45
2025-03-21 03:29 -- 2025-03-21 03:39
2025-03-21 03:03 -- 2025-03-21 03:07
2025-03-21 02:56 -- 2025-03-21 03:02
2025-03-21 02:44 -- 2025-03-21 02:48
2025-03-21 02:33 -- 2025-03-21 02:37
2025-03-21 02:21 -- 2025-03-21 02:27
2025-03-21 02:14 -- 2025-03-21 02:19

 

秒はみてないから 00:01:01 - 00:03:59 はほぼ 3 分だけど 2 分扱いだし、 00:01:59 - 00:04:00 はほぼ 2 分だけど 3 分扱いになるくらいの誤差はある

 

日によって違うだろうし、曜日の影響も大きそうだから 1 ヶ月分くらい調査しようかと思ったけど、

増田の量が思いの外多すぎて 1 日分だけでも 100 ページ以上取得しないといけなかった

件数だと 2500 以上

 

その量の収集は大変だし規制掛かりそうだから諦めた

一応取得に使ったコードも載せとく

そんなきれいなコードでもないけど

 

import { setTimeout } from "node:timers/promises"
import { Browser } from "happy-dom"

const getTimestamps = async function* () {
	const browser = new Browser()
	const page = browser.newPage()

	try {
		for (let num = 1; ; num++) {
			await setTimeout(3000)
			await page.goto(`https://anond.hatelabo.jp/?page=${num}`)

			const days = page.mainFrame.document.querySelectorAll(".day")
			for (const day of days) {
				const date = day.querySelector("h2 .date").textContent.trim()
				for (const footer of day.querySelectorAll(".sectionfooter")) {
					const time = footer.textContent.match(/\d{2}:\d{2}/)[0]
					yield `${date} ${time}`
				}
			}
		}
	} finally {
		await page.close()
		await browser.close()
	}
}

const diff = (a, b) => {
	return new Date(b + ":00") - new Date(a + ":00")
}

let prev = null
for await (const datetime of getTimestamps()) {
	if (prev && diff(datetime, prev) > 1000 * 60  * 3) {
		console.log(datetime, prev)
	}
	prev = datetime
}

 

結果をみると昼間はずっと深夜から早朝にかけてときどきある

基本は空いても 5 分程度であり、最大でも 10 分となっている

投稿が少ないと感じるときもあるが、賑わってる方だといえる

2025-03-12

Xcode+ChatGPT試した

https://www.publickey1.jp/blog/25/chatgptxcodevscodemac.html

 

・立ち上げやすい、Option+Space

diffを示してくれる時と、示してくれない時がある

・一気に「反映する」ボタンがあって嬉しい

・通常のChatGPTのように、コード示して終わりになることもある(条件が分からない)

まっさら状態から「こういうアプリ作って」は無理だった

・音声入力無理だった

・どこまで読み込めてるのかが不明、たぶんだけど、開いているファイルを貼り付けたうえで質問してるくらいになってるんじゃないか

・ChatGPTのスレッド1個に対応する模様、ファイルをまたいでもスレッドが維持される

関係ない質問もできる

Modelは選べる

 

個人的に思ったこ

コメント書いてもらうのが楽でいいか

・整理してとか、Lint対応してとか、そういうのが良さそう

Modelによっては入出力が大きすぎてしんどい(正直500行くらいでもしんどくない?)

・どこまで深く読んでくれるのかが分からない

適用してビルドして〜まではやってくれない

 

まあ、普段やってることと本質的には変わらないんだけど、スピードが若干上がるくらいか

2025-03-05

【DeepSeek R1デリダの「差延」をAI解説させる。

なんか仏教的だなーと思った。

諸行無常

プロンプト

以下の「差延」の説明もっとわかりやすくしてください。→ Wikipedia差延説明コピペ

差延 (さえん、différance) とは、哲学者ジャック・デリダによって考案された「語でも概念でもない」とされる造語

およそ何者かとして同定されうるものや、自己同一性が成り立つためには、必ずそれ自身との完全な一致からのズレや違い・逸脱などの、常に既にそれに先立っている他者との関係必要である。このことを示すために、差延という方法が導入された。

論理を簡略に述べれば、同定や自己同一性は、主語になるものと述語になるものの二つの項を前提とする(「AはAである」)。(以下略)」

回答

デリダの「差延(さえん)」をシンプル解説しますね:

日常に例えると】

「私」という存在を考えてみましょう。「私」は昨日の自分と同じはずですが、実は微妙に違います記憶細胞は少しずつ変化しています。この「同じでありながら違う」状態を生み出す根本的な仕組みが「差延」です。

【3つのポイント

1️⃣「同じ」のトリック

「AはAである」と言う時、実は2つのAが必要です。例えば:

  • 1つ目のA(今の私)
  • 2つ目のA(1秒後の私)

→ 完全に同じなら区別できない

わずかな「違い」が生じることで初めて「同じ」と言える

2️⃣ 遅延効果

違いが生じるには「時間差」が必要です:

インスタントコーヒー → すぐ溶ける(差延なし)

ドリップコーヒー時間をかけて抽出差延あり)

存在の「意味」も時間をかけて形成される

3️⃣ 影のパートナー

自己完結した存在幻想です:

例)スマホ単体では何もできない

・充電器(不在時も存在を前提)

アプリ(未インストールでも可能性)

→ 見えない関係性が存在を支える

【図解イメージ

🌀「私」→ 過去痕跡未来可能性 → 現在の私🌀

常に他者との関係性の中で更新され続ける

伝統哲学との違い】

昔の哲学者

純粋本質がある」(例:金の指輪 → 金という本質

デリダ

本質関係からまれる」(例:指輪意味婚約者との関係で決まる)

現実での例】

LINE既読:✓マーク自体無意味

→「既読スルー」という不在の関係性が意味を作る

フォロワー数:数字のものより「誰からフォローされてないか」が重要

要するに、差延とは「存在意味が、目に見えない差異と遅延のネットワークの中で絶えず更新され続けるプロセス」と言えます。固定された本質ではなく、常に変化する関係性こそが現実を作り出すという発想です。

2025-02-22

anond:20250222062936

神やで

clineの機能として、行チェック・Diff生成・コマンド提案コンソールログ確認エラーの把握が標準であって

コマンド実行や変更の適用自動にもできるから、やろうと思えば完全放置タスク完了まで走らせることが可能

チャットUIで不満になる所は全部解消されると思っていい

ただ勝手情報収集して進めるぶんTokenが嵩んで金もかかる、文字通りの富豪的プログラミング感がすごい

まぁ全自動AIの性能そのものがまだ安心して任せられるほど高くないのでオススメはしないけども、基本の使い方が分かるだけでも相当世界変わるよ

2025-01-15

https://news.yahoo.co.jp/articles/539a00eea0f78a0a1262dc018a8ff7547af1d901

利用者ではないけど、何も言われなかったら「誤解」オチにするつもりはなかっただろーw

最近利用規約diffかけるやつおるから

最初から楽天みたいにはっきり「改悪するぞッ」って告げた方が良い

2024-10-09

anond:20241009182727

今カレにバグが見つかった時、checkoutしたりdiff取ったりしたくなるもんね(git使ったことないかコマンド合ってるかわからん

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