<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Afriskito</title>
        <link>https://beta.afriskito.net/</link>
        <description>My web sandbox</description>
        <generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>ojblog@afriskito.net (Orson Jones)</managingEditor>
            <webMaster>ojblog@afriskito.net (Orson Jones)</webMaster><lastBuildDate>Tue, 02 Jun 2026 18:56:47 -0600</lastBuildDate>
            <atom:link href="https://beta.afriskito.net/index.xml" rel="self" type="application/rss+xml" />
        <item>
    <title>Fountain</title>
    <link>https://beta.afriskito.net/posts/fountain/</link>
    <pubDate>Sun, 28 Dec 2025 16:37:24 -0600</pubDate>
    <author>Orson Jones</author>
    <guid>https://beta.afriskito.net/posts/fountain/</guid>
    <description><![CDATA[<p>Fountain thing I wrote several years ago. Written in js because I thought it was easier than C, microcontrollers, and plumbing.</p>
<table id="fountain_table" style="width:auto"></table>
<script>
    if (window.addEventListener) {
        window.addEventListener("DOMContentLoaded", init, false);
    }
    var fountaindata = Array();
    function init() {
        var fountain = document.getElementById('fountain_table');
        for (y = 0; y < 5; y++) {
            var row = document.createElement('tr');
            fountain.appendChild(row);
            fountaindata[y] = Array();
            for (x = 0; x < 5; x++) {
                var cell = document.createElement('td');
                fountaindata[y][x] = cell;
                cell.style.background = "rgb(0," + (y * 30) + "," + (x * 30) + ")";
                cell.style.width = "50px";
                cell.style.height = "50px";
                cell.style.border = "1px solid black";
                row.appendChild(cell);
            }
        }
        loop();
    }

    async function loop() {
        while (true) {
            none();
            await sleep(1000);
            
            for (i = 0; i < 2; i++) {
                for (y = 0; y < 5; y++) {
                    for (x = 0; x < 5; x++) {
                        set(x, y, 5);
                    }
                    await sleep(1000);
                    for (x = 0; x < 5; x++) {
                        set(x, y, 0);
                    }
                }
            }
            
            await sleep(1000);
            setall([
                [0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0],
                [7, 7, 7, 7, 7],
                [0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0],
            ]);
            await sleep(1000);
            setall([
                [0, 0, 0, 0, 0],
                [5, 5, 5, 5, 5],
                [7, 7, 7, 7, 7],
                [5, 5, 5, 5, 5],
                [0, 0, 0, 0, 0],
            ]);
            await sleep(1000);
            setall([
                [3, 3, 3, 3, 3],
                [5, 5, 5, 5, 5],
                [7, 7, 7, 7, 7],
                [5, 5, 5, 5, 5],
                [3, 3, 3, 3, 3],
            ]);
            await sleep(1000);
            none();
            await sleep(1000);
            setall([
                [0, 0, 7, 0, 0],
                [0, 0, 7, 0, 0],
                [0, 0, 7, 0, 0],
                [0, 0, 7, 0, 0],
                [0, 0, 7, 0, 0],
            ]);
            await sleep(1000);
            setall([
                [0, 5, 7, 5, 0],
                [0, 5, 7, 5, 0],
                [0, 5, 7, 5, 0],
                [0, 5, 7, 5, 0],
                [0, 5, 7, 5, 0],
            ]);
            await sleep(1000);
            setall([
                [3, 5, 7, 5, 3],
                [3, 5, 7, 5, 3],
                [3, 5, 7, 5, 3],
                [3, 5, 7, 5, 3],
                [3, 5, 7, 5, 3],
            ]);
            await sleep(1000);
            none();
            await sleep(1000);
            
            for (i = 0; i < 8; i++) {
                setall([
                    [10, 0, 10, 0, 10],
                    [0, 10, 0, 10, 0],
                    [10, 0, 10, 0, 10],
                    [0, 10, 0, 10, 0],
                    [10, 0, 10, 0, 10],
                ]);
                await sleep(1000);
                setall([
                    [0, 10, 0, 10, 0],
                    [10, 0, 10, 0, 10],
                    [0, 10, 0, 10, 0],
                    [10, 0, 10, 0, 10],
                    [0, 10, 0, 10, 0],
                ]);
                await sleep(1000);
            }
            none();
            await sleep(1000);
            
            set(4, 0, 10);
            await sleep(1000);
            set(4, 0, 0);
            set(4, 1, 10);
            await sleep(1000);
            set(4, 1, 0);
            set(0, 2, 10);
            await sleep(1000);
            set(0, 2, 0);
            set(0, 3, 10);
            await sleep(1000);
            set(0, 3, 0);
            set(0, 4, 10);
            await sleep(1000);
            set(0, 4, 0);

            set(1, 4, 10);
            await sleep(1000);
            set(1, 4, 0);
            set(1, 3, 10);
            await sleep(1000);
            set(1, 3, 0);
            set(1, 2, 10);
            await sleep(1000);
            set(1, 2, 0);
            set(3, 1, 10);
            await sleep(1000);
            set(3, 1, 0);
            set(3, 0, 10);
            await sleep(1000);
            set(3, 0, 0);

            set(2, 0, 10);
            await sleep(1000);
            set(2, 0, 0);
            set(2, 1, 10);
            await sleep(1000);
            set(2, 1, 0);
            set(2, 2, 10);
            await sleep(1000);
            set(2, 2, 0);
            set(2, 3, 10);
            await sleep(1000);
            set(2, 3, 0);
            set(2, 4, 10);
            await sleep(1000);
            set(2, 4, 0);

            set(3, 4, 10);
            await sleep(1000);
            set(3, 4, 0);
            set(3, 3, 10);
            await sleep(1000);
            set(3, 3, 0);
            set(3, 2, 10);
            await sleep(1000);
            set(3, 2, 0);
            set(1, 1, 10);
            await sleep(1000);
            set(1, 1, 0);
            set(1, 0, 10);
            await sleep(1000);
            set(1, 0, 0);

            set(0, 0, 10);
            await sleep(1000);
            set(0, 0, 0);
            set(0, 1, 10);
            await sleep(1000);
            set(0, 1, 0);
            set(4, 2, 10);
            await sleep(1000);
            set(4, 2, 0);
            set(4, 3, 10);
            await sleep(1000);
            set(4, 3, 0);
            set(4, 4, 10);
            await sleep(1000);
            set(4, 4, 0);
            await sleep(1000);
            
            all();
            await sleep(5000);
            none();
            await sleep(1000);
            
            set(4, 2, 10);
            await sleep(1000);
            set(4, 2, 0);
            set(4, 3, 10);
            await sleep(1000);
            set(4, 3, 0);
            set(4, 4, 10);
            await sleep(1000);
            set(4, 4, 0);
            await sleep(1000);

            set(4, 0, 10);
            await sleep(1000);
            set(4, 0, 0);
            set(4, 1, 10);
            await sleep(1000);
            set(4, 1, 0);
            set(0, 2, 10);
            await sleep(1000);
            set(0, 2, 0);
            set(0, 3, 10);
            await sleep(1000);
            set(0, 3, 0);
            set(0, 4, 10);
            await sleep(1000);
            set(0, 4, 0);

            set(1, 4, 10);
            await sleep(1000);
            set(1, 4, 0);
            set(1, 3, 10);
            await sleep(1000);
            set(1, 3, 0);
            set(1, 2, 10);
            await sleep(1000);
            set(1, 2, 0);
            set(3, 1, 10);
            await sleep(1000);
            set(3, 1, 0);
            set(3, 0, 10);
            await sleep(1000);
            set(3, 0, 0);

            set(2, 0, 10);
            await sleep(1000);
            set(2, 0, 0);
            set(2, 1, 10);
            await sleep(1000);
            set(2, 1, 0);
            set(2, 2, 10);
            await sleep(1000);
            set(2, 2, 0);
            set(2, 3, 10);
            await sleep(1000);
            set(2, 3, 0);
            set(2, 4, 10);
            await sleep(1000);
            set(2, 4, 0);

            set(3, 4, 10);
            await sleep(1000);
            set(3, 4, 0);
            set(3, 3, 10);
            await sleep(1000);
            set(3, 3, 0);
            set(3, 2, 10);
            await sleep(1000);
            set(3, 2, 0);
            set(1, 1, 10);
            await sleep(1000);
            set(1, 1, 0);
            set(1, 0, 10);
            await sleep(1000);
            set(1, 0, 0);

            set(0, 0, 10);
            await sleep(1000);
            set(0, 0, 0);
            set(0, 1, 10);
            await sleep(1000);
            set(0, 1, 0);
            set(4, 2, 10);
            await sleep(1000);
            set(4, 2, 0);
            set(4, 3, 10);
            await sleep(1000);
            set(4, 3, 0);
            set(4, 4, 10);
            await sleep(1000);
            set(4, 4, 0);
            await sleep(1000);
            
            for (i = 0; i < 3; i++) {
                for (y = 0; y < 5; y++) {
                    for (x = 0; x < 5; x++) {
                        set(x, y, 5);
                    }
                    await sleep(1000);
                    for (x = 0; x < 5; x++) {
                        set(x, y, 0);
                    }
                }
            }
            
            all();
            await sleep(5000);
            none();
            
            for (i = 0; i < 4; i++) {
                none();
                set(2, 2, 5);
                await sleep(1000);
                setall([
                    [0, 0, 0, 0, 0],
                    [0, 5, 5, 5, 0],
                    [0, 5, 0, 5, 0],
                    [0, 5, 5, 5, 0],
                    [0, 0, 0, 0, 0],
                ]);
                await sleep(1000);
                setall([
                    [5, 5, 5, 5, 5],
                    [5, 0, 0, 0, 5],
                    [5, 0, 0, 0, 5],
                    [5, 0, 0, 0, 5],
                    [5, 5, 5, 5, 5],
                ]);
                await sleep(1000);
            }
        }
    }

    function all() {
        for (y = 0; y < 5; y++) {
            for (x = 0; x < 5; x++) {
                set(x, y, 10);
            }
        }
    }

    function none() {
        for (y = 0; y < 5; y++) {
            for (x = 0; x < 5; x++) {
                set(x, y, 0);
            }
        }
    }

    function setall(vals) {
        for (y = 0; y < 5; y++) {
            for (x = 0; x < 5; x++) {
                set(x, y, vals[4 - y][x]);
            }
        }
    }

    function set(x, y, val) {
        let cell = fountaindata[y][x];
        cell.style.background = torgb(val);
    }

    function torgb(val) {
        return "rgb(" + (255 - 25 * val) + "," + (255 - 25 * val) + ",255)";
    }

    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
</script>]]></description>
</item>
<item>
    <title>Flash Cards</title>
    <link>https://beta.afriskito.net/posts/flash-cards/</link>
    <pubDate>Fri, 26 Dec 2025 14:07:05 -0600</pubDate>
    <author>Orson Jones</author>
    <guid>https://beta.afriskito.net/posts/flash-cards/</guid>
    <description><![CDATA[<p>I recently dusted off a small <a href="https://afriskito.net/flashcards.html" target="_blank" rel="noopener noreffer ">flash-card webapp</a> I made for my sister when she was a teacher. I decided to fix some small bugs that cropped up due to evolving web standards. It is working again. Flashcard decks can be sent by sharing the url after they have been entered and tested. Here are a couple examples of how I have used it.</p>
<ul>
<li><a href="https://afriskito.net/flashcards.html#%e2%9e%a1%e2%9c%8b%f0%9f%9f%a2,%e2%9e%a1%e2%9c%8b%f0%9f%9f%a1,%e2%9e%a1%e2%9c%8b%f0%9f%94%b5,%e2%9e%a1%e2%9c%8b%f0%9f%94%b4,%e2%ac%85%e2%9c%8b%f0%9f%9f%a2,%e2%ac%85%e2%9c%8b%f0%9f%9f%a1,%e2%ac%85%e2%9c%8b%f0%9f%94%b5,%e2%ac%85%e2%9c%8b%f0%9f%94%b4,%e2%9e%a1%f0%9f%a6%b6%f0%9f%9f%a2,%e2%9e%a1%f0%9f%a6%b6%f0%9f%9f%a1,%e2%9e%a1%f0%9f%a6%b6%f0%9f%94%b5,%e2%9e%a1%f0%9f%a6%b6%f0%9f%94%b4,%e2%ac%85%f0%9f%a6%b6%f0%9f%9f%a2,%e2%ac%85%f0%9f%a6%b6%f0%9f%9f%a1,%e2%ac%85%f0%9f%a6%b6%f0%9f%94%b5,%e2%ac%85%f0%9f%a6%b6%f0%9f%94%b4" target="_blank" rel="noopener noreffer ">Twister spinner</a></li>
<li>Flashcards for sight words: <a href="https://afriskito.net/flashcards.html#the,of,and,a,to,in,is,you,that,it,he,was,for,on,are,as,with,his,they,I,at,be,this,have,from" target="_blank" rel="noopener noreffer ">First grade sample set</a></li>
</ul>]]></description>
</item>
<item>
    <title>Paint Swatch Matcher</title>
    <link>https://beta.afriskito.net/posts/paint-swatch-matcher/</link>
    <pubDate>Wed, 24 Apr 2024 20:36:22 -0600</pubDate>
    <author>Orson Jones</author>
    <guid>https://beta.afriskito.net/posts/paint-swatch-matcher/</guid>
    <description><![CDATA[<p>Back in 2013 I wanted to try using a phone to match paint colors. Ambitious, I know. But it is an interesting idea that I think has merit.
The idea is to use paint swatch samples from the store as a color reference, then take a picture of it against the wall in question.
With that, you could calibrate the picture against the color swatch and maybe get a reasonable color match.
I never completed it, and it doesn&rsquo;t implement any of the calibration. But it lets you take a picture and get the closest match from a database I compiled.
None of this is remotely accurate, but it was a fun project of making a simple web app.</p>]]></description>
</item>
<item>
    <title>A Self-Tiling Tile Set</title>
    <link>https://beta.afriskito.net/posts/a-self-tiling-tile-set/</link>
    <pubDate>Wed, 22 Nov 2023 22:03:55 -0700</pubDate>
    <author>Orson Jones</author>
    <guid>https://beta.afriskito.net/posts/a-self-tiling-tile-set/</guid>
    <description><![CDATA[<p><a href="https://www.futilitycloset.com" target="_blank" rel="noopener noreffer ">Futility Closet</a> recently posted about
<a href="https://www.futilitycloset.com/2023/11/22/a-self-tiling-tile-set/" target="_blank" rel="noopener noreffer ">a recursive set of tiles</a>
from Lee Sallows. It describes 9 shapes that are defined by different arrangements of a roughly Utah
shaped piece. They can be combined into three identical shapes that are 3 times larger than the
base pieces.</p>
<p>One interesting thing I found, that wasn&rsquo;t described in the post, is that all three final pieces are
composed of the same arrangement of the smallest pieces.</p>]]></description>
</item>
<item>
    <title>An Elevation Puzzle</title>
    <link>https://beta.afriskito.net/posts/an-elevation-puzzle/</link>
    <pubDate>Wed, 27 Sep 2023 17:46:50 -0600</pubDate>
    <author>Orson Jones</author>
    <guid>https://beta.afriskito.net/posts/an-elevation-puzzle/</guid>
    <description><![CDATA[<p><a href="https://www.futilitycloset.com" target="_blank" rel="noopener noreffer ">Futility Closet</a> recently posted <a href="https://www.futilitycloset.com/2023/09/26/an-elevation-puzzle/" target="_blank" rel="noopener noreffer ">a puzzle</a>
from the October 1958 issue of <em>Eureka</em>.
It poses the question if the top view of an object is a circle and the front view is the bottom half of a circle,
what does the side view look like?
The published solution indicates a V shape, but after thinking it through, it appears to be upside down.
This <a href="https://xkcd.com/356/" target="_blank" rel="noopener noreffer ">sniped me</a> enough that I modeled it in 3d and printed out the object.</p>]]></description>
</item>
<item>
    <title>Bridge Crossing</title>
    <link>https://beta.afriskito.net/posts/bridge-crossing/</link>
    <pubDate>Sat, 03 Jun 2023 10:30:50 -0600</pubDate>
    <author>Orson Jones</author>
    <guid>https://beta.afriskito.net/posts/bridge-crossing/</guid>
    <description><![CDATA[<p>I came across a puzzle that went something like this:</p>
<p>If someone crosses a bridge by taking 5 steps forward followed by 4 steps back. (Taking one step per plank.)
How many times would they need to repeat that pattern before they reached the other side?</p>
<p>I found it interesting and after solving it for myself, I decided to turn it into a game to prove
the solution to someone who didn&rsquo;t understand my solution.</p>]]></description>
</item>
<item>
    <title>Boise Tower</title>
    <link>https://beta.afriskito.net/posts/boise-tower/</link>
    <pubDate>Thu, 06 Oct 2016 12:41:32 -0600</pubDate>
    <author>Orson Jones</author>
    <guid>https://beta.afriskito.net/posts/boise-tower/</guid>
    <description><![CDATA[<p>As the Zions Bank building was going up, I took progress pictures of it being built.</p>
<p></p>]]></description>
</item>
</channel>
</rss>
