So, I'm trying to hone my developer skills by learning new technologies, best practices and so on, but there is only so much that you can learn from simply reading about things, especially in a field such as development. Therefore I shall have to put what I am learning about into practice and that requires a project (or projects) where I can use the tools and techniques. Obviously there are things that I could do at work, but I am locked in to using the company standards for development there which means I can't suddenly start working on an MVC based web site, use NHiberate for my data access etc. So I need a project that I can work on in my spare time at home, and that requires having a good idea.
Without a clear goal anything that I work on will be disjointed examples focussed on nothing but the topic I am learning. To gain a true understanding of all this stuff, I want to be able to use a variety of new techniques together, working towards a proper, real-life application. As this work is going to happen during my free time I also feel that having an interesting goal will aid with motivation as this is the time when I could be playing games or watching tv or spending time with my family or playing my guitars, or recording some music or writing a song... Ohhhh, maybe I've just hit upon an idea.
I've been playing guitar for many many years now. I enjoy coming up with my own tunes and I have a whole bunch of high quality recording gear. Unfortunately I find that whenever I sit down to write a song it ends up sounding like the sort of overly-sentimental, rubbish ballads that tend to make up most of your average Bon Jovi album once you remove the tracks that are released as singles. However, from time to time I get the odd flash of inspiration, just a couple of lines that work really well. My plan is to build an app that will allow me to store these little snippets and add a few tags to them consisting of the genre of music that I think they fit, the concept behind them, and general keywords. As the collection of lyrics builds up I could then search them based on these tags, such as find all my ballady lines when I want to write something for my girlfriend, or everything about how angry I am with the world if I tap in to the angst of my inner teenager. This may not write a song for me automatically, but it should help to provide a very good starting point.
If I create this as a web-based application it means that I can access it from wherever as inspiration strikes. As I tend to use macs at home it means that I don't need to boot into Windows, I can add things from my iPhone whilst out and about, or if something annoys me at work releasing the aforementioned inner-angsty-teenager I can save it there and then. Opening the app up to the web also adds the ability to let others use it, both random strangers and friends of mine. With musically inclined friends using the same service it makes sense that adding some collaboration features might be handy too, allowing members of a band to share ideas easily. It's hardly going to be facebook or anything, but this will add a few social networking like features to the site.
Further down the line I could extend the functionality to include saving short recordings to catalogue in addition to the lyrics. This might work better in a more traditional windows based application that could communicate with the website as a service and if I get really enthusiastic about it, I may even try to create a simple multitrack recording environment capable of hosting VST plugins to record these with, but that is a long way off and certainly out of scope for anything I am doing now.
So, that's the big idea. A multi-user database-centric website with scope for future rich client enhancements. Off the top of my head I can see how I can use the MVC framework for the site, NHibernate for my data access and OpenID for my user authentication. One of the reasons for MVC's popularity is that it allows for automated testing more easily than webforms, so NUnit could slot in to that role. Unit testing and dependancy injection go hand in hand, so this may also open up the way for using the Castle Windsor IoC container. If I do decide to build a rich client interface in the future with recording capabilities I could easily add WPF and WCF to the list of technologies in play too.
That seems like an almost overwhelming bunch of new tools and techs to get my head around so I'm going to have to take it all one step at a time. The first step involves yet another new tool that I haven't yet mentioned. In my different jobs all my source control has been via MS SourceSafe, but for my home development, due to the combination of open source licensing and its good reputation compares to SourceSafe I shall be setting up Subversion.
No comments:
Post a Comment