<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <link>http://persumi.com/u/fredwu/tech/e/blog/t/javascript</link>
    <generator>Persumi - Level up your writing and blogging with AI</generator>
    <category>Blog</category>
    <category>Tech</category>
    <pubDate>Fri, 01 May 2026 20:13:04 +0000</pubDate>
    <description/>
    <title>Blog (javascript) - Fred Wu&apos;s Tech</title>
    <atom:link type="application/rss+xml" rel="self" href="http://persumi.com/u/fredwu/tech/e/blog/t/javascript/feed/rss"></atom:link>
    <item>
      <pubDate>Thu, 06 Sep 2012 11:47:00 +0000</pubDate>
      <guid>http://persumi.com/u/fredwu/tech/e/blog/p/skinny-coffee-machine-a-simple-state-machine-with-observers</guid>
      <comments>http://persumi.com/u/fredwu/tech/e/blog/p/skinny-coffee-machine-a-simple-state-machine-with-observers</comments>
      <category>Blog</category>
      <category>Tech</category>
      <author>ifredwu@gmail.com (Fred Wu)</author>
      <description>&lt;![CDATA[&lt;p&gt;
After a few nights of working on the 2.0 rewrite of &lt;a href=&quot;https://github.com/fredwu/jquery-endless-scroll&quot;&gt;jQuery Endless Scroll&lt;/a&gt;, I am now releasing one of the tools I built for the project: &lt;strong&gt;&lt;a href=&quot;https://github.com/fredwu/skinny-coffee-machine&quot;&gt;Skinny Coffee Machine&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;
Skinny Coffee Machine is a simple JavaScript state machine written in CoffeeScript.&lt;/p&gt;
&lt;p&gt;
It is fairly simple to use, with the flexibility of adding and removing observers for state transitions.&lt;/p&gt;
&lt;h3&gt;
Define State Machines&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;coffeescript language-coffeescript&quot;&gt;@coffeeMachine.power = new SkinnyCoffeeMachine
  default: &apos;off&apos;
  events:
    turnOn:
      off: &apos;on&apos;
    turnOff:
      on: &apos;off&apos;
  on:
    turnOn: (from, to) -&gt; &quot;#{from.toUpperCase()} to #{to.toUpperCase()}&quot;
    turnOff: (from, to) -&gt; &quot;#{from.toUpperCase()} to #{to.toUpperCase()}&quot;
  before:
    turnOff: (from, to) -&gt; &quot;Before switching to #{to.toUpperCase()}&quot;
  after:
    turnOn: (from, to) -&gt; &quot;After switching to #{to.toUpperCase()}&quot;
    turnOff: (from, to) -&gt; &quot;After switching to #{to.toUpperCase()}&quot;

@coffeeMachine.mode = new SkinnyCoffeeMachine
  default: &apos;latte&apos;
  events:
    next:
      latte: &apos;cappuccino&apos;
      cappuccino: &apos;espresso&apos;
      espresso: &apos;lungo&apos;
      lungo: &apos;latte&apos;
    last:
      latte: &apos;lungo&apos;
      lungo: &apos;espresso&apos;
      espresso: &apos;cappuccino&apos;
      cappuccino: &apos;latte&apos;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;
Switch/Change States&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;coffeescript language-coffeescript&quot;&gt;@coffeeMachine.power.currentState() #=&gt; &quot;off&quot;
@coffeeMachine.power.switch(&apos;turnOn&apos;)
@coffeeMachine.power.currentState() #=&gt; &quot;on&quot;

@coffeeMachine.mode.currentState() #=&gt; &quot;latte&quot;
@coffeeMachine.mode.change(&apos;next&apos;, 3)
@coffeeMachine.mode.currentState() #=&gt; &quot;cappuccino&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;
Observers&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;coffeescript language-coffeescript&quot;&gt;@coffeeMachine.power.observeBefore(&apos;turnOn&apos;).start &apos;labelA&apos;, (from, to) =&gt; &quot;Observer A before switching to #{to.toUpperCase()}&quot;
@coffeeMachine.power.observeOn( &apos;turnOn&apos;).start &apos;labelB&apos;, (from, to) =&gt; &quot;Observer B on switching to #{to.toUpperCase()}&quot;
@coffeeMachine.power.observeAfter( &apos;turnOn&apos;).start &apos;labelC&apos;, (from, to) =&gt; &quot;Observer C after switching to #{to.toUpperCase()}&quot;

@coffeeMachine.power.observeBefore(&apos;turnOn&apos;).stop(&apos;labelA&apos;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
Go check out the &lt;a href=&quot;https://github.com/fredwu/skinny-coffee-machine&quot;&gt;source code&lt;/a&gt; now! :)&lt;/p&gt;
]]&gt;</description>
      <link>http://persumi.com/u/fredwu/tech/e/blog/p/skinny-coffee-machine-a-simple-state-machine-with-observers</link>
      <title>Skinny Coffee Machine - A Simple State Machine with Observers</title>
    </item>
  </channel>
</rss>