<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaScript Archives - Joshua Woehlke</title>
	<atom:link href="https://joshuawoehlke.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://joshuawoehlke.com/category/javascript/</link>
	<description>Developer</description>
	<lastBuildDate>Sun, 25 Jan 2026 09:22:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>openHAB scripts with Rhasspy MQTT</title>
		<link>https://joshuawoehlke.com/openhab-scripts-with-rhasspy-mqtt/</link>
					<comments>https://joshuawoehlke.com/openhab-scripts-with-rhasspy-mqtt/#respond</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Wed, 09 Feb 2022 04:11:17 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">https://joshuawoehlke.com/?p=1290</guid>

					<description><![CDATA[I&#8217;m in the process of replacing my voice assistants with a more private, home-based solution that keeps everything inside the local network. I had originally decided on using Rhasspy in a server/satellite configuration to collect voice commands, and Home Assistant to manage turning things on and off. I changed to openHAB after trying and failing [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/openhab-scripts-with-rhasspy-mqtt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CommonJS Modules in YUIDoc</title>
		<link>https://joshuawoehlke.com/commonjs-modules-in-yuidoc/</link>
					<comments>https://joshuawoehlke.com/commonjs-modules-in-yuidoc/#respond</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Mon, 04 Mar 2019 17:25:38 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<guid isPermaLink="false">http://joshuawoehlke.com/?p=915</guid>

					<description><![CDATA[I love using YUIDoc for my JavaScript projects because the setup is dead simple and the default theme has everything I need, including search and good markup for SEO. It&#8217;s no secret it&#8217;s a little outdated, though (does Yahoo! even still exist?). If you&#8217;re using more modern JavaScript practices like CommonJS modules, you&#8217;ll probably run [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/commonjs-modules-in-yuidoc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Detecting Clicks on Rotated Rectangles</title>
		<link>https://joshuawoehlke.com/detecting-clicks-rotated-rectangles/</link>
					<comments>https://joshuawoehlke.com/detecting-clicks-rotated-rectangles/#comments</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Thu, 05 Jan 2017 20:48:56 +0000</pubDate>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://joshuawoehlke.com/?p=730</guid>

					<description><![CDATA[Normally in web application development, clicks are a matter of listeners. Either a click hit a thing or it didn&#8217;t. When using the HTML5 canvas, this isn&#8217;t the case. Images and features&#160;are rendered onto it, but you can&#8217;t attach a listener to them. Instead, you monitor where these elements visually reside&#160;versus where clicks land. If [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/detecting-clicks-rotated-rectangles/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Stickerbomb JS Image Editor</title>
		<link>https://joshuawoehlke.com/stickerbomb-js-image-editor/</link>
					<comments>https://joshuawoehlke.com/stickerbomb-js-image-editor/#comments</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Wed, 04 Jan 2017 18:50:28 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://joshuawoehlke.com/?p=673</guid>

					<description><![CDATA[My team does a holiday card promotion each year, which gives us a chance to create something unusual. This year we decided on a &#8220;create your own holiday card&#8221; image editor idea. We&#8217;d specify a couple of backgrounds and design a bunch&#160;of &#8220;sticker&#8221; graphics, then users could arrange these how they liked&#160;and print off a&#160;foldable [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/stickerbomb-js-image-editor/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Sorting Pokémon into Boxes &#8212; with Style</title>
		<link>https://joshuawoehlke.com/sorting-pokemon-boxes/</link>
					<comments>https://joshuawoehlke.com/sorting-pokemon-boxes/#respond</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Thu, 15 Sep 2016 00:30:04 +0000</pubDate>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://joshuawoehlke.com/?p=646</guid>

					<description><![CDATA[Update:&#160; This was shut down years ago. It only ended up getting like 8 users lol. Still, fun project. The most important thing in life is to have your pokémon arranged neatly. That&#8217;s a fact. While I understand you can just rename boxes with numbers so that Box 1 is 1-30 and Box 2 is [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/sorting-pokemon-boxes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Simplifying the T4 JS Layout Processor</title>
		<link>https://joshuawoehlke.com/terminalfour-javascript-processor/</link>
					<comments>https://joshuawoehlke.com/terminalfour-javascript-processor/#respond</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Fri, 24 Jul 2015 19:56:33 +0000</pubDate>
				<category><![CDATA[GitHub]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://joshuawoehlke.com/?p=447</guid>

					<description><![CDATA[Update for 2024: 9 years later this library is still in daily use and is virtually unchanged. If you&#8217;re using T4, we&#8217;ve run a very large site with all the code running through this for almost a decade so I&#8217;m pretty confident in saying this one&#8217;s a keeper. Where I work, we use TERMINALFOUR as [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/terminalfour-javascript-processor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Realtime Tracking of Elio Motors Crowdfunding</title>
		<link>https://joshuawoehlke.com/elio-motors-crowdfunding/</link>
					<comments>https://joshuawoehlke.com/elio-motors-crowdfunding/#comments</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Wed, 01 Jul 2015 20:38:08 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<guid isPermaLink="false">http://joshuawoehlke.com/?p=424</guid>

					<description><![CDATA[Update: Elio Tracker has been voluntarily deactivated due to some unexpected effects it could have had regarding Regulation A+. This form of investment is new and comes with some unique issues that a public data tracker like this brought to light. Further updates on the progress of campaigns will not be issued by this tracker, [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/elio-motors-crowdfunding/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Invoicing with Sendy</title>
		<link>https://joshuawoehlke.com/invoicing-with-sendy/</link>
					<comments>https://joshuawoehlke.com/invoicing-with-sendy/#respond</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Wed, 15 Apr 2015 16:17:57 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://45.55.153.213/?p=341</guid>

					<description><![CDATA[Update: The Sendy Invoicing add-on was added to Sendy&#8217;s API docs as a third party resource, but is now many, many years out of date and is likely no longer there. This article is more for historic reference. Our organization has needed a more user-accessible mass email solution for some time, so when we saw [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/invoicing-with-sendy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Patching TERMINALFOUR Site Manager 8 Direct Edit</title>
		<link>https://joshuawoehlke.com/patching-terminalfour-site-manager-8-direct-edit/</link>
					<comments>https://joshuawoehlke.com/patching-terminalfour-site-manager-8-direct-edit/#respond</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Tue, 31 Mar 2015 21:39:56 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://45.55.153.213/?p=277</guid>

					<description><![CDATA[Why patch? Unlike WordPress, Drupal, and Joomla!, TERMINALFOUR is very particular about where content appears in a template. The concept of loops is still present, but handled in an unusual manner. You get one main loop, which pulls in all page content marked as the text/html format, and then a predefined set of additional loops [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/patching-terminalfour-site-manager-8-direct-edit/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A Raspberry Pi clock for your kitchen, and nowhere else</title>
		<link>https://joshuawoehlke.com/a-raspberry-pi-clock-for-your-kitchen-and-nowhere-else/</link>
					<comments>https://joshuawoehlke.com/a-raspberry-pi-clock-for-your-kitchen-and-nowhere-else/#respond</comments>
		
		<dc:creator><![CDATA[administrator]]></dc:creator>
		<pubDate>Sat, 14 Feb 2015 04:09:08 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<guid isPermaLink="false">http://45.55.153.213/?p=270</guid>

					<description><![CDATA[My kitchen was missing something. I&#8217;d looked at clocks and artwork, but none of the options were simultaneously affordable and nerdy enough for my liking. What I needed was a way to incorporate my love of thrift store finds and coding into something functional, attractive, and unique that would cause my visitors to be delighted [&#8230;]]]></description>
		
					<wfw:commentRss>https://joshuawoehlke.com/a-raspberry-pi-clock-for-your-kitchen-and-nowhere-else/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
