过去四个月,我一个接一个地接上设备。
二月是没有 GUI 的芯片。把 WeAct STM32H723 用 USB 插上,让开发板自己交出画面定义。三月把三家厂商的仪器放进同一块屏幕。四月把行车记录仪上能碰到视频的工具整个拿掉。五月让温室传感器换掉也不用改规则。
每月做一个,好故事是会攒起来的。但你并不知道那到底是一个东西,还是长得像的四个东西。 所以这个月我没做新设备,而是把已经做出来的数了一遍。
怎么数的
对照版本号不算证据。版本是手敲上去的数字,同一个号码下已经分叉的副本很常见。
所以我比的是 真正在画屏幕、真正在持有状态的那三个文件的字节。
RENDERER="lib/src/renderer/renderer.dart"
FACTORY="lib/src/widgets/widget_factory.dart"
STATE="lib/src/state/state_manager.dart"
每个样例都把运行时 vendoring 进自己内部,因为它得能被单独下载、单独跑起来。也就是说副本有二十七份,分叉的机会也有二十七次。
结果
sample version renderer widget_factory state_manager
bench-instruments 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
board-over-serial 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
booking-slots 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
clinic-flow 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
club-dues 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
dashcam-boundary 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
...
taxi-dashboard 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
two-shops 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
waiting-line 0.5.1 5d4989b6a199 fb156b4a17be 850341b1e8a3
27 copies of the runtime · renderer, widget_factory and state_manager
identical byte for byte · 0.5.1
一行都没有分开。
可是背后的东西没有一个是像的
这个对照要有意义,背后的设备就必须彼此不同。 如果全是同一类,屏幕一样就是理所当然。
sample device backing
bench-instruments c-sim instruments/instruments.c
board-over-serial hardware STM32H723 over USB serial, ESP32 over Wi-Fi TCP
booking-slots dart server process
greenhouse-independent c-sim greenhouse_bus/greenhouse_bus.c
lcd-hmi c-sim panel_firmware/panel_firmware.c
pos-kiosk-kds c-sim terminal_sim/terminal_sim.c
taxi-dashboard c-sim vehicle_bus/vehicle_bus.c
三类。 真实开发板(USB 串口和 Wi-Fi TCP 两种都有)、五个用 C 写的固件与总线模拟器,还有 Dart 服务端。
校验把这一点明确守住了——种类少于三种就失败,真实硬件不在名单里也失败。
[ "$NKIND" -ge 3 ] || { echo " only $NKIND kind(s) of device"; exit 1; }
grep -q "hardware STM32H723" "$S" || { echo " no real hardware in the corpus"; exit 1; }