<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: thedufer</title><link>https://news.ycombinator.com/user?id=thedufer</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 14 Apr 2026 20:41:41 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=thedufer" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by thedufer in "The WiFi only works when it's raining (2024)"]]></title><description><![CDATA[
<p>> Can't log in when standing up<p>This reminds me of a recent issue I had. I had just gotten a new laptop from IT. While picking it up from them, I had generated myself a password, put it in my password manager on my phone, and then entered it twice to set it on the laptop. Everything worked great. But when I got back to my desk, the password didn't work! I tried a bunch of times, watched myself hit each key to eliminate typos, etc.<p>I went back to IT and they asked me to demonstrate. But this time it worked! I walked back to my desk, thoroughly embarrassed. But a couple hours later I had to log in again and once again could not.<p>After thinking about it for awhile, I realized that I was typing at IT while standing over a sitting-height desk. Sure enough, typing in that position fixed my issue. I carefully watched what I was doing this time - something about the exact layout of the keyboard and the weird angle I was typing at ensured that I was making a particular typo I typed in that position - just a single letter switched to another, every time. Sure enough, making that one substitution to my intended password got me in.</p>
]]></description><pubDate>Fri, 30 Jan 2026 00:34:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=46819056</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=46819056</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46819056</guid></item><item><title><![CDATA[New comment by thedufer in "Why I love OCaml (2023)"]]></title><description><![CDATA[
<p>OCaml predates multicore CPUs. Having a global lock was basically free at the time it was invented. It's totally crazy to dislike a language because the authors made a decision that was obviously correct at the time.</p>
]]></description><pubDate>Sun, 09 Nov 2025 15:12:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=45866117</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=45866117</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45866117</guid></item><item><title><![CDATA[New comment by thedufer in "I took all my projects off the cloud, saving thousands of dollars"]]></title><description><![CDATA[
<p>> if you reduce latency from one second to a hundred milliseconds, could you celebrate that you've made it 10x faster<p>Yes you can, because speed has units of inverse time and latency has units of time. So it could be correct to say that cutting latency to 1/10 of its original value is equivalent to making it 10x the original speed - that's how inverses work.<p>Savings are not, to my knowledge, measured in units of inverse dollars.</p>
]]></description><pubDate>Wed, 05 Nov 2025 02:22:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=45818275</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=45818275</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45818275</guid></item><item><title><![CDATA[New comment by thedufer in "Kerberoasting"]]></title><description><![CDATA[
<p>> you actually need to get a service ticket (TGS)<p>If we're being pedantic, TGS ("ticket granting server") is the service you get service tickets from. Service tickets are (occasionally) abbreviated ST, as you'd expect. The TGS is a logical part of the KDC, distinguished from the AS which grants TGTs.</p>
]]></description><pubDate>Wed, 10 Sep 2025 23:54:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=45205803</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=45205803</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45205803</guid></item><item><title><![CDATA[New comment by thedufer in "In a milestone for Manhattan, a pair of coyotes has made Central Park their home"]]></title><description><![CDATA[
<p>That's an interesting update. I remain a bit skeptical based on the fact that the obvious sources I'd look to for this sort of thing haven't updated on that study (it seems to be <a href="https://www.tandfonline.com/doi/full/10.1676/23-00045" rel="nofollow">https://www.tandfonline.com/doi/full/10.1676/23-00045</a>), and I'm not really able to evaluate it on my own. USFWS (<a href="https://www.fws.gov/story/threats-birds-collisions-buildings-glass" rel="nofollow">https://www.fws.gov/story/threats-birds-collisions-buildings...</a>) is citing the previous numbers, as is Wikipedia (<a href="https://en.wikipedia.org/wiki/Bird%E2%80%93window_collisions" rel="nofollow">https://en.wikipedia.org/wiki/Bird%E2%80%93window_collisions</a>).<p>FWIW 3.5 billion is not the top estimate, although I'm not sure how to interpret the way the estimate is stated ("annual mortality may be minimally 1.28 billion–3.46 billion or as high as 1.92 billion–5.19 billion"). What does it mean to have a range for each end of the range? The author only quotes the absolute lowest number from the study in press about it (see <a href="https://www.lehighvalleynews.com/environment-science/3-5-million-birds-dying-every-day-the-culprit-windows-a-local-professor-has-solutions" rel="nofollow">https://www.lehighvalleynews.com/environment-science/3-5-mil...</a>), but maybe is just preferring to be conservative.</p>
]]></description><pubDate>Sun, 06 Jul 2025 23:33:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=44485141</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=44485141</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44485141</guid></item><item><title><![CDATA[New comment by thedufer in "In a milestone for Manhattan, a pair of coyotes has made Central Park their home"]]></title><description><![CDATA[
<p>> At the same time 3.5 billion birds die hitting glass of the buildings.<p>Do you have a citation for this? Are you comparing North American cat deaths to worldwide building collisions? Estimates I'm seeing of North American center around 600 million, a far cry from deaths due to cats.</p>
]]></description><pubDate>Sat, 05 Jul 2025 15:07:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=44473265</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=44473265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44473265</guid></item><item><title><![CDATA[New comment by thedufer in "Tell HN: Beware confidentiality agreements that act as lifetime non competes"]]></title><description><![CDATA[
<p>I'm not sure what conclusions you think we should draw from that. California's advantage over Washington is primarily one of size - Washington's GDP per capita is actually about 3% higher than California's. The most generous interpretation I can think of is that you're crediting the non-compete difference for California's far larger population, which is tenuous at best.</p>
]]></description><pubDate>Sat, 21 Jun 2025 19:06:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=44339937</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=44339937</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44339937</guid></item><item><title><![CDATA[New comment by thedufer in "The Missing 11th of the Month (2015)"]]></title><description><![CDATA[
<p>Typewriter keys cost money, and dropping the 1 allowed them to drop a key without significantly affecting the use of it. As far as I can tell, that's effectively the entire rationale.<p>This wasn't meaningfully the case prior; the printing press would've just needed more copies of 'l' if they'd dropped the 1s, and letters weren't as significant a portion of the cost of the machine, anyway. And afterwards came computers, which need to distinguish between the characters even if they're displayed the same way.</p>
]]></description><pubDate>Thu, 19 Jun 2025 02:46:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=44314992</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=44314992</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44314992</guid></item><item><title><![CDATA[New comment by thedufer in "OxCaml - a set of extensions to the OCaml programming language."]]></title><description><![CDATA[
<p>Labeled tuples are effectively order-independent. Your implementation's order has to match your interface's order, but callers can destruct the labeled tuples in any order and the compiler will do the necessary reordering (just like it does for destructing records, or calling functions with labeled arguments). I don't think this is materially different from what you're describing in F#, except that labeled tuples don't allow labeling a single value (that is, there's no 1-tuple, which is also the case for normal tuples).</p>
]]></description><pubDate>Sat, 14 Jun 2025 14:54:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=44276770</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=44276770</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44276770</guid></item><item><title><![CDATA[New comment by thedufer in "Dotless Domains"]]></title><description><![CDATA[
<p>Why would that be more correct? A trailing dot indicates that a domain is fully-qualified, but that's not the issue here. The browser is trying to decide whether your query is a search string or a URL.<p>Also, a trailing dot would indicate the opposite of what we want - we're using single-label domains that only work if we can rely on search suffixes to qualify them.</p>
]]></description><pubDate>Tue, 13 May 2025 02:24:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=43969190</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43969190</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43969190</guid></item><item><title><![CDATA[New comment by thedufer in "Dotless Domains"]]></title><description><![CDATA[
<p>> But you'll never get a test that can prevent errors like name@gnail.com, name@gmaip.com, nane@gmail.com etc. So is it really worth doing any checks at all?<p>You can do quite well at this, if you're willing to not restrict yourself to regexes and commit to some amount of hackery. One system I worked on used a simple regex (just what is described here IIRC - assert the existence of an @ sign), plus did an MX check on the domain, plus warned (not errored) if the domain was within 1 or 2 Levenshtein distance of any of a list of most common email domains (yahoo, gmail, etc). Statistically it seems like we saved people a lot of grief with this simple filtering.</p>
]]></description><pubDate>Sun, 11 May 2025 17:29:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=43955335</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43955335</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43955335</guid></item><item><title><![CDATA[New comment by thedufer in "Dotless Domains"]]></title><description><![CDATA[
<p>Putting a slash '/' at the end consistently gets you there, at least in Chromium-based browsers. We use this a lot at work (via DNS search suffixes, not private TLDs).</p>
]]></description><pubDate>Sun, 11 May 2025 17:21:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43955270</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43955270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43955270</guid></item><item><title><![CDATA[New comment by thedufer in "How to not build a two stage model rocket"]]></title><description><![CDATA[
<p>I think the author was pointing at the fact that "Venessa" looks like a typo.</p>
]]></description><pubDate>Sun, 13 Apr 2025 16:18:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=43673885</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43673885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43673885</guid></item><item><title><![CDATA[New comment by thedufer in "You might not need WebSockets"]]></title><description><![CDATA[
<p>> I'm curious though, what is your solution to this?<p>Cookies work fine, and are the usual way auth is handled in browsers.<p>> Secondly, not every client is a browser (my OpenAI / fine tune example is non-browser based).<p>That's fair. It still seems easier, to me, to save any browser-based clients some work (and avoid writing your own spec) by using existing technologies. In fact, what you described isn't even incompatible with SSE - all you have to do is have the server close the connection every 60 seconds on an otherwise normal SSE connection, and all of your points are covered except for the auth one (I've never actually seen bearer tokens used in a browser context, to be fair - you'd have to allow cookies like every other web app).</p>
]]></description><pubDate>Sat, 12 Apr 2025 20:26:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=43667678</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43667678</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43667678</guid></item><item><title><![CDATA[New comment by thedufer in "You might not need WebSockets"]]></title><description><![CDATA[
<p>I don't understand the advantages of recreating SSE yourself like this vs just using SSE.<p>> SSE always breaks and requires client side retries to get it to work<p>Yeah, but these are automatic (the browser handles it). SSE is <i>really</i> easy to get started with.</p>
]]></description><pubDate>Sat, 12 Apr 2025 15:19:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=43665135</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43665135</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43665135</guid></item><item><title><![CDATA[New comment by thedufer in "Ask HN: What less-popular systems programming language are you using?"]]></title><description><![CDATA[
<p>> But, oh!, the poor ints.<p>Empirically this is a rather low cost. IIRC, the extra ops add less than a cycle per arithmetic operation, due to amortizing them over multiple operations and clean pipelining (and also things like shifts just being really cheap).<p>But yes, there are certainly applications where we almost exclusively use Int64 or Int32 rather than the primary int type, if you need exactly that many bits.<p>> You know that at compile time, surely, when you set the build target, no?<p>Well, that's true of OCaml as well.<p>This is ultimately a difference of opinion - I think that the cost of installing a single extra library to get ints of various widths/signedness would be worth the advantage of eliminating nearly all memory errors (and various other advantages of a higher-level language).<p>The main carveout I would agree with is any case where you absolutely need strict memory bounds - it's not clear to me how you'd satisfy this with any GC'd language, since the GC behavior is ultimately somewhat chaotic.</p>
]]></description><pubDate>Thu, 06 Mar 2025 15:25:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43281295</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43281295</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43281295</guid></item><item><title><![CDATA[New comment by thedufer in "Ask HN: What less-popular systems programming language are you using?"]]></title><description><![CDATA[
<p>> I don't get it. What is it reserved for then, if the int size is determined when the runtime is built? How can that possibly affect the runtime use of ints?<p>Types are fully erased after compilation of an OCaml program. However, the GC still needs to know things about the data it is looking at - for example, whether a given value is a pointer (and thus needs to be followed when resolving liveness questions) or is plain data. Values of type `int` can be stored right alongside pointers because they're distinguishable - the lowest bit is always 0 for pointers (this is free by way of memory alignment) and 1 for ints (this is the 1 bit ints give up - much usage of ints involves some shifting to keep this property without getting the wrong values).<p>Other types of data (such as Int64s, strings, etc) can only be handled (at least at function boundaries) by way of a pointer, regardless of whether they fit in, say, a register. Then the whole block that the pointer points to is tagged as being all data, so the GC knows there are no pointers to look for in it.<p>> Or is any build of an OCaml program able to target (at compile-time) either 32- or 64-bit targets, or does it mean that an OCaml program build result is always a single format that will adapt at runtime to being in either environment?<p>To be clear, you have to choose at build time what you're targeting, and the integer sized is part of that target specification (most processor architectures these days are 64-bit, for example, but compilation to javascript treats javascript as a 32-bit platform, and of course there's still support for various 32-bit architectures).<p>> Knowing one's runtime details is intrinsic at design-time for dealing with systems-level semantics, by my understanding.<p>Doesn't this mean that C can't be used for systems programming? You don't know the size of `int` there, either.<p>> But I don't want to build the programming language, I want to use it.<p>I meant building OCaml code, not the compiler.</p>
]]></description><pubDate>Tue, 04 Mar 2025 19:36:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=43259019</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43259019</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43259019</guid></item><item><title><![CDATA[New comment by thedufer in "Ask HN: What less-popular systems programming language are you using?"]]></title><description><![CDATA[
<p>> which has a pub date from Oct 19, 2022<p>I think you're misinterpreting this. That's just the date the most recent version of the library was published. The library is something like 15 years old.<p>> the standard integer data types (and, therefore, the standard language), that not only have no signedness<p>I'm not sure what you mean by this - they're signed integers. Maybe you just mean that there aren't unsigned ints in the stdlib?<p>> and only have Int32 and Int64, but have "one bit is reserved for OCaml's runtime operation".<p>The "one bit is reserved" is only true for the `int` type (which varies in size depending on the runtime between 31 and 63 bits). Int32 and Int64 really are normal 32- and 64-bit ints. The trade-off is that they're boxed (although IIRC there is work being done to unbox them) so you pay some extra indirection to use them.<p>> The stdint package also depends on Jane Street's "Dune", which they call a "Fast, portable, and opinionated build system". I don't need or want or need any of its capabilities.<p>Most packages are moving this way. Building OCaml without a proper build system is a massive pain and completely inscrutable to most people; Dune is a clear step forward. You're free to write custom makefiles all the time for your own code, but most people avoid that.</p>
]]></description><pubDate>Tue, 04 Mar 2025 17:00:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=43257261</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43257261</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43257261</guid></item><item><title><![CDATA[New comment by thedufer in "Mark Cuban offers to fund former 18F employees"]]></title><description><![CDATA[
<p>18f built but did not then manage login.gov. It was handed off elsewhere. The implication of them managing it was that disbanding 18f left login.gov ownerless (or at least handed off to some group that knows nothing about it) which does not seem to be the case.</p>
]]></description><pubDate>Sun, 02 Mar 2025 22:19:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=43235843</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43235843</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43235843</guid></item><item><title><![CDATA[New comment by thedufer in "Mark Cuban offers to fund former 18F employees"]]></title><description><![CDATA[
<p>I would assume they're pointing at the comment at the top of this thread ("They built / manage login.gov?") rather than the article itself.</p>
]]></description><pubDate>Sun, 02 Mar 2025 17:24:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=43232703</link><dc:creator>thedufer</dc:creator><comments>https://news.ycombinator.com/item?id=43232703</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43232703</guid></item></channel></rss>