Friday 28 October 2016

QA Consulting – Personal Blog #4

It’s time for the fortnightly roundup of what I’ve been up to during my training contract at QA Consulting in mostly wet and dark Salford Quays, Manchester!

So we started looking into Java Enterprise Edition (Java EE or JEE) which contains a variety of different packages on-top of the standard edition, such as unit tests for test driven development (TDD) and server based interaction heavily integrated systems.

We were allocated into small groups of four members per team and tasked with creating the database and front-end systems for both the staff’s inventory management system and the website the user would interact with as a visitor or account holder.  We started on ERD diagrams and planned out our database structure and relationships to other tables. While this worked well for a pure database design, it did not interact with Java Server Faces (JSF) in the way we anticipated and as such we had to change the design to follow object oriented design better.

We then began writing the code that would interface with the database; however we did not make the databases so it was unintuitive to write as we did not know if the code was working or even close to relevant. We managed to create what we believe is a working structure, although time will tell how successful it is.

The following week we then started developing the front-end for both the website, which was mainly copied over from one of our team members’ code from previous weeks, we also designed and created wireframes for our front-end designed for the inventory manager to manage stock and change products.

We then took these and implemented them in HTML, CSS and JavaScript, making working versions of each. Then the HTML was tediously converted to XHTML, a far stricter language which also doesn’t use many useful features that HTML5 implements.  So after rejigging this and generally fixing the 1001 errors using all this causes, we now have a working server that loads a template which contains content within it, the content is dynamically loaded by different xhtml files and loads CSS and JavaScript dynamically.

The team works well and we generally complete our targets well before latest deadlines. Next week it will be interesting if we can hook up the database and get everything actually interfacing correctly. Then I think I will be able understand JSF and the entire process clearly.


This will be my last personal blog but a final technical post will be published sometime next week. Thanks for reading if you’ve got this far, I’m not really sure why because this content isn’t interesting to read in the slightest.

Friday 21 October 2016

Technical Blog Post #3 - Nintendo Switch


Nintendo has revealed their new game machine as the Nintendo Switch, a portable device akin to the Wii U controller. It doubles up as a home console that can connect to a tv/monitor and the controllers on either side of the screen are detachable to be used individually, as two separate controllers or put them together to make a typical controller looking something similar to a basic Xbox 360 controller.

You can see the teaser they posted on YouTube here:

 
The Nintendo consoles of recent haven’t been too inspiring and their sales have echoed that. The Wii U sold about a tenth of what the original Wii sold. The Switch could be Nintendo’s ‘last shot’ says one analyst.

While console sales have been a rocky road for Nintendo, handheld portability is one of their stronger suits and we have enjoyed success with their handheld devices ranging back to the classic Gameboy. From the trailer we can see that it’s using small cartridges, similar if not the same to the ones used in the 3DS.

Specific device hardware have yet to announced but should be a significant step up compared to its predecessors, again it’ll be unlikely if it can outperform the standard Xbox One or PS4 let alone Scorpio, PS4 Pro or a medium grade PC.

From the varied reactions we can see that the main sticking point is the games (rightly so). While the Wii U contained some best sellers like Zombi U, Splatoon and Nintendoland they didn’t offer enough of an incentive for users to make the switch to the platform long term. With the trailer we can see with the Nintendo exclusives; Zelda Breath of the Wild which already has shown some impressive looking trailers, a new currently unannounced 3D Mario game. The re-mastered version of Skyrim something unheard of with Nintendo but shown in an impressively high graphical fidelity, whether it was pre-rendered footage or native content has yet to be confirmed so it could just be a big hoax.
The trailer wrapped up with a public esports tournament, something proportionally very rare with exception to smash tournaments, typically nothing in scale to what the trailer shows. I find it unlikely that the Switch would ever properly establish itself as a truly competitive platform. Time will tell if this is a baseless claim or they plan on supporting a competitive scene and games that wish to encourage that style of gameplay, typically the opposite of what Nintendo usually target, casual group based play.


Nintendo says it will reveal more information in the months up to the March launch. It generated a huge amount of anticipation and it will be interesting if this is a breath of fresh air for Nintendo consoles or the death of it.

Thursday 13 October 2016

QA Consulting - Personal Blog #3

It’s coming to the end of my sixth week here at QA Consulting so I’ll give a breakdown of the last two weeks.

So last week several of us have been chosen to do front-end development potentially at BAE Systems, although this is still up in the air (hah) as not many details have been released. So we began training in front end development, specifically JavaScript. I’ve previously used the language to develop a small web-based fault tree viewer in university that could break down a hierarchical structure of gates and display them in HTML5 canvas. This time we covered more of the basics to start with, then covering JQuery, a JavaScript library for client-side scripting of HTML that’s used on 65% of the worlds’ top 10 million websites. We then covered Ajax which is a set of web development techniques used for making asynchronous and updating webpages.

From these technologies and with an SQL database running from XAMPP I could implement a database that communicates through PHP to display on a web page using Ajax to continuously update content. Using this I made a small catalog of products with various fields. The users could modify the data set using lists of modifiers such as ‘sort price high to low’ or type of products.

I also successfully implemented a searching function that attempted to match each tag provided by the customer with the database fields for name and a list of tags the employee adds when adding a product to the catalog. These all dynamically changed the SQL query and displayed the relevant content.

This wrapped up the week and while not perfectly intuitive it was interesting to learn each of these techs as I’ve not really learnt them much before.

I then moved onto AngularJS a structural framework for dynamic web apps. It extends HTML’s syntax to express custom components and features data binding as one of its core features. So we started learning angular 1 and after getting to know the very odd and obscure syntax we were told that there’s Angular 2 which changes basically re-does a bunch of stuff and completely changes the syntax again.

This time Angular doesn’t look so pretty, it’s very time consuming to create and the learning curve is extremely steep for only mild benefits. This is because the majority of the functionality can be found from HTML5, Ajax or JQuery which I covered all the week prior! A simple catalogue system that took five or so files ended up taking over 70 to produce similar content. Angular also loves to deviate from set standards within the programming world, instead of the usual camelCase style that the majority of languages follow, Angular goes for kebab-casing and whoever thought:
return Observable.of<Product[]>([]);
That you needed eight special characters at the end of a simple return statement needs some crazy pills.

As you may can tell I’m not a massive fan of Angular but the experience was good and now I know not to touch it again with a 10 foot barge pole if i can.


I’m looking forward to next week where we start to cover Java Enterprise Edition, while I’ve done the standard version before I haven’t covered the large scale distributed multi-tier functionality EE adds to the standard edition.

Wednesday 28 September 2016

Technical Blog Post #2 - Supergiant Games, a Biography


Supergiant Games is a small studio that have created some fantastic pieces of media, today I will do a short biography of their contribution to games since their inception in 2009. They are a San Francisco based company with a meagre seven to twelve members, however have successfully produced some of the most interesting and diverse games to date. Over their career at the time of writing this they have produced two games and one more in the works.

I’ll break down each game and cover particularly why they were so successful and interesting mechanics and things of note of each game. One quite interesting fact is that they are all created with C# MonoGame/XNA, while a very useful tool for a starting game developer it is not often used at a professional level and to such high graphical fidelity and standard.

Bastion (2011)
Bastion was Supergiant’s first game, originally launched on Xbox LIVE Arcade and due to its success had following versions on PC, Chrome Web Store, Mac App Store, Linux, iPad and finally PS4, winning over a hundred awards and selling over 2.32m units on PC alone.



It is an ARPG (action role-playing game) in a hand-painted isometric based world, set after an apocalypse called ‘the calamity’. The game includes a dynamic narrator (Logan Cunningham) which provides validation on your actions and provides a very interesting way of storytelling, while allowing the user to feel they are telling their own story.

The soundtrack is composed by Darren Korb, who creates music for all three games; this won many awards itself to the self-styled genre ‘acoustic frontier trip-hop’. This is one of Bastion’s key to success as it beautifully compliments the art styling and theme of the game.



The stand out feature that sets Bastion a foot above the rest is its fantastic writing and storytelling, the immersive nature of the narrator, the complimenting music and fantastic ending provide a solid experience. Small hints of lore are slowly revealed as the player encounters or interacts with certain things throughout the story. This allows the user to slowly understand the situation they’re in without facts being crammed down their throats, with a final ending better than most leaves a very satisfied taste.

Transistor (2014)
Transistor was Supergiant’s next title, by using the proceeds of Bastion allowed the team to self-publish compared to Bastion which used Warner-Bros as a publisher for the title. It was originally released for the PC and PS4 selling just over 1m units on PC, this was then expanded to cover Mac, Linux, iPhone and iPad versions.



It continues using the set recipe of isometric ARPG although set in a futuristic setting, it provides a shorter but better polished game and arguably one of the best looking games to date, especially for an indie development game.  Using a similar storytelling methodology but with the absence of the narrator. The game built on Bastions battle action system which while good and responsive were relatively limited and non-engaging, Transistor attempts to remedy this by including a quasi-turn-based action system that can be used in instanced fights to queue up abilities and movement, rather than Bastion’s one continuous world with battles happening sporadically.

The soundtracks were again composed by Darren Korb but with the voice of Ashley Barrett to create some stunning immersive music that is heavily integrated in the story.



Functionally and visually Transistor is superior to Bastion but subjectively doesn’t do quite as good of a job as Bastion did at immersing the player in the world.

Pyre (2017)
At current not a huge amount of information has been release of their current work, however gameplay snippets and some extrapolated lore can be found from the short snippets available.
In terms of gameplay it provides a very strange mix of rugby, basketball and rocket league from an isometric perspective, using the characters you accumulate in the story in a rich fantasy world. 



Characters have varying abilities akin to MOBA (multiplayer online battle arena) style games that can attack, evade or inhibit the opposition who will attempt to do the same thing. This strange mismatch of genres and games will be interesting to see if it has a rich amount of depth and complexity.




Story telling has already been shown to be a main focus of the game, which is good as it’s where Supergiant Games are in their element. Overall we’ll have to see how it actually performs, but Supergiant’s track record seems pretty good so far, a company well worth your attention and has really set a standard for storytelling and graphical fidelity for indie games.

QA Consulting - Personal Blog #2

So I’m currently finishing my fourth week on the job at QA and have covered quite a lot of content, got settled and completed a relatively large group project.

So at the last personal update I had finished my first week completing my Java training, since then I’ve completed a week of DevOps, which is a collaboration and communication of software developers and IT professionals, while automating the process of software delivery and infrastructure changes [Loukides, Mike (2012-06-07). "What is DevOps?"]. In this we covered usage of Ubuntu and MintOS as standard operating systems for businesses and tools. We then learnt basic bash scripting and use of Vagrant and VirtualBox to create virtual environments containing instances of these operating systems.

We then used bash scripting to install a variety of different tools and software for integration as a continuous integration pipeline. The source code is managed by git, which is then connected to Jenkins to act as the CI server, which uses Maven to build successive iterations of the software. Jira is used for software and bug tracking, while finally using puppet for configuration management and deployment. Overall I managed to create a full interlinking system that could work in a small business to create and manage its software development.

The following two weeks comprised of studying enterprise architecture. This is a well-defined practice for conducting enterprise analysis, design, planning, and implementation, using a holistic approach at all times, for the successful development and execution of strategy. Enterprise architecture applies architecture principles and practices to guide organizations through the business, information, process, and technology changes necessary to execute their strategies. These practices utilize the various aspects of an enterprise to identify, motivate, and achieve these changes [Federation of EA Professional Organizations, Common Perspectives on Enterprise Architecture, Architecture and Governance Magazine, Issue 9-4, November 2013 (2013).].

We split into groups of eight and began work for a fake client NBGardens, the client is a garden gnome (a very profitable business apparently) and accessory reseller. We as a consultancy firm have been hired to analyse the business and should propose our own solution to improve it.

Throughout the week we’ve practiced SCRUM methodologies as our formatting for carrying out the multiple tasks set, we also covered v-model and waterfall, although I have experience with all three previously so it was mostly recap. We also covered BPMN, UML and Data Modelling techniques and software, we used these to create a variety of reports either for a current ‘as-is’ state of the business and a ‘to-be’ diagrams of the system we proposed.

What was particularly useful about the two weeks was the focus on client relations. I had good opportunity to practice public speaking and speaking to clients. This was generally for requirements capture as we spoke to a couple of the ‘employees’ (actually just trainers badly acting), but the experience was useful nevertheless.

Finally I may have been selected for my first actual consulting job which is using C#, one of my most comfortable languages, for Woking County Council, I hear they would like a new unified tax system however the details I have so far are very limited.


Overall my first month in QA is going well and hopefully it’s just the beginning.

Thursday 22 September 2016

Technical Blog Post #1 - VR's Influence in Games

I’ve decided that for my technical blog posts I will go into video game designs and technologies. In this article I will cover virtual reality (original I know) and what exactly it can bring to the games market, if it can contribute anything in the long run to games and their development.

So first a quick breakdown of current existing technologies and competitors. The main devices are the Oculus Rift, HTC Vive, Project Morpheus, Microsoft HoloLens and Google Cardboard. Each provides differences between, but all use head mounted displays to display perspective corrected content to the user. Currently prices range from £15.00 for a piece of foldable cardboard that can hold a smartphone to act as both screens to a £759.00 HTC Vive, currently only a developer edition of the HoloLens is available for a whopping $3,000 per device, though this price will most likely drop for consumer based products.

This post isn’t going to cover exactly what each device does and how it does it, there’s 101 other articles that break that down for you. Instead I’m going to cover more what these devices can actually do as a whole for gaming.

First came the fun little cinematic demos using the Rift Development Kit 1 (DK1), having owned one myself it made a great party trick, first coerce a person to sitting down and putting on the device and some headphone turned up to loud, launching the rollercoaster application and watching them scream as it dropped, jumped and swerved. Unfortunately the DK1 never amounted to more than a proof of concept, widespread motion sickness due to the relatively low update rate of 60hz compared to real life was an instant turn off for many. Also the low resolution of 640x800 made near impossible to distinguish fine details, the comparison to real life was stark.

Skip forward a couple years and great strides have been made to improve immersion and resolution. We’re now up to a 2160x1200 resolution and a higher 90hz refresh rate will drastically help in reducing motion sickness. Nvidia has also made great strides in supporting rendering for multiple simultaneous viewpoints (https://developer.nvidia.com/pascal-vr-tech) requiring only a single pass for each type of shader, drastically improving performance. VR now seems like a plausible subset of gaming, while it’s not going to drastically alter the way the majority of games are currently played, it is going to attempt to co-exist with them.

When a headset is strapped on there’s a large disconnect between moving in a game and sitting still in a game, as such typical first person shooters, especially those with a great fluidity and speed of movement actually feel worse to play. Team Fortress 2 (Valve) was one of the early adopters to native VR support yet despite its flawless integration, it does not provide a fun experience due to this disconnect with seeing your body doing things its actually not.

Games since have shown that to provide movement, they must use the logical step of using vehicles for movement. This can be seen in Hover Junkers (http://www.hoverjunkers.com/), this involves first person shootouts on hovering platforms.
Hover Junkers (Stress Level Zero)


Simulations also prove great worth in investing with VR technology for diehard fans that can immerse themselves in in their universe such as in EVE: Valkyrie (https://www.evevalkyrie.com/), Star Citizen (https://robertsspaceindustries.com/) and Elite Dangerous (https://www.elitedangerous.com/) all are new space simulation titles, which have gained huge momentum in recent years. Use of joysticks or provided controllers prove to be a great way to immerse and create believable universes.
EVE: Valkyrie (CCP Games)

Overall VR helps a few niche genres bringing them into the spotlight if only for a decade or so. The majority of other genres simply are not applicable with current iterations, drastic changes to core mechanics would have to be made to make a game playable, let alone fun. Would then they still even be define in those original genres they attempted to be?

Friday 16 September 2016

QA Consulting - Personal Blog #1



On the 5th of September I began as a trainee consultant for QA Consulting located up in Salford Quays in Manchester. I had real difficulty finding a place to stay with my friend who also began with QA on the same day. Eventually after hundreds of enquiries for housing, a single positive response came back and we were able to move in into a small flat only eight minutes’ walk away.

The Salford Quays area looks great and must be one of the best looking areas of Manchester (in my opinion) and it’s also just a bridge away from Media City, where the BBC has decentralised from London up to Greater Manchester.

We started going through Java at breakneck pace. Since I’ve studied computer science for years I could easily understand and complete the content required for each deliverable numbering twelve in total. It did contain some interesting and thought provoking topics, which could be expanded over the week. We started with the typical ‘Hello World’ applications expanding to simple string manipulations, then onto a basic object oriented designs of software and small calculator based tools such as a room painting calculator that worked out the best paint to buy.

We then moved onto algorithms for prime numbers, tasked with calculating numbers up to 3,000,000 and 3,000,000,000. My initial design handled the 3 million with relative ease solving it in 2959 milliseconds a reasonable result however ground to a halt when dealing with 3 billion, due to the combinatorial explosion nature of the search space.


private static Boolean isPrimeNumber(long n)
    {
        if (n < 2) return false;
       
        for (long i = 2; i * i <= n; i++)
        {
            if (n % i == 0)
                return false;
        }
        return true;
    }


I then looked for faster and more efficient algorithms for calculating primes and discovered the Sieve of Atkin a modern algorithm created in 2003 by Atkin and Bernstein. One limitation of this is that it can only be used for a maximum number of the integer limit (2147483647) and java does not provide uint types or cannot initialise arrays of size long, fair enough since a Boolean array of 3 billion would be roughly ~30GB. It does however do 2.14 billion numbers in 2248 milliseconds, and 3 million in an incredible 24 milliseconds.


//Sieve of Atkin
        Arrays.fill(sieve, false);
        long startTime, endTime;
        startTime = System.nanoTime();
       
        sieve[0] = false;
        sieve[1] = false;
        sieve[2] = true;
        sieve[3] = true;
       
        for (int x = 1; x < limitSqrt; x++)
        {
            for (int y = 1; y < limitSqrt; y++)
            {
                int n = (4 * x * x) + (y * y);
               
                if (n <= limit && (n % 12 == 1 || n % 12 == 5))
                {
                    sieve[n] = !sieve[n];
                }
               
                n = (3 * x * x) + (y * y);
                if (n <= limit && (n % 12 == 7))
                {
                    sieve[n] = !sieve[n];
                }
               
                n = (3 * x * x) - (y * y);
                if (x > y && n <= limit && (n % 12 == 11))
                {
                    sieve[n] = !sieve[n];
                }
            }
        }
       
        for (int n = 5; n <= limitSqrt; n++)
        {
            if (sieve[n])
            {
                int x = n * n;
                for (int i = x; i <= limit; i += x)
                {
                    sieve[i] = false;
                }
            }
        }


We then covered a couple comparison algorithms before moving onto a remake of the classic Battleships board game. A turn based game that requires placing ships onto two grid based boards; ships come in varying length and can be rotated for different orientations. The players then take turn firing blind into the opponent’s water, if they hit a ship a confirmation will be returned to the user. Once all ships are destroyed by one side the game is won.

For this project I used java’s swing, my first time using the technology, to create two grid shaped boards comprised of JLabels that could be hovered over and clicked to place a ship in each location, a simple UI had also been created to allow users to see the numbers of each type of ship placed and eventually would contain other information useful to the player. While I did create a working application it did not contain the second phase where users fired missiles at each other, users could paint their ships on the board, akin to the application paint.

Overall a successful first week QA Consulting and looking forward to more.