2022 TODO

No looking back. Burn our 2021 ships behind us. Forward is death or glory.

  • Ship Haunted Dungeon. Work on other games which are not CRPG/roguelike for a while.
  • Write more Scheme, maybe publish some of it. If Scheme's so efficient, why am I such a bum who can't ship?
  • Playtest & ship my new tabletop RPG.
  • Boardgames? I've been thinking about condensing some of my ideas into a more concrete, boardgame model. Print or software, I dunno yet.
  • Read more, watch less garbage/browse the web less. I didn't do too badly on reading in 2021:
    • Fujino Omori: Is It Wrong To Try To Pick Up Girls In The Dungeon light novel. I loved the anime, and played the mobile game for like 2 years, it's being adapted too slowly for my taste, so I read the books some. It's amusing easy-reader trash about JRPG fantasyland, and I don't care.
    • Tim Pratt: The Wrong Stars. Started on the sequel and it sucked, DNF.
    • Michael Warren Lucas: Drinking Heavy Water, Butterfly Stomp Waltz
    • Alastair Reynolds: Shadow Captain, Bone Silence, The Prefect, Elysium Fire, Beyond the Aquila Rift (had read several in earlier mags/collections, but many were "new"), Revelation Space, Redemption Ark. Look. I'm aware that's too many. But I want to read the new one, so I have to catch up and I'd forgotten everything in the RS setting.
    • Rudy Rucker: Million Mile Road Trip (been sitting on tsundoku for too long)
    • Neal Stephenson: Cryptonomicon (reread after 22 years). Dude, Neal used to be able to write a doorstop I liked reading.
    • Andy Weir: Project Hail Mary
    • Martha Wells: Fugitive Telemetry
    • random old pulps from the '40s-80s off archive.org. Complete Manly Wade Wellman in Weird Tales has been a nice trip, lot of Fritz Leiber and Roger Zelazny.
  • Top of my tsundoku:
    • Hannu Rajaniemi: The Quantum Thief
    • Alastair Reynolds: Absolution Gap, Chasm City, Inhibitor Phase and then I will be free! I might go a year or more without another Reynolds book oh sweet mother of fuck yes.
    • Rudy Rucker: Juicy Ghosts, have read the short story
    • Martin Gardner: The Last Recreations
    • Isaac Bonewits: Real Magic an Introduction (research for better game design!)
    • Black Magic Omnibus vol.1 & vol.2
    • Andrzej Sapkowski: Time of Contempt. I read up thru Blood of Elves a couple years ago (prompted by the TV show, yes), and keep picking up the next one and stopping. I dunno why, they're pretty similar to my D&D-type fantasy campaigns.
  • Do some more software & project maintenance. A lot of my stuff that I have in various places is either unmaintained, broken, or just unadvertised in any way. Might set aside one work day a week to this.
  • Actual contract work. I'm never going back to an office in my life. I should be #1 online earner, but I really can't be arsed to talk to recruiters, clients, get the job, and do it, a lot of the time. Probably should be slightly more than zero productive citizen.

Dear Santa

Hey, Big Red.

I'm… look, good and bad are relative terms at the best of times, but this whole year I ain't killed anyone nor committed insurrection against my country, so you're grading on a curve, right?

Great. All I want is… it's a little harder than just some Star Wars figures…

  • JWST launch to go correctly. I really need this one. Less than a day to go.
  • Not to die in a nuclear apocalypse over any of the multiple pending wars. Bad part of the '70s/'80s/'90s lifestyle.
  • Continue not finding lumps in places that oughtn't'a have lumps.
  • Internet to continue working long enough for me to download survival manuals for the post-apocalypse lifestyle to come.
  • A bottle of Scotch, Laphroaig Quarter Cask, or you know, whatever hooch your elves make is fine.
  • Can I have one sequel, remake, or side story flick in a series I like that isn't an absolute dumpster fire? Like, TRON: Legacy was OK. How about The Last Starfighter II and it's not terrible? That's probably too much to ask. Peace on Earth, Goodwill to Humanity is more plausible.

Thanks in advance. It's been a rough one.

Matrix Rain for Atari

I haven't seen the new movie yet, but I was in a mood to do something this primitive.

  • Matriculated Rain: matrix.atr: Download, unzip, load in your Atari 8-bit computer or emulator of choice (Atari800MacX: ⌘D, select this as D1), and reboot (Atari800MacX: sh-F5). There's probably some way to ESCAPE.

It'll go into attract mode eventually, which I think is cool, add 11 POKE 77,0 to disable it. Or any key that doesn't exit will clear it.

Not any really interesting coding tricks, except I replaced POSITION:? with POKE for speed. I use PEEK(764)=255 and then re-POKE it to test if there's a waiting key, but then use GET to read it in ATASCII instead of scan code.

(updated almost immediately: I realized on XL machines I can turn on accented characters instead of graphics blocks. Take out the POKE 756,204 line if you don't like that.)

(updated 2021-12-24: I made it pour in from random starts, rather than top of screen, looks somewhat more like the old intro.)

When View Source is Outlawed…

… only outlaws will have View Source.

  • mhoye post: Google is pushing thru disabling View Source in Chrome.

I'm impressed but unsurprised that nobody at Google said "wait, is this the right thing to do?", because of course they didn't, they're at Google, they already failed any moral test.

Like every nerd of a certain age, I learned web dev by doing View Source, and to this day it's my basic tool for finding out how/why/stop doing a thing on a site. Safari's inspector hasn't been crippled yet; given Little Timmy "Apple" Cook's bullshit about platform lockdown lately, I'm concerned.

So, this aggression will not stand, man.

I have a View Source bookmarklet which works fine in Mobile Safari and Chromium. It's only inline, and you have to copy-paste into a real editor to do much, but it gives you the site's content. They can't stop you.

wget or curl are useful ways of grabbing a page and all its resources.

Of course the real l33t h4xx0rz know:

% telnet foo 80
GET / HTTP/1.1
Host: foo<ENTER><ENTER>

Or you can make stelnet for https sites (thanks to @feld for the )

% echo 'openssl s_client -connect "$1:$2"' >bin/stelnet
% chmod 755 bin/stelnet
% stelnet foo 443
GET / HTTP/1.1
Host: foo<ENTER><ENTER>

Fuck those guys.

A Flotilla of Shit

Modern software is junk. Almost every program uses vastly more resources than it needs, and does its main task worse than older, more focused programs.

I don't think I have a single "new" program that's as good as the thing it replaced, not a single program as good and light as the stuff we had 30 years ago. So where possible I use 30-40 year old software, and I resent the complex stuff I have to deal with. It's polluting the planet, literally boiling the oceans.

Case 1

This blog is in WordPress, which is in PHP on a giant tower of shitty software, like 20 "plugins" to fix things that are inadequate and wrong in it. I've done what I can to lighten it some, streamline layout, but that's lipstick & yoga pants on a pig. 25 years ago I had a simple blog (uh, actually also in PHP, tho I had another one in Perl, so that's not any better). But that was <1000 LOC, it just needed a tiny local database, and really could've just used flat files. And before the blog, I had just my hierarchical web site, and before that I had Gopher.

Gopher was basically perfect. Just a structured tree of documents, accessed by raw socket connections or manually by telnet. If you wanted to make a journal ("web log" -> "blog" was a decade away), you put links to plain text entries on a Gopher menu.

iMark's Gopher Hole _   _   0
gMugshot    /images/mark.gif    example.com 70
1Games  /games  example.com 70
iJournal    _   _   0
01990-09-01 /journal/1990-09-01.txt example.com 70
01990-08-25 /journal/1990-08-25.txt example.com 70

etc. Actually at the time I probably would've done chronological order, not reverse.

We have Gemini now trying to be like Gopher, but it has TLS, and a complex connection protocol, and error messages (Gopher just responded "3" if something went wrong, possibly followed by a message), and then the page you get is presentation, not a menu; it doesn't tell you the content type of any link, it tries to style content in-line, like a lower-resource WWW. But to run Gemini, you need a web server to update TLS, it won't stay up without constant maintenance, and it uses more resources than just serving a web page.

Case 2

Mastodon is a giant database that constantly messages other databases to tell them about posts… and it still sometimes takes a while to propagate messages, or fails utterly. There's no markup except URLs, and either polls or images (can't have both, and aren't inline). The only control you have over your experience is blocking people, and crude text-match filters.

30 years ago, we had USENET, email, and IRC/ICB chat. USENET was often slow, some servers would only connect once a day, others every hour, some every 15 minutes or so. You might need a couple hops to get to someone. But your message length was unlimited, most clients handled some markup with *bold*, /italic/, _underline_, and <URLs and FTP hostnames>. Images had to be UUEncoded, but most clients could insert them easily, graphical ones could display them inline, and download them; I used text-only strn so I'd download and run xv to see images. But the power we had in those clients was so much better. strn did scoring, I had thousands of lines of regular expressions and header lines to match with scores up or down. I'd go into a newsgroup, and the best stuff would be at the top, mediocre stuff below it if I cared, junk and spam and assholes deleted.

If you wanted to immediately contact someone, email or chat existed. There's an experimental chat system on Pleroma, but not on Mastodon yet/ever. Or you can use the modern equivalent of that, burn 1GB of RAM and a CPU core running Slack or Discord. Madness.

Case 3

Emacs. Eight-hundred Megs And Constantly Swapping. Is emacs the original sin, or were there flotilla-of-shit programs before it? Back in the day, you could start micro-emacs ("me" on Atari ST, later uemacs) in milliseconds, or emacs in many tens of seconds or even minutes. The emacs people would just leave this giant blob of an interpreter, editor, half an operating system but not really, running all day, eat most available RAM and CPU, and load files into it. The me and vi people would instantly open a file, edit, and close, barely a blip on the system resources. 30 years later, uemacs starts in nanoseconds, and emacs starts in seconds, but it's just as obnoxious.

Today I use BBEdit, which is svelte for an IDE, but it's a giant pig compared to what "a text editor" needs to be; I keep trying other IDE-types like Sublime Text or Atom, and they're too heavy for me to tolerate. And in console, I run Vim, which isn't as bloated as emacs, but it's fat. None of these make me happy. STeVIe was much lighter, and I've repeatedly considered going back to it if I can recompile it. I did manage to compile Linus' build of uemacs and it's nice, but I can't get used to it again after 25-ish years off it; my console habits are vi, it seems.


The end goal of software is not to put everything in it, a flight simulator in your spreadsheet (fucking Excel!); a computer in your fridge for playing ads; a web server, email client, and text editor in your math program "notebook"; a fucking NTFS miner in your MS Paint clone.

The end goal of good software is to do ONE THING. To do it fast, efficiently, and correctly, in the least resources you can.

Re-evaluate your use of flotilla of shit software, and dump it.

BASIC at 57

We had a lingua franca, including the first 15 years of personal computing, that could be taught in a few hours and immediately used practically, and then it vanished almost utterly in the late '90s. Two generations are completely illiterate in the language of their ancestors.

Now, there's a couple of heirs to BASIC.

Python mostly took that role. For a while it looked like every computer would have a good version, but then between the Python 2/3 fiasco and hardening systems, you mostly get an old Python shipped on platform, and have to manually install from Python.org. IDLE (with my IdleStart shortcut ) is still a pretty great REPL, editor, and runner. import turtle as T; T.reset() and you can start doing turtle graphics in 10 seconds. The Raspberry Pi Beginner's Guide has a lot of Python as starting language (and Scratch, which is more a cruel joke than a language), which isn't great at graphics on a low-power computer but it is possible. The problem is it's considerably slower than a good BASIC, can't make use of multi-core, and relies on Tkinter for most graphics, which is even slower. Python's an evolutionary dead-end.

JavaScript is everywhere, and trivial to get started with… except you immediately run into a security wall, so you have to run a web server (easiest is, ironically, python3 -m http.server -b 8000 which serves all files in current directory). Edit file, reload browser page. And then doing anything in JS is a big hike up the mountain of JS, HTML, CSS. But it does run. Teaching everything you need to do interactive programs in it is hard bordering on a semester's coursework.

Scheme and LISP can be used this way, as seen in the Land of Lisp book, and Racket, but SBCL is a complex and terrible runtime for an ugly dialect of LISP (IMO, don't throw bombs at me), Racket has a broken REPL and their focus is on language experiments, not so much being useful. The other Schemes vary from hard engineering to even launch, to easy enough but poorly supported like my favorite Chez Scheme. I've been working on a "Beginner's Scheme" book for a while, and it's hard to compress what you need to know to get anything done, into small, fun parts.

It's actually easier to do Programming on Your Phone.

But there's still nice enough BASICs, in particular Chipmunk BASIC, and the old BASIC books & magazines work fine in it:

Just make a BASIC folder, download all those PDFs into it, and read them to see how quickly they go from "here's the BASIC commands" to "write a real program". And how you can make computing fun, not a chore.

I've been spending a little "non-productive" time hacking on my BASIC CRPG that'll run on the SpecNext when it arrives later this year… I do my work for now in Chipmunk; because NextBASIC has some strict limitations, I keep those limitations in my program, like single-letter array names. Graphics will have to be totally rewritten (but most of the UI is text-mode and portable), some data storage, too. Happily NextBASIC does have named functions (PROC, or SUB in Chipmunk), local variables, and loops (REPEAT:WHILE x:...:REPEAT UNTIL x, verbose but usable), so there's less GOTO and no GOSUB in my code.

I thought the line numbers and other limitations would kill me when I started doing it again, but in practice it hasn't bothered me much. I start each logical section at multiples of 10 or 100, add 1 per line, indent function and loop bodies, rarely have to renumber them. Since I don't GOTO/GOSUB much, finding them is less of a problem, only time I need specific line numbers is RESTORE xxx for DATA.

I'm starting to see BASIC as an interesting language again: Low-level enough to do something on simple machines, and reveal exactly how your algorithms work, high-level enough that you can get something done (much easier than ASM). You wouldn't want to build a large system in it, but focused problems, "tunnels through rock" as Chris Crawford wrote in De Re Atari, are well suited to it.

The original home computers having "turn on, maybe hit one key, you're in BASIC" interaction was amazing, unparalleled in any other system since, and we need to get back to as close to that as possible.

VR Micro Online

I've got a new project in the works, VR Micro

A shared infosystem based on spatial reasoning,
a world of many interconnected maps,
with documents and services physically represented as objects.
Users have avatars and can see and interact with each other.

The short version is, this is a file share, as a memory palace by way of graphical adventure games. It is to "real" (but costs too much and makes you puke) VR, as HTML was to "real" (but never shipped) hypertext like Xanadu: It's small and simple enough to actually work. To be something a semi-normal person could run on a rented server and make some maps and share their thought world.

All I have so far is a spec, but I got the server stood up this morning, I expect to have a standalone client working soon™, and then can work on the server.

I plan to keep it all licensed BSD for code, CC-BY for content. You are of course encouraged to contribute feedback, source, content, and/or money.

Hey, you like this? Servers aren't free. You know I have a Patreon tip jar up there? <rattle> <rattle>

Nanorogue2 in BASIC

I've completed my BASIC 10-Liner contest entry, download on itch.io

Just shove the disk (.atr) in Atari800MacX or any other compatible Atari 800XL emulator, disable BASIC and hit reset, it should boot up into the launcher:

Where you can read docs or source:

And play the game!

So, the source for my first pass was manually-packed down, and I couldn't really fit everything I wanted in there, or switch to text-graphics mode. With some rethinking, and a better source editing tool, I could… So I wrote a filter program "Basic2List.py" that removes comments & blank lines, joins up everything after a numbered line with colons, lets me insert binary codes with \xFF escapes. It still looks a little dense, because I have to manually use abbreviated statement names or remove spaces, I'd like to make it smart enough about BASIC source to do that itself.

But it lets me turn source like:

5   POKE731,1       // noclick
    GR.1            // 20x20 wide chars, 40x4 regular
    SE.1,13,15      // palette 1 to gold
    W=20            // world size
    DIME$(27),M(W,W)    // E$() encounter table, M() map
    H=10        // Hit Points
    L=1     // Level
    // G=0      // Gold, default value


5 POKE731,1:GR.1:SE.1,13,15:W=20:DIME$(27),M(W,W):E$="RRRZZZD$$..........#######>":H=10:L=1:?"NANOROGUE BY MDHUGHES"

(except the RRR... are inverse & graphics chars)

See the Atari BASIC Quick Reference Guide to learn the abbreviations and some of Atari's peculiarities. And it's running in Turbo Basic XL which really helped the program size, so I was able to squeeze in stairs!

Last time I was using the compiler, and that worked but it distorted my sounds, and I couldn't make LAUNCHER.CTB run NANOROG2.CTB! So if I just left them all uncompiled (but tokenized) .BAS files it works fine.

The only down side is it's stuck in easy mode. I'd love to have a difficulty which increases the GP to Level Up, and makes monsters hit harder (but not reward more), but that didn't quite make the cut.

Generally I'm pretty pleased by this!

The ZX Spectrum (non-Next) port is turning out to be hard, it lacks a few things and doesn't have ELSE, either, so I don't know if it can be done.

10-Line BASIC Contest

Let's go back to the 1980s!

So I knocked down a tiny subset of my already tiny BASIC demo program, NANOROGUE, and plan to make 10-line versions for Atari 800 and ZX Spectrum. Getting it running on desktop in Chipmunk BASIC was trivial. Just a little ANSI for screen positioning.

Initially I just used standard Atari BASIC, and that worked fine, if very very tightly packed, and not fast… but the lack of an ELSE statement left me with an 11-line program, I wanted to end with 50 ... :GOTO 20:ELSE:GOTO 20:ENDIF but had to move it to a new line. Very frustrating. So I'm using an enhanced BASIC, which is allowed for the PUR-120 tier, for one command.

Being "compiled" (to bytecode, don't expect miracles) and making AUTORUN.SYS easier than my own utility is nice. TBXL is at least a 1985 tool; though at the time I was using the "official" BASIC XE cartridge instead, which had similar features, and mainly moving over to Action!, 6502 ASM, and C. But for retrocomputing it's fair game.

Making a TBXL executable & bootable disk is a little fussy.

  1. Make a blank floppy ATR (emulator disk format), format it, put Atari DOS 2.5 on it or whatever you like (from DOS 2.5, H to write DOS files). This is your program disk. Like TRON, everything you do will be encoded on it, and losing it will subject you to immediate deresolution.
  2. Turbo BASIC XL disk in D1, program disk in D2. Control menu, Disable BASIC, Cold Reset (Sh-F5). You should see a red load screen, then READY. Check you're in TBXL by typing DIR.
  3. Write your program. I recommend writing BASIC as LST files in a desktop editor, then Cmd-E "Edit an atr disk image", click "Atari/Mac Linefeed Translation", "Import Files From Mac". In BASIC, ENTER "D2:FOO.LST". RUN to test it. But if you like living the '80s lifestyle all the way (or using non-ASCII chars, which are annoying to work with), you can work entirely in TBXL.
  4. Save your program tokenized: SAVE "D2:FOO.BAS"
  5. BRUN "D1:COMPILER.COM", now swap D1 and D2 (Cmd-D, click the swap buttons; you want your program disk in D1!), hit 1, pick FOO.BAS, save as AUTORUN.CTB. Swap disks back (you want your program disk in D2!).
  6. Ctrl-D, J for Ja (yes) to go to DOS-XE. COPY D1:RUNTIME.COM D2:AUTORUN.SYS
  7. Now put your program disk in D1, reset, and it should come right up into your program, then prompt for Dos, Run, or Load when it ends. Nice!

So resuming work on NANOROG, I get:

The only down side is this tiny version has a very slow redraw, it renders the entire screen each move, instead of just fixing last/new positions. I'm pondering changing it to graphics 1 (wide text, 4 colors) and poking screen memory which is probably faster than printing. I made some acceptable bleeps and buzzes with SOUND commands; I'm a poor sound designer, but I get there with some trial and error.

Anyway, next week's task is the ZX Spectrum version. Speccy BASIC is pretty good, so I expect I can knock that out quick and without all these shenanigans.

Portable Computing Devices

"Dr Ed Morbius"[sic] posts The Case Against Tablets and one of the most unusable tables I've ever seen (too much data with no affordances, and Diaspora's design crops anything complex). But the premise is interesting, especially as I'm considering my next wave of new hardware. He's just going about it the wrong way (no, really, Samsung of the exploding batteries is bad? Tell me more news.), and then frustrated he can't succeed by going the wrong way.

So, luggables have been around since (counting only devices usable by the general public) Osborne I (1983, 10.7kg), tablets since Kyocera Kyotronic 85 aka TRS-80 Model 100 (1983, 1.4kg), laptops since Toshiba T1100 (1985, 4.1kg). It's been possible to have handheld computing since at least the Apple Newton MessagePad (1993, 640g), and Palm Pilot 1000 (1996, 160g). I've used but didn't own most of those, mind, just a Sharp PC-3, Psion, slightly later Toshiba and IBM laptops I hated, a bunch of Palm devices. I read many ebooks (Baen's early CDs of ebooks were great! Pity they mostly ship right-wing milsf these days), and 160x160 2-bit grayscale is not ideal. I have, as they say, seen some shit.

These days, the choices of hardware are a little better, thousands of suppliers, almost all of which fit into a few categories:

_ iPhone iPad Apple M1
Price mid-y mid-y hi-r low-g low-g hi-r mid-y hi-r
Weight/Bulk low-g mid-y hi-r low-g low-g to mid-y mid-y hi-r hi-r
Battery hi-g hi-g hi-g mid-y low-r mid-y mid-y low-r
Performance hi-g hi-g hi-g mid-y low-r to mid-y mid-y mid-y hi-g
Security hi-g hi-g hi-g low-r low-r mid-y mid-y mid-y
Books low-r hi-g mid-y low-r hi-g hi-g low-r low-r
Video mid-y hi-g hi-g mid-y hi-g hi-g hi-g hi-g
RSS/news sites mid-y hi-g hi-g mid-y hi-g hi-g hi-g hi-g
Social media hi-g mid-y low-r hi-g mid-y mid-y low-r low-r
Online shopping low-r mid-y hi-g low-r mid-y mid-y mid-y hi-g
Reference hi-g mid-y low-r hi-g mid-y mid-y low-r low-r
Videogames mid-y mid-y hi-g mid-y mid-y mid-y low-r hi-g
Writing low-r mid-y to hi-g hi-g low-r mid-y mid-y to hi-g hi-g hi-g
Programming mid-y mid-y hi-g low-r low-r mid-y mid-y hi-g

Figure out the things you care about, and pick whatever has the most green, maybe yellow, avoiding red cells. Now you know what to buy.

What do you actually care about?

  • Price: You do largely get what you pay for in this category. Apple's devices aren't really much more expensive than equal hardware, but they never ship anything in the bottom price category. They do gouge on the top memory prices, which is unpleasant. But any Apple device will last for years longer than Android or a cheap PC, and have good resale value. The incredibly low prices on Android stuff is tempting, but it's a trap ("get an axe").
  • Weight/Bulk: These days almost everything's under 2kg like a good sword, but holding up an iPad over your head in bed is very liable to fall and break your nose; this is one place where a phone or phablet is superior. Obviously holding a heavy laptop up is incredibly dumb, and they're completely useless while moving, standing, etc., can't be propped up anywhere, are just always in the way.
  • Battery life: It's easy for manufacturers to lie about this, but if you run a real workload, you quickly see how wasteful any x86 PC is. Everyone else, it comes down to power management.
  • Performance: Only matters for Videogames and maybe programming. But Apple's been putting absurdly powerful CPUs and GPUs in their mobile devices, A12 is essentially the same as the M1 in the new Macs. Only the fastest AMDs or Intel are even competitive, and those burn too much power to be good mobile devices. Benchmarks are hard to compare exactly, but: anandtech on A12Z puts it pretty high against laptops. 2 years later, that's the SOC that's now in the lower-end iPhone and iPad.
  • Security: I'm not trying to be biased here, but if you are concerned with security at all, you really only need to look at those first three columns. There's just no alternative at present.

    Only a fool would trust anything running Android, they often ship with malware, everything in the stores is contaminated and has ridiculous lists of permissions, and they stop updating at "EOL" which may come as soon as it ships, rarely more than 6-12 months later. Do not put anything of value or interest to others in your Android device.

    Microsoft wants to be good at security, but is functionally terrible at it. They live in an open sewer of constant attacks, and have cardboard walls of bad software. Your mobile device may be pwned and all your files crypto-ransomed the second you connect it to the Internet. MS monthly updates sometimes wipe drives or lock you out, those are just from the last year, I'm sure they'll fuck up new ways this year.

    One can, one supposes, install BSD or Linux on a laptop, but that just makes it unusable for most of the tasks below.

    You know who actually seems able to keep secure borders? The walled Apple garden. Other than nation-states getting physical access to an older device, and if you're not stupid enough to turn on iCloud backups for things you need to stay private (iMessage!), you are almost entirely safe on iOS or Mac OS.

The tasks you might reasonably do with a portable computing device are:

  • Books: Cannot be read comfortably on a small screen, or landscape laptop. Needs a good document management program. On iOS, there's Readdle Documents, which is a great storage/reading hub for almost everything. On the Mac, I use Murasaki to read epub, except those in Apple Books. On Android, I've found ReadEra and Simple File Manager do that well, are pleasantly minimalist, and are not apparently run by criminals out to rob you, unlike 99% of Android software. I guess on Windows you can just keep things in folders and click on them? As noted every time I have to use Windows, I don't know how people use that.
  • Video: Not ideal on small screens, but I've found almost everyone has caught up now. Everyone has players for all the major streaming services, can play web video fine. Android file management of videos is awful. Windows seems OK at this. The real losers, tho, are BSD and Linux laptops; they can't do any DRM video without jumping thru excessive hurdles. I've been fighting this off and on for a decade with my side terminals, and mostly end up playing video on the Mac desktop instead.
  • RSS/news sites: Relies on having a big screen for 2-pane or 3-pane view, and good RSS reader. I use Reeder on mobile, and Feedbin on desktop; there's inferior but functional apps on other platforms.
  • Social media: Doomscrolling is best done at arm's reach, where you can instantly push home or just throw it away to get away from it. You need a camera attached, so I don't consider laptops suitable at all. Can you imagine someone holding their laptop over their lunch or up for a selfie?
  • Online shopping: Requires multiple tabs, note-taking, preferably a spreadsheet. On the latest iPads, you can split-screen a notepad or Numbers and a browser, which definitely helps, but a laptop or desktop works best here. I don't know how you would even do this on Android, where programs rarely keep their contents when hitting Back a bunch of times.
  • Reference: Here I mean on-the-spot "what's the answer to X?". Mostly checking wikipedia or Memory Alpha. So just a tiny bit of typing in search, maybe poke at a couple followup links, not extensive reading. 12 years ago I started doing this with my Treo, and it was addictive. This is an ideal use of a smartphone, every second that passes until you can Kirk someone with your online knowledge, it becomes less interesting.
  • Videogames: All mobile devices suffer from shitty controls. Cheap computers suffer from shitty GPUs; these days mobile GPUs are better. Macs don't have as many games as Windows, the official hybrid Excel/Call of Duty OS, but it's fine. The whole category shouldn't exist, we should just play games on the Switch or consoles, but it persists. Go play catch with your dog, it's more fun than poking at a tiny screen.
  • Writing: Long-form writing depends on screen, keyboard, and editor. There's plenty of BT keyboards for every mobile device. The original iPad had a keyboard dock stand which I bought with mine, and used until I got a better one; I now mostly use a Zagg keyboard with it, or just type on-screen. The current low-travel keyboard cases for Surface, iPad, etc. are kind of awful to type on, but they're very portable. Laptops will always win here, you can sit upright at any table and type ergonomically, and still have functioning hands in a decade. Even with an external keyboard, I find phones too small to compose much text on.

    The editor situation is more complex. I love Editorial (by the author of Pythonista), and it's great for writing text in Markdown, and is scriptable. Pages is fine for short, pretty documents, but it's incredibly slow as your document gets long, and very fiddly when you adjust layouts. There's dozens more on iOS, of varying quality. MS Word runs on iOS, Android, and something called "weeendows"; it's mildly awful but standard. I've found no native Android writing programs that weren't hate crimes, but I'm not super motivated to try every one.
  • Programming: As noted in Programming on your Phone, there's only a few good environments for iOS, but Pythonista is so good it makes up for a category. I've now seen a few Android programming environments, and they're comically, hatefully bad. Surface would be fine, except it's Windows; the only way to dev on that crap is a giant IDE that really needs a high-end desktop computer. Again you might put BSD or Linux on a laptop, but now it's useless for anything else.

I don't rank Drawing, even though that's a very important task for some people, because I'm not qualified to evaluate it; I can draw stick figures and collage art/"memes", but is the Apple Pencil super great? Maybe. What do the others have? No idea. Apparently MS reinstated MS Paint to their program store?

In hardware, I ignored e-ink readers because I find them unusable; a 2-4 second lag when flipping pages or trying to type anything is just unacceptable. We have cheap, low-power, high-refresh-rate LCD screens now, there's absolutely no benefit to e-ink. If you can stand it, fine, but I have no idea how to evaluate a thing I can't even look at.

(my table's not ideal because WordPress fights me; writing this in BBEdit/multimarkdown, I had the column labels rotated 90° with CSS, but for some reason WP positioned them wrong! I could render the HTML and paste that in, I guess, but then it's not easily editable later. And the margin of my site theme is a pain; I keep threatening to rewrite the style sheet entirely. Also, I'm aware there's colorblindness, but safe colors for them look awful to everyone else; so read the -r -y -g labels.)