Blog

What I'm Not Watching: Chilling Adventures of Sabrina

Take Satanism and evil magic from medieval Christian superstition, rather than from Wicca or LaVeyan Satanism which don't believe in a real Satan. This is already a borderline hate crime.

Add bullshit high school drama and an anti-bullying, anti-transphobia plot that goes nowhere because nothing mortal matters. And it's weird: Everything in the show tries to look like the 1960s, but with random modern anachronisms. I think the writers and set decorators are not being clever here, they're just too stupid to understand how different the 1960s were.

Add bullshit boarding school, half-blood bigotry from Harry Potter. The Harry Potter fanficcery is strong in this, right up to the suggested shopping for familiars, and witch girls with black lipstick who might as well draw "SLYTHERIN" on their foreheads.

Add one very dark-haired bleach-blonde-but-gross-roots-showing weird-looking chick who does a lot of shower scenes for someone supposed to be 16 (actually 19). Her creepy, lumpy boyfriend (actually 23, and looks 25+) doesn't help.

Add maybe the worst Q&A with a "High Priest of Satan" ever (imitating Lucius Malfoy, but with all the charm of a bored accountant).

The dialogue's awful, like a Christian trying to write "spooky gothic". It's exactly like fucking Twilight.

I made it barely into E2, and gave up. This is the worst.

★☆☆☆☆

What I'm Watching: Castlevania S2E6-8

Finishing Castlevania S2, here's where all the slow burn finally pays off. And then back to slow burn.

The stand-up fight Carmilla's been plotting finally comes up, and… I'm a little dubious how powerful an undead Bishop (Matt Frewer!) can be given that in life he couldn't keep one vampire out of his church. But it's a really solid plan.

The Humans and Alucard finish dicking around in the vault, and then magically screw everything up for everyone, and have fun storming the castle. If I remember my boss fights correctly, the trick is to evade the fireball and whack him in the face three times. They don't go according to that plan.

But then there's a whole ep left. So everyone says goodbye to Alucard for a long time, and spends more long times deciding what to do next, and the surviving vamps work out their next moonlit holiday plans, and some very implausible violence—even considering what we just saw—sets up the lunatic as a new big bad.

Season 3's been announced, and there's plenty of vamps to stake, plus Dracula never remains dead.

★★★★★, altho I'd like the pacing to be faster, and I miss Godbrand.

What I'm Watching: Castlevania S2E1-5

Like Castlevania S1, the art is fantastic, but the animation varies from nearly Hanna-Barbera to perfectly smooth, mostly in combat scenes.

Much of the first few eps are in Dracula's court, with his hilarious Viking vampire subject Godbrand ("I like boats! I'm a fucking Viking! We're supposed to make boats out of things!"), slutty & scheming Carmilla, the human forgemasters (necromancers, more or less) Hector (a spoiled brat with… pets…) and Isaac (harsh disciplinarian religious lunatic). And we see much more of Dracula's character and his rage at humanity. Make no mistake, I'm sympathetic to his culling, not so much to the random way it's implemented.

In contrast, Belmont, Sypha, and Alucard are pathetic. Sniping at each other, barely have any plan. They sit around and do some research, they're very reactive. The Humans are the antagonists of this season, the Vampire court are the protagonists.

The idiots (Trevor, Alucard, Godbrand) all speak like Warren Ellis, noted drunk, misanthrope, and vulgarian. The others are some of his better writing, intelligent and broken in various ways.

The plot takes quite a while to get anywhere, but for the most part it's enjoyable. FAR better start than S1 had.

Up to S2E5 now, I'll watch the rest tomorrow.

"I Apologize for the Delay"

Anytime I feel bad about my slowness of production, the inconveniences in my life blocking me from getting work done, I remember the MegaTokyo Visual Novel, which I paid $50 for in 2013, and of course Fred never shipped, he never finishes anything. I knew I was throwing my money away then, and the $299,184 he raised may as well have been set on fire for all that'll come of it.

Today, MT rant has a bit of a status update, first one in a year.

So in comparison, I'm a fucking machine cranking out the awesome. Where's my third of a million bucks?!

What I'm Watching: Adam Ruins Everything

So, up front: Adam Conover has a ridiculous shaved-side mullet and horrible suits that would look stupid on a christian boy band, let alone on someone trying to educate you. Whatever the modern fashion industry is, he ran thru the sewage runoff from it.

E1 does a good job of debunking TSA, safety caps on drugs, and Tylenol, and has good expert guests, especially Bruce Schneier on an iPad telepresence rig. The skits are amusing and get to the point.

E2 starts OK, with the car dealership scam, but rapidly collapses. He doesn't manage to mention that in many states Tesla has evaded the scam, and the FTC has started discouraging it. And then the anti-car diatribes start, clearly the work of someone who's never left a city or seen grass, trees, or the stars on a clear night in his life. While we could rebuild our cities for public transit and pack everyone into claustrophobic hive cities with total light and noise pollution, and total surveillance, the US is a huge country where many people prefer to commute from distant suburbs or little towns so they can live in peace and quiet away from you noisy, snooping motherfuckers. And the stoner kid and his friends in the skits are super annoying. FAIL.

E3 attacks police "forensics", and at least sticks to just a few characters for the skits, and kind of a plot. It's a little too uncritical of DNA analysis, which has been used for some of the same systematic frauds, and he keeps claiming the pigs have "unconscious" bias. The pigs know exactly what they're doing and why they're caging people on false pretenses.

Hmn. I like the premise, but Adam is moderately terrible at delivering it.

★★★☆☆

What I'm Watching: Errementari: The Blacksmith & the Devil

What a charming film. Basque, with maybe the worst dubbing I've ever heard, so put it on English subtitles and Basque language. Lovely real-looking run-down sets, especially the forge, dark cinematography but not cyan/orange.

Set in early 19th C after the Basque lost their independence. Follows a blacksmith with a temper, a bizarrely fortified forge, and a deal with the Devil. The scarred, orphaned girl, Usue, is adorable, mean, and hilarious. The government fop isn't just there to rob the smith. The priest is a mean, conservative old bastard, the innkeeper and his grasping cronies deserve the bad ends they're all coming to, the town children other than Usue are brats. The demon Sartael is excellent, both makeup and mythical behaviors.

Cast, writing, and design are all perfect. The ending is very old-school D&D problem-solving.

Reminds me a lot of The Witch, or City of Lost Children, in this half-real, half-dreaming style and the grotesque people.

★★★★★

Chicken Soup

(a bunch of stuff in a pot)

REPL

The Chicken csi REPL is appalling after using some nice REPLs, it doesn't even have history by default. I couldn't reliably get non-GNU readline-likes to work, so:

% chicken-install -sudo readline
% cat >~/.csirc
(use readline)
(current-input-port (make-readline-port))
(install-history-file #f "/.csi_history")
^D

So at least now it has the usual up/down/emacs-like keys.

Long fucking ways from the old Symbolics LISP Machines. Why don't we have environments like that anymore? Why is everyone content to just use fucking emacs (I've never been emacsulated) or other editor, and a boring REPL? DrRacket is just a REPL that destroys its memory every time you edit code, and it's the most graphically advanced LISP-type environment. And this is why I still just use Atom with Symbols Tree View (even though it thinks variable definitions are functions), and copy-paste into iTerm if I want to test something.

Value Unpacking

Not having nice R6RS macros for this, and unwilling to fight with classic macros, I've been using values to unpack lists into variables, and because I can never remember the exact syntax, I made this cheat-sheet:

(define a '(1 2 3))
(define b '(4 5 6))
;; then one of these:
(define-values (x y z) (apply values a)) (printf "~s,~s,~s\n" x y z)
(set!-values (x y z) (apply values b)) (printf "~s,~s,~s\n" x y z)
(let-values [[(x y z) (apply values a)] [(q r s) (apply values b)]] (printf "qrs:~s,~s,~s xyz:~s,~s,~s\n" q r s x y z))

Probably not efficient, but better than car, cadr, caddr, etc. Maybe I should move all my list-structures into vectors, but then I'd still have to convert them to lists half the time. Here's where Python is the programmer's best friend, even if it is 10,000x slower:

a = (1, 2, 3)
x, y, z = a
print(f"{x},{y},{z}")

Why Did LISP Fail?

How did a more advanced language with better tools just die off commercially, and now if you want to work in it, you have to cobble together a bunch of half-broken shit?

I think there's 3 reasons:

  1. It's hard and ugly. It may be logically compelling, but when you see a page of parens your brain panics and looks for a place to hide.
  2. Companies value the fake productivity of thousands of lines of C, Java, or Swift (aka C++2020) code more than having safety, security, and correct reasoning. Who cares if millions of people will suffer and possibly die from your code, as long as you can ship TODAY?
  3. A lot of LISP "hackers" are insufferable douchebags, both old beardy fuckers who've been doing it for 50 years and mewling children who learned it last week. Every new variant makes the older contingent more angry at even seeing a mention of it, and the sneering fetuses think whatever variant they learned is Divine Wisdom, rather than just an engineering tool that may need to be improved.

Building a Binary with Chicken Scheme

So that was fucking fun. Seems Chicken's docs aren't correct on how to build with modules, because those were added after the dark-ages R5RS it was modelled on.

There is an "egg" system which is used for building the libraries, but it's difficult to use for making binaries in your own destination dir, and fills your work dir with spam temp files. Unfortunately basically useless for work.

Finally got this working:

src/somelib.scm:

(declare (unit somelib))
(module somelib
    (hello)

(import scheme)

(define (hello) (display "Hello!\n"))
)

src/somemain.scm:

(import scheme
    (chicken load)
)

(cond-expand
    (compiling (declare (uses somelib)))
    (else (load-relative "somelib.scm")))
(import somelib)

(hello)

Don't you just love that muffin-man-muffin-man repetitious bullshit? declare is for the compiler, load is for the interpreter, then import for both. You import builtins like chicken, but use libraries (aforementioned sdl) without an import. Bizarre and contradictory.

build.zsh: [script updated 2019-06-08]

#!/bin/zsh

# EXE is binary filename
# MAIN is main script
# LIBS is space-delimited, must not include main script

function usage {
    echo "Usage: build.zsh PROJECT || MAIN.scm [LIBS] || ls || -?"
    exit 1
}

if [[ $# -eq 0 || "$1" == "-?" || "$1" == "--help" ]]; then
    usage
fi

case $1 in
    ls)
        echo "Known projects:"
        # Add known projects here
        echo "eldritch test"
        exit 0
    ;;
    eldritch)
        EXE=eldritch
        MAIN=eldritch.scm
        LIBS="marklib.scm marklib-geometry.scm marklib-ansi.scm"
    ;;
    test)
        EXE=marklib-test
        MAIN=marklib-test.scm
        LIBS="marklib.scm marklib-geometry.scm"
    ;;
    *)
        # command-line project: MAIN=$1, LIBS=$2...
        EXE=`basename $1 .scm`
        MAIN=$1
        shift
        LIBS="$*"
    ;;
esac

mkdir -p bin

cd src
for SF in ${=LIBS}; do
    SNAME=`basename $SF .scm`
    echo "Compiling $SF"
    csc -c -j $SNAME $SF -o $SNAME.o || exit 1
done
echo "Compiling $MAIN"
csc -c $MAIN -o `basename $MAIN .scm`.o || exit 1
echo "Linking..."
csc *.o -o ../bin/$EXE || exit 1
rm -f *.o
rm -f *.import.scm
cd ..

echo "Built bin/$EXE"
% ./build.zsh
Built bin/something
% ./bin/something
Hello!

Hello, working native binary! There's a bunch more stuff about making a deployable app, but I'll take this for now. My actual program can show a blank green graphics window!