fortyseven

ToneDef 21

2021-06-06 

After a long hiatus, I finally have a good build workflow for Android again — which means I can push out some updates to ToneDef!

Presenting build 21!

This was more of a “proof of concept” build with the beginning of some CI to automate checks, etc.  I’ve already started working on the audio “popping” bug, and looking into some other reported issues. Those are being saved for 22.

What’s new:

  • Added French tones to the ‘extras’ section
  • Added link back to my blog (as seen below)
  • Minor layout updates, including removing action bar from most screens (will remove the rest later)
  • Code cleanup, refactoring, and other behind the scenes updates

Concerning “The Goonies”

2021-06-05 

Finally caught “The Goonies”. Another in a long line of films I knew 80% about but never actually sat down to watch, start to finish.

As good as expected, but I never knew about this downer ending. 😞

Review – The Mitchells vs. The Machines (2021)

2021-05-07 

View post on imgur.com

The Mitchells vs. The Machines just might be my new favorite animated film.

Or at least it slots into my Top 3 with ease. This is possibly the funniest and most creative film I’ve seen in a long time.

The characters take almost no time to get to know and love. There’s an insane energy to the film.

It’s almost like… ugh, this is a VERY strained analogy that I’m not entirely comfortable with, but I can’t get it out of my head: the happily “outsider” vibe of The Addams Family crossed with the family unity of the Belchers from Bob’s Burgers. (Hell, the mom is even named ‘Lin’.) Then mix in a dash of Gravity Falls, and lots of energy drinks.

And then send them all on a road trip to save the world.

The comedy is often quite hyperkinetic but there isn’t a dud in the batch. For a lesser film a fast pace of “random” and pop culture might be a negative, but The Mitchells own it and thread that needle with ease. It never becomes obnoxious.

Honestly, I can’t praise it enough. I LOVED this flick and I’m kind of clawing the desk to throw it on again.

I sincerely hope they consider follow-ups in the style of a “The Mitchells vs….” series, keeping the same writers. Because they’ve REALLY got something special here.

⭐⭐⭐⭐⭐

https://letterboxd.com/drfortyseven/film/the-mitchells-vs-the-machines/

Review – The Falcon and the Winter Soldier

2021-04-24 

Loved everything with Sam and Bucky. Especially Sam’s journey, and the stuff with Isaiah Bradley.

Walker was amazing, too. And not that I don’t think he was beyond redemption, but it was rushed. I mean, he teams up easily with the guys who BROKE HIS ARM and took the Cap mantle from him the last episode (though I get some time has passed).

These two storylines seemed to be the most important parts of the show, and received the most attention.

They were almost perfect.

But everything with Sharon and the Flag Smashers (hey, band name!) felt mediocre. At best, shoehorned in. The best guess I’m hearing going around is that the Flag Smasher narrative possibly centered around a pandemic, and well… given the COVID situation, they had to hastily butcher it up into something… incoherent.

But regardless, it was weak. And unfortunately the entire series wrapped it’s overall narrative on that brittle skeleton.

The real MVP, though? The Baron. Give him his own series, please. Just all Zemo all the time. He was the most fun I had with the show. Unfortunately it felt like he was there just to setup a go at the Thunderbolts later, because he had almost no real impact on the story (his butler’s hilarious moment in the finale aside).

That said, looking forward to a second season, if they do it. The title characters made it worth watching, and I’d happily give it another shot with a new, hopefully better constructed story. One that doesn’t get butchered up in editing like this one appears to have been.

Bring on Loki!

⭐⭐⭐

Review – J.R. “Bob” Dobbs and The Church of the SubGenius (2019)

2021-04-19 
PROPAGANDA-FILM-PRAISE-CONTRACT-FULFILLMENT-FINAL2.DOC EXPORT SUCCESS page 1 of 1

As a backer, it took a surprising amount of time to finally get access to the film.

And then when I finally received access, I sat on it even longer.

Some might consider that appropriate for the subject matter: I was void of slack and mad, and then received the slack at my leisure once I was given a choice.

That said, I’d had high expectations for the film — my only concern being that the title would make it difficult to search for, or worse, drown out other Church propaganda.

But I was wrong on both counts: it’s easy enough to search for, if you quote the title exactly.

And this documentary exceeded my expectations.

Sure, the Church “comes clean”, finally. But if you’ve paid even a modest amount of attention to the Hour of Slack radio show, or other Church related materials over the years, there isn’t REALLY a whole lot new here. If you’re not a “Bobbie” and had a reasonably good sense of humor, you were already in on the joke.

But it’s nice to have it “for the record” and all in one place. And the presentation just oozes quality, with some lovely animations interspersed among the heaps of old VHS recordings.

This is a terrific doc. I’m not sure about the appeal for those not already familiar with “Bob”, but maybe it will awaken something in you. 😉

⭐⭐⭐⭐⭐

https://letterboxd.com/drfortyseven/film/jr-bob-dobbs-and-the-church-of-the-subgenius/

X-Day Countdown

2021-04-04 

A couple years ago, I created an Android Wear (now “Wear OS”) watchface (on Google Play) that threw the gaze of “Bob” upon you while you read the time. If you tapped the clock, it would also show you a countdown to that magic hour of 7am on July 5th when you get whisked away just in time for the end of the world.

Wear OS sucks. But I enjoyed working on the watchface. And I wanted some exercise with Svelte. So here it is!

XDayCountdown.com!

I’m going to refine this a bit as time goes on. And I’m sure there’s some subtle (or not so subtle) bugs in there.

There’s no SECRETS yet (or are there?), but I hope to add something fun to help usher in The Moment when it comes. 😉

Source, of course, is available over here: https://github.com/Fortyseven/XDayCountdownSite/

Review – Snyder’s Justice League (Spoiler-free)

2021-03-19 

I’ve been very much critical of the whole “Release the Snyder Cut” movement. It’s supporters were, more often than not, entitled, angry, vocal assholes.

Imagine my dread when the studio decided to capitalize on that movement and make it happen to bolster HBO Max.

Much to my surprise, this actually takes a mediocre movie and makes numerous improvements. Dare I say this is a much better film than Whedon’s attempt with Justice League in 2017. It’s by no means free of flaws, but the narrative flows better. The new content does a lot of fleshing out, too.

And even though I’m, by far, not a fan of Snyder’s visual style — I heard someone refer to it as a “motorcycle grease” aesthetic. Visually this film fits better with the previous entries. (I do miss Whedon’s saturation, at least.)

Was it worth the $70 million fucking dollars to fix the film? Absolutely not. Good lord!

But the deed is done. No use complaining about THAT at this point.

The only real black mark on this take: it’s FOUR hours long, with no real justification for that length other than to let you soak in the film’s grease for long stretches as music fills the void.

The length is going to make future viewings prohibitive. It’ll keep this from making it the de facto version of Justice League, I think. And that’s a shame, because it really is a “patch” that fixes a lot.

Finally, against all odds, I can actually say: I’d like to see Snyder do a sequel film. I dislike his style, but I’m finding myself unexpectedly invested now. He’s turned me around on how I feel about this film in general.

That’s nothing short of a personal miracle.

⭐⭐⭐⭐

https://letterboxd.com/drfortyseven/film/zack-snyders-justice-league/

Behold Your Vector Nightmare, Amiga Fans

2021-03-06 

Over on Hacker News there was an entry about the “awful” Amiga Kickstart 1.x icon and why it looked the way it did. This led to a link over on Stack Overflow where it was revealed that this was graphic actually drawn in a vector style, as opposed to raster pixels.

They also provided the actual bytes used to render the graphic. I thought it’d be fun to write a little parser to render these bytes.

And so did several other people, apparently, as I’m discovering now. 😐

Anyway, here’s my humble Codepen. And if that goes down, the original code is below the embed. 😎

(I skipped flood fill because I used two.js for this, and didn’t realize until it was too late that I’d chosen poorly. Easy enough to swap out the graphics library, but it’s time to move on.)

See the Pen Amiga Kickstart vector parser by Toby D (@Fortyseven) on CodePen.

/*
    Inspired by:
    https://retrocomputing.stackexchange.com/questions/13897/why-was-the-kickstart-1-x-insert-floppy-graphic-so-bad/13901

    2021-03-06
    \*/

const floppy = [
  0xff, 0x01, 0x23, 0x0b, 0x3a, 0x0b, 0x3a, 0x21, 0x71, 0x21, 0x71, 0x0b, 0x7d,
  0x0b, 0x88, 0x16, 0x88, 0x5e, 0x7f, 0x5e, 0x7f, 0x38, 0x40, 0x38, 0x3e, 0x36,
  0x35, 0x36, 0x34, 0x38, 0x2d, 0x38, 0x2d, 0x41, 0x23, 0x48, 0x23, 0x0b, 0xfe,
  0x02, 0x25, 0x45, 0xff, 0x01, 0x21, 0x48, 0x21, 0x0a, 0x7e, 0x0a, 0x8a, 0x16,
  0x8a, 0x5f, 0x56, 0x5f, 0x56, 0x64, 0x52, 0x6c, 0x4e, 0x71, 0x4a, 0x74, 0x44,
  0x7d, 0x3c, 0x81, 0x3c, 0x8c, 0x0a, 0x8c, 0x0a, 0x6d, 0x09, 0x6d, 0x09, 0x51,
  0x0d, 0x4b, 0x14, 0x45, 0x15, 0x41, 0x19, 0x3a, 0x1e, 0x37, 0x21, 0x36, 0x21,
  0x36, 0x1e, 0x38, 0x1a, 0x3a, 0x16, 0x41, 0x15, 0x45, 0x0e, 0x4b, 0x0a, 0x51,
  0x0a, 0x6c, 0x0b, 0x6d, 0x0b, 0x8b, 0x28, 0x8b, 0x28, 0x76, 0x30, 0x76, 0x34,
  0x72, 0x34, 0x5f, 0x32, 0x5c, 0x32, 0x52, 0x41, 0x45, 0x41, 0x39, 0x3e, 0x37,
  0x3b, 0x37, 0x3e, 0x3a, 0x3e, 0x41, 0x3d, 0x42, 0x36, 0x42, 0x33, 0x3f, 0x2a,
  0x46, 0x1e, 0x4c, 0x12, 0x55, 0x12, 0x54, 0x1e, 0x4b, 0x1a, 0x4a, 0x17, 0x47,
  0x1a, 0x49, 0x1e, 0x4a, 0x21, 0x48, 0xff, 0x01, 0x32, 0x3d, 0x34, 0x36, 0x3c,
  0x37, 0x3d, 0x3a, 0x3d, 0x41, 0x36, 0x41, 0x32, 0x3d, 0xff, 0x01, 0x33, 0x5c,
  0x33, 0x52, 0x42, 0x45, 0x42, 0x39, 0x7d, 0x39, 0x7d, 0x5e, 0x34, 0x5e, 0x33,
  0x5a, 0xff, 0x01, 0x3c, 0x0b, 0x6f, 0x0b, 0x6f, 0x20, 0x3c, 0x20, 0x3c, 0x0b,
  0xff, 0x01, 0x60, 0x0e, 0x6b, 0x0e, 0x6b, 0x1c, 0x60, 0x1c, 0x60, 0x0e, 0xfe,
  0x03, 0x3e, 0x1f, 0xff, 0x01, 0x62, 0x0f, 0x69, 0x0f, 0x69, 0x1b, 0x62, 0x1b,
  0x62, 0x0f, 0xfe, 0x02, 0x63, 0x1a, 0xff, 0x01, 0x2f, 0x39, 0x32, 0x39, 0x32,
  0x3b, 0x2f, 0x3f, 0x2f, 0x39, 0xff, 0x01, 0x29, 0x8b, 0x29, 0x77, 0x30, 0x77,
  0x35, 0x72, 0x35, 0x69, 0x39, 0x6b, 0x41, 0x6b, 0x41, 0x6d, 0x45, 0x72, 0x49,
  0x72, 0x49, 0x74, 0x43, 0x7d, 0x3b, 0x80, 0x3b, 0x8b, 0x29, 0x8b, 0xff, 0x01,
  0x35, 0x5f, 0x35, 0x64, 0x3a, 0x61, 0x35, 0x5f, 0xff, 0x01, 0x39, 0x62, 0x35,
  0x64, 0x35, 0x5f, 0x4a, 0x5f, 0x40, 0x69, 0x3f, 0x69, 0x41, 0x67, 0x3c, 0x62,
  0x39, 0x62, 0xff, 0x01, 0x4e, 0x5f, 0x55, 0x5f, 0x55, 0x64, 0x51, 0x6c, 0x4e,
  0x70, 0x49, 0x71, 0x46, 0x71, 0x43, 0x6d, 0x43, 0x6a, 0x4e, 0x5f, 0xff, 0x01,
  0x44, 0x6a, 0x44, 0x6d, 0x46, 0x70, 0x48, 0x70, 0x4c, 0x6f, 0x4d, 0x6c, 0x49,
  0x69, 0x44, 0x6a, 0xff, 0x01, 0x36, 0x68, 0x3e, 0x6a, 0x40, 0x67, 0x3c, 0x63,
  0x39, 0x63, 0x36, 0x65, 0x36, 0x68, 0xff, 0x01, 0x7e, 0x0b, 0x89, 0x16, 0x89,
  0x5e, 0xfe, 0x01, 0x22, 0x0b, 0xfe, 0x01, 0x3b, 0x0b, 0xfe, 0x01, 0x61, 0x0f,
  0xfe, 0x01, 0x6a, 0x1b, 0xfe, 0x01, 0x70, 0x0f, 0xfe, 0x01, 0x7e, 0x5e, 0xfe,
  0x01, 0x4b, 0x60, 0xfe, 0x01, 0x2e, 0x39, 0xff, 0xff,
];

class AmigaVectParser {
  constructor(bytes, elem) {
    this.palette = ["#FFFFFF", "#000000", "#7777CC", "#BBBBBB"];
    this.offset = [0, 0];
    this.prevOffset = [0, 0];
    this.curColor = 0;
    this.isDrawing = false;
    this.buffer = bytes || [0xff, 0xff];
    this.done = false;

    this.two = new Two({ width: 640, height: 400 }).appendTo(elem);
  }

  doCmd(cmd_pair) {
    if (cmd_pair[0] === 0xff) {
      this.isDrawing = false;
      if (cmd_pair[1] === 0xff) {
        // cmd_done
        this.done = true;
        return;
      } else {
        // cmd_colorSet
        this.curColor = cmd_pair[1];
        return;
      }
    } else if (cmd_pair[0] === 0xfe) {
      // cmd_floodFill
      this.isDrawing = false;
      this.pointer += 2; //TODO FLOOD FILL
      return;
    }
    if (!this.isDrawing) {
      // first coordinate in a poly-line
      this.prevOffset[0] = cmd_pair[0];
      this.prevOffset[1] = cmd_pair[1];
      this.isDrawing = true;
      return;
    } else {
      // continuing the poly-line
      this.offset[0] = cmd_pair[0];
      this.offset[1] = cmd_pair[1];

      let line = this.two.makeLine(
        this.prevOffset[0] * 2,
        this.prevOffset[1] * 2, // doubling up X/Y to make it easier to see at 640x400
        this.offset[0] * 2,
        this.offset[1] * 2
      );

      line.stroke = this.palette[this.curColor];
      line.linewidth = 1;

      this.prevOffset[0] = this.offset[0];
      this.prevOffset[1] = this.offset[1];
    }
  }

  draw() {
    let cmd = [0, 0];
    let pointer = 0;
    this.done = false;

    while (!this.done) {
      cmd[0] = this.buffer[pointer++];
      cmd[1] = this.buffer[pointer++];
      this.doCmd(cmd);
    }
    this.two.update();
  }
}

renderer = new AmigaVectParser(floppy, document.getElementById("draw-shapes"));
renderer.draw();

The Unification III Rap Battle

2021-01-26 

First name: Michael. Surname: Burnham.
When I rock the mic, you KNOW that I’ll burn ’em.

It’s a hell of a shock: I’m the sista of Spock;
Now that’s a pedigree that yer pointy ears can’t block.

I’m from a distant time; I’m told that’s a crime;
Thousand-year start; yet you can’t hold these rhymes.

Now this trio of elves wants to challenge me?
Their Kal-toh’s collapsed, while my Chess game’s six-D!

Yap yap, your logic lacks validity;
More like Infinite Stupidity in Infinite Vapidity.

Now run along and go slap your gong;
When you return, you’ll admit you’re wrong.

I was lost before, but now I’m in my Prime;
Don’t look now, but it’s “Amok Time”!

Your blood is green, but I’m the reason queen;
Now shut the fuck up and and give up SB-19!

I was supposed to be working on the Terebikko research over Thanksgiving weekend here in the US, but instead we got treated to a pair of wonderful episodes of The Mandalorian and Star Trek: Discovery.

The latter of which featured Burnham forcing the Vulcan/Romulan leadership to respond by challenging them in a formal logic debate. And, well, I joked on Reddit that it was a “logic rap battle“… and many hours later… well… that happened.

It’s something pretty far out of my wheelhouse, but I actually put effort into it and did some research and stuff. And I’ve always enjoyed Epic Rap Battles of History, so maybe it’s been brewing in the back of my mind for a while. 😉