Matrix精选2026年08月09日10 分钟阅读我给 Quote/0 做了一个 F1 看板:把赛程、积分和比赛结果留在桌面上主作者关注Belcheck少数派成员Make funny things.Belcheck关注Belcheck少数派成员Make funny things.联合作者关注Belcheck少数派成员Make funny things.Belcheck关注Belcheck少数派成员Make funny things.Make funny things.10 分钟阅读微信扫码分享以图片分享分享到微博点击下方按钮可复制链接分享收藏举报特别声明本文的项目构思、结构设计及相关素材整理均由人工完成。在产品开发与调试过程中,使用 GPT-5.6 Sol 模型作为辅助工具,参与方案讨论、代码编写与问题排查。文章内容基于实际开发过程中的经验与记录,由 AI 协助生成初稿,并经过人工审核、修改与润色后发布。我写完那篇F1 入坑指南后,身边陆续多了不少开始看比赛的朋友。大家很快就能认清车队和车手,却常常卡在更日常的问题上:下一场比赛几点开始?这个周末有没有冲刺赛?刚结束的比赛前三名是谁?自己关注的车手现在排第几?答案当然都能找到。F1 官网、体育 App 和搜索引擎里有赛历、新闻、视频和完整数据,但每次都要拿起手机、打开应用,再从一大堆内容里找到真正想看的那几行。我缺少的不是另一个功能更完整的 F1 App,而是一个不需要主动打开的地方。于是,我给Quote/0 摘录做了一个 F1 信息看板。它会在桌面上显示下一场比赛、最近赛果、车手积分和车队表现,也能在比赛进行时更新当前前三名。对我来说,它更像一张会自己换版的 F1 赛事卡片。图 1:不用打开手机,下一站赛程、比赛结果和关注对象的状态会直接留在 Quote/0 上。我想把 F1 变成一种「环境信息」Quote/0是少数派共创项目中的一台电子纸信息屏。共创页面把它称为「你的专属信息视窗,于安静中洞悉重要」。这句话恰好概括了我喜欢它的原因:它不试图把另一块手机屏幕搬到桌面上,而是让少量真正重要的信息待在那里,等人偶尔看上一眼。这种形态和 F1 很合拍。F1 的信息并不是每分钟都值得查看。非比赛日,我只想知道下一站还有多久;到了比赛周,想确认每个赛段的本地时间;比赛结束后,再看一眼领奖台和积分变化。这些内容不值得让我一直开着网页,却很适合每隔一段时间更新在电子纸上。Quote/0 的开放能力让这件事成为可能。Dot 的开发者平台可以用 API Key 和设备 ID 指定设备,再通过 Text、Image 或 Canvas 等接口控制内容。其中Canvas API不只是发送一张预先做好的图片,而是把数据和版面结构一并交给设备:标题、数字、列表、边框和层级都可以根据当前数据生成。也就是说,我不需要更换 Quote/0 的固件,只要让 Mac 整理好 F1 数据、生成一张适合电子纸的卡片,再把它推送到设备即可。图 2:F1 数据经过重新取舍后,以一张黑白信息卡片的形式显示在 Quote/0 上。11 块看板,覆盖一个赛季里最常看的信息F1 Quote/0是一款完全运行在本地的原生 macOS 应用。它读取赛历、比赛结果、积分榜和比赛期间的排名,按 Quote/0 的实际屏幕比例生成 Canvas 页面,再推送到指定设备。我最终做了 11 块看板,并把它们分成比赛结果、比赛时间、关注车手和关注车队四组。这个数字听起来不少,但每一块只回答一个很具体的问题。结果:只留下最值得记住的几行「全部比赛结果」显示最近一个赛段的前三名。比赛仍在进行时,它会优先显示实时前三名和当前圈数;比赛结束后,再切换为最终排名。另一块「冲刺赛 / 正赛结果」会过滤练习赛和排位赛,只保留真正产生比赛结果的赛段。这样到了冲刺周末,我既可以知道刚刚结束的是什么,也不会把冲刺赛和正赛混在一起。我刻意没有把二十多名车手全部塞进屏幕。放在桌面上的这块屏,更像赛后报纸的头版:它不负责替代完整数据页,只留下冠军、领奖台和当前进度。图 3:比赛期间显示实时前三名和圈数;赛段结束后,页面会回到最终排名。时间:下一场几点,以及还要等多久F1 每一站都在不同国家和时区举办。对中国车迷来说,正赛可能在晚上,也可能从深夜延续到凌晨。单看日期远远不够,真正有用的是换算后的本地时间。「下一场比赛时间」会显示接下来的两个赛段,包括大奖赛、赛道、赛段类型、日期和本地开赛时间。看到下一项是第一次练习赛,意味着比赛周末已经开始;看到下一项是正赛,就知道该给周日晚上的两个小时留出位置。「下一站倒数日」则更克制:屏幕上只保留距离下一站正赛的天数、大奖赛名称、赛道、开赛时间和赛道轮廓。这是信息最少的一块,也是我最喜欢的一块。应用已经内置完整的 2026 赛历赛道、近年轮换赛道,以及F1DB收录的 78 个历史赛道家族的最新布局。赛道轮廓不需要显示时再从网络下载,即使数据源暂时不稳定,版面本身仍然是完整的。图 4:接下来的两个赛段会换算为 Mac 当前时区,不必再手动计算开赛时间。图 5:下一站倒数日只保留最重要的信息,赛道轮廓由应用内置资源提供。车手:我只想知道关注的人最近怎么样在设置中选择关注车手后,应用会生成三类看板:年度积分、最近全部赛制的成绩,以及最近正赛或冲刺赛的成绩。年度积分把排名和积分放在最醒目的位置;最近赛果则让名次成为画面主角。对我来说,这比在完整积分榜里寻找一个名字更实用。桌面上不需要同时摆下所有车手,我只想知道自己关注的人最近过得怎么样。图 6:选好关注车手后,看板会分别呈现他的年度位置与最近一场表现。车队:积分之外,还有队内竞争车队部分有四块看板:车队年度积分、两位车手的年度排名、两位车手最近全部赛制的成绩,以及两位车手最近正赛或冲刺赛的成绩。其中我最常看的是「车队车手年度排名」。同一支车队的两名车手使用同一代赛车,他们之间的积分变化既能反映车队整体状态,也能呈现队内竞争。有时单看一场比赛很难说明问题,放到一个赛季里,差距会变得直观得多。图 7:车队看板把车队积分与两位车手的表现拆开呈现,也让队内差距一目了然。我没有把一个网页硬塞进墨水屏Quote/0 使用的是一块 152 × 296 的黑白电子纸屏幕。这个尺寸足够显示一张信息卡片,却不适合复刻完整的 F1 数据网站。屏幕越小,「还能再加一点」就越危险。最初设计时,我也尝试过赛车侧视图、更多统计项目、完整车手列表和额外的装饰元素。真正推到实机上之后,这些内容只会挤压字号,让最关键的数据失去存在感。于是我开始做减法:比赛结果只保留前三名;车手赛果让名次占据接近半块屏幕;积分面板把排名和积分做成最大的两个元素;车队面板则用清楚的分区容纳两名车手。赛车侧视图最终被删掉,赛道轮廓只留在真正需要它的倒数日页面。黑白屏幕也没有车队颜色可以依赖,只能用字号、粗细、边框、留白和位置建立层级。这种限制反而很像传统报纸或赛事计时牌:没有复杂效果,但隔着一段距离,也应该能立刻找到最重要的信息。一次推送背后发生了什么这套工具的数据并非来自单一来源。应用主要读取 ESPN 的公开 F1 数据,用于整季赛历、各类赛段结果、积分榜和比赛中的排名;再通过Jolpica F1补充车手与车队的对应关系,通过OpenF1补充 DNF、DNS 和 DSQ 等异常完赛状态;赛道轮廓则来自随应用打包的本地资源。比赛进行期间,应用每 15 秒检查一次 ESPN 排名。进行中的赛段会自动优先于上一场已经完赛的结果;等比赛结束后,页面再切回最终排名。用户不需要手动区分「实时」和「历史」模式。拿到数据后,Mac 会根据当前看板生成 Canvas 的data与windowData:前者保存大奖赛、车手、名次和积分等值,后者描述这些信息在屏幕上的结构。最后,应用通过Dot Canvas API把两部分一起推送到 Quote/0。Canvas 不是一个完整的网页环境,但这反而适合电子纸。它支持面向静态卡片的文字、图片、列表、条件和样式,又限制了脚本与复杂网页能力,最终得到的是一张结构明确、能根据数据更新的设备页面,而不是一张 Mac 提前渲染好的截图。为什么还要做一个 Mac 应用理论上,这些逻辑也可以放在服务器或树莓派上运行。但对大多数人来说,为了一块 F1 看板去配置服务器、部署定时任务、管理环境变量,已经比追比赛本身更麻烦。所以我把它做成了一款原生 macOS 应用。应用左侧列出所有可用看板,中间直接预览 Quote/0 上的实际排版,右侧负责当前页面、设备和关注对象。你可以手动推送一块看板,也可以勾选多个页面组成自动轮播。自动推送的最短间隔为 60 秒,既保证比赛期间的信息能够跟进,也避免让设备过于频繁地刷新。设置里只需要填写 Dot API Key 和 Quote/0 的设备 ID,再选择关注车手、关注车队和轮播间隔。当前版本会把 API Key、设备 ID 和用户设置写入这台 Mac 的应用偏好设置;它们不会进入项目仓库,也不会上传到我的服务器。图 9:在 Mac 上选择看板和关注对象,预览确认后即可手动推送或开启自动轮播。如何使用项目已经在GitHub开源。目前仓库没有提供独立的 Release 安装包,需要在 macOS 14 或更高版本、安装了 Xcode 的 Mac 上从源码构建。下载项目后,在项目目录执行:./scripts/package_app.sh构建完成后,第一次使用需要做五件事:在 Dot App 中创建 API Key,并找到 Quote/0 的设备 ID;具体入口可参考Dot 开发者平台说明。在 Dot App 的 Content Studio 中,把「Canvas API」内容加入 Quote/0 的 Loop;这是接收 Canvas 推送的前提,详见Canvas API 快速开始。打开构建出的Build/F1 Quote 0.app,在设置里填写 API Key 和设备 ID。选择关注车手、关注车队以及自动推送间隔。在左侧勾选需要轮播的看板,打开自动轮播推送。如果你想修改应用本身,可以直接查看F1 Quote/0 的源码与构建说明。如果你对 Quote/0 的外壳、GPIO、显示驱动或自定义固件更感兴趣,则可以继续阅读 MindReset 的Dot 开放硬件仓库。两者解决的是不同问题:前者通过官方 API 推送内容,后者提供设备级硬件与固件资料。它仍然有一些限制首先,它是一款完全运行在 Mac 本地的应用。自动推送依赖应用保持运行,并且 Mac 需要联网。退出应用、关机或进入深度睡眠后,数据就不会继续更新;Quote/0 会保留最后一次成功推送的画面,但服务器不会代替本地应用继续抓取 F1 数据。其次,主要数据来自 ESPN 公开但没有正式文档化的接口。字段和结构未来可能变化,应用的解析逻辑和测试也需要跟着更新。Jolpica F1 与 OpenF1 同样是外部服务,网络状态、访问限制或接口调整都可能影响部分信息。电子纸也不适合像手机屏幕那样连续刷新。当前版本把数据检查与设备推送分开:比赛期间可以更频繁地检查排名,但自动推送最短仍为一分钟。这是一种及时性、稳定性和设备刷新频率之间的折中。最后,这是一个非官方个人项目,与 Formula 1、ESPN、Dot 或 MindReset 不存在隶属或认可关系。赛事、车队、车手及相关标志的权利归各自权利人所有。让设备真正显示自己关心的东西我一直觉得,Quote/0 这类产品最有意思的地方,不在于厂商预装了多少内容,而在于使用者能不能把自己的兴趣和生活接进去。有人会用它显示日历、天气和待办事项;有人会放服务器状态、家庭自动化信息或一条值得反复看的摘录。除了面向内容推送的开发者平台,MindReset 也公开了 Quote/0 的外壳、GPIO、显示驱动和固件上手资料。它给不同经验的人留下了几条路径:可以只调用 API,也可以继续向硬件和固件深入。而我最关心的东西恰好是 F1。所以现在,即使没有打开手机,我也能从桌面上知道下一场比赛还有多少天、这个周