|
|
Select your entertainment
> Make your own comic
|
Strip Editor |
GTA online |
3D Pinball |
3D Printer |
Carputer |
Software |
Films |
Features
|
|
|
|
|
Software
Design - how to do things right
-
Make things visibile
Give feedback, show visible results of the action taken.
-
Don't be arbitrary
Use obvious command names and actions.
-
Be consistant
Every task should be performed in the same way, like adding to editing.
-
Make operations intelligible
Don't use abbreviations. Give informative error messages and a solution.
-
Be polite
Work with the user, not against.
-
Don't make operations dangerous
Don't allow a single wrong action to destroy invaluable work.
Introduction
I work full time designing and developing a wide range of software, mostly web-based systems
that include a database back-end. I've put together this page as a history for my own reference and
for the eyes of anyone who would like to work with me in the future.
The software shown here are a selection of the most interesting and varied pieces I've created over the years.
Much of the software I create is fairly simliar in nature, so I'm only showing a few more distrinct samples here.
Also I hope that the lessons I've learnt over the years will be of use to others. If you'd like
my advice, help or collaberation on a project. Please feel free to contact me.
General advice
Every industry and skill has its rules and regulations. They are there to help us, but they can also hinder us.
It's important to learn the rules first, only then can you know when to break them.
Don't be afraid to go your own way - you don't have to leap on board and use every new technique, language
and methodolgy that comes along. For example Test-driven development
is something I've never gotten on with. That doesn't take anything away from the people it helps, but for me
I find I can better my software through other means. Be open to ideas, but don't let those ideas control you.
I once told a friend off for writing ActionScript badly, the way he'd done it wasted computer resources, could have been
written in less lines of code and generally looked messy. However the end result of his effort was exactly what he wanted,
a beautiful looking piece of interactive software. Always remember the bigger picture.
I've been told off countless times for not doing things the right way, for not proceeding down the way worn path. But it's
only by trying something different that we can stumble across new ideas and discoveries that we would otherwise have
never found. Sometimes it pays to go the slower more scenic route.
I love writing software to solve problems, it gives me alot of fufilment. I read lots of books on software to keep up with
various technologies but I make an effort to read non-software books like The design of everyday things,
Why we buy and
Next.
Every single subject in the world inter-connects with every other in some way. You can never be a master of software design
and programming without being knowledgable and well versed on a multitude of other subjects.
In early 2007 I kicked off a project with Microsoft UK to design and build a range of kiosks using their brand new WPF
technologies. My mind was racing with possibilities for what could be created using this new technology, I knew that we could break new
ground in interactive design, which was one of the reasons Microsoft was interested in me. However the deeper I delved the more
apparent it became that version 1 of WPF had shortcomings and the tools to make use of it was non-existent or not yet
ready for the prime time. In contract Adobe Flash has had years of crafting and refining and is presently a much better choice
for such a project. You can write software in Notepad, but it's far easier and quicker using a well developed tool.
One of my first work related memories I have at the first IT company I worked for was impressing the CEO by fixing his
laptop when the IT helpdesk had written it off as unfixable. "How did you do it Peter?" they asked me, my answer? I can't remember, but
I do remember that I didn't tell them the truth because I didn't want them stealing my knowledge. Over the years I have been cagey about
sharing or even showing my source code to others, for fear they would critisize the way I have done it or steal my ideas. But
the simple truth is source code is like a song. You can analyise it and pick it apart, but that won't bestow you with the talent
or creativty to produce a simliar project. Software design and development is a long journey, we all benefit from helping others along the way.
Since the release of Flash there must have been millions of games developed in it. But why weren't those same games written in
C++ or Java, why did it take Flash for such mass development to take off? The simple answer is because Flash is much easier to
learn and get results in than C++ or Java. Such games will never run as Flash or be as complex as those created in C++, but that is
not the point. YouTube lets people do what the want to do, create videos, without having to worry about video codec, bandwidth or
hosting issues. Sometimes its better to think about what you want to achieve, rather than how.
|
|
|
|
|
|
|
|
|
Professsional Content Management System (Codename: Gandalf)
C#, asp.net, SQL Server 2000
I spent a majority of my career writing many tens of dozens different CMS systems of different specialities
and levels of control, from document processing and storage systems, image manipulation and analysing to
complex information management systems. However this one is very different than most, this CMS system
is designed to be used by web site professionals, it allows them to hand craft
individual pages on the website. What the system does it manage the master templating
of the whole website, inter-page linkages, automatic error logging, search integration,
automatic image creation and many other little tasks that occur in running a large scale website.
The Gandalf CMS system is the back-bone of the Avon and Somerset Constabulary
website and allows us to run the site with a level of degree and power that is unmatched by off the shelf software.
The front-end of the system is housed in a desktop C# application, made up of two web browser windows. The left hand window
always shows the website tree structure. From here pages and sections can be created and altered, which then automatically
take effect on the rest of the website.
Due to the hybrid design used, we have the free reign to hand create pages, to create sub-CMS systems for various
pages of the website. While benefitting from all the useful management and time saving features an overall
CMS brings to the table.
Code generator (Codename: Oz)
C#, SQL Server 2000
As the years go by, the more I learn about software development and design, the less code I write.
That's not to say I produce less work, far from it, I'm more productive now than I've ever been.
One of the main reasons, is because I write less code.
This code generator tool is something I've tweaked and improved over the years, so now it's gotten
to the stage where it can manage much of the repetitive code creation needed in a software project.
This allows me to concentrate on overall design and architechure, rather than writing lines of code.
My code generator creates three main types of code, which are the most useful for the types of projects I work on:
-
Object classes
It's taken me quite a few years to really understand the power and the use of object oriented programing, but
now I use objects is most my software projects. This part of the application generates an object from
a database table, along with loading, saving and property access methods. It provides me with a solid starting
point to add further functionality.
-
Stored procedures
It looks at a database table, then it'll create the standard CRUD procedures, with the ability to pre-fix
the procedure name according to the type of usage. After seven years of writing stored procedures, you
start to see the similarities :)
-
C# database interface methods
Finally a way to connect a C# software application to a database back-end, here you select which
stored procedures you'd like to interface with and it creates the C# code to interface with them.
Complete with the ability to gather return values for error reporting.
With these three main code generating abilities I am able to massivily increase the speed I can complete
software projects. Something that may have taken me several days to complete, I can now do in a matter of hours.
It not just the increase in speed of the creation of code, but the fact that the code produced is error free.
Again this allows me to concentrate on the big picture, rather than hunting down bugs.
There are many code generator tools available - but whenever possible I prefer to write my own tools and software, why?
It's so that I can craft it exactly to my needs and learn many valuable lessons in the process. If you are able to I
would recommend this route too, as in the end you'll be a more knowledgable developer for it.
Once you are familar with a language a code generator is the best way to improve the speed, accuray and quality
of your software.
Source Control
C#, SQL Server 2000
In all my years developing software, source control is something that I've only fairly recently begun
to take seriously. I certainly make back-ups of the different versions of software I develop and have
worked on teams containing a number of people, but somehow I've always managed to side-step using source control.
After a recent snowboarding holiday spent reading The Pragmatic Programmer
I realised that a good way to get myself into using a source control system would be to write my own. So once
I got back from my holiday I started to piece one together. After about three days I had a basic, but powerful
enough for my needs, source control system.
The system allows for both files and database objects to get checked in, once they are the database tables, stored procedures
and the various files can be viewing through the application. This means I don't have to check older files out to look at
them, I can just browse through the files contained within a project.
All the files are held within BLOBs in a SQL Server database, which makes it easy to use the software from
any computer on the network.
Although my software doesn't allow for many of the fancy features found in other open source and commerical systems,
for my purposes it suits my needs perfectly. Perhaps in the future I'll move to using an existing source control
system, but for now I'm happy learning the challenges of such a application by maintaining my own.
E-mail server (STOMP)
C#, SQL Server 2000 (Originally VB6)
A lesson that is constantly proven correct in career is that by learning more of various systems and
technologies you use, the better you can do your job. Because I'm always interested in learning how
systems work and in many cases writing them myselfs, I'm able to more easily understand and fix problems.
When I changed jobs in 2002 and started working for the police I inheritied the legecy left by the
previous programmer. He had created an army of VB scripts to control the various automatic website functions.
This wouldn't have been such a problem, if they all didn't have to be run from his old computer, under
his logon - plus they took a long time to run.
After cutting some of these scripts open, I found one major bottleneck was when e-mails were being sent.
To eliminate (or at least move) this bottleneck I instead made each e-mail sending request
add a row into a database table, then had a server based application load in these e-mail requests
and send them out. You may be thinking there was a simplier way to solve this particular problem and
you may be right. But this solution laid the groundwork for a way of sending e-mails that we still
rely on to this day.
Now it's a competely .net based solution that is much faster and flexiable than it's original
incantation. But what are the advantages to sending e-mails in this way? Let me explain:
-
Statistics
In business, as in life, nothing means much unless you can prove it. As every e-mail
sent goes through this system, it provides us with very detailed logs of the quantity
and type of e-mail sent. We can easily determine the number of news bulletin we sent out
last week or see how many contact forms where completed by members of the public
on the website.
-
Reliablity
If our SMTP server goes down, with one change we can route all over e-mails through another
SMTP server. If we realise the last days worth of e-mails failed to send for some reason, we've
got those e-mail requests still in the system. The e-mail server even has the ability to
use an externally hosted website to route the sending of e-mails through, which has enabled
our website to still send out e-mails even when the entire police force has been unable to.
-
Portability
As the e-mail server is accessible to any technology that can interface with SQL Server, which
is made very straight forward through a library of components I've written, we have the ability
to send e-mails from anywhere. With a few lines of code a database stored procedure can send
an e-mail, so can any website or desktop application.
-
Speed
It's typically faster to add an e-mail into our e-mail server than it is for the application
to send the e-mail itself. This means that by using the e-mail server applications
run faster and more reliabily.
I'm not sure if many, if any, other companies use a similar approach, but it's something that has
provided me with many advantages over the years without any real drawnbacks. I wouldn't want to go
back to the standard way of sending e-mails, as this way of doing things bringd so many benefits.
Website search spider
C#, asp.net (Master pages), SQL Server 2000
Search technology is a very difficult thing to get right, which is one of the main reasons Google
is as big as it is, because they do it very well. Being the Senior Website Programmer at the police
means I'm constantly working to improve the usability of our website, one of the key areas here
is the search system.
I must have re-written our search system from scratch at least ten times over the years, each time
trying a different approach to provide better, more accurate and quicker results. My most recent
implementation has given me the best results ever, through the use of two key techniques.
-
A Google-like page index
Search results are now sorted according to the popularity of a website page. How often
is it linked to from other pages? How many visitors did it have within the last week?
Through the data recorded by the Gandalf Professtional Content Management System, this
information is easy to retreive.
-
Keyword search spider
Again by using the Gandalf CMS system we know about all the pages that make up the
website and because the entire website is built using master pages, the indiviual
.aspx pages that make up the website only contain the specific content of that page,
they're not bogged down with duplicate navigation and content code. So the search
spider can easily index all the content contained within the pages of the website.
So how does my search spider work? It's pretty simple really, in terms of explaination and
the amount of code that makes up the application.
Thanks to the Gandalf CMS system we have access to a list of locations and details about
the various .aspx pages that make up the website. So the search spider loads up a list
of website pages that are avaiable to scan. It then checks the last modified date of each
page against a record of the last modified date of the page the last time it was scanned.
This allows the application to determine which pages required scanning.
When the application scans a webpage it loads all the text in the .aspx, then uses regular
expressions to strip out all the code and non-content related content. It then compiles
a list of all the words that appear in the page and records how many times each word appears.
All this data is then saved to the database, providing us with a word list for the website
and a record of were and how many times each word appears in the website.
By using these two search techniques, our website search system now returns the better
search results than ever before. We've run userability testing on the new system which
has proven the enhancements work very well.
Kiosk network
C#, SQL Server 2000, Flash, Web Services, Skype
Main menu of the touch screen kiosk interface
Web-based kiosk administration
The majority of the work I do is web-based, which means creating systems and experiences through
the use of web pages. This can mean a Flash based application or a webpage powered by a database
behind the scenes. Sometimes though I get to work on something quite different and this is one
such example.
Although the team I work with in the Police mainly focused on the police website
we also made our services and content available on a variety of other channels. Primarly WAP
, digital TV and kiosks.
Our kiosk network is quite special as it's made up of a series of
physical kiosks installed at various locations through out reason. Our kiosks are made up of layers of technology
that enable us to run and maintain a network of kiosks with minimial effort and time spent.
Each kiosk is connected to our web server via an internet connection, this enables each kiosk to access
the most up to date content available. The front-end of the kiosk is written in Flash, this allows
a nice looking and responsive user interface. The Flash inteface sits inside a C# application that allows
the Flash front-end to access various features that it would not otherwise be able to, like the ability
to print or provide text to speech.
The kiosk accesses data through a web service that ties into the various CMS systems that make up our website,
these are things like news, wanted, police staff jobs, traffic, crime statistics and so on. As the kiosk
ties directly into the same CMS systems that power the website, each and every kiosk gets automatically
updated as our website is.
All kiosks are controllable through a web-based administration facility, which enables us to keep on
eye on the kiosks. As each kiosk periodically sends information about it's memory, processor and CPU
usage we can easily see the health of a kiosk. All kiosk user activity is logged which enables us
to track kiosk popularity and usage.
The admin also lets us set start-up and shut-down times for each kiosk, using a graphical time
scheduling interface. Each kiosk downloads their own schedule and interfaces with electricial
timer built inside to turn themselves on and off.
Another key feature of the kiosks I'm quite proud of is the multi-lingual capibilities. When a user
first activites the kiosk they are asked which language they'd like to use the kiosk in. From then
on in the kiosk automatically translates all the content on the fly into the choosen language. It
does this using a SYSTRAN web service at the server side. I've written caching mechanisms so that
the same text isn't translated multiple times, which makes everything faster.
You can view videos of the kiosk in action and learn more about the service at the police website.
Webchat
Flash, AJAX
I've written a few webchat systems over the years, the two most recent were written for different
uses. My main chat system is written in Flash, which allows for a more complex front-end and
less chance of different browsers causing problems.
The other real-time chat system I've created runs just through the browser in JavaScript, this
allows it to run on computers that don't have Flash installed.
Both systems exchange data as XML over an HTTP channel. It would be faster to use sockets and
exchange data in a less bulky format, but by doing things this way the system will work
through any firewall configuration.
For the Flash based solution I've written a question queuing system that allows the chat moderator
to pick up questions from the main chat and add them to a queue of questions. We've found this
makes the chat run more smoothly as everyone can see when their question will be answered.
The Flash based solution is used for the public webchats
we run regularly at work.
|
|
|
|
|
|
|
|
|