Click the menu button to view options.
Welcome to my website portfolio, where I can talk about myself, and show off the work that I have created.
I've been writing programs and teaching myself programming languages since 2008. Before then I was part of a team as a 3D and 2D graphic designer. My skill in understanding logic and computer language has increased exponentially since then.
I am fluent in:
A good understanding of:
And I have minor understanding of:
Elsewhere on this website through the menu, I have shown off some of my work and websites, with a description about some of the work, and problems I have overcome.
I am current taking a Software Engineering course at Manchester Metropolitan University, with a placement year in industry.
If you wish to contact me, I can be communicated by any of the following protocols:
In 2017, I took on a paid client task of a website front end update. Their website uses WordPress to deliver content to their viewers, but it was sorely in need of an update. I created various systems which allowed viewers to quickly and easily see content provided, and also allow them to quickly donate to their cause.
The process I had to undertake in doing this was creating an ERD of their database (which included a payment system database, to get data about fundraisers), and display it in a suitable and stylish manner. The entire website is written in PHP, and talks to various sections of the database to get data to work with.
The visual style of the website was done by a designer who was part of their team. They created a single image of how the website should look, and I recreated this image as accurately as possible using the tools available with the latest in HTML 5 and CSS 3. Assets were provided by the artist, but all code was written by me.
A full client brief and contract was established before taking on this project, with the understanding that a short support period was in place due to my education needs. The entire website took four weeks to create, two of which were negotiations and design.
During my time in college in 2015, I was given a 5 week assignment which covered the basics of HTML and CSS, but mostly covered CSS, and why developers should separate the two. The website in the main frame is my project submission. Due to my previous knowledge with HTML and CSS, I flew through this project, completing it within 2 weeks of being given the project.
The assignment was designed to demonstrate my practical and actual knowledge of HTML and CSS. The tutor decided to combine the two, making a website from scratch that demonstrates my knowledge. Due to the speed of completion that I had with this project, I often spent a lot of the in-class time reserved for completing it helping others with their learning of the languages and any particular issues they were having.
My results for this assignment are 2 Distinctions and 1 Merit. I was told that my explination of separating CSS structure from styling did not meet the standard required, but overall it was considered an impressive result. I am pleased with the result I gained for this, and I am pleased with its functionality.
HawkServ was a development I undertook to update and improve on an open sourced Minecraft Classic server software. The original developers stopped their development, and released the code, of which I then downloaded and slowly started to update and improve. The website I wrote still runs today, although I don't develop the software anymore, it's available for public download. I also include a detailed changelog, and feature list on this page. The entire website was written by myself, except for the forums section which is PHPBB, however I've modified it to fit the theme of the website.
Some of the most notable changes is the inclusion of thread locking when saving maps. There was an issue where every user would get an error when placing a block, and would persist until the server was restarted. I eventually corellated it to only happen during a map save, and the maps were saved every 10 minutes. I eventually found that during peak user times, if a user placed or destroyed a block during a map save, it would reject all future block modifications. I found this is related to two instructions within the thread. To resolve, I added a block modification queue during map save, and thread locking to stop any overriding actions from causing the issue again.
In addition to this, I added a feature that no other server had, which was a rank requirement system. The server's userbase is placed into ranks of which you can be promoted up. Each rank comes with a good amount of abilities and additional commands to use. However, everyone kept asking about the ranks, and what they needed to do to get the promotion. I added the /getrank system, which allows the administrator to add custom requirements for promotion, however still keep the promotion manual (meeting the requirements doesn't necessarily mean automatic promotion). This was developed before I took over in developing HawkServ, however it was hard coded. I since updated it to include a new user interface to make it much easier to add new requirements, even without a restart.
There was also a large issue before I took over programming of users being able to manipulate other people who have a higher rank. For example, someone with an Operator rank would be able to mute someone with an Administrator rank. I added checks during command execution to prevent this from happening. If your rank's permission is less than or the same as permission of the target user, reject the command and explain why.
HawkServ is now home to the running of my Minecraft community under the same name. I no longer run Minecraft Classic anymore due to Mojang's dismissal of the version, and now only run for the paid for version of the game. The tabs on the page beside this explain a bit about HawkServ software, and then about the Minecraft Server we currently run, including an interactive map where you can view the world that the users have created.
Back in 2014, I was introduced to a card game called Magic: The Gathering. The game plays similarly to other competitive card games. You have your own deck, which consists of resources, characters, items and abilities. Items, abilities and characters require a resource to be spent on them. Resources come in the form of Land, which you spend per round to be able to cast other cards. Those cards are then used to hinder your opponent, or boost yourself or your characters.
Over the year or so I had been playing, I had developed quite a collection. I decided to create my own web page which lists all of the cards I have available. The storage method is flat file, but all of the card data is read from a very large JSON file. The system runs on PHP, which flows through a loop and finds data for the cards I have obtained, and will then provide data relating to them, which include pictures of the card themselves (provided by Wizards of the Coast), and icons for the edition and set, in addition to card cost. The service I used offered a price worth for the cards, however that service has stopped offering the prices.
This list is mostly used by myself as a form of keeping, and by friends when trading or selling cards can come into question. The list is only a select few of the hundreds of cards I have collected though, and the entire system is not complete and needs to be re-worked.
This was my first use of AJAX asyncronous requests too. Only available to myself, I have a system in place with a form. You type in part of the card's name, and it'll return back all of the cards available with that name, including other data. From there I'll be able to pick which card it is, and add it to the list, however this latter feature is not implemented yet.
In the virtual world of Second Life, I had developed a vendor system which would display information about user made products, and allow other users to purchase those products. The system originally started where the products themselves were stored in the vendor, however trying to keep all vendors's internal products up to date became cumbersome. I swapped the system so entire vendor became indepenant. Purchase requests were sent to a product server elsewhere in the world, and that server would then send the product to the user who purchased it. This system worked very well, it kept all of the products in one place, and allowed me to implement an update server (which would update the products automatically), and a records server, which would store all purchase records.
The record server became unreliable. LSL, the scripting language in Second Life didn't allow you to write to files at all, and so all records were stored in volitile RAM. This meant that in the event of a script reset, or a server error, the entire records would be lost. Fortunately, LSL supports HTTP Requests, and will allow me to provide URI variables to a webserver. I developed a system which would read the data from the URI variables, and store the records into a MySQL database on the same server. This means that no records would be lost, and everything would be kept. It would also allow me to remake the vendors to request the UUID key of the item server directly from the database. UUID keys are unique keys, and are used for object-object communication, however they are changed if the object is picked up and dropped down again, meaning the script in each vendor (of which there were several) would have needed to be updated. Now, the item server will send requests to my web server to update its key, and the vendors will request that key when a purchase is made.
This was my first true use of PHP and MySQL, and it works without fault. It will include some exception handling too, for example if not all data is available, or if some variables are incorrect. For the times that my web server is offline too, the vendors will attempt to use the last UUID key it got, and the item server will temporarily store purchases made until it can make the request to update the database, making it 100% reliable.
This page will not provide anything useful, the contents here are designed to be read by the LSL scripts in-world, however I may develop an interface here, or show examples of requests and their expected results.