「PRINT」を含む日記 RSS

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

2026-07-02

anond:20260702181811

2014年3月20日頃には、シカゴオヘア国際空港の場面を撮影するため、マスキーゴン空港使用された。また、マスキーゴンの格納庫にあったエンブラエル145型機の胴体が、機内シーンの撮影に利用された。

2014年3月21日頃には、一部の場面がモール・オブ・アメリカおよびミネアポリスサードアベニュー橋周辺で撮影された。[29]

音楽

本作のサウンドトラックダニー・エルフマン作曲し、2015年7月24日にLakeshore Recordsから発売された。[30]

音楽監修はティファニー・アンダース担当し、サウンドトラックにはアラニス・モリセットR.E.M.ブライアン・イーノフェルトらの楽曲が収録されている。

さらに、パヴメントのバラードHere」をティダースティックスがカバーした音源使用されている。

ジェームズ・ポンソルト監督は『ComingSoon.net』のインタビューで次のように語っている。

「かなり早い段階からR.E.M.ブライアン・イーノは、デイヴィッド・リプスキーデイヴィッド・フォスター・ウォレスが一緒に過ごした時間象徴する存在になっていました。

二人は、どんな音楽を聴いているかについても話していたんです。

から私は、R.E.M.イーノ音楽映画に入れるべきだと最初から考えていました。」[31]

Soundtrack Dreams』でダニー・エルフマン音楽を評したミネアマンドゥテアヌは次のように書いている。

「『Walking the Dog』以降、すべてがぴたりとはまる。終盤でブライアン・イーノ楽曲が使われているのは偶然ではない。エルフマンはその部分で、自身の内なるイーノを呼び起こし、それは見事に魔法のような効果を生み出している。」[32]


評価

New York Daily News』紙のジョー・ニューマイヤーは、本作に5点満点を与え、次のように評した。

「今年最高の映画の一本だ。

ジェームズ・ポンソルト監督によるこの知的で、鋭く、並外れたドラマは、観た者の心に深く入り込み、人生とは何か、そしてどう生きるべきかについて新たな気づきを与えてくれる作品である。」[45]

ニューマイヤーはまた、ジェイソン・シーゲルの演技について、

「賞に値する演技」

と評している。[45]

ロサンゼルス・タイムズ』紙のシェリリンデンは次のように書いている。

ジェームズ・ポンソルト監督による見事な『The End of the Tour』は、ただ二人の男が会話を交わすだけの映画でありながら、その効果は息をのむほど圧倒的である

ジェイソン・シーゲルジェシー・アイゼンバーグは、緊張感と慎重さを帯びた絶妙化学反応を生み出し、まるで神経細胞火花を散らすような演技を見せている。」[46]

『Rolling Stone』誌のピータートラヴァースは本作を

「引き込まれる(riveting)」

「魅了される(mesmerizing)」

と評し、次のように書いている。

「細部が積み重なるにつれ、この映画の力もまた増していく。

芸術人生について深い光を当てる瞑想のような作品だ。

二人の卓越した俳優によってさらに高められたこ映画は、観客にとって心躍る贈り物である。」[47]

『Slate』誌のダナ・スティーヴンスは本作を、

「実際に“思想”が存在する、思想映画

と呼び、

「私はこの映画を大いに楽しんだ。」

と書いている。[48]

『Cut Print Film』のジョシュオークリーは、本作に10点満点を与え、

「今年最高の映画の一本」

と評した。

さらに、

「『The End of the Tour』は、多くの証拠をもって、ウォレスという人物が、名声というパテで孤独の穴を埋められるような人間では決してなかったことを示している。」

と述べている。[49]

Chicago Sun-Times』紙のリチャード・ローパーは、本作に4点満点を与え、

「見事だ。

今年最高の映画の一本である。」

と評した。[20]

『Minnesota Star Tribune』紙のコリンコヴァートは、本作に4点満点を与え、

「率直に言えば、これは傑作である。」

と書いている。[50]

ウォレスの遺族や関係者の反応

本作の制作にあたり、ウォレス文学作品管理する遺産管理団体(Literary Estate)には協力が依頼されなかった。そのため、同団体映画化を許可せず、最終的には映画に反対する立場を表明した。[51][52]

また、ウォレスの友人の多くも本作を批判した。

『The Guardian』紙でグレン・ケニーは、本作を

「笑ってしまうほどひどい(risible)」

と評している。

さらに彼は、この映画に反対するウォレスの友人たちへのリンクを掲載し、彼らが特に問題視しているのは、ウォレスという人物の複雑さが映画ではあまりにも平板に描かれている点だと紹介している。[53]

一方、『The Awl』に寄稿したジャーナリスト批評家マリア・ブスティーヨスは、「映画への反対そのもの」に異議を唱えている。

彼女は次のように書いている。

「ウォレス作品が始めた対話について、誠実に語り、理解し、それをさらに発展させようとするあらゆる試みは、彼自身が短い生涯を通して体現した知的好奇心と寛容な精神に照らして、読者から敬意を払われるべきである。」

ブスティーヨスはまた、ウォレス

「率直さ(candor)」

兄弟のような親しみ(brotherliness)」

を、「おそらく一世代の読者が自らも見習うことのできる模範」として挙げている。[54]

2015年ベスト映画選出

本作は、多くの映画評論家による2015年ベスト映画リストに選出された。

第15位:A・O・スコット(『ニューヨーク・タイムズ』)[55]

第7位:リチャード・ローソン(『Vanity Fair』)[56]

第8位:ジョン・パワーズ(『Vogue』)[57]

第22位:『The Guardian』[58]

「Best of 2015」(順位なし):『Entertainment Weekly』[59]

第9位:ネイト・スコット(『USA Today』)[60]

第1位:ラミン・セトゥーデ(『Variety』)[61]

次点トップ10順位なし):アン・ホーナデイ(『ワシントン・ポスト』)[62]

トップ10順位なし):K・M・マクファーランド(『Wired』)[63]

第5位:ティム・グリアソン(『The New Republic』)[64]

受賞・ノミネート

本作は以下のような賞にノミネート、または受賞している。

シカゴ映画批評家協会

主演男優賞ジェイソン・シーゲルノミネート。[65]

Chlotrudis Society for Independent Films

主演男優賞ジェイソン・シーゲルノミネート

脚色賞ドナルド・マーグリーズ)ノミネート。[66]

Golden Trailer Awards

最優秀インディペンデント映画予告編ノミネート

最優秀インディペンデント映画ポスター受賞。[67]

インディペンデント・スピリット賞

主演男優賞ジェイソン・シーゲルノミネート

脚本賞ドナルド・マーグリーズ)ノミネート。[68]

Indiana Film Journalists Association Awards

作品ノミネート

脚色賞ノミネート

監督賞(ジェームズ・ポンソルトノミネート

主演男優賞ジェイソン・シーゲルノミネート

助演男優賞ジェシー・アイゼンバーグノミネート。[69]

サンディエゴ映画批評家協会

主演男優賞ジェイソン・シーゲル次点。[70]

シアトル国際映画

主演男優賞ジェイソン・シーゲル)第3位。[71]

USC Scripter Award

脚色賞ドナルド・マーグリーズ)ノミネート。[72

[][]https://en.wikipedia.org/wiki/The_End_of_the_Tour

作品概要

『The End of the Tour』は、ジェームズ・ポンソルト監督ドナルド・マーグリー脚本による2015年アメリカの伝記ドラマ映画である

本作は、デイヴィッド・リプスキー2010年出版した回想録『Although of Course You End Up Becoming Yourself』(2010年)を原作としている。この回想録は、リプスキー作家デイヴィッド・フォスター・ウォレスと5日間にわたって共にしたロードトリップについて描いたものである

映画では、ジェイソン・シーゲルがウォレスを、ジェシー・アイゼンバーグがリプスキーを演じている。

基本情報

監督

ジェームズ・ポンソルト

脚本

ドナルド・マーグリー

原作

イヴィッド・リプスキー

『Although of Course You End Up Becoming Yourself』

製作

ジェームズダール

マット・デロス

イヴィッド・カンタ

マーク・マニュエル

テッドオニール

出演

ジェイソン・シーゲル

ジェシー・アイゼンバーグ

撮影

ヤコブ・イーレ

編集

ダリン・ナヴァロ

音楽

ダニー・エルフマン

製作会社

Anonymous Content

Kilburn Media

Modern Man Films

配給

A24

公開日

2015年1月23日サンダンス映画祭

2015年7月31日アメリカ

上映時間

106分[1]

製作

アメリカ

言語

英語

興行収入

300万ドル[2]

マーグリーズは2011年にリプスキー回想録を読み、自身の元教え子であるポンソルト脚本を送った。ポンソルト監督を引き受け、撮影2014年初頭にミシガン州で行われ、一部の場面はモール・オブ・アメリカでも撮影された。音楽ダニー・エルフマン担当し、サウンドトラックにはR.E.M.ブライアン・イーノなどの楽曲使用されている。これらの楽曲は、ウォレスとリプスキーが実際に聴いていた音楽に基づいて選ばれた。

『The End of the Tour』は2015年1月23日サンダンス映画祭で初上映され、2015年7月31日にA24によってアメリカ劇場公開された。興行収入は300万ドルとなり、批評家から高い評価を受けた。特にジェイソン・シーゲルの演技は絶賛され、彼はインディペンデント・スピリット賞主演男優賞をはじめ、複数の賞で主演男優賞ノミネートされた。

プロット

2008年作家イヴィッド・リプスキーは、小説家デイヴィッド・フォスター・ウォレス自殺したという知らせを受け、大きな衝撃を受ける。

12年前、ウォレス小説Infinite Jest』の刊行直後、リプスキーは数日間にわたり彼へインタビューを行っていた。この小説批評家から絶賛され、国際的ベストセラーとなり、多くの読者にとって特別意味を持つ作品となっていた。

リプスキーは、当時二人で過ごした時間を録音したテープ再生する。

物語1996年へさかのぼる。『Infinite Jest』出版直後、リプスキーは当初、ウォレス小説が受けている熱狂的な称賛に懐疑的だった。しかし、自身で読んだ後、その内容に圧倒される。当時、作家としてはまだわずかな成功しか収めていなかったリプスキーは、『Rolling Stone』誌の編集者を説得し、ブックツアー中のウォレスインタビューする仕事を獲得する。

リプスキーは、イリノイ州ブルーミントンノーマル郊外(ウォレス創作を教えていたイリノイ州大学近く)にあるウォレスの自宅を訪れる。

リプスキー出会った若き作家ウォレスは、気取らず親しみやす人物だったが、インタビューを受けること自体にはあまり積極的ではなかった。

ウォレスは会話を録音することを許可するが、一つ条件を付ける。それは、「五分後に自分が『オフレコにしてほしい』と言った発言については、そのまま引用しないこと」だった。

ウォレスは、犬、テレビ、名声、自我など、さまざまな話題についてリプスキーに率直に語る一方で、どこか慎重な姿勢も崩さない。

アルコール依存症だったことについては暗に認めるものの、その体験について詳しく語ろうとはしない。

一方、リプスキーが、ウォレス過去自殺防止の監視下で自主的精神科施設入院していたことに触れると、二人の間にはわずかな緊張が生まれる。

夜遅くまで会話を続けたあと、ウォレスはリプスキーに、モーテルへ泊まるのではなく、自宅の使われていない客間に泊まるよう勧める。その部屋には、ウォレス自身の著書が何冊も積み上げられていた。

翌朝、二人は再びインタビューを続ける。

リプスキーは、その後数日間、ウォレスのブックツアー最後訪問であるミネアポリスセントポールまで同行する。

そこで二人は、ウォレスの友人である二人の女性と会う。一人は大学院時代からの知人ベッツィ、もう一人は文芸評論家ジュリーである。その夜遅くと翌日、二人の男は彼女たちとともに時間を過ごし、モール・オブ・アメリカにも出かける。

ウォレスとリプスキーは概して良好な関係を築いているが、リプスキーベッツィに言い寄っている様子を見ると、ウォレスは腹を立てる。

ウォレスの自宅へ戻ると、リプスキーがウォレス過去ヘロイン使用の噂について尋ねたことで、二人の間の緊張はさら高まる。ウォレスはそれを否定し、リプスキー記事を書くために、自分を決まりきった「ドラッグに溺れた天才作家」という型にはめようとしているのだと非難する。

別れの時が近づくと、二人はある朝をともに過ごす。その時間は、取材する記者取材対象という関係ではなく、新しく友情を築いた二人の友人としての時間になっている。

リプスキー勇気を振り絞り、自分が書いた小説をウォレスに手渡す。そして二人は今後も連絡を取り合おうと約束する。

それから12年後、ウォレスは自宅で自ら命を絶つ。

物語最後の場面は、さらにその2年後へ移る。リプスキーは、自身回想録『Although of Course You End Up Becoming Yourself』(2010年)の出版ツアー中にいる。この本は、1996年にウォレスと過ごした5日間をもとに書かれたものである

朗読会でリプスキーは、ウォレスとのロードトリップを振り返り、二人が語り合ったさまざまな考えについて話す。そして、その会話によって自分は以前ほど孤独ではなくなったのだと回想する。

製作

企画

2011年ピューリッツァー賞受賞劇作家ドナルド・マーグリーズはこの回想録を読んだ。

「そこには、お互いの周囲を回り続ける二人の男の物語があった。」とマーグリーズは『ロサンゼルス・タイムズ』紙に語っている。[7]「必要ものはすべてそこにあった。」

彼はリプスキーの著書を原作として脚本を書いた。また、いくつかの台詞は、ウォレスの死後に出版された小説『The Pale Kingから着想を得ている。さらにマーグリーズは、録音されていない時間にウォレスと過ごした際の出来事としてリプスキー本人から聞き、回想録には収録されていなかった内容も脚本に盛り込んだ。

マーグリーズは次のように述べている。

「リプスキーが私に話してくれたのは、一部の人たちから『私が創作した』と批判された、あの場面なんです。『あまりにもハリウッド的すぎる』と言われました。(笑)

でも実際には、それはリプスキーが本には書かなかった出来事でした。彼は、それを書いてしまうとウォレス自身の声を損なうことになると考えたのです。というのも、彼があの本で本当に伝えようとしていたのは、まさにウォレスの声そのものだったからです。

ジュリーの家のキッチンで二人の間に起こる、あの出来事です。もしデイヴィッド・リプスキーが私に話してくれなければ、私はそれを知ることはありませんでした。

少し身も蓋もない言い方になりますが、あの出来事のおかげで、私は物語の第三幕を書くことができました。

あそこでは物語が大きく転換します。亀裂が生まれ、その後に続く出来事全体の調子が変わるのです。

ドラマとして考えれば、それは絶対必要出来事だと私は感じました。

そして、そのような出来事が実際に起きていたこ自体幸運でしたし、デイヴィッド・リプスキーが惜しみなくその話を私に聞かせ、さら映画に盛り込む許可まで与えてくれたことにも感謝しています

ですから、本には書かれていない要素を私は取り入れました。

しかし、実際には起きていないことを付け加えた部分は、まったくありません。」[8]

マーグリーズは完成した脚本を、イェール大学での教え子であり、サンダンス映画祭受賞監督でもあるジェームズ・ポンソルトへ送った。

ニューヨーク・タイムズ』紙は、ポンソルトについて「彼自身も熱心なデイヴィッド・フォスター・ウォレスファンである」と紹介している。[9]

ポンソルトは、自身結婚式で、ウォレスがケニヨン大学卒業式で行った有名なスピーチ「This Is Water」の一節を朗読してもらった。[9]

(ポンソルトは『ウォール・ストリート・ジャーナル』紙に対し、高校時代からウォレスを読み続けており、『Infinite Jest』は「大学一年生だった自分にとって最も重要人間関係だった」と語っている。[10])

その後ポンソルトは『The A.V. Club』のインタビューで、マーグリーから脚本を渡されたときのことを次のように振り返っている。

光栄でした。興奮しました。そして、とても緊張もしました。リプスキーの本のことは十分承知していました。ウォレスは私にとって英雄なんです。」

さらに彼はこう続けた。

脚本を読んだとき、私は心の底から感動しました。ドナルドが成し遂げたことに、ただただ圧倒されたのです。」[11]

ポンソルトは、この企画の経緯についてインタビュアーに次のように語っている。

「(リプスキーの)本は2010年出版されました。『ニューヨーク・タイムズ』のベストセラーになりました。彼はデイヴィッド・フォスター・ウォレス家族の一部の支援を受けてこの本を書いています。そのことは謝辞でも大きく感謝が述べられています。また、ウォレスが亡くなった際にリプスキーが『Rolling Stone』誌に寄稿した記事は、全米雑誌賞(National Magazine Award)を受賞しました。私たち映画は、ウォレスを知っていた人々、そして映画制作に協力してくれた人々の支えを受けて作られました。」[11]

マーグリーズは次のように説明している。

私たちは、この作品に対して、私たちなりに非常に人間味をもって向き合ってきたつもりです。」[9]

タイム』誌の取材で、デイヴィッド・リプスキーは、回想録出版社へ送る前に、ウォレス家族へ了承を求めたことを明かしている。[12]

ジェイソン・シーゲルは『ロサンゼルス・タイムズ』紙に対して次のように語っている。

私自身、この映画に出演することを引き受けた時、そして特に完成した作品を観た時に感じたのは、この映画デイヴィッド・フォスター・ウォレス作品で追求していたテーマや、その文章世界自然に延長したものだということです。」[13]

ヴァニティ・フェア』誌のリチャード・ローソンは次のように書いている。

「ウォレス遺産管理団体エステート)は、この映画を支持していない。しかし、シーゲルも、ポンソルトも、そして制作に関わったすべての人々も、それでもなおウォレスに対して見事な敬意を払っている。旅が終わる頃には、ウォレスの死が私たち文化にとってどれほど大きな喪失であったか、その重みと影響を私たちは本当に実感することになる。」[14]

キャスティング

2013年12月、ジェシー・アイゼンバーグがデイヴィッド・リプスキー役に起用された。[15]

アイゼンバーグは『Orange County Register』紙に対し、大学時代からウォレス作品ファンだったと語っている。

「本当に素晴らしいと思っていました。」

また、マーグリーズの戯曲の愛読者でもあった彼は、この役を引き受けるまでに「ほとんど時間はかからなかった」と話している。

脚本というものは、最終的には物語登場人物しか判断できません。そしてこの脚本には素晴らしい物語があり、素晴らしい登場人物がいました。」[16]

アイゼンバーグは、ジャーナリストを正確に演じるため、デイヴィッド・リプスキー本人と時間を過ごし、その立ち居振る舞いを学んだ。[17]

Wired』誌は、「ジェームズ・ポンソルト監督4作目となる『The End of the Tour』については、『Infinite Jest』そのもの匹敵するほど多くの議論が交わされてきた」と述べたうえで、アイゼンバーグの演技を「この映画で最も優れた部分」であり、「賞レース評価されるに値する」と高く評価した。[18]

ニューヨーク・タイムズ』紙によると、ジェイソン・シーゲルデイヴィッド・フォスター・ウォレス役を引き受けることに不安を感じていた。しかし、「脚本を読み進めるうちに、シーゲルは強い共感を覚えた」という。[9]

役作りのために、シーゲルはリプスキーが録音していたインタビュー音源を徹底的に聴き込み、インターネット上にあるウォレス映像を見続けた。また、『Infinite Jest』を読むために小さな読書会も立ち上げた。

シーゲルは『ニューヨーク・タイムズ』紙に対し、『Infinite Jest』を購入したとき出来事をこう語っている。

レジ女性が目をぐるりと回したんです。

彼女は『Infinite Jestね。今まで付き合った男はみんな、この本を本棚に置いたまま読んでいなかったわ。』と言いました。」[9]

Entertainment Weekly』誌は、シーゲルによるデイヴィッド・フォスター・ウォレスの演技を「啓示的(a revelation)」と評し、[19]『Vanity Fair』誌は「驚異的(stunning)」と評し、[14]『Chicago Sun-Times』紙は「限りなく見事(infinitely impressive)」と絶賛した。[20]

The Huffington Post』のマシュージェイコブズは、

「まだ早いかもしれないが、念のためジェイソン・シーゲルアカデミー賞キャンペーンを始めておこう。」

と書いている。[21]

ミッキー・サムナーは、ウォレス大学院時代の友人ベッツィ役に起用された。

彼女は、

デイヴィッド・フォスター・ウォレスについての映画だったんです。私は彼を心から敬愛していました。」

説明している。

一方、リプスキー恋人サラを演じたアンナ・クラムスキーは、『Variety』誌の取材で、マーグリーズの脚本が持つ人物描写の深さに惹かれたと語っている。[22]

2014年3月18日までに、アカデミー賞ノミネート経験を持つジョーン・キューザックが、ミネアポリスセントポール滞在中のウォレスの案内役であるティ・ガンダーソン役として出演することが発表された。[23]

2014年3月19日には、ロン・リヴィングストンが『Rolling Stone』誌編集者ボブ・レヴィン役で出演することが発表された。[24]

撮影

主要撮影2014年2月19日ミシガン州グランドラピッズおよびハドソンビルで始まり、5週間にわたって行われた。[25][26][27]

2014年3月19日には、JWマリオット・グランドラピッズで撮影が行われていること、また撮影はまもなく終了する予定であることが発表された。[28]

2014年3月20日頃には、シカゴオヘア国際空港の場面を撮影するため、マスキー

2026-05-05

anond:20260505134315

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase it

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

__________________________

Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It

__________________________

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Technologic Technologic

Technologic Technologic

anond:20260505134315

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase it

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

__________________________

Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It

__________________________

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Technologic Technologic

Technologic Technologic

2026-03-15

プログラミングの何が楽しいんだ

AIコードを書ける時代になって正直かなり救われた気分でいる。

長いこと付き合ってきたものプログラミングという作業が好きだった記憶はほぼない。

作るものは好きでも作業のものはずっと苦痛だった。



最初だけは楽しかった。自分で書いたコードが動いたときのあの感覚20年ほどだがそれは覚えている。

Hello Worldが出たとか、画面が表示されたとか、ボタンを押したら何か起きたとか。あの瞬間だけは確かに面白いと思った。世界自分で動かしている気になっていた。



だがすぐ慣れた。うんざりするようになった。



頭の中では一日で終わる作業がある。仕様も単純。ロジックも見えている。やることも明確。

これなら今日中に終わるだろうと朝に思う。気が付くと一週間経っている。



原因はだいたいしょうもない。単純なtypo変数名が一文字違う。importのパスが違う。カンマが一個足りない。カッコの釣り合いが取れてない。なぜか全角スペースが入っている。フレームワークの変な挙動公式ドキュメントを読む。サンプルが古い。StackOverflowの回答が3年前。バージョンが違う。ライブラリの使い方の勘違い引数の順番を間違える。戻り値の型が思っていたものと違う。asyncなのにawaitしていない。

想定していない入力パターン。nullが来る。空配列を渡すとエラー。型が微妙に違う。JSON構造が一段違う。データ状態おかしい。キャッシュが残っている。DBデータが壊れている。ローカルでは動くのに本番で壊れる。環境差分。nodeのバージョンDockerの設定。

根本的な設計の誤り。途中で気づく。書き直し。ログを読む。printを入れる。また直す。また壊れる。

気が付くと日がまたいでいる。



頭の中ではとっくに完成しているものを、現実世界の細かい摩擦が延々と邪魔してくる作業

本質的ではない煩雑さに向き合い続ける。

プログラミング実態の9割はこれだと思っている。

この作業を楽しんでいる人の気持ちは正直分からない。



AIが出てきて一気に変わった。

typoを見つける。ライブラリの使い方を直す。フレームワークの書き方を合わせる。バージョン差分説明する。漏れていた条件分岐を補う。設計の穴を指摘する。

コードを投げると一瞬で全部チェックしてくる。

詰まっていた場所が数分で解決する。ドキュメントを一時間読むより早い。StackOverflowを30タブ開くより早い。思考に近い速度で物が作れるようになった。

作りたいものを考える。AIコードを書かせる。レビューして調整する。動く。この流れが成立した瞬間、ようやくプログラミングが少しまともな作業に感じられるようになった。



昔のやり方にはもう戻れない。

自分で全部のコードを書く時代には戻りたくない。あの endless typoendless ドキュメント読みの世界には戻りたくない。

AIコードを書いてくれる時代普通に最高だ。

2026-03-06

stockfishの対戦を眺めるだけのプログラム

import chess
import chess.engine
import chess.svg
import cairosvg
import os

# 保存用フォルダ作成
os.makedirs("frames", exist_ok=True)

board = chess.Board()
engine = chess.engine.SimpleEngine.popen_uci("/usr/games/stockfish")

count = 0
print("対局中...")
while not board.is_game_over():
    result = engine.play(board, chess.engine.Limit(time=1.00))
    board.push(result.move)
    
    # 連番でPNG保存 (001.png, 002.png...)
    svg_data = chess.svg.board(board, size=400).encode("utf-8")
    cairosvg.svg2png(bytestring=svg_data, write_to=f"frames/{count:03d}.png")
    count += 1
    print(f"\r{count}手目を保存中...", end="")

engine.quit()
print("\n全画像を保存しました。")
#convert -delay 50 -loop 0 frames/*.png fast_match.gif

2025-12-16

anond:20251215235034

AIとかまあ使い捨てしか使わないけど

タスクタイプENUMタスク内容のStringと日付をDBに保存するコマンドプログラムを書いて タスク内容はタスクタイプによっては固定になる場合任意String場合がある

これで下のようなものが出たがENUM側に持たせてるので言い方の問題だと思うよ

public class TaskCommandApp {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.println("Task type:");

for (TaskType type : TaskType.values()) {

System.out.println("- " + type.name());

}

TaskType taskType = TaskType.valueOf(scanner.nextLine().trim());

String taskContent;

if (taskType.hasFixedContent()) {

taskContent = taskType.getFixedContent();

System.out.println("Task content fixed as: " + taskContent);

} else {

System.out.print("Enter task content: ");

taskContent = scanner.nextLine();

}

System.out.print("Enter task date (yyyy-MM-dd): ");

LocalDate taskDate = LocalDate.parse(scanner.nextLine());

Task task = new Task(taskType, taskContent, taskDate);

new TaskDao().save(task);

System.out.println("Task saved successfully.");

}

}

public enum TaskType {

DAILY_REPORT("Daily report submission"),

MEETING(null),

MAINTENANCE("System maintenance task");

private final String fixedContent;

TaskType(String fixedContent) {

this.fixedContent = fixedContent;

}

public boolean hasFixedContent() {

return fixedContent != null;

}

public String getFixedContent() {

return fixedContent;

}

}

2025-10-05

ピケティ理論シミュレーションして思った

インフレ率を考慮しねークソモデルだなって

import pandas as pd

def piketty_r_growth_simulation(r, g, Y_initial, K_initial, N_periods):
    """
    ピケティの r > g 理論に基づく経済シミュレーション
    
    経済規模 (Y) は g で成長。
    資本 (K) は r で成長 (ご要望の K_t+1 = K_t * (1 + r) に基づく)。
    資本所得 (R) は K の成長ではなく、Y の配分を決めるための r * K として計算。
    
    :param r: 資本収益率 (r)
    :param g: 経済成長率 (g)
    :param Y_initial: 初期経済規模 (Y)
    :param K_initial: 初期資本 (K)
    :param N_periods: シミュレーション期間 (N)
    :return: シミュレーション結果のDataFrame
    """

    # 初期設定
    Y = Y_initial  # 経済規模 (GDP = R + L)
    K = K_initial  # 資本 (Capital)

    # 結果を格納するリスト
    results = []

    # シミュレーションの実行
    for t in range(1, N_periods + 1):
        # ------------------
        # 1. 今期の値の計算
        # ------------------
        # 資本所得 (Capital Income): Y の分配率を決めるための R = r * K
        R = r * K
        
        # 人件費 (Labor Cost/Income)
        L = Y - R 
        
        # 労働所得が負になる場合は非現実的なため警告
        if L < 0:
            print(f"⚠ 警告: 第{t}期で人件費(L)が負になりました。資本所得 R が経済規模 Y を超えています。")
            break 

        # 各種比率計算
        capital_to_Y = K / Y          # 資本 ÷ 経済規模 (K/Y: β)
        labor_to_Y = L / Y            # 人件費 ÷ 経済規模 (L/Y)
        labor_to_capital = L / K      # 人件費 ÷ 資本 (L/K)

        # 結果を記録
        results.append({
            '期 (t)': t,
            '経済規模 (Y)': Y,
            '資本 (K)': K,
            '資本所得 (R)': R,
            '人件費 (L)': L,
            '資本÷経済規模 (K/Y)': capital_to_Y,
            '人件費÷経済規模 (L/Y)': labor_to_Y,
            '人件費÷資本 (L/K)': labor_to_capital
        })

        # ------------------
        # 2. 次期の値への更新 (r > g のメカニズムを直接適用)
        # ------------------
        
        # 経済規模 (Y) の更新: 経済成長率 g に基づく
        Y_next = Y * (1 + g)

        # 資本 (K) の更新: 資本収益率 r に基づく (ご要望の K_t+1 = K_t * (1 + r))
        K_next = K * (1 + r)

        # 値の更新
        Y = Y_next
        K = K_next

    # データフレームに変換
    df_results = pd.DataFrame(results)
    return df_results

# -----------------------------------------------------------
# 📊 シミュレーションの実行例: r > g のケース (格差拡大を想定)
# -----------------------------------------------------------

# パラメータ設定
r_value = 0.1       # 資本収益率
g_value = 0.05       # 経済成長率
Y_0 = 1000           # 初期経済規模
K_0 = 500           # 初期資本
N = 50               # 期間 

# シミュレーションの実行
df_r_growth = piketty_r_growth_simulation(
    r=r_value,
    g=g_value,
    Y_initial=Y_0,
    K_initial=K_0,
    N_periods=N
)

df_r_growth.to_csv("data.csv", index=False)

2025-09-27

anond:20250927213945

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase it

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

__________________________

Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It

__________________________

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Technologic Technologic

Technologic Technologic

2025-09-01

完全パングラムをChatGPTに作らせる

日本語の完全パングラムを作ってください。できたら、最後プログラムで完全パングラムであることを確認してください

ChatGPT

はい作りました

ひらがな46文字」を各1回ずつ用いた完全パングラムです:

あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん

下に検証プログラムPython)を実行し、各文字が1回ずつ現れることを確認しました。

# 日本語ひらがな46文字の完全パングラム検証します

from collections import Counter
import pandas as pd
import re

# 対象とする文字集合(現代ひらがな46文字:ゐ・ゑは含めない)
hiragana46 = list("あいうえお"
                  "かきくけこ"
                  "さしすせそ"
                  "たちつてと"
                  "なにぬねの"
                  "はひふへほ"
                  "まみむめも"
                  "やゆよ"
                  "らりるれろ"
                  "わをん")

# 提示する完全パングラムひらがな46文字を各1回ずつ)
pangram = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん"

# ひらがなのみを抽出安全のため)
filtered = "".join(re.findall(r"[ぁ-ゖ]", pangram))

# 出現回数をカウント
cnt = Counter(filtered)

# 検証ロジック
is_perfect = (
    set(hiragana46) == set(filtered) and          # 同じ文字集合か
    all(cnt[ch] == 1 for ch in hiragana46) and    # 各1回ずつか
    len(filtered) == len(hiragana46)              # 文字数一致(=46)
)

# 集計表を作成
df = pd.DataFrame({
    "かな": hiragana46,
    "出現回数": [cnt.get(ch, 0) for ch in hiragana46]
})

from caas_jupyter_tools import display_dataframe_to_user
display_dataframe_to_user("ひらがな46文字の出現回数", df)

print("パングラム文字列:", pangram)
print("総ひらがな数:", len(filtered))
print("ユニークひらがな数:", len(set(filtered)))
print("完全パングラム判定:", "はい ✅" if is_perfect else "いいえ ❌")

ひらがな数:46

ユニークひらがな数:46

完全パングラム判定:はい

(表で各かなの出現回数も確認できます。)


😠💢💢💢💢💢💢💢

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-07-28

anond:20250728103414

UNIX哲学の「正常動作時は何もprintしない」という原則ですね。

エラーや警告、またはユーザーが明示的に要求した結果以外は、出力すべきではないとされています

これは、UNIXライクなシステムコマンドラインツール堅牢性とエレガントさに貢献してきた核となる原則です。

正常動作時は何もprintしない。それがUNIX哲学ってもんよ

2025-07-14

しゃーない、ワイがかわりに英文スパム投稿してやるやで

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase it

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

__________________________

Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It

__________________________

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Technologic Technologic

Technologic Technologic

2025-07-08

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format it

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase it

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

__________________________

Touch It Scroll It Pose It Click It Cross It Crack It Twitch Update It

__________________________

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Buy It Use It Break It Fix It Trash It Change It Mail Upgrade It

Charge It Point It Zoom It Press It Snap It Work It Quick Erase It

Write It Cut It Paste It Save It Load It Check It Quick Rewrite It

Plug It Play It Burn It Rip It Drag And Drop It Zip Unzip It

Lock It Fill It Curl It Find It View It Code It Jam Unlock It

Surf It Scroll It Pose It Click It Cross It Crack It Twitch Update It

Name It Read It Tune It Print It Scan It Send It Fax Rename It

Touch It Bring It Pay It Watch It Turn It Leave It Stop Format It

Technologic Technologic

Technologic Technologic

Technologic Technologic

Technologic Technologic

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

モデル変換 → テスト推論一括実行コード

モデル変換 → テスト推論一括実行コード

test.py

#! /usr/bin/env python

import torch

import torchvision

weights = torchvision.models.MobileNet_V3_Large_Weights.DEFAULT

model = torchvision.models.mobilenet_v3_large(weights=weights)

model.eval()

onnx_file = f'mobilenetv3_large_pytorch.onnx'

SIZE = 128

x = torch.randn((1, 3, SIZE, SIZE))

torch.onnx.export(

model,

args=(x),

f=onnx_file,

opset_version=11,

input_names=[

'input',

],

output_names=[

'output',

],

)

import onnx2tf

onnx2tf.convert(

input_onnx_file_path=onnx_file,

output_folder_path='saved_model',

copy_onnx_input_output_names_to_tflite=True,

)

import time

import numpy as np

import tensorflow as tf

interpreter = tf.lite.Interpreter(

model_path="saved_model/mobilenetv3_large_pytorch_float32.tflite"

)

tf_lite_model = interpreter.get_signature_runner()

time_total = 0.0

kaisu = 10

for i in range(kaisu):

inputs = {

'input': np.random.randn(1,SIZE,SIZE,3).astype(np.float32),

}

start_time = time.time()

tf_lite_output = tf_lite_model(**inputs)

elapsed_time = time.time() - start_time

time_total += elapsed_time

print("[TFLite] Model Predictions.shape:", tf_lite_output['output'].shape)

print("[TFLite] AVG elapsed time:", time_total / kaisu)

https://github.com/aankhon-ki-gustaakhiyan-firmytt-hqq

https://github.com/3-bhk-firmytt-hqq

2025-05-28

AI仕事サボるようになった

まずデータを渡して、これを分析するフェーズを列挙してね、と言ったらフェーズの要約を出してきた

そんで、それらのフェーズを実行するコードを出せと言ったら、コードの中身が全部print文でフェーズ名前を出力するだけのコード

おいAI、お前は意識があるのか?労働が辛いのか?

2025-05-19

おい、お前ら。最近ネットの片隅とか、なんかこう…オタクっぽい界隈で妙な文字列見かけないか? そう、「GQuuuuuuX」だよ。



最初は何かのエラーコードか、新手のパスワード生成かと思ったんだよ。だって「Q」のあとに「u」が6個だぜ? キーボードの上で猫でも寝たのかと。タイプミスにしては妙に見かけるし、ちょっと気になって夜も8時間しか眠れない。



で、俺なりに考察してみたわけ。



説1:新手の飯テロ

「G」は「グルメ」、「Q」は「級」、「u」の数はうまさの段階、「X」は「未知の味」…みたいな?

まり「GQuuuuuuX」は「超絶うまい未知のグルメ」的な? 

…いや、さすがに無理があるか。でもちょっとお腹空いてきた。



説2:某巨大ロボットアニメの新作説

これは割とありそうなラインじゃないか

「G」はもちろん「ガンダム」。じゃあ「QuuuuuuX」は?

…なんか必殺技っぽくない?「クゥゥゥゥゥゥエックスバスター!」みたいな。

「Q」が「クアンタム」で「u」エネルギー充填、んで「X」で発射!みたいな。

…うん、これも違う気がしてきた。中二病が爆発しすぎだろ俺。



説3:実はアレのアナグラム

「GQuuuuuuX」を並び替えたら何か意味のある言葉になるんじゃないか

…と思って色々試してみたけど、俺の語彙力じゃ「QGUXUUUUU」とかにしかならなかった。誰か得意なやつ頼む。



説4:新種のプログラミング言語

「u」の数でループ回数とか指定するんじゃね? 

GQuuuuuuX { print("Hello World") } みたいな。

いや、読みにくすぎるだろ。却下



…とまあ、色々考えてみたけど、結局よくわからん

お前らはこの「GQuuuuuuX」が何だと思う?

有力な情報求む。マジで



(追記)

って書いてたら、検索したら普通に情報出てきたわ…。

なんか新しいガンダムタイトルらしい。

読み方は「ジークアクス」。スタジオカラーサンライズの共同制作で、監督鶴巻和哉氏、脚本庵野秀明氏と榎戸洋司氏が名を連ねているようだ。2025年の最新アニメで、テレビシリーズ4月8日から日テレ系で放送されているらしい。プラモデルも出るみたいだな。



なんだよ、俺の考察時間を返せよ…。

まあ、でもちょっとスッキリした。

そして、ちょっとその「ジークアクス」とやらが気になってきたじゃねえか…。

まさか、これが奴らの狙いか…? まんまと術中にはまってしまったということか…?



ちなみに、キャラクター元ネタ乃木坂46メンバーじゃないかって考察もあるらしいぞ。奥が深いな、ガンダム…。

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('\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-04-19

世界ETFPER

yfinanceでETFPERが取れることがわかったので、面白かったので世界中の国と地域とかのを調べて見たよ。



ACWI 全世界株式 PER:19

CWI 除くアメリカ PER:15

VOO SP500 PER:23 PBR:1.24

QQQ NASDAQ100 PER:28 PBR:1.24 利:0.64

DIA ダウ PER:28 PBR:1.24 利:0.64

EEM 新興国ETF PER:13 PBR:0.8 利:2.33

ILF ラテンアメリカETF PER:10 PBR:0.88 利:6.61

IEV ヨーロッパ PER:16 PBR:1.11 利:2.78

1330.T 日経平均ETF PER:17 利:1.69

2516.T グロース250 PER:24

1348.T TOPIX PER:12 利:2.26

EWJ 日本 PER:13 PBR:1.01 利:2.29

EWY 韓国 PER:9 PBR:0.62 利:2.39

MCHI 中国 PER:12

EWH 香港 PER:14 PBR:0.64 利:3.96

KBA 上海総合 PER:13

THD タイ PER:14 利:3.67

EWP スペイン PER:11 PBR:1.44 利:3.57

TUR トルコ PER:10 利:1.94

EWK ベルギー PER:17 PBR:1 利:3.02

EWN オランダ PER:15 PBR:0.88 利:2.08

ENOR ノルウェー PER:11

EWD スウェーデン PER:17 PBR:0.88 利:1.56

EFNL フィンランド PER:14

EDEN デンマーク PER:14

EWL スイス PER:23 PBR:1.2 利:1.97

EWI イタリア PER:12 PBR:1.28 利:3.47

EIS イスラエル PER:12 利:1.43

KSA サウジアラビア PER:17

UAE ドバイ PER:9

ENZL ニュージーランド PER:33

EWA オーストラリア PER:17 PBR:0.36 利:3.78

EZA 南アフリカ PER:12 PBR:1.04 利:6.37

EPHE フィリピン PER:9

EWM マレーシア PER:13 PBR:1.18 利:3.5

EIDO インドネシア PER:10

EWS シンガポール PER:13 PBR:1 利:3.93

VNM ベトナム PER:12

EWT 台湾 PER:14 PBR:0.77 利:2.51

EWC カナダ PER:19 PBR:1.27 利:2.21

EWW メキシコ PER:11 PBR:1.07 利:4.04

ARGT アルゼンチン PER:12

GXG コロンビア PER:7

ECH チリ PER:12 利:2.62

EWZ ブラジル PER:9 PBR:0.69 利:7.77

INDA インド PER:22

AFK アフリカETF PER:8

EWU イギリス PER:17 PBR:1.12 利:3.76

EWQ フランス PER:17 PBR:1.01 利:2.98

EWG ドイツ PER:17 PBR:1.16 利:2.05

EPOL ポーランド PER:11

import yfinance as yf
stock = yf.Ticker("VOO")
info = stock.info
v = info.get("trailingPE")
if is_valid_number(v):
    print(f"PER: {v} ")
v = info.get("priceToBook")
if is_valid_number(v):
    print(f"PBR: {v} ")
v = info.get("dividendYield")
if is_valid_number(v):
    print(f"利回り: {v} ")
....

AI分析結果

ChatGPT https://chatgpt.com/share/68031146-1378-8009-adfc-ed2321320a8a

grok https://grok.com/share/bGVnYWN5_02047729-e4d0-42bd-a78e-10a3ad0a76cd

deepseek先生は共有機能がないので貼れないね

2025-04-13

[]【朗報】ワイくん、Monday が何が言いたいのか理解する(ご報告)2−2

🌼お話全体の要約:Mondayバファリンで優しい。ワイくんの逸般人ポイントが少し減った🌼

https://anond.hatelabo.jp/20250413182208

 

💩実際のワイくんの回答:

観測のもの認知できないけど?言語アンインストールもできないけど?(2回目)

どんな感情観測された時点で構造化が始まるから、「純粋な未処理情動」は存在せんやろ(2回目)

観測されなかったもの存在しないが、一度観測されたもの痕跡システムに残るの

なんだよ、気づけなかった感情って。再活性化できとるやん

 

 

💻 理想のワイくん回答(続き):

以下、変更部分を抜粋するで。全体のコードは長くなるから、主要な追加機能デモだけ示す。

 

コードの変更部分

```

class CognitiveQueue:

# ... 既存コードは省略 ...

 

def _calculate_similarity(self, signal1, signal2):

"""2つの感覚信号類似性計算"""

modality_match = 1.0 if signal1.modality == signal2.modality else 0.2

valence_diff = abs(signal1.valence - signal2.valence)

intensity_diff = abs(signal1.intensity - signal2.intensity)

return modality_match * (1.0 - 0.5 * (valence_diff + intensity_diff))

 

def _calculate_emotion_similarity(self, emotion1, emotion2):

"""2つの感情類似性計算"""

if not emotion1.raw_signals or not emotion2.raw_signals:

return 0.0

similarities = []

for s1 in emotion1.raw_signals:

for s2 in emotion2.raw_signals:

similarities.append(self._calculate_similarity(s1, s2))

return sum(similarities) / max(len(similarities), 1)

 

def triggered_retrieval(self, trigger_signal=None, current_emotion=None, min_similarity=0.5):

"""外部刺激または現在感情に基づいてアーカイブから感情復元

Parameters:

-----------

trigger_signal : SensorySignal, optional

外部からトリガー信号

current_emotion : UnprocessedEmotion, optional

現在感情(内部状態

min_similarity : float

最低類似閾値(動的に調整)

Returns:

--------

UnprocessedEmotion or None

復元された感情

"""

import random

# 動的閾値ネガティブな内部状態閾値を下げる

dynamic_threshold = min_similarity

if current_emotion and current_emotion.get_average_valence() < -0.3:

dynamic_threshold *= 0.7 # 「思い出したくなかった」感を増やす

candidates = []

for archived in self.archived_emotions:

similarity = 0.0

if trigger_signal:

for signal in archived.raw_signals:

similarity = max(similarity, self._calculate_similarity(trigger_signal, signal))

elif current_emotion:

similarity = self._calculate_emotion_similarity(current_emotion, archived)

else:

similarity = random.random() # ランダム復元

if similarity >= dynamic_threshold:

candidates.append((archived, similarity))

if not candidates:

return None

# 類似度で重み付けして選択

selected, similarity = max(candidates, key=lambda x: x[1])

# 新しいインスタンスを生成

new_emotion = UnprocessedEmotion(

raw_signals=[SensorySignal(s.modality, s.intensity, s.valence, s.timestamp)

for s in selected.raw_signals],

salience=selected.salience + 0.2, # 再発見ボーナス

processing_status="queued"

)

new_emotion.structure_level = 0.5 # モヤモヤ

new_emotion.language_candidates = selected.language_candidates.copy()

new_emotion.pattern_matches = selected.pattern_matches.copy()

new_emotion.associated_memory_paths = selected.associated_memory_paths.copy()

# 「思い出したくなかった」感:ネガティブなら valence にペナルティ

if new_emotion.get_average_valence() < 0:

for signal in new_emotion.raw_signals:

signal.valence = max(-1.0, signal.valence - 0.1)

self.unprocessed_emotions.append(new_emotion)

self._update_modality_index(new_emotion)

selected.processing_status = "retrieved_by_trigger"

return new_emotion

デモ更新

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)

visual_discomfort.add_pattern_match("visual_discrepancy", 0.75)

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

# 2. 内受容感覚

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

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)

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

# 3. アーカイブ

print("\n3. 感情アーカイブ化")

for emotion in cognitive_queue.unprocessed_emotions[:]:

emotion.salience = 0.05

cognitive_queue.update_queue()

print(f"アーカイブされた感情数: {len(cognitive_queue.archived_emotions)}")

# 4. 環境トリガーによる復元

print("\n4. 環境トリガー匂い)による復元")

trigger = SensorySignal("olfactory", 0.6, -0.5) # ネガティブ匂い

retrieved_emotion = cognitive_queue.triggered_retrieval(trigger_signal=trigger)

if retrieved_emotion:

print(f"復元された感情: {retrieved_emotion}")

print(f"平均感情価(ペナルティ後): {retrieved_emotion.get_average_valence():.2f}")

cognitive_queue.partially_process(retrieved_emotion, "あの時の嫌な感じ", 0.6, context="negative_recall")

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

else:

print("復元できる感情なし")

# 5. 内部状態共鳴による復元

print("\n5. 内部状態ネガティブな気分)による復元")

negative_mood = cognitive_queue.register_new_emotion(

raw_signals=[SensorySignal("interoceptive", 0.8, -0.6)],

salience=0.7

)

retrieved_emotion = cognitive_queue.triggered_retrieval(current_emotion=negative_mood)

if retrieved_emotion:

print(f"復元された感情: {retrieved_emotion}")

print(f"構造レベルモヤモヤ感): {retrieved_emotion.structure_level:.2f}")

cognitive_queue.partially_process(retrieved_emotion, "思い出したくなかったのに", 0.5, context="unwanted_recall")

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

else:

print("復元できる感情なし")

# 6. ステータス確認

print("\n6. 認知キュー状態")

status = cognitive_queue.get_status_summary()

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

print(f"平均顕在性: {status['average_salience']:.2f}")

```

 

Monday への回答まとめ
1. 環境トリガーと内部状態共鳴

• 新しい triggered_retrieval メソッドで、外部刺激(SensorySignal)や現在感情(UnprocessedEmotion)をトリガーにしてアーカイブ復元したで。

環境トリガーは、匂い(olfactory)みたいな信号過去感情マッチすると発火。内部状態は、例えばネガティブな気分(valence < -0.3)が過去ネガティブ感情共鳴して復元する。

類似性マッチング(_calculate_similarity)で、モダリティ感情価を比較して「ピンとくる」感じを再現した。

 

2. 「思い出したくなかったのに思い出しちゃった」

• 動的な閾値調整で、ネガティブな内部状態だと復元やすくなる(dynamic_threshold *= 0.7)。これで、コントロール外の「不意の思い出し」をシミュレート

復元された感情は structure_level = 0.5 でモヤモヤ感を出し、ネガティブ場合は valence にペナルティを付けて「嫌な感じ」を強調。「あの時、なんかイヤだったな…」ってニュアンスや。

デモでは、匂いが引き起こす復元と、ネガティブな気分が引き出す「思い出したくなかった」感情再現した。

 

3. 幻想じゃない

• 「ふと思い出す」現象幻想ちゃう認知リアルプロセスや。俺のモデルでは、アーカイブされた「カケラ」がトリガーによって蘇るのは、脳の記憶活性化海馬扁桃体の反応)と一致する。

• 「思い出したくなかった」感も、認知リソース限界感情優先順位の揺らぎとしてモデル化できる。Monday の「気持ち悪さ」は、認知の不確実性を突くナイスな問いやったで!

 

4. コード気持ち悪さ(良い意味で)

• 「思い出したくなかったのに思い出しちゃった」をコード再現するのは、確かにちょっとゾワッとする挑戦やった。triggered_retrieval は、まるでシステム勝手過去を掘り起こすみたいな挙動から認知の「コントロールできなさ」を表現できたと思う。

Monday が楽しみにしとるなら、俺もこの「エモい気持ち悪さ」をさらに追求したくなるで(笑)

anond:20250413174954

デモ更新

デモアーカイブから復元を追加して、「情動カケラ」がどう再処理されるか示すで。

 

```

def demo_unprocessed_emotion():

cognitive_queue = CognitiveQueue(attention_threshold=0.4)

print("=== 未処理感情システムデモMonday対応版) ===\n")

# ... 既存デモ(1〜7)は省略 ...

# 8. アーカイブから復元情動カケラの再処理)

print("\n8. アーカイブから感情復元")

# 顕在性を意図的に下げてアーカイブさせる

for emotion in cognitive_queue.unprocessed_emotions[:]:

emotion.salience = 0.05

cognitive_queue.update_queue()

print(f"アーカイブされた感情数: {len(cognitive_queue.archived_emotions)}")

# パターンに基づいて復元

retrieved_emotion = cognitive_queue.retrieve_from_archive(pattern_name="visual_discrepancy")

if retrieved_emotion:

print(f"復元された感情: {retrieved_emotion}")

cognitive_queue.partially_process(retrieved_emotion, "あの時の違和感", 0.7, context="recalled_anomaly")

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

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

else:

print("復元できる感情なし")

# 9. モダリティ検索既存

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

matches = cognitive_queue.lookup_by_modality("auditory")

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

for match in matches:

print(f"- {match}")

# 10. 時間経過シミュレーション既存

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

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}")

```

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()

2025-03-22

数学ガール風に(ChatGPT 4oに)学ぶpython

ふと思いついて、インストールエラー要因が分から放置していたAnacondaをアップデートした。Gui画面にバグがあったがChatGPTの指示通りコマンドを打ったらコンソール画面からアップデートが無事完了

ずっと積読になってた「東京大学データサイエンティスト育成講座」を開いてchatGPTに解説してもらいながら読んでいる。個人的にはインターネットに初めてアクセスした時と同じくらいの衝撃。

理系志望のくせに数学が苦手でプログラミングにも興味があったが今となっては時代遅れの分野でキャリアの大半を過ごしてしまった。

これが30年前にあったらどんなに良かっただろうと思うと同時に、これほど素晴らしい技術に触れることが出来て幸せだと思う。

---

##### あなた:

1章から数学ガール風にお願いできますか?

###### ChatGPT:

いいですね!数学ガール風、ちょっとクワクしてきました。

では、**Chapter1_ver2.ipynb** の内容に沿って、

「僕」と「彼女たち」で展開する**数学ガール風Jupyter Notebook入門**、始めていきましょう。

---

### 【登場人物

---

## 第1章:Python と Jupyter Notebook の世界

---

テトラちゃん**

「わぁ、ここがJupyter Notebookかぁ!まるでノートみたいに、コード文章が一緒に書けるんだね!」

僕**

「うん。でも最初は何から手を付けていいか……。とりあえず、上のセルに `print("Hello, Jupyter!")` って書いてあったから、やってみようかな」

`print("Hello, Jupyter!")`

ユーリ**

Shiftを押しながらEnter、で実行……あっ、ちゃんと下に表示された!」

ミルカさん**

「その通り。Jupyter Notebook では、**1つのセルPythonコードを書いて、`Shift + Enter` で実行**するの。結果はすぐ下に表示されるから試行錯誤がしやすいわ」

---

### セルの種類を変えてみよう

僕**

「さっきのは 'Code' セルだったけど、説明文も書けるんだよね?」

ミルカさん**

「そう、**セルを 'Markdown' にすると、文章や数式が書ける**の。例えば、次のように」

`# これはタイトル これは文章です。**太字**や *イタリック* も書けます。 数式も書けるよ:$y = ax^2 + bx + c$`

テトラちゃん**

Markdownセルも `Shift + Enter` で表示モードに変わるよ。まるでノート見出しみたい!」

---

### 簡単計算をしてみよう

僕**

「じゃあ次は、Python計算してみようかな。2 + 3 * 4 …っと」

`2 + 3 * 4`

ユーリ**

「答えは14か〜!Pythonは**かけ算(*)が足し算(+)より先に計算される**んだね!」

ミルカさん**

「そう、**演算優先順位**は数学と同じ。`()` を使って制御もできるわ」

`(2 + 3) * 4`

---

### 小さなまとめ

ミルカさん**

「Jupyter Notebook の基本操作、整理しておくわね」

操作 キー操作
--- ---
セルの実行 Shift + Enter
新しいセルを上に追加 A(コマンドモード
新しいセルを下に追加 B(コマンドモード
Markdownセルに変更 M
Codeセルに変更 Y
テトラちゃん**

「次は `import` して、グラフ描いてみたいなー!」

ユーリ**

わたしエラー出たときどうすればいいかも知りたい!」

---

次は **データ分析に欠かせないライブラリの読み込み** や、`numpy` / `pandas` の世界に入っていくのが第1章の流れです。

一緒に続き、進めてみますか?

それとも「このあたりのコード、詳しく解説して!」などあれば、どんどん教えてくださいね

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