 |
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! |
|