On this page, you will find examples of work completed as part of my degree. While the degree included a wide variety of modules, this page showcases the highlights, including my dissertation and award winning second year project.
For work completed outside of formal education, see this page.
Below is a summary of the modules studied during my degree.
|Programming for Computer Scientists||An introduction to programming techniques, using Java. Project involved teaching a robot to navigate through a maze, and storing the learned route.|
|Design of Information Structures||In depth look at data structures in Java. Creation of a twitter style application, using various data structures to store and recall information.|
|Mathematics for Computer Scientists 1||Discreet mathematics, including topics such as sets, relations, functions, induction, graphs and probability.|
|Mathematics for Computer Scientists 2||Continuous mathematics, including topics such as integers, vectors, matrices, determinants, sequences and differential equations.|
|Computer Organisation and Architecture||Prototyped and designed circuits using discreet logic gates. Learned about the core concepts underpinning the operation of a microprocessor, writing assembly code to control simple circuits. Final project required a robot, programmed in C, to follow a line using a variety of sensors.|
|Professional Skills||Covered a wide range of legal and ethical topics relating to computing. Used bash scripting to create a variety of small applications. Completed an HTML based lab diary documenting completed work.|
|Computer Security||Learned encryption techniques such as Diffie-Hellman to secure communications. Looked at Linux permissions, using Linux ACL and AppArmour to secure a system.|
|Operating Systems & Networks||Investigated the architecture of a multi-tasked operating system, including the scheduler and memory management processes. Learned the various layers of the networking stack, and how they are incorporated into an operating system. Created an application to scan a network for malicious activity, such as ARP poisioning and XMAS scanning. Application was fully threaded for increased performance, and compiled using GCC with no warnings.|
|Artificial Intelligence||Looked at the use of various search types in AI simulations. This included algorithms such as minimax, Bayesian networks, descision trees and constraint graphs. Investigated the challenges facing AI designers, the moral challenges, and acceptance of AI in society.|
|Functional Programming||Learned the uses of programming in a functional manner, and how this can be used to complement traditional programming methodologies. Created an application, using Haskell, to parse and lex an input as a piece of code. The application checked conformity with a defined standard, and if valid, evaluated the result.|
|Advanced Computer Architecture||Optimised a physics simulation using SSE and Intel intrinsics. In-depth look at several aspecps of computer hardware, such as cache coherancy, pipelining and disk layout and structure. Investigated the requirements driving the design and development of computer architecture.|
|Database Systems||Optimised a physics simulation using SSE and Intel intrinsics. In-depth look at several aspecps of computer hardware, such as cache coherancy, pipelining and disk layout and structure.|
|Formal Languages||State transition diagrams, DFAs and NFAs, turing machines, finite automata.|
|Algorithms||Looked at a vide variety of algorithms and their applications, including graphs, sets, forests, cycles, spanning trees, polynomial algorithms.|
|Software Engineering||Created a web-based market application to investigate trades from a simulated stock market. This application was required to perform a number of checks, and highlight any potentially malicious trades to the user. More information on this module is available below.|
|Logic and Verification||Researched the uses of predicate logic to validate complex statements, and how to apply these to programming concepts. Used Alloy to create and manipulate sets of data.|
|Mobile Robotics||Programmed a robot to navigate from one side of a maze to the other, mapping out it's path and building a map of it's environment. The robot was programmed using Java, and used a variety of algorithmic concepts to complete it's task. In additon, this module investigated the uses and advancements of robotics in society, including the moral dilemmas faced by programmers when creating such systems.|
|Computer Graphics||Created a 3D clock application using techniques such as gourad shading, OpenGL projections and texture mapping. More information on this module is available below.|
|Neural Computing||Design and structure of neural networks. Created neural networks to solve problems using Wolfram Mathematica.|
|Advanced Topics in Algorithms||Investigated several cutting edge algorithmic techniques potentially used in future to further enhance handling and processing of large amounts of data, for example, using BSP algorithms to split work evenly across multiple processing units.|
|Sensor Networks and Mobile Data Communications||Used the NS-3 network simulator to create communication systems to suit a variety of different scenarios. Looked at the network stack, including routing protocols and tables. Worked with various propagation models and looked at the uses for each.|
|Advanced Databases||Looked at advanced database techniques, to create large and stable database structured. Worked with Hadoop to use distributed computing to spread large databases and increase system responsiveness. Used XML as an alternative to typical database storage solutions, providing an interface to create and query databases that use XML.|
Uni Dissertation (Java, C & SQL)
My University dissertation centred around the Internet of Things (IoT). The project used a mix of Java (including Swing & JDBC libraries) to create a network management application, C to produce a variety of simulated devices to run inside the Cooja network, and SQL to store information gathered from networked devices.
The simulated network is based on RPL routing, and 6LoWPAN.
Sensors (temperature, light, humidity), and cameras are simulated within the network, using C and the Cooja API. Some devices contain more than one input, in order to better simulate a real world network. Lightweight web servers run on each device, presenting data as a web page.
The benefit of this method is that devices connected to the same network can access this data, to read and display it in real time.
Using network bridging, the Java IoT Network Manager application is able to connect to the virtual network, and find devices presenting themselves as IoT devices. A user is able to add them to the management interface, and see information about the device such as sensor/input information and battery level. Device setup is transparent, overcoming the complexities associated with adding devices to a network which could hinder IoT adoption.
The user is able to control the storage of information from devices on the network. When a device is active, it is queried at a user-defined interval (10 seconds by default). Data is retrieved from the device, parsed and stored in an SQL database, running on XAMPP.
This system is designed to require as little user interaction as possible. Data is structured to inform the application of the data type (e.g. temperature). This information is used to store the data in the relevant SQL table, or create a table if one doesn't exist.
The system also includes basic querying, to tie information together (for example, retrieving temperature from a specific sensor within 5 seconds of a picture being received). This demonstrates a basic example of how the collected data can be used.
Captio - Award Winning Second Year Project for Deutsche Bank (Java, SQL & HTML)
My second year software engineering project, set by German banking giant Deutsche Bank, involved developing an application to analyse trades and communication in a simulated stock market environment, and flag up anything suspicious. The system must notify the user of any potential issues, for workers to investigate further.
The application uses a Java back-end to connect to the simulated market, read incoming data, and begin analysis. The raw incoming data is stored in an SQL table. There is a second table to store instances of communication between traders, which comes from a second data source. The system is designed for these two events to run simultaneously, and threading is used to increase performance.
Data is checked for a variety of malicious activity, including churning, trades above the asking price, and high activity in certain stocks/sectors. This again runs in a separate thread for improved performance. Once data is flagged up by the Java back-end, it is stored in a separate table, storing information on the time, warning type, and the trades that triggered the warning.
A web-based interface refreshes warning data from the database every 5 seconds (user configurable), and presents them as a notification to the user.
The user is then able to open a pop-up box which contains the specific information relating to the warning, as well as checking for any communication between the traders involved (if relevant to the warning type). A user can also dismiss a warning, which then updates the entry in the database.
My role in the project was to manage the SQL database, as well as its connection with the Java back-end.
Connections to the database are managed using JDBC, with a thread pool implemented to reduce overheads caused by opening an closing database connections.
Some analysis required querying previously stored data, which is another aspect I was tasked with.
Throughout the project, good communication was necessary to keep all parts of the application in sync. In particular, the web interface had very close links to the database, and the way data in the database was structured. Regular meetings and the use of Telegram ensured the project progressed smoothly.
Code was shared between the group using GitHub, which provided easy access to the latest version of the code. We used an agile development plan for this project, as we felt it was the best fit given the short development time available.
The final product (Captio) was presented and demonstrated live in front of Deutsche Bank representatives in a Dragons Den style contest. Captio was well received, and was an award winning entry.
Clock App (OpenGL & C++)
This clock application was created as a coursework project for a 'computer graphics' module. The clock is written using C++ and OpenGL.
The clock has a variety of features, including both analogue and digital faces. Analogue mode features texture mapping of the clock face and selection of hand styles. Digital mode has a choice of 12/24hr display, full segmented display with a selection of segment colours, and a 3D appearance.
Both displays include stopwatch mode, with buttons to change between modes and control the stopwatch timer. The date can be displayed on either clock in addition to the time, and the second display can be toggled to the users preference.
The application uses several OpenGL capabilities. Vertex matrices and transformations are used to render the analogue clock hands, digital segments, and fonts. Lighting and materials are used to provide a more realistic appearance.
More advanced features include the use of texture mapping to allow customisation of the analogue clock face. To allow buttons on each clock face to be clickable, gluUnproject was used to convert the window coordinates of the mouse click to world coordinates.
The clock received a coursework score of 90%.