<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: sltkr</title><link>https://news.ycombinator.com/user?id=sltkr</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 06 Sep 2026 11:44:33 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=sltkr" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by sltkr in "The revolt of the reader"]]></title><description><![CDATA[
<p>Orwell's entire essay (Politics and the English Language) is well worth reading if you haven't before:<p><a href="https://www.orwellfoundation.com/the-orwell-foundation/orwell/essays-and-other-works/politics-and-the-english-language/" rel="nofollow">https://www.orwellfoundation.com/the-orwell-foundation/orwel...</a><p>(I'm guessing Zinsser's comments are from "On Writing Well", which you can also find online even though it is still under copyright.)<p>It's a bit of a pet peeve when people include quotes on a blog post without linking or otherwise references their source.</p>
]]></description><pubDate>Sun, 06 Sep 2026 04:54:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=49583452</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49583452</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49583452</guid></item><item><title><![CDATA[New comment by sltkr in "Getting Started with AT Protocol"]]></title><description><![CDATA[
<p>You shouldn't have to click away from a blog post to understand what the blog post is about. It should start with a clear self-contained introduction.<p>atproto.com contains a succinct discription:<p>> Atproto is a big-world open social protocol. Users publish JSON records into repositories. The changestreams of those records then sync across the network to drive applications.<p>Still a bit abstract, but OK. Personally I would include that AT protocol stands for Authenticated Transfer Protocol and that it is the protocol powering Bluesky.</p>
]]></description><pubDate>Fri, 04 Sep 2026 18:44:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=49568518</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49568518</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49568518</guid></item><item><title><![CDATA[New comment by sltkr in "The turbulent AI era is here"]]></title><description><![CDATA[
<p>That article explains that the quirk was introduced during supervised fine-tuning.<p>> We unknowingly gave particularly high rewards for metaphors with creatures<p>It was the human feedback that caused the bias, not a change in training data.</p>
]]></description><pubDate>Thu, 27 Aug 2026 15:30:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=49466459</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49466459</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49466459</guid></item><item><title><![CDATA[New comment by sltkr in "The turbulent AI era is here"]]></title><description><![CDATA[
<p>> You have no evidence that self improvement can work at generalized tasks.<p>I never made that claim. I just said it's way too early to rule it out: there is no logical reason why AIs will (always) need to have a human in the loop, and we don't have enough experience with LLMs to know what their true limits are.<p>I referenced AlphaGo not because the game of Go is exactly like every other task AI might perform in the future, but because the evolution from AlphaGo (which was trained on human games) to AlphaGo Zero (which was not) shows that at least in certain domains, it's not only possible to take the human out of the loop, it can actually make AI perform better.<p>I'm not claiming this will definitely be possible in every other domain, but people who state it definitely won't be, are jumping the gun.</p>
]]></description><pubDate>Thu, 27 Aug 2026 00:35:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=49457881</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49457881</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49457881</guid></item><item><title><![CDATA[New comment by sltkr in "The turbulent AI era is here"]]></title><description><![CDATA[
<p>The key word in that paper is “indiscriminate”, as in:<p>> We find that _indiscriminate_ use of model-generated content in training causes irreversible defects in the resulting models<p>If you view AI training as lossy compression of their training data, then lossily compressing the same data repeatedly will result in data degredation; this is well known from other domains (try repeatedly compressing a JPEG image, for example).<p>That means it's extremely important that there is some content curation in the loop. But there is no reason to believe this content curation must be done by humans, or that it must exclude all AI-generated content by default.<p>For example, the recent LLM-generated disproof of the Jacobian conjecture would probably be beneficial to include in the training data, despite being the result of an LLM.</p>
]]></description><pubDate>Wed, 26 Aug 2026 23:46:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=49457462</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49457462</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49457462</guid></item><item><title><![CDATA[New comment by sltkr in "The turbulent AI era is here"]]></title><description><![CDATA[
<p>> When the data fed into an AI model is based on real data you can get predictability. When the AI inputs start coming from the AI outputs the wobble is introduced which results inevitably into delirium.<p>This is asserted without evidence. There is absolutely no proof that AI requires humans in the loop to function or improve itself.<p>Compare it with Deepmind's go-playing program, AlphaGo, which mainly involved training a neural network on a large database of high-level human games. It defeated one of the top-ranked players in the world, Lee Sedol, but arguably it was drawing from human experience just like you described.<p>But it didn't stop there. After that, Deepmind developed AlphaGo Zero, a version that was trained exclusively through self-play, with no human feedback in the loop. That's what you would call "AI inputs coming from AI outputs" but it didn't have the result of “resulting in delirium”: instead, it became orders of magnitudes stronger than the original version (which it defeated in a 100 to 0 competition after 3 days of training).<p>This shows that AI can improve itself without having access to any human knowledge, and indeed transcend human performance by orders of magnitudes. There is absolutely nothing to suggest that general AI cannot improve itself the same way.<p>People who claim otherwise are engaging in wishful thinking; they just assert their conclusion, but have no rational arguments to back it up.</p>
]]></description><pubDate>Wed, 26 Aug 2026 21:09:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=49455950</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49455950</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49455950</guid></item><item><title><![CDATA[New comment by sltkr in "Using GCC's Nested Functions with Wide Pointers and No Trampolines II"]]></title><description><![CDATA[
<p>Lambda expressions in C++ are simply syntactic sugar for defining function objects (aka functors): structs that overload operator() so you can call them as functions. Once you realize this, their features and limitations become immediately clear.<p>For example, here is a typical use of a lambda expression to filter a vector of values:<p><pre><code>    #include <iostream>
    #include <vector>

    int main() {
        std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5};

        int threshold = 5;
        std::erase_if(v, [&](int i) { return i < threshold; });

        // prints 5 9 6 5
        for (int i : v) std::cout << i << '\n';
    }

</code></pre>
The lambda expression is essentially shorthand for:<p><pre><code>        ...
        int threshold = 5;
        struct lambda_t {
            int &threshold;
            bool operator()(int i) {
                return i < threshold;
            }
        };
        std::erase_if(v, lambda_t{threshold});
        ...
</code></pre>
You could always do this in C++. The added value of the lambda expression syntax is that the compiler generates the boilerplate, and generates a unique name for lambda_t.<p>The important takeaway is that every lambda expression corresponds with a unique type that is _not_ a function type, but a class type. Consequently, lambda expressions can only be passed to template functions like std::erase_if, which are parameterized with the callback type.<p>You cannot pass a lambda expression to a function that expects a function pointer (e.g. bool(*)(int) in this example), and that's where they differ from GCC-style nested functions, which actually behave like functions. It also explains why lambda expressions don't need a trampoline.<p>As an aside, you _can_ pass lambdas to non-generic functions using a type-erasing wrapper like std::function, but std::function is itself a class type too, so that still doesn't allow you to convert it to a plain function pointer.<p>Finally, you can of course assign a name to a lambda expression value, using this common pattern:<p><pre><code>    auto greet = [](const char *name) { std::cout << "Hello " << name << "!\n"; }
    greet("Alice");
    greet("Bob");
</code></pre>
(Note that `auto` is necessary here because there is no way to explicitly refer to the compiler-generated name for the lambda type.)<p>This is the closest you can get to a local function definition in C++. Admittedly the syntax is a little odd. You might wonder why there wasn't some additional syntactic sugar to make the definition look more normal. I suspect that wasn't a random decision, but rather intentionally avoiding conflicts with existing language extensions like GCC's local function syntax.</p>
]]></description><pubDate>Sat, 15 Aug 2026 18:32:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=49313042</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49313042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49313042</guid></item><item><title><![CDATA[New comment by sltkr in "Using GCC's Nested Functions with Wide Pointers and No Trampolines II"]]></title><description><![CDATA[
<p>For the non-capturing case: mainly to improve readability by allowing utility functions to be defined close to where they are used and with short names.<p>For the capturing case: to access context that is not available through global variables or function arguments, i.e., the same reason why closures are useful in other languages.<p>Here's an example, where I have a list of points that I want to sort based on distance to a chosen target point. I can use qsort() which takes an arbitrary comparison function, but has no way to provide context to that function beyond the input arguments:<p><pre><code>    #include <stdio.h>
    #include <stdlib.h>

    int main() {
        struct Point {
            int x, y;
        } points[3] = {
            { 3, 1 },
            { 2, 2 },
            { 5, 7 } };

        struct Point target = { 4, 5 };

        long dsq(const struct Point *p) {
            long dx = p->x - target.x, dy = p->y - target.y;
            return dx*dx + dy*dy;
        }

        int compare(const void *p, const void *q) {
            long a = dsq(p), b = dsq(q);
            return (a > b) - (a < b);
        }

        qsort(points, 3, sizeof(struct Point), compare);

        for (int i = 0; i < 3; ++i) {
            printf("%d,%d\n", points[i].x, points[i].y);
        }
    }
</code></pre>
Note here that dsq() is a local function that accesses the `target` variable in the local function scope.<p>The usual workaround in standard C is to pass the necessary context as a function argument. That's why qsort_r() exists, which takes a context argument to be passed to compare(), but that's a non-standard GNU extension.<p>This practice of passing context pointers around is ubiquitous in C code, and it works, but it can get messy especially if you need access to multiple variables or variables from more than one nested scope. There is also a type safety issue: these context pointers are necessarily passed as void* which means they have to be cast back to the real type before use, which is where bugs can be introduced if the caller and receiver disagree on the actual type.</p>
]]></description><pubDate>Sat, 15 Aug 2026 12:27:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49310039</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49310039</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49310039</guid></item><item><title><![CDATA[New comment by sltkr in "Donkey.bas is 45 Years Old – 131 line of Glory"]]></title><description><![CDATA[
<p>It was really cool! The ease of getting started was definitely one of the selling points for the “home computers” of that era (GW-BASIC ran on IBM compatible PCs instead, but the appeal of BASIC was the same). Brevity was an important feature since a lot of people obtained programs by typing them over from a magazine or recording them from the radio. And of course, there was no such thing as auto-complete (let alone AI generation).<p>That being said, SDL isn't actually that bad either. A minimal example is about 40 lines of code [1], not counting comments and blank lines, but including lines with just a curly brace which you could easily remove if you were concerned about size. A slightly more serious implementation of Snake runs about 345 lines of code [2].<p>And to be fair, DONKEY.BAS is also cheating slightly on the line metric by stuffing lines full of statements, like for example:<p><pre><code>    A$=INKEY$:IF A$=CHR$(27) THEN 1298 ELSE POKE 106,0:IF LEN(A$)>0 THEN LINE (CX,CY)-(CX+28,CY+44),0,BF:CX=252-CX:PUT (CX,CY),CAR%,PRESET:SOUND 200,1

</code></pre>
1. <a href="https://examples.libsdl.org/SDL3/renderer/01-clear/" rel="nofollow">https://examples.libsdl.org/SDL3/renderer/01-clear/</a>  
2. <a href="https://examples.libsdl.org/SDL3/demo/01-snake/" rel="nofollow">https://examples.libsdl.org/SDL3/demo/01-snake/</a></p>
]]></description><pubDate>Thu, 13 Aug 2026 19:35:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=49290885</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49290885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49290885</guid></item><item><title><![CDATA[New comment by sltkr in "How Golden Is Silence, Actually?"]]></title><description><![CDATA[
<p><a href="https://archive.is/8GB36" rel="nofollow">https://archive.is/8GB36</a><p>I agree with you though, it's obnoxious to share paywalled articles on Hacker News.</p>
]]></description><pubDate>Sun, 09 Aug 2026 21:15:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=49235980</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49235980</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49235980</guid></item><item><title><![CDATA[New comment by sltkr in "Elevators"]]></title><description><![CDATA[
<p>Reminds me of this little game, where you have to code your own elevator algorithm: <a href="https://play.elevatorsaga.com/" rel="nofollow">https://play.elevatorsaga.com/</a></p>
]]></description><pubDate>Sat, 01 Aug 2026 03:07:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=49130688</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49130688</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49130688</guid></item><item><title><![CDATA[New comment by sltkr in "Bytecode-to-Source Mapping"]]></title><description><![CDATA[
<p>Another common file format is Javascript's Source Map (which is extensively used to map minified js to its original source form): <a href="https://tc39.es/ecma426/2024/" rel="nofollow">https://tc39.es/ecma426/2024/</a><p>Note that there is an intrinsic trade-off between minimizing file sizes and making access efficient. Something like delta-encoding is highly efficient but makes efficient access impossible.<p>Most file formats are designed with the assumption that line number information will only be needed rarely (e.g. when explicitly breaking into a debugger, or annotating a backtrace in case of a crash) so they prioritize simplicity and compactness over efficient access.</p>
]]></description><pubDate>Mon, 27 Jul 2026 19:55:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=49074786</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=49074786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49074786</guid></item><item><title><![CDATA[New comment by sltkr in "Africans Are Turning to Starlink"]]></title><description><![CDATA[
<p>The question is if they can tell it's fiber _before_ cutting through it and damaging it. This seems way easier with PVC pipes than with fiber cables.</p>
]]></description><pubDate>Sat, 04 Jul 2026 00:36:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48781599</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48781599</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48781599</guid></item><item><title><![CDATA[New comment by sltkr in "Incident CVE-2026-LGTM"]]></title><description><![CDATA[
<p>> That is how insane the times are becoming<p>Gee whiz what an interesting way of thinking.<p><a href="https://www.smbc-comics.com/comic/aaaah" rel="nofollow">https://www.smbc-comics.com/comic/aaaah</a></p>
]]></description><pubDate>Fri, 26 Jun 2026 15:52:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48688093</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48688093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48688093</guid></item><item><title><![CDATA[New comment by sltkr in "Steam Machine launches today"]]></title><description><![CDATA[
<p>Presumably this is calculated into the contract.<p>If the price is expected to fall over time, then the negotiated price is below market at the beginning and above market at the end. From the suppliers view, they take a loss in the early years that they recover later.<p>Apple probably pays a premium to shift this risk to the supplier. Besides that they don't take a loss just because prices tend to fall. They only lose if market prices fall more steeply than expected.</p>
]]></description><pubDate>Tue, 23 Jun 2026 17:52:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48648643</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48648643</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48648643</guid></item><item><title><![CDATA[New comment by sltkr in "Lossless GIF recompression via exhaustive search"]]></title><description><![CDATA[
<p>PyPy is an option too.</p>
]]></description><pubDate>Tue, 23 Jun 2026 17:16:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48648146</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48648146</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48648146</guid></item><item><title><![CDATA[New comment by sltkr in "Data Compression Explained (2012)"]]></title><description><![CDATA[
<p>compression = prediction + entropy coding was already an insight from Claude Shannon in the 1950s<p>Since LLM are inherently token predictors, that makes using them for losless compression almost trivial. For something close to the state of the art see e.g. Fabrice Bellard (of course) ts_zip: <a href="https://bellard.org/ts_zip/" rel="nofollow">https://bellard.org/ts_zip/</a><p>I think some of the confusion comes from the fact that there is a pretty big difference between the techniques employed by compressors that optimize compression ratio at the cost of nearly everything else, like ts_zip above, and practical tools that intend to balance compression ratio with limitation on CPU speed / memory, like zstd.<p>When optimizing for compression ratio, the prediction + entropy coding paradigm dominates. Practical tools, even modern ones like zstd, are mostly based around sliding window compression à la LZ77 (unzip/deflate), with the main selling point of more modern tools being that they scale up to larger window sizes and run really really fast. Some of these (like LZO) don't even have an entropy coding step to save time. zstd has both Huffman coding and FSE: Huffman coding is suboptimal but presumably it's an option because it's faster, and on lower compression levels it's preferable to be fast.<p>Anyway, the bottom line is: don't get confused between the state of the art in terms of compression ratio, and practical tools. Those are quite different things.</p>
]]></description><pubDate>Sat, 20 Jun 2026 17:02:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48610839</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48610839</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48610839</guid></item><item><title><![CDATA[New comment by sltkr in "Can you see three trees?"]]></title><description><![CDATA[
<p>I agree that that's the best way to take these kind of "rules", but that's the opposite of how the blog author presents it:<p>> the 3-30-300 test — a standard that has become the go-to for solving a universal urban problem<p>> 3-30-300 is a catchy, straightforward test that sets a clear benchmark for measuring equal access to nature.<p>> I found that my closest park isn't 300 metres away, it's 400 metres. That's close, but a fail.<p>It's a standard. It's a benchmark. And a park at 400 metres is no good; it must be 300 metres or else it may as well be 4 kilometers away. This isn't treating the test as a useful guidance, but as a hard target. As Goodheart's law states: when a measure becomes a target, it ceases to be a good measure.<p>When you focus exclusively on satisfying such metrics, you can end up with ineffective policy. Missing the forest for the trees, if you will.</p>
]]></description><pubDate>Sat, 20 Jun 2026 16:29:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48610518</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48610518</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48610518</guid></item><item><title><![CDATA[New comment by sltkr in "Show HN: Are You in the Weights?"]]></title><description><![CDATA[
<p>It nailed 2 out of 4, which I'm not going to repeat to preserve a modicum of privacy.<p>But unfortunately I'm not a professional footballer _or_ a fictional character in a Henry James novel (though I looked up the reference and it's close!)</p>
]]></description><pubDate>Thu, 18 Jun 2026 21:53:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=48592155</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48592155</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48592155</guid></item><item><title><![CDATA[New comment by sltkr in "U.S. science is in chaos"]]></title><description><![CDATA[
<p>No university requires you to declare support for that belief.</p>
]]></description><pubDate>Thu, 18 Jun 2026 15:33:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48586982</link><dc:creator>sltkr</dc:creator><comments>https://news.ycombinator.com/item?id=48586982</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48586982</guid></item></channel></rss>