--- title: ShamrockLee (李岳瞬) categories: User ... # 簡介 * 國立中央大學 物理學系學士班 (2017 ~ 2022) * 國立中央大學 物理學系碩士班 (2022 ~ ) * GitHub: [ShamrockLee](https://github.com/ShamrockLee) * HackMD: [ShamrockLee](https://hackmd.io/@ShamrockLee) ## 成果發表 ## Linux 核心和相關專案貢獻 * Comment typo about "transmit" * Mailing list: [`[PATCH]`](https://lkml.org/lkml/2023/6/21/1661), [`[PATCH 0/8]`](https://lkml.org/lkml/2023/6/21/1685) * commits in netdev/net-next: [`b028813ac973`]( https://git.kernel.org/netdev/net-next/c/b028813ac973), [`304b1875ba02`](https://git.kernel.org/netdev/net-next/c/304b1875ba02), [`a0e128ef88e4`](https://git.kernel.org/netdev/net-next/c/a0e128ef88e4) ## 其他專案貢獻 * [sysprogs/lab0-c](https://github.com/sysprog21/lab0-c): commit [`e2abe22d85be`](https://github.com/sysprog21/lab0-c/pull/131/commits/e2abe22d85beb32abd8abd3dc430d88a1e048100) * [Nixpkgs](https://github.com/NixOS/nixpkgs): GitHub PR [`204565`](https://github.com/NixOS/nixpkgs/pull/204565), [`216864`](https://github.com/NixOS/nixpkgs/pull/216864), [`222252`](https://github.com/NixOS/nixpkgs/pull/222252), [`222518`](https://github.com/NixOS/nixpkgs/pull/222518), [`224683`](https://github.com/NixOS/nixpkgs/pull/224683), [`234032`](https://github.com/NixOS/nixpkgs/pull/234032), [`234072`](https://github.com/NixOS/nixpkgs/pull/234072), [`235616`](https://github.com/NixOS/nixpkgs/pull/235616), [`237919`](https://github.com/NixOS/nixpkgs/pull/237919) * [Nix](https://github.com/NixOS/nix): GitHub PR [`4803`](https://github.com/NixOS/nix/pull/4803), [`7690`](https://github.com/NixOS/nix/pull/7690) * [dream2nix](https://github.com/nix-community/dream2nix): GitHub PR [`523`](https://github.com/nix-community/dream2nix/pull/523) # 2023 Linux 核心實作 春季班 自我評量 ## 作業共筆 * lab0: [開發紀錄](https://hackmd.io/@ShamrockLee/sysprog2023q1-lab0), [GitHub](https://github.com/ShamrockLee/lab0-c) * quiz2: [開發紀錄](https://hackmd.io/@ShamrockLee/sysprog2023q1-quiz2) * quiz3: [開發紀錄](https://hackmd.io/@ShamrockLee/sysprog2023q1-quiz3) * assessment: [開發紀錄](https://hackmd.io/@ShamrockLee/sysprog2023q1-assessment) ## 期末專題 * 亂數產生器研究 - [共筆](https://hackmd.io/@sysprog/r18z86NHh) - [講解影片](https://youtu.be/dZ66QkoA5YI) - [簡報](https://docs.google.com/presentation/d/18_HDogktJwnkModepk0hZDRlmVGEcARfH4GRRdwAujo/edit?usp=sharing) * 一對一討論 - 時段: 2023 年 5 月 11 日 20:30 - 21:00 - 討論內容與指派任務: - O(1) 排程器的特性 - 沒有分支的 `floor_log2` 與 `ceiling_log2` - 鍊結串列 merge sort 及重用既有的程式碼改善實作 - 教師的建議 - 誠實面對自己 - 及早接受檢驗與交流,包含將開發紀錄與撰寫中的程式碼上網公開 ## 所見所聞所感 ### 修課過程 當初是因為筆電上的 drivers 沒有正確運作,想知道 Linux drivers 如何撰寫,偶然加入去年的臉書課程討論區。得知新酷音的創世神今年也有開課,再加上考慮轉換跑道,在第二週改變修課計畫決定加入。 上這門課之前,一直有一種幻想,覺得任何事只要有熱情、衝下去就做得到。開始上課之後,才發現每週光講座時間就超過八個小時,第一週的作業 lab0 就超過大部分課程一個學期的作業量。 投入的前兩週(第三、四週)幾乎是放掉研究,每天醒來就開始寫作業,到晚上趴在桌上睡著,但進度卻遠不如預期。之前跨系修過資料結構,學過 linked-list ,到了 lab0 的 `q_sqrt` 就卡關了,花了不只一天還在為幾十行箭頭除錯。那時怕被發現做不出來,沒有及早公開程式碼與開發紀錄。後來再加上研究進度的壓力與測驗寫不出來,就只有每個星期的講座有收看,其他幾乎都落掉了。 過了期中,教授與助教開始提醒學員及早預約一對一討論。原本想把 lab0 做完再預約,但後來沒招了。硬著頭皮私訊教授的時候,甚至還沒有繳交任何一份作業。討論的時候一問三不知,真的很慘。如教授說的,「誠實面對自己」,及早接受檢驗;不用怕丟臉,現在什麼都沒有,已經夠丟臉了。 一對一討論過後,我試著重新回答當中的問題,並將「重用既有函式和的巨集,改進程式碼」的範圍擴展到 lab0 的整份 `queue.c` 實作。發現原本不知道能做什麼的 `list_splice` 等函式都能用在實作上,當晚完成了 `queue.c` ,通過了功能上的測試。程式碼行數減少了一半以上,不再充滿手動定義的 `prev` 、 `next` 指標。 另外在 Linux 核心專案中查到了一對一討論中被我寫成義大利麵的 `ilog2` 如何實作,發現原本在測驗中出現時完全看不懂的一連串位元操作,現在能明白它想做什麼,並實作出 branchless 的版本。教授希望學生「就算跌倒了,還是能抓起一把沙」,或許是這個意思。 因為當初希望自己「無論如何都不要退選」,再加上一對一討論的時候本校的退選時間剛好過了,所以撐到期末專題做完。做出的期末專題仍有相當巨大的改善空間,感謝教授還讓我參與到學期結束,甚至願意派給我期末專題。 這門課程讓我深刻的認知到自己的不足。在非資訊科系的小水塘,有比同儕好一點的程式能力,遠不足以支撐了解與開發系統程式所需。同時也震垮了「完成之後才能見人」的舊有陋習,我會努力以「誠實面對自己,及早接受檢視」替代之。 ### 《[因為自動飲料機而延畢的那一年](http://opass.logdown.com/posts/1273243-the-story-of-auto-beverage-machine-1)》讀後感 為了寫這篇心得再次讀這系列文章,和第一次看一樣是嘴巴開著看完。以下不會是一篇配得上原文的心得,只是粗淺的經驗和看法。 這樣一篇熱血的文章,但作者多次強調他們在做各項決定前的規劃,與決策當中的調整。很多決定都有量化的數據支撐。 想到大一下實驗物理的期末專題,我當時計畫用洞洞板縫上導線做出觸控板,作為移位暫存器的應用。開始沒多久就有發現「縫上」的動作太過耗時,但當時只是想說再快一點就能完成,導致沒有足夠時間檢查買來的電子元件,期末才發現位移暫存器壞了。經過慘痛得教訓,之後的實驗物理課一直提醒自己要控制規模。 以文中作者的作法,他們可能會先訂出各個實驗架設的階段能花費的時間上限,並在實作過程中依照量化的進度修正。如果我當時能當機立斷,把觸控版大小縮小為四分之一,我們就有時間進行測試,甚至因為要連接的線不多而能繞過位移暫存器,直接接在開發版上,最後就不至於開天窗。 教授在一對一討論時曾說過我還是在靠感覺寫程式,或許就是指「缺乏規劃」吧! 教授也在課程一開始就引入各種測試工具。像是用 santizer 檢驗越界存取記憶體與 race condition 。比起跑十億次迴圈來猜程式的行為,前者顯然是更堅實、更基於事實的基礎。 除了在程式上,還有在修課的腳步上。我在一開始的時候一頭熱的衝,學期才剛開始就後繼無力,也忽略了本職的研究進度,都是課程跟不上的因素。 除了規劃之外,「引進外部資源」也是作者在卡關時能繼續推進的動力。從找到專長於機械的夥伴、向飲料店借用數據、場地、努力向領域中的專業人士求教,到買進冰塊分裝機、加糖機等等。這些資源提供了很多作者他們靠自己想破頭也無法想到的解方。 教授從一開始作業撰寫、繳交的方式,就一直鼓勵、要求及早公開、互相提問、觀摩他人的作法。期末專題中的 `fls_u32_branchless` ,是因為教授建議我參照另一份專題的成果,才能升級為 `gen_f{f,l}s_branchless` 。我會在 lab0-c 就卡關,也是因為持續閉門造車,只想等「弄好」再繳交。以前有人說「作業沒寫完,怎麼還敢繳交?」,這個學期的經驗很肯定的告訴我:沒做完的東西給別人看,就算給別人笑或給別人罵,搞不好還能找到克服的方法;卡在那會什麼都沒有。 最後,或許「熱情」不是起頭不顧一切的踩油門,而是帶著一個人在困難與遠路上繼續前進的東西。 ## 自我評量 (1 ~ 10) 我給自己 5 分。 未及早公開結果、尋求意見,加上本身基礎不足,造成進度落後許多。完成的作業量與整體作業量相比,大概不到四分之一,遠不及研究所及格分數的 70/100 。 但是這門課真的超乎想像。學了 binary operation 不會想像到的用法,現在能看懂一些。甚至在過程中貢獻了 Linux 核心專案(雖然只是錯字)。 現在抵達了期末。希望研究告一段落之後,能再次挑戰這些課程內容。