比部落格廢一點,但是又比推特認真一點
還有一些我懶得確認的想法
音樂和文學一樣,都能表達某種哲學思想,而且一樣可以被國文老師拿來出閱讀測驗(鬼才看的懂,這要多大的腦洞才能從幾個音符/文字中讀出這麼多東西)
第二個做法可以改成定義一個死板的 Tree,提供各種操作,每個操作就會附贈一個通知 Update 的副作用,缺點很明顯,做不到定義以外的操作,而且樹的形狀能多複雜取決於預先定義的 Tree

另一個想法是把 Tree 變成 immutable,這樣就可以有每個動作存一個 snapshot,然後再讓 Update 自己想辦法渲染,但是因為現在的 Tree 用到了指標,要想辦法解決指標問題
而且可預期的,這個方式記憶體需求會大一點
/home/simba/murmur.txt
如果 simbafs/tree 要支援動畫,樹應該要改成 immutable,然後 Tree.Op() 會回傳一個有 UpdateTreeCmd 的陣列,依序執行 每個 UpdateTreeCmd 代表一刻的狀態 但這樣就會大幅介入演算法的執行。例如 search 這個動作,就要每移動一次 current 就回傳一個 tree,那麼現在在執行什麼動作、各個指標指在哪裡都要存在 Tree 裡 Tree 新增欄位 jobs 和 map[string]pointers jobs[0] 表示目前在幹嘛,例如 search…
MVP 是做出來了,但是不好用,首先定義「動作」,一個動作是指一個會在畫面上顯示的一幀,一個動作內可以把整個 avl insert, rebalance 全部做完。也可以全部拆開,每 search 一層一個動作、插入一個動作、每 rebalance 一層又是各自一個動作。不過因為目前設計的關係每個動作都是獨立、無狀態的函數,所以狀態就要存在 tree 或是 msg 裡。打個比方,就好像畫畫時每動一筆就被人打斷、叫去旁邊站著,讓人拍完一幀再回來畫下一筆,然後又被打斷……
整個程式寫起來非常麻煩,要區分很多不同種類的動作、決定下一個動作等等,而且現在的架構是強制 tail calling,所以無法往下搜尋完後往上再 rebalance
要解決這個問題的話我有個想法,弄一個 PackedMsg,一次拆一層,回傳 Cmd 時可以塞不只一個進去,最外層的就是下次執行的 Cmd。但是這個寫起來也麻煩,不直覺
以上是比較符合 bubbletea 設計的做法,另一個解法是開一個 goroutine,每一個動作就往某個 channel 送出訊號,通知 update 可以畫了(這裡怎麼設計還得想想,可能是傳一整個樹的 snapshot 過去?),並且等待 Update 通知完成的訊號再進行下一步,這樣就類似 motion canvas 用 yeild 暫停函數的做法
如果 simbafs/tree 要支援動畫,樹應該要改成 immutable,然後 Tree.Op() 會回傳一個有 UpdateTreeCmd 的陣列,依序執行
每個 UpdateTreeCmd 代表一刻的狀態
但這樣就會大幅介入演算法的執行。例如 search 這個動作,就要每移動一次 current 就回傳一個 tree,那麼現在在執行什麼動作、各個指標指在哪裡都要存在 Tree 裡
Tree 新增欄位 jobs 和 map[string]pointers
jobs[0] 表示目前在幹嘛,例如 search node 10, 然後 pointers 包含一個指向 Node 的指標,還有顏色、標籤等等演算法無關的東西。收到 UpdateTreeCmd 之後會根據這兩個欄位和實際的 Tree 決定要幹嘛,例如把 curr 移到 curr.Left,然後把整棵樹回傳,進入下一個 UpdateTreeCmd
那麼剛剛 Op 回傳一個陣列的 UpdateTreeCmd 就要改成回傳第一步,後續步驟根據第一步執行結果而定
這樣好像比較符合 bubbletea 的設計
那麼 Tree 的設計就改成一個大大的 state machine,他的狀態分別是 tree, jobs, pointers
當人說出「我覺得……」,接下來的內容跟 GPT 差不多
連原理都猜不出來的是魔法
猜得出大概但不知道細節的是科幻
知道細節的是科學
關於臺灣隊 vs 中華隊這個話題
有官方身份的人說中華隊我是不介意,畢竟現在它就叫「中華隊」,之前公投也沒過,而有官方身份的人要遵守法律,說中華隊無可厚非
而我自己都一律寫臺灣隊,因為「中華台北」這東西怎麼看都是自降國格
git show --stat --oneline HEAD
另一個夢是在考試,教室座位很少,而且幾乎沒位子,有人甚至在我旁邊的走道考試,幾乎都擋到我的視線了。發考卷的時候數量不夠,然後助教說字太小他馬上再去重印一份。不過我有拿到所以就先寫了,幸好我的考卷沒什麼問題。考卷內容都是簡答題之類的,不過可以翻書,但是要寫出他在課本哪一頁,有夠麻煩。我隔壁那個同學寫超快,我才一半他就寫完了。
考完試後就去搭車回家,然後就有上面的高鐵劇情
夢到因為某些原因高鐵停在月台上暫時不開,然後我就在門口看。我同學好奇扳了一個門口的扳手,結果那是車子的手煞車,然後整列高鐵就開始慢慢往前滑,我們就在門邊往反方向推,希望把車推回原位
正在讀 Golang 的 net/http 原始碼,發現 Golang 標準庫中常常看到一個寫法,例如
func (c *Client) Do (req *Request) (Response, error) {
  return c.do(req)
}

unc (c *Client) Do (req *Request) (Response, error) {
  // do something here......
}

這個寫法看起來很多餘,問 ChatGPT 他說方便測試、提昇封裝性之類的理由,但是都沒有說服我。直到我看到了這段,在 roundtrip.go 中
func (t *Transport) RoundTrip(req *Request) (*Response, error) {
  return t.roundTrip(req)
}

RoundTrip 呼叫了 roundTrip,有趣的是這個檔案有個編譯器設定
//go:build !js

這個只在非 wasm 環境使用,當編譯目標是 wasm 時,就會去另一個檔案 roundtrip_js.go 用另一個函式。
看到這裡我才知道,一個 public function 什麼都不做只呼叫一個 private function 的用意是編譯時可以用不同檔案,而且不破壞函數呼叫的形式。
這兩天是一日棒球迷
在看中國的網路小說,「主角拿棍子在地上寫下一個繁體大字--火」
請問火這個字簡體是還能簡成什麼樣子?
有時候想起過去的自己就覺得好蠢
「信用卡密碼不是用來保護消費者,而是讓消費者不能在買完東西後抵賴這不是自己買的」
我討厭的兩種人
* 到處餵但不養的礙爸礙媽
* 放馬後炮的人
「你所謂的歲月靜好,是因為有人負重前行」
為什麼臉書有一群人喜歡開地球但是發表一些很蠢的言論?
Back to Top