Apple Education Event

Being out of the Apple & Twitter bubbles, I didn't see anything about the Apple education event until hours later. At a rich private school, and more pushing the iPad and "pencil" (still $99 for a stylus) in education.

The LA school district fiasco and cheaper Chromebooks make anything Apple currently does an uphill fight, if not impossible outside of isolated environments like private schools. How do you get a public school district to spend more for iPads with a thinner but maybe better set of apps, if their underpaid, part-time IT guy with a Windows XP machine can't figure it out? What happens after the next LA-style fuckup?

The new iPad at $329 ($567 for 128GB, with pencil & keyboard case) is good enough to replace an iPad pro, so at least something nice has come out of this—my ancient iPad 3 is crashing often, largely from battery and memory problems. Or maybe I'll just get a new cheapo Linux laptop which is massively more capable, with a built-in keyboard that doesn't suck to type on. That's the fight Apple's got with anything they sell to a price-conscious market.

(Finished posting from my iPhone because my iPad 3 crashed while writing this. Should I expect the next iPad to last longer?)

What I'm Watching: Stupid Superheroes Edition

I really shouldn't watch superheroes. Well, Amazon supposedly has Garth Ennis' The Boys in production, and The Boys cured me of reading superhero comics forever, it's the best but last superhero story you'll ever need to read. And I'm expecting Deadpool 2 to be the best sequel to the best romantic comedy superhero movie ever. I don't really count the Marvel space fantasy comics or movies as "superheroes".

But otherwise, it's a disappointing genre. No, I haven't seen Black Panther, not a fan of tyrants worshipped as demigods holding bloodsports in their isolated resource-extraction-economy kingdoms. I wouldn't want a movie aggrandizing Dr Doom any more than I want a T'Challa movie. I loved the Joker in The Dark Knight because he's an anarchist and having so much fun at it, but the real villain is WayneCorp's stranglehold on the world economy, run by a crazy billionaire with military hardware beating up poor people "to stop crime" instead of, say, funding schools and jobs programs, and paying and screening cops to end police corruption. Gotham can only be a shithole if the Batman wants it that way.

Man, I miss the two Richard Donner/Chris Reeve Superman movies, and the two Tim Burton/Michael Keaton Batman movies.

So anyway.

  • The Tick: The Amazon series is weird. S1 was confused, almost grimdark '90s foil-cover "Superman Is Beaten to Death Like Jesus and We Mourn for 24 Issues" shit, nothing like the surreal parody comics or the insane Warner Brothers-level zany animated series, or even the half-assed but occasionally funny Warburton live series. S2 is less confused, but still not good. Most of the show balances right on the edge of too serious to enjoy, with moments of ludicrousness.
    The Tick and Arthur have a good dynamic, but the Tick comes off strange, not wacky. I like his journey of discovery of self, but it's in the wrong show. Arthur's inadequacy and neuroses are semi-crippling until the plot demands him to act, and then he just does HEROISM while whining a bit. Any chance for humor is stepped over.
    Overkill's a parody of Frank Castle, sure, but he's not any funnier than the real one; in fact, I think Frank in all grimdark Netflix Daredevil and Punisher is funnier. Miss Lint is consistently smirk-worthy but not fully sexy, terrifying, or funny at any time. At one point some marketing people pitch an ad deck to archvillain The Terror, and commit violence at minimal provocation, which gets a "menacing chuckle" from Terror. Which is how I respond to this. Dangerboat's behavior with Arthur plays out creepy and rapey rather than funny HAL-9000 with a cyber-boner parody which maybe they intended. Superion's a smarmy bastard, but then lets his guard down to show… basic decency? He's just not funny. The mad scientist has a funny physical condition, which gives sight gags but no jokes, probably just as well since they'd be offensive.
    Played completely straight, which this almost is, this could be just another shitty Marvel or DC series. Played for humor, this could be a great adaptation of the comics, they have the budget, CGI, and actors. But Amazon just dumped it down the middle.
  • Jessica Jones: Started to watch S2E1, but it's even more grimdark and seething anger, without any attempt at humor or irony. I got up to a douchebro asshole picking a fight with Alias and she gets arrested, bailed, and charged in the same day (man, the justice system in Marvel is fast, in my reality it'd take weeks to get on a court docket after an arrest). Nothing fun here, can't take this bullshit right now.

What I'm Watching: Film Noir Edition

Went for some rewatching of good films instead of trying to dig up a new Netflix binge. Spoilers spoilers everywhere. I'm sure nobody needs another commentary on either of these, but it's my blog and I like writing these, so fuck it.

  • A History of Violence: Quiet (too quiet and long) start, then we see small-town diner jerk Tom Stall exhibit skills no small-town diner jerk should have, and all the shit in the world comes back on him.
    The stairway sex scene is the canonical "is that sex or rape?" borderline: It sure starts rapey, but takes a turn, and is the opposite of the earlier cheerleader outfit scene, because the wife has to learn who her husband really is; Cronenberg's sex scenes are the most important character tests in his films, Crash most obviously but just as much here or in Videodrome.
    The boy's inherited talents/same fight choreographer as his dad are impressive, but I don't think he'd have that vocabulary. The ending moves in like an oncoming train. Just a malevolent noir flick. I'm glad Cronenberg didn't fully adapt the very cartoony ending (chainsaws and 20-year tortures!) of the John Wagner & Vince Locke graphic novel, even if in other of his films that'd be a relatively mild scene. ★★★★★
  • Pulp Fiction: "None of you fucking pigs move, or I'll execute every motherfucking last one of ya!"
    "Say what again! I dare you!"
    "Why do we feel it's necessary to yack about bullshit in order to be comfortable?" "Do not be bringing some fucked-up puba to my house!" I don't really like the Mia Wallace date. She's a little too in control to be a cokehead, Vincent's too alert to be a junkie on new good shit. Disco dancing is still and always dead, but hey, Tarantino wanted to make one scene of a film he loved (speaking of films full of indifference to rape, don't ever watch Saturday Night Fever). Even back in the day, a lot of people didn't understand why snorting heroin like coke was a bad idea, but that baggie instead of balloon setup was like a ticking time bomb. Amusing set decoration: Operation and Life games in the dealer's house in that scene.
    "Five long years he bore this watch up his ass, then he died of dysentery." The book Vincent was reading is Modesty Blaise, so it's a hardcover comic collection? Just a prop making a cool reference? I dunno, I read Modesty when it was in the paper in my youth, and some collections more recently. Sex and quick bursts of violence were her MO, but not otherwise thematically connected to the film.
    "Bring out the gimp." Eeeny-meeney is a bad way to go. What's the gimp's story, anyway? This whole segment is just a lesson of why you don't ever go in a building with Confederate flags up, even to save your life, because Southern Confederate traitors are all same-sex rapists, as also seen in Deliverance. "You lost all your LA privileges, hear?"
    "You read the Bible, Brett?" This part of Ezekiel "25:17" being faux-quoted was recently covered by The Bible Reloaded — possibly this episode or one very recent to it. I have a problem with Vincent's shitty firearm safety, nobody carries a gun with their finger on the trigger. "You know what's on my mind right now? It's not the coffee in my kitchen." Jimmy's coffee and The Wolf are fucking amazing.
    "Then I'm gonna walk the Earth. You know, like Caine in Kung Fu. Walk from place to place, meet people, get in adventures.": Why didn't someone made this TV show, Jules in a modern Kung Fu?! Yeah, Sam Jackson was too expensive even then, but he's gotta have an understudy who could do the actual series, like Eric Pierpont played Mandy Patinkin's part in the Alien Nation series, or Michael Shanks played James Spader's part in SG-1. Did you even notice or care it wasn't the original dude? Nope.
    I don't even need to give stars to my 4th favorite movie of all time.

Hypercard! The Software Tool of Tomorrow!

Encouraging people to write & submit new Hypercard stacks. Which, as a retro-tech challenge, I think is great. But. How about first having a decent modern Hypercard environment?

Why not? There's the classic John Gruber hit piece Why Hypercard Failed:

"Apple PR says it's a dead product so it doesn't matter if you like it! I like the Yankees who are also a bullshit PR project!"
—semantic analysis of all Gruber's posts produced this summary.

Stanislav (not a pleasant or generally useful person to me, but perhaps correct for once), had a different read of Why Hypercard Had to Die:

The reason for this is that HyperCard is an echo of a different world.  One where the distinction between the “use” and “programming” of a computer has been weakened and awaits near-total erasure.  A world where the personal computer is a mind-amplifier, and not merely an expensive video telephone.  A world in which Apple’s walled garden aesthetic has no place.

Apple did have a near-Hypercard tool, Dashcode, which was slightly more technical but not much; it auto-generated placeholder functions and you'd fill them in with JS and use local storage as your database. They never fully supported it, killed it, and pushed Xcode instead, which is like giving kids a backfiring nailgun with no safety instead of a plastic hammer. Now they're ludicrously trying to teach kids BDSM Swift with the lldb debugger repackaged as "Playgrounds". I feel so sad for a kid whose first experience of programming is 100s of "unable to satisfy template constraint" errors; that's some hard unyielding playground equipment there.

There's a few modern variants, but nothing I know of that works:

  • Uli Kusterer's Stacksmith is unfinished, has no binary download or web site, and the build instructions are very pro-dev. Last time I tried it I couldn't get it to build, so…
  • SuperCard is $180/$280. Ha ha… uh, no.
  • HyperNext Studio is based on RealBASIC, and is free, but rarely updated. Does not run classic Hypercard stacks.

So everyone just gives up and uses emulation, because making a new Hypercard is impossible. If you're going to do that, do it the easy way:

Twitter's Sweet Solution


Acquiring Tweetie from Loren Brichter 8 years ago was one of the last user-centric moves Twitter ever made. They eventually let Loren go and immediately started a total rewrite, into a steaming pile of hot garbage that services the advertisers better. I tried the rewrite every so often and always went back to Twitterrific, both on iOS and Mac; even when the Twitterrific Mac app was years-stale abandonware, it was more usable. Killing the thing built on the corpse of Tweetie is a mercy.

The Mac has the CPU power & wattage to run web applications, mobile devices really don't, so you only truly need a native app on mobile; I waffle between writing new software for web or native, but practically the web has already won on the high-power platforms.

But that does leave everyone at the same point as 2006-8, when there was only the Twitter website and SMS, except now I'd be surprised if SMS worked. And the Twitter official mobile app is junk. And they're very obviously slowly edging towards revoking all API access, so only their mobile app works.

What I see from all the panicked screams is that these people delusionally believe that Twitter cares about user experience, that Jack runs a public charity for the good of all 4 billion people on the Internet.

"If you are not paying for it, you're not the customer; you're the product being sold."
—Andrew Lewis


"The Product of Television, Commercial Television, is the Audience. Television delivers people to an advertiser."
Richard Serra's 1973 short film "Television Delivers People"

Seriously stop and watch Serra's film; I'd forgotten just how accurate this is. 45 years after Serra's film, it's exactly the same situation, with three "networks" consuming the consumers: Twitter, Facebook, and Google.

Twitter needs to deliver their audience to their advertisers, that's the only way they will ever make a profit. They aren't here to be your friends, they aren't creating a global consciousness to spread Peace, Love, and the American Way. They want your eyeballs attached to the ads, and if it makes you miserable, nobody cares.

The Max Headroom pilot was about this exact thing: Zik Zak buys advertising from Network 23, because they can run blipverts, which prevent channel flipping. Blipverts explode the most slovenly audience members. Nobody cares, because the customer, Zik Zak, is happy. Max Headroom is a fantasy, of course, where a reporter can expose the truth and this matters in any way; in reality, Network 23 would just keep showing blipverts and settling a few lawsuits for a tiny fraction of their profit margin.

Zik Zak Know Future

It's a lot less unpleasant to watch the frog boil from outside, but I still have to hear all you frogs screaming until you decide to jump out or mercifully fall silent, so I like it when Twitter turns up the heat under you.

How Much Computer?

I learned to program on a TRS-80 Model I. And for almost any normal need, you could get by just fine on it. You could program in BASIC, Pascal, or Z80 assembly, do word-processing, play amazing videogames and text adventures, or write your own.

There's still people using their TRS-80 as a hobby, TRS-80 Trash Talk podcast, TRS8BIT newsletter, making hardware like the MISE Model I System Expander. With the latter, it's possible to use it for some modern computing problems. I listen to the podcast out of nostalgia, but every time the urge to buy a Model I and MISE comes over me, I play with a TRS-80 emulator and remember why I shouldn't be doing that.

If that's too retro, you can get a complete Raspberry Pi setup for $100 or so, perfectly fine for some light coding (hope you like Vim, or maybe Emacs, because you're not going to run Atom on it), and most end-user tasks like word processing and email are fine. Web browsing is going to be a little challenging, you can't keep dozens or hundreds of tabs open (as I insanely do), and sites with creative modern JavaScript are going to eat it alive. It can play Minecraft, sorta; it's the crippled Pocket Edition with some Python APIs, but it's something.

I'm planning to pick one up, case-mod it inside a keyboard, and make myself a retro '80s cyberdeck, more as an art project than a practical system, but I'll make things work on it, and I want to ship something on Raspbian.

"It was hot, the night we burned Chrome. Out in the malls and plazas, moths were batting themselves to death against the neon, but in Bobby's loft the only light came from a monitor screen and the green and red LEDs on the face of the matrix simulator. I knew every chip in Bobby's simulator by heart; it looked like your workaday Ono-Sendai VII, the "Cyberspace Seven", but I'd rebuilt it so many times that you'd have had a hard time finding a square millimeter of factory circuitry in all that silicon."
—William Gibson, "Burning Chrome" (1985)

Back in the day, I would work on Pascal, C, or Scheme code in a plain text editor (ed, vi (Bill Joy's version), or steVIe) all morning, start a compile, go to lunch, come back and read the error log, go through and fix everything, recompile and go do something else, repeat until I got a good build for the day. Certainly this encouraged better code hygiene and thinking through problems instead of just hitting build, but it wasn't fun or rapid development. So that's a problem with these retro systems; the tools I use take all RAM and CPU and want more.

"Are you stealing those LCDs?" "Yeah, but I'm doing it while my code compiles."

These days, I mostly code in Atom, which is the most wasteful editor ever made but great when it's working. I expect my compiles to take seconds or less (and I don't even use the ironically-named Swift). When I do any audio editing (in theory, I might do some 3D in Unity, or video editing, but in practice I barely touch those), I can't sit there trying an effect and waiting minutes for it to burn the CPU. And I'm still and forever hooked on Elder Scrolls Online, which runs OK but not highest-FPS on my now-3-year-old iMac 5k.

For mobile text editing and a little browsing or video watching, I can use a cheap iPad, which happily gets me out of burning a pile of money on laptops. But I'm still stuck on the desktop work machine, I budget $2000 or more every 4 years for a dev and gaming Mac. Given the baseline of $8000 for an iMac Pro I'd consider useful, and whatever more the Mac Pro is going to cost, I'd better get some money put together for that.

I can already hear the cheapest-possible-computer whine of "PC Master Race" whom I consider to be literal trailer trash Nazis in need of a beating, and I'd sooner gnaw off a leg than run Windows; and Lindorks with dumpster-dived garbage computers may be fine for a little hobby coding, but useless for games, the productivity software's terrible (Gimp and OpenOffice, ugh), and the audio and graphics support are shit. The RasPi is no worse than any "real" computer running Linux.

'80s low-end computers barely more than game consoles were $200, and "high-end" with almost the same specs other than floppy disks and maybe an 80-column display were $2500 ($7921 in 2017 money!!!), but you simply couldn't do professional work on the low-end machines. Now there's a vast gulf of capability between the low-end and high-end, the price difference is the same, and I still need an expensive machine for professional work. Is that progress?

A Little Scheme

I go through phases of playing with Scheme for utility code, maybe even portable dev; while FreePascal is a better language for this, I'm frustrated by the lack of library support and the useless iOS situation.

Scheme's always been an emergency backup language; it was fun to learn back in the '80s and early '90s, and both SICP and TSPL are good books, but nobody wanted to pay for Scheme dev, and anyway the language is very annoying to write. I often treat it as a logic puzzle to get anything done, not a useful tool. But it does have good library support, and it can compile to very fast binaries, despite having GC pauses and consuming 2x as much memory as a C program. Maybe I can get better at solving problems in it, build up some libraries, and make it useful?

So the current landscape is:

  • Chez Scheme:
    • Pros:
      • Very fast to compile and at runtime, competitive with C compilers.
      • Great interactive REPL, not just a half-broken readline history like pretty much every other Scheme.
      • Debugger is reasonably good, and integrated in the REPL. All I really use myself is (trace FOO) and (inspect BAR), but non-caveman coders will make better use of it.
      • Current R6RS implementation plus extensive chezscheme library.
      • By R. Kent Dybvig, author of TSPL, and Cisco currently employs him to maintain Chez Scheme.
      • REPL environment is called a café, which I find charming. Yes, I also liked all the coffee puns and iconography from early Java programming.
    • Cons:
      • Not as widely supported by tools & documentation as Racket.
  • Racket:
    • Pros:
      • Very nice GUI.
      • Current R6RS implementation plus extensive racket library.
      • Built around making multiple languages; I don't really care about this. I loathe "Typed Racket", one of the worst combinations of ideas in history.
      • Tons of documentation.
    • Cons:
      • Mediocre performance. There's a project to rehost Racket on Chez Scheme, which would fix this, but then why use Racket?
      • Doing anything in the GUI destroys your environment, all the objects you've made, unlike any LISP or Scheme ever. So it's utterly fucking useless as an interactive REPL. I can't say enough bad things about this. ★☆☆☆☆ Kill On Sight.
  • Chicken:
    • Pros:
      • Compiles to C and thence to native binaries, with nice FFI to C libraries.
    • Cons:
      • Mostly old R5RS, with a few extension libraries.
      • Terrible REPL, only really usable as a compiled language.
  • Scheme R7RS benchmarks

Chez Scheme is the clear winner for me; if I was a novice, I might choose Racket and not realize that the REPL is a broken abomination for a while. If I was only doing C interop, Chicken would be better.

Editing in BBEdit works OK, but it doesn't know how to find function definitions. I guess Vim has current syntax, but I'm kinda over that habit unless I have to sysadmin. I have never been emacsulated and never will.

Atom's symbols list doesn't do any better. But if you do want to use it, install package language-racket (all other language-schemes are R5RS at best), and then add some file types to config.cson:

      "source.racket": [

In any editor, any language, I use hard tabs (1 char = 1 logical indentation level, obviously), and normally tabstop at 8 chars which discourages very long nesting and encourages me to extract functions. Scheme is indentation hell, so set the tabstop to 4 spaces. (The code blocks below won't show that.)

Do not criticize my C-like paren/brace placement; I prefer clear readability of code structure to some obsolete Emacs dogma.

So, let's see it work, with

#!/usr/bin/env scheme-script
(import (chezscheme))
(format #t "Cheers 🍻 , ~a!~%" (car (command-line-arguments)))
% chmod 755
% ./ Mark
Cheers 🍻 , Mark!

Now for something more serious:

;; Copyright © 2015,2018 by Mark Damon Hughes. All Rights Reserved.
(library (stdlib)
    (export inc! dec! currentTimeMillis randomize input atoi)
    (import (chezscheme))

;; Variables

(define-syntax inc!
    (syntax-rules ()
        ((_ x)      (begin (set! x (+ x 1)) x))
        ((_ x n)    (begin (set! x (+ x n)) x))

(define-syntax dec!
    (syntax-rules ()
        ((_ x)      (inc! x -1))
        ((_ x n)    (inc! x (- n)))

;; Date-Time

(define (currentTimeMillis)
    (let [(now (current-time))]
        (+ (* (time-second now) 1000)
            (div0 (time-nanosecond now) 1000000))

;; Random Numbers
;; "Anyone who attempts to generate random numbers by deterministic means is, of course, living in a state of sin." —John von Neumann

(define (randomize)
    (random-seed (bitwise-and (currentTimeMillis) #xffffffff) )

;; Input/Output

;; Reads a line from stdin, ends program on EOF
(define (input)
    (let [(s (get-line (current-input-port)) )]
        (if (eof-object? s)
            [begin (display "Bye!\n")

;; Strings

;; Converts a string to an integer, 0 if invalid
(define (atoi s)
    (let [(n (string->number s))]
        (if (eqv? n #f)
            (inexact->exact (truncate n))


#!/usr/bin/env scheme-script
;; Copyright © 2015,2018 by Mark Damon Hughes. All Rights Reserved.

(import (chezscheme))
(import (stdlib))

(define (guess)
    (display "I'm thinking of a number from 1 to 100, try to guess it!\n")
    (let [(theNumber (+ (random 100) 1))]
        (define guesses 1)
        (do [(break #f)] (break)
            (format #t "Guess #~a? " guesses)
            (let [(g (atoi (input)))]
                    [(or (<= g 0) (>= g 100))
                        (display "Try a number from 1 to 100.\n")
                    [(< g theNumber)
                        (display "Too low!\n")
                        (inc! guesses)
                    [(> g theNumber)
                        (display "Too high!\n")
                        (inc! guesses)
                        (display "You got it!\n")
                        (set! break #t)
    (display "***GAME OVER***\n")


chez-compile.zsh, with my thanks to Graham Watt for explaining wpo and libraries:

if [ $# -ne 1 ]; then
    echo "Usage: chez-compile.zsh MAINNAME"
    exit 1
rm -f *.so
rm -f *.wpo
mkdir -p bin

cat <<ENDTEXT |scheme -q --optimize-level 3
(compile-imported-libraries #t)
(generate-wpo-files #t)
(compile-program "$")
(compile-whole-program "$1.wpo" "bin/$1")

rm -f *.so
rm -f *.wpo
if [ -f "bin/$1" ]; then
    chmod 755 "bin/$1"

Now I just:

% chez-compile.zsh guess
compiling with output to
compiling with output to
% bin/guess
I'm thinking of a number from 1 to 100, try to guess it!
Guess #1? 50
Too low!
Guess #2? ^DBye!

Well, that was an adventure to get the equivalent of my first BASIC program from 1980, which can be run in Chipmunk BASIC if you don't happen to have a TRS-80 Model I handy:

10 N=INT(100*RND(1))+1:T=1
100 PRINT "GUESS #";T;"? ";:INPUT "",G
110 IF G<=0 OR G>=100 OR G<>INT(G) THEN 200
120 IF G<N THEN 210
130 IF G>N THEN 220
140 GOTO 230
210 PRINT "TOO LOW!":T=T+1:GOTO 100
220 PRINT "TOO HIGH!":T=T+1:GOTO 100

But now I can think about more complex problems in Chez Scheme!

Here's the tiniest piece of what I've been thinking about next:

Island in emoji

Fake Emoji & "Smart" Quotes Fuck Off

WordPress does a lot of things, not always well, but better than other blog platforms. But occasionally it runs amok like a toddler on espresso scribbling over your stuff with crayons and shitting in corners before falling down in a huff.

Today, it decided to replace my emoji with terrible little pictures again despite using the Disable Emojis plugin, so I gave up and edited functions.php (Appearance, Editor). And took this opportunity to uneducate my quotes so you can actually use code I paste without having to run it thru BBEdit's "straighten quotes" text menu. I didn't invent any of this, but it's all buried in obsolete version advice.

Add this:

// Fake Emoji & "Smart" Quotes Fuck Off
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
add_filter('emoji_svg_url', '__return_false');
add_filter('run_wptexturize', '__return_false');

Sláinte 🥃

The Freedom to Write Garbage

Nice notebooks make it hard to write, because you feel you can't write garbage in them. Cheap notebooks give you the freedom to write garbage.

I used to use a DayRunner®, but then I'd fill it with cheap lined filler paper, and fill those pages with everything, and throw them in a box when I was done; I had a Palm Pilot for scheduling, but writing long notes in it was hard. Later I got into nice big Moleskines, which I rarely used because they seemed too nice for my chaos. Then stacks of Field Notes, which I keep one in my jacket, but use grudgingly. Lately I'm back to cheap 50¢ spiral notebooks and pads, and I write all the time.

I don't use a fancy pen, either. I'm currently using a "TÜL" mechanical pencil which is semi-junky (the eraser holder is loose and pushes down, so I have to tape it in place!) but fat enough for my hand, and a Field Notes clicky ballpoint which needs a 10¢ refill soon. A box of disposable ballpoints will work just as well as your $500 handcrafted engraved gold-plated fountain pen and hand-squeezed squid ink.

None of what I write on paper is important long-term, that's what Markdown files on a computer are for. Instead, every new topic or date gets written at the top of a page, sometimes just one item on that topic. And I'll go forward thru a book until it's full, then move on to the next. Anything worth keeping gets typed in eventually.

Here's a least-embarassing page from my current notepad, tracking Animal Crossing characters because paging thru Contacts in the game is so very slow.

notebook-animal crossing

And yes, my handwriting is appalling and random-looking; no two letter forms are the same. I learned slow and perfect block lettering until I got the Palm Pilot, then Graffiti retrained me and it's been crap ever since. I learned cursive as a kid but have never used it for long writing.