<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: adrian17</title><link>https://news.ycombinator.com/user?id=adrian17</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Apr 2026 18:23:08 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=adrian17" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by adrian17 in "Google Gemma 4 Runs Natively on iPhone with Full Offline AI Inference"]]></title><description><![CDATA[
<p>They released the source (well, currently only the Android version) at <a href="https://github.com/google-ai-edge/gallery" rel="nofollow">https://github.com/google-ai-edge/gallery</a> .<p>At a glance, I see they do gather analytics about how much the app is used (model downloads, model invocations etc) without message content, pretty much just the model used.</p>
]]></description><pubDate>Wed, 15 Apr 2026 15:53:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47780878</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47780878</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47780878</guid></item><item><title><![CDATA[New comment by adrian17 in "Gemma 4 on iPhone"]]></title><description><![CDATA[
<p>No, only E2B and E4B.</p>
]]></description><pubDate>Sun, 05 Apr 2026 22:24:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47654567</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47654567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47654567</guid></item><item><title><![CDATA[New comment by adrian17 in "The future of code search is not regex – 100x faster than ripgrep"]]></title><description><![CDATA[
<p>So the repo builds:<p>- C library<p>- neovim plugin<p>- MCP server<p>But not a plain binary, which is the main way ripgrep is directly used (...at least by humans), and compared with.</p>
]]></description><pubDate>Thu, 02 Apr 2026 10:29:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47612463</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47612463</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47612463</guid></item><item><title><![CDATA[New comment by adrian17 in "Epic Games to cut more than 1k jobs as Fortnite usage falls"]]></title><description><![CDATA[
<p>> Epic did it backwards — they built the game first, then tried to force the infrastructure (EGS) into existence with money.<p>Didn't Valve push Steam through HL2? It's a different kind of forcing of course, but still.</p>
]]></description><pubDate>Tue, 24 Mar 2026 20:47:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47509005</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47509005</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47509005</guid></item><item><title><![CDATA[New comment by adrian17 in "Python 3.15's JIT is now back on track"]]></title><description><![CDATA[
<p>It already has a fast path, from (I think) 3.11. If you run `object.x` repeatedly on the same type of object enough times, the interpreter will swap out the LOAD_ATTR opcode to `LOAD_ATTR_INSTANCE_VALUE` or `LOAD_ATTR_SLOT`, which only makes sure that the type is the same as before and loads the value from a specified offset, without doing a full lookup.</p>
]]></description><pubDate>Sun, 22 Mar 2026 15:33:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47478573</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47478573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47478573</guid></item><item><title><![CDATA[New comment by adrian17 in "Python 3.15's JIT is now back on track"]]></title><description><![CDATA[
<p>I saw your documentation PR, thank you!<p>I also did some reading and experiments, so quickly talking about things I've found out re: refcount elimination:<p>Previously given an expression `c = a + b`, the compiler generated a sequence of two LOADs (that increment the inputs' refcounts), then BINARY_OP that adds the inputs and decrements the refcounts afterwards (possibly deallocating the inputs).<p>But if the optimizer can prove that the inputs definitely will have existing references after the addition finishes (like when `a` and `b` are local variables, or if they are immortals like `a+5`), then the entire incref/decref pair could be ignored. So in the new version, the DECREFs part of the BINARY_OP was split into separate uops, which are then possibly transformed into POP_TOP_NOP by the optimizer.<p>And I'm assuming that although normally splitting an op this much would usually cost some performance (as the compiler can't optimize them as well anymore), in this case it's usually worth it as the optimization almost always succeeds, and even if it doesn't, the uops are still generated in several variants for various TOS cache (which is basically registers) states so they still often codegen into just 1-2 opcodes on x86.<p>One thing I don't entirely understand, but that's super specific from my experiment, not sure if it's a bug or special case: I looked at tier2 traces for `for i in lst: (-i) + (-i)`, where `i` is an object of custom int-like class with overloaded methods (to control which optimizations happen). When its __neg__ returns a number, then I see a nice sequence of<p>_POP_TOP_INT_r32, _r21, _r10.<p>But when __neg__ returns a new instance of the int-like class, then it emits<p>_SPILL_OR_RELOAD_r31, _POP_TOP_r10, _SPILL_OR_RELOAD_r01, _POP_TOP_r10, etc.<p>Is there some specific reason why the "basic" pop is not specialized for TOS cache? Is it because it's the same opcode as in tier1, and it's just not worth it as it's optimized into specialized uops most of the time; or is it that it can't be optimized the same way because of the decref possibly calling user code?</p>
]]></description><pubDate>Fri, 20 Mar 2026 23:02:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47461957</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47461957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47461957</guid></item><item><title><![CDATA[New comment by adrian17 in "Python 3.15's JIT is now back on track"]]></title><description><![CDATA[
<p>That's not true. I mean: it's true that it has little to do with OOP, but most imperative languages (only exception I know is Rust) have the issue, it's not "Python specific". For example (<a href="https://godbolt.org/z/aobz9q7Y9" rel="nofollow">https://godbolt.org/z/aobz9q7Y9</a>):<p>struct S {
    const int x;
    int f() const;
};
int S::f() const {
    int a = x;
    printf("hello\n");
    int b = x;
    return a-b;
}<p>The compiler can't reuse 'x' unless it's able to prove that it definitely couldn't have changed during the `printf()` call - and it's unable to prove it. The member is loaded twice. C++ compilers can usually only prove it for trivial code with completely inlined functions that doesn't mutate any external state, or mutates in a definitely-not-aliasing way (strict aliasing). (and the `const` don't do any difference here at all)<p>In Python the difference is that it can basically never prove it at all.</p>
]]></description><pubDate>Wed, 18 Mar 2026 10:11:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47423702</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47423702</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47423702</guid></item><item><title><![CDATA[New comment by adrian17 in "Python 3.15's JIT is now back on track"]]></title><description><![CDATA[
<p>I think CPython already had tier2 and some tracing infrastructure when the copy-and-patch JIT backend was added; it's the "JIT frontend" that's more obscure to me.</p>
]]></description><pubDate>Tue, 17 Mar 2026 21:28:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47418568</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47418568</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47418568</guid></item><item><title><![CDATA[New comment by adrian17 in "Python 3.15's JIT is now back on track"]]></title><description><![CDATA[
<p>I'm been occasionally glancing at PR/issue tracker to keep up to date with things happening with the JIT, but I've never seen where the high level discussions were happening; the issues and PRs always jumped right to the gritty details. Is there anywhere a high-level introduction/example of how trace projection vs recording work and differ? Googling for the terms often returns CPython issue tracker as the first result, and repo's jit.md is relatively barebones and rarely updated :(<p>Similarly, I don't entirely understand refcount elimination; I've seen the codegen difference, but since the codegen happens at build time, does this mean each opcode is possibly split into two (or more?) stencils, with and without removed increfs/decrefs? With so many opcodes and their specialized variants, how many stencils are there now?</p>
]]></description><pubDate>Tue, 17 Mar 2026 20:44:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47418043</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47418043</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47418043</guid></item><item><title><![CDATA[New comment by adrian17 in "No right to relicense this project"]]></title><description><![CDATA[
<p>The drop"-in" compatibility claims are also just wrong? I ran it on the old test suite from 6.0 (which is completely absent now), and quickly checking:<p>- the outputs, even if correctly deduced, are often incompatible: "utf-16be" turns into "utf-16-be", "UTF-16" turns into "utf-16-le" etc. FWIW, the old version appears to have been a bit of a mess (having had "UTF-16", "utf-16be" and "utf-16le" among its outputs) but I still wouldn't call the new version _compatible_,<p>- similarly, all `ascii` turn into `Windows-1252`<p>- sometimes it really does appear more accurate,<p>- but sometimes it appears to flip between wider families of closely related encodings, like one SHIFT_JIS test (confidence 0.99) turns into cp932 (confidence 0.34), or the whole family of tests that were determined as gb18030 (chinese) are now sometimes determined as gb2312 (the older subset of gb18030), and one even as cp1006, which AFAIK is just wrong.<p>As for performance claims, they appear not entirely false - analyzing all files took 20s, versus 150s with v6.0. However, looks like the library sometimes takes 2s to lazy initialize something, which means that if one uses `chardetect` CLI instead of Python API, you'll pay this cost each time and get several times slower instead.<p>Oh, and this "Negligible import memory (96 B)" is just silly and obviously wrong.</p>
]]></description><pubDate>Thu, 05 Mar 2026 13:49:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47261532</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47261532</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47261532</guid></item><item><title><![CDATA[New comment by adrian17 in "No right to relicense this project"]]></title><description><![CDATA[
<p>FWIW, I don't think there's even a room for interpretation here, given the commit that created the README (and almost all commits since the rewrite started 4 days ago) is authored by<p>> dan-blanchard and claude committed 4 days ago</p>
]]></description><pubDate>Thu, 05 Mar 2026 12:09:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47260693</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47260693</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47260693</guid></item><item><title><![CDATA[New comment by adrian17 in "Building a new Flash"]]></title><description><![CDATA[
<p>I'm talking about the .fla (XFL) format, not .swf (which is documented well - though that doesn't mean its exact behavior its understood well)<p>(note: I'm one of Ruffle's maintainers)</p>
]]></description><pubDate>Thu, 05 Mar 2026 09:41:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47259650</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47259650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47259650</guid></item><item><title><![CDATA[New comment by adrian17 in "Building a new Flash"]]></title><description><![CDATA[
<p>AFAIK the .fla format was never fully documented or reverse engineered by anyone (FFDEC has an exporter, but not importer), so this alone would be a bold claim.</p>
]]></description><pubDate>Wed, 04 Mar 2026 21:36:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47254246</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47254246</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47254246</guid></item><item><title><![CDATA[New comment by adrian17 in "Flashpoint Archive – Over 200k web games and animations preserved"]]></title><description><![CDATA[
<p>Hi, one of Ruffle maintainers here. AFAIK, we do have most of NetConnection API implemented; but direct socket connections are just impossible in browsers. The games should (hopefully) work and connect when run via the desktop player. We also implemented socket emulation in the browser via WebSockets, so they should also start working  there if you put a WebSockify proxy on your server (no need to touch the game server code).</p>
]]></description><pubDate>Sun, 15 Feb 2026 12:21:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47023140</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47023140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47023140</guid></item><item><title><![CDATA[New comment by adrian17 in "Firefox RCE: visit a web page, attacker gets shell"]]></title><description><![CDATA[
<p>> And no-one cares.<p>Probably because there's no (public) disclosure and no CVE. From what I've googled, there's literally nothing about this aside from the tweet.</p>
]]></description><pubDate>Fri, 13 Feb 2026 12:41:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47002052</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=47002052</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47002052</guid></item><item><title><![CDATA[New comment by adrian17 in "NIMBYs aren't just shutting down housing"]]></title><description><![CDATA[
<p>> Because the neighbor's formerly quite street turns into a parking lot before people "can't find parking." The people who have quiet streets will also see that and fight to keep a shop from opening near them.<p>This doesn't feel like a realistic scenario at all. A "suddenly very popular coffee shop" or "several shops opening close to each other" over here wouldn't significantly affect parking/traffic for several reasons. 1. a coffee shop's capacity (as in: seating, queue times) is already much smaller than parking space nearby; 2. of people in the queue, most will be locals already; 3. "it's hard to park nearby" by itself acts as a filter that naturally pulls people either to shops closer to their location, or to public transport.<p>There's just no such thing as "people from outside my neighborhood going out of their way to drive to the local XYZ". And places that _do_ want wider audience like fancier restaurants or wholesale won't pick a middle of the neighborhood to set up even if they were allowed to.<p>Also, we may be having different definitions of a quiet street. If anything, traffic in a mostly-residential area should decrease since locals could do things like small groceries without using a car?</p>
]]></description><pubDate>Sat, 07 Feb 2026 11:45:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46923089</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=46923089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46923089</guid></item><item><title><![CDATA[New comment by adrian17 in "A sane but bull case on Clawdbot / OpenClaw"]]></title><description><![CDATA[
<p>FWIW, the screenshots all have the dates spanning the last couple days.<p>But yeah, I can't imagine me getting used to a new tool to this degree and using it in so many ways in just a week.</p>
]]></description><pubDate>Wed, 04 Feb 2026 14:46:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46886439</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=46886439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46886439</guid></item><item><title><![CDATA[New comment by adrian17 in "Surely the crash of the US economy has to be soon"]]></title><description><![CDATA[
<p>> Here’s the current price of silver. (…) People buy precious metals when they might be worried about the value of fiat currencies, like, I don’t know, the dollar.<p>My (non-economist) understanding was that the silver price spikes were caused by supply issues (China export restrictions, tariffs) during rising demand (and speculation), and not by a rush to replace fiat? A bit surprised the author didn’t mention that at all.</p>
]]></description><pubDate>Wed, 28 Jan 2026 08:41:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46792644</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=46792644</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46792644</guid></item><item><title><![CDATA[New comment by adrian17 in "Unconventional PostgreSQL Optimizations"]]></title><description><![CDATA[
<p>Couldn't the first example be better done by having a Plan enum type? It'd both be a little more lightweight than text, and better at handling bad queries (mistyped filter resulting in error instead of empty result set).</p>
]]></description><pubDate>Wed, 21 Jan 2026 09:44:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46703268</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=46703268</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46703268</guid></item><item><title><![CDATA[New comment by adrian17 in "Dead Internet Theory"]]></title><description><![CDATA[
<p>I just went to a random OpenAI blog post ("The new ChatGPT Images is here"), right-click saved one of the images (the one from "Text rendering" section), and  pasted it to your [1] link - no metadata.<p>I know the metadata is probably easy to strip, maybe even accidentally, but their own promotional content not having it doesn't inspire confidence.</p>
]]></description><pubDate>Mon, 19 Jan 2026 07:39:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46675991</link><dc:creator>adrian17</dc:creator><comments>https://news.ycombinator.com/item?id=46675991</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46675991</guid></item></channel></rss>