「このドメインモデル要らないじゃん。代わりにこういう定義を使ったらもっと上手くいく」みたいな事を思いついてすぐに実行できる環境がプログラミングしていて一番面白い。
仕事のプログラミングだと、そういう判断をする事が難しい。何故ならドメインモデルの変更には関係者の同意や説得が必要になるため、そのコストがとても大きくなる。
ドメインモデルの組み換えによるソフトウェアの進化がある意味で一番本質的なソフトウェアの進化で、その体験は趣味プロでしか体験する事は難しい。
「このドメインモデル要らないじゃん。代わりにこういう定義を使ったらもっと上手くいく」みたいな事を思いついてすぐに実行できる環境がプログラミングしていて一番面白い。
仕事のプログラミングだと、そういう判断をする事が難しい。何故ならドメインモデルの変更には関係者の同意や説得が必要になるため、そのコストがとても大きくなる。
ドメインモデルの組み換えによるソフトウェアの進化がある意味で一番本質的なソフトウェアの進化で、その体験は趣味プロでしか体験する事は難しい。
という開発が一番楽しい
bw をしばらく作っているけど、まだ9割5分くらいテストを書いていない。
テストを書くのをサボっている訳ではなくて、テストの書き方が分かっていなかったり、何処でインターフェースを切れば良いのか分かって居なかったり、そもそも何を作っているのか理解できていない部分が多くて、そういう部分に対してテストが書けていない。
振り返ってみると、昔はこういう何を作っているのか自分でもはっきり分かっていない事がとても多かった。今は何を作っているのか完全に理解しながら作る事が多くなった。特に仕事でコードを書く場合は何を作っているのかは最低でも理解している。
何を作っているのか理解しているという事は、良い事のようでもあるけれど、ある意味で退屈な作業でもある。何を作っているか分からないという事は、その作業によって自分が知らない何かを探索しているという事になる。
bw を始めて、こういう何を作っているか分からない、未知の何かをプログラミングで探索する作業を久しぶりに再開出来たような気がする。bw の前に最後にそういう探索的プログラミングをしたのは krile-drive (13年前) だったような気がする。
問題を解くようなプログラミングや、バグを潰すプログラミングも楽しいけれど、何なのか分からない未知の何かを探すプログラミングは圧倒的に面白い。
ヘロドトス歴史を継続して読書中。バビロンの都市の描写が豊かに表現されていて、読んでいて楽しい
JavaScript は WeakRef を持っていて凄いと感動したけど、調べたら結構いろんなメジャー言語に既に実装されているのか・・・
既に持っているアセットの多重ロードが走らないように、ローディングのプロミスをキャッシュするようにした。
https://github.com/kt3k/bw/commit/d5959e25be58db586b876ff1bd2a7f8a488b4caf
単純にキャッシュしてしまうと、全てメモリ上に乗ってしまって良くない。オープンワールドを想定しているので、フィールドは無限に広くて、すべてのオブジェクトがメモリには乗らない想定なので。
不要なロードは避けつつ今必要なアセット以外は適切に回収されるように、アセットを WeakRef としてキャッシュする仕組みを入れた。これによって「今使われているアセット」は全てキャッシュに乗っていて「誰も使わなくなったアセット」が自然に回収されるようになった。
bw、アセットの GC を考えた時に、自分で GC を実装するのは不毛なので、言語自体に GC させたいため、AssetManager がアセットの管理をするのではなくて、アセットを使うクラス自体に自分で自分のアセットを管理させる仕組みに変えた。
https://github.com/kt3k/bw/commit/773db5ef68ff4c09f64430543517f79b3743bb7a
この実装にしたことで、使っているアセットをメモリ解放したい場合は、その親のクラス自体を破棄すれば使ってるアセットも自動的に破棄される。あとは LoadScope の範囲パラメーターの調整で運用できる範囲をうまく見つければ良い
Rust って異なる trait が同じ名前のメソッドを定義していても問題なく両方実装できるらしい。なるほど
cell の on
ヘルパーのインターフェースを
on.click = (e: Event) => {}
から
on("click", (e: Event) => {})
に変えた。こちらの方が、素直で分かりやすい気がするのと、まだやっていないけど、この signature だとイベント名からイベントオブジェクトの型を推論させられる (touchmove
イベントだったら e
が TouchEvent
に出来る、等) ので、より便利に出来そうというのが主なモチベーション。
icfpc で 3d 言語というのが出題され(?)て、2次元配置型言語 (befunge 的なものと思って良いのかな・・?) で時間遡行概念が取り入れられていたらしい・・・気になる
スクラップボックス、芋蔓式にいろんな事を思い出せるのは良いのだけど、そのせいでいつも同じところに考えが収束してしまいがちになる問題があると思う。
ある程度過去の情報と切り離して考えたい時でも、過去の情報が強制的に目に入ってくるので、そのせいで気が散ってしまうと感じることが多くなってきた。
実際ギリシャ人が直接コミュニケーションが取れたのはペルシア戦争で戦ったペルシア人たちだろうから、きっとヘロドトスはメディア側から見た情報にアクセス出来ていないのではないか?
メディア人たちは、メディア王国滅亡の影響で、殺されたり、奴隷に身分を落とされたりで、ペルシア帝国内では、ほとんど発言権がなかったであろうから、ヘロドトスがアクセス出来たのはあくまでペルシア人から見たペルシアの歴史の話であって、メディア側の見解は含まれていないのではないか?
そう考えると、アステュアゲスの暴虐さは少し差し引いて考えないといけないかもしれないし、キュロスがあっさりメディアを征服している事はむしろ、思い出したくない辛い出来事があったことの裏返しなのではないか?
最近ヘロドトス歴史を読み直してる。キュロスがアステュアゲスに捨てられてから、叛逆してメディアを征服するあたりから。
キュロスが捨てられる過程の話はとても詳細に語られるけれど、キュロスが挙兵して最終的にメディアを征服するまでの過程がほとんどまるっきり省略されているのがとても気になる。本来なら、この間にも膨大な量のストーリーがあったはず。
この辺の詳細はギリシアまではあまり伝わらなかったのだろうか・・・?