SlideShare ist ein Scribd-Unternehmen logo
1 von 9
FSM.NET
A simple "stateless" finite-state
machine library for .NET.
Bill Sorensen
@BillSorensen
bill@truewill.net http://www.truewill.net/
Integrated DNA Technologies
1
What is it?
 Open-source .NET library
 “A finite-state machine (FSM) … is a mathematical model of
computation used to design both computer programs and
sequential logic circuits. It is conceived as an abstract machine that
can be in one of a finite number of states. The machine is in only
one state at a time; the state it is in at any given time is called the
current state. It can change from one state to another when
initiated by a triggering event or condition; this is called a transition.
A particular FSM is defined by a list of its states, and the triggering
condition for each transition.” – Wikipedia
2
What is it? (continued)
 Domain-specific language (DSL)
 Text tables can be provided by callers, loaded from a data store, stored in
configuration – whatever works for you
 Purely functional
 Given the same arguments, every function always returns the same values
 No side effects
 Great for web services (inherently stateless)
 Thread safe (unless I goofed)
# Turnstile
Locked | coin | Unlocked
Unlocked | coin | Unlocked
Unlocked | pass | Locked
Initial state (first line)
CurrentState|triggeringEvent|NewState
3
Why would I need it?
 You’re trying to solve a problem that looks like a state machine.
“I have that horrible feeling when I know that almost the only thing I can say is
that you should use a State Machine when the behavior you’re specifying
feels like a State Machine – that is, when you have a sense of movement,
triggered by events, from state to state. In many ways, the best way to see if a
State Machine is appropriate is to try sketching one on paper and, if it fits
well, to try it in action.” – Martin Fowler, Domain-Specific Languages
4
Why would I not need it?
 You want to associate actions or guards (behavior/code) with
transitions or with entering/exiting states.
 FSM.NET machines are designed to be self-contained, without requiring binary
references to custom code.
 FSM.NET machines are designed to be deserialized from text.
 Custom code actions could be added through a wrapper (web service, etc.).
 You want to embed a state machine in a non-.NET application.
 FSM.NET can be used through a web service, though.
5
Demo time!
https://github.com/TrueWill/FSM.NET
https://github.com/TrueWill/FSM.NET/tree/master/Samples
6
Why is FSM.NET written in F#?
 Fewer bugs
 Easier to verify correctness
 Immutable by default
 Less code – let’s see!
 Easier to write thread-safe code
 Interop with other .NET libraries
 Fun! 
7
Other options (in no particular order)
 http://smc.sourceforge.net/
 https://github.com/phatboyg/Automatonymous
 http://code.google.com/p/bbvcommon/wiki/StateMachine
 https://code.google.com/p/stateless/
 … and many more
Don’t reinvent the wheel! (Like I did…)
(Caveat: I have not evaluated all of the above options.)
// Stateless example using enums
var turnstile = new StateMachine<States, Events>(States.Locked);
turnstile.Configure(States.Locked).Permit(Events.Coin, States.Unlocked);
turnstile.Configure(States.Unlocked).Permit(Events.Pass, States.Locked);
turnstile.OnTransitioned(x => Console.WriteLine(x.Trigger));
turnstile.Fire(Events.Coin); // mutates
Console.WriteLine(turnstile.State);
8
How can I get it?
https://www.nuget.org/packages/FSM.NET/
https://github.com/TrueWill/FSM.NET
GitHub

Weitere ähnliche Inhalte

Ähnlich wie FSM.NET presentation

Dvorkin: Software Defined Datacenter Presentation #SDDC14
Dvorkin: Software Defined Datacenter Presentation #SDDC14Dvorkin: Software Defined Datacenter Presentation #SDDC14
Dvorkin: Software Defined Datacenter Presentation #SDDC14
Mike Dvorkin
 
Automation Techniques In Documentation
Automation Techniques In DocumentationAutomation Techniques In Documentation
Automation Techniques In Documentation
Sujith Mallath
 
Comparing DOM XSS Tools On Real World Bug
Comparing DOM XSS Tools On Real World BugComparing DOM XSS Tools On Real World Bug
Comparing DOM XSS Tools On Real World Bug
Stefano Di Paola
 

Ähnlich wie FSM.NET presentation (20)

Freedomotic v1.5 whitepaper
Freedomotic v1.5 whitepaperFreedomotic v1.5 whitepaper
Freedomotic v1.5 whitepaper
 
Modeling of reactive system with finite automata
Modeling of reactive system with finite automataModeling of reactive system with finite automata
Modeling of reactive system with finite automata
 
Dvorkin: Software Defined Datacenter Presentation #SDDC14
Dvorkin: Software Defined Datacenter Presentation #SDDC14Dvorkin: Software Defined Datacenter Presentation #SDDC14
Dvorkin: Software Defined Datacenter Presentation #SDDC14
 
Modern Embedded Software
Modern Embedded SoftwareModern Embedded Software
Modern Embedded Software
 
ReDoS - Regular Expession Denial of Service
ReDoS - Regular Expession Denial of ServiceReDoS - Regular Expession Denial of Service
ReDoS - Regular Expession Denial of Service
 
Automation Techniques In Documentation
Automation Techniques In DocumentationAutomation Techniques In Documentation
Automation Techniques In Documentation
 
Metasploit - Basic and Android Demo
Metasploit  - Basic and Android DemoMetasploit  - Basic and Android Demo
Metasploit - Basic and Android Demo
 
dot NET Framework
dot NET Frameworkdot NET Framework
dot NET Framework
 
Comparing DOM XSS Tools On Real World Bug
Comparing DOM XSS Tools On Real World BugComparing DOM XSS Tools On Real World Bug
Comparing DOM XSS Tools On Real World Bug
 
Event-driven Infrastructure - Mike Place, SaltStack - DevOpsDays Tel Aviv 2016
Event-driven Infrastructure - Mike Place, SaltStack - DevOpsDays Tel Aviv 2016Event-driven Infrastructure - Mike Place, SaltStack - DevOpsDays Tel Aviv 2016
Event-driven Infrastructure - Mike Place, SaltStack - DevOpsDays Tel Aviv 2016
 
.Netframework
.Netframework.Netframework
.Netframework
 
You are to simulate a dispatcher using a priority queue system.New.pdf
You are to simulate a dispatcher using a priority queue system.New.pdfYou are to simulate a dispatcher using a priority queue system.New.pdf
You are to simulate a dispatcher using a priority queue system.New.pdf
 
Chapter 1 introduction to .net
Chapter 1 introduction to .netChapter 1 introduction to .net
Chapter 1 introduction to .net
 
Azure Service Fabric and the Actor Model: when did we forget Object Orientation?
Azure Service Fabric and the Actor Model: when did we forget Object Orientation?Azure Service Fabric and the Actor Model: when did we forget Object Orientation?
Azure Service Fabric and the Actor Model: when did we forget Object Orientation?
 
Metapwn
MetapwnMetapwn
Metapwn
 
[null]Metapwn - Pwn at a puff by Prajwal Panchmahalkar
[null]Metapwn - Pwn at a puff by Prajwal Panchmahalkar[null]Metapwn - Pwn at a puff by Prajwal Panchmahalkar
[null]Metapwn - Pwn at a puff by Prajwal Panchmahalkar
 
The JSON architecture
The JSON architectureThe JSON architecture
The JSON architecture
 
WPF Windows Presentation Foundation A detailed overview Version1.2
WPF Windows Presentation Foundation A detailed overview Version1.2WPF Windows Presentation Foundation A detailed overview Version1.2
WPF Windows Presentation Foundation A detailed overview Version1.2
 
Real Time Operating System
Real Time Operating SystemReal Time Operating System
Real Time Operating System
 
Top 20 Asp.net interview Question and answers
Top 20 Asp.net interview Question and answersTop 20 Asp.net interview Question and answers
Top 20 Asp.net interview Question and answers
 

Kürzlich hochgeladen

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Kürzlich hochgeladen (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

FSM.NET presentation

  • 1. FSM.NET A simple "stateless" finite-state machine library for .NET. Bill Sorensen @BillSorensen bill@truewill.net http://www.truewill.net/ Integrated DNA Technologies
  • 2. 1 What is it?  Open-source .NET library  “A finite-state machine (FSM) … is a mathematical model of computation used to design both computer programs and sequential logic circuits. It is conceived as an abstract machine that can be in one of a finite number of states. The machine is in only one state at a time; the state it is in at any given time is called the current state. It can change from one state to another when initiated by a triggering event or condition; this is called a transition. A particular FSM is defined by a list of its states, and the triggering condition for each transition.” – Wikipedia
  • 3. 2 What is it? (continued)  Domain-specific language (DSL)  Text tables can be provided by callers, loaded from a data store, stored in configuration – whatever works for you  Purely functional  Given the same arguments, every function always returns the same values  No side effects  Great for web services (inherently stateless)  Thread safe (unless I goofed) # Turnstile Locked | coin | Unlocked Unlocked | coin | Unlocked Unlocked | pass | Locked Initial state (first line) CurrentState|triggeringEvent|NewState
  • 4. 3 Why would I need it?  You’re trying to solve a problem that looks like a state machine. “I have that horrible feeling when I know that almost the only thing I can say is that you should use a State Machine when the behavior you’re specifying feels like a State Machine – that is, when you have a sense of movement, triggered by events, from state to state. In many ways, the best way to see if a State Machine is appropriate is to try sketching one on paper and, if it fits well, to try it in action.” – Martin Fowler, Domain-Specific Languages
  • 5. 4 Why would I not need it?  You want to associate actions or guards (behavior/code) with transitions or with entering/exiting states.  FSM.NET machines are designed to be self-contained, without requiring binary references to custom code.  FSM.NET machines are designed to be deserialized from text.  Custom code actions could be added through a wrapper (web service, etc.).  You want to embed a state machine in a non-.NET application.  FSM.NET can be used through a web service, though.
  • 7. 6 Why is FSM.NET written in F#?  Fewer bugs  Easier to verify correctness  Immutable by default  Less code – let’s see!  Easier to write thread-safe code  Interop with other .NET libraries  Fun! 
  • 8. 7 Other options (in no particular order)  http://smc.sourceforge.net/  https://github.com/phatboyg/Automatonymous  http://code.google.com/p/bbvcommon/wiki/StateMachine  https://code.google.com/p/stateless/  … and many more Don’t reinvent the wheel! (Like I did…) (Caveat: I have not evaluated all of the above options.) // Stateless example using enums var turnstile = new StateMachine<States, Events>(States.Locked); turnstile.Configure(States.Locked).Permit(Events.Coin, States.Unlocked); turnstile.Configure(States.Unlocked).Permit(Events.Pass, States.Locked); turnstile.OnTransitioned(x => Console.WriteLine(x.Trigger)); turnstile.Fire(Events.Coin); // mutates Console.WriteLine(turnstile.State);
  • 9. 8 How can I get it? https://www.nuget.org/packages/FSM.NET/ https://github.com/TrueWill/FSM.NET GitHub