<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: crustycoder</title><link>https://news.ycombinator.com/user?id=crustycoder</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 05 Jun 2026 02:49:42 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=crustycoder" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by crustycoder in "Prolog Coding Horror"]]></title><description><![CDATA[
<p>Yes, exactly. The issue detection step isn't particularly well-suited to a LLM, as it will tell you itself. The issues can be established deterministically by examining the Cloud resource data with a set of relatively simple rules, and Prolog is ideal for that. Where a LLM comes into the picture is analysis of the symptoms - resource relationships, ages, ownership, hypothesising root causes, generating cleanup plans, management reporting and so on. The interface between Prolog and the LLM is a JSON file containing the detected symptoms which is described to the LLM by a Skill. It all works pretty well.</p>
]]></description><pubDate>Mon, 18 May 2026 21:18:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48185786</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=48185786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48185786</guid></item><item><title><![CDATA[New comment by crustycoder in "Prolog Coding Horror"]]></title><description><![CDATA[
<p>It's not that sophisticated ;-) There's command editing using readline, result pagination using less and I output links to the reports and the Cloud console using ANSI HTTP link escapes. Primitive but sufficient.</p>
]]></description><pubDate>Mon, 18 May 2026 20:37:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48185269</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=48185269</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48185269</guid></item><item><title><![CDATA[New comment by crustycoder in "Prolog Coding Horror"]]></title><description><![CDATA[
<p>I think in many real-life cases it's a mix - for example impure code that deals with the outside world to set up the data needed for the pure "core" of the app to run over.</p>
]]></description><pubDate>Mon, 18 May 2026 12:35:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48178869</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=48178869</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48178869</guid></item><item><title><![CDATA[New comment by crustycoder in "Prolog Coding Horror"]]></title><description><![CDATA[
<p>You could always read the docs?<p><a href="https://www.swi-prolog.org/pldoc/man?section=clpfd-integer-arith" rel="nofollow">https://www.swi-prolog.org/pldoc/man?section=clpfd-integer-a...</a><p><a href="https://www.swi-prolog.org/pldoc/doc_for?object=!/0" rel="nofollow">https://www.swi-prolog.org/pldoc/doc_for?object=!/0</a></p>
]]></description><pubDate>Mon, 18 May 2026 10:18:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48177529</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=48177529</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48177529</guid></item><item><title><![CDATA[New comment by crustycoder in "Prolog Coding Horror"]]></title><description><![CDATA[
<p>I've just rolled out an internal SWI Prolog app that is similar to one linked to elsewhere in the thread [1]. We have a large Cloud estate with 10s of thousands of resources in it. Detecting unused or misconfigured resources manually isn't practical, and there are significant cost savings to be had by cleaning things up. The Prolog app reads in JSON resource snapshots, creates an in-memory database of facts from it and then applies rules to detect issues.  Most of the rules are simple and the ones for detecting unused resources (3 LOC) or resources that reference other non-existent resources (7 LOC) are entirely generic. There's also link metadata that models the possibility of links existing between resource types, even if they aren't always there in practice.<p>There's TUI that allows querying of issues and the resource hierarchy. Issues can also be output as JSON which is fed into a LLM to produce cleanup actions and management reporting.<p>The Prolog app is very fast, considering what it's doing, largely because it makes heavy use of tabling so once an issue has been detected it's not recomputed when queries are made.<p>[1] <a href="https://web.archive.org/web/20190525163234/https://dev.to/davidk01/cloud-management-with-prolog-29d8" rel="nofollow">https://web.archive.org/web/20190525163234/https://dev.to/da...</a></p>
]]></description><pubDate>Mon, 18 May 2026 09:17:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48177139</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=48177139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48177139</guid></item><item><title><![CDATA[New comment by crustycoder in "Prolog Coding Horror"]]></title><description><![CDATA[
<p>I get what he's saying but I think it's overstated. I'd categorise his list as "Things to be careful with" not "Coding horrors". For example, "The primary means to make your programs defective in this way is to use predicates like assertz/1 and retract/1" is an unqualified statement that makes it sound like you should never ever use them, and that's not the case. I have a real-life Prolog app that applies rules to facts read from JSON data files. I could do that two ways:<p>1) Read the JSON with Prolog (there's a library) and assertz() the facts from that, building an immutable database in the first phase before applying the rules in the second phase.<p>2) Externally transform the JSON into Prolog facts, load that into the app on startup and apply the same rules to it.<p>I agree that mutating the database in the second phase is probably a bad idea, but that's not the same as saying "assertz() always bad". I'd read his site before it appeared on HN and whilst there a lot of very good stuff on it, some of it reminds me of FP purist edicts - fine if you want to go that way and it's appropriate to your problem, but that isn't always going to be the case. That was the basis of my earlier (downvoted) "Mostly overblown" comment.<p>But nice to see Prolog mentioned at all on HN :-)</p>
]]></description><pubDate>Mon, 18 May 2026 08:37:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48176879</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=48176879</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48176879</guid></item><item><title><![CDATA[New comment by crustycoder in "Prolog Coding Horror"]]></title><description><![CDATA[
<p>Mostly overblown.</p>
]]></description><pubDate>Sun, 17 May 2026 22:10:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48173627</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=48173627</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48173627</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>Name me a new bit of tech that hasn't been hyped beyond reasonable bounds. And yes, this is one of the worst examples. But saying it doesn't have its uses isn't reasonable either.</p>
]]></description><pubDate>Wed, 15 Apr 2026 18:33:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=47783250</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47783250</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47783250</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>Go figure it out, it will be a useful challenge for you.</p>
]]></description><pubDate>Wed, 15 Apr 2026 18:29:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47783173</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47783173</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47783173</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>I'd tell you to read it again, but you seem to be struggling.</p>
]]></description><pubDate>Wed, 15 Apr 2026 18:26:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47783144</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47783144</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47783144</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>I'm not going to repeat myself, I've already explained the context to you - funny how you seem to have ignored that. If you want to find out, do the experiment yourself.</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:37:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782450</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782450</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782450</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>You clearly missed the "The truth is somewhere in between" bit.</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:35:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782430</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782430</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782430</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>Picking phrases from what I said and deliberately misquoting them out of context does not make you right.</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:32:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782367</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782367</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782367</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>"exactly this inspection" != "what does it exactly do"</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:31:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782357</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782357</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782357</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>Nicely put. I haven't seen anyone say that the introspection abilities of LLMs are up to much, but claiming that it's completely impossible to get a glimpse behind the curtain is untrue.</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:30:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782346</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782346</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782346</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>Yes of course there's a risk it may still be incorrect but querying the LLM with the limited facilities it provides for introspection is more likely to have at least some connection with facts than the alternative that some people use, which is to simply guess as to why it produced the output it did.<p>If you have an alternative approach, please share.</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:19:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782164</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782164</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>I don't owe you anything. If you want to go find out, go do it yourself.<p>You could even ask a LLM to help you if you,like...</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:16:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782128</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782128</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782128</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>People have applied "think" to the actions of software for decades. Of course it LLM's don't "think" in the human sense, but "What the output of the model indicates in an approximate way about its current internal state" is a bit long winded...</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:15:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782113</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47782113</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782113</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>"Not in the slightest" is an overreach, the paper the second level down from that link doesn't really support the conclusion in the blog post - the paper is much more nuanced.<p>Are they going to fib to you sometimes? Yes of course, but that doesn't mean there's no value in behavioural metaqueries.<p>Like most new tech, the discussion tends to polarise into "Best thing evah!" and "Utter shite!" The truth is somewhere in between.</p>
]]></description><pubDate>Wed, 15 Apr 2026 12:46:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47778253</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47778253</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47778253</guid></item><item><title><![CDATA[New comment by crustycoder in "My AI-Assisted Workflow"]]></title><description><![CDATA[
<p>> It would be interesting to see one of these evals and how it generated the score, to work out whether it is in fact arbitrary or based on some scale of points.<p>So go repeat the exercise yourself. I've already said this was a short-enough-to-post rollup of a much longer LLM assessment of the skills and that while most of the points were fair, some were questionable. If you were doing this "for real" you'd need to assess the full response point-by-point and decide which ones were valid.<p>> If you really believe this you should perhaps re-evaluate the trust you appear to place in the conclusions of LLMs, particularly about their own workings and what makes a good skill or prompt for them.<p>What on earth are you on about? The whole point of of the sentence you were replying to was that you can't blindly trust what comes out of them.</p>
]]></description><pubDate>Wed, 15 Apr 2026 12:31:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47778134</link><dc:creator>crustycoder</dc:creator><comments>https://news.ycombinator.com/item?id=47778134</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47778134</guid></item></channel></rss>