<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: mcmatterson</title><link>https://news.ycombinator.com/user?id=mcmatterson</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 24 May 2026 20:39:08 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mcmatterson" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mcmatterson in "Project Glasswing: An Initial Update"]]></title><description><![CDATA[
<p>The thing that really gets me as a small-time OSS maintainer is that none of us asked for this. The social and technical millieu where most of us started our projects is not the one we find ourselves in today, and the forces behind this are <i>wildly</i> asymmetric.<p>Security findings are one place where we as maintainers simply do not have the choice to not play ball, whether we like it or not. It seems likely that the only way that we meet the moment is to adopt these tools ourselves -- once again -- whether we like it or not. Reconciling this with the ground truth that 'OSS doesn't owe anyone a goddamn thing' is proving to be really hard for me.</p>
]]></description><pubDate>Sun, 24 May 2026 01:27:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48253426</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=48253426</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48253426</guid></item><item><title><![CDATA[New comment by mcmatterson in "The QUIC API OpenSSL will not provide (2021)"]]></title><description><![CDATA[
<p>As an HTTP server author, this doesn't surprise me.<p>We've ceded HTTP specification development to the big guys, and in so doing have made it more or less impossible to implement without resources on their scale. Have you looked at RFC 9000 et al? They're <i>monstrously</i> big, far larger than most independent shops could ever hope to economically pull off. The only way to comprehensively implement something of that scale is to have Google level resources to throw entire teams of engineers and years of focus at it.<p>I've long said that any protocol worthy of being foundational should be reasonably implementable as a fourth-year term project. It doesn't have to be production ready or ergonomic or even generally useful, but if a group of fourth year CS students can't pull an end-to-end implementation together in a semester, the protocol is just too complex. It's not perfect, but it's as good of a yardstick as I've found.<p>HTTP/1 passes this test easily; you can make a working version of it in about ninety seconds right in your terminal. HTTP/2 looks intimidating at first glance, but it's so much better specified than HTTP/1 that it's almost easier to get to a reasonable implementation. HTTP/3 on the other hand is...... well, weeks (if not months) of work  just to get a QUIC foundation working reasonably well enough that you could hope to start iterating on connections from a 'real' peer, and THEN you have to start on RFC 9114. Not to mention that the way it's structured you end up doing most of that work in the dark, hoping that you line everything up just so so that your first Hello World actually works. It's a way of working that is completely at odds with the hacker ethos that the best foundational protocols have in spades, and ends up looking and acting like what it is: a tool by the big guys, for the big guys. The rest of the internet need not apply.</p>
]]></description><pubDate>Tue, 21 Jan 2025 14:07:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=42780200</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=42780200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42780200</guid></item><item><title><![CDATA[New comment by mcmatterson in "HTTP/2 Continuation Flood: Technical Details"]]></title><description><![CDATA[
<p>I'd just mitigated this exact thing in Bandit last month!<p><a href="https://github.com/mtrudel/bandit/blob/main/lib/bandit/http2/connection.ex#L84">https://github.com/mtrudel/bandit/blob/main/lib/bandit/http2...</a><p>TBH, from an implementors perspective this is a super obvious thing to cover off. It had long been on my radar and was something that I'd always figured other implementations had defended against as well.</p>
]]></description><pubDate>Thu, 04 Apr 2024 17:36:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=39933521</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=39933521</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39933521</guid></item><item><title><![CDATA[New comment by mcmatterson in "Alaska Airlines flight 1282 NTSB preliminary report [pdf]"]]></title><description><![CDATA[
<p>The fact that a critical piece of the evidence was cell phone photos sent between workers coordinating door re-assembly doesn't exactly instill a whole lot of confidence in their permit-to-work process. I didn't like it when it was medical teams doing shift handover via a Google Doc, and I don't like it when it's a matter of flight safety either. Or, as Homer might eruditely say: "guess I forgot to put the bolts back in" [1]<p>[1] (<a href="https://www.youtube.com/watch?v=IiNPLIauEig" rel="nofollow">https://www.youtube.com/watch?v=IiNPLIauEig</a>)</p>
]]></description><pubDate>Tue, 06 Feb 2024 21:39:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=39281045</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=39281045</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39281045</guid></item><item><title><![CDATA[New comment by mcmatterson in "PiDP-11"]]></title><description><![CDATA[
<p>I have this exact kit hosting my house's RPi server!<p>A couple of things:<p>0. The physical quality of this build is out of the world good. PCB, plastics, switches, it's all amazing<p>1. The software as provided has a pretty old school build process (part of the charm?). I tightened up a bunch of it and dockerized it at <a href="https://github.com/mtrudel/pibox/tree/main/pidp11">https://github.com/mtrudel/pibox/tree/main/pidp11</a><p>2. I wish the build would have used something like an MCP23017 for IO instead of claiming so many RPi GPIOs. There's only a few (2-3 IIRC) GPIOs unused by the front panel, and the matrix LED/switch scan setup burns a ton of CPU</p>
]]></description><pubDate>Tue, 28 Nov 2023 18:35:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=38449379</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=38449379</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38449379</guid></item><item><title><![CDATA[New comment by mcmatterson in "Waterloo Style"]]></title><description><![CDATA[
<p>BMath (CS) 2002 here. This description is spot on the way I think about development, and is a bit of a superpower to be able to do well. I'm not <i>totally</i> sure it's a UW-ism though. I can certainly recall a couple of very formative Tompa courses where he impressed the importance of taking a data-first view of design, and I think we had a stronger bias towards data structures than most other schools whose grads I've worked with. But overall I think that sentiment grew weaker in my upper years, when a more conventional algorithms approach took over.<p>I will say though, that I've also noticed the contrast before with MIT grads, who tend to have a <i>very</i> strong LISP bent to their styles. It's true that each school has their own unique flavour, and much like accents it may just be that you don't notice your own.</p>
]]></description><pubDate>Sun, 30 Apr 2023 02:44:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=35759290</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=35759290</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35759290</guid></item><item><title><![CDATA[New comment by mcmatterson in "Phoenix 1.7 is View-less"]]></title><description><![CDATA[
<p>Bandit author here. Correct! The byline of Bandit is ‘a web server for Plug applications’ and being able to focus on that narrowed set of requirements is a large part of where the perf boost comes from (less code, easier to reason about, fewer processes, etc).</p>
]]></description><pubDate>Sat, 31 Dec 2022 16:15:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=34197759</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=34197759</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34197759</guid></item><item><title><![CDATA[New comment by mcmatterson in "Phoenix 1.7 is View-less"]]></title><description><![CDATA[
<p>The PR you linked to adds support for generating new phx apps with the relevant change already incorporated; it’s just a generator change. We’re waiting a bit to incorporate this change to ‘soft launch’ Bandit support.</p>
]]></description><pubDate>Sat, 31 Dec 2022 16:13:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=34197727</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=34197727</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34197727</guid></item><item><title><![CDATA[New comment by mcmatterson in "Phoenix 1.7 is View-less"]]></title><description><![CDATA[
<p>Bandit author here. We’re fully supported on phx 1.7+; it’s a one line change to your existing app, described on the Bandit readme!</p>
]]></description><pubDate>Sat, 31 Dec 2022 16:11:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=34197699</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=34197699</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34197699</guid></item><item><title><![CDATA[New comment by mcmatterson in "On Hubris and Humility"]]></title><description><![CDATA[
<p>I couldn't stop thinking about this, so I went back and dug up an ancient (20yo+) copy of my OS implementation for the trains course (mat(t)OS). Sure enough, we did indeed dispatch the upper half of interrupts to processes, albeit via a dedicated blocking syscall rather than send/receive/reply semantics. Bottom half handlers (which were implemented behind task gates and had persistent stacks) just did the standard bottom half stuff: disabling interrupts & managing state so we could properly unroll after the interrupt had been handled.<p>What a throwback!<p>Interrupt code is at <a href="https://gist.github.com/mtrudel/c29fa60e5b2f3b6fdc46a9e3c65deb20" rel="nofollow">https://gist.github.com/mtrudel/c29fa60e5b2f3b6fdc46a9e3c65d...</a>. I've been meaning for <i>years</i> to clean this stuff up and resurrect it. Maybe this is the kick in the ass I need to finally do so!</p>
]]></description><pubDate>Tue, 07 Dec 2021 21:37:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=29478539</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=29478539</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29478539</guid></item><item><title><![CDATA[New comment by mcmatterson in "On Hubris and Humility"]]></title><description><![CDATA[
<p><a href="https://www.youtube.com/watch?v=031vKBPk5eA" rel="nofollow">https://www.youtube.com/watch?v=031vKBPk5eA</a></p>
]]></description><pubDate>Tue, 07 Dec 2021 20:55:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=29478099</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=29478099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29478099</guid></item><item><title><![CDATA[New comment by mcmatterson in "On Hubris and Humility"]]></title><description><![CDATA[
<p>Fascinating talk. The overall approach here strikes me as being <i>extremely</i> influenced by QNX's design. Send/Receive/Reply as a messaging primitive is too often overlooked, and provides incredibly powerful that (as Cliffe mentions) renders an enormous amount of scheduling complexity as moot.<p>Anyone who's done the UWaterloo trains course will recognize these patterns immediately, and (IIRC) interrupt dispatching is was done in a similar manner there as well.<p>Finally, the supervision patterns here strike me as being very similar to those within the BEAM, and remind me of the infamous quote from Robert Virding (<a href="http://erlang.org/pipermail/erlang-questions/2008-January/032226.html" rel="nofollow">http://erlang.org/pipermail/erlang-questions/2008-January/03...</a>). Obviously a necessary reimplementation here, but humorous nonetheless.<p>Great project, great talk.</p>
]]></description><pubDate>Tue, 07 Dec 2021 15:02:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=29473141</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=29473141</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29473141</guid></item><item><title><![CDATA[New comment by mcmatterson in "(Elixir / Erlang) Bandit's HTTP/1.x engine is up to 5x faster"]]></title><description><![CDATA[
<p>Fundamentally, Bandit just does a lot less work than Cowboy does. Particularly with HTTP/1 requests, Bandit uses a single process per connection in contrast with Cowboy's 2 per connection. This allows Bandit's handler code to be very 'linear' and free of coordination complexity; for the most part, an HTTP/1 connection will go from initial connection to Plug call and back again without having to leave the process at all.<p>More broadly, there's just less functionality in Bandit (by design; it's a very focused library that doesn't <i>need</i> to do a bunch of the stuff that Cowboy does). All that stuff ends up adding up when you're doing it 100k a second.<p>This correlates with Bandit's relative numbers being better in HTTP/1 (up to 5x faster than Cowboy) than they are in HTTP/2 (a paltry 2.3x faster than Cowboy).<p>In terms of the 32 concurrent connections peak, my hunch here is that it's due to the server the test is running on being a 32 core VM (see <a href="https://github.com/mtrudel/network_benchmark" rel="nofollow">https://github.com/mtrudel/network_benchmark</a> for details of the benchmarking process). Truthfully I'm no expert with benchmarking & this may not hold a lot of truth; at the end of the day the test is pretty apples to apples so I think it has comparative merit, but the absolute numbers are a bit murkier to me.</p>
]]></description><pubDate>Tue, 09 Nov 2021 15:54:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=29163380</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=29163380</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29163380</guid></item><item><title><![CDATA[New comment by mcmatterson in "(Elixir / Erlang) Bandit's HTTP/1.x engine is up to 5x faster"]]></title><description><![CDATA[
<p>Bandit is an HTTP server, not a client. It performs the same job in the stack as Cowboy does currently (just up to 5x faster as this post's title alludes to).<p>The Bandit project shares a small amount of code with the Mint project (Andrea & Eric were kind enough to factor out their HTTP/2 header compression library for use in Bandit), but this is mostly due to HTTP being a largely symmetric protocol (ie: there is a lot of functionality used equally by both clients and servers).</p>
]]></description><pubDate>Thu, 28 Oct 2021 16:30:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=29027932</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=29027932</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29027932</guid></item><item><title><![CDATA[New comment by mcmatterson in "(Elixir / Erlang) Bandit's HTTP/1.x engine is up to 5x faster"]]></title><description><![CDATA[
<p>Author here. AMA!</p>
]]></description><pubDate>Thu, 28 Oct 2021 13:46:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=29026072</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=29026072</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29026072</guid></item><item><title><![CDATA[New comment by mcmatterson in "The Dunant subsea cable"]]></title><description><![CDATA[
<p>A number of the first trans-atlantic cables landed in the tiny village of Heart's Content, Newfoundland. I drove through there on a road trip about a decade ago & stopped at the excellent museum in the old cable station, and was excited to make my way across the highway to the beach to see this exact thing. It turns out that the old cables are just.... left to rust on the beach. It's really amazing that these cables, originally a technological wonder & a bridge between entire continents, are just left to the elements once their useful life is over.<p><a href="https://goo.gl/maps/Ku9FtfbMupApZthJA" rel="nofollow">https://goo.gl/maps/Ku9FtfbMupApZthJA</a></p>
]]></description><pubDate>Thu, 04 Feb 2021 15:09:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=26025921</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=26025921</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26025921</guid></item><item><title><![CDATA[Multicolour CGA, 30 years too late]]></title><description><![CDATA[
<p>Article URL: <a href="https://twitter.com/tubetimeus/status/1350174108693143552">https://twitter.com/tubetimeus/status/1350174108693143552</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=25796289">https://news.ycombinator.com/item?id=25796289</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 15 Jan 2021 20:53:45 +0000</pubDate><link>https://twitter.com/tubetimeus/status/1350174108693143552</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=25796289</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25796289</guid></item><item><title><![CDATA[New comment by mcmatterson in "OTP 23"]]></title><description><![CDATA[
<p>My goodness, you're right (well, your example isn't, but the feature I'm talking about has been present since at least 1.8 (the earliest install I have handy):<p><pre><code>  > <<len::8, val::binary-size(len)>> = <<3>> <> "abc"
    <<3, 97, 98, 99>> 
  > val
    "abc"
</code></pre>
I don't know how I'd missed that.<p>(Your example demonstrates 'pinning' which has been a thing since always I think).</p>
]]></description><pubDate>Wed, 13 May 2020 17:13:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=23169150</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=23169150</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23169150</guid></item><item><title><![CDATA[New comment by mcmatterson in "OTP 23"]]></title><description><![CDATA[
<p>The use of prior matches in guards is super useful for parsing TLV style payloads where you first match on a size/length field and then match on the value itself as that number of octets. Does anyone have any insight into how / when similar support will make its way into Elixir?</p>
]]></description><pubDate>Wed, 13 May 2020 16:19:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=23168476</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=23168476</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23168476</guid></item><item><title><![CDATA[New comment by mcmatterson in "Elixir lang 1.10.0-rc0"]]></title><description><![CDATA[
<p>As someone who writes Elixir full-time in a product with <i>deeply</i> complex date / time needs (spanning multiple timezones, sources of time, multiple meanings of 'month', etc), I can say with some conviction that the the simplicity of Elixir's DateTime module is most definitely a feature. The lack of something as transparent in Rails was / is a huge part of what makes our team so productive since porting the product to Elixir; NaiveDateTime alone has saved us from more bugs than I care to think about. Between Elixir core and Timex, they've definitely solved the harder corners of time as well as any other library or platform I've seen.</p>
]]></description><pubDate>Tue, 07 Jan 2020 18:47:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=21983183</link><dc:creator>mcmatterson</dc:creator><comments>https://news.ycombinator.com/item?id=21983183</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21983183</guid></item></channel></rss>