Friday, 29 April 2011

Thoughts on open-source development methods (and congratulations to Ubuntu)

First of all I want to say congratulations and thank you to all of the people at Canonical and in the Ubuntu community for all of their hard work in getting out the latest release of the Ubuntu Linux distribution.  Despite all of the criticism the distribution comes under from time-to-time these people strive hard to put out a new version every 6 months.

When you think about their achievement you soon come to realise it's no small feat that they have pulled off, bringing together the best-of-breed free and open-source applications into an easy to install and use distribution readily available to the entire world for free.  It becomes even more amazing when you consider that the people working on the projects are spread all over the world, even the teams working on a single feature might be spread across multiple countries perhaps only meeting in person a few times a year.  The same is true of many free and open-source projects where there may be hundreds, if not thousands, of contributors to a single project spread around the globe.  And yet the projects comes together and produce incredible results, such as the Linux kernel itself which powers so many of the devices and much of the infrastructure we use each day without realising, the chances are that you have at least one gadget in your house powered by the Linux kernel.

The main reason I find all of this amazing and why I felt compelled to blog about it is because, following the very recent release of Ubuntu 11.04 (Natty Narwhal), is because of this geographic spread of developers, document writers, testers, packagers etc... and my own experiences of working in teams within a corporate environment.  I have worked in a number of places now where people have found it difficult (if not impossible) to work with people who are not sat immediately within the same vicinity as them.  Where projects have been delayed and delivered late because people have had difficulties in working across time zones, and in a few instances where people have been in different offices in the same building.  So I suppose I'm curious as to why people working with free software all over the globe can meet these 6 monthly deadlines with amazing frequency and yet companies with money to throw at the same or similar problem have so much trouble!

I have seen a few problems in corporate environments which are often quickly overcome by open-source companies and communities, but I'm sure that these are not the only problems.

The first is often something as simple as choice of version control system.  Whereas the recent adoption of distributed systems such as Git and Bazaar in the open-source world has allowed people to work within a project more efficiently companies I have worked in seem to stick to and prefer the older check-out, check-in systems such as SourceSafe.  This type of system, although easier to understand by inexperienced developers, is often slower and imposes bottle necks on development process, whereas using a distributed system allows users to work remotely without requiring constant access to a centralised server meaning that the developer only requires access to main branch when retrieving a revision and finally merging changes.

A second problem I've often seen is one of communication.  Often in corporate environments communications in teams is limited to office chat, email or meetings, the problem here is that chat often excludes a large number of the team, email is limited to the people on the To and CC list and meetings are more often restricted to a single geographical location.  These factors typically lead to large numbers of team members becoming excluded from conversations and vital information, some companies try to limit this by creating procedures for disseminating information but these are not always followed (lets be honest, most of us despise more procedure!).  In open-source conversations take place in the open, normally using social systems such as blogs, microblogging, mailing lists, wikis and internet chat, other systems such as mumble are also being adopted for having open meetings over the internet where anyone can join in.  Typically a project will let contributors know which are the preferred methods for keeping up to date with project information and developments and which channels are preferred for informal chats.

Whilst I do not think that open-source development methods are perfect, I do believe that there is a lot companies can learn from them if they are willing to break away from traditional models.  Perhaps if they do then maybe they to can hit deadlines repeatedly and successfully in the same way many open source projects do.

Thursday, 24 March 2011

Catching Up #1

Well it's been a fun couple of weeks so I thought I'd quickly jot down what's been happening here and what I've been getting up to.

Last week I started working on the kitchen, well I really started the week before but that was only a small amount of preparation.  Last week the gloves came off and we managed to get most of the kitchen out, walls and all.  Currently we still have a sink and the free-standing gas oven left in but that's it, so we're mostly living out of the back room and plastic boxes.  Tyler thinks it's great as all the fun toys like the measuring jugs which were behind locked doors are now in reach.  He's actually been a very good boy whilst we've been decorating and unusually for him has been happy to sit and watch!

There have been a few fun moments such as blowing the upstairs lighting circuit fuse after we found out that the previous occupants had wired in a 13 amp socket to it!  Cables barely below the surface of the walls, plaster falling off with the wallpaper and we even found the old door from the front room to the kitchen which hadn't been covered up properly.  That's all sorted now and the plasterers have done a good job in levelling out the two problem walls.  So now all we need to do is:

  • Fit the new units on one side
  • Get rid of the sink unit on the other side and install the new units there
  • Replace the boxing
  • Buy and fit new appliances
  • Replace the lighting
  • Decorate

Sounds like a lot but now the room is looking better as a shell it seems doable.

When I've had a few moments and not been reading (love my Kindle by the way, post coming soon) I've been trying out the Vala (and here) programming language.  It's syntax is very close to C# but instead of compiling to assembler or another intermediate language it compiles to C and is then compiled with the platforms standard C compiler, so you get the bonus of not having to worry so much about memory management and benefit from a more modern programming syntax but you also get the performance benefits of a natively compiled C application.

Hopefully when I've spent a bit more time with it I'll be able to do another post about it.  In the mean time if you want to see what it's capable of I'd strongly recommend checking out applications like Shotwell which is a photo manager for Gnome which is written in Vala.  It's very cool and is coming on very quickly.

Other than that it's been pretty much the same, but I'm hoping to try and post a bit more frequently here so keep checking back to see what else is going on.  Alternatively subscribe to the feed and keep up to date from the comfort of your favourite news aggregator, personally I'm a fan of Google Reader but that's because it fits nicely with my Android phone.

Tuesday, 8 March 2011

Staying in the game

One of my biggest concerns as a developer (and I have quite a few) is being able to stay relevant.  This doesn't necessarily mean making myself the only go-to-guy for a project or getting upset when I'm not invited to meetings but staying relevant as an experienced developer.

So to stay relevant what do I need to do?

Well the first thing is to keep my existing skill-set up-to-date, calling myself a .NET developer is all well and good but if I only know about version 1.1 and not 2, 3, 3.5 and 4 then how useful am I and how am I able to help influence technical direction if I don't know about what's new!

Next is a harsh one, but necessary.  Know when to move on from an existing skill.  I know we all feel comfortable with what we know but if you're a C++ programmer and there are no C++ based programmes left to maintain or write then should you spend as much - if any - time investing in those skills.  I'm not saying forget about them, and from time-to-time it's nice to come back and brush up a little but sticking with it as a core skill means you'll be slowly phased out like the programmes you maintain.

Try to keep up-to-date with new theories and practices.  Some times people do re-invent the wheel and sometimes it's a good thing, maybe it's a new design pattern or a new way of looking at threading; but knowing about these can help make you a better programmer.

Keep your eye on the horizon.  Sounds a little managerial I know but looking at what's coming up is really useful as it will help to figure out where you should be spending your time.  Maybe looking at a new language instead of an entrenched one will help with a new product or problem that you know is coming up, or maybe it might just be more fun.

Enjoy what you do.  Sounds obvious but you go to work every day and churn out code without really enjoying it you wont have the motivation to spend the time learning new things and before you know it you're out of touch and out of date.  This can be a tricky one though, if the project you're on isn't that interesting then how can you stay enthused about it?  Well look for little things around the project you can do in your spare time to make it more interesting, such as writing a little app to make a repetative task more efficient.  Contribute to an open-source project you like or just write a little app for yourself, some of the best applications have been written to scratch your own itch.

The last thing is a tricky one for some people but here goes.  You DO NOT know it all, you might have at some point but things move on, and quickly so you will need to as well.  But there are people at the other end of this scale and to those people I say you DO know something, there is no such thing as a perpetual noob, every day you learn something you're more experienced than the day before.  Look at it this way as well, even people who write programming languages don't know every little aspect of it as other people contribute ideas and write libraries and frameworks and they don't know how all of them work!

Monday, 18 October 2010

The advantage of not being connected

There are normally a few articles published each week on version control, an odd "How-To" guide, a tale of how a version control system saved someone numerous hours worth of work or the odd rant.  Over the last few weeks however there seems to be a little more background noise when it comes to version control, more grumblings on the internet and a lot more where I work.

With my current employer we have numerous projects being worked on by teams internationally, but we don't seem to have any real consensus on which tool set to use.  This is fine for some of the work as we have client apps and web apps written in Java/.Net/C++, but a common version control system would be nice.  I've so far worked on applications where the code has been commited to CVS, SourceSafe and Subversion repositories, we also have Team Foundation Server (TFS) and a couple of others which I rarely remember around somewhere as well.  I know the people working on CVS complain that it's slow, SourceSafe users complain that it's ancient and unfit for purpose, the TFS guys complain that the system is unusable and the Subversion people actually tend to be quite happy.

There was one occasion however where non of them were happy and that was the day a virus hit the servers.  The infection itself wasn't that serious but the downtime was crippling while the network monkeys checked the servers and slowly bought them all back online.  Most people were able to continue working for a short while until they needed to check bits out or check them back in.  So I got a few odd looks when I was sat at my desk working away on some code, performing regular commits and relatively oblivious to the world around me.

As it happened I was in a lucky situation, first of all I was working on a new piece of code so had little reliance on others and secondly a few weeks earlier I had added another version control system into my tool set.  I had installed Bazaar and had worked it into my processes so that when I started a new piece of work I would use a local Bazaar repository, I would push this up onto a remote location every few commits and then when I was ready for everyone else to get their hands on it I would export it to a new location and commit it to the standard (which ever one it was that day) version control repository.

A number of times since it has proven invaluable to have a local repository, for instance I have a folder where I keep all my snippets and tests, these are all version controlled using Bazaar and again I push them to a remote location every once in a while.  Sometimes I will remove folders and files just to keep it tidy and relevant but on the odd occasion I will need to go back in time to some folder where I had worked on something which I would be in need of again.  If I've deleted it then I can restore it, get the information I need and if I feel the need delete it again.

Not having to rely on a central repository has been a life-saver on numerous occasions, a few people have also gotten wind of what I'm doing and are investigating switching newer projects over to a distributed version control system to avoid the kind of downtime I mentioned earlier.  Naturally there are a few doubters, some of whom still aren't convinced by version control itself, but they're the ones who'll be losing their hear quicker when it all goes wrong.

Saturday, 16 October 2010

Belated Birthday Wishes C++

So 25 years ago, on October 14th 1985, a little known programming language called C++ was released to the world.  Since then it has been the cause of many arguments, mostly around complexity, efficiency and the differences between procedural and object-orientated languages.  Say what you will but for a language to still be in as much use as it is now (and currently at number 3 in the tiobe index) is for me at least incredible.  Admittedly the fact that 'C' is still in wide spread use since it's first appearance back in 1972 is simply astounding but I don't think that should detract from the C++ success.

So when C++ was released commercially I was 5 years old, playing with friends with much fewer cares in the world.  I might have been aware of computers but possibly didn't care as much, I do remember that doors opening by themselves was kind of amazing still!  And here 25 years later I'm using a programming language which is almost as old as I am day in and day out to earn my living.  Sure it may not be as pretty as some languages, or as expressive, you have to consider memory and resources and doing some basic stuff like sending data over the internet is a lot harder work, but I quite like it.  It's a challenge and in these days of automatic garbage collection considering memory and resources is quite refreshing and it makes you consider how wasteful some modern languages and frameworks are.

So happy 25th birthday C++, here's looking forward to the next 25.

Wednesday, 8 September 2010

Living online

I have a blog, that at least is self evident.  I'm on twitter (rarely), I have an account on identi.ca (used most of the time), I spend time on Facebook, I have Google Reader account pulling in about 40 news feeds.  My phone is hooked up to most of these accounts so I can access information on the go (it even pulls up the weather and some stock prices when my alarm goes off so I can see what the day holds).  I write documents online using Google Docs, my email is provided by Google as is my calendar.  I have a paid for Ubuntu One account where most of my photos and all of my important documents are stored, and I'm thinking of paying for more space with Picasa so I can put more photos up there as well.  Oh, and my bookmarks are automatically synced between all my devices via my browser.

Writing it all out like that it suddenly becomes very clear how much I rely on the internet and good internet access.  I could have a cheaper home ADSL account but I pay a little more for cable so I can get the speed; but that's important to me as having "up to" 4Mb is useless, I don't want to leave my laptop on all weekend so I can upload the photos that I've taken during the week to my on-line storage account.  Likewise I want the download speed so that my other devices can pull down new files quicker.

Put simply, my entire life is in the hands of corporations with my data stored on their anonymous servers distributed across the world.  I'm not really going anywhere with this train of thought, I'm not one who thinks that all these services should be open - realistically no individual is going to have the resources to match something like Amazons Cloud Services - and I'm not scaremongering you into thinking that these faceless corporations are out to own us all, all though I'm sure one-or-two of them are.  Rather I'm looking at this situation in astonishment.

When I first got on-line the biggest problem I had was how to carry around 20 floppy discs safely in my bag without bending or breaking them.  The future then was how we would have devices so we could carry our digital lives around in our pockets.  Back when I was 16 if you had told me that instead of having storage in my pocket I would have a device to access my on-line virtual storage I probably would have given you a sympathetic look and asked if you wanted to sit down for a while.

My 6-month old son is now living in a world where he's had an on-line presence since he was 40 minutes old, since he was born mobile devices have gotten faster, new video codecs have arrived looking to replace flash movies and self-healing solar cells have been demonstrated.  It makes me wonder if, when he's old enough to start using a computer, telling him about storing data on your computer (or indeed 20 floppy discs in your school bag) might illicit the same response I would have given when I was 16 and on-line storage meant having your own website.

Friday, 3 September 2010

New Phone

After spending a year with my HTC Magic I finally decided it was time for an upgrade (or rather that I was finally able to), so I upgraded to the Samsung Galaxy S.  Initially I was hoping to go for the Google Nexus One but contract prices weren't quite in the right ball-park for me, but after seeing the Samsung in use with someone who I work with I figured I'd take a shot.

Initially I was concerned that I would find the phone to big for practical use but in reality it's a good size and feels nice to hold.  I've been using my phone as a e-book reader since I first got my HTC Magic and the larger screen on the Samsung makes reading them much easier.

One thing I was eager to try was the camera.  I've always been disappointed by camera phones, although the quality of the images are sometime fairly good the shutter response speed has always been a huge disappointment.  So I headed off to Markeaton park with the family and with a little trepidation fired up the camera app and started snapping.  The camera app doesn't review the pictures after each shot so I took a few before checking and I was pleasantly surprised.



The quality of the photos on the Super AMOLED screen were more than impressive and then shutter response was really quick, still not quite as good as a real camera but close enough that I wouldn't be worried about using my phone as a camera when I'm out and about.  One very small gripe here though is that even though the phone supports multi-touch the camera app uses the phones volume buttons to manage the zoom functionality.  Where the camera does redeem itself though is the touch-focus function, so after framing the shot you can just tap the part of the scene you want to focus on and the phone does the rest.

So next I moved on to the video, this was also very impressive for a phone and the quality during recording and playback was as good as the photo's I think.



In terms of general use I'm very impressed with the phone, the battery may not lost to long but I've come to expect that from modern smart-phones and I've gotten into the habit of charging while I'm at work.  One trick I did find was that turning of automatic syncing overnight means that the battery is barely touched overnight so I don't have to worry about the alarm not going off (besides I have my 6 month old alarm to wake me up anyway).  It would be nice to be able to remove some of the pre-installed apps but with 2Gb of internal storage I'm not to concerned.

So this far and so good, I'm impressed with the phone and as always I'm more than impressed with the Android operating system, I'm not sure when Froyo is coming to the device but I'm looking forward to seeing what it brings.