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.

Doh!

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.

Friday, June 12, 2009

Free software equivalents

One of the blogs that I follow, The Simple Dollar, recently had a post about software best-sellers and their "free" equivalents. I read through the list and found some programs that I use on a regular basis.

In some cases the word "free" can mean one of two things, or both. There is "free" as in speech and "free" as in beer.

The first free would be more descriptive if you used the French word Liberté (as in Liberté, égalité, fraternité - Freedom, Equality, Brotherhood) or liberty, meaning the freedom to do as you will with the software. This is generally viewed to mean see how it works and adapt it to your own purposes. Another term for this is "open source", meaning that the code that is used to build the software is "open" and there for all to see.

The second free is the more common sense of the word, as in "without charge". You can use the software and not have to pay anyone for the right to do so. This is the part that most people are interested in. Unless you are a computer programmer the ability to see the code that built the program is not important to you.

Interestingly you can have software that is free as in no charge, but you cannot see the code (i.e., proprietary free programs) such as Internet Explorer (although whether that is truly free in that it only runs on MS Windows is another debate). You can also have code that a company maintains intellectual property rights over and charges for, but you can also see the source code, should you be so inclined (not as common). The free software that most often gets the headlines is free in both senses, often referred to as FOSS or F/OSS software (Free Open Source Software).

As usual there are two sides to every story. There are some people who say, essentially, that free software is only free if your time is not worth anything. If you have free software that you have to build and support by yourself maybe paying a few dollars for a pieced of software is not all that bad an idea. That said a lot of popular FOSS software like Firefox is available already built and is very easy to use.

Like most things to do with technology and software in particular there is not a clear cut black and white answer to any question to do with free software.

Of the software packages listed I have used the following:
  • OpenOffice - Early versions of this very extremely slow, but it has gotten much better. Their stated target was to be equivalent to MS Office 97 (not a bad target, in my opinion, as that was somewhat the zenith for that package before it shot off into bloatware)
  • ZoneAlarm - Nice firewall program, but they push hard to move you to the paid version
  • AVG Free - Good anti-virus software, but again they push you to use the paid version, going so far as to present "warnings" about needing to upgrade to the paid version that are not true.
  • Audacity - Good audio program with lots of community support. For most people this will fill their audio needs.
  • Google Maps - Cool mapping application
  • Ubuntu Linux - This is my desktop OS at home, in addition to a laptop running Windows XP Pro, plus my wife's Mac. I spend most of my time in Ubuntu, switching over to the Windows machine for very specific things that I do not have under Ubuntu (mainly other MS products like Office or Visual Studio)
In addition to QuickBooks Simple Start Free Edition 2009 there is another FOSS program called GnuCash that does well for book-keeping.

The thing to keep in mind when you look for software is that generally there are lots of people who want to do what you're doing or trying to do. Lots of people have to do the same thing you're trying to do and some of them know how to program. Over time software gets written to satisfy these needs. Some of it is commercialized and some people make simple knock-offs of it. Depending upon you comfort with computers you can get by with all kinds of free software. If you're not as comfortable with software you can purchase software that has commercial support and is perhaps more popular, increasing the number of people who can help you with it.

The techgnostic thing to do is to get a trial of the commercial software as well as copies of a couple different free alternatives. Give them all a try and go with the one that best balances off the satisfaction of your needs with the demands it makes on your resources, be they time or money. In the end you will probably wind up with a mix like me, and save a lot of money by not having to buy programs that have a thousand features when you only need two every now and again.

Do you have any favorite FOSS programs? How about proprietary programs that there are no alternatives for that you depend on?

Friday, June 5, 2009

PDA Migration

Long ago my life started to get complicated enough that I started having to keep track of things on paper because my brain wasn't going to hold enough information anymore. I started with a simple paper organizer and then moved on to more involved ones as time went on like the Franklin.

In the early 1990's I purchased a Sharp Zaurus. Being a computer-guy it seemed appropriate for me to keep my data in an electronic format. I had to pay extra to get a serial cable interface so I could back up my data. It ran on AAA batteries and was super cool (to me, at least).

My the mid-late 90's, though still working, the Zaurus was getting passe so I moved onto a Palm Pilot. Again this was super cool. The device was designed for synchronization so it was very handy to move data to and fro, plus there was a programming kit so I could dabble with software for it.

This was followed by another Palm, then by a Sony Palm incarnation called the Clie (very nice). For a brief time I had a Palm VII, one of the first wireless PDAs. The data plan was way too expensive (data was charged by BYTE transferred). The latest (and probably last) Palm I got was the Zire, the low cost color version of the venerable Palm PDA. This mainly was my calendar, contact list and password storage device.

For a while, I had a laptop and largely used it for my information management needs. Then it died and I could not justify buying another one in light of my other responsibilities.

My work in the past has provided me with Blackberry or Windows Mobile devices. In all cases I have used them but never trust much to them, largely because they were provided by my employer and I keep my personal and professional items separate.

Now, my Zire is starting to fail. The digitizer is hit or miss and the screen is starting to go. Once a week or so I have to do a hard reset to make it go. Palm now no longer makes PDAs so I find myself at a crossroads. I want a small electronic device for handling my personal information, but the market only seems to be producing phones to do this, and I don't want a monthly bill.

I believe that now I want an iPod Touch. I had three other MP3 players before I got my iPod Nano a couple of years ago and I have to say hands down that the iPod is the superior experience. As a computer guy I was able to figure out my other devices but the iPod was just that much better. The iPod Touch is much larger and seems better suited to handling my needs for information management. There are a couple of sticking points.

One is price. At over two hundred dollars (as of this writing) it is not something that I can trivially purchase. It starts to get me into the neighborhood of buying a netbook instead. Admittedly the netbook would not have the portability of the iPod Touch, but it would have other strengths (like a keyboard) to make up for it.

Another is software. I have Palm OS software that I've used for years that will no longer be usable. I have to take that into account also.

For now I will limp the Zire along and see what Apple comes up with on Monday at the WWDC and go from there.

It's been interesting watching the rise and fall of each of the form factors and companies. From Sharp (still around but out of the PDA business) to Palm (with a history of mis-steps and frittering away their huge lead) to Apple (whose Newton venture paved the way for more functional PDAs). It will be interesting to see where things progress to. There are rumors that Apple will expand the iPod Touch into a small tablet and effectively re-launch the Newton. I'll be paying close attention.