Skip to content
本页目录

前世与今生

这是一篇简短的编年史,会随着开发进展而不断更新。想知道我下一步会做什么?请参阅《开发计划》。

前世

2008 年初我刚开始认真学摄影的时候,我就希望在茫茫网海之中能拥有一个属于自己的地方来发布照片。那时我接触编程不久,只学了一些 VB 编程语言基础,制作网站方面的知识一片空白。当年的社交媒体还不像现在这样发达,我只好把照片放在当时流行的博客平台上。

2010 年我开始学习网页开发,边学边做出了个人主页 dandyweng.com 的第一个版本。那虽然只是个很简陋的网页,但成功制作并发布一个网站的经历给我很大鼓舞,令我下定决心继续学下去,争取有朝一日做出一个能够发布摄影作品的网站。

2011 年的夏天,我了解到 WordPress 这个开源平台,像我这种不懂服务器和数据库方面知识的人也能用它搭建一个博客型网站。看了几篇教程之后,我也做出了自己的 WordPress 网站,然后我就开始用它后台的在线编辑器来修改代码,用我有限的网页开发知识边学边做,逐步将默认页面改成我想要的样子。在这个过程中,我进一步夯实了这方面的知识。

2011 年底,我终于有了一个自己满意的摄影网站。我给它起了个名字:Camarts——英文单词 camera(相机)和 arts(艺术)的简单结合,然后给它设计了一个类似镜头光圈叶片和字母 C 的图标作为 logo。

2012 年 1 月 1 日,我在 Camarts 上发布了第一张照片,就这么开始了。

移动时代

那时正值移动互联网黄金十年的初期,各大公司都在做网站的移动端适配和开发 iOS 和 Android 平台的 app。我也想让 Camarts 在我的 iPhone 主屏上有一席之地,于是我开始运用“响应式”设计理念来调整网站的设计和代码——这在当时还是个很新颖的概念,如今已是每个网站的基本要求。接下来我把做好了移动端适配的网站包装成了一个 Web App,这样就可以添加到手机的主屏幕上了。它有一个拟物风格的图标,甚至还有启动闪屏画面。这在当时已经让我觉得非常满足了,迫不及待地展示给更多人看——当我去 Apple 专卖店的时候,会把它添加到我能摸到的每台展示机上。[1]

不过这个满足感并没有持续多久,我开始沉迷于把网站做得尽可能像个 app,调整每一处细节来模仿原生 iOS 系统的样子,但总有一些地方让我觉得做不到位。那段时期出现了许多制作精良的 app 让我非常欣赏,其中有个叫 iDaily 的 app 给我的印象最为深刻。那是一个会每日推荐高质量照片的新闻 app,它的高清图片完美适配了我 iPad 的高分辨率屏幕,基于手势的交互体验也非常丝滑[2]。我渐渐意识到有很多细节是通过网页技术无法实现的[3]。

充分了解网页技术的限制之后,我开始探索原生 app 的开发。但这对于那时的我来说太难了,毕竟我完全不懂开发 iOS app 的编程语言 Objective-C,看它的代码犹如看天书。我甚至考虑过找一家外包公司帮我做个 app,但我找到的一家公司给我做个类似 iDaily 的 app 报价高达四十万元,对于十几岁的我来说就是一个天文数字,我只好暂时放弃这个想法,等待其他机会。

其实我并不用等很久,2014 年 6 月 2 日,Apple 在全球开发者大会(WWDC)上发布了 Swift 编程语言,学习起来容易得多。我从那一天起就开始边学 Swift 语言边尝试实现我的 app 想法。一年多之后的 2015 年 9 月 25 日,我在 App Store 上发布了 Camarts 原生 app 的第一个版本。这个被我从各种教程和开源项目的代码里东拼西凑出来的 app 功能非常简单,它从 WordPress 网站获取数据来显示目录,然后用内嵌的一个简化版网页展示照片。虽然这个 app 功能极其简单、卡顿和不稳定,但从零开始学习、设计、编写和发布一个 app 的过程让我学到了很多,让我充满了信心。

多有信心呢?几个月之后,我组建了一个三人团队开始实现我的另一个 app 创意,最终诞生了一个设计独特、功能完善的社交应用 Vary。这次经历给了我对于产品设计和开发的更深层次的见解,让我渴望去做更多、更好的产品。

告别 WordPress

虽然之后我参与了不少互联网产品的设计和开发工作,但 Camarts 在我心中一直有着独特的地位——它是我的一种自我表达,应该始终体现我的最佳水平。

当我开始设想 Camarts 的未来时,我意识到这个基于 WordPress 的实现方案并非长久之计,尤其是初期的设计和开发阶段累积了不少历史遗留问题;并且 WordPress 毕竟只是一个用于搭建博客的平台,信息结构存在局限,也不便进行更深层次的改动。因此,在现有的平台上进一步开发 Camarts 会有许多限制,难以为继。

我决定从零开始,重做一切。

今生

2017 年 8 月,我开始设计全新的 Camarts。我列出了一些关键考虑因素,目标是打造一个现代化的高质量互联网产品。

放眼未来 — 我想打造一个扎实又灵活的平台,以后能够在这个基础上持续打造和试验新东西。这个平台需要为未来设计,但从我做其他产品的经验来看,我知道事物总在变化,所以眼下很难去预测长远的需求。我能做的是前瞻性思维,对新的产品概念、设计语言和软件框架保持开放的心态,即使它们在当时看起来似乎过于新颖、甚至不切实际。我不断提醒自己不要让思维局限于眼下被普遍接受的事物。保持创新,放眼未来。

小而精 — 要做到与时俱进,我应该把这个项目当成一个在不断成长和进化的生命体——它需要能够持续迭代并且容易重构,因此需要始终保持小而精。核心基础部分应该简单扎实,附加功能只在我认定确实有必要时才去实现。

掌控源码 — 为了能够把这个项目完全按照我的意图来打造,我需要掌控应用逻辑层面的所有源代码——这意味着避免使用“开箱即用”的内容管理平台或者软件服务(SaaS)方案,并且尽量减少第三方程序的使用,尤其是闭源项目[4]。

跨平台 — 新的 Camarts 不应该局限于任何一个系统平台。当然,它会有 Web 和 iOS app,但在设计和技术角度上要避免与任何平台过于耦合。用户界面应该在不同平台上保持一致的体验,同时充分适配不同设备的特点。即使后端程序也应该能轻松地适配不同环境——既能在服务器上运行,也能在我的电脑上运行,甚至在树莓派之类的微型电脑上也要能跑起来。

国际化 — 我曾以为国际化和本地化之类无非是一个互联网产品在最终完善阶段的优化项目,直到实践过之后我才了解到在产品设计和开发的后期再去做这些有多么麻烦。为避免重蹈覆辙,这次我要把国际化深入新版 Camarts 的基因里——从最开始设计用户界面和数据库结构的时候就要将其纳入考虑范围。

信息丰富 — 浏览 Camarts 除了视觉享受之外,我还想让它成为一个学习摄影和发现旅行目的地的好地方。每张照片都应该提供详尽的元数据,包括拍摄参数、使用的器材、拍摄和后期处理的思路以及拍摄地点的全方位地理位置数据。

稳定高速 — 作为我的个人项目,Camarts 平时的访问量并不大,没必要购置高性能服务器。但只要某些有很多粉丝的人在社交媒体上宣传一下,访问量就会在短时间内成千上万倍地增长,瞬间挤垮我的小服务器。我需要让新的 Camarts 可以优雅地处理这种情况,同时确保在全球任意城市都能够快速访问。

尽少运维 — 新 Camarts 应该容易维护——我经常在旅行,我可不想遇到什么突发情况需要在急急忙忙的旅途中找一个网络很差的地方处理问题。内容管理和发布应该建立自动化的工作流,尽可能地减少人工操作。

挑战自我 — 打造新的 Camarts 是学新东西的最佳时机。我决定挑战自己,在开发时使用全新的工具、技术、框架和范式,而不是使用我已经熟悉和了解的那些——虽然,这会让开发周期延长不少,但我很享受在做我喜欢的事情的同时学习的过程。

开始打造

经过两个月的调研和设计,在 2017 年 10 月 1 日,我在杭州的一个酒店房间里写下了新 Camarts 的第一行代码。一年后,我做好了它的基础架构、一些管理工具和一个简单的网站。

这次我决定彻底重新开始,没有把旧网站上的照片直接迁移过来,而是找回所有的原图,用今天的眼光和工作流来重新挑选照片和后期处理,然后慢慢放到新网站上。2019 年 1 月 1 日,我在新 Camarts 上发布了第一张照片。从那天起,我坚持每天更新照片至今。

同月底,新版网站上线。当时它的界面和功能非常简单,也只有寥寥数十张照片,所以我依然维护着之前的网站作为过渡,直到 2021 年的夏天,我才把已经十年历史的旧版网站彻底下线。

在继续开发和完善新版网站十个月之后,我开始设计新的 iOS app,并在 2019 年 11 月 16 日写下了第一行代码。然而,接下来的时间里我的主要时间和精力都不得不投入到其他项目上,Camarts 的开发只有用业余时间兼顾,导致开发周期比预想得要长的多,直到 2023 年 1 月 28 日才在 App Store 上架首个版本。

几周之后,我开始打造 Android app,借助基于 GPT 的 AI 工具和开源框架,挑战在对安卓开发了解程度几乎为零的情况下进行开发。没想到竟然真的做了一个 app,虽然比较简单,但体验比起通过浏览器使用网页版还是更好些。3 月 28 日,安卓版在 Google Play 商店上架。

接下来是 macOS app,由于可直接复用现有 app 的许多代码,开发工作相对简单,不久后的 4 月 28 日便在 Mac App Store 上架了首个版本。

紧接着在 5 月 8 日上架了 Apple TV 版本。虽然 tvOS 算是苹果生态里最小众的平台,但我依然花了不少心思尽可能打造最佳的体验,专门设计了适合电视遥控器交互的极简界面和定时轮播的屏保幻灯片功能。

四天后,watchOS app 上架。虽然我知道在 Apple Watch 的小屏幕上看照片是一件挺荒唐的事情,可是总忍不住想试试智能手表交互界面设计,所以还是把它做出来了。

最后是苹果在 2023 年六月发布的新平台 visionOS。为全新的空间交互方式设计界面非常有趣也很有挑战性。从八月份开始,我有幸参与新加坡的苹果开发者实验室,用 Vision Pro 真机来调试 app。[5] Camarts 是在设备首发当日就已经上架 App Store 的首批六百个原生应用之一。

至此 Camarts 在 Apple 每个平台、Android 和 Web 端都有了 app,第一阶段的开发接近完成。是时候开启下一个篇章了。


未完待续,最后更新于 2024 年 2 月 3 日。


  1. 真怀念还能这么操作的时候。我依稀记得 iOS 6 好像有个 bug,让我可以把网页添加到展示机的主屏幕,而且添加之后无法删除。所以当我几个星期之后再回到店里,我的网页还在展示机上。

  2. iDaily 上还有一个让我很喜欢的功能就是会显示照片的拍摄地点与我的距离,这个功能我也在新版 Camarts 上实现了。

  3. 当时还是 HTML 5 和 CSS 3 的初期,和现在的前端框架和现代浏览器不可同日而语。

  4. 我不想让某个公司推出频繁的更新带来一大堆我永远用不到的东西,还有可能会影响到某些正常的功能,甚至直接下线某个我所依赖的服务。不过这只是一个基本原则,我在特定情况下还是会使用一些的第三方服务或程序的,详见《编程》一章。

  5. 据苹果相关人士透露,当时全世界仅有几百人可以接触到这个尚未发售的设备真机,少于前一年登顶珠峰的人数。实验在苹果的一个秘密办公室里进行,每次进入前除了要签署保密协议外,还要给所有个人设备的镜头都贴上保密封条。这真的是一段非常有趣的难忘体验。

粤 ICP 备 19007067 号
本站内容由 Dandy Weng 编写,使用 VitePress 搭建