<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: jlouis</title><link>https://news.ycombinator.com/user?id=jlouis</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 17 Apr 2026 16:23:41 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jlouis" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jlouis in "“Erdos problem #728 was solved more or less autonomously by AI”"]]></title><description><![CDATA[
<p>The statement is something you provide. It's the search you can have the LLM do. If this works for math it will immediately make code way higher quality via the same tools.</p>
]]></description><pubDate>Sat, 10 Jan 2026 01:53:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=46561942</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46561942</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46561942</guid></item><item><title><![CDATA[New comment by jlouis in "1ML for non-specialists: introduction"]]></title><description><![CDATA[
<p>It's not that they can't. It's that it's a waste of time in most cases.<p>Compilers are moving targets because hardware changes. There's a considerable maintenance upkeep in a compiler.<p>So if you are interested in programming language semantics, you can opt to skip the compiler part. This lets you iterate language designs without the added baggage of translating said program to machine code.<p>You can also argue there's no need. If you present your programming language in operational semantics, then it's trivial to write that up as a prolog program and run it on a prolog interpreter. Then you can employ a partial evaluator, and the first Futamura-projection gives you a compiler. You can choose to host your prolog program in a programming language which already has access to a partial evaluator, and you are essentially done before you even started.</p>
]]></description><pubDate>Fri, 09 Jan 2026 15:34:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46554948</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46554948</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46554948</guid></item><item><title><![CDATA[New comment by jlouis in "1ML for non-specialists: introduction"]]></title><description><![CDATA[
<p>[Here, ML means "Meta Language", not "Machine Learning". ML is used as an important building block inside some theorem provers and proof assistants]<p>The key thing with 1ML is that it merges the core and module system.<p>The ML family has historically had two systems: core and module. They are stratified in the sense they are separate languages. Modules can contain core expressions, but the other way around isn't possible.<p>1ML blends module and core. This means you have first-class modules in the core, which leads to a pretty nice language design.<p>Furthermore, this being Andreas Rossberg, the rigor at which this is carried out is very high. There's proofs of type safety and correctness along the way, generally to the same high bar as Standard ML (SML).</p>
]]></description><pubDate>Fri, 09 Jan 2026 15:27:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46554874</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46554874</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46554874</guid></item><item><title><![CDATA[New comment by jlouis in "Clair Obscur having its Indie Game Game Of The Year award stripped due to AI use"]]></title><description><![CDATA[
<p>LLMs has had a couple of years by now to show their usefulness, and while hype can drive it for a while, it's now getting to the point where hype alone can't. It needs to provide a tangible result for people.<p>If that tangible result doesn't occur, then people will begin to criticize everything. Rightfully so.<p>I.e., the future of LLMs is now wobbly. That doesn't necessarily mean a phase shift in opinion, but wobbly is a prerequisite for a phase shift.<p>(Personal opinion at the moment: LLMs needs a couple of miracles in the same vein as the discovery/invention of transformers. Otherwise, they won't be able to break through the current fault-barrier which is too low at the moment for anything useful.)</p>
]]></description><pubDate>Sun, 21 Dec 2025 13:34:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=46344738</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46344738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46344738</guid></item><item><title><![CDATA[New comment by jlouis in "If you're going to vibe code, why not do it in C?"]]></title><description><![CDATA[
<p>I think you should use a language with a highly expressive type system. That can be assembly too. See TAL back from the 1990'es. I also think you should use a language with a very expressive module system.<p>The reason is that you want to have some kind of guidance from a larger perspective in the long run. And that is exactly what types and module systems provide. The LLM has to create code which actually type checks, and it can use type checking as an important part of verification.<p>If you push this idea further: use Lean, Agda or Rocq. Let the LLM solve the nitty gritty details of proof, but use the higher-level theorem formation as the vessel for doing great things.<p>If you ask for a Red-black tree, you get a red-black tree. If you ask for a red-black tree where all the important properties are proven, you don't have to trust the LLM anymore. The proof is the witness of correctness. That idea is extremely powerful, because it means you can suddenly lift software quality by an order of magnitude, without having to trust the LLM at all.<p>We currently don't do this. I think it's because proving software correctness is just 50x more work, and it moves too slow. But if you could get an amplifier (LLM) to help out, it's possible this becomes more in the feasible area for a lot of software.</p>
]]></description><pubDate>Tue, 09 Dec 2025 20:55:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46210532</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46210532</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46210532</guid></item><item><title><![CDATA[New comment by jlouis in "Advent of Code 2025"]]></title><description><![CDATA[
<p>It's usually easy enough for Go you can just roll your own for the problems at hand. It won't be as elegant as having access to a combinator-parser, but all of the AoC problems aren't parsing problems.<p>Once you have something which can "load \n seperated numbers into array/slice" you are mostly set for the first few days. Go has verbosity. You can't really get around that.<p>The key thing in typed languages are to cook up the right data structures. In something without a type system, you can just wing things and work with a mess of dictionaries and lists. But trying to do the same in a typed language is just going to be uphill as you don't have the tools to manipulate the mess.<p>Historically, the problems has had some inter-linkage. If you built something day 3, then it's often used day 4-6 as well. Hence, you can win by spending a bit more time on elegance at day 3, and that makes the work at day 4-6 easier.<p>Mind you, if you just want to LLM your way through, then this doesn't matter since generating the same piece of code every day is easier. But obviously, this won't scale.</p>
]]></description><pubDate>Sun, 30 Nov 2025 15:26:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46097383</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46097383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46097383</guid></item><item><title><![CDATA[New comment by jlouis in "Advent of Code 2025"]]></title><description><![CDATA[
<p>Go is strong. You get something where writing a solution doesn't take too much time, you get a type system, you can brute-force problems, and the usual mind-numbing boring data-manipulation handling fits well into the standard tools.<p>OCaml is strong too. Stellar type system, fast execution and sane semantics unlike like 99% of all programming languages. If you want to create elegant solutions to problems, it's a good language.<p>For both, I recommend coming prepared. Set up a scaffold and create a toolbox which matches the typical problems you see in AoC. There's bound to be a 2d grid among the problems, and you need an implementation. If it can handle out-of-bounds access gracefully, things are often much easier, and so on. You don't want to hammer the head against the wall not solving the problem, but solving parsing problems. Having a combinator-parser library already in the project will help, for instance.</p>
]]></description><pubDate>Sun, 30 Nov 2025 14:27:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46096898</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46096898</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46096898</guid></item><item><title><![CDATA[New comment by jlouis in "Chrome Jpegxl Issue Reopened"]]></title><description><![CDATA[
<p>In a modern image chain, capture is more often than not HDR.<p>These images are then graded for HDR or SDR. I.e., sacrifices are made on the image data such that it is suitable for a display standard.<p>If you have an HDR image, it's relatively easy to tone-map that into SDR space, see e.g. BT.2408 for an approach in Video.<p>The underlying problem here is that the Web isn't ready for HDR at all, and I'm almost 100% confident browsers don't do the right things yet. HDR displays have enormous variance. From "Slightly above SDR" to experimental displays at Dolby Labs. So to display an image correctly, you need to render it properly to the displays capabilities. Likewise if you want to display a HDR image on an SDR monitor. I.e., tone mapping is a required part of the solution.<p>A correctly graded HDR image taken of the real world will have like 95% of the pixel values falling within your typical SDR (Rec.709/sRGB) range. You only use the "physically hurt my eyes" values sparingly, and you will take the room conditions into consideration when designing the peak value. As an example: cinemas using DCI-P3 peaks at 48 nits because the cinema is completely dark. 48 nits is more than enough for a pure white in that environment. But take that image and put it on a display sitting inside during the day, and it's not nearly enough for a white. Add HDR peaks into this, and it's easy to see that in a cinema, you probably shouldn't peak at 1000 nits (which is about 4.x stops of light above the DCI-P3 peak). In short: your rendering to the displays capabilities require that you probe the light conditions in the room.<p>It's also why you shouldn't be able to manipulate brightness on an HDR display. We need that to be part of the image rendering chain such that the right decisions can be made.</p>
]]></description><pubDate>Tue, 25 Nov 2025 12:55:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=46045330</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46045330</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46045330</guid></item><item><title><![CDATA[New comment by jlouis in "Chrome Jpegxl Issue Reopened"]]></title><description><![CDATA[
<p>This is welcome.<p>AVIF is trying to be a distribution format for the Web. JPEG XL is trying to be a complete package for working with image data. JPEG XL can replace OpenEXR in many workflows. AVIF simply cannot.<p>There's a lot of power in not having to convert for distribution.</p>
]]></description><pubDate>Tue, 25 Nov 2025 12:33:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=46045200</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46045200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46045200</guid></item><item><title><![CDATA[New comment by jlouis in "Claude Advanced Tool Use"]]></title><description><![CDATA[
<p>It's not. The fragments you can execute are limited if you do it right. A client isn't allowed to just execute anything it wants, because the valid operations are pre-determined. The client sends a reference which executes a specific pre-planned fragment of code.<p>In development, you let clients roam free, so you have access to the API in a full manner. Deployments then lock-down the API. If you just let a client execute anything it wants in production, you get into performance-trouble very easily once a given client decides to be adventurous.<p>GraphQL is an execution semantics. It's very close to a lambda calculus, but I don't think that was by design. I think that came about by accident. A client is really sending a small fragment of code to the server, which the server then executes. The closest thing you have is probably SQL queries: the client sends a query to the server, which the server then executes.<p>It's fundamental to the idea of GraphQL as well. You want to put power into the hands of the client, because that's what allows a top-down approach to UX design. If you always have to manipulate the server-side whenever a client wants to change call structure, you've lost.</p>
]]></description><pubDate>Tue, 25 Nov 2025 12:26:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=46045159</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46045159</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46045159</guid></item><item><title><![CDATA[New comment by jlouis in "Chrome Jpegxl Issue Reopened"]]></title><description><![CDATA[
<p>Very nice in video workflows, where it's common to write out image sequences to disk.</p>
]]></description><pubDate>Mon, 24 Nov 2025 23:54:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46040828</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46040828</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46040828</guid></item><item><title><![CDATA[New comment by jlouis in "Claude Advanced Tool Use"]]></title><description><![CDATA[
<p>No.<p>It's a way to transmit a program from client to server. It then executes that program on the server side.</p>
]]></description><pubDate>Mon, 24 Nov 2025 21:05:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=46039301</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46039301</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46039301</guid></item><item><title><![CDATA[New comment by jlouis in "Editing Code in Emacs"]]></title><description><![CDATA[
<p>It's really a selector or a filter. It's power comes from combining it with other tools.</p>
]]></description><pubDate>Sun, 23 Nov 2025 22:31:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=46028019</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=46028019</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46028019</guid></item><item><title><![CDATA[New comment by jlouis in "AI isn't replacing jobs. AI spending is"]]></title><description><![CDATA[
<p>Talent eventually get paid their value. Doesn't matter where they live. If you have a brain, you rank up. Quickly.</p>
]]></description><pubDate>Sun, 09 Nov 2025 21:42:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=45869468</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=45869468</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45869468</guid></item><item><title><![CDATA[New comment by jlouis in "Why I love OCaml (2023)"]]></title><description><![CDATA[
<p>Not a priori.<p>The grand design of BEAM is that you are copying data rather than passing it by reference. A copy operation severs a data dependency by design. Once the copy is handed somewhere, that part can operate in isolation. And modern computers are far better at copying data around than what people think. The exception are big-blocks-of-data(tm), but binaries are read-only in BEAM and thus not copied.<p>Sure, if you set up a problem which requires a ton of communication, then this model suffers. But so does your GPU if you do the same thing.<p>As Joe Armstrong said: our webserver is a thousand small webservers, each serving one request.<p>Virtually none of them have to communicate with each other.</p>
]]></description><pubDate>Fri, 07 Nov 2025 23:45:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=45852664</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=45852664</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45852664</guid></item><item><title><![CDATA[New comment by jlouis in "Why I love OCaml (2023)"]]></title><description><![CDATA[
<p>I don't think it's a spectrum.<p>Languages have features/constructs. It's better to look at what those are. And far more importantly: how they interact.<p>Take something like subtyping for instance. What makes this hard to implement is that it interacts with everything else in your language: polymorphism, GADTs, ...<p>Or take something like Garbage Collection. It's presence/absence has a large say in everything done in said language. Rust is uniquely not GC'ed, but Go, OCaml and Haskell all are. That by itself creates some interesting behavior. If we hand something to a process and get something back, we don't care if the thing we handed got changed or not if we have a GC. But in Rust, we do. We can avoid allocations and keep references if the process didn't change the thing after all. This permeates all of the language.</p>
]]></description><pubDate>Fri, 07 Nov 2025 21:31:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45851330</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=45851330</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45851330</guid></item><item><title><![CDATA[New comment by jlouis in "Why I love OCaml (2023)"]]></title><description><![CDATA[
<p>It's not isolation which hampers throughput. That's a red herring. In fact, isolation increases throughput, because it reduces synchronization. A group of isolated tasks are embarrassingly parallel by definition.<p>The throughput loss stems from a design which require excessive communication. But such a design will always be slow, no matter your execution model. Modern CPUs simply don't cope well if cores need to send data between them. Neither does a GPU.</p>
]]></description><pubDate>Fri, 07 Nov 2025 21:25:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45851280</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=45851280</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45851280</guid></item><item><title><![CDATA[New comment by jlouis in "Why I love OCaml (2023)"]]></title><description><![CDATA[
<p>You can be functional "in spirit" more than purely functional. OCaml and Standard ML falls into this category. Ocaml has loops for instance. You might just not see many loops if code is written by OCaml developers, because there's frankly no need to use them in a lot of places. You often want to lift the abstraction level of iteration to an arbitrary data structure such that you get freedom of implementation. See Applicative and Monad.</p>
]]></description><pubDate>Fri, 07 Nov 2025 21:16:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=45851204</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=45851204</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45851204</guid></item><item><title><![CDATA[New comment by jlouis in "Why I love OCaml (2023)"]]></title><description><![CDATA[
<p>Rocq is an excellent example of something OCaml was designed for. FFTW3 is another great example. Unison too.<p>Generally, you want stuff where you have to build a fairly large core from scratch. Most programs out there doesn't really fit that too well nowadays. We tend to glue things more than write from nothing.</p>
]]></description><pubDate>Fri, 07 Nov 2025 21:12:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=45851166</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=45851166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45851166</guid></item><item><title><![CDATA[New comment by jlouis in "Denmark's government aims to ban access to social media for children under 15"]]></title><description><![CDATA[
<p>Given the track record of digitalization in Denmark, you can be rest assured this will be implemented in the worst possible way.<p>This is Denmark. The country who reads the EU legislation requesting the construction of a CA to avoid centralizing the system and then legally bends the rules of EU and decides it's far better to create a centralized solution. I.e., the intent is a public key cryptosystem with three bodies, the state being the CA. But no, they should hold both the CA and the Key in escrow. Oh, and then decides that the secret should be a pin such that law enforcement can break it in 10 milliseconds.<p>I think internet verification is at least 10 years too late. Better late than never. I just lament the fact we are going to get a bad solution to the problem.</p>
]]></description><pubDate>Fri, 07 Nov 2025 21:03:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45851085</link><dc:creator>jlouis</dc:creator><comments>https://news.ycombinator.com/item?id=45851085</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45851085</guid></item></channel></rss>