Monthly Archive for August, 2008

Refresh on GMail for iPhone

After a couple weeks of reloading the whole GMail app to check for new messages, I found a better way. It always seemed silly to have to do it, but there isn't a refresh button like on the desktop interface. Like so many things with Google products, all it takes is stepping back from what you expect based on other apps and just doing what seems rational. It often just works.

So how do you do it?

Just tap the page label. The one with the message count. It updates, and reloads the massage list if needed.

My New Blog

I just created another blog for myself.  Why have only one, when I could just as easily have two?  I've always tried to keep things generally technical on here, knowing that most of my readers are here for the technical content.  The new blog is a complete departure.

A few years ago, I started building an app that would allow me to take pictures with my cell phone and email them to my blog for automatic posting.  But the problem ended up being fraught with complexity, and just wasn't much fun at all.  So I bailed.  But now with my iPhone and the WordPress app, putting phone pictures on a blog is a snap.  I'll probably end up posting actual content at some point, but for now, it's just a photostream.  We'll see how it goes.

This was also a good test for the WordPress management framework I've built.  I host a number of blogs on my server, and because of the way WordPress works, you have to have a separate copy of the code for each blog.  While that itself is not really an issue, managing the separate copies is.  Enter Ant and Rsync.  My Subversion repository for the blogs houses a set of config files, a single copy of WordPress, and a collection of custom themes.  I use Ant to convert that into a set of complete installations, with the right themes going into the right installations, and configuring each one as needed (databases, urls, etc.).  Then Rsync is used to copy all that crap out.  Since most of the time little has changed, rsync really cuts down on the transfter time and bandwidth.  Adding a new blog was as simple as dropping a new config file, registering the blog, creating the database, and running the Ant/deploy pair of commands.

The process could definitely be smoother, but for a use case that wasn't even on the table when it was built, it handled it admirably.  Since I don't forsee creating a lot of new blogs, I don't think I'll be enhancing the functionality to accomodate that use case any better, but it made me happy that it was easily scalable in an unforseen way.

Hibernate for CF (and a new TransactionAdvice)

Since I added Hibernate support to CF Groovy, I've been using that for pretty much all new development.  Oh, how nice it is.  The perm-gen issue is still lingering, but if after a few projects, I've realized that you don't actually end up touching your persistent entities that much, so it's not as big a deal as it seemed it would be.  Most of the work on those is done up front, laying out properties, relationships, and various helper methods and psuedo-properties.

Yes, my apps suffer from what Fowler has dubbed an "anemic business model", but I don't have great issue with that.  It's a concious design decision, not an anti-pattern that has cropped up without my knowing.  It's specifically driven by the non-CFML nature of the persistent entities, and as such they're not really full-fledged business objects.  Instead, they're more just value objects (or data transfer objects) both inside the app and between the app and the database.  I'm also a big fan of simple, and while I'm definitely not following the all powerful "best practices", I tend to weight simple as a higher priority than a lot of people.

I've also seen a signficant shift of Groovy code from the service layer up to the web layer, which is something I wasn't expecting.  My initial thoughts were that the web layer would stay almost entirely CFML, and the Groovy would be used for the backend code and interfacing with Hibernate.  The views are still all CFML, but my controllers are growing Groovy snippets all over the place, while the service layer is mostly just interfacing with CFML APIs from the Hibernate plugin, actually using Groovy for very little.

One little piece that I have't posted yet is a "port" of my TransactionAdvice CFC for use with the Hibernate functionality of CF Groovy.  The logic is exactly the same as the original, just no ability to set an isolation, and it requires a reference to the Hibernate plugin instance.  Download here: HibernateTransactionAdvice_b4173.zip.

Cadence Retracts Offer

Cadence has retracted it's offer to buy Mentor Graphics.  Good news for the company, and hopefully good news for me too.  The chaos should definitely decrease now that the "threat" has passed, but it'll take some time to get back to normal, I suspect.

The State of the Barney

Time for another "State of the Barney" post. They're usually a January staple, but oh well.

The past few weeks (since the end of June, really) have carried significant unwanted stress because of the takeover bid for Mentor Graphics by our largest competitor. The odds of the deal actually going through are pretty slim, I think, but the whole corporation is a little jumpy. I'm also definitely in the "redundant" class of employees, so I'd very likely be gone after a token severance package, if that.

Because of the potential purchase, work has been a series of short-term "make the team seem really valuable" kind of projects. The projects themselves aren't really that bad, they're just focused on the wrong results. Frustrating for me, though, as a developer that just wants to build some cool, interesting, and useful apps.

Life at home has shared the tumultuous nature of the office since Heather's return from England on 4th of July weekend.  That's not really a topic for a blog post, however, beyond saying my lack of energy is not due to poor eating and sleeping habits.

Emery just turned three on Tuesday, and Lindsay will be five this winter.  They both head off to preschool in a couple weeks, Emery for the first time.  He's still got some Mommy issues that Lindsay never really had, so we'll see how it goes.  He really wants to go though, so any problems will almost certainly be short-lived.  The toll of the past month and a half has been

My physical activity has also taken a severe downturn.  I haven't done anything active aside from walk up and down the few flights of stairs at my office a handful of times per day. I want to get on my bike again, but it's hard to find time.  I haven't even been riding my motorcycle much of late.  I'm still far from overweight, but I'm definitely carrying more fat now than I ever have before, and it's not attributable to me getting older.

On the up side, I finally got an iPhone and it's largely lived up to expectations. Typing isn't so hot (expected) and performance leaves something to be desired (also expected - it's a Mac), but having instant access to the 'net is very nice. I've made a couple minor tweaks to some of my personal web apps, but nothing major. Biggest gripe on that front is the handling of HTTP Basic Auth, specifically the incredibly short expiration time applied to cached credentials.

Pic of the Day is a few weeks short of it's fourth anniversary and still going strong. Subscribers are continuing to come in organically, despite no marketing beyond a small text link on my sidebar to get it into Google.  That has been a very fun project to watch grow over the years - if only I could list it on my résumé.  I think I'm going to do a public "launch" at some point, but we'll see.  It's an incredibly fascinating project, though the nature of the managed assets carries an unsavory stigma to many.  Most of the interesting stuff I've done over the past few years has been centered around this app, though, not stuff I get paid to work on.

Hopefully life will improve, at least in some ways, but for now the shining points are sparse.  C'est la vie.

iPhone Coding

Yesterday I did my first bit of "real" coding on my iPhone. It actually worked pretty well, I thought, though having to switch keyboards for punctuation is definitely a drag.

I've been using MobileTerminal as my terminal client and it's pretty slick. Not a replacement for a real computer, but definitely sufficient for a quick little code tweak here and there, or some database tuning.