Navigation


Stuart Kingston

Online CV and additional employment information


IT & Computing Skills

Through several years of study and through personal interest, I have developed a broad range of IT and computational skills, including use of several operating systems, applications and programming languages.

Operating Systems

My experience with Operating Systems is reasonably comprehensive, and I am familiar with MS-DOS, Windows 3.1, Windows 95, Windows 98, Windows ME, Windows NT and Windows 2000. I have a little experience with Windows XP.

I have also used and administered several Linux PCs. My distribution of choice is Slackware, although I have had experience with other distributions including Redhat, Debian and Mandrake. I have used, but not yet administered FreeBSD.

Networking

Through my job at University, my summer work experience, and also through playing network games with friends, I have acquired a good practical knowledge of networking and network applications. This knowledge covers the physical aspects of networking (such as cabling, network interface cards, etc.) as well as client and server applications, routing and fireawalling, and network programming (generally using sockets).

I have had a lot of experience with network troubleshooting, particularly with Windows based systems (Linux systems less frequently require troubleshooting!). Many of the problems I have solved had previously never occured, nor have they occured since, so such troubleshooting has required me to be methodical and analytical.

Finally, as with most computing students, I have used the Internet extensively, including the world-wide web, e-mail applications, shell applications and file transfer applications. I also have a good knowledge of HTML alongside CGI programming, Javascript and Server-Side Includes.

Programming Languages

My very first experience with programming was with "Mallard BASIC" on an Amstrad PCW8256, however I have since extended both the range of programming languages, and my programming skill. When I bought my first PC, I began programming in QBasic, and acquiring a knowledge of many algorithms and programming techniques. From here, I progressed into Visual Basic in order to develop my A-Level Computing project.

During my time at University, I have learnt to program with many other languages and their extensions, including:

  • C
  • C++
  • Visual C++ (and Visual C++ with MFC)
  • Java (and Javascript)
  • Perl (including in a CGI environment)
  • SML
  • MLj (a variant of SML that allows the programmer to generate Java classes)
  • SQL

Further to this, I have experience with Handel-C, which is a C-like hardware description language used to program FPGAs (Field-Programmable Gate Arrays).

Projects

Here I have provided some details of the projects I have recently undertaken as part of my University course.

3rd Year Project

This project required me to develop a cryptographic library in a functional programming language. Cryptography is a popular discussion topic where the Internet is concerned, however the algorithms behind it can be quite complex, and therefore a library was proposed to make encryption possible for programmers with no knowledge of its inner workings. Furthermore, cryptography is a very mathematical application, making it ideal for implementation in a functional language.

By the end of the project I had developed a library capable of performing public-key encryption and decryption (including key generation), plus one-way hashing and digital signatures. The basis for the library was the RSA algorithm. To make the library more accessible to programmers (and thus more useful) I cross-compiled it into Java bytecode using MLj, and wrote some Java wrapper classes. I then demonstrated the project with some simple Java applications, including a network chat program.

4th Year Project

The DEEP3 project was centred around the viability of software engineers developing applications that are partially implemented in hardware. Such a task provides scope to substantially increase the performance of suitable applications and reduce the development time and costs. The benefits of performance increases are to reduce the time taken to solve a computationally complex problem, and to make processing complex problems on modestly powered systems possible. As this is a comparatively new area of computer science the task was not trivial by any means.

The project assessed two design routes to achieve the same goal - to have a working program running partially or fully on the FPGA hardware. The assessment aimed to show the strengths and weaknesses of each approach and highlight problems encountered in each case. One route implemented an Application Specific Instruction set Processor (ASIP) design on the FPGA, the other implemented a standard hardware/software partitioning design. The first implemented a processor designed and optimised for that application whilst the second effectively partitioned the application and moved certain functions into hardware.

Both routes used the Handel-C language and the DK1 IDE from Celoxica, giving neither route a specific advantage in the tools used for development. An application was developed for implementation by both routes. The application was a combination of PGP (Pretty Good Privacy cryptography software), LAME and MAD (an MP3 encoder and an MP3 decoder). This combination was deemed to give two different, non-trivial computational challenges.

The partitioning design route showed mixed performance increases, whilst the ASIP proved too complex to be fully implemented in the alloted time. Although this meant direct comparisons between the two routes were limited, comparison is not irrelevant.

The partitioning route is better for a rapid application development strategy, where code reuse is not an issue. The partitioning route was developed comparatively quicker than the ASIP, and was more suited to a modular development strategy. In comparison, the ASIP required more knowledge to implement and represents a larger investment of time and effort. The reward for this investment is a reusable solution that can be quickly tailored to new applications by choosing the instruction set and recompiling.

Please e-mail me if you require any further information on this project.


Contact

Employment & Job Offers Comments & Questions Technical Problems

Links

Main

©2001 Stuart Kingston. All rights (and lefts) reserved.
Last modified: Wednesday, 04-Sep-2002 23:08:05 UTC