Things Every Hacker Once Knew (2017)
catb.org
catb.org
"That property is still useful, and thus in 2017 the AT convention has survived in some interesting places. AT commands have been found to perform control functions on 3G and 4G cellular modems used in smartphones."
But modern modems aren't connected over serial. There's no concept of line speed. This property is entirely irrelevant to modern hardware. A much more plausible explanation is simply that extending the interface made it easier to extend existing codebases to new contexts.
"IoT devices still speak RS-232"
This is actually dangerously untrue! RS-232 used positive voltages for 0 and negative voltages for 1, between 3 and 15 volts each. Attaching RS-232 to a modern IoT device's serial interface is likely to kill the device. What is common between old-school serial and the serial ports on modern devices is stuff that's out of the scope of RS-232 (eg, the 8N1 framing isn't defined by RS-232), and using the RS-232 terminology to describe it is about as accurate as calling it RS-422.
"If you know what UTF-8 is (and you should) every ASCII file is correct UTF-8 as well."
I mean kind of? ASCII is a character set, it doesn't define the on-disk representation. An ASCII file saved with each character packed into 7 bits isn't going to be valid UTF-8 without some manipulation. This is just an odd claim to make given the earlier discussion of varied word lengths and transfer formats that weren't 8-bit clean.
"But in 2005 Linus Torvalds invented git, which would fairly rapidly obsolesce all previous version-control systems"
(cries in Perforce)
Git was a huge improvement over CVS and SVN. Claiming that it rendered everything that came before it obsolescent just suggests massive ignorance of chunks of the software industry.
And yes this is all ridiculously pedantic, but given the entire tone of the article is smugly pedantic it doesn't seem unfair to criticise it on that basis.
ASCII is an encoding, and sometimes people refer to the ASCII charset as "ASCII" too. So it does define on-disk representation. A file with the leading 0s removed is no longer ascii-encoded. Similarly, a gzipped ASCII file is also no longer an ASCII file
[0] https://www.rfc-editor.org/rfc/rfc20.html
[1] https://www.rfc-editor.org/rfc/rfc822.html
Edit: to clarify, there's a spec for ASCII-as-8-bit-with-top-bit-clear, but it came some time after the ASCII spec and if someone needed to define that later it strongly suggests some people were doing it differently
> For concreteness, we suggest the use of standard 7-bit ASCII embedded in an 8 bit byte whose high order bit is always 0.
Meanwhile, ANSI X3.4-1986 defines the "7-Bit American National Standard Code for Information Interchange (7-Bit ASCII)". Even the older standard calls it the "USA Standard Code for Information Interchange", i.e., "US-ASCII".
None of these standards define "ASCII". It's up to us to interpret "ASCII" as "7-bit ASCII" or "US-ASCII" or "network ASCII" or any other form of ASCII according to context; there is no monopoly on the unqualified term.
Excuse me for being pedantic as well but UTF-8 also doesn't define the on-disk representation and is just a character encoding of the Unicode character set. But they define bit representation and for that the statement is true.
> An ASCII file saved with each character packed into 7 bits isn't going to be valid UTF-8 without some manipulation. This is just an odd claim to make given the earlier discussion of varied word lengths and transfer formats that weren't 8-bit clean.
How these character sets are transported over other protocols is outside of the scope of their definitions.
Hahaha oh wow. That's amazing. Fun fact:
Arithmetic IF makes handling exit codes significantly less annoying¹, and that's because Arithmetic IF is how we came to get signed integers as exit codes in the first place.
¹at least in theory, in practice half the people implement the codes incorrectly because they don't realize this, and so…
Anything with a defined 8th bit would be an extension of ASCII.
But it was obvious back then that if you use 8 bits for a character that the 8th bit would have to be unset unless some further processing was happening.
Even more so in the context of UTF-8. 8 bits bytes had won by then and in that environment ASCII was a thorough sub set of UTF-8.
> ASCII X'2E' or 2/14
> X'OD' or 0/13
Says who? I'm just commenting here and on second screen I'm debugging a microcontroller connected over serial link to a LTE cat M1 modem, that's a pretty modern one. It uses 115200 8n1 line by default, but you can change that speed, it even has speed autodetection, after modem signals that it's ready on separate line, you can send it "AT" at your preferred speed until it responds (typically after third AT).
> (cries in Perforce)
> Git was a huge improvement over CVS and SVN. Claiming that it rendered everything that came before it obsolescent just suggests massive ignorance of chunks of the software industry.
But this article is for common knowledge. It explicitly says that it does not deal with all parts of the software industry just parts that any hacker would know.
So yes now git is the only version control used for distributed collaboration of source code.
Aside from Facebook and Google who have their own custom VCS's the only real games in town are Git and Perforce. Which is a bit of a shame because Git is really bad at some things. Especially large file support (hence Perforce continuing to exist), submodules, and partial clones.
They very much do. Maybe you are thinking of modern low voltage devices? Where yeah you do not use that as much. But modbus and rs485/rs232 are very much alive in the industrial world where IoT is quite alive.
> But modern modems aren't connected over serial.
They are. Just not necessarily what you consider RS232. Usually when I did this a few years ago it was USB lines. Which is a serial bus.
The AT commands are still used in pretty much all modems. Which you have in your pocket. That is how the cell modem sets up the call to the phone network. The venerable ATDT is still used all the time to setup the call to the network. The AT command set was for setting up the call and controlling aspects of the call (like max speed and protocols you allow). The auto negotiation is one layer out at the network/modem level. With older modems they had a speaker that let you hear it. It was that distinct tweeting with a buzz with a fade out. You just no longer hear it. AT did not do that at all other than kick off the process and setup the registers for the modem to know what to do at the negotiation step which is defined in the spec. Still all there.
(Edit: and while the AT command set is supported, modern systems tend to use custom command sets in preference. For instance, Qualcomm modems support QMI which provides a binary interface to the modem and modern phones will tend to use that in preference)
When you use one with the other any number of things can happen, including the destruction of the target microcontroller if the circuit is unprotected (most MCUs dislike sufficiently negative voltages on their ports).
Now if we talk about servers or expensive media gear their RS-232 connectors are very likely top notch (and still very much present as you rightly noticed). Cheap devices are more questionable here.
Be suspicious of anything with the tone of “kids nowadays…”. (Isn’t there an xkcd comic about that?) The smart young hackers will do fine, as they always have. I see teenagers doing wonderful things with x86 assembly on hacker news on a regular basis.
I love history; I trained as a historian. I just don’t think it’s always all that useful in our field, especially if it’s old technical trivia. (Social and economic history may be a different matter.) Sometimes it’s tangentially relevant. Mostly young engineers would be better off investing in learning timeless concepts, such as relational databases and SQL, networking, low level computer architecture, distributed systems theory, and so on. And they will (again, if they’re smart), because those things are useful and deeply interesting and will remain so thirty years from now. Get the foundations down and you will draw on that knowledge for your entire career.
ASCII is both a character set and an encoding. The encoding specifies 8 bits per character with the high bit clear. Every file encoded this way is also valid UTF-8. That's what the article's statement meant.
> (cries in Perforce)
Am I the only one still remembering BitKeeper?
https://en.wikipedia.org/wiki/BitKeeper#BitKeeper_and_the_Li...
Modems are still connected via serial lines - our embedded project has a modem connected to the MCU via a UART. We ran out of MCU pins for HW flow control but it's essentially the same as how we did things in the 80s with external modems.
I assumed AT commands were still in use either because they're so easy to use or they're easy to test. I can't say whether the autobaud feature is still useful but the modem we use can do it.
I think (some) IoT devices can still use RS-485 which seems similar to RS-232. We're in ag-tech so the sensors we talk to use SDI-12, a shared bus serial protocol with 12v power and 5v signalling. Lots of weird stuff out there!
'Smugly pedantic' is a concise way to describe Eric S Raymond. To this day, I despise his 'How to Ask Questions the Smart Way'.
This seems incredibly pedantic to me. I think in context we can assume it is meant, ascii with 8-bit bytes.
56K really was the maximum for telephone modems. This is because the telephone network, internally, transmitted 8 bit samples at 8K samples/sec - 64Kbps - except the occasional low bit got stolen for other signaling, so the net data rate was a bit less (and the result was inaudible to a telephone customer). Instead of trying to synchronize the modem to the stolen bits, it was simpler to just use the 7 that were reliable - thus 56Kbps. https://en.wikipedia.org/wiki/Robbed-bit_signaling
9600bps as the defacto terminal speed was older than 9600bps modems (those were the cat's pajamas in the mid-late 80s or so). It was simply "fast enough" for a terminal user and "slow enough" for the terminals of the day. I had one (a Volker-Craig 4404 if I remember correctly) that could not keep up at 9600bps and had to be used at something less, maybe 4800bps.
Sadly, I had a 1200 baud; my uncle told me his first was 300.
I remember a 110 setting, which might go all the way back to the '48 Berlin airlift!
https://en.wikipedia.org/wiki/Novation_CAT#The_Apple-CAT_II
BTW baud != bps. A full-duplex 1200 bps modem is actually 600 baud:
https://en.wikipedia.org/wiki/Modem#Evolution_of_dial-up_spe...
I remember when I upgraded to 9600 in the early 90's. It was an incredible upgrade. I also ran my first SLIP connection on that machine (an Amiga), probably around 1993 or 94.
Typically a minicomputer terminal multiplexer batched transmission when possible, so it only had to issue an “all done” interrupt to the CPU when it was done sending a batch of characters it pulled from memory via DMA. Similarly, in character mode it only had to issue a “something’s waiting” interrupt to the CPU when a receive buffer was full or a sequencing character (like carriage return) was received.
This is also why so many mainframes and minicomputers used block mode terminals: Applications use a forms API and all editing/filling happens on the terminal: The computer transmits a full form to the terminal, the user fills in the form including correcting mistakes and possibly even sees some validation (eg numeric versus alphanumeric fields), the field contents are sent to the computer upon an explicit “done” action.
Even for “fully” interactive use many such systems preferred to use a line mode, where the current line contents are only sent upon specific actions, and line editing takes place on the terminal. UNIX style “raw” mode was too high-overhead for the number of users that systems needed to service, even if the terminals cost a bit more.
It is astounding that the 3g/4g modem industry did not come up with a better way to talk to their devices. Even ISDN had a widely implemented proper API.
No parsing of text. No escaping of '+++' to avoid that a '+++ATH' in the data stream closes the connection (I wonder how the download time of a file containing only '+' differs from a file with other characters).
And with increasing mobile network speeds, you really want something like DMA instead of reading individual bytes from a serial interface.
<pause>+++<pause>ATH<CR>
The pauses, I think 1 second by default, were exactly for this reason. "+++ATH" racing by in a data stream would be transmitted as is.
Or is that an urban legend of some sort?
> Thus, even if the file being transmitted [...] includes occurrences of the escape command string of bits, it is extremely unlikely that any random occurrence of the escape command would occur unintentionally in the environment of the entire escape sequence, that is, the escape command string surrounded by a second of no data on either side.
In any case, it fills me with equal parts nostalgia, awe, and fear. :)
https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
Setting up a data connection over QMI / MBIM however is much easier and more efficient than messing around with AT + PPP
I recommend archive.org instead. There are many great collections there with USENET groups saved as mbox files that you can download. Install something like mboxgrep, import into a mail reader, or just read the files as text.
Just one example: https://archive.org/details/usenet-comp
What you're missing is that the reason WHY lots of this "shitty old tech" is still around is because it has stood the test of time. Nobody keeps all of this around in modern technology out of pure nostalgia. This stuff is still useful because it largely solves a problem elegantly, and/or provides a useful abstraction with more modern systems. Or because there's simply no escaping the need for compatibility with existing systems.
Yes this "shitty old tech" has warts. ALL of your code will in a few decades too.
What was that XKCD about standards again?
Its not that the tech is great, its that its become so engrained into the business that replacing it would be harder than starting a new business with the new tech. And so, it continues to operate well beyond its lifetime, and thats how you end up having cobol and fortran being actively used in industries in 2023.
And.. lets talk about the modern standards *cough* USB, but wait did i mean USB 2.0, or maybe 3.1, but maybe i meant 3.2+superspeed, but wait theres also USB 4.1! Old standards havent been entirely great, and that's why we have iterations (my usb example was really a rant more than example), but we have unfortunately built a lot of bad standards, that we still very heavily rely on, and wont easily get away from. The overhead of TCP for example, or how about IPv4?
I blame business though, we have much higher velocities in modern development than we did 50 years ago. Having years to plan a thing vs two weeks it seems to be today. If given a good time frame, software and standards can be more concretely designed, leading to less shitty new tech, but im a dreamer and it will never happen except in small scale areas.
And of course to our ancestors, we're spoiled kids with our electronically erasable ROM ;)
This is what the KIM-1 (https://en.wikipedia.org/wiki/KIM-1) uses and it's pretty common for current loop (https://en.wikipedia.org/wiki/Current_loop) interfaces to still be used in the context of industrial control and it's also the basis for MIDI (https://en.wikipedia.org/wiki/MIDI#Electrical_specifications).
This was commonly used on Usenet as a spoiler tag, because the rest of the message wouldn’t be displayed until the user pressed PgDn (or equivalent) past it. It was visible as “^L” on the screen, so you knew there was more coming up, and the rest of the screen was cleared, until the ^L scrolled out of the screen.
I'm mentoring a couple guys on my team, both born solidly after the year 2000 by their own anecdotes, building them up as Linux infrastructure engineers. I covet the video cameras we use on our remote meetings, because I can tell when to stop talking about the history by their body language drooping.
I've had a few a-hah moments, using connections to the same history ESR scribbled above, but largely I am finding that regaling the younger people with details from before they were born is not interesting because they were not here for it and have no connection to it.
I don't understand why this attitude is so pervasive nowadays. in my opinion, curiosity about one's craft's history is a crucial part of the hacker spirit. I can't imagine, for example, never having used a landline, yet not finding phreaking to be incredibly interesting to learn more about, even though it's about as far from practical knowledge today as it could be.
did we mess up somewhere and fail to convey this aspect of the hacker spirit to the youth? or are things just changing too rapidly?
For example,
When I was first getting into computers I felt like I had all the time in the world to perfect writing batch files and I could pour over a single magazine at a leisurely pace for weeks until the next one came out.
Nowadays every time you use your face to unlock your magic pane of glass there's a language, a new framework, a new more impressive AI you can build your business on or some creepy guy trying to scan everyone's eyeballs, it's just different.
how many people who program computers professionally for big tech companies are "hackers", these days, compared to one decade ago? two? three? surely the ratio has only decreased over time, as more and more people get into the field for purely pragmatic reasons (income, clout, etc.) than taking part in/engaging with "the hacker spirit". for better or worse, gates have not been kept, and now things are completely different than they once were.
Certainly by the mid-late 80s there were far more day job programmers around than hackers.
In one company I managed to find a few fellow hackers, but the next one I worked at - nothing. It was awful.
Luckily after that I managed to get more interesting work for a while, but then I spent too long in the wrong part of Oracle and again, I just couldn't find fun in the coding we were doing and no-one else could either.
I think true hackers or enthusiasts have always been in the minority, at least since the late 70s I'd guess.
I think that young people today don't perceive themselves as having any free time, and so they treat new things as they're taught in school: optimize the solution, get your grade/get paid, and go back to the precious little free time you have available to enjoy your life.
The disappearing free time is partially true, as the reach of the school environment grows and homework/extracurricular burdens increase. It's also partially imagined, because most young people burn 4-9 hours per day on their phones. It's not their fault, since phones are designed to be addicting for young people specifically. However, the end result is that the class of people who should be the most restless, virile, excited, and driven in society--kids age 12-20--is the most over-scheduled and exhausted.
If you took a modern young person and stuck them on a reservation where the level of technology and pace of life matched the '80s and '90s, they'd start behaving like young people again.
I had a C64 and only the docs that came with it, until I eventually found a couple of books on assembly, one not even for the C64. But even with that scarcity of info I was just desperate to know how it worked and how to make it do things.
But look at how complex a computer is today! Even though there is endless info for free, it's just too difficult to get something fun going.
Early PCs were still understandable, but todays GPUs etc are just a different world, and expectations are sky high when you see the current gen games. Even an 'indy pixel game' is no laughing matter to create.
So I would convey the exact opposite aspect of the hacker spirit to the youth. Don't feel the need to read anything about history that isn't directly related to what you want to hack on. Black box liberally and dangerously and deal with the consequences as they appear. If reading history is what you want to do with your spare time, great, but let's be clear about what the actual heart of this avocation is.
It was the Physics teacher who ran a computer club I'd joined in the school.
We got to use those old HP "calculators" which were big bulky machines which had a display consisting of a single line of I think, 80 character LEDs, ran a form of BASIC, had a built in cassette tape reader (and writer) to load or store programs.
The card reader attached to these clunky big things. I asked the physics teacher why they weren't used - I remember him saying it was because they weren't working. My 13 year old mind kind of fixated on them; the cards were in the same format as punched cards, except you marked them by drawing a single diagonal line across one of the rectangles which represented an ASCII character; each card had an array of such characters and you wrote a complete BASIC program by correctly marking each card. It took many such cards to write a program.
Long story short, I got the card readers working again. The physics teacher just nodded his head - he was one of the old-skool kinda guys with a beard, who showed they were impressed, by displaying such stoic reactions. It was at that point that I learned about punched cards; basically the same principle but using punched holes rather than marking the individual rectangles.
As I was born in 1969, I feel I had the priviledge of growing up during the various eras the article speaks of; by the time I attended high school I was growing up with Sinclair ZX81s (My first home computer), VIC-20s, C= 64s, Amiga 500s (My first Amiga). Amiga 1200s. My first PC was some 386 thingy I bought from a pal. This article reminds me of a lot of common knowledge I'd completely forgotten over the ensuing decades - such nostalgia!
It felt like a very logical and connected progression. Anyone in the business would be familiar with it, if only in overview.
The UK had a preview of commodity computing with its cheap 8-bit micro scene in the early 80s. In the US computers remained far too expensive to be widely used.
That seemed to change in the late 90s. Computing came to mean desktop and eventually handheld devices connected to the Internet. There were - still are - supercomputers, but they're a tiny niche.
It became about commodity hardware appliances for commodity users with commodity software and tooling. The software also became appliance-ised.
In a sense computing stopped having a history, in the same way other consumer goods like fridges, cars, and microwaves don't have a history. (Of course they do, but no one thinks about it while using them or buying them.)
It was a huge and under-noted cultural shift.
The next shift - AI - is already happening, and I'll guess we'll see the same lack of interest in "manual" computing history from the 1990s to the 2020s when AI-assisted computing becomes mundane and pervasive.
> (Of course they do, but no one thinks about it while using them or buying them.)
Wrong crowd! :) Every time I see a microwave, I think of the chocolate-melting-in-pocket story. Cars have endless associations. Fridges - I wonder how efficient ice boxes were, how long they stayed cold, etc. (obviously the convenience of having the 'cold' delivered over powerlines is hard to beat).
https://www.amazon.com/Hackers-Computer-Revolution-Steven-Le...
https://www.amazon.com/Accidental-Empires-Silicon-Millions-C...
https://www.cringely.com/2013/02/04/accidental-empires-part-...
(all the chapters are there)
Hopefully you do end up having such a mentee!
Maybe one could make the perfect ASCII table by grouping the bits as (2, 5) rather than (3, 4) - then you can see the "shift key clears bit 6, control key clears bits 6 and 7" principle for the letter keys.
If it was up to me, remove the more useless old codes that take up precious 1-byte UTF-8 codes and replace them by common characters. Like "Record Separator": if it's that useful to have a record separator character, why aren't we using this one instead of e.g. commas for comma separated values?
I find that the degree symbol (°) is a glaring omission from ASCII.
Of course a pre-pass is to strip out FS / RS just to make sure in case it got in accidentally, and to also know the purpose of the data to ensure that they shouldn't be in the text. But so far that has made my scripts a lot more reliable. The other alternative is to do the light-weight processing using a heaver scripting language that can deal with structured data natively, but setting FS and RS is often times a bit more expedient for me.
I've done ETLs to/from systems that do use these control characters. It's a joy compared to CSV. I have nothing to escape and no complex parsing logic. Embedded CR/LF-- no problem. Fields containing commas-- no problem.
We should be using these control codes for their purpose but nobody knows about them anymore.
output = run(
“list-cats”,
“—format”,
“%(name)s\x1f%(age)s\x1e”,
)
records = output.split(“\x1e”)
cats = dict(
r.split(“\x1f”)
for r in records
)
In reality it’s a bit fastidious to use RS and US. I tend to just use “\1” and “\2”.0. https://www.pcmag.com/news/the-forgotten-world-of-teletype-c...
In the earlier days of the web, it was not totally uncommon to see people hosting their home pages on an FTP server rather than an HTTP server. Netscape and IE both spoke FTP just fine, and for some people, access to an FTP account was more convenient than paying for separate web hosting. Or settling for GeoCities. If the page had a lot of images, it was quite a bit slower than HTTP though.
hex
octal
binary
how to convert between the above 3, and between them and decimal
bit twiddling
the difference between ASCII and binary files (even pre-unicode)
the fact that a source code program compiled on one processor architecture will not run on another without recompilation on the target, apart from cross-compilation - at least in most cases this was true, though there might be differences nowadays, for apple products, java and other bytecode, etc.
endianness
...
I have actually talk to various people who did not know all of the above topics, although not necessarily all in the same person
There used to be a saying: Computer science is no more about computers than astronomy is about telescopes.
And that is why in this article, ESR has titled it, Things Every _Hacker_ Once Knew. Hackers usually have some sort of passion for the technology itself and want to understand ALL of the practical details and history of a thing. Hackers are _very much_ about computers.
This one is a bit confusing. In DOS/Windows land, files are just files, always binary. The distinction between "ASCII" and "Binary" only exists at the time you call "fopen" (a C function), then failing to open in binary mode causes it to mangle your data by inserting CR before every LF.
I meant text files vs. binary files, as in, you can open text files in a text editor and see their contents, but if you open a binary file in a text editor, you get what appears to be garbage, but that is not an error, because of all the non-printable characters they often contain.
But at one level you are right, of course, files are just files. It is the higher layers of software and humans that give different interpretations to them, such as text vs binary.
>talked, voice-to-text error
Consider German. Lower case letter "ß" was converted to two upper case letters, "SS" or "SZ", until fairly recently, when a new character "ẞ" was officially added. Much software still uppercases "ß" to "SS". For example:
$ python3 -c 'print("große".upper())'
GROSSE
Consider Turkish. Upper case letter "I" converts to lower case "i" in English, but in Turkish the same letter converts to lower case "ı" (no dot). Lower case letter "i" converts to upper case "I" in English, but in Turkish the same letter converts to upper case "İ" (with a dot).So you have to know which language you're using. It's not enough to know the character.
https://en.wikipedia.org/wiki/ß
https://en.wikipedia.org/wiki/Dotted_and_dotless_I_in_comput...
Things Every Hacker Once Knew - https://news.ycombinator.com/item?id=13498365 - Jan 2017 (321 comments)
I think the author doesn't mention there were other protocols as well, like RS-485 which had a much greater range in terms of distance (and I think it also used DB-9 though if you connected it to the wrong protocol, one of the sides would definitely go up in smoke :D ).
Anyway, very interesting post!
Ah the PC-VEI standard
Pin Compatible, Violently Electrically Incompatible.
Dell had a number of personal computers around the 95'ish era that power supplies with an ATX compatible connector. But it wasn't electrically compatible so if you swapped a regular PC power supply or vice versa you'd like the smoke out of a motherboard.
1. It had a sharp display and came with some fonts that were truly beautiful compared to the typical 80-column PC font.
2. It had a DB-25 serial port.
3. The keyboard was an absolute piece of garbage.
The most unfortunate thing was that if you didn't stagger logins, the poor little minicomputer they talked to would slow to a crawl. Try getting 40 people to sign in at once, and the mini would became unresponsive for all or most of a 45 minute class period. But groups of five, and you could get ~50 people signed-in in few minutes.
IBM decided to use cheaper and smaller connectors than in the standards, so they replaced DB-25 with DB-9 (in PC/AT) and the 36-pin printer connector with a DB-25 with inverted gender, to avoid confusion with RS-232.
Due to the importance of the IBM PC, these smaller connectors have become de facto standards.
My library used these teletype machines into the late 90s, maybe even the early 2000s. Don't remember exactly when the transition was, but I remember using them in middle school or early highschool.
I actually remember thinking how clunky the web interface was when they upgraded, how you had to make sure the focus was in the text input box. It didn't "just work" like the older system.
Oooh boy is that wrong. Even the IMSAI ran at 1 Mhz or better.
You could even faintly hear the CPU or the video chip working on old bitty boxes like the Commodore 64, VIC-20, or TI-99/4A because it would leak through to the audio portion of the RF signal to the television. VICE even has an option to emulate this for a more authentic feel of using an old Commodore machine.
When you bring up an embedded Linux device, be it based on an old or a brand new SoC the first thing to get running is the UART connection, first to the bootloader and then to the kernel.
Speaking of this, maybe someday the line between volatile "memory" and non-volatile "storage" (currently HDD and flash) will cease to exist. Then we no longer have to ask if a file is loaded into memory or it's at rest in storage.
EDIT: Thinking about, maybe what he meant is not that the carrier signal is in the sub-20 kHz range, but rather that the switching happens at around that frequency. For example, gates opening and closing modulating the amplitude at audible frequencies.
The Altair had a 2Mhz clock.
By the mid-1990s, this was in the FM broadcast range, as a sysadmin I knew at the time demonstrated with an open-cased tower he was working on. (Perhaps perpetually.)
backspace is still used for formatting bold or accents in intermediate stages of man pages.
Note that SI, SO, ESC are ultimately defined by ISO 2022, which despite its common mindshare is about more than codepages. Properly supporting them was needed until "assume UTF-8" finally became common, which is very recent. Nethack is already mentioned in TFA ...
> CR (Carriage Return) = Ctrl-M
I still use Usenet (and some other people still use it too), with NNTP. In fact, I started using Usenet only a few years ago. The Usenet provider named "Eternal September" is the one I currently use, and was named due to the 1993 mentioned there. I don't use Google Groups and all spam I have seen on Usenet these days comes from Google, and I hate it and some other people say similarly, that they would reject messages from Google.
I also used FidoNet, but that was longer ago, and it was with internet. (It might still be in use; I am unsure.)
Of course I know of FTP (I don't use it and I think that HTTP is much better), Gopher (I still sometimes use), etc.
Mostly ANSI terminal emulators are used today, although xterm also supports Tektronix emulation as well, although as far as I know nobody uses it these days (I have only used it once).
I know of the games before GUIs, and even still play some of those older games these days (and have written some).
Of course, I know what ASCII and UTF-8 are, although I mostly don't use UTF-8; I mostly use purely ASCII (and when needing non-ASCII, prefer character sets other than Unicode). Some of my (modern) designs do use the ASCII controls for similar meanings than their original uses. Actually, it is not only myself; even a mode in the SQLite command shell, and some other formats I have seen, are able to use the ASCII separator controls for those purposes. It is rare, but there are a few people who have made use of them.
Also, you will sometimes see notations such as "^H" and "^W" where strike through is unavailable. CTRL+G for bells is still used on terminal emulators at least what I use (and the NNTP client that I had written will use that to ring the bell once the download of a set of articles is complete). Actually, even sometimes when I play the GURPS over the computer, we will use the bell to notify the other side that we are ready.
And, of course CRLF will still be used when working with DOS programs (and, fortunately vi can be switched to CRLF or LF only mode, so this is useful when you are using it to edit DOS programs).
I have not used 36-bit computers nor punched cards, although I have used emulations of punched cards. I also dislike the syntax for octal literals in C (starting with "0o" instead of just "0" would be better, or starting with "8#" like in PostScript would be another way), although I do sometimes use octal (although it is rare; I use hexadecimal much more often, and so does everyone else).
...or written code to do the same, albeit programmatically.
Our tradition during new hardware installs, yelled through the datacenter over CRAC, wind and fan noise:
A: You said blue one, but it's not connecting to $NETWORK_DEVICE
B: Try the other, slightly darker blue one, with the sticker XYZ. That's the one I used IIRC.
A: Oh, OK.
(Something that can easily be true, even while he has done some small number of valuable things. Though I do claim this essay is not one of those things)
Everyone laughed. I went on to share a cringy story of ESR hitting on my then-wife. Which inspired a woman present to speak up and share a story of ESR hitting on her. Which lead to the next and then next story, until every last woman in the room shared their own ESR story.
I was astounded. I'm hardly the biggest fan of political correctness. But to the extent that political correctness is a backlash, ESR represents what it is a backlash against.
The thing is that his advice offered there isn't even particularly bad. But he'd just taken the importance of being confident when hitting on women to a ridiculous extreme. With no self-awareness.
My ex found an unattractive cripple introducing himself. She didn't know who he was. His pass was essentially, "I'm worth $30 million. You may touch me. I might fuck you later." Her response boiled down to, "Eww."
She was shocked to later find out that his first line was actually true at the time. (This was a few days after https://lwn.net/1999/1216/a/esr-rich.html.) But, that notwithstanding, her response remained, "Eww."