快讯速递

微诗:从诗入画、且唱且行,这款免费 app 把诗装进手机

微诗:从诗入画、且唱且行,这款免费 app 把诗装进手机

Matrix 首页推荐Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。文章代表作者个人观点,少数派仅对标题和排版略作修改。按 CodexBar 的统计估算,这一次重做微诗,我烧掉了近 2 万美元的 to…


Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


按 CodexBar 的统计估算,这一次重做微诗,我烧掉了近 2 万美元的 token。这还没算上 Suno 生成音乐、TTS 合成朗读、OSS 存储和服务器的费用。

没有融资、没有收费,也没有什么商业计划。花这些钱,只是为了把一个自己喜欢了很多年的东西做成自己心里的样子。

故事要从十年前说起。

2015 年 1 月,我做了一个小 App,叫「微诗」,上线时在 V2EX 发帖和大家分享过。那时候它支持 iOS 8,内置了全唐诗和全宋词的数据库,可以离线搜索。功能谈不上多,界面也朴素,但那是我第一次把自己的爱好,做成一件可以拿出来和别人分享的东西。

十年过去了。这中间它被搁置了很多年,我也几乎以为它会就这样留在旧硬盘里。今年我从零开始把它重写了一遍,用的是 SwiftUI 和 WidgetKit,身边多了几个 AI 编程助手。

这篇文章想和大家聊聊微诗的过去和现在。

把一本诗集装进手机

毕业以后,我去了北京一家大型互联网公司做移动端开发。工作几年手上攒了些经验,心里也慢慢冒出一个念头:我一直喜欢古诗词,能不能把这个爱好,做成一个有用的小工具,分享给同样喜欢它的人?

于是有了第一版,它把全唐诗、全宋词装进手机里,不联网也能搜。在那个流量还很金贵的年代,想读的时候随手就能翻开算得上是个亮点。上线以后,我陆续收到不少用户的反馈,印象最深的有两类:一类希望加上注释和赏析,读到生僻的典故时能有个依靠;另一类希望加上拼音,因为很多字认得出形,却不敢确定读音。

后来微诗慢慢有了更多用户,最多的时候有近 10 万人在用它。这对一个业余做的小 App 来说已经远远超出了我的预期。所以在工作之余我依然保持断断续续地更新,前后做了 6 个大版本。这些用户的建议我也一直记着。

可一个人在业余时间里能做的总是有限,很多想法在待办清单里一放就是很多年。

2016 年底,我离开公司出去创业。创业公司里能分给一个业余项目的时间和精力少之又少,我的工作重心也从客户端开发,转向了服务端和公司的技术管理。到 2017 年前后,微诗最终停了下来,就此被搁置。

之后的几年创业失败,我回到了大公司,也经历了一次职业上的转型。生活推着人往前走,那本装在手机里的诗集,离我越来越远。可我心里一直没有真正放下它。

那些曾经用过它的人,那些没来得及做完的想法,时不时还会冒出来提醒我:这件事,还没有做完。

推倒重来

让我重新拾起这个爱好的,是今年 AI 能力的大幅提升。离开客户端开发这么多年,如果要我一个人、只靠业余时间,把一款 App 从头做到自己满意的程度,过去我是不敢想的。

而今年,和 AI agent 一起工作,这件事第一次变得可行了。

十年间,iOS 和 Swift 本身都已经变了太多,与其在旧代码上修修补补,不如重新开始。我最后的决定是从零开始,一行旧代码都不留。技术栈也很快就定了下来:界面全部用 SwiftUI,小组件用 WidgetKit。小组件本来就只能用 SwiftUI 写,主 App 和小组件共用一套视图和数据层。对一个人维护的项目来说,这样的组合是最省心的选择。

新的微诗,我给定下了三个词:美观、简洁、诗意。我希望它是「装在手机里的一本诗集」,是一本你愿意偶尔翻开、翻开之后不会被打扰的书,在微诗里,诗不只是用来默读的——它可以被朗读,可以被吟唱,也可以化作一幅画。

新版微诗

打开微诗,首页是当天的一首诗。这首诗的选择会跟着二十四节气走。

我很喜欢这种安排。节气本身就是古人写给时间的诗,立春、清明、白露、霜降……用诗来标记日子,比一个冷冰冰的日期更像生活本来的样子。

放在锁屏上的「诗笺」小组件是我自己用得最多的功能。每天拿起手机看时间的那一下,顺便看到一两句诗,不需要打开 App、不需要做任何事,它就在那里。

锁屏小组件的空间非常小,而且系统会以单色方式渲染,能用的只有字形、字号和留白。在这么小的一方地方里,让一两句诗读起来仍然舒服,是我反复琢磨过的事。

新版微诗里还有一组动态壁纸:山水是一笔一笔画出来的。我想要的效果是像看一个人在纸上作画,而不是看一段特效,速度太快就没了意境,太慢又让人失去耐心,分寸全在一点点调出来的节奏里。

古人的诗,很多本来也是用来吟、用来唱的。只用眼睛读,总觉得少了点什么。所以这一版的微诗中,诗不只可以默读,你可以听它被朗读出来(TTS),也可以听它被唱出来——这些曲子是我用 Suno 一首一首做出来的。

第一次听到一首熟悉的诗被唱成歌的时候我发现,字还是那些字,却好像换了一种方式走进了心里。

诗中有画是老话,但这一次我想让诗真的「入画」。每一首诗都可以化作一幅画,让那些读过很多遍的句子,有一个可以看见的样子。

至于当年用户最常提的注释和拼音,这一次都做进去了,每首诗都可以看注释、赏析,也可以显示拼音。做完这个功能的那天我也想起了那些早年的用户,这些功能虽然晚到了十年,但总算没有缺席。

新版微诗界面的每一处,我都尽我自己的审美,做到了力所能及范围内的最好看。它未必合每个人的口味,但每一个字号、每一处留白都是我认真选过的。

最后,微诗依然是免费的。它从十年前开始就是如此,这一次也一样。

和 AI 一起写代码

这次重写是在业余时间里和 AI agent 一起完成的。网上关于 AI 编程的讨论很多,这里也说说我的体会。

  • AI 搭骨架很快。 从零开始建一个 SwiftUI 工程、把数据层、主 App、小组件扩展之间的关系理顺,这些「知道该怎么做、但做起来很繁琐」的活,AI 完成得又快又稳。
  • 补上我不熟的部分。 2016 年底之后,我的工作重心就转向了服务端和技术管理,中间错过了很多 iOS API 的变化。WidgetKit 的时间线(Timeline)怎么规划、锁屏小组件有哪些尺寸和限制,AI 能很快给出一个可以运行的起点,我再在此基础上读文档、改细节。
  • 打磨细节。 很多技术细节,靠我一个人在业余时间里慢慢啃,可能要很久,甚至会半途放弃。AI 在这些地方给了我巨大的帮助,让我可以把力气花在真正在意的地方。

当然,这些帮助都不是免费的,实际流程也不是一帆风顺。回头看真正难的地方和我原先以为的不太一样:让 AI 把一个东西做出来,其实并不难。一个界面、一个功能、一种效果,说清楚了,很快就能看到一个能跑起来的版本——难的是让它合乎审美,难的是决定哪些功能留下、哪些砍掉。说到底,是品味和取舍。

这两件事都没有标准答案,也没法一次说清。一版做出来,看着不对,推翻;再做一版,好了一点,还是不对,再改。一个功能做好了,用上几天,觉得它打扰了读诗,又拿掉。大量的反复和消耗,就藏在这一来一回之间。开头说的近 2 万美元的 token,大多是花在了这里。

品味,还是得自己来。

写到这里,我最想说的是:AI 可以帮你把东西做出来,但做成什么样得自己决定。一首诗在屏幕上该用多大的字、行距留多少、标点要不要显示、页面上该有几个按钮——这些问题 AI 都能给出「合理」的答案,但「合理」和「好看」之间,往往还隔着很多次推翻重来。哪一版才对,只能自己一遍遍看、一遍遍改,直到心里那点别扭消失为止。

还有一类决定是关于「不做什么」的。AI 很乐于帮你加功能,每一个都不难实现。但我给微诗定的是「美观、简洁、诗意」,很多功能我最后都没有加。

我的感受是,AI 让「做出来」这件事变便宜了,于是「做成什么样」反而变得更重要。十年前我卡在实现上,十年后我更多时间是在想「这一页配得上这首诗吗」。

写在最后

十年前,我在大公司做移动端开发,业余写下了微诗的第一行代码;十年后,我依然是在业余时间里,和 AI 一起把它从头重写了一遍。中间隔着一次创业、一次失败、一次转型,和很多年的搁置。

近 2 万美元的 token,换算成任何一种回报,大概都不太划算。但如果要我再选一次,我还是会这么做。人这一辈子,总该为自己喜欢的东西,认真地花一次力气。

微诗现在仍是一个人做的小 App,一定还有很多不够好的地方。如果你愿意试一试,非常希望听到你的反馈和建议。

下载地址:App Store · 微诗(免费)

 

> 关注少数派小红书,感受精彩数字生活 🍃

> 实用、好用的正版软件,少数派为你呈现 🚀

原文出处:少数派 (本文由聚合程序自动采集,版权归原作者所有)