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.