<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: fmstephe</title><link>https://news.ycombinator.com/user?id=fmstephe</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Apr 2026 12:33:29 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=fmstephe" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by fmstephe in "Ask HN: Who wants to be hired? (April 2026)"]]></title><description><![CDATA[
<p><p><pre><code>    Location: New Zealand, Manawatu
    Remote: Yes
    Willing to relocate: No
    Technologies: Go, Java, Git, Erlang, Postgres, Linux
    Resume: https://www.linkedin.com/in/francis-stephens/
    Email: francisstephens@gmail.com</code></pre>
I work primarily on backend systems, with a strong focus on performance and system stability/resilience. I worked as a performance engineer at the mobile add-attribution company Adjust.
Some interesting open-source projects include<p><a href="https://github.com/fmstephe/memorymanager" rel="nofollow">https://github.com/fmstephe/memorymanager</a> An exploratory manual memory allocator for building large in-memory data structures with near zero GC cost.<p><a href="https://github.com/fmstephe/matching_engine" rel="nofollow">https://github.com/fmstephe/matching_engine</a> A financial trading matching engine with a somewhat novel red+black tree implementation.<p><a href="https://github.com/fmstephe/flib" rel="nofollow">https://github.com/fmstephe/flib</a> A set of packages primarily in support of a lock-free single-producer single-consumer queue.<p>My ideal position would be working on backend systems primarily in Go.</p>
]]></description><pubDate>Wed, 01 Apr 2026 23:33:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47608037</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=47608037</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47608037</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: Who wants to be hired? (March 2026)"]]></title><description><![CDATA[
<p><p><pre><code>    Location: New Zealand, Manawatu
    Remote: Yes
    Willing to relocate: No
    Technologies: Go, Java, Git, Erlang, Postgres, Linux
    Resume: https://www.linkedin.com/in/francis-stephens/
    Email: francisstephens@gmail.com
</code></pre>
I work primarily on backend systems, with a strong focus on performance and system stability/resilience. I worked as a performance engineer at the mobile add-attribution company Adjust.<p>Some interesting open-source projects include<p><a href="https://github.com/fmstephe/memorymanager" rel="nofollow">https://github.com/fmstephe/memorymanager</a>
An exploratory manual memory allocator for building large in-memory data structures with near zero GC cost.<p><a href="https://github.com/fmstephe/matching_engine" rel="nofollow">https://github.com/fmstephe/matching_engine</a>
A financial trading matching engine with a somewhat novel red+black tree implementation.<p><a href="https://github.com/fmstephe/flib" rel="nofollow">https://github.com/fmstephe/flib</a>
A set of packages primarily in support of a lock-free single-producer single-consumer queue.<p>My ideal position would be working on backend systems primarily in Go.</p>
]]></description><pubDate>Tue, 03 Mar 2026 03:06:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47227465</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=47227465</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47227465</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: What are you working on? (February 2026)"]]></title><description><![CDATA[
<p>Last time this was asked I was working on this<p><a href="https://github.com/fmstephe/simd_explorer" rel="nofollow">https://github.com/fmstephe/simd_explorer</a><p>A little TUI app for interactively running different SIMD instructions and seeing the outputs.<p>Since then I have completed the tool for AVX/2. At this stage that's as far as I intend to go.<p>It's potentially valuable as an interactive quick reference guide for SIMD instructions.<p>It works on Windows, Linux and with the right environment variables it will successfully pretend to be AMD64 running on an Apple M chip.<p>Arm NEON instructions are not supported at all, currently Go's assembler does not include these instructions directly, so I didn't attempt to build for them. Maybe one day.<p>Next up, learn Zig - be happy.</p>
]]></description><pubDate>Tue, 10 Feb 2026 04:10:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46955280</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=46955280</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46955280</guid></item><item><title><![CDATA[New comment by fmstephe in "So, you want to chunk really fast?"]]></title><description><![CDATA[
<p>Can some clarify this part of the article for me<p>"if you search forward, you need to scan through the entire window to find where to split. you’d find a delimiter at byte 50, but you can’t stop there — there might be a better split point closer to your target size. so you keep searching, tracking the last delimiter you saw, until you finally cross the chunk boundary. that’s potentially thousands of matches and index updates."<p>So I understand that this is optimal if you want to make your chunks as large as possible for a given chunk size.<p>What I don't understand is why is it desirable to grab the largest chunk possible for a given chunk limit?<p>Or have I misunderstood this part of the article?</p>
]]></description><pubDate>Mon, 05 Jan 2026 22:40:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=46506124</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=46506124</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46506124</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: What Are You Working On? (December 2025)"]]></title><description><![CDATA[
<p>If anyone wants to try it out (the UI is a bit rough). I will try fix up any issues that are uncovered.</p>
]]></description><pubDate>Mon, 15 Dec 2025 00:04:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46268596</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=46268596</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46268596</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: What Are You Working On? (December 2025)"]]></title><description><![CDATA[
<p>Working on a TUI tool which demonstrates the behaviour of X86 SIMD instructions. This is all done in Go assembly, and is probably most valuable for Go programmers.<p>The problem for me was trying to read and understand the implementation of a swiss map implementation. The SIMD instructions were challenging to understand and the documentation felt difficult to read. I thought that if I had an interactive tool where I could set the inputs to a SIMD instruction and then read the outputs, understanding the instructions would be much easier.<p>This turned out to be true.<p>Building this tool for all AVX/AVX2 instructions turned out to be a larger task than I had expected. Naively I just went off a Wikipedia page on AXV and assumed it had listed all the instructions (this was a bad assumption).<p>I am nearly there. Looking forward to completing this project so I can actually use it to do some fun stuff processing text and maybe even get back to that swiss map implementation.<p><a href="https://github.com/fmstephe/simd_explorer" rel="nofollow">https://github.com/fmstephe/simd_explorer</a><p>(This is also my first attempt at a TUI app)</p>
]]></description><pubDate>Sun, 14 Dec 2025 23:17:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46268176</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=46268176</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46268176</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: Who wants to be hired? (December 2025)"]]></title><description><![CDATA[
<p>Location: New Zealand, Manawatu Remote: Yes Willing to relocate: No Technologies: Go, Java, Git, Erlang, Postgres, Linux Resume: <a href="https://www.linkedin.com/in/francis-stephens/" rel="nofollow">https://www.linkedin.com/in/francis-stephens/</a> Email: francisstephens@gmail.com I work primarily on backend systems, with a strong focus on performance and system stability/resilience. I worked as a performance engineer at the mobile add-attribution company Adjust. Some interesting open-source projects include
<a href="https://github.com/fmstephe/memorymanager" rel="nofollow">https://github.com/fmstephe/memorymanager</a> An exploratory manual memory allocator for building large in-memory data structures with near zero GC cost.
<a href="https://github.com/fmstephe/matching_engine" rel="nofollow">https://github.com/fmstephe/matching_engine</a> A financial trading matching engine with a somewhat novel red+black tree implementation.
<a href="https://github.com/fmstephe/flib" rel="nofollow">https://github.com/fmstephe/flib</a> A set of packages primarily in support of a lock-free single-producer single-consumer queue.
My ideal position would be working on backend systems primarily in Go.</p>
]]></description><pubDate>Sat, 06 Dec 2025 05:32:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=46170992</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=46170992</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46170992</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: Who wants to be hired? (November 2025)"]]></title><description><![CDATA[
<p>Location: New Zealand, Manawatu
    Remote: Yes
    Willing to relocate: No
    Technologies: Go, Java, Git, Erlang, Postgres, Linux
    Resume: <a href="https://www.linkedin.com/in/francis-stephens/" rel="nofollow">https://www.linkedin.com/in/francis-stephens/</a>
    Email: francisstephens@gmail.com
I work primarily on backend systems, with a strong focus on performance and system stability/resilience. I worked as a performance engineer at the mobile add-attribution company Adjust.
Some interesting open-source projects include<p><a href="https://github.com/fmstephe/memorymanager" rel="nofollow">https://github.com/fmstephe/memorymanager</a> An exploratory manual memory allocator for building large in-memory data structures with near zero GC cost.<p><a href="https://github.com/fmstephe/matching_engine" rel="nofollow">https://github.com/fmstephe/matching_engine</a> A financial trading matching engine with a somewhat novel red+black tree implementation.<p><a href="https://github.com/fmstephe/flib" rel="nofollow">https://github.com/fmstephe/flib</a> A set of packages primarily in support of a lock-free single-producer single-consumer queue.<p>My ideal position would be working on backend systems primarily in Go.</p>
]]></description><pubDate>Tue, 04 Nov 2025 02:18:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=45806820</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=45806820</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45806820</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: Who wants to be hired? (June 2025)"]]></title><description><![CDATA[
<p><p><pre><code>    Location: New Zealand, Manawatu
    Remote: Yes
    Willing to relocate: No
    Technologies: Go, Java, Git, Erlang, Postgres, Linux
    Resume: https://www.linkedin.com/in/francis-stephens/
    Email: francisstephens@gmail.com
</code></pre>
I work primarily on backend systems, with a strong focus on performance and system stability/resilience. I worked as a performance engineer at the mobile add-attribution company Adjust.<p>Some interesting open-source projects include<p><a href="https://github.com/fmstephe/memorymanager">https://github.com/fmstephe/memorymanager</a>
An exploratory manual memory allocator for building large in-memory data structures with near zero GC cost.<p><a href="https://github.com/fmstephe/matching_engine">https://github.com/fmstephe/matching_engine</a>
A financial trading matching engine with a somewhat novel red+black tree implementation.<p><a href="https://github.com/fmstephe/flib">https://github.com/fmstephe/flib</a>
A set of packages primarily in support of a lock-free single-producer single-consumer queue.<p>My ideal position would be working on backend systems primarily in Go.</p>
]]></description><pubDate>Tue, 03 Jun 2025 00:14:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=44164814</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=44164814</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44164814</guid></item><item><title><![CDATA[New comment by fmstephe in "I salvaged $6k of luxury items discarded by Duke students"]]></title><description><![CDATA[
<p>In New Zealand, where I live, the Salvation Army (charity second hand shop) offers a service where they will come and clear out a house for you. They will take everything and dispose of the trash and keep and resell anything of value.<p>This is really used to clear out houses of deceased relatives etc.<p>This doesn't resolve your problem of generally selling your used goods conveniently. But I always found it to be a really interesting service. Because it identifies that there is real practical difficulty in simply giving away a lot of goods, and the solution is to provide this complete service to make it easier.</p>
]]></description><pubDate>Tue, 27 May 2025 21:19:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=44110762</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=44110762</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44110762</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: What are you working on? (May 2025)"]]></title><description><![CDATA[
<p>I've been working on an offheap allocator for Go.<p>In contrast to the popular arena based allocators (which target quickly allocating/freeing short lived per-request allocations), I am targeting an allocator for build very large in-memory dbs or caches with almost no garbage collection cost.<p>There's a little no-gc string interner package in there as well.<p><a href="https://github.com/fmstephe/memorymanager">https://github.com/fmstephe/memorymanager</a><p>It's somewhat on pause right now as I have just started a new job. (but it has been a very fun project, nerdy joy).<p>Related to the memorymanager, as in intending to support it are<p><a href="https://github.com/fmstephe/fuzzhelper">https://github.com/fmstephe/fuzzhelper</a>
A library for setting up fuzz tests for complex data structures.<p><a href="https://github.com/fmstephe/gossert">https://github.com/fmstephe/gossert</a>
A library for adding runtime assertions to Go code. It's developed so that when the assertions are switched off the compiler should be able to completely eliminate the assertions. But this requires build tags to switch the assertions on.</p>
]]></description><pubDate>Mon, 26 May 2025 01:34:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=44093080</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=44093080</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44093080</guid></item><item><title><![CDATA[New comment by fmstephe in "Cheating the Reaper in Go"]]></title><description><![CDATA[
<p>For the problems that arena allocators solve, relatively short lived allocations which die soon, yes. A generational collector would allow for faster allocation rates (a thread local bump allocator would become easy to use).<p>But very long lived data structures, like caches and in memory databases still need to be marked during full heap garbage collection cycles. These are less frequent with a generational collector though.</p>
]]></description><pubDate>Thu, 24 Apr 2025 10:19:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=43780992</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=43780992</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43780992</guid></item><item><title><![CDATA[New comment by fmstephe in "Cheating the Reaper in Go"]]></title><description><![CDATA[
<p>This article is a fun read.<p>If you enjoyed this, or if you need more control over some memory allocations in Go, please have a look at this package I wrote. I would love to have some feedback or have someone else use it.<p><a href="https://github.com/fmstephe/memorymanager">https://github.com/fmstephe/memorymanager</a><p>It bypasses the GC altogether by allocating its own memory separately from the runtime. It also disallows pointer types in allocations, but replaces them with a Reference[T] type, which offers the same functionality. Freeing memory is manual though - so you can't rely on anything being garbage collected.<p>These custom allocators in Go tend to be arena's intended to support groups of allocations which live and die together. But the offheap package was intended to build large long-lived datastructures with zero garbage collection cost. Things like large in-memory caches or databases.</p>
]]></description><pubDate>Tue, 22 Apr 2025 03:48:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43758928</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=43758928</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43758928</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: Who wants to be hired? (April 2025)"]]></title><description><![CDATA[
<p><p><pre><code>    Location: New Zealand, Manawatu
    Remote: Yes
    Willing to relocate: No
    Technologies: Go, Java, Git, Erlang, Postgres, Linux
    Resume: https://www.linkedin.com/in/francis-stephens/
    Email: francisstephens@gmail.com
</code></pre>
I work primarily on backend systems, with a strong focus on performance and system stability/resilience. I worked as a performance engineer at the mobile add-attribution company Adjust.<p>Some interesting open-source projects include<p><a href="https://github.com/fmstephe/memorymanager">https://github.com/fmstephe/memorymanager</a>
An exploratory manual memory allocator for building large in-memory data structures with near zero GC cost.<p><a href="https://github.com/fmstephe/matching_engine">https://github.com/fmstephe/matching_engine</a>
A financial trading matching engine with a somewhat novel red+black tree implementation.<p><a href="https://github.com/fmstephe/flib">https://github.com/fmstephe/flib</a>
A set of packages primarily in support of a lock-free single-producer single-consumer queue.<p>My ideal position would be working on backend systems primarily in Go.</p>
]]></description><pubDate>Mon, 07 Apr 2025 20:05:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=43615370</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=43615370</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43615370</guid></item><item><title><![CDATA[New comment by fmstephe in "Go Optimization Guide"]]></title><description><![CDATA[
<p>Just an anecdote from work to back this up. I wrote a system that was taking requests, making another request to a service (that basically wrapped elasticsearch) and then processed the results and returned to the results to the caller.<p>By default the elastic-search results were paginated and defaulted to some small number in the order of 25..100. I increased this steadily upwards beyond 100,000 to the point where every request always returned the entire result in the first page. And it _transformed_ the performance of the service. From one that was unbearably slow for human users to one that _felt_ instantaneous. I had real perf numbers at the time, but now all I have are the impressions.<p>But the lesson on the impact of the overhead of those paginated calls was important. Obviously everything is specific and YMMV, but this something worth having in the back of your mind.</p>
]]></description><pubDate>Wed, 02 Apr 2025 01:56:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=43553025</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=43553025</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43553025</guid></item><item><title><![CDATA[New comment by fmstephe in "Ask HN: Who wants to be hired? (February 2025)"]]></title><description><![CDATA[
<p><p><pre><code>    Location: New Zealand, Manawatu
    Remote: Yes
    Willing to relocate: No
    Technologies: Go, Java, Git, Erlang, Postgres, Linux
    Resume: https://www.linkedin.com/in/francis-stephens/
    Email: francisstephens@gmail.com
</code></pre>
I work primarily on backend systems, with a strong focus on performance and system stability/resilience. I worked as a performance engineer at the mobile add-attribution company Adjust.<p>Some interesting open-source projects include<p><a href="https://github.com/fmstephe/memorymanager">https://github.com/fmstephe/memorymanager</a>
An exploratory manual memory allocator for building large in-memory data structures with near zero GC cost.<p><a href="https://github.com/fmstephe/matching_engine">https://github.com/fmstephe/matching_engine</a>
A financial trading matching engine with a somewhat novel red+black tree implementation.<p><a href="https://github.com/fmstephe/flib">https://github.com/fmstephe/flib</a>
A set of packages primarily in support of a lock-free single-producer single-consumer queue.<p>My ideal position would be working on backend systems primarily in Go.</p>
]]></description><pubDate>Mon, 03 Feb 2025 22:54:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=42924519</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=42924519</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42924519</guid></item><item><title><![CDATA[New comment by fmstephe in "Print(“lol”) doubled the speed of my Go function"]]></title><description><![CDATA[
<p>So would you say in the general case, i.e. the compiler obviously doesn't know how predictable a branch may be, using conditional move is a poor choice when writing to an address which is repeatedly written to inside the loop?<p>What I am trying to get a feel for, is whether this represents a bad choice of assembly in general for this kind of loop.</p>
]]></description><pubDate>Thu, 24 Aug 2023 06:35:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=37245725</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=37245725</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37245725</guid></item><item><title><![CDATA[New comment by fmstephe in "Print(“lol”) doubled the speed of my Go function"]]></title><description><![CDATA[
<p>This is a very good answer. Thanks.</p>
]]></description><pubDate>Thu, 24 Aug 2023 06:22:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=37245645</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=37245645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37245645</guid></item><item><title><![CDATA[New comment by fmstephe in "Print(“lol”) doubled the speed of my Go function"]]></title><description><![CDATA[
<p>Yeah, after reading the blog post I felt reasonably confident that this is a compiler bug (in terms of perf).<p>Hopefully someone with a deeper understanding can verify or discredit this here. I'm curious to see the fix for this (I assume it will generate a fix).</p>
]]></description><pubDate>Thu, 24 Aug 2023 05:29:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=37245364</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=37245364</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37245364</guid></item><item><title><![CDATA[New comment by fmstephe in "Print(“lol”) doubled the speed of my Go function"]]></title><description><![CDATA[
<p>It's interesting that you say conditional move here.<p>I am confused by this behaviour, and although I definitely don't know what the answer is here; the non-lol version does have a CSEL (<a href="https://developer.arm.com/documentation/dui0802/b/CSEL" rel="nofollow noreferrer">https://developer.arm.com/documentation/dui0802/b/CSEL</a>) which is totally missing from the lol version.<p>Non-lol
<a href="https://godbolt.org/z/ds1raTYc9" rel="nofollow noreferrer">https://godbolt.org/z/ds1raTYc9</a><p>lol
<a href="https://godbolt.org/z/c3afrb6bG" rel="nofollow noreferrer">https://godbolt.org/z/c3afrb6bG</a></p>
]]></description><pubDate>Thu, 24 Aug 2023 05:23:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=37245325</link><dc:creator>fmstephe</dc:creator><comments>https://news.ycombinator.com/item?id=37245325</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37245325</guid></item></channel></rss>