Archive for the ‘未分类’ Category

恢复(到更高的)生产力

2017/07/24

任何一次生产环境的调整都是对生产力的打击。

六月初 WWDC 宣布 MacBook Pro 升级之后,决定照去年末计划升级用了四年多的 MacBook Pro 2012。回想起来,从第一次升级到 MacBook Pro 已经快八年了。每次升级都要磕磕绊绊一两周时间。所以四年应该是最短的更新周期,Apple Care 也是必须要买的。

当年买第一台的时候还特地等到 Snow Leopard 正式发布后才去 Apple Store,希望得到预装新 OS 的机器。结果欢乐地得到了 —— 预装 Leopard 的机器和 Snow Leopard 的光盘。

和以前相比这次升级的特殊性在于 hobby 开发转向了 GPU rendering 方面。从上古时期开始这就是兼容性的「玄学」领域。加上 Apple 刚刚推出 Metal for macOS 没多久,今年又急急忙忙拿出 Metal 2,这些对生产力的平滑输出都没有什么帮助。在新机器上配置好 Xcode 8.3.3 之后,发现我的 renderer 根本跑不起来。真是一个沉重的打击!接下来发现如果注释掉关于 shadow map 的代码可以勉强运行,这给了我虚假的希望,以为可以简单修改代码绕过问题。折腾了两天发现只要 shader 中 texture sampling 和分支组合到一定程度就出问题,根本没有简单的规避方法。时间在郁闷中虚耗了三天。最后我决定试一试 beta 版 macOS 上的 Metal 2。

之前从不在主力机器上安装 beta 软件,这次是被逼无奈。我甚至考虑如果还没有改观就退掉这台机器。好在装完 High Sierra beta 2 和 Xcode 9 beta 之后 renderer 能跑起来了。看来 Apple 人手吃紧,为了 beta 版的进度已经顾不上修复稳定版的问题了。不知道手握 MBP 2017 的人现在有多少像我一样被迫紧跟 beta 版动态。对于 Apple 来说我大概已被划入少数派用户了,macOS 开发就是小众,Metal 开发也是小众,Metal for macOS 就是小众的小众。

好景不长,反复观察一天发现只要系统休眠后,Metal 2 性能就会狂降。害得我不停 reboot 系统。几天后总算找到了基本「恢复」生产力到方法。在系统中始终运行一个 renderer app,休眠就不太会触发性能问题。似乎 High Sierra 的 GPU 管理在休眠状态判断上有问题,而保持一个运行状态的 Metal 2 app 可以让 GPU 管理绕过这个问题。

合理的肮脏

2016/05/11

2016-05-10-AutoBodyShop

上班时因为没及时换 lane,所以选了另一条路,经过一个整形喷漆的修车场。场外停满等待修理的车,每辆身上都有些变形和漆面擦落。整个环境充斥着萧条的气氛。

当然,在商业环境讲求效率的标准下,我们被教导了要「学会用正确的方式看待『整洁』」。

It took me a couple of months … before I realized what they meant. In the bakery, clean meant no dough on the machines. Clean meant no fermenting dough in the trash. Clean meant no dough on the floors.

Clean did not mean the paint on the ovens was nice and white. Painting the ovens was something you did every decade, not every day. Clean did not mean no grease. In fact there were a lot of machines that needed to be greased or oiled regularly and a thin layer of clean oil was usually a sign of a machine that had just been cleaned.

类似的视角并不限于商业。例如,我们都希望住进有专门车库的房子。不仅仅为了存放车辆,更是希望一些爱好的副产品远离起居室。在明亮的起居室欣赏飞机模型的时候,车库里存放着一张不必每天收拾的工作台,上面散布喷漆的污渍。

如果这种「合理的肮脏」均分在每个人的生活中,不仅是应该的,甚至是完美的点缀。可是在从微观到宏观的层面上,最优效率的组织方式都是类似的 —— 这是上面 Joel 的 blog 里毫不费力的用面包房来为后文的代码组织做类比的合理性所在。在某个层面上,合理的肮脏所跨越的范围必然覆盖到某些人群绝大部分生活空间。像上面的修车场附近的居民区,对他们来说,打开窗户就能看到,走出房门就会接触到的修车场并不像一个享受爱好之后就可以离开的车库。我写这篇 blog 的原因正是联想到类似的情形在地区和国家的层次上,对于在「车库」里的人来说,生活并不是那么愉快。

最近的收获

2013/02/18

最近工作非常忙碌。开发中的产品经历了重要的 milestone,又逢公司的 Tech Summit,在总部和其它地区的同事面前完成了自己的首次英语 presentation。工作之余则主要是「汲取」—— 读的东西比较多,总结的东西比较少。学完 Lua 之后再看 SICP,眼界开阔了不少。在 Amazon 上买了不少闲书,包括没有 Kindle 版的 GEB,今天终于到货了;物质方面也收获不少,去东海岸休闲了一番,顺道买了台 MacBook Pro with Retina Display。

Amazon Kindle

2012/07/25

这个周末得到了 Amazon Kindle。值得高兴的是终于可以用 e-ink 来体验待读的几十本 Kindle 书和 Readability.com 的内容。应该说这是一台优雅的设备。不过它的问题也体现在「过于」优雅。

沉浸在徐徐翻动的小说中,你会觉得 e-ink 相当完美。但是,当到了一个新的环境需要 setup WiFi,或者阅读需要前后参照和查阅 Wikipedia 的书籍,e-ink 的低刷新速度和著名的残影现象会让早已习惯液晶屏界面的人很不习惯。传统 PC 和触摸屏上的电子阅读和 Wikipedia 第一次能让人比较轻松地涉猎一些不熟悉领域的研究立论性质的书籍。e-ink 虽然把电子设备的轻便性和传统纸张的观感结合起来,但是在电子阅读真正延展阅读能力方面也退回了传统媒体的层次。用 Kindle 阅读的时候,需要借助笔记本电脑的几率要大大高于使用 iPad 甚至 iPhone。Kindle 只是在重量方面体现了高技术的价值。

当然,看待 e-ink 所展现的优雅和缺陷有不同角度。比如说,在我的观察中 30 岁上下的中国人和西方人的行为上有一个巨大反差,至少我从未见过中国人像西方人那样有一个明显的放松状态 —— 戴上墨镜,静静地坐在一个地方看书,或者边听音乐边眼望远方(或者只是东张西望,反正他们的头不动,无法透过墨镜看到眼珠)。也许电子产品的设计自有这些差异的体现。Kindle 像一部平稳行驶时非常舒适,而加速刹车时非常蹩脚的交通工具。不过也许是我们的生活太颠簸而已。

近期功课

2012/01/18

最近逛书店(Amazon.com,China-pub.com 还有西单图书大厦)收获不少。想买的和没想到要买的都有了:

  • 《罗马帝国衰亡史》,商务印书馆的经典版式。适合完全没有网络和电脑的时候看。不过有些功课还得通过 Wikipedia 补上。
  • 《The Design and Implementation of the FreeBSD Operating System》,想看看 kernel 的东西,不过没有当年 dig Linux kernel source 那股劲头了。浮光掠影的看看这个 OS X 的近亲吧。
  • 《DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X, and FreeBSD》,对工作最有用的一本。有网络和地方摆电脑的时候认真看。
  • 重读经典的《人月神话》还差五章,没有照到这张里。

Retreat Corner

2011/12/03

办公桌的 retreat corner。

一个人是否能改变世界

2011/11/16

1975 年 6 月 29 日,一个人在键盘上敲了几个键,他面前的「显示器」显示了对应的几个字母。在他之前,没有电脑能做到这点。在他之后,所有人都以为电脑从来就是如此。尽管是 Steve Jobs 为这台电脑推向大众做了关键的一步,但是站在这个历史转折一刻的,是 Wozniak 一个人。

如果不是时时重温这段历史,很容易以为 Unix kernel 是在类似 vi 的编辑器上写就的。很少有人能一力创造如此改变世界的转折。就连 Ken Thompson 创造的杰作也没能扫除世界上 90% 计算机上的 VMS 遗留物。

阅读

2011/10/30

《 Steve Jobs 》,啤酒,电子辞典和 Wikipedia 。

乔布斯安息

2011/10/06

No one wants to die. Even people who want to go to heaven don’t want to die to get there. And yet death is the destination we all share. No one has ever escaped it. And that is as it should be, because Death is very likely the single best invention of Life. It is Life’s change agent. It clears out the old to make way for the new. Right now the new is you, but someday not too long from now, you will gradually become the old and be cleared away. Sorry to be so dramatic, but it is quite true.

Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma — which is living with the results of other people’s thinking. Don’t let the noise of others’ opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.

Premature Optimization

2011/07/26

昨天在知乎上看到有人问某领域的基础学习是否可以有所侧重裁剪的问题,第一反应是:学习基础得不能再基础的东西还裁剪什么?由此不由得想到了简化字。从有草书和行书开始,简化字的存在其实也有几百甚至上千年了。建国后的汉字简化过程,其实只不过是正字废除过程而已。丢弃的知识不说,语言本身在某些方面反而被复杂化了,有些本来可以通过单字明了的意思,比如船只的「隻」和只有的「祇」,现在必须通过上下文分辨。

软件开发领域之外无数草率的裁剪,和软件开发的「 premature optimization 」本质上属于同一种行为,拥有共同特征。第一是基于假设的而非真正的 hotspot 。软件开发的 premature optimization 不经过 profiling ,所以经常发现辛苦优化的代码在使用中很少被调用,优化所得的效率提高完全被边缘化。简化字号称能加快汉字认读,其实以汉字认读为主的学习阶段只有两年左右(还是在兼学其它科目的情况下),而现代中国人以学习为主的过程持续九年到三十年以上。简化汉字牺牲文字带来的收益其实得不偿失。

最成功的软件系统是那些最终用途超乎设计者想像的系统,像 UNIX 操作系统及其各种工具,C 语言,Photoshop 等等。Premature optimization 大大降低了这种可能性,让系统能顺利经受预料之外情形的能力低下。至少,在外界情况发生变化时,premature optimization 所允诺的优势的往往烟消云散。今天学简化字成长起来的这一代人,认读正体字毫无困难。这是当年行书和草书的设计者们在长年积累中对认读心理的直观认识的结晶。这说明在认读方面正体简体并无区别。那么正体废除运动的优势似乎就只有书写一路了,偏偏今天的汉字书写又计算机化了。人类永远不知道自己预言未来的能力有多差,而勇于否认这点的莫过于 premature optimization 的施行者。

好在当年汉字拉丁化这个终极优化方案被否定了。这里不是要悲叹正体字在神奇大陆的消失,而是要借此说明 premature optimization 的本质邪恶。优化是我们可以清谈的东西,是可以做理论研究的东西,是可以边边角角尝试的东西,但绝不是指导下一大步的方针。