Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/soixantecircuits/awesome-fsm
Awesome list for Finite State Machine
https://github.com/soixantecircuits/awesome-fsm
List: awesome-fsm
Last synced: 12 days ago
JSON representation
Awesome list for Finite State Machine
- Host: GitHub
- URL: https://github.com/soixantecircuits/awesome-fsm
- Owner: soixantecircuits
- Created: 2016-01-22T14:23:36.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-01-22T14:35:55.000Z (almost 9 years ago)
- Last Synced: 2024-05-19T20:13:06.009Z (7 months ago)
- Homepage:
- Size: 2.93 KB
- Stars: 7
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- fucking-lists - awesome-fsm
- awesomelist - awesome-fsm
- collection - awesome-fsm
- lists - awesome-fsm
README
# Awesome FSM [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
[](https://en.wikipedia.org/wiki/Finite-state_machine)
> Useful resources for creating apps that use the [finite state machine](https://en.wikipedia.org/wiki/Finite-state_machine) pattern
*Inspired by the [awesome](https://github.com/sindresorhus/awesome) list thing.*
## Préambule 🌭
Finite state machine won't save the world. This pattern address issues where you want to drive a user from a point A to Z following various state. Thus make sure you really need a state machine before using one. But also make sure you won't need one, because most of the time **you will**.
We have **four rules** that leads this design:1. The state machine is defined by a finite number of states
2. This states are triggered by conditions
3. Each conditions shapes **transition**
4. The machine is in **only one state at a time**; we call it the current state## Interesting reading about state machine 📖
- [FSM and event driven programming](http://www.robert-drummond.com/2015/04/21/event-driven-programming-finite-state-machines-and-nodejs/)
> FSM can be simply compared to somebody with amnesia who is constantly asking:
> Where am I?
> What just happened?
> and…
>
> So what do I do (or where do I go) next?*Robert Drummond*
- [State design pattern](http://www.dofactory.com/javascript/state-design-pattern)
> Two other examples where the State pattern is useful include: vending machines that dispense products when a correct combination of coins is entered, and elevator logic which moves riders up or down depending on certain complex rules that attempt to minimize wait and ride times.
*dofactory*
- [Hacker news thread](https://news.ycombinator.com/item?id=2949543)
> This man has never heard of video game A.I. programming :)
*davedx*
- [gameprogrammingpatterns.com](http://gameprogrammingpatterns.com/state.html)
> There’s nothing to prevent “air jumping” — keep hammering B while she’s in the air, and she will float forever. The simple fix is to add an isJumping_ Boolean field to Heroine that tracks
*Robert Nystrom*
- [Why developers never use state machines](http://www.skorks.com/2011/09/why-developers-never-use-state-machines/)
> We Don't Need One Until We Do
> So, early on you don't feel like your objects' state machine behaviour is complex enough to warrant a **"full-blown"** state machine (YAGNI and all that jazz), but later on – **when it IS complex enough** – you feel like you've invested too much time/effort to replace it with something that has equivalent functionality*Alan Skorkin*
- [About React and State Machine](https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html)
> React thinks of UIs as simple state machines.
## Libraries 📚
- State.js: https://github.com/steelbreeze/state.js [](https://www.npmjs.com/package/state.js)
- Machina.js: https://github.com/ifandelse/machina.js [](https://www.npmjs.com/package/machina)
- Javascript State Machine: https://github.com/jakesgordon/javascript-state-machine [](https://www.npmjs.com/package/javascript-state-machine)
- Promise State Machine: https://github.com/patbenatar/promise-state-machine [](https://www.npmjs.com/package/promise-state-machine)
- Chine: https://github.com/mtabini/chine [](https://www.npmjs.com/package/chine)
- Machineto: https://github.com/itkoren/machineto [](https://www.npmjs.com/package/machineto)
- Makina: https://github.com/atabel/makina [](https://www.npmjs.com/package/makina)
- StateJS: https://github.com/hufyhang/state-js [](https://www.npmjs.com/package/state-js)
- Mistic: https://github.com/benaston/mistic [](https://www.npmjs.com/package/mistic)
- fluent-state-machine: https://github.com/nickuraltsev/fluent-state-machine [](https://www.npmjs.com/package/fluent-state-machine)
- Bon Etat: https://github.com/gausby/bon-etat [](https://www.npmjs.com/package/bon-etat)
- Hierarchical-fsm: https://github.com/cassiozen/State-Machine [](https://www.npmjs.com/package/hierarchical-fsm)
- iFsm - jQuery: https://github.com/intersel/iFSM [](https://www.npmjs.com/package/ifsm)
- State flow: https://github.com/philipdev/stateflow [](https://www.npmjs.com/package/stateflow)## Examples
TODO 🛠