20250310 発作/temporary value dropped while borrowed

3/9

持病のPC弄り病の発作が出てしまい、秋葉原にすっ飛んで行ってケース・電源・CPUクーラーを買ってしまった。7月の大規模アップグレードのときに電源は変えなかったのだが、電源の劣化を示唆するような症状は見られないと言えども(いや、実は出ているかもしれない…?)、購入から8年間酷使している電源はそろそろ不安だ。そして現在使用しているのがATXの省スペース横置きという変態型であるが故に電源の交換やHDDの追加作業が非常にめんどいという事情がある。このケースの厳しい寸法制限のせいでCPUクーラーは小さくて低性能なものを使わざるを得ず、またエアフローも貧弱であるために追加のファンがうるさい。

このケースを買った当時は学生で部屋が狭く、空間の活用も下手だった。今は違い、いかにもPCを置けそうな遊んでるスペースがデスク下にある。それならクソデカケースを買えばいろいろな問題が一挙に解決するではないか(なにか1つの新手によって全ての問題を一挙に解決できそうになると細かいことを考えるのがめんどくなるやつ)。

最近のケースは3.5インチベイが少ないのがトレンドとのことだが、僕は最低4は欲しく(現状も3使ってるし)、Define R5にした。10年以上前から使われている定番商品らしい。電源とクーラーはあまり詳しくなく、750WGOLDのATX3系であるMSI MAG A750GL PCIE5、そして国産であり低価格帯でAK400と双璧をなす定番・虎徹Mark3にした。

夕食は秋葉原の日乃屋カレーにした。日乃屋カレーってこんな味だったかな…?と思った(プラスの意味なのかマイナスの意味なのかは お察しください )。雨でとても寒い日だったのにメイドカフェ?の呼び込みはみんな足を見せる服装で大変だなあ。

ケースが届く月曜日が、Xデーだ。

3/10

普通の

↑これだけ入力した後温めたお茶を取りに行ったら何を書こうとしていたのか忘れた。何が普通だよ(さっき考えていたことを思い出そうとしても思い出せないこと、あるよね…あるよね?)。

家事

明日のPC換装・配置換え作業を控えて今日は念入りに掃除をした。昔は長机1つをPCデスクにしていたのだが、今は友人から貰ったクソデカ机(なんと天板120cm x 70cm)の左側にもう1枚机を連結してクソデカスギ机として運用している。クソデカ机の下にはキャビネットと僕の太ももが入っているが、追加机の下は何も活用されない空間になっていた(実際のところ故障して直線が引けない液タブが放置されている)。

なぜ液タブが放置されていたのか。それは捨てるのが難しそうだったからだ。一般に家電は捨てるのが難しいし、液タブは粗大ゴミとして捨てようにも分類が不明で問い合わせが必要そうだったので面倒そうで放置していた。今回改めて調べてみると近所のジョーシンで550円払って回収してもらえた。半導体はリサイクルされて回り回って今度はLLMのパーツにでもなるんだろうか。

その流れでベルトや食品を買って帰宅。冷凍餃子ってレンジじゃなくてフライパンで解凍するんですね。知らなかった。

RimWorld

RimWorldは人生の多くの洞察を与えてくれるが、一般規則と個別事例の関係もそうだ。後半のpawnが増えてきたコロニーは一人ひとりの行動をチェックして最適化していくのは困難だ。それはチェックが手間というのもあるし、一人ずつ最適化しても全体最適にならないからだ。そこでなるべく少ない数の一般的な規則を発布し、各pawnが自律的に行動することで全体が円滑に回ることを期待する。たとえば衣服に関して言えば

  • pawnのデフォルト着脱ルール(気温に合わせた服を着る)
  • pawnに「HP50%の服は着てはいけない」
  • 溶鉱炉「HP50%以下の服が存在する限りそれを燃やす」
  • ミシンに「衣服の在庫が1になるように製作する」

という4つのルールを設定することでpawnが衣服に関して困ることがなくなる。これが一般規則による問題の解決だ。

しかし現実は複雑だ。pawnが着るべき服は各pawnの性質によって大きく異なる。食人嗜好者なら人皮製の服、ヌーディストなら衣服なしにしたいし、戦闘時に前衛か後衛かによって防具も変わってくる。ミシンで製作できない拾い物の高性能衣服があるならそれを誰が着るかという設定も必要だ。

つまり、一般規則と個別事例の両方を意識しないと物事はうまく回らない。誰かが割を食うという可能性もあるし、システム全体が破綻するという可能性もある。思えば刑法が裁判官に対して量刑の範囲を指定し、裁判官が個別事例に応じて量刑を決定するというのはこれに通じるところがあるだろう。

Rust

このようなコードをコンパイルしようとすると

fn f() -> Vec<i32> {
    vec![1,2,3,4,5]
}

fn main() {
    let v1 = f().iter();
    println!("{:?}", v1);

    let v2 = f().into_iter();
    println!("{:?}", v2);
}

v1のほうだけ失敗する。

error[E0716]: temporary value dropped while borrowed
 --> src/main.rs:6:14
  |
6 |     let v1 = f().iter();
  |              ^^^       - temporary value is freed at the end of this statement
  |              |
  |              creates a temporary value which is freed while still in use
7 |     println!("{:?}", v1);
  |                      -- borrow later used here
  |
help: consider consuming the `Vec<i32>` when turning it into an `Iterator`
  |
6 |     let v1 = f().into_iter();
  |                  ~~~~~~~~~
help: consider using a `let` binding to create a longer lived value
  |
6 ~     let binding = f();
7 ~     let v1 = binding.iter();
  |

そもそも解説ページに全部書いてあるのだが、メソッドチェーンの形が解説のコード例につながるということがしばらくわからなかった(それが自明に思える人は以下読む必要ない)。
https://doc.rust-lang.org/error_codes/E0716.html

v1がやろうとしていることは、メソッドチェーンを分解するとつまりはこういうことであり

let v1 =
    {
        let tmp = f();
        tmp.iter()
    };
println!("{:?}", v1);

v1はtmpをborrowしているが、当のtmpはprintln!が実行されるころには存在していない。そもそもprintln!の場所でv1はもう使えないということだ。言われてみればRustの目玉機能である所有権の基礎of基礎なのだが、テキストで読んだ形と少しでも変わるともうわからなくなってしまっていた。やはり実践は重要だ。

20250302 陽光

のんびり起床し、天気があまりにも良かったのと3月に入ったので家系ラーメンに行ってきた。いつもよりしょっぱかった。満腹で帰宅して暖かい陽光で眠くなりながら『ワールドトリガー』を読み直し(序盤は割と型を作れてなくて危なっかしい感じあって初々しい)、そのまま昼寝。起きてRimWorldをして夕食を食べて寝る。心身の休養という意味では完璧に近い日だったな。これほど天気に恵まれる日は一年にそうないだろうし。

RimWorldは堅固な設計からフレキシビリティへと興味が変わってきた。初期メンバーと地形が決まった時点で拠点の設計をほぼFIXしそこに向かって作り込んでいく方針も良いのだが、このゲームにはどうしても不確定要素がある。中途加入メンバーの得意分野、恋愛の発生、家畜の入手などが大きい。今回は6x6の小さい部屋をどんどんつなげて増設していく形を取った。現段階では11部屋作ったがそのうち6部屋がぶちぬきで宿舎・ダイニング・娯楽室・工作室の兼用になっており、残りが個室・監獄・倉庫・空き部屋になっている。

この方針で大事なのは成長軸の概念だ。建物をどちらの方向に伸ばしていくかはよく計画しなければならない。農業向けの土地の上に建築してしまうのはもったいないし、風力発電を使うなら風を遮らない方向に育てなければならない。つまりソフトウェア開発と同じだ。

拠点の最終的な目標は建造物を全て囲む壁を作り、その入口のキルゾーンで敵を待ち受ける形だ。しかしこれに至るには膨大な建材が必要であり、その途中の防衛は難しい。漸進的建築は建材のロスが多いが、常に隠れられる屋内が存在していて、その中で生活が完結する。

それでもやはりある程度まで成長した後は気合で万里の長城を作ることは必要で、利用できる地形が少ないマップだとなかなか大変だよな。

20250216 鶏天ふわ玉カレーうどん

10:30頃起床。朝食を食べ、2時間ほどのんびりした後ジムに行った(食後すぐ激しい運動をすると蕁麻疹が出る)。風邪を引いていたから久々。筋トレと有酸素両方ガッツリやった。なぜか前腕が筋肉痛。だからそんなところに効かせようと思ってやってないんだって!。ジムでじっくりと自分と向き合う時間を取るのは大事だなと思った。

昼食は丸亀の季節商品『鶏天ふわ玉カレーうどん』。うどんチェーンは安くしようと思えばできるが、プッシュされている季節商品は結構するんだよな。でも相応のボリュームがあって良かった。買い物して帰宅。

RimWorldが今アツい。ツンドラ拠点で3年目にしてようやく温室栽培の体制が整い、デビルストランドの栽培が始められそうだ。デビルストランドは非常に強力な植物素材であり、防弾ジャケットと比べても防弾性能は同等、耐寒・耐熱性能は勝っている。しかし栽培に40日(RimWorldの1年は60日である)かかるため夏の間に育てきることが出来ず、寒冷地では冬の寒さから守れる設備がないと育てられない。

歯磨き・掃除・ゴミ出しをして今。生活、再びやっていくぞ。

そういえば昨日は大学のサークルのイベントに控えめに顔を出し、当時行きつけだったラーメンを食べてきた。店構えやシステムは変わったけど独特な麺の食感は(これも変わってはいるが)当時を思い出すものがあり良かった。でも僕が食べたあとスープ枯渇で終了したらしく、後から来ようとしていた後輩たちには悪いことをした(そもそも後輩と一緒に行って奢れよというのも正論なのだが、あまりに年代が離れているとそれも難しいものなのですよ)。

20250214 食塩水

9:30頃起床。ノー散歩、朝食、ノー体操、労働(?)、昼食(nosh)、退勤、夕食(nosh)、RimWorld、歯磨き、今。

とりあえず体調は完全に回復したように思うのでそろそろ通常の生活に戻していきたい。労働はなんとも言えない内容だった。プログラムを触っていて辛いなと思うことはよくあるけど、その辛さの形を見抜いて言語化して伝達してチームで対処するというのはとても難しい。毎日辛いの触ってると慣れちゃうのもあるし。

RimWorldはアツい。ガチガチに設計して始めた拠点がまあまあ成功してそう。寒いマップは農業生産量を正確に計算しないと冬に飢えてしまうね。運搬できる犬くんは賢いなあ。

最近の自分の成長と言えばもっぱら鼻うがいの技術だ(この話聞いてて絶対おもしろくないだろと思って書いてます)。今日はついに自作洗浄液にチャレンジした。単に水道水を煮沸消毒して50ml取って0.9%食塩水にしていい具合に冷ませばいいのだが(市販品はこれ500mlで1000円する)、冷静に考えてこれは塩0.45gであり、そんなの測れるわけがないというのが一番難しいところ。小さじ0.1弱である。結局勘で入れて、手本である市販品とだいたい同じ味になったところで使ってみた。結果は成功で、余計な香りをつけていない分市販品よりも低刺激だった。

待てよ、お前ティファール捨てたから水の沸騰難しいって言ってたよな?と気づいた方はよく覚えていますね。捨てたのは勘違いで物置に入ってました。クエン酸で洗浄して今度は医療機器として使用。

20250202 ここに僕が居てあなたが居る

金曜はジム(強)。

土曜は政治の研究をしている友人が学生をやり続けるという目的(?)で渡米する予定らしく、会って近況を聞いてきた。けどいつも通り泥酔していて流暢に意味不明なことを喋り続けており、あまりよくわからなかった。

今日は特に予定なし。買い物、ジム(風呂のみ)、豆まき、RimWorld、歯磨き、ゴミ出し、今。

買い物

鼻うがい液・スリッパ・カードファイル・もやしを買った。もやしは豆苗(シーズン3)を収穫して合わせて食べるためのものだ。

鼻うがい液

特に理由のない鼻のかゆみに襲われることがよくある。たぶんハウスダストなのだが、頻繁な清掃・洗濯に加えて鼻うがいというやつもやってみたくて(ビッグバンセオリーでエイミーがやってたので)、買ってみた。

専用の液は鼻に入れてもツーンとしない。塩分濃度が調整されているかららしい。効果のほどは…よくわからない。確かに鼻は通ってスッキリしているような気もする。続報を待て。

スリッパ

前提としてスリッパ文化のある家で育てられていないし、これまでスリッパ文化を導入したこともなかった。

冬は寒く、特にキッチンにはカーペットを敷いていないので裸足で歩くのは少し嫌だ。しかし、だからといって室内で常時靴下を履いていると、特に暖房・加湿機を効かせている居室ではだんだん蒸れてくる。この辺りの絶妙なうまくいかなさをスリッパで解決できないか試している。デスクで仕事をしているときはスリッパから足を出し入れして温度を調節できるし、キッチンに麦茶を温めに行くときはすぐに履ける。

しかしまあ、生の足の裏感覚はやはり失われる。スリッパをつっかけて歩くのは少しイライラする。

カードファイル

いろいろなポイントカードや診察券等が溜まって財布を圧迫し、財布に入らない分はそこらにほっぽり出してあって管理が甘い状態だったのでカードを収納できる本型のファイルを買った。一通り収納しつつ、もう要らないものは棚卸しして捨てる。機密性の高いものは細長く裁断し、奇数番目の切れ端は今日、偶数番目は次回捨てる。

豆まき

今年は突然やりたくなった。独身男性が集合住宅で大声を出しても怖がられない貴重な機会だ。ただ豆を買ってくるのを忘れたので、手元にあったミックスナッツを適当にベランダに投擲しながら「ここに僕が居てあなたが居る〜♪」と叫んだ。けどやっぱりマックス声は出せなくて65くらいだった。

RimWorld

最近はmermaidでなんでも図にすることにハマっており、こんなのを作っていた。

まあどれだけ綿密に計画を立てても想定外のイベントでめちゃくちゃにされるのが楽しいゲームなのだが。

20250105 作らされたいもの/RimWorld終盤の資産管理と人生訓

作らされたいもの

作りたいものねぇ〜とか言っていたら昔作ったwebアプリケーションをまだ使ってくれている友人から機能の要望が来て、若干の修正と膨大なリファクタリングが発生していて楽しい。しかし連休の終盤に楽しくて夜ふかししているのは頭が悪い。

昔作ったものだから結局コンフォートゾーンに逆戻りしているということではあるんだけど…まあ何もしないよりはマシかな。TypeScript+prismaでデータベースを複雑にいじくるところで(mysqlだとcreateManyAndReturnが使えません)、fp-tsで型をガチガチに固めているので絶対間違ったプログラムを書けないのだが、だからと言って正しいプログラムが書けるというわけでもなく苦労している。fp-tsの型エラーは原因箇所と遠く離れた場所に出るので何を間違ったのか探すのにコツがいる。好きな思想のライブラリではあるんだけどやっぱり言語機能の支援なしにこういうことをやろうとするとどこかに無理が生じるのよね…。

本日

今日からジムが開いていたので行って全身シバいてきた。少し衰えていたが想定内だ。NHKラジオニュースではUSスチールの買収差し止めが大きく扱われていた。大変だ。昼は久々に餃子の王将に行ってみたが、日高屋よりは美味しいだろうと期待しすぎた結果思ったほどじゃないな…となった。かぼちゃを買って帰宅。

RimWorld終盤の資産管理と人生訓

RimWorldは佳境である。いよいよ宇宙船の研究が一通り完了し、後は地道にウランやらプラスチールやら先進コンポーネントやらをかき集める段階に入った。ここの進め方がなかなか難しい。コロニー経営は軌道に乗っていて金も食料も有り余っているのだが、希少資源はそうそう見つからないので金余りの状態になりやすく、そのせいでゲームシステムによって敵の襲撃が強力になってしまう。かと言って金を捨てるといざ希少資源が見つかったときに買えない。つまりゲームシステムにバレない場所に資金を移動させる必要があるのだ。

一つの方法としてはキャラバンに乗せて適当な人員にコロニー外を徘徊させるというのがある。物理的な資産隠しだ。しかしこれはあまりにもゲームを騙してる感が強くポリシーに反するのでダメ。他の方法としては近隣の他勢力に配っちゃうというのがある。もちろんその資金は消滅するのだが、その分友好度が上昇し、いざというときに助けに来てくれたりキャラバンを派遣してくれたりする。

人を働かせて金を集めるシステムを構築したら次はその金を隠したり配ったりというのは嫌なリアリティがあるが、溜め込むくらいなら人に配ってしまえというのはなかなかポジティブな人生訓ではないだろうか。資産を持つことはそれ自体がリスクである。価値は損耗・変動するし、奪われる可能性もある(現代日本の銀行だって1000万円までしか保証してくれないぞ)。それに対して、ロマンティックに言えば友情、システマティックに言えば互恵性の規範に投資するという道もあるぞということをこのゲームは提示しているのだ(厳密に考えると金銭投げつけは友情なのか?という疑問は新たに浮かんでくるが…)。

ちなみに住人の一人であるElk(39歳独身男性・社交能力1)は性欲が強すぎて人妻を含む周囲の女性に声をかけまくり、当然のごとく振られ続けた結果メンタルを悪化させ暴れだしたので逮捕・収監と相成りました。そのうち復帰はさせようと思うけどもう女性と顔を合わせないように深夜シフト固定かなあ。これはネガティブな人生訓。

20250102 RimWorld Mod紹介

今年は帰省はなし。血縁共同体への参加を諦め、自宅で孤独で穏やかな1月1日を過ごした(それっぽいことを何もしていないのでもはや正月ではない)。

休日は好きだが、あまりに長いと人生の意味について考えはじめて非常に精神に悪い。特に正月は30歳独身男性としての何の希望もない未来のことを。せっかく薬で意味のない思考をしないように止めているのに。

30歳になるとあらゆる挑戦心が枯れる。趣味も誰にも褒めてもらえないなら意味ないなとなるし、なにか技術的な勉強をしようかと思ったけど作ってみたいものが思い浮かばず結局大したことをしていない。「やりたいけど時間がない/他の欲求に負けた」のではなく、何事も別にそこまでやりたくないのだ。悲しいことだ。やりたいという欲求が薄まるので、欲求が満たされない苦痛すらそれほど感じない。だから平穏だ。平穏な死。

これまでの人生に満ちていた無意味な不安に比べれば、平穏な死であろうと平穏であることには価値があり、僕は今平穏を自ら望んで生きている。帰省していたら自分の人生にまだ何からの期待を持っている人と会わねばならないので、今年は避けて正解だったろう。

RimWorld Mod紹介

ポリシーとしてゲーム性を変化させるmodは入れない。UIと操作性の改善だけ。

  • Interaction Bubbles
    • 定番。にぎやかい。楽しい。
  • Colony Groups
    • pawnが10人を超えた辺りから前衛と後衛の衣類ポリシーの手動変更ポチポチが面倒になってきたので導入。一括変更が可能。
  • Numbers
    • 自分で好きなカラムを指定した表が見れる。各pawnの空腹度や睡眠を縦覧するときに役立つ
  • Moody
    • コロニー全体のmood上昇/下降要因を集約された形で見れる。やはり人数が増えてくると個人ではなく全体として確認し対応せねばならないので役に立つ
  • RimHUD
    • 定番。でも意外と必須でもないかも?
  • RPG Style Inventory
    • どうしても各装備のカバー範囲とレイヤーの概念を覚えられないので
  • Relations Tab
    • pawnの人間関係を一覧するために最も適した形はグラフであって、当然こういうmodが存在してしかるべきと考え、探したら案の定あった
  • More Graphs
    • 各種リソースの時系列グラフが確認できるようになる。コロニーが発展してくるとリソース管理も全体として捉える必要が生じる。

大規模集約型農業の苦悩

1人のpawnが1日に消費する栄養は20。年間(60日)だと1200。

米とトウモロコシの生産効率はほぼ同じなので米(およそ6栄養/6日)で考える。1年間のうち米が栽培できる期間は、気候によるが、温帯森林だと40日間なので6サイクル栽培できるとすると、諸々の計算の結果34タイル/pawnの栽培面積が必要になる(収穫失敗・火災・病害のリスクを含めるとさらにマージンが必要)。

10人いると340タイル。これはなかなかの規模だ。これだけの規模になると農作業・運搬作業のリソース軽減を考える必要が出てくる。

農作業のリソース軽減は、やはりトウモロコシ栽培だ。トウモロコシは米の約3倍の生育期間で約3倍の収穫が得られる。農作業が1/3で済むというメリットがあるが、収穫の頻度が落ちるので十分な保管庫が必要になる。火災・病害でロットがまるごとダメになると次の収穫が得られるのが20日後になり、非常にリスクが高い。

一般的なサイズの冷蔵庫はフル棚化して容量3倍にしても不十分になるだろう。その場合は冷蔵しない第2保管庫を立てるのか良い。常温でも1年位保つし、分散保管は火災へのリスクヘッジになる。常温保管庫を優先して非常食化するのも良い。