LaurieWired Profile picture
Aug 15 5 tweets 3 min read Read on X
lp0 is a Linux error code that means “printer on fire.”

It’s not a joke. In the 50s, computerized printing was an experimental field.

At LLNL (yes, the nuclear testing site), cathode ray tubes created a xerographic printer.

...it would occasionally catch fire. Image
Image
State-of-the art at the time, the printer was modified with external fusing ovens hit a whopping…

1 page per second!

In the event of a stall, fresh paper would continuously shoot into the oven, causing aggressive combustion. Image
As tech later advanced to drum machines, the fire “problem” didn’t go away.

High speed rotary drums could cause enough friction during a jam to self-combust.

Even minor hangups needed immediate intervention. Image
In the 80s, Xerox created the first prototype laser printer.

Apparently learning nothing from lessons of the past, paper had to pass directly over a glowing wire.

If a jam occurred *anywhere* in the system, the sheet in the fuser would immediately catch fire.

The prototype UNIX driver reported every jam as “on fire” to motivate the technician to take an immediate look.

lp0 still exists to this day in the Linux source code!

Go and search the git tree for “on fire”, you’ll find it!Image
Image
correction, the full error code is “lp%d on fire”, where lp%d refers to the printer itself

my brain is tired cut me some slack Image

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with LaurieWired

LaurieWired Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @lauriewired

Aug 14
PCI link bus designs are incredibly complex.

Standard FR-4 PCB material is basically at its limit. Every year it's harder to keep up with the new standards.

At what point do we flip the architecture on its head...

GPU as the motherboard, CPU as the peripheral? Image
Image
It’s not a new idea.

In the pentium era, Intel created Single Edge Contact Cartridges (SECC).

Instead of being socketed, the CPU was basically slapped on a glorified RAM stick.

Later abandoned due to cost and cooling issues, in the modern era it's starting to make sense. Image
Image
Today's GPUs draw significantly more power than CPUs.

Why is the highest power draw, highest bandwidth component the “peripheral”?

It forces us to route massive power delivery outward, rather than intelligently building from thermal center. Image
Read 4 tweets
Aug 13
Is your compiler a boy or a MAN?

Created by Donald Knuth, it’s a test to check if recursion is implemented properly.

Originally written in ALGOL 60, a precursor to C, but can adapt to nearly any language.

It really stresses the stack and heap, pushing insane call depths:
It’s a fun little program that creates an explosion of self-referential calls in just a few lines of code.

At a recursion depth of 20, the call stack already hits the millions!

Keep in mind, this test was designed in the 1960s; yet even modern systems struggle. Image
Early C fails the test.

The lack of nested functions, along with the simple stack-based memory model makes closures impossible.

You can *sorta* do the test in modern C, but it’s a total hack /w function pointers and structs.

Kinda misses the whole point. Image
Image
Read 4 tweets
Aug 6
Ring 0 is a highly-privileged state on CPUs.

Negative Ring Levels have even *higher* privilege. You just haven’t heard of them.

For X86, Ring -1 is Hardware Virtualization, Ring -2 is System Management Mode, Ring -3 is Intel ME / AMD PSP.

Arm get's even weirder: Image
Image
Negative rings are mostly due to X86 being really old; as the ISA got more complex, we got "above 0" states.

Armv8 moves in a positive direction; higher numbers have more privilege. From EL0 (user space) to EL3 (State-Switching).

Apple does something extra funky: Image
Image
For Apple’s M-chips, two substates were added to EL1+EL2, called GL1 and GL2.

During their reverse engineering efforts, Asahi Linux confirmed that the EL3 state doesn’t exist on the M1.

GL1 is a sandbox that the XNU kernel “jumps” into every time it edits a page table. Image
Read 4 tweets
Aug 2
An early rule you learn in computer science is:

“Never store currency as floats”

Nearly every popular language has special, built-in types for money. But why?

The *majority* of money-like numbers have no float representation, accumulating to massive errors over time: Image
Image
Go ahead and try this. Let’s add three dimes. Open up a python terminal, and type in:

0.10 + 0.10 + 0.10

Uh oh. See that little remainder?

It may seem trivial, but this mistake happens more often than you’d expect! Image
iBit, a Bitcoin exchange, encountered a “free money” glitch for this reason.

Orders were parsed as floats; you could create an order smaller than a single satoshi (minimum unit of Bitcoin).

Source wallet would round down (no change), target wallet rounded up (+1 satoshi). Image
Image
Read 4 tweets
Jul 30
Programming Languages used to be designed as powerful as possible.

Maximum possible utility given hardware constraints.

The pro move is to choose the *least* powerful, non-Turing-complete solution.

The entire web exists because of the Principle of Least Power: Image
Image
Don’t take my word for it. Tim Berners-Lee (inventor of HTML, HTTP, etc) had this to say:

“the less powerful the language, the more you can do with the data...”

HTML is purposefully *not* a real programming language.

The constraint pushed innovation to data processing. Image
Imagine an alternate-reality Web, where HTML didn’t exist.

Java applets would have been a serious contender; they certainly allowed for rich interactivity.

Yet, without a way to freely scrape simply formatted data, search engines would be a non-starter. Image
Read 4 tweets
Jul 29
When you make a Bank ACH transaction, it’s literally just an SFTP upload.

Sent as a NACHA file, it's 940 bytes of ASCII text.

Bank-to-Bank transactions cost ~0.2 cents. As long as it travels via encrypted tunnel; it’s compliant!

Here’s how the quirky system works: Image
Image
Chase offers a sample NACHA file to look at.

Notice the rows padded with 9s. It’s an artifact of a 1970s rule about magnetic tape, "always fill the block".

To this day, total line count *must* be a multiple of ten; otherwise the bank will drop the transaction. Image
Image
Of course, larger Fintech firms (think Stripe) wrap it up with modern APIs, but SFTP is the default for most US Banks.

Hilariously, NACHA rules don’t clarify *how* transactions should be encrypted.

Only that “commercially reasonable” cryptography should be used. Image
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(