<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: jonlong</title><link>https://news.ycombinator.com/user?id=jonlong</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 14:17:56 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jonlong" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jonlong in "Byrne's Euclid"]]></title><description><![CDATA[
<p>Fwiw, you can use the "Modern English" language setting to banish the long s. Reproducing Byrne's original typography is a stated goal of the author. (You can certainly debate the value of that goal.)</p>
]]></description><pubDate>Sun, 24 May 2026 06:13:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48254884</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=48254884</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48254884</guid></item><item><title><![CDATA[New comment by jonlong in "FreeBSD doesn't have Wi-Fi driver for my old MacBook, so AI built one for me"]]></title><description><![CDATA[
<p>Apple may not design for repairability, but what you are saying is not true. I have personally purchased and installed genuine replacement displays on MacBooks with no involvement from Apple.<p>Apple publishes repair guides for this (e.g., <a href="https://support.apple.com/en-us/120768" rel="nofollow">https://support.apple.com/en-us/120768</a>) as does iFixit. Genuine parts are available for purchase and tools are available to rent by individuals (see <a href="https://support.apple.com/self-service-repair" rel="nofollow">https://support.apple.com/self-service-repair</a>, which specifically mentions display replacement). Skill and patience are required; replacement by Apple is not.</p>
]]></description><pubDate>Mon, 23 Feb 2026 23:23:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47130515</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=47130515</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47130515</guid></item><item><title><![CDATA[New comment by jonlong in "The Singularity Is Always Near (2006)"]]></title><description><![CDATA[
<p>The etymology and physical metaphor of "The Singularity" are a bit confused here, and I think it muddles the overall point.<p>> the singularity is a term borrowed from physics to describe a cataclysmic threshold in a black hole<p>In his article which popularized the idea of The Singularity, Vinge quotes Ulam paraphrasing von Neumann, and states, "Von Neumann even uses the term singularity". As von Neumann surely knew, "singularity" was a term widely used in mathematics well before the idea of black holes (etymonline dates first use to 1893). Vinge does not say anything about black holes.<p>> an object is pulled into the center [of] gravity of a black hole [until] it passes a point beyond which nothing about it, including information, can escape. [...] This disruption on the way to infinity is called a singular event – a singularity.<p>The point at which "nothing" can escape a black hole is the event horizon, not the singularity. What exactly happens to information and what exactly happens when crossing the event horizon are subjects of debate (see "black hole information paradox" and "AMPS/firewall paradox"); however, it's probably fair to say that the most orthodox/consensus views are that information is conserved through black-hole evaporation and that nothing dramatic happens to an observer passing through the event horizon.<p>> the singularity became a black hole, an impenetrable veil hiding our future from us. Ray Kurzweil, a legendary inventor and computer scientist, seized on this metaphor<p>While I'm not prepared to go into my personal views in this comment, it's worth noting that the idea that "exponential curves look the same from every point" is not foreign to, e.g., the Kurzweilian view of The Singularity; nevertheless, fitting dramatic, industrial-revolution-sized progress into the fixed scale of a (contemporary) human lifetime would surely be a big deal. This idea, (whether you believe it will happen or not), is obscured by the spurious black hole metaphor.</p>
]]></description><pubDate>Wed, 04 Feb 2026 23:25:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46893404</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=46893404</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46893404</guid></item><item><title><![CDATA[New comment by jonlong in "Functional programming and reliability: ADTs, safety, critical infrastructure"]]></title><description><![CDATA[
<p>It's true that in intuitionistic logic "A implies (A or B)"; the usual computational interpretation of that is that "there is a function taking a value of type A and returning a value of type A + B", where + is the tagged union, and, per above, that function is exactly the one which tags its input as belonging to the left disjunct.<p>I suspect you are still reading "A implies B" as "A is a subtype of B", derived from a set-theoretic interpretation of propositional logic. But the constructive interpretation is that a proof of "A implies B" is a method to take a proof of A and transform it into a proof of B. Computationally, a value of type "A implies B" (typically rewritten "A -> B") is a function that takes values of type A and returns values of type B.<p>Well, everything I've said here is standard and widely-taught; go forth and check if you're inclined to. A good introduction is the one by Philip Wadler, <a href="https://homepages.inf.ed.ac.uk/wadler/papers/propositions-as-types/propositions-as-types.pdf" rel="nofollow">https://homepages.inf.ed.ac.uk/wadler/papers/propositions-as...</a> (tagged unions appear in Section 3, though it's all worth reading). A much more to-the-point and programming-focused account is in this OCaml book: <a href="https://cs3110.github.io/textbook/chapters/adv/curry-howard.html" rel="nofollow">https://cs3110.github.io/textbook/chapters/adv/curry-howard....</a> (very little OCaml syntax is used). You can find countless more.</p>
]]></description><pubDate>Tue, 30 Dec 2025 18:35:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=46436393</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=46436393</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46436393</guid></item><item><title><![CDATA[New comment by jonlong in "Functional programming and reliability: ADTs, safety, critical infrastructure"]]></title><description><![CDATA[
<p>I suppose I erroneously assumed some familiarity with the correspondence between product types (i.e., types of pairs) and the constructive logical interpretation of "and".<p>Suffice it to say for now: there is an interpretation of logic that gives a tighter correspondence to programming than the set-theoretic one, under the name "Curry-Howard" or "propositions as types, proofs as programs", and which has been known and cherished by logicians, programming language theorists, and also category theorists for a long time. The logic is <i>constructive</i> as it must be: a program of type A tells us how to build a value of type A, a proof of proposition A tells us how to construct evidence for A. From here we get things like "a proof of A and B is a proof of A together with a proof of B" (the "BHK interpretation"), which connects "and" to product types...<p>I spoke up because I could not leave untouched the idea that "tagged unions are illogical". On the contrary, tagged unions (aka "disjoint unions", "sum types", "coproducts", etc.) arise forthwith from an interpretation of logic that is not the set-theoretical one, but is a more fruitful one from which programming language theory begins. You are not wrong that there is also a correspondence between (untagged) union and intersection types and a set-theoretical interpretation of propositional logic, and that union and intersection types can also be used in programming, but you are missing a much bigger and very beautiful picture (which you will find described in most any introductory course or text on PL theory).</p>
]]></description><pubDate>Mon, 29 Dec 2025 18:59:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46424049</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=46424049</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46424049</guid></item><item><title><![CDATA[New comment by jonlong in "Functional programming and reliability: ADTs, safety, critical infrastructure"]]></title><description><![CDATA[
<p>Well, I have outlined the usual story of logic as it corresponds to programming (as has been accepted for at least some five decades now); it strains credulity to claim that <i>logic</i> is illogical.<p>Now I do see where you are coming from; under a set-theoretic interpretation with "implies" as "subset", "or" as "union", and "and" as "intersection", the fact that "A implies (A or B)" tells us that an element of the set A is also an element of the set "A union B".<p>However, this is not the interpretation that leads to a straightforward correspondence between logic and programming. For example, we would like "A and B" to correspond to the type of pairs of elements of A with elements of B, which is not at all the set-theoretic intersection. And while "(A and B) implies A", we do not want to say a value of type "(A, B)" also has type "A". (E.g., if a function expects an "A" and receives an "(A, A)", we are at an impasse.)<p>So "implies" should not be read programmatically as a subtyping relation; instead, "A implies B" tells us that there is a function taking a value of type A to a value of type B. In the case of "A implies (A or B)", that function takes its input and tags it as belonging to the left disjunct!<p>Another perspective I must mention: given a proof of "A or B" and another of "(A or B) implies C", how can we combine these into a simpler proof of just "C"? A proof of "(A or B) implies C" must contain both a proof a "A implies C" and a proof of "B implies C", and we could insert into one those proofs a proof of A or a proof of B. But we have to know which one we have! (This is a very short gloss of a much deeper story, where, under Curry-Howard, proof simplification corresponds to computation, and this is another way of describing a function call that does a case-analysis of a tagged union (or "sum type").)<p>Now "union and intersection" types with the set-theoretic properties you are hinting at have indeed been studied (see, for example, Section 15.7 of Pierce's "Types and Programming Languages"). But they do not replace the much more familiar "sum and product types", and do not play the central role of "or" and "and" in the correspondence of programming to logic.</p>
]]></description><pubDate>Sun, 28 Dec 2025 19:14:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46413584</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=46413584</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46413584</guid></item><item><title><![CDATA[New comment by jonlong in "Functional programming and reliability: ADTs, safety, critical infrastructure"]]></title><description><![CDATA[
<p>While others have addressed the programming case for tagged unions, I want to add that, to a logician, tagged unions <i>are</i> the natural construct corresponding to "logical or".<p>In intuitionistic logic (which is the most basic kind from which to view the Curry-Howard or "propositions-as-types" correspondence), a proof of "A or B" is exactly a choice of "left" or "right" disjunct together with a corresponding proof of either A or B. The "choice tag" is part of the "constructive data" telling us how to build our proof of "A or B". Translated back into the language of code, the type "A | B" would be exactly a tagged union.</p>
]]></description><pubDate>Sun, 28 Dec 2025 06:51:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=46409034</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=46409034</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46409034</guid></item><item><title><![CDATA[New comment by jonlong in "The contrarian physics podcast subculture"]]></title><description><![CDATA[
<p>I agree with your point, but it's worth noting that scientific papers are normally and by default copyrighted works. (In some cases the author may assign the copyright to a publisher.)<p>Eric's draft contains an unusual statement that says "this work [...] may not be built upon without express permission of the author". To the extent that this refers to <i>derivative works</i> which substantially reuse the text of the paper, this is normal copyright law. To the extent that this refers to the use of scientific ideas or discoveries, this is not enforceable under US copyright law. Copyright cannot prevent anyone from citing or responding to a work. See, e.g., <a href="https://www.copyright.gov/circs/circ33.pdf" rel="nofollow">https://www.copyright.gov/circs/circ33.pdf</a>.<p>(I am an academic, not a lawyer.)</p>
]]></description><pubDate>Sat, 23 Aug 2025 00:57:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44991876</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=44991876</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44991876</guid></item><item><title><![CDATA[New comment by jonlong in "Three Hundred Years Later, a Tool from Isaac Newton Gets an Update"]]></title><description><![CDATA[
<p>For late arrivals to this thread: note that the illustration being discussed has been updated (see the Wayback Machine for the old version). The new version probably still does not show the best second-order approximations, but the obvious qualitative errors have been corrected.</p>
]]></description><pubDate>Tue, 25 Mar 2025 18:57:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43474577</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=43474577</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43474577</guid></item><item><title><![CDATA[New comment by jonlong in "Commercial jet collides with Black Hawk helicopter near Reagan airport"]]></title><description><![CDATA[
<p>> They likely misjudged the plane due to assuming it was a large jet but it was a regional jet<p>Maybe this is possible, but it seems implausible given that ATC explicitly refers to the jet as a "CRJ".</p>
]]></description><pubDate>Thu, 30 Jan 2025 04:13:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=42874769</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=42874769</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42874769</guid></item><item><title><![CDATA[New comment by jonlong in "A video tour of the Standard Model (2021)"]]></title><description><![CDATA[
<p>Indeed -- for a more detailed, incisive, and entertaining take, check out Season 1 of the "Opinionated History of Mathematics" podcast by Viktor Blåsjö <a href="https://intellectualmathematics.com/blog/the-case-against-galileo-s01-overview/" rel="nofollow">https://intellectualmathematics.com/blog/the-case-against-ga...</a></p>
]]></description><pubDate>Wed, 08 Jan 2025 07:06:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=42631809</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=42631809</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42631809</guid></item><item><title><![CDATA[New comment by jonlong in "Ada's dependent types, and its types as a whole"]]></title><description><![CDATA[
<p>Well, "dependently typed" is widely used to mean something like "derived from Martin-Löf type theory, including arbitrary dependent sums and dependent products"; in other words, "dependent types" means "full fat dependent types", and it's the things that are less powerful that require qualifiers.<p>(So when Sail says it has "lightweight dependent types", that seems fine to me (it does seem to do more than it could with simple types or polymorphic types), but if it simply asserted that it "had dependent types" I would feel misled.)<p>The wording is subtle and language does change, but what I want to push back on is the confusion I see from time to time that "if I can write anything that looks like a function from values to types, I have the same thing that everybody talking about dependent types has". If you think this you don't know what you're missing, or even that there is something you're missing, and what you're missing is very cool!</p>
]]></description><pubDate>Sat, 28 Dec 2024 09:28:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=42529739</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=42529739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42529739</guid></item><item><title><![CDATA[New comment by jonlong in "Ada's dependent types, and its types as a whole"]]></title><description><![CDATA[
<p>Ah, very interesting. It does seem that the Ada community has done serious engineering work to build in powerful formal verification, in a way that is somehow parallel to the (much slower, for practical purposes, if more elegant) arc of type theory...</p>
]]></description><pubDate>Sat, 28 Dec 2024 08:49:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=42529579</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=42529579</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42529579</guid></item><item><title><![CDATA[New comment by jonlong in "Ada's dependent types, and its types as a whole"]]></title><description><![CDATA[
<p>I would say dependent types are going into the deep end; unless you have a real need to prove things, it may be hard to see the motivation to learn such abstractions.<p>In between <i>ad hoc</i> types like TypeScript and dependently-typed languages like Agda, Coq/Rocq, and Lean are well-typed, polymorphic (but not dependent) languages like OCaml, F#, or Haskell ("ML family" or "Hindley-Milner" are related terms). Those are what I'd suggest checking out first!</p>
]]></description><pubDate>Sat, 28 Dec 2024 08:33:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=42529507</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=42529507</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42529507</guid></item><item><title><![CDATA[New comment by jonlong in "Ada's dependent types, and its types as a whole"]]></title><description><![CDATA[
<p>Coming from the type theory side with only a passing glance at Ada, I am nevertheless sure: this is not what type theorists mean when they talk about dependently typed languages. Such languages derive from the formulation of Per Martin-Löf (also called Intuitionistic Type Theory), they include dependent sum and dependent product types, and they allow type checkers to <i>prove</i> complex statements about code. (The history of dependent types is intertwined with the history of formalizing mathematics; dependent types were designed to encode essentially arbitrary mathematical statements.)<p>The interesting feature of Ada here seems to be what it calls "subtype predicates". As you've explained, these come in a "dynamic" flavor, which are a nice syntax for runtime assertions, and a static flavor, which are compile-time checked but restricted to certain static expressions (per <a href="https://ada-lang.io/docs/arm/AA-3/AA-3.2#p15_3_3.2.4" rel="nofollow">https://ada-lang.io/docs/arm/AA-3/AA-3.2#p15_3_3.2.4</a>).<p>An example of something you can do in a dependently typed language is write a sorting function in such a way that the type checker proves that the output will always be in sorted order. I am pretty sure this cannot be done in Ada; checking at runtime does not count!<p>I do believe (having heard from multiple sources) that Ada's type system was ahead of its time and its success in creating practical programs that are likely to be correct is probably underrated. But I'm not here just to legislate semantics; one should be aware that there is something vastly more powerful out there called "dependent types" (even if that power is not likely to come into most people's day-to-day).<p>(Unfortunately Wikipedia is quite poor on this topic; you will see, for example, that on the Talk page someone asked "Is Ada really dependently typed?" two years ago; no reply. And it makes no sense to say that Ada has "tactics" but not "proof terms"; tactics are a way of generating proof terms. There are many better resources out there (especially ones associated with the languages Agda, Coq (currently being renamed Rocq), and Lean, e.g. <a href="https://lean-lang.org/theorem_proving_in_lean4/dependent_type_theory.html" rel="nofollow">https://lean-lang.org/theorem_proving_in_lean4/dependent_typ...</a>). But be warned, there is no "short version": dependent types cannot be explained in a sentence, and they are not something you will arrive at with enough "hacking away".)</p>
]]></description><pubDate>Sat, 28 Dec 2024 07:50:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=42529353</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=42529353</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42529353</guid></item><item><title><![CDATA[New comment by jonlong in "Bringing the Instructions to the Data"]]></title><description><![CDATA[
<p>> The astute reader will notice that float operations are not communicative<p>Presumably this was meant to read "commutative". IEEE 754 addition and multiplication <i>are</i> commutative (ignoring NaN values), but not associative.</p>
]]></description><pubDate>Mon, 09 Dec 2024 18:41:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=42369070</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=42369070</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42369070</guid></item><item><title><![CDATA[New comment by jonlong in "Emotional about X11: I'm creating a pure X11 “emoji keyboard”"]]></title><description><![CDATA[
<p>> you're not going to be able to cover all valid families that way<p>In fact the emoji committee backpedaled on family permutations for exactly this reason, and now recommends (exactly as you suggest) "symbolic" family glyphs and juxtaposition of existing people-emoji to describe families in detail.<p>You can read about it here: <a href="https://www.unicode.org/L2/L2022/22276-family-emoji-guidelines.pdf" rel="nofollow">https://www.unicode.org/L2/L2022/22276-family-emoji-guidelin...</a></p>
]]></description><pubDate>Wed, 07 Aug 2024 19:15:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=41184402</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=41184402</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41184402</guid></item><item><title><![CDATA[New comment by jonlong in "Where does the name "algebraic data type" come from?"]]></title><description><![CDATA[
<p>"Free algebra" here comes from universal algebra/category theory, which is quite distinct from the "free algebra" of ring theory (having nothing in particular to do with sums and products). Unfortunately "algebra" might be the most overloaded term in mathematics.<p>(The article says in the second paragraph: "the name comes from universal algebra". The wiki article you linked disambiguates itself with universal algebra right at the top.)<p>"Algebraic data type" in this sense is synonymous with "inductive data type".<p>The values of an algebraic data type do not form a free ring or any ring. You cannot generally add or multiply them. You may write a particular type with constructors intended to serve this purpose, but the laws defining a ring will not hold.<p>A separate fact is that types (not their values) belong to a free semiring "up to isomorphism" (where sum and product are the categorical coproduct and product). It is this fact that seems to have been conflated with the "algebra" of "algebraic data types". The disambiguation of this with the sense from universal algebra is the very purpose of the article.</p>
]]></description><pubDate>Wed, 31 Jul 2024 17:55:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=41121489</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=41121489</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41121489</guid></item><item><title><![CDATA[New comment by jonlong in "Exponentially Better Rotations (2022)"]]></title><description><![CDATA[
<p>The bi-invariant metric as pointed out by chombier is what I have in mind. I agree that a <i>non-canonical</i> metric may be the right one for some applications, but those are the exceptional ones. The bi-invariant metric (which has a simple, geometric meaning given by Euler's rotation theorem) is the right starting point for thinking about distances in this space.<p>(Your reference [2] supports this point of view: read "simplest" as "canonical". Your reference [1] claims five distinct bi-invariant metrics, but this is wrong. The argument given is that any metric related to a bi-invariant metric by a "positive continuous strictly increasing function" is itself bi-invariant, which is not true.)</p>
]]></description><pubDate>Sat, 15 Jun 2024 18:13:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=40691537</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=40691537</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40691537</guid></item><item><title><![CDATA[New comment by jonlong in "Exponentially Better Rotations (2022)"]]></title><description><![CDATA[
<p>If you start with the phone <i>upright</i> and rotate the screen away from you by turning the phone around the vertical axis, then both rotations are around the same axis and of course they do commute.<p>My <i>guess</i> is that romwell is holding the phone <i>flat</i>, so that the rotation away from you is about a horizontal axis; then you should experience the noncommutativity.<p>(The resulting orientations are 180 degrees apart, which indeed makes it difficult to say that any one orientation should be the unique average. But this is due to the geodesic structure of the space of rotations, not the noncommutative product that happened to construct these points, see above.)</p>
]]></description><pubDate>Sat, 15 Jun 2024 02:14:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=40686979</link><dc:creator>jonlong</dc:creator><comments>https://news.ycombinator.com/item?id=40686979</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40686979</guid></item></channel></rss>