劉家成

@fatCatOrange

Joined on Feb 24, 2024

  • contributed by < fatcatorange > 第一周測驗題: 測驗一 在以下程式嗎中,應是要取得串列的尾端指標,因此此處透過 while 迴圈逐個向後,直到串列尾端,故 AAAA 應為 (*left)->next node_t *list_tail(node_t **left) { while ((*left) && (*left)->next) left = &(AAAA);
     Like  Bookmark
  • 簡易伺服器 研讀 Linux 核心設計: 針對事件驅動的 I/O 模型演化 時,難以理解 epoll 操作的行為,因此嘗試實做一個使用 epoll 的簡易伺服器: 首先,和前面提到的 tcp 伺服器一樣,使用 listen 來監聽是否有用戶要建立連線。 接下來要註冊 fd ,一開始建立了一個 tcp 連線的 socket ,這個 socket 被用來作為建立連線用,因此先透過: int epoll_fd = epoll_create(MAX_EVENTS); if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD ,socket_fd, &ev) < 0) { printf("epoll_ctl error!\n");
     Like  Bookmark
  • contributed by <fatcatorange > 因為自動飲料機而延畢的那一年 在這篇文章中,我首先看到了現實的一面,我一直有一個做出讓很多人使用的產品的夢想,因此我在大學、研究所期間學習了遊戲設計、網頁前後端等領域,但這篇文章和我的實作過程中都發現,在缺乏資金和實力真的不到頂尖的情況下,真的很難成功。 但看到一半時,我不禁佩服起了這些人,即使遇到這樣的困難還是堅持做下去,換做是我,看到第一個掉杯機花那麼久的時間作不出來,我應該就果斷放棄了,這大概也是我這麼爛的原因,因為以前失敗的經驗,遇到困難總是先覺得自己辦不到。 「你最大的問題在太害怕失敗了,既然都已經決定要延畢做飲料機了,那就要好好做,才不會辜負當初自己的期望」 這句話我已經在我的第一個作業共筆中看過類似留言,我真的很怕失敗,我也不知道怎麼辦,當我想做好一件事,真的開始做時又會顧慮東顧慮西,怕沒辦法在 deadline 前做出來、怕其他課或事情被拖延,到最後甚麼都做不好。 後半部分,大部分就是他們完成飲料機的過程,大部分我看不懂,因為牽涉到一些電路之類的東西,最後完成的結果也沒辦法商用化,但作者似乎還是覺得很滿意了。
     Like  Bookmark
  • 以概念來說,RCU 要使用在有大量讀取要求,但只有少量的寫入要求,且不會太在意讀取到舊資料的情況。 最簡單的想法就是當有資料要進行寫入時,先複製一份並修改,在其修改後所有讀取必須讀到新的資料,但如果在寫入前就在讀取資料的話,則那些正在讀取的資料還是會讀到舊資料,等到沒有用戶在讀取舊資料了,再把新資料拿來替代就資料並刪除就資料。 也因此, RCU 非常重要的應用就是在 linked-list。 RCU 在核心模組的應用: 在 rculist 中,就有提供了大量的 rcu 函式,以 replace 舉例來說: static inline void list_replace_rcu(struct list_head *old,
     Like  Bookmark
  • contributed by < fatcatorange > 自我檢查清單: Linux 核心模組運作原理 檢查 linux 核心版本: $ uname -r 6.5.0-27-generic 掛載 fibdrv 模組:
     Like  Bookmark
  • abstract 這篇論文主要在討論 domain adaptation 的概念和其方法,稱為 adaptive feature norm。 主要在解決目標任務中出現的模型降級問題。 文章中發現,目標領域的特徵規範小於原本領域的特徵規範(將樣本做標準化),進而導致了不穩定的區分能力,而這個方法僅需少量的程式碼和簡單的方法就能達到目前該領域的頂尖等級。 introduction 目前透過深度學習技術在電腦視覺上取的了顯著的進步,但模型泛化(指在未見過的資料上的表現能力)到新場景時會很脆弱,即使是微小偏差也會導致模型退化,因此 UDA 透過使用有標記的原始樣本和未標記的目標域樣本進行訓練,透過調整原始領域和目標領域間的分布差異來調整模型,使其更好的泛化到目標域。 目前觀察出兩個可能的退化原因:
     Like  Bookmark
  • contributed by < fatcatorange > Reviewed by HenryChaing git rebase 看似是成功的,抓取下來的分支經過別的分支 rebase 後 master 位置不變。 其餘的 review 在底下有留言 開發環境 $ gcc --version gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
     Like 1 Bookmark
  • 紀錄一些比較少用到的 hooks 或函式,有些是在課程 https://www.udemy.com/course/react-the-complete-guide-incl-redux/?couponCode=LETSLEARNNOW 中學到 useContext 可以想像成是一個全域變數,被這個 context 的 provider 包覆住的元件(包含元件內的子元件)都可以使用這裏面的內容,最常被使用在是傳入一些 state 和修改 state 的函式,可以用來避免 props drilling的情況。 props drilling 的情況就是假如有一個變數或函式要在比較內層的子物件中使用,可能就必須透過 props 來一層層傳遞到下層,即使中間這些傳遞的物件並沒有使用到這裏面的變數或函式。這樣不僅不直觀,也會讓整個 props 變的冗長。 使用方法: 首先,要先創建一個 context ,一般會建議新增一個檔案然後把這個 context export 出去。
     Like  Bookmark
  • Redux 是一個狀態處理的工具,這並不是 react 特有的,可以將 Redux 應用在任何 js 專案。 Redux 可以想像成是一個大型的狀態管理中心,注意就是只有一個,Redux 會包含一個 reducer ,用來管理各種 action 應該執行的功能,並且可以有一個 subscriber,用來指定 state 出現變化時的行為。 Redux 在 react 中可以透過 useContext + useReducer 達到類似的效果。 使用 Redux 在 react 前,先進行以下操作: npm install redux react-redux Redux 簡單的用法:
     Like  Bookmark
  • React 更新畫面 在一般瀏覽器中,會將 html 轉為 DOM,在一般的 JS 中,常常只能直接操控 DOM,而直接操縱 DOM 因為必須同時維護很多東西(state),會讓程式碼不容易維護,因此在 React 中出現了 virtual DOM。 簡單說,virtual DOM 並不是直接的 DOM,他保存了一些跟顯示畫面有關的內容,並且描述了整個 DOM 的架構,當有 state 發生改變時,virtual DOM 會比對目前的 virtual DOM 和上個時間點的 virtual DOM 快照是否有不同,並且只有不同的地方才會去修改真正的 DOM。 透過這種 virtual DOM 的概念,React 可以更好的維護 state,並減少繁瑣的直接操作 DOM。 state 的更新 react 中 setState 是非同步的,當有 setState 發生時,state 的值並不會馬上更新,而是將它存入 snapshop,之後檢查 virtual DOM 和目前快照的區別部分並重新渲染,因此:
     Like  Bookmark