<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Paul Montag</title><link>https://blog.paulmontag.info/posts/</link><description>Recent content in Posts on Paul Montag</description><generator>Hugo -- 0.156.0</generator><language>en</language><lastBuildDate>Sat, 28 Feb 2026 00:00:00 -0500</lastBuildDate><atom:link href="https://blog.paulmontag.info/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Application Kustomize image</title><link>https://blog.paulmontag.info/posts/application_kustomize_image/</link><pubDate>Sat, 28 Feb 2026 00:00:00 -0500</pubDate><guid>https://blog.paulmontag.info/posts/application_kustomize_image/</guid><description>&lt;p&gt;When creating &lt;a href="https://argo-cd.readthedocs.io/en/latest/user-guide/application-specification/"&gt;Applications&lt;/a&gt; in &lt;a href="https://argo-cd.readthedocs.io/en/stable/"&gt;Argocd&lt;/a&gt; I always prefer to use &lt;a href="https://argo-cd.readthedocs.io/en/stable/user-guide/kustomize/"&gt;kustomize&lt;/a&gt; for my own manifests. It allows me to create a simple &amp;ldquo;base&amp;rdquo; of manifests and then alter it for the specific use case via the &lt;code&gt;kustomize&lt;/code&gt; attribute within the application. This allows a single place (the &lt;code&gt;Application&lt;/code&gt; or &lt;code&gt;ApplicationSet&lt;/code&gt;) to stores all the high level information for configuring the installation.&lt;/p&gt;
&lt;p&gt;While working on one project or another, I don&amp;rsquo;t remember anymore why I needed to figure this out, I noticed the &lt;code&gt;images&lt;/code&gt; attribute works differently in Argocd than it does in kustomize. &lt;strong&gt;Since you the reader might be interested in the solution as opposed to the exploration, let me get that out of the way now&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Golang Package Structure</title><link>https://blog.paulmontag.info/posts/golang_package_structure/</link><pubDate>Mon, 10 Nov 2025 00:00:00 -0500</pubDate><guid>https://blog.paulmontag.info/posts/golang_package_structure/</guid><description>&lt;p&gt;I have been developing with Golang for about 10 years now, and over that time I have learned many things about the language, but the biggest one might be this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Directories are not just Directories&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Within golang a directory with new golang source code in it creates a new interface. One that requires you to think through what is public and what is private. One that forces you to consider the relationship between these packages since golang does not allow for &lt;a href="https://groups.google.com/g/golang-nuts/c/8nwGtohyVtc/m/bFkZUV4X6gwJ"&gt;circular dependencies&lt;/a&gt;. You need to strike a balance. I tend to see the following in codebases&lt;/p&gt;</description></item><item><title>Grabbing a Go Time with BPFTrace</title><link>https://blog.paulmontag.info/posts/bpftrace_go_time/</link><pubDate>Mon, 07 Oct 2024 06:22:18 -0500</pubDate><guid>https://blog.paulmontag.info/posts/bpftrace_go_time/</guid><description>&lt;p&gt;Recently I found myself debugging an application where I needed to understand what value a &lt;code&gt;time.Time&lt;/code&gt; object had. What I thought was going to be a trivial experience turned into a multi day confusing conundrum which left me confuddled and cranky. Alright, that is already too much alliteration for the first paragraph of the post. Long story short, I gave up and found a duration which gave me the context I needed to understand what was going on.&lt;/p&gt;</description></item><item><title>Go Nil Slice</title><link>https://blog.paulmontag.info/posts/go_nil_slice/</link><pubDate>Tue, 12 Mar 2024 05:32:07 -0500</pubDate><guid>https://blog.paulmontag.info/posts/go_nil_slice/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;names&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&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="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;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;person&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="k"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;People&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&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="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;names&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;names&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&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="p"&gt;}&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;This probably looks pretty familiar. If it doesn&amp;rsquo;t and you are like &amp;ldquo;OMG, how is that working?!?! Doesn&amp;rsquo;t that nil panic?!&amp;rdquo;, no worries, &lt;code&gt;append&lt;/code&gt; will instantiate the slice for you. However you are leaving it up to Golang to guess how many items will end up in the final slice, and it has 0 context. Let&amp;rsquo;s dive into what a slice is under the hood.&lt;/p&gt;</description></item><item><title>BPFTrace and Go</title><link>https://blog.paulmontag.info/posts/bpftrace_and_go/</link><pubDate>Sun, 28 Jan 2024 20:45:05 -0600</pubDate><guid>https://blog.paulmontag.info/posts/bpftrace_and_go/</guid><description>&lt;p&gt;You know what is awesome! BPFtrace! There is nothing more magic than showing someone exactly what is happening in their application, &lt;strong&gt;RIGHT AT THAT MOMENT&lt;/strong&gt;. There is something neat about peering under the hood of a running application and finding that your pristine software, your baby which you have labored over making perfect is still marred with logical errors that don&amp;rsquo;t show themselves when viewed holistically. Sadly, when you are reaching for something like BPFtrace you are typically in a bind, and the complexity of such a tool is frustrating. This is compounded by the fact that Go, in no way, makes your life easier here. Hence I will write down what I know in hopes to clear someone else&amp;rsquo;s frustrations. (more likely my future self)&lt;/p&gt;</description></item><item><title>Go Heap Allocations</title><link>https://blog.paulmontag.info/posts/go_heap_allocation/</link><pubDate>Wed, 24 Jan 2024 21:45:13 -0600</pubDate><guid>https://blog.paulmontag.info/posts/go_heap_allocation/</guid><description>&lt;p&gt;Recently I found myself caring about performance. Usually, with go, you don&amp;rsquo;t have to care if something is on the stack or the heap. Since Go is a garbage collected language all those details are taken care of for you. Worrying about these things is a pre-optimization, and the community is very happy to tell you so. However, there is the rare event performance takes precedence, in which case the favor of garbage collection turns into a frustrating scavenger hunt.&lt;/p&gt;</description></item></channel></rss>