seth's website https://sethops1.net/ Recent content on seth's website Hugo en-us Wed, 18 Feb 2026 00:00:00 +0000 some old irc quotes https://sethops1.net/post/some-old-irc-quotes/ Wed, 18 Feb 2026 00:00:00 +0000 https://sethops1.net/post/some-old-irc-quotes/ <p>Came across this small collection of saved IRC quotes while clearing out old GitHub gists of mine. Figured I may as well post them here. IIRC most of these are from <code>#proggit</code> on FreeNode probably from 2010-2015.</p> <pre tabindex="0"><code>&lt;eck&gt; QOTW, &#34;Rob, I&#39;m sure you&#39;re focused on recovering things at the comment. When the dust settles, you might want to ask your team how &#34;PHP&#34;, &#34;personal www dir&#34; and &#34;business critical app&#34; were ever grouped together.&#34; &lt;eck&gt; this is on a ticket i&#39;m handling </code></pre><pre tabindex="0"><code>&lt;unknown&gt; The strengths of Go to me seem to be its extensive standard library and the fact that you don&#39;t need to worry about writing elegant code because it&#39;s not really an option. </code></pre><pre tabindex="0"><code>&lt;ryan&gt; I hope some day in the near future linus torvalds is on film taking a shit in front of the door to a canonical office pointing to it and saying &#34;THIS IS WHAT YOU DID TO MY BABY!&#34; </code></pre><pre tabindex="0"><code>&lt;thoughtpolice&gt; FML &lt;thoughtpolice&gt; i&#39;m totally getting bitten by this linux leapsecond futex bug &lt;x[LGWs4x4i]uG2N0&gt; ha ha &lt;x[LGWs4x4i]uG2N0&gt; he uses linux &lt;x[LGWs4x4i]uG2N0&gt; laughinggirls.jpg &lt;greghaynes&gt; thoughtpolice: details prease? &lt;dforsyth&gt; laughingelfman.jpg &lt;greghaynes&gt; that sounds like a fun bug &lt;thoughtpolice&gt; i&#39;m sorry, i can&#39;t hear you over your freebsd sucking so bad &lt;thoughtpolice&gt; and not supporting any hardware &lt;thoughtpolice&gt; also did i mention sucking? </code></pre><pre tabindex="0"><code>&lt;Two9A&gt; Why do you think JS writers go insane? &lt;Two9A&gt; (Because they&#39;re writing lisp and don&#39;t know it, but that&#39;s by the by) &lt;hfaafb_&gt; what? &lt;Two9A&gt; What? &lt;hfaafb_&gt; js === lisp? &lt;sixthgear&gt; haha &lt;sixthgear&gt; the === is a brilliant touch </code></pre><pre tabindex="0"><code>&lt;mux&gt; it&#39;d be easier to teach a duck to sing than to have any kind of meaningful &#34;static typing&#34; in php </code></pre><pre tabindex="0"><code>&lt;null__&gt; @quote kisses &lt;lambdabot&gt; reppie says: would you say kisses mark the minutes on the dial of love </code></pre><pre tabindex="0"><code>&lt;lambdabot&gt; Erik-Naggum says: You have failed to consider the ramifications of the solutions and pose a problem that simply would not exist if you did. This taxes my patience, which is already legendary in its general absence. </code></pre><pre tabindex="0"><code>&lt;Vellos&gt; Sometimes nature fucks over your double-helix a bit, and the region of your brain dedicated to handling all that social bullshit in realtime got re-purposed to analytical thinking </code></pre><pre tabindex="0"><code>jorts69: [The worst thing about becming an adult is] that feeling that you spent your whole life tapping the world on the shoulder and when it finally turned around you forgot what you had to say. </code></pre><pre tabindex="0"><code>mattijle: &#34;I am an energetic self starter with a deep respect for engaging resources and getting deep buy-in. I&#39;m always interested in being a key player and helping you gain synergistic value on your mission-critical project. It&#39;s important to think outside of the box, shift paradigms and push the envelope when bringing user-centric change to an organization. When I&#39;m involved it&#39;s about about the value add and creating a win-win. In this economic climate you have to rightsize but remain scalable and always deliver service that is world class&#34; </code></pre><pre tabindex="0"><code>&lt;sirpengi&gt; git gets easier once you get the basic idea that branches are homeomorphic endofunctors mapping submanifolds of a Hilbert space </code></pre><pre tabindex="0"><code>&lt;rcr&gt; i never have a hard time with merge conflicts because my code is always the most correct </code></pre><pre tabindex="0"><code>&lt;saml&gt; when you pull retina display, that means it&#39;s yolo webscale </code></pre><pre tabindex="0"><code>&lt;saml&gt; stack solves everything. that&#39;s why mongodb is a stack </code></pre><pre tabindex="0"><code>&lt;rcr&gt; i think we should implement a new rule here &lt;rcr&gt; for all new commits, git show | grep pdb &lt;rcr&gt; if it returns anything you dont get paid this week </code></pre><pre tabindex="0"><code>&lt;thoughtpolice&gt; today, at least, if someone tries an active MITM on a popular, high-value site, it will almost certainly be detected by Google or Mozilla as it auto reports this. they then remove the CA from their trusted list, effectively taking that CA out back, putting it on its knees and letting it grovel a bit, and then shooting them in the head </code></pre><pre tabindex="0"><code>&lt;centrinia&gt; Go is fail. &lt;shoenig&gt; @slap centrinia &lt;lambdabot&gt; Come on, let&#39;s all slap centrinia &lt;hfaafb&gt; @slap centrinia * lambdabot pulls centrinia through the Evil Mangler &lt;centrinia&gt; :( &lt;centrinia&gt; @slap Go * lambdabot would never hurt Go! &lt;shoenig&gt; exactly. &lt;centrinia&gt; What the fuck? </code></pre> nandland go board linux toolchain https://sethops1.net/post/nandland-go-board-linux-toolchain/ Sun, 25 Jan 2026 00:00:00 +0000 https://sethops1.net/post/nandland-go-board-linux-toolchain/ <p>I picked up a <a href="https://nandland.com/the-go-board/">nandland Go Board</a> to start learning about FPGAs. Just for fun, nothing too serious. I got the &ldquo;Getting Started with FPGAs&rdquo; book along with the development board, for just over $100. Good deal.</p> <p><img src="https://cattlecloudcdn.nyc3.cdn.digitaloceanspaces.com/sethops1/images/nandland-go-board.jpg" alt="nanland Go Board" title="My NandLand Go Board"></p> <p>The only snag is that book suggests using the iCEcube2 toolchain directly from Lattice Semiconductor. Although that official toolchain is free if you request a license for personal use, the Linux support is terrible. They only provide a 32-bit binary from 2020 and making it work on a modern Linux system is a nightmare.</p> making a new website https://sethops1.net/post/making-a-new-website/ Fri, 20 Jun 2025 00:00:00 +0000 https://sethops1.net/post/making-a-new-website/ <p>Since early January I have been working on something - a new website.</p> <p>It&rsquo;s a stock discussion forum called TickerFeed.</p> <p><a href="https://tickerfeed.net">https://tickerfeed.net</a></p> <p>The past few months have been a waterfall of changes and new beginnings. After a fulfilling chapter at HashiCorp, the news of the IBM acquisition served as a clear signal for me to pivot and embark on a new adventure. It felt like it was time to step away from the corporate world and build something meaningful.</p> use adguard dns https://sethops1.net/post/use-adguard-dns/ Wed, 04 Sep 2024 00:00:00 +0000 https://sethops1.net/post/use-adguard-dns/ <p>AdGuard offers DNS ad-blocking but they make it difficult to find the IP addresses.</p> <p>They are</p> <ul> <li><code>94.140.14.14</code></li> <li><code>94.140.15.15</code></li> </ul> <p>and for IPv6</p> <ul> <li><code>2a10:50c0::ad1:ff</code></li> <li><code>2a10:50c0::ad2:ff</code></li> </ul> <p>These are listed at the bottom of <a href="https://adguard-dns.io/en/public-dns.html">https://adguard-dns.io/en/public-dns.html</a></p> vlans on mikrotik https://sethops1.net/post/vlans-on-mikrotik/ Tue, 03 Sep 2024 00:00:00 +0000 https://sethops1.net/post/vlans-on-mikrotik/ <p><strong>Introduction</strong></p> <p>I purchased a <a href="https://mikrotik.com/product/hex_s">MikroTik Hex-S</a> a few years ago to handle routing for my house. It sits between my cable modem and 4 ethernet cables that bring internet to other rooms.</p> <p><strong>Homelab</strong></p> <p>In my <em>real</em> example I wanted to enable a VLAN on the Hex-S to isolate two pairs of the physical network interfaces (ports). In my case these are two computers I use for work. I want them to be isolated from other devices on my home network, such as the Nest thermostats, media center PC, and the XBOX. Call me paranoid but I&rsquo;d bet those IoT devices like to snoop on your network.</p> setup tailscale on freebsd https://sethops1.net/post/setup-tailscale-on-freebsd/ Sun, 17 Dec 2023 00:00:00 +0000 https://sethops1.net/post/setup-tailscale-on-freebsd/ <p>This blog post describes how to install and setup the <a href="https://tailscale.com">tailscale</a> agent on a FreeBSD machine. Luckily a <code>tailscale</code> port is already packaged and contains the necessary daemon and CLI components.</p> <pre><code>sudo pkg install tailscale </code></pre> <p>From here though we need to edit <code>/etc/rc.conf</code> to enable the <code>tailscaled</code> agent daemon. Add the following line to the file.</p> <pre><code>tailscaled_enable=&quot;YES&quot; </code></pre> <p>With this, we can activate the <code>tailscaled</code> agent.</p> <pre><code>sudo service tailscaled start </code></pre> <p>And with the <code>tailscaled</code> agent started, it is now possible to authenticate using the <code>tailscale</code> CLI tool.</p> build freebsd image using packer https://sethops1.net/post/build-freebsd-image-using-packer/ Tue, 28 Nov 2023 00:00:00 +0000 https://sethops1.net/post/build-freebsd-image-using-packer/ <p><a href="https://sethops1.net/post/run-freebsd-in-qemu-on-linux/">Last time</a> we covered booting a FreeBSD VM image using QEMU. This is great for setting up a VM by hand or just logging in to play around and experiment with the system. For production use though we want to automate configuration of the FreeBSD VM image so that we are not manually running install commands and editing configuration files, etc.</p> <p>For this we use <a href="https://developer.hashicorp.com/packer/docs/intro">Packer</a> from HashiCorp.</p> <p>Once again these instructions assume an amd64 (x86_64) Ubuntu 22.04 host machine and using QEMU as the virtualization layer. The Linux KVM hardware accelerator can be used to improve performance.</p> run freebsd in qemu on linux https://sethops1.net/post/run-freebsd-in-qemu-on-linux/ Sat, 25 Nov 2023 00:00:00 +0000 https://sethops1.net/post/run-freebsd-in-qemu-on-linux/ <p>This blog post serves as a basic guide on how to run a FreeBSD 14 virtual machine in QEMU using a headless Ubuntu 22.04 linux host. The assumption here is both the host and guest operating systems are amd64 (a.k.a. x86_64).</p> <h2 id="install-qemu-packages">Install QEMU packages</h2> <p>Install the <code>qemu-system-x86</code> package. Do not install recommended packages as those will include a huge number of graphics packages we are not interested in for a headless server.</p> minimal consul acl connect setup https://sethops1.net/post/minimal-consul-acl-connect-setup/ Thu, 20 Oct 2022 00:00:00 +0000 https://sethops1.net/post/minimal-consul-acl-connect-setup/ <p>Often I need a simple Consul agent with ACLs and Connect enabled for a simple reproduction or demonstration. Although there is a &ldquo;dev mode&rdquo; Consul <em>really</em> does not make things easy for getting setup beyond a trivial, insecure agent.</p> <p>This post is a step-by-step guide on how I start from nothing and end up with a single-node Consul cluster usable with ACLs and Connect enabled. <strong>This guide is not about creating a production - ready Consul cluster</strong>, for that take a look at the official <a href="https://learn.hashicorp.com/tutorials/consul/access-control-setup-production">Consul ACL Guide</a>.</p> retro on a generic Go test assertions library https://sethops1.net/post/retro-on-a-generic-go-test-assertions-library/ Sun, 16 Oct 2022 00:00:00 +0000 https://sethops1.net/post/retro-on-a-generic-go-test-assertions-library/ <p><strong>[Introduction]</strong></p> <p>About six months ago <a href="https://github.com/shoenig/test">shoenig/test</a> was created as a modern, generics based alternative to the popular <code>stretchr/testify</code> testing assertions library for Go. As a developer of Hashicorp&rsquo;s Nomad project, I am lucky to work with a team willing to endure my experiments. This blog-post is a look back on how well Go generics have (and haven&rsquo;t) served us in using the library on a real, very large Go project.</p> <p>There were three guiding principles in designing the library.</p> go generics for the busy gopher https://sethops1.net/post/go-generics-for-the-busy-gopher/ Sun, 06 Feb 2022 00:00:00 +0000 https://sethops1.net/post/go-generics-for-the-busy-gopher/ <p>What is this?</p> <ul> <li> <p>Go 1.18 introduces <a href="https://tip.golang.org/doc/tutorial/generics">generics</a> to the language</p> </li> <li> <p>Some may just want to skim Go generics by example in a blog post</p> </li> <li> <p>This is that blog post</p> </li> </ul> <p><strong>(!) caution</strong>: Language pedants may find the content triggering</p> <h2 id="new-terms">new terms</h2> <p><strong>generics</strong>: The idea that type information can be determined not during implementation, but later</p> <p><strong>type parameter</strong>: The thing that represents potential types during implementation</p> <p><strong>constraint</strong>: The thing that places restrictions on a type parameter</p> attempts to make python fast https://sethops1.net/post/attempts-to-make-python-fast/ Tue, 20 Oct 2020 00:00:00 +0000 https://sethops1.net/post/attempts-to-make-python-fast/ <p>Posted on Hacker News there was an <a href="https://github.com/markshannon/faster-cpython/blob/master/plan.md">Implementation Plan</a> for making CPython (the official Python implementation) faster. The author claims a 5x speedup is possible for the low cost of <a href="https://github.com/markshannon/faster-cpython/blob/master/funding.md">$2 million</a> USD.</p> <p>The four step plan includes</p> <ul> <li>creating an adaptive interpreter</li> <li>improvements to internal types</li> <li>creating a JIT compiler</li> <li>extending the JIT compiler</li> </ul> <p>We have witnessed other attempts at making Python fast, each achieving their own degree of success in terms of performance and compatibility. For posterity I started keeping a list of them here, in no particular order.</p> app-indicator output devices https://sethops1.net/post/app-indicator-output-devices/ Sun, 18 Oct 2020 00:00:00 +0000 https://sethops1.net/post/app-indicator-output-devices/ <p>With multiple sound output devices (headphones, speaker, etc.), selecting which one to use on Ubuntu 20.04 is kinda clumsy. Doing so involves opening Settings, navigating to Sound, selecting the Output device. Windows and macOS make it easy by having a selector on the taskbar. With a gnome extension Ubuntu can also have a sound output device selector on the task bar.</p> <p>The best I&rsquo;ve found is <a href="https://github.com/kgshank/gse-sound-output-device-chooser">gse-sount-output-device-chooser</a>.</p> <p>Installation leaves a little to be desired, but it&rsquo;s not too bad (and does not require root or adding custom PPAs).</p> disable mitigations on ubuntu https://sethops1.net/post/disable-mitigations-on-ubuntu/ Sun, 24 May 2020 00:00:00 +0000 https://sethops1.net/post/disable-mitigations-on-ubuntu/ <p>By default, most Linux distributions will now enable kernel level mitigations for CPU bugs such as the infamous meltdown and spectre. These mitigations are extremely important for the use of running untrusted code (e.g. cloud VMs), but are less relevant for personal computers, who generally control what is being executed.</p> <p>The mitigations will impact performance, especially for workloads that incur context switching. In particular, developers are highly impacted, since our build tools are all reading and writing files to/from disk, for tasks from compilation to code auto-completion. There is room for noticeable performance improvement by disabling mitigations.</p> hclfmt as a service https://sethops1.net/post/hclfmt-as-a-service/ Sat, 28 Mar 2020 00:00:00 +0000 https://sethops1.net/post/hclfmt-as-a-service/ <p>As a developer working on <a href="https://nomadproject.io/">Nomad</a>, there is frequent need for copying and pasting snippets of <a href="https://github.com/hashicorp/hcl/tree/hcl2#hcl">HCL</a> to and from GitHub issues, documentation, example files, etc. While the normal <code>hclfmt</code> command works great on files, it is not so convenient for web mediums. Pasted HCL snippets into issues and comments tend to be malformed.</p> <p>Not anymore! <a href="https://sethops1.net/hclfmt">sethops1.net/hclfmt</a> is a simple HCL formatter for conveniently formatting those HCL snippets before pasting them into GitHub issues and the like. Under the hood it runs the hcl2 formatter as a library, so the output is guaranteed to be well formed. It does the same syntax validation the <code>hclfmt</code> command would do.</p> extract columns with fields https://sethops1.net/post/extract-columns-with-fields/ Sat, 29 Feb 2020 00:00:00 +0000 https://sethops1.net/post/extract-columns-with-fields/ <p>About a month ago there was an article on Hacker News, &ldquo;Why Learn Awk? (2016)&rdquo;. In the comments of that article was a <a href="https://news.ycombinator.com/item?id=22109138">thread started by jerf</a>, which spoke directly to my own sentiments. Parsing columns of text should be simpler!</p> <p>There are of course the timeless tools like <code>awk</code> and <code>cut</code> - which when combined with other arcane shell-isms can accomplish literally anything. But I wanted something that was <em>simple</em>, for a recurring use case that did not feel well served by the status quo.</p> rename pulseaudio sinks https://sethops1.net/post/rename-pulseaudio-sinks/ Fri, 21 Feb 2020 00:00:00 +0000 https://sethops1.net/post/rename-pulseaudio-sinks/ <p>One might notice the names of output devices (called &ldquo;sinks&rdquo;) that <code>pulseaudio</code> uses are not very pretty. Unless you&rsquo;re a robot, something like <code>pci-0000_0b_00.1.hdmi-stereo</code> just doesn&rsquo;t roll off the tongue quite like, <code>Headphones</code>. Fortunately, there is a way to reconfigure the names to whatever we want them to be.</p> <p>First, get a list of the sinks <code>pulseaudio</code> is aware of &hellip;</p> <pre><code>$ pacmd list-sinks | grep name: | fields 2 | sed 's/&lt;//g' | sed 's/&gt;//g' alsa_output.usb-0c76_USB_PnP_Audio_Device-00.analog-stereo alsa_output.pci-0000_0b_00.1.hdmi-stereo alsa_output.pci-0000_0d_00.4.analog-stereo </code></pre> <p>That is a list of the three output devices plugged into my computer. Actually, one of them happens to be a microphone that reports itself as both a sink and a source.</p> goroutine closure rule https://sethops1.net/post/goroutine-closure-rule/ Tue, 18 Feb 2020 00:00:00 +0000 https://sethops1.net/post/goroutine-closure-rule/ <p>One of the most insidious gotcha&rsquo;s when coding in Go is the behavior of variable scoping in the context of goroutine closures. By now this foot-gun is well established. Consider the snippet &hellip;</p> <pre><code>for i := 0; i &lt; 10; i++ { go func() { fmt.Println(i) }() } </code></pre> <p>On first glance this should print the values <code>[0,10)</code>, though perhaps in random order since the print statements are being launched in goroutines. However, the real output is not determinable. Why? Because the variable <code>i</code> inside the launched closure is <strong>not</strong> copied - it&rsquo;s the same <code>i</code> that is being manipulated in the goroutine that the for-loop is executing in. Notice <code>go vet</code> captures this bug &hellip;</p> Seth Hoenig https://sethops1.net/about/ Thu, 06 Feb 2020 00:00:00 +0000 https://sethops1.net/about/ <h4 id="history-of-employment">History of employment</h4> <ul> <li><a href="https://cattlecloud.net">CattleCloud</a> (2025 - present) &ndash; Founder</li> <li><a href="https://hashicorp.com">HashiCorp</a> (2019 - 2025) &ndash; SWE</li> <li><a href="https://indeed.com">Indeed</a> (2014 - 2019) &ndash; SWE</li> <li><a href="https://ibm.com">IBM</a> (2013 - 2014) &ndash; SWE</li> </ul> <h4 id="history-of-education">History of education</h4> <ul> <li>University of Texas at Austin (2009-2012) <ul> <li><a href="https://utdirect.utexas.edu/apps/degree/degrees/nlogon/?s_last_name_read=&amp;s_last_isn_read=&amp;s_first_name_read=&amp;s_first_isn_read=&amp;s_first_time_sw=X&amp;s_start_name=hoenig%2C+seth&amp;s_start_page=Submit">B.S.C.S</a></li> </ul> </li> </ul> <h4 id="facial-recognition">Facial recognition</h4> <p><img src="https://sethops1.net/seth.jpeg" alt="Seth Hoenig"></p> <h4 id="for-fun">For fun</h4> <ul> <li>Coding in <a href="https://golang.org/">Go</a></li> <li>Building things</li> <li>Reading; top picks <ul> <li>Cat&rsquo;s Cradle by Kurt Vonnegut</li> <li>Apple In China by Patrick McGee</li> <li>Masters of Doom by David Kushner</li> </ul> </li> </ul> <h4 id="find-me">Find me</h4> <ul> <li><a href="https://github.com/shoenig">GitHub</a></li> <li><a href="https://tickerfeed.net/user/AlphaGod">TickerFeed</a></li> <li><a href="https://news.ycombinator.com/user?id=sethops1">HackerNews</a></li> </ul>