Home / Aug 2024



Yoshiya@kt3kAug 28, 2024

既に持っているアセットの多重ロードが走らないように、ローディングのプロミスをキャッシュするようにした。

https://github.com/kt3k/bw/commit/d5959e25be58db586b876ff1bd2a7f8a488b4caf

単純にキャッシュしてしまうと、全てメモリ上に乗ってしまって良くない。オープンワールドを想定しているので、フィールドは無限に広くて、すべてのオブジェクトがメモリには乗らない想定なので。

不要なロードは避けつつ今必要なアセット以外は適切に回収されるように、アセットを WeakRef としてキャッシュする仕組みを入れた。これによって「今使われているアセット」は全てキャッシュに乗っていて「誰も使わなくなったアセット」が自然に回収されるようになった。


Yoshiya@kt3kAug 24, 2024

bw、アセットの GC を考えた時に、自分で GC を実装するのは不毛なので、言語自体に GC させたいため、AssetManager がアセットの管理をするのではなくて、アセットを使うクラス自体に自分で自分のアセットを管理させる仕組みに変えた。

https://github.com/kt3k/bw/commit/773db5ef68ff4c09f64430543517f79b3743bb7a

この実装にしたことで、使っているアセットをメモリ解放したい場合は、その親のクラス自体を破棄すれば使ってるアセットも自動的に破棄される。あとは LoadScope の範囲パラメーターの調整で運用できる範囲をうまく見つければ良い



Yoshiya@kt3kAug 23, 2024

cellon ヘルパーのインターフェースを

on.click = (e: Event) => {}

から

on("click", (e: Event) => {})

に変えた。こちらの方が、素直で分かりやすい気がするのと、まだやっていないけど、この signature だとイベント名からイベントオブジェクトの型を推論させられる (touchmove イベントだったら eTouchEvent に出来る、等) ので、より便利に出来そうというのが主なモチベーション。



Yoshiya@kt3kAug 22, 2024

スクラップボックス、芋蔓式にいろんな事を思い出せるのは良いのだけど、そのせいでいつも同じところに考えが収束してしまいがちになる問題があると思う。

ある程度過去の情報と切り離して考えたい時でも、過去の情報が強制的に目に入ってくるので、そのせいで気が散ってしまうと感じることが多くなってきた。


Yoshiya@kt3kAug 22, 2024

実際ギリシャ人が直接コミュニケーションが取れたのはペルシア戦争で戦ったペルシア人たちだろうから、きっとヘロドトスはメディア側から見た情報にアクセス出来ていないのではないか?

メディア人たちは、メディア王国滅亡の影響で、殺されたり、奴隷に身分を落とされたりで、ペルシア帝国内では、ほとんど発言権がなかったであろうから、ヘロドトスがアクセス出来たのはあくまでペルシア人から見たペルシアの歴史の話であって、メディア側の見解は含まれていないのではないか?

そう考えると、アステュアゲスの暴虐さは少し差し引いて考えないといけないかもしれないし、キュロスがあっさりメディアを征服している事はむしろ、思い出したくない辛い出来事があったことの裏返しなのではないか?


Yoshiya@kt3kAug 22, 2024

最近ヘロドトス歴史を読み直してる。キュロスがアステュアゲスに捨てられてから、叛逆してメディアを征服するあたりから。

キュロスが捨てられる過程の話はとても詳細に語られるけれど、キュロスが挙兵して最終的にメディアを征服するまでの過程がほとんどまるっきり省略されているのがとても気になる。本来なら、この間にも膨大な量のストーリーがあったはず。

この辺の詳細はギリシアまではあまり伝わらなかったのだろうか・・・?