<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: smarks</title><link>https://news.ycombinator.com/user?id=smarks</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 28 May 2026 19:18:33 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=smarks" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by smarks in "Warm up your MacBook (2019)"]]></title><description><![CDATA[
<p>Oh yeah, I forgot about the graphics.<p>I had (and still have) a 4k external monitor. Naturally I wanted the MBP to drive the monitor with a resolution that took advantage of all the pixels. Unfortunately with most monitor settings the GPU power consumption would produce enough heat to run the fans even if the rest of the system was completely idle! If I set the output to full HD the GPU would cool down and the fans would turn off. But full HD on a 4k monitor is a waste.<p>It was very strange. I could drive the monitor at 4k but with the image upside down, and the power consumption would be low. But flip the image right side up and it would run hot and turn on the fans.<p>It took a couple weeks of fiddling, but I finally found a combination of refresh rate, resolution, image orientation (right side up!), and cabling that let me drive the monitor at high resolution without running the fans. What a pain.<p>(I used iStat menus to monitor GPU power consumption. At “good” settings it consumed about 5w. At “bad” settings it would consume 17w. At a bad setting you could immediately see the various temperatures go up and the fans spinning up to compensate.)</p>
]]></description><pubDate>Thu, 28 May 2026 14:44:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48309691</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=48309691</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48309691</guid></item><item><title><![CDATA[New comment by smarks in "Interleaved Deltas"]]></title><description><![CDATA[
<p>I saw this title and I immediately thought “SCCS”. Indeed, the article is a deep dive into the SCCS data structures. Cool!<p>I actually still use SCCS… sort of. I have some old code bases that are stored in SCCS. They’re actually Sun CodeManager/Teamware repositories, which used SCCS for file storage. I don’t actually update any files in SCCS; I use it only for browsing history. These old repos have been converted to git, but somehow I find it harder to trace through the history in the converted repo.<p>Instead, I use the open-sourced version of SCCS commands that the late Jörg Schilling ported to various OSes from the OpenSolaris/SVR4 source base. The guy was a real fan of SCCS. He even gave a conference talk on it once.  Kind of retro computing, but for software instead of hardware.<p><a href="https://news.ycombinator.com/item?id=28832682">https://news.ycombinator.com/item?id=28832682</a></p>
]]></description><pubDate>Thu, 28 May 2026 05:39:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48305021</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=48305021</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48305021</guid></item><item><title><![CDATA[New comment by smarks in "Warm up your MacBook (2019)"]]></title><description><![CDATA[
<p>Warming up a 2019-era (Intel) MacBook Pro was never my problem. Quite the opposite. Those machines ran notoriously hot. The later macOS releases, combined with company-mandated crapware, made it worse. Doing an ordinary build or starting a videoconferencing session was enough to cause the fans to run. On a warm day the fans couldn’t shed enough heat and so the system would go into thermal throttling. The OS would occupy a core with a 100% kernel_task that didn’t do any work but which would serve to prevent actual work from being scheduled onto that core. When four or five out of the six cores were occupied by kernel_task, I knew I was in for a bag of hurt (to steal a phrase from Steve Jobs). Responsiveness went completely to hell. The machine became effectively unusable.<p>After a while my normal procedure was to run with the thing sitting on top of an ice pack. That would let me run a 60-90 minute video conference without troubles.<p>The only redeeming feature of these machines is that they could emulate old x86 hardware at speed. That allowed me to run old apps on old OSes without having to keep old hardware running.</p>
]]></description><pubDate>Thu, 28 May 2026 05:24:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=48304918</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=48304918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48304918</guid></item><item><title><![CDATA[New comment by smarks in "Colossus: The Forbin Project"]]></title><description><![CDATA[
<p>I took another look at L.H.S. and the buildings have rather more octagons than hexagons. There’s even a decagon-shaped building. Still, the symmetric geometry of the architecture is quite striking.</p>
]]></description><pubDate>Mon, 18 May 2026 03:14:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48175196</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=48175196</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48175196</guid></item><item><title><![CDATA[New comment by smarks in "The occasional ECONNRESET"]]></title><description><![CDATA[
<p>Thanks for your explanation; it’s very helpful.</p>
]]></description><pubDate>Mon, 18 May 2026 03:11:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48175187</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=48175187</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48175187</guid></item><item><title><![CDATA[New comment by smarks in "The occasional ECONNRESET"]]></title><description><![CDATA[
<p>Part 2 shows this comment from the Linux TCP code:<p><pre><code>    /* As outlined in RFC 2525, section 2.17, we send a RST here because
     * data was lost. To witness the awful effects of the old behavior of
     * always doing a FIN, run an older 2.1.x kernel or 2.0.x, start a bulk
     * GET in an FTP client, suspend the process, wait for the client to
     * advertise a zero window, then kill -9 the FTP client, wheee...
     * Note: timeout is always zero in such a case.
     */
</code></pre>
Ok, so the RST is explained and well justified by the literature. But what are the “awful effects” of sending FIN instead? Can someone explain?</p>
]]></description><pubDate>Sun, 17 May 2026 18:39:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48171875</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=48171875</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48171875</guid></item><item><title><![CDATA[New comment by smarks in "Colossus: The Forbin Project"]]></title><description><![CDATA[
<p>I rewatched this recently; I think it held up well. It’s probably re-entered the zeitgeist given the recent developments in “AI” and “agents”. So far accidents seem to have destroyed only data, but it’s only a matter of time before some fool hooks up an “AI agent” to a missile.<p>Much of the film was shot at the Lawrence Hall of Science in the hills above Berkeley, California. This building was probably chosen because of its unique brutalist hexagonal architecture. I spent a bunch of time there as a kid.<p>Eric Braeden (Forbin) is still alive, but his house in Pacific Palisades burned down in the 2025 fires. :-(</p>
]]></description><pubDate>Sun, 17 May 2026 18:28:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48171751</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=48171751</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48171751</guid></item><item><title><![CDATA[New comment by smarks in "Oracle slashes 30k jobs"]]></title><description><![CDATA[
<p>Oh! This is a great explanation, thanks. I remember your original exchange (and 
I found it baffling and uncharacteristic), and I remember the William Shatner SNL Trek convention sketch, but I never made the connection between them.</p>
]]></description><pubDate>Wed, 01 Apr 2026 04:09:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47596702</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=47596702</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47596702</guid></item><item><title><![CDATA[New comment by smarks in "The Therac-25 Incident (2021)"]]></title><description><![CDATA[
<p>I believe the definitive analysis of the Therac-25 incident was written by Nancy Leveson, first in IEEE Computer,[1] and later as an appendix of her book.[2] The appendix is freely available as a PDF on the web [3][4] and probably other places. Many people here are asking questions about what happened and how it came about. The answers to many of these questions can be found there. I strongly recommend that anyone who is serious about safety and wants to learn more about this incident read Leveson’s analysis.<p>[1]: N. G. Leveson and C. S. Turner, "An investigation of the Therac-25 accidents," in Computer, vol. 26, no. 7, pp. 18-41, July 1993.<p>[2]: Nancy Leveson. Safeware: System Safety and Computers. Addison-Wesley, 1995.<p>[3]: <a href="http://sunnyday.mit.edu/papers/therac.pdf" rel="nofollow">http://sunnyday.mit.edu/papers/therac.pdf</a><p>[4]: <a href="https://web.mit.edu/6.033/2014/wwwdocs/papers/therac.pdf" rel="nofollow">https://web.mit.edu/6.033/2014/wwwdocs/papers/therac.pdf</a></p>
]]></description><pubDate>Thu, 28 Aug 2025 02:20:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=45047616</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=45047616</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45047616</guid></item><item><title><![CDATA[New comment by smarks in "The Therac-25 Incident (2021)"]]></title><description><![CDATA[
<p>Thanks for posting this. The Leveson article is IMO the definitive study on this incident. I’m going to repost at top level for emphasis.</p>
]]></description><pubDate>Thu, 28 Aug 2025 02:06:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=45047534</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=45047534</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45047534</guid></item><item><title><![CDATA[New comment by smarks in "The Unix-Haters Handbook (1994) [pdf]"]]></title><description><![CDATA[
<p>You encountered this book in 01996? Is that around the time of the Norman Conquest?<p>I'm assuming you're using octal here. Myself, I haven't used octal since 03677.<p>:-)<p>I see you mentioned <a href="https://interlisp.org/" rel="nofollow">https://interlisp.org/</a> ; while it's not a Lisp <i>machine,</i> the Medley Interlisp Project aims to recreate the Interlisp environment that ran on Xerox D-machines up through the 1980s or so. Still very interesting.</p>
]]></description><pubDate>Mon, 25 Aug 2025 18:35:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=45017296</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=45017296</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45017296</guid></item><item><title><![CDATA[New comment by smarks in "MacBook Pro Insomnia"]]></title><description><![CDATA[
<p>There's a meta-problem here, which doesn't seem to have been discussed. How did the setting change in the first place? The article says:<p>> Then, seemingly out of nowhere...<p>> In my case, the “Wake for maintenance” option was disabled...<p>So presumably the option was originally enabled. Somehow it was disabled, resulting in the battery-draining behavior. Re-enabling it manually solved the problem. Great.<p>But how did the setting get changed in the first place?<p>I've noticed this on my Macs (actually mostly the new one; not the old, obsolete ones I still run) as well as various iOS devices. At some point I'll notice some odd, unusual, or different behavior. Hunting around in the settings, I'll sometimes find an option that seems like it should control the behavior. Changing the setting has the desired effect of restoring the former behavior. So what changed it? It's a mystery.<p>A memorably egregious example was the "do not disturb" setting. I normally have do-not-disturb enabled from 11pm to 7am on my phone so I'm not awakened by notifications. But one night I was awakened at 3am by my phone buzzing, because some random text message had arrived. Huh?!? The next day, working on my Mac, it seemed unusually quiet... maybe a lot of people were on vacation or something. Then I checked Slack and there were a lot of messages pending, questions put to me that went unanswered, and even speculation that <i>I</i> had gone on vacation. What happened? My Mac had somehow set itself to do-not-disturb from 9am to 5pm, which covers most of the workday. And my iOS devices <i>also</i> had do-not-disturb set for the same incorrect time interval. (Well at least I got a lot of work done.)<p>In this case I suspect iCloud settings synching was the culprit. My conjecture is that I logged into my iCloud account from a new device, and that device's default settings got synched to my other devices. But I'm not entirely sure.<p>I know I've had other cases where settings seemed to be changed spontaneously. My speculation is that OS updates will change settings. Unfortunately this isn't reproducible, and it happens rarely and with different settings. But it's happened enough times over the past couple years that it seems to be a pattern. Maybe it happened to the OP. Does anybody else experience this?</p>
]]></description><pubDate>Thu, 31 Jul 2025 20:25:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=44749743</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=44749743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44749743</guid></item><item><title><![CDATA[New comment by smarks in "Fundamental Problems of Lisp, the Cons Cell (2024)"]]></title><description><![CDATA[
<p>This is a very old argument. Xah Lee wrote the linked article around 2008, but previously he had posted "Why we have cons?" on comp.lang.lisp (and comp.lang.scheme) all the way back in early 1998:<p><a href="https://groups.google.com/g/comp.lang.lisp/c/T_Tozq2P53I/m/NB52fcDbGYMJ" rel="nofollow">https://groups.google.com/g/comp.lang.lisp/c/T_Tozq2P53I/m/N...</a><p>Lee's post seems more of a question, but to my eye it's a "why X" question that thinly disguises an "X is bad (or ugly, redundant, useless, confusing, counterproductive, unnecessary, etc.)" argument. Essentially though it's the same topic.<p>The post elicited around 60 responses, among them this one from the late Erik Naggum:<p><a href="https://groups.google.com/g/comp.lang.lisp/c/T_Tozq2P53I/m/gB_I5sZxv3IJ" rel="nofollow">https://groups.google.com/g/comp.lang.lisp/c/T_Tozq2P53I/m/g...</a><p>which includes the following gem (or turd, depending upon your point of view):<p><pre><code>  > All in all, the pairs notion is redundant.
  
  I hope you understand and appreciate what I have written above so the
  following does not apply to you anymore. you see, I wrote it all because
  I _really_ wanted to say that that sentence is the single most ignorant
  and shallow-minded line that I have ever seen in any programming language
  newsgroup or forum and I hope _never_ to see anybody display such utter
  disregard for the brilliance and genius of people who came before them
  just because they grew up in an age when "simple interface" is sneered
  and laughed at in favor of "simple implementation" so any dumb fsck can
  implement it right out of a "for Dummies" book.
</code></pre>
From where I sit in 2025, I have nothing to add.</p>
]]></description><pubDate>Sun, 22 Jun 2025 00:03:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=44341651</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=44341651</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44341651</guid></item><item><title><![CDATA[New comment by smarks in "Spaceballs 2 Will See Rick Moranis Return as Dark Helmet"]]></title><description><![CDATA[
<p>“Somehow, Dark Helmet has returned.”</p>
]]></description><pubDate>Thu, 12 Jun 2025 19:13:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=44261911</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=44261911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44261911</guid></item><item><title><![CDATA[New comment by smarks in "How a 20 year old bug in GTA San Andreas surfaced in Windows 11 24H2"]]></title><description><![CDATA[
<p>All this is true. Note also that the C++ folks are putting a serious effort into reducing UB. See the "safe by default" section of this writeup [1]. See also my other comment [2] regarding the performance impact of this sort of change. Short answer: with sufficient optimization, smaller than one might think.<p>[1]: <a href="https://herbsutter.com/2024/08/07/reader-qa-what-does-it-mean-to-initialize-an-int/" rel="nofollow">https://herbsutter.com/2024/08/07/reader-qa-what-does-it-mea...</a><p>[2]: <a href="https://news.ycombinator.com/item?id=43779449">https://news.ycombinator.com/item?id=43779449</a></p>
]]></description><pubDate>Thu, 24 Apr 2025 05:24:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43779510</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=43779510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43779510</guid></item><item><title><![CDATA[New comment by smarks in "How a 20 year old bug in GTA San Andreas surfaced in Windows 11 24H2"]]></title><description><![CDATA[
<p>I'm a bit distant from this stuff, but it looks like C++26 will have something like -ftrivial-auto-var-init enabled by default. See the "safe by default" section of [1].<p>For reference, the actual proposal that was accepted into C++26 is [2]. It discusses performance only in general, and it refers to an earlier analysis [3] for more details. This last reference describes regressions of around 0.5% in time and in code size. Earlier prototypes suggested larger regressions (perhaps even "horrendous") but more emphasis on compiler optimizations has brought the regression down considerably.<p>Of course one's mileage may vary, and one might also consider a 0.5% regression unacceptable. However, the C++ committee seems to have considered this to be an acceptable tradeoff to remove a frequent cause of undefined behavior from C++.<p>[1]: <a href="https://herbsutter.com/2024/08/07/reader-qa-what-does-it-mean-to-initialize-an-int/" rel="nofollow">https://herbsutter.com/2024/08/07/reader-qa-what-does-it-mea...</a><p>[2]: <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2795r5.html" rel="nofollow">https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p27...</a><p>[3]: <a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2723r1.html#perf" rel="nofollow">https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2723r1...</a></p>
]]></description><pubDate>Thu, 24 Apr 2025 05:16:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=43779449</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=43779449</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43779449</guid></item><item><title><![CDATA[New comment by smarks in "Tail Call Recursion in Java with ASM (2023)"]]></title><description><![CDATA[
<p>There are similarities in the problems, but there are also fundamental differences. With inlining, the JVM can always decide to deoptimize and back out the inlining without affecting the correctness of the result. But it can't do that with tail calls without exposting the program to a risk of StackOverflowError.<p>We've been using TCO here ("tail call optimization") but I recall Guy Steele advocating for calling this feature TCE ("elimination") because programs can rely on TCE for correctness.</p>
]]></description><pubDate>Mon, 31 Mar 2025 22:17:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=43540573</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=43540573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43540573</guid></item><item><title><![CDATA[New comment by smarks in "Tail Call Recursion in Java with ASM (2023)"]]></title><description><![CDATA[
<p>The security manager was removed (well, “permanently disabled”) in Java 24. As you note, the permissions available at any given point can depend on the permissions of the code on the stack, and TCO affects this. Removal of the SM thus removes one impediment to TCO.<p>However, there are other things still in the platform for which stack frames are significant. These are referred to as “caller sensitive” methods. An example is Class.forName(). This looks up the given name in the classloader of the class that contains the calling code. If the stack frames were shifted around by TCO, this might cause Class.forName() to use the wrong classloader.<p>No doubt there are ways to overcome this — the JVM does inlining after all — but there’s work to be done and problems to be solved.</p>
]]></description><pubDate>Sun, 30 Mar 2025 17:06:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=43525681</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=43525681</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43525681</guid></item><item><title><![CDATA[New comment by smarks in "3,200% CPU Utilization"]]></title><description><![CDATA[
<p>ConcurrentModificationException is typically thrown from an iterator when it detects that it’s been invalidated by a modification to the underlying collection. It’s harder to check for the case described in this article, which is about multiple threads calling put() concurrently on a non thread safe object.</p>
]]></description><pubDate>Fri, 28 Feb 2025 21:30:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=43211475</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=43211475</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43211475</guid></item><item><title><![CDATA[New comment by smarks in "3,200% CPU Utilization"]]></title><description><![CDATA[
<p>Interesting. I haven’t seen an infinite loop either, but I can imagine one if a comparator tries to be too “clever” for example if it bases its comparison logic on some external state.<p>Another common source of comparator bugs is when people compare floats or doubles and they don’t account for NaN, which is unequal to everything, including itself!<p>In Java, the usual symptom of comparator bugs is that sort throws the infamous “Comparison method violates its general contract!” exception.</p>
]]></description><pubDate>Fri, 28 Feb 2025 21:26:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=43211376</link><dc:creator>smarks</dc:creator><comments>https://news.ycombinator.com/item?id=43211376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43211376</guid></item></channel></rss>