# 2024q1 Homework5 (assessment) contributed by < [`SuNsHiNe-75`](https://github.com/SuNsHiNe-75) > ## 閱讀〈[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/)〉的啟發與心得 ### 記錄每篇大意(方便回憶): (1) 前言與為何決定研發「自動飲料機」。 (2) 自動飲料機願景發想-描述天真的他們對現實的無知。 (3) 自動落杯器之製作辛酸史-衍伸對專案實現時間的焦慮,並決定找尋幫手。 > 「大多數人一直活在本來就應該這樣嗎的童話世界裡,電視打開就可以看,機車買來就可以騎,手機買來就可以用,一切都理所當然,本來就應該這樣。偶爾買到不好用的商品我們就抱怨幾句,丟掉換其他更好用的牌子,卻很少意識到那個本來就該這樣,背後需要經過多少人月的投入與研發。」 (4) 機械系朋友的加入-開會過程的天真、履帶的製造並遭否決。 > 學生上課卻缺乏實作能力的悲哀-「資工系的學生不會寫程式,機械系的學生不會做機械」。 (5) 砍規格、做各種調查;雖深知不會受益的道理,卻義無反顧地做。 (6) 氣動型**加茶模組**,朋友 F 很罩。 (7) 加茶模組的「實驗」詳述。**冰塊模組**開發-大鐵盒的失敗。 > 硬體設計就是不斷的重複「設計、製造、修正」的循環,想像中的設計會經過有誤差的方式被製造出來,製造出來的產品在現實中運作的效果不如預期,找到問題的根源後再重新修正,機械設計就是重複這樣的循環。只有把東西生出來做實驗,你才會知道該如何改進。 (8) 冰斗開口的重新設計並失敗,對機械加工設計上「時間成本的惱苦」。 > 這二十年來,資訊產業用非常快的速度在進步,但那些牽涉到物理、硬體工程、生技醫學等需要不斷試誤、做實驗的領域,相較之下簡直和蝸牛一樣。Peter Thiel曾說過:「我們想要一輛可以飛的汽車,得到的卻是140個字元。」一項產業進步的速度,很大程度取決於做實驗修正問題的速度。 (9) 冰斗材質變更-木頭。奔波尋找雷切機。出口又卡住了-篩網設計的失敗。 (10) **推冰塊模組**,彈簧行的經歷-見識到彈簧的頑強。 (11) 意識到缺乏機構知識讓整件事情更為惡化。轉念:碎冰機。試喝後發現還行。 > 如果問題過於困難無法解決,那就重新定義問題吧! (12) 延畢念頭萌生-各種相關挫折。Jserv 出現了! > 我曾試圖想要自學機構設計,但後來發現根本難如登天,那是需要經驗累積的知識,就跟不會寫程式的人光靠自己不可能一個月就會寫網站一樣。 > J:「你該學習的不是看到事情要完蛋了就去避免失敗,而是應該學習如何處理與承受失敗,你才能變得比以前更強大。」 (13) 透過圖表統計冰塊用量,以訂製尺寸合適的製冰機。綜合考量下,最後購買「送冰機」。 (14) 介紹夥伴紘銘-善於當頭棒喝的靈魂人物。 > 我用自己負擔生活費,不跟家裡拿一毛錢來說服父母,而我的房租和生活費就是來自紘銘的支應,換來能全心全意的投入在飲料機的開發上。 (15) 思考**加糖模組**-蠕動泵的購置並失敗。邂逅廠長糖機與改造。 (16) **軟體架構**實作解析、分析各種問題與解決。 > python + django -> nodejs + express + angularjs。 (17) 美國分冰機亮相並改造。 (18) 加冰模組的問題百出,一連串**假設-實驗-解決**。 (19) 機器放店面的問題-桌子。很罩的爸爸;不罩的錢包。 (20) 開始組裝-闡述鐵氟龍管的祕辛。 (21) 設計**混合模組**並修正各種問題。含擋板、糖管、茶湯管。 (22) 談及**電路設計**。焊接被紘銘各種臭、各種電路問題及 debug。 (23) 完成。 > 我比任何人都清楚這台機器還有多少問題,茶垢可能會卡在接頭的縫隙、冰塊的定量機構絕對還能再改進、管線過脆容易折斷……我可以列出上百個問題,**機器現在能做到的每一件事,都是用一次次試誤換來的取捨**。 > 這個世界比任何人都殘酷,也比任何人都公平,犧牲了多少就會得到多少。 > 對你而言真正重要的事物,會比你想得到的事物更早出現在路邊。 ### 啟發與心得 先說結論吧:我認為我在學習態度上「遠有進步空間」,他人在為「無成果收益」的專案焦頭爛額,甚至延畢一年時;我卻只專心在「如何畢業」、作業能否拿高分並「粗淺」交代等**對自己完全不負責任的行為**,好奇自己還要落魄多久之餘,也思考真的該振作了。引用自作者的文章-「**機器現在能做到的每一件事,都是用一次次試誤換來的取捨。**」,而不試錯的我,又如何能成大業、做大事呢? 以前完全沒有修過 Linux 核心設計等系統軟體開發相關課程的我,在選修此門課之初可謂吃盡了苦頭... 不,其實現在仍是,每到下一週,隨著琳瑯滿目沒聽/學過的新教材的出現,我總會很焦慮地需要追著新進度跑,明明上「幾週」的知識都還未理解完全;上「幾週」的作業甚至也未完成。「要直面自己的缺點」是教授在課程首週強調的觀念,然而,我的作法似乎背道而馳,逃避了它。 〈因為自動飲料機而延畢的那一年〉文章作者,在大四即將畢業階段,毅然決然地一頭栽入其「只懂冰山一角」的自動飲料機的研發,或許選修此課程的我,初期也有等同的決心想要精進、提升自己對系統軟體方面的素養;然而,第一份作業、每週教材量及「建議花費於本課程的時間」公布後,我徹底懵了-這會是我修過最硬的課。 是的,我是一名資工平凡人-在課堂測驗上稍微理解該程式的觀念摘要後,便直接專心思考「填空該如何填」,絲毫未想過要翻閱課程教材以回憶相關概念;在每週的作業上,只想著怎麼「交代」好這題(就是單純寫出程式碼、照題目要求改善等「交差」行為),卻沒去考慮深入「做實驗」,以驗證其可行性或改進程度;觀摩他人的開發紀錄,也鮮少會去質疑其作法或深入探討「為何這裡可以這樣做」、「怎麼引導自己朝向這種想法」等,最後,也不會去提問。 這完全不是一個正確的學習態度。 作者在研發自動飲料機的每個環節,總是步步為營,模組化每步的「當前目標」,針對該目標再反覆執行「**假設-實驗-改進-解決**」等迴圈,結合其他夥伴的專業分工,使團隊凝聚且讓進度推進。比如軟體設計方面,作者就列出了好幾個當時遇到的問題,並「一個一個做實驗來印證些想法」;細節上也絕不馬虎,比如顧慮食品,所以要用鐵氟龍管及304以上的白鐵桌;-此謀定後動並追根究柢的精神,我想,才是現階段的我該學習模仿的。 「你該學習的不是看到事情要完蛋了就去避免失敗,而是應該學習如何處理與承受失敗,你才能變得比以前更強大。」Jserv 的這句話極激勵人心,也對應了本文我最喜歡的一句-**機器現在能做到的每一件事,都是用一次次試誤換來的取捨**。 希冀我能改變自己的學習態度,不要逃避。 ## 研讀教材並提問 - 剛接觸此課程時就想提問了,為何 Linux 系統是用「C 語言」實作,而非其他程式語言?有沒有可能用其他程式語言實現,而效能更佳? - 觀察 [Integer Overflow](https://hackmd.io/@sysprog/c-numerics#Integer-Overflow) 的大部分案例,都是攻擊者「帶入某數值,導致程式變數出現 Integer Overflow」的情況,有什麼程式寫作技巧能防範該惡意攻擊嗎? > [i cant stop thinking about this exploit](https://youtu.be/89ysXVYH2Sk) - 研讀 [C 語言: goto 篇](https://hackmd.io/@sysprog/c-control-flow#GOTOnbsp%E6%B2%92%E6%83%B3%E5%83%8F%E4%B8%AD%E9%82%A3%E9%BA%BC%E5%8F%AF%E6%80%95) 有個疑惑:`goto` 這個指令轉換成組合語言後,對應的應是 Conditional Branch(如 MIPS 的 `beq`)還是 Unconditional Jump(如 MIPS 的 `j`)?若是 jump,我記得其不能跳出該 block 以外的範圍,如此會有什麼問題?其是如何解決的? > https://godbolt.org/ - 撰寫 [ttt-用定點數取代浮點數](https://hackmd.io/@sysprog/linux2024-ttt#%E5%AE%9A%E9%BB%9E%E6%95%B8) 部分作業時,知道定點數在特定場景下的使用會優於浮點數運算,好處有運算較快、需要的硬體較少及移植性較高(因不須 FPU)等。那現今系統中,有哪些純使用定點數運算,而不用浮點數運算? > like Linux kernel > https://justine.lol/matmul/ - ## 簡述想參與的專案 ### 以 Linux XDP 為基礎的防火牆 延伸自去年之專案-[以 Linux XDP 為基礎的防火牆](https://hackmd.io/@sysprog/linux2023-projects#%E4%BB%A5-Linux-XDP-%E7%82%BA%E5%9F%BA%E7%A4%8E%E7%9A%84%E9%98%B2%E7%81%AB%E7%89%86)。 自己的研究領域與網路相關,其中又因自己的經歷,對資訊安全方面較有興趣。在瀏覽此主題之前的開發紀錄並稍微理解後,認為自己可以在防火牆過濾封包等議題上有所貢獻。 2024 年了,DDoS 攻擊這種存在已久的攻擊手法現今仍如此猖狂,就是因為有其難以防禦之處。我想藉由此專案,透過 XDP 更深入了解封包流及其過濾概念,並嘗試做出貢獻。 ### vwifi 虛擬無線網路裝置驅動程式和實驗環境 延伸自去年之專案-[vwifi 虛擬無線網路裝置驅動程式和實驗環境](https://hackmd.io/@sysprog/linux2023-projects#vwifi-%E8%99%9B%E6%93%AC%E7%84%A1%E7%B7%9A%E7%B6%B2%E8%B7%AF%E8%A3%9D%E7%BD%AE%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E5%92%8C%E5%AF%A6%E9%A9%97%E7%92%B0%E5%A2%83)。 討論並實作 vwifi 的相關改進-參照 [willwillhi1 的開發紀錄](https://hackmd.io/@sysprog/rJD2joOSh#Linux-%E6%A0%B8%E5%BF%83%E5%B0%88%E9%A1%8C-vwifi) 中的 TODO。 IBSS ### Linux 可能的資安問題 因對 Linux 核心仍未很熟悉,此相關方向可能要與授課教師討論,以衍生出確切題目。 > 類似 [基於 C 語言標準研究與系統程式安全議題](https://hackmd.io/@sysprog/c-std-security) 的形式。 如: - 檢視 Linux 核心程式碼,推測其可能受到的攻擊或程式碼漏洞,加以改善,以提升安全性。 - Linux Secure Module 相關-[參考資料](https://blog.cloudflare.com/th-th/live-patch-security-vulnerabilities-with-ebpf-lsm-zh-tw)。 KASLR, KPTI CWE, CVE ### Linux 網路層級之問題及改善 此發想仍未萌芽,尚需與授課教授討論。 --- https://en.wikipedia.org/wiki/NaN TODO: XDP Firewall 和 資訊安全議題 (要有細節) 擇一 TODO: 列出預期產出