Vim the Next Generation

So I figured I should modernize my Vim skills, from 1995 to 2023. A lot's changed since I last configured Vim.

Installed a modern MacVim, in my case sudo port install MacVim. It's launched with mvim, but I just change alias v=mvim in my .zshrc

In the code blocks below, ~% is my shell prompt, ## filename shows the contents of a file, cat into it or whatever. Neither of those lines belong in the file!

To start, I want to use vim9script. So my old .vimrc now starts with that mode command, then I changed all my comments from " to #. Not much else had to change. The way to detect MacVim etc is clearer now, and I can get ligatures from Fira Code!

Syntax highlighting files can just be dropped in ~/.vim/syntax/

Update 2023-04-11: added statusline highlight colors, under syntax loading

## .vimrc
vim9script
# Mark Damon Hughes vimrc file.
# Updated for Vim9, 2023-04-09
#
# To use it, copy it to ~/.vimrc
# Note: create ~/tmp, ~/.vim, see source commands below.

set nocompatible    # Use Vim defaults (much better!)
filetype plugin on
set magic
set nrformats=

set errorbells
set nomore wrapscan noignorecase noincsearch nohlsearch noshowmatch
set backspace=indent,eol,start

set nosmarttab noexpandtab shiftwidth=8 tabstop=8

set encoding=utf-8 fileencoding=utf-8
set listchars=tab:__,eol:$,nbsp:@

set backup backupdir=~/tmp dir=~/tmp
set viminfo='100,f1,<100

set popt=header:2,number:y  # 2=always

set tw=80       # I use this default, and override it in the autogroups below

# ctrl-] is used by telnet/ssh, so tags are unusable; i use ctrl-j instead.
set tags=./tags;/
map <c-j> <c-]>

# Don't use Ex mode, use Q for formatting
map Q gq

map <Tab> >>
vmap <Tab> >
map <S-Tab> <<
vmap <S-Tab> <

# Always have syntax highlighting on
syntax on

# https://github.com/mr-ubik/vim-hackerman-syntax
# changed:
# let s:colors.cyan         = { 'gui': '#cccccc', 'cterm': 45 } " mdh edit
# let s:colors.blue         = { 'gui': '#406090', 'cterm': 23 } " mdh edit
source $HOME/.vim/syntax/hackerman.vim

set laststatus=2    # 2=always
# %ESC: t=filename, m=modified, r=readonly, y=filetype, q=quickfix, ff=lineending
# =:right side, c=column, l=line, b=buffer, 1*=highlight user1..9, 0=normal
set statusline=\ %t\ %m%r%y%q\ [%{&ff}]\ %=%(c:%02c\ l:%04l\ b:%n\ %)
set termguicolors
hi statusline guibg=darkblue ctermbg=1 guifg=white ctermfg=15
hi statuslinenc guibg=blue ctermbg=9 guifg=white ctermfg=15

hi Todo term=bold guifg=red
# Use `:set guifont=*` to pick a font, then `:set guifont` to find its exact name
set guifont=FiraCode-Regular:h16
if has("gui_macvim")
    set macligatures
    set number
elseif has("gui_gtk")
    set guiligatures
    set number
endif
set guioptions=aAcdeimr
set mousemodel=popup_setpos
set numberwidth=5
set showtabline=2

augroup c
    au!
    autocmd BufRead,BufNewFile *.c set ai tw=0
augroup END

augroup html
    au!
    autocmd BufRead,BufNewFile *.html set tw=0 ai
augroup END

augroup java
    au!
    autocmd BufRead,BufNewFile *.java set tw=0 ai
augroup END

augroup objc
    au!
    autocmd BufRead,BufNewFile *.m,*.h set ai tw=0
augroup END

augroup php
    au!
    autocmd BufRead,BufNewFile *.php,*.inc set tw=0 ai et
augroup END

augroup python
    au!
    autocmd BufRead,BufNewFile *.py set ai tw=0
augroup END

augroup scheme
    au!
    autocmd BufRead,BufNewFile *.sls setf scheme
    autocmd BufRead,BufNewFile *.rkt,*.scm,*.sld,*.sls,*.ss set ai tw=0 sw=4 ts=4
augroup END

Package Managers & Snippets

Next I need a package manager. I've settled on vim-plug as complete enough to be useful, not a giant blob, and is maintained. There's at least 7 or 8 others! Complete madness out there
(I've already picked one, I don't need further advice, and will actively resent you if you give me any. I'm just pointing at the situation being awful.)
Install's easy, drop it in autoload, mkdir -p ~/.vim/plugged

The first thing I want is a snippet manager, and SnipMate's the best of those. Edit .vimrc at the end, set your "author" name, it's used by several snippets.

## .vimrc
call plug#begin()

Plug 'https://github.com/MarcWeber/vim-addon-mw-utils'
Plug 'https://github.com/tomtom/tlib_vim'
Plug 'https://github.com/garbas/vim-snipmate'
Plug 'https://github.com/honza/vim-snippets'

g:snips_author = 'Mark Damon Hughes'
g:snipMate = { 'snippet_version': 1,
        'always_choose_first': 0,
        'description_in_completion': 1,
    }

call plug#end()

Next part's super annoying. It needs a microsoft shithub account; I made a new one on a throwaway email, but I don't want rando checkouts using my real name. includeIf lets you choose between multiple config sections, so now I have:

## .gitconfig
[include]
    path = ~/.gitconfig-kami
[includeIf "gitdir:~/Code/"]
    path = ~/.gitconfig-mark

## .gitconfig-kami
[user]
    name = Kamikaze Mark
    email = foo@bar

## .gitconfig-mark
[user]
    name = Mark Damon Hughes
    email = bar@foo

~% git config user.name
Kamikaze Mark
~% cd ~/Code/CodeChez
~/Code/CodeChez% git config user.name
Mark Damon Hughes

But shithub no longer has password logins! FUCK.

~% sudo port install gh
~% gh auth login

Follow the prompts and it creates a key pair in the system keychain. I hate this, but it works (on Mac; Linux install the package however you do, it works the same; Windows you have my condolences).

Now vim, :PlugInstall, and it should read them all. I had to do it a couple times! Then :PlugStatus should show:

Finished. 0 error(s).
[====]

- vim-addon-mw-utils: OK
- vim-snipmate: OK
- vim-snippets: OK
- tlib_vim: OK

Let's create a snippet!

~% mkdir .vim/snippets

## .vim/snippets/_.snippets
snippet line
    #________________________________________

snippet header
    /* `expand('%:t')`
    * ${1:description}
    * Created `strftime("%Y-%m-%d %H:%M")`
    * Copyright © `strftime("%Y")` ${2:`g:snips_author`}. All Rights Reserved.
    */

And if I make a new file, hit i (insert), line<TAB>, it fills in the snippet! If I type c)<TAB>, it writes a copyright line with my "author" name; it's highlighted, so hit <ESC> to accept it (help says <CR> should work? But it does not). Basically like any programmer's editor from this Millennium.

Update 2023-07-24: Added header, which is my standard document header, expand is filename with extension, rest are self-explanatory. Sometimes I add a license, which SnipMate preloads as BSD3, etc.

Use :SnipMateOpenSnippetFiles to see all the defined snippet files.

File Tree

NERDTree seems useful; read the page or :help NERDTree for docs. Add another plugin in .vimrc just before call plug#end(), do a :PlugUpdate, and it's that easy. But I want to hit a key to toggle the tree, and another key to focus the file, which takes me into the exciting world of vim9 functions.

## ~/.vimrc
Plug 'https://github.com/preservim/nerdtree'

# open/close tree
def g:Nerdtog()
    :NERDTreeToggle
    wincmd p
enddef
nnoremap <F2> :call Nerdtog()<CR>
# focus current file
nnoremap <S-F2> :NERDTreeFind<CR>

Update 2023-04-11: In NERDTree, on a file, hit m for a menu, and you can quicklook, open in Finder, or reveal in Finder, and much more. Doesn't seem to be a right-click or anything functionality, so it was not immediately obvious how to make it open my image files, etc.

And I think that's got me up to a baseline modern functionality.

An Atari New Year!

I spent a little time this evening making some fireworks for tomorrow night!

Download, unzip, launch in your favorite Atari 800 emulator, like Atari800MacX

Pick Y from the menu, ESC to end, reboot to get back to the menu. See you in a year!

(I didn't get around to putting an emulator page on my site; I will before my next actual game)

How to Fediverse

Since everyone is finally joining Fediverse as the maniac burns down Twitter shitbird, I have some more advice, after 6 years on (plus some OStatus way back when):

  1. Don't be a dick. Be kind, and even if you like arguing (as I do), don't go off the rails. We're hopefully here to have fun and build little communities. This isn't the Torment Nexus®, it's not a hell where your punishment is to be with every other shitbird user forever.

  2. Pick any instance except mastodon.social or mastodon.online, those are run by mstdn gGmbh (aka Gargamel), gigantic, massively overloaded, poorly moderated now and for the foreseeable future. Also don't join an instance blocked by everyone else, see the list of moderated servers - if in doubt, ask a friend on already on fediverse.

  3. Set your avatar, write a bio. Put your interests in there. Blank accounts might be pigs or advertisers. We fear faceless intruders.

  4. Toot (what we call posts) at least an - maybe pin that on your profile (ellipses … menu under the toot).

  5. THEN you can follow people, see Local or Federated timelines or look thru follows/mentions. If you know someone's @userid@host, put that in the search box, hit enter, it'll show up in a list, and you can pick it there.

  6. When you write something good, pin it. Read pinned toots to know who and what people are. I'm amused by people faving all my pins, but it's a little noisy.

  7. CW (content warning) ANYTHING someone might be bugged by. ESPECIALLY politics, pictures which might be even a little slutty or eye-contact, gross, whatever. CW anything that might annoy or trigger someone. If you don't do this, you will be rapidly blocked by almost everyone. This is maybe the single most important bit of etiquette.

  8. When you toot pictures, write a description. It doesn't have to be long, but the key text & image & context. There are blind users, and those on text-only interfaces. There are online OCR sites or on macOS/iOS you can just open it, copy-paste the text. If the picture is NSFW or blinking or otherwise annoying, hit NSFW to blur it out until it's clicked on.

  9. Don't crosspost from shitbird. "Free content!", no. Nobody wants that, nobody will read you.

  10. Favorite just sends a "hey, cool" beep to the author of the toot. Boost sends it to your followers as well. There is no algorithm, just a timeline! So if you like something, boost it!

    • If you don't like seeing a lot of boosts from someone, open their profile, and hit ellipses … and "Hide boosts from user".
    • If you don't like seeing ANY boosts, open 3-seashells ㆔ menu under Home, and uncheck "Show boosts".
  11. Full-text search doesn't exist mostly; some servers allow searching your own toot text only. Hashtags, userids, and toot URLs can be searched for. Put in all your toots that you want to find again, or want anyone to see in a topic search! should be camelCasedLikeThat, for screen readers; avoid punctuation in hashtags.

  12. Mastodon starts in a single-column simplified UI. It has a much better mode:

    1. Settings, Advanced Web Interface, check. Back to UI, and you have 3+ columns.
    2. The 3-seashells ㆔ menu on each column lets you modify it.
    3. Search for a hashtag, hit the 3 seashells under that search, +Pin.
    4. Hit 3-seashells ㆔ again, add even more tags, so you can have your own constant search for a whole topic.

    There are also lists of users, so you can see JUST the important stuff, and in the next update (rolling out to servers soonish) you can follow a hashtag, but that puts it in Home, which may be too busy.

Welcome to fedi, here's your pineapple and jorts.

Look on my Tweets, ye Mighty, and Despair

And on the pedestal, these words appear:
My name is Ozymandias, King of Kings;
Look on my Works, ye Mighty, and despair!
Nothing beside remains. Round the decay
Of that colossal Wreck, boundless and bare
The lone and level sands stretch far away.
—"Ozymandias", Percy Bysshe Shelley

Immediately after ElmoNusk came into shitbird central with a sink (what), he fired the old management (and claims he doesn't need to pay their bailouts), and is already "making redundant" the workforce (before having to pay off their stock vesting). Win or lose, his scam there is funny; the people who built the Torment Nexus deserve punishment, but he's likely to have to pay out more in legal fees by the time it's over.

Already the shitbird to Fediverse migration is going well, the stats account I follow shows a couple million up, which might be half the "MAU" Humans left on shitbird, the rest being bots and defunct accounts. Shitbird's stats describe anyone posting 3-5 weekly as a "heavy tweeter", which many of the actual people I know do per hour. I've got a lot of new followers, and my policy is "followbackfriday", every Friday I go thru my new follows and see who's filled in their avatar, bio, and an intro post at least. I say "a lot", but on fediverse that's <500 follows, <1000 followers, I had something like 5x as many on shitbird, but 1% of the activity and "engaaaagement" (excuse the SEO word). Anyway, I expect migration will take another week or so as frogs figure out the stove really is on.

When the Crown Prince of the Joseon Empire (defunct) bought out Freenode, it took a few weeks for everyone to get over to Libera.chat with the same or better channels (# lisp is now all LISP-family, # commonlisp is CL-specific, # scheme is for all Schemes, etc.), and get kicked off the corpse of Freenode. Nobody knows or cares what happened to the CPotJE or what used to be freenode.

So now I'm wondering how long it'll take for that to happen to shitbird. Days? ElmoNusk posted QAnon shit almost immediately. GM pulled their advertising. And this is just Halloween weekend. Next week, mostly awake and sober, is gonna be lit. And not in a good way, more "your entire city is on fire". Will there be anything but jesus-dakimakura pillow guy and (Kan't)Ye posting by next Friday?

OK, you want something more positive, actionable than my schadenfreude? Back up your tweets. I had a hell of a time getting my shitbird data out. Don't stall on this. Because when stupid companies shut down a service, they do it fast and don't care about your stuff. Remember Yahoo! paying billions for GeoCities, the greatest communal artwork of Humanity, and shuttering it with no backup or warning? That's what's gonna happen to shitbird. Don't be there when it does.

Lost Infrastructure of the 20th Century

Horrific picture from Larry on ADDN:

Now I'm wondering what other kinds of infrastructure of my yout' no longer exist. Growing up there were always old-timer stories of "oh we used to have horses and play hoop-and-stick! A live theatre show cost a penny!", but they never had useful tech and then lost it.

Mentioned earlier today: Party lines. Rotary phones. Phones only owned by Ma Bell. Landlines. Telephone girls.

Newspaper vending boxes, probably all owl nests now. Newspapers; I used to get a weekly big city paper, alt press paper, and sometimes a daily trash paper (USA Today & the like, for mediocre perspective, and I could do the crossword in <30 minutes). Print magazines, used to be the monthly delivery of all information. Books. I say I'd miss books, but honestly I buy only ebooks now, I have thousands of books in my iBooks & Dropbox, a much smaller physical bookshelf now.

Card catalogs are gone. I spent so much time with a little golf pencil, index cards, and flipping thru the catalog looking for a book, writing down Dewey numbers, then go hunting the shelves. Microfiche. Reference/research librarians. Libraries are under attack from the usual suspects aka the GOP, maybe they won't make it.

Vinyl and cassette tapes have made a temporary, improbable, and really stupid comeback, but once the fad ends they'll vanish forever. SONY MiniDisc. 8-Tracks. Reel to reel (had a brief fad again after Pulp Fiction). VHS (a few online art projects like FORGOTTEN_VCR and RedLetterMedia's "Best of the Worst" aside). I have to check if my VCR still works.
Do you even know how to be kind? R E W I N D
DVDs. There's just streaming you can't even keep, and Blu-Ray with parasitic Java programming, you can't just watch a movie without it spying on you online.

Television. Apparently there's still non-streaming, "cable" and "over the air" (but digital, not analog signal), constantly NCIS and "reality TV" with ads every 10 minutes selling laxatives, painkillers, and Gold Bond Medicated Powder. But that can't last long, all the Boomers will be dead soon and nobody else cares. Projected movies. Plays in theatres. Vaudeville. Nickelodeons (not the kids series).

Videogame arcades. Pinball machines. Computers that boot up instantly and are useful when you turn them on.

Radio. It's just right-wing hate speech radio, and a few oldies stations. And "oldies" now means "greatest hits of the '70s, '80s, '90s, and today" as one near me says; but don't worry, they don't really play anything past 2000. That's a biz model headed for death. Radio dramas have been dead for 70 years. Rock & Roll has been dead a while, there's still old bands playing it, but not many new.

Malls. If you can order everything online, why go "shop" and maybe hook up with a cute person?

Schools are obviously a bad idea. Chalkboards are gone; nobody's beaten erasers or choked down chalk dust in years. One-room schoolhouses died out when schools became about training industrial workers to sit down and take it, and now we obviously can't cluster up kids. Individual education, or none at all, just like in the dark ages.

Work offices are going to be gone soon. It's easier to deliver to customers (using underpaid gig workers, or soon drones), and work from home with chat and videoconferencing.

Trains and trolleys are long gone, except as tourist attractions. Once the schools and offices remove the need to drive around a city every day, it's gonna get awful quiet. No more cars, highways, streets, street lights, skyscrapers, planes. Ships are probably still needed to deliver from factories to target continent. Zeppelins could make a comeback, they use less fuel.

The Earth will go dark again. Little campfires as we all live out in the boonies with a single glowing rectangle or a cable into our skulls. Global economy reduced to swarms of drones delivering goods from robotic factories, until the owners, now on Mars, shut them down and all the lights go off.

Dungeoning & Dragoning and My New Rules, No Clerics Allowed

So I have, uh, three tabletop RPGs in development right now. One's a little corporate sabotage game, inspired by Severance, Brazil, Paranoia… One of my mini horror games with poor long-term survivability, but neat premise, should be fun.

Second is my sword & planet RPG, still needs a lot of work for space & time & dimension mechanics; it works great for fantasy swordfighting but that's not the whole point. I considered using variant Traveller/Cepheus Engine for this, but the tone is not "grizzled vets play Elite", so I'm off in my own direction here.

Third is yet another in a long series of D&D house rules that become their own OGL game, and that's what I'm on about today. In replacement for my overly-variant and overly-3.x-mechanics Stone Halls & Serpent Men, or handwritten Olde House Rules. Name to be decided later.

I've been reading a lot of the very oldest games & magazines, and really getting in the space of "what does this game need instead of what Gary published?"

  • New rules, basically OGL, spells & monsters are mostly stock from Swords & Wizardry White Box SRD, but some have partial to total rewrites. A handful of entirely new monsters, or takes on mythical/literary monsters. All new encounter table! I'm only using d20, d6 dice, and things you can do with those.
  • Stats change Wisdom to Willpower (WIL). Stat bonuses are B/X-ish, -3 to +3, which works with a d20-based mechanic. Saves & skill rolls are all based on stats.
  • HP start a little higher, Classed types get their CON score as base, but only d6 +/- 1 HD per Level. Somewhat like Arduin Grimoire. With limited healing, you need a bit more buffer between alive/dead. If you hit 0, you make death saves at penalty and probably die soon, but it's possible to be knocked out & captured like John Carter et al. do in every book.
  • Species are Human, Dwarf, Wood Elf, Beastfolk. As previously noted in The Thing About Orcs, I don't do kill-on-sight intelligent beings. You can have wars against hostile tribes, but the Badger Beastfolk who runs the bakery is not at war with you. High Elves are, as usual for me, The Big Bad (as well as Serpent Men, because I'm a Kull fanboy). No "dark elves", "half-demon goth chick", "dragon scalyfucker", "hobbit", etc. species. As I noted in Orcs, Humans-only doesn't work well without cultural markers that are harder to explain.
  • Classes are Fighter, Thief, Magician, and Spellsword (mediocre warriors with mediocre magic). No multi-class, no Clerics. Not doing anything fancy with career paths. Other than a few more experience options, and "Orgies, Inc" style pay-for-EP, it's a normal experience system! Who knew I could do that?! Should be interesting at least for this game.
  • Magic has a number of hard limits, which will make you invest in traditional fantasy accoutrements like flying mounts and magic potions instead of being superheroes with pointy hats. It is Vancian, in the sense that I've actually read Jack Vance so it works like that. Minimized spell/item creation rules, but there is some support for stuck-in-a-tower research campaigns.
  • Adventuring rules are simplified quite a bit, down to what I actually do in play; the more complex mechanics in SHSM rarely got used, the simple stuff does.
  • I may just pull the Inspirational Media (aka "Appendix N") chapter from SHSM and post it as a page. That media list is what I mean by "pulp fantasy".
  • Currently it's about 32 pages, not too densely packed, might be a bit more if I include more setting detail; certainly not above 48 pages, which seems a fine oldest-school size. Not bothering with art except the cover? I don't think so. Literature doesn't need interior art, use your imagination.

No Clerics Allowed

The lack of Clerics is contentious, but Delta's DND and Binder Full of Notes share my arguments.

I don't see heroic Clerics in any of the pulp swords & sorcery I like. There's Priest-Magicians in Moorcock's Elric stories or Thieves World, and they're the baddies. New campaign world is more like Fritz Leiber's Nehwon, where at best the few priests seen are charlatans, at worst cultists. The only historical place they come from is Archbishop Turpin from La Chanson de Roland; even Le Morte d'Arthur has only knights who praise their god, not magic Clerics. The only fantasy Cleric I can think of that I like is Duncan from Deryni Rising, and he's a secretly-apostate priest who uses black magic to save his people from Christian Human genocide!

They don't appear in Chainmail (Heroes & Wizards), or Dave Arneson's games (Adventures in Fantasy has skill-based fighters, who develop faerry[sic] magic skills later). The only reason they were ever in the game was Gary had an annoying vampire PC, and rather than do anything OOC (unaware that Rousseau had published The Social Contract in 1762), he made a grudge class for someone else.

Getting rid of Clerics makes Undead terrifying, and I love the Undead but don't love turning the undead. You don't have a living body shield who can just turn Undead all day; a Magician's Protection, Area spell lasts a few turns and only delays your murder or waiting for sunrise. Healing becomes slow (high-Level Magicians can cast 1 healing spell per day) or expensive (potions and scrolls), which encourages you to creatively avoid combat, not wade in and heal later, unless you have superior power. No raise dead, resurrection, or restoration (tho "level drain" has a different meaning in my game).

The super weird part of Clerics in D&D is they're based very heavily on Medieval Catholic priests; they carry crosses (not "holy symbols") in OD&D, they use "blessed holy water", their miracles are all based on Jesus stories, their hierarchy is based on the Medieval Catholic Church (with some weird level titles). But then they do nothing related to the Church! Because they're just Van Helsing minus the science.

The thing that stands out to me most is they have no interaction with Faerie or other gods. Historically and in myth, The Church ordered Christians to mass murder any Pagans who wouldn't convert, and fought endlessly to genocide/unexist the Little People, the Fair Folk, the People Under the Hill, Trolls, whatever you call them; their worship barely survived at all in Iceland, Finland, Norway, they're just "fairy tales" now. The worlds of Law (Christianity) & Chaos (Faerie) are openly at war in Poul Anderson's Three Hearts & Three Lions. Clerics should be all carrying iron staves and fighting against the Fey. They do in Ars Magica. But it's never come up in D&D?

Blackmoor/Eldritch Wizardry/AD&D added Druids (historically, more Sage political leaders than lightning-throwing Poison Ivy/Captain Planet superheroes), who should literally be at bloody war all the time with Christian Clerics, but everyone's copacetic, it's an ecumenical matter. Church and Holly Grove are next door in the tiny village of Hommlett. They have Clay Golems, explicitly based on the Golem of Prague, made by Clerics instead of Jewish Rabbis (again, Sages, not magic Clerics except in some Torah stories). What. I do use Golems, I love "programmed clay/flesh/iron machine goes crazy" stories; but the religious issue is impossible to resolve.

If I cared one whit for religious ceremony and all that, well, you can still have religions without Clerics, as seen in our world. They can be non-Classed, Thieves (most appropriately), or Fighters, or even Magicians if you don't mind the cognitive dissonance. But the only old-timey-religions that have ever been in my games are demon-summoning cultists Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn!, or fascist Templar priests, who are more political than religious.

So, the gameplay is better without Clerics. The world is much better (more like the pulp S&S I want) without Clerics. Even in a historical setting (which I very much do not do), Clerics shouldn't have superpowers.

Why Not 5E?

Because I don't need 1000 pages of corporate rules to tell me how to move down a corridor, check for traps, fight or flight. I really hate the superheroic power level. It's nearly impossible to disentangle the healing rules from it.

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.

  • Nanorogue ATR disk: Download, unzip, load in your Atari 8-bit computer or emulator of choice (Atari800MacX: ⌘D, select this as D1), and reboot (Atari800MacX: sh-F5). Press M. 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.