<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Will Warren</title><link>https://willwarren.com/</link><description>Recent content on Will Warren</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 12 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://willwarren.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Building My Own CPU - Part 3: Just Like the Simulations (It Was Not Just Like The Simulations)</title><link>https://willwarren.com/2026/03/12/building-my-own-cpu-part-3-from-simulation-to-hardware/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://willwarren.com/2026/03/12/building-my-own-cpu-part-3-from-simulation-to-hardware/</guid><description/></item><item><title>Building My Own CPU - Part 2: Simulation</title><link>https://willwarren.com/2025/08/14/building-my-own-cpu-wcpu-part-2-simulation/</link><pubDate>Thu, 14 Aug 2025 00:00:00 +0000</pubDate><guid>https://willwarren.com/2025/08/14/building-my-own-cpu-wcpu-part-2-simulation/</guid><description/></item><item><title>Building My Own CPU - Part 1</title><link>https://willwarren.com/2025/04/29/building-my-own-cpu-wcpu-part-1/</link><pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate><guid>https://willwarren.com/2025/04/29/building-my-own-cpu-wcpu-part-1/</guid><description/></item><item><title>I Made a Little USB-C Power Supply for Breadboards</title><link>https://willwarren.com/2024/10/07/i-made-little-usb-c-power-supply-breadboards/</link><pubDate>Mon, 07 Oct 2024 00:00:00 +0000</pubDate><guid>https://willwarren.com/2024/10/07/i-made-little-usb-c-power-supply-breadboards/</guid><description/></item><item><title>GARAGINATOR: a HomeKit Compatible Smart Garage Door Opener</title><link>https://willwarren.com/2023/12/07/garaginator-smart-garage-door-opener/</link><pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate><guid>https://willwarren.com/2023/12/07/garaginator-smart-garage-door-opener/</guid><description/></item><item><title>Breakout Board for the ESP32-C3-WROOM-02 Wifi Module</title><link>https://willwarren.com/2023/12/06/breakout-board-esp32-c3-wroom-02-wifi-module/</link><pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate><guid>https://willwarren.com/2023/12/06/breakout-board-esp32-c3-wroom-02-wifi-module/</guid><description/></item><item><title>Install and Use Multiple JDKs with jenv and Homebrew on macOS</title><link>https://willwarren.com/2023/11/28/install-multiple-jdks-with-jenv-and-homebrew-on-macos/</link><pubDate>Tue, 28 Nov 2023 00:00:00 +0000</pubDate><guid>https://willwarren.com/2023/11/28/install-multiple-jdks-with-jenv-and-homebrew-on-macos/</guid><description>&lt;p&gt;A short post for anyone who needs to have many different versions of Java installed on their macOS machine. It goes over
installation of &lt;code&gt;jenv&lt;/code&gt; and various &lt;code&gt;temurin&lt;/code&gt; JDKs as well as how to switch between them super easily.&lt;/p&gt;
&lt;h2 id="install-jenv"&gt;Install &lt;code&gt;jenv&lt;/code&gt; &lt;a class="heading-anchor" href="#install-jenv" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Installation via &lt;a href="https://brew.sh/"&gt;Homebrew&lt;/a&gt; is easy&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install jenv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>CURIO: an ESP-12F Based Dev Board</title><link>https://willwarren.com/2023/05/09/curio-an-esp-12f-based-dev-board/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://willwarren.com/2023/05/09/curio-an-esp-12f-based-dev-board/</guid><description/></item><item><title>Custom breakout board for the ESP-12E WiFi Module</title><link>https://willwarren.com/2023/04/08/custom-breakout-board-for-esp8266-esp12e/</link><pubDate>Sat, 08 Apr 2023 00:00:00 +0000</pubDate><guid>https://willwarren.com/2023/04/08/custom-breakout-board-for-esp8266-esp12e/</guid><description>&lt;p&gt;The ESP-12E is an awesome low-power WiFi-capable module with an ESP8266 inside.
it also supports deep sleep and so can run on batteries for a super long time.
I grabbed some of these modules from DigiKey and was sad to learn that I
couldn&amp;rsquo;t just solder some legs on it and get to testing it out.&lt;/p&gt;
&lt;p&gt;Unfortunately for prototypers and tinkerers alike, the footprint of the module
doesn&amp;rsquo;t lend itself well to experimenting with ideas on (for example)
solderless breadboards.&lt;/p&gt;
&lt;p&gt;The pitch (distance between pins) on the module is 2mm, whereas breadboards,
perfboard, veroboard, stripboard etc use 2.54mm.&lt;/p&gt;</description></item><item><title>Removing a disk from a RAIDZ</title><link>https://willwarren.com/2021/08/29/removing-disk-from-raidz/</link><pubDate>Sun, 29 Aug 2021 00:00:00 +0000</pubDate><guid>https://willwarren.com/2021/08/29/removing-disk-from-raidz/</guid><description>&lt;p&gt;You can&amp;rsquo;t remove a disk from a RAIDZ zpool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But&lt;/strong&gt; if you&amp;rsquo;re removing a disk such that you can migrate the data &lt;em&gt;away&lt;/em&gt; from
the zpool into that disk and then plan on &lt;strong&gt;destroying the zpool&lt;/strong&gt; anyway, then
read on.&lt;/p&gt;
&lt;p&gt;In my case. I wanted to switch this particular zpool over to be a simple mergerfs volume, and copy the data from the zpool into it. But I didn&amp;rsquo;t have any additional (big enough) disks laying around, so incrementally removing disks from the zpool and adding them to a mergerfs while copying the data from one to the other was the approach I used.&lt;/p&gt;</description></item><item><title>Upgrading a k3s cluster to Traefik 2</title><link>https://willwarren.com/2021/08/01/upgrading-to-traefik-2/</link><pubDate>Sun, 01 Aug 2021 00:00:00 +0000</pubDate><guid>https://willwarren.com/2021/08/01/upgrading-to-traefik-2/</guid><description>&lt;p&gt;Up until 1.20, k3s shipped with Traefik 1.7.x built in. Since 1.21, Traefik
2.4.x has been the bundled version. If you upgraded your k3s deployment from
&amp;lt;=1.20 to &amp;gt;=1.21 k3s will do nothing if it detects Traefik 1 installed. So it&amp;rsquo;s
up to the adminstrator to upgrade it. Here&amp;rsquo;s how I did it in my cluster with
some basic examples.&lt;/p&gt;</description></item><item><title>Kubernetes at Home</title><link>https://willwarren.com/2021/07/19/k8s-at-home/</link><pubDate>Mon, 19 Jul 2021 00:00:00 +0000</pubDate><guid>https://willwarren.com/2021/07/19/k8s-at-home/</guid><description>&lt;p&gt;I recently converted my Docker Swarm-based homelab to one powered by Kubernetes.&lt;/p&gt;
&lt;p&gt;My original goals with setting up Swarm were to fully leverage all the compute
and memory available on my two-node setup. Ultimately though, because of
shared storage and other complications with hardware devices, I ended up
manually scheduling containers onto specific nodes, which totally defeated the
purpose.&lt;/p&gt;
&lt;p&gt;Plus Kubernetes is cooler 😎.&lt;/p&gt;
&lt;p&gt;The process took about a week of a few hours at a time to get set up. I wanted
to write about it here because otherwise I&amp;rsquo;ll forget everything.&lt;/p&gt;</description></item><item><title>Remote Working: The New Normal?</title><link>https://willwarren.com/2020/04/01/working-from-home-the-new-normal/</link><pubDate>Wed, 01 Apr 2020 00:00:00 +0000</pubDate><guid>https://willwarren.com/2020/04/01/working-from-home-the-new-normal/</guid><description>&lt;p&gt;With the recent surge of companies &amp;ldquo;going remote&amp;rdquo; due to the COVID-19 outbreak
I thought it might be nice to share some of the things I&amp;rsquo;ve learned about remote
work over the years as well as my current setup. I&amp;rsquo;m doing this in the hope
that maybe it can help someone be more productive in these uncertain times.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been fortunate enough to be able to work from home since 2016 when I joined
Trello as a Site Reliability Engineer. Making the transition to remote work was
initially a challenge and a totally new way of thinking, but Trello was very
supportive and set me up with the skills, knowledge, and tools to succeed.&lt;/p&gt;
&lt;p&gt;What follows are some of my recommendations for the most important things you
need to succeed at remote work (most important first). If remote work truly is
the &amp;ldquo;new normal&amp;rdquo; then there are some tools and practices you can employ in order
to be fully effective at home.&lt;/p&gt;</description></item><item><title>2020 Website Refresh: More Automation Edition</title><link>https://willwarren.com/2020/03/19/2020-website-refresh-pipelines/</link><pubDate>Thu, 19 Mar 2020 00:00:00 +0000</pubDate><guid>https://willwarren.com/2020/03/19/2020-website-refresh-pipelines/</guid><description>&lt;p&gt;It&amp;rsquo;s been over 10 months since &lt;a href="https://willwarren.com/2019/05/running-kubernetes-on-ubuntu-18-04-virtualbox/"&gt;my last blog post&lt;/a&gt; on here, and I decided it was
high time for a fresh look at the site. Not to mention I&amp;rsquo;m on lockdown because
of &lt;a href="https://en.wikipedia.org/wiki/Coronavirus_disease_2019"&gt;COVID-19&lt;/a&gt;. It seemed like as good a time as any to do some spring cleaning both in real life, and online.&lt;/p&gt;</description></item><item><title>Running Kubernetes on Ubuntu 18.04</title><link>https://willwarren.com/2019/05/13/running-kubernetes-on-ubuntu-18-04-virtualbox/</link><pubDate>Mon, 13 May 2019 00:00:00 +0000</pubDate><guid>https://willwarren.com/2019/05/13/running-kubernetes-on-ubuntu-18-04-virtualbox/</guid><description/></item><item><title>The Endless Quest to Find the Perfect Note Taking Platform (2018 Edition)</title><link>https://willwarren.com/2018/07/23/endless-quest-to-find-the-best-note-taking-platform/</link><pubDate>Mon, 23 Jul 2018 00:00:00 +0000</pubDate><guid>https://willwarren.com/2018/07/23/endless-quest-to-find-the-best-note-taking-platform/</guid><description>&lt;p&gt;As I have &lt;a href="https://willwarren.com/2017/10/shell-alias-for-quick-notes/"&gt;written before&lt;/a&gt;, I’ve used just about every note solution around. Unfortunately I haven’t found a magic bullet (yet). This post is really an exploration into the pros and cons for my own personal workflow and this the things I find important when managing notes. Hopefully after doing this exploration I can actually settle on one platform for the long haul and stop procrastinating by switching note platforms and writing blog posts about it.&lt;/p&gt;</description></item><item><title>Upgrading a Hugo Website from 0.27 to 0.44</title><link>https://willwarren.com/2018/07/13/upgrading-hugo-website/</link><pubDate>Fri, 13 Jul 2018 00:00:00 +0000</pubDate><guid>https://willwarren.com/2018/07/13/upgrading-hugo-website/</guid><description>&lt;p&gt;This website is powered by Hugo - a static site generator written in Go. &lt;a href="https://willwarren.com/2015/04/05/goodbye-wordpress-hello-hugo"&gt;I&amp;rsquo;ve written about it before&lt;/a&gt; and really enjoy using it. Using Hugo, I&amp;rsquo;ve removed all the obstacles from getting content out there - now it&amp;rsquo;s just my own laziness in the way&amp;hellip;&lt;/p&gt;
&lt;p&gt;For years, I&amp;rsquo;ve had a Jenkins job that builds the site, uploads it to S3 and creates a CloudFront cache invalidation every time the Git repo changes. This all works great, but I haven&amp;rsquo;t updated the version of the &lt;code&gt;hugo&lt;/code&gt; binary in my Jenkins docker image since &lt;code&gt;v0.27.1&lt;/code&gt;. The latest version (at time of writing) is &lt;code&gt;v0.44&lt;/code&gt; so I figured I&amp;rsquo;d just try the new version and see what happens! Will my custom theme make it?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Things broke!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how I fixed them!&lt;/p&gt;</description></item><item><title>Handy shell alias for taking notes</title><link>https://willwarren.com/2017/10/18/shell-alias-for-quick-notes/</link><pubDate>Wed, 18 Oct 2017 00:00:00 +0000</pubDate><guid>https://willwarren.com/2017/10/18/shell-alias-for-quick-notes/</guid><description>&lt;p&gt;I keep my personal nodes in a bunch of Markdown files inside a Dropbox folder. I&amp;rsquo;ve used just about every note-taking app there is and ended up settling on this system. It&amp;rsquo;s served me really well so far.&lt;/p&gt;
&lt;p&gt;I have one note at the top level called &lt;code&gt;scratch.md&lt;/code&gt; that I use for quickly writing things down when I&amp;rsquo;m in a hurry. I decided to speed this up even more with this little shell alias:&lt;/p&gt;</description></item><item><title>Redis Cluster Cheatsheet</title><link>https://willwarren.com/2017/10/15/redis-cluster-cheatsheet/</link><pubDate>Sun, 15 Oct 2017 00:00:00 +0000</pubDate><guid>https://willwarren.com/2017/10/15/redis-cluster-cheatsheet/</guid><description>&lt;p&gt;Redis is very, very good at running as a Highly Available service. It has supported clustering since 3.0.0 was released back in April of 2015. Clustering many redis servers together allows for higher throughput (spreading the load), as well as redundancy (for when servers die unexpectedly).&lt;/p&gt;
&lt;p&gt;Here I have assembled some notes about common things you might want to do to your Redis cluster, and how to do them.&lt;/p&gt;</description></item><item><title>Enable SSL on Your Website in (Almost) One Click with Amazon ACM</title><link>https://willwarren.com/2016/01/23/enable-ssl-on-your-website-one-click-amazon-acm/</link><pubDate>Sat, 23 Jan 2016 00:00:00 +0000</pubDate><guid>https://willwarren.com/2016/01/23/enable-ssl-on-your-website-one-click-amazon-acm/</guid><description>&lt;figure class="float-left"&gt;&lt;img src="https://willwarren.com/images/2016/01/aws-logo.png" alt="Amazon Web Services Logo" loading="lazy"
 &gt;
&lt;/figure&gt;

&lt;p&gt;Amazon just launched a new service called &lt;em&gt;AWS Certificate Manager&lt;/em&gt; (ACM) as part of their ever growing suite of services. The new service allows for more or less one-click creation and deployment of &lt;strong&gt;free&lt;/strong&gt; SSL certificates (yes, free). I used ACM to enable SSL on this very website and it didn&amp;rsquo;t cost me a dime. Anyone can set up SSL for their own custom domain name in no time at all with this new service.&lt;/p&gt;</description></item><item><title>SQL Server: Enabling Read Committed Snapshot Isolation</title><link>https://willwarren.com/2015/10/12/sql-server-read-committed-snapshot/</link><pubDate>Mon, 12 Oct 2015 00:00:00 +0000</pubDate><guid>https://willwarren.com/2015/10/12/sql-server-read-committed-snapshot/</guid><description>&lt;p&gt;When using Microsoft SQL Server, enabling Read Committed Snapshot Isolation (RCSI) is one way to prevent reads (&lt;code&gt;SELECT&lt;/code&gt; statements) from escalating into full table locks. Depending on your application this can either be a good or a bad thing. I&amp;rsquo;m not going to get into the why&amp;rsquo;s and why-nots of each strategy - &lt;a href="https://technet.microsoft.com/en-us/library/ms188277.aspx"&gt;this is a good article to read&lt;/a&gt; if you&amp;rsquo;re having a hard time deciding which strategy to choose and why.&lt;/p&gt;
&lt;p&gt;So let&amp;rsquo;s say you want to enable RCSI on a fictional database &lt;code&gt;MyDB&lt;/code&gt;. This can be achieved by simply issuing the following T-SQL:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MyDB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;READ_COMMITTED_SNAPSHOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;GO&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To check that it was successfully enabled, you can check the System View &lt;code&gt;sys.databases&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_read_committed_snapshot_on&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;databases&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;MyDB&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If it returns &lt;code&gt;1&lt;/code&gt; then RCSI was successfully applied, you&amp;rsquo;re done! Unless&amp;hellip;&lt;/p&gt;</description></item><item><title>Creating Sublime Documentation with Markdown and Pandoc</title><link>https://willwarren.com/2015/07/08/sublime-markdown-pandoc/</link><pubDate>Wed, 08 Jul 2015 00:00:00 +0000</pubDate><guid>https://willwarren.com/2015/07/08/sublime-markdown-pandoc/</guid><description>&lt;p&gt;Documentation is one of those things that&amp;rsquo;s easy to down-prioritize to the very bottom of your todo list, even though it could be one of the most important tasks that you undertake in your day to day job.&lt;/p&gt;
&lt;p&gt;The amount of times I&amp;rsquo;ve gone back to old code, or some old system and cursed &lt;em&gt;Past Will&lt;/em&gt; for not creating any sort of documentation is beyond measure.&lt;/p&gt;</description></item><item><title>Goodbye WordPress; Hello Hugo</title><link>https://willwarren.com/2015/04/05/goodbye-wordpress-hello-hugo/</link><pubDate>Sun, 05 Apr 2015 00:00:00 +0000</pubDate><guid>https://willwarren.com/2015/04/05/goodbye-wordpress-hello-hugo/</guid><description>&lt;p&gt;As part of my regular annual website refresh, I decided to take a pretty drastic step and move from WordPress to a static site generator called &lt;a href="http://gohugo.io"&gt;Hugo&lt;/a&gt;. I&amp;rsquo;ve kept my WordPress install continually up to date since early 2009 and it served me well, but I needed a change. I also went back through the archives and culled all my old blog posts - I only kept the most trafficked and the ones that &lt;em&gt;Future Will&lt;/em&gt; might want to reference.&lt;/p&gt;</description></item><item><title>Set a Static IP Address in VMware Fusion 7</title><link>https://willwarren.com/2015/04/02/set-static-ip-address-in-vmware-fusion-7/</link><pubDate>Thu, 02 Apr 2015 00:00:00 +0000</pubDate><guid>https://willwarren.com/2015/04/02/set-static-ip-address-in-vmware-fusion-7/</guid><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; This technique also works in VMware Fusion 8!&lt;/p&gt;
&lt;p&gt;I am an OSX user, and I run a lot of VMs using &lt;a href="http://www.vmware.com/ca/en/products/fusion"&gt;VMware Fusion 7&lt;/a&gt; which I have been very happy with since I purchased it. One thing that always bugged me is that Fusion allocated a different IP address to each VM every time it started up, or resumed from a suspend. Applications that I use that have references to those IP addresses always had to be reconfigured each time I wanted to use them.&lt;/p&gt;
&lt;p&gt;More recently, I&amp;rsquo;ve been testing out lot of different type 1 Hypervisors (&lt;a href="https://www.vmware.com/products/vsphere/features/esxi-hypervisor"&gt;ESXi/vSphere&lt;/a&gt;, &lt;a href="https://www.proxmox.com/en/"&gt;Proxmox&lt;/a&gt;, &lt;a href="http://www.citrix.com/products/xenserver/overview.html"&gt;XenServer&lt;/a&gt; etc) which usually make the assumption that they will be given a static IP (which they should in the real world).&lt;/p&gt;
&lt;p&gt;So imagine my delight when I discovered that you can indeed allocate static IP addresses to VMs simply by editing a single config file.&lt;/p&gt;</description></item><item><title>Resize your EC2 instances with minimal downtime</title><link>https://willwarren.com/2014/07/15/resize-ec2-instances-minimal-downtime/</link><pubDate>Tue, 15 Jul 2014 00:00:00 +0000</pubDate><guid>https://willwarren.com/2014/07/15/resize-ec2-instances-minimal-downtime/</guid><description>&lt;p&gt;Amazon Web Services (AWS) provides a really great service-oriented way of creating virtual machines in the cloud with their Elastic Cloud Compute (EC2) system. There&amp;rsquo;s many reasons you&amp;rsquo;d want to increase or decrease the size of an EC2 instance on AWS. Maybe you misjudged how much traffic you&amp;rsquo;d be getting, or maybe you need more horsepower to finish a certain workload in a shorter time.&lt;/p&gt;
&lt;p&gt;Increased instance sizes on AWS of course &lt;a href="http://aws.amazon.com/ec2/instance-types/" target="_blank"&gt;come with a higher price tag&lt;/a&gt;, but depending on what you need them for, the increased performance could pay for itself.&lt;/p&gt;</description></item><item><title>Roll your own dynamic DNS service using Amazon Route53</title><link>https://willwarren.com/2014/07/03/roll-dynamic-dns-service-using-amazon-route53/</link><pubDate>Thu, 03 Jul 2014 00:00:00 +0000</pubDate><guid>https://willwarren.com/2014/07/03/roll-dynamic-dns-service-using-amazon-route53/</guid><description>&lt;p&gt;I used the free Dynamic DNS (DDNS) service from Dyn since about 2006 and never had a single issue with it. That all changed when they &lt;a href="http://dyn.com/blog/why-we-decided-to-stop-offering-free-accounts/"&gt;phased out their free accounts&lt;/a&gt;. I was forced to find an alternative, so I went with No-IP.com which was easy to set up and provided a great service.&lt;/p&gt;
&lt;p&gt;Recently, &lt;a href="http://www.noip.com/blog/2014/06/30/ips-formal-statement-microsoft-takedown/"&gt;No-IP has been having some legal troubles&lt;/a&gt; that seem to be revolving around Microsoft&amp;rsquo;s crusade to rid the world of spammers/scammers/malware/botnets. My hostname was one of the ones that was nixed by Microsoft&amp;rsquo;s overly broad court order. I&amp;rsquo;m sure MSFT could have just worked with No-IPs abuse team and taken down only the offending domains - but I&amp;rsquo;m not going to get into rant about that.&lt;/p&gt;
&lt;p&gt;So, I did what any self-respecting hacker does in this situation and decided to roll my own. I was already familiar with Amazon&amp;rsquo;s Route53 service so I figured why not? They have a nice REST API with granular access controls, as well as a command-line client that makes interacting with said API a breeze.&lt;/p&gt;</description></item><item><title>Notes on switching to OSX from Windows</title><link>https://willwarren.com/2014/06/19/notes-switching-osx-windows/</link><pubDate>Thu, 19 Jun 2014 00:00:00 +0000</pubDate><guid>https://willwarren.com/2014/06/19/notes-switching-osx-windows/</guid><description>&lt;p&gt;I recently got a new MacBook Pro as my new work machine. As someone who&amp;rsquo;s never used a Mac for any serious length of time, it was quite a culture shock.&lt;/p&gt;</description></item><item><title>Setting up SPF records for Google Apps and Amazon SES</title><link>https://willwarren.com/2014/04/21/setting-spf-records-google-apps-amazon-ses/</link><pubDate>Mon, 21 Apr 2014 00:00:00 +0000</pubDate><guid>https://willwarren.com/2014/04/21/setting-spf-records-google-apps-amazon-ses/</guid><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; AWS now sends email using a &lt;code&gt;Mail-From&lt;/code&gt; domain that they own and control (see &lt;a href="http://docs.aws.amazon.com/ses/latest/DeveloperGuide/spf.html"&gt;here&lt;/a&gt;). This means you don&amp;rsquo;t really need to configure your own SPF records at all. I&amp;rsquo;m leaving this post here for posterity and all the links that already point at it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The &lt;a href="http://www.openspf.org/"&gt;Sender Policy Framework (SPF)&lt;/a&gt; is an attempt to mitigate certain types of spam - specifically spam where the sender masquerades as a different sender. Technically, you can put whatever you want in the &lt;code&gt;From:&lt;/code&gt; header of an email message, so you can pretend to be sending emails from &lt;code&gt;facebook.com&lt;/code&gt; simply by putting something like &lt;code&gt;From: no-reply@facebook.com&lt;/code&gt; in your email&amp;rsquo;s headers.&lt;/p&gt;</description></item><item><title>What is Heartbleed and why do I care?</title><link>https://willwarren.com/2014/04/09/what-is-heartbleed-why-do-i-care/</link><pubDate>Wed, 09 Apr 2014 00:00:00 +0000</pubDate><guid>https://willwarren.com/2014/04/09/what-is-heartbleed-why-do-i-care/</guid><description>&lt;figure class="float-left"&gt;&lt;img src="https://willwarren.com/images/2014/04/heartbleed.png" alt="Heartbleed logo - Credit: http://heartbleed.com" loading="lazy"
 &gt;
&lt;/figure&gt;

&lt;p&gt;Heartbleed is a bug in the OpenSSL library that was publicly disclosed on April 7th, 2014 by an internet security firm called Codenomicon. With OpenSSL being the &lt;em&gt;defacto&lt;/em&gt; SSL library in both the Apache and nginx webservers, that potentially exposes &lt;a href="http://news.netcraft.com/archives/2014/04/08/half-a-million-widely-trusted-websites-vulnerable-to-heartbleed-bug.html"&gt;about two thirds of the internet&lt;/a&gt;. If we exclude the websites that don&amp;rsquo;t use SSL at all, we are left with a nice round number: &lt;em&gt;half a million&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Adding firewall rules for Oracle Database using iptables</title><link>https://willwarren.com/2014/03/18/adding-firewall-rules-for-oracle-database-using-iptables/</link><pubDate>Tue, 18 Mar 2014 00:00:00 +0000</pubDate><guid>https://willwarren.com/2014/03/18/adding-firewall-rules-for-oracle-database-using-iptables/</guid><description>&lt;p&gt;To connect to a box on your network that is running Oracle Database, you will first need to allow connections to Oracle through your firewall.&lt;/p&gt;</description></item><item><title>Apache Tomcat with SSL behind Amazon ELB</title><link>https://willwarren.com/2014/01/27/running-apache-tomcat-with-ssl-behind-amazon-elb/</link><pubDate>Mon, 27 Jan 2014 00:00:00 +0000</pubDate><guid>https://willwarren.com/2014/01/27/running-apache-tomcat-with-ssl-behind-amazon-elb/</guid><description>&lt;p&gt;If you&amp;rsquo;re running a high-availability system of some kind, chances are you are into some sort of Load Balancing. If you happen to be writing a Java app, and happen to be using Apache Tomcat as your servlet container, then this tip is for you.&lt;/p&gt;</description></item><item><title>Redacting accidental password entries from your BASH history</title><link>https://willwarren.com/2013/08/05/redacting-accidental-password-entries-from-your-bash-history/</link><pubDate>Mon, 05 Aug 2013 00:00:00 +0000</pubDate><guid>https://willwarren.com/2013/08/05/redacting-accidental-password-entries-from-your-bash-history/</guid><description>&lt;p&gt;From time to time, I have been known to accidentally type my password into a &amp;ldquo;username&amp;rdquo; prompt in a &lt;code&gt;bash&lt;/code&gt; shell. In that situation, the password you entered is now a part of your &lt;code&gt;~/.bash_history&lt;/code&gt; file forever, unless you truncate or redact it.&lt;/p&gt;</description></item><item><title>Timing PHP code using a simple stopwatch class</title><link>https://willwarren.com/2013/06/06/timing-php-code-using-a-simple-stopwatch-class/</link><pubDate>Thu, 06 Jun 2013 00:00:00 +0000</pubDate><guid>https://willwarren.com/2013/06/06/timing-php-code-using-a-simple-stopwatch-class/</guid><description>&lt;p&gt;If you&amp;rsquo;re writing a performance-focused app, it&amp;rsquo;s nice to be able to time how long various pieces of code take to execute. Below is the class I use (called &lt;code&gt;StopWatch&lt;/code&gt;) and a really simple example of how I use it.&lt;/p&gt;</description></item><item><title>Transition from glossy to matte UI elements</title><link>https://willwarren.com/2013/06/05/transition-from-glossy-to-matte-ui-elements/</link><pubDate>Wed, 05 Jun 2013 00:00:00 +0000</pubDate><guid>https://willwarren.com/2013/06/05/transition-from-glossy-to-matte-ui-elements/</guid><description>&lt;p&gt;Something I noticed as a general trend with modern technology (especially in mobile development) is a trend away from shiny, glossy UI elements like icons and buttons to a more flat, conservative style.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a really interesting discussion I found about the subject on the UX stackexchange site http://ux.stackexchange.com/questions/35576/what-explains-the-current-shift-from-glossy-uis-to-matte-uis&lt;/p&gt;</description></item><item><title>A working day's worth of mouse movement</title><link>https://willwarren.com/2013/05/23/a-working-days-worth-of-mouse-movement/</link><pubDate>Thu, 23 May 2013 00:00:00 +0000</pubDate><guid>https://willwarren.com/2013/05/23/a-working-days-worth-of-mouse-movement/</guid><description>&lt;p&gt;I recently came across a neat piece of software that maps out your mouse movements and creates artwork out of them. Check out the image below - it&amp;rsquo;s a graph of my mouse movements on my left monitor over a 9 - 5 working day. Click to see full resolution.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://willwarren.com/images/2013/05/IOGraphicaleft.png"&gt;&lt;img src="https://willwarren.com/images/2013/05/IOGraphicaleft.png" loading="lazy"
 &gt;&lt;/a&gt;
 &lt;figcaption&gt;The black circles represent times when the mouse did not move - the huge black circle was when I went for a 2 hour meeting.&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>My latest hobby</title><link>https://willwarren.com/2013/05/15/my-latest-hobby/</link><pubDate>Wed, 15 May 2013 00:00:00 +0000</pubDate><guid>https://willwarren.com/2013/05/15/my-latest-hobby/</guid><description>&lt;figure&gt;&lt;a href="https://willwarren.com/images/2013/05/2013-05-15-12.51.541.jpg"&gt;&lt;img src="https://willwarren.com/images/2013/05/2013-05-15-12.51.541.jpg" alt="Golf ball on tee" loading="lazy"
 &gt;&lt;/a&gt;
 &lt;figcaption&gt;Golfing!&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Reverting a git commit after pushing to remote</title><link>https://willwarren.com/2013/04/20/reverting-a-git-commit-after-pushing-to-remote/</link><pubDate>Sat, 20 Apr 2013 00:00:00 +0000</pubDate><guid>https://willwarren.com/2013/04/20/reverting-a-git-commit-after-pushing-to-remote/</guid><description>&lt;p&gt;Imagine a scenario where you have a git repo with 2 branches; &lt;code&gt;master&lt;/code&gt;, the production-ready branch and &lt;code&gt;dev&lt;/code&gt;, the branch where all the development occurs.&lt;/p&gt;
&lt;p&gt;Now imagine that you accidentally made a commit on &lt;code&gt;master&lt;/code&gt;, when really it should have been on &lt;code&gt;dev&lt;/code&gt;. If you have not yet pushed to a remote repository (like Github), you can undo that commit using &lt;code&gt;git reset&lt;/code&gt; like so:&lt;/p&gt;</description></item><item><title>Stop Oracle bundling the Ask toolbar with the Java installer</title><link>https://willwarren.com/2013/02/10/stop-oracle-bundling-the-ask-toolbar-with-the-java-installer/</link><pubDate>Sun, 10 Feb 2013 00:00:00 +0000</pubDate><guid>https://willwarren.com/2013/02/10/stop-oracle-bundling-the-ask-toolbar-with-the-java-installer/</guid><description>&lt;p&gt;Sign this petition to get Oracle to stop bundling the Ask toolbar in with the Java installer. It&amp;rsquo;s basically AdWare that hijacks your home page and default search engine. It&amp;rsquo;s got to stop!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.change.org/petitions/oracle-corporation-stop-bundling-ask-toolbar-with-the-java-installer"&gt;http://www.change.org/petitions/oracle-corporation-stop-bundling-ask-toolbar-with-the-java-installer&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Are programmers actually bilingual?</title><link>https://willwarren.com/2012/12/17/are-programmers-actually-bilingual/</link><pubDate>Mon, 17 Dec 2012 00:00:00 +0000</pubDate><guid>https://willwarren.com/2012/12/17/are-programmers-actually-bilingual/</guid><description>&lt;blockquote&gt;
&lt;p&gt;[There is] Evidence suggesting that young computer programmers have &amp;ldquo;bilingual brains&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>The craft of code</title><link>https://willwarren.com/2012/11/29/the-craft-of-code/</link><pubDate>Thu, 29 Nov 2012 00:00:00 +0000</pubDate><guid>https://willwarren.com/2012/11/29/the-craft-of-code/</guid><description>&lt;p&gt;Came across this great quote from the book The Pragmatic Programmer (which I whole heartedly intend to read after seeing this quote)&lt;/p&gt;</description></item><item><title>Awesome Database Design Tool: wwwsqldesigner</title><link>https://willwarren.com/2012/02/02/awesome-database-design-tool-wwwsqldesigner/</link><pubDate>Thu, 02 Feb 2012 00:00:00 +0000</pubDate><guid>https://willwarren.com/2012/02/02/awesome-database-design-tool-wwwsqldesigner/</guid><description>&lt;p&gt;I stumbled across this software while trawling the internet looking for good design tools. It&amp;rsquo;s super simple to use and looks great. Because it&amp;rsquo;s web based (written almost entirely in Javascript), you can design without having to have any gigantic software packages installed. Also it&amp;rsquo;s free and open-source which I&amp;rsquo;m always a fan of!&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://willwarren.com/images/2012/02/wwwsqldesigner.png"&gt;&lt;img src="https://willwarren.com/images/2012/02/wwwsqldesigner.png" alt="Screenshot of WWW SQL Designer" loading="lazy"
 &gt;&lt;/a&gt;
 &lt;figcaption&gt;Example of WWW SQL Designer&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>SQL Script for Provinces and Territories of Canada</title><link>https://willwarren.com/2012/01/30/sql-script-for-provinces-and-territories-of-canada/</link><pubDate>Mon, 30 Jan 2012 00:00:00 +0000</pubDate><guid>https://willwarren.com/2012/01/30/sql-script-for-provinces-and-territories-of-canada/</guid><description>&lt;p&gt;I made this simple SQL script to insert all the provinces of Canada. I&amp;rsquo;m posting it on here in case I need it in the future, and so anyone else that might find it useful can download it.&lt;/p&gt;</description></item><item><title>Creating a public API with Apache Thrift</title><link>https://willwarren.com/2012/01/24/creating-a-public-api-with-apache-thrift/</link><pubDate>Tue, 24 Jan 2012 00:00:00 +0000</pubDate><guid>https://willwarren.com/2012/01/24/creating-a-public-api-with-apache-thrift/</guid><description>&lt;p&gt;I recently came across a new client-server technology that really fascinated me. Through my meddlings with CirrusNote, I know that 49% of the effort of writing a good API is coming up with standards (XML formats, rules, schemas etc.), 49% is writing boilerplate code (XML parsing, schema validation etc. etc.) and the other 2% is spent actually writing interesting code like database interaction and cool client-side stuff.&lt;/p&gt;
&lt;h2 id="what-is-apache-thrift"&gt;What is Apache Thrift? &lt;a class="heading-anchor" href="#what-is-apache-thrift" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml. - From the Apache Thrift website.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That sounds great. Reading the documentation (if you can find it) and browsing through the tutorials made me even more excited about Thrift. Some of the testimonials were also pretty inspiring (Evernote, Last.fm, Facebook (who actually invented Thrift) to name a few).&lt;/p&gt;</description></item><item><title>Password protecting folders with .htaccess</title><link>https://willwarren.com/2011/12/16/password-protecting-folders-with-htaccess/</link><pubDate>Fri, 16 Dec 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/12/16/password-protecting-folders-with-htaccess/</guid><description>&lt;p&gt;I always forget how to do this, so I&amp;rsquo;m posting it on here for posterity. Sometimes it&amp;rsquo;s useful to password protect a folder or files on your web server. If the web server is Apache, then you can use a couple of files - &lt;code&gt;.htaccess&lt;/code&gt; and &lt;code&gt;.htpasswd&lt;/code&gt; - to achieve this.&lt;/p&gt;</description></item><item><title>Indianapolis Skyline</title><link>https://willwarren.com/2011/11/14/indianapolis-skyline/</link><pubDate>Mon, 14 Nov 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/11/14/indianapolis-skyline/</guid><description>&lt;figure&gt;&lt;a href="https://willwarren.com/images/2011/11/318578_10150360292455146_698220145_8838267_877592487_n.jpg"&gt;&lt;img src="https://willwarren.com/images/2011/11/318578_10150360292455146_698220145_8838267_877592487_n.jpg" alt="View from my hotel of the Indianapolis skyline" loading="lazy"
 &gt;&lt;/a&gt;
 &lt;figcaption&gt;View from my hotel of the Indianapolis skyline&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Asynchronous Programming in .NET - The quick and easy way</title><link>https://willwarren.com/2011/10/16/asynchronous-programming-in-net-the-quick-and-easy-way/</link><pubDate>Sun, 16 Oct 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/10/16/asynchronous-programming-in-net-the-quick-and-easy-way/</guid><description>&lt;p&gt;When working on a program that has a GUI, it&amp;rsquo;s very important to make sure that the UI is fast and responsive. If your program is performing a lot of long-running actions (writing to a database, making network calls etc.) you should always make sure that the code that is performing those actions is not being executed by the same thread that the GUI is on.&lt;/p&gt;</description></item><item><title>An ASCII needle in an Extended ASCII haystack</title><link>https://willwarren.com/2011/08/30/an-ascii-needle-in-an-extended-ascii-haystack/</link><pubDate>Tue, 30 Aug 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/08/30/an-ascii-needle-in-an-extended-ascii-haystack/</guid><description>&lt;p&gt;I was tasked with writing some code to pull all the research project data that we&amp;rsquo;d collected over the past 10-15 years into our new J2EE-based product, Kuali Coeus. The legacy system ran off SQL Server which is a lot more forgiving of character encodings and string data in general than the new system (which runs off MySQL).&lt;/p&gt;
&lt;p&gt;It had taken me a while to figure out a way to map all the old data onto the new data structures, but I felt like I had done a pretty awesome job. The few batches I had tested it with all passed its tests with no problems. However when I unleashed it on a full dataset (some 6000 rows), about 60% (roughly 2 hours) of the way through, it crashed, and rolled the ENTIRE thing back.&lt;/p&gt;</description></item><item><title>Earthquake!</title><link>https://willwarren.com/2011/08/24/earthquake/</link><pubDate>Wed, 24 Aug 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/08/24/earthquake/</guid><description>&lt;p&gt;So there was a 5.9 earthquake outside Richmond, VA yesterday and we felt the tremors all the way up here in Ontario, Canada.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t personally feel it, but Facebook was instantly saturated with people talking about it. Reactions varied from&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OMFG AN EARTHQUAKE&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;to&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Did anyone else feel that?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;to&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Oh no, I hope noone was hurt :(&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;to my personal favourite&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sweet, an earthquake!&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Pair Programming - Does it work?</title><link>https://willwarren.com/2011/08/18/pair-programming-does-it-work/</link><pubDate>Thu, 18 Aug 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/08/18/pair-programming-does-it-work/</guid><description>&lt;p&gt;tl;dr - It depends.&lt;/p&gt;
&lt;p&gt;Pair programming is defined as the act of two programmers working at one workstation on one task at a time. One programmer enters the code (the driver), leaving the other programmer free to audit the code in real time as it&amp;rsquo;s being written (the observer). The idea behind it is simple: two heads are better than one. When someone else is watching you, your proclivity for stupid typos and silly programmatic errors is significantly less (forgetting semicolons for example).&lt;/p&gt;</description></item><item><title>OwnerDrawing a TreeNode in .NET</title><link>https://willwarren.com/2011/08/12/ownerdrawing-a-treenode-in-net/</link><pubDate>Fri, 12 Aug 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/08/12/ownerdrawing-a-treenode-in-net/</guid><description>&lt;p&gt;I&amp;rsquo;ve used the TreeView control in .NET extensively, but one thing I always wanted to be able to do is have &amp;ldquo;sub titles&amp;rdquo; on the tree nodes. &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; uses them extensively on their Package Explorer&lt;/p&gt;</description></item><item><title>Regular Expressions Cheat Sheet</title><link>https://willwarren.com/2011/04/16/regular-expressions-cheat-sheet/</link><pubDate>Sat, 16 Apr 2011 00:00:00 +0000</pubDate><guid>https://willwarren.com/2011/04/16/regular-expressions-cheat-sheet/</guid><description>&lt;p&gt;This just saved my day, as well as saving me hours of time! Download at once!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/pdf/"&gt;Regex Cheatsheet v2&lt;/a&gt;&lt;/p&gt;</description></item><item><title>About me</title><link>https://willwarren.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://willwarren.com/about/</guid><description/></item><item><title>GARAGINATOR: Compatibility</title><link>https://willwarren.com/garaginator/compatibility/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://willwarren.com/garaginator/compatibility/</guid><description>Find out if GARAGINATOR will work for your garage door opener</description></item><item><title>GARAGINATOR: Flasher</title><link>https://willwarren.com/garaginator/flasher/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://willwarren.com/garaginator/flasher/</guid><description>Update your GARAGINATOR&amp;rsquo;s firmware!</description></item><item><title>GARAGINATOR: Getting Started</title><link>https://willwarren.com/garaginator/start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://willwarren.com/garaginator/start/</guid><description>Follow this guide to get up and running quickly!</description></item><item><title>GARAGINATOR: User Guide</title><link>https://willwarren.com/garaginator/guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://willwarren.com/garaginator/guide/</guid><description>Full documentation for everything GARAGINATOR</description></item><item><title>SMD Breakout Boards</title><link>https://willwarren.com/smd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://willwarren.com/smd/</guid><description/></item></channel></rss>