第五堂:「Command-line Environment」

這個系列是從『MIT 的「The Missing Semester of Your CS Education」』這邊延伸出來的,這邊講的是「Command-line Environment」這篇。

開始聊之前先看一下其他的東西,我注意到這系列文章有簡體中文 (這裡,已經翻完) 與繁體中文 (這裡,還有幾篇還沒翻完) 的版本了,如果讀英文會比較累的人可以參考看看。

這堂講 command line 下的各種事情,感覺起來比起前面硬不少。

首先就先開始講 signal,各家系統的 signal 應該還是有些微差異,可以參考各家的 signal(7) (在 command line 下用 man 7 signal 可以列出來)。

這邊講的 signal 都比較通用,像是 SIGKILL 的殺傷力,SIGTERMSIGQUIT,然後有提到 SIGHUP,但 SIGHUP 的設計慣例是拿來重讀設定檔好像就沒提到了...

接下來就帶過 tmux,只大概講了一下概念 (sessions、windows、panes) 與用法。

然後講 shell 的 alias 對於打造環境的幫助,以及 dotfiles 的設計。

後面講 SSH 的應用,然後還提到了兩個不同方向的 port forwarding。

這些對於初學者來說應該蠻有幫助的,第一次打造自己的 shell environment 的過程應該還蠻有趣的?(已經是很久前了...)

第四堂:「Data Wrangling」

有陣子沒寫了,來還個債...

這個系列是從『MIT 的「The Missing Semester of Your CS Education」』這邊延伸出來的,這邊講的是「Data Wrangling」這篇。

這篇是在講 pipe 的用法,在講這些工具之前,其實有個很重要的概念應該要說明 (但沒有在這篇文章裡被提到),也就是 Unix philosophy,這個哲學是指 unix 環境下的工具,都會設計成只做好一件事情。

而要怎麼把這些工具串起來,最常見的就是 pipe,你可以在文章裡看到 grepsedsort 這些工具的用法,以及怎麼用 pipe 串起來。

這邊剛好也可以提一下,利用 pipe 可以把不同功能打散到不同的 process 上,剛好也可以稍微利用到現在常見的多 CPU 的環境。

另外上面因為提到了 grep,文章內花了不少篇幅在講 Regular expression 這個在 CS 課程裡面也是重要的基礎。

會放這種篇幅長度,一方面是 Regular expression 的實用性很高,另外一方面,學術上與自動機理論中的 DFANFA 都有關,算是學習計算理論的起點:

然後後面就有提到 AWK 這個工具,這邊要注意的是,雖然可以用 Perl 之類的工具作到類似的事情 (而且更強大),但 AWK 有被放到 POSIX 標準裡,所以在各種作業系統內幾乎都一定會出現,加上語法算是簡單,學起來還是很有幫助...

然後再最後面的段落冒出一個 gnuplot 畫個圖,以及示範 xargs 這種神器要怎麼用 (這邊會更建議看一下 manpage,可以配合 find 之類的工具用,並且平行化同時處理)。

然後最後示範了 binary data 怎麼處理。

第一堂:Course overview + the shell

這個系列是從『MIT 的「The Missing Semester of Your CS Education」』這邊延伸出來的,這篇文章講第一堂課「Course overview + the shell」。

前面大概講一下這 11 堂各一個小時的課大概是什麼,後面就開始講 shell 下的操作了。

先講了一些基本指令 (date & echo),然後提到了環境變數 $PATH,接著就講目錄結構與 ls,然後就順便提到 man 可以拿來查說明,接著是講 redirect 與 pipe 以及 root 權限的特殊性 (以及 sudo)。

在課程最後面的這個範例,你第一眼看不會想到是第一堂課就可以教完的東西,但的確是結合了上面提到的所有東西,可以細細品味一下:

$ echo 1 | sudo tee /sys/class/leds/input6::scrolllock/brightness

MIT 的「The Missing Semester of Your CS Education」

MIT 推出的短期課程,在 CS 相關科系裡面不會教,但是如果學過的話會讓你的 CS 學習過程有很不一樣的改變:「The Missing Semester of Your CS Education」。

整個主軸是偏應用為主,其中花了很多篇章在講 CLI 下的工具,這點從每堂課的標題就可以看出來:

1/13: Course overview + the shell
1/14: Shell Tools and Scripting
1/15: Editors (Vim)
1/16: Data Wrangling
1/21: Command-line Environment
1/22: Version Control (Git)
1/23: Debugging and Profiling
1/27: Metaprogramming
1/28: Security and Cryptography
1/29: Potpourri
1/30: Q&A

我自己快速讀過去的時候發現,雖然這是入門課程,但我還是從裡面抓到了一些以前沒有關注的關鍵字 (像是 Python debugger pdb 與 profiling 相關的操作)。

接下來應該會開個連載來寫一下心得與感想...

最近開的課程:程式進階效能優化實作

五倍紅寶石聊了蠻多方向的,決定合作開一門跟資料庫有關的課。上個禮拜先貼連結到我的 social network 上,但一直沒寫文章說明內容。所以就來寫文章推銷了:「| 五倍紅寶石 | 程式課程:?SQL 程式進階效能優化實作 - 台北假日班 | Accupass 活動通」。

這門課程預定在 5/26 與 6/2 上課,共 12 小時,分成兩個週六上課。課程主要是以 MySQLInnoDB 為內容 (會採用 Percona Server 5.7 的系統),在課堂上會有實際的 MySQL server 與 phpMyAdmin,可以拿預載好的 data set 實際練習。

由於是效能改善的主軸的課程,會從圍繞與效能有關的主題說明:

  • 有哪些資料結構可以使用。像是 VARCHARCHAR 的差異,以及對 Index 的影響。
  • 怎麼樣設計出符合正規化規範的表格,以及使用與不用的時機。
  • 當表格正規化後,有哪些方式可以取得資料。像是各式的 JOIN、GROUP BY 以及 subquery。
  • 在系統內 Index 要怎麼下才會有效率。
  • 怎麼看 MySQL 對一組 SQL query 的解讀,這邊會針對 EXPLAIN 的操作以及輸出結果。
  • 常見的效能問題,像是 ORDER BY RAND()、N+1 以及 LIMIT N,20 造成資料庫效能不佳以及改善的方式。

而這門課主要針對兩種客群:

  • 第一種是會對資料庫操作的 Programmer,像是後端工程師,全端工程師,或是 DevOps。由於課程內包括了系統上線前的設計與預防措施,以及上線後遇到狀況時的判讀與排除,對於 Programmer 來說是不可或缺的課程。
  • 第二種是管理資料庫的 DBA。在前期參與規劃資料表格設計時,可以提供精確的建議,以大幅降低後續維運上可能遇到的問題。以及當真的遇到效能問題,或是接手的系統就已經有效能問題時,提供可能的解決方案。

目標是透過這門課程,讓資料庫 (尤其是 MySQL) 被用的更淋漓盡致,而不是單純的遇到效能問題就加大機器。

UC Berkeley Course 的影片將從 YouTube 上下架

看到「Ask HN: Which Berkeley Courses Should I Archive?」這篇才知道下架的計畫,但也有人很努力在掃:「UC Berkeley Course Captures」。

官方的公告在月初的時候發出來的:「Campus message on Course Capture video, podcast changes」,提供的理由還是很怪...

有點可惜啊... :o

AWS 在台灣辦的課程 Cloud Kata

Twitter 上看到「Cloud Kata | 台北 | 8月4日」這個消息:

算是入門課程 (我的觀察),有興趣的人可以去報名...

Xiph 講數位訊號...

Xiph 是個網路多媒體相關的 open source 組織,前陣子放了教學影片,介紹多媒體的理論:「Xiph.org: Video」,目前每一集都大約半小時,可以下載下來或是直接在網站上看。

第一課「Episode 1: A Digital Media Primer for Geeks」從數位訊號開始講,包括影像與聲音。第二課「Episode 2: Digital Show & Tell」則是介紹聲音的部份 (包括數位與類比)。

有興趣可以去看看 :p