跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

2022 年中动态与总结

今年是懒散的一年,工作外基本没怎么干活…

复习了一阵 C++,试着做了个跨平台项目 - 小鹦鹉 - 然后发现跨平台编译不太方便,现在又尝试移植到 rust,却又发现之前学的相关知识又忘光了…

—— 还是得经常用啊。

VSCode 的使用 #

VS Code 的插件也越来越多了。有了 TypeScript LSP 这类扩展的“赋能”,自动补全内容的质量也能与 JetBrain 家的开发工具有一战之力了。

不过 C++ 方面还是比较弱,目前注意到的几个不方便的地方:

  • g++ 多线程程序断点无法调试
    • 如果建立了子线程并在子线程经过的代码路径下断点,会直接导致进程退出。
  • 依赖第三方插件来显示 memdump
    • 很慢。可能是通过 gdb 进行内存转储到文件然后读取,而非直接读取进程内存。
    • 有时候请求显示转储内容等了一小会后才发现读取失败。
  • 变量 “variables” 或 “watch” 面板无法强制显示十六进制
    • 都是十进制显示,如果是 ASCII 字符还会尝试显示为字符。

Windows 下还能生成 Visual Studio 项目文件来方便调试,Linux 下估计得生成 Code Block 项目进行更方便的调试了吧… 还没尝试过,不清楚调试起来如何。但是需要切换到第三方软件进行某个特定任务的性质让人实在是不能说“体验良好”。

种种原因,让我不禁怀念回 Visual Studio… 可惜没有 Linux 版本。

因为这个项目是一个跨平台桌面端项目,还尝试使用 Docker-OSX 项目与黑苹果进行构建。前者的虚拟机在 Wayland 下无法正常捕捉快捷键而放弃;后者折腾了半天装上了却不能正常编译 vcpkg/wxWidgets 组件,遂放弃。反正我也没有 Mac 关我啥事

对开源与私有项目的思考 #

提起开源,近期看到了这么一个观点:

“我只能这么说国内玩开源肯定吃力时间金钱不讨好,毕竟开源的利益中心在外国。”

我觉得不管在哪开源都是一件吃力不讨好的事情,与国家或地区无关;开源作为兴趣爱好、职业生涯的敲门砖为目的是一个非常好的方向。能基于自我意愿用爱发电、且不求回报的花费时间来贡献代码到开源社区的人… 我觉得不多。

就我个人来说,单纯是为了分享自己制作的小玩具;测试环境、项目用途与测试案例都是自己总结的 —— 我作为一个开发者,能达到我一开始的目的、用得顺手就行了。用户的需求千奇百怪,用爱发电来满足各个需求着实有点行不通。

这时你可能会说:“那我赞助一笔钱,你给我加个功能?”我觉得若是这种“赞助导向”的开源项目存在,那么作为一个理性的开发者就会倾向于优先实现收益更高的项目;若是用户看到功能迟迟不会实现,只会有两种后果 —— 继续使用,但是用得不爽;或非常需要这个功能,但是竞品却有,就换过去了。

即便开发者决定实现这一功能,怎么说也得用上几个小时来开发、测试、验收吧;而赞助一般都是零零散散的零钱赞助,性价比甚至可能比兼职还来得低… 所以如果金钱是第一动力的话,全职开源是不可取的。但是换一个方面来看,你可以学习到很多东西 —— 为了解决一个很奇怪的问题深入了解了某个依赖或核心的实现,为了实现某个功能踩了各种坑,这些知识可不是能轻易学到并积累的。如果在开源社区耕耘更久,甚至可以发展出自己的人脉与证明自己能力的“名片”。

而商业软件就不同了,利字当头。由全职 UI/UX 设计师与程序员、聆听用户反馈(当然也有“成熟”的产品喜欢和用户对着干)的产品经理所组成。客户抱怨这个不好用,那个不习惯,产品经理和程序员就得讨论着如何去优化、改进,而不是去建议客户花费更多时间来学习、适应产品。随着项目的上线时间增加,各个产品都随用户反馈积累了各种只有他们所知的使用场景等数据,让产品更好用,顺便增加了竞品使用的学习难度来捆住用户。

举个例子,Windows 与 Linux 发行版。有些极端的 Linux 发行版还需要你来慢慢阅读并理解他们的各个组件,及其所需的编译参数… 在我看来,Windows 与 Ubuntu 此类的发行版在这一点做得非常好,能够提供一个简单且舒适的开箱即用体验,且允许用户在其基础进行后续的客制化。一个友好的初次印象能让用户瞬间爱上这个系统 —— 虽然可能会在一段时间后各种嫌弃,但此时已经花费了时间来学习,再换就没多大动力了;除非你能让用户有一个足够放弃的理由。

到此总结一番,参与到商业软件开发能带来稳定的短期至长期的显性收入,而为爱发电的开源项目只能带来长期的隐性收入与名气;但如果没有任何项目的开发经验,又不太好参与到商业软件的开发… 以事后诸葛亮的观点来看,当初只是做着玩的小玩具所带来的经历与经验却给我带来了全职工作的敲门砖。

开源项目的体验一定比私有项目差? #

我认为很多开源的(桌面程序)项目不是做不到,而是你需要花费大量的时间积累才能缓慢提升用户体验;而体验又是一个非常主观的感觉,你只能满足部分用户,而用户变少则有可能让社区主导的项目变成“反向优化”,导致用户越来越少的困境… 而这也是我认为目前很多开源项目难以优化用户体验的情况 —— 如果有一款成熟的同类商业软件且价格不是非常昂贵,你会如何选择呢?如果有一款商业软件提供免费版甚至是社区开源版本,你又会选择哪一款呢?

在功能差不多的情况下(即双方没有不得不使用该款产品的前提下),美观、易于上手就成为了我选择产品的一个标准。举个例子,Adobe PhotoShop (PS) 与 GIMP。两者都不需要过多学习就能够进行简单的涂鸦;但是当我需要进行变形、增改文字、应用滤镜等操作时,我会发现 PS 的操作更为简单且直观除非有需要我都不需要调整细致的参数(advanced parameters);而 GIMP 提供了过多的细节控制,使得我想实现效果 A 需要翻查教程来一步一步实现。又例如 Free Mind / Free Plane 与 Xmind —— 后者虽然收费,但是他简洁又好看(这是重点),且操作符合直觉啊!

让界面更简单直观也是 GNOME 4 开始的理念,这也是我最终从 Ubuntu 20.04 → Fedora 36 → Ubuntu 22.04 的理由之一吧;KDE 项目目前也在向“减少初次体验能遇到的 bug”的目标前进。

当然,原生桌面程序放在一旁,基于 Electron 的桌面端项目或前端项目的情况却有些许不同:前端的库非常多,你甚至还能看到 is-even 这种一两行代码的小包。从零开发一个大项目非常困难,但由于社区对“发小包”的偏爱导致新包的发布非常容易且频繁。久而久之,就产生了各类小包所产生的中包,然后多个中包小包组成的大包,形成了我们熟悉的框架。大包考虑并覆盖了各类用户需求,让前端与界面的快速开发变得非常简单上手。当然代价就是各类 Chromium 运行时占领了我们的内存…

我目前已经逐步减少对游戏的依赖,而转向读书、听书、写写自己的小玩具,希望未来有望能在 Linux 桌面端体会到更舒适的 Linux 开箱即用发行版,与更多好用的跨平台软件吧;也希望能出一个项目能够提供通用的运行时或让软件适配一个更为轻量的网页布局(HTML Layout)渲染前端吧。

结语与思考 #

回到正题。今年非常的懒散。今年已经是“疫历三年”了,大部分时间还是呆在家里不出门。感觉最大的问题还是没动力 —— 游戏游戏不想玩,番剧番剧不想追,书籍书籍不想读,只能闲暇之间听听有声书才能混日子。本来是在研究喜马拉雅的手机端加密,结果现在反而沉沦在喜马拉雅的《喜马讲书》系列,目前已经(跳着)听完前一百集了。除了历史与艺术栏目的书籍解读不是很有兴趣,其他的基本都能听进去 - 尤其是成长、心理与经管相关的内容,能让我对自己与金钱方面有着更加深入、正面的认知。由于节目内容混杂了各类我喜欢与不喜欢的内容,睡觉前通常设定为播放两集后停止 —— 一则感兴趣方面的内容与一则能让我听着困的内容 —— 进行助眠。这可比其内置的“白噪音助眠”靠谱多了。

开源项目也让我再次理解了“闷声发大财”的道理 —— 《QQ 音乐》的 QMCv2 解密代码一经放出,腾讯方没几个礼拜就更换了 PC 端内嵌密钥到解密密钥的推导算法,而安卓端则改为不再内嵌密钥;喜马拉雅目前也在 x2m 旧版本的解密方案被放出后更新了新一代算法,二进制文件用上了代码膨胀与平坦化,属实难顶 —— 我只能只会对未混淆的文件进行简单静态分析。

也许是实在无聊,竟然想着写一篇文章来记录自己今年的体验。

这篇年中总结到这里就结束了;希望下半年能捣鼓出什么更加好玩、或沉浸的项目吧。

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区