# 2024q1 Homework5 (assessment) contributed by < `yu-hsiennn` > ## 〈[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1)〉閱讀心得 看完這些文章,我對作者展現出的勇氣感到非常敬佩。他在計畫尚未確定可行性的情況下,選擇延後畢業以完成自己的計畫。這種精神,可能是每位創業者都必須經歷的階段。正如老師所指出的,我們通常對失敗感到恐懼,一旦遇到困難就會退縮,不斷質疑自己的選擇是否正確,擔心最終一無所有,只是白白浪費了時間和金錢。這樣的想法往往讓人在前進的路上感到迷茫。常言道:「失敗是成功之母」,這是人盡皆知的道理,但真正能夠面對失敗並從中學習的人卻不多。特別是在學習新技能或領域時,經常會遇到挑戰。我們應當努力理解問題所在,並嘗試解決它,甚至預見潛在的問題並避免它們發生。 老實說,在開始這門課程前,我曾經猶豫是否要冒這個險。畢竟目前以是碩士二年級,在尚未完成論文和實驗結果的同時,又要修一門相對耗時的課程,我不確定自己是否能夠應對。但我最終決定嘗試挑戰,希望透過加強對這個領域的理解,甚至能對未來的職業生涯有所助益。 修課至今,說自己不累是不真實的。每周都有大量教材需要研讀,常常追著作業跑,似乎永遠寫不完。但我確實感受到自己逐漸變強,從一開始的一無所知,到現在能夠理解一些基本原理。在寫作業的過程中,我也常去觀察同學的做法和自己的不同之處,從中發現自己未曾想到的點或對方忽略的細節。老師強調的注重細節的重要性也深深影響了我,提升效率必須從細節著手,深入了解並努力改進。 文章經歷同時也讓我認識到人脈的重要性。在現實世界中,很多事情不是一個人就能完成的。我們經常需要尋求不同領域專家的幫助來共同解決問題。工作也是如此,一個公司不可能只靠工程師運轉,需要多領域的人才合作。拓展人脈,未來這些人脈或許會在你最需要的時候提供幫助。 ## 想投入的專案 - 重做 lab0 並彙整學員成果 lab0 是一個綜合了很多東西的專案,在之前作業中還是沒能將所有的部分了解並實作完成,故想藉此來重新投入此專案,並嘗試改善 - 位元操作 本身對於位元操作這一塊比較弱,想藉此來提升不足的地方 ## 研讀[教材](https://wiki.csie.ncku.edu.tw/linux/schedule) #### 紀錄 ##### `##` 用法 ```c #define DECLARE_OBJECT(name) \ struct __##name##_node; \ typedef struct __##name##_node *name##_node; \ struct __##name##_node { \ name element; \ name##_node next; \ }; \ void append_##name(const name *X, name##_node *list); \ void delete_##name##_list(name##_node *list); DECLARE_OBJECT(light) ``` 同等於 - light ```c struct __light_node; typedef struct __light_node *light_node; struct __light_node { light element; light_node next; }; void append_light(const light *X, light_node *list); void delete_light_list(light_node *list); ``` ##### _Generic 教材中 `cbrt` 定義如下 ```c #define cbrt(X) \ _Generic((X), \ long double: cbrtl, \ default: cbrt, \ const float: cbrtf, \ float: cbrtf \ )(X) ``` :::info 參閱 [Generic selection (since C11)](https://en.cppreference.com/w/c/language/generic) 後,不了解為什麼會需要有 `const float: cbrtf` ? ::: ##### Block ```c // Double Evaluation #define DOUBLE(a) ((a) + (a)) // one times evalution #define DOUBLE(a) ({ \ __typeof__(a) _x_in_DOUBLE = (a); \ _x_in_DOUBLE + _x_in_DOUBLE; \ }) ``` 利用 `__typeof__` 來確保型態一致,並將值指定給一個區域變數,來避免重複呼叫的情形 ##### String switch in C ```c #define MULTICHAR_CONSTANT(a,b,c,d) \ ((int32_t)((a) | (b) << 8 | (c) << 16 | (d) << 24)) enum { EXT_JPG = MULTICHAR_CONSTANT_L('.','j','p','g'), EXT_PNG = MULTICHAR_CONSTANT_L('.','p','n','g'), EXT_HTM = MULTICHAR_CONSTANT_L('.','h','t','m'), EXT_CSS = MULTICHAR_CONSTANT_L('.','c','s','s'), EXT_TXT = MULTICHAR_CONSTANT_L('.','t','x','t'), EXT_JS = MULTICHAR_CONSTANT_L('.','j','s',0), } lwan_mime_ext_t; ``` :::info 為什麼此處是用 `MULTICHAR_CONSTANT_L` 而不是 `MULTICHAR_CONSTANT` ::: ##### `&&` 用法 是 GCC Extension ,用於找到標籤的記憶體位址 ```c void example_function() { goto *&&label; // Jump to the label using a pointer to the label label: printf("This is a label"); } ``` --- https://hackmd.io/@sysprog/c-std-security https://hackmd.io/@sysprog/CSAPP/https%3A%2F%2Fhackmd.io%2Fs%2FrJoxSsiuG ID => identifier major/minor number LKM simrupt TODO: ksort,強調 workqueue / CMWQ / kernel thread 對於任務分配的效率 (CPU utilization),