<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="https://jeremywarner.net/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
  <id>https://jeremywarner.net/</id>
  <title>Blog: Jeremy Warner</title>
  <subtitle>Software, Art, Food, etc</subtitle>
  <updated>2026-06-14T21:11:36.671Z</updated>
  <generator>@vuepress/plugin-feed</generator>
  <link rel="self" href="https://jeremywarner.net/atom.xml"/>
  <link rel="alternate" href="https://jeremywarner.net/"/>
  <category term="Flowers"/>
  <category term="Blog"/>
  <category term="Generative Art"/>
  <category term="External Site"/>
  <entry>
    <title type="text">Black Hills Flowers</title>
    <id>https://jeremywarner.net/posts/BlackHillsFlowersJune26.html</id>
    <link href="https://jeremywarner.net/posts/BlackHillsFlowersJune26.html"/>
    <updated>2026-06-14T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>We took a short camping trip this weekend, outside Hill City and out at Ditch Creek. We wanted to try out the new mattress pads in the RTT, but more importantly we hadn't gotten out yet in 2026, so we were itching to go. Great landscapes, and lots of flower pictures (because that's apparently what I do now).</p>]]></summary>
    <content type="html"><![CDATA[
<p>We took a short camping trip this weekend, outside Hill City and out at Ditch Creek. We wanted to try out the new mattress pads in the RTT, but more importantly we hadn't gotten out yet in 2026, so we were itching to go. Great landscapes, and lots of flower pictures (because that's apparently what I do now).</p>
<p>View from our first campsite:</p>
<div style="display:flex; flex-wrap:wrap">
<img src="/posts/BlackHillsFlowersJune26/hills.jpg" style="height:275px; margin: 4px">
</div>
<h2>Hill City Flowers</h2>
<p>There are always a suprising number of flowers in the grasses when you look closely. The prickly pear look like they're going to flower this year - nearly all the bunches I saw had buds starting. I'm not used to seeing so many buds, so I'm guessing that this is because we had a wetter year last year, providing the plant with enough energy and mostiure for this year.</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/BlackHillsFlowersJune26/prickly_pear.jpg" style="height:200px; margin: 4px;">
</div>
<p>Also saw two different colors of spiderwort, lupine, yarrow, and spreading dogbane.</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/BlackHillsFlowersJune26/spiderwort_pink.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/BlackHillsFlowersJune26/spiderwort_purple.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/BlackHillsFlowersJune26/lupine.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/BlackHillsFlowersJune26/yarrow.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/BlackHillsFlowersJune26/spreading_dogbane.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/BlackHillsFlowersJune26/spreading_dogbane_2.jpg" style="height:150px; margin: 4px;">
</div>
<p>Finally, I couldn't positively identify this one. It looks similar to smooth beardtounge, but I'm not sure it's the same plant. I've only seen smooth beardtongue as a striking blue flower in the hills.</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/BlackHillsFlowersJune26/smooth_beardtongue_maybe.jpg" style="height:200px; margin: 4px;">
</div>
<p>We also ran into this vetch outside Hill City. Is't quite common out here, but the color difference from purple to pink in one group of flowers was quite pretty.</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/BlackHillsFlowersJune26/vetch.jpg" style="height:200px; margin: 4px;">
</div>
<h2>Ditch Creek</h2>
<p>Not as many flowers outside Ditch Creek, as it was rather cold when we were up there. Interestingly, the rocky mountain irises were still blooming. I assumed they would be out of season by mid-June, but perhaps the higher elevation and reduced temperatures push back their season (or I could just be wrong). Also saw a flower I didn't recognize, turns out it's a western canada violet. It was quite prolific down by the creek.</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/BlackHillsFlowersJune26/rocky_mountain_iris.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/BlackHillsFlowersJune26/western_canada_violet.jpg" style="height:150px; margin: 4px;">
</div>
]]></content>
    <category term="Flowers"/>
    <published>2026-06-14T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Minnesota Flowers</title>
    <id>https://jeremywarner.net/posts/MinnesotaFlowers.html</id>
    <link href="https://jeremywarner.net/posts/MinnesotaFlowers.html"/>
    <updated>2026-06-06T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>Well, it's been slightly too long since I posted anything, but we were in Minnesota over Memorial Day weekend, and... I have to say, I think that's the best time to visit. Nice weather, flowers blooming, not too many bugs.</p>
<p>Speaking of flowers, there were lots blooming, but I only grabbed pictures of a few. Bleeding heart, apple tree blossoms, and columbine:</p>]]></summary>
    <content type="html"><![CDATA[
<p>Well, it's been slightly too long since I posted anything, but we were in Minnesota over Memorial Day weekend, and... I have to say, I think that's the best time to visit. Nice weather, flowers blooming, not too many bugs.</p>
<p>Speaking of flowers, there were lots blooming, but I only grabbed pictures of a few. Bleeding heart, apple tree blossoms, and columbine:</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/MinnesotaFlowers/bleeding_heart.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/MinnesotaFlowers/appleblossom.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/MinnesotaFlowers/appleblossom2.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/MinnesotaFlowers/columbine.jpg" style="height:150px; margin: 4px;">
</div>
<h2>Purple Carpet</h2>
<p>In the grass around the lilac bushes, there were these tiny purple flowers interspersed with the green lawn. The pictures don't capture how striking it was - to look down on the bright grass and see myriad little purple flowers poking through. They were also growing in the grass driveway. It felt strange to park on top of them, but the plants are hearty like the grass - walk or drive on top of them, they care little.</p>
<p>I want to try and put together some kind of art based on the colors. Haven't had time yet. The photos are more to remind me, as they are not themselves very striking.</p>
<div>
<img src="/posts/MinnesotaFlowers/carpet_1.jpg" style="height:300px; margin: 4px;">
<img src="/posts/MinnesotaFlowers/carpet_2.jpg" style="height:300px; margin: 4px;">
</div>
]]></content>
    <category term="Flowers"/>
    <published>2026-06-06T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Irises</title>
    <id>https://jeremywarner.net/posts/Irises.html</id>
    <link href="https://jeremywarner.net/posts/Irises.html"/>
    <updated>2025-06-01T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>This is a short post, but it's June, and the irises are blooming.</p>
<p>Rocky Mountain Iris from Centennial Trail (near Sheridan Lake):</p>
<div>
<img src="/posts/Irises/iris_rocky.jpg" style="height:300px; margin: 4px;">
</div>
<p>A much larger iris from our front garden.</p>
<div>
<img src="/posts/Irises/iris_yard.jpg" style="height:300px; margin: 4px;">
</div>]]></summary>
    <content type="html"><![CDATA[
<p>This is a short post, but it's June, and the irises are blooming.</p>
<p>Rocky Mountain Iris from Centennial Trail (near Sheridan Lake):</p>
<div>
<img src="/posts/Irises/iris_rocky.jpg" style="height:300px; margin: 4px;">
</div>
<p>A much larger iris from our front garden.</p>
<div>
<img src="/posts/Irises/iris_yard.jpg" style="height:300px; margin: 4px;">
</div>
]]></content>
    <category term="Flowers"/>
    <published>2025-06-01T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Roof Top Tent - Excellent for Us</title>
    <id>https://jeremywarner.net/posts/RoofTopTent.html</id>
    <link href="https://jeremywarner.net/posts/RoofTopTent.html"/>
    <updated>2025-05-16T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>We got a roof top tent earlier this spring for camping this year. One of the challenges we've had camping with smaller children is that setup and teardown takes a long time - getting a site figured out, getting the tent up, getting sleeping mats and bags in, inflated, and rolled out isn't terribly hard, but we usually end up with one parent doing most of the work. It's certainly not impossible, but I'd rather spend that time relaxing at camp or doing things with the kids. Roof top tents are supposed to have much faster setup and teardown times, so we looked into it.</p>]]></summary>
    <content type="html"><![CDATA[
<p>We got a roof top tent earlier this spring for camping this year. One of the challenges we've had camping with smaller children is that setup and teardown takes a long time - getting a site figured out, getting the tent up, getting sleeping mats and bags in, inflated, and rolled out isn't terribly hard, but we usually end up with one parent doing most of the work. It's certainly not impossible, but I'd rather spend that time relaxing at camp or doing things with the kids. Roof top tents are supposed to have much faster setup and teardown times, so we looked into it.</p>
<p>And after a short camping trip last weekend, I'm very glad we got one. It's a big step up in terms of our ability to camp, with a reduced effort. There are some tradeoffs, but overall I'm very happy we did this. We mounted it on our 4Runner, which is our normal go-somewhere vehicle. I should note that we are 'car-camping' - sleeping on pads, big tent, bringing lots of stuff with. It's a lot more fun for the kids this way, but if you're used to carrying all the gear, food, and fuel you need into a remote site, then my experience isn't going to resonate for you.</p>
<p>I'll get into the why, but first some pictures:</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/RoofTopTent/rtt4.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/RoofTopTent/rtt2.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/RoofTopTent/rtt1.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/RoofTopTent/rtt3.jpg" style="height:150px; margin: 4px;">
  <img src="/posts/RoofTopTent/rtt5.jpg" style="height:150px; margin: 4px;">
</div>
<h2>Which Tent?</h2>
<p>After quite a bit of research, we ended up getting an <a href="https://ikamper.com/products/x-cover" target="_blank" rel="noopener noreferrer">iKamper X-Cover</a>. This tent had a couple of advantages over other options we looked at:</p>
<ul>
<li>It's big enough to sleep 2 adults and 2 kids. And it's not just marketed that way, it's actually plenty big.</li>
<li>It is relativly light weight (about 125 lbs), which means that it doesn't cut into the GVWR as much. I also don't have 200 lbs on top of my vehicle, so slightly better center of gravity than some other RTT options would be. Finally, the lighter weight means it's easier to get up on top of the vehicle and take down.</li>
<li>The top is a hard alumnium sheet - so it should provide some protection in the event of adverse weather. We get a lot of hail in the Hills, and since the vehicle will be parked outside all summer, this was a concern with a soft shell tent.</li>
<li>The tent is very fast to set up - I think iKamper claims 3 minutes. In reality, on my vehicle, it's more like 6-7 (I timed myself), but that's faster than any tent I've set up on the ground by far. Even a pop-up tent (which is itself very cool!) requires you to find flat enough ground, put down a tarp, and stake it once it's deployed.</li>
<li>I can put the sleeping bags inside the stowed tent for transport. There's a foam pad for comfort, which compressed nicely to also carry 4 sleeping bags. This freed up a non-trivial amount of space inside the vehicle - 9 bags I would otherwise need to carry (4 sleeping bags, 4 sleeping pads, 1 tent).</li>
</ul>
<h2>Mounting</h2>
<p>The tent does take up most of the (aftermarket) roof rack on my 4Runner, but that hasn't been a huge issue. The biggest challenge is getting it up and down without damaging anything. My wife isn't tall enough for us to just lift the tent, so I ended up rigging a wooden platform and a pulley to raise the tent up and slide it onto the vehicle. With this setup I was able to install the tent myself - it took about an hour once I had the platform built.</p>
<p>I would have preferred an overhead lift of some kind, but I don't have access to one, and my garage door is too low to get the vehicle in and out with the tent mounted.</p>
<p>If the 4Runner was a daily driver for us, I'm not sure I would have mounted the tent. The extra weight and wind resistance are impacting fuel economy on an already ineffecient vehicle. But we've been using the 4Runner as a second vehicle when only needed, so this isn't really a concern. Our use case is not for it to be effecient daily transport, we wanted something that would be able to take us into the hills without concerns, haul the bikes, tow small loads, etc.</p>
<h2>First Outing</h2>
<p>We went out last weekend on a short camping trip. It was just at the end of shoulder season (first half of May), when many of the first-come first-serve sites are open for use, but don't charge fees. The weather was also very good for camping.</p>
<p>The tent was as fast to set up at a campsite as it was in my driveway. It was cooler than tents I've used in the past - good ventiliation on all 4 sides and being 7 feet in the air meant that it caught a nice breeze. The kids also really liked playing in it, which is great, especially when tents I've used previosuly tended to get hot quickly in the sun.</p>
<p>The RTT has a couple of skylights in the top, which are nice for letting in light. Once they were closed up, the tent got quite dark - the material of the walls blocks light very well. It turns out not waking up at first light is quite nice - where my other tents get bright very quickly as soon as day breaks (at 5:30), the light wasn't a problem in the morning and we were able to sleep in a bit.</p>
<p>The kids took to the ladder pretty quickly - no issues there. We also got a shoe-holder bag that gives you a place to put shoes, hanging in the air off the tent. While this was nice, I imagine it would be much nicer if you were camping in a place where you needed to worry about things crawling into your shoes overnight.</p>
<p>While I have seen pictures of dogs inside RTTs, I don't think our dog would have handled the ladder well. I cleared space and had him sleep in the back of the vehicle - no problem there.</p>
<p>The only negative thing we noticed was that our feet were slightly raised compared to our heads. It looks like that was half where I parked the 4Runner (at a slight angle), and half the design of the tent. This wasn't a huge issue, but it's the only downside I could think of. There was less slope than I often find when putting down a tent on the ground, so I consider this a very minor thing, but I should note it.</p>
<p>I think it took us a little under 45 minutes to break camp in the morning, which is a big improvement over past outings. And I didn't have to roll up 4 sleeping matts and 4 sleeping bags in a hot tent! I'm really looking forward to more trips this summer with the family.</p>
<h2>The Good</h2>
<ul>
<li>Fast setup and teardown at camp.</li>
<li>Additional cargo capacity.</li>
<li>Kids love it.</li>
<li>Good ventiliation and black-out qualities.</li>
<li>Sleeping up high is pretty cool.</li>
</ul>
<h2>The Bad</h2>
<ul>
<li>RTTs are not cheap.</li>
<li>It is heavy enough that I'm not planning on taking the tent off again until the Fall.</li>
<li>On a multi-day trip, if you want to drive somewhere during the day you need to pack up the tent first.</li>
<li>Mileage reduction if the mounted vehcile is a daily driver.</li>
<li>No ability to carry other items on top of the vehicle (ie, canoe).</li>
</ul>
<h2>Final Thoughts</h2>
<p>This thing is sweet!</p>
]]></content>
    <category term="Blog"/>
    <published>2025-05-16T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">JWT Decode in Visual Studio</title>
    <id>https://jeremywarner.net/posts/JWTDecode.html</id>
    <link href="https://jeremywarner.net/posts/JWTDecode.html"/>
    <updated>2025-05-04T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>I recently found out that there is a built-in JWT decoder in Visual Studio's Text Visualizer. This made my life just a bit easier when debugging token issues this past week - instead of copying out the string and dropping it onto a third party site like <a href="https://jwt.io" target="_blank" rel="noopener noreferrer">jwt.io</a>, I could see the token's values right in Visual Studio.</p>]]></summary>
    <content type="html"><![CDATA[
<p>I recently found out that there is a built-in JWT decoder in Visual Studio's Text Visualizer. This made my life just a bit easier when debugging token issues this past week - instead of copying out the string and dropping it onto a third party site like <a href="https://jwt.io" target="_blank" rel="noopener noreferrer">jwt.io</a>, I could see the token's values right in Visual Studio.</p>
<p>Microsoft page mentioning the <a href="https://learn.microsoft.com/en-us/visualstudio/debugger/string-visualizer-dialog-box?view=vs-2022#text-string-data" target="_blank" rel="noopener noreferrer">JWT Decode option</a>.</p>
]]></content>
    <category term="Blog"/>
    <published>2025-05-04T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Identifying Vulnerable Nuget Packages - A Mystery (Solved)</title>
    <id>https://jeremywarner.net/posts/NugetDependencies.html</id>
    <link href="https://jeremywarner.net/posts/NugetDependencies.html"/>
    <updated>2025-04-29T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>I'm working on updating packages on multiple projects to eliminate vulnerable nuget packages. We have been doing this on a recurring basis for some time, but I recently got a script built to do better searches across transitive dependencies in all projects under a given path. And... it's exposed quite a few more packages that need to be updated. The basic command I'm using to identify vulnerable packages is <code>dotnet list package --vulnerable --include-transitive</code>.</p>]]></summary>
    <content type="html"><![CDATA[
<p>I'm working on updating packages on multiple projects to eliminate vulnerable nuget packages. We have been doing this on a recurring basis for some time, but I recently got a script built to do better searches across transitive dependencies in all projects under a given path. And... it's exposed quite a few more packages that need to be updated. The basic command I'm using to identify vulnerable packages is <code>dotnet list package --vulnerable --include-transitive</code>.</p>
<p>As part of remediation, it's often useful to know where the transitive package dependency came from - David Jarman had a <a href="https://davidjarman.net/archive/2025/04/18/dotnet-nuget-why" target="_blank" rel="noopener noreferrer">post</a> a while back where he talked about <code>dotnet nuget why</code>, which is a pretty slick tool to see the dependency chain for a given package. It does occasionally have bugs (that I was unable to consistently reproduce 😕), but it's been very helpful so far in tracking down the source of vulnerable package versions.</p>
<h2>Problem</h2>
<p>However.</p>
<p>If you're doing this, you may run into the following situation:</p>
<ul>
<li>Project A depends on Project B.</li>
<li>Project B reports no vulnerable packages or vulnerable transitive packages.</li>
<li>Project A reports vulnerable transitive packages (in my case, <code>System.Formats.Asn1 v5.0.0</code>).</li>
<li>When you run <code>dotnet nuget why</code> on Project A, you find that the transitive dependency runs <em>through Project B</em> which <em>just said</em> that it didn't have any vulnerable transitive packages.</li>
</ul>
<p>There are some hints online about why this might be the case, but I haven't found anything concrete. Google's AI summary seems pretty confident that it depends on the SDK, but it's slightly incoherent, and when I check the cited sources, they don't mention the SDK type (that I can see). So I'm uninclined to belive that it's fully correct.</p>
<p>In my case, Project A is a <code>&lt;Project Sdk=&quot;Microsoft.NET.Sdk.Web&quot;&gt;</code> project, while Project B is <code>&lt;Project Sdk=&quot;Microsoft.NET.Sdk&quot;&gt;</code>, but that's really the only difference. I played with swapping those values around - no difference in the vulnerable package lists.</p>
<p>So, for now - this remains a mystery as to 'Why'. But it's real darn frustrating.</p>
<h2>Solved!</h2>
<p>Ok, I figured this thing out.</p>
<p>What was happening is that Project B has a transitive dependency on <code>System.Formats.Asn1</code>, but allows a higher version (ie, does not require v5.0.0 exactly). However, additional packages that Project A depends on have a dependncy on the explicit version of the vulnerable package - v5.0.0. So, when you run the package vulnerability checker on Project B, there is no vulnerable package - it does not depend on a vulnerable verison, it's presumably resolving a higher version.</p>
<p>But when you run against Project A, the resolved package version is v5.0.0, which is vulnerable. This then reports a vulnerable package, chained under Project B and version 5. It is important to note that initially I did not see the other vulnerability chains under Project A, I focused on the path through Project B.</p>
<p>The fix is to find the package references from Project A that have a transitive dependency on <code>Systsem.Formats.Asn1</code>, and update those - this allows us to resolve the vulnerable dependency.</p>
<p>I found this pattern repeated several times for different vulnerable packages with some variation during this process, including problems when the target framework changed from <code>Any CPU</code> locally to <code>win-x64</code> in the CI build. It does make sense, but it's a very frustrating thing to deal with. I now appreciate more NPM's use of a <code>package-lock.json</code> file to fix the resolved version - it makes tracking down problems like this <em>somewhat</em> easier.</p>
<h3>Note:</h3>
<p>This was initially written on 4/29, but didn't have time to finish it up, so it's getting published 5/4/25.</p>
]]></content>
    <category term="Blog"/>
    <published>2025-04-29T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">SVG Generator</title>
    <id>https://jeremywarner.net/posts/SVGGenerator.html</id>
    <link href="https://jeremywarner.net/posts/SVGGenerator.html"/>
    <updated>2025-04-25T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>Several years ago, I experimented with building SVG files based on a repeating pattern. The basic idea was to take a drawn line pattern and repeat it, creating closed shapes. Each shape's color was varied - tint, shade, or color difference. I ended up building a tool to do this, and used it to create the background image on the <a href="https://app.resumation.net/login" target="_blank" rel="noopener noreferrer">Resumation login page</a>:</p>]]></summary>
    <content type="html"><![CDATA[
<p>Several years ago, I experimented with building SVG files based on a repeating pattern. The basic idea was to take a drawn line pattern and repeat it, creating closed shapes. Each shape's color was varied - tint, shade, or color difference. I ended up building a tool to do this, and used it to create the background image on the <a href="https://app.resumation.net/login" target="_blank" rel="noopener noreferrer">Resumation login page</a>:</p>
<p><img src="/posts/svggenerator/resumationBackground.svg" height="250px"></p>
<p>The drawing area was done using a canvas via <a href="https://www.npmjs.com/package/vue-konva/v/2.0.8" target="_blank" rel="noopener noreferrer">vue-konva</a>, and then I generated a path for the drawing and rendered it as an SVG. Nothing very fancy.</p>
<h2>Updating</h2>
<p>I built the tool in late 2021, and, wouldn't you know it - it doesn't build on my machines any longer. There was a breaking change in node verisons (something to do with SSL, if I remember properly), and the old dependencies don't build on any of my dev machines in their current configuration. Instead of trying to get an old version of the dependencies set up, I figured it would be easier to port the logic forward. So, I've set about porting the components up to a new Vue 3 project with up to date packages.</p>
<p>Fortunately for me, vue-konva has an updated package, so this was a relativly straightforward update. The biggest bit of work was uptaking some of the changes in <a href="https://vuetifyjs.com/" target="_blank" rel="noopener noreferrer">Vuetify</a> between version 2 and 3 - noteably, the output of the <code>&lt;v-color-picker /&gt;</code> component has changed from an object to a hex string.</p>
<h2>Images</h2>
<p>I need to do some polish on the tool before I publish it anywhere (but that's on the list!), but I find myself playing with the different lines and color options longer than I intend to every time. As an example, here are a handful of quick SVGs I generated tonight using the tool:</p>
<div style="display:flex; flex-wrap:wrap">
  <img src="/posts/svggenerator/newGen1.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen2.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen3.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen4.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen5.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen6.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen7.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen8.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen9.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen10.svg" style="height:150px; margin: 4px;">
  <img src="/posts/svggenerator/newGen11.svg" style="height:150px; margin: 4px;">
</div>
]]></content>
    <category term="Generative Art"/>
    <published>2025-04-25T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Atom Feed</title>
    <id>https://jeremywarner.net/posts/AtomFeed.html</id>
    <link href="https://jeremywarner.net/posts/AtomFeed.html"/>
    <updated>2025-04-23T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>I took a few minutes today to get an atom feed set up on the blog. It was fairly straightforward, though I had a bit of work to do to properly configure the feed filters. I figured I would document what I did here in case it's helpful.</p>
<p>Since I'm using VuePress, I grabbed the <a href="https://ecosystem.vuejs.press/plugins/blog/feed/guide.html" target="_blank" rel="noopener noreferrer">VuePress feed plugin</a>. Installation was straightforward.</p>]]></summary>
    <content type="html"><![CDATA[
<p>I took a few minutes today to get an atom feed set up on the blog. It was fairly straightforward, though I had a bit of work to do to properly configure the feed filters. I figured I would document what I did here in case it's helpful.</p>
<p>Since I'm using VuePress, I grabbed the <a href="https://ecosystem.vuejs.press/plugins/blog/feed/guide.html" target="_blank" rel="noopener noreferrer">VuePress feed plugin</a>. Installation was straightforward.</p>
<p>However, I found that the default filters were pulling in more than I wanted - in particular the <code>get-started.md</code> file that I'm leaving around for reference. I also added a frontmatter 'archive' property as a simple way to ignore pages, and I wanted the feed's filter to honor that as well. After a bit of tinkering, this is what I ended up with:</p>
<div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code class="language-typescript"><span class="line"><span class="token function">feedPlugin</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
<span class="line">      hostname<span class="token operator">:</span> <span class="token string">"https://jeremywarner.net"</span><span class="token punctuation">,</span></span>
<span class="line">      atom<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line">      count<span class="token operator">:</span> <span class="token number">10</span><span class="token punctuation">,</span></span>
<span class="line">      devServer<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span>
<span class="line">      <span class="token function-variable function">filter</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">{</span> frontmatter<span class="token punctuation">,</span> filePathRelative <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">=></span></span>
<span class="line">        <span class="token punctuation">(</span>frontmatter<span class="token punctuation">.</span>feed <span class="token operator">??</span> <span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span></span>
<span class="line">        <span class="token operator">!</span><span class="token punctuation">(</span>frontmatter<span class="token punctuation">.</span>archive <span class="token operator">??</span> <span class="token boolean">false</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span></span>
<span class="line">        frontmatter<span class="token punctuation">.</span>layout <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">&amp;&amp;</span></span>
<span class="line">        filePathRelative <span class="token operator">!=</span> <span class="token string">"get-started.md"</span><span class="token punctuation">,</span></span>
<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Not particularly elegant, but easy enough to understand in 6 months when I've forgotten exactly why it's configured this way.</p>
]]></content>
    <category term="Blog"/>
    <published>2025-04-23T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">New Colors!</title>
    <id>https://jeremywarner.net/posts/NewColors.html</id>
    <link href="https://jeremywarner.net/posts/NewColors.html"/>
    <updated>2025-04-18T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>I've updated the site with new colors, updated some styling, and introduced custom colors on the tags and categories. I ended up cribbing pretty heavily off of Material Design chips for the tags and categories - don't break what works, I suppose.</p>
<p>It's nice working in a Vue environment, so I can focus on making what I want happen instead of learning how XYZ framework should be hooked together.</p>]]></summary>
    <content type="html"><![CDATA[
<p>I've updated the site with new colors, updated some styling, and introduced custom colors on the tags and categories. I ended up cribbing pretty heavily off of Material Design chips for the tags and categories - don't break what works, I suppose.</p>
<p>It's nice working in a Vue environment, so I can focus on making what I want happen instead of learning how XYZ framework should be hooked together.</p>
<h2>Consistent Colors</h2>
<p>It's a pretty common pattern, but I enjoyed setting up the color calculation for the tags. I've got a preset list of colors, and then based on the text of the tag, I compute a number, mod it by the size of the tag color list, and then use that as the list index. This means everywhere I use the same tag text, I can compute a consistent color, and new tags automatically get a new color - no other config needed.</p>
]]></content>
    <category term="Blog"/>
    <published>2025-04-18T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Sand Creatures</title>
    <id>https://jeremywarner.net/posts/ArtPage.html</id>
    <link href="https://jeremywarner.net/posts/ArtPage.html"/>
    <updated>2025-04-17T00:00:00.000Z</updated>
    <summary type="html"><![CDATA[
<p>I recently found Anders Hoff's site and read through his posts on <a href="https://inconvergent.net/generative/" target="_blank" rel="noopener noreferrer">generative art</a>. I particularly like the cursive-like line art he generated (he calls them Sand Creatures) - something about the randomness of the objects is very enticing.</p>]]></summary>
    <content type="html"><![CDATA[
<p>I recently found Anders Hoff's site and read through his posts on <a href="https://inconvergent.net/generative/" target="_blank" rel="noopener noreferrer">generative art</a>. I particularly like the cursive-like line art he generated (he calls them Sand Creatures) - something about the randomness of the objects is very enticing.</p>
<p>I'm not sure when I'd find the time, but I'd like to explore doing something similar to his sand creatures. I suspect modern browsers could adequately render an animated, randomly changing version.</p>
]]></content>
    <category term="External Site"/>
    <published>2025-04-17T00:00:00.000Z</published>
  </entry>
</feed>