使用状态图的卡西欧 F-91W

Hacker News Top 工具

摘要

一个开源交互式演示,使用 XState 库构建的状态图对经典的卡西欧 F-91W 手表进行建模,并配有并排展示的 Stately 可视化工具,用于教学。该实现采用 ClojureScript 和 Babashka,基于 David Harel 于 1987 年发表的状态图开创性论文;这篇论文以数字腕表为例而广为人知。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/10/16 07:17

dundalek/casio-f91w-fsm

来源:https://github.com/dundalek/casio-f91w-fsm

使用状态图实现 Casio F-91W

在线演示:casio-f91w.pages.dev (https://casio-f91w.pages.dev)

使用状态图构建的 Casio F-91W 手表交互模型。

简介

状态图 (https://statecharts.dev) 是状态机的扩展,由 David Harel 于 1987 年提出。 在这篇论文 (https://web.archive.org/web/20140828085002/http://www.wisdom.weizmann.ac.il/~harel/papers/Statecharts.pdf) 中,Harel 使用了一款数字腕表作为示例模型。

我一直觉得,如果能有一个交互式演示,让人看到状态图的实际运行效果,那就太好了。 遗憾的是,那款腕表(Citizen Quartz Multi-Alarm III)如今已十分罕见。

不过,还有经典的 Casio F-91W (https://en.wikipedia.org/wiki/Casio_F-91W)。尽管它在论文发表仅两年后就已推出,但至今仍广受欢迎,并且仍在生产和销售。 Alexis Philip 创建了一个在线版本 (https://github.com/alexisphilip/Casio-F-91W),将其图形元素数字化。

本演示 (https://casio-f91w.pages.dev) 基于 Alexis 的工作,通过使用 XState (https://xstate.js.org/) 库替换原有逻辑来展示状态图的用法,并使用 Stately 可视化工具并排展示状态和转换,以便学习。你还可以查阅这款手表的官方说明书 (https://web.archive.org/web/20240310073811/https://support.casio.com/storage/en/manual/pdf/EN/009/qw593.pdf)。

Casio F-91W 状态图演示 (https://casio-f91w.pages.dev)

差异与限制

  • 日期和时间的设置方式略有不同,因为它们使用 JavaScript 内置的 Date 对象表示。因此,演示中不提供星期设置。
  • 尚未实现通过按住 A 按钮,在设置闹钟或日期时间时持续递增时间的功能。
  • 可以设置每日闹钟时间,但尚未实现实际触发闹钟的功能。

资源

  • Citizen 手表状态图 (https://github.com/andyjakubowski/statechart-watch) - 对原版 Citizen 手表的类似状态图实现
  • 状态图论文 (https://web.archive.org/web/20140828085002/http://www.wisdom.weizmann.ac.il/~harel/papers/Statecharts.pdf) - David Harel 于 1987 年发表的原始论文
  • Casio F-91W 说明书 (https://web.archive.org/web/20240310073811/https://support.casio.com/storage/en/manual/pdf/EN/009/qw593.pdf) - 这款手表的官方说明书

实现

文件结构:

开发

运行 bb dev 启动开发进程(需要 Babashka (https://babashka.org/))

打开应用:http://localhost:8888/
在浏览器中运行测试:http://localhost:8888/test

相似文章

Show HN: 模拟手表

Hacker News Top

一位用户在 Hacker News 上分享了一个模拟手表项目,这很可能是一个具有指针式风格的数字时钟。

首款具备计算机功能的手表

Hacker News Top

本文重点介绍了精工(Seiko)于1984年发布的世界首款腕上计算机系统,该系统包括一块手表、一个带打印机的控制器以及一个用于编写BASIC程序的键盘。