Sunday, August 31, 2008

Tweets for Today

  • 21:57 What cool or useful apps should I be downloading for my mac? I've grabbed Adium, Google Earth, iPhone SDK and Quicksilver. #
  • 10:29 Trying out plex ( as a media center. Very cool looking, but its taking ages to scan my ipod for music. #
  • 17:24 Seeing what happens when Java and Python fight. #
Automatically shipped by LoudTwitter

Android/App Engine prototyping problems

Almost a year ago, Google unleashed its Android SDK in a preview capacity. One of the pain points I experienced with it was the tedium in creating ContentProviders. Today, I'm feeling the same tedium. A ContentProvider is the sole mechanism for an android application to share information with external packages. ContentProviders can be backed by any kind of data, file, database or live server with custom backend. The popular method is creating a ContentProvider that is backed by a database. Creating such a beast is a time consuming operation and making it with a SQL database is quite contrary to the BigTable based datastore API in Google App Engine (GAE).
In my top secret project, I'm using the HttpClientService api that I've defined in my Missing SVN repository (the top-secret project is indeed different than Missing) to interface with my server. Currently, the client does no caching of data -- all information it needs is pulled at user request, from the interwebs. When testing on my local machine, this is not a problem. I have a fast workstation and there isn't much packet loss or latency on a loopback interface.

Unfortunately, this won't work in the "real world." I'm now at the point where I have to implement a sql-lite backed ContentProvider that tries to model a table-based GAE datastore api. Not only does this mean I have to keep track of two different schema, one for GAE and one for Android, but it means I have to implement the same "get my data" api twice, with a layer of abstraction between the android UI and the ContentProvider I'm resenting having to create.

What I'm considering doing is using something like Google's Protocol Buffers or Facebook's Thrift to define my data model and create stub interfaces for both GAE and Android. This seems like a bit of overkill for the current state of my project but even in the not-yet-ready-to-show-anyone stage of this project I'm having to consider these very-high-time-cost coding excersizes. This is going to consume time when I should be iterating on features and trying to get the app in a state where I can finally start to use it. I think I've proto-typed the android app as far as I can go but I don't want to start spending hordes of time on this when I have several core concepts not-yet-implemented.

I'm also feeling the pain of knowing that the stuff I prototyped at the beginning of the project are going to have to be fully re-written and if I don't provide a more featureful content provider.

One of the ways you can provide an abstracted interface to the ContentProvider is by wrapping it in a Service, which of course requires yet another interface declaration, this one with java primatives and simple classes using the AIDL interface spec provided by Android. I figure I'll have to cross that bridge some day, I'm just glad I don't have to do it right now.

Saturday, August 30, 2008

Mac Mini!

I bought a Mac Mini today. It's the first Apple product that I've purchased aside from an iPod. I've already had it hang on shutdown once, fail to boot once (had to unplug my ipod for some reason) and then I clicked the wrong thing in the monitor panel menu and lost my display until I rebooted a couple of times and learned how to use safe mode. Thanks to Francisco for telling me to buy it, then double thanks for him breaking it too. All from 2500 miles away. Great.

Tweets for Today

  • 20:51 Why do I get headaches whenever I drink? #
  • 15:57 Heading to Dublin again, 9/8-9/25. #
  • 17:46 Just purchased a mac mini #
Automatically shipped by LoudTwitter

Friday, August 29, 2008

Tweets for Today

  • 21:16 @ohiophyle good to know, I'll be applying to Berkeley soon. #
  • 21:50 catching up with friends... #
  • 16:54 Used a luch tray as a sled and burned myself going down the slide. #
  • 17:25 Learning how to solve the rubix cube from THE world rubix cube solver. #
  • 17:26 #
Automatically shipped by LoudTwitter

Thursday, August 28, 2008

Google Ajax Search

You see that search box in the upper right? I bet you never use it. I use it all the time though. I think its amazing. I'm glad I added it. It helps me find things I've written about before. Its like my own little search engine, just for me.

Sunday, August 24, 2008

Tweets for Today

  • 14:02 At "Bean There," getting things done! #
  • 17:11 Getting distracted with finances instead of doing project work... Back to work Joe! #
Automatically shipped by LoudTwitter

Trying it out now. It has already suggested I open a savings accoutnt with a good interest rate -- Which I've now done. So far so good Mint! Keep it up!

Update: It supports every financial institution I have to deal with!
Update: It doesn't seem to be finding my older (more than 30 days) transactions with my banks. :(

Don't get distracted!

One of the things I've learned from starting my last few projects is that if you get distracted by project infrastructure you get distracted from what made you excited about the project in the first place.

An example would be a project Kevin and I tried starting a few months back -- an everyblock-like appliance that could sit on your mantle and passively provide you intersting information about your neighborhood. After several hours spent setting up an SVN repository, the correct mailing lists, researching frameworks and languages we were tired; not because of the amount of work involved, rather it was because we had grown weary of the boringness of the project.

Even though we hadn't written a single line of code for the project the energy we expended on the infrastructure was the exact energy we should have used to sketch out a more serious design, start prototyping and collaborating. Instead of getting more interested in our project we instead grew tired of it and like so many other projects, it died.

There are a few things you can do to mitigate this problem.

  1. Spend some time *now*, before you have a project, researching project resources. Things like SVN repositories, mailing lists and web sites are easy to get going but suck up the most valuable moments of your project's birth.
  2. Your initial decisions are both temporary and perminent. Think of it this way: You may decide to change from django, to ruby-on-rails, to C# but the design vs feature tradeoffs you think of with any of them will probably have lasting impact on your future design decisions.
  3. Make sure you work on the project you were excited about, not some deriviative of it that you think you need to get working on the real project.

Saturday, August 23, 2008

Tweets for Today

  • 15:51 Seeing Lupe Fiasco at Outlands. #
  • 17:50 Ben Harper? #
  • 18:44 Primus #
  • 19:22 Cake #
  • 21:58 Tom Petty #
Automatically shipped by LoudTwitter

Friday, August 22, 2008

Tweets for Today

  • 19:03 Board game night tonight! Jgib is the traitor!! #
  • 22:39 Just died fighting the dragon! 36 vs 36! Damn it shadows! #
Automatically shipped by LoudTwitter

Game Night!

Wow!! Tonight, Abbey, John, Kevin, Craig and Jen hung out at my place and we played both Shadows over Camelot and Bang! I think in the nearly two years I've been in SF. We've had only one other board-game like day and I am happy to say that it seems like the participants enjoyed themselves. This might very well mean there will in fact be another game night and more chances for jgib to be the traitor!

Highlights: We were down and out making little progress in defeating the Shadows when out of nowhere John took out the Black Knight and won Lancelot's armor. We were progressing well against the dragon when we threw down our third triple and revealed. Since Kevin and I were both at 1 health, it was game over for us even though we tied. Dead. We were dead. How did that happen? Someone played an 11 face down -- Who was it? John . . . Yep . . . It was at that point John accused Craig of being the traitor, drew and played the "Play the next three black cards" card and took the group to 6 black swords. This was when we already had 10 siege engines. Damnit!

Thursday, August 21, 2008

Wednesday, August 20, 2008

I'm back... San Francisco, Gen Con and more.

Wow, I've been on the road, almost all summer and am finally back in San Francisco. I would have to say that my travel bug is back -- Expect to hear from me on the road more frequently than I've been, during the past year. I believe I will be travelling to Chicago, Dublin, Sydney and Toronto in the next couple of months and I will hopefully track that travel a bit better than I did most of this summer's escapades.

It feels good to be back in San Francisco -- after almost two years of living here, it finally feels like home. I was even a bit homesick by the time I hit my last week in Dublin but by the time I left Chicago for San Francisco, I was thinking "Where do I go next." I guess homesickness is fleeting.

Gencon -- Wow! I had such a great time seeing my gaming friends. Even through we didn't play all the games we hoped we would, I still had a great time. Next year though we better execute better. Less standing around, more doing things. Less shopping, more doing things. Less stress, more doing things!

Sunday, August 10, 2008

Switching day and night.

I still feel like people should be asleep right now because I am awake. I'm not used to this whole CST thing. . . IST is the way to go. (I did have to look the abbreviation up though.) It is Eleven PM and I am appropriately getting tired. Jet Lag has nothing on me.

If it wasn't clear -- I am in Chicago(land) now. Two days till Gen Con and by then I'll be seeing a few people I haven't seen in at least a year.

Tweets for Today

  • 03:49 London -> Chicago . . . Gen Con in a few days! #
  • 06:39 Upgraded to business class... Yea! Never had that happen before. #
  • 15:32 In chicago #
Automatically shipped by LoudTwitter