我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。

2023 年度小结

今年 3 月我和蛋黄一起去了泰国旅行,算是我们两个第一次在国外「自由行」,我们先去拜访了之前一起在番茄土豆工作的朋友们,他们热情地招待了我们,带我们在清迈玩了三天,参观了他们的办公室,还体验了泰式按摩、一起玩狼人杀、爬山。之后我们又去了普吉岛,感受沙滩和大海,在岛上骑摩托车。

在经过几年稳定的工作和疫情封控之后,这是我第一次去体会不一样的生活方式 —— 也许除了在国内一线城市扎根,或者移民发达国家,还可以适当地放弃一些执念,来获得一个更简单的生活。经过这么多年,我也意识到了自己并不是一个喜欢竞争的人,更想要也更适合一个「低竞争」的环境。这时我感觉自己仿佛站在人生的分叉口,要不要考虑去到中国的二线城市或者甚至泰国生活呢?但蛋黄还是很简单地把我劝了回来 —— 毕竟去了加拿大以后还可以后悔回来,但现在躺平的话后悔可就去不了加拿大了。

9 月时我们还去了日本旅行,因为一直以来都在通过各种影视和游戏作品了解日本的生活习惯和文化,所以日本可能是我们最熟悉的国家了,到日本一下飞机果然是这种感觉 —— 真就和我们印象中的日本一模一样。我们在日本去了环球影城的任天堂园区、任天堂商店、藤子·F·不二雄博物馆、秋叶原,哆啦 A 梦和马里奥这些我们所熟知的形象在日本真的是无处不在。日本由新干线、电车和地铁构成的交通网络非常发达,没有安检、换乘方便、区分快慢车,很多商圈也是以一个电车站为中心,但价格确实不便宜,我们在日本总共竟然花了 1200 人民币来乘坐地铁和电车

在日本我们也拜访了一位年初才移居日本的前同事,他们距离东京市中心乘电车大概一个半小时,带我们逛了他们所在的居民区和超时。这里和新宿这样的商业区完全不同,密度比较低,街道非常干净整洁,就像是很多影视作品里的日本小镇。

在经历了 去年的疫情封控 之后,我便下定决心要将我们之前移居加拿大的计划提上日程,并以最高的优先级来执行。在经过了 2022 下半年的调研和准备后,我们决定由蛋黄申请留学签证,我作为配偶申请开放工签的方式移居加拿大。在我们准备签证的过程中,因为公司的一些变化,工作给我带来的压力和不适越来越大,所以在提交了我的签证申请之后,我马上就 离开了 TapTap 和 LeanCloud,准备休息一段时间,然后准备搬家。

在离职之后的这段时间,我开发并发布了 HostedBeans。这是我作为独立开发者的第一个尝试,我希望能利用上之前那么多年的工程经验,设计和开发一些体量较小,但能带来长期价值的产品,也能从中获得收入。

本来我们都已经买了 11 月 11 日的机票,准备带着皮蛋豆腐和所有东西一起搬到加拿大。然而到 9 月时我们发现,我的签证进入到了一个通常耗时半年以上的一个安全审查(Security Screening)的流程中,而蛋黄的开学时间也没法再推迟了。

其实在一开始我们就确定了两个人一定要一起出发,不能分开。但现在我们几乎已经走到了最后一步,安全审查除了等待时间比较长,几乎不可能拒签,难道要在这个时候放弃么?我很清楚这段时长并不确定的异地并不是我想要的,会给我们的关系带来很大的考验。但所有的朋友都觉得不能错过这个机会,理性上当然应该这样做,所以蛋黄在 12 月 25 日一个人出发去了加拿大,在 2023 的年底,我们暂时分开。

HostedBeans: 基于 Beancount 的协作托管服务

我从 2019 年开始使用 Beancount 记账,作为一个开发者,我非常喜欢这样的纯文本工具 —— 纯文本意味着我可以使用我最熟悉的编辑器来编辑它、可以使用脚本进行批处理,还可以使用 Git 来进行版本控制,最大程度地利用我熟悉的工具。

在和蛋黄在一起之后,我们的资金和帐目不可避免地混在了一起,如果不把她产生的帐目一起记录进来,那么记账这个事情就显得没有什么意义了。但 Beancount 对于非开发者来说使用门槛还是太高了,需要在本地配置 Python、Git 等环境,前面提到的那样纯文本的优势对她来说其实是一种负担。所以她之前一直很难参与进来,即使只是查看 Fava 的图表,也需要我先在我的电脑上启动 Fava,然后把地址发给她。

为了让蛋黄至少能够随时查看图表,我调研了几个现有的 Beancount 托管服务,但我觉得它们都缺少了一些关键的能力:

  • Git 访问:纯文本是 Beancount 最大的特点,即使使用托管服务也不应该影响使用 Git 和本地编辑的工作流。
  • 多人协作:可以让多人共同访问一个账本,在 Web UI 对账本的修改也应该反应到 Git 中。

于是我开发了 HostedBeans 这个项目 —— 基于 Beancount 的协作托管服务,同时支持 Git 和 Fava 访问,可以为账本添加协作者并管理他们的权限,在 Web UI 上的改动也会以协作者的名字被自动同步进 Git。

使用 HostedBeans 你可以保持之前的工作流不变,在本地使用你熟悉的编辑器、使用 Git 进行版本控制,但同时解锁了随时随地打开 Fava 的能力,而且可以和你的家人共享这种能力,让他们参与到你的记账中来。

目前 HostedBeans 的功能已经全部可用,我还在继续进行一些细节调整来改善体验。如前面所说,HostedBeans 的目标是 Beancount 和 Fava 的托管服务,我今后我专注在「托管」这个方向上,不会添加「私有」的功能来锁定用户,确保用户可以随时迁移出来。比如 HostedBeans 不会自己实现任何实际的「功能」,而是会接入 Beancount 和 Fava 社区既有的插件,如有必要会直接在上游的开源项目中来开发功能。

欢迎访问 www.hostedbeans.io 注册帐号试用,我们的免费版本可以让你创建一个私有的账本并和其他一名协作者一起记账。如有疑问或者建议欢迎通过邮件、Telegram 或者 Twitter 联系我,联系我还可以免费获赠 Pro 帐号。

本文原载于 HostedBeans 的文档页面

离开 LeanCloud

从我 2015 年 加入 LeanCloud 已经 7 年多了,这是我人生中非常重要的一段时间,第一次独居、和蛋黄恋爱结婚、辗转三个城市、有了自己的积蓄、新冠疫情和封控,都发生在这期间。

我在 LeanCloud 一直在做 云引擎,加入公司两年后我就成为了这个产品的负责人。实际上在之前我就对后端托管很感兴趣,在 LeanCloud 这些年也是 Serverless 飞速发展的一段时间,我深度地参与到了云引擎的每一个方面 —— 无论是产品的设计、项目的管理,还是后端开发和运维这样的技术工作,尽我所能实现了这样一个适合于 LeanCloud 的产品形态,我也很高兴公司能在这个产品上给予我非常大的「自由发挥」的空间。

在这样一个技术主导、时间跨度接近十年的项目中,我得到了一个非常好的舞台去实践我的软件工程知识 —— 在开发功能的同时,我不断地在用我最新学到的知识来进行重构,为一些脆弱的实现寻找彻底的解决方案、降低代码的复杂度,用各种不同的方式来编写测试、文档、提升可观测性。同事们也都认可我在这些方面的努力,与大家的讨论也总是会给我带来新的想法。

江宏将 Google 的「工程师文化」带到了 LeanCloud,构建了一个对内透明、能够进行坦诚沟通的工作环境,并坚持执行了这么多年,实属不易。这样独特的文化也聚集了一群聪明、专业的同事。因为我的上一家公司番茄土豆同样非常独特,所以其实我是很晚才意识到 LeanCloud 的特别之处,意识到能和这样的同事一起工作是多么难得的事情。

在被收购后我在很努力地了解大公司工作的方式,但大公司终究难以兼容之前的团队文化,并有着它自身的「大公司问题」,随着业务重心和管理风格的变化、很多一起工作多年的同事的离开,这份工作逐渐变得不那么特别了。

同时,这么长时间地在一份工作上也让我在业余时间少了很多创作的灵感。因为工作本身就会占用大量精力,加上工作中的开发有着更强、更确定的正向反馈(其中最大的当然是按时间计算的工资),导致相比之下更难在业余项目上集中注意力,有点类似于 Overjustification effect 中所描述的,因为外部激励过强影响到了人内在的兴趣。

所以我觉得是时候离开寻求一些变化了,接下来我会休息一段时间,然后和蛋黄一起去加拿大学习、工作,之后的一段时间对我们来说应该会充满未知与挑战。

12384

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.