How to fix the “HTTP error” for WordPress media uploads

After upgrading to the latest 2.5.x version of WordPress, I found that I was unable to upload an image. This was highly annoying as a 5-minute blog entry turned into one of those Open Source 2-hour research-and-experiment sessions. Haven’t had much of that since I stopped using Gentoo.

Anyway, the flow went like this:

  1. Start a new post
  2. Click the media uploader button
  3. Ooh and ahh at pretty Web 2.0 screens
  4. Browse for file and upload
  5. Get “HTTP error.” along with poorly formatted box that I think says “Crunching…”

Googling turned up this Image/Media Uploader problems page and many others which only served to throw me way off track. Was it my version of Flash? Was it my browser or its cache? Was it some setting in the admin interface? Was it mod_security?

After experimenting with a number of things (made more painful by waiting for DreamHost’s scripts to apply my changes), I finally noticed this in my web server’s error log:

[Sun May 04 09:47:13 2008] [error] [client XXX.XXX.XXX.XXX] File does not exist: /home/foo/example.com/failed_auth.html

Ever since a phpBB exploit years ago, I have been in the habit of protecting every admin directory with apache authentication. As it turned out, this protection was causing the problem as explained in WordPress Trac ticket #6846. Perhaps in the future I’ll search the WordPress Trac before hitting Google.

I temporarily disabled the authentication and found that the media upload process began to work. The longer-term solution, found at the bottom of that Image/Media Uploader problems page, is to install a tiny plugin called No-Flash-Uploader. I didn’t notice a huge change to the interface after installing and activating the plugin, but everything seems to work with authentication back in place.

Now to test it out on Lynx!

Posted in HOW-TOs | Leave a comment

Using the QuickBooks SDK via JACOB Java-COM Bridge

So you want to be a hero?

You had better be prepared for a little heroics if you want to use the QuickBooks SDK with Java because it isn’t exactly straightforward. I saw a few mentions of people having done this, but certainly didn’t find any tutorials. Maybe I will be the first person on the planet to write this up. BOW TO YOUR NEW GOD!

Anyway, the problem is that the QBSDK is done with Microsoft’s COM and Java has no built-in COM support. I should mention that you can use Java with the Online Edition or apparently by setting up a Tomcat server and sending qbXML through a SOAP-to-COM pipe or something like that. In my case, I had a bunch of existing Java code that I wanted to connect as directly as possible to QuickBooks – preferably using QBFC.

If you don’t know what I’m talking about with QBSDK, qbXML, and QBFC then you should read this informative tutorial.

After hunting around the web, I found a free library called JACOB: Java-COM Bridge. The theory is that I could go from Java -> JACOB -> QBFC -> QuickBooks. I managed to create a proof of concept for this theory that I will begin sharing with you now.

SETUP

  1. Obviously, install QuickBooks, run its updates, and create a test company file (I’m using QuickBooks Premier Nonprofit Edition 2007)
  2. Sign up with the Intuit Developer Network and then download/install the SDK. Note that you must say “yes” to installing the .NET stuff or the install will fail. (I’m using QBSDK 7.0)
  3. Download and extract JACOB (I’m using version 1.14)
  4. Being on a 32-bit OS, I copied the x86 JACOB DLL (jacob-1.14-x86.dll) into C:\WINDOWS\system32
  5. For Eclipse users, go to the Java Build Path property, click the Add External JARs button, and add jacob.jar to your project. For non-Eclipse users, make sure that the JAR is in your CLASSPATH.

NOTES ABOUT JACOB

Obviously everything you do with the QBSDK must be enveloped by JACOB API calls. The main beasts in JACOB seem to be Dispatch and Variant. Basically, you’ll use Dispatch to call functions on COM objects, and Variant to serve as parameters and outputs to those functions.

While JACOB seems to work well for me so far, the project lacks documentation of the HOWTO/tutorial variety. By cruising the web for examples and looking over the API, you can sort of figure out how things work. As I was wrestling with it, I stumbled across a QBFC wrapper for Ruby. Looking at the project’s source code helped me figure out a couple of things in the JACOB-QBFC connection.

One thing that JACOB lacks is the ability to lookup COM constants. Some of the QBFC functions require you to pass in one of their constants – hard to do when you can’t access them. The workaround for this is in the How can I get the value of constants? question in the JACOB FAQ. In short, you are supposed to use the Visual Basic editor in Excel to open the “object browser”, search for the constant, read its value, then code it into your program. Not exactly an elegant solution, but oh well. Note that when you’re in the object browser, you’ll need to go to Tools -> References and add the QBFC7Lib.

THE FIRST TIME HURTS

The first time you connect to QuickBooks through your application, you need to have QuickBooks already running. If you do not, then you’ll get an error message like:

This application is not allowed to log into this QuickBooks company data file automatically. The QuickBooks administrator can grant permission for an automatic login through the Integrated Application preferences.

The reason is that QuickBooks needs to pop open a dialog box and ask you if the application is really allowed to connect. After you’ve registered your application with QuickBooks, you’ll be able to access the data without the need to open it first.

SHOW ME THE CODE!

This code assumes that you have some vendors defined. If all goes according to plan, then it should print out all your defined vendors. Note that I am not doing all the various error, status, and type checking that the documentation mentions.

import com.jacob.com.*;

public class Foo {
  public static void main(String[] args) {
    System.out.println("Hello world!");
    // QBFC constants looked up using the object browser
    Variant ctLocalQDB = new Variant(1);
    Variant omDontCare = new Variant(2);
    // major and minor version of qbXML used to talk to QuickBooks
    Variant qbXMLMajor = new Variant(6);
    Variant qbXMLMinor = new Variant(0);
    // location of the company file to access
    String qbFile = "C:\\Documents and Settings\\rdavis\\Desktop\\FfAMETest.QBW";
    // connect to QuickBooks
    Dispatch qbsm = new Dispatch("QBFC7.QBSessionManager");
    Dispatch.call(qbsm, "OpenConnection2", "", "My Sample App", ctLocalQDB);
    Dispatch.call(qbsm, "BeginSession", qbFile, omDontCare);
    // build and execute a request to obtain all vendors
    Dispatch msgSet = Dispatch.call(qbsm, "CreateMsgSetRequest", "US", qbXMLMajor, qbXMLMinor).toDispatch();
    Dispatch.call(msgSet, "AppendVendorQueryRq");
    Dispatch resSet = Dispatch.call(qbsm, "DoRequests", msgSet).toDispatch();
    Dispatch resList = Dispatch.get(resSet, "ResponseList").toDispatch();
    int count = Dispatch.get(resList, "Count").getInt();
    for (int i = 0; i < count; i++) {
      Dispatch res = Dispatch.call(resList, "GetAt", new Variant(i)).toDispatch();
      // blindly assume that we have a vendor response
      Dispatch vendList = Dispatch.get(res, "Detail").toDispatch();
      int vcount = Dispatch.get(vendList, "Count").getInt();
      for (int j = 0; j < vcount; j++) {
        Dispatch vend = Dispatch.call(vendList, "GetAt", new Variant(j)).toDispatch();
        Dispatch dname = Dispatch.get(vend, "Name").toDispatch();
        String name = Dispatch.call(dname, "GetValue").getString();
        System.out.println("Vendor: " + name);
      }
    }
    // close the QuickBooks connection
    Dispatch.call(qbsm, "EndSession");
    Dispatch.call(qbsm, "CloseConnection");
    System.out.println("Goodbye world!");
  }
}

CONCLUSION

Using QBFC is already a somewhat verbose process and running it through JACOB certainly doesn't make the code more terse. Hopefully I'll be able to create my own little API to shield most of my code from needing to mess with all these Dispatches. My needs might be simple enough that I can wrap all the ugly stuff in a few function calls. After I get really down and dirty with QBFC I may write another post detailing my exploits.

Posted in HOW-TOs, Micro$oft, Programming | 53 Comments

From Guitar Hero to Rock Band

After manning the Rock Band guitar for a few sessions, I’m much closer to my Guitar Hero III comfort level. Overall the transition from a GH3 Wii guitar to an XBox360 Rock Band guitar isn’t too bad, but there are some differences.

Rock Band guitar is “splashy”

While the GH3 controller has a lot of tactile (and audible) feedback through the clicky buttons and strum bar, the Rock Band “axe” is much less chatty. The first time I picked up a Rock Band guitar it felt like I was trying to play on a blanket or something; you press on the thing and wonder if it had any effect. And if your part doesn’t stand out in the music, then you have to pay close attention to the explosion animation of the notes, especially if you have people singing and slamming on the drums around you.

Rock Band guitar meta-buttons are poorly situated

On my GH3 controller I never go to town on the whammy bar and find that I’ve accidentally paused the game or activated star power; on Rock Band I’ve done both… several times.

Rock Band hammer-ons and pull-offs need more distinction

In GH3, the hammer-ons and pull-offs and very clearly marked by “glowing” notes; Rock Band denotes them by displaying hammer-ons and pull-offs at about half the size of regular notes. Maybe this would be fine if my friend were a good consumer and had a nice 50″ plasma to go with his Rock Band rig. As it is, a 27″ CRT with voice, drums, and guitar crammed on there makes things hard to see.

Rock Band is easier

I won’t go as far as to say that Rock Band’s Hard difficulty level to equivalent to GH3’s Medium, but I’d listen to the argument. The Rock Band difficulty scale is definitely easier than GH3’s. On GH3 I am about a 3 or 4 star Hard player, though I’ve been failing out of the later songs (the “galloping triplets” on that Muse song keep defeating me). In Rock Band I can hit 4 or 5 stars on Hard for almost every song. As my friend says, this makes sense because Rock Band is not a guitar-focused game.

Rock Band does not hide star phrases

I recall running through an Easy or Medium GH3 song, hitting every note, and being confused at seeing that I had not hit every star phrase. The problem is that if you are in star power mode, then GH3 converts all star phrases to regular notes. I’m not sure what the rationale is for this; maybe this would result in situations where you’d be able to stay in star power mode for the entire song? Rock Band does not have this restriction from what I can tell. If memory serves, hitting an SP while in star power mode will simply increase the power you have remaining; I like this better than GH3.

Conclusion

Overall, GH3 is superior to Rock Band in terms of pure guitar game play – makes sense what with the Guitar Hero and all. However, the party atmosphere that Rock Band promotes defines a whole new level of social gaming. As Rock Band improves, I’m not sure that GH will be able to compete. Why buy a guitar simulation game when you can buy an entire band simulation game that includes the guitar aspect? Watching these franchises over the next few years will be interesting.

Posted in Video Games | 4 Comments

The ghost of 64-bit flash

I really thought we were past the point when a major browser plugin would fail to work on Linux. But once again this nearly unheard of “64-bit” technology is causing incompatibility problems on my favorite OS. I guess it has only been about five years since AMD started offering its Athlon 64; such a short period of time in the slow-moving, dinosaur field of IT is surely why Adobe does not yet offer Flash Player support on 64-bit operating systems.

Adobe’s solution:

To use Flash Player to view Flash content on a 64-bit operating system, you must run a 32-bit browser.

A less painful solution seems to be nspluginwrapper. I installed the two RPMs from their site on my 64-bit openSUSE 10.2 system, restarted firefox, and found that flash was back online.

Opera still seems to have a flat-lined flash, though I’ve managed to get it working on my Kubuntu system by using a 64-bit development build of the browser.

Running desktop Linux has definitely become easier over the years, but it still has its moments. At least I no longer have to recompile my kernel to use a USB mouse.

Posted in HOW-TOs, Linux, Rants | 1 Comment

Nintendo DS roundup

The DS Lite is an impressive bit of engineering and I love playing games on its glowing dual screens. My only complaint is that I have encountered few games that I would describe as captivating. Of course, I might have the same gripe about any platform. Anyway, here is a quick list of the games I have played to date, ordered from best to worst:

Phoenix Wright: Ace Attorney

Part manga and part lawyer/detective sim, the Phoenix Wright series is perfect for the Dual Screen. The dialog and story lines are driving forces in this game, displaying an exuberant, mostly humorous, creativity. The game engine itself is simplistic, yet expressive. I have to give it the top spot here because each game delivers such a large volume of entertaining, wonderfully translated content.

Professor Layton and the Curious Village

Following something of a 7th Guest format, this game gives you an incredible atmosphere as context for solving puzzles. These aren’t King’s Quest (if you’ll forgive another old school reference) adventure puzzles, but rather classical mind games – algebra problems, 3D visualization, pushing tiles around, dividing volumes of water using different-sized measuring cups, chess puzzles, matchstick problems, and so on. The stylus and touchscreen are a great vehicle for serving up these puzzles, though it’s the creative multimedia backdrop of Professor Layton that keeps you fighting through the more frustrating problems. The music, voice acting, extraordinary artwork, and video clips are all of such a high quality that you can’t help becoming immersed in this excellent DS game.

Advance Wars: Dual Strike

Sweeping the goofy and annoying characters into the gutter, this is a pretty solid execution of turn-based strategy. I enjoyed the Advance Wars franchise on the GBA, and was impressed with its showing on the DS. Dual Strike has a great interface, solid game balance, engaging scenarios, and intriguing “extras”. By extras I mean all the features that extend the standard turn-based combat experience, e.g. the generals, having different abilities and modifiers, that you select from a pool to helm your armies during each mission. This is definitely one of the play-worthy games for the DS.

Tony Hawk’s Downhill Jam

This game surprised me by providing a genuine, TH:PS experience. The tricks, gaps, secrets, etc are all there, and the DS apparently has the horsepower to let you flip, roll, and grind at high speed through fairly detailed levels. The “Downhill” aspect is decent, though I think I would have preferred something more like the original game.

Age of Empires II: The Age of Kings

Ahhhhh… turn-based strategy. I played the hell out of this game, not because it was particularly good, but because I’ve always been a junkie for this genre. The dual screen and stylus are used to provide a convenient, pleasant interface, but the game itself is nothing special. They just took the AoE RTS and made it turn-based; Age of Kings doesn’t bring anything new to the table, but provides that addictive RTS feel, one turn at a time.

Kirby: Canvas Curse

This is a slick-looking, innovative game that lost my interest in the first few minutes. The use of the stylus to draw rainbow bridges and control Kirby yields a rich interaction, but I wasn’t interested for some reason – partly because I’m not a big Kirby fan, and partly because I wasn’t interested in getting the OCD juices flowing in a game which was obviously chock full of things to collect and secrets to find.

Super Mario 64 DS

I gave Mario 64 a shot on the DS, trying to recapture the wonder the game elicited on the Nintendo 64. Unfortunately, you can never go back. The game appeared to execute well, and I noticed that some new content/features had been added; however I found that the DS was just too small for me comfortably navigate a complex 3D environment.

Magical Starsign

I keep thinking that the DS would make a great platform for a classical RPG, but even the inflated reviews of gaming sites have not produced a standout in the genre. Magical Starsign had some okay reviews (meaning scores in the 8s) so I decided to give it a shot. After a couple of hours, I realized I was dealing with awful characters, a miserable plot, and what seemed to be a decent combat system. The most enjoyment I got from this game was naming the brash, fire-element guy “douche”.

Trauma Center: Under the Knife

I quickly lost interest in this glorified game of Operation. Using the stylus to select various surgical implements, you then circle, rub, zigzag, etc over various parts of a surgery target. Sure, there’s a whole storyline and some sort of disease menace that has you playing whack-a-mole during surgery, but this game really didn’t do much for me.

Posted in Video Games | 2 Comments

A low point for HighPoint RocketRAID

Alternate title: How kernel module sata_mv held my arms behind my back while module hptmv punched me in the balls.

Upgrading a database server from SuSE 9.1 to openSUSE 10.2, I wasn’t really worried. We had nearly a terabyte of MySQL 4 data stored in RAID5 using a HighPoint RocketRAID 1820A, but I had backed up just about everything – didn’t really expect to actually need those backups. Usually what happens when performing an upgrade like this on Linux is the following:

  1. Upgrade OS (reinstall in this case)
  2. Notice that the array is not showing up as a device (e.g. /dev/sdb1)
  3. Download/compile/install driver
  4. modprobe the new module to make sure the array shows up
  5. Use yast2 to add the module to INITRD_MODULES
  6. Done!

I’ve noticed that with some 3ware controllers you can skip most of those steps and go directly to “Done!” because the drivers are apparently already included.

Anyway, looking over HighPoint’s drivers, I saw tarballs for SuSE versions as new as 10.1, but not for 10.2. I decided to skip the precompiled modules and get right to the action: the open source drivers.

Before compiling, for some reason I decided to update the RocketRAID BIOS from v1.13 to v1.18. Since the source code had the same version (1.18) I assumed they sort of “went together”. Going over the readmes and changelogs, I probably could’ve skipped the BIOS update. As it was, the BIOS came up fine and everything looked ready for compilation.

After installing the kernel sources, the make went smoothly except for a cryptic WARNING about some dot file. I had an hptmv module hot off the presses and was ready to rock.

I launched off a modprobe hptmv… and all hell broke loose.

The modprobe command looked frozen. I started to monitor /var/log/messages and was sort of comforted by what appeared to be an iterative initialization of devices in the array, followed by confusion and worry as I/O errors and other evil signs started scrolling. I tried to unload the module and, failing that, halt the machine.

When I walked into the server room, the RAID card was literally alarming. I thought I had a bad UPS for a second, but it turned out that the fucking card was yelling at me!

I had to power down the server manually. When the thing came back online, the RAID BIOS was screaming something to the effect of: your array is hosed.

And it was at that point that I fell to my knees to thank the Bit Gods for the preciousss, preciousss backup data sitting on the file server.

I soon guessed that the problem was related to something that had been nagging me all along: the fact that each drive in the array had been showing up as an individual SCSI device in lsscsi. Usually the array shows up as a single device and there is no mention in Linux of its individual components. I chalked it up to some weirdness that I would resolve once I got the module up and running. That, uh, obviously wasn’t the best move.

I had to PXE boot into rescue mode to adjust the module configuration and quickly pinned sata_mv as the culprit. I think this module exists to support Marvell products. I hadn’t heard of them before, but I’ll always remember that company for the module conflict that nuked my data.

One thing I made sure to do was add the following to /etc/modprobe.conf.local:

blacklist sata_mv

I left out the lengthy (and bitchy) comment I also added to the file.

I always feel stupid when stuff like this happens to me, but Google reveals that I am not alone. My favorite is this proposed kernel patch to sata_mv.c that apparently spits out this kernel warning message:

“Highpoint RocketRAID BIOS CORRUPTS DATA on all attached drives, regardless of if/how they are configured. BEWARE!”

Anyway, there is probably plenty of blame to go around between the module conflict and my own foolishness. I should have dealt with those SCSI device listings first. On the other hand, I have never had the experience of loading a module result in a disastrous event like trashing a RAID array. Looking at the binary driver packages that HighPoint has for SuSE, I see interesting files like:

sata_mv.ko -> hptmv.ko

There also appears to be code that removes the module entirely. Yet the source code I used returns nothing when I grep sata_mv *. Maybe I should have assumed that their “Open Source” driver was different and more dangerous than the binary versions.

Or maybe I should have just gone with 3ware.

UPDATE: doing a full (as opposed to quick) initialization of the RAID5 is fun. It goes through about 1% every minute or two, then somewhere in the mid 60s jumps to completion. But when the OS boots up, the array hasn’t been created – each disk is separate. I then have to go back into the BIOS, set the array up with quick initialization, and then it appears to “stick”. I actually ran the initialization again and checked every 10-15 minutes to try to catch what was happening at the end, but I apparently missed the window; it must zoom through 30% in like 5 minutes. Guess I’ll copy that terabyte to the array overnight and just see if it works.

Yeah, definitely 3ware next time.

Posted in Linux, Rants | 4 Comments

Loving PHP in a hostile world

Reading the comments and blogs that pop up on reddit, I’ve found that a furious animosity exists towards the good ol’ PHP Hypertext Preprocessor. Any mention of PHP is met with a firestorm of derogatory remarks; the community consensus seems to be that the language is used only by the worst class of shit farmers, harvesting crap from the reeking soil with crude fecal trowels.

Using advanced data mining techniques, we can determine where PHP might stand in terms of programming language hatred:

Google Suck-Off
“java sucks” 20,100
“C++ sucks” 8,670
“php sucks” 7,730
“lisp sucks” 3,550
“ruby sucks” 2,230

One might expect phpsucks.net to provide an explanation for why the language is hated, but the site has a decidedly different message. If you want coherent, technical arguments against PHP, then certainly they exist. Here are a couple of decent ones that I found with a cursory search:

And yet, the language is not without modern-day success stories: 7 reasons I switched back to PHP after 2 years on Rails.

Having used PHP with varying degrees of intensity since 1999, I find that I still love hacking in the language. My programming skills have matured greatly over the years, and PHP in no way prohibits me from writing the well-engineered code that comes with that maturity. You don’t have to express your application in some mucous HTML/SQL/PHP death rattle. With PHP5 you can use full-on object-oriented programming and still have the nifty benefits that scripting languages give you.

But I’m not going to leap to the pulpit, implore you to open your PHP docs to the Book of Rasmus, and lead you in worship of the language. You can’t design a “hypertext preprocessor” at the dawn of web programming and expect it to be perfect over the next decade. PHP has had flaws, and one could argue that there is a cultural flaw embedded in the language that leads to a lot of poorly-written code. By that I am talking about this sort of anything-goes, quick n’ dirty approach that allows the amateur to easily produce something workable with minimal effort. For an intriguing listen about the culture of a programming language (among other things), I highly recommend this podcast with Rails’ author DHH and Extreme Programmer Martin Fowler.

Yet when it all comes down to firing up emacs and writing web code, PHP provides me with the flexibility to write good software. I know the language intimately, I know when I can use PEAR to save some time, I know the php.ini settings, I know that Apache and mod_php are rock solid. In short, I have deep knowledge of a reliable programming tool and I can use it to rapidly develop maintainable, extensible web apps.

Of course, there comes a time when the familiarity with your current tool cannot compete with the benefits of a new tool. Is Ruby on Rails that white shore and far green country? Well, no. I’m not going to learn a new language, a new API, and – in the case of Rails – a custom implementation of a certain methodology running on a new application server, just so that I can have cool syntax and maybe fool around with closures. I don’t think that writing a quality MVC in PHP is going to be earth-shatteringly different from doing the same in Ruby – at least not enough so as to cover the activation energy of making the switch.

When I see people choking back their own vomit when “PHP” crosses their lips, I know they’re thinking about a different kind of PHP from the one I use. They’re thinking about raw SQL statements in nested loops, dumped with inconsistent indentation in a mass grave of <?php tags and HTML. That’s not the PHP I hack. I’ll keep my eyes on the programming scene with an open mind. If PHP begins to stagnate while Ruby forges ahead and puts together a strong mod_ruby, then I won’t need to be a shaman to read the cast of those bones. Until that time I will continue to dally with PHP, though it be strictly forbidden by the ancient laws of my tribe.

Posted in Programming | 1 Comment

Super Mario Galaxy: A co-op experience

Whereas Super Mario 64 was a revolution, and Super Mario Sunshine was a logical extension of its predecessor (with a hovering, rocketing, blasting, water cannon), Super Mario Galaxy takes a full stride in a bolder direction. And that direction is up… or down, or sideways, or wherever the force of gravity happens to be pulling. The key innovation in Galaxy is that any surface or object can have its own gravitational pull. The first time you step foot on a small planetoid and “Little Prince” your way around its circumference in any direction, you realize that something new has been brought to the world of Mario.

The technical execution of this new feature is next to flawless. Dashing around a tiny world, you can long jump and sort of live out Isaac Newton’s mountaintop cannon thought experiment, though I have not been able to launch Mario into stable orbit. The game designers took this new freedom with gravity and gave it a thorough exploration. Mario can high jump from one floating island and be caught in the gravity of another above him; gravity can change directions as you cross from one colored surface to another; hitching a ride on a flying cube, Mario can dash onto any of its six sides to avoid obstacles and enemy attacks.

With a little help from my friends

The other major innovation is the co-op functionality. My brother and I are always eager for co-op games. The cooperative experience is not very deep with Galaxy, but it works well in our case; I love platforming and “driving” Mario, while he is generally content to take in the sights, point out things I’m missing, and utilize his set of actions. Using the wiimote, the the main things a co-op player can do are:

  • Collect star bits (little spiky sweet tarts) used to feed hungry Lumas (star creatures that will “TRANS-FOOOOORM!” into gateways to other worlds)
  • Shoot star bits at enemies
  • Freeze enemies or certain platforms in place
  • Cause Mario to jump or spin in mid air, and perform a special super jump timed with the primary controller

In terms of battling through the game, the co-op player makes the going much easier. You’ll never want for star bits if your partner is doing their job – collecting them could be quite tedious otherwise. The management of enemies is also a great plus; I can navigate difficult areas while my brother holds pesky foes in place with his wiimote, or knocks them around with star bits. The game uses giant Bullet Bills quite a bit, making you guide them to certain locations to blast openings for yourself. Such a process is ridiculously easy when the co-op player can freeze the flying bullet at any time. Disintegrating platforms, spiky platforms, and certain enemy projectiles are also freezable – further smoothing your path.

Every girl’s crazy ’bout a sharp dressed man

Along with gravity and co-op play, Galaxy brings back the “suit” paradigm (from Super Mario III, I believe) wherein Mario can don different costumes to acquire new abilities (albeit limiting himself in other ways). Here is a quick rundown of the suits and related gear:

  • Bee suit: Mario can hover/fly for a limited time and stick to special honeycombed surfaces.
  • Ice suit: Mario can walk across water by turning it into hexagonal patches of ice; wall-jumping between adjacent waterfalls is also possible.
  • Fire suit: Similar to obtaining the fire flower in the original Super Mario Bros, the plumber can toss fireballs.
  • Spring suit: Mario acts as a coiled spring, constantly bouncing and able to leap to huge heights.
  • Bubble: Mario becomes enclosed in a bubble and you navigate maze-like areas by propelling him with gusts of air. Having the co-op player blast mines with star bits is very useful for these scenarios.
  • Ball: Mario balances on a large sphere and rolls his way through obstacle course levels.
  • Manta Ray: Mario runs a timed raced through a twisting, wavy water course on the back of a manta ray.
  • Turtle Shell: Grabbing a shell, Mario can motor underwater much faster than his painfully slow swimming speed.
  • Red star: Mario can fly.

Stuck inside of Mobile with the Memphis blues again

I found that as much as I enjoyed the game, I missed the sense of intimacy that the previous 3D Mario titles provided. No, I don’t mean cuddling in bed with Mario on a lazy Sunday morning. I mean that the areas/levels in the earlier games had a sense of consistency to them. You became familiar with the world you were exploring, and it would be abundantly clear if the environment had changed between stars (e.g. a shallow area flooded, the activation of a tower of platforms, etc). Added to that would be the surprise you felt if you stumbled upon some secret that had been hiding from you along a well-trodden path.

With Galaxy, most levels are quite literally fragmented. You’re hopping from planet to planet, sailing around on pull stars and launch stars, walking upside down and sideways, star bit meteors are falling, and your co-op player is buzzing enemies in place and firing star bits all over the screen. Sometimes gravity is centered on the object you’re standing on, and sometimes it’s just vanilla straight down – the difference isn’t always obvious. Added to this is your relative lack of camera control and several unfortunate camera angle choices by the game. If I hadn’t been playing video games all my life, I’d be curled in a shuddering ball with major information overload.

One thing I didn’t particularly like about the co-op play was that the secondary player has the ability to make Mario jump – even inadvertently. So while you’re running around a hectic area, and your partner is flinging his cursor all over the screen, you may suddenly find yourself airborne without having hit the A button. The co-op player can also make Mario spin in mid-air – this can provide a useful save, or it can disrupt the timing of your own spin jump. Fortunately we didn’t have too many problems with this feature during our climb to 120 stars.

As I’ve laid out here, the game is so much more frenetic and disjointed than Mario 64 or Mario Sunshine. But what you lose in consistency, you gain in variety. I’m not sure that the co-op experience would work (or have any sort of challenge) if you weren’t continually covering new ground on screens chock full of action. I realize I’m making Galaxy sound like a pinball machine on steroids (and sometimes it is), but there are plenty of “chill” moments. It’s just that the overall bandwidth, if you will, of the game is so much higher than the Marios of yore.

Oh, and one quick note: NINTENDO, FOR THE LOVE OF GOD GIVE US THE ABILITY TO SKIP DIALOGUE BOXES!!!1!!! Instead of watching the text type out, I want to hit A, have it instantly print the whole thing, then hit A again to go to the next segment of text. You’ve been making cutting-edge games for, what, 20 years? You can make every object in your game have its own gravitational force, but you can’t fast forward text?</rant>

The kids are alright

We beat the game last night (well, around 1AM this morning) with a full 120 stars. To do this you need to:

  1. Beat the game, unlocking the (15?) purple coin challenge comets
  2. Beat the purple comet levels (along with any stars you missed from before)
  3. Beat Bowser again
  4. Sit through the end cut scenes and credits again
  5. See some brief new content where you eventually get to play as a new character.

I was very impressed with the purple coin challenges because each one felt like it had been hand-crafted. You have to collect 100 purple coins, but there are only a few instances where you need to play the sort of hide-and-seek game that Mario fans are familiar with. This post is way too long already so I won’t describe the specifics of the purple comet trials, other than to say they are fun, challenging, and creative.

All in all, Galaxy looks great of on a 50″ plasma over a component connection. The visuals are captivating, the sound effects very satisfying, the story is neat, the technical execution is near flawless, and the game is fun as hell. We may run through it again using the new character – though that’s a lot of work for what I’m sure will be a very brief cut scene. Playing the game with my brother added a social component that increased the overall enjoyment, more so when you include the advice and wry comments of his fiancée, looking up from her crocheting to take in the action. The Mario franchise has come through for me again and all I can say is: YAHOOOOOOOO! 9.5/10

Posted in Video Games | 2 Comments

How to install Opera on amd64 Ubuntu

Specifically I am working with Kubuntu 7.10 (Gusty Gibbon).

Problem: You are running the amd64 version of Ubuntu, but Opera does not appear to offer 64-bit versions of their software.

Solution: Use the latest build of Opera 9.5 (Kestrel) which I believe is currently in beta status. Here is how:

  1. Go to the Opera Desktop Team blog
  2. On the right sidebar under “LATEST SNAPSHOTS”, click the one for UNIX
  3. Go to the x86_64-linux/ directory
  4. Download the opera .deb package
  5. sudo dpkg --install opera*.deb

Explanation: I’m not sure why Opera tucks the 64-bit versions away instead of including them on their user-friendly download page. I know this newfangled 64-bit technology is akin to some incomprehensible alien FTL space drive, but these processors have been out for several years.

During my web searching, I had to filter through a number of hacky solutions that all involved shoehorning the 32-bit version of Opera into the 64-bit OS. At last I saw a forum post where someone linked to an Opera FTP directory containing 64-bit packages. Hopefully my solution describes how to get the latest and greatest 64-bit Opera for Ubuntu – at least until Opera finally offers it officially.

UPDATE: as the disclaimers suggest, the development builds of Opera are not entirely stable. My favorite “known issue” is this:

  • Plug-ins crash Opera on UNIX/Linux.

Maybe it’s time to try stapling the 32-bit version onto my system…

Posted in HOW-TOs, Opera | 5 Comments

The Elusive Nintendo Wii Guitar Hero III Controller

The scarcity of the Nintendo Wii is a well known phenomenon, almost to the point where one suspects foul play. Just as the console’s popularity in the US market was apparently underestimated, so it seems was the Wii’s version of Guitar Hero III.

After experiencing GHIII on a friend’s PlayStation 2, I had to have it. Quite a few million people feel this way; the game sold 1.4 million copies in October across all platforms. I imagine it did just fine in November and December as well. As of today, the game and its distinctive controllers seem to have good availability for the PS[23] and Xbox 360, but not for the elusive Wii.

I walked into Best Buy at just the right time yesterday and was rewarded with the opportunity to buy the Wii version of Guitar Hero III for $90. They had at least ten of them there and today they are gone. I called around a few other places, but they were sold out as well. Why was I calling about the game when I had already purchased it? Well… it’s a little embarrassing.

Just as I had to have the game, I also needed to play in co-op mode with my brother. After hunting around online, we eventually learned that a standalone GHIII controller for the Nintendo Wii is not for sale – no such product exists. The best we could find was a pre-order at Toys “R” Us for $60 that ships January 28th. This resulted in the following sequence:

  1. We’ll have to wait a month to play co-op with that pre-order
  2. We want to play now
  3. If the pre-order is $60, and if the game/controller bundle is $90, then really you’re only paying $30 extra to have the controller now
  4. I offer to cover $15 of the extra $30
  5. The offer is moot because the game is now sold out all over town

Maybe I should have bought the game for my PS2 instead. Regardless, the point here is that, aside from exposing myself as a sad video game junkie, once again the popularity of the Wii has been underestimated. Oh well… don’t be surprised if you see Guitar Hero III for Wii selling on eBay with no accompanying controller.

Posted in Video Games | Leave a comment