<?xml version="1.0" encoding="utf-8" ?>

<feed version="0.3" 
   xmlns="http://purl.org/atom/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    
    <link href="https://blog.fugue88.ws/rss.php?version=atom0.3" rel="service.feed" title="David Owen’s blog" type="application/x.atom+xml" />
    <link href="https://blog.fugue88.ws/"                        rel="alternate"    title="David Owen’s blog" type="text/html" />
    <link href="https://blog.fugue88.ws/rss.php?version=2.0"     rel="alternate"    title="David Owen’s blog" type="application/rss+xml" />
    <link rel="stylesheet" href="" type="text/css" />
    <title mode="escaped" type="text/html">David Owen’s blog</title>
    <tagline mode="escaped" type="text/html">Forward motion</tagline>
    <id>https://blog.fugue88.ws/</id>
    <modified>2024-11-27T04:31:27Z</modified>
    <generator url="http://www.s9y.org/" version="2.1.4">Serendipity 2.1.4 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>
    <admin:errorReportsTo rdf:resource="mailto:dsowen@fugue88.ws" />
    <info mode="xml" type="text/html">
        <div xmlns="http://www.w3.org/1999/xhtml">You are viewing an ATOM formatted XML site feed. Usually this file is inteded to be viewed in an aggregator or syndication software. If you want to know more about ATOM, please visist <a href="http://atomenabled.org/">Atomenabled.org</a></div>
    </info>

    <entry>
        <link href="https://blog.fugue88.ws/archives/2024-11/PCA-for-Classification-Is-as-Bad-as-Random" rel="alternate" title="PCA for Classification Is as Bad as Random" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2024-11-27T04:10:00Z</issued>
        <created>2024-11-27T04:10:00Z</created>
        <modified>2024-11-27T04:31:27Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=66</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=66</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2024-11/66</id>
        <title mode="escaped" type="text/html">PCA for Classification Is as Bad as Random</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Basically, PCA (Principle Component Analysis) finds projection axes based on total population variance. Because that is not correlated with classes, that means that adding PCA into your classification pipeline is essentially adding a random variable. Or, more exactly, it's like using a set of random, orthogonal projection axes.</p>
<p>Here's a simple example of PCA making classification harder&hellip;</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2024-11/PCA-for-Classification-Is-as-Bad-as-Random#extended">Continue reading "PCA for Classification Is as Bad as Random"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2023-02/In-order-responses-for-asynchronous-work" rel="alternate" title="In-order responses for asynchronous work" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2023-02-08T14:00:00Z</issued>
        <created>2023-02-08T14:00:00Z</created>
        <modified>2023-02-08T20:34:17Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=65</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=65</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2023-02/65</id>
        <title mode="escaped" type="text/html">In-order responses for asynchronous work</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Sometimes we end up executing some asynchronous function several times in a row, but we need only the results of the last call. The difficulty is that some earlier invocations may finish after the latest. I encounter this most often in Javascript, when I call an API in response to ongoing user input, like for looking up an address. While debouncing can help reduce this problem (and should be done anyway to lighten the load), it does not eliminate the problem.</p>
<p>A simple way to do this is to use a counter to keep track of each request, and only process a response if it's newer than any other processed so far.</p>
 <a class="block_level" href="https://blog.fugue88.ws/archives/2023-02/In-order-responses-for-asynchronous-work#extended">Continue reading "In-order responses for asynchronous work"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2022-03/Pipelines-in-Lisp" rel="alternate" title="Pipelines in Lisp" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2022-03-07T14:00:00Z</issued>
        <created>2022-03-07T14:00:00Z</created>
        <modified>2022-03-04T23:20:32Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=64</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=64</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2022-03/64</id>
        <title mode="escaped" type="text/html">Pipelines in Lisp</title>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2022-03/Better-averages-for-online-machine-learning" rel="alternate" title="Better averages for online machine-learning" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2022-03-04T20:42:00Z</issued>
        <created>2022-03-04T20:42:00Z</created>
        <modified>2022-03-04T21:24:31Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=63</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=63</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2022-03/63</id>
        <title mode="escaped" type="text/html">Better averages for online machine-learning</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Averages are used, in some form or other, and many machine-learning algorithms.  Stochastic gradient descent is a great example of an average in disguise, thin though it may be.</p>

<p>Picking the right kind of average can be critical.  As learning algorithms explore sub-optimal choices, the resulting negative impact on backed-up state values can persist over epochs, hampering performance.  Alternatively, some kinds of average don't converge, preventing the algorithm from settling into optimal outcomes.</p>

<p>Here, I officially release a paper on a particular kind of average that's adaptable like an exponential moving average, but has guaranteed convergence like a simple average.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2022-03/Better-averages-for-online-machine-learning#extended">Continue reading "Better averages for online machine-learning"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2021-04/Action-selection-and-learning-rates-in-Q-learning" rel="alternate" title="Action-selection and learning-rates in Q-learning" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2021-04-13T13:00:00Z</issued>
        <created>2021-04-13T13:00:00Z</created>
        <modified>2021-04-09T13:49:45Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=62</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=62</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2021-04/62</id>
        <title mode="escaped" type="text/html">Action-selection and learning-rates in Q-learning</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Implementing a Q-table reinforcement-learner is in many ways simple and straight-forward and also somewhat tricky.  The basic concept is easy to grasp; but, as many have mentioned, reinforcement-learners almost <em>want</em> to work, despite whatever bugs or sub-optimal math might be in the implementation.</p>
<p>Here are some quick notes about the approach I've come to use, specifically about action-selection (e.g. epsilon-greedy versus UCB) and managing learning-rates.  They've helped my learners converge to good strategies faster and more reliably.  Hopefully they can help you, too!</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2021-04/Action-selection-and-learning-rates-in-Q-learning#extended">Continue reading "Action-selection and learning-rates in Q-learning"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2020-12/Simulating-deck-shuffling" rel="alternate" title="Simulating deck-shuffling" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2020-12-30T14:00:00Z</issued>
        <created>2020-12-30T14:00:00Z</created>
        <modified>2020-12-30T00:06:53Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=61</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=61</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2020-12/61</id>
        <title mode="escaped" type="text/html">Simulating deck-shuffling</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>I recently worked on a small project simulating random events that were far too numerous to enumerate. In such cases, every bit of speed matters.</p>
<p>The project in this case was similar to determining likelihood of five-card Poker hands in seven-card draws.</p>
<p>Simulation of shuffling the deck and drawing cards can take a large part of the runtime if not done well, but there's a trick that makes it almost trivial.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2020-12/Simulating-deck-shuffling#extended">Continue reading "Simulating deck-shuffling"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2020-06/Exact-random-sums" rel="alternate" title="Exact random sums" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2020-06-16T13:00:00Z</issued>
        <created>2020-06-16T13:00:00Z</created>
        <modified>2021-04-19T13:34:51Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=60</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=60</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2020-06/60</id>
        <title mode="escaped" type="text/html">Exact random sums</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Sometimes, you need a list of random numbers that sum to a known constant. There's a known algorithm to provide this list of numbers with the proper distribution, but a straight-forward implementation may give a list that doesn't sum exactly to the desired constant because of rounding error.</p>
<p>This article describes the basic algorithm, why the rounding error happens, and the solution.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2020-06/Exact-random-sums#extended">Continue reading "Exact random sums"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2020-06/Precision-of-random-numbers" rel="alternate" title="Precision of random numbers" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2020-06-02T13:00:00Z</issued>
        <created>2020-06-02T13:00:00Z</created>
        <modified>2021-04-19T13:42:58Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=59</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=59</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2020-06/59</id>
        <title mode="escaped" type="text/html">Precision of random numbers</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>In some sense, random numbers uniformly-distributed in the range \([0, 1)\) are the easiest class of random number to generate.</p>
<p>Because of the internal representation of floating-point numbers, all you need to do is fill the significand with random bits, set the exponent to -1, and the sign bit to positive.</p>
<p>Some language run-times do this better than others.</p>
<p>This article shows how to check your run-time, and how to fix it.</p>
 <a class="block_level" href="https://blog.fugue88.ws/archives/2020-06/Precision-of-random-numbers#extended">Continue reading "Precision of random numbers"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2019-03/certbot-and-tinydns" rel="alternate" title="certbot and tinydns" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2019-03-12T13:00:00Z</issued>
        <created>2019-03-12T13:00:00Z</created>
        <modified>2019-03-07T04:56:09Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=58</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=58</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2019-03/58</id>
        <title mode="escaped" type="text/html">certbot and tinydns</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Let's Encrypt now supports wildcard certificates. To confirm DNS control,
they support several different DNS providers and dynamic DNS protocols, but
they don't yet have a plugin for tinydns by DJ Bernstein.</p>
<p>Luckily, the excellent designs of both certbot and tinydns make it very easy
to support on your own.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2019-03/certbot-and-tinydns#extended">Continue reading "certbot and tinydns"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2017-09/von-Neumanns-4-player-13,-13,-13,-13-imputation" rel="alternate" title="von Neumann's 4-player {1/3, 1/3, -1/3, -1/3} imputation" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2017-09-22T01:23:00Z</issued>
        <created>2017-09-22T01:23:00Z</created>
        <modified>2021-04-19T13:33:14Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=57</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=57</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2017-09/57</id>
        <title mode="escaped" type="text/html">von Neumann's 4-player {1/3, 1/3, -1/3, -1/3} imputation</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>In <a href="https://archive.org/details/theoryofgamesand030098mbp">Theory of Games and Economic Behavior</a>, von Neumann discusses solutions to some kinds of zero-sum four-person games. See section 37.4.2, page 317. There, he finds that one set of imputations is incomplete, and must have at least another imputation added to it. He writes that <q>[it] seems very difficult to find a heuristic motivation for the steps which are now necessary</q> before giving the imputation as:</p>

\begin{equation} \vec a^{IV} = \left\{1/3, 1/3, -1/3, -1/3\right\} \end{equation}

<p>The situation is unusual in that the first three players have formed a coalition against the fourth. So, why does the third player have the same loss as the fourth? This is the heuristic that von Neumann didn&rsquo;t provide, and he concludes by saying only that <q>[if] a common-sense interpretation of this solution&hellip; is wanted, &hellip; it seems to be some kind of compromise between a part (two members) of a possible victorious coalition and the other two players.</q></p>

<p>However, there&rsquo;s an intriguing possibility.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2017-09/von-Neumanns-4-player-13,-13,-13,-13-imputation#extended">Continue reading "von Neumann's 4-player {1/3, 1/3, -1/3, -1/3} imputation"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2017-04/Exponential-Moving-Average-EMA-Rates,-part-3" rel="alternate" title="Exponential Moving Average (EMA) Rates, part 3" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2017-04-11T13:00:00Z</issued>
        <created>2017-04-11T13:00:00Z</created>
        <modified>2017-04-07T01:28:38Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=55</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=55</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2017-04/55</id>
        <title mode="escaped" type="text/html">Exponential Moving Average (EMA) Rates, part 3</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>In the last post, we created an online implementation of an EMA to measure the rate of a Poisson event. However, it has the &ldquo;warm-up&rdquo; period seen in most EMA implementations.</p>
<p>This time, we&rsquo;ll correct that. The technique is similar to what I wrote in <a href="https://blog.fugue88.ws/archives/2017-01/The-correct-way-to-start-an-Exponential-Moving-Average-EMA">The correct way to start an Exponential Moving Average (EMA)</a>.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2017-04/Exponential-Moving-Average-EMA-Rates,-part-3#extended">Continue reading "Exponential Moving Average (EMA) Rates, part 3"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2017-03/Exponential-Moving-Average-EMA-Rates,-part-2" rel="alternate" title="Exponential Moving Average (EMA) Rates, part 2" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2017-03-28T13:00:00Z</issued>
        <created>2017-03-28T13:00:00Z</created>
        <modified>2017-04-11T13:05:41Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=54</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=54</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2017-03/54</id>
        <title mode="escaped" type="text/html">Exponential Moving Average (EMA) Rates, part 2</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>In the <a href="https://blog.fugue88.ws/archives/2017-03/Exponential-Moving-Average-EMA-Rates,-part-1">last post</a>, we simulated some Poisson data and then verified it by looking at its histogram and some descriptive statistics. We also built a basic sliding-window implementation and graphed its output.</p>
<p>To continue on, we&rsquo;ll need to build a more realistic implementation, along with a method to feed it the simulated events. With that in hand, we&rsquo;ll build an EMA function specialized for Poisson events.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2017-03/Exponential-Moving-Average-EMA-Rates,-part-2#extended">Continue reading "Exponential Moving Average (EMA) Rates, part 2"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2017-03/Exponential-Moving-Average-EMA-Rates,-part-1" rel="alternate" title="Exponential Moving Average (EMA) Rates, part 1" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2017-03-14T13:00:00Z</issued>
        <created>2017-03-14T13:00:00Z</created>
        <modified>2021-04-19T13:32:39Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=53</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=53</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2017-03/53</id>
        <title mode="escaped" type="text/html">Exponential Moving Average (EMA) Rates, part 1</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>I had been thinking about determining the average rate of occurrences over time of some observation. For example, you might like to measure how much traffic flows through a street throughout the day. Reporting the time that every single car goes by is very accurate, but not very useful. You might bin traffic into hours starting on every hour, but if there is a spike or sudden increase in the middle of an hour you might miss its significance. So, you'd like to see a graph that's smooth like an average but with more detail in time.</p>
<p>One approach is similar to the binning approach, but slide the hour-long window across the data by minutes. Doing this requires keeping the data around, and using each data point repeatedly. If you have a surge of one million cars in a few minutes, you need to use those million points in your calculations 60 times.</p>
<p>This behavior is similar to the Simple Moving Average (SMA). A SMA can easily be transformed into an Exponential Moving Average, which requires only the previous EMA and the new data point to calculate the new EMA. So, I decided to create an Exponential Moving Average Rate (EMAR).</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2017-03/Exponential-Moving-Average-EMA-Rates,-part-1#extended">Continue reading "Exponential Moving Average (EMA) Rates, part 1"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2017-01/The-correct-way-to-start-an-Exponential-Moving-Average-EMA" rel="alternate" title="The correct way to start an Exponential Moving Average (EMA)" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2017-01-31T14:00:00Z</issued>
        <created>2017-01-31T14:00:00Z</created>
        <modified>2021-04-19T13:32:21Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=52</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=52</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2017-01/52</id>
        <title mode="escaped" type="text/html">The correct way to start an Exponential Moving Average (EMA)</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>The EMA is a very handy tool. It lets us calculate an average over recent data. But, unlike a Simple Moving Average, we don't have to keep a window of samples around&mdash;we can update an EMA "online," one sample at a time.</p>
<p>But the perennial question is: how do you <i>start</i> an EMA?</p>
<p>First, here are a couple of wrong ways.</p> <a class="block_level" href="https://blog.fugue88.ws/archives/2017-01/The-correct-way-to-start-an-Exponential-Moving-Average-EMA#extended">Continue reading "The correct way to start an Exponential Moving Average (EMA)"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="https://blog.fugue88.ws/archives/2017-01/Deciding-once" rel="alternate" title="Deciding once" type="text/html" />
        <author>
            <name>David Owen</name>
            <email>dsowen@fugue88.ws</email>        </author>
    
        <issued>2017-01-24T14:00:00Z</issued>
        <created>2017-01-24T14:00:00Z</created>
        <modified>2017-01-24T03:54:36Z</modified>
        <wfw:comment>https://blog.fugue88.ws/wfwcomment.php?cid=51</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>https://blog.fugue88.ws/rss.php?version=atom0.3&amp;type=comments&amp;cid=51</wfw:commentRss>
    
        <id>https://blog.fugue88.ws/archives/2017-01/51</id>
        <title mode="escaped" type="text/html">Deciding once</title>
        <content type="application/xhtml+xml" xml:base="https://blog.fugue88.ws/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>In <a href="https://blog.fugue88.ws/archives/2017-01/Fixing-dispatch">Fixing dispatch</a>, we refactored some code that dispatched things from a <code>switch</code>-statement or cascading <code>if</code>-statements to dispatching by polymorphism.</p>

<p>This time, we'll refactor a different piece of dispatch in a completely different way, and cover another design principle.</p>
 <a class="block_level" href="https://blog.fugue88.ws/archives/2017-01/Deciding-once#extended">Continue reading "Deciding once"</a>
            </div>
        </content>

        
    </entry>
</feed>