那是 2015 年的夏天,团队从武汉鸟不拉屎的最南边搬到新装修的 1200 平的大办公室,我花了老鼻子力气按照 Google 风格从零打造的梦幻研发基地,星际之门风格的吊顶定做灯,桌子是按照 120º丰巢形状定做的,一个 10 平方米只能坐三个人的桌子,放两块屏超爽,前台做成 Google 爱尔兰办公司的风格,木制的栅栏从底一直到顶做的 90º弧线,直接做了 10 米宽,特别未来科技风。如果你在武汉你会认为我们是一家市值千亿的公司,那是我目前装修最好的一处办公场所,懒猫微服都没舍得这么装。
正当我准备在这个梦幻场所大展拳脚的时候,我发现创业公司不适合这种场合,创业者遇到宽松环境会有序的紧张,而不是创业者遇到梦幻的环境只会贪图享乐,原来一天可以搞完的事情拖到一两周。
那时候我在正在面临一个小团队转型到管理 150 人团队的阶段,因为办公室豪华了,反而效率低了。
我是一个做事讲究极速的完美主义者,当时团队确实拉胯的时候,我就想自己写代码,我是那时候公司的轮子王,一个团队对外发布的应用基本上一半是我一个人做的。
我当时就想做一个牛逼的终端,从一半程序员看,终端有啥做的,不就是黑乎乎的界面吗?
我那时候构想的完美终端,现在依然是,要符合几个特点:
-
全屏都是半透明的,主要是帅
-
标题栏要像 chrome 那样自带标签栏,而不是标题栏和标签栏占两行,这不是功能问题,这是审美品味的问题
-
分屏间隙要细,整体上视觉看起来是科幻感觉,不要放不必要的控件
-
速度要最快,我要求 50ms 启动完
-
要支持多主题更换和下拉雷神模式
当时我大概花了一晚上就实现了原型,后面仔细打磨了两个月才达到截图的效果,期间有几个细节可以分享:
第一 vte spawn 的参数和我想的不一样,不是 shell path 传进去就可以了,要实现 shell args 参数的解析,这样一些 shell 脚本执行的时候才能自动调用终端界面
第二 自定义标题栏的拖拽,要用 xcb 的协议来实现,不能用 client 端的事件去处理拖拽事件,1 有延迟,2 无法响应窗口贴边分屏的事件
第三 背景模糊要用窗口管理器做混合,这样才能实现背景模糊而字体清晰的效果,而不是背景透明后字体也透明了,这要感谢曹哥窗管的 API,后面换 Kwin 真的是外行指导内行,不说外行了
这些技术原理搞定后,其实不是最自豪的,而是当时我们要做硬汉风格的设计,所以圆角不能太大,太娘。窗口也不能是直角,太 low。我们为了实现矩形小圆角,我用了三层图来堆叠模拟窗口边角的效果,为了 100% 完美,那时候是逆向 ps 的效果,ps 做出效果,逆向分成三层 8x8 像素的色块来拼接的。
我记得那时候我睡在公司,公司设计总监 7 点就来了,我端着小板凳找他,一像素一像素得对,清晨的世界是安静的,早晨的晨光金灿灿地从窗外斜射过来,微微带点红色光晕,最后散在显示器上。两个傻逼,不管外界发生什么,就在那里反复一像素的细节,为了还原边缘柔和,线条硬汉和颜色锐利的类直角圆角,我把眼睛怼到屏幕前 5cm 的位置盯着看:还差 10% 的透明度,这里太黑了,柔和一点,那里太灰了有点模糊…….
终于在我管理团队的空隙,我做出来 deepin terminal,这才是程序员审美的东西,帅,简约,硬朗科幻
后面发布以后,很多人说,你为啥要搞个黑色背景和绿色字的默认主题,搞得像黑客帝国一样的,为啥主题不像 Gnome Terminal 一样?
我那时候年少轻狂,直接开怼,我就是給顶级黑客用的,所以默认配色就是黑壳帝国配色,爱用不用,不用滚蛋,喜欢 Gnome Terminal,用 Gnome 去,别在这恶心我……
不像我现在,我遇到 SB,基本上要忍一下,默默拉黑
今天想给大家分享的是,做产品最重要的两点,独特的品味 + 细节的热爱
这才是你做出杰作的唯一需要的东西,根本不是技术,也不是你有多聪明,而是你真正热爱你的作品,天天打磨他,这里磨磨,那里补补。
懒猫微服离我完美的效果还差很远,但是我有信心,一定有一天它会完美的,因为懒猫微服是我的 baby。
给你们爆料一下,懒猫微服的内网穿透非常牛逼,但是不是 100%,极端网络环境下有 5% 的概率无法穿透,这时我们会用加密中继顶上,虽然中继底层是端到端加密,谁也嗅探不了,我们也不行,但是很多大佬还是追求绝对安全。
我们已经在开发自定义中继的应用,开发完以后,遇到极端环境,开发者用户只用设置一下自己 VPS 的 IP 地址就可以实现所有流量走自己的 VPS,这样做的好处是 1000% 绝对去中心化,绝对安全,可以自己给 VPS 加带宽实现网络加速。
还有最重要的一点是,这符合我们给大家承诺的理念 – 黑客之道
懒猫系统很安全,打洞直连,客户端 MFA 登录验证,VPN 端到端加密,硬件可信根,三层超稳定操作系统设计,一键全机备份还原,btrfs 文件系统时光机快照,马上自定义中继出来后,就离我们构建 100% 去中心化服务器又进一步了。