歯医者に行った。お前は今こういう状態ですと見せられた写真はとんでもない有様で(例えるならパチンコ屋の灰皿、サイレントヒルの裏世界)普通に恥ずかしかった。
2025-12-01 作成日時:2025/12/1 20:07:00
2025-11-27 作成日時:2025/11/28 1:30:00
仕事が順調に進む。今作ってる機能のフロントエンドは全部書き終わったので、あとは PR 分割してレビュー出して終わり。残るはサーバサイド。なんか色々やることあってめんどくさいんだよな。なんか口内に違和感があり2週間ぐらい歯医者行きたいと思い続けてる。しかし思い続けてるだけで次の一歩が踏み出せない(?)。明日は絶対に歯医者予約する。予約できたら100点
- なんとなくもう useSWR 使わずに
useと素のfetchだけでSuspenseしつつデータ取れんじゃないかと思って試してみたら、簡単にできた(型は適当)。この useFetch をコンポーネントの中で使うとサスペンドしてくれる。-
const promiseCache = new Map<string, Promise<unknown>>(); const useFetch = (key: string, fetcher: () => Promise<unknown>): unknown => { if (!promiseCache.has(key)) { const promise = fetcher() promiseCache.set(key, promise); } return use(promiseCache.get(key) as Promise<unknown>); }; - 肝は Promise をスコープ外にキャッシュしておく必要があるところだ。キャッシュしないと無限再レンダリング地獄になる。なぜそうなるのかについてはここが詳しい。まあこんなもんでいいだろ。外部依存なんて使わなければ使わないほど良い。
-
- せっかくだからライブラリ使わずに
Contextだけで状態管理するか、って思ったけど selector 的なものを素の React でどう書けばいいのかわからない。- AI に聞いたら
useSyncExternalStoreを使えばいいらしいんだけど、ほんまか?この hooks のこと全然知らない… - こんな useSyncExternalStore の使い方が
- AI に聞いたら
2025-11-26 作成日時:2025/11/26 23:57:00
ようやく仕事が自分のペースで進められるようになってきた。メンターとの 1on1 で趣味がない、俺達には仕事しかない、そしてそれは持続可能性がない、という最悪の話題で盛り上がる。
- https://open.spotify.com/intl-ja/track/4WpNdRhrQHk9M54UIjL7HF?si=981e0de59c754612
- 良い(´;ω;`) 結局こういう半音で上がったり下がったりするのが激刺さりしちゃう、マジ骨の髄まで日本人
- Duck Typing
- ダックタイピングって結局なんなのかよく分かってない。Python・JS・Ruby みたいな動的型付言語の挙動について表現するときに使われたり、構造的部分型を説明するときに使われたり、Go の
interfaceについて説明するときに使われたりしている。結局何を指してるのか分からない。- 「ある言語において、複数の構造体(or クラス)が同じメソッドを実装しているとき、それらが暗黙的に相互に交換可能となる挙動」ぐらいの意味っぽい。
- 一般的な動的型付言語は何も特別な操作をせずとも自ずとそうなる。つまり、ある関数があるメソッドを持つオブジェクトを引数に取るとき、その関数には同じ名前のメソッドさえ持っていればどんな形状のオブジェクトも渡せて、正常に動作することが期待できる。動的型付言語では、この挙動があるから複数の型の異なるオブジェクトを統一的な仕組みで扱うことができる。
- 一般的に狭義のダックタイピングはこういう動的型付言語の挙動を指すっぽい。
- 「暗黙的」というのがダックタイピングという用語を理解するのに重要なポイントだ。静的型付言語の世界観でいうと、それは関数の引数として渡される複数のオブジェクトが「暗黙的に」同じスーパータイプを継承している状況。
- 一般的な動的型付言語は何も特別な操作をせずとも自ずとそうなる。つまり、ある関数があるメソッドを持つオブジェクトを引数に取るとき、その関数には同じ名前のメソッドさえ持っていればどんな形状のオブジェクトも渡せて、正常に動作することが期待できる。動的型付言語では、この挙動があるから複数の型の異なるオブジェクトを統一的な仕組みで扱うことができる。
- Java のようにある型が「明示的に」何を継承してるか、何を実装してるかを示す必要がある言語では異なる抽象化の方法が必要になる。
- Java の型システムは階層的だ。スーパータイプ(親)を任意のサブタイプ(子)で置き換えることができる。また、スーパータイプを受け取る関数は、スーパータイプを継承した複数のサブタイプを受け付けることができる。これによってポリモーフィズム(サブタイプ多相)が可能になる。つまり、Java ではクラスの継承関係を利用した抽象化がなされている。
- では Go ではどうか。 Go の
structは親子関係に相当するものを表現できない(埋め込みはあるけど継承じゃない)ので、Java とは異なる方法で複数の型を抽象化する必要がある。- ここで
interfaceが登場する。つまり、interface は階層的な型システムを持たない Go でサブタイプ多相を実現するために導入された機構だ。これは基本的に Java のインターフェースと役割は同じだが、ひとつ異なるのは、明示的に関係性を指定することなく、そのinterfaceと同じメソッドを持つ構造体が暗黙的にそれを実装したことになるということだ。 これは確かに(狭義のダックタイピングとは異なるものの)ダックタイピング的ではある。- ここでインターフェースはそれを実装する型と暗黙的なスーパータイプ<->サブタイプの関係を持つことになる。これが Go でほぼ唯一の親子関係。
- このような、構造が一致してることによってサブタイプが暗黙的に発生するとき、それを構造的部分型と呼ぶ(TypeScript も構造的部分型があるよね)。つまり、Go の場合は、
interfaceというダックタイピング的機構によって、interfaceと構造体の間に構造的部分型の関係が成り立つことになる。
- ここで
- 「ある言語において、複数の構造体(or クラス)が同じメソッドを実装しているとき、それらが暗黙的に相互に交換可能となる挙動」ぐらいの意味っぽい。
- ダックタイピングって結局なんなのかよく分かってない。Python・JS・Ruby みたいな動的型付言語の挙動について表現するときに使われたり、構造的部分型を説明するときに使われたり、Go の
2025-11-23 作成日時:2025/11/23 22:49:00
まったく弾いてなかったギター(ジャガー)をリペアに出した。なぜかピックアップセレクターの配線が逆で普通とは反対の挙動になってるとか、実はブリッジがムスタングのやつだったとか、フェンジャパがもう生産終了してて部品が手に入らないとか、様々な衝撃的事実が明らかになった。7年前に中古で買った時点ですでにこの状態だったんだろう。2万円くらいで配線とか、サビまくってるジャックとかブリッジとか一通り直してくれることになった。すごいいい感じのリペアマンだった。
2025-11-14 作成日時:2025/11/14 22:27:00
会社の飲み会。またも全然喋らず帰る。まあずっと会話に参加せずスマホいじってたワイが悪いのだが。結局こういう場で全然胸襟を開くことができない。転職してもう4ヶ月経過したのに誰とも親しくなれる気がしないし、口座にはなぜか15万円しかない(なんで?)。換気扇が故障してスイッチが「強」の状態で入りっぱなしになってから、もう1ヶ月ぐらい経過している。大家とか不動産屋に連絡したほうがいい気はしているが、部屋にゴミが散乱していて人を入れることができない。その電気代でもしかしたら1万円ぐらいは飛んでいる可能性はあるが、怖くて明細を見れていない。せめて「弱」の状態で入りっぱなしになってほしかった。うるさいし。