<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: twhitmore</title><link>https://news.ycombinator.com/user?id=twhitmore</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 13 May 2026 14:39:56 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=twhitmore" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by twhitmore in "Photoshop's challenges with focus, pt. 2"]]></title><description><![CDATA[
<p>What an incompetence & embarrassment. This seems like a failure of product management, management & executives rather than actual software craftspeople.<p>Those responsible -- all of the people -- should be promoted to digging ditches.</p>
]]></description><pubDate>Thu, 07 May 2026 09:41:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48047367</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=48047367</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48047367</guid></item><item><title><![CDATA[New comment by twhitmore in "Error payloads in Zig"]]></title><description><![CDATA[
<p>Does the Zig language not have useful exceptions/stacktraces that can be propagated out?<p>At a high level, all non-trivial programming is composition. And (see principle of encapsulation) the vast majority of errors shouldn't be recovered and just need to be propagated out.<p>Then, to be useful, errors need enough information to be diagnosed or investigated. It seems like this should have been a straight-forward requirement in the language design.</p>
]]></description><pubDate>Mon, 16 Feb 2026 04:29:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47030902</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=47030902</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47030902</guid></item><item><title><![CDATA[New comment by twhitmore in "Cloudflare outage on November 18, 2025 post mortem"]]></title><description><![CDATA[
<p>Exception handling would be better than what we're seeing here.<p>The problem is that any non-trivial software is composition, and encapsulation means most errors aren't recoverable.<p>We just need easy ways to propagate exceptions out to the appropriate reliability boundary, ie. the transaction/ request/ config loading, and fail it sensibly, with an easily diagnosable message and without crashing the whole process.<p>C# or unchecked Java exceptions are actually fairly close to ideal for this.<p>The correct paradigm is "prefer throw to catch" -- requiring devs to check every ret-val just created thousands of opportunities for mistakes to be made.<p>By contrast, a reliable C# or Java version might have just 3 catch clauses and handle errors arising below sensibly without any developer effort.<p><a href="https://literatejava.com/exceptions/ten-practices-for-perfect-java-exception-handling/" rel="nofollow">https://literatejava.com/exceptions/ten-practices-for-perfec...</a></p>
]]></description><pubDate>Wed, 19 Nov 2025 10:35:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=45977958</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=45977958</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45977958</guid></item><item><title><![CDATA[New comment by twhitmore in "Cloudflare outage on November 18, 2025 post mortem"]]></title><description><![CDATA[
<p>Interesting to see Rust error handling flunk out in practice.<p>It may be that forcing handling at every call tends to makes code verbose, and devs insensitized to bad practice. And the diagnostic Rust provided seems pretty garbage.<p>There is bad practice here too -- config failure manifesting as request failure, lack of failing to safe, unsafe rollout, lack of observability.<p>Back to language design & error handling. My informed view is that robustness is best when only major reliability boundaries need to be coded.<p>This the "throw, don't catch" principle with the addition of catches on key reliability boundaries -- typically high-level interactions where you can meaningfully answer a failure.<p>For example, this system could have a total of three catch clauses "Error Loading Config" which fails to safe, "Error Handling Request" which answers 5xx, and "Socket Error" which closes the HTTP connection.</p>
]]></description><pubDate>Wed, 19 Nov 2025 10:20:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=45977876</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=45977876</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45977876</guid></item><item><title><![CDATA[New comment by twhitmore in "Use Your Type System"]]></title><description><![CDATA[
<p>Checked exceptions were a reasonable idea, but the Java library implementation & use of these was totally wrong.<p>Checked exceptions work well for occasional major "expectable" failures -- opening a file, making a network connection.<p>They work extremely poorly when required for ongoing access or use of IO/ network resources, since this forces failures which are rare & impossible to usefully recover from to be explicitly declared/ caught/ rethrown with great verbosity and negative value added.<p>All non-trivial software is composition, so the idea of calling code "recovering" from a failure is at odds with encapsulation. What we end up with is business logic which can fail anywhere, can't recover anything, yet all middle layers -- not just the outer transaction boundary -- are forced to catch or declare these exceptions.<p>Requiring these "technical exceptions" to be pervasively handled is thus not just substantially invalid & pointless, but actually leads to serious rates of faulty error-handling. Measured experience in at least a couple of large codebases is that about 5-10% of catch clauses have fucked implementations either losing the cause or (worse) continue execution with null or erroneous results.<p><a href="https://literatejava.com/exceptions/checked-exceptions-javas-biggest-mistake/" rel="nofollow">https://literatejava.com/exceptions/checked-exceptions-javas...</a></p>
]]></description><pubDate>Thu, 31 Jul 2025 10:25:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=44744189</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=44744189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44744189</guid></item><item><title><![CDATA[New comment by twhitmore in "Nominal for Storing, Structural for Manipulating"]]></title><description><![CDATA[
<p>The examples at the start seem confused & poor. A type that "can return either one result, many results or an error" is trying to fit two different cardinalities into a single API.<p>APIs should either be typed to be unary (possibly with optionality/ error), or plural (allowing 0..many).<p>I've dealt with similar woolly design before. Introducing clear distinction between cardinalities gave a major improvement in logical clarity.</p>
]]></description><pubDate>Sat, 30 Nov 2024 01:34:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=42278692</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=42278692</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42278692</guid></item><item><title><![CDATA[New comment by twhitmore in "Silent data corruptions at scale (2021)"]]></title><description><![CDATA[
<p>Interesting. The corruption was in a math.pow() calculation, representing a compressed filesize prior to a file decompression step.<p>Compressing data, with the increased information density & greater number of CPU instructions involved, seems obviously to increase the exposure to corruption/ bitflips.<p>What I did wonder was why compress the filesize as an exponent? One would imagine that representing as a floating-point exponent would take lots of cycles, pretty much as many bits, and have nasty precision inaccuracies at larger sizes.</p>
]]></description><pubDate>Tue, 20 Feb 2024 08:03:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=39438991</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=39438991</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39438991</guid></item><item><title><![CDATA[New comment by twhitmore in "I is for Intent"]]></title><description><![CDATA[
<p>This article is very interesting. I have previously noticed the contrast between strict state representations, and the messier practicalities of user- and externally-sourced data.<p>I like the insight of splitting Intent and State. There's a lot to the article & I'm not sure I fully understand the latter half yet, but I'm filing this one away for further exploration.</p>
]]></description><pubDate>Sat, 10 Feb 2024 02:25:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=39322957</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=39322957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39322957</guid></item><item><title><![CDATA[New comment by twhitmore in "I is for Intent"]]></title><description><![CDATA[
<p>I don't know, I've met a lot of devs who've found the "true religion" of strict data integrity and have been reluctant to allow for the messier practicalities of user- and externally-sourced data.<p>None of them called Stanley, but there's definitely a fairly common pattern I recognise.</p>
]]></description><pubDate>Sat, 10 Feb 2024 02:21:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=39322928</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=39322928</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39322928</guid></item><item><title><![CDATA[New comment by twhitmore in "It's not microservice or monolith; it's cognitive load"]]></title><description><![CDATA[
<p>Difficulty & cost evolving the interface between microservices can seriously hinder improving the actual product.<p>I've seen the misguided adoption of microservices affect a couple of companies & products.</p>
]]></description><pubDate>Fri, 29 Dec 2023 10:47:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=38803674</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=38803674</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38803674</guid></item><item><title><![CDATA[New comment by twhitmore in "The surprising connection between after-hours work and decreased productivity"]]></title><description><![CDATA[
<p>Yes, there's this amazing thing called "documentation".<p>Confluence works well if you KISS -  write just what the audience needs to know, in terms they can read & find.<p>Avoid writing grand tracts of wanna-be architecture, policy, theory or planning; just write useful actionable material on topics your audience needs. You will find this works.<p>Source: I led 400 devs and this was the only way that could scale.<p><a href="http://literatejava.com/documentation/how-to-write-good-wiki-documentation/" rel="nofollow noreferrer">http://literatejava.com/documentation/how-to-write-good-wiki...</a></p>
]]></description><pubDate>Mon, 11 Dec 2023 05:34:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=38597951</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=38597951</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38597951</guid></item><item><title><![CDATA[New comment by twhitmore in "GCC always assumes aligned pointer accesses (2020)"]]></title><description><![CDATA[
<p>Exactly this. At this point the obsession with categorising potentially useful & useable behaviour as UB should be widely acknowledged.</p>
]]></description><pubDate>Sun, 27 Aug 2023 11:39:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=37281644</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=37281644</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37281644</guid></item><item><title><![CDATA[New comment by twhitmore in "Greed and Excess Drive the Climate Crisis, So Why Aren’t They Being Questioned?"]]></title><description><![CDATA[
<p>Greed, excess and short-term capitalism.<p>My particular beef is disposable/ short-lived goods -- the impact on the Earth of a product that lasts for 30 years is far less than one designed to need replacement after 5.<p>Yet weenie product managers & vulturous MBAs are constantly engineering things weaker & less repairable.<p>Sometimes to make the unit cost 0.5 cents cheaper, but perhaps more often to force earlier replacement and another revenue opportunity.</p>
]]></description><pubDate>Sun, 30 Jul 2023 23:54:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=36937307</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=36937307</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36937307</guid></item><item><title><![CDATA[Chinese hackers breach email of Commerce SEC Raimondo and State Dept officials]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.washingtonpost.com/business/2023/07/12/microsoft-china-hackers-breach-emails/e6d5eaf4-208a-11ee-8994-4b2d0b694a34_story.html">https://www.washingtonpost.com/business/2023/07/12/microsoft-china-hackers-breach-emails/e6d5eaf4-208a-11ee-8994-4b2d0b694a34_story.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=36719412">https://news.ycombinator.com/item?id=36719412</a></p>
<p>Points: 4</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 14 Jul 2023 04:14:02 +0000</pubDate><link>https://www.washingtonpost.com/business/2023/07/12/microsoft-china-hackers-breach-emails/e6d5eaf4-208a-11ee-8994-4b2d0b694a34_story.html</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=36719412</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36719412</guid></item><item><title><![CDATA[New comment by twhitmore in "Thousands of Microsoft Customers May Have Been Victims of Hack Tied to China"]]></title><description><![CDATA[
<p>Chinese hackers intent on collecting intelligence on the United States gained access to government email accounts, Microsoft disclosed on Tuesday night.<p>Microsoft said that in all, about 25 organizations, including government agencies, had been compromised by the hacking group, which used forged authentication tokens to get access to individual email accounts.</p>
]]></description><pubDate>Wed, 12 Jul 2023 10:18:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=36692495</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=36692495</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36692495</guid></item><item><title><![CDATA[Thousands of Microsoft Customers May Have Been Victims of Hack Tied to China]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.nytimes.com/2021/03/06/technology/microsoft-hack-china.html">https://www.nytimes.com/2021/03/06/technology/microsoft-hack-china.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=36692494">https://news.ycombinator.com/item?id=36692494</a></p>
<p>Points: 4</p>
<p># Comments: 3</p>
]]></description><pubDate>Wed, 12 Jul 2023 10:18:01 +0000</pubDate><link>https://www.nytimes.com/2021/03/06/technology/microsoft-hack-china.html</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=36692494</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36692494</guid></item><item><title><![CDATA[New comment by twhitmore in "New study: 70% of type 2 diabetes cases linked to food choices"]]></title><description><![CDATA[
<p>Perhaps I can share my personal experience. I have always felt tired/ crashed after having sugary foods. Sugary cakes & chocolate can leave me feeling pretty unpleasant. It might have been workable if eating more restored my mental state, but it didn't.<p>I figured this out in my twenties, stopped eating convenience food with sugar (cookies, sweet crackers, instant noodles, breakfast cereals), and instantly felt better.<p>I eat a high-protein breakfast of multigrain toast, avocado, cottage cheese, red onion and ham.<p>When you eat decent food with protein and vegetables you won't have cravings any more for sugary rubbish.<p>I snack on roast nuts (no peanuts), eat slightly more often and, for a pick-me-up in the afternoon, eat a small sandwich/ piece of sushi/ etc.<p>I am occasional only with desserts, cakes and ice-cream; typically only after dinner. Quality makes a big difference; quality cakes for example are mainly eggs, butter, chocolate and a bit of sugar whereas cheap cakes are sugar sugar sugar, refined flour and artificial flavours. Protein and fat seem to help stabilize the effects of dietary sugar on my blood sugar levels and mood.<p>My personal experience, YMMV.</p>
]]></description><pubDate>Sun, 07 May 2023 06:44:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=35848565</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=35848565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35848565</guid></item><item><title><![CDATA[New comment by twhitmore in "The end of a myth: Distributed transactions can scale"]]></title><description><![CDATA[
<p>Haven't read the full paper, but several aspects of this sound less than fully reliable.<p>It reminds me specifically of 90's multi-client LAN database systems (dBase, Clipper) where clients coordinated via file locks. Unreliability & hangs became a big problem for us.<p>In the summarized RDMA database, I'd be pretty concerned about reliability & integrity:<p>1) Crashed servers will leave records locked, and the system will hang.
2) Question whether lock timeouts can be adjudicated reliably.
3) Any errors in server behaviour can easily & widely corrupt data across any other nodes.
4) Overall the RDMA coordination makes me cautious. Can we really replace Paxos with RDMA reliably? If not, problems squeeze out elsewhere.
5) Proposed single-threaded recovery procedure sounds a hazardous operational bottleneck.
6) I'm also cautious about coordination requirements around recovery/ or to transact knowing that recovery is not in process, unless we can show that can be reliable & not add cost to the protocol.</p>
]]></description><pubDate>Tue, 11 Apr 2023 20:38:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=35531221</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=35531221</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35531221</guid></item><item><title><![CDATA[New comment by twhitmore in "I Saw the Face of God in a Semiconductor Factory"]]></title><description><![CDATA[
<p>Yes. The Archive version seems fine though.<p><a href="https://web.archive.org/web/20230327033150/https://www.wired.com/story/i-saw-the-face-of-god-in-a-tsmc-factory/" rel="nofollow">https://web.archive.org/web/20230327033150/https://www.wired...</a></p>
]]></description><pubDate>Mon, 27 Mar 2023 09:37:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=35324650</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=35324650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35324650</guid></item><item><title><![CDATA[New comment by twhitmore in "The Decree Design Pattern"]]></title><description><![CDATA[
<p>Behaviour is what needs to despatched, and behaviour is what benefits from applying eg. strategy pattern, delegation, orchestration.<p>Extracting important business behaviour into objects allows applying OO (ie, powerful despatch rules) where it is valuable.<p>Subtyping your model to achieve many of these possible usecases would give poor design results.<p>For example, if payment processing were in Payment.process() the Payment entity would need to be subtyped or composed for any of 1) a different payment gateway, 2) a sales tax in a new jurisdiction, 3) a new confirmation, or 4 a new payment flow. Having all that in your model entity is probably  wrong.<p>Simple behaviour is fine in the model, major business TN usually not.</p>
]]></description><pubDate>Mon, 06 Feb 2023 10:27:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=34675602</link><dc:creator>twhitmore</dc:creator><comments>https://news.ycombinator.com/item?id=34675602</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34675602</guid></item></channel></rss>