[HN Gopher] A replica of Citizen Quartz watch based on Harel's p...
___________________________________________________________________
A replica of Citizen Quartz watch based on Harel's paper
introducing statecharts
Author : all2
Score : 51 points
Date : 2025-09-28 14:00 UTC (3 days ago)
(HTM) web link (andyjakubowski.github.io)
(TXT) w3m dump (andyjakubowski.github.io)
| ttd wrote:
| If you're fond of state machines as an abstraction for system
| design, I highly recommend reading the Harel statechart paper.
| It's well-written and understandable. And, it's truly a useful
| extension of the type of state machine diagrams software
| engineers typically produce.
| all2 wrote:
| I discovered the above implementation about the time I finished
| reading through the paper. I need to go back through and finish
| taking notes.
|
| I think there might be room to add `any` and `all` guards that
| take many guards as arguments.
|
| The other thing I've been pondering is the apparent similarity
| between ASTs and the sort of graph a statechart forms. If we
| compress state and chart into a single object, now you have
| states that can have parents and children (the semantics of
| what is an active state would vary with your node type, IE
| compound or parallel). Then your edges would the transitions
| between nodes.
|
| The semantics of the whole thing starts to look vaguely like
| there's a programming language that could emerge if the
| intermediate representation is hammered out well enough.
| TFortunato wrote:
| At Amazon Robotics we built a robot control system that
| executed state charts (described in an extended version of
| SCXML) in real-time for managing the core behaviors of the
| robot.
|
| To help people not have write the charts by hand, we built a
| DSL (originally in python, then in Kotlin), to author robot
| behaviors that then compiled down to SCXML. Conditions on
| guards were written in a tiny expression language we wrote,
| enabling you to look at various signals from the hardware and
| software at runtime and make decisions based off them.
|
| The nice part of this setup was that it opened up a path for
| doing more formal analysis on the behavior. E.g. you could
| easily find "terminal" states that you could enter but not
| leave. You can also imagine things like checking things like
| which states in a parallel or in concurrently running
| machines, aren't allowed to be active, and verifying there is
| no path in the state graph that allowed that to occur. There
| were other nice properties as well, like getting a graphical
| visualization of your program state "for free"
|
| It was definitely a more constrained model than a "full
| featured" programming language, but for our use case,
| controlling machines in a reliable way, it worked out very
| well!
| chermi wrote:
| Is there a modern reference implementation of statecharts? My
| understanding is that there's tons of offspring and they all
| kind of disagree. Same with regular FSM at least from limited
| understanding from this book
| https://ptolemy.berkeley.edu/books/leeseshia/.
|
| I'm a little worried the author (Lee) may have a particular PoV
| and perhaps this wasn't the best resource to learn from?
|
| I'm building an automated environmentally monitored +.
| controlled mushroom fruiting chamber. V1 I got by just with
| very basic state machines but I'm trying to take it up a notch
| in sophistication and do it the "right " way.
| all2 wrote:
| There is for JavaScript called XState. I think it is SCXML
| compliant .You might also take a look at qmuntal/stateless
| (not SCXML compliant), a golang module. It has rudimentary
| sub-state functionality.
|
| I'm in the process of writing a golang library, if you're
| interested in seeing some raw development (IE, I'm in the
| middle of designing dev UX, and the guts of the lib have yet
| to be implemented).
|
| You may also consider n8n for your uses. As workflow
| management goes, it is quite robust.
|
| For embedded work, I honestly don't know. I do know that
| golang can be transpiled into C (https://tinygo.org/) and
| tinygo + qmuntal/stateless might work really well for your
| use-case.
| chermi wrote:
| Thank you so much! For context, this for a "driver" running
| on a pi that controls actuators on an esp32 via MQTT. So
| the the most basics states just clones of the states
| (On/Off) on the esp32, while more complicated states would
| combine actions like fan + humidifier. I've written
| everything on the pi in python so far. But that was all V1
| and I'm starting over so maybe I'll try something new.
| moolcool wrote:
| This is very cool, but why does the battery die so quickly?
| jsheard wrote:
| Probably to test the "low battery" part of the state machine
| without having to wait several years.
| tentahedronic wrote:
| Simply awesome. One thing I would suggest cleaning up is
| batteryPercentage which shows something ugly like
| 98.1000000000006 at least for me.
| klooney wrote:
| Delightful!
___________________________________________________________________
(page generated 2025-10-01 23:00 UTC)