Software Development Job Application for Joel Holdsworth

 View this CV in Word format (43kB) 

Hello,
My name is Joel Holdsworth. I'm a third year Mechanical Engineering student at Imperial College London, and an experienced C++, C# and Windows developer. I'm looking for a short term computer programming job over the summer from mid June till late September. The work would need to be in the UK, preferably in the Oxford or Swindon area, or in London, although anywhere in the south of England would be possible. Have a look at my CV below for details of my skills and experience. If you're at all interested, please contact me at joel@airwebreathe.org.uk.

I hope to hear from you soon
Joel Holdsworth

Skills and Past Experience

I have always been very keen on engineering of all kinds. Even when I was very young I was fascinated by anything at all technical, and I've always loved building things; I've always had a couple of projects going at once for the past decade and a half, whether a mechanical, or an electronics project, or indeed a computer programming project.

I've been programming almost as long as I've had access to computers - that’s about 11 years now. I originally started programming in QBASIC on a 486, then moved on to programming in Turbo C++ for Windows 3.1, then Visual Studio 5 in Windows 95, and later Visual Studio 6, and I now program with Visual Studio .Net 2005 in the modern windows environment.

I am expert in C++ (and therefore C), especially for programming with MFC, Win32, and DirectX, and I use XML and HTML regularly. I have experience with C# on the .Net platform, as well as J2SE and J2ME, PHP, ASP.Net, JavaScript, VB, MySQL, x86 assembler, etc. Some of my recent projects include the DL-P40 a control system for lifting of heavy structural sections of buildings, ChaosImager a universal flexible computer image generating engine, CGradientCtrl a spin-off project from ChaosImager, The Bible in a HTML Help file, Image Divider a utility for slicing large images up into segments, and generating the necessary HTML to reassemble these slices in a web-page and these are just the recent projects. Have a look below for more details. I want to emphasise that my experience of computers and programming is very wide, and because of this I can pick up any new languages and technologies very quickly.

I'm always learning new things. For example, I've recently been experimenting with a project which uses WPF (Windows Presentation Foundation), a new set of technologies for high performance graphics and UI which will become standard in the upcoming Windows Vista. I'm young and my mind is very flexible!

I'm currently completing the third year of my four year MEng Mechanical Engineering degree at Imperial College in London. The three years I have, are perhaps equivalent to a BEng. My most recent formal qualifications are my A-Levels in which I got As in Maths, and Physics, and Cs in Chemistry, and Industrial Design.

I love engineering, and I spend much of my spare time with my projects, but my interests do go beyond this: I'm a committed Christian - this occupies a lot of my time, I also love collecting music.

Projects - Brief details of some of my more recent projects

Dorman Long - DL-P40

I spent the last summer (2004) working again with Control Developments. I was with them for three months, and worked exclusively for a single customer: Dorman Long. Dorman Long are a civil engineering contractor based in Birmingham who specialise in lifting of large and heavy structural sections across the globe. The company was responsible for such projects as the lifting of the new Wembley stadium roof and main arch, as well as the steel roof of the new Heathrow Terminal 5 weighing some 18,500 tonnes.

Dorman Long generally use strand jacks to do their lifting. These strand jacks are designed to clamp onto steel cables and lift a load by repeatedly extending, retracting and reclamping to draw the cable through. The company provide jacks specified to lift loads anywhere between 15 and 580 tonnes, but to lift large sections, a group of these jacks must be operated synchronously.

This was the aim of the DL-P40 project. Control Developments had been contracted to produce a system to allow synchronous computer control of a system of up to 40 jacks. Their solution was to design and produce a series of nodes, which would communicate with a Windows application over a CAN Bus (Controller Area Network). When I arrived at the company I was immediately tasked with producing windows application.

After the three months work, I had completely designed and written a 40,000 line MFC/C++ project complete with an installer and HTML help file. The purpose of the program was to make controlling the system extremely safe, but also extremely easy. Lifting and lowering was made trivial as the software would take care of the orchestration and sequencing of even the most complex of lift projects. This is by no means trivial, especially when lifting rigid sections, because the jacks must extend in extremely tight formation. Sometimes a variance of as little as 5mm or less may be required to prevent catastrophic deformation of the load.

The software provided a simple GUI, in which each jack's load, stroke, and clamp state represented graphically in the main work space by a custom control. The back-end consisted of a worker thread which would receive incoming data from the nodes, and send a continuous stream of command messages to ensure the jacks could be synchronised when necessary.

We used USB-CAN adaptors to do our communication, but one of the biggest challenges of the project was the bus protocol. A CAN message provides space for only 8 bytes, and we found real challenges fitting all our data into such a small structure, and getting a high enough message rate without degraded signal quality. Fortunately after a lot of hard work from the team and myself, we overcame the problems to run a robust system.

The code although large and highly complex is also very elegant, and the final application worked well, and contained a lot of very neat features. The project was first used on the Sutong Cable Stayed bridge over the Yangtze river in China. There's a brief write-up of the events here. The lift was successful, although sadly I wasn't there to witness it.

VLCWPF

VLCWPF is my most recent project, with work still in progress.VLC is an open source media player application. It is able to play video from a variety of sources: from files, DVDs, VCDs, Network sources, and from capture devices. It can then display this video, but it also has facilities to transcode the video and/or stream it over networks, making it very useful for getting video from place to place.

WPF is the new Graphics and UI subsystem in Windows Vista, which is due in January 2007. WPF uses hardware acceleration to produce dazzling user interfaces for applications, of the like so far unseen in Windows. The aim of my project is to produce a front end plugin for VLC which replaces the very basic cross platform interface with one which is more powerful.

The project is going very well. I have now implemented most of the features present in the basic interface in my own. This has been by no means easy, as very little of the documentation for either WPF, or VLC is complete. For the prerelease versions of WPF I've been working with, the primary source of information has been personal blogs of Microsoft employees, and online forums. Nevertheless, I am making fast progress. I have managed to create a very effective skinning system which is able to load XAML pages. The pages build the application's user interface dynamically. Through the use of XAML with WPF, it's possible to produce astonishingly complex and beautiful skins, in a rather similar way to producing a web page.

The screen shot on the left shows VLC running in a beta of Windows Vista, with the "Fluid" skin, and an about box, which I produced with simple XAML code.

Working on VLCWPF continues to be fascinating, and it enables me to stay involved with the bleeding edge of new technology

ChaosImager

I once read a book called 'Symmetry in Chaos’ by Mike Field and Martin Golubitsky. The book was filled with these beautiful figures produced by progressively iterating complex number points through functions. The functions would cause the points to attract to certain parts of the picture like sprinkling iron filings on a magnetised plate. Pixels would be coloured according to the density of their ‘dusting’. After reading about this I really had to give it a try, and within about a week I was producing these beautiful icons. The whole idea of the project was very rewarding type some numbers in, and get a stunningly beautiful picture out; very rewarding. Slowly the project became more and more serious and elaborate as I added support for more functions such as Barnsley IFS, and later more conventional wiping-type fractals like Mandelbrots, Burning-Ship, Buffalo, Barnsley as you find in UltraFractal, as well as some sets which I just "cooked up" by combining various functions. Eventually the engine got rather bloated it’s list of possible tasks was a little too numerous, at which point I started working on a plugin architecture. This allowed the program to become very much more flexible because literally anyone could design a new module. This is about as far as I took version 1 of the program. I was never really satisfied with the plugin architecture. It allowed for flexibility, yes, but adding new formulae was nowhere near easy enough to allow the average user to play around.

At this point I decided to recode the application from scratch. This second project became known as CI2. For CI2 I had the idea of images being generated by a series of units. These units would represent a programmatic operation, and would have some input ports and some output ports. The program was no longer restricted to 2D bitmap data, and was expanded to support 3D Graphics and 2D Vectors Images using DirectX, I also envisioned eventually adding support for sound and video data. Each unit’s ports were specified to carry a certain data type. So these units would be connected together in a network, eventually feeding into a root node the user’s screen. So one might have unit which renders a fractal, and this unit would feed it's data into another unit designed to render 3D trees, onto which the original fractal would be rendered as it's leaves. This is very powerful idea because it allows enormous flexibility: simply rewiring the diagrams would produce huge variety of functionality. But the best part of the design was the idea that units should be editable. Each unit was an XML file containing descriptions of all the parameters, and some C++ code. So according to the users specifications, the code from each unit was cut and pasted together, and then fed into a third party compiler to generate a DLL a lean module specialised specifically for rendering this specific setup. This DLL was then loaded, and called into execution to generate the images.

CI2 did create some stunning images in it’s time, and the concept of units was proven nicely. I also managed to add a lot more editing facilities e.g. paint brushes on top of the generating facilities. The real downfall of the project was C++’s lack of support for reflection, and dynamic code which would have made the whole task much easier. I've been considering retrying the project again this time maybe using .Net script to do the generating of my dynamic modules. Although I'm a little unsure as to how fast the method would be. But when and if I make an attempt at CI3 it will have extensive and unique facilities, and produce stunning images in the tradition of it's predecessors.

I have been recently contacted by a German magazine entitled 'GAIA' (www.gaia-online.net/en/index.htm). They stumbled across the 'Clam Triple' rendering produced by CI1 and have approached me for a high resolution rendering. They used it as a background for an article released in the March/April edition.

http://joelholdsworth.members.beeb.net/CI1/ - CI1 Homepage
http://joelholdsworth.members.beeb.net/CI1/demo.htm - More Pictures and Screenshots

http://joelholdsworth.members.beeb.net/ - CI2 Homepage

WARNING: These apps are extremely experimental, so don't be surprised if you find strange or unstable behaviour! Look at CGradientCtrl if you want to look at a polished piece of work.

CGradientCtrl
This was a nice little spin-off project of the ChaosImager experiments. I always like my programs to have nice GUIs so I designed this control for designing flowing colour gradients for palettes. I made an article of it and put it on codeproject.com. Have a look at www.codeproject.com/miscctrl/gradient.asp . The kind people on the site gave it 4.94 out of 5 points rating, which was very satisfying. From searching the web I’ve seen the control used in two projects: "CAMEL Laboratory" - a tool for distributed and parallel computations, based on the "cellular automaton" concept, and FUI - a procedural texture generator application.

I later worked on a mini contract to translate the project into a C# WinForms control for use in the US, for colourising data for oil exploration maps. Unlike ChaosImager and Image Divider this is an example of a polished piece of work. The type of refinement I always add when the product is intended for an end user, and not just myself!

The Bible in an HTML Help File
I have a friend who has sight difficulties, and uses his laptop a lot to read books by setting the text to large size. He was having problems reading the Bible. I had the idea of putting the Bible in HTML Help File. It makes perfect sense HTML Help files are designed to help you find information, and so lend themselves very nicely to the Bible. I wrote a quick and dirty console program to download the text off the web and decode it into XML files. I then simply wrote an XSL stylesheet to present the raw text data in a tidy format. I slowly added more and more functionality 16 translations, collapsible chapters (with fadeout effect) like #regions in C#, pop-up footnotes and cross references, a navigation bar across the top, and of course settings for text size. The project worked out very nicely, and I’m just waiting to get the rights to post the copyright material on the web.

Of course my projects go beyond my software offerings. Other projects include: a complete wooden works mechanism clock, a subwoofer for my car, an engine dynamometer for a strimmer engine, a plastic injection moulding die for children's play blocks and many others!

View The Pictures

Contact Me - joel@airwebreathe.org.uk