一人暮らし歴2年時点の食生活

この記事は一人暮らし Advent Calendar 2022の15日目の記事です。

一人暮らしを始めて2年経とうとしている。現時点の食生活をメモしておく。

デッキ

野菜ジュース

最悪これ飲んでおけば栄養的に大丈夫だろう。2年間ぶっ通しで毎日飲んでいるが大病を患ったことはないので信頼している。

カロリーメイト

最悪冷蔵庫の中が空っぽになっても水とカロリーメイトさえあれば数日は生きられるだろう。7年間くらい定期的に食べている。自分はチョコが飽きずに食べられる味。チーズはたまに食べたくなる。

冷凍ブロッコリー

いつもの食事にブロッコリーを足すと栄養価的に良いだろう。こういうの後から見返すと楽しそう。

冷凍パスタ

ブロッコリーが入ってるのでストックしている。冷凍ブロッコリーを足してあげると栄養価的に良いだろう。

冷凍アクアパッツア

www.maruchan.co.jp

ブロッコリーが入ってるのでストックしている。冷凍ブロッコリーを足してあげると栄養価的に良いだろう。(再)

自炊

以前はハヤシライスや麻婆豆腐の作り置きをしていたけど料理するのがめんどくさくなったので最近はしていない。だが炊飯器を使うことで自炊した気分になれるし何より楽なので料理に疲れた時にはやってみるといいかも。

以下の食材をいれて炊飯ボタンを押すだけで良い。

  • 鶏もも肉(むね肉じゃないぞ!)
  • ネギ
  • しょうが
  • にんにく(チューブで良い)
  • 料理酒
  • 鶏ガラスープの素

ポイントはもも肉。ボリュームがあって食べごたえがある。料理酒を入れることでお肉がパサつかずに柔らかくなる気がするのでおすすめ。

おわりに

ブロッコリーは全てを解決してくれる。

dotfiles盆栽記6: シェルの再起動コマンドをエイリアスにするのを止めた

減らすという所作も盆栽に含まれるだろう。

モチベーション

以前はTerminal.appを使っていたが最近はWarp*1を使っている。カスタマイズせずにコマンドの補完やブランチ表示をしてくれるので気に入っている。今回はTerminal.appで使っていた再起動コマンドがWarp上では期待した動作にならなかったので修正していく。

シェルの再起動が必要なケース

そもそも修正する必要はあるのか?手癖でシェルの再起動をしている気がしていて不要かもしれない。シェルの再起動が必要なケースを洗い出す。

  • .zshrc を書き換えた時

これしか思い浮かばず、頻度が少ないのでエイリアス不要と判断した。

とはいえ、モチベーションに書いた問題が気になるので解決する。

問題

Terminal.appで使っていた再起動コマンドがWarp上では期待した動作にならなかった

alias resh='exec $SHELL -l'
Warp (通常時のすがた)
Warp (`exec $SHELL -l` 実行後のすがた)

シェルを再起動するとWarpの設定が完全に適用されていない不完全な状態になる。

アプローチ

問題の根本原因は分からないが、Warp自体を再起動すれば良さそう。コマンドからアプリケーションの再起動をしたことが無かったので調べた。

open -a Warp.app

上記がシンプルなアプリ起動。help*2を見るとリフレッシュのフラグがあった。

open -F -a Warp.app

こうすると変数はリセットされたが、.zshrc に更新がある場合に反映されなかった。もう一息っぽい。helpを見るとアプリの新しいインスタンスを開く、みたいなフラグがあった。

open -n -a Warp.app

これで変数もリセットされていて、.zshrc の更新も反映されそう。だが新しくウィンドウが開くので無限にウィンドウが開いてしまう。古いウィンドウは消したい。

パッと思いつく方法は再起動を実行するプロセスを自身でkillしてWarpを開けば良さそう。

試行錯誤していると自分自身をkillした後に何かするには一工夫必要みたいで面倒だった。順序逆転させてもやりたいことは実現できるので新しくWarpを立ち上げてから自分自身をkillさせるようにした。

open -n -a Warp.app; kill $PPID

これでウィンドウが切り替わるという微妙な点を置いてはうまくいった。 kill $$ では上手くいかなかった。親プロセスごとkillしないと駄目で少しワイルドかもしれない。

*1:https://www.warp.dev/

*2:実際にはhelpのサブコマンドはなくて、openだけで実行すると終了ステータス1でサブコマンドの一覧が出力される

Associated value付きのenumにIdentifiableを準拠させる

開発環境

$ swift --version
swift-driver version: 1.62.15 Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51)
Target: x86_64-apple-macosx13.0

モチベーション

こんなコードを書くとコンパイラに怒られる。

// Type 'CustomColor' does not conform to protocol 'Identifiable'
enum CustomColor: Identifiable {
    case red
    case blue
    case green(Int)
    
    var id: Self { self }
}

怒られないようにしたい。

アプローチ

XcodeDo you want to add protocol stubs? で自動修正を頼むと、以下になって解決しない。

enum CustomColor: Identifiable {
    var id: ObjectIdentifier  // 追加
    
    case red
    case blue
    case green(CustomGreen)
    
    var id: Self { self }
}

おそらく、Associated valueがあるときに自身を返すだけではidの型であるObjectIdentifierを満たせないのだろう。

いくらかやり方はありそうで、

import Foundation

enum CustomColor: Identifiable {
    case red
    case blue
    case green(Int)
    
    var id: UUID { UUID() }
}

乱暴にUUIDのインスタンスを返すことで一旦はコンパイラには怒られない。しかし、idアクセス毎にUUIDのインスタンスを生成しているのでパフォーマンスが悪そう。

別案として、素直にHashableに準拠させてあげれば上記よりは筋が良さそう。

enum CustomColor: Identifiable, Hashable {
    case red
    case blue
    case green(Int)
    
    var id: Self { self }
}

Associated valueの型であるIntはHashableに準拠しているし、enum自体も自身を返してあげればIdentifiableに準拠できるため明示的にenum自体に一意性を担保させてあげる必要性が分かっていないけど丁寧にやってあげる必要がある、ということが分かった。

参考