===[ Quick Winamp / Dropbox tip | May 31st, 2009 ]===

Ahh, junction, you never fail to bring me joy.

Use dropbox to sync your winamp settings (internet radio bookmarks, media library, etc.) between all your computers. Just set this up and it seems to work great. Caveat: I think winamp stores its media library in here, so if yours is big, you may eat up a chunk of your 2GB dropbox limit (in which case it might be better to junction to a removable drive).

junction C:\users\[you]\appdata\roaming\winamp C:\[your dropbox]\winamp

===[ Backups | May 23rd, 2009 ]===

I’m working intently on something iphone-ish (iphony?) that I’m really excited about. It’s been taking every minute of my time but I’ve almost got enough ready for a big debut here soon.

In the meantime, I thought I’d talk about backups. Up until last night, my backup strategy was, let’s say, severely lacking. Even after losing over 160 gigs of MP3s to a Diet Coke a few weeks ago, the only real backup I had was some folders I copied halfheartedly before moving across the country this time last year. Prompted by a conversation at work earlier, I spent the wee hours of Friday night working on… backups.

I found a program called Cobian Backup. I like it because it supports FTP transfers, meaning that in addition to backing up my internal drives to an external USB drive, it also can pull from FTP sites, so I can backup snapshots of all my web sites too. It’s a little rough around the edges but it’s easy enough to schedule stuff and it seems fairly reliable.

With local data and websites now safe and secure, I thought about gmail. Backups of gmail may seem silly – gmail’s not going down for the count – but, thanks to alcohol, it’s entirely possible that I could do something ridiculous to lock myself out of my account. And there’s always a chance I’d get hacked. An infrequent gmail backup couldn’t hurt.

Lifehacker will tell you you need to install cygwin and then point you down the path of UNIX-on-Windows hell. Don’t do it! There’s a much easier way – some awesome guy has written “Gmail Backup.” It’ll let you backup via a GUI, or through a command line interface. Through a couple scheduled tasks, I’ve now got my gmail, and my wife’s gmail both backing up to the USB drive every few months.

The one thing I wish I could figure out is a way to archive some of my pages on other sites. It’d be cool to periodically backup my twitter, facebook, and friendfeed pages. I dream of some sort of “web backup” tool that you can point at all these different sites and have it save off your news feeds and profile info. Also, where’s the plugin architecture for Digsby??? I want to write one to remember all the avatars and taglines I change and put them in one of those cool flash-powered timeline displays that are all the rage on the internet.

===[ The Sorry State of Cross Platform Mobile Games | April 25th, 2009 ]===

So I’m toying with the idea of writing a game – I’ve got a pretty good idea that, more importantly, has remained a pretty good idea for the last few weeks. Simple to implement, fun to make, fun to play. I should be happy, but I’m not.

I’m tearing myself apart trying to decide which platform(s) to create it for. For starters, there’s the obvious: the iPhone. Tons of free engines and code samples make creating a game for the iPhone a no-brainer. Unfortunately, that means there are thousands upon thousands of them, and getting any sort of attention in that crowded market would require more work to market and publicize than it would take to actually create the game.

Then there’s the G1 – its hardware is on par with iPhone, yet it has a much smaller user base. This is a blessing and a curse – less users means fewer sales but less competition. Same deal with Blackberry – I don’t have the numbers to back this up but my hunch is that the number of iPhone users dwarves both the number of G1 and Blackberry users. At any rate, Don’t Dial iPhone is outselling Don’t Dial G1 by at least a 10:1 ratio (but, that’s with a very iPhone-centric marketing effort). Maybe with some G1 exclusive marketing I can get that to 5:1.

The Blackberry has in its court a much less crowded market, and a push for quality (RIM has explicitly said they’re not going to tolerate the crap apps that Apple does). Also, I’d be a fool to sell my game for anything above $1 on Apple’s app store, but I could sell for $3, maybe $5 on Blackberry and remain competitive. G1 is probably the same story, but muted slightly due to the number of free apps, as well as the G1’s open source spirit, which attracts a user base that’s a bit less comfortable with paying for apps.

The really discouraging thing is that technically, the three platforms couldn’t be farther from each other. Don’t Dial has taught me that getting any meaningful code sharing across all three platforms is difficult if not impossible. I’ve toyed with the idea of building a cross-platform metalanguage that would “compile” down to ObjC or Java code, but doing that is a lot of work, and then you have to abstract all the functionality of the APIs you need.

Someone, somewhere, is doing this, or will be soon, so there’s that too – should I develop my own abstraction, or wait until one gets released? The phonegap guys are making good progress, but they’re all Javascript, which makes sense for web apps, but for games is a harder sell.

Lots of questions, very little answers.

===[ Two New Articles! | April 11th, 2009 ]===

In all the hubbub of Don’t Dial, I completely forgot to mention my articles in two new game programming books!

Design and Content Creation Business and Production

I’ve got one article in each book – “Lone Wolf Killers” is in Business and Production, and “Creating Good Game Art When You’re Not An Artist” is in Content Creation.

I’ve read through both books, and both are worthwhile. Definitely check them out.

===[ Don’t Dial Debuts, and GDC | March 24th, 2009 ]===

Wow, arrived back in town to find a flurry of activity: Don’t Dial has hit the app store! So for the last couple of days most of my time at home has been dedicated to spreading the good word. I always prefer coding over PR because at least with programming you can tell instantly if something works or doesn’t work. Most of the time.

I’m missing the GDC. Every year before the GDC I think “yeah, too expensive” and then during GDC week I get all wistful and weepy about not being there for it. This has been occurring now for several years and is occurring yet again this year. And every year, I say this: maybe next year I’ll go back and say hey to all the gamedev.net guys and we can reminisce about how much better the conference was when it was in San Jose (or maybe not). Those halcyon days of the early ’00s!

And yeah, you can say I’m biased, but here’s truth: when it comes to GDC coverage, gamedev.net has consistently blown every other site completely out of the water. Even gamasutra. The gamedev team works their asses off, and I guess that’s my silver lining – all I have to do is sit in front of a browser and refresh obsessively. :)

===[ The Must Install Freeware Short List | February 1st, 2009 ]===

I got a new toy! It’s a netbook, an MSI Wind U100 specifically bought for its dual-boot capabilities. I’ve got it booting the 2 OSes I use, (as well as the Windows 7 beta, but that’s a whole nother post), but setting up all the partitions was a pain, and I ended up having to install Windows a few times.

So I got really good at installing software, and it also helped me separate the software wheat from the software chaff. Here’s the shortlist, the free software I find useful enough to immediately install on a fresh OS:

  • AVG – always the first install.
  • Firefox and Thunderbird – my Internet Explorer history will only ever contain one entry – getfirefox.com.
  • DropBox – my wife and I share a dropbox because hamachi’s mac support is woefully lacking.
  • CDBurnerXP – tiny and handy for when I have to plug in a USB burner…
  • Deamon Tools – … but most of the time I just mount an ISO on the network.
  • Hamachi – so I can get secure access to the contents of my PC anywhere.
  • Evernote – this has gradually overtaken Onenote for my personal datastore.
  • TweakUI Powertoy – mostly for its autologon feature. The cleartype tuner on that same page is also handy.
  • Digsby – facebook chat aside, the feature this has over trillian is that your settings are stored online, so you don’t have to reconfigure anything, just install, login, and you’re done.
  • DOSBox – cause Impulse Tracker won’t run directly under Windows, but runs under here using an emulated gravis just great.
  • FoxIt Reader – this is the PDF reader that acrobat should be. I think the guys who made Acrobat and the guys who made Vista search should get together and build something that doesn’t matter.
  • Launchy – great little app for launching programs via keyboard.
  • Songbird – I hope they put in iPhone sync soon. Death to iTunes!
  • VNC – another tiny tool that lets me remote desktop in (over hamachi!)
  • VLC – the best movie player out there, if you’re cool with your movie files having traffic cone icons.
  • And no, I didn’t forget about chrome. The abridged chrome rant: a) no plugin support, b) UI sucks (we’ve had minimal UI for years now, hit F11), and c) why suckerpunch mozilla?

    Google chrome is like the Ralph Nader of browsers. Ha, well, that’s a far cry from where this post started, so I’m taking that as a sign I should stop. :)

===[ More Android Morsels | January 11th, 2009 ]===

Finishing off my port now! Once it’s done I’ll do the whole “Android vs. iPhone” breakdown, but for now here’s just a few more gotchyas you may hit:

  • If you want to start an activity, remember that you have to add it to your app’s XML manifest file. Don’t worry, it only takes you a few iterations on “run, get exception, wonder why, remember” until you mind remembers to do this. It’s be great if some Java guy could integrate this into Eclipse so that when you created a new class you could have it automatically insert it.
  • URIs are not strings. To get from a URI to a string, use toString(). To go the other way, use parse().
  • Want to pop up a message box? In Android the class you need is AlertDialog. Here’s some sweet sample code:
    new AlertDialog.Builder(this).setTitle("Title").
    setMessage("Yo").setPositiveButton("OK",
    new DialogInterface.OnClickListener()
    { /* whatever */ } ).show();
    

    I found that code on the anddev forums. Message boxes were tricky to figure out because there used to be a different way to show them that was removed as the SDK matured. Also check out how the click listener method is specified via anonymous delegate.

===[ Hello, Android! | January 5th, 2009 ]===

I’ve started porting my iPhone app to Android/G1 in anticipation of Google’s market for paid apps launching later this quarter (I want to be in on the ground floor!) Java is very C# (actually, that’s incorrect, since most of the awesome stuff in C# was blatantly ripped off from Java, which had it years if not decades before but ANYWAY) – Here’s how I’ve started on Android and how others might want to start:

  1. go to code.google.com/android and go through all 4 steps of the getting started. Pay your $25 and if you can stomach it, plop down another $400 for the Android Dev Phone, which is an unlocked G1 with a cool skin.
  2. Download and integrate into Eclipse a package called CDT – C++ Development Tools. It comes with a DevStudio keyboard configuration that’ll save you some sanity; Eclipse is huge, and the keyboard shortcuts aren’t intuitive. For example, Ctrl+Tab and Ctrl+Shift+Tab don’t cycle between windows (which is what finally led me to find out about CDT).
  3. download DroidDraw, which is the best GUI drawing tool (like Interface Builder or the Design View of C#) that I’ve found. That isn’t saying a lot though, this tool is still young and cantankerous, but at least it gives you a graphical view of the XML files that Android uses for UIs.
  4. This site (www.androidph.com) has lots of code snippets to look at. Also check out AndDev, which has some cool tutorials and a good community going.
  5. Tell me about other things you find! :)
===[ XmlInclude getting ignored | December 14th, 2008 ]===

So, when pointing the XmlSerializer at a document that contains a list of abstract base objects, I came across a fairly standard exception:

System.InvalidOperationException: There was an error generating the XML document. System.InvalidOperationException: The type was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.

But, even after I put in the XmlIncludes, OR when using the serializer constructor overload that takes a list of types, I was still getting the error.

Turns out my problem, strangely, was this line:

[XmlRootAttribute(
  "Document",
  Namespace = "http://www.cuttlefishindustries.com/mycoolnamespace",
  IsNullable = false)]

I didn’t investigate it that much but it appears that if you specify a Namespace, the serializer ignores the additional types you supply (either via XmlInclude or the constructor overload). Once I took out my document’s XML root attribute, my serializer worked. Huh. So, there ya go, hopefully this’ll save someone some time, sometime.

===[ Something is happening! | November 16th, 2008 ]===

I’m working on grand and glorious changes to this site in anticipation of approval of my first iPhone app! Whee!

This post is really just to test something. So yeah not much to see… Yet.