<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>A Maker's Exploration of Generative Art, AI, Coding on anotherjesse.com</title><link>https://anotherjesse.com/</link><description>Recent content in A Maker's Exploration of Generative Art, AI, Coding on anotherjesse.com</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 07 Mar 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://anotherjesse.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Phyllotactic FFT Spirals</title><link>https://anotherjesse.com/sketches/phyllotactic-fft/</link><pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/phyllotactic-fft/</guid><description>&lt;p&gt;Modifying phyllotactic patterns using fft of microphone input.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;p&gt;Note: to use the mic, the browser requires a user interaction &amp;ndash; Click the rotating circle to begin!&lt;/p&gt;
&lt;h2 id="using-the-microphone---learning-to-love-the-fft"&gt;Using the microphone - learning to love the FFT&lt;/h2&gt;
&lt;p&gt;The FFT (see &lt;a href="https://www.youtube.com/watch?v=spUNpyF58BY"&gt;3b1b - But what is the Fourier Transform?&lt;/a&gt; ) converts a signal from the time domain to the frequency domain&amp;hellip;&lt;/p&gt;
&lt;p&gt;What?&lt;/p&gt;
&lt;p&gt;Time domain means the value the microphone is receiving at each point in time.&lt;/p&gt;</description></item><item><title>Experimenting With Transformers &amp; Nokens</title><link>https://anotherjesse.com/posts/phi-nokens/</link><pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/phi-nokens/</guid><description>&lt;p&gt;Sometimes a single word isn&amp;rsquo;t enough. What if you could blend tokens or use non-tokens (aka nokens&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;)?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s explore these ideas, learn more about transformers: the architecture and Hugging Face library.&lt;/p&gt;
&lt;h2 id="installing--setup"&gt;Installing &amp;amp; Setup&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m going to use Microsoft&amp;rsquo;s &lt;a href="https://huggingface.co/microsoft/phi-2"&gt;Phi-2&lt;/a&gt; as it is smaller than Mistral / Llama2. The ideas &lt;em&gt;should&lt;/em&gt; transfer to other transformer models.&lt;/p&gt;
&lt;p&gt;After &lt;code&gt;pip install transformers torch&lt;/code&gt;, we can load our language model to experiment with using the Hugging Face library.&lt;/p&gt;</description></item><item><title>Proteus</title><link>https://anotherjesse.com/posts/proteus/</link><pubDate>Sun, 03 Mar 2024 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/proteus/</guid><description>&lt;h3 id="parti-prompt-disclaimer"&gt;Parti Prompt Disclaimer&lt;/h3&gt;
&lt;p&gt;Many of these prompts are challenging for current generative imagery models. Compare: &lt;code&gt;253&lt;/code&gt; &amp;ldquo;a motorcycle&amp;rdquo; vs &lt;code&gt;999&lt;/code&gt; &amp;ldquo;a black background with a large yellow square&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Drag the slider (or type a number between 0 and 1632) to change the prompt. Additionally, you can click any image to see the full-size verison.&lt;/p&gt;
&lt;div class="parti-viewer"&gt;
&lt;script type="application/json"&gt;
{
 "mode": "grid",
 "models": [
 {"name": "Proteus V0.4 Lightning", "path": "proteus-v0.4-lightning", "default": true},
 {"name": "SDXL", "path": "sdxl", "default": true}
 ],
 "promptMax": 1631,
 "promptDefault": 40,
 "seeds": 4,
 "rows": "models",
 "thumbToggle": false,
 "tsv": "PartiPrompts.tsv"
}
&lt;/script&gt;
&lt;/div&gt;
&lt;script src="https://anotherjesse.com/js/parti-viewer.js" defer&gt;&lt;/script&gt;</description></item><item><title>Playground V2.5</title><link>https://anotherjesse.com/posts/playground-v25/</link><pubDate>Tue, 27 Feb 2024 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/playground-v25/</guid><description>&lt;h2 id="note"&gt;Note&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m Still rendering Parti Prompt with Playground &amp;hellip; this is a preview&lt;/p&gt;
&lt;h3 id="parti-prompt-disclaimer"&gt;Parti Prompt Disclaimer&lt;/h3&gt;
&lt;p&gt;Many of these prompts are challenging for current generative imagery models. Compare: &lt;code&gt;253&lt;/code&gt; &amp;ldquo;a motorcycle&amp;rdquo; vs &lt;code&gt;999&lt;/code&gt; &amp;ldquo;a black background with a large yellow square&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Drag the slider (or type a number between 0 and 1632) to change the prompt. Additionally, you can click any image to see the full-size verison.&lt;/p&gt;
&lt;div class="parti-viewer"&gt;
&lt;script type="application/json"&gt;
{
 "mode": "grid",
 "models": [
 {"name": "SDXL", "path": "sdxl", "default": true},
 {"name": "Playground 2.5", "path": "playground-25", "default": true}
 ],
 "promptMax": 1631,
 "promptDefault": 40,
 "seeds": 4,
 "rows": "seeds",
 "thumbToggle": true,
 "tsv": "PartiPrompts.tsv"
}
&lt;/script&gt;
&lt;/div&gt;
&lt;script src="https://anotherjesse.com/js/parti-viewer.js" defer&gt;&lt;/script&gt;</description></item><item><title>SDXL lightning</title><link>https://anotherjesse.com/posts/sdxl-lightning/</link><pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/sdxl-lightning/</guid><description>&lt;p&gt;Today ByteDance released SDXL Lightning (adding to the family of distilled/faster SDXL versions Turbo, LCM). From the &lt;a href="https://arxiv.org/abs/2402.13929"&gt;paper&lt;/a&gt;, we can improvements in the quality and how close it matches SDXL.&lt;/p&gt;
&lt;p&gt;&lt;img src="from-paper.png" alt="results from paper"&gt;&lt;/p&gt;
&lt;h2 id="exploring-parti-prompts"&gt;Exploring Parti Prompts&lt;/h2&gt;
&lt;p&gt;I recently rendered SDXL as part of &lt;a href="https://anotherjesse.com/posts/parti-prompts"&gt;parti prompts&lt;/a&gt;, and Lightning is quick - let&amp;rsquo;s make it easy to compare.&lt;/p&gt;
&lt;p&gt;Below, each row is a different (initial noise) seed, whereas columns are different models (SDXL, Lightning 1 step, &amp;hellip;)&lt;/p&gt;</description></item><item><title>Parti Prompts</title><link>https://anotherjesse.com/posts/parti-prompts/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/parti-prompts/</guid><description>&lt;div class="parti-viewer"&gt;
&lt;script type="application/json"&gt;
{
 "mode": "single",
 "models": [
 {"name": "sd15", "path": "sd15"},
 {"name": "sd21", "path": "sd21"},
 {"name": "sdxl", "path": "sdxl"},
 {"name": "sdxl-lcm", "path": "sdxl-lcm"},
 {"name": "sdxl-lightning-unet-1", "path": "sdxl-lightning-unet-1"},
 {"name": "sdxl-lightning-unet-2", "path": "sdxl-lightning-unet-2"},
 {"name": "sdxl-lightning-unet-4", "path": "sdxl-lightning-unet-4"},
 {"name": "sdxl-lightning-unet-8", "path": "sdxl-lightning-unet-8"},
 {"name": "sdxl-turbo", "path": "sdxl-turbo"},
 {"name": "stable-cascade", "path": "stable-cascade", "default": true}
 ],
 "promptMax": 1631,
 "promptDefault": 321,
 "seeds": 4,
 "thumbToggle": true,
 "tsv": "PartiPrompts.tsv"
}
&lt;/script&gt;
&lt;/div&gt;
&lt;script src="https://anotherjesse.com/js/parti-viewer.js" defer&gt;&lt;/script&gt;

&lt;h2 id="stable-cascade"&gt;Stable Cascade&lt;/h2&gt;
&lt;h2 id="sdxl"&gt;SDXL&lt;/h2&gt;
&lt;p&gt;SDXL images were generated with 25 steps using the FP16 variant&lt;/p&gt;</description></item><item><title>The Stable Cascade 2 Step</title><link>https://anotherjesse.com/posts/stable-cascade/</link><pubDate>Sun, 18 Feb 2024 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/stable-cascade/</guid><description>&lt;p&gt;Stabilty AI has shared an early release of Stable Cascade (built upon Würstchen). Whereas Stable Diffusion uses a single UNet followed by a VAE, this model uses 2 UNets - resulting in improvements in inference time and training resources.&lt;/p&gt;
&lt;div id="cascade-viewer"&gt;&lt;/div&gt;
&lt;script src="cascade.js" defer&gt;&lt;/script&gt;</description></item><item><title>Rorschach Test For LLaVA LLM</title><link>https://anotherjesse.com/posts/llava-rorschach/</link><pubDate>Sat, 30 Dec 2023 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/llava-rorschach/</guid><description>&lt;p&gt;LLaVA works by teaching an LLM (Llama2) to &amp;ldquo;understand&amp;rdquo; embeddings from an image model (CLIP). What happens if you replace the embeddings with randomness and ask the LLM questions about what it sees?&lt;/p&gt;
&lt;h2 id="hacking-llava"&gt;Hacking LLaVA&lt;/h2&gt;
&lt;p&gt;After loading the LLaVA model, we can inject a function that runs after clip embed but before projection to the LLMs token latent space.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# load LLaVA using HF transformers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tokenizer&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; model&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; image_processor&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; context_len &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; load_pretrained_model&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;liuhaotian/llava-v1.5-13b&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; model_name&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;llava-v1.5-13b&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; model_base&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; load_8bit&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; load_4bit&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# inject hook that allows modifying the generated clip embed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tower &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; model&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;get_vision_tower&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tower&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;register_forward_hook&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;random_forward_hook&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# if global alter_seed set, override embed with randn of same shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alter_seed &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;random_forward_hook&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;module&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;input&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; output&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#0550ae"&gt;not&lt;/span&gt; alter_seed &lt;span style="color:#0550ae"&gt;is&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;overriding image embedding with seed: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; alter_seed&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;manual_seed&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;alter_seed&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; output&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;randn_like&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;output&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; output
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can try it out by running &lt;a href="https://replicate.com/anotherjesse/llava-lies"&gt;llava-lies on replicate&lt;/a&gt;. This model still asks for an image, to simplify the modification of LLaVA&amp;rsquo;s code. The hook &lt;code&gt;random_forward_hook&lt;/code&gt; above replaces the output with normalized seeded noise.&lt;/p&gt;</description></item><item><title>Kandinksy 3</title><link>https://anotherjesse.com/posts/kandinsky3/</link><pubDate>Wed, 22 Nov 2023 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/kandinsky3/</guid><description>&lt;p&gt;Kandinsky 3 is the latest from the team that brought previous versions of the model.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We conducted a lot of experiments on choosing an architecture and did a lot of work with data to make text understanding and generation quality better, and the architecture itself simpler and more concise. We also made our model more “domestic”: now it is much better oriented in the Russian and Soviet cultural field.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="architecture.png" alt="Flan-UL2 + Unet"&gt;&lt;/p&gt;</description></item><item><title>Lazy AI Coding Bots</title><link>https://anotherjesse.com/posts/lazy-coders/</link><pubDate>Sat, 03 Dec 2022 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/lazy-coders/</guid><description>&lt;p&gt;I&amp;rsquo;ve added a new command to my telegram bot: &lt;code&gt;js&lt;/code&gt;. This command will ask GPT3 to generate javascript code and then run it.&lt;/p&gt;
&lt;p&gt;For instance if I say ask it to generate a function to reverse a string, it will create function that reverses the letters one at a time.&lt;/p&gt;
&lt;p&gt;&lt;img src="reverse.png" alt="GPT3 defines a function - the bot evaluates it and returns the result"&gt;&lt;/p&gt;
&lt;p&gt;As GPT3 tended to respond with code that defined functions, I realized I could build up a library of functions! And by sending the list of functions as context for further runs, further functions could be based on existing functions.&lt;/p&gt;</description></item><item><title>Being Misunderstood</title><link>https://anotherjesse.com/posts/being-misunderstood/</link><pubDate>Tue, 05 Apr 2022 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/being-misunderstood/</guid><description>&lt;p&gt;I really enjoyed the David Whyte&amp;rsquo;s &lt;a href="https://www.soundstrue.com/products/clear-mind-wild-heart"&gt;Clear Mind, Wild Heart&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;About 2/3 in, he said something that reshaped how I go about exploring the world.&lt;/p&gt;
&lt;p&gt;Being ok with being misunderstood at the beginning is important. New ideas need to be protected and nurtured.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;when you actually tell others what your secret desires are - in your work, in your life.&lt;/p&gt;
&lt;p&gt;a good diagnostic feature that you are doing something unique - something that is true to the
complexion your character - is that &lt;strong&gt;other people should not
understand entirely what you are doing&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Programmable Cat</title><link>https://anotherjesse.com/posts/programmable-cat/</link><pubDate>Sat, 09 Oct 2021 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/programmable-cat/</guid><description>&lt;h2 id="idea"&gt;Idea&lt;/h2&gt;
&lt;p&gt;The family was excited to decorate to halloween this year, and several of the decorations came with &lt;em&gt;Try Me&lt;/em&gt; buttons. The buttons were external to the decoration - and seem to be simple momentary switches (when they are pressed the circuit is closed for the duration of the button press).&lt;/p&gt;
&lt;p&gt;It would be neat to add these to our programmable space using a tiny ESP-8266 microcontroller / MQTT.&lt;/p&gt;
&lt;p&gt;Based on success of connecting &lt;a href="https://anotherjesse.com/posts/miffy-super-powers"&gt;Miffy&lt;/a&gt; to our local programmable space, this seemed approachable for an electronics novice like me.&lt;/p&gt;</description></item><item><title>Lines</title><link>https://anotherjesse.com/sketches/lines/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/lines/</guid><description>&lt;p&gt;A line is a series of points &amp;hellip; and moving those points with noise is a fun way to animate them.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;script type='text/javascript' src="sketch.js"&gt;&lt;/script&gt;
&lt;script type='text/javascript' src="../p5.min.js"&gt;&lt;/script&gt;
&lt;p&gt;I like it, but didn&amp;rsquo;t (yet) know how to make it loop seamlessly. (see &lt;a href="https://anotherjesse.com/posts/seamless-loops"&gt;Seamless loops&lt;/a&gt; for more)&lt;/p&gt;</description></item><item><title>Mouse Color Worm</title><link>https://anotherjesse.com/sketches/mouse-color-worm/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/mouse-color-worm/</guid><description>&lt;p&gt;The worm grows randomly, but the color is based on the mouse position. By using HSB (Hue, Saturation, Brightness) color space, the user can control the color of the worm by moving the mouse.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;
&lt;p&gt;During setup we need to switch to HSB color space with a maximum value of 1.0 for each component:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;colorMode&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;HSB&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1.0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then in the draw function, scale the &lt;code&gt;mouseX&lt;/code&gt; and &lt;code&gt;mouseY&lt;/code&gt; values to set the color of the worm.&lt;/p&gt;</description></item><item><title>Video Color Halftones</title><link>https://anotherjesse.com/sketches/video-color-halftones/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/video-color-halftones/</guid><description>&lt;p&gt;Webcam filter that uses a grid of circles to create a halftone effect. The color / size of the circles is determined by the video pixel color and intensity.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;p&gt;Builds upload the &lt;a href="../video-halftones/"&gt;Video Halftones&lt;/a&gt; setting a color of circle to the color of the video pixel.&lt;/p&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;</description></item><item><title>Video Diff Loops</title><link>https://anotherjesse.com/sketches/video-diff-loops/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/video-diff-loops/</guid><description>&lt;p&gt;Mixed together two video loops, with the difference between the two loops shown.&lt;/p&gt;
&lt;p&gt;Pressing and holding &lt;code&gt;1&lt;/code&gt; and &lt;code&gt;2&lt;/code&gt; to record two different loops. The difference between the two loops will be shown.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;</description></item><item><title>Video Filters</title><link>https://anotherjesse.com/sketches/video-filters/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/video-filters/</guid><description>&lt;p&gt;Exploring filters applied to images captured from the webcam. Inspired by &lt;a href="https://www.youtube.com/watch?v=oLiaUEKsRws"&gt;this coding train&lt;/a&gt; video.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;
&lt;p&gt;This is done using the &lt;code&gt;filter&lt;/code&gt; feature in p5.js which applies the filter to the entire canvas. Since I&amp;rsquo;m additively applying the filters - the upper left image will have all the filters applied, and the bottom right will only have &lt;code&gt;erode&lt;/code&gt; applied.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;var&lt;/span&gt; &lt;span style="color:#1f2328"&gt;img&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;capture&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;get&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;filter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;THRESHOLD&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;filter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;GRAY&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;filter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;POSTERIZE&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;filter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;ERODE&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Video Four Tint</title><link>https://anotherjesse.com/sketches/video-four-tint/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/video-four-tint/</guid><description>&lt;p&gt;Tint modifies the color of future image operations.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;
&lt;p&gt;I was surprised that &lt;code&gt;tint&lt;/code&gt; impacts the future &lt;code&gt;image&lt;/code&gt; calls, while &lt;code&gt;filter&lt;/code&gt; modifies the existing canvas. Compare with &lt;a href="../video-filters"&gt;Video Filters&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;noTint&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;tint&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;255&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt; &lt;span style="color:#57606a"&gt;// Blue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;tint&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;255&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt; &lt;span style="color:#57606a"&gt;// Red
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;tint&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;255&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt; &lt;span style="color:#57606a"&gt;// Green
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;image&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;img&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_w&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;video_h&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Video Grid Delay</title><link>https://anotherjesse.com/sketches/video-grid-delay/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/video-grid-delay/</guid><description>&lt;p&gt;A fun little webcam video effect. By capturing video frames, and playing them back in a grid with increasing delay, we can create a kind of &amp;ldquo;time lapse&amp;rdquo; effect.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;p&gt;This code is based on a tutorial by &lt;a href="https://www.youtube.com/channel/UCvjgXvBlbQiydffZU7m1_aw"&gt;The Coding Train&lt;/a&gt;.&lt;/p&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;</description></item><item><title>Video Grid Random Delay</title><link>https://anotherjesse.com/sketches/video-grid-random-delay/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/video-grid-random-delay/</guid><description>&lt;p&gt;A slight (but FUN!) tweak of &lt;a href="../video-grid-delay"&gt;Video Grid Delay&lt;/a&gt; where the delay is randomized.&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;</description></item><item><title>Video Halftones</title><link>https://anotherjesse.com/sketches/video-halftones/</link><pubDate>Mon, 05 Nov 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/sketches/video-halftones/</guid><description>&lt;p&gt;Exploring using the webcam to create a halftone effect, like ye olde newspaper&amp;hellip;&lt;/p&gt;
&lt;div id="demo"&gt;&lt;/div&gt;
&lt;script src="../p5.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.dom.min.js"&gt;&lt;/script&gt;
&lt;script src="../addons/p5.sound.min.js"&gt;&lt;/script&gt;
&lt;script src="sketch.js"&gt;&lt;/script&gt;</description></item><item><title>Alien Love Worms</title><link>https://anotherjesse.com/posts/alien-love-worm/</link><pubDate>Sun, 28 Oct 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/alien-love-worm/</guid><description>&lt;h1 id="inspiration"&gt;Inspiration&lt;/h1&gt;
&lt;p&gt;Around the time the glowforge was announced, I saw some inspiring art that
had many layered cuts. I thought they were paper, turns out they are
by an artist named &lt;a href="https://gabrielschama.com"&gt;Gabriel Schama&lt;/a&gt;, and are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;huge! many are six to eight feet tall/wide&lt;/li&gt;
&lt;li&gt;cut in a (thin) plywood!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="gabriel-website.png" alt="screenshot of gabrielschama.com"&gt;&lt;/p&gt;
&lt;h1 id="presenting-alien-love-worm"&gt;Presenting &amp;ldquo;Alien Love Worm&amp;rdquo;&lt;/h1&gt;
&lt;p&gt;For my first design I wanted to do a paper cut. Living near the
coast, I wanted to encorporate a whale tail, waves, a peace sign and
hearts.&lt;/p&gt;</description></item><item><title>Seamless Loops</title><link>https://anotherjesse.com/posts/seamless-loops/</link><pubDate>Sun, 28 Oct 2018 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/seamless-loops/</guid><description>&lt;p&gt;Using this &lt;a href="https://necessarydisorder.wordpress.com/2017/11/15/drawing-from-noise-and-then-making-animated-loopy-gifs-from-there/"&gt;tutorial in processing&lt;/a&gt;,
and &lt;a href="https://twitter.com/golan"&gt;Golan Levin&lt;/a&gt;&amp;rsquo;s sketch in processing,
started to understand how to make seamlessly looping animations. I took Golan&amp;rsquo;s
awesome demo and ported it to p5.js (live demo). This gif made the technique click for me.&lt;/p&gt;
&lt;p&gt;The basic idea is think of the random values as locations on a clock face. This gives
1D noise over time (shown in the image above). For 2D you can use 3D noise space
and think about a line sweeping through.&lt;/p&gt;</description></item><item><title>Miffy Super Powers</title><link>https://anotherjesse.com/posts/miffy-super-powers/</link><pubDate>Fri, 23 Dec 2016 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/posts/miffy-super-powers/</guid><description>&lt;p&gt;When my oldest daughter was born, my dear friend &lt;a href="https://twitter.com/bs"&gt;Britt Selvitelle&lt;/a&gt; gave us a gift of &lt;a href="https://www.mrmaria.com/miffy-xl-lamp/"&gt;Miffy Lamp&lt;/a&gt; from Japan.&lt;/p&gt;
&lt;p&gt;&lt;img src="miffy.png" alt="Miffy Lamp"&gt;&lt;/p&gt;
&lt;h1 id="my-problems-with-power"&gt;My problems with power&lt;/h1&gt;
&lt;p&gt;Miffy had two &amp;ldquo;problems&amp;rdquo;, the first being the power cord for the lamp didn&amp;rsquo;t fit into american outlets. The second was the bulb being incandescent consumed lots of power and created lots of heat (and rather bright if I remember correctly).&lt;/p&gt;
&lt;h1 id="solution-lets-put-it-on-the-internet"&gt;Solution: Let&amp;rsquo;s put it on the internet!&lt;/h1&gt;
&lt;p&gt;Having learned about ESP-8266, a cheap &amp;amp; tiny microcontroller that has WiFi, I thought it would be cool to give the bunny an API.&lt;/p&gt;</description></item><item><title>About</title><link>https://anotherjesse.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/about/</guid><description>&lt;p style="text-align:center;"&gt;
 &lt;img src="https://anotherjesse.com/profile.jpg" alt="Jesse Andrews" style="width:160px;height:160px;object-fit:cover;border-radius:50%;"&gt;
&lt;/p&gt;
&lt;p&gt;Maker of software and startups&lt;/p&gt;
&lt;h2 id="who-am-i"&gt;Who am I?&lt;/h2&gt;
&lt;p&gt;I am another Jesse&lt;br&gt;
I like to make things&lt;br&gt;
I like to learn by making things&lt;br&gt;
Things of beauty &amp;hellip; to me&lt;br&gt;
Some of those I will share here&lt;/p&gt;
&lt;h3 id="where-to-find-me-elsewhere"&gt;Where to find me elsewhere&lt;/h3&gt;
&lt;p style="text-align:center;"&gt;
 &lt;a href="https://github.com/anotherjesse"&gt;GitHub&lt;/a&gt; &amp;middot;
 &lt;a href="https://twitter.com/anotherjesse"&gt;Twitter&lt;/a&gt; &amp;middot;
 &lt;a href="https://linkedin.com/in/anotherjesse"&gt;LinkedIn&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;You can read about &lt;a href="https://anotherjesse.com/open-source/"&gt;open source&lt;/a&gt; projects I&amp;rsquo;ve created/maintained.&lt;/p&gt;</description></item><item><title>Open Source Projects</title><link>https://anotherjesse.com/open-source/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://anotherjesse.com/open-source/</guid><description>&lt;p&gt;A list of open source projects I&amp;rsquo;ve either co-created or maintained.&lt;/p&gt;
&lt;h1 id="openstack--cloud-computing"&gt;OpenStack ~ cloud computing&lt;/h1&gt;
&lt;p&gt;It all started when &lt;a href="https://twitter.com/jmckenty"&gt;Joshua McKenty&lt;/a&gt; called me and asks if I want to
help on open data projects at NASA.&lt;/p&gt;
&lt;p&gt;We spent over a year trying to cobble together existing open source
tools to enable scientists/researchers/engineers/developers. We
wanted to enable them to do their awesome science without focusing on
all the drudgery of running a continous integration service, online
code repostiories, application servers, online datasets, etc.&lt;/p&gt;</description></item></channel></rss>