Author: thad

How to Strip DRM from Kobo Purchases

Expanded from a post at brontoforum.us, 2024-05-28.

I like the Humble Bundle. I've bought rather a lot of games, comics, and books there.

Usually the comics and books have been DRM-free, but recently they've had a couple of bundles, including a Discworld bundle and a TMNT bundle (still available as of this post), that, instead of being straight DRM-free file downloads, required that buyers redeem DRM-encumbered files from Kobo.

Fortunately, it's not difficult to strip DRM from Kobo downloads, so that you can read your books on whatever device and in whatever app you choose. Here's how:

Download and install Calibre.

Download DeDRM tools (make sure you get it from the noDRM repository, not the original apprenticeharper one; the latter is no longer maintained).

Extract the zip file.

In Calibre, go to Preferences → Advanced → Plugins. Click "Load plugin from file", browse to the directory you just unzipped into, and install both _plugin.zip files. Restart Calibre after both are installed.

Install Kobo Desktop (direct link to kobosetup.exe). Run it, log into your Kobo account, and download the books you want. Once they're finished downloading, quit out of the Kobo app.

In Calibre, click the "Obok DeDRM" link in the top bar. From there it's pretty self-explanatory; whatever books you select will be added to your Calibre library and you can find the epub files in your file browser.

That's it for stripping the DRM, but there's one more thing I noticed: it turns out that my comics reader app of choice, Perfect Viewer, doesn't really work very well with epub files; for some reason it doesn't support the same features for epub as it does for cbz/cbr/pdf files (eg automatically showing two pages when rotated). Fortunately, there's a dead-simple workaround: change the file extension from .epub to .cbz. (A CBZ is just a zip file of images; an EPUB is basically a zipped website. Change the extension from EPUB to CBZ and PerfectViewer just ignores the HTML files and looks for the images.) YMMV depending on your reader of choice; some will show side-by-side pages without issue (like Calibre's built-in reader) and the file extension trick may not work in others (since the images aren't at the root of the zip file; in that case you may need to extract the EPUB and then re-zip just the images into a CBZ file).

So Some Stuff Happened

So, to use a phrase that's appeared more than once over the course of the...Jesus Christ, 25 years? I've been writing this blog: I've been meaning to blog more.

It's been a wild couple of years. In 2022, my grandma Alice died; in 2023, I became a father. Maybe I'll talk about those things more, and maybe I'll just talk about Ninja Turtles comics and old Nintendo games. I haven't decided yet.

My Favorite Episodes of The Lone Gunmen

Following my previous posts on my favorite episodes of The X-Files and my favorite episodes of Millennium, I will now complete the trifecta with my favorite episodes of X-Files spinoff The Lone Gunmen. This won't take long.

(This post reuses some stuff I wrote on Brontoforumus, 2022-08-26.)

Episode 6: Madam, I'm Adam

The always-great Stephen Tobolowsky plays the eponymous Adam, a man who comes home one night to find there are other people in his house and there's no evidence he ever existed. He tells Jimmy and Byers that he's from another universe and in this one he doesn't exist.

That's right: it's a riff on Flow My Tears, the Policeman Said.

Or is it? In an amusingly specific third-act twist, it turns out it's actually a riff on a different Philip K Dick story.

It's got its problems, including some ableist language: several of the characters in this one are little people and they're repeatedly referred to by the M-word, and look, there was a time that word wasn't considered a slur, but 2001 was not it. There's also a moment where Langly loses his temper with Adam and calls him a "re-" before stopping himself. I guess they at least knew that one was too far, but jeez, you guys.

And there are some problems on the plot side. I'd really like to know more about Lois and why she is doing the things she is doing! Like, is she just a sex pervert? I kinda feel like she might just be a sex pervert.

But still! Flaws aside, I really liked this one.

Episode 8: Maximum Byers

You know those TV episodes where the good guys go undercover in a prison to try to exonerate an innocent man? This is one of those, with Byers and Jimmy going to prison.

It's got a couple of uncomfortable racial stereotypes, including the violent Latino and the wise Black man. And it's got some tonal shifts that maybe work to the detriment of its overall consistency but, to my mind, make it more interesting.

Episode 11: The Lying Game

Guest-starring Mitch Pileggi as Skinner, who just can't stop getting accused of murdering people. Also guest-starring Mitch Pileggi as Jimmy pretending to be Skinner.

Content warning: like the film it takes its name from, this episode treats a character being trans as a plot twist, and, while it's a sensitive portrayal for 2001, the other characters describe her using some phrases that wouldn't be considered appropriate today.

Final Fantasy ROM Hacks

I listened to a recent episode of the Retronauts podcast focused on Final Fantasy ROM hacks, hosted by Nadia Oxford and featuring guests Andrew Vestal and my old friend Steve Tramer.

Unfortunately podcasts aren't exactly the ideal medium for helping people find things on the Internet, so I've gone ahead and taken the liberty of putting together a list of the ROM hacks (and at least one fan game) they mentioned, with links.

I haven't played most of these, but FF6 T-Edition is great, and these guys have pretty good taste in 8- and 16-bit Final Fantasy games. Andrew's Unofficial SquareSoft Homepage was the best Square fan site back in the early days of the Web (or at least the best English-language one), and Steve loaned me a fair few Square games back when we were kids. (We, ah, also managed to work FF6's Opera House scene into a Sonic the Hedgehog fanfic we wrote when we were 12, but try not to hold that against us.)

I think these are all the hacks, translations, and fan games they mentioned in the episode, but if I missed any or got any wrong, drop me a line and let me know.

Update 2024-12-17: Updated links, as romhacking.net is no longer hosting new updates. Where possible, I've pointed to the project maintainer's site, or at least to the relevant thread on the RHDN messageboard.


Final Fantasy


Final Fantasy 1 & 2: Dawn of Souls


Final Fantasy 2


Final Fantasy 3


Final Fantasy 4/Final Fantasy 2 US


Final Fantasy 5


Final Fantasy 6/Final Fantasy 3 US


Breath of Fire


Breath of Fire 2


Skies of Arcadia Legends


Galaxy Fraulein Yuna


Private Eye Dol

Plus ça Change

Expanded from a post on brontoforum.us, 2022-11-30.

This website moved to a new hosting provider last week; the old one shut down.

I've been feeling kinda weirdly melancholy about that, actually.

I'd been at that last hosting provider since 2007. And that hosting provider was my first Real Job -- the one where I moved out of my grandparents' house and got my own place.

It was a lousy job and the pay was shit -- I'm making more than three times as much now for a job that's nowhere near as stressful -- but my brain still associates it with a pivotal moment in my life.

And I was kinda off in the middle of North Bumfuck and didn't know anybody on that side of town, and it was lonely sometimes, but I had friends around the valley who'd come visit. So I also associate it with old friends. Including an old girlfriend.

It had its moments, y'know? It was my first real taste of adulting.

It's kinda funny, looking through my old posts and thinking about how I've changed. I used to variously refer to Halloween and New Year's Eve as "my favorite holiday". Now they just kind of go by without me paying too much attention to them.

I'm forty, I don't go to parties anymore, most of the friends I used to go to parties with moved out of town. I've mostly stayed within a few miles of where I was born. When I stay up late I get a headache, and my opinion of fireworks has changed significantly since I got a dog. And all that was before the once-in-a-century pandemic. Except for the being forty part; that's new.

It's not that I don't like nostalgia or looking back. Hell's bells, moving my website to a new server makes me nostalgic for a shitty job I quit 15 years ago. It doesn't take much. I don't need New Year's Eve to wax nostalgic, and what good is a three-day weekend if I spend a day of it with a headache from staying up too late?

Anyway, the website's been migrated to a new host. Hit up the contact page if you find anything that's not working. Unless it's the mobile sidebar; I already know about that. You know what I'm nostalgic for? WordPress 4.

One foot out the front gate

As readers of this site (if any) are no doubt aware, there are a lot of things that make me feel nostalgic. Moving is one of those things.

It's a goodbye of sorts. "Beginnings and endings," as my high school drama teacher used to say on closing night.

I'm finally getting rid of the old Ikea furniture I bought when I moved into my first apartment in 2006. And I think about those times -- first apartment, first furniture, first flatscreen TV, first car, first full-time job --, and mostly they were lonely. I was out in north Phoenix, 25 miles away from anybody I knew, working a shit job and getting paid about a third of the fair market value of my work. The wonderful world of IT in the post-dotcom-crash era.

But, y'know, it wasn't all bad. It's not like I was completely isolated. I had friends who'd make that 25-mile drive, from Glendale or Scottsdale or Fountain Hills or wherever they happened to be. Other folks going through the same thing I was, twentysomething kids figuring out how to adult. Watching Firefly and Justice League and walking to the outdoor mall nextdoor to see Aqua Teen Hunger Force Colon Movie Film for Theaters. We had some good times.

And y'know, what would nostalgia be without thinking about old girlfriends?

One of those friends I spent some time with, back at that old apartment, was a woman I used to date. We'd gotten reacquainted since. There's something about having somebody to talk to who knows you that well, but the both of you coming back older and, hopefully, wiser -- at least, wise enough not to do anything stupid like try to date again. At any rate, I think she was going through some similar stuff in those days; I don't know if she was as lonely as I was (she always had an easier time making friends), but she was probably even more miserable in her job. And we were there for each other.

And I'm looking through some of the other stuff I'm packing, or leaving, and my mind's moving on a few years, to another move, and another girlfriend. And that move was one of the most consequential decisions of my life, though it didn't seem like it at the time.

In 2009, I moved in with a woman I'd been dating for six months or so. I'm not sure we were entirely clear that that was what we were doing at the time; she still had her own apartment. But her brother was staying at her place, and she kept staying at my place, and eventually we realized my place was actually our place.

Our first home. And I'm putting stuff in boxes and bags and I think of the good times and the hard times we went through there. I pack meds and I think of nights we spent in hospitals, and I think those nights were what forged our relationship into something lasting. Even more than the wedding, I muse, as I take down the wedding photo hanging on the wall.

I pack my laptop and remember I bought it after the last one was stolen. I pack dog toys and I think of the puppy we brought home a few days later.

And then we moved again. Seven years ago, to the week -- I remember because it was the Fourth of July and it was pouring rain.

And if that other house was our first home, this one was the first house that was our house. With the custom cabinetry, the closet space for my comic collection, the big shed where I have too much old shit that I've at least pared down a little now that we're moving.

I'll miss the place. It's been a great place to live these seven years. Hell, just in the past year we've hunkered down here during COVID-19 and dealt with the aforementioned puppy's recovery from hip surgery. (She likes to jump into our bed with us, so we broke down our bedframe and put the mattress right on the floor to stop her from jumping. It was hell on our backs, but she's recovered nicely.)

The places I've been, the people who've been there with me, even the furniture I've bought and all the assorted shit I've accumulated over the years -- well, at least I'm getting rid of some of it -- all that's part of the story. Most of it has a memory attached. Good ones, bad ones -- and on balance, I'd say mostly good.

I'll miss this place. But the new place is good too. Someday I'll be thinking back on all the memories I'll have made there. Beginnings and endings, huh? Yeah, I can see that.

Libertarian Fortune Cookie

The other day I got some Chinese takeout. We got to the end of our meal and opened our fortune cookies.

The first fortune said, "Early to bed, early to rise makes a man healthy, wealthy, and wise." Which is not a fortune, it is a Ben Franklin quote.

The second fortune said, "A penny saved is a penny earned." What the hell? Did we get a bunch of Ben Franklin fortune cookies?

And the third said, "Taxes are a fine on success."

Okay, what the actual fuck? All of a sudden we've switched from Ben Franklin fortune cookies to Libertarian fortune cookies.

And look, dude, I don't know what writing cookie fortunes pays? But if your job is writing cookie fortunes, then I'm gonna go out on a limb and suggest that whatever taxes you're paying are not a punishment for your massive financial successes.

Poor Libertarians baffle me. Back when I worked in the PetSmart phone bank, there was a guy who sat across from me who was a young Libertarian. One time, somebody asked if he'd voted for Obama; he responded, "No; he wants to raise my taxes."

I thought, "Motherfucker, we have the same job; I know what you make and Obama has definitely not raised your taxes," but I did not say it, because I try not to talk politics at work, or to address my coworkers as "motherfucker."

I guess poor Libertarians are just an object example of Ronald Wright's quote, paraphrasing John Steinbeck: "Socialism never took root in America because the poor see themselves not as an exploited proletariat but as temporarily embarrassed millionaires."

Put that in a fucking fortune cookie.

Block Comments by EricJ on mst3kinfo.com

If you're a longtime reader of Satellite News (mst3kinfo.com) like me, you know that it's got a pretty good comments section, except for two things:

  1. A particularly obnoxious and persistent troll by the name of EricJ who insists on pissing in everyone's cornflakes; and
  2. A bunch of other posters with poor self-control who insist on responding to him.

And so, in the tradition of my Hide Techdirt Comments script, I've written a userscript that will block EricJ and replies that quote him. Works with Greasemonkey, Tampermonkey, and presumably any other similar userscript plugins that may be out there.

If there's anybody else who bothers you, you can add other usernames to the blacklistedUsers array, too.

And ordinarily, I wouldn't even name the troll I was talking about, because the entire point here is that you shouldn't give trolls the attention they crave -- but I figure you know, this post might prove useful to other Satellite News commenters, so I should probably put his name in it so that maybe somebody will find it while searching for a way to block all comments from, and replies to, The Original EricJ on mst3kinfo.com.

Enjoy.

// ==UserScript==
// @name          Hide Satellite News Comments
// @namespace     http://corporate-sellout.com
// @description	  Hide comments on mst3kinfo.com, based on user
// @include       http://www.mst3kinfo.com/?p=*
// @require       http://www.mst3kinfo.com/wp-includes/js/jquery/jquery.js
// ==/UserScript==

// List of users whose comments you want to hide --
// you can add more names to this list, but let's be honest, you want to block EricJ.
const blacklistedUsers = [
  'The Original EricJ'
];

const $ = jQuery;

// Comment class
// Constructor
function Comment(node) {
  this.node = node;
  this.nameBlock = $('.comment-author > .fn > a', this.node);
  this.name = this.nameBlock.text();
  this.quotedUserBlock = $('a[href^="#comment"]', this.node);
  
  this.quotedUser = this.quotedUserBlock.length === 1
    ? this.quotedUserBlock.text()
    : '';
}

// Functions
Comment.prototype = {
  constructor: Comment,
  
  check: function() {
    if(
      blacklistedUsers.includes(this.name)
      || (this.quotedUser !== '' && blacklistedUsers.includes(this.quotedUser))
    ) {
      this.node.remove();
      return true;
    }
    return false;
  }
};

$('.comment').each(function() {
  const cmt = new Comment($(this));
  cmt.check();
});

License

I'm not a lawyer, but my opinion as a programmer is that this script is too short, simple, and obvious to be copyrightable. As such, I claim no copyright, and offer no license, because none is needed. Use it however you want, with the standard disclaimer that it comes with absolutely no warranty.

Fell Seal

You know what game I've been enjoying lately? Fell Seal: Arbiter's Mark.

It's from developer 6 Eyes Studio and publisher 1C Entertainment, and it's an unabashed homage to Final Fantasy Tactics.

I think that's an underserved niche. There are plenty of tactical RPGs (like Fire Emblem) and their close cousins, turn-based strategy games (like XCOM). But most of them don't feel quite like Final Fantasy Tactics or its predecessor, Tactics Ogre.

Fell Seal does. Its storyline isn't quite as complex or as epic as those games', and its soundtrack is fine but doesn't feel as inspired as theirs. (After a round of Fell Seal, I tend to find myself humming tunes from FFT -- though FS's tunes are beginning to stick in my head themselves now.) But its mechanics? Those are damned impressive. Especially from such a small team (per their The Team page, two leads and nineteen contractors).

As of this writing, I'm eight hours or so in. I haven't seen every map; I haven't unlocked every class. But what I've seen so far has kept me excited and engaged in that FFT "just one more fight" way. Every class so far has been useful; every skill tree seems well-considered. And look, FFT is one of my favorite games of all time, but it's not perfect; there are a whole lot of useless skills in there, such as most of the Archer class's "Charge +n" abilities, and Cloud's Limit Breaks for the same reason. Fell Seal doesn't have a charge mechanic; abilities all execute right away. And I haven't found a class yet with abilities that weren't useful (though I admit I'm not quite sure about Gadgeteer just yet). Beyond your basic classes (Merceneries are a well-rounded base class, Menders heal, Wizards damage from a distance, Knights damage from up close, Scoundrels are quick and maneuverable), you get some more interesting choices, like the Plague Doctor, who has debuff-focused attacks but also a base AoE ability that removes debuffs and heals a small amount of HP. There are useful passive skills, too: Wizards can learn an ability that prevents offensive magic from harming allies or healing magic from healing enemies; it's a major boon for any spellcaster.

I haven't even tried the crafting system yet.

It's not a perfect game -- I don't love the character graphics, and while I do love the environment graphics, the decision to go with hand-drawn environments means you can't rotate the camera, which is inconvenient on some stages (for example, when a character is standing under a tree branch and you can't see them). But it's a damned impressive game, that I've already derived hours of enjoyment from and expect many more. The game has some excellent granular difficulty settings, and while I'm enjoying it on the defaults, I'm also looking forward to playing it again on a harder difficulty sometime.

As of this writing, the game is in Steam Early Access. However, it's scheduled for a release sometime next month, and the version currently on Steam is nearly final; according to the release notes, the only things missing are the ending and a secret bonus dungeon. The price has recently gone up from $20 to $30; I believe that will be the final price on release but I'm not 100% certain. I'd still recommend it if the price went up to $40.

But whether you get it now in Early Access or wait a few weeks for its full release, I heartily recommend this game. If you like tactical RPGs in general, and especially if you like Tactics Ogre and Final Fantasy Tactics in particular, you should buy Fell Seal: Arbiter's Mark. I don't think you'll be disappointed.

Fell Seal is available for Windows, Mac, and GNU/Linux, with Xbox One and PS4 versions on the way; I'm playing the Linux version. There's a free demo at itch.io, though I had some trouble with it (I couldn't get shops or guild halls to work, which left me short one party member on the second battle and made it much harder; I haven't had any issues with the full version of the game).