<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: aamargulies</title><link>https://news.ycombinator.com/user?id=aamargulies</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 12 Oct 2026 06:14:18 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=aamargulies" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by aamargulies in "Can you use autoregressive diffusion to generate market data?"]]></title><description><![CDATA[
<p>Seconded.</p>
]]></description><pubDate>Sat, 10 Oct 2026 03:46:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=50029351</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=50029351</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50029351</guid></item><item><title><![CDATA[New comment by aamargulies in "Show HN: I made a Raspberry with Qwen my local car AI"]]></title><description><![CDATA[
<p>Qwen3.5-4B would be a good (better?) candidate. It uses a gated, deltanet hybrid, so your KV cache stays nearly flat as context grows, important for RAM-constrained environments like the Pi.</p>
]]></description><pubDate>Tue, 25 Aug 2026 21:53:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=49441210</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=49441210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49441210</guid></item><item><title><![CDATA[New comment by aamargulies in "Opus 5.0 drives incoherence into the stratosphere"]]></title><description><![CDATA[
<p>I was playing around with Opus 5.0, experimenting with creative writing tasks and this came out of one of the characters' mouths:<p><pre><code>     "... and the reason he was doing this — the reason, the entire load-bearing reason, the twelve thousand dollars a school and the girls of the Karakoram ... "
</code></pre>
The em-dash. The 'load-bearing'. Other than that, Opus 5.0 is actually not bad as a writer.</p>
]]></description><pubDate>Wed, 19 Aug 2026 18:21:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=49365210</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=49365210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49365210</guid></item><item><title><![CDATA[New comment by aamargulies in "Ask HN: What are you working on? (August 2026)"]]></title><description><![CDATA[
<p>Chicago is there! Look in the cities dropdown menu.
getting sources is the trick… I’ve made some discoveries about how to ‘reverse-engineer’ a city.</p>
]]></description><pubDate>Sun, 09 Aug 2026 18:11:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=49233926</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=49233926</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49233926</guid></item><item><title><![CDATA[New comment by aamargulies in "Ask HN: What are you working on? (August 2026)"]]></title><description><![CDATA[
<p>Automatic local events aggregator <a href="https://whatson.town/" rel="nofollow">https://whatson.town/</a></p>
]]></description><pubDate>Sun, 09 Aug 2026 17:40:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=49233573</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=49233573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49233573</guid></item><item><title><![CDATA[New comment by aamargulies in "DuckDB Internals Part 1"]]></title><description><![CDATA[
<p>I asked Claude which tools it would most want to add to a machine we were working on. #1 was DuckDB.</p>
]]></description><pubDate>Sat, 20 Jun 2026 02:28:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48605772</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=48605772</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48605772</guid></item><item><title><![CDATA[New comment by aamargulies in "You can beat the binary search"]]></title><description><![CDATA[
<p>Here's my version with a key spline improvement. I should really write this up...<p>#include <stdbool.h>
#include <stdint.h>
#include <arm_neon.h><p>/* Author: aam@fastmail.fm
 *
 * Apple M4 Max (P-core) variant of simd_quad which uses a key spline
 * to great effect (blog post summary incoming!)
 <i>/
bool simd_quad_m4(const uint16_t </i>carr, int32_t cardinality, uint16_t pos) {
    enum { gap = 64 };<p><pre><code>    if (cardinality < gap) {
        if (cardinality >= 32) {
            // 32 <= n < 64: NEON-compare the first 32 as a single x4 load,
            // sweep the remainder.
            uint16x8_t needle = vdupq_n_u16(pos);
            uint16x8x4_t v = vld1q_u16_x4(carr);
            uint16x8_t hit = vorrq_u16(
                vorrq_u16(vceqq_u16(v.val[0], needle), vceqq_u16(v.val[1], needle)),
                vorrq_u16(vceqq_u16(v.val[2], needle), vceqq_u16(v.val[3], needle)));
            if (vmaxvq_u16(hit) != 0) return true;
            for (int32_t j = 32; j < cardinality; j++) {
                uint16_t x = carr[j];
                if (x >= pos) return x == pos;
            }
            return false;
        }
        if (cardinality >= 16) {
            // 16 <= n < 32: paired x2 load + sweep tail.
            uint16x8_t needle = vdupq_n_u16(pos);
            uint16x8x2_t v = vld1q_u16_x2(carr);
            uint16x8_t hit = vorrq_u16(vceqq_u16(v.val[0], needle),
                                       vceqq_u16(v.val[1], needle));
            if (vmaxvq_u16(hit) != 0) return true;
            for (int32_t j = 16; j < cardinality; j++) {
                uint16_t x = carr[j];
                if (x >= pos) return x == pos;
            }
            return false;
        }
        if (cardinality >= 8) {
            // 8 <= n < 16: single 128-bit compare + sweep tail.
            uint16x8_t needle = vdupq_n_u16(pos);
            uint16x8_t v = vld1q_u16(carr);
            if (vmaxvq_u16(vceqq_u16(v, needle)) != 0) return true;
            for (int32_t j = 8; j < cardinality; j++) {
                uint16_t x = carr[j];
                if (x >= pos) return x == pos;
            }
            return false;
        }
        for (int32_t j = 0; j < cardinality; j++) {
            uint16_t v = carr[j];
            if (v >= pos) return v == pos;
        }
        return false;
    }

    int32_t num_blocks = cardinality / gap;
    int32_t base = 0;
    int32_t n = num_blocks;

    while (n > 3) {
        int32_t quarter = n >> 2;
        int32_t k1 = carr[(base + quarter + 1) * gap - 1];
        int32_t k2 = carr[(base + 2 * quarter + 1) * gap - 1];
        int32_t k3 = carr[(base + 3 * quarter + 1) * gap - 1];
        int32_t c1 = (k1 < pos);
        int32_t c2 = (k2 < pos);
        int32_t c3 = (k3 < pos);
        base += (c1 + c2 + c3) * quarter;
        n -= 3 * quarter;
    }
    while (n > 1) {
        int32_t half = n >> 1;
        base = (carr[(base + half + 1) * gap - 1] < pos) ? base + half : base;
        n -= half;
    }
    int32_t lo = (carr[(base + 1) * gap - 1] < pos) ? base + 1 : base;

    if (lo < num_blocks) {
        const uint16_t *blk = carr + lo * gap;
        uint16x8_t needle = vdupq_n_u16(pos);
        uint16x8x4_t a = vld1q_u16_x4(blk);
        uint16x8x4_t b = vld1q_u16_x4(blk + 32);
        uint16x8_t h0 = vorrq_u16(
            vorrq_u16(vceqq_u16(a.val[0], needle), vceqq_u16(a.val[1], needle)),
            vorrq_u16(vceqq_u16(a.val[2], needle), vceqq_u16(a.val[3], needle)));
        uint16x8_t h1 = vorrq_u16(
            vorrq_u16(vceqq_u16(b.val[0], needle), vceqq_u16(b.val[1], needle)),
            vorrq_u16(vceqq_u16(b.val[2], needle), vceqq_u16(b.val[3], needle)));
        return vmaxvq_u16(vorrq_u16(h0, h1)) != 0;
    }

    for (int32_t j = num_blocks * gap; j < cardinality; j++) {
        uint16_t v = carr[j];
        if (v >= pos) return v == pos;
    }
    return false;</code></pre>
}<p>/*
 * Spine variant, M4 edition.
 *
 * pack the interpolation probe keys into a dense contiguous region so the
 * cold-cache pointer chase streams through consecutive cache lines:
 *
 *   n=4096 -> 64 spine keys -> 128 B = 1 M4 cache line
 *   n=2048 -> 32 spine keys ->  64 B = half a line
 *   n=1024 -> 16 spine keys ->  32 B
 *
 * The entire interpolation phase for a max-sized Roaring container now
 * lives in one cache line. The final SIMD block check still loads from
 * carr.
 *
 * The num_blocks <= 3 fallback:
 * with very few blocks the carr-based probes accidentally prime the final
 * block's lines, which the spine path disrupts.
 <i>/
bool simd_quad_m4_spine(const uint16_t </i>carr, const uint16_t <i>spine,
                        int32_t cardinality, uint16_t pos) {
    enum { gap = 64 };<p><pre><code>    if (cardinality < gap) {
        // Same fast paths as simd_quad_m4 -- spine is irrelevant here.
        if (cardinality >= 32) {
            uint16x8_t needle = vdupq_n_u16(pos);
            uint16x8x4_t v = vld1q_u16_x4(carr);
            uint16x8_t hit = vorrq_u16(
                vorrq_u16(vceqq_u16(v.val[0], needle), vceqq_u16(v.val[1], needle)),
                vorrq_u16(vceqq_u16(v.val[2], needle), vceqq_u16(v.val[3], needle)));
            if (vmaxvq_u16(hit) != 0) return true;
            for (int32_t j = 32; j < cardinality; j++) {
                uint16_t x = carr[j];
                if (x >= pos) return x == pos;
            }
            return false;
        }
        if (cardinality >= 16) {
            uint16x8_t needle = vdupq_n_u16(pos);
            uint16x8x2_t v = vld1q_u16_x2(carr);
            uint16x8_t hit = vorrq_u16(vceqq_u16(v.val[0], needle),
                                       vceqq_u16(v.val[1], needle));
            if (vmaxvq_u16(hit) != 0) return true;
            for (int32_t j = 16; j < cardinality; j++) {
                uint16_t x = carr[j];
                if (x >= pos) return x == pos;
            }
            return false;
        }
        if (cardinality >= 8) {
            uint16x8_t needle = vdupq_n_u16(pos);
            uint16x8_t v = vld1q_u16(carr);
            if (vmaxvq_u16(vceqq_u16(v, needle)) != 0) return true;
            for (int32_t j = 8; j < cardinality; j++) {
                uint16_t x = carr[j];
                if (x >= pos) return x == pos;
            }
            return false;
        }
        for (int32_t j = 0; j < cardinality; j++) {
            uint16_t v = carr[j];
            if (v >= pos) return v == pos;
        }
        return false;
    }

    int32_t num_blocks = cardinality / gap;

    if (num_blocks <= 3) {
        return simd_quad_m4(carr, cardinality, pos);
    }

    int32_t base = 0;
    int32_t n = num_blocks;

    // Pull the whole spine into L1 up front. For n in [256, 4096] this is
    // 1 line (128 B); for smaller n it is a partial line. Cheap on cold.
    __builtin_prefetch(spine);

    while (n > 3) {
        int32_t quarter = n >> 2;
        int32_t k1 = spine[base + quarter];
        int32_t k2 = spine[base + 2 * quarter];
        int32_t k3 = spine[base + 3 * quarter];
        int32_t c1 = (k1 < pos);
        int32_t c2 = (k2 < pos);
        int32_t c3 = (k3 < pos);
        base += (c1 + c2 + c3) * quarter;
        n -= 3 * quarter;
    }
    while (n > 1) {
        int32_t half = n >> 1;
        base = (spine[base + half] < pos) ? base + half : base;
        n -= half;
    }
    int32_t lo = (spine[base] < pos) ? base + 1 : base;

    if (lo < num_blocks) {
        const uint16_t *blk = carr + lo * gap;
        uint16x8_t needle = vdupq_n_u16(pos);
        uint16x8x4_t a = vld1q_u16_x4(blk);
        uint16x8x4_t b = vld1q_u16_x4(blk + 32);
        uint16x8_t h0 = vorrq_u16(
            vorrq_u16(vceqq_u16(a.val[0], needle), vceqq_u16(a.val[1], needle)),
            vorrq_u16(vceqq_u16(a.val[2], needle), vceqq_u16(a.val[3], needle)));
        uint16x8_t h1 = vorrq_u16(
            vorrq_u16(vceqq_u16(b.val[0], needle), vceqq_u16(b.val[1], needle)),
            vorrq_u16(vceqq_u16(b.val[2], needle), vceqq_u16(b.val[3], needle)));
        return vmaxvq_u16(vorrq_u16(h0, h1)) != 0;
    }

    for (int32_t j = num_blocks * gap; j < cardinality; j++) {
        uint16_t v = carr[j];
        if (v >= pos) return v == pos;
    }
    return false;</code></pre>
}<p>// Build the spine for a given carr. Caller allocates cardinality/64 u16s.
void simd_quad_m4_build_spine(const uint16_t </i>carr, int32_t cardinality,
                              uint16_t <i>spine) {
    enum { gap = 64 };
    int32_t num_blocks = cardinality / gap;
    for (int32_t i = 0; i < num_blocks; i++) {
        spine[i] = carr[(i + 1) </i> gap - 1];
    }
}</p>
]]></description><pubDate>Thu, 30 Apr 2026 17:33:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47965727</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=47965727</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47965727</guid></item><item><title><![CDATA[New comment by aamargulies in "Trump says Venezuela’s Maduro captured after strikes"]]></title><description><![CDATA[
<p>Hey, show some respect, you’re talking about the first ever winner of the prestigious FIFA peace prize!</p>
]]></description><pubDate>Sat, 03 Jan 2026 13:26:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=46476331</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=46476331</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46476331</guid></item><item><title><![CDATA[New comment by aamargulies in "Tesla changes meaning of 'Full Self-Driving', gives up on promise of autonomy"]]></title><description><![CDATA[
<p>I knew that FSD was nonsense when I tried to use Tesla's autopark feature under optimal conditions and it failed to park the car satisfactorily.</p>
]]></description><pubDate>Sat, 06 Sep 2025 17:11:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=45151035</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=45151035</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45151035</guid></item><item><title><![CDATA[New comment by aamargulies in "Avi Loeb: Is 3I/Atlas Our Turing Test by a Superior Alien Intelligence?"]]></title><description><![CDATA[
<p><a href="https://youtu.be/aY985qzn7oI?si=PeS4Fn8G_6T7Iu79" rel="nofollow">https://youtu.be/aY985qzn7oI?si=PeS4Fn8G_6T7Iu79</a><p>Angela Collier has the final word on physics and crackpots. Hilarious.</p>
]]></description><pubDate>Wed, 20 Aug 2025 02:12:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=44958089</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=44958089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44958089</guid></item><item><title><![CDATA[New comment by aamargulies in "Hit men aren't what you think"]]></title><description><![CDATA[
<p>You’re being facetious, but Peter Singer made this exact point about “ordinary people being evil” in a famous philosophy essay in 1972.<p><a href="https://youtu.be/KVl5kMXz1vA?si=F__kWUXkcu4h-5iI" rel="nofollow">https://youtu.be/KVl5kMXz1vA?si=F__kWUXkcu4h-5iI</a></p>
]]></description><pubDate>Sat, 07 Dec 2024 03:40:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=42347065</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=42347065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42347065</guid></item><item><title><![CDATA[New comment by aamargulies in "Installed an open source garage door opener, and I'm loving it"]]></title><description><![CDATA[
<p>OK, nerd sniped.<p>I bought an OpenGarage and then saw that it had MQTT integration.
So... installed MQTT and got that working.<p>Then asked how hard would it be to hook this up to Alexa and get voice control working? Not toooooo hard ... working.<p>Then... how hard to get all of my home automation IOT/OAUTHish stuff integrated into MQTT+Alexa? ... a fair bit of work, but .... done!<p>So, now MQTT is the heart of a system that can talk to my tempest weather station, Tesla, sprinklers, opengarage, ecobee, sense, flume, smartthings controller, all queryable and controllable via voice.<p>Amazing what is possible these days.</p>
]]></description><pubDate>Sat, 16 Nov 2024 04:02:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=42154052</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=42154052</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42154052</guid></item><item><title><![CDATA[New comment by aamargulies in "Letters by Oliver Sacks review"]]></title><description><![CDATA[
<p>I was lucky enough to attend a lecture given by Dr. Sacks circa 1988. He was a resident speaker for the University of California campuses and had come to UCSC to talk about Awakenings and other topics. He was such a sensitive, kind, gentle person.<p>It was a privilege to simply be in the audience and the audience was very small. For some reason students didn't take advantage of the opportunity, right in front of them, to come and see him speak. Baffling.<p>When I saw him, he was in his mid-fifties and the picture of an English academic doctor/professor. It is a kick to see what he looked like in 1961. That BMW he's sitting on is a classic.<p>The world lost a very special person when he died in 2015.</p>
]]></description><pubDate>Sat, 02 Nov 2024 06:13:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=42024381</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=42024381</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42024381</guid></item><item><title><![CDATA[New comment by aamargulies in "The Netherlands has returned some stolen artifacts to Indonesia"]]></title><description><![CDATA[
<p>Acaster’s brilliant, funny bit on this:<p><a href="https://youtu.be/x73PkUvArJY?si=eRB3RIuR7rjXvw_i" rel="nofollow">https://youtu.be/x73PkUvArJY?si=eRB3RIuR7rjXvw_i</a></p>
]]></description><pubDate>Tue, 01 Oct 2024 16:24:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=41710562</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=41710562</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41710562</guid></item><item><title><![CDATA[New comment by aamargulies in "Jockey Can't Walk After Manufacturer Refuses to Fix Battery in $100k Exoskeleton"]]></title><description><![CDATA[
<p><a href="https://www.amazon.com/Lumenier-460mAh-45c-Lipo-Battery/dp/B07J5J6WMN" rel="nofollow">https://www.amazon.com/Lumenier-460mAh-45c-Lipo-Battery/dp/B...</a><p>Done.</p>
]]></description><pubDate>Thu, 26 Sep 2024 15:41:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=41659702</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=41659702</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41659702</guid></item><item><title><![CDATA[New comment by aamargulies in "Should the richest 1% – who gained $42T/decade – be taxed more?"]]></title><description><![CDATA[
<p>Yes.<p>His most important point though is that things will not get better until a sufficient mass of public political pressure is brought to bear on the issue.</p>
]]></description><pubDate>Wed, 28 Aug 2024 00:58:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=41374982</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=41374982</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41374982</guid></item><item><title><![CDATA[New comment by aamargulies in "Should the richest 1% – who gained $42T/decade – be taxed more?"]]></title><description><![CDATA[
<p>The poor keep voting against their own interests and installing Republican/Tory governments that work to actively increase inequality:<p><a href="https://www.youtube.com/watch?v=mn4daYJzyls" rel="nofollow">https://www.youtube.com/watch?v=mn4daYJzyls</a><p><a href="https://www.youtube.com/watch?v=jwqQvrqunp8" rel="nofollow">https://www.youtube.com/watch?v=jwqQvrqunp8</a></p>
]]></description><pubDate>Tue, 27 Aug 2024 22:32:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=41373952</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=41373952</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41373952</guid></item><item><title><![CDATA[New comment by aamargulies in "Should the richest 1% – who gained $42T/decade – be taxed more?"]]></title><description><![CDATA[
<p>Wealth inequality is tipping our country into oligarchy.</p>
]]></description><pubDate>Tue, 27 Aug 2024 22:24:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=41373855</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=41373855</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41373855</guid></item><item><title><![CDATA[New comment by aamargulies in "Should the richest 1% – who gained $42T/decade – be taxed more?"]]></title><description><![CDATA[
<p>Here's perhaps a better link: Robert Reich refutes the top 12 myths about taxing the rich:<p><a href="https://youtu.be/pnoLAMHwf2I?si=SApa_u3PGUZ-Y150" rel="nofollow">https://youtu.be/pnoLAMHwf2I?si=SApa_u3PGUZ-Y150</a></p>
]]></description><pubDate>Tue, 27 Aug 2024 22:22:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=41373840</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=41373840</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41373840</guid></item><item><title><![CDATA[New comment by aamargulies in "Should the richest 1% – who gained $42T/decade – be taxed more?"]]></title><description><![CDATA[
<p>Yes.</p>
]]></description><pubDate>Tue, 27 Aug 2024 22:13:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=41373732</link><dc:creator>aamargulies</dc:creator><comments>https://news.ycombinator.com/item?id=41373732</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41373732</guid></item></channel></rss>