Friday, July 31, 2009

Google Voice

I lucked out and snagged one of the invitations for Google Voice. Everything you've read about it being cool is true. It is simple to enter however many phone numbers you want it to ring through to and the voice mail features are awesome. They are continuing to expand it and will be adding more features and integration going forward. For myself it is also ideal because it allows me to make long distance calls to Canada for a small fraction of what I normally pay, and I can have it ring through to whatever phone I am currently at. I'm normally not overly gushy about things but this one warrants it.

The service runs in the cloud and you access it with a web browser, wherever you are. There is some integration with GMail right now but it is limited. There is also a client side application for smartphones available that makes your use of the service transparent. This means that you can get a phone number that never changes (the Google Voice one) and hook it into whatever phone you want on the other end so you are no longer bound to a carrier to keep your number.

Apple's decision to block the application that allows tighter integration with the service is short-sighted and is causing bad press for them. Once Google closes the gap on a few more things like sending and receiving faxes it is going to be a de facto requirement for any small enterprise.

If you haven't yet got an account to to and request one. You will not be sorry.

The only caveat on this is going to be "how will they make money?" Right now it is free (except for international long distance, which is still very reasonable) but I predict it will move in the same direction as the Google Apps suite, with a limited free edition and a full feature paid version. Stay tuned as they continue to evolve it and competitors try to come up with something better (are you on it yet Microhoo?)

Friday, July 24, 2009

Software Code Re-use

One of the holy grails for software development is to build something that will be used again by somebody else, saving the development time it would take to write it over again. Instead of re-inventing the wheel you get the efficiency of just grabbing a wheel off the shelf and using it. Inside of a small project with a small number of developers (perhaps even just one) this is usually easy to achieve. Once the project grows or there is a different project with similar needs it gets more complicated.

Software is still much of a craft than it is an engineering effort. Developers identify very strongly with their work and often believe that even though there is an existing block of code that basically does what they need that they can do it better. A combination of "not invented here" and a need for a slight change often results in yet another implementation of code to do something with text values, for example.

Sometimes this occurs directly in the face of existing code, out of developer hubris, but often it comes from ignorance of the platform that is being worked on. Chances are very good that a modern framework like Java, PHP or .NET already has defined in their frameworks code that does most of the things that you need. In a worst case you can often use something that is "almost there" and just add the couple of things you need without having to rewrite it all.

Regardless, software re-use is an ongoing are of interest for many organizations, both as producers and consumers.

So far, the best use of "re-use" of code has been with services rather than libraries (above the very basic libraries built into languages). The re-use has been best with things like web servers, database servers, etc. and not necessarily specific blocks of code that make up parts of the services. This is because a service creates a clear boundary. It defines for you up front what it will accept and what it will return or otherwise cause to happen. It is of no importance to the user how the work is accomplished, it is accomplished.

The UNIX ideal of "small and sharp" tools also cleaves to this ideal, whereby small command line utilities that do only one thing but do it very well can be chained together to create useful applications.

In a wider sense this is called a "stack", where different services and glued together to provide an overall environment / platform. For example, the LAMP stack (Linux, Apache, MySQL and PHP) is credited with a large amount of the innovation that occured on the internet because all four components were FOSS and were in use by large groups of developers.

Additionally, if you lived in any one of the components you did not have to worry about any of the others.

A web developer in PHP does not need to know how to program the C code that makes Linux work, nor the low level routines of Apache of MySQL. They can concentrate on building web applications using PHP and just depend upon the other items to work together. The same kind of re-use of code through services is found in many other cases also.

The techgnostic approach to re-use is to stop before you write a large pile of code and determine if what you need already exists. Writing and maintaining code is very expensive. If you can leverage something that already exists and has been used by other and has been tested to be good you can deliver a lot more value much more quickly than rolling your own.

Friday, July 17, 2009

(Not) Getting Things Done

One of the core values of Getting Things Done (GTD) is to capture everything. You use "buckets" such as a pad of paper, a voice recorder, etc. to capture any and all things you need to get done. Ideally you should get by with as FEW buckets as you can, and you have to empty them periodically, ideally daily. Then all the items should be processed, put into appropriate slots for further action.

Some people start into GTD with guns blazing and eventually bail out, abandoning the system entirely as too much trouble and too rigid. Some others (like myself) continue to capture everything, but don't make the time to do the processing and wind up with information scattered hither and yon.

Myself, I have a digital voice recorder, a Palm PDA, my GMail account using a GTD Firefox extension, the GMail task list widget, a collection of Google documents and a couple of scattered OneNote files. I also recently loaded up EverNote to give it a swirl but have thus far put very little into it. Needless to say it is overwhelming when I look at all of them and try to wrap my head around it.

Like an addict of some kind, though, I continue to go through the motions even though I have no idea why I'm doing them. I guess I think I'll suddenly get a bunch of time to plough through and get my collective stuff in order.

I don't normally consider myself an overly hopeful individual but I must be. The MOST important items continue to bubble to the top but what I really need to do is clear the decks and do another reset. Hand-in-hand with that is a need to ruthlessly purge a lot of things that have been hanging around my lists for years now that I am just going to have to accept are not going to happen in my lifetime.

The geeky aspect of all this is that I'm saving up and waiting to get myself an iPod Touch to try and replace a bunch of these items. There are some people who follow GTD who have eschewed the technological approach and go with Hipster PDAs (collections of 3x5 cards with a binder clip).

I wonder what the techgnostic approach to all this should be? Generally it would mean an application of just enough technology to be effective without gold-plating for the purposes of geeky fulfillment or to fit into whatever current rhetoric my technological church of choice dictates. Maybe my technology needs are simpler than I think they are, and my fevered thoughts of creating or finding an XML format to allow for a vendor and platform neutral means to store all my GTD information are insanity?

Hmmm. Now that I start looking around apparently EverNote supports XML import / export. Here's someone else who's obviously put a lot of thought into this also. Plus there are many software packages for this.

The techgnostic thing to do, I think, would be to pick something that is just enough to help me integrate what I have and make it less painful to keep up. Another project to add my my list.


Friday, July 10, 2009

Smart Phones

Ah - a couple weeks of downtime always refreshes.

Lots happened in the last couple of weeks(ish). One was the new iPhone came out. A friend of mine is agonizing over getting one, versus a Blackberry or something else. He believes that government and corporations are all sewn up for Blackberry.

For government - agreed (for now).

Corporate - it's shifting, and shifting rapidly.

With the iPhone OS 3.0 release there is now tighter integration with Exchange servers (really the thing that made corporate folks ga-ga for Blackberry in the first place) plus security items like the ability to remotely wipe a handset.

In many companies that I directly know of the upgrade cycle (starting at the top) is resulting in iPhones instead of Blackberries (execs first, of course). Governments will take longer to make such a change, if they do, and again it will start at the top, with the peons getting the goodies last (naturally).

Me, personally, I do not talk on the phone very much, and if I do it is from a land line. I use a pre-pay phone for the occasional voice call and use a PDA for other functions. When my current PDA (a Palm) dies I'll get an iPod touch (seeing as Palm got out of the PDA business).

If you're going to pay the monthly bill anyways go with the iPhone. Blackberry will probably be what you're provided with by your company.

That said, the market keeps shifting, with the Palm Pre now released and decent UI having been grafted onto Android by HTC.

As always, make a decision based on your own needs and not what the market blares at you.