国庆期间,研究了 indexed mode 下的 PNG transparency 的内部格式(最近的项目需要生成特定格式的PNG文件),了解了 tRNS 与 Alpha 通道的不同,也写下了如下的 探索性代码。
生成的 Indexed mode PNG 有 GIMP 中可以看到 颜色表
同时过程中 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。去了解你的工具,而不是只有代码还是代码。