2025年已过去 43.23%
《永恒的舞动》第一章    @ 2023-06-11, 00:11

永恒的舞动(Elegance in Timelessness)

作者:nicrosoft(农码生涯),同时在起点连载

第一章

2032年6月10日的早晨,林浩如往常一样坐在他位于上海的小公寓里的工作桌前。身后是透过落地窗洒进的朝阳,照亮了房间的每一个角落。

就职于永恒智能(Aeon Intelligence)公司的林浩,是一个普通且低调的程序员。虽然参与的项目进度已经落后了,但他却无动于衷。今天也如同每个工作日早晨,他并不急于去上班。

林浩出生于北京奥运前一年,父亲林毅是一个软件工程师。受父亲影响,林浩从小对计算机科学产生浓厚兴趣。虽然在编程方面,父亲由于工作太忙,几乎没有对林浩加以指导,但出于自发的兴趣,林浩自学了 Python、Rust 等编程语言并小有所成。同时,偶尔亲戚朋友家的电脑出问题,父亲没空而只能派林浩出马的时候,每每也能很快解决问题。所以,在亲朋好友圈中,林浩一直是一个小天才般的存在。

2022年秋天 ChatGPT 的横空出世,让高一的林浩就此迷上了人工智能技术。大多数的人工智能相关的编程库都是用 Python 语言编写,而林浩最擅长的编程语言正是 Python,于是就此如老鼠掉入米缸般沉迷于人工智能技术的世界中。从最初自己搭建 StableDiffusion WebUI 开始玩 AI 绘画,到钻研它的 Python 源码,注册 ChatGPT 接触大语言模型,再到后来下载一些开源的大语言模型库自己训练做微调,玩得不亦乐乎,甚至到了废寝忘食的地步。为此,还让父亲大出血买了一张 RTX 4090 显卡。

高中学业当然不轻松,玩 AI 难免让林浩的精力顾此失彼。这也导致了在高考时林浩只考上一个普通一本的计算机专业,这在他的高中学校中简直算一个耻辱。

虽然学校一般,但好在专业是林浩喜欢的,专业课基本上都毫无压力。本科四年里,林浩如鱼得水般地继续钻研人工智能技术,并重点专注于自然语言处理(NLP)领域。大三时,完成了一项 NLP 领域的独立研究项目,这项研究使得当时主流的 GPT 技术(也就是林浩在高中时接触到的 ChatGPT 所基于的技术)能够在较小的参数规模条件下也能达到不错的效果,这在一味追求更大参数规模的主流做法中,成为一股清流。指导老师也认为这个发现有重要的学术价值,于是积极帮他把论文提交到了一次重要的行业学术会议,将他的研究结果公之于众。因此,原本一个普通一本的学生论文居然被斯坦福大学的一位教授注意到,他看到林浩的研究的潜力并邀请他到斯坦福大学深造。林浩接受邀请,本科毕业后直接前往斯坦福大学继续他的研究。

去年的今天,林浩从斯坦福硕士毕业,回国并加入了在上海的永恒智能公司(Aeon Intelligence)——一家前沿的人工智能初创公司。

林浩不善言谈,没有什么朋友,对公司的项目的热情也不太高。上班之外的时间,就喜欢独自待在自己的小公寓里。这里是属于他的一方天地,不到十平米的工作间里,摆了一张略显奢侈的大书桌,桌上除了他的宝贝电脑外,堆满了书籍和各种电子设备。透过在那个小小的电脑屏幕,里面是他创造的世界。那个他真正在乎和愿意全身心投入编写代码的,起始于在斯坦福读硕士期间,现在已经成为他生活的一部分的“优雅”——一个完全属于他自己的人工智能程序。

在林浩看来,优雅这个词,意味着优秀且有品位,能够完美处理复杂问题的能力,并在解决问题的过程中展现出流畅而自然的风格。就像优雅的舞者在舞台上无论何时都能保持平衡,无论面临什么困难都能从容应对。他希望这个程序,他的作品,能够像优雅的舞者一样,无论遇到什么问题,都能从容不迫、稳稳地解决。“优雅”的终极,将不仅仅是一个代码实体,而是一种生命存在,具有自我成长和自我理解的能力。林浩想要将复杂的技术和人性美好的一面完美结合,他想要创造一种既高效又和谐的存在。

小说《永恒的舞动》 | 2 个评论 | 3,400 次阅读
简短地址:http://ncblog.net/1986/
新品发布    @ 2023-05-26, 23:07

从自行搭建 Stable Diffusion,在一张十年前的老显卡HD 7950 (3G) 上画出第一张图,到 5月17日自己的 AI 绘画产品 (小程序版) 内测上线,历时 83天。

今天正式对外公开发布

三机器 AI | 3 个评论 | 5,176 次阅读
简短地址:http://ncblog.net/1983/
谈谈 Effie 的原生实现    @ 2022-11-16, 14:31

Effie 是一款跨平台(macOS、Windows、iOS、Android)的集严肃写作、随手笔记、大纲和思维导图于一身的极简写作 App。

写作笔记 App 市面上已经非常多,跨平台也早已属于标配。抛开产品设计和云端同步层面,就客户端实现来说,Effie 与一众的套浏览器(Chromium 或者 WebKit)以 JavaScript 实现的编辑器最大的区别,或者说独步江湖的特性,就是所有平台均以原生技术实现

原生实现的劣势

所有平台都用原生实现,最大的劣势,就是开发成本极高。产品的核心功能,需要在每个平台上单独实现一遍。比如编辑器本身的交互、排版、渲染等功能,需要使用平台提供的特定的 API 或者框架,编写大量的基本上无法在其它平台复用的代码。只有一些算法性的代码可以在不同平台上用不同的开发语言实现一遍,这已经算是最大程度的“复用”和“共享”了。

即便都是 Apple 的 iOS 和 macOS,两套框架(UIKit 和 AppKit)的差异,也远超过最初的预期。UITextViewNSTextView不能说一模一样,可以说毫不相干。如果你认为改造完 UITextView,接着改造 NSTextView 会比较轻松,那你必然大失所望。接着面对 Windows 时,Win32 提供的基础组件 richedit32.dll,基本还是停留在上世纪的水准,在 Windows 平台另起炉灶是更明智也是无奈的选择。再来看 Android 的 EditTextTextView)时,又是一个全新的世界。

如果在大厂,选择这样的技术路径,必然会成立多个平台的开发小组,各自在不同平台开发产品。这样的实现方式,其实也很难保证,同一个产品在不同平台上有非常一致的内在逻辑和使用细节上的一致感受。而现实中,即便是大厂,也大多选择用所谓前端技术(套浏览器的 JavaScript 实现)来降低开发成本。

Effie 是个创业团队,不是大厂。Effie 所有平台的客户端的核心模块,是我一个人完成的,花了两年多时间,近30万行代码,这是一个看似非常“任性”的决策。Effie 在不同平台上,既能和平台本身风格完全融合,又能给跨平台使用的用户,带来使用上的一致感受。

Effie 为什么选择原生实现

其实,最早的 Effie 桌面原型,也是使用前端框架 Electron 来实现编辑器的。但随着原型的日渐丰满,越走越发现使用 JavaScript 实现带来的问题——无论如何优化,那种“不丝滑”的感觉——始终挥之不去。Effie 的产品经理李自然对于这个问题,也越来越无法忍受,即便市面上的同类产品皆如此。

在我加入 Effie 团队后,我在 iOS 平台尝试用 Objective-C/UIKit 实现了编辑器和思维导图的基础功能。李自然试用后,对这种“丝滑”再也欲罢不能。

之后,我用 Objective-C/AppKit 重写了 macOS 的客户端,与 iOS 版一起发布了 Effie 最初的公开版本。

再之后开发 Windows 版,也选择了 Native Win32,而没有考虑 .NET 框架。原本打算使用 Lazarus/Free Pascal 作为开发工具的,但 Lazarus 的 LCL 框架对触摸屏的支持尚不完善,另外,对多显示器的 DPI 处理也有问题,遂放弃。最终还是用我最熟悉的 Delphi,基于一套第三方付费编辑器组件,完成了 Windows 版的编辑器。而用户界面,全部使用 GDI+ 来渲染,并自己实现了所有过场动画(Win32 API 对动画几乎没有任何支持)。有用户反馈在 Windows 版 Effie 的安装包中,也带有 Chromium 库的文件,以为 Effie 也是套了浏览器内核的 JavaScript 实现。Effie 中带的这些 Chromium 库文件,是为了支持苹果登录的,与编辑器以及其它功能的实现没有关系。

最艰难的可能还是要数最后的 Android 版了,相对其它平台,Android 是我个人使用最多的(一直使用 Android 手机),却又相对最陌生的(开发层面)平台。Android 的“碎片化”也带来不少麻烦,不同的版本,不同的 Android 分支,有时简直就是另外一个系统。可能这也是为什么我使用 Android 这么多年,也基本上找不到一个趁手的笔记 App 的原因吧——现在有 Effie 了。

原生实现的优势

原生实现的优势,就是能在不同的平台,最大化的利用平台本身的特性,无论从界面元素的风格、还是交互,都带给用户最“地道”的感受。同时,编译生成的本地二进制代码(除了 Android 的 Java 不算)的执行效率,也给用户使用时带来不可忽略的所谓“丝滑”感受。

另外,对于一些极端情况,比如超大文本的情况,JavaScript 实现依赖浏览器处理,经测试,大部分这类实现的产品,都无法在人类忍受时间范围内处理好。我做过一个测试,在 Windows 版 Effie 中,将整部《三国演义》大纲化,每个段落作为一个列表项,一共2617项,生成思维导图。Effie 整个过程中占用内存不超过50M(作为对比,XMind 占用大约2G左右的内存),滚动思维导图,过程中完全跟手不卡顿,切换风格2秒内完成。

也有人问,为什么不选择跨平台的原生框架,比如 Qt。个人觉得,跨平台框架,为了跨平台,一定需要牺牲很多平台特性,去迁就共性。这样是无法做出 Effie 这样风格的产品的。Qt 这类框架只是让你可以用同一种语言,而语言对我而言,并不是一个多大的困扰。

既然选择了原生

归根结底,JavaScript 的实现受制于浏览器内核是其最大的“缺陷”。就目前的机器性能来说,纯 JavaScript 实现还是很难摆脱这个“缺陷”,即便强大如 Visual Studio Code。开发决策没有绝对的对错,只是不同的团队做出的不同的选择。

今年,Effie 已经实现了全平台覆盖(除了 Andriod 版还没有支持思维导图),也增加了全平台的图片支持,已经是一个成熟可用的,体验绝佳的写作、笔记、思维导图 App。

Effie 既然“任性”地选择了原生,作为 Effie 的开发者,我会尽可能让 Effie 永远保持这份“丝滑”。

Effie | 6 个评论 | 4,156 次阅读
简短地址:http://ncblog.net/1954/
Effie for Android    @ 2022-10-08, 18:24

前所未有的艰难,近两年写的第四个平台的编辑器,终于完成了。

Effie | 1 个评论 | 5,256 次阅读
简短地址:http://ncblog.net/1946/
Effie v2    @ 2022-04-27, 22:47

封控在家已近一个月,开发效率多少受到点影响。不觉已春深,物我两相忘。

Effie v2.0 还是完成了,多平台(iOS/iPadOS/macOS/Windows)原生开发完美支持图片。暂时还不能说“全平台”,因为还差一个 Android,以及 Linux?

Effie | 评论已关闭 | 2,586 次阅读
简短地址:http://ncblog.net/1904/
实地“视察”五角场苹果店    @ 2022-02-23, 21:00

iPad 演示设备上都预装了 Effie 演示版。

Effie | 1 个评论 | 3,041 次阅读
简短地址:http://ncblog.net/1888/
Effie 登陆 Apple Store 零售店    @ 2022-02-22, 21:09
Effie | 评论已关闭 | 2,269 次阅读
简短地址:http://ncblog.net/1885/
Windows 版 Effie 的一个小测试    @ 2021-09-30, 14:14

试着将《三国演义》整部小说大纲化,每个段落作为一个列表项,一共2617项。在 Effie for Windows 中生成思维导图,看看原生程序的性能:

Effie 整个过程中占用内存不超过50M(作为对比,XMind 占用大约2G左右的内存)。滚动过程中 Effie for Windows完全跟手不卡顿,切换风格2秒内完成。

Effie | 1 个评论 | 3,551 次阅读
简短地址:http://ncblog.net/1845/
Effie Win Done    @ 2021-08-26, 19:03

作为软件开发者,最满足最欣慰的莫过于此刻。半年时间,67000+行代码,一切都成为值得。Effie for Windows,来了。

Effie | 2 个评论 | 3,697 次阅读
简短地址:http://ncblog.net/1839/
“消失”的近半年    @ 2021-08-15, 17:05

Effie 的新 Windows 版从3月开始开发,尚是春寒料峭的时节。原计划6月底完成的,没曾想一转眼就快半年过去,暑假接近尾声,完成度95%了。终于快完成了。

虽然时间拖了一些,但就品质来说,我自己相当满意。在各方面的优化,费尽心机。可以算是我近年来客户端开发的新高峰了,即使相比 macOS 版本,只会更好。

比如这个在 Surface Pro 高分屏+毛玻璃的情况下,完全自己实现的动画过程依旧可以非常顺滑。

Effie for Windows,月内见。

Effie | 2 个评论 | 2,965 次阅读
简短地址:http://ncblog.net/1836/