1. 程式人生 > 實用技巧 >從當前專案中聊開一下

從當前專案中聊開一下

國慶期間,研究了 indexed mode 下的 PNG transparency 的內部格式(最近的專案需要生成特定格式的PNG檔案),瞭解了 tRNS 與 Alpha 通道的不同,也寫下了如下的 探索性程式碼。

過程中 IDAT Chunk 需要用到 zlib 壓縮就看了一下 zlib 的程式碼,只是看的過程中也想起之前工作中的一些場景。

場景一:年初,評審開發人員的方案時,我提出 “表驅動” 的方案,結果 所有人都一臉蒙(顯然是沒有 翻過 《程式碼大全》的 Code Monkey)

我們來看一下 zlib 實現壓縮時用到的 “表驅動” 方案(函式表)

我們平常所知道的 壓縮級別 0-9 不就對應了 函式表中 0~9 的索引了 麼?

場景二:

常常我都會和開發聊到 狀態機,但絕大多數人 都是沒有說到 “點”,這些人中要麼 沒有寫過 demo,要麼只是看了一些別人的部落格,也有一些人 還不知道這個概念

我從這次看 zlib 的程式碼中 拿一個例子,解壓時(或者通用來說 decode 各種 按某種協議encoded 的data 時)就是一個 從 read data stream 上 read 的到資料去決斷當前的 最新狀態 再執行對應的 decode 操作

PS: 高效的方法是,這樣的研究場景(參考已經有的 XX 實現),不需要去 github 下載程式碼,對應的的 ubuntu 中 開啟 deb-src 可以下載對應 軟體包 的原始碼,也可以下載到 除錯符號 dbgsym。去了解你的工具,而不是隻有程式碼還是程式碼。