来自 2015 年的 Sympoesie 实验计划
在故纸堆中偶然寻得了早年未竟的实验计划,代号 Story,惊觉其已然属于 Sympoesie 的精神。当时此计划已有一个 demo 公开,以 Django Web APP 的形式部署在 Red Hat 公司的 OpenShift 平台上。然而,自 2015 年以来,本站赛博架构几经变易,OpenShift 的云端服务也多次升级,当时的部署究竟没有保留下来。如今我虽仍存有当时的代码,却也难以在当前的环境下重现了。但想法很重要,故在此记录一下原理,以备日后有空重建。
得益于 Django 的工程模式,实现原理并不复杂。在数据 (model) 方面,如果以 Fragment 为基本单位,将其视为数据库中的一条记录,那么同时也应在记录中保存其上一条 Fragment 的 ID,以此形成连贯性。由此,创作者将有三种方式贡献其 Fragment:
- 创建一个全新的故事,即不存在上一条 Fragment 的 Fragment。1
- 在当前的故事末尾继续编写下一条 Fragment。
- 指定从某一条 Fragment 开始,重新编写其后的故事。既存的 Fragment 并不会被覆盖,而是作为另一种可能的故事线继续存在,同样接受续写的提交。
于是,一个故事连同其所有的可能性,将形成一个多叉的大型树状结构。2
难点其实在于数据的展示 (view)。按顺序将 Fragment 逐一展示并提供分支导航固然是不够的,必须有一套特殊的推荐算法来评估故事树中特定故事线的价值,选择最合适的 Fragment 及其所在的故事线优先展示给读者。同时也要便于读者在不同的可能性之间跳转。由于算法能力的缺失,我当时仅实现了三种推荐方式:最新作品百条、最热作品百条(以点赞数计)以及最具潜力作品(最新作品中点赞达到一定数量的)。虽然简陋,姑且能用。
可以看出,这个 demo 的功能是基本完整的。造成此计划不了了之的重要原因之一,正如许多其他的项目,无非是没人来 syn-。可见 Sympoesie 本身是一个具有极高门槛的活动,人类历史上任何一次实现都可称之为奇迹。