2020/05 月份自我學習回顧

間隔了好一陣子沒有寫自我學習回顧,其實還是有持續在記錄,不過因為剛換新工作的關係,就忙著適應~以及學校那邊的課程也是如火如荼的進展中,就沒更新這種閒聊性質的文章了,不過技術相關的還是有努力撰寫唷 ・ω・

5 月份主要都在念兩大項目:SDN 和 GCP cloud 線上課程。本來是預期在六月的時候去考試的,沒想到 SDN 期末考就先到來了,因此預計 GCP 考試就會延到七月份。另外,七月也要開始準備 COSCUP 分享,這次題目我很喜歡,但是卻也不好準備,希望不要讓底下的聽眾失望,我會好好加油的!

學習回顧

1. 軟體定義網路與網路功能虛擬化

因為同事推薦,於是去選了交大曾建超教授的 SDN/NFV 相關課程,上了幾次課程下來,覺得教授是一個非常認真的人,而且也因為底下學生很上進的關係,在教授的課程中會看到許多跟業界技術結合的應用,還看到 cloud native 夥伴們的論文展示,給我蠻大的衝擊,也希望自己能夠有這樣的機會可以出去國外 demo。雖然工作上並不會直接接觸到這類議題,不過卻也增進了對網路世界的認識,同時也會比較清楚 GCP 的網路模型,整體來說是一個結合理論和實務的課程,很慶幸自己有修習這堂課。(不過就沒有修到編譯器,等到下次開課再來修 QQ)

2. Google Cloud Platform

GCP 相關服務的學習和網路架構也是五月份學習重點,其實蠻喜歡他們的線上實驗課程,除了文字敘述之外,還可以透過實作來真的了解這些服務的運作方式。而在這次學習中,比較重要的是嘗試 google cloud deployment manager,由於之前工作經驗是使用 Terraform 來管理 deployment,這次改試用 GCP 原生 manager,看會不會比較好用。整體設定下來覺得還不錯,不過官方推薦要使用 python 來寫,這樣彈性會是比較好,對於不會 python 的我來說是有一點點困擾,哈,該是好好學 python 了。

2019 年度回顧

2019 年過去了,不免俗地跟風一下,回顧今年做了哪些事情。整體來說 2019 年對我來說是一個正向的轉變,包含職位、生涯、薪資、技術能力等,至於促使這些轉變的時機。我覺得是好好把握突然來的機會,以及當覺得這個方向好像和自己想做的有點不合時,就要勇於開拓新的方向。

Front-End to Back-End

首先,最大的轉變大概是從專職 front-end 變成 back-end 吧。而這個動機在於很多人在聽到我是商科轉職,就說我一定是去做前端,因為前端對他們而言技術能力需求低,即使文組也可以勝任,其他資工系本科出身的不會去寫前端。當然這樣的想法很過時,而且說這些話的人大概也寫不出來像 angular, react 之類的框架,不過為了證明自己能力,還是不爭氣地開始尋求 back-end 的機會,也很幸運地進入趨勢科技開始寫 Go 。

至於要如何從 front-end 轉成 back-end ,我個人是認為資工基本功非常重要。有一些人會說反正大部分的工作又用不太到高深的資料結構和演算法,我倒不是很認同,基礎理論就像是內功,當你在寫 code 的時候,有了這些基礎,就會很自然地留意到這項寫會不會有效率,或是這個功能該用怎樣的型態比較好。另外,我也覺得作業系統和網路概論很重要,在做 back-end 的時候一定會接觸到網路封包和 linux OS 等議題,有了這些知識,在發生 bug 或是 trace source code 的時候都會幫助很多。

參與 Golang 社群和新竹 GDG 社群

這時回想起來,那時候會加入 Golang 社群根本就是一個意外。一開始由 Evan 在線上詢問要不要來分享 Golang 題目,我其實根本還很菜,但不知道為什麼就同意了這件事情,也花了很多時間準備分享的報告。老實說那時候報告起來蠻鳥的,第一次分享又特別緊張~但 David 還是邀請我加入 Golang 志工團,就這樣很突然地加入了,並且開始陸續在新竹地區分享自己很喜歡的主題。

2019/11 月份自我學習回顧

前言

12/01是我生日,於是給自己放了一個禮拜的休息假,每天下班回去就是睡覺或是滑手機放空,除非公司 slack 出現訊息,不然很少打開電腦。老實說放假的感覺挺好的,沒有進修進度壓力,也可以好好休養身心~不知道是不是剛換環境以及天氣變化的關係,感冒時好時壞,這幾天就去大醫院照內視鏡和超音波做詳細檢查,幸好沒有什麼問題,就是抵抗力弱了一點(該不會是身體又發現我早午餐都沒怎麼吃吧QQ)

剛到職新創公司滿一個月,來說說感想~其實還沒加入之前蠻擔心的,畢竟聽說新創公司變動很快,不太清楚自己能不能適應,之所以加入完全是賭上對於主管和同事能力的信任。不過來了一個多月,感覺還不錯,除了福利好之外,還接觸到之前沒有機會實戰的技術。更有意思的是,每個產業都有自己的特色,去吸收那些產業知識和市場訊息,可以擴大自己的眼界。現在唯一比較有壓力的是英文口說 XD 還有許多年紀輕輕但是身懷絕技的同事們,進而督促自己不能懈怠才行。我覺得新創公司的好處是,每個同事都有自己的理想和態度主動積極,在那種氛圍下,自己也比較不容易懈怠。

生日剛過完,對自己也有些期許,其中最大的目標就是對 Google cloud platform 熟悉並且考到證照,既然決定要走 Cloud 開發,那當然要耕耘相關 infrastructure ,才能更妥善地利用這些服務來開發 application。當然我對作業系統還是很有愛,希望今年可以多讀一些相關論文,甚至可以啟發自己寫一點寫論文出來。之所以會這樣想,是因為發現自己還蠻喜歡做 research 的,可以讓自己對某些領域的學術知識更加了解。

預定目標回顧

1. 以工作為主的 Cloud 相關工作和概念學習 (100%)

這部分主要是學習到了 Google Cloud 的服務,像是 Endpoints, Storage, SQL 和 GKE 。除了學習如何調整這些 service 的行為和設定之外,也看了 document 來了解運作原理。目前將重心放在 Endpoints ,至少在 debug 的時候,可以快速知道 Endpoints 回應的錯誤可能是哪裡出了問題,或是當使用者打 API 時候發生錯誤,也要能知道問題是出在哪一端。另外還有 Cloud SQL,主要是測試 query performance 部分。

2019/10 月份自我學習回顧

前言

應該是開始要努力分享一些學習到的內容了,十月份又變成只有學習日記,快要變成流水帳版了(誤)。十月卡了一個期中考大魔王,而且更可怕的是出社會太久都把微積分忘光,所以又回去複習。這次考試大多是證明,證明就是一個如果一開始錯誤,後面就會接連錯下去的東西~雖然證明不太好念,不過覺得過程中可以幫助釐清邏輯,再加上有考試壓力,還是收穫不少,當然考試分數也沒有太低啦哈。

十月依然是一個不是很平靜的月份,花了不少時間在處理人生大事上,中間還發生跑去韓國旅遊,結果不是很好玩的慘痛回憶。不過有一位姊姊跟我說,最令人印象深刻的通常不是什麼美好的回憶,所以雖然這次經驗不太好,但是下次就會知道如何應付,也是一種人生學習~這樣聽起來好像感覺就好很多,默默地放下這事情了。

希望十一月份可以更好。

預定目標回顧

1. 其他語言或工具學習 (100%)

這個月看了蠻多 database 的影片和寫作業。我在英國上過資料庫導論,其實英國教授那時候就教的不錯,只可惜 CMU Database 上的更完整一點。印象深刻的部分包含:DB 是用什麼方式來儲存 tuple、DB 可能會有自己的 scheduling 來進行寫入、以及 DB 也是有 free list 來管理目前 tuple 紀錄。對於這些關於 DB internel 的學習,覺得非常有收獲,所以非常有收穫~

2. 演算法學習 (80%)

主要複習內容就是考試內容啦,其實不難,不過要如何合理地論證,這是比較需要細讀的地方,尤其是大於小於這些,在證明時要合理地去使用,才能正確地算出 time complexity。另外就是開始進入紅黑樹、Dynamic Programming 啦,雖然上課都有專心上課,但是缺少下課完整的複習,所以只算達到 80%。

3. Memory Allocator (50%)

這部分主要是看 Free List,而且還找到很不錯的線上教材 Computer Systems Fall 2018,老師講解地清楚,內容也相當實用,用來複習 OS 或是增加相關知識都很不錯,強烈推薦。不過之所以只給 50%,是因為只有看 Global 類型的 free list,沒有去看更多關於 thread free list,以及沒有一個完整的實作 demo,十一月如果有空的時候要來補一下範例。

2019/09 月份自我學習回顧

前言

這個月是一個比較多事的月份,主要原因是重新調整了生涯規劃。雖然自己出社會也快要十年了,但是轉職成 Engineer 也才不過這兩年的事情,因此自己還像是一名剛出社會的半新鮮人一樣,到處地探索自己喜歡的事物,不斷地從過程中試圖挖掘出自己的熱情所在。

img

很好運的是,我覺得我在這過程中一直有貴人相助,例如我加入 Moxa,再因緣際會地加入趨勢科技,進而進入 Golang 社群開始與其他 co-organizer 辦活動等。老實說,我在群體中一直都是最菜的那位,但是大家給予我很多機會成長,讓我有機會接觸到各種事務,雖然依舊還是很菜,但至少開始有點經驗,知道自己該用什麼方式來找出問題點,在面對新技術的時候,可以從哪個方向下手讓自己快速學習。

要說下一個目標嗎?大概就是希望哪天能憑真實力對戰吧(誤)。目前大家對我的評價大多是認真上進積極,不過這些評價只能代表努力,無法展現出個人能力,希望哪一天可以用真實力來讓人欽佩。

預定目標回顧

不得不說,這個月太多事情煩心,所以目標有點偏移掉了。另外還有自己太過貪心,在學習的時候希望能掌握各個方向,導致稍嫌發散,這是後續需要改進的地方。總而言之,這個月份完成度蠻低的,要調整一下自己學習方向,不能什麼都想要學。

1. Linux kernel development (30%)

上個月預定是要看三章,結果實際上只有看一章《Memory Management》。主要原因是因為看到 Jserv 所貼的 mimalloc 共筆分享,結果注意力整個被共筆內容吸引過去了。我很喜歡 memory management,之前有看 Golang 的 memory management system,不過感覺自己只是了解大概,並不能具體說明出這樣做法解決什麼問題;再加上 Golang memory management 其實是 TCMalloc 分支版,一直很想了解是基於什麼原因而要做如此改變。

基於這個原因,就產生出一篇基於 stack 而成的 memory allocator,接下來希望實作其他 memory allocator,從這些基本實作進而了解到 memory allocator 實作差異的真正用意。

2019/08月份自我學習回顧

前言

8月份有蠻多事情要處理,首先是 Go Taipei 社群和 DigitalOcean Hsinchu 合辦 Meetup,這也是我第二次在 Go 社群分享主題。而這次探討的主題和 Lock 相關,再加上會涉及一些系統相關議題,因此花了蠻多時間在看相關素材和實作細節,非常怕在 QA 時間被問到什麼很艱深的問題XD 其實每次分享,對分享者來說都是一個蠻有挑戰性的任務,主要是因為這些內容都需要蠻多時間去準備,而這次在工程師大本營新竹來分享,更是膽戰心驚,深怕不能帶給聽者有幫助的知識。不過,幸好這次 Meetup 安然度過了(所以才有時間來整理 8 月份的學習心得),當面認識了一些人,也交流了不少,很開心 :)

![study]({{ site.url }}/assets/images/study-08.png)

另外,這個月另一個挑戰是身體有些狀況,倒也不是啥嚴重病症,不過就是頻頻感冒發炎又牙齒痛,深深感受到工作雖然重要,但是身體還是要顧啊~尤其是看牙齒,做一次根管治療都蠻昂貴,本來想說應該沒有太多蛀牙,沒想到又有一個需要根管 QQ 看來要再更小心牙齒清潔了。

最後,這個月蠻多學習資源都是書籍,所以沒有太多 reference 可以分享。不過這個月看了 Linux Kernel DevelopmentPerfbook ,覺得真是獲得非常多有用的知識,把虛無飄渺的作業系統更具體的呈現給讀者,非常推薦!

預定目標回顧

根據七月初紀錄,七月要完成的目標包含:

1. Go 聯合 meetup 分享講者,準備報告內容 (100%完成)

順利完成,報告 sildes An Introduction to Locks in Go

2019/07月份自我學習回顧

前言

時間超快地又到了八月了~七月整個月天氣都蠻悶熱的,加上小套房也不是很通風,想要好好在房間念書就只能一直開冷氣,偶爾再去金山街星巴克當假文青。除了進修之外,還跟公司旅遊補助團去了一趟高雄、台南小旅行,去高雄的那天剛好遇到輕颱大淹水,在開高速公路的時候,風雨交加,旁邊的大遊覽車不斷踩水激起大浪花,整個過程蠻膽戰心驚,深怕一個不注意會發生意外,幸好還是平安回來了。

![study]({{ site.url }}/assets/images/study-2019-07.jpg)

學習部分,七月份其實吸收蠻多內容的,收穫滿滿,可惜因為時間關係,筆記大多很潦草,還不足以登上檯面,就沒有放在 blog 上了。七月份學到最多的就是 Linux kernel 和 network 相關知識,而其中印象讓我深刻的是,我在學習過程中遇到一個不太確定的問題,因此花時間在查閱相關內容並找答案,那時候心中覺得這個答案可能是正確的,但是基於經驗不足的關係,還是去請教了韌體相關的資深同事,結果他給了我一個完全不同方向的答案。這令我蠻訝異的,因為我的確沒想到會不同方向的思考路線,也讓我在後續學習時更加注意各面向的思考。不過會導致這原因,深究起來還是對於 kernel 理論不夠熟悉的緣故,所以在學習中加入了 Linux kernel development 書籍,希望能多加深理論基礎。

七月份接觸蠻多種議題,包含工作上的 Security, network package filter, kernel module 等,在過程中多少會擔心自己是不是會迷失了學習方向。不過幸好在最後實作 side project 時,這些學習都有互相應用,整體來說吸收不錯,八月份也會繼續努力 :D

預定目標回顧

根據七月初紀錄,七月要完成的目標包含:

1. 使用正規做法來實作 File System (super_block, inodetable, bitmap..)並與 FUSE lib 連接。

這個項目完成50%,包含 disk simulator 和 file system structure,過程中參考蠻多 ext4,希望能一併學習到 ext4 的實作理念。不過後來之所以慢下腳步,是因為做到一半需要 synchronization 相關知識,而在 Linux kernel 中 Locks 的種類分比較細,因此後來注意力就轉移到 synchronization 實作原理和應用上了。目前是打算把 Linux kernel development 看完,再回到這個 side project 上繼續實作。

2019/06月份自我學習回顧

前言

六月份安排了一趟北海道旅遊,因此整體唸書時間相較少些。北海道旅遊中,在富良野鄉村地區待了兩日,雖然只有短短時間,但卻讓我體驗到完全不同的生活環境,遼闊無際的花園農田、路上慢步行走的當地居民們、以及寬廣的生活空間,都令人非常嚮往。我很喜歡在都市的緊湊步調,跟公司同事們努力開發以及學習各種新知原理的過程,但有時候也會想過過這種悠閒沒有太多物質壓力的人生,可能是自己從來沒有過如此的生活方式,所以會有種美麗的幻想吧。

學習部分,六月份的專注力明顯好很多,因此整體自學的時數有變多,也覺得自己成長了不少。主要原因是因為這個月花了更多時間在學習 linux 以及看 linux kernel source code,有感覺到自己對於作業系統是有比較多興趣的,會自主投入很多時間在理解原理和實驗上。不過因為在看 linux 會碰到很多數學相關的優化內容,因此數學訓練還是要維持固定的進度。

有時候會覺得,這年紀才覺得自己對 linux kernel 有興趣並且學習,還來得及嗎?看看那些研究所學生,他們早就學習了好幾年相關知識,就算很努力也不能追趕上他們。但是回過頭來想,如果不去試試看,怎麼知道自己能不能成為對 linux kernel 略懂的那群人。雖然可能不能成為這領域的頂尖人才,不過至少自己學習過了,而這些基礎知識也可以用在未來工作上。不能要求時間重來,但至少不要留下遺憾是吧 :)

預定目標回顧

根據六月初紀錄,六月要完成的目標包含:

  • 數學歸納法和數論。這個算是有點意外,因為自己沒注意到線上課程大綱,所以其實是上一系列 Pigeonhole PrincipleCounting 內容。整體來看算是有進度,只是上的內容和預計不同。

  • Linux 核心設計: 朝向硬即時的核心變革(20%)。本來預計要把線上講座再聽一次,但在檔案系統概念花了比預期還多的複習時間,所以講座內容大概只複習 20%。可能的改善方式就是拉長所需的複習時間,因為講座的內容實在太多,投入很多時間是必然的,不需要強迫自己硬要在短時間內看完。

  • FUSE實作(70%)。除了把基本 FUSE API(high level and low level) 使用並且實驗過之外,還有細部看 FUSE 的實現流程與 source code。並且也同時複習 Virtual File System 的架構和實現方式。因此這部分的進度算是比較多,不過只給自己 70%,因為沒有生出一個較完整的 side-project。

2018/12月份自我學習回顧

前言

其實可以看到,我從 11 月開始發文量變少(雖然本來就不多XD),主要是因為目前在複習一些理論課程,我又是手寫筆記派,所以自然地就比較少用 blog 記錄,反而是都寫成筆記,不但能強化當下的記憶,也方便日後複習。 ![12-study]({{ site.url }}/assets/images/12-study.jpg)

學習回顧

Network Principle

本月份主力衝刺在 Network 基本概念,這個月複習 Network LayerData Link Layer,雖然對於其中所使用到的 algorithm implementation 方式不熟悉,不過至少找回了概念,之後在 trace network protocol code 的時候也會更有方向。

學習日誌

本月份總共 9 天沒有唸書,因為剛好遇到跨年連假和公司年末要趕專案進度,所以減少了晚上自修的時間。

  • 12/01: 生日!正式邁入而立之年
  • 12/02: Implement TCP cong control (additive increase, multiplicate increase), TCP slow start, Refinement - three dup ACKs and timeout
  • 12/03: Golang slice review and string (immutable) to bytes
  • 12/04: 趕工作進度
  • 12/05: Network Layer - service model, connection and connection-less
  • 12/06: 經痛
  • 12/07: Network Layer - virtual circuit (create a path to dest) forward table, datagram (only dest 32bit data) and router table.
  • 12/08: ICMP protocol, Input and output queue, IP fragmentation
  • 12/09: Subnets, DHCP protocol
  • 12/10: 趕工作進度
  • 12/11: NAT concept ICMP protocol
  • 12/12: IPv6 features - fixed header, no fragmentation, tunnel
  • 12/13: Forwarding table algorithm
  • 12/14: 趕工作進度
  • 12/15: Routing algorithm - Link State(On2) and should know all node in network
  • 12/16: Routing algorithm - Distance Vector and broadcast the path table to another routers. AS (atomic system) inter - AS and intra - AS
  • 12/17: Routing protocol - RIP routing info protocol | OSPF open shortest path first | IGRP (only for scisco)
  • 12/18: Boder Gateway Protocol (Prefix + attribute), routes selection
  • 12/19: Broadcast and multicast with tree
  • 12/20: 醫生說要多休息,不然感冒會惡化,因此提早睡
  • 12/21: Reverse path forwarding, pruning forwarding tree, shard-tree (NP-complete, impractical) , DVMRP and IGMP protocol, PIM protocol
  • 12/22: Golang code style, Data link layer intro (principle) service for framing, NIC adaptor, Adaptor communication, error checking (bits)
  • 12/23: Channel partition - FDMA / TDMA, Random access protocol - ALOHA, CSMA and CSMA/CD, Taking turn MAC protocol (polling and token pass)
  • 12/24: Mutation Testing , MAC address and ARP (Address resolution protocol), The process of send data from A node to B node (datagram -> broadcast to get MAC -> if no target then send to default router)
  • 12/25: 聖誕節聚餐
  • 12/26: The process of CSMA/CD.
  • 12/27: CSMA/CD - Exponential Back off, efficiency, Manchester encoding. Physical layer device - hub. (only broadcast signal). 線上直播 - Linux 核心設計: 多核處理器和 spinlock
  • 12/28: Switch table and self learning, Interconnecting switches. The difference of switch and router
  • 12/29: Application layer
  • 12/30: 跨年連假
  • 12/31: 跨年連假

11月份自我學習回顧

前言

這個月學習內容主要集中在 Embedded SystemNetwork,說來慚愧,雖然大學有修網際網路,但是過了這麼久,很多知識都還給老師了。因為目前在網通廠工作,常常會接觸到 Application Layer Protocol 和使用 UNIX Socket,所以趁這機會再一次把網路課程複習一下,混搭上個月沒有學完的 Embedded System

遂一算也快要年底了,這個月發生一些事情,這些過程警示自己的能力還要繼續加強,不能因為在工作上已經逐漸上手了,而導致學習速度慢了下來。現在學習上,新事物和基礎理論強化各佔半,希望能在吸收新知識同時,也能把過去學習到但是遺忘掉的理論補起來,讓自己在使用這些新技術也能充分了解其背後含義。

學習回顧

Embedded System

  • Build a linux kernel 和 simple linux service 這個月在 Embedded System 進展到 build linux kernel, linux 版本上選擇了 Alpine v3.8,size 極小和重視 security 的 linux system。規劃在熟悉了 alpine 整體架構後。會細看它如何去修改這些 kernel 去實現安全化的機制。Service 部分,目前是採用 Alpine 打包成 package 的方式,然後將 package 一起 build 到 kernel 中。不過這些內容比較偏實作面,理論基礎上對於 kernel space 和 user space 的細節和運用場景還需要再加強。

Network