陈靖一的博客

我的项目:Why数理

(安卓/苹果应用市场搜索下载)
开源

>5000star

助人

>15000rep

13.5年编程经验,40万行代码
置顶

我的人生目标

常有人感到奇怪,我为什么花三年做这个项目,之后再去读博,二者似乎相反?这源于我的人生目标:

文字版:以数学最优化问题来理解,最大化帮到的人数 x 帮到每个人的程度 x 被帮助的人的品质。

公式版

argmaxs E(pP(s)cptIp(s,t)dt+ϵ(s))\arg\max_s \ \mathop{\mathbb{E}} \left( \sum_{p \in P(s)} c_p \int_t I_p(s, t) dt + \epsilon(s) \right)

变量ss (strategy): 我的行为

变量tt (time): 时间

P(s)P(s) (people): 帮到的人的集合

Ip(s,t)I_p(s,t) (intensity): 在tt时刻帮到pp这个人的程度

cpc_p (character): pp这个人的人品

ϵ\epsilon (residual): 其他杂事

E\mathop{\mathbb{E}}: 取期望值(毕竟人生是不可预知的)

图片

山水(距离:骑行40min)

放松读物

第761天

前阵子XJX(巨强)给我推荐了本有趣的书《The Napkin》,我晚上休息的时候在读,看了拓扑、量子、微分几何、测度论、复变函数。这本书讲解了数学专业各门课的重要定理和推导,虽然比数学系专业课浅得多(毕竟一门课要上一整个学期),但比科普深很多(全部是严谨的定义和定理),刚好满足我对这些课的好奇心。

XJX还给我出了几道拓扑题做了做,很有意思。

书里还有几章量子力学。惊讶地发现,量子的状态居然能用线性代数和特征值来表述;还搞明白了快速分解质因数的Shor算法在理论层面的实现。

放松时还看了点Haskell(FC的思想)、Agda(用计算机验证数学证明)。

图片

蜻蜓(距离:骑行30min)

被骂了一顿

第750天

BOINC是一个自愿贡献空闲计算力,以帮助计算科学问题的平台(比如计算可能的药物、分析望远镜数据等等)。我考虑把BOINC部署到生产集群中,利用集群的空闲时段(比如半夜)帮忙做一些计算。为了在技术上避免影响到整体服务器,我发帖询问集群的安全最高使用率。

然而,很多人看到我提到想部署BOINC到生产集群,都认为绝不应该这样;有的人还骂了我一顿。批评的内容中,有的证据有一定说服力(比如安全性问题的举例),感谢他们的意见,确实不应该轻易部署。但愤怒的、无理由的谩骂就很奇怪了。或许是因为他们不理解,服务器给同学用可以帮到同学、服务器部署BOINC可以(略微)帮到科学家,这二者本质上是一致的。

图片

大雁(距离:骑行30min)

第四个发明专利

第738天

总算也做好了。

图片

芦苇盛开(红)(距离:骑行40min)

传记二则

第702天

阅读了Geoffrey Hinton的生平。整整20年,没有人相信他的想法,但他始终坚信"其他人都错了(everyone else is wrong)",最终改变了整个人工智能领域。

还看了Linus Torvalds的传记(注:Linux系统的创始人,安卓手机、大部分服务器都在用Linux)。这就是真正的技术人,真正的技术改变世界。

图片

沙滩(距离:骑行30min)

毕业

第688天

看起来毕业了。之前把必修水课,换成麻省理工的研究生课、斯坦福的课、卡耐基梅隆的课、数学系专业课等课程的事被通过了。

感谢学校,感谢X校长、Z教授、Q教授、P教授等所有帮助我的人。

图片

叶子中的月亮(距离:骑行30min)

发布开源库✌️

第652天

我用了很多开源项目,受到了很多帮助,因此一直想做个开源库,回馈社区。

之前的代码都不适合开源;这次总算想到一个好方向,就花了点时间把自用代码整理发布了出来。

2022编辑:看到不少人在用,开心。

图片

夜幕下的火焰(为了检修管道,维修人员用工具点火烧掉管中剩余燃气)(拍摄于2021.02)

一点技术栈

第644天

又想用小众语言了…… 对于移动端算法,大部分人会用C++;但Rust实在太美了,现代、安全、高性能。(2022编辑:后来用了Rust,确实很舒心。)

前阵子尝试了GatsbyJS,思路有点新意:直接在编译期生成全静态HTML/CSS/JS产物。

(2022编辑:今年年初把Java重构到了Kotlin,又是大众语言转小众语言,目前为止体验极佳。)

图片

"复行数十步,豁然开朗"(距离:骑行40min)

聊天

第588天

趁着在学校,和朋友们聚了多次。多数是去食堂吃饭和愉快地聊天,但还有一些额外有趣的事:

有一次,数学系的朋友吃饭时提到科学计算代码性能不佳。这种好玩的事我怎么可能错过,于是饭后跑去和他研究Matlab代码。另一次学长提到有个奇怪的怀疑是底层的bug,也是兴冲冲地去调试了一个晚上。

有时,和朋友聊计算机科学中优美深刻的思想,教初学者一些经验和思路……聊得激动了,常常忘了时间。

图片

隧道施工中(距离:骑行50min)

阅读

第580天

图书馆可能是我在校园中感情最深的地点了 —— 这几年在校时,除了睡觉吃饭上课,大部分时候都是在图书馆中度过的。

因为在校,看了些图书馆的书。新图三楼摆满一面墙的"校长藏书"领域广泛,常去阅览。偶尔翻翻叶嘉莹讲古诗的书,也是一种放松。

图片

镜面(距离:骑行20min)

(塞在一起的)发明专利

第480天

总算把三个发明专利提交了!

其实如果按照正常写法,至少是十多个发明专利。但我实在不想分开做那么多个申请书,就塞在一起一股脑儿申请。

感谢PIG的巨大帮助(真的太强了),否则根本不可能做好这些专利申请书。

容我吐槽一句专利局官网:花了整整两天,试了三五台老操作系统的电脑,尝试配置了N次各种"上古时代"的环境,专利局的网站才总算允许上传提交。

图片

三羊开泰(距离:骑行40min)

Redis、C与Rust

第465天

今天Redis出现Core Dump。发现是因为我去年写的树状数组把embstr模式下的Redis sds送进了不支持这个模式的函数中。

如果Redis是用Rust写的,或许就没这个问题了?粗略想象了下,至少sds会被包在一个unsafe块里;甚至还可能用typestate设计模式零开销抽象掉"是否可能是embstr"这个状态,让这次的bug直接成为明显的编译期错误。

图片

水下的植物,"皆若空游无所依"(距离:骑行30min)

"薛定谔"的毕业

第434天

不知道是否会在这个学年毕业。

我用很多门更有挑战性、更有收获的、更美的课(麻省理工的研究生核心课、数学系专业课、……),"替代"掉了意义甚微或太水的课(不过每个学校甚至清北都有这样的课)。

问题在于,这些我没上的课是必修的。

不过,重要的是大学期间学到了什么知识,有没有充分地利用宝贵的上课时间。

图片

牛与白鹭(距离:骑行50min)

第357天

看起来得申请软件著作权。最烦这些文书工作了,但也没啥办法。

图片

救了一只小鸟(2021暑假于学校)

去学校期末考

第354天

课程可线上考试;然而我是学计算机的,清楚地知道有无数办法在线上考试作弊,而且我没法证明我没用这些作弊方式…… 所以专门去了学校一趟参加期末考。

图片

鸟巢(距离:骑行40min)

物理实验失败x2

第350天

前两年上物理实验课时,有一个测万有引力常数实验是选做的,当时做了一个下午,没人做成功(还来了另外两个同学,他们也失败了)。但感觉这个实验很有意思,于是今年专门和教授申请再试一次。最终意料之中又失败了。

做完听说,因为成功率太低,今年甚至根本没开放给学生做。无意中给TA添麻烦了。

图片

石头上的蝴蝶(距离:骑行30min)

欲速则不达

第296天

写了一阵SI模块。这可能是整个App最复杂的模块,包含了不少我的创新。

写之前当然已经很深入地思考分析了,但开发过程仍发现坑和设计不合理的地方。多数公司里被迫赶工的程序员都会选择继续开发并无视它,这在短期内很有好处(快速开发)。然而,代码容易迅速降低质量,成为所谓"焦油坑"(《The Mythical Man-Month》语),让未来维护这段代码的人难以下手;我也很难忍受如此不优雅的代码。因此,最近在循环进行"加一堆功能 - 发现代码'味道'逐渐不对 - 重构"。

开发一两年后就不管的代码,和开发要用20年的代码,是完全不一样的。

图片

"抹茶蛋糕"(距离:骑行40min)

PhD

第281天

在设计一个底层核心模块,我准备叫它"phd"。其一,它是"PHoto-viDeo"的缩写。其二,我做研究肯定要读博,叫它博士(PhD)也挺好的。其三,用App的同学会频繁地用到这个底层模块,或可算作一种隐藏的祝福。

想起一句名言,"There are only two hard things in Computer Science: cache invalidation and naming things",看起来是开玩笑但流传甚广 —— 这么说来,我做了两大难题之一(笑)。

图片

芦苇是我插上去的(芦苇来自旁边几堆不知为何根部烧焦的芦苇丛)(距离:骑行20min)

不得不开始注册公司

第217天

原因很简单:中华人民共和国法律法规规定,所有域名都必须备案(App的后端也包含在内);而除了个人博客以外,都必须以公司名义备案。

图片

(距离:骑行30min)

改源码x2

第161天

这几天开始写移动端App。"开工大吉",一开始就有一件好玩的事:Flutter的TextField只支持文本,而我们要支持各种特别的内容与交互,于是直接修改了Flutter源码。

前阵子花了一天半,改Redis源码加功能。有个模块需要高并发地根据概率随机抽取元素,现有存储层似乎难以高效地抗住。于是修改了Redis源码,为之增加树状数组(Fenwick Tree)。

读Redis源码,犹如读一首精巧的小诗。

图片

(距离:骑行15min)

开源库代码质量

第117天

这两天在处理实时信道模块。这是被反复实现无数遍的无创新模块,没必要重新发明轮子,于是参考了一些开源App的该模块源码。然而,他们的模块设计似乎比较混乱,于是我设计了新的模块逻辑,感觉清晰多了。

没想到这些有名的开源项目,代码质量还有改进空间。

图片

(距离:骑行20min)

第三周

第20天

最近主要是继续整理调整之前的设计,以及和PIG讨论一些设计(PIG巨强)。

趁着放假,和DJK和YG(都巨强)走了一回路。DJK上周刚见过(虽然上上次是好久之前了),YG是好几年没见了——CUHKSZ、Cornell、PKU的假期永远都这么不对齐……

图片

(距离:骑行20min)

放松一下

第6天

刚考完期末考开始放假,除项目之外,放松一下:

3Blue1Brown的数学视频:他对数学的可视化值得称道。

DJK(巨强)推荐的朗道力学:阅读第一节时,就开始体会到他说的和高中物理完全不同的感觉。然而朗道对数学要求颇高,开篇就假设读者熟练掌握变分 —— 得先学好多门数学系专业课才学到变分,而我是计算机系……

还有四元数(正统的解释、3Blue1Brown一种奇妙的理解)、DJK推的抽象代数书、一点点统计推断、一点计算机视觉。

当然,还有音乐和美术。

注:CUHKSZ有暑假学期,所以现在已经放假了。

图片

夕阳(距离:骑行20min)

正式开始我的项目

第0天

理论上这不是"第0天",而至少是"第300天"。因为上个暑假就在忙着设计这个项目与相关的小研究了,最早的创意更是源于很久之前。

图片

观雨(雨自左向右推进)(拍摄于2020.05)

图片

观云(拍摄于2020.06)

图片

水墨画((拍摄于2020.12)