15.5研发心得

经典15.5

迟到的经典

2017年11月29日,农历十月十二,经过一番挣扎,deepin 15.5的ISO终于安静地躺在了内网服务器上,静待着属于它的时刻的到来。

是的,deepin在重新定义了十月一日为农历十月初一以后,甚至连“保证月底发布”的底线也没有守住,妥妥地把发布时间拖到了十一月(阳历)中旬。即便如此,我也觉得这次“迟到”是值得的,在“手机不赚钱,交个朋友”的时代,PC操作系统的研发需要特别用心,才能留住那些对我们期待了那么久的用户朋友。我想,在未来可以预见的时间内,所有deepin的用户都会记住这个特殊的版本号:15.5。这个能让我们在视觉体验上有质的飞跃,在应用包格式上走在世界前面,自带修复工具箱——live修复系统,并且在稳定性和易用性上大幅提升的版本。

deepin15.5注定成为经典。

故事

按照传统,一年中各大版本的主要功能都是预先定义好的,搭配一点重要的bug修复和用户体验改进,基本上就妥妥的了。但是15.5是个奇葩。在七八月份定义15.5详细需求的时候,我们梳理github上的issue,发现一条一岁半“高龄”的主题,大意是“跪求高分屏支持”;同样早在16年初,公司成立了一个神秘的组织叫“Alpha Team”,这个小组的第一个任务就是“独立包格式”;在记忆都稍微有点模糊的14年,就有用户想要在deepin下创建热点……这几个严重拖延的任务让人汗颜,所以我们当时就任性地决定15.5主要来解决这些问题。虽说是决定,但是并没有人特别自信,“毕竟是拖了这么长时间都没有解决的问题”,再加上高分屏涉及面太广,深度全家桶都要“挨刀子”;独立包格式本身社区也不统一;WiFi热点挑硬件,Linux下的网卡驱动又不都是那么好……越想越恐怖。

“要不再加点其他任务?”,我提议。 众人惊恐状。 “这样万一前面几个任务完成不了,做点其他任务应付一下老王嘛”。

逆向思维有时候还是挺管用的。

就这样,像是一锅羊肉火锅一样,15.5的配菜变成了主菜,也就是前面提到的三个点;又加入了新的配菜,VPN导入导出、应用代理、触摸板手势、色温调节、bug修复和其他一大波新应用等。

当所有人都以为15.5就这样的时候,一个不识趣的朋友跟老王说我们系统的恢复模式进不了root,所以系统一旦出了问题就只能靠重装大法解决。我闻风一边心想绝对不可能,一边赶紧试了下,结果是果然不好用。 还没等我返回神儿来,老王已经在Tower上建好了“live系统支持”的任务。

高分屏

高分屏

高分屏支持的话题由来已久,大概是在我刚进入deepin(14年)的时候就有人在“布局”:图片资源一定要用svg、尺寸不能写死等等,然而坚持了一段时间以后,大家发现这种坚持似乎毫无意义,因为没有人用高分屏,自然发现不了高分屏那种细腻到看不到“痘痘”的美,于是乎慢慢地各种png、死尺寸就满天飞了。

俗话说“出来混总要还的”,因为以前的任性,在适配高分屏的过程中,deepin团队可谓吃尽了苦头。不仅几乎所有程序中用到的图片资源都要重新绘制(还好图标主题一直坚持svg),还差点在x2.png的道路上栽了个跟头,还好悬崖勒马,及时止损。

普通应用适配高分屏在如今的环境下,Qt和GTK等界面库的高分屏支持已经比较成熟,还算是比较简单的。但是桌面环境和一些特殊应用,如启动器、截图、录屏等,就需要些功夫了,在适配的时候还要考虑缩放前后的窗口大小、窗口位置等等,恰巧这些地方Qt的处理又比较坑,有时候实在受不了了,只能patch Qt来处理。

看图的适配也比较麻烦,很多地方都用到了缩略图。缩略图也要支持高分屏!听起来有点好笑,但事实是不仅是缩略图,很多情况下一条线、一个圆角的瑕疵,在高分屏下都可能被放大,变得非常恼人。

15.5的细腻就是在这种情况下“磨”出来的。

Flatpak

Flatpak

Flatpak其实原名叫“xdg-app”,可能后来觉得不够高端大气,配不上“The future of application distribution”的名头,遂改名Flatpak。

按照官网的说法:

Flatpak is the next-generation technology for building and installing desktop applications. It has the power to revolutionize the Linux desktop ecosystem.

Flatpak将会改变Linux世界的生态。

不谋而合,同样这样想的还有snap技术。

snap是Ubuntu为了布局服务器和容器市场推出的一套解决方案,与Flatpak类似,它也是利用Linux内核提供的沙盒机制和方案,再加上一套包分发、安装、更新和卸载的辅助系统,来实现应用与系统隔离的想法,以解决目前Linux世界包分发过程中经常让人头疼不已的依赖问题和系统安全问题。

在两者之中,deepin毅然选择了Flatpak,为什么?因为从Mir vs Walyland的例子中,我们发现一个非常真实地存在于开源世界的“潜规则”:“政治不正确”的项目,在开源世界中一般是无法长久的,其中所谓的“政治不正确”其实就是“g家族”已经有同样的项目存在,又有人造了“轮子”。所以,与其寄希望于一个可能不能长久的项目,还是在Flatpak上孤注一掷来得靠谱一点。

想法虽然显得投机了点,但是像往常一样,deepin团队做起实事来一点也不含糊。深度全家桶中的成员,非系统级的应用,全数被打成了Flatpak包。重要的是,这些Flatpak包已经在15.5的ISO中替换了原来的deb包,也就是说deepin 15.5可能是全球第一个预置了Flatpak和自家应用的Flatpak包的发行版了。

“少数人活在未来,人们中的大多数则是静待着未来的降临,这是整个人类文明的演进方式”,最近耳朵里总是充斥着这样的声音。我想deepin团队在推动Flatpak上是走在世界前列的,为身处这样的团队感到骄傲。

live修复系统

live修复系统

对于喜欢折腾系统的用户来说,这次可能最期待的就属live修复系统了,它是个什么东西呢?可以这样简单理解,live修复系统就是一个超级mini版的deepin系统:除了量身裁剪过的DDE外,只预装几款必要的系统工具。最重要的一点是,live修复系统独立于你所安装的deepin系统,完全运行于内存中,这样,你就不会遇到在你修复系统到一半的时候系统弹出警告框,告诉你需要卸载某个磁盘之类的尴尬情况了。

在live修复系统中,预置有深度全家桶的一位新成员“深度备份还原工具”。这个工具具有化腐朽为神奇的超级牛力,它可以助你轻轻松松地把老系统上的数据迁移到你的新硬件上:全新的机器内部,还是熟悉的老伙计——deepin。

live修复系统为了保持简单、简洁,目前除了必要的浏览器、备份还原工具和终端外,并没有预置更多的工具和应用,毕竟要完全跑在内存里嘛。在系统中安装上live修复系统,打开启动器,你甚至感受不到它的存在!因为它的入口确实不在启动器里面,而是在grub菜单。好的功能/用户体验就是这样,需要它的人一定知道它在哪,不需要它的人完全没必要因为每天都能看到它而感到不自然。

在可预计的将来,应该会有更多实用工具登陆live修复系统,让你进入live修复系统,就感觉到自己像是被武装到了牙齿。

其他

家族新成员

每次介绍新功能,都不得不辟一个“其他”的栏目,因为新的变动实在太多,其中有些像网易云音乐新版一样,内部真刀实枪地大改造(用qcef替换原来的webkit),但是用户可能不会有太多直接感知的;还有一些“彩蛋”类的像是本次的“自动色温调节”,有些用户发现这个功能后溢于言表,幸福感可能都超过了使用这个功能本身的;另外的一些工具类,如Wi-Fi热点、VPN导入导出的工具类功能,天生就是理科男的命——绿叶。

在deepin系统的完整度方面,指纹识别算是这次的另外一个亮点了,如果你的电脑配备了指纹识别器,那么升级到15.5,你将从输入密码这项繁琐的工作中解放出来,一切都是那么顺滑。

类似的,启动器图标支持缩放、任务栏插件图标支持隐藏、右键菜单的强制退出等,都是deepin团队为用户做的一点细微的工作,用户满意最重要,这里也就不再细说了。

想法

介绍了这么多功能和技术,完全忘记了这是一个“心得”。还是聊一点比较走心的东西。15.5的研发经历,除了技术和产品方面的成长,更多地其实还是“活明白了”——人生就是这样,每过一段时间最好就有一点“活明白了”的感觉,这就是成长。

  1. 最好的学习方式,是带着任务去学习

有次在某不存在的视频网站闲逛的时候,看到罗辑思维CEO脱不花的一场直播记录,内容是关于如何快速学习和成长的,因为对她的印象不错,所以点进去看了一下,除了视频是盗录的,质量不太好以外,内容还是比较赞同的,她在视频里面大概说了三点:

  1. 强制输出
  2. 任务式学习
  3. 追随式学习

这三点概括起来其实就是“带着任务去学习”,强制输出就是首先要确定目标(任务),任务式学习对应于根据任务去学习相关知识,追随式学习则是完成任务,在任务中进行实践。

这跟15.5有什么关系呢?前面其实提到了针对高分屏、Flatpak和热点等功能,在做15.5之前我们都是不太熟悉的,后来这些都做得差不多的时候,细数下来,我们不仅改了自己的项目适配Flatpak、高分屏等,对Flatpak和Qt的深入和修改已经有很多处。从最早的解决Flatpak应用无法使用输入法,到给QSS增加自动加载Nx资源文件,再到尝试解决“小数倍缩放细线”的问题等等。以前我可能会觉得这是“无知者无畏”,但是通过这次经历,让我深深体会到了这种针对一个特定问题,在跟踪、调试和尝试的过程中,快速攫取和吸收知识的快感。

带着任务去学习,是最好的学习方式。

  1. 不要去解决本不应该存在的问题

一次,有用户在论坛中反馈控制中心中检查更新,界面没完没了转个不停,想停止都停不掉。我当时可能还没完全睡醒,一个任务直接指给了一个设计同事。这个设计同事半天悠悠来了句“指给我干嘛?”,这时候我早就飞奔在另外几十个Tower任务之外了,一时没摸着头脑,或许是因为还没睡醒……我回了句“看看怎么加个取消按钮,解决问题呗”!他又回:“控制中心检查更新最多也就一分钟内,为什么会转不停呢?” 这时候我已经稍微清醒了点,赶紧把任务指派给了“bug竹”。

有时候,解决问题需要知道问题的本质,或者最少是出问题的前一个环节是啥。如果只看表面,那么往往只能解决表面。像上面这个问题,如果不找到根本原因,问题真正爆发以后,可能带来的问题就是难以挽回的局面。

不仅技术方面,生活和工作中,我们总会遇到很多这种“本不应该存在的问题”:吃火锅夹不到丸子,你狂练筷子功,但是你需要可能仅仅是个漏勺;一个人犯了简单的错误,就建各种工作流程、规章制度,但实际上可能你需要的是一个机器人;为了各种重复性的工作量比较大而抱怨,可能你需要将你的工作自动化一部分或者全部?

套用池建强老师的一句话总结: > 从问题中跳出去,去观察它,追本溯源,找到问题的本质,也许会有更好的解决方案。

  1. 让事情变得有趣

生活工作,都不会一直一番风顺,尤其是当生活跟工作绕在一起的时候,可能更多的就是痛苦、无趣和乏味。但是这些本身都是主观感受,我们能不能想办法改变这种情况呢?我喜欢的作家村上春树在《我的职业是小说家》这本书中介绍自己遭受负面消息时说:

每当遭受这种负面事件,我就留心观察相关任务的言行举止。既然苦头是非吃不可了,索性从中淘取些貌似有用的东西——其实就是“不管怎样,总得保住老本”啦。当时难免会心中受伤、情绪低落,但如今想来,这样的经历对我这个小说家来说也算是充满营养的东西。

既然坏事情必然发生,还不如运用自己的聪明才智,让事情变得有趣,化腐朽为神奇,至少也不浪费自己的这点精力。

总结

我一直想聪明人之所以能面面俱到,可能是因为聪明人总是善于利用自己的聪明头脑来解决自己面临的问题,包括前面说的消极处境。还有一个可能是聪明人都善于挑选工具,让自己可以事半功倍。如果你是这种聪明人,又对自己的系统不太满意,deepin 15.5将是一个极好的选择,欢迎尝试。