食物依存性運動誘発アナフィラキシー?
2年くらい前から急に蕁麻疹が出て1時間くらいで収まることが何度かあった。最近はプールで泳いだ後に出るという規則性があり、医者の友人から「食物依存性運動誘発アナフィラキシー」の可能性を指摘された。食後すぐに運動するとアレルゲンが急速に吸収されて蕁麻疹や呼吸困難を起こすというものらしい。
これを実験するために天丼(withエビ)を食べてからランニングをしてみたところ、過去にないほど強烈な蕁麻疹が出た。#7119で相談したら「呼吸困難がないなら救急車を呼ぶ必要はないが医者には行け」とのことで行ったところ、やはり食事と運動の組み合わせがよくなさそうとのことだった。ちゃんと運動をするようになったせいで発覚するのは皮肉だ。
蕁麻疹が出てしばらく痒いくらいなら自分で実験したろwと軽い気持ちだったが、ひどいアナフィラキシーが出ると命も危険だったので慎重になるべきだった。今日再び天丼を食べて、普通に歩いて帰宅して大人しくしていたら蕁麻疹は起きなかった。
という訳で私は甲殻類を食べた後は走らないので、ご承知おきください。
保護中: 試して理解 Linuxのしくみ 4 メモリ管理システム
TypeScriptの引数を分割代入したときの ‘A’ is assignable to the constraint of type ‘T’, but ‘T’ could be instantiated with a different subtype of constraint ‘B’ みたいなエラー
T型の引数を受け取ってそのまま返す関数だが、返り値の型をTにすると型エラーになる。
const f1 = <T extends { user: { id: number } }>({ user, ...rest }: T): T => {
return {
user,
...rest,
}
}
Type '{ id: number; } & Omit<T, "id">' is not assignable to type 'T'.
'{ id: number; } & Omit<T, "id">' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint '{ id: number; }'.(2322)
このエラーメッセージが難しい。 T extends { user: { id: number } }
に注目する。extendsだからTはたとえば
type T1 = {
user: {
id: number;
name: string;
}
}
かもしれない(狭い型)。そうだとしても、関数内でのuserの型は { id: number }
だ。nameがあることにはならない。TypeScriptならわかるかと思ったがわからないらしい。
Tに何を渡されようと返り値のuserの型は { id: number }
(広い型)なので、それを T["user"]
(狭い型)に渡しても要求を満たせないことがある。だから型エラーになる。
という話はここに書いてあるのだが
https://github.com/microsoft/TypeScript/issues/33579#issuecomment-534789400
このように書くと引数の型を維持できる。
const f2 = <T extends { user: { id: number } }>({ user, ...rest }: T): Omit<T, "user"> & { user: T["user"] } => {
return {
user,
...rest,
}
}
const b = f2({user:{id: 1, name: "chao", premium: false}})
const p = b.user.premium // アクセス可能
TypeScriptくんは書き方によって推論ができたりできなかったりする。かわいい。
docker-composeのスタック名で結構苦労した話
そんなにちゃんと調べた記事じゃないです…
docker-compose upすると適当なstackが作られ、stack名はデフォルトでdocker-compose.ymlがあるディレクトリの名前になる。僕は複数のリポジトリでdocker-compose.ymlをdockerディレクトリの下に入れているから、複数のstackの名前が docker
になって被る。そうするとstack内のコンテナとかボリュームの名前も docker-app
とか docker-db
とかになり、他のstackとぶつかりまくる。特にボリュームの名前の衝突は最悪で、特にハッシュ化とかしてないので同じボリューム名だとホストマシンの同じ場所にマウントされてDBのスキーマ違いますと怒られたりする。
stack名をちゃんと指定するにはdocker-composeの-pオプションを使うのだが、そもそもdocker-composeというのはupとdownしか覚えられない人間が使うもので、アプリケーションによって適切なオプションをつけて運用するのは不可能だ。結局僕はコンテナやボリュームの名前にアプリケーション名のプレフィックスをつけることで問題を回避したのだが、docker-compose.ymlのトップレベルにnameを入れておけば解決するらしい?(未検証)docker-compose.ymlの仕様(というかdocker系のドキュメント)、ググってもどれが信用できる情報かわからなくていつも適当にしちゃう。
保護中: 試して理解 Linuxのしくみ 3 プロセススケジューラ
保護中: 試して理解 Linuxのしくみ 2 プロセス管理(基礎編)
保護中: 試して理解 Linuxのしくみ 1 Linuxの概要
2023年年末有給消化 総括
1日目
上野
https://chao.tokyo/archives/3489
2,3日目
三県境
https://chao.tokyo/archives/3496
4,5日目
アクアライン
https://chao.tokyo/archives/3509
6日目
シン・仮面ライダーを見た。よくわからなかった。ジムで上半身を鍛えた。
7日目
掃除をした。
8日目
1km泳いだ。
9日目
サザエさんを見る。
総括
やはり大きな旅行をやろうとすると事前の計画が必要なので、なんとなくで休暇に突入してしまうとできても小旅行になる。関東制覇が達成できたのは良かった。
2023年年末有給消化5日目 ノルマクリアのためだけの小旅行
4日目はのんびり自宅で過ごして夜通しRimWorldしてたら朝になってて、WBC決勝が始まっちゃったので見てすぐ寝た。起きたら17時頃で、このまま何もせずに5日目が終わるのは耐えられなかったので3日目に考えた千葉・神奈川制覇をやることにした。シンプルにやると秋葉原→市川→秋葉原→川崎のように戻りが発生してあまり楽しくなさそうだったので、川崎からアクアラインで木更津に渡り、そこからJRで東京に戻ることにした。
で、この通りやったのだが、あまり楽しくなかった。ほとんど電車がバスに乗ってる時間で(酔った)、出発が遅かったので外も暗くてよく見えなかったからだ。川崎駅前はかなり繁栄していて、アクアラインの入口にはよく写真で見るような配管だらけで煙を吐く謎の工場地帯があり、木更津郊外にはラーメン屋とラブホテルしかなかった。
木更津駅の売店で千葉土産として売られていたオランダ屋の苺ミルフィーユを買って、そのまま駅の待合室で食べた。
どうせなら東京駅で舟和の芋ようかんも買って帰ろうと思ったんだけどもう遅くて売店が開いてなかった。
最寄り駅まで戻ってきたら1日目にあったストリートミュージシャンがまたいた。