A Major QtExceptHook Update

For anyone who uses QtExceptHook, my port of the old gtkexcepthook.py script to PyQt5, I have an announcement I think you’ll appreciate… I just made a major update.

If you don’t use QtExceptHook, it’s a single Python file you can drop into your PyQt5 projects so that uncaught exceptions will appear as a user-friendly dialog box which harvests both the traceback and all the local variables at each level of the call stack. It also has your choice of a “copy to clipboard” button or a “report bug” button which invokes a traceback-sending callback of your choice.

…so, what features did I add?

  • In exchange for bumping the minimum Python version to 3.5, it now relies on the Python standard library’s TracebackException to generate the traceback and variable dumps, removing all the most opaque code I inherited and massively reducing the surface area for bugs that might not show up under basic testing.
  • It’s now fully documented in Sphinx-dialect ReStructuredText, in case you want to expose it in your API documentation. (Though it does assume you’ll be using the sphinx-autodoc-typehints and sphinx-qt-documentation extensions.)
  • The dialog is now resizable and the traceback preview now scrolls horizontally instead of wrapping.
  • I did a major refactoring of the Qt-specific parts of the script to make them simpler and more readable.
  • The example SMTP bug-reporting code now has error handling.
  • Qt’s QCommandLineParser is now used to provide a --report-button option so you can run the demo code both with and without a bug-reporting callback without having to edit the file.
  • The file is now TODO-free.

Enjoy. 🙂

Posted in Geek Stuff | Leave a comment

Making a 2-button Trackball Useful on Modern Linux

I was the kind of nerdy kid who read computer catalogues for fun before his tenth birthday, and one of the nerdy things I always wanted was a Logitech Trackman Marble… an early optical trackball with a distinctive patterned ball for the sensor to detect. (So distinctive that they still use it on the modern ones.)

Well, I got one in a box of nerdy hand-me-downs, but it’s the one I was eyeing as a kid, with two buttons and no scroll wheel… that won’t do.

Here’s a little script, adapted from someone else who had a similar problem with a Kensington trackball, which adds the following features:

  • Adjust pointer acceleration so use with a three-monitor spread isn’t an exercise in frustration
  • Press and hold the left button for 300ms without moving the ball to produce a right-button press (This seems to work perfectly well to allow me to do both left- and right-button dragging)
  • The physical right button is remapped as the middle button for clicking purposes.
  • Press and hold the physical right button to use the trackball as a scroll wheel
  • Adjust sensitivity of emulated scroll wheel to be usable for things like tab-switching without physical detents.
  • Enable both vertical and horizontal scrolling on the emulated scroll wheel.
  • Work around the cheap chinese USB-PS/2 adapter using the same name for both keyboard and mouse devices so it’s still possible to reference the pointer device by name. (To find the name of yours, run xinput in a terminal.)

It’s not perfect, since you can’t middle-click drag, and I still need to get some ScratchX to fix some scratches on the ball itself that cause an occasional hitch in its motion, but, aside from that, it’s surprisingly comfortable to use.

I’m not sure how much I’ll actually use it, but it’s nice to have it useful. Enjoy. 🙂

Posted in Geek Stuff | Leave a comment

Fanfiction – A Prince’s Duty

…and, in case you’re not into Naruto, here’s another one I had waiting in the wings:

A Prince’s Duty by BonusPoints

For all that Ranma ½ has a gender-transformative curse as such a central element of its narrative, there aren’t enough Ranma ½ fics that both attempt to focus on how it affects the characters psychologically and succeed at doing it.

Even worse, it’s almost impossible to find any stories that give Prince Herb of the Musk significant character focus, psychological or otherwise, since he’s from the half of the manga that never got adapted into the anime… this is one such fic. Not only that, it’s a story where Herb is a main character, the story starts out being told from his perspective, and it leans about as far toward “character piece” as you can go.

It goes into lots of satisfying detail on Herb’s motivations and thought processes. Just as important, it gives him opportunities to show that, when not being pissed off by Ranma, he’s as skilled in diplomatic discourse and as interested in acquiring politically important information as is appropriate for someone of his station, and it makes good use of the opportunity to use that princely objectivity to get a second perspective on Ranma’s canon situation. That is what a character piece should be… especially when you understand your characters and your readers well enough to use a line like this.

Herb was finding actively revealing her curse to be something too embarrassing to so much as attempt. She would leave that for Ranma to figure out.

It also has an interesting thread that never had time to play out in full before the story ended, but still helps to grease the wheels and make things interesting. Upon encountering Ranma at the Nekohanten, Lime jumps to the mistaken conclusion that Herb has secretly always been a girl and that “he” came to Japan to pursue Ranma as someone who can be a wife in public and a husband in private. Mint tries to correct him, but gets convinced instead, and Herb mistakes their innocent loyalty to him for a proper understanding of the situation.

It also doesn’t skimp on giving some character to anyone who gets a scene from their perspective. For example:

Ryoga’s idea of conversation seemed to consist mainly of bringing up random subjects, then looking around with a flushed face, before repeating the process over again. Mint flinched at the raw ineptitude the bandanna-clad youth was exhibiting. It reminded him of the very first time he had seen a woman. ‘What’s his excuse,’ the Musk warrior wondered.

That said, within the scope of what did get written, I think it’s reasonably obvious that the intent was to build up to a Ranma-Herb pairing built around only Herb’s female form being close enough to human to be able to have children with other humans. I’m not sure how I feel about that. I’m not specifically against such a pairing, but even something this well-written does flirt with feeling contrived in how it keeps the misunderstanding about Herb’s true gender going. (Even if it does make for a very elegant way for Ranma to unknowingly reveal the solution to Herb’s problem in chapter 7.)

Despite all that, what I found most noteworthy on re-reading it was actually one of the least memorable things… It’s one of those rare stories that truly knows how to use flashbacks and time cuts properly, bouncing back and forth without making me reluctant to follow. Usually, flashbacks prompt at least a bit of resistance, because they pull me away from what they’ve primed me to care about next… but, in this case, the story is staying close enough to canon , and we already have a solid understanding of how canon unfolds, and the writing carefully steers the reader to care about the character development in a way that doesn’t tie it to the events too strongly. As a result, carefully jumping back and forth in time can make the revelation of Herb’s character feel more consistent.

In fact, until Akane accidentally locks Ranma’s curse rather than Herb doing it on purpose, and makes Herb pause to think about what he was about to do, it’s believable that this could have been showing a different perspective on canon events. (A scene which is then repeated from Ranma’s perspective without it feeling boring or repetitive… like I said, this is how you do character writing.) For how brief it is, I think this moment is the most important to the plot, because, when set in a narrative which will build on it rather than quashing it, it’s one of those little “for want of a nail” moments. In this case, “for want of a nail, a bad first impression was lost and a spark of sympathy gained. For want of a bad first impression and a lack of sympathy, a prince’s hostility and lack of introspection was lost. For want of hostility and a lack of introspection, conversations were prompted. All for want of a horseshoe nail.”

I also find it amusing to see a scene where, when Ranma is puzzled at Herb neither wanting to kill nor woo him, and Herb points out that Ranma isn’t the catch he thinks he is, Ranma retreats to insults when his ego is threatened. Why? Because, it’s the first time I can remember seeing a scene where you have a male character nursing a bruised ego… in a way that strongly reminds me of how tsundere female characters react to emotional threats. (And then Lime interrupts, giving Herb a chance to realize the value in learning to not let himself be goaded by that, thus continuing a pattern of keeping things from degenerating without it feeling artificial, contrived, or forced.)

Back when I first discovered it just shy of a decade ago, I felt that it was the epitome of everything I wanted in such a fic, and it’s a real shame it’ll never be finished, but at least we got half a novel worth of text out of it. I do worry that how it was handling Herb and Ranma was steering into some grade-A tightrope-walking, but it didn’t jump the shark within what actually got written, so I’m giving it a 4.9 out of 5 for the too-convenient-for-the-author ways in which the miscommunication about Herb’s true gender persisted.

I just wish that it had stayed on the more psychological feel it had in chapters 1 through 5. I know characters like Ryoga had to come in eventually, and chapters 6 and 7 were when the other shoe dropped… but a guy can dream.

P.S. The amount of care and caution it spends on the interactions between Ranma and Herb reminds me of another unfinished fic that I really need to re-read and review at some point: Kunoification by Ozzallos.

Posted in Fanfiction | Leave a comment

Fanfiction – A Drop of Poison

Since I blogged about something I don’t recommend, I shouldn’t keep people waiting for something I do recommend:

A Drop of Poison by Angel of Snapdragons

This is one of my old favourites. The gist is that, because Iruka is unconscious when Naruto defeats Mizuki at the beginning of the series, things get very different in a very entertaining way.

First, Naruto discovers that some of his clones which he didn’t dispel have copies of the scroll, which he rushes to transcribe… in the process, learning that missed detail about how Kage Bunshin can transfer memories. Then, he discovers that he’s going to have to go back to the academy, but one of his clones discovers that they can fool the civilians into treating them well using Henge.

Throw in a chakra-draining technique from the scroll which is dangerous to flesh-and-blood ninja without the Akado bloodline, but perfectly safe as a way for Kage Bunshin to extend their lifespans indefinitely, and Naruto hatches a plan to set up two cover identities who can continue to learn at the academy even when teachers try to sabotage him.

…and then he decides to make another two identities to satisfy an impulsive desire to know what life is like for civilians and realizes how productive Kage Bunshin can make him when used for training and scavenging equipment.

I like how the author manages to casually justify this plan being a success. First, Iruka drops by and recognizes that Naruto is up to something, only to get talked into joining in the harmless little conspiracy. Thus, there’s a competent advisor to make sure Naruto can pull it off. Then, Iruka notices something off about Naruto’s hand seals and realizes that his transformation technique isn’t actually the standard Henge but some full-blown physical transformation that Naruto managed to cobble together from intentionally broken instructions. Then, one of Naruto’s clones finds an abandoned mansion that their new chakra draining technique allows them to gain entry to so they can use it as a hideout. …and then Iruka gets Sarutobi’s tacit approval on the promise that the plan he promised Naruto not to speak about isn’t illegal and has a good chance of working.

Over the course of the 200,000+ words, things get really developed, to the point where his use of Kage Bunshin winds up becoming a network of traders cum spies. (Sarutobi is finally let in on it in the wake of the Chunin Exam)

Yes, it sounds overpowered, but I’ve just summarized the most memorable aspects of over 200,000 words, and this is one of those stories that isn’t about how the hero wins, but how many novel things can happen as a side-effect of the hero being an ordinary person handed a superpower. I also like that Iruka is a main character. I haven’t run across enough fics that both hook my interest for other reasons and give him that kind of focus.

In fact, that’s probably the thing I like most about this story. While it is a bit of a curb-stomp story (though not as much as you’d think, given how hard it is to find Root when they start sabotaging their competition), it’s also a character story. When Iruka agrees to help Naruto, it’s preceded by a nice amount of introspection into how he sees the world. When Sarutobi agrees to the plan on the condition that Iruka take responsibility for keeping it from going awry, we see the final thing that tipped the scales: the prospect of forcing Iruka to break his promise to Naruto after Sarutobi failed to keep his promise to Minato about how Naruto should be treated… though it does drift away from the character focus somewhat during the Chunin exam.

It also has nice little touches I’ve never seen used before, like this:

Suddenly, the chĹ«nin teacher realized that if things continued as they were now, and Naruto kept on in the academy, this might be the place where he’d end up. This simple thought of a prankster like the boy working around that much paperwork chilled his bones like never before, and pushed him to make sure that his protĂ©gĂ© would never end up like this.

All in all, it’s a story that is flawed in that it doesn’t realize and capitalize on all the things it initially gets right, so the character focus gets diluted a bit, but it’s still an entertaining and very distinctive story that I remembered and came back to.

I forgot to take notes for a rating when I was re-reading it, but I estimate it’s probably a 4.5 out of 5.

Posted in Fanfiction | Leave a comment

Fanfiction – Mastermind Hunting

When I was in my teen years, I read a lot of stuff that isn’t as good as I remember. Normally, I don’t review it but, for a change, let’s review something that’s a bit of a study in contrasts. It’s an interesting way to get some perspective.

Mastermind Hunting by Louis IX is a story that stuck in my memory for its distinctive details, even as I forgot how deeply flawed it was.

On the broadest level, you could say that the first half to two thirds of this 616,225-word story matches the synopsis: A “Where in the world is Harry Potter” story …but even that is flawed.

The first story arc does have Harry and the Dursleys wandering through Europe and the Middle East… but neither Dumbledore nor anyone else in the wizarding world is actively pursuing them in any significant fashion. You’ve got roughly a novel of a pre-Hogwarts wandless magic prodigy wandering through 1980s and 1990s muggle world events… not really being chased by muggle intelligence services so much as wandering in and out of intrigue because they have no idea what he’s capable of.

…and that’s a recurring theme that doesn’t help the story. It feels like the movie Shanghai Nights was still fresh in Louis IX’s memory but he didn’t properly understand how to make that sort of “alternative history for real-world people and events” writing work. (Rule #1: Shanghai Nights works because it’s dedicated to being a comedy. This just feels like the author coming up with implausible alternative causes for real-world events because it makes him feel clever.)

You could also say that recurring theme is “[Insert scene about some tangent] …but that’s not important to our story.”

That said, some of those tangents are also why I remember it, because they’re so unlike anything I’ve ever seen before… such as young Harry accidentally apparating into a particle accelerator, going a bit Doctor Manhattan, crossing paths with some mesoamerican gods, and recovering but with eyeballs made of magically contained seawater… in the process, creating a digital clone of himself.

Those are all things which could make an interesting story… maybe even an interesting Harry Potter story… but not here and not all in the same story. In Mastermind Hunting, elements which would need to be the central focus of a story to be done properly are set up, then allowed to languish… and yet I kept reading to the end, which has to say something for Louis IX’s writing instincts.

It’s also one of those “the guy who wrote this is either a teenage boy or a sociopath” stories, where the author clearly doesn’t understand the problem with certain writing decisions… first and foremost, how liberally Harry uses mind magic to fix problems. Harry ran into a terrorist or death eater sympathizer? Let’s just mind-rape him to install a better moral compass. Sure, its interpretation of an “inner world”-style occlumency is creative, but tons of stories have done that and some in more creative ways. (Though its interpretation of how apparation works and why wizards have trouble doing it over long distances is more novel.)

As you might expect from such an author, narrative structure also isn’t ideal. By Chapter 22, it feels like it should be nearing the end of an arc, but no… and at the end, Voldemort gets defeated with two large chapters to go, and then Umbridge is introduced, only to be gotten rid of before the chapter is over so two more brief “It’s not over yet” arcs can be done.

Spoiler: It involves letting the readers become convinced that a very major character is dead, then having Harry fail to use a Time Turner to prevent her death, then having Harry’s digital copy (who became a flesh-and-blood copy and then spent off-screen time becoming an unrecognizably divergent OC) get a better time-travel solution from the Department of Mysteries and engage in a cheap knock off of a James Bond thriller that seems to be intended as a tacked-on way to close out plot threads that were allowed to languish so much that I’d honestly forgotten they needed to be closed.

It’s kind of impressive that, in less than the entirely of the second-last chapter, he managed to kill off my ability to care as far as he did.

…which reminds me of another problem that isn’t a one-off thing: Not understanding how much preparation goes into keeping the death of a named character from feeling cheep and ill-fitting. Even J.K. Rowling fumbled that in killing off Cedric Diggory after four books of letting the readers get used to the idea of Voldemort being about as effective as a Saturday morning cartoon villain.

Anyway, next point… “crossing paths with some mesoamerican gods”. This includes not only mesoamerican gods, but also Wadjet, and the Archangel Raphael, and, like the mind magic and character death, they give a strong sense that the author didn’t think deeply enough on the implications and effects of including them. Harry Potter canon was careful to avoid leaning toward or against anything religious beyond mentioning the witch burnings and, even if you’re going with the easy choice of old Celtic gods, it takes a lot of skill to keep divine beings from destroying the Harry Potter atmosphere.

I also don’t like that they take away his metamorphmagus ability at the end because it was a gift he “doesn’t need anymore”. That sort of “implicitly lording it over the mortals” is why I don’t like gods in settings in the first place. Aside from that, why did Louis IX think it was even necessary? Because it made him too overpowered without Voldemort to balance him? That’s the mark of a bad author who doesn’t understand that “even Superman can’t punch clinical depression”. (If Wolverine’s healing ability didn’t break X-Men as a story, then Harry keeping his metamorph abilities wouldn’t here. I find that the best conflicts are the kind that superpowers can’t solve.)

…it doesn’t help that, for a final story arc and a third “it ain’t over yet” in two chapters, Louis IX decided to reaffirm his perception that it doesn’t irreparably tarnish your hero for them to invent a “stop being evil” mind virus. (I have only read the spin-offs, but I get a strong impression that was the core evil of the infamous “The Conversion Bureau” fanfic in the My Little Pony fandom.)

Again, “either a teenage male or a sociopath”… but, given how the final chapter falls apart into a mish-mash of “isn’t this cool?” stuff, and the touches of “didn’t think about the implications” that show up in other ways, I’m leaning toward teenage male. If you want to see sociopath, look at fics by Jared Ornstead under his Perfect Lionheart identity, like Partially Kissed Hero or Chunin Exam Day… those start out “definitely gonna hook you” great and then screw with you… and that’s not the only reason to think sociopath. Nugar wrote a great analysis (mirror) of why those two fics exude sociopathy.

However, despite all those flaws, I didn’t find it too difficult to re-read it when preparing to write this. Trial by Tenderness by Cevn McGuire also has a similar number of memorable elements, but I had to give up on it when I tried to re-read and review it. It also helps that Mastermind Hunting is one of those rare ultra-long stories that’s actually complete, rather than just dying when the author’s muse did, like with Guardian, Millennium, and Big Human on Campus by Black_Dragon6.

In the end, it’s a hard one to rate because it’s too sloppy for 4 out of 5 to feel right, but I didn’t get the firm sense of “I don’t want to put this down, but I can’t figure out why” that 3.5 out of 5 would suggest. I’d say 3.8 out of 5 if you stop reading before Harry’s special abilities are taken away in the wake of Voldemort’s defeat, or 3.6 if you continue reading until the end.

Posted in Otaku Stuff | 1 Comment

Making My Review TODO List Public

Since my list of fanfiction to review seems to grow much faster than my ability to re-read and review things, I thought it wasn’t very fair to keep it hidden. For that reason, I’ve started transcribing it over to a page on this blog for anyone to read.

Fanfiction Review TODO List

It may have errors, I haven’t finished copying the entries over yet, and it’s very minimal compared to my usual reviews, but I hope people will enjoy it and I’ve enabled comments in case anyone wants to answer any questions I posed to myself in it.

Posted in Geek Stuff | Leave a comment

Retrocomputing Advice: Linksys ProConnect KVM2KIT

If you have a retrocomputing hobby, and you don’t have a lot of room (like most of us), it can be difficult to leave your stuff set up so you can enjoy it when you need to take a break.

One way to mitigate that problem is to use a KVM switch, so you can have PCs from multiple eras sharing the same desk, keyboard, mouse, and monitor.

I actually received my first Linksys ProConnect KVM2KIT in a gift of hand-me-down hardware and discovered that it is just about the most perfect KVM you could want for retrocomputing.

First, it switches two PS/2 ports and a VGA monitor. The only thing it’s missing is audio.

Second, you switch between the two PCs by double-tapping Scroll Lock, so you can hide the unit itself under or behind your desk to avoid having an anachronistic-looking box or button marring your setup like with something like the Belkin Flip F1DG102P.

Third, it requires no external power source, being powered by the PS/2 keyboard connector.

Fourth, it’s not that expensive on eBay.

Fifth, if you need it, you can set it to automatically cycle between its two inputs at a configurable rate… useful when you are doing something else while babysitting some install wizards.

As mentioned, it does lack audio switching, so you’ll have to come up with a solution for that on your own (two pairs of speakers, feeding the speaker out from one PC into the line in from another, a separate switch box, a mixer, etc.) but, aside from that, I have no complaints.

It Just Works™ and makes for a very comfortable and unobtrusive way to put two retrocomputers on one desk. Pair up an S-Video or Composite to VGA converter that supports VGA pass-through when not in use and is OK with more esoteric signals and you could add a console or an 8-bit micro to the mix.

Posted in Geek Stuff | Leave a comment