大家都想听我原来代码狂魔时的故事,晚上回家用我最爱的 Nuphy 键盘给你们敲敲
回想起来代码狂魔的时候,基本都集中在创建 deepin linux 的时期
2010 年最开始写深度软件中心的时候,看了下 Python 对 PackageKit 支持比较好,就先看了一本书《Python 核心编程》,第二周就开始写,那时候是 Linux 下第一个支持自定义皮肤的软件商店,界面上还是吊打 Ubuntu AppStore 的。最开始用的是 PackageKit, 最后发现好麻烦,接口虽然好,但是底层依赖解决能力基本上就是-10,最后直接用 apt 安装包,如果探测到安装出问题,自动用 dpkg 修复一下。我记的那段时间写代码还是比较轻松,室友流行打三国杀,我一般玩三国杀就比较喜感,我记不得名字了,有一个角色是专门改闪电的,就是抽到任意一张牌,都可以改变牌的内容让下一家电死,但是这个规则还有一个限制,唯独有一张牌,如果角色自己抽到,就会把自己电死。我每次拿到这个角色,从来就没有电死过别人,反而极小概率的把我自己电死,那时候只要我玩三国杀,他们都要笑死。他们还经常笑我,拿到忠臣以后必选张飞,3 圈没到忠臣就命丧黄泉。有时候玩三国杀累了,就看《星际之门》,看完就写会代码。其实我一直都觉得 Linux 下开发很容易,只要自己不作死,基本上就是开发最自由的编程环境,因为这个环境下的规则就是没有规则。
后面写深度截图,基本上就是仿 QQ 截图,因为我有做游戏编程的经验,游戏编程的图形习惯就是,不要有任何控件,只要一张白色的画布可以做任何事情。所以那时候根本就没有看 GTK 控件,直接 X11 截图接口测试过,1 天就写完 Demo,一周以后就发布正式版。为什么会那么快?其实很简单,你就把所有的动作绘制当作一个简单的图层,每个图层的鼠标轨迹的绘制方法不一样,所有图层都是一个 Action 数组,选择工具条就增加一层,撤销就暂时移除数组,重做就重新添加数组就好了。其他不用管,因为电脑绘制数组的图层全部画一遍都非常非常快。那时候随手一周做的深度截图,让当时寥寥数人的用户们感动的稀里哗啦的。
第一次写深度桌面环境的时候,基本上就是 Gnome3 插件一把梭,我应该是国内最早研究 Gnome3 的开发者之一,也是最痛恨 Gnome3 年数最长的开发者之一(之一也可以去掉,不是不可以)。Gnome3 有一个好处是它学习浏览器整了一个 GJS, 相当于整个桌面环境就是一个解释器,你 F2 呼下控制台,就可以鼠标点击哪里,反射找出鼠标下的 JavaScript 对象,马上顺藤摸瓜就可以自己改,特别方便。那时候年底为了发布系统,20 天写了一万行代码,整了 8 个插件,把 Gnome3 改的好用很多。那时候的 deepin linux 团队好弱,基本上十来个人,全部人围观我一个人写代码,所有人都在上班开玩笑给我当鼓励师(像不像 MTK 芯片?)。最最讨厌的是,我写了一万行代码,在下一个版本中,居然全部失效了,当时我就好奇哪些 API 改了?看完一口老血,所有的 break change 要不就是改名字不改用法,要不就是名字一样参数不一样。那时候我算了一笔账,这样搞,每年整个几万行桌面环境代码就要重写,3 年不得浪费十几万行代码?这也是最后我推动团队做 DDE 的原因。
我这个人还特别喜欢在机场写代码,机场一般都会提前到,到了也无聊。所以,我经常给自己定一个挑战,能否在等飞机的半个小时左右写一个新的软件?最早的深度终端代码,基于 VTE 控件写的 Chrome 风格多标签终端就是我在机场半个小时撸的,那个终端是用 vala 编写的,vala 是一门我非常有好感的语言,语法糖类似 C#,但是编译器没有做花里胡哨的功能,就是语法糖转换成C再用GCC编译,所以深度终端当时可以做到鼠标点击后50ms内启动完毕。你们终于知道为啥深度早年应用的速度造的这么快了吧?因为我根本就没把其他发行版的开发者放在眼里,哈哈哈,那时候真是年少轻狂呀