FreeDESK Dissertation Online Now

The FreeDESK project was, among other goals, primarily a dissertation project for my MSc Advanced Computing Science. In addition to developing the software a dissertation was written detailing the design stages, research and decisions made.

In keeping with the open nature of FreeDESK itself this document, now marked and MSc completed, is provided in a redacted version under the GNU FDL 1.3.


Evaluate FreeDESK

As part of the FreeDESK project we would like to invite you to evaluate the system as it currently stands. Read below for the full description of the evaluation which has been cleared by the UEA CMP Ethics officer so we won’t be asking for credit card details!

Click here to complete the evaluation

A full description of the evaluation is as follows:

This questionnaire is intended to gather information to evaluate the FreeDESK system and inform future development priorities, helping to shape the system towards user requirements. It should take no more than 10 minutes.

At any point during this process you may exit and no data will be held. No personal information will be asked for or should be provided during this process. If you have any specific comments you would like feedback on or are experiencing any particular bugs please use the support link on the FreeDESK website rather than this questionnaire.

Once completed your answers will be stored securely and then used in a final analysis during August 2012. Once the analysis is performed and summaries of data generated your original answers will be deleted.

The summary data will be included in a MSc dissertation and publicly published under the GNU Free Documentation Licence whereby it may be reproduced at will.

If you have any questions, comments or concerns please do not hesitate to make contact through the support link on the main FreeDESK website.

Thank you in advance for your help!

First Alpha Release is ONLINE!

With a whirring of broadband, crunching of release scripts and just one or two last minute install script issues the first alpha release of FreeDESK is available for download.

Why not give it a look and have a play?

To install FreeDESK follow these wiki instructions.

During the alpha test period (well always but especially now) I would really welcome and value any feedback you may have, no matter how small or negative.

Email any comments/suggestions or anything to freedesk [at] purplepixie [dot] org


Ensuring git is not a GIT

Git is a great source-control tool written by the father of Linux himself. When creating FreeDESK I knew I really should use source control for a number of reasons (see the bottom of the post if you’re interested).

Having used a few in the past I shopped around and decided on git with the hosting of the repository on github. It installed nicely on my various different machines and I set about learning the command-lines for it.

As with any SCM once you have a project setup you just need to add any new files (git add filename) and then when you next commit these will be included.

But, here came my concern, what if I’ve forgotten to add a file. Often working late I can easily overlook stuff and overlooking a file would mean it’s not being put into the repository breaking the code as it may be relied upon and more importantly not being backed up (actually I also copy the entire source tree to Dropbox as part of my commit script but you get the idea – it’s only backed up once).

So as part of my development tools I made the following PHP script. It looks at the output from git for all the files it’s looking after and compares this to the physical file structure. Any missing files (those existing in the filesystem but not in git) are highlighted to be added. It also points out any orphan files, those which are in git but not on the filesystem.

Certain things are excluded for this purpose, the .git directory which contains all the git information but is not actually part of the software, temporary files created by gEdit (my code editor of choice) and finally the release directory which is used to build releases but not included in the source code tree.

On first run it identified three key files that I had indeed overlooked to include in git so I could quickly git add them and commit.

Here is the script in case anyone finds it useful outside of the FreeDESK project specifically (in the FreeDESK code tree it’s /gitcheck.php). Apologies for the indentation (or lack thereof) but copy-paste didn’t like it and I tried by hand but no joy, so I gave up.

/* -------------------------------------------------------------
This file is part of FreeDESK

FreeDESK is (C) Copyright 2012 David Cutting

FreeDESK is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

FreeDESK is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with FreeDESK. If not, see

For more information see
-------------------------------------------------------------- */

// Check git is up-to-date with all our files to be added using "git ls-files"
// compared against actual directory structure

// What to exclude - the ./.git directory and also our release directory
$exclude = array(
"./release" );

$gitout = array();
exec("git ls-files", $gitout);

foreach($gitout as $gitfile)


// Identify temp files from gEdit (~ on the end)
function isTempFile($file)
if (substr($file,-1)=="~")
return true;
return false;

// Recursive function to check a directory
function checkDir($path)
// File and exclude arrays
global $physfiles,$gitfiles, $exclude;
$handle = opendir($path); // open the directory
while (false !== ($file = readdir($handle))) // iterate through
$filepath = $path.$file; // get a "full" filepath

// Exclude . .. temp files and anything in our exclude array
if ($file != "." && $file != ".." &&
!isTempFile($file) && !in_array($filepath, $exclude) )
// If a directory recursively call checkDir again
if (is_dir($filepath))
else // is a file
// Check it against the list of git files
if (isset($gitfiles[$filepath]))
if ($ingit)



// Show orphaned files - those in git but not on the filesystem
foreach($gitfiles as $file => $physical)
 if (!$physical)
 echo "ORPHAN: ".$file."\n";
// Show orphan summary
echo $orphancount." orphaned files (in git but not physically listed)\n";

// Show missing git files (exist on filesystem but not in git)
foreach($physfiles as $file => $ingit)
 if ($ingit)
 echo " ";
 echo "X";
 echo " ".$file."\n";
 if (!$ingit)
 echo "MISSING: ".$file."\n";
// Display a summary
echo "Total ".$filecount." physical files, ".$ingitcount." in git, ".$misscount." missing.\n";


Why use SCM for FreeDESK?

I need to be able to easily work on the code on a variety of machines without having to worry about copying it. For example most of the work is done on cub, my little Fedora laptop, plugged into an external monitor, keyboard and mouse. When I’m at university cub can connect to the internet but I cannot connect to it (security restrictions). Hence I would need to copy anything I want from it to an external server and then back again to the uni PC I’m working on (needless to say I can’t install Dropbox on the uni PC).

As the code grows into release it is also important than anyone and everyone have access to the source tree. In previous projects I’ve provided full source but on a release-by-release basis rather than live access. This has meant if I want to share something with another developer I have to package up a specific set of code or produce a full development release, which they will work on entirely separately to me and I have to re-integrate back into the main code on completion.

So there you go, source control FTW.

What and Why

What is FreeDESK?

Well put simply it’s a request tracker. With it you will be able to log requests for someone to do something, keep and eye on them, update them and ultimately, once whatever has been done for whoever close them.

Why Develop It?

Primarily because I have to. I’m currently doing a MSc Advanced Computer Science at the University of East Anglia which has a rather large dissertation component where you have to undertake a fairly major project. I wanted to build such a system for a while and as it fitted the criteria chose it for my dissertation.

I’ve been in IT support for as long as I can remember, informally helping friends and family, formally through IT retail then as a helpdesk manager in local government before my sojourn to the Africas supporting IT over a massive area.

It’s useful in these circumstances to have a system to manage your jobs. The ones I’ve used have ranged from the excellent to the highly suspect excel spreadsheets or post-it notes on a board.

Most of the good systems are highly configurable but also highly expensive and I’ve always had the idea to build a system that can be used in IT support as easily as it can to track sick elephants in a game reserve and give it away for free.

Why Free? Aren’t You Living a Capitalist Dream in the Decadent West?

Free because I can. Free because there are numerous paid-for packages out there. Free because I want to make something hopefully some people will find useful and don’t want anything back apart from a nice glow inside and maybe a thank you email or two (as well as the completed dissertation of course).

As I write this now I am surrounded by virtual free stuff that people far cleverer than I have given me which is far more useful than any system I could put together. Though I’m actually typing this on Windows (commercial, boo) it’s going into WordPress (free), I’m sitting next to my laptop which runs Fedora Linux (free), can hear the hum of my development server running CentOS Linux (free) and will be posting this blog to a server also running CentOS. Developing the system this evening I’ve been coding with PHP (free) with gEdit (free) in gnome (free) and done some image manipulation with GIMP (free).

So why the heck not free!

Welcome to the FreeDESK Blog

Hello and welcome to the shiny new FreeDESK blog powered by wordpress.

FreeDESK is a new system currently under development to provide a fully open-source highly configurable and extensible helpdesk/service desk suitable for varied uses from an IT helpdesk to a plumber managing their workload.

Details will appear on this blog as it is developed and this will serve as the main news outlet for the system.

There is also a documentation wiki to answer all your questions and guide you through using FreeDESK.