2024-12-12
沒什麼組織、一些倏忽即逝有趣或不有趣的想法
- 底層邏輯(core concepts)
- 如何思考
- 重新發現的能力:思考所看見的事物中背後可能的契機和目的,考慮場域和時空背景、歷史脈絡,再從自己的角度重新去發想自己會怎麼做去達成相同的結果。這將幫助我們更好的理解事物的本質,了解為什麼在那個時空背景下會有那樣的產物,剖析問題的根源,並且訓練解決問題的能力。
- 邏輯推演的能力:將表層的現象和事物拆解概念或小單元,透過聯想已知的知識結合觀察進行演繹和歸納思考彼此之間的關聯性,找出其中的規律和原理,並且將這些原理應用於自己的觀測之中驗證,得出新的結論或修正演繹的邏輯。
- 架構性思考的能力:將得到的結論抽象為高層次的概念(父類別),並衍伸出這些概念下的子概念(子類別),並且結合自己的知識重複迭代整理或衍伸子類別、實例和父類別及其中的連接性,最終成一個樹狀的架構,這將幫助我們可以有效的基於自己的假設和論述延伸並組織自己的知識體系,並且可以更好的理解事物的本質和規律。
- 為什麼我們應該避免 Context Switch
- 不斷地打斷下難以進入心流
- 人類的專注力是有限的,一心二用是透過分散自己注意力的比例來達成的,減少了注意即可能遺漏了可能的重要資訊
- 溝通默契
- 所謂默契即基於過去共同的認知、cache,有共同的思考脈絡和知識基礎,透過這些共同的基礎可以更快速的理解對方的意圖和表達
- 以團隊的角度,每位成員若頻繁的進行 Context Switch 將會導致溝通的困難,因為每位成員的專注力都被打斷,無法專注於討論的主題,並考驗每位成員 catch up context 的能力,進而導致溝通的效率降低達成共識的成本提高
- mempusle :PyEval_SetTrace +
/proc/self/smaps_rollup
的妙用
- 情境:production 上想要監控是程式碼的哪一個 function call 導致了 memory overhead,由於是在 production 上,profiling 的成本是很高的,因此需要一個 lightweight 的方式來找出問題的根源
- mempusle 的核心想法:以 C extension 的方式實作一個 Python module,透過 PyEval_SetTrace hook python function call 的底層,並且透過
/proc/self/smaps_rollup
的內容來取得當前 process 的 memory usage [ref|ref],進而計算出每個 function call 的 memory overhead,最後將這些資訊透過 log 的方式記錄下來,由於透過 PyTrace_CALL 和 PyTrace_RETURN 追蹤 function call 層數,透過限制層數這樣就可以在 production 避免過多的 overhead (memray 透過追蹤 malloc/free 來計算則相較較貴)
- /proc/self/smaps_rollup 會紀錄 caller process 的 memory usage,self 是一個指向當前 process id 的 symbolic link,smaps_rollup 則是一個檔案 (這個發想源自 psutil 的實作,但是 psutil 是 python implementation 會有一些 overhead,因此這邊直接透過 c extension 來復刻相同的效果但換去外層)
- cpu bound 傾向可以透過 c extension 改善,多夠過 use case 去理解 c extension