<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: StefanKarpinski</title><link>https://news.ycombinator.com/user?id=StefanKarpinski</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 05 Jun 2026 04:28:28 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=StefanKarpinski" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by StefanKarpinski in "Afroman found not liable in defamation case"]]></title><description><![CDATA[
<p>> Let's not forget Uvalde, where the police department budget was ~40% of the city budget and it resulted in 19 cops standing outside scared while one shooter kept shooting literal children for an hour. Because they were scared.<p>Not only did they not stop the shooter, but they actively prevented parents—who were willing to risk their lives—from intervening. They didn't just not help, they proactively ran interference for the shooter.</p>
]]></description><pubDate>Thu, 19 Mar 2026 18:56:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47444160</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47444160</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47444160</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "The Shape of Inequalities"]]></title><description><![CDATA[
<p>Sure, that would work just as well. Plus, then you get to pick a "good" placement instead of making the user try to find one.</p>
]]></description><pubDate>Thu, 19 Mar 2026 18:44:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47443968</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47443968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47443968</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "The Shape of Inequalities"]]></title><description><![CDATA[
<p>The animated visuals are very cool, but I desperately want to turn them off in order to understand what they depict and reason about it geometrically. A pause button would be greatly appreciated.</p>
]]></description><pubDate>Thu, 19 Mar 2026 18:33:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47443809</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47443809</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47443809</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "AirPods Max 2"]]></title><description><![CDATA[
<p>Nope, they are dead. If I happen to catch them before they fully run out of power, they are at 1-2% charge as reported on whatever device they connect to. I can prevent this if I carefully disconnect them from each device they might be connected to. But that is a massive pain and fully defeats the purpose of being able to just put them down.</p>
]]></description><pubDate>Tue, 17 Mar 2026 17:11:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47415498</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47415498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47415498</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "AirPods Max 2"]]></title><description><![CDATA[
<p>Except that they don't. Or at least many, many people report that they don't, including myself and I have tried all the remedies that supposedly help. If you don't provide an off button and you can't build a product this expensive to power itself off reliably for everyone, then you've failed at product design.</p>
]]></description><pubDate>Tue, 17 Mar 2026 17:08:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47415452</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47415452</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47415452</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "AirPods Max 2"]]></title><description><![CDATA[
<p>How does headphones not turning off force users to stay in the iOS ecosystem?</p>
]]></description><pubDate>Tue, 17 Mar 2026 13:33:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47412433</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47412433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47412433</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "AirPods Max 2"]]></title><description><![CDATA[
<p>Strange. Are they first gen or later? I did get the absolute first gen of these, so maybe it's a problem they couldn't fix in firmware? Or I just have a defective pair?</p>
]]></description><pubDate>Mon, 16 Mar 2026 19:37:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47403732</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47403732</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47403732</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "AirPods Max 2"]]></title><description><![CDATA[
<p>I mean, I regularly leave them on a shelf in my apartment and they apparently do not consider that "down" or "stationary" enough to not just drain the battery completely. Truly a bafflingly bad design from the company that is (was) known for great hardware design.</p>
]]></description><pubDate>Mon, 16 Mar 2026 19:06:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47403316</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47403316</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47403316</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "AirPods Max 2"]]></title><description><![CDATA[
<p>I got excited there for a second — free fix for the most annoying problem with my headphones! But no, my AirPods Max have the latest firmware and still have this issue. Any time I leave them for more than a day, the battery is drained.</p>
]]></description><pubDate>Mon, 16 Mar 2026 19:04:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47403298</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47403298</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47403298</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "AirPods Max 2"]]></title><description><![CDATA[
<p>Wild. I have been eagerly awaiting this refresh, but this doesn't address either of the main issues with the original AirPods Max:<p>1. Still just as heavy. The AirPods Max sound quite good, but they are <i>very</i> heavy, to the point of being fairly uncomfortable after listening for any longer amount of time. This release as the exact same weight as the originals (13.6 oz).<p>2. Still no off button/position. They stay partially on unless you put them in the awkward and useless "case", which means they're constantly out of power when you want to use them. There's even an obvious fix: the ear cups swivel flat, they could just make this the "power off" position. Solved. But they didn't, so presumably these still have the same problem. There's also no mention of magnetic charging via stand, which would be another way to help alleviate this problem.<p>If these were even a few ounces lighter and powered off properly, I would buy them for sure. Given this announcement, I guess I will look for something else to replace the old AirPods Max.</p>
]]></description><pubDate>Mon, 16 Mar 2026 18:33:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47402902</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=47402902</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47402902</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Correctness and composability bugs in the Julia ecosystem (2022)"]]></title><description><![CDATA[
<p>Yeah, probably should be documented.</p>
]]></description><pubDate>Wed, 01 Oct 2025 15:57:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=45439272</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=45439272</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45439272</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Correctness and composability bugs in the Julia ecosystem (2022)"]]></title><description><![CDATA[
<p>Sad to hear that, CyberDildonics</p>
]]></description><pubDate>Wed, 01 Oct 2025 03:25:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=45433970</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=45433970</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45433970</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Correctness and composability bugs in the Julia ecosystem (2022)"]]></title><description><![CDATA[
<p>Number isn’t an interface—there are no operations common to all numbers. Subtyping Number is a way to opt into numeric promotion and a few other useful generic behaviors. That’s it. The fact that some abstract types are interfaces with expected behaviors, while others are dispatch points to opt into behaviors is a double edged sword: powerful and flexible, but only explicitly expressed/explained in documentation.</p>
]]></description><pubDate>Wed, 01 Oct 2025 03:17:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45433946</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=45433946</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45433946</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Beware of Fast-Math"]]></title><description><![CDATA[
<p>Floating-point arithmetic is non-associative, but it is commutative for the operations that are algebraically commutative: x + y == y + x and x*y == y*x. And x - y = -(y - x) so subtraction is properly anti-commutative.<p>The only very marginal exception to this is that when both arguments are NaN, the return value will be NaN, but which NaN payload is returned can depend on argument order. But no one ever uses this because it's not specified, so it can't be used reliably for anything useful. The behavior I <i>wish</i> IEEE 754 had specified for this is to define a standard NaN value (or two), and when the return value of an op is NaN, and some of the arguments are non-standard NaNs, then one of those non-standard NaN values must be returned. This doesn't depend on argument order and allows NaN payloads to be reliably propagated, which would let you encode useful debugging information in NaN payloads and know that it will flow through the program.</p>
]]></description><pubDate>Mon, 02 Jun 2025 13:29:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=44158650</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=44158650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44158650</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Ovld – Efficient and featureful multiple dispatch for Python"]]></title><description><![CDATA[
<p>The paper "Julia: Dynamism and Performance Reconciled by Design" [1] (work largely by Jan Vitek's group at North Eastern, with collaboration from Julia co-creators, myself included), has a really interesting section on multiple dispatch, comparing how different languages with support for it make use of it in practice. The takeaway is that Julia has a much higher "dispatch ratio" and "degree of dispatch" than other systems—it really does lean into multiple dispatch harder than any other language. As to why this is the case: in Julia, multiple dispatch is not opt-in, it's always-on, and it has no runtime cost, so there's no reason <i>not</i> to use it. Anecdotally, once you get used to using multiple dispatch everywhere, when you go back to a language without it, it feels like programming in a straight jacket.<p>Double dispatch feels like kind of a hack, tbh, but it is easier to implement and would certainly be an improvement over Python's awkward `__add__` and `__radd__` methods.<p>[1] <a href="https://janvitek.org/pubs/oopsla18b.pdf" rel="nofollow">https://janvitek.org/pubs/oopsla18b.pdf</a></p>
]]></description><pubDate>Mon, 02 Jun 2025 12:57:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=44158346</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=44158346</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44158346</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Beware of Fast-Math"]]></title><description><![CDATA[
<p>Pretty sure that’s not possible. More accurate for some inputs will be less accurate for others. There’s a very tricky tension in float optimization that the most predictable operation structure is a fully skewed op tree, as in naive left-to-right summation, but this is the slowest and least accurate order of operations. Using a more balanced tree is faster and more accurate (great), but unfortunately which tree shape is fastest depends very much on hardware-specific factors like SIMD width (less great). And no tree shape is universally guaranteed to be fully accurate, although a full binary tree tends to have the best accuracy, but has bad base case performance, so the actual shape that tends to get used in high performance kernels is SIMD-width parallel in a loop up to some fixed size like 256 elements, then pairwise recursive reduction above that. The recursive reduction can also be threaded. Anyway, there’s no silver bullet here.</p>
]]></description><pubDate>Sat, 31 May 2025 14:25:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=44144483</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=44144483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44144483</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Higher quality random floats"]]></title><description><![CDATA[
<p>It’s a little unclear what you mean by that without further explanation.  Do you mean that conceptually one selects a real number at random and then rounds that real number to the closest representable float? (And if so, which rounding mode?)</p>
]]></description><pubDate>Thu, 19 Oct 2023 18:03:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=37946283</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=37946283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37946283</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Modulo of negative numbers (2011)"]]></title><description><![CDATA[
<p>There are actually as many cases as there are rounding modes, which is seven, and for most of them unlike `mod` and `rem` there's no common name for these remainder operations:<p>- RoundNearest<p>- RoundNearestTiesAway<p>- RoundNearestTiesUp<p>- RoundToZero — rem, div<p>- RoundFromZero<p>- RoundUp<p>- RoundDown — mod, fld (i.e. floor(x/y) but without incorrect corner cases)<p>Most languages have no way of doing most of these, but then again, they're mostly pretty useless. They're really only useful when you're pairing division with a specific kind of rounding with a remainder that needs to match. Example of whacky remainder behavior in the "familiar" RoundNearest mode (default rounding mode for floating point):<p><pre><code>    julia> [k => rem(k, 4, RoundNearest) for k=-6:6]
    13-element Vector{Pair{Int64, Int64}}:
     -6 =>  2
     -5 => -1
     -4 =>  0
     -3 =>  1
     -2 => -2
     -1 => -1
      0 =>  0
      1 =>  1
      2 =>  2
      3 => -1
      4 =>  0
      5 =>  1
      6 => -2
</code></pre>
Wild, huh? Output range for modulus 4 is -2:2 and whether you get -2 or 2 alternates with each cycle around the ring. (Of course, Julia has comprehensive support for all of these because we're a bunch of nerds for this kind of thing.)</p>
]]></description><pubDate>Fri, 27 Jan 2023 14:37:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=34546491</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=34546491</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34546491</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Modulo of negative numbers (2011)"]]></title><description><![CDATA[
<p>The `rem`, `div` and `divrem` functions also all optionally take a rounding mode argument that lets you have the behavior that matches any rounding mode, where `RoundToZero` matches `div` and `RoundDown` matches `mod`, but there are actually a total of seven rounding modes. Most of them are pretty useless, but if you need some style of division and the remainder to match, this is very helpful.</p>
]]></description><pubDate>Fri, 27 Jan 2023 14:24:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=34546350</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=34546350</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34546350</guid></item><item><title><![CDATA[New comment by StefanKarpinski in "Liquid democracy: two experiments on delegation in voting"]]></title><description><![CDATA[
<p>Was confused by that as well. Sounds like Liquid Democracy doesn't do well compared to the alternatives, which would certainly be an interesting result, but doesn't fit with what the rest of the abstract seems to be suggesting.</p>
]]></description><pubDate>Thu, 12 Jan 2023 20:36:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=34359918</link><dc:creator>StefanKarpinski</dc:creator><comments>https://news.ycombinator.com/item?id=34359918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34359918</guid></item></channel></rss>