billion laughs attack
April 10, 2021 2:32 PM   Subscribe

 
Cursed Iceberg Facts: that iceberg would roll over and float on its side.
posted by straight at 2:36 PM on April 10, 2021 [12 favorites]


[checks to see if any of his f*ckups are in there]

Cool! Great list!
posted by Tell Me No Lies at 2:46 PM on April 10, 2021 [4 favorites]


Random find from the list: BANCstar, the real, production programming language (not a joke) composed entirely of numbers and separators.
posted by JHarris at 2:46 PM on April 10, 2021 [4 favorites]


I wish I wasn't aware of as many of these as I apparently am tbh
posted by BungaDunga at 2:49 PM on April 10, 2021 [4 favorites]


'Javascript was designed in 10 days'

It shows, dog's breakfast of a language.
posted by GallonOfAlan at 2:51 PM on April 10, 2021 [7 favorites]


What, they don't have FRACTRAN?
posted by brambleboy at 3:31 PM on April 10, 2021 [1 favorite]


Ok, nerds: what belongs on that list that isn’t there?

My candidates are Decimal ASCII and lowercase numbers.
posted by mhoye at 3:42 PM on April 10, 2021


Right now, my project at work is to make a 25x11 pixel LED display that we need for reasons. Also for reasons, it has to be a very specific size and shape, so we are building it ourselves.

I made it Turing-complete.

Sort of as a joke, I invented a "LED shader language" which you use to tell the display which LEDs to turn on. It's mostly C-like, but it doesn't support aggregate data types. So to ensure it was Turing-complete, I made library functions for allocating and using arbitrary-size off-screen frame buffers. You can use these to make arrays and stacks.

So yeah, there's going to be at least one Turing-complete 25x11 pixel LED display out there.
posted by ryanrs at 3:46 PM on April 10, 2021 [15 favorites]


what belongs on that list that isn’t there?

Two problems and Considered harmful
posted by We had a deal, Kyle at 3:51 PM on April 10, 2021 [10 favorites]


and I kind of like that the correspondence on "Go To Statement Considered Harmful" reached Chuck Tingle-ey levels of referentialism:
Frank Rubin published a criticism of Dijkstra's letter in the March 1987 CACM where it appeared under the title "'GOTO Considered Harmful' Considered Harmful". The May 1987 CACM printed further replies, both for and against, under the title "'"GOTO Considered Harmful" Considered Harmful' Considered Harmful?".
posted by We had a deal, Kyle at 3:54 PM on April 10, 2021 [9 favorites]




I..... Am not sure if I should Google most of this
posted by Jacen at 4:29 PM on April 10, 2021 [3 favorites]


You don't have to google. Each term is a clickable link leading to an explanation of what it means.
posted by hippybear at 4:32 PM on April 10, 2021 [4 favorites]


Yeah, but no clickable link to decimal ASCII
posted by MtDewd at 4:50 PM on April 10, 2021


INTERCAL! (or did I just not see it?)

Also adversarial machine learning techniques in general, like the recent example [Guardian] where you can fool the algorithm by writing "iPod" on a sticky note attached to the apple.
posted by What is E. T. short for? at 5:00 PM on April 10, 2021 [3 favorites]


So yeah, there's going to be at least one Turing-complete 25x11 pixel LED display out there.

"Marge? Call the tech repair. The battery indicator on this flashlight is mining bitcoin again."
posted by straight at 5:10 PM on April 10, 2021 [11 favorites]




I was wrong; there is in fact a machine learning one on there: "Adversarial Patches". I, uh, assumed it was the other kind of patch.

Oh and now I'm remembering "One Base Class to Rule them All", by the "Wat" person. "See? A cantaloupe has five days. Don't worry about it. It's fine."
posted by What is E. T. short for? at 5:14 PM on April 10, 2021


I..... Am not sure if I should Google most..... of the explanations of what they mean
posted by Saxon Kane at 5:14 PM on April 10, 2021 [2 favorites]


> BANCstar, the real, production programming language

read github.com/jloughry/BANCStar and imagine the fun of maintaining a production banking system written in such a thing:

> BANCStar actually came with a "screen generator" that was supposed to be used to construct applications. But the 5.1c version of the generator was so limited that experienced programmers soon began to pry off the covers and modify directly the intermediate code that the run-time module actually executed.

> There is a hard limit of 2000 variables + constants in the entire system. Anything to be displayed on screen or printed on a form must be defined as a constant, thereby taking up part of this valuable space. As a result, most calculations are done with a block of twenty or so "working storage" variables, which are continually reused. Everything in the system is global. New projects always started off with the programmer searching for a handful of working storage numbers that could be "borrowed" long enough to complete the calculation, then restored to their original values before the rightful owner noticed that they were gone.

> Labels within the code are absolute, so any time a new page was added or removed, all downstream GOTOs must be found and re-targeted.

What the vendor sold, and what the customer bought, was a high-level GUI tool to allow rapid development of banking applications and spit out machine code to be interpreted by the BANCStar virtual machine. But the tool was too limiting, so the dev team just started directly hand-writing BANCStar virtual machine code. Without any abstraction layer or tooling.

I do hope that over time they built their own somewhat-higher-level assembly/macro language and assembler that could target BANCStar to avoid the need to hand maintain absolute GOTO labels & do some of the codegen tasks that a compiler would normally do (allocating variables to their twenty "working storage" variables -- which might be thought of as registers).

>

We developed some in-house tools for programming large applications in BANCStar, and at one point attempted to interest Broadway & Seymour [the vendor] in them, but I think they never really believed us, that we were writing directly to their internal, low-level, undocumented machine code.
posted by are-coral-made at 5:16 PM on April 10, 2021 [5 favorites]


Wait. Isn't golang's defer keyword effectively a COMEFROM statement?
posted by schmod at 5:26 PM on April 10, 2021


It shows, dog's breakfast of a language.

And yet, there are tons of people out there for whom the Javascript ecosystem basically is programming.
posted by nosewings at 5:29 PM on April 10, 2021 [4 favorites]


Are-coral-made, ez-c, a language used in ATMs and at least one major retailer’s POS system, had a global limit of 256 variables. And no local variables. And only if statements and goto for flow control. Subroutines were actually just gotos. A friend maintained a 100K apps in the mess for over a decade.
posted by grimjeer at 6:25 PM on April 10, 2021



Utah teapot was missing.

Peek and poke.

Call 768.

Ctrl-d

Ones complement, 36 bit word machines.
posted by grimjeer at 6:28 PM on April 10, 2021 [2 favorites]


What's cursed about the teapot?
posted by schmod at 6:50 PM on April 10, 2021 [3 favorites]


I know it's not just a lolprogramming list, but I'm pretty surprised MUMPS (more likely the linked article) isn't in the mix.
posted by rhizome at 6:52 PM on April 10, 2021 [5 favorites]


[posts Good Burger "yeah mm hmm I know some of these words" meme]
posted by AzraelBrown at 7:18 PM on April 10, 2021 [2 favorites]


"Intel Management Engine" -- yah, that one has always skeeved me out. So happy to be typing this on a non x86 PC, first time since my PBG4!

the utterly horrid https://en.wikipedia.org/wiki/Commodore_1541 was the main reason I didn't get a C-64 in my high school days, sticking with my school's lab of Apple IIe's (one of the ~30 PCs was reserved for my exclusive use since I was in there so much).
posted by Heywood Mogroot III at 8:03 PM on April 10, 2021 [4 favorites]


> Isn't golang's defer keyword effectively a COMEFROM statement?

The beauty of COMEFROM is that it destroys the ability to reason about a program's behaviour locally (local in the sense of nearby regions/scopes of the source code). If you have a function that contains a location or label that a COMEFROM could potentially target, then to understand how that function will execute, you need to read the entire codebase to vet for potential COMEFROMs that reference the label.

defer could be thought of as a very limited version of COMEFROM, where you can only COMEFROM (i) return statements inside the same function body, and (ii) in response to a panic. So -apart from perhaps in what circumstances a panic might be triggered- you can still reason about functions that use defer with only a very local understanding of the codebase.
posted by are-coral-made at 8:28 PM on April 10, 2021 [2 favorites]


It's not clear to me that Intel's ME is all that different from the secret firmware running in an ARM TrustZone or Apple Secure Enclave. Is there a reason Intel's is different/creepier?
posted by ryanrs at 8:29 PM on April 10, 2021 [2 favorites]


I don't think the Morris worm is there, unless I missed it.
posted by tavella at 9:36 PM on April 10, 2021


They left out the Whitespace language. In particular the .Net port done in 2000. There was a white paper, and my favorite part of it was how the port was (trying to quote from memory) surprisingly difficult for such a small language.
posted by morspin at 9:41 PM on April 10, 2021 [1 favorite]


If I understood any of this I'd probably never sleep again.
posted by Paul Slade at 11:19 PM on April 10, 2021 [2 favorites]


If they did Whitespace, then why not Lingua::Romana::Perligata - metacpan.org? Write code the old way, in Latin.

I'd add the Eternal September.
posted by zengargoyle at 11:35 PM on April 10, 2021 [4 favorites]


At least some of them appear to be works of creative fiction. As all of the others had been things I had heard of before I was in the process of sending it to some of my friends in amazement before I realized.
posted by Kikujiro's Summer at 12:37 AM on April 11, 2021


Too obscure, but I'd add a helpful warning from National Semiconductor on avoiding beryllium poisoning(!) by being careful not to damage your NS32332 CPU.
posted by tss at 2:31 AM on April 11, 2021 [2 favorites]


I..... Am not sure if I should Google most..... of the explanations of what they mean

There are... certain establishments... where you should not request a Utah teapot unless you are ready to experience a Utah teapot.
posted by GenjiandProust at 2:46 AM on April 11, 2021 [1 favorite]


Also, while they had Soviet ternary computers, they omitted the use of Base -2 as a representation for signed integers in the Warsaw Pact countries. (They moved to two's complement when the Kremlin dictated that they stop trying to make up novel computer architectures and just rip off DEC and IBM.)
posted by acb at 4:56 AM on April 11, 2021 [2 favorites]


I don't know a lot of these, and it's interesting to read the links to wikipedia and so on. But I don't quite get the overall concept - why are these cursed? I get that there are things that are bugs, or confusing, or odd, but why cursed? And what's the iceberg metaphor doing here? Can someone beanplate it out for me?
posted by medusa at 4:56 AM on April 11, 2021 [3 favorites]


medusa:
The definition of "cursed" from r/cursed_images

tl;dr:
1. Makes you say WTF
2. Vagueness, Strangeness, and Otherworldlyness
3. Genuine (or appears genuine, as in the case of basilisk collection)

I think the iceberg metaphor is something like, "You thought you knew how bad it gets, but you've only scratched the surface. It goes deeper than you can possibly imagine."
posted by The genius who rejected Anno's budget proposal. at 7:40 AM on April 11, 2021 [1 favorite]


Since I spend much of my time writing about this kinda stuff, have a few to add: FatFinger, PingFS, Unlambda and hyperarithmetic machines, JSFuck, Yusuke Endoh's ourobours quine relay, DawnOs, Mimic, Lenguage for starters.

That said, this is brilliant and I learned a few things (the moving online webserver using public transport is great!)
posted by rottytooth at 8:04 AM on April 11, 2021 [4 favorites]


This is totally my jam. The Japanese postal-code "CSV" file story (scare-quotes used with consideration) is the convergence of multiple things I nerd out on.

Surprised that he didn't include a link to the Zoneinfo file for Antartica .
posted by adamrice at 9:57 AM on April 11, 2021 [5 favorites]


This iceberg is deep. Neat! (I'm pretty sure I understand at least 20% of it.)
posted by eotvos at 11:20 AM on April 11, 2021


The color name parser I created for a product at work does not support "chucknorris". This is me logging on to the VPN on a weekend to create a JIRA ticket for myself.
posted by 3j0hn at 12:25 PM on April 11, 2021 [2 favorites]


Among all the technical curiosities, there are (at least) two entertaining programming-based supernatural / horror short stories: Lawrence Kesteloot’s Coding Machines, and Aphyr’s 6-part series on technical interviews.

And so much else. What a fun set of links for a Sunday afternoon, thanks for posting!
posted by mubba at 3:49 PM on April 11, 2021


“You are Not Expected to Understand This” is MIA
posted by Insert Clever Name Here at 4:15 PM on April 11, 2021


but I'm pretty surprised MUMPS (more likely the linked article) isn't in the mix.

Ah, yes: I worked at a hardware company in the 1990s that was considering supporting this lovely programming environment as part of bidding on a largeish RFP that one of our senior engineers turned marketing VP identified as an 'sales opportunity.' Went nowhere fortunately.

Such memories!
posted by Insert Clever Name Here at 4:19 PM on April 11, 2021


I am so glad I don't have to deal with JIRA ever again...
posted by MtDewd at 4:22 PM on April 11, 2021 [2 favorites]


Endianness also MIA.
posted by Insert Clever Name Here at 4:22 PM on April 11, 2021


I would call diverse double compiling a blessed computer fact. We can trust trust again!
posted by Ptrin at 8:16 PM on April 11, 2021


Endianness also MIA.

There's no endianness like mixed endianness!

The Turing-conplete LED display's hardware logic is wired for little endian data, sent MSB first. Which is reasonable enough, I think, when you're programming SPI peripherals on an ARM microcontroller. It's perfectly natural and if you just gloss over it, everything works great. But if you try to puzzle out which bit is "first", you're going to end up angry.

(the 8th bit is first, for all word sizes)
posted by ryanrs at 9:34 PM on April 11, 2021 [1 favorite]


I thought "diverse double compiling" is what happens when you fuck up the makefile.
posted by ryanrs at 9:47 PM on April 11, 2021 [5 favorites]


oh man, the first time I wrote code with an endianness problem it was a real bad week lemmetellya.
posted by kaibutsu at 10:35 PM on April 11, 2021 [1 favorite]


this discussion inspired me to write a puzzle about Endian food but the first thing I thought of was naan & went "well shit that's the same both ways" so I stopped
posted by taquito sunrise at 3:19 AM on April 12, 2021 [3 favorites]


What's cursed about the teapot?

Not super cursed, but:

The original, physical teapot now resides in the Computer History Museum in Mountain View, California. It is noticeably taller than the Utah teapot, because Newell's frame buffer used non-square pixels. (source)
posted by leahneukirchen at 7:48 AM on April 12, 2021 [1 favorite]


You can skirt endian problems by doubling the size of all numerical representations so that you read the same number from either direction. RAM is cheap these days, right?
posted by kaibutsu at 8:19 AM on April 12, 2021


I'm not searching etsy for vintage utah teapots, you're searching etsy for vintage utah teapots.
posted by kaibutsu at 9:47 AM on April 12, 2021 [1 favorite]


You can skirt endian problems by doubling the size of all numerical representations so that you read the same number from either direction.

Gotchu covered, fam
posted by rhizome at 11:29 AM on April 12, 2021


It's probably toward the top of the iceberg, but the hardware virus deserves mention.
posted by neilbert at 11:30 AM on April 12, 2021 [4 favorites]


I'm pretty surprised MUMPS (more likely the linked article) isn't in the mix.

That's because we DO NOT SPEAK OF MUMPS. Now go outside, turn, curse, and spit.
posted by Mr. Bad Example at 3:41 PM on April 12, 2021 [1 favorite]


Self-replicating hardware viruses that infect video or other adapters are possible now that cursed interfaces like Thunderbolt exposes PCIe to the outside world. My Thunderstrike proof of concept from 2014 installed itself into the flash on the mainboard of the infected system, which meant both that it ran before any kernel code so it could bypass all OSX security, as well as that reinstalling the OS or replacing the disk wouldn't remove it. It would also infect new adapters when they were plugged in, so that way even if you replaced the entire computer, the new one might be reinfected by the accessories.

I kept the infected adapters on my desk marked with a skull and crossbones in case anyone was tempted to borrow one.
posted by autopilot at 3:48 PM on April 12, 2021 [1 favorite]


* Hollerith constants - storing characters in numeric types because that's all you could do in Fortran 66. Of course, every machine had different word sizes and bits per character. On my PDP-8, I can store two characters in an integer (12 bits) or six in a real.

* DSSSL: a transformation language for the precursor to XML that was Scheme with embedded CSS codes. I don't think anyone ever managed to write a full implementation

* text-based line records where the record could be either fixed-width fields or delimited depending on the value of a field in the line. So you have to parse it to find out if you need to parse it differently. (This was in the late unlamented TAFL database from Industry Canada: I saved you a screenshot so you can scream at it)

* XPress Tags, which still appear to be a thing in publishing. Sort-of XMLish markup, except everything's a toggle and state can be implicit. So <B> in one document might turn bold on, but in another turn it off because bold text was already a default in the template
posted by scruss at 4:56 PM on April 12, 2021 [2 favorites]


My candidates are Decimal ASCII and lowercase numbers.

Those sound intriguing but unfamiliar, and the names aren't good google-fodder (mostly producing ASCII tables in decimal, and people wondering how to get subscript or small font size numerals for me), I wonder if mhoye or anyone else could elaborate? Thanks.
posted by Slogby at 5:03 PM on April 12, 2021 [1 favorite]


My candidate would be the original ARM floating-point format, FPA, which had middle-endian doubles. ARM soon had FPA taken out and shot (replaced with VFP/NEON) and now likes to pretend it never existed.
posted by Slogby at 5:11 PM on April 12, 2021 [2 favorites]


> XPress Tags, which still appear to be a thing in publishing

Nobody has used Xpress in a decade or so.

Well, hardly anybody.
posted by ChurchHatesTucker at 6:46 PM on April 12, 2021


strlen()+1
posted by lowtide at 6:53 PM on April 12, 2021 [2 favorites]


That's because we DO NOT SPEAK OF MUMPS. Now go outside, turn, curse, and spit.

MUMPS/M was the product of a bygone age of computing, but I still say that the VistA EHR that was implemented in it was hands down the best healthcare IT asset ever created, and we could have done worse than just giving it to every medical practice in the nation back in the 90's and used a lot of healthcare dollars wasted on commercial healthcare IT solutions that could have been used for patient care.
posted by mikelieman at 9:45 PM on April 12, 2021 [2 favorites]


Of course Sputnik-era Soviets created ternary computers. All those scientists who survived Stalinism knew that Boolean logic needed three values: false, true, and what the Party said was true.
posted by morspin at 4:07 PM on April 13, 2021 [1 favorite]


I wish to introduce: Caché Server Pages.

It's MUMPS, running as a web backend. It's powerfully cursed along several axes.
posted by BungaDunga at 11:12 AM on April 14, 2021


If this is the place to add candidates, I nominate Execution in the Kingdom of Nouns (level 1 due to relative recency)
posted by morspin at 2:50 PM on April 14, 2021


Of course Sputnik-era Soviets created ternary computers.

To be scrupulously fair, it's not unheard of to use "true, false, nil" as a three-way boolean.
posted by rhizome at 5:01 PM on April 14, 2021


it's not unheard of to use "true, false, nil" as a three-way boolean.

Not to mention the FileNotFoundFoundian algebra.
posted by Slogby at 5:51 AM on April 15, 2021


Turing-complete LED display update:

Got the PCBs back from China on Monday, had it assembled and working that evening, and integrated into our larger system by Wednesday. I've already ordered parts to build 2 more!

Ha ha ha, this silly device is a big hit. It's going to become part of our core tech. I'm going to need to document the syntax, etc. It's hilarious!
posted by ryanrs at 9:45 PM on April 17, 2021 [2 favorites]


« Older Advanced training for the dance your PhD contest   |   Touch and consent Newer »


This thread has been archived and is closed to new comments