Blog

What I'm Watching: Time Trap

Apparently this is the season of low-budget time travel movies, because I get another one. This was a much better ride.

An asshole archaeologist goes caving alone except for his dog, trying to find some hippies who went missing 40 years ago. He passes thru a weird wet invisible wall and never returns.

So then his two students go looking for him. They pick up a random girlfriend, younger sister, and "Furby" who is (as they point out) like Chunk from the Goonies but not as heroic or competent. They rappel down thru the wet invisible wall.

The cave areas are mostly classic Dr Who quality warehouse floors with dust and plaster stalagmites, but the centerpiece tower chamber looks OK.

SPOILERS ahoy

They get many clues that something's wrong with time, even if they can't read the title, but don't put it together for a long time. The wet field is of course condensation at the time barrier. The "Furby cut the rope!" hypothesis is kept up much longer than is plausible, but they do eventually figure out why ropes break.

It's great that they all have gopros, so we can see the same scenes multiple times on tiny phone screens (or a projector but with no silver screen in a cave) in lieu of anyone talking it over. The mythology is finally explained in some detail, but it's after much too long of everyone saying "what is happening?!"

Finally the random encounters start. The cavemen are ridiculous, scampering on all fours. There ought to be generation after generation of invaders, instead of just cavemen, conquistadors, lone gunslinger, hippies, archaeologists, and spacemen.

There's some unexamined bits. What do the cavemen eat? Where do they get wood for fires, leather for clothes? Cannibalism and healing in the spring? Where does the Fountain come from? Why is it able to do this? No idea.

[Update: I just realized. This is set in Texas. Where the hell did they get cavemen? Native Americans got here only 15-20KYA, and they're the same Homo sapiens as everyone else, not these sorta-Neanderthal/Homo habilis looking grimy monkey men. There have never been non-Sapiens hominids in North America, Bigfoot claims aside.]

The final scenes are a bit neat and tidy, and really could've used a freaky post-Human Martian coming in to say something, but it did fine for a limited cast.

Minor point against it: The dog is never seen again, even though he should've been hanging around the truck when the students arrived. Maybe he survived, but probably the coyotes got him. I want a happy ending for the dog, too.

This is an interesting time for indie films, because even cheap cameras look good, so if you have a decent script and the special effects are just Photoshop on a few frames, you can make a professional film on a shoestring budget.

★★★½☆

Wendy's RPG

What. Wendy's made a free tabletop RPG about fast food kingdoms.

Very weird. It's D&D5E-like (but not explicitly; it isn't OGL, it doesn't use any WotC trademarks, but it rips 5E off completely), very rules-light. I don't like all the 4d4 rolls (some Wendy's marketing thing is "4 for 4", so this pun is all over), otherwise it's unexceptional.

I do like this variation on critical:

FEAST MODE
If you roll a 20 on an attack or skill roll, you go into FEAST MODE. You do the maximum amount of attack damage, plus an additional roll of the normal attack dice. You also get advantage on your next roll, making going into FEAST MODE again even more likely. Going into FEAST MODE can completely change the tide of a confrontation.
Likewise, rolling a 20 on any skills check will result in your character’s best possible outcome in their current situation. After all, you went into FEAST MODE.

The equipment list is ridiculous, with Ukuleles, Tiaras, healing by eating Chicken Nuggets, fishing poles. Armor's silly (Apron, Red Polo Black Visor, etc.) but an interesting idea: Some adds to Defense, some to Arcana (magic stat) or Grace (dexterity). Weapons range from Spoon (1d4) to Cast-iron Skillet (3d6). I kinda want to steal a bunch of these stupid ideas.

The book gives you buffs/debuffs based on the food the player eats, obviously encouraging Wendy's food and not anyone else's. What a bunch of jackasses.

The classes are Order of the Chicken (magic-user/thief depending on subclass, 5 subclasses), Order of the Beef (fighter, 4 subclasses), Order of the Sides (spoony bards, 5 subclasses). The powers are jokes but overpowered if you did play them out, and it goes up to level 5; there's no experience, the adventure just says "everyone levels up" after each boss fight. No choices anywhere, just roll stats, pick class, go.

PCs can't actually die, just pass out from hunger and then wake up when the team camps. I guess you could TPK a group, and that'd be a sweet merciful release to death.

So then there's the adventure, which is a pretty standard 5E railroad with five chapters and a couple side-quest areas; zero difference between this and any "adventure path" or recent WotC adventure book, except the branding is different. Some puzzles aimed at small children or drunk frat boys, some very silly monsters. Queen Wendy ("of the Clapback" which either means something very different than I think, or is rather rude) commands heroes who brave the french fry forest to yadda yadda light a bacon beacon, yadda yadda go murder an ice clown in his funhouse and castle. Dave is dead which by my understanding of the rules can't happen, so I suspect Wendy froze him into a statue to seize the throne. Really no sillier than that Chult book.

The art, maps, and layout are very professional (aside from the maps being so linear even Disney couldn't run them as rides), it really makes it clear how commercial-friendly Wizards of the Coast & Paizo are, as if He-Man was selling junk food instead of toys.

★★☆☆☆

Back in the latter days of TSR, Inc, there was a module WG7 Castle Greyhawk, with 13 short comedic adventures by different writers around the themes of Gary's mega-dungeon (some humorless people really take offense to this module; I think it's a funny homage and several levels are great). Level 8: Of Kings & Colonels, by John Nephew (who wrote for TSR, Ars Magica, and Over the Edge) covers a similar gag, with a cavern wilderness fought over by Colonel Sandpaper and King Burger. But he wasn't being paid by KFC to say how great their chicken parts in a bucket are.

What I'm Watching: In the Shadow of the Moon

So, a perfectly fine premise, well-acted, somewhat wrecked by the writers not thinking things thru at all. First hour I was fully on board, then nothing added up, and by the end I was annoyed. As with so many films, the color has been shat on with the orange/cyan filter, except where day-for-night scenes are grey filtered.

SPOILER land

There are two hypotheses about time travel. A is that everything forward and back has already happened, and if you vanish in the future it's because you already appeared in the past; you may be the cause of events but they can't be changed. This is the only rational argument, really. We know time is just part of space-time; each tick moves things "ahead" in the next frame.

B is that time travel rewrites the future; you kill a fascist and fascism vanishes and everyone's singing Kumbaya. But then there's no need for a time machine and assassin, so the fascist isn't killed and fascism spreads. Now you need a time machine again. This is madness.

The movie seems to be doing hypothesis A, but then ends as if hypothesis B happened. But only after decades of the original timeline.

Second, somewhat worse, is that the method of killing is preposterously convoluted. Why does the assassin need to inject targets now so someone in the future can push a button? She could just shoot them or give them a drug OD and not provide weird clues to make a cop go all Zodiac case on it for decades. I am disappointed the cop doesn't have a clue & string board in his car.

Third, completely nonsensical stuff about the Super Moon being a bridge between worlds or some shit. Absolute astrology-class woo nonsense.

Fourth, the idea that some newsletter about "real Americans" and a flag with 5 badly-placed stars is going to incite the Second Civil War, completely fails to understand our first Civil War, and the nature of populist movements. You'd have to kill millions to stop it.

Fifth, the idea that you'd use this to stop some bombings, no worse than what dozens of countries endure every day, including several at the hands of the US armed forces; rather than going back to stop Hitler, or Stalin, or Mao, or Pol Pot, or Nixon.

The writers previously worked together on Limitless, an equally vapid show about the "10% of your brain!" myth. I can't find their ages, but I'm pretty sure they're under 30, it has that earnest political certainty & lack of humor or irony. They've clearly never read a history book, especially none of the Presidential biographies they show.

★★☆☆☆ — definition of competent but unenjoyable.

Seventies Thursday Music

  • ★ '70s Greatest Hits ★: Very K-Tel, but a great collection from my youts. It's always bizarre to hear some of these without vinyl hiss or radio static.

I especially want to call out "Don't Fear the Reaper", "Dust in the Wind", and (not on this collection, but I heard it earlier tonight) "The Grand Illusion" by ELO, for making pop music from death and mortality, not just bullshit about love.

What I'm Watching: The I-Land E4-7

Despite my contempt for the writing, I finished this off. I'm going straight to spoilers here; at least watch E1-3 cold.

So E4-E6 goes back to the I-Land, and there's a terribly-written argument of "you have to believe my incredible story!" "no you're a liar!" "waah, you bitch!" for half an hour or more; I barely exaggerate, it's a tale told by an idiot. Some light bondage but it's not very hot.

A couple claiming to be "Bonnie & Clyde" show up and deliver more preposterous threats and tell everyone remembering their past will make them sad. Then everyone splits up, has flashbacks, and yes they all suck IRL as well as on I-Land. The past is a land of crying people and shitty Instagram filters, and repeated scenes because they didn't film enough to pad the episode out. Now, serious SF moment here: I don't think any kind of memory suppression is plausible, the brain doesn't work like a database, something this targeted and reversible especially not, and it's completely contrary to the reformation attempt. So the main plot point technology is just nonsense fantasy.

Chase continues to be the only interesting character, so Cooper runs off after her to stay relevant and on-camera. We do eventually learn a whole sad backstory, except: It is implausible they would both be incarcerated together, both taken in the program, and hook up again despite memory wipe. It feels tacked on, or like Lost the soi-disant writers were just making up bullshit as they went along.

Taylor sails away to II-Land (second island, ha ha), which has the single dumbest plot element in the show; never drink free chicken soup! Bonnie & Clyde showing up to be shitty Rod Serlings is just salt in the wound. Said shitty plot element is never seen; is it another player or an NPC or just B&C?

Nothing at all is resolved, until KC and her bozo follower confront Chase & Cooper, violence ensues, B&C show up, and there's quite a good fight scene again. The fight choreography is quite good, someone competent was running that. But also here KC and her bozo just vanish when no longer relevant to the plot.

And finally in E7, back in "reality" more or less, Chase gets released because everyone believes a single thing Cooper says. Except we have to sit thru more of the Warden being an idiot, the doctor & academics being patronizing, everyone getting some kind of comeuppance which is very implausible; especially putting anyone new into the simulation.

The final twist about Chase isn't really shocking, since she didn't recognize any advanced tech in E3, it had to be some time ahead, but it's too far: A 50-year-old woman who's been in a sensory deprivation tank for 25 years cannot do the fighting we saw in E3.

The casual "Galveston is flooded" thing is cute, but a real post-Global Warming Galveston isn't going to be a temperature-habitable zone either.

They seem to think she's doomed, being discharged with pocket money & bus fare; that's stupid, she can go to any tabloid successor of Buzzfeed and make millions on the story, and any yellow rag journalist can write it better than these writers did.

The entire series is so terribly written it may as well have been improvised by the actors, except they did all the flashbacks, so it's actually scripted this badly. The same premise, if handled by a competent writer, director, and hiring more than one competent actor, and having more fight scenes, could've been much better.

★★½☆☆

What I'm Watching: The I-Land

10 very pretty people wake up with amnesia on a beach, on a deserted tropical island. As they wander, they find useful items for survival. If they go in the water… da-dum da-dum… They have some stupid interpersonal drama.

Then the very telegraphed "twist" happens; which given the staticky intro effect, and the unreal nature of many events, should be no surprise at all.

Up thru E2 it's a mediocre Lost with really terrible dialogue and deliberately no character development. Then E3 is the exposition ep, but the writing is even worse, with a fat moron not answering questions, then terrible caricatures of academics not answering questions. The only saving grace is one good action scene. But these supposed future police have no idea how to handle prisoners, they're like the idiot cops in Demolition Man trying to handle Wesley Snipes, but this isn't intended as dark comedy.

★★½☆☆ as of E3 out of 7 — If I hadn't seen Lost, The Cell, or Demolition Man, I'd think this was at least sort of creative. Probably some people will call out The Matrix, but that's a happier kind of prison.

The thing of casting only pretty people for the island and often ugly ones for outside is a shallow trick, and I find it kind of insulting.

A Scheme of Gerbils Runnin' in a Wheel

Chicken's mediocre performance is causing me problems, so I'm taking yet another language tour/spike.

Looking at Gerbil Scheme, as a faster Scheme and as a bonus it's closer to R7RS. It has far less library support than Chicken, but does have a FFI, and compiles to a native binary through C, so I really don't need too many libraries.

Instead of the #!key #!optional #!rest keywords used in Chicken and some others, Gerbil uses a literal template style for functions:

;; Chicken: (define (foo a #!key (b 'bar) #!optional (c "see?") #!rest rest)
;; Gerbil:
(def (foo a b: (b 'bar) (c "see?") . rest)
    (print "a=" a " b=" b " c=" c " rest=" rest "\n")
)
(foo "Mark" 1 b: "bees!" 'what) ;; note out-of-order optional & keyword
;; a=Mark b=bees! c=1 rest=what

I like this style better, but I dislike the "def" keyword (which uses the enhanced lambda that does this) instead of "define" which uses "lambda%" (traditional lambda).

Gerbil uses [] for list construction, and {} for method dispatch, so goodbye to the nicely distinguishable braces I was using in Chicken. The spec says implementations can do what they want with those symbols, but I wish they wouldn't. Ah, well. I'll add a shitload more whitespace and some comments and it'll be fine.

The struct/object system in Gerbil is pretty nice, they're slightly upgraded records, but there's an (@ obj field) syntax instead of (MyClass-field obj), and (defmethod {mymethod MyClass} ...) creates a polymorphic {mymethod obj args} which finds the right method for any object, which is especially useful for inheritance.

I tried doing some VT100 graphics just to proof-of-concept, but it's doing something to the terminal, such that the same escape codes which work in Python don't clear the screen fully in Gerbil. After a short losing battle with stty and termcap, I give up on that and I'll jump right to writing a C FFI to SDL, because in 2019 that's easier than writing to a console.

Daily reminder that everything we have made since 1984 is overcomplicated junk. On an Atari 800, this took a few seconds to type, and you could start coding a nice UI instantly:

atari-is-awesome-graphics1

Alas, we live in a fallen world, so this is going to be trouble. Here's my Gerbil FFI template so far:

package: myffi

(import
    :std/foreign
)

(export #t)

(begin-ffi
    ;; names of all Scheme wrappers to expose
    (chello)

(c-declare #<<CDECLEND

#include <stdio.h>

int chello(void) {
    printf("Hello this is C!\n");
    return 1;
}

CDECLEND
)

    (define-c-lambda chello () int "chello")

) ;; begin-ffi


; TODO for constants: (define FOO ((c-lambda () int "___result = FOO;")))

(define (main . args)
    (chello)
)

Gerbil has a Scheme-based build system, but I'm a caveman so I make another build.zsh:

#!/bin/zsh

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

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

mkdir -p bin

main=`basename $1 .scm`

gxc -exe -static -O -o bin/$main "$@" || exit 1
echo "Built bin/$main"

Now:

% ./build.zsh myffi.scm
Built bin/myffi
% bin/myffi
Hello this is C!

Hooray! Unconditional success! Only took all afternoon and a half-pot of coffee!

Now I "merely" have to wrap all of SDL (well, just the parts I need) and get linking working and oh sweet merciless Cthulhu. And I still won't know how much this'll help my performance until I'm days into it. But, the first step is the hardest.

Not-Atari Still Has No VCS

"Atari SA", formerly Infogrames who bought the name, are still not shipping their fantasy "modern VCS", to everyone's total lack of surprise.

This is just about physically painful as these useless parasites take peoples' money (not mine) for a grift, based on love of what a different company named Atari was like 30-50 years ago.

Now they're so shitty, their con so obvious, they've been removed from moderation of the subreddit about them.

Code Mystics' Atari Greatest Hits collection is unrelated, and a fantastic emulation on iOS and DS.

REXX Primes

Just a quick sanity check on performance.

/** primes.rexx */
/* Created 2019-09-26 */
/* Copyright © 2019 by Mark Damon Hughes. All Rights Reserved. */

PARSE ARG primeCount
IF \ DATATYPE(primeCount, "W") THEN DO
    SAY "Usage: primes.rexx N"
    EXIT 1
END

CALL clearPrimes
CALL sievePrimes
CALL printPrimes
EXIT 0

clearPrimes: PROCEDURE EXPOSE primes. primeCount
    primes. = 1
    primes.0 = primeCount
    primes.1 = 0
RETURN

sievePrimes: PROCEDURE EXPOSE primes. primeCount
    DO i = 2 TO primeCount
        DO j = (i * i) TO primeCount BY i
            primes.j = 0
        END
    END
RETURN

printPrimes: PROCEDURE EXPOSE primes. primeCount
    DO i = 1 TO primeCount
        IF primes.i THEN CALL CHAROUT , i || " "
    END
RETURN
# REXX: 0.8% C
% time rexx primes.rexx 1000000 >~/tmp/primes-rexx.txt
rexx primes.rexx 1000000 > ~/tmp/primes-rexx.txt  6.43s user 0.36s system 99% cpu 6.831 total

# Regina: 1.53% C
% time regina primes.rexx 1000000 >~/tmp/primes-regina.txt
regina primes.rexx 1000000 > ~/tmp/primes-regina.txt  3.25s user 0.26s system 99% cpu 3.521 total

# Python: 4.8% C
% time ./primes.py 1000000 >~/tmp/primes-python.txt
./primes.py 1000000 > ~/tmp/primes-python.txt  0.75s user 0.02s system 68% cpu 1.123 total

# Julia: 1.4% C
% time ./primes.jl 1000000 >~/tmp/primes-julia.txt
./primes.jl 1000000 > ~/tmp/primes-julia.txt  0.45s user 0.35s system 21% cpu 3.797 total

Most of REXX's bad time can be attributed to using stem variables in a tight loop, effectively string-keyed hashtables, so I'm sure an ooRexx Array implementation would be significantly faster. But stems are what you'd use in "real code", so caveat coder. In a long real-world program I don't think it's as big an issue, but it's definitely not received the kind of optimization love that newer languages have. Aesthetically, the REXX source is a little wordier and more explicit about globals access, but not hard to write or read.

I went ahead and grabbed Regina, and it doubles the speed of ooRexx. I'm still wary of it, but that's a big win.

Python's not terrible at anything; it's within a stone's throw of a compiled language at this point. Competent mediocrity has really made Python the new dynamic Java of our time. But you still can't do multithreading in it.

Julia's slow because the startup time is just atrocious; if I timed it internally after startup it'd be as fast as a compiled native program, but as a scripting language Julia's bad news.

(I do have real work to do, but I'll keep playing with REXX more over the next few days)