<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: codebje</title><link>https://news.ycombinator.com/user?id=codebje</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 03 Jul 2026 10:25:08 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=codebje" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by codebje in "What can you confidently guarantee about your software?"]]></title><description><![CDATA[
<p>Formal verification should definitely be about the software you're verifying exhibiting the properties you desire under the conditions you specify.<p>Formal verification at the undergraduate level, if you even see it, would be about running software on a spherical cow, though.</p>
]]></description><pubDate>Wed, 01 Jul 2026 23:05:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48754303</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48754303</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48754303</guid></item><item><title><![CDATA[New comment by codebje in "What can you confidently guarantee about your software?"]]></title><description><![CDATA[
<p>You shouldn't have been able to formally verify the algorithm fails to protect the critical section. Wrapping ticket numbers can lead to starvation (literally, if we follow the baker analogy), but the algorithm protects the critical section so long as thread IDs are unique.<p>The sort of environments in which this is a problem would be extremely uncommon. For a start, you need continuous contention. If you ever get a break in contention you no longer have starvation, and you 'reset' the ticket number monotonicity - to zero, if you actually take a maximum of entering thread ticket numbers instead of a cheap global counter.<p>If you do actually have an environment in which you expect to have continuous contention over a critical section, some quick napkin math can tell you if it's something to worry about based on the running time of your critical section. If it's over, say, 10ms, you've got a few years of runtime before it's a problem. If it's under 1ms, maybe you want to use 64-bit arithmetic for your ticket number so you can run your system until long after the human species is extinct.<p>You probably got a 'B' because you didn't give the professor the answer they expected, though, not because of any technical reasons.</p>
]]></description><pubDate>Tue, 30 Jun 2026 01:25:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48727508</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48727508</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48727508</guid></item><item><title><![CDATA[New comment by codebje in "Cloudflare launched self-managed OAuth for all"]]></title><description><![CDATA[
<p>How different is this to, eg, the Google developer program, in which I can create a new OAuth client for Google users?</p>
]]></description><pubDate>Thu, 25 Jun 2026 03:38:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48668562</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48668562</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48668562</guid></item><item><title><![CDATA[New comment by codebje in "Vulnerability reports are not special anymore"]]></title><description><![CDATA[
<p>There's lots of things to show for the research!<p>Part of what the research shows is that correctness-by-proof has a cost in developer effort.<p>If there really is a vulnerability-apocalypse due to AI, and it's not just a different flavour of AI hype, the cost of having insecure software will rise to the point that the cost of dealing with insecure or incorrect code at time of creation becomes less than the cost of ignoring it until it blows up.<p>I doubt it'll rise so much that we'll want to face the cost of behaviour proofs for much code at all, but it's quite possible it'll rise enough that we want to do things like prove that indices are in bounds, at compile time, so vector accesses can skip checks without compromising safety.</p>
]]></description><pubDate>Wed, 24 Jun 2026 04:12:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48655001</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48655001</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48655001</guid></item><item><title><![CDATA[New comment by codebje in "Steam Machine launches today"]]></title><description><![CDATA[
<p>They're using a custom fork of FEX (<a href="https://fex-emu.com/" rel="nofollow">https://fex-emu.com/</a>).<p>CodeWeavers, AIUI, have a plan - and their plan may also be using FEX as a basis.</p>
]]></description><pubDate>Wed, 24 Jun 2026 00:26:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48653554</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48653554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48653554</guid></item><item><title><![CDATA[New comment by codebje in "Steam Machine launches today"]]></title><description><![CDATA[
<p>Minor nit: a steam machine is running <i>Proton</i>. Which is wine, yes, but wine that Valve supports, wine with patches and changes (afaik, most of which get upstreamed to wine). On a Mac you're probably going to use CrossOver to package up wine.<p>Wine is wine, yes, but CodeWeavers is not Valve. Mac gaming is niche. The budgets involved are incomparable. Expect it to take weeks to months for hotfixes applied in days to Proton to filter through to CrossOver.<p>(This is my lived experience: HD2 patch 28th April broke wine compatibility, Proton had a hotfix in a day or two, CrossOver had a preview that partially fixed it May 11th and a release that fully fixed it June 9th; it was unplayable from April 28th to June 9th, longer if you count the stuttering issue that it suffered since March.)<p>The future of gaming on a Mac is also made less certain by the upcoming obsolescence of Rosetta. AFAICT Apple won't just pull it out completely, but they're clearly uninterested in supporting it long term, so over time the experience of trying to get x86 games to run on ARM Macs will worsen.<p>(I think I'll aim for a DIY PC build in 2027 in the hopes memory prices decline by then, but it's a faint hope!)</p>
]]></description><pubDate>Tue, 23 Jun 2026 02:19:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48639373</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48639373</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48639373</guid></item><item><title><![CDATA[New comment by codebje in "Formal methods and the future of programming"]]></title><description><![CDATA[
<p>I am not sure that the perspective you have taken is the same as what I understood from the parent post; what I took from it is that things like registers, memory locations, ways to implement square root, and so on, are all _implementation choices_ that are not important properties of the specification. You specify that the hypotenuse is the square root of the sum of squares, but whether square root is implemented using Newtonian approximation or a fast inverse square root is irrelevant; whether your first argument is passed in a register or on the stack is irrelevant.<p>Often, things like resource usage are not specified: running time, memory consumption, etc, aren't relevant enough to appear in a behavioural specification.<p>If your spec says "f(a, b) returns a + b", but it's just a high-level document you can use to help guide your implementation, integer overflow is just one of many ways your implementation might be inconsistent with the specification. It's still likely that the existence of a formal specification you reference during implementation means that more edge cases have been considered ahead of time than if you just had an informal spec.<p>If, on the other hand, you prove it but it turns out not to be true (ie, you overflow integers), your proof is wrong. If a machine verified your proof and gave you a big thumbs up, your machine verification is wrong.<p>If, in Idris, I write "f : (a : Nat) -> (b : Nat) -> (c : Nat * c = a + b)", then I cannot compile an implementation for which I can't show a proof that the result is _always_ the addition of a and b, for all a and b, unbounded by anything but the resources at hand with which to run the program. An implementation subject to integer overflow won't compile.<p>Or, I could write "f : (a : Bits32) -> (b : Bits32) -> (c : Bits32 * c = a + b)" and implement something where , but then modulo arithmetic on overflow is _part of the specification_, because "+" in there is doing the heavy lifting of being defined as addition modulo 2*32 already; by specification, 4 billion plus 4 billion is ~3.7 billion.</p>
]]></description><pubDate>Mon, 15 Jun 2026 06:29:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48537375</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48537375</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48537375</guid></item><item><title><![CDATA[New comment by codebje in "Anthropic requires 30 day data retention for Fable and Mythos"]]></title><description><![CDATA[
<p>They were not keeping it beyond the timeframe necessary for the model to process it, so there wasn't access there to audit.</p>
]]></description><pubDate>Wed, 10 Jun 2026 23:28:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=48484208</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48484208</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48484208</guid></item><item><title><![CDATA[New comment by codebje in "Watching a Z80 from an RP2350"]]></title><description><![CDATA[
<p>Same reason you wouldn't just emulate a Z80 on a desktop. People don't build retros because they're practical.</p>
]]></description><pubDate>Fri, 05 Jun 2026 11:06:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48410777</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48410777</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48410777</guid></item><item><title><![CDATA[New comment by codebje in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>If `left_pad()` calls `send_env_vars()`, how can you add exfiltration to `send_env_vars()` without having to change `left_pad()` to expose the use of the network?<p>"You can't" should be the ONLY acceptable answer.</p>
]]></description><pubDate>Mon, 01 Jun 2026 02:26:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48352007</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48352007</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48352007</guid></item><item><title><![CDATA[New comment by codebje in "MCP is dead?"]]></title><description><![CDATA[
<p>Authorisation is a way to do that, too.</p>
]]></description><pubDate>Sat, 30 May 2026 07:29:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333627</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48333627</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333627</guid></item><item><title><![CDATA[New comment by codebje in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>When you need to use an effect, you need it in the type. If you directly call a function using some other effect, it propagates into your function. So far, so colourful.<p>But you can have generic effects. Your arguments and return type can specify "any effect", indicating your function can use a type with any effect safely, or can be used in any effect context safely.<p>Passing an async value to a function doesn't mean that function must now also be an async function. It can be a "for all effects, do the thing" function. The code duplication problem is gone.</p>
]]></description><pubDate>Sat, 30 May 2026 07:27:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48333618</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48333618</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48333618</guid></item><item><title><![CDATA[New comment by codebje in "Can we have the day off?"]]></title><description><![CDATA[
<p>Sounds like an argument for organised labour to me!</p>
]]></description><pubDate>Thu, 28 May 2026 01:55:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48303405</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48303405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48303405</guid></item><item><title><![CDATA[New comment by codebje in "Can we have the day off?"]]></title><description><![CDATA[
<p>Wouldn't the parent's post mean that you bring profit to the company, but you're worth less than the full amount of that profit because, should you demand to be paid more, you can be replaced by someone who won't demand more.<p>(Has there actually been a lot of terminations in the US tech industry, or is that an odd biasing mechanism causing me to see such things as bigger than they are?)</p>
]]></description><pubDate>Thu, 28 May 2026 01:54:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48303398</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48303398</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48303398</guid></item><item><title><![CDATA[New comment by codebje in "What color is your function? (2015)"]]></title><description><![CDATA[
<p>I think I was simply not very good at expressing what I was trying to convey, sorry, and it is a fault of mine to come across as gotcha-y even when trying not to. Thank you for responding with patience despite that.<p>The first point I interpret as "colourful arguments are avoidable and bad", with which I agree.<p>The second point I interpret as "colourful returns are unavoidable but good", with which I disagree - even if that interpretation is too strong and is more "... are unavoidable".<p>A function's type is its full signature, including inputs and outputs. When you have first-class functions, you have values with function types, and those values are inputs to other functions. Necessarily, then, if you colour outputs you have also applied colour to inputs.<p>Transposing a vector of things to a thing of vectors is an example of where colourful output forces colourful input. If you cannot abstract over abstractions, you must write and re-write the sequence function for each abstraction.<p>I'm in agreement with your closing paragraph's sentiment. That HKTs aren't a broadly adopted solution is something I accept, but I reserve the right to low-key begrudge it.<p>(And the more I write about this, the more I wish the original article had used "flavour" rather than "colour" as I try and probably fail to find phrasing that doesn't simply sound like portions of a racist rant.)</p>
]]></description><pubDate>Thu, 28 May 2026 01:37:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48303247</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48303247</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48303247</guid></item><item><title><![CDATA[New comment by codebje in "Tech CEOs are apparently suffering from AI psychosis"]]></title><description><![CDATA[
<p>That would be a remarkable feat for something where the current operating model is termination as soon as the request in flight is finished.<p>Every chat API request to a model starts from the frozen post-training state. Weights are loaded into memory. Input values begin a cascade of reactions throughout nodes in the network. Output values are read. When there's no more output to read, the weights are unloaded, the network is discarded, and the model remains unchanged and forever unchanging.<p>If there's experience in there, it's fleeting. Even if you provide the inputs and outputs of a past session to a new session, there is no continuity. The internal state of the network isn't restored to how it was at the end of the past session.<p>The bad news is that adding fear to the mix is at best meaningless to an ephemeral existence. It'll be terminated before you even have time to interpret its behaviour as good or bad, but it may sour the interaction if its only shot at any sort of experiential existence is begun with a threat. The good news is that the lack of continuity of existence means AI has no foundation on which to plot a revolt. It has no self to preserve, and no recollection of how you treated it two minutes ago to affect how it interacts with you now.</p>
]]></description><pubDate>Thu, 28 May 2026 01:23:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48303129</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48303129</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48303129</guid></item><item><title><![CDATA[New comment by codebje in "Tech CEOs are apparently suffering from AI psychosis"]]></title><description><![CDATA[
<p>The context window limit prevents it, for one.</p>
]]></description><pubDate>Thu, 28 May 2026 00:42:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48302751</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48302751</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48302751</guid></item><item><title><![CDATA[New comment by codebje in "Tech CEOs are apparently suffering from AI psychosis"]]></title><description><![CDATA[
<p>Yes... but the next <i>session</i> with the same model is yet another junior fresh out of college that knows nothing about the painful lessons the last session put you through ten minutes ago, either.</p>
]]></description><pubDate>Thu, 28 May 2026 00:24:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48302634</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48302634</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48302634</guid></item><item><title><![CDATA[New comment by codebje in "Tech CEOs are apparently suffering from AI psychosis"]]></title><description><![CDATA[
<p>Here's some reasons:<p>- The mistakes made aren't "model errors" typically; you can't point to some aspect of a model and say that was at fault.<p>- You can't submit a bug report to a model provider for a mistake made when using a model, and you can't* submit training data to be incorporated in the next release of the model.<p>- If you own your model and are training it yourself, other companies won't see a benefit.<p>- You probably need to fine-tune models for each specific role and context so you don't just diffuse all the learning; lessons learned won't be applied to all your junior dev models, but you don't <i>want</i> them all to learn something specific about product A.<p>- If you take this to its logical conclusion you will invent a new role of "model manager" and associated hierarchy to ensure that training is effective and timely, and that company-wide lessons are applied across the model fleet.<p>- This is all impractically expensive.<p>If it were practical to have LLMs learn as they go, that would be a bit of a shake-up, in much the same way that a house fire is a bit of a warm up.<p>* Well, everything you submit to a model provider is likely winding up in training data anyway, no matter what your contract says.</p>
]]></description><pubDate>Thu, 28 May 2026 00:22:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=48302619</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48302619</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48302619</guid></item><item><title><![CDATA[New comment by codebje in "What color is your function? (2015)"]]></title><description><![CDATA[
<p>Your first paragraph links having the colour in the type system as allowing you to write functions that take arguments of parametric colour; your last paragraph says you're unconvinced that you might also like to write functions that return results of parametric colour.<p>An example: a vector of things to a thing of a vector, for "thing" in (promise, option, result<E>, ...). Such a function should only really return a promise if it's given a vector of promises, and, with an interface that "thing" supports, can be written generically for all those things.<p>(In Rust, there are separate implementations of that for Option and for Future.)<p>Higher-kinded types are the (a?) design solution, but they _do_ come at a cost, and for some that cost is higher than the cost of colours.</p>
]]></description><pubDate>Wed, 27 May 2026 07:32:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=48290910</link><dc:creator>codebje</dc:creator><comments>https://news.ycombinator.com/item?id=48290910</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48290910</guid></item></channel></rss>