Monday, September 12, 2005

Design First, Code Later?

So now that I covered WHY I am writing the PhotoLion application it is time for a post about HOW I plan on writing the application.

The first I did was NOT TO START WRITING the application. I started taking some notes (mental and also in OneNote) on how I would want it to work. I am still up in the air about the interface for the main host application.

You may notice I said "host application", that is because during my design I determmined I would write it using an extensible plugin style. I want it this way so that I can write the inital application and a main plugin or two and get to using it. Then as I find more time I can add more functionality in new plugins, and can distribute them easily.

I came to the decision to use plugins due to several factors:
  • I wanted to get the inital parts done as I really need the application written so I can use it to get my pictures organized
  • I have several things I want it to do and they may not always be done on each picture so really needed flexibility
  • I know that I don't know everything, so I wanted to be able to add new functionality at a later point
  • I wanted to extend my skillset and learn new programming techniques and plugin arcitechure like this is something I have not done before

I have written COM components and such, as well as ActiveX controls, so this is not something completely unknown to me. I also implemented a Plugin for RSSBandit to handle podcasts, when I first got interested in Podcasts, but dropped work on that because :

  1. I found Doppler, and quickly donated some money for it even though it is free because it is a great application.
  2. RSSBandit is going to implement support for enclosures inside the application.

So after deciding on the fact I wanted it to be plugin based it was an easy decisiong to write it in .NET (which language is still up in the air). I used VB.net for the PodcastLion Plugin for RSSBandit although I had to convert the plugin's interface file from C# to VB.net so I could understand it as I am a VB programmer, and that was my first foray into .NET

Now that I have been doing some more .NET development at my current position I am getting more comfortable using .NET and really can use both C# and VB.NET equally (of course that is still not at the same lavel as I can do coding in VB6) so I am still unsure what language I plan on using. I am leaning towards C# for the Plugin Interface, so that I can use the XML Commenting support in C# (next version of VB.NET will support this better from what I have read) and then probably use VB.NET for the interface part of the application.

Since the general design is pretty set and coding environment is decided on, I am getting close to be able to start writing some code. I am planning on this processing beingiterative and having to do more design after I get into the coding and find any design points and issues I missed initially or went the wrong direction.

Application Background

How and why did I decide to write yet another photo application when there are so many out there that are available to manage digital pictures?

That's a question I think should be answered, and hope to do that in this post.

From my many Disney trips I have tons of photos, and really need to organize them. I also like to make a "digital negative" copy of them. I also WOULD like to crop, resize and post them to my site (this I don't do as much as I want to as it is a hassle since I have not found anything that works the way I want to do this easily).

I have tried many different pieces of software out there that do different parts of this but none that really do them all the way I want.

Being a programmer, I thought maybe I should just write an application to work the way I want it to.

So that's pretty much the background to why I am writing this application.