兄弟们,这事儿说起来就他妈的离谱,但没办法,日子就是这么过的。今天把这个《以女友做赌注》的实践日志彻底扒出来,让你们看看我这段时间到底是怎么折腾过来的。
起因:那他妈的荒唐的赌局
事情的开端,就是那晚饭桌上,我跟几个老狗吹牛逼。聊到现在的软件环境,一个个都他妈的是流氓,随便下个东西,给你捆绑十个全家桶。我说我能搞个真干净、无捆绑的下载,他们不信。特别是老王,直接一拍桌子,说:“你要能搞定一个有点名气的东西,能做到真正的绿色免安装,我就把你媳妇儿请出来吃顿饭。”
我知道这小子就是想占便宜,但当时酒劲上头,热血一冲,我直接喊了句:“行,我他妈就以女友做赌注,搞个更新日志,让你们看着我怎么把这玩意儿做出来,做到没有一个多余的字节!” 这就是这奇葩标题的由来,不是真的要拿人打赌,就是为了给自己上个弦,给自己找点动力。
撸起袖子:从零开始搭建架子
定下了目标,我第二天酒醒了就开始干。我的要求很死板:一个文件,解压即用,删掉即净,连注册表都他妈不碰。
我做的就是把核心功能确定下来。这功能不能太复杂,不然打包和依赖就麻烦了。我抓起手头的工具,决定用最基础的框架,避免引入任何需要额外运行库的玩意儿。这玩意儿就是要轻,要快。我直接打开编辑器,拼命往里塞代码,把基础的UI界面搭了起来。
-
第一步:砍依赖。 我把所有非必要的第三方库全他妈扔了。能自己手写实现的功能,坚决不引用外部的DLL。这导致我写了很多重复且丑陋的代码,但为了“绿色”,忍了。
-
第二步:封装。 怎么做到一个文件?我用了最土的办法,把所有的资源文件,图标,甚至是一些配置信息,全部硬编码或者压缩打包塞进主程序里。运行的时候,程序自己解压到内存里跑,跑完了直接清掉。这样,磁盘上除了那个主程序,什么痕迹都没有。
-
第三步:测试毒瘤。 我把程序刚编译出来的第一个版本,扔到我那台专门用来装垃圾软件的测试机上跑。先是杀毒软件扫描,看看有没有误报;然后是各种监控软件,盯着注册表和系统目录看,确认它没有他妈的偷偷留下任何小尾巴。第一次测试结果,一个配置文件的临时写入被发现了,我气得不行,赶紧回去改逻辑,改成内存读写。
迭代与战斗:更新日志的血泪
第一个版本搞定后,我扔给了那帮逼去测。他们逮着机会就使劲儿黑,说我这个功能太简陋,那个地方卡顿。但他们倒是承认,确实是绿色下载,解压双击,真的没有捆绑任何垃圾。
接着就是漫长的更新日志阶段了。
V1.1 更新: 有人反映启动速度慢。我发现是初始化时内存解压资源耗时太久。我花了两天时间,研究了一个更快的解压算法,不是为了功能多牛逼,而是为了用户打开时那零点几秒的体验。我们做下载就是要干净利落,不能拖泥带水。
V1.2 更新: 遇到一个他妈的玄学BUG,在某些旧系统上,程序一运行就闪退。查了半天,发现是某个编译器优化选项惹的祸。解决这个屁大点事,我熬了三个通宵,差点把键盘砸了。我决定,管他效率不效率,先关掉那个优化再说,稳定压倒一切。
V1.5 更新(重点): 为了确保真正的“无捆绑”,我甚至把自动更新功能都他妈拆掉了。自动更新很容易被滥用,导致偷偷摸摸安装其他东西。所以我现在更新都是用户手动去我的分享站下载新的压缩包。这虽然笨,但绝对绿色。我宁愿麻烦点,也绝对不给系统添堵。
最终成果:赢了那顿饭,但赢了口碑
现在这个小工具已经迭代到V2.0了。虽然功能还是那么简单,但用的人越来越多。他们都知道,我这个东西,下下来就是个压缩包,解压完了双击就能用,不用担心被捆绑,不用担心被后台偷跑流量。
老王那顿饭,他是兑现了。但比起那顿饭,更让我踏实的是,我证明了在现在这个处处是坑的互联网环境里,你他妈的还是能做出点良心东西来的。这个“以女友做赌注”的实践,让我学会了:做软件,最重要的是底线。 哪怕代码写得再烂,只要你对用户够坦诚,他们是能感受到的。
累是累得半死,但看着后台那稳定增长的下载量,知道自己没给系统留下一堆垃圾文件,心里这踏实劲儿,是花钱买不来的。