Jordan Bonser
  • Home
  • CV
  • University Work
    • Second Year Work >
      • Top-Down Shooter
    • Third Year Work >
      • Terrain Analysis Project >
        • Terrain Analysis Tool
        • Game Demonstration
      • Post Processing
      • Android Application - Sports Centre
  • Projects
    • Unity Development >
      • Lerpz Tutorial
      • Dare to be Digital Entry - "Lit"
      • Unity Game
    • Geometry Instancing
    • Road to Eldorado
    • Level Editor
    • OpenGL Work
    • JBEngine
  • Blog
  • Tutorials
    • Flask Session Timeout

Development Blog

If only I had more time...

1/3/2018

0 Comments

 
As always, when I wrote my last post I was lucky enough to have plenty of time on my hands. Recently however work has been some what manic trying to ensure that our team meets the delivery date for our new feature, which has had a knock on effect with my own projects.

I'm hoping to get back into this CMake work and really revive the JBEngine project but until work lets up I don't think that's going to happen. I'm simply writing this post to try and keep this all at the forefront of my brain. I really don't want my motivation to slip on this again!

​Thanks
0 Comments

Back to it... CMake again!

27/1/2018

0 Comments

 
So I've decided to revive the JBEngine Project. I gave it up a while ago due to lack of motivation when trying to make it cross platform. The main reason for that was the steep learning curve for using CMake and generally having no real milestones for a very long time. The project was in a state of failing compilation for so long that I ended up giving up. So how am I going to be able to motivate myself this time?

Agile, and how it's effected me

So being a Scrum Master at work for the past work or so I've found out how important it is to break tasks down into small manageable goals/stories. In doing this I will be able to keep myself motivated by ticking things off in my task tracking application. There are still going to be a few problems getting started though.

Too many changes!

So during my development almost a year or so ago I had my project in a state where there were many files edited/added such as many CMake files and lots of changes for making the source code cross-platform. Due to my frantic approach at trying to get the project fully working I now have multiple machines with various files edited with no way of knowing which are required, which aren't working correctly and which I need to just get rid of.

Step by Step Plan

I'm going to take things step by step now, just to get the project in a clean state before making any major changes.
  • I need to figure out which source code changes are really required and get them checked in.
  • I then need to figure out which of my CMakeLists actually work and get the correct ones checked in.
  • I will then delete anything else that is not required.

I want 'git status' to tell me that my repo is completely clean before I even consider making any new changes.


That's all for this time,
​Thanks
0 Comments

Scrum Master: Learning to Multi-Task

14/6/2017

0 Comments

 
The project I am scrum master for has recently begun the majority of its testing. Although it would have been much better to perform the testing as part of each of the stories, our project had two dependencies for the input into our functionality meaning we opted mostly for unit testing as verification of our stories. Due to this the majority of the functional testing is being performed at the end of the development cycle, meaning it has actually been more of a traditional waterfall development cycle. This has brought me some interesting problems to solve.

Testing

​Waterfall Testing Process​

Before we adopted a more agile approach to the development lifecycle the developers would implement all the functionality and then a "Tester" would be brought in at towards the end to analyse the design documents and create a "Test Plan" for the functionality. They would be then be the "Test Lead" for that plan. The Test Lead would allocate all the testing resources, follow up on defects found and ensure the development team is aware of them.

Testing Process for Our Project

Like I was saying earlier, our project is doing a more waterfall method of testing, the main difference is that we don't have a test lead to create the test plan or track defects or check in with how the testing is going. This is the reason I'm struggling to juggle development responsibilities with Scrum Master and essentially Test Lead responsibilities as well.

How I'm Tackling It

There are a number of things I'm doing to try and manage my time better, they are:
  • ​Timebox Tasks
  • Use a Daily To Do List
  • Track Non Development Tasks as Work Items

Timeboxing

So I sought out some advice from my manager and he told me that I should try and timebox tasks. By doing that none of my responsibilities start lacking in favour of any other. This is difficult for me as I always favour development tasks as it feels like I'm actually "getting stuff done".

Daily To Do List

I decided to create a "Daily To Do List" this involves my Scrum Master and Test Lead jobs i.e.:
  • ​Check for any new Defects
  • Check Completed Tests from previous day
  • Alter Test Schedule based on blocking defects or Tests that were not run from the previous day
By doing this it gives me a clear goal for each of the items reducing the chance that I will forget to do something. On any one day I have to have at least done my daily to do list for me to be happy with that days work.

Non-Dev Task Tracking

0 Comments

Scrum Master: Wall of Work

27/2/2017

0 Comments

 
As mentioned in a previous post I have been given the role of Scrum Master at work for a specific feature that we are going to deliver.

As anyone who takes on a new position I wanted to make an impact and try out some different approaches to enable the team to work as efficiently as possible.

There are a series of videos that are available through work about agile development. One of the videos featured "Walls of work". There were a few different types of walls of work, such as:
  • ​Release Wall
  • Iteration Wall

​I thought I would give it a try and see how well it works.

Iteration Wall

I decided that I would start using an Iteration Wall to track our progress and easily visualise the tasks that need doing for each story.

The layout for an Iteration Wall is as follows:
Iteration Wall Example
At the start of the iteration you would create post-it notes for all the tasks for a story and put them in the not started section. As people start working on particular tasks you would move them across and eventually into the completed section.

As new tasks came up they would be written down and added to the iteration wall. It is a good way for visualising all the tasks that you are focusing on for the iteration and is quite rewarding when you can get up and move the post-its across.

Fail Fast!

So we have given this Iteration Wall a good go in this last iteration but we came to the conclusion that it wasn't really working for us.

Our scrum team all sit in the same area and the wall was placed where everyone could see it, which was great for tracking. The issue is that we go to a separate meeting room to hold our daily scrums as there are other teams sharing our area as well. I think the iteration wall would have been much more effective if we could stand in front of it at the scrum and update/add things during the scrum.

As we didn't really have the opportunity to do this then the wall often became out of date and then required extra work to update it.

Cheers
0 Comments

IBM: Manchester Lab Renovations

15/9/2016

0 Comments

 
Recently I got together with another 6 people in our Lab to come up with some fun ways to make our working space more exciting. We didn't really have a budget before hand so we wanted to keep the improvements as cheap as possible.

One of the main things we wanted to improve was the meeting rooms, as they had become quite dull after the years.

Previous Meeting Room Look

Picture
Old meeting room style
We decided we would try and funk them up a bit by adding some colour to the walls and re-using some of the furniture we have available in the Lab.

The New Look!

We are all really impressed with the final result!

We managed to buy a couple of things for the room, such as the bean bags and new coloured bins. The new T.V's and a webcam were put in the rooms to allow for better collaborations and for doing video conferencing.

Fun and Games

We decided to add a few extra fun bits to the office for the employees when they are on their lunch break relaxing or just need to blow off some steam.
Everyone in the Lab is really impressed with the transformation and it really does make being at work more enjoyable.

I'm hoping there will be many more renovations to come in the future!
0 Comments

IBM: Move to the Flash Team

3/8/2016

0 Comments

 
At work I have recently moved to a new team, within the office. My work on the Python Flask application had come to an end, so I needed a new challenge to get stuck into.

The Team

The team I'm moving to has 8-10 developers, most of which are located in the Mnachester Lab. This will be quite refreshing to have my team around me. As with my previous project it did cause some bottle necks at times working with a 5 hour time difference.

The team is in charge of the development for the FlashSytem v9000. This product requires some python development which is why I pushed for this team. I want to further develop my python skills, but it will also give me some experience with our main product, as it uses that for most of the heavy lifting i.e.Storage Virtualisation and the IO Stack.

The Project

I can't really talk about the project that I will be working on but I am extremely excited as it will require a lot of design work to get stuck into and really push me to improve my python skills. I am hoping I am going to be able to take charge of at least one major part of the project to carry on improving as a lead developer. 

All in all, I think this move is going to be a positive one!
0 Comments

Work Hackathon: 30th June

12/7/2016

0 Comments

 
At work I recently helped organise a Hackathon for the Manchester IBM Lab. I wanted to take some time and do a retrospective of the projects that my team worked on. Our team consisted of Toby Fleming, Manuel Cantu Reinhard and myself. We ended up doing two projects, one which was more of an electronics project and the other which was a software development project. 

GDI (Graphical DNS/DHCP Interface)

Our team created a web application to allow IBMers to add hardware to the lab infrastructure with DNS/DHCP configuration. Prior to the Hackathon a lot of preliminary work was put in to create a git repo, with a Vagrant/VirtualBox VM and Ansible provisioning to setup the development environment. This allowed our team to get straight to work on the application which would have been unachievable without this preliminary setup. The application itself was a Flask Python application. The front end had Flat UI/Bootstrap CSS with some LESS alterations to adjust the look and feel. We also used Javascript to allow some dynamic content addition to the forms.

This project isn't quite as exciting from a visual point of view as our second project, so I will just get on to talking about that.

DaaS (Doughnuts-as-a-Service)

We have a doughnut rota at our office that means every Friday whoever is down for that week has to go and buy some Krispy-Kreme doughnuts for the lab. The steps to do this are:
  1. Go and buy the Doughnuts.
  2. Bring the Doughnuts to the kitchen.
  3. Send out an e-mail to let everyone know that they have arrived.
We thought we could do better than this so we came up with DaaS!

We first came up with the idea that when any sugary treat is delivered to the kitchen there should be a way to instantly let everyone know that they have arrived. Nobody wants to be waiting an extra ten minutes for someone to get to their desk and compose an e-mail to be informed of doughnut arrival.

Getting Started....

We set off to work hooking up the raspberry pi with the flick switch and "Big red button" that we had ordered. At various points through the day we stopped to discuss design decisions and any problems with a whiteboard session.
Whiteboard Session
state machine, sql statements and generator expressions
Picture
Toby and Manuel hard at work
After hooking up the electronics and doing some simple tests we started working on the implementation. We used a simple python GPIO library for interfacing with the flick switch and button.

The Final Product

Picture
So here is what it looks like fully working with the switch activated(obviously the Pi goes inside the box). I'm actually really proud of this as it was a pretty cool project to work on.

Thanks.
0 Comments

Why iOS's New App Store Subscription Revenue Model is Great News for Indie Developers?

9/6/2016

1 Comment

 
​A pre-WWDC announcement has been made by Apple to inform of a new app store revenue model, but how does this effect indie developers?

​The New Revenue Model

This new model is an extremely positive change for both developers and users if done properly. The model allows for subscription based revenue with the a 70/30 split in the first year moving to a 85/15 split if a user is still subscribed to the app after a year. 

Problems with the Current Revenue Model

The current revenue model is a 70/30 split between developer and Apple, with the main sources of income being:
  • Paid app
  • Free app with Adverts
  • Free app with in-app purchases

Paid Apps

​When the app store was first released the paid app was the most obvious approach as that is how software has been sold for years. The main problem with this is that nobody wants to pay £2.99 for a game that might be fun. The risk to a user is just too high especially when you combine this with developers that abuse this risk by saturating the market with low quality games as a get rich quick scheme. Even if it is a quality game, a user may not know whether they will actually like the game which is why the other approaches spawned.

​Free apps with Adverts

This approach was often used to allow a developer to get there app to the widest audience. If all users could use the game without paying then the barrier for entry is non-existent. The problem with this is that due to low screen real-estate these apps caused frustration. This approach was often used in combination with paid apps but there was a difficult balance between how much you should give for free. If you give too much then there is no reason to buy the paid version. If you give not enough then the user will just be frustrated and not bother with the app at all.

​Free apps with in-app purchases

​This approach has become much more popular over recent years as a way of keeping the barrier for entry down but also having a way of gaining revenue. The problem from a development point of view is that there is a risk in that the game would need to be such a high quality to make users want to buy additional items in the game to further their progress. This often discouraged indie developers from this approach and was left to the large development studios that had the time and resources to ensure that high quality.

How will the Subscription Model Solve these Problems?

The advantages that I'm going to talk about are reliant on Apple implementing the model to allow:
  • low subscriptions i.e. as little as 10p, 5p
  • users to freely end the subscription on a monthly basis by uninstalling the app i.e. not be contracted to pay the subscription for 12 months.
​As a user I believe that this new revenue model will essentially create games of a much higher quality. Indie developers will now have an incentive and a means to fund the on-going work to create content for a game.

Indie developers will also have less risk when coming up with game ideas. A cool idea for a game or a unique mechanic can be released into the wild with a few levels to gather user feedback in a similar way to how Beta's work.

The users will be more inclined to try a game if they can potentially pay just a low cost one month subscription to try it out. If this idea  takes off then more content can easily be created without the developer having to staple on some annoying revenue scheme such as in-app purchases. If it doesn't gain popularity then the developer can move on without having invested too much time.

Users can play a new game without having to put up with any annoying adverts or in the knowledge that they will never be able to complete it without buying something from an in-app store. This will allow them to actually be immersed in the game in the way the developer originally wanted.

To summarise I believe this new model will support creativity and give reassurance to users and developers:
  • Users will be able to try apps out without fear of being ripped off.
  • Developers can create apps without the fear of not being rewarded for their time and effort.

I believe I would actually consider becoming an iOS developer if this subscription is done the way I hope.

Cheers
1 Comment

CMake: Compiling Libraries step by step

8/6/2016

0 Comments

 
So for a while now I've been trying to get the JBEngine cross compiling using CMake. I started this off by creating cross platform versions of the most simple libraries first, Maths and Sound. This was easy because they had very few dependencies and hardly and source code.
I have currently managed to build all the libraries, which are:
  • ​Maths
  • Sound
  • Networking
  • Physics
  • ​Renderer
  • Awesomium/GUI
  • JBEngine
When I have now come to put all this together and compile the Space Invaders executable it has become a nightmare.

​There are just too many errors!

Taking a step back

To overcome the sheer amount of issues I have decided to create small test applications with minimal parts of the JBEngine libraries. That way I can narrow down issues, to specific libraries. This is something I had done a while back to check that the Sound library worked. I created an application that loads one sound and plays it on repeat.
Last night I found a tutorial online that uses CMake with glfw, glew and assimp so I managed to get those working nicely. Here is a list of test applications I will make in order:
  • ​Window Creation (openGL, glfw, glew)
  • Window with fullscreen texture (SOIL)
  • Window with single loaded mesh (assimp)
For now this will do, as I'm not sure exactly which libraries will cause the problems.

​I will be separating out the window creation into another library as that seems to make sense. The JBEngine library has become far too bloated, and it will make these test applications easier to create.

Finally I am hoping that by building these test applications, not only will I create a better architecture but I will also keep motivation high. Each little test application can be thought of as a milestone which will be rewarding on completion.

Thanks :)
0 Comments

Basic Flask Session Timeout on Inactivity

22/5/2016

15 Comments

 
I am going to give a small example about how to get session timeout to work for Flask while using the Flask-Login extension.

I have read a few stack overflow posts that show how to do this in pieces but I wanted to summarise this into one example.

Here is the @app.before_request function that will allow you to have session timeout

import datetime
import flask
import flask_login


@app.before_request
def before_request():
    flask.session.permanent = True
    app.permanent_session_lifetime = datetime.timedelta(minutes=20)
    flask.session.modified = True
    flask.g.user = flask_login.current_user

The flask.session.premanent flag and the app.permanent_session_lifetime allow Flask to know that you want the session to expire. If left with only these two then the session will expire every 20 minutes regardless of whether the user has been active. Realistically you would want the session to expire after 20 minutes of inactivity, which is what the flask.session.modified flag is for. Each time there is a request the flag gets set to True which effectively resets the session timeout timer. The final line retrieves the logged in user from flask_login and sets the Flask global user so that it can be used by the Jinja templates.

As I said that this was to be used with the Flask-Login extension I wanted to point out something that could potentially catch you out. Flask-Login has a "remember me" functionality that is set at login time, the use of this functionality can mess up the session timeout and make it appear as though it does not work. To avoid this you need to look at the login code and ensure that the remember flag is not set to True:

flask_login.login_user(user, remember=False)

If you want to use the "remember me" functionality then you may need to look into ensuring that the remember me cookie duration is changed but that is out of the scope of this example.

Hope that helps,
​Thanks
15 Comments

Web Applications and Leading a Team

7/5/2016

0 Comments

 
Okay so it's been a while since my last post and I was going to say that the reasons why I've not been doing anything is because I've been busy at work. While this is true I thought I would take this blog post to be more constructive and delve into what I've been learning/developing whilst at work.

The Application Design

At work I have been the lead developer for a small web application that is going to be used internally to help customer support. I have been responsible for creating the design document, discussing with other developers/stakeholders to develop the requirements and iterate over the design to come to a final solution.

Initial Development

In the early stages of the project I was a sole developer working on the application, I chose Flask (a Python web micro-framework) as the tool for the job. Flask is a great tool for creating web applications, as it takes a lot of the complexities away whilst not being as all encompassing as Django.

As Flask is a micro-framework it has a vast number of extensions that allow you to add extra pieces of useful functionality into your web application. Here are a list of some of the extensions I have used:
  • Flask-SQLAlchemy (provides better integration of SQLAlchemy (a Python DB Abstraction Layer))
  • Flask-Login (provides user based logins and also deals with session management)
  • Flask-Uploads (provides easier file upload functionality)

As the project started to take shape I was given some extra development resources that I would need to lead and give direction to so the project could progress. 

Team Leading

Looking back I didn't do very well as a team leader at the very beginning of the project. I had various problems early on which I now know ways in which to deal with them:

Problem 1: Communication/Lack of Direction

Initially I didn't give enough direction, forgetting that they hadn't been involved in the early development and didn't understand the reasons that some of the design decisions were made.

This lack of direction was made much worse because I was mainly communicating via e-mail or Instant messaging. This ended up with a lot of back and forth and a lot of frustration on both sides.

​After getting some guidance from my manager I decided to set up regular conference calls to actually talk to my teammates in Pune and this ironed out a lot of the issues and also freed up time to actually get some development done.

Problem 2: Python Experience/Development Guidelines

I decided to use Python for the development as there was a lot of other Python developers in the lab which would allow me to seek guidance when I needed it. I didn't take into account that other developers would be working on the project and that they might not have Python experience.

​This lack of experience from my teammates was rather difficult to overcome and there were a lot of large code reviews early on explaining exactly why we do certain things, like string formatting for example:

print "This is my string with a variable: {}".format(my_variable)

print "This is my legacy string with a variable: %d" % my_variable

These small differences along with issues with different people using different tab lengths and not using space-tabs caused the reviews to grow a lot.

After doing a few of these code reviews and also talking to my team via the regular conference calls these issues soon ironed out. I also made it mandatory that all my team must run pylint code analysis before submitting for review. In future I will ensure that all my fellow developers have a style guideline or code analysis application like pylint from the start.

Problem 3: Code Review Turnaround/Time Difference

As I was having to do so many large code reviews early on it meant that these would often take me a while to do. I started off doing these code reviews in the morning, as Pune are five and a half hours ahead of us this meant that they were already half way through their next day when I would get to doing the code reviews. 

I started doing code reviews as soon as the team had them for me, this would mean I could get it reviewed and comments back to them to address in their morning before I got to work. I would then use evenings whilst they were offline to do my own development work.

​This was only a small change but it made the team much more fluid and allowed us to get more tasks done sooner.

Conclusion

So all in all I've learnt a lot, I've now got more skills in Python, Flask and various other frameworks. What I think is more important is that I've learnt how to lead a team much better and I think any future projects would go much more smoothly now that I've learnt these lessons, even if I had to learn them the hard way. I still think I am far from a great leader but I'm a lot closer than I was before this project.

​Cheers :)
0 Comments

CMake: Changes for Linux

20/2/2016

0 Comments

 
So the past few days I've been working with CMake to try and get my some of the JBEngine Libraries running for Linux. The first thing I did was use vcxproj2cmake tool to generate the CMakeLists.txt from my already created Visual Studio Project Files. To start with I concentrated on the Maths and Sound Libraries as they were the easiest to do. Maths Libraries only requires some third party includes of glm and the Sound Library only has one library dependency on FMOD. 

Working with vcxproj2cmake

To get the tool working I ended up having to copy all it's files into the same directory as the project file. It just didn't seem to work with a path. Secondly I then had to manually change all the paths that I had entered (or Visual Studio had generated) for the include and library directories in the Visual Studio Projects. Microsoft tends to default to using "\" for directories where as Unix system use "/". Once I had done this It finally generated a CMakeLists.txt for me, but this was only the beginning!

Creating Cross-platform code

Being the naive developer that I was a few years ago I had scattered through my source code the use of the "\" for directories instead of "/". This was one of the first things I had to address. It was mostly the includes in the files so it wasn't too hard to track down. This wasn't too time consuming for the Maths and Sound libraries as there are no more that 5 files in each. Doing this for the whole JBEngine Source may be a little more tedious.

The next problem I encountered was resolved by this Stack Overflow post: Why does MSVC Let me do this. I was essentially passing an anonymous object to a function. It was a little confusing to track down as it wasn't a simple example:
​

part of the bounds header:


void Union(Bounds& bound);
void Union(vec3& v);


implementation of Bounds Union function

void Bounds::Union( Bounds& bound )
{
    Union(bound.GetMin());
    Union(bound.GetMax());
}

What you don't see here is that Bounds.GetMin() and Bounds.GetMax() do not return a reference. This means that the returned vec3 object from the functions are newly created and therefore anonymous objects. MSVC automagically resolves this in some way but g++/gcc does not do this for you. This took me a little time to figure out as I had never even had to think about this sort of thing before.

They were the only real code issues that I faced, the rest was all about learning CMake.

Learning CMake

So I started off with an already "complete" CMakeLists.txt which would work for Windows. Unfortunately this was never going to work out the box for Linux. Well at least it didn't for the Sound Library. First of all I had to get the Linux version of the FMOD Libs.

I had quite a bit of trouble getting used to how CMake works, specifically with include and library paths and also using the if(UNIX) branches for OS specific target_link_libraries. I finally managed to get CMake working and now I only had to deal with the make compilation issues.

What I hadn't realised is that fmod had changed significantly since I got the library for Windows so then I had to adapt the code to use the new library. 

Once I had managed this I then created a Test application to play a sound. So it was all quite easy I just had problems with:
  1. vcproj2cmake
  2. code issues
  3. cmake issues
  4. library compatibility issues.
  5. and then more code issues due to the new library.
It really was a breeze.

On a serious note it wasn't half as bad as I thought, and I've learnt much more about CMake. The next things I will need to look at are:
  • Adding CMake Dependencies i.e. JBEngine Library requires all the other smaller Libraries such as Sound, Maths, Renderer etc.
  • Ensuring I haven't broken anything in Visual Studio whilst messing around with the project files.
  • Looking into Visual Studio Project/Solution Generation from CMake.
0 Comments

OpenGL Vulkan and What to expect this year...

16/2/2016

0 Comments

 
So Vulkan was released today! What better reason to do a blog post, when it's been so highly anticipated for so long. I can't wait to get stuck into the API and Reference documents and start trying to throw some tech demo's together. 

I have just got hold of the SDK and had a little play around with the Demo's, I've not managed to get much done but the whole thing does look much more "DirectXy" which will likely have it's good and bad points. for example the horrendously long class/struct names. I've already seen "VkPipelineInputAssemblyStateCreateInfo" as a name and I'm sure there will be plenty longer. It will obviously have it's benefits in terms of performance but I'm not sure we will really experience that for a while. Anyway here is a quick video of me after messing with the textures a little with the cube demo:
As you can see it all looks a little messed up. The cube is spinning incredibly slow as well as I don't think it uses delta time for the rotation, so the recording application almost halted the rotation. What can you expect from a half hour mess around?

So what will I be doing this year?

It's been a while since my 2015 post-mortem and I really wanted to point out some of the things I will be concentrating on this year. I have just fully moved in to my new flat with Meg in Blackpool so that is the reason I haven't done any real work or blogged for a while. 

So this year my main focus is going to be on:
  • Getting my Space Invaders game finished off, and I mean fully polished!
  • Developing my skills in Blender.
  • Slowly making parts of the JBEngine OpenSource.
  • Trying to contribute much more to the OpenSource Community.
  • Getting stuck in to Vulkan, hopefully integrating it with the JBEngine at some point.
  • Making the JBEngine Cross Platform.
So far I've not done so well on these goals other than the last two. You can't really call a 30 minute play with the demo's "Getting stuck in" though. I have been working on getting the Maths and Sound libraries of the JBEngine to compile for linux. I started using CMake last Saturday and I really feel like I was getting somewhere. I am going to set myself a target of getting those two libraries working for Linux, and OSX in the next week or so which shouldn't be too difficult. 

Anyway that's pretty much it, oh and I did do some work with blender over the past month so here is some dev art to laugh at:
Picture
It's supposed to be a Starfish, in case you were wondering. 

​Cheers :)
0 Comments

2015 Post-Mortem and What's Next...

7/1/2016

0 Comments

 
Whilst trawling the gamedev.net developer journals for inspiration, I stumbled across a post that someone had done as a reflection of what he had achieved from the previous year and what his plan was for 2016. I thought this was an amazing idea so I'm going to do it myself. Hopefully this should give me some motivation to finish things off and also some direction with what I want to learn next. So here goes...

2015: Looking Back

​Game Project

Just looking back at my posts from last January I was at that point still developing the in's and out's of my Entity Component System. I had only just implemented Awesomium and was still working on my "Level Editor" for this amazing game I was one day going to make. If I could have given myself some advice It would have been to give up on the Level Editor and the ECS and condense my project down massively. Unfortunately I had to learn the hard way!

I managed to get the ECS working in the end and I am fairly happy with the implementation as it uses some complex patterns (CRTP, Observer) to achieve what it does. Also I learnt a lot about using templates in C++.  

The Level Editor and the original game idea I scrapped although that wasn't until June when I decided to get a fresh project and integrate the new ECS into it. I suppose I can put this down to a learning exercise.

It was August 8th when I decided to create a "Space Invaders Remake" using the new baseline JBEngine and ECS. Since then this project had come a long way and is now approaching the finishing up and polish stage. I am really impressed with the work I have done on this. Whilst working on this game I have had to re-work/refactor a lot of the physics code in JBEngine, which is something that can now be reused in future projects. 

Career and Development

I have come a very long way in terms of my career since the beginning of last year! I had just started out at Inspired Gaming and although I knew I had lot's of knowledge about programming, I still felt as though I was a junior developer. ​

Inspired Gaming​

I went through a big change in terms of adapting to a new codebase after being so used to working with Arden's monster of a codebase. Learning an application's flow and the architecture is something that only comes through practice, and working at Inspired gave me that. Some of the key skills I will take away from Inspired are:
  • Proficiency with Visual Studio
  • Better Multi-Threading Knowledge
  • Visualising Program Architecture
  • Working on a single project through Requirements/Design/Implementation/Test and Deployment
  • Working closely with Project Managers/StakeHolder and Testers.
  • Time Management​

Along with the technical skills I have developed much more socially, being able to join a new team and integrate quickly. Joining a new company is difficult but as long as you put in that extra effort at the start to socialise, it makes your job and your life much more enjoyable. I have made some great friends at Inspired and will hopefully be seeing them soon in 2016.

IBM

In June of this year I left Inspired Gaming and joined IBM. At the time I was very fearful of this decision as the role was to work as C Developer rather than C++ which I had been doing in my previous jobs. To me this felt like a step back in terms of gathering skills but I also have always wanted to work for one of the Big Blue's so I went for it. I think having one of the industry giants such as IBM on my CV couldn't hurt either.

Whilst working at IBM I have actually only done a small amount C development. Instead I pushed for the opportunity to work on a newly starting project which has required me to use python.

I have learnt a lot since being at IBM specifically more about hardware, networking, storage and virtualisation. A lot of the things I have learnt is how much of a nuisance it can be working for a massive corporation. Having company wide decisions pushed on you when it is not the correct decision for your situation. Here is a list of the technical skills I have learned since being at IBM: 
  • Learning to various Linux distributions
  • ssh'ing onto various machines and having to perform tasks using the command-line only
  • Using Eclipse
  • RTC (Rational Team Concert)
  • python, with Flask, SQLAlchemy and virtual env
  • Using Virtual Machines
  • Connecting Hardware/Server Room knowledge
  • People Management/Project Management skills
  • Program Design

The list could go on and on! The main piece of work that I have worked on at IBM I have been the lead developer on. This has required me to create a design document, providing a solution that we will then implement. I have also had to give direction to and collaborate with a team of 3-6 other developers to allow them to accomplish what is in the design.

I have once again had to integrate myself into another team, this one being now up to 80 people. This has been fairly easy as the work environment at the IBM Manchester Lab is really friendly. I have already made some great friends and feel as though I am now an integral part of the team.

​Social Life

In terms of my living arrangements I have moved flat and I am going to be moving again shortly. I moved from Manchester's Northern Quarter in February of 2015 to a flat just off Deansgate Locks. This has given me the opportunity to see more of the city. Some great bars for the summer like Duke's 92, Rain Bar, Atlas bar and many amazing restaurants.

​For the past year I have been in a relationship with Megan (Megatron). We have had some amazing experiences together already! Going for long weekend breaks to Chester, Grasmere, Windermere. A great holiday in Portugal, going to see Wicked! and a lot of hilarious nights out. I can't wait for the adventures we will be having next year!

In terms of my fitness, whilst being at IBM I've managed to maintain my enthusiasm for going to the gym, and playing squash. I now enjoy playing Table Tennis almost every day at work and playing Football on Monday nights.

Conclusion

So all in all this year has been an amazing one for my career, social life, projects and personal development. I realise this post is now pretty long so I think I will leave the "What's Next" part to be a separate post.

Happy New Year :)
0 Comments

JBEngine: Space Invaders defence post addition and some Blender work

17/12/2015

0 Comments

 
This week I got to work on creating the defence posts. I decided that I wanted to create a new model for this rather than re-using some of the boring models I've already got. I managed to find a decent "metallic spaceship tile" image from www.opengameart.org . I then had to think about exactly how I wanted to do the defence post. I wanted it to be fairly similar to the way the original worked and also had to think about how this would best work with the physics collision code. 

One idea I had was to create one model that was quite complex and intricate and then model the various levels of it's destruction based on which area was hit. I decided this would be a massive pain to create and manage the assets. 

I then thought I might just make it as simple as I can and make it look like a "spaceship-esque" wall made up of metal "bricks". This would make things much more simple in terms of the collisions as I would just destroy one brick when it was hit. This is the approach I decided to stick with, as it was a nice fit with my blender skills at the moment. 

Here is a screenshot of me trying to work out how to use blender for even this simple model:
Picture
Blender Work
So after I spent way more time than it should have done for such a simple model, I finally got to work implementing the functionality. Luckily with all the work I have already put into the Component System It was simply a case of giving the entity the correct components and subscribing to the right systems and it mostly worked through the asset loading alone. 

The only thing I did have to change was the collision filtering, I had to put in extra rules for this new "DefencePostBox" Entity. Now whenever a "DefencePostBox" is hit by a projectile they will both be destroyed. This means that even the player can accidentally destroy their own defence posts.

I'm fairly happy with the progress for the couple of hours I've worked on this tonight, here is a video of the results. (Oh I've also been messing around with the screen resolution so the enemies currently go off screen).
I would like to implement a particle system at some point for the entity and defence post destruction, as I've had to do this for some work I did at Inspired and it was pretty fun. I have managed to stop myself from doing this as I know It will not actually add anything in terms of gameplay and I want to get this game finished.

I'm not quite sure what is next on the cards but I'm really excited with the progress so far :)
0 Comments

JBEngine: Space Invaders AI Movement Speed and a few bug fixes

5/12/2015

0 Comments

 
Okay so first thing I got to work doing recently is implementing the AI Movement Speed. These utilise the Speed Component that the Enemy and the Player already has but in the AI Movement System the code now uses a timer to increase the speed of the enemies. Initially the speed ups only occur after a few seconds but the timer gets smaller so the speed increases become more frequent. 

The next thing I worked on was a few bug fixes. The player was being deleted when going to the next level. If you clicked "Esc" when waiting for the next level or when you were respawning it would crash the game out. These were easy enough fixes but the last one was a biggee and was actually still there in this video: 
So as you can see the game is coming along nicely, I changed the skybox stars texture to a much nicer one that you can see here. 

The big bug that I managed to catch out was an optimisation problem. My FPS had dropped to ~40 all the time. At first I thought It was something to do with the Entity Component System as it seemed to show up most when profiling, this then caused me to make some changes to use more efficient containers. It turned out it was actually the awesomium texture updates. I was updating the scores and lives every update. This causes a re-draw of the whole html page which is very slow! 

I managed to catch it and my FPS is way back up again now so all is well. 

Oh as an added note I downloaded blender tonight so I will be getting to work on the defence posts soon. 

Cheers :)
0 Comments

Space Invaders: AI Firing, Game State and Player Lives

1/12/2015

0 Comments

 
So motivation is really high at the moment, I guess It's because I can really feel this project progressing. I've managed to get quite a bit done in the last few days.

Player Life

​I started off dealing with the Player life and initially health as well. I then realised that Space Invaders technically doesn't have the concept of health for the player or the enemies. (You could argue that the  defense posts do but I will deal with that when I come to it). So after scrapping health I implemented the life component, fairly simple really and I am definitely getting used to the creation of new components and systems now so It didn't take long at all. I also integrated this into the Awesomium WebView so that It could be seen on the GUI.

AI Firing

​I then went on to deal with the AI Firing, I decided to break the sort of vertical lines of mobs down into a "Squad" each with their own Squad Number. So each enemy can now have a squad component and the AI Firing System is interested in this component. To decide who fires I pick one of the squads at random, then find out whichever enemy is at the front (because only the front-most enemy can shoot). This enemy then fires a bullet which has it's collision callback set to react with the player. 

I quickly moved on to game state after getting the AI Firing working. I now have a simple GameState and a GameStateChange Message. It is all really quite simple so I'm not going to bore you anymore with the details, here is the game in its current state:
I'm actually really impressed with how it is starting to look, I've already been thinking about how I can implement the sequential levels and also how to pre-generate them as well. 

What's next then: 
  • Calculating more accurate Physics Boxes and Spheres for the bullets and Enemies.(The bullets hit when they don't actually seem to be that close)
  • Look at altering the scaling of the enemies and player so that there are more enemies on screen and it is more difficult. 
  • Implement the Speed up over time functionality (Should be fairly easy, I already have an AI Movement System)
  • Looking at Implementing the defense posts to protect the player. (may need some time investing in artwork)

So there is still plenty to do but It should all take me no time at all. I'm hoping to be able to have a functionality complete game before Christmas.

Keep coding :)
0 Comments

Space Invaders: Finally back to work!

28/11/2015

0 Comments

 
So my last post was about how I had become slightly too addicted to playing games and that had taken away from me actually making them. I'm glad to say I have managed to get right back into it again, and quite successfully. So what have I been doing?

Physics: Collision Filtering

So I have been looking into the collision filtering mechanism that Physx supports. The basic mechanism allows you to provide a mask and a group to decide whether two objects require a collision callback.

Although this does seem quite flexible it has some serious limitations, mostly because the mask and group are just uint32's which seriously minimises the number of masks and group you can have for one game. Originally I was thinking about going through and creating some generic groups e.g.:
  • Player
  • Enemy
  • Boundary
The list could go on to name a few more. Basically what you would then do is on a per Entity basis in my engine you would setup a group that was Enemy and it should provide collisions for Player and Boundary. Having all this mask and group stuff just didn't seem flexible enough and I would still then need to provide the game logic to check which enemy it was and which type of boundary to decide the outcome. So instead of this I am still going to use the mask and groups as it provides some optimisations but I just have it decide whether to call the callback or not. i.e. mask can be 0 or 1 and group is always 1. This seems to work well enough, I know it's probably not as efficient but I think making it easier to use is much more important. 

Entity Destruction

After getting all the collision filtering working properly I had then implemented the Entity Destruction System that listened for kill entity messages.

The physics system would handle the collision logic, i.e. when there is a collision between a bullet and an enemy an EntityDestroy Message is sent for both of those entities. 

There was a lot of bugs that cropped up with this, specifically because my message system is instant i.e. an entity destroy message is sent, the Entity Destruction System will go straight into the handler for this and if the entities was then removed it would cause complications because the physics system is still in a for loop of all the Entities.

To combat this I created a destruction queue and handled this in the update function of the Entity Destruction System.

There were also a lot of random bugs with the entity destruction as I had never really fully tested it that way. The memory was always cleaned up when I closed the program but that was different from choosing an entity in the middle of the container and removing it and all of it's components and the systems it was subscribed to. I also had a similar issue with removing Mesh Instances, I had never actually removed singular instances from the scene before so that had to be implemented.

I got through it all in the end and all seems much better now. Anyway enough talking, here is where it is at:
Oh as an added note I also added some functionality for freezing an axis. The player character was colliding with the walls and then spinning off in directions that I didn't want, now it is fixed on the Z and Y plane allowing only movement across the X.

So there it is, I have what is essentially some of the most basic functionality for Space Invaders:
  • Enemy's Dropdown when Colliding with the Boundaries
  • Enemy is Destroyed when a bullet hits it.
  • Bullet is Destroyed when it collides with an Enemy.
  • Player can sideways
  • Player can shoot bullets
  • Player is restricted by Boundaries

I'm really impressed with how this is going, and I am relieved that I can finally complete a task that I have been receiving e-mail task overdue notifications about for weeks now.

So what's next on the cards? 

I am going to plough on, the next few things that I need to look at are:
  • Enemy and Player Health and Lives
  • Enemy firing ( initially will be pseudo random )
  • Dealing with Game State, Level Start, Level Failure, Level Completion
There is plenty to do but I really think these things won't take long at all. A lot of the groundwork is already in place. 

​Cheers :)
0 Comments

Game Addiction is Bad... mmmmm'Kay

10/11/2015

1 Comment

 
​Okay so this a blog post basically to express my own dissappointment.

I don't normally do negative posts because... well why would you want to be negative? positivity breeds motivation. At this point I think I just need to talk about the reasons I am not being very productive and in talking about it hopefully make a change.

So I went on Holiday a while back and since then my motivation for doing my project is almost none existent. I think the combination of getting back into working life and also getting into a couple of games is the cause of all this. 

For a while I was playing Counter Strike: Global Offensive almost every weeknight. Then on the weekend I was spending time with my girlfriend and seeing family/friends. I got way too into this routine, more specifically I was becoming a little addicted to CS:GO. This was to the point where I would forget to have tea or do any chores around the house. So a week or two ago I realised I had to stop. Playing it wasn't even fun anymore either as I had progressed to a level where it was far too challenging for me to actually get any kills/win many games. So at this point I was just getting frustrated, except I had to play "Just one more" until eventually it was 1am and I had work in the morning.

So the other day I realised (with a little nudge from Meg) I needed to uninstall the game in an effort to hopefully start doing something productive. So I did. I uninstalled it, and this is the first week where I haven't played it at all in a long time. I have however recently bought a load of old school RTS Games (Age Of Empires II, Cossacks:Art of War, Cossacks:European Wars). When will I ever learn! So this week I have managed to play Age of Empires each night and I seem to be falling into the same trap. The only positive from this is that the panning of the camera makes me feel a little nauseous and so I can't play more than maybe 2-3 hours. Because of this panning problem I am hoping I will get bored of playing shortly and then I can concentrate on doing at least a little bit of work on my projects.

Not a technical post, more just a look inside my strange brain. 

I am hoping just putting all this stuff down will help me realise how daft I am for playing games so much!

Thanks :)
1 Comment

Space Invaders: Physics with Basic Collision Detection

16/9/2015

 
So today I set about implementing the Physics with my Entity Component System. I initially looked at Unity's implementation for some guidance but I wasn't entirely happy with their approach. They separated the physics actors into two categories:
  • Rigidbodies
  • Colliders

This is not the same concept as in Physx, which is the reason I didn't really like it. In Physx there is simply PXRigidStatic and PxRigidDynamic actors. I instead went for the option of having a flag to decide at creation whether you want a static or dynamic object which I also do for kinematic objects.

At the moment I have 3 new components and one new system. the new components are:
  • PhysicsBoxComponent
  • PhysicsSphereComponent
  • PhysicsPlaneComponent

I did try and attempt to have 1 PhysicsComponent but as Box, Sphere, Plane and eventually Capsule have such varying parameters it made it quite difficult. The main problem is that my component classes cannot very easily be polymorphic due to all the CRTP that goes on. 

The alternative would be to have all the variables as part of the class i.e.
SphereRadius
BoxHalfExtents
PlaneNormal 

as private members and then have a Type value that would determine which values you want to look at. 
** Thinking about it I might try this instead. ** 
I can't imagine the properties for physics objects are likely to change much, and there is likely to only be about 5/6 different physics types anyway: sphere, box, capsule, plane, mesh and trigger. That is if I even bother supporting all of those. 

It would make the streaming slightly more difficult as there would be branching rather than a straight value for value copy.

Anyway I'm wobbling on, here is a simple video showing the player character hitting the invisible boundary walls that I have put in:
As you can see in the video there is some sliding that happens which is probably due to the fact that I alter the player position myself based on input rather than using forces. I may have to lock one of the axis to sort this out. 

There are still a few things I need to think about:
  1. Now re-thinking whether to use 1 Component with a Shape Type value.
  2. Altering Physics Materials, currently all objects use the same default material.
  3. Collision Filtering, this is something that I have been thinking about quite a bit.

The collision filtering is really interesting. I have been wanting to come up with a nice generic solution. Currently you can add a filter group and filter mask to any actor. So you choose which group it is part of and then choose all of the groups that you would like to register collisions for. 

I was thinking of creating a set number of filter groups for the engine and then have the user of the engine deal with collisions at a higher level using ECS game logic. The problem is I can't think of generic enough groups to make this useful. 

Anyway I'm fairly happy with progress and I'm hoping it can continue on.

Cheers :)
 

Space Invaders: Physics Revisit

10/9/2015

0 Comments

 
So I've started looking at the physics implementation that I currently have in the JBEngine. It uses Physx but when I initially integrated it I must have literally got it working for the exact case that I needed it and then left it. I think that came from my inexperience in programming in general.

After looking through the code and playing with a few things I have managed to get the enemies to have box collision shapes and also have the update from physics to game scene working fairly well. 

I will definitely need to re-factor quite a bit of this code to get it to work in a way that would integrate a little easier with an Entity Component System. I have been thinking a little about my current design and have also made the code that was already there a little more flexible. 


Picture
I also got to look at this beauty again as well... The Physx Visual Debugger! It is pretty finicky to manoeuvre the camera but it does show a clear representation of your physics scene which is really good. Unfortunately I couldn't get a video of the physics objects moving so this screenshot will have to do. 

I think the next post will be mostly about the design that I am going to implement before I dive in and start coding. I don't want to make the same mistake as last time ;) 

As another note the fact that Unity uses Physx and also an Entity Component System may make my life a little easier as I can see how they have done it and take some guidance from that.

Would be great to get this physics work integrated fully and in a flexible way soon.

Cheers :)
0 Comments

Space Invaders: Enemy Movement 

27/8/2015

0 Comments

 
I've slacked off on development over the past week or so whilst I was playing H1Z1 and trying out my new GFX Card. 

I have managed to get the enemy movement working. It is very simple for the Space Invaders game and I did have the opportunity here to try and make it really generic but I decided against it to try and just complete exactly what needs doing for this game. Otherwise I end up getting bogged down with the design. 

Anyway here is a little sneak peek:
At the moment the drop down and change in direction is triggered by a timer but in the final version and once I have the physics implemented it will be based on collision messages from the wall. 

I am really pleased with progress. The next part might be a little complex as I haven't touched any of the physics code for a long time. 

I also might install blender and have a go at creating some models to get my self a little better before creating the final pieces for this game. 

Thanks :)
0 Comments

Space Invaders: Awesomium UI, New Models and Sounds

19/8/2015

0 Comments

 
Today has been a really productive day and I've managed to add three great advancements to the space invaders game. 

I managed to create a new UI for the game which is all hooked up to the game code as well so as soon as I have some events that will either lose lives or add to the score then the User Interface will look a little more impressive. All this is done using the JBEngine's Awesomium Integration and just shows I have done quite a good job as I've managed to get it up and running fairly quickly.

I have also added some models for the player and enemies which I have on my computer from years ago whilst at uni. These models aren't likely to be the final ones but for now they are much better placeholders than the cube I was previously using.

Finally, I have added a firing sound for the bullet. This again was fairly easy to implement as I had already done a good job with the JBEngine's Sound Library. Okay so I've explained what I've done, here is a video of the game in it's current state: 
So it is really starting to take shape and is looking more like a game now. Whilst on skype to my girlfriend who is currently sunning herself in South Africa (Lucky Sod) we came up with an idea for the theme of the game to change it from space invaders into something more unique that I could call my own. I'm not going to announce anything yet as it's still just an idea at the moment and for the first game I think I might just stick to an exact replica of Space Invaders for Simplicity.

Everything is moving along really well. The next thing that needs doing is sorting out either the physics which hasn't been touched for a long time ( which is very worrying ), or to get the basic enemy player movement done.

Thanks :)
0 Comments

ECS Parsing and beginning of Space Invaders

19/8/2015

0 Comments

 
So last time I wanted to focus on getting the Systems working via import/export. I have managed to do this now although It doesn't work in the same way as the components. 

Systems can only be ran once by the engine and entities apply to be acted upon by them. Even though the code allows you to do "entity->AddSystem<RenderSystem>()" what it is actually doing is just adding the list of entities that will be processed by the render system. 

After doing all this and basically getting the ECS in a state where I could start adding the components that were in the level editor I decided to stop. Instead of adding all the old components I am going to steer clear of the level editor for a while and instead focus on a small game. One that wouldn't even need a level editor.

Enter Space Invaders...

Space Invaders

So I've decided to remake the classic arcade game but in 3D. The functionality will be very similar to what the original was (unless I decide I prefer something else). You will still be able to play it in the same view style as well i.e. Top Down. Alternatively you will be able to play it in a first person mode as well.

Anyway that's the basic idea here is what I have so far:
It's really not that impressive and creating functionality it a little bit tedious at the moment as I'm having to create loads of classes for the components and systems. Once I have written these I will be able to reuse them for games in the future I hope.

All is going well... Oh on another note I bought a new nVidia Geforce 970 gtx and have just installed it so I may get distracted by shiny new games. 

Cheers :)
0 Comments

Python,Flask, SQLAlchemy and virtualenv

13/8/2015

0 Comments

 
I just wanted to put a quick post up about some prototyping I am doing at work. I have been given the task of creating a dummy web application which has taken me into a realm I am not familiar with at all so I thought I would talk about it a little. 

I basically had total control over what technology I used for this application and someone suggested to use Perl as people had used it for other application we have. I really didn't want to use Perl and there is a couple of reasons for this:
  1. If I have to learn a new language I would rather it be one that I like the look of
  2. I would rather learn one that is becoming more popular rather than one that is dying off.
  3. There are a few people in work that are willing to help with this little prototype and they have more expertise with python.
  4. Python has SQLAlchemy which supports both database types we will need to use.


I will now talk a little bit about the other choices I have made in terms of tech: 
I've decided to use Flask as it is a lightweight web framework which will allow me to do exactly what I need. This web application isn't complex so I didn't really want something large and all encompassing.

As the Web application has to use DB's I've decided to use SQLAlchemy as it seems fairly popular, has support for MySQL(The Test DB I am using for this) but also support for DB2(What we will likely deploy it on). 

Finally virtualenv. This is something I've never used before but it seems like it is going to be really useful as deployment to other machines can be done without worry as It won't matter about them having the correct python version or flask version installed. 

All in all it's been great, I've had to learn a lot so far and I'm finally getting the hang of how it all fits together. I've been lucky enough to have another application to use for guidance through this development and so I should have it up and running in no time.
0 Comments
<<Previous
Forward>>

    Archives

    May 2020
    April 2020
    January 2020
    November 2019
    October 2019
    September 2019
    July 2019
    June 2019
    May 2019
    April 2019
    March 2019
    February 2019
    August 2018
    July 2018
    June 2018
    March 2018
    January 2018
    June 2017
    February 2017
    September 2016
    August 2016
    July 2016
    June 2016
    May 2016
    February 2016
    January 2016
    December 2015
    November 2015
    September 2015
    August 2015
    July 2015
    June 2015
    March 2015
    January 2015
    November 2014
    October 2014
    September 2014
    August 2014
    July 2014
    June 2014
    May 2014
    February 2014
    January 2014
    December 2013
    November 2013
    October 2013
    July 2013
    June 2013
    May 2013
    April 2013
    March 2013
    February 2013
    January 2013
    December 2012
    October 2012
    September 2012
    August 2012
    July 2012
    June 2012
    May 2012

    Categories

    All
    2D
    3rd Year Project
    Agile
    Android
    Angular
    Animation
    API
    Apple
    Apps
    Arden
    Async
    Awesomium
    C#
    CI/CD
    Clean Code
    CMake
    Cocos2d-x
    Colour Match
    Compilers
    Cross Compiling
    Cross-Compiling
    Databases
    Design
    Development Tools
    Docker
    Electronics
    Examples
    Flask
    Flask-Login
    Fmod
    Game Development
    Godot
    GUI
    Hackathon
    Hacktoberfest
    Hardware
    Home Life
    IBM
    Inspired Gaming
    Instancing
    Ios
    Javascript
    Jbengine
    Kata
    Level Editor
    Linux
    Microsoft
    Mobile Development
    Monogame
    Moodster
    Motivation
    Networking
    Objective C
    Opengl
    Open Source
    Organisation
    Physics
    Physx
    Pi
    Planning
    Post Mortem
    PyGame
    Python
    Quart
    Quasar
    RakNet
    React
    Road To Eldoarado
    Scripting
    Scrum Master
    Sessions
    Session Timeout
    Social
    Sound
    Space Invaders
    Squash Game
    Squash Game
    Streaming
    TDD
    Team Leading
    Test
    Test Driven Development
    Travis
    Unity
    Unity Development
    VSCode
    Vulkan
    Web Applications
    Worklife
    WSL
    XML
    XNA / C#

    RSS Feed

Powered by Create your own unique website with customizable templates.
  • Home
  • CV
  • University Work
    • Second Year Work >
      • Top-Down Shooter
    • Third Year Work >
      • Terrain Analysis Project >
        • Terrain Analysis Tool
        • Game Demonstration
      • Post Processing
      • Android Application - Sports Centre
  • Projects
    • Unity Development >
      • Lerpz Tutorial
      • Dare to be Digital Entry - "Lit"
      • Unity Game
    • Geometry Instancing
    • Road to Eldorado
    • Level Editor
    • OpenGL Work
    • JBEngine
  • Blog
  • Tutorials
    • Flask Session Timeout