[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)