Friday, 28 October 2016

Personal Blog Entry 4

Weekend: Dropfleet Commander

First game of new tabletop miniatures.

Week Seven: Docker, containerize all the things!

Superior to Puppet. Also get to use cloud :D
Watching films.
Also Coup

Weekend: Trip to Edinburgh

Train rides give time to do technical posts. Meetup with family see how they are doing. Get painting supplies. More films. No Dnd?

Week Eight: Interview preparation

further docker experimentation
some short tests
and interview NDA

Friday, 21 October 2016

Technical Blog Entry 3

Procedural Texture Playground This really isn't done yet, why not go look at the second technical blogpost, it has web apps now!

This blogpost will go over some of the methods to generate textures procedurally, focusing on the uses of noise.

html5 canvas goes here Pseudorandom Number Generation

Pseudorandom Number Generation

Generator Seed:

html5 canvas goes here
Firstly an aside on how computers generate random numbers, done procedurally by polling some part of the system that changes quickly, often the clock at a microsecond rate. This value is then used in an algorithm that has good randomness <link>

Can be nice to be able to affect this pseudorandom generator so that you can recreate the same results repeatedly. Used in any random map generator with a seed. see example pseudorandom output of balls to the left.

Complete randomness, white noise. Suitable for some purposes but is paradoxically distinctive. Humans good at seeing no pattern.
<pictures of main noise types>
Look into noise which has local patterns.

Perlin Noise

Perlin Noise

Generator Seed:

html5 canvas goes here
Perlin noise <link> very popular algorithm, used in minecraft. Gives nice, fluffy cloud patterns. Idea of octaves of noise with pic <octaves> Can be put to good use depending on how you parse the values it creates. eg. terrain, smoke, contours, wood, fire etc.

Noise in Multiple Dimensions/Time

Time Varying Noise

html5 canvas goes here
Idea of generalised N-dimensional noise. Prospect of animation using it. can I manage to create frames of animation to then play?
burning animation only needs to vary values globally.
<web app here>
electrical effect would be nice...

Friday, 14 October 2016

Personal Blog Entry 3

Weekend: Branching out into Board Games
Weekend was a great chance to relax after completing two weeks of Enterprise Architecture, fingers crossed that I would be going on to do my specialisation of choice. From what I understood about the market I would be taking the most difficult yet highly demanded specialisation so the odds looked good!
Archmage confused by presence of two tiny
wizards in his cereal bowl.

Last week had been a busy one and everyone was in need of some rest. So instead of a full DnD
session we simply got together to play some board-games. My family had brought some good ones from home so had a chance to show them off. Smallworld which is a fantasy version of Risk with several decades of game design improvements applied to it. I do enjoy the implausible skill/race combinations each match gives you. Aquatic Human Farmers vs. Dragon Taming Halflings? Sure why not! Other game was Wizwar, a magical gladiatorial combat game with hundreds of weird and wonderful spell card. Lovely art as well with miniatures for each player or monster model.

Had a lot of fun play-testing a friends homemade card game. He'd made printed cards
for all four factions and we unwisely decided to play a four player free-for-all. Suffice to say it got a bit silly as we successively ganged up on the strongest players until we were left with only a few, useless units left. There were some lovely imbalances too due to the game being designed for two player duels. Neat game concept that could really do with some card art.

Week Five: I've got no Strings on me

The whole trainee group nervously congregated into the office break room, none of us knowing what or where we would be working. We were directed to go into a classroom and then were called out one by one to go to diffierent classrooms to do who knows what. QA sure like to leave their trainees in suspense! Eventually I was directed to another room along with about half the group. Seemed like everyone in the room was interested in either cloud or DevOps and lo and behold that's exactly what we would be doing, wonderful! :)

As Cloud differs from DevOps only in the emphasis on using hosted servers we will all be doing the same kind of tasks to begin with. The first of which was to be looking into using the Puppet provisioning tool; A piece of software which assists in automating the setup of multiple computers in terms of their configuration and installed software. Naturally we would be using virtual machines instead of literally having multiple computers connected together. As far as the VM's are concerned they were fully fledged computer systems but their virtual nature meant we could boot them up and down as needed :3

Unrealistic depiction of Puppet use,
the error message isn't in red!
So the start of our education on puppet was to boot up a virtual machine image which had a pre-installed guide on how to start using Puppet. Amusingly the guide refers to each step as a quest and even has a quest tracker. Each of us was set the objective to complete the series of quests to 'level up' to become a true puppet master XD Suffice to say this tracking feature turned it into a race of sorts and I was determined to be the best. Having finished the main questline I and the other fastest students were tasked with doing more complex tasks without instructions. This is where some of the challenges of using Puppet reared their head. Cryptic error messages abounded.

Regardless I did manage to get the extra tasks complete, even if I did have to fall back to using shell scripts instead of properly using Puppet functions. On Wednesday our tutor felt everyone had had enough time to get acquainted with Puppet so we began a group project. Unsurprisingly the students who had completed the previous tasks the fastest were assigned as group leaders (incl. me) woo...

The group project was a reasonably complex one, to setup multiple Puppet agents with many software modules on each. The group was large enough that each person could work on an agent and module each. I got to work setting up the Puppet Master which would tell each agent what modules to install. We would also be using Git as version control (good) and Jira for project tracking (less good)

To begin with there was a lot of work to be done to get everyone up to speed on how all these pieces of software functioned. Because we had been progressing through the Puppet quests at our own speeds some people hadn't really understood what the tasks were meant to teach. Perhaps lectures would have been better. We all had to get used to using Git from the command line rather than the nicer desktop or web based clients of Github.

First few days of the project were exhausting, I had to lead the group as well as fix problems people were having as I had more experience. Quite a stressful experience as we encountered all the annoying problems that occur with multiple people, computers and different versions of software collide. Towards the end of the week was feeling quite morose and like I had let my team down and that we were behind the other groups. Thankfully It wasn't quite so grim and other members of the group would become project leaders as the project progressed. Was very glad when Friday arrived.

Social Times and Weekend:

The week wasn't all work and there were plenty of opportunities for a bit of fun. We played DnD on Tuesday evening and our characters were predictably on terrible form. I think more of us got knocked out by falling down a pit than by the actual enemies! It's impressive in a twisted way how long it has taken for us to blunder through a dungeon which was mostly likely expected to take a single session to complete :P

Amusing anecdote from social drinks on Friday, somebody had challenged Gareth, the head of teaching to a game of pool. Nothing surprising as he often plays, the unsual thing was they both agreed to a bet where the loser would give the victor their shoes! It was a close match which it looked like he would lose but a last minute comeback saw him walk away with a trainee's pair of shoes. QA Consulting sure are something :P

A nice delivery during the week was a parcel sent from home. I had backed a Kickstarter for a tabletop miniatures game last year and had been waiting all summer for it to be delivered after multiple delays. Figured that it would only arrived once I had left. Amusing to have to explain that a package delivered to the office was full of plastic spaceships.

It was a treat to get back to the flat and unbox it. There were heaps of extra editions due to how successful the kickstarter was. Even though I had only backed to receive one starter fleet everyone who backed it had been given a selection of free ships from each of the four factions. Because of this, instead of getting 7 ships in total I actually got 27! package had some badges and a t-shirt too.

The absolute best part of it had to be the rulebook, a lovely 200 page, landscaped book in full colour. The page layout immediately made me nostalgic for Battlefleet Gothic, an out of print tabletop game from my childhood. The comparison is apt seeing as the same names behind that game worked on this one too. It was a delight to explore this book and the rules within.

Unfortunately one thing I did not manage to do during the week or at the weekend was work on a technical blog post. The weekdays had just been too stressful and I was feeling very drained. A pity as I genuinely enjoy writing technically minded pieces. It was probably unwise to attempt to write a blog post accompanied with multiple interactive web apps. I have made progress on many of the things I had hoped to include, the question now is whether I go back and fill in that week's post or leave it for the next.

Week Six: DevOps sure is... Something

The second week of the DevOps project wasn't nearly as stressful as the first. I felt I was adjusting to the workflow requirements dictated by waiting for virtual machines to load up and scripts to run. A pity the internet was slow in the office, it gave a very different view of how provisioning systems. We had to work around not being able to upload and download as we pleased. Everyone was getting the hang of how to use the systems and I did not have the burden of managing the group weighing me down.

Glorious Ali the Great!
As the class got onto the more advanced tasks there was more of a spirit of cooperation. When nobody could get something to run for hours any help was appreciated whether from ones own group or without. As a class we actually made quick progress and were done with the tasks faster than our tutor expected. Due to this we arranged to give presentations on our implementations at the end of the week instead of the next.

As the group work was wrapped up, leaving only tweaks left to do to the system I had some time to spend on other pieces of work. I managed to return to the aforementioned technical blog topic and make some neat web apps for it. I'm more hopeful of being able to back fill it in now. Will have to wait and see how much time I can spare in the coming week though.

There was also time after work to fit another evening DnD session. I bet the DM regrets giving us magic-powered firearms. We blew up a bus! :D

The presentations passed without event on Friday, it was a shame they were done so late in the day as I would have liked to spend more time asking the other groups about their implementations.They had used the end of the week to do some interesting additional functionality. I'm not too sure of using the Puppet software now, this project has reinforced how powerful the basic Linux utility tools are. You can do anything  so long as you know the correct incantation (command).

Friday, 7 October 2016

Technical Blog Entry 2

Procedural Shapes Playground Second, somewhat delayed technical blog post. Building upon the content of the previous post on procedural text generation this post will cover something more graphical!

html5 canvas goes here
An arbitrary sided shape, a polygon is defined by positional values of it's vertices. Being numeric in nature it is easy to create some sort of rule which produces a list of vertex positions when iterated upon. As can be seen in the header banner above it's simple to randomly assign vertex number, position, even colour (24-bit red, green, blue colour space is ideal for this). One of the most powerful ways of procedurally generating shapes is to create rules which can be applied an arbitrary number of times.

Rule based generations

Rule Based Shape Generation



html5 canvas goes here
The web app to the side illustrates this principle; a type of rule can be chosen and applied to a symmetrical N-cornered polygon. The rule simply defines whether to draw a line with a triangle or square in the middle of it but after that the rule is applied <i>again</\i> to each line produced. The depth value determines how many times this process is applied.

This creates some lovely patterns with edges detailed down to the pixel level. Depending on which rule is used snowflakes can be made or the edge tends towards a square, circle, diamond etc. Such shapes with 'infinitely detailed edges are known as fractals and have fascinating mathematical properties <links!> Mention fractional dimension, infinite edge length, zero volume and so on

Fractals: Infinitely Detailed

Mandelbrot Render

html5 canvas goes here
The most famous fractal has to be the Mandelbrot set <link> An iterated function on the complex plane which measures whether a particular complex number remains within the unit circle or leaves it.
<show equation>
Like all fractals it is infinitely detailed and the same overall pattern is repeated at different levels of zoom.

The only limit to the render to the right is the floating point accuracy of the web apps calculation (estimate?)

L-System: Forestry

L-Tree System

html5 canvas goes here
Interesting objects can be created with such rule based shape generation. Heck, that's how natural growth happens resulting in fractal-like patterns appearing all over the place in Biology <pics> A very common pattern can be seen in the growth of plants and trees.

L-Trees systems <link> are an abstract grammar where a sequence of symbols can be replaced by others. By using such symbols to represent branches and leaves they can be used to create their namesake. Wonderfully simple algorithm which draws line segments iterativly (mention turtle drawing tools). Like a fractal render a depth value can be set with the limit replaced with secondary structures (leaves and flowers?) Option of pure, symmetric structures or introducing a little bit of randomness.