Friday, August 31, 2007

We're Gonna Let It All Hang Out

I think that maybe, just maybe, Haruki Murakami is one of my favorite active novelists. When even your minor work is pretty good, well, that's an excellent sign.

I recently finished After Dark, a slight novel that he released after Kafka on the Shore. The whole book takes place between about 11pm and 6am, which really is the perfect time for a Murakami story. His plots are already so fluid and dreamlike, so this unnatural hour makes an ideal setting for his fantasies to play out.

So, who should NOT read this? As with all Murakami (except Underground), don't read if you're the sort of person who wants "resolution," or "explanations." If you like to have everything all wrapped up and neatly summed up at the end, you will find these books immensely unsatisfying.

Murakami's universe is inherently alogical. Events and characters somehow influence one another without ever coming into contact. You get the feeling that there is a spiritual plane hovering over the story: we don't see anything inside it, but can infer its existence by the way it directs events in reality.

At the same time, he has a firm grounding in the present world, particularly with pop culture. He writes knowledgeably about specific jazz pieces, the layout of parks, how characters prepare their meals, and more. It was particularly interesting for me to read Murakami after my trip to Japan; I think I'm now in a better position to really understand what he means when he describes the Denny's restaurant, or the 7-Eleven, or the other representations of all-night Tokyo existence.

Probably my one serious complaint with this story is the characters. While they do a great job at carrying out their Murakami role, and are the source of some really interesting dialog and observations, I didn't feel like I got much of a feel for the people themselves. I think, though, that this is probably in large part due to the structure of the story - he had quite a few points of view to divide his time between (including one really interesting disembodied narrator), and only about 200 pages in which to do everything. Then again, the themes of anonymity and separation are crucial to the book, so it may even be deliberate that the reader doesn't really penetrate these characters.

Fortunately for me, there are still plenty more of his books that I haven't read yet. It's exhilarating to have an unexhausted supply of good books, and I'm looking forward to continuing my journey through this very strange world.

Friday, August 24, 2007

Early thoughts on the iPhone

Earlier this week, I was suddenly struck with an overpowering desire to own an iPhone. I was kind of surprised. I had survived through the initial hype without feeling all that compelled to get one, and there hasn't been any recent news about it (this was before the iPhone was "unlocked" [I use the quotation marks because, contrary to mainstream media coverage, there was already a simpler exploit available that used a modified SIM card instead of physically altering the iPhone itself]) to bring it back to mind. I guess it was a slow-developing kind of realization that it was a great phone. Several people around the office have picked them up, and I've just been really impressed whenever I used one.

As previously noted, I've wanted to switch phones and providers for a while. My Sprint contract has been up for a few months, and this seems like a good time to take the leap and grab a 408 area code. I did some hemming and hawing early in the week until I finally said, "Screw it," and ordered the darn thing.

Part of what tipped me over the edge is the fact that Apple is now selling refurbished iPhones on their web site. They knock $100 off the price, and they still come with a full one-year warranty.

Ordering was a surprisingly good experience. The refurbished phones were listed as shipping in "1-2 Days". I opted for free shipping, which guaranteed delivery in "5-10 Days". I figured, this'll be fine: I'll get my phone sometime next week if I'm lucky, and have plenty of time to get ready. I placed the order Wednesday night, and it arrived around noon on Thursday morning. Ah, yes. There are benefits to living in the Valley.

Enough background: on to the phone itself!

I'll admit that, despite Apple's good reputation on refurbished products, I was a tad apprehensive when I opened the box. I needn't have been; other than a sticker on the back of the box that identified it as refurbished, there was no way I would have known it wasn't new. The unit itself came in pristine condition with no smudges or scratches, and had all the manuals, accessories, and packaging in perfect condition.

The first thing I noticed about the iPhone is how good it feels in the hand. It's slightly taller and wider than my previous flip phone when closed, and is thinner than the original Motorola Razr. The weight is perfect for me; it has a tiny bit of heft that keeps it from feeling fragile, but is still light enough that I can hold it for a long time without really noticing the weight. It has the perfect level of construction that I've come to expect from Apple hardware. The edges are softly rounded without a lot of extra ports, and the glass surface feels great.

Yeah, let's talk about that surface next. The reviews are right about how well the touch interface works. Part of this is due to good technology, and part to good design. Things are laid out in such a way that it's really easy to get what you need. And best of all, having everything done through touch frees up practically the ENTIRE SURFACE to serve as an amazing, attractive screen. I'm reminded of how impressed I was when I first saw the Sony PSP screen; this manages to meet or excel that. The colors are vivid, and the sheer size of the thing makes it even more impressive.

I haven't talked too much on the phone yet. Big surprise - everyone knows how much I hate cell phones. :-) But so far I've been pretty happy with the call quality. I called my old cell and left a long, rambling voicemail; when I listened, it came across pretty clearly.

There's still a lot left to look at. Honestly, I haven't even synced any music or video to it yet, so I can't even comment on that. I figure I'll give a quick rundown now, and revisit the issue a week or a month later.

So far, the things I most like:
  • Google maps. It's a great application anyways, and integrates beautifully with the rest of the phone.
  • That gorgeous screen.
  • Outlook syncing! I've never used a PDA before so this is new to me, and I can already sense that it may change the way I live my life (hopefully for the better).
  • Intuitive and CLEAN interface. There's one physical button on the whole thing, and it does exactly what you want it to.
  • Looks and feels great.
Software features I most want:
  • True Google mail. They only offer POP3 access, so it doesn't have the standard gmail features like archiving, tagging, etc. And it doesn't sync with the online account, so you can't really manage your mail. I'll probably end up using the web client for gmail, which is a shame, especially since Google has such a wonderful mail client for J2ME phones.
  • The first point is a specific instance of a more general request: support for downloadable third-party applications.
  • Stereo bluetooth.
  • LBS.
Top hardware features I most wish it had:
  • GPS
  • Removable memory card
That's it for now, I guess. By now I should have emailed my new number to most of you; if not, let me know and I'll shoot it your way.

Thursday, August 23, 2007

Speedy Gonzalez

There are advantages to living next door to Cupertino. Order something from Apple, select the free shipping option ("5-10 Days for Delivery"), and receive it 12 hours later. All hail Silicon Valley!

Monday, August 20, 2007

Yes, Sir!

You know those old commercials for breakfast cereals? "One in every box, collect all five"? That's a little like how I feel: at last, I've collected them all!

This past weekend I had the pleasure of hosting my last immediate family member out here in beautiful California. Arriving shortly before my two-year anniversary, Andrew was able to get away from his busy life (incoming college senior and ROTC cadet) to enjoy a taste of the good life out on the west coast.

As planned, Thursday proved to be a pretty relaxing, low-key affair. His plane arrived in the early afternoon, and I got to introduce him to the wonder of Fry's when he claimed Etrian Odyssey, a Nintendo DS game that has apparently vanished from the heartland. We also enjoyed a quick bite at Falafel's Drive-In, which I still think is one of the most amazing concepts I've ever seen.

If I could think of one word to describe Andrew's first 24 hours here, I think that word would be "Fire". I attempted to make Pizza Margherita on Thursday night. As Cook's Illustrated recipes go, it's actually pretty straightforward; I've made it three times before, and while it often comes out looking misshapen (I can't make those nice perfectly circular shapes), it has still won high points for being simple and tasty. This time, though, it was a steadily escalating disaster. First, I used yeast from an open packet, which probably wasn't all that active to begin with. Then, I ran the dough for too long in the food processor, causing the ball to break apart and lose its shape. If I'd been smart, I'd have chosen that time to say, "Forget this - let's go to Willow Street." But no: I am a fool, and have to soldier on.

After an hour, the dough had barely risen. I STILL persisted in rolling it out, even though the resulting crust was about four microns thick. I poured on some sauce and stuck it in the oven, and - noooooo! For the first time ever, my trusty SuperPeel failed me. It failed to release the last quarter of the pizza, dumping a ragged chunk of the crust and tomato onto the oven floor. When I pulled the pizza out five minutes later, I saw that (as I should have anticipated) the super-thin crust had already burned straight through. At this point, it couldn't get any worse, so I went ahead and added the cheese for the final step.

We ate it. Andrew made very kind comparisons between the food and Ramen, but I still felt bad... this experience hasn't done a lot for my desire to cook more often for an audience.

I was also doing a make-ahead chicken (also Cook's Illustrated, from the very same issue!) that I hadn't attempted before. It involved doing a spice rub, which I did that night, and then resting for six to twenty-four hours. A wise man would have waited until after he was home from work to attempt to cook it. Foolish Chris woke up at his standard five-forty-five, and spent the next hour banging around in the kitchen while Andrew attempted to sleep ten feet away. Somewhere in all there, the smoke detector went off. For reasons he still doesn't fully understand, Foolish Chris also thought it would be a great idea to make blueberry pancakes while cooking the chicken, and the resulting comedy of disasters would have made for entertaining viewing if it hadn't been pitch-dark.

I finally fled the scene of my shame to put in another productive day at work while Andrew was left in relative peace. That night we touched base and I pulled together a quick picnic. The apartment still smelled slightly smoky, but at least it was a straightforward affair to divide the chicken pieces, add some cheese and crackers and beer and fruit, and hit the road.

Our entertainment for the evening was a showing of "Macbeth". I love this play, and it's interesting how it seems to keep popping up when Kings get together. Several years ago, we'd enjoyed seeing Sean Bean playing the role at a show in London. This time, Erik, one of my co-workers (and among the smartest people in a group of really smart guys) had joined with Shady Shakespeare to put on a production of the Scottish play in beautiful Sanborn Park.

We briefly suffered through the southbound-17 squeeze, then got to the park a bit after six and enjoyed a great meal in the park. I went into my standard breathless praise of Santa Clara county and its taxpayer-funded mosquito eradication force as we had a blissful period of bug-free dining. Well, until the bees showed up. They were easily dispatched, though.

We ambled down to the show proper. It was a free production, but definitely not a cheap one. They have a great location, down a path and slightly into the woods, so you get a good view of the tall trees (not redwoods, but whatever) rising behind the stage. The stage itself was cool as well: there was a broad main stage, elevated just enough to provide everyone with a good view, and an elevated stage above that with stairs down on either side.

There was a lot I loved about this particular production of Macbeth. One cool thing was that the weird sisters (one of which was played by a man) were ALWAYS on stage. They weren't always in the action, of course, but they were constantly present... often, the main play would be continuing on the stage, while the witches stared down from above, or played with one another, or whispered and stirred the cauldron. Often, their actions would mimic or expand on what was happening below.

The design was interesting as well. The program noted that the they were going for a noir film look. This was most obvious in the part of the murderers, who wore black fedoras and trenchcoats. The nobles wore 1920's-era suits and dresses. The music tended towards jazz, with a few odd exceptions. One of the most striking things was the Weird Sisters singing "I've Got You Under My Skin."

There are a few things you need to look for in any production of Macbeth. First, who was the third murderer? In this case, it was Macbeth himself, without any real subtlety. (The actor playing Macbeth had a very distinctive body, so there was no real mystery there.) It's Macbeth who delivers the killing blow to the child, firmly placing him in the "villain" category.

The whole madness thing was really well done. Usually, a production needs to choose between one of two routes: either you show the dagger and Banquo's ghost, or you don't. If you show them, then Macbeth is a pawn of spiritual forces and as much a victim as a villain; if you don't show them, then Macbeth is insane. Here, though, the visions were shown on the platform above the stage. This had an amazing effect. On the one hand, the audience can see the same thing Macbeth sees; on the other hand, what he's seeing is clearly not actually "there", and so the disbelief of the dinner guests is completely understandable. I really liked this approach: it keeps things ambiguous and ominous.

Speaking of ominous... another awesome thing about the setting was the way the timing worked out. The play started at 7 at night, when there was still plenty of light outdoors. As time went on and the story got darker and darker, the light continued to fade; we were well into twilight by intermission, and as the murders stacked up and blood grew to cover the stage, the audience was left in near total darkness. Of course, you could achieve similar effects in a theater, but having it all adjust "naturally" is just amazing.

The show ended and the actors passed around their hats. I hung around a bit to congratulate Erik, but he was apparently free of dunning duties for the night, so we headed home instead. Andrew and I tried to go to a local bar that I had never visited before, and so had not realized that it had apparently been closed for a while. Ah, shoot. We ended up watching Evangelion and drinking Sam Adams, which is just fine in my book.

Saturday ended up being the biggest day for us. I'm on the Wash U Alumni mailing list for the Bay Area and am regularly tempted by events that they have, but since they're based out of San Francisco it's often hard for me to make it up there. On this weekend, though, they had a Saturday-morning tour of the Trumer Brauerei in Berkeley. I like beer, and Andrew sounded interested, so that morning we took the long trek up 880 into Bear country.

It was a pretty fun event. They had organized two tours, one at 11 and another at 11:45. It looked like both events had around 30 people show up. Most were people in their 20s, which isn't too surprising considering the setting, but there were also a few older people and even one family with a young toddler. I didn't mingle too much, thanks to my natural shyness, but the tour itself was really cool.

Trumer is the second outpost for a brewery based in Salzburg, Austria. Apparently, they chose Berkeley because the quality of its water was identical to what is in Salzburg, and so they could produce the same brew there. They've started in the past decade and are growing quickly, doubling their output every year. We got to see (and smell) the yeast and barley they use, toured the various chambers, saw the fermentation vats and different storage areas, got to see the bottling facility, the cold room... probably the coolest thing about this tour (the only one I've done besides the Boulevard Brewing Company in Kansas City) was just getting to see EVERY stage beer goes through up until the time I drink it.

The tour ended with a "free" beer tasting. The tour itself only cost five bucks, and everyone got a nice big glass of pilsner (the only kind of beer they made) and got to keep the glass. Their tasting room is really sweet as well, with a great bar and a really stylish drinking room.

We hung around for a while, then chatted briefly with the event organizer on our way out. She seems really nice, and is very interested in getting more young alumni to organize events.

A side note into How Chris's Brain Works: There's something fundamental in me that hates duplication of effort. Whenever I go for a hike, I'll always try to make a loop so I avoid walking over the same ground twice. Whenever I need to drive for an errand, I'll try to do all other pending errands as well. And when I go someplace far away, I'll try to squeeze in as much as I can in the vicinity.

That being said: I've lived in the Bay area for about two years now, but other than a quick trip to see a Radiohead concert, I have not been up to Berkeley yet. I've been pretty light on the East Bay in general, really. So now that I finally had an excuse to go there, I was eager to try some other stuff out. Fortunately, Andrew was game with some experimenting.

Top on my list was our next destination: lunch at Chez Panisse. This is arguably the most famous restaurant in the Bay area; Alice Waters, considered the mother of "California cuisine", has been running it for decades now, and its influence has defined fine dining in the region. After spending far too long looking for a parking spot, we walked a few blocks to enter the restaurant.

The cafe is... I suppose "cozy" might be the right word, in the sense that the rooms are relatively small and the diners are placed closely together. The hostess actually pulls back the tables from the wall in order to give enough room for someone to get to the other side. I sat facing the room, while Andrew was facing the wall - however, the walls have nice mirrors set up, still affording patrons with a good view of the room. The ambiance was upscale while also being cheerful; we fit in well with nice jeans and collared shirts.

Of course, it's the food itself that will take center stage at a place like this. Andrew was rather adventurous, getting a squid pizzetta complete with tentacles as his first course. I opted for the roasted goat cheese with rocket and eggplant, a phenomenally tasty salad. It's apparently one of Chez Panisse's signature dishes, and I can tell why - the roasted goat cheese is an amazing unique and delicious taste. For the main course, Andrew ordered sardines with fried calamari; I never turn down fish, so I had salmon with fillet beans. I'm not sure what sauce they served on the fish, but it was incredible. We did the food exchange thing, which I'm a big fan of, and I had fun eating a sardine - they had been cooked whole, so you got to experience the pleasure of peeling the flesh off the skeleton. Fun times.

On the dessert front, Andrew got a wonderful berry cobbler, and I took a chocolate thing with espresso ice cream. Once again, phenomenal.

Lunch was just perfect; it took us a little under two hours in all, and was just incredibly satisfying and tasty, leaving me feeling full but not bloated. We walked back to the car, and then traded our epicurean hats for our nerd hats, and went to Other Changes of Hobbit.

This was a store I had found while Yelping for other things to do in Berkeley. (Boy oh boy do I love Yelp!) It's the Bay Area's largest Sci-fi and fantasy bookstore. Now, the store itself isn't that large - it's a little cramped - but the sheer volume of stuff inside is amazing. They do both new and used books, and I had a trip through memory lane as I browsed their used books. I saw plenty of things from my childhood that I hadn't thought of in years: old Sanctuary books, the George MacDonald stories I loved, and a ton more. Andrew seemed like a kid in a candy store, walking around with a huge stack of books. I was caught in my standard dilemma of needing nothing and wanting everything: if I started to buy things I wanted, I'd leave the store a pauper. I eventually just got a single purchase, the "After the King" anthology that I remembered having read (and alternately enjoyed and hated) back in Minnesota. We eventually wrested ourselves free from the tenacious grip of awesomeness and walked out the door, staggering under our purchases.

Because I'm a jerk, I pressured Andrew into taking a hike. Because I'm a fool with a poor sense of direction, I wasted a good thirty minutes trying to find it. I had a Google map and a Yelp review of a park in Berkeley that sounded great, but for the life of me I could not locate it. Eventually I found it, or something very much like it, a few miles up the road from where Google had suggested it would be. The trail in question was a fire trail, though one more narrow than I am accustomed to. It lived up to its billing, though: it rose very steeply up through the forest, and at the hilltop it provided awesome views of the Bay and the surrounding cities. It was a little smoggy that day, so couldn't quite see as far as the Golden Gate, but it was still pretty impressive. We chatted about the feasibility of maintaining an insurgency on the West Coast against foreign invaders as we trekked along the ridgeline, then headed back down to the car.

We were in the mood for fast food, to cleanse the palate after a strenuous day of fine dining. I considered taking Andrew on the pilgrimage to In-n-Out, but the closest one is still a bit of a drive away, so we ended up swinging by Wendy's instead. (Andrew is deprived of having any in Urbana/Champaign.) I introduced him to the "Clerks" animated series as we consumed our sandwiches.

The Day Of Events ended with a big outing to downtown San Jose, where we saw Alex Reymundo perform at the Improv. It was my first visit to the venue, and I liked it quite a lot. It's a standard sort of comedy club setup, with those funny little tables and overpriced drinks. The room is nice and large; even though a ton of people showed up before us, we were still able to get seats on the second tier of tables from the front.

There were several comedians who delivered short sets before the headliner, and they got progressively better. (Granted, the arrival of alcohol may have played a role in this transformation.) The jokes were pretty relationship-oriented and dirty as heck.

Alex himself took the stage to strong applause. I hadn't heard his standup before, but he's decently well-known. He's one of the "Latin Kings of Comedy," and has had some Comedy Central specials. He started off with some pure Spanish - "Como estas?" - that lasted for almost a minute, which segued into his first funny bit - "Do y'all speak Spanish? If you don't, you'd better learn! This is America, sucker! Learn the language!"

His tone was aggressive but good-natured... he would pick on various people (cops, hillbillies, and so on), but would invite people to join in on making fun. His jokes were fairly political, but more about social issues and attitudes than specific politicians or policies. It was also an example of the old minority-making-fun-of-their-own-group genre, but there's a lot of funny to be found there. (I'm not at all qualified to speak about "Race In America," but sometimes it feels like comedy is one of the only places in the public sphere that permits frank discussion of racial issues.)

He also could toss back tequila shots like nothing. He would periodically request, and receive, a shot from the wait staff. I suppose there was no way to know for sure if there was actually tequila in there, but he sure grimaced like there was.

Interestingly, he included a fairly large segment on his family. He talked about how he would only drink when he was on the road, and how much he missed his wife and kids. He also had some funny and frank comments about his children: his daughter is precious, wants to follow in his footsteps, and makes him cry; meanwhile, his son is "a boy" and "leaks from every orifice."

I'm rambling. It was really funny, and if you get the chance to check him out, you should. I'm guessing the watered-down, approved-for-television version wouldn't be as powerful or funny, but the live show or an HBO-type special would be well worth your time.

For once in my life, I actually caught a train when I wanted to, and so a few minutes after the show ended we were speeding back homeward. The night ended with some more Neon Genesis Evangelion and an early bedtime for Chris The Wimp.

Sunday was Mandatory Deliciousness Day, also known as Southern Kitchen Breakfast Extravaganza. The one required outing for all my visitors is a trip to my favorite breakfast spot in the universe; Andrew doesn't particularly like breakfast, but I wasn't going to let him weasel out of it. We took our time, though, and didn't get down there until around noon. Andrew went the semi-traditional route with the French Toast Sandwich (eggs over hard and sausage), while I tasted the deliciousness of the Italian Delight omelet.

We'd originally planned on spending the afternoon at the San Jose Jazz Festival, but after we arrived downtown decided that we were more in the mood to have a purely relaxing vacation day instead. We headed back to my apartment and got some hard-core chilling done: reading through the trove from Other Changes of Hobbit, watching gameplay trailers for BioShock, watching The IT Crowd, and otherwise blissfully wasting our time.

Andrew got to show off his own culinary skills that night, which put my own to shame. We swung by the Safeway and picked up the ingredients for Beer Brats. Except they didn't have bratwurst (!), so intead we got Italian sausage. And we couldn't find good hotdog buns, so instead we got some hearty sandwich bread. And we couldn't find the beer Andrew normally uses, so instead we used Sam Adams Summer Ale.

All those substitutions changed the taste, I'm sure, but it all tasted great. Andrew simmered the sausages for a while in the beer; he usually finishes them on the grill, but I am deprived in the grilling department. It still turned out really good, though. We paired them with some Ruffles potato chips, which I haven't tasted in ages.

That night was more of the same - chatting, laughing, enjoying a common nerd bond. Both of us had early flights the next morning - Andrew's eastbound, mine southbound. As we went our separate ways, it was fun to reflect on the time we'd had in Silicon Valley, and a certain satisfaction in being able to check off that last family member. "Collected all five... check!"

Thursday, August 02, 2007

MIDlets, JARs, and URLs: Oh my!

I try to avoid blogging about tech-related stuff on here, because I don't enjoy boring people to tears. However, after spending several days banging my head against a stupid problem, I wanted to post my solution here in the hopes that future generations of Google-searchers may get some relief.

So, here was my deal.

Stop me if you've heard this one:

"My program runs just fine on my PC, but it doesn't work on the phone!"

You've just summarized the entire state of mobile development. Once you really UNDERSTAND that statement, you're well on your way to becoming a good mobile developer.

In this particular case, I was deploying a J2ME program for the first time in over two years. On the whole, I was pleasantly surprised at how quickly stuff has been coming back to me - the whole multi-threaded model, the byzantine world of JSRs, the way the keys and the screen work. There are still definitely some rusty spots, though... I tore out my initial approach at data persistence because I wasn't grokking RecordStores properly. That paled in comparison to just getting the darn thing to run, though.

Oh, don't get me wrong, it runs perfectly fine within EclipseME. And within the OEM emulators that I've downloaded. But since I'm just one guy and not a development shop, I have exactly one actual device to test on: my personal Sprint J2ME phone, a Sanyo 7400. And any time I tried to download the JAD, up would pop a wonderful error: "Data Error 906. Invalid Descriptor Attribute Format."

I HATE this error. I did as all good engineers did and googled thoroughly, only to find out that this error just means "something, somewhere, somehow, is wrong with your JAD or MANIFEST.MF file". There were all sorts of helpful tips: Make sure all your lines end with a linefeed and no carriage return! Make sure you aren't missing any required attributes! Make sure the JAD and manifest files match exactly! Except for the attributes that aren't required in both! Except for the particular phones that do want them there! Most aggravating for me, there doesn't seem to be any way to find out WHICH attribute it doesn't like.

I tried all sorts of things. Every fix would continue to work fine on my local machine, but my Sanyo stubbornly refused to play ball. I thought I was onto something earlier tonight, when I realized that the manifest file was enforcing the 72 character limit and pushing extra characters onto the following line. I pulled my MIDlet class all the way back out from "us.cirion.(something).ui.mobile" to just "us.cirion", and trimmed out my install-notify and delete-notify lines, and once I saw that everything was back under 72 characters, I was sure it would be a success.

Nope.

After all that, I finally - finally! - figured out the problem. It's actually the very first entry in EclipseME's JAD editor: "Midlet Jar URL". See, I had put the name of my Jar in there, which seems perfectly valid - after all, the jad and the jar are in the same directory, so it should be able to find the jar, right? Only, it turns out, it can't. At least on the Sanyo 7400, the MIDlet-Jar-URL really IS a URL. So, instead of "MyApp.jar", it had to be "http://mydomain.com/location/MyApp.jar".

As usual in this line of work, the amount of time spent finding a problem is inversely proportional to the difficulty in fixing it. As soon as I realized what the issue was, it was a super-quick change. I popped it onto the phone, and went on my merry way.

And AFTER I found the problem, I saw that Sun had an article from way back in 2002 describing the steps to properly deploy a JAR. I'm sure that all of this is extremely obvious to real J2ME developers, hence the fact that none of my Google searches flagged that field as a potential problem. Now that I've run into it myself, I can be certain I won't make this mistake again. I'll probably be looking into Antenna as a way to hopefully help automate the translation from local URL to remove.