大家好,
我是来自 Canonical 的周鼎,今天我很荣幸收到开源中国的邀请在这里与大家聊聊有关开源的一些东西。
我想跟大家分享一下过去五年来,自己在 Linux 开源世界的一些认识、经历和收获。我可能是现场唯一讲桌面软件和桌面系统的,与大家的技术交集不多,因为现在的主流是 Web、移动应用和云计算平台。但是,桌面系统是我们工作离不开的平台,桌面系统对我们来说是最重要且最直接的工具,我相信大家都是在桌面系统里编程和创造,而不是在浏览器和手机里。没有桌面系统,我们就无法创造 Web 及移动平台,所以在未来还是会继续发挥其重要的作用。
在这里我想简单的了解一下,有多少朋友是写代码的?(现场几乎全部举手)
很高兴看到这么多朋友是写代码的,那么请允许我代表你们一下:作为一个开发者,大家都是希望能做出自己的作品的,是不是!(现场反响)
所以今天我在这里与大家分享一下我的个人作品——Ubuntu Tweak,希望通过个人技术和产品上的经历,能与大家产生一些共鸣。
在讲 Ubuntu Tweak 之前,我先来提一下 Ubuntu 吧。今天,我想首次以官方人士的身份,向大家宣布 Ubuntu 的中文名——友帮拓。但是我不要求大家用它,因为我自己也不说。
然后我来讲 Ubuntu Tweak 吧。首先,它不是「优化大师」,它是一个桌面系统的调整工具,我从2007年7月开始做这个软件,现在最新版本是0.7.2,已经做了五年,有了50多个版本。它大概有不到2万行代码,最多一次下载有50万,支持多国语言,软件本身是由很多贡献者完成的。
我相信现场有些朋友可能没用过 Ubuntu Tweak,我来做个简单的演示:
- 字体调整
- Unity设置
- 清道夫
为什么开发 Ubuntu Tweak ?
我是在2006年末开始接触Linux,并且试了几个发行版后,就选择了 Ubuntu。所有 Linux 使用经历在五年以上的朋友应该知道,那时 Linux 很不好用,尤其是中文支持方面,没有像现在这样好的微米黑了。当时用 Linux,基本上一装好系统就要各种配置,折腾下字体、折腾下输入法,再折腾下系统主题啥的,让系统更漂亮,毕竟是天天工作的系统,让它变得赏心阅目是必要的。
当时我非常喜欢把我的 Ubuntu 美化成 Mac OS X,已经到了以假乱真的地步了。顺便提一下,今天我终于如愿以偿地用上了 Mac。
因为那时 Linux 很不好用,我又喜欢解决问题,于是,做一个系统傻瓜配置工具的想法,就这样冒出来了。#p#
开源世界编程初体验
2007 年的暑假,当时我仅有一些C语言和 Java 的基础,我就参照着另外一款开源软件,开始写 Ubuntu Tweak。当时我进入开源世界感觉真的非常棒,当时没有 Github 这样的方便的交流沟通平台,所有能接触到的源码最全而且最方便的,就是 Linux 操作系统。你想想,一句「apt-get source foobar」,就能把一个开源项目的源码自动下载好并解开来,马上就可以看了,这对刚刚开始学习编程且如饥似渴的人来说,简直是如鱼得水啊。
实际上是现在回想,开源世界也有一个缺点,就是文档不够齐全。很多库的文档都不完善,你只有自己亲自去试才能理解更深。甚至有时候,你必须得去看这个库本身是怎么实现的。很多事情都是两面的,于是这实际上这也是一个优点,只有在开源的 Linux 操作系统上,你才有机会因为文档的不齐全直接去接触问题的本质,去看一个具体的库是怎么实现的,从而解决问题。我觉得使用 Linux 而且在 Linux 平台上编程有助于培养从本质上解决问题的能力。
当时我真的什么都不懂,但是意识里还有一些现代项目管理的意思,比如我还不知道什么是「版本控制」,但是我自创了基于文件夹的「人肉版本控制」,还挺自豪地写了篇文章。后来马上有前辈告诉我该去用 SVN(当时 Git 还不流行)。我马上采纳了意见,学习了下 SVN,并且入驻了当时比较流行的 Google Code。
这里是当时第一个做出的功能,把我激动了好一会,就是把系统配置读出并响应到一个响应的显示上,如果勾选了这个按钮,就把系统配置也改掉了。
利用好开源世界开源的特性,多读源码这个「文档」
而这是当时把界面差不多建立好的样子,没错,当时我为了更中文化改名叫了「Ubuntu优化大师」,不过后来又给我改回来了。#p#
2007年9月9月:首个0.1.2版本
大概边学边做一个暑假,在开学的时候,我就推出了 Ubuntu Tweak 的第1个版本:0.1.2。这个版本的 Ubuntu Tweak 是用C语言写的,很不好用,界面非常破,功能也有限,但总归有了一个开始。而且因为我曾经是做 Linux 资讯网站(Linux 桌面中文网)的,很自然地就把它放在自己的网站和其他论坛上进行推广,也引起了不少关注。很快就有朋友说要帮我编译一个64位的版本,还有朋友又说要帮我翻译成繁体中文。
当时我还在「LUPA」这个开源社区混,当时我在杭州读书,LUPA 也正好是杭州的。刚刚 LUPA 准备搞一个开源沙龙,看到我发的这个东西,就被当时 LUPA 社区的主管发现了,他就邀请我去 LUPA 沙龙上讲讲。于是这次是我在开发了这个软件发布没几天后,就第一次在线下跟大家分享了,这给当时的我有着很大的鼓舞。真的很感谢当时邀请我分享这个软件的 LUPA 社区,就像今天开源中国邀请我让我有机会得以贯穿一下这五年。
主动进行宣传,愿意参与的人可能比你想像中的还要多
专注 coding 之外,也要混一下社区。
发布0.1.2版本后的动作
在发布第一个版本之后,我还注册了 ubuntu-tweak.com 的域名,,我马上搭起了一个 Blog,用英语向世界广播。这个意义也是相当巨大的。正所谓开源无国界,如果你做的东西没有区域限制,那么不要怕英文不好,推出国际版可以说是必备的。
然后因为我还在学校,经常逃课不去上课,时间非常多,基本上是全身心放在做这款软件上了。PS:我当时还是学习委员。
我的迭代开发速度很快。很快半个月后,我又发布了一个新版本,0.1.4。这个版本依然还是比较差的,但是修正了很多 bug,最重要的是,给关注它的用户看到了我愿意在上面倾注的热情,然后这个版本自然有了比之前更多的关注量。
在连发两个版本后,我马上意识到了之前的方式虽然 Quick 但是 Dirty,随着功能开发越来越多,会越来越难以维护和很多潜在的问题。于是我立马放慢了速度,尝试去学习了一些设计模式,把软件的框架变得更加灵活而且容易控制,记得那个时候就接触了 MVC 设计模式。而且这个版本得到了当时在北京朋友的支持,他为 Ubuntu Tweak 设计了全新的Logo,让 Tweak 得以在后面争气一下「好歹要对的起这个专业的设计师设计的 Logo 是吧?」我开始花精力在界面的设计上,而不是仅仅在代码的设计上。当然这个过程非常的漫长。
2007年11月:Ubuntu Tweak 0.2.0
在一个半月后,2007年11月,经过无论是结构还是用户界面改良的 Ubuntu Tweak 0.2发布了。当时我继续像以往一样,写了一篇很详细的、图文并茂的发布文章。这个习惯一直沿用到现在,我觉得虽然不会有人看也不一定会关心你修了几个 bug 或内部有用什么设计模式,但是就当为自己写。
写详细的发布通告,至少让自己知道这个版本做了什么变动
然后在这个版本后,因为用户增多了,大家需要一个报告问题的方式,于是当时我把 Ubuntu Tweak 放在了 Launchpad 进行管理,当时只接受 Bug报告,也没有所谓的项目管理,基本上是我想到做什么功能就马上去做。当时收到的第一个Bug报告是:UT Logo takes too much place.
当时我不以为然,因为我喜欢自己的设计,一直没采纳这个用户的意见,修正这个 bug 大概花了一年多。
然而,我还是认为坚持自己的意见很重要,因为自己慢慢认识及争论的过程,比毫无保留地接受第三方的意见要好。
Ubuntu Tweak 0.2.0之后的动作及0.2.4的发布
在0.2版本发布以后,我还是不满意当前的构架,而且那次在 LUPA 的活动上,一个大学的教授向我推荐了 Python 这门编程语言。我当时是除了Basic、C 和 Java 没接触过其他语言,而且我好奇心比较强,既然有大学教授向我推荐了 Python 这个新东西,那我就去学学好了。
于是我又是一边学习 Python,一边把 Ubuntu Tweak 用 Python 重写了。很快,在12月中旬,我就发布了完全用 Python 重写后的新版本0.2.4,这个版本继续增加了更多功能,比如 Compiz 3D桌面的设置,比如增加了德语、波兰语。
无论是 Ubuntu Tweak 的图形编程 GTK,还是后来用 Python,基本上我都是现学现用,我觉得这个还是很重要的。
学以致用,边学边用。
0.2.4之后的动作
当时 Ubuntu Tweak 的多语言支持是通过 gettext 来支持的,当时项目托管平台 Launchpad 有着对 gettext 的在线翻译的支持,而且后来还增加了一个叫 「PPA」的机制,即:Personal Package Archive,可以通过该渠道发布软件,用户只需要加这个源,就可以获得持续更新。相信用 Linux 的朋友都知道这是怎么一回事。
于是,我为 Ubuntu Tweak 建立起了翻译平台,还开启了这个 PPA。这使得参与 Ubuntu Tweak 的翻译不需要通过手动提交 Pot 文件,任何人都能在网上自己翻译了,另外 PPA 的增加,也使得软件的分发变得非常方便,用户不需要每次下载、安装,只需要每次更新就能用最新的东西了。
这些因素让 Ubuntu Tweak 后来拥有了30几国语言的支持、更快的流通奠定了基础。
关注开发以外的事物,优化分发流程。
第一个半年的荣誉与成果
2008年1月,我已经发布到 Ubuntu Tweak 0.2.5版本了。当时我已经不做间接宣传了,而只在自己的blog上做主动宣传,当时效果很好,Linux.com 报道了 Ubuntu Tweak。当时的美味书签:del.icio.us 也上头版了。这对当时来说是很大的鼓励。
基本上我以每月两个版本的速度开发着…半年的时候,我就发布了11个版本,而且只是 0.1 ~ 0.2。不知道这个频率是不是太快,但是对于一个正在学习阶段的我来说,还是比较合适的。
然后我继续紧着不断开发,完善各个方面的功能。
Release Soon, Release Often
2008年4月 Ubuntu Tweak 0.3
2008年4月,我发布了 Ubuntu Tweak 0.3,一个显著的变化是,我调小了 Banner 的尺寸(迈出这一步是很不容易的…),增加了自动更新功能。与此同时,Ubuntu Tweak 第一次在国内的《程序员》杂志被报道了。
2008年7月 Ubuntu Tweak 0.3.4
2008的7月,我又发布了 Ubuntu Tweak 0.3.4,这个版本增加了一个比较重要的东西,那就是第三方源的东西。这个功能把一些常用的 PPA 软件收集起来,让用户可以随时保持软件的最新版本。这个功能在后来不断完善,成为了用户最受欢迎的一个功能。
2008年10月 Ubuntu Tweak 0.4.0
我又马不停蹄的开发出来了0.4.0版本,这个版本最显著的改进是,我终于去掉了界面那个长条,界面变成了这个样子,同时加入了软件包清理的功能。任何操作系统在长期地使用后,都会留下缓存和垃圾文件,因此 Ubuntu Tweak 增加这个功能可以帮助用户方便地去清理垃圾文件。
中途夭折的 Fedora 版: Ubuntu Tweak 0.4.3
这个时候,Ubuntu Tweak 已经有了一些知名度,我的野心也有点开始膨胀,因为我不断地改善了 Ubuntu Tweak 的核心功能,使其可以根据环境动态加载模块,理论上可以支持除 Ubuntu 以外的发行版本了,于是在2008年12月,推出它以后,反响不如期望之热烈,于是我就没有继续唯一,而专注在当前的 Ubuntu 平台了。
现在想想,当时它的失败是注定的,如果叫「Tweak for Fedora」,那还有点希望。作为一个用 Fedora 的用户,谁愿意用一个 Ubuntu 开头的软件呢?要我自己也是不愿意的。
先专注做好一个平台
2009 年,开始实习 + 工作后的动作
2009年,我已经开始工作了,基本上就只在业余时间继续更新着这个项目。工作给我很多的收获,让我学习到了如何使用规范的流程去发布软件。于是在这一年,我最大的改变就是开始详细地应用项目管理模式去管理我的每个发布,因为很多时候你无法在工作中去随心所欲地应用一些无论是技术还是其他方面,但是在自己的软件中就可以尽管去尝试。
从0.4.4版本开始,我开始不再像以前一样想到什么就开发什么,而是计划好要开发的内容,定制发布计划,遵守特性计划、实现和冻结等项目周期。在这2009年这一年,我以几乎每月一个版本的频率,发布了10个版本。好好地打磨了一遍。
在这背后,还有一年显著的变化,那就是我在2008年末,正式用 Git 取代了 SVN,将其作为 Ubuntu Tweak 的源码版本控制软件,并将其转移到了Github上去。对于主要是一个人写代码的项目来说,Git 的多人协作的优势并没有完全体现出现,但是我已经开始通过 Github 接受到一些 patch。
另外,Git 的无痛 branch,让我在这一年0.4版本和0.5版本的并行开发得到了可能。
实施软件工程+应用 Git 技术,进 一步优化软件开发流程。
2010年1月1日 Ubuntu Tweak 0.5
然后到了2010年1月1日,我发布了 Ubuntu Tweak 0.5版本, 这个版本最大的特色是,结合我当时跟另外的朋友一块做的网站,将一些数据给网络化了,而不是像以前一样是写死在代码里的。
我用 Django 做了这个网站,当时这个网站的设计师是 Kevin Chou,而前端也就是实现的则是 Keke,而我就负责前后端的结合,我们这个团队当时分布在全国各地,就通过Git和网络把它做出来了。这是做 Ubuntu Tweak 以来首次真正通过团队协作完成的一个附加作品。
我在这次合作中认识到了,很多产品虽然刚开始都是一个人做出来的,但是想要把它做的更好,团队的力量是少不了的。特别是对于开源软件来说,团队并不是仅仅是参与开发这个项目的人,很多用户,包括翻译者,他们也是团队的一员。
然后这一年,Ubuntu Tweak 收到了更多的荣誉,首先是在 OMG!Ubuntu! 上,它被评为了「最佳系统清理工具」,日本的 Linux 杂志,也相继报道了它。这里要很感谢将其告之我的朋友们。
Ubuntu Tweak 0.5 后的动作:设计新界面
到了这个时候,Ubuntu Tweak 整体上实际上已经比较成熟而且稳定,特别是代码方面,已经有了比较灵活的可扩展机制。这个时候,我把重点转向了用户界面方面,因为随着功能的增多,现在的界面已经不适合越来越多的功能了。
早在2009的11月,我就把我的想法与当时团队的设计师 Kevin 分享了,而他也能非常领会我的意思,于是很快就做出了一版 Ubuntu Tweak 0.6 的草图。但是在后来的2010年,我把重心放在维护和更新0.5版本上,就没有精力去实现这个0.6版本。
但是在2010年,我在继续维护当前版本的同时,也一起与朋友设计未来的版本,并以此为意见。这是当时另外一个朋友 Jeonkwan Chan 设计的草图,我们已经在讨论一些非常细节的东西了。
这个经历非常美好,我们虽然位于不同的地方,但是对于如何设计一个简洁好用的用户界面有着一样的热情。
2011年12月 Ubuntu Tweak 0.6.0终于发布
一直到了去年,我才开始尝试实现这个全新的用户界面,并且在一边实现一边改善。2011年愚人节的时候,我还不知道我能不能完成这个版本,但是索性就发表了一篇「初探下一代Ubuntu Tweak」,提前公布一下,借此激励自己去完成这个版本。
后来因为工作的变动和个人的一些事情,特别是我来到北京以后,软件中断开发了很久很久。我曾一度以为这个版本再也做不出来了。
后来经过自己的努力,在2011年就要结束的时候,我砍掉一些功能,终于将设计中的 Ubuntu Tweak 0.6 发布了出来。从设计稿出现到最终发布,整整花了两年时间,具体地说是,两年的业余时间。
这个版本虽然砍掉了一些如第三方源的功能,但还是很受欢迎的。对自己而言,这是一次从设计的角度把草稿变成现实的过程,而不是之前从程序的角度变成现实。大概从这以后,我慢慢地有着「以设计驱动开发」的思想。本质上,无论是软件构架还是用户界面,都是一个设计的过程。
尝试设计驱动开发
2012年4月 Ubuntu Tweak 0.7.0发布
然后2012年来了,在维护了 Ubuntu Tweak 0.6.0 两个版本之后,我又积累了一些程序和设计方面的需求,于是我制定了0.7版本的开发计划,并且在两个月的集中式开发之后,它又被顺利地实现出来了。
2012年4月25日,也就是两个月前 Ubuntu 12.04 发布的前夜,我同期发布了 Ubuntu Tweak 0.7.0。它比0.6版本更接近于我们之前的设计稿,不仅将之前砍掉的功能全部带回,而且实现了全局模糊搜索、用户界面的进一步打磨。这个版本,我才可以说是,达到了我心目中该有的 Tweak 的样子。#p#
回头看看 Ubuntu ?
而这5年来,Ubuntu本身也有着巨变,Ubuntu 有了自己特色的鲜明的黑色系主题,有了自己的 Unity 桌面,甚至有了自己的软件中心,里面还有卖很多商业软件和商业游戏,这在五年前是不可想像的。
于是我意识到,Ubuntu Tweak 也已经实际上达到我心目中的样子了,而且它也不像以前那么重要了。因为在开发 Ubuntu Tweak 这五年,Ubuntu 本身有了非常大的改进,以前总会折腾输入法、折腾界面,但是现在 Ubuntu 默认安装好,都已经非常好用了。
于是上个月,我宣布了不再为 Ubuntu Tweak 开发新功能,而只进行维护和更新等工作。从2007年7月中旬开始开发,到现在马上就要满五年了。这五年我还做了其他很多事情,但基本都是小小的事情,很多也都半途而废了,只有这件事情坚持了下来。也是这件事情带给我最多的收获。
接下去的五年,Ubuntu 会继续越来越好,而 Ubuntu Tweak 会慢慢地淡出去。但是这五年我学到的东西,仍然继续影响着我之后要做的事情。
花五年时间,认真、专注、持续不断地去做一款软件,慢慢把它做好...
谢谢大家!