San Francisco

I am in San Francisco. It was a rather frustrating trip here, but has been a fun time thus far (due, in no small part, to the holiday today).

Travelwise, I spent most of yesterday on planes. Got into San Francisco about 30 minutes late, and had some slight panic when I made it to the bus stop at 12:16, with the 292 scheduled to arrive at 12:15. Fortunately, it was a little late, and I barely made it on… which was fortunate, because BART had stopped running and the next bus was at 1:15 AM. Made it to the hotel at around 1:30 and managed to get some sleep. Meh.

Jeremy, Shawn, Ian, and I spent the day wandering San Francisco for Unpresidents’ Day.
What is Unpresidents’ Day? I’ll let the video tell you. (NSFW for language.)

Video editing done by Jeremy. My DSLR apparently delivers decent quality audio, despite all the background traffic.

There were also tasty Mission burritos (oh how I missed you) and Korean food at Stone (highly recommended).

Mark and Tim playtested People Wars for me, and it seemed to go well. It looks like attacking and tasks are mostly balanced now (I worry a bit about attacking being overpowered, actually, because of the constant difficulty of task playing, but lower difficulty as the game progresses of using more powerful attacks), but the main issue is (as I suspected) with the limited pool of task cards. This will have to be remedied before the game is released.

Now I should sleep so I can go to work tomorrow. Yay work.

Blackberry complaints

The more I use consumer electronics, the more it’s clear to me why Apple is so successful. Their stuff just works, and it mostly works the way you expect it to (and without getting in your way like most intro-level Adobe products do).

Case in point… I have an email in Gmail from Groupon saying that I can get a $5 credit if I make a purchase from my mobile device, and helpfully providing links to places to download. Okay, great… I load Gmail on my Blackberry, and see that the links in the email are not rendered as links. They are plain <a href=""> tags. Every browser can render links. WTF, Blackberry.

Fine, whatever. I email myself the link as plain text so I can click it. Doing so brings me to this page, which is Blackberry’s official App World. See that “Download” button? Yeah, I didn’t. The Blackberry browser does not render that button. None of the four browser options render that button. (And, if you view source, you can see why… it’s not a button at all but a bunch of styled divs. WTF again.) And why are there four browser options? Should an end user have to know the difference between “Hotspot Browser” and “BlackBerry Browser” and “Internet Browser”? Does anyone actually know the difference?

Fine, whatever. I have the official Blackberry App World application installed on my phone. Let’s do that instead. Go in, search… and no results. There are no results for the Groupon application I am staring at on my laptop browser. I search for a bit in the various views and can’t find it. So I give up and try to close the application. Which proceeds to freeze and crash the phone. The official App World application. And this isn’t the first time it’s done this either.

This is, of course, in addition to other problems I’ve been having, such as buttons that can’t be clicked in the Blackberry Browser (plain HTML input buttons too), the generally unintuitive UI, the “Emergency Call” option being helpfully located right under “Unlock Phone” where you will hit it almost every time you try to unlock your phone, and the selection defaulting on the “Lock” option after you unlock where lag between popup notifications (such as for meeting invites) *will* cause you to hit the “Lock” button again. (And don’t even get me started on some of the issues I’ve had to deal with at work related to the Blackberry browser.)

So yeah. As much as I love having a physical keyboard, if I was ever going to buy my own smartphone, I will stay far, far, far away from Blackberries.

Edit: Yes, I could copy-paste the “Download” link into an email and open it in the Blackberry and hopefully get the right thing to happen, but I shouldn’t have to do that, and I’m too frustrated with the phone to want to do that now anyway. It’s one thing if third-party websites and software don’t work correctly on the phone (although I’m still extremely confused why it can’t make plain input buttons work properly), but if your first-party website and apps don’t work correctly, something is very wrong. That’s not just bad design, that’s sloppy.

Apples!

60 apples for $16.
Sooo many apples!

(Only 52 apples are pictured because Owen already took 8.)
Simmons Farm is pretty awesome. (Also apparently not possessive, like you’d expect.)

Well, crap

A few months back (April 30, to be exact), I did a small overhaul of the monsters and items in CMU adventures. I wanted to make the early game easier so you weren’t eating all of your equipment or keeping one enemy alive to use for healing. Made the changes, uploaded the monster definition files over the existing ones, didn’t think much of it.

Cue today when I get an email saying the game is broken because “monster 37” doesn’t exist. I look and, sure enough, there is no definition for that monster… nothing after monster 32 exists. But strangely, the room definition files do know about 37. And there is an image for monster 37. And 36. And 35. And… oh shit.

So apparently, in doing my overhaul, I did not have the most up-to-date version of the code. As such, a lot of the post-boss content (all of the Cohort and their associated items, mainly) got wiped from the game. The worst part is that I can’t seem to find a backup of these files, so it looks like it’s truly gone.

Since it’s now 12:45 and I really should be sleeping, I took the easiest solution and reuploaded the entire game based on the version I have locally. It isn’t ideal, but it should at least prevent issues with broken monster and item references. People with older accounts may be broken because the item database is also screwed up now (or, really, was broken with the April 30 update). But those people beat the game up to what existed then anyway, so that matters less.

I suppose this is a good opportunity to work on the new game I haven’t touched since before moving from San Francisco and leave this one up as some sort of historical archive.

So, in conclusion… always make backups of files before you wipe them out as part of a major overhaul. Blah.

null

Yesterday afternoon’s little bit of head scratching and debugging confusion comes to you courtesy of the fact that

SELECT * FROM my_table
WHERE my_id = iObject.my_id

does not do the expected thing when both my_id and iObject.my_id are null.
Because apparently null = null and null <> null both evaluate to false, because any comparison involving null evaluates to false.
(Edit: As pointed out to me by many people, it should actually evaluate to null, but regardless, the effect is the same… the select statement does not get the rows you expect.)

I guess it makes sense when you think about it (a lack of a value is not equal to the lack of a value, because there is no value, as opposed to C where null is just a pointer to 0x0 so a value comparison makes sense), but it’s still a surprising issue when you first come across it. Working around it involves the non-intuitive

SELECT * FROM my_table
WHERE (my_id IS NULL AND iObject.my_id IS NULL) OR my_id = iObject.my_id

It looks like MySql also provides the null-comparing operator <=> which will return equality even if both items are null. But it doesn’t look like Oracle does.

Blah.

On an unrelated note, I’ve redone the design of photos. Check it out if you haven’t yet, and let me know if things are broken or don’t work for you. :)