Tag: HowTo

For Future Reference

For the next time I get locked out of X after an nVidia upgrade:

The OpenSUSE package for nVidia drivers for a GTX570 is x11-video-nvidiaG03.

The OpenSUSE package for the nVidia kernel module for a GTX570 is nvidia-gfxg03-kmp-default.

Zelda 2: The One That Fucks Up Alphabetized Lists

Yep, got the bug from Jeremy Parish's excellent Anatomy of Zelda 2 series. I've started replaying Zelda 2.

Jeremy commented on the general unfairness of the game and said that he's using savestates. I'm using authentic NES hardware, but I do have a Game Genie.

When I played through the game as a kid, I only used one Game Genie cheat code: infinite lives. It's amazing how much it does for the game's balance to eliminate the outmoded concept of a limited number of lives (a holdover from the arcade age, of course). Frankly it's odd, in hindsight, that Zelda 2 played the old "3 lives and then Game Over" meme, given that the original game didn't. I mean, sure, 2's a side-scrolling platformer, but Metroid was too, and it didn't bother with giving you a limited number of lives either.

So I resolved to take a crack at Zelda 2 on my NES, once again cheating a bit against its unfair difficulty with the use of the infinite lives code.

And when I went to look it up, I found, via Game Winners, two more codes that weren't in the official Game Genie book and which serve to mitigate the game's lopsided leveling system. So here are the three codes I'm using:

Link has unlimited lives SZKGKXVK
Do not lose all experience when leveling SZVOUNSE
Do not lose experience when hit by enemies SXESIKSE

I think that, on the whole, those three codes go a long way to balancing out the difficulty of Zelda 2 and allowing its strengths to shine. It is a solid game.

Bowties are Cool

Here's the video I used to learn to tie a bowtie for my wedding:

When that didn't quite do it for me, I also tried tutorials at Beau Ties Ltd and about.com.

In the end I guess I did a passable job but never really got the knack. The last step is the hardest, the part where you pull the second bow through the loop behind the first one.

Here are some pictures of my dad helping me with my bowtie. (He does not know how to tie bowties either.)

Before
The Fixin'
After

I'll probably get some more wedding photos in here at some point. Seems like I should probably post some with the bride in them.

Lessons Learned in Wii Repair

Console Zombie's Wii Repair Guides are really quite good. However, after having rooted around in them a bit, I can make a few additions and corrections:

  • In addition to the listed tools, I found that I needed the following:
    • Razor blade -- many of the screws are covered by little stickers. I couldn't remove them with my fingers; I needed a razor blade to peel them off.
    • Tweezers -- and in some cases, I couldn't get them all the way off with the razor blade and needed to grab the corner with a pair of tweezers to pull it the rest of the way off.
    • Chip extractor -- I used this to remove the plug that connects the faceplate to the board. It was too tight to do with my fingers.
  • And speaking of the faceplate, the instructions on the Wii Case Opening Tutorial are slightly out of order. You can't remove the faceplate before removing the screws on the lefthand side; the front screw on the left side holds the faceplate on.
  • The Wii Optical Drive Troubleshooting Guide says that if you don't see a red light when you power on your Wii, it likely means the laser is bad. That may be true, but in my case it wasn't -- test the spindle motor before you go ordering a replacement laser.

Yes, I needlessly ordered a replacement laser only to find, after taking apart and reassembling my Wii, that it worked once and then went back to exactly the same behavior as before.

Now, I'll give this 50/50 on blaming the guide and myself. Because I was blaming the spin motor in the first place and didn't think it was the laser until I read that guide and it said that if you can't see a red light, you've got a bad laser.

But, there was some real foolishness on my part in not thinking to test the motor myself, something I should have thought of even though it's not in the guide: disconnect the power to the spin motor and see if you get the same result.

After I found that my new laser didn't work any better than the old one, I did that, and yes, I get exactly the same symptom with the motor disconnected as I do with it connected. Even if it isn't mentioned in the guide, I should have checked that before I spent $10 for a replacement laser I didn't need. Oh well -- you live and learn. Or sometimes you live and forget the shit you already know and are only reminded after you make a stupid mistake.

A couple more quick notes:

  • I ordered an eForcity screwdriver set with a tri-wing and a small phillips, both magnetic. It worked reasonably well for five bucks, but the reviewers are right: these things are flimsy, and in particular the two tri-wing screws on the bottom of the Wii are in there tight. I stripped the head of the tri-wing a bit and I wouldn't expect it to make it through a second round of repairs; it's worth getting if you only plan to use it once, but if you want to buy a tool you can keep and reuse, you're not going to get it for five bucks. Also, the magnet on the phillips is not strong enough to hang onto the larger screws that connect the optical drive to the chassis, which are the hardest screws to put back in.
  • Speaking of which: I'm both experienced and careful at repairing electronics, but I broke off lots of little black bits of plastic in working on my Wii. In particular, all four of the pieces that hold the screws where you attach the optical drive just cracked to hell when I screwed it back in. The parts inside the Wii are flimsy as hell and if you're the kind of person who'll be upset if you break something, you really shouldn't be opening up your Wii. Me, I'm a little disappointed -- but if I can get the sucker working again it'll all be worth it. (And if I can't, then fuck it, I'll just attach an external hard drive and rip all my games to that.)

And a final thought: man, moving parts suck.

I look through my collection of old consoles, and the top-loading cartridge ones all still work. SNES, Genesis, N64 -- you're just plugging a board into another board. I have never had an issue with any of those machines.

The NES, well, as you might expect I've had to replace the 72-pin connector. But aside from that single moving part, it's always worked like a champ.

You start getting into optical drives, though?

Well, in fairness, I've never had any trouble with my Dreamcast, GameCube, or the Sega CD I bought on eBay. Or my Xbox 360, though I've only had it for a few months.

But my PS1, PS2, and Wii all quit reading discs after a few years for one reason or another. (Also the second controller slot on my PS2 quit working. I don't know why, and it's not a moving part so it kinda undermines my case that moving parts are the problem. But not my case that They Don't Make 'Em Like They Used To.) And while I haven't personally had any trouble with my new Xbox 360, that console may have the worst reputation for durability of any yet devised.

Hard drives aren't a perfect solution -- after all, hard drives can sure as hell die on you too -- but they're a superior option, especially since console manufacturers have had the good sense to make them easy to insert and remove.

As we move toward SSD's, that's going to make for an interesting set of challenges in and of itself -- I've only been using one in my desktop for a few months and it hasn't failed me yet, but my understanding is that, while they fail less frequently than spinning-platter drives, they fail all at once -- while you can usually recover most of your data from a failing hard drive, if an SSD goes it's gone.

Guess that's an argument for cloud saves. Which, at the rate Nintendo is progressing with its Internet support, should be available sometime around 2048 (but will not allow me to load my own save on my grandchildren's console).

And of course there's a downside to digital delivery as currently implemented: you don't own your game. It's DRM'ed and you can't resell it. For that reason, despite all the bullshit involved in using an optical drive, I still prefer to buy my games on digital media when I can.

Software RAID 10 on OSX

Well, as mentioned, after several years and many a misadventure, I've given up on RAIDZ for Mac and decided on good ol' dependable RAID 10. Today I finally got around to building the array...and realized I'd forgotten how to do it.

Fortunately, it's well-documented on Apple's site. The trick is that you build all 3 RAID sets (two RAID 1/mirrored, one RAID 0/striped) at once; you can't build the two RAID 1 sets and then add them both to a RAID 0 set afterward.

Course, the next step is to copy all the files off her old drives onto the new array, and that is going to take a lot longer -- especially since I don't have a spare FireWire 800 (or even 400) enclosure and I have to use USB 2. It'll be at that copy all night, and that's just the first drive. Which means no rebooting to play The Walking Dead like I'd hoped.

So it goes -- my wedding's in three weeks and I need to get this done so Gran can put a video together for it.

DES Fixes It

Worth getting up a little early for: today I got a call from DES telling me that I would finally be getting my unemployment check for the week of January 5. (I'll have to take his word for it since I can't log into the website this morning, but...well, if that keeps up I guess I'll have more to tell later.)

To recap: I've been doing some freelance work which paid no money upfront and which will pay an unpredictable amount of royalties in the future. I asked how to report this on my weekly unemployment claim, and a nice but incorrect lady told me on the phone that I should say Yes I worked and my earnings for the week were $0.00. This resulted in DES paying me nothing for the week, and I've spent most of the month trying to get it corrected -- I've posted about it previously on 01-09 and 01-17.

Well, after the failed phone call of the 17th, I submitted an E-Mail asking for help. A week later, I got a call back. I missed it; I noticed it late the next day and, since it was Friday by then, I didn't get a chance to call back (at last! a phone number for a real person!) until yesterday.

It wasn't what you'd call a productive conversation. We talked in circles; she said I should estimate my earnings and correct them later if the estimate was wrong, I said there was no way for a reliable estimate, she said I should just estimate $240 (a week's unemployment pay) then, I pointed out that well then I'd be SOL if the thing never made that much money, this repeated for awhile until she offered to put me through to her supervisor. I got his voicemail and left a message.

And he got back to me this morning. He told me that, while the lady I'd talked to yesterday was right for the general case (like if, say, I'd built some furniture with intent to sell it), in rare cases like mine where there's no reliable estimate, I shouldn't report the work when I do it, I should only report it when I get the income from it. Which, you know, I'd figured out three weeks ago, but I guess it's nice to get it from an official source after only two letters, two E-Mails, and seven phone calls.

He added -- and I already knew this, too, but it bears mentioning in case any other poor soul winds up in the same predicament -- that the important thing is to make sure I keep looking for work and logging my search, even if I'm working on a freelance job in the meantime.

So, if you're in Arizona and face the same issue I did -- producing work on a royalties-only basis -- that's the official response from DES: don't report the initial work, report the money as it comes in, and don't stop looking for other work while you're doing it.

I can't vouch for other states. If you're not in Arizona...well, typically I'd say "You should ask your state's DES," but to be perfectly honest asking is what got me into this mess in the first damn place. So if I were offering a recommendation, it'd be do it the same way: keep looking for a day job, don't report the royalty gig until the money comes in. (Obviously if you're getting money upfront, as most people working for royalties do, do report that; I'm only speaking of cases where you get just royalties with no stipend/advance/etc.) If it turns out that's not the way it works in your state, I think you're better off apologizing and correcting it later.

It should go without saying that this isn't legal advice, it's advice from an out-of-work computer scientist who just spent most of a month trying to get an unemployment check. Like most of what's on this site, it's worth exactly what you paid for it.

Backing Up Wii Data -- All of It

So I've been having problems with my Wii. It's stopped running discs entirely -- I put one in, it spits it right back out. I suspect the spindle motor, and I'm going to try fixing it myself with a little help from the guides and parts at Console Zombie -- but before I go taking my Wii apart and poking around in its innards, I figure I should probably back all my shit up.

Course, as you may know, the Wii doesn't allow you to back up everything onto an SD card. Certain downloads and save files are copy-protected. This is what is known, amongst technical people such as myself, as a bunch of stupid fucking bullshit.

See, the way I see it, I should be able to back up my saves in case my console gives up the ghost. Or, say, go over to my brother-in-law's house and have access to every course on Mario Kart without having to unlock them all again in fucking single-player mode.

So I did a bit of reading up and found a utility called Savegame Extractor. It requires installation of the Homebrew Channel.

I have an old Wii and the latest version of the Wii System Menu (4.3U). After some reading, I found that the appropriate utility for my system was LetterBomb, and there are installation instructions at wiibrew.org.

It was about as simple and painless as root tools come. Select your firmware version and input your MAC address, then download the LetterBomb zipfile. Rename the private folder on your SD card, copy the boot.elf file and private directory from the zip to the root. Put it in the Wii, power it up, open up the messageboard, and click on the LetterBomb icon. From there I installed the Homebrew Channel, and installed BootMii as boot2 (apparently on recent Wii revisions you can only install as IOS, ie overwriting the Wii firmware).

Once you boot up again, you'll need to use either a GameCube controller or the buttons on the Wii face (Power to move the cursor, Reset to select an option) on the bootscreen. You should back up your NAND memory (provided you've got 512MB free on the card; it's under the gears icon, then the icon with the arrow pointing from the chip to the SD card).

Next thing: install the Homebrew Browser.

Create an apps directory on the root of your SD card. Download the Homebrew Browser, extract it, and copy the homebrew_browser subdirectory to apps. Once it's on the SD card, you can load it from the Homebrew Channel; from there -- well, from there I got a stack dump and had to reload it. But I reloaded it, and from there you can download all sorts of useful apps -- including Savegame Extractor.

In fact, there are a few variations on it -- there's Savegame Manager, which combines Savegame Extractor with Savegame Installer, and which also just flat-out stack-dumped every time I tried to use it -- but there's a fork called SaveGame Manager EX, which works great, comes with a GUI that mimics the Wii's, and has a nice batch option to extract everything from the Wii at one go, eliminating all that tedious clicking on each individual file and then selecting Copy. (And, okay, also copying over some other shit that you don't really need to expend the space on backing up, like the Netflix Channel. But hey, still.)

Soapbox time: I'm not doing this to play pirated games. I'm not doing this to cheat at online games. (I'm not doing it to cheat at offline games, either, but if I were, that would be none of anybody's goddamn business but my own.)

I'm doing this to access my data, the games I bought and paid for (and, all right, one that Brent got me for my birthday), the saves I slogged through hours of stupid bullshit single-player Mario Kart to get.

And I shouldn't fucking have to install a bunch of hacks to do this.

I like my Wii. Rather a lot. I mean, Jesus Christ, look at how much effort I've gone to to keep all the stuff I've got on it, and that's before I've even started taking it apart.

But Nintendo is completely fucking ass-backwards in its approach to modern technology in general and network play in particular. Its "safeguards" are asinine and poorly-thought-out. They won't stop some guy with an Action Replay from unlocking all the karts on Mario Kart or all the fighters on Smash Bros and then going online (and hey, Nintendo? Maybe if you didn't make it impossible to unlock anything on multiplayer in Mario Kart, and a pain in the ass to unlock everything on multiplayer in Smash Bros, people wouldn't be tempted to cheat to do it?). They just put up barriers to prevent people with broken consoles from getting their data off. Which, again, includes games they paid for.

...and frankly they're not very good barriers. This was really a breeze. I'd like to thank the developers of all the various tools I've mentioned, and the writers of the walkthroughs on how to set them up. Because this was pretty damn painless, and to be frank I enjoyed doing it.

Tune in next time to see how I do at taking my Wii apart and seeing if I can fix it.

If I even get that far. I don't have a tri-wing screwdriver onhand, so I'm going to see if I can get the screws out with a small flathead. If not, well, tri-wings are like $5 on Amazon.

nVidia BSoD Fix?

Well, after a year and a half, I think I've finally got the constant BSoD's I get when playing a game with my nVidia GTX 570 fixed.

First, I bit the bullet and used MSI Afterburner to underclock it to 650 MHz. I may not need to keep it that low, but I still got lockups with 690.

I also added a registry key. Via Mike's Technology and Finance Blog, you can set a key at HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers called TdrLevel.

One of the complaints with Windows (or really any other operating system) is that the screen freezes from time to time. If the screen freezes for more than a few seconds, users are likely to hard reset the machine that they are working on. This seems natural, but in this case the system is still responsive. The graphics processing unit (GPU) is busy processing something (possibly a game, 3D render, or even Windows Aero) and is not actively refreshing the screen.

In Windows Vista SP1 and Windows Server 2008 SP1 Microsoft introduced a feature to help catch and correct this behavior using a feature called "Timeout Detection and Recovery (TDR)." The TDR feature works to identify whether the graphics processor is hung (the default timeout is 2 seconds), and if it is, it prepares to reset the graphics processor and the relevant part of the graphics stack. During this process, it tells the driver not to access the hardware or memory and gives it a short time for currently running threads to leave the driver. If the threads do not leave within the timeout, then the system bug checks with 0x116 VIDEO_TDR_FAILURE. The system can also bug check with VIDEO_TDR_FAILURE if a number of TDR events occur in a short period of time (the default is 5 TDRs in 1 minute). If the TDR is successful, then the user may receive a bubble that says "Display driver stopped responding and has recovered."

TdrLevel should be a REG_DWORD. I set it to 0, to disable checking for TDR entirely.

I'm not sure if that helped or not; I think the underclocking was the more important step (as when I set TdrLevel to 0 but didn't underclock, I still got a lockup). But TDR certainly sounds like something that matches my symptoms, as the lockups usually occur with graphical and audio sputtering -- indeed, sometimes I don't get a blue screen at all, the game just sputters to the point of unusability and the system becomes unresponsive.

At any rate, I'm cautiously optimistic; it looks like I've finally got this thing under control and can actually play games under Windows without constant crashes. I didn't notice any performance hit, either, but then again it's not like I'm trying to run Crysis 2. Walking Dead works fine with its settings maxed out, but you don't need a GTX 570 for that.

Now if I could only get OSX running stably with a 64-bit kernel.

Insufferable is Awesome

I got a Nexus 7 for Christmas. As you might expect, the first thing I did was root it. The second was to get all my usual apps -- E-Mail, RSS, emulators -- set up and working. The ones I'm used to from my phone.

But the third thing? Comics.

I've been very excited about Mark Waid's digital comics endeavors for years now. He gets it. Release your books in DRM-free standard formats, and treat pirates like they're potential customers instead of treating your customers like they're potential pirates.

In a nutshell, I'd been waiting to get a tablet just for the opportunity to see what it was Waid was up to.

Well, for starters, his books up on thrillbent.com are just straight-up free downloads.

Want to download all of Thrillbent's marquee book, Insufferable, by Waid and artist Peter Krause, for free? (Hint: yes. Yes you do.) Here's a simple, handy bash script to do it:

for((i = 1; i <= 9; i++)); do wget http://www.thrillbent.com/cbz/insufferable/Insufferable_0$i\_Mark_Waid_2012.cbz; done for((i = 10; i <= 34; i++)); do wget http://www.thrillbent.com/cbz/insufferable/Insufferable_$i\_Mark_Waid_2012.cbz; done

And presumably next week #35 will be out with a "2013" in place of that "2012" in the filename and it'll go on from there.

From a nuts-and-bolts storytelling perspective, Insufferable is a perfectly compelling superhero book. It's a Batman pastiche, but I happen to like Batman pastiches. (I often say that my all-time favorite Batman comic is Astro City: Confession.) The setup here is, loosely: What if Nightwing was a total douchebag?

It follows that moment of the sidekick -- named Galahad, in this case -- striking off on his own, no longer able to work with his mentor (Nocturnus). And Galahad isn't the class act that Dick Grayson is -- he's an insecure, spoiled celebrity. Nocturnus, meanwhile, has seen better days; he's something of a has-been and is now superheroing on a budget.

That, by itself, is enough for an intriguing, human superhero yarn. Insufferable would be a thoroughly enjoyable book on the strength of good old-fashioned traditional comic book storytelling.

But instead, it innovates. Waid and Krause make a point of doing things with a digital comic that can't be done on paper. Frames appear one swipe at a time; characters' facial expressions change. In one case, Nocturnus does the classic Batman entrance -- in one panel, the room is empty; swipe your finger and suddenly he's just there. As Galahad rides off after the bad guy, he receives a tweet making fun of him. Swipe and a few retweets appear over the scene; swipe again and the screen starts to fill with them.

Waid discusses these techniques in a recent Robot 6 interview. He cites the master, Bernie Krigstein, as his greatest inspiration in thinking of panel composition as a tool for pacing.

Waid's got the right idea, and it almost always works. As I read Insufferable I keep thinking of how smart he and Krause are in their use of these techniques, how they're not flashy and they're not there just for the sake of Doing Something Different; they actually serve the story in a way that -- while original -- has its roots in decades of traditional comics.

For my money, there is one example where it doesn't quite work: repeating the same panel exactly. I get what they're trying to do -- hell, where would Bendis be without that technique? -- but while you can repeat a panel exactly on paper as a pacing tool, it throws me to see it in a digital comic. There's a simple UI design reason for this: when a user interacts with a program, the program is supposed to do something. If I swipe a page, I can't tell the difference between "the same panel repeats" and "nothing happens". My first thought isn't "Oh, that's a beat", it's "Did I not press hard enough?"

There's a simple solution -- just change something, anything, in the panel. Make somebody blink, or change a facial expression slightly -- anything at all to give the user some sort of feedback that yes you turned the page and now this is the next image.

But you know, the occasional false note is the price of innovation. Yes, I found something small that, in my opinion, doesn't quite work in Waid and Krause's book. But there's so damn much that does work, and works astonishingly well.

I've said before that now is the best time to be a comics fan. Insufferable is one more example of why. Go give it a read -- it won't cost you anything and I think you'll be glad you did.

I haven't gotten around to the other Thrillbent books yet, but I intend to. But first -- well, it's Wednesday. I've got some traditional, paper-and-toner-and-staples comics to go pick up.

ROM Collection Browser in XBMC Frodo

BTW, anyone using ROM Collection Browser who's just upgraded to the latest XBMC beta and found that the list of ROMs is completely blank:

Open up C:\Users\[username]\AppData\Roaming\XBMC\addons\script.games.rom.collection.browser\resources\lib\gui.py and find the following line, which appears twice:

self.addItem(item, False)

In both occurrences, change it to simply

self.addItem(item)

You don't need to restart XBMC, but if you've got ROM Collection Browser open, right-click out of it and then reopen it. That will get the list to reappear.

If you find that it throws an "Unimplemented method" error for executehttpapi when you try to launch a game, open up launcher.py in the same directory and replace all instances of "executehttpapi" with "executeJSONRPC". (Same as above: you don't need to restart XBMC, but you do need to restart ROM Collection Browser for the changes to take.)

Thanks to versus for posting the gui.py fix and fmonaca for posting the launcher.py fix on the XBMC forums.

(And yes, I am posting this at 12:30 in the damn morning. You know how sometimes you have a thought on how to fix a vexing computer problem and know it'll be gone by morning?)