<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: raymondh</title><link>https://news.ycombinator.com/user?id=raymondh</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 13 Sep 2026 11:54:01 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=raymondh" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by raymondh in "Cleve Moler has died"]]></title><description><![CDATA[
<p>In the 1990s, I briefly met Cleve while taking a two-week Matlab course in Natick. During that course that a classmate introduced me to Python, a language where I later became a core developer.<p>Cleve's papers were an inspiration. I soon published my own matrix package called <i>matfunc</i>. That work was heavily influenced by Cleve Moler and by algorithms in Golub and Van Loan. Even my more recent Python contributions, like the super accurate math.fsum(), math.hypot(), and math.sumprod() functions, have their roots in that fertile time in the Matlab ecosystem. In particular, it newsgroups and lists of papers taught me Cleve's never ending quest to create clean front-ends for numerically sophisticated code.<p>Thank you Cleve. Your legacy will live forever.</p>
]]></description><pubDate>Fri, 22 May 2026 20:09:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48240935</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=48240935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48240935</guid></item><item><title><![CDATA[New comment by raymondh in "Tim Peters – Dispelling Information Asymmetry"]]></title><description><![CDATA[
<p>For those who don't know the name, Tim Peters is the author of "The Zen of Python". He is the one who uniquely captured was Python is all about with this inspirational little poem:<p><pre><code>    The Zen of Python, by Tim Peters

    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
</code></pre>
Also, he is the author of the famous TimSort algorithm: <a href="https://en.wikipedia.org/wiki/Timsort" rel="nofollow">https://en.wikipedia.org/wiki/Timsort</a></p>
]]></description><pubDate>Tue, 01 Oct 2024 02:51:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=41704225</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=41704225</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41704225</guid></item><item><title><![CDATA[New comment by raymondh in "Lesser known parts of Python standard library"]]></title><description><![CDATA[
<p>The reason Guido didn't want 3.6 to guarantee dict ordering was to protect 3.5 projects from mysteriously failing when using code that implicitly relied on 3.6 behaviors (for example, cutting and pasting a snippet from StackOverflow).<p>He thought that one cycle of "no ordering assumptions" would give a smoother transition.  All 3.6 implementations would have dict ordering, but it was safer to not have people rely on it right away.</p>
]]></description><pubDate>Thu, 05 Sep 2024 07:28:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=41454390</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=41454390</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41454390</guid></item><item><title><![CDATA[New comment by raymondh in "AnandTech Farewell"]]></title><description><![CDATA[
<p>Thank you AnandTech.  Happy ride in to the sunset.</p>
]]></description><pubDate>Sat, 31 Aug 2024 01:33:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=41406013</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=41406013</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41406013</guid></item><item><title><![CDATA[New comment by raymondh in "Seven basic rules for causal inference"]]></title><description><![CDATA[
<p>Is there a simple R example for Rule 4?</p>
]]></description><pubDate>Mon, 19 Aug 2024 14:06:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=41291166</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=41291166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41291166</guid></item><item><title><![CDATA[New comment by raymondh in "Python extensions should be lazy"]]></title><description><![CDATA[
<p>We should probably get rid of that.  It is old (predating numpy) and has limited functionality. In almost every case I can think of, you would be better off with numpy.</p>
]]></description><pubDate>Wed, 07 Aug 2024 20:58:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=41185426</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=41185426</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41185426</guid></item><item><title><![CDATA[New comment by raymondh in "Python extensions should be lazy"]]></title><description><![CDATA[
<p>This is an impressive post showing some nice investigative work that isolates a pain point and produces a performant work-around.<p>However, the conclusion is debatable.  Not everyone has this problem. Not everyone would benefit from the same solution.<p>Sure, if your data can be loaded, manipulated, and summarized outside of Python land, then lazy object creation is a good way to go.  But then you're giving up all of the Python tooling that likely drove you to Python in the first place.<p>Most of the Python ecosystem from sets and dicts to the standard library is focused on manipulating native Python objects.  While the syntax supports method calls to data encapsulated elsewhere, it can be costly to constantly "box and unbox" data to move back and forth between the two worlds.</p>
]]></description><pubDate>Wed, 07 Aug 2024 20:50:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=41185363</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=41185363</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41185363</guid></item><item><title><![CDATA[New comment by raymondh in "Millions of Taxpayers Call the IRS for Help. Two-Thirds Don't Reach Anyone"]]></title><description><![CDATA[
<p>We've had to contact the IRS a number of times. It was always difficult to get through.  However once we did get through, the representatives were polite, professional, and really seemed to care about achieving case resolution.</p>
]]></description><pubDate>Wed, 26 Jun 2024 19:29:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=40803634</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=40803634</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40803634</guid></item><item><title><![CDATA[New comment by raymondh in "Ask HN: What brought back the joy of programming for you?"]]></title><description><![CDATA[
<p>Programming Pearls, Thinking Forth, The Little Schemer, and SICP</p>
]]></description><pubDate>Tue, 25 Jun 2024 22:36:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=40794483</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=40794483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40794483</guid></item><item><title><![CDATA[New comment by raymondh in "The Numeric Tower Fiasco"]]></title><description><![CDATA[
<p>As described by Alan Kay, what OOP means is encapsulation, messaging, and late-binding.<p>IIRC the inspiration came from multicellular organisms.  A cell "encapsulates" complexity within a cell wall.  The organism as a whole works by have the cells work together via "messaging".  Any shared interfaces (e.g. oxygen transpiration and nutrient absorption) can be viewed as "polymorphism".<p>If you buy into the definition and biological analogy, then any language that implements "encapsulation, messaging or polymorphism" actually is OOP and your question is a tautology.</p>
]]></description><pubDate>Tue, 28 May 2024 19:43:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=40504773</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=40504773</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40504773</guid></item><item><title><![CDATA[New comment by raymondh in "More Itertools"]]></title><description><![CDATA[
<p>Your nice work on the JS itertools port has a todo for a "better tee".  This was my fault because the old "rough equivalent" code in the Python docs was too obscure and didn't provide a good emulation.<p>Here is an update that should be much easier to convert to JS:<p><pre><code>        def tee(iterable, n=2):
            iterator = iter(iterable)
            shared_link = [None, None]
            return tuple(_tee(iterator, shared_link) for _ in range(n))

        def _tee(iterator, link):
            try:
                while True:
                    if link[1] is None:
                        link[0] = next(iterator)
                        link[1] = [None, None]
                    value, link = link
                    yield value
            except StopIteration:
                return</code></pre></p>
]]></description><pubDate>Tue, 28 May 2024 18:06:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=40503628</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=40503628</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40503628</guid></item><item><title><![CDATA[New comment by raymondh in "Google AI: People should eat at least one small rock a day"]]></title><description><![CDATA[
<p>Perhaps Google's AI included TheOnion in its training data:<p><a href="https://www.theonion.com/geologists-recommend-eating-at-least-one-small-rock-per-1846655112" rel="nofollow">https://www.theonion.com/geologists-recommend-eating-at-leas...</a></p>
]]></description><pubDate>Fri, 24 May 2024 19:45:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=40469826</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=40469826</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40469826</guid></item><item><title><![CDATA[New comment by raymondh in "The Numeric Tower Fiasco"]]></title><description><![CDATA[
<p>Numeric towers are indeed a sore point.<p>* There are more 64-bit integers than C floats/doubles. But in math, reals are a superset of the integers.<p>* Because floats are rounded, `x < x + 1`, is not an invariant.<p>* The possibility of a `NaN` value means that the assignment `y = x` does not guarantee that <i>x</i> and <i>y</i> are equal.<p>* Floats are implemented as binary fractions, so they are actually rationals.<p>I disagree with the OP that OOP is entirely flawed.  The core ideas of encapsulation and messaging are a really useful organizing principle.  And polymorphism beats maintaining giant case-statements.<p>Only when inheritance is added to the mix does it get dicey. As a tool for code reuse, it is not a bad idea.  I think the central problem is that people want more from inheritance that it has to give (especially if you expect that children are always substitutable for their parents).</p>
]]></description><pubDate>Wed, 22 May 2024 22:12:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=40447342</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=40447342</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40447342</guid></item><item><title><![CDATA[New comment by raymondh in "Song lyrics getting simpler, more repetitive, angry and self-obsessed – study"]]></title><description><![CDATA[
<p>A lot of classic popular songs also had low information content:<p><a href="https://happyhollyproject.com/2014/04/27/flowcharts-and-song-lyrics/" rel="nofollow">https://happyhollyproject.com/2014/04/27/flowcharts-and-song...</a></p>
]]></description><pubDate>Sat, 30 Mar 2024 21:55:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=39879049</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=39879049</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39879049</guid></item><item><title><![CDATA[New comment by raymondh in "Flowers for Algernon (1965) [pdf]"]]></title><description><![CDATA[
<p>The Terminal Man by Michael Crichton</p>
]]></description><pubDate>Mon, 11 Mar 2024 13:50:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=39668202</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=39668202</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39668202</guid></item><item><title><![CDATA[Napkin Ring Problem]]></title><description><![CDATA[
<p>Article URL: <a href="https://en.wikipedia.org/wiki/Napkin_ring_problem">https://en.wikipedia.org/wiki/Napkin_ring_problem</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=38971731">https://news.ycombinator.com/item?id=38971731</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 12 Jan 2024 18:16:13 +0000</pubDate><link>https://en.wikipedia.org/wiki/Napkin_ring_problem</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=38971731</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38971731</guid></item><item><title><![CDATA[New comment by raymondh in "Python listed as memory-safe language in latest CISA recommendations"]]></title><description><![CDATA[
<p>This is a red-herring.  In the end, everything is run in machine language which is intrinsically unsafe.  But that doesn't matter.  High level languages can enforce constraints that eliminate or mitigate common programmer errors for memory access.<p>For example, it is a simple matter for a language to provide a list or array API that will perform bounds checking for indexed access. This simple measure would have prevented something like the HeartBleed security bug.</p>
]]></description><pubDate>Thu, 14 Dec 2023 17:00:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=38643688</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=38643688</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38643688</guid></item><item><title><![CDATA[Tuple Spaces (Or, Good Ideas Don't Always Win)]]></title><description><![CDATA[
<p>Article URL: <a href="https://software-carpentry.org/blog/2011/03/tuple-spaces-or-good-ideas-dont-always-win.html">https://software-carpentry.org/blog/2011/03/tuple-spaces-or-good-ideas-dont-always-win.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=38643560">https://news.ycombinator.com/item?id=38643560</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 14 Dec 2023 16:54:52 +0000</pubDate><link>https://software-carpentry.org/blog/2011/03/tuple-spaces-or-good-ideas-dont-always-win.html</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=38643560</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38643560</guid></item><item><title><![CDATA[New comment by raymondh in "Artificial intelligence systems found to excel at imitation, but not innovation"]]></title><description><![CDATA[
<p>What counts as an innovation is in the eye of the beholder.  Mark Rober demonstrated Gemini's creative ability by having it suggest a video, details of contents, and how to produce it.  The results were impressive but far from world changing:  <a href="https://www.youtube.com/watch?v=mHZSrtl4zX0" rel="nofollow noreferrer">https://www.youtube.com/watch?v=mHZSrtl4zX0</a></p>
]]></description><pubDate>Wed, 13 Dec 2023 18:22:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=38631754</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=38631754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38631754</guid></item><item><title><![CDATA[New comment by raymondh in "Higher quality random floats"]]></title><description><![CDATA[
<p>FWIW, there is a recipe for this in the Python docs[0].  It was developed in collaboration with Alan Downey and Tim Peters:<p><pre><code>    from random import Random
    from math import ldexp

    class FullRandom(Random):

        def random(self):
            mantissa = 0x10_0000_0000_0000 | self.getrandbits(52)
            exponent = -53
            x = 0
            while not x:
                x = self.getrandbits(32)
                exponent += x.bit_length() - 32
            return ldexp(mantissa, exponent)
</code></pre>
[0] <a href="https://docs.python.org/3/library/random.html#recipes" rel="nofollow noreferrer">https://docs.python.org/3/library/random.html#recipes</a></p>
]]></description><pubDate>Thu, 19 Oct 2023 14:27:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=37943384</link><dc:creator>raymondh</dc:creator><comments>https://news.ycombinator.com/item?id=37943384</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37943384</guid></item></channel></rss>