MrCeri
Twitter Linked In Tumblr RSS Home Projects Blog About Contact

Goodbye PubliSite, hello Sitesuma

[the following post is written from the perspective of a career in software development, but the advice and observations apply to plenty of other industries too]

I have been working with the good people of Line Industries for over 5 years. That’s a long time by my standards, certainly longer than anywhere else I’ve worked.

Anton, my old business partner and mentor, once told me that if you’re serious about your career you should never stay in the same job longer than 3 years. He imparted these pearls of wisdom many years ago, back when the economy was booming and jobs were plentiful. I don’t know if he would still give the same advice today, but it’s true to say there are plenty of drawbacks to staying in the same job for so long.

The bad…

First and foremost, it’s very difficult to prevent your skills and work practices from stagnating. Getting stuck in a rut is a danger in any long term role, and the longer you stay at the same job, the greater the risk of settling into a comfortable, stress free way of working, using skills and technologies that are safe and familiar. Everyone likes an easy life, but those comfortable and familiar skills and working practices will one day be outdated and stale, damaging your future career prospects.

Stagnation (of a sort) can also occur in your relationships with colleagues. This can vary depending upon the size the company and the turnover of staff, but it’s inevitable that the longer you are in the same job, the less exposure you will have to new workmates. This means less exposure to new ideas, new ways of working, different approaches to problem solving and getting the job done.

Being at the same place for too long also increases the risk of becoming “that legacy guy”. As other staff members come and go, you eventually become the only person who still remembers why “System X” was the built the way it was, and before long you are the only developer who can maintain the thing. While your colleagues are working on exciting new greenfield projects and developing new skills, you could be stuck nursing big ol’ System X through its twilight years, doing nothing for your future career prospects.

Other downsides of outstaying your welcome include hitting a salary ceiling, looking less ambitious on your CV, and generally falling out of practice when it comes to job hunting. Not many people actively enjoy looking for new work, but there’s no doubt that the more often you do it, the better you become. You also tend to cultivate a more extensive network of professional contacts, making the next search that little bit easier.

Having said all that, it’s not all doom and gloom! As long as you are willing to remain diligent, forcing yourself out of your comfort zone, keeping on top of the latest technologies and practices, joining online and offline professional communities in lieu of a constantly changing colleague base, staying at the same place can have its benefits.

…the good…

For one thing, sticking at a job long enough gives you the opportunity (should you take it) of truly knowing the ins and outs of what you’re working on. This could be a particular technology, programming language, or business area. You may not end up a jack of all trades, but sometimes it’s better to be an expert in one field than a chancer in lots (though choose wisely young Padawan, and review your decision now and then as the job market changes).

Working somewhere for a long time also gives you the opportunity to build rapport with your team mates, and, God forbid, maybe make some good friends too! Let’s face it, you probably spend more waking hours with your colleagues than with your friends and family, so if you’ve found a good bunch, think carefully before throwing that away. Going to work each day with a group of people who you like and respect can be so rewarding; spending your working hours with a bunch of imbecilic nut-bags can be soul destroying (I’ve done both!).

I wrote earlier of the negative aspects of being “the System X expert”. While this is true, there are times where this can work to your advantage. Job security for one. Plus everyone likes to feel like they are valued and important in the workplace, and there are none so valued as the select few members of the team who know how to debug System X when the shit hits the fan! Though be careful – projects rarely thrive if resident experts are intentionally holding back information and expertise to safeguard their own state of importance – earn respect by being a genuine expert, not just by hiding the user manual from your colleagues ;o)

We all know that these days there’s no such thing as a job for life. Dedicating the best years of your career to a single employer doesn’t guarantee you any greater job security than the graduate who started last year. But I think this advice gets overplayed. There are still plenty of companies which like to promote from within, and take security from balancing hungry new recruits with more seasoned team members and managers who have a sense of company direction and history. Being one of those team members can make you invaluable.

Furthermore, key responsibilities and project ownership also tend to be placed in the hands of trusted long term employees rather than new recruits, so if this is your thing, another good reason for establishing yourself in a long term role.

The final benefit I’ll describe is also where I’ll get to the point of this ramble! Projects – particularly software projects – often have a long life span. If you’re constantly moving around from job to job you become totally focussed on your own career, and might find it difficult to invest emotionally in the projects you’re working on. I guess this doesn’t really matter so long as you’re turning out good work, and are being well rewarded, but there’s something so satisfying about seeing a large project through from inception to completion.

…the beautiful!

During my time at Line Industries I’ve had the good fortune to be involved in such a project. We released the first ASP.NET version of PubliSite, our Content Management System, back in October 2007. I still remember setting up the initial web project in Visual Studio, creating the first Default.aspx page, checking revision 1 into Subversion :o)

PubliSite now powers the websites of scores of high profile companies, from blue-chip FMCG corporations to publishing houses, mobile telecoms manufacturers to non-profit organisations, furniture suppliers to gold mining conglomerates. Every software developer likes to hope that their creations will be experienced by actual real life users (many software projects get consigned to the digital dustbin before they are completed), so it makes me happy to think of the millions of users who have interacted with PubliSite powered websites (albeit without knowing it!).

This year PubliSite has taken a big step forward. No longer just a CMS for use in individual projects, we have recently re-branded the platform as ‘Sitesuma’, and at the same time launched a new hosted service available to the public. This is a big experiment, and one which has been a long time in the making. It’s still at a very early stage, but I’m excited and optimistic about its potential. To find out more, go take a look at the Sitesuma website, which, in true dog-fooding fashion, is itself built with Sitesuma Pro :o)

Dropping the BOM! or: Who’s the BOM King?

OK, advanced warning – things are about to get a little geeky…

I’ve been working lately on a PHP project – I’ve written my fair share of PHP in the past, but for many years I’ve been lucky enough to develop almost exclusively in C#. So my (temporary) return to PHP has nudged me out of my comfort zone (no bad thing), and I’m encountering lots of new and interesting problems to solve. One particular problem had me stumped for a while, so I thought I’d share the solution in case it helps anyone else.

Quick description of the problem – when including external files (using include, include_once, require, etc), I was getting a bunch of extraneous characters spat out to the page:

 

 

The screenshot above is a bit difficult to see, but it’s basically a repeated sequence of .

These little tinkers are Byte Order Marks, or BOMs, which get added to the start of Unicode text files by certain text editors (learn more about BOMs here). I’ve been developing my PHP code on a Windows box, using the NetBeans IDE, and running the site and MySQL database locally using XAMPP. Things are fine on my dev box, but the problem occurs once the files get FTPd to the live (Linux) server. Those pesky BOMs are creeping in somewhere! This can be avoided by modifying the NetBeans project settings, but since I edit my PHP files using a variety of editors, the BOMs sneak back in. And PHP doesn’t like that (depending on how it’s configured, hence my dev/live discrepancy).

You can get rid of these troublesome BOMs using a suitable text editor – Notepad++ does the trick (Encoding > Convert to UTF-8 without BOM). However, doing this one file at a time is somewhat painstaking, so I wrote a quick little tool to batch convert all files prior to deploying to the live server. Here’s the useful bit (with error checking removed for readability):

static void Main(string[] args)
{
    try
    {
        if(args.Length < 1)
            throw new ArgumentException("Must pass directory to be processed as command line argument.");

	DirectoryInfo directoryInfo = new DirectoryInfo(args[0]);

        foreach(FileInfo file in directoryInfo.GetFiles("*.php", SearchOption.AllDirectories))
        {
            string content = string.Empty;

            using(StreamReader reader = new StreamReader(file.FullName))
            {
                content = reader.ReadToEnd();
                reader.Close();
            }

            UTF8Encoding utf8WithoutBom = new System.Text.UTF8Encoding(false);

            using(StreamWriter writer = new StreamWriter(file.FullName, false, utf8WithoutBom))
            {
                writer.Write(content);
                writer.Close();
            }
        }
    }
    catch(Exception ex)
    {
        HandleException(ex);
    }
}

Hope that helps you become your own BOM King! And remember, as with any other code you find on the internet, USE AT YOUR OWN RISK!

Salary Timer, Tax Calculator and Raise Calculator updated for 2012/13 tax year

Hair Today Gone TomorrowA couple of months late, but I’ve finally updated the Salary Timer, Tax Calculator and Raise Calculator for the 2012/13 UK tax year.

I have to confess, I’ve lost the enthusiasm for these projects. They were fun back in the day, and indeed the Salary Timer is the raison d’être for this website, but that was over 10 years ago, and well, things change.

I haven’t quite decided what to do with these projects, so rather than abandon them, I’ve simplified the Salary Timer to ensure it’s easy to maintain. I’ve removed the Historic Tax Comparison tool (which was of questionable value anyway), and I won’t be restoring the previously disabled features (Mini-Mode, Customisable Break Timer and Tax Brackets tool).

Sorry for the delay, and enjoy your salary based calculating pleasure.

Happy Birthday, MrCeri!

Today this website celebrates a decade on the interwebs – that’s longer than Twitter, Facebook, YouTube and MySpace combined! (OK, maybe not combined, but certainly one at a time). If you’ll indulge me, I’d like to take a little trip down memory lane and reminisce about how it all began…

In the beginning, there was the Salary Timer

Our story begins 10 years ago, when I was working as a consultant software developer in the City of London. My first project was based at the Royal Bank of Scotland, babysitting a foreign exchange trading system that my company had built the previous year. I was hard working and enthusiastic, but the project was undemanding, to put it mildly. Rather than bury my head in the newspaper (the choice of certain colleagues), I decided to take the opportunity to improve my C++ and Win32 GUI programming skills.

I built a number of experimental applications, mostly concerned with cryptography (which I was learning about at the time), but one of my more frivolous creations was an app that let you calculate how much you earned while visiting the toilet at work. The Salary Timer was born.

I emailed the Salary Timer to all my friends, and before long it took off in quite a viral manner (back when “going viral” was still a novelty). I was receiving email from all over the world, and quickly realised I needed a web presence for my new creation – welcome to MrCeri.co.uk!

Thou shalt not blog

For a while MrCeri.co.uk was a home for my various home-brew software projects, nothing more than a simple introduction page and a bunch of download links. Blogging was all the rage at the time, and was seen as trendy and cutting edge – I naturally took an instant dislike. But as the years went by, I added fewer and fewer projects to the site. Not only did my successive day jobs become more demanding, but they increasingly allowed me to “scratch my programming itch” during office hours, leaving me less inclined to work on my own projects in the evening. The site slowly morphed into a run-of-the-mill personal blog, which, now that traditional blogging seems to have fallen out of fashion, is fine with me :o)

2002
2002
2003
2003
2005
2005
2008
2008
2010
2010
2012
2012

I still have plenty of personal projects on the go, and someday they might find a home on this site. But in the meantime I’ll just continue rambling on. Oh, and pictures of robots. Never forget the robots!

Backup forecast – still cloudy

It’s been barely a fortnight since I came up with my cloudy backup plan, and already I’ve been tinkering!

I’ve simplified things by removing one of the portable USB drives, making the remaining USB drive the central hub of my digital activity, and by ditching “Remember the Milk”. And if you stand back from your screen, and squint a bit, the diagram looks a bit like a robot with 4 arms and eyes popping out on stalks. No, really, it does!

 

Backup Plan

 

I was once warned that if you play with it too much it will fall off, but I think I’ve finally got it this time. For now. Until next time.

Cloudy with a chance of backups

Ah, personal digital data backup. The technology equivalent of home contents insurance. Pretty boring stuff – boring, that is, until your house burns down, destroying your valuable collection of Barry Manilow LPs, your precious bee keeping magazines, and that photo taken only seconds after you shot JFK from the grassy knoll. (I didn’t even know what a knoll was until JFK was assassinated, let alone a grassy one, but I digress).

I spend waaay too much time thinking about data backups. I have written before about the delight I take in a complex network diagram. Around this time of the year, as the nights draw in and the snow begins to fall, there’s nothing I enjoy more than gathering the family in front of the fireplace with a marker pen and whiteboard, planning our digital backup strategy for the year ahead.

“This year”, I began, “will be all about storage in the cloud”. The look of glee on the childrens’ faces – it was as though Santa Claus himself would be keeping their data safe and secure!

So without further ado, here’s how backups will happen in MrCeri’s world for the foreseeable future:

 

 

Notes

CrashPlan has its own desktop app. Most of the other backups are automated using robocopy in Windows batch scripts. A couple of the backups (such as offsite) are manual.

• Anything vaguely sensitive is stored within TrueCrypt containers (including stuff backed up to the cloud).

• Backups are worthless without a reliable restore process – one of the advantages of this plan is that photos and music are primarily viewed from the NAS drive, which handily verifies these backups. Validation of the other backups is carried out manually (and not all that often).

Remember the Milk seems somewhat superfluous considering I also use GMail (which has GTasks built in) and Evernote (which has good check list support), though it does sync nicely with my phone. I’ll probably ditch it soon.

• The sharp-eyed reader will notice that films are not being backed up. This is because the files are huge, and I wouldn’t lose much sleep if they were lost.

• I evaluated a number of cloud backup services, and eventually chose CrashPlan based on cost and unlimited storage. However, any cloud backup service is hampered by the sheer amount of time it takes to upload the initial backup set, and the corresponding amount of time needed to download any future restores. It will take many months to upload my initial backup set (I’m throttling the bandwidth used by the service to avoid antagonising my ISP!). I don’t expect to access my CrashPlan files often – I see it simply as an insurance policy against a complete disaster (e.g. my house burning down or all my computer hardware getting wiped out by an EMP attack).

• Much as I love a complex backup diagram, I am already planning to simplify this process by using just the one portable USB drive.

Latest freelance project: T&RS Engineering

Life’s been pretty manic lately, a hectic workload at the day-job, a new mini-human demanding perpetual nourishment and shelter, and 3 other hungry humans requiring clothing and feeding on practically a daily basis. What better time to take on some after-hours freelance work!?

The work in question was a brand new website for rail maintenance specialists T&RS Engineering. Phase 1 was a pretty standard brochureware site, but phase 2 will add data capture and reporting features.

The site is built using my old enemy PHP, for the simple and lazy reason that the client already had an existing hosting contract based on the LAMP stack. I did consider talking them into migrating to a .NET solution, but I figured it’s good to take a swim in a different technology pool once in a while. Even if that pool looks very old fashioned compared to where I normally swim, and the water has a stinky odour and unpleasant after taste.

Still, a good workman shouldn’t blame their tools n’ all that, and I’m sure there’s an equivalent saying about swimmers not blaming their murky pools. Probably. Besides, it’s all curly brackets and semi-colons, right? What could possibly go wrong…!?

Mini feed hypocrisy or: how I learned to stop worrying and love the micro-blog

I’ve written before about how I’ve never gotten on with Twitter and its ilk. While I still feel much the same, there have been a number of occasions lately where I’ve thought it would be handy to post a quick link – perhaps to an interesting article or something I’m working on. It would hardly be worth writing a proper blog post for something so brief, and begrudgingly I have to confess that Twitter and its friends are perfectly suited to such a task. I’ve therefore started trialling a ‘micro-blog’ of my own so I can post links, etc, without cluttering up the main blog. These micro-updates can now be seen on the home page, and I’ve also set them up to auto-post to Twitter (like the big fat hypocrite that I am).

(I won’t be polluting the site’s main RSS feed with these updates, but if you’re desperate to subscribe you can do so via Tumblr)

http://twitter.com/MrCeri

SalaryTimer .NET released!

There’s a long and a short version of this blog post.

The short version is: new version of the Salary Timer released for the 2011/12 tax year! Yay! Head over to the Salary Timer page to download. I have also updated the Raise Calculator and Tax Calculator.

The longer version? Well, let’s talk about the Project Management Triangle…

The Project Management Triangle, illustrated to the right, describes the three constraints that affect a project. Just like you can’t change the sides of a triangle without affecting at least one of the other sides (or the area), you can’t change any of these project management constraints without affecting the other two (or the project quality). It’s an over-simplified model, but it still does a surprisingly good job at illustrating the reality of a typical software project.

Lets say you want to add extra features to your project (increase the scope) – that’s fine, but you’ll have to also increase the cost and/or the delivery date. Or, lets say you want to finish your project quicker than planned – that’s fine too, but you’ll also have to increase the cost or reduce the scope. You get the picture.

By now you’re probably wondering why I’m blathering on about triangles when I’m supposed to be discussing the new version of the Salary Timer? Good point.

Ages ago I talked about my plan to migrate the Salary Timer code-base from C++/Win32 to C#/WinForms. I assumed this would be a quick and pain-free task. Hmm…

It turns out there was more code in the Salary Timer project than I remembered. A lot more! And though the code conversion wasn’t all that difficult, it took much longer than I’d anticipated. And some features I simply didn’t want to migrate as they were, so I re-wrote some bits from scratch. Add to that a crazy busy couple of months at the office (working on a new project for Nokia), and suddenly my triangle was feeling the strain…

Now I’m not one for cutting quality, and I was already a month overdue – time to cut features. So unfortunately this new version of the Salary timer is missing the Tax Brackets and Mini-Mode features. I’ve also removed the ability to rename the “Other” break timer. Nothing too earth-shattering, but it’s still a shame to release a new version with less features than the previous one :o(

On the plus side, now that the project has been migrated to .NET it will be much easier to maintain. So adding those missing features, plus a few extra bells n’ whistles, should be child’s play…

Don Knuth and the age of programming

This week I attended the BCS/IET Annual Turing Lecture at Cardiff University, given by Computer Science legend Donald Knuth. Knuth literally wrote the book on computer programming, and, well, Wikipedia and his own website can tell you the rest. The man truly is a living legend.

I attended the lecture for a variety of reasons. Mainly for inspiration. I enjoy what I do for a living, but you can’t rely solely on your day job for influences and motivation. Also because speakers of this authority rarely make it this side of the Severn Bridge (or indeed the Atlantic), so it seemed criminal not to attend! And did I mention it was free?

Anyhow, I felt compelled to write a little note about the experience. Not because of the content (which took the form of a bland, but genial, Q&A session), and not out of any sense of hero worship – I haven’t even read TAOCP, and Knuth’s heyday was a little before my time. No, the main thing I took away from the event was something that wasn’t even discussed (directly). What I wondered was: “What does it mean to be old in this industry?”

Don Knuth is old. Proper old. 73 to be precise. And a fair few of the audience were closer to his age than mine. But he inhabits the academic world, where being old is tolerated (often celebrated) rather than seen as a crime. Is this true in the private sector?

I’ve been a professional software developer for just over a decade now, so assuming I work until I’m 65, this puts me about a quarter of the way through my career. What will the next three quarters hold? Will I be able to continue doing this work, which I love, or will I be forced to make way for a younger breed? Will I still be writing code (professionally) when I’m 60, or will I be forced into management, or another career altogether? How many 60 year old programmers do you know? Do carpenters and plumbers fear the same things? Surely not in their thirties/forties?

Perhaps the youthful nature of this industry is simply a product of the fact that it’s still in its relative infancy – maybe by the time I’m 60 it’ll be common to work with programmers who travel to work on their bus pass.

At the moment I have a pretty good balance of youth, skills and experience, but it’ll be interesting to see what the future holds. I can’t predict next year, let alone a decade from now, so it’s not worth losing any sleep over; this is just a bit of contemplative noodling. But it would be lovely to think I’m still writing code when I’m 73, and enjoying it as much as Don Knuth :o)