Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wCroY-002NaW-39 for pgsql-bugs@arkaria.postgresql.org; Wed, 15 Apr 2026 04:25:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCroV-00ETel-0f for pgsql-bugs@arkaria.postgresql.org; Wed, 15 Apr 2026 04:25:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wCroU-00ETec-2E for pgsql-bugs@lists.postgresql.org; Wed, 15 Apr 2026 04:25:19 +0000 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCroS-0000000159Y-3i8M for pgsql-bugs@lists.postgresql.org; Wed, 15 Apr 2026 04:25:18 +0000 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-35d94f4ee36so3701539a91.3 for ; Tue, 14 Apr 2026 21:25:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776227116; cv=none; d=google.com; s=arc-20240605; b=LB3oL9KgnrsfrawKvBpxOhc+bhfJmDo2atY3pSuL/0ldvxD6yp1nQxNUE6s0VftWeK BackNZuHbTP8P7vupwg95Jud/gv7fj/l+jihohbokxBRqdBbjWqBhZSnAc7uFb5HQn3o /3333m4dyhSqk82giQbpdNwAYC2NEmuycH2DEMning0ENN7tCjvR9G8hFINCOk1I5TX2 rFDmpQuy3Kg649EzcanJqKd3+yXHZn1QlVYYVfo+P8oIpZKWEAIkCdfLX6mj2Pg1Tk5i EGwO/SC/CZ2VCTwYRurzpkFUtwSAfgWca9SAj4rjeIoamNDOzNO5EboP9ofTMXc08HwH Hqfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:dkim-signature; bh=bKoNj0+eQD5xP51PHFIGzFcGr42UCtFS+xBeZ90xSu0=; fh=WDA+NM0waUGosiHH/Ep49o0V9hdpZFjAPY4zZ9K+Is4=; b=i27bXByUGfRYCv2hS+XirCdVVr+X5DHsODl39uPlO6DZFXGRdh4LSSWXSWn1vYspzd OylvgojFKGSU7IEcBSdfnZADtTWwMQW/pmFtQ/8uXDacWZHlpJdRoPJ88cMNhk7gkwbE Inje2r7Bt8QSlzyOVtLL7l7cvGQZX5aU0migBpdAKKZJl6Wz6gV7rKGBePHnCgGgheYF B3TQtOfuO+mKw2MDJkiku+QF3FuFRYm1WaWqrKfRzfRG8wzTcHbumft5CpW0N9vq+RAb PnXwy52KJlZJHrTR6imRiXkPmbyWIhgCvJkDDbUg7SjpZi5Lh60eyKpnU/wUUwuChttp IhIw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776227116; x=1776831916; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=bKoNj0+eQD5xP51PHFIGzFcGr42UCtFS+xBeZ90xSu0=; b=Uo6jRga9vJdsfzwZzgcmmcFUzqEPq8b45P23keDPgfG6EMn9rtU7ac33ajkczrVxr6 aiG5i9nP1ciC/ofBVKRfqmqfC5CbSOuV36DvwwDiiUhNLiyhgNn1dzzREDG85k+kHOQl QE26XR+3z6jraELJbqvsbJupV7d2nChQRWgnAWw1pCjLOP1vT7y2By1PZiVp9k3gigfQ xVDUfa7uKKT0i2X7/v9v/9Oj8Ge9FCMVP/HkfNok9YG0YFn0ugHmBC71N5WktWG/uRCw Q1i/aluDuf+NIXpPBwklpN3Lo52RgsRG1AiuPEjhfFF8cRm+OrPWLL/eN4jYCVMRE0Uo 5bIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776227116; x=1776831916; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=bKoNj0+eQD5xP51PHFIGzFcGr42UCtFS+xBeZ90xSu0=; b=jAWx35ihVI7QuFiiN9Qb6cRnZK22WuaZgWRR/KN1ypR922UcDCKzr1vhoefwsqYoLu YFZNrjVQmTKEj47gUqqOmcp2MbfN7I3avezAO+W10kbmbneVrmumwwUmdFZsUsPR2EdH Y5hxpiVrUi/awbeOGN6yovTcjwML45CpH3N4vzWrzGX2mTucLe4iRc0O2CJH9ntf3S+K x6rv2Nei3DzW3OPYkrrpYj12w9INsRsd3QxTLJYsPGHGa6KcSACv0+3tdHIFkGipL/Sz 86KnMHY5I694Tqj6+kMfNgs/JsBL+shikatv8Wi6M8YnJTb6NSyZS2hkhD8rYDpzyxMA Dkqg== X-Forwarded-Encrypted: i=1; AFNElJ9YR0ERp3TpoyFofqFKabY2QNWtActd0C/Du7FgVIYx6XBFNogqR37s0PllnJo0oGMzYPZIceZeCrG4@lists.postgresql.org X-Gm-Message-State: AOJu0YyE2Aj/6MtNBwesvOrpAV6buN5iigoTLn7EVJgZFgWgxxy+AC1o 0Hk4hoz3OzKmnnxmKyFp2PXUQHu/Z/s3rRT26ZmO78BSsFaL8+bl75YIjYXlq4zSUbZpQqLGRDP VwGeaC0udbLOJ7uFy73e5bz2mA07ppfVnE+Sv X-Gm-Gg: AeBDietBRVd99GhXHf9CKcbbGq8q2nE2E34TmTk+oOeN4J4fykpHo6uUAofqk/Sahff PCIbrOJF/mxuX6vPdI81yiXcgMXzTtuJY5MNI06zkf88nHpCv9WX8ib5+ER1Z7PjSP87xoT9Dh7 3kUl1pz4rpg5BL7NJuMRXs1vksY+LLHLS/3+zOSsQy92e49M9d2+2hZBomuwKQKCL8OGd7UpJCa HLh8bA1H2LCKRMZv8+FJGinsg3CapQXyAVhP5e+4+LnLdouCTTxI/zH4MEd3olIVRPKXvx6xcBj xQC9oWU2yJjhNVWdL1xhBNrN3BF9LIxdAYZQyj6IIGBcwjpBZg== X-Received: by 2002:a17:90a:c883:b0:35e:5ae3:298a with SMTP id 98e67ed59e1d1-35e5ae32a85mr12628631a91.18.1776227116188; Tue, 14 Apr 2026 21:25:16 -0700 (PDT) MIME-Version: 1.0 References: <19354-eefe6d8b3e84f9f2@postgresql.org> <2292889.1765846569@sss.pgh.pa.us> <2393116.1765899706@sss.pgh.pa.us> <6a8122ac-123d-4e93-9269-0b3be1e4a5a4@iki.fi> In-Reply-To: Reply-To: assam258@gmail.com From: Henson Choi Date: Wed, 15 Apr 2026 13:25:04 +0900 X-Gm-Features: AQROBzCta455V3TTSGmGdgjWtrvVJ-DPb8mZ3H4V2MVUuqOpzrVrMBGw_ZgYCtQ Message-ID: Subject: Re: BUG #19354: JOHAB rejects valid byte sequences To: Thomas Munro Cc: Heikki Linnakangas , Robert Haas , Tom Lane , Jeroen Vermeulen , VASUKI M , pgsql-bugs@lists.postgresql.org Content-Type: multipart/alternative; boundary="0000000000004d06df064f781a4e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004d06df064f781a4e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > > 3. UHC (=3D "Unified Hangul Code", invented by Microsoft): used EUR-KR > as a base but supplied all possible pre-composed Hangul and 8,222 > Hanja (complete CJK as of Unicode 2.0). Small correction: UHC's additions over EUC-KR are on the Hangul side, not Hanja. UHC adds 8,822 pre-composed Hangul (taking Hangul coverage from EUC-KR's 2,350 up to the full 11,172) and leaves Hanja unchanged at KS X 1001's 4,888. I enumerated all three encodings against PostgreSQL's current conversion tables to double-check: Encoding Hangul Hanja EUC_KR 2,350 4,888 UHC 11,172 4,888 JOHAB 11,172 4,888 (after this patch) "Complete CJK as of Unicode 2.0" is off too -- Unicode 2.0's CJK Unified Ideographs block had roughly 20,900 characters, so UHC and JOHAB both carry only the KS X 1001 Hanja subset. The 8,222 figure looks like it got swapped with the 8,822 Hangul number. > Realpolitik that fed back into standards: 1. The Hancom "Hangul" word processor used de facto standard JOHAB > encoding, and dominated. > 2. KS X 1001 recognised this and added that annex. Minor nit on the sequence: KS C 5601 already had a combinational annex in its 1982 revision, but with a different bit layout from the one Hancom's word processor used. The 1992 revision swapped the annex's bit layout to the commercial combinational form (=EC=83=81=EC=9A=A9 =EC=A1= =B0=ED=95=A9=ED=98=95) that the industry -- Hancom included -- had popularised. The KS X 1001:2004 commentary documents this transition explicitly ("=EB=B9=84=ED=8A= =B8 =EC=A1=B0=ED=95=A9=EC=9D=84 =EB=84=90=EB=A6=AC =EC=93=B0=EA=B3=A0 =EC=9E=88= =EB=8A=94 =EC=9D=B4=EB=A5=B8=EB=B0=94 =EC=83=81=EC=9A=A9 =EC=A1=B0=ED=95=A9= =ED=98=95=EC=9C=BC=EB=A1=9C =EB=B0=94=EA=BF=88"). So "KS recognised the de facto standard" applies to 1992, not to the annex's first appearance. Worth mentioning for atmosphere: that period was the tail end of the Apple II clone / MSX era and the rise of IBM PC compatibles in Korea, and contemporary Korean computer magazines ran running debates over Wansung vs Johab on three axes at once -- the encoding, the keyboard layout (=EB=91=90=EB=B2=8C=EC=8B=9D vs =EC=84=B8=EB=B2=8C=EC=8B=9D, the Kor= ean QWERTY-vs-Dvorak argument), and the font rendering strategy (per-syllable bitmap tables for Wansung vs jamo-composition for Johab) -- right alongside their game reviews. The 1992 annex revision landed in the middle of that churn, not ahead of it. One further observation that fits your KS X 1002 note. EUC-KR isn't really a single standard but a layered stack -- KS X 1001 (the character set) + ISO/IEC 2022 (the code-extension skeleton) + the AT&T-era EUC convention of pinning G0 to ASCII and G1 to the 8-bit region, later formalised in Korea as KS X 2901. That informal layering is precisely what let UHC land so easily: Microsoft extended the same 8-bit region with additional Hangul, and every EUC-KR decoder silently kept working for the covered subset. KS X 1002 tried the opposite approach -- a formally separated supplementary set, designated via a distinct ISO-2022 escape sequence. The design was cleaner on paper but required every consumer to implement set-switching for a supplementary character range that nobody was motivated to support. UHC sidestepped this entirely by just filling in the unused 8-bit slots. So the structural reason 1002 lost to UHC isn't just market power; it is that UHC matched EUC-KR's informal extensibility while 1002 demanded strict ISO-2022 compliance. JOHAB (Annex 3) sits at the other end of that spectrum -- a self-contained spec where a single document nails down character set, byte layout, and composition algorithm, which is what makes the verifier fix tractable. A small downstream consequence of UHC's slot-filling approach is that byte-wise comparison no longer matches Korean dictionary order: the 8,822 added Hangul land in the low 0x81-0xA0 range, ahead of the gananada-ordered EUC-KR region. Unicode's Hangul Syllables block (U+AC00-U+D7A3) later restored that by assigning all 11,172 syllables algorithmically in gananada order, so UTF-8 memcmp once again produces Korean lexicographic order -- one of the quieter practical drivers of Korea's Unicode migration. Credit where it's due on that outcome: getting all 11,172 precomposed Hangul into the BMP in algorithmic gananada order (the "Korean Hangul Mess" cleanup in Unicode 2.0, 1996) wasn't inevitable. Engineers at Microsoft's Korean office were notable advocates for that arrangement alongside Korean standards-body contributors and other vendors, and the Korean computing world has been quietly benefiting from it ever since. It's a nice detail given who's reading this thread. Everything else in the summary matches what I had -- thanks for the independent write-up, and for taking another look at the patch. > > The counter argument would be that you could use iconv > > --from-code=3DJOHAB ..., or libiconv, or the codecs available in Python= , > > Java, etc for dealing with historical archived data, something that > > data archivists must be very aware of. > > Sure. But it's not comfortable to remove a user-visible feature > we've had for decades. My own primary concern about it was that a > correct fix could require non-backwards-compatible behavior changes. > Henson's analysis says that that's not a problem. So assuming this > patch withstands review, I'd be much happier to see it applied than > to remove JOHAB. Thank you -- the backward-compat angle was the hinge I was hoping would carry, and I'm glad the analysis held up. On the size of the remaining audience: niche Korean standards have a small but stubborn user base, much the way Dvorak users persist in the West. There are still =EC=84=B8=EB=B2=8C=EC=8B=9D (Sebeolsik) keyboard users in Korea who k= eep hand-cut stickers over their QWERTY-printed keycaps rather than switch back; the JOHAB data holdouts are that kind of tail -- vanishingly small in absolute numbers, but without a graceful alternative if we close the door. A correctly-working JOHAB serves that tail at near-zero ongoing cost, which is ultimately what the patch is arguing for. > No opinion at the moment about whether to back-patch. Happy to defer on back-patching. The behaviour change is strictly additive (previously-rejected sequences start accepting, nothing is reinterpreted), so the back-branches are technically safe, but v19- only is a perfectly reasonable policy call if the project prefers minimum surface area on the first cycle. If you do want back-patches, I'm happy to produce per-branch versions. Given how long the JOHAB code has been stable (as noted earlier in the thread), my feeling is that the same patch should apply cleanly down to PG 14 without modification. Happy to verify that and post the set if it would help. One personal aside: reading KS X 1001 Annex 3 end-to-end for this fix turned out to be an unexpectedly cheerful detour -- it felt a bit like cracking open a 6502 assembly reference from roughly the same era. Back then I also had a popular neural-networks book that convinced teenage-me computers would never approach human cognition because they could never match the brain's memory scale -- a prediction that, looking around in 2026, has aged about as well as you'd expect. Thanks to everyone on the thread for making that side-quest worthwhile. Regards, Henson --0000000000004d06df064f781a4e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
3.=C2=A0 UHC (=3D "Unified Hangul = Code", invented by Microsoft): used EUR-KR
as a base but supplied all possible pre-composed Hangul and 8,222
Hanja (complete CJK as of Unicode 2.0).

Sma= ll correction: UHC's additions over EUC-KR are on the Hangul side,
n= ot Hanja.=C2=A0 UHC adds 8,822 pre-composed Hangul (taking Hangul coverage<= br>from EUC-KR's 2,350 up to the full 11,172) and leaves Hanja unchange= d
at KS X 1001's 4,888.=C2=A0 I enumerated all three encodings again= st
PostgreSQL's current conversion tables to double-check:

=C2=A0 =C2=A0 Encoding =C2=A0 Hangul =C2=A0 Hanja
=C2=A0 =C2=A0 EUC_KR= =C2=A0 =C2=A0 =C2=A02,350 =C2=A0 =C2=A04,888
=C2=A0 =C2=A0 UHC =C2=A0 = =C2=A0 =C2=A0 =C2=A011,172 =C2=A0 =C2=A04,888
=C2=A0 =C2=A0 JOHAB =C2=A0= =C2=A0 =C2=A011,172 =C2=A0 =C2=A04,888 =C2=A0 (after this patch)

"Complete CJK as of Unicode 2.0" is off too -- Unicode 2.0'= s CJK
Unified Ideographs block had roughly 20,900 characters, so UHC and=
JOHAB both carry only the KS X 1001 Hanja subset.=C2=A0 The 8,222 figur= e
looks like it got swapped with the 8,822 Hangul number.
= =C2=A0
=C2=A0Realpol= itik that fed back into standards:
1.=C2=A0 The Hancom "Hangul" word processor used de facto standar= d JOHAB
encoding, and dominated.
2.=C2=A0 KS X 1001 recognised this and added that annex.
<= br>
Minor nit on the sequence: KS C 5601 already had a combinatio= nal annex
in its 1982 revision, but with a different bit layout from the= one
Hancom's word processor used.=C2=A0 The 1992 revision swapped t= he annex's
bit layout to the commercial combinational form (=EC=83= =81=EC=9A=A9 =EC=A1=B0=ED=95=A9=ED=98=95) that
the industry -- Hancom in= cluded -- had popularised.=C2=A0 The KS X
1001:2004 commentary documents= this transition explicitly ("=EB=B9=84=ED=8A=B8
=EC=A1=B0=ED=95=A9= =EC=9D=84 =EB=84=90=EB=A6=AC =EC=93=B0=EA=B3=A0 =EC=9E=88=EB=8A=94 =EC=9D= =B4=EB=A5=B8=EB=B0=94 =EC=83=81=EC=9A=A9 =EC=A1=B0=ED=95=A9=ED=98=95=EC=9C= =BC=EB=A1=9C =EB=B0=94=EA=BF=88").=C2=A0 So "KS
recognised the= de facto standard" applies to 1992, not to the annex's
first a= ppearance.


Worth mentioning for atmosphere: that period was the = tail end of the
Apple II clone / MSX era and the rise of IBM PC compatib= les in Korea,
and contemporary Korean computer magazines ran running deb= ates over
Wansung vs Johab on three axes at once -- the encoding, the ke= yboard
layout (=EB=91=90=EB=B2=8C=EC=8B=9D vs =EC=84=B8=EB=B2=8C=EC=8B= =9D, the Korean QWERTY-vs-Dvorak argument), and
the font rendering strat= egy (per-syllable bitmap tables for Wansung
vs jamo-composition for Joha= b) -- right alongside their game reviews.
The 1992 annex revision landed= in the middle of that churn, not
ahead of it.


One further ob= servation that fits your KS X 1002 note.=C2=A0 EUC-KR isn't
really a= single standard but a layered stack -- KS X 1001 (the
character set) + = ISO/IEC 2022 (the code-extension skeleton) + the
AT&T-era EUC conven= tion of pinning G0 to ASCII and G1 to the 8-bit
region, later formalised= in Korea as KS X 2901.=C2=A0 That informal
layering is precisely what l= et UHC land so easily: Microsoft extended
the same 8-bit region with add= itional Hangul, and every EUC-KR
decoder silently kept working for the c= overed subset.

KS X 1002 tried the opposite approach -- a formally s= eparated
supplementary set, designated via a distinct ISO-2022 escapesequence.=C2=A0 The design was cleaner on paper but required every
cons= umer to implement set-switching for a supplementary character
range that= nobody was motivated to support.=C2=A0 UHC sidestepped this
entirely by= just filling in the unused 8-bit slots.=C2=A0 So the
structural reason = 1002 lost to UHC isn't just market power; it is
that UHC matched EUC= -KR's informal extensibility while 1002 demanded
strict ISO-2022 com= pliance.=C2=A0 JOHAB (Annex 3) sits at the other end of
that spectrum --= a self-contained spec where a single document nails
down character set,= byte layout, and composition algorithm, which is
what makes the verifie= r fix tractable.

A small downstream consequence of UHC's slot-fi= lling approach is that
byte-wise comparison no longer matches Korean dic= tionary order: the
8,822 added Hangul land in the low 0x81-0xA0 range, a= head of the
gananada-ordered EUC-KR region.=C2=A0 Unicode's Hangul S= yllables block
(U+AC00-U+D7A3) later restored that by assigning all 11,1= 72 syllables
algorithmically in gananada order, so UTF-8 memcmp once aga= in
produces Korean lexicographic order -- one of the quieter practicaldrivers of Korea's Unicode migration.

Credit where it's du= e on that outcome: getting all 11,172 precomposed
Hangul into the BMP in= algorithmic gananada order (the "Korean
Hangul Mess" cleanup = in Unicode 2.0, 1996) wasn't inevitable.
Engineers at Microsoft'= s Korean office were notable advocates for
that arrangement alongside Ko= rean standards-body contributors and
other vendors, and the Korean compu= ting world has been quietly
benefiting from it ever since.=C2=A0 It'= s a nice detail given who's
reading this thread.


Everythi= ng else in the summary matches what I had -- thanks for the
independent = write-up, and for taking another look at the patch.

> > The counter argument would be that you could use iconv
<= /div>>=C2=A0> --from-code=3DJOHAB ..., or libiconv= , or the codecs available in Python,
>=C2=A0> Java, e= tc for dealing with historical archived data, something that
>= =C2=A0> data archivists must be very aware of.
>=C2= =A0
>=C2=A0Sure.=C2=A0 But it's not co= mfortable to remove a user-visible feature
>=C2=A0we'= ;ve had for decades.=C2=A0 My own primary concern about it was that a
&g= t;=C2=A0correct fix could require non-backwards-compatible beh= avior changes.
>=C2=A0Henson's analysis says that th= at's not a problem.=C2=A0 So assuming this
>=C2=A0pa= tch withstands review, I'd be much happier to see it applied than
&g= t;=C2=A0to remove JOHAB.

<= /div>
Thank you -- the backward-compat angle was = the hinge I was hoping
would carry, and I'm glad the analysis held u= p.=C2=A0 On the size of the
remaining audience: niche Korean standards h= ave a small but stubborn
user base, much the way Dvorak users persist in= the West.=C2=A0 There are
still =EC=84=B8=EB=B2=8C=EC=8B=9D (Sebeolsik)= keyboard users in Korea who keep hand-cut
stickers over their QWERTY-pr= inted keycaps rather than switch back;
the JOHAB data holdouts are that = kind of tail -- vanishingly small in
absolute numbers, but without a gra= ceful alternative if we close the
door.=C2=A0 A correctly-working JOHAB = serves that tail at near-zero
ongoing cost, which is ultimately what the= patch is arguing for.

> No opinion at the moment about whether t= o back-patch.

Happy to defer on back-patching.=C2=A0 The behaviour c= hange is strictly
additive (previously-rejected sequences start acceptin= g, nothing is
reinterpreted), so the back-branches are technically safe,= but v19-
only is a perfectly reasonable policy call if the project pref= ers
minimum surface area on the first cycle.

If you do want back-= patches, I'm happy to produce per-branch
versions.=C2=A0 Given how l= ong the JOHAB code has been stable (as noted
earlier in the thread), my = feeling is that the same patch should
apply cleanly down to PG 14 withou= t modification.=C2=A0 Happy to verify
that and post the set if it would = help.


One personal aside: reading KS X 1001 Annex 3 end-to-end f= or this fix
turned out to be an unexpectedly cheerful detour -- it felt = a bit
like cracking open a 6502 assembly reference from roughly the same=
era.=C2=A0 Back then I also had a popular neural-networks book that
= convinced teenage-me computers would never approach human cognition
beca= use they could never match the brain's memory scale -- a
prediction = that, looking around in 2026, has aged about as well as
you'd expect= .=C2=A0 Thanks to everyone on the thread for making that
side-quest wort= hwhile.


Regards,
Henson
--0000000000004d06df064f781a4e--