25 March 2017

Well defined tickets and MVP

An interesting thing happened this week. It seems I did too much work on a ticket.

Wait, you did X and Y? That ticket was only supposed to be X, we have a ticket for Y in our backlog.

Re-reading the ticket for X (which was the so-called "MVP" (Minimum Viable Product)), with this new knowledge fresh in my mind, I still couldn't see where I went wrong. The ticket had decent detail, and actually references Y (the work, not the ticket) within it.

Oh, that should probably have been removed.


So, I essentially ended up doing two tickets of work in this one ticket. While I technically made a mistake, and will learn from it, I still stand by my actions based upon the definition of the ticket.

You may wonder where the problem is with this. We're now ahead, surely? Well, yes, and no. It's more complex than that.

11 March 2017

Spring Boot Microservices

While I can't go into detail of what I'm doing at Jagex as a contractor, I thought I'd give a quick update on some of the technologies I'm gaining experience with.

They brought me in to help implement a new microservice infrastructure for a major internal project, and I'm already gaining good further experience with:

Admittedly, the first few days were spent setting up my PC and internal accounts, and ensuring I had suitable permissions and access. There's a lot of things! Thankfully, some of my old accounts were still there, and just needed reactivating.

I also had to catch up with a fair amount of progress since I left, including team restructuring, office changes (including a new location in the building), new management, new development practices and approaches, new servers, new Scrum priorities, and the plan and progress of the new system I'm helping out with. It's been fun catching up with old colleagues, and surprising a few with my presence.

So far I've created a new microservice that currently integrates with a legacy system to perform a specific task, but is designed in such a way that it could implement a new task provider with little impact. It is also the first microservice to use Spring REST Docs for the API documentation, which is how the team wants it to be done from now on. As part of this project, I also implemented a nice automatic deployment of Spring REST Documentation to a shared location using Bamboo, if implemented in the microservice.

I'm now working on tying a number of systems together into a cohesive user flow. It's nice to be back, and already contributing to the project!

18 February 2017

I'm now Contracting!

Two days ago, I started a new estimated 5 month contracting job back at Jagex. How quickly things change! Obviously I can't share details of why I was brought in, or specifics of the challenges I face, but I will try to share any general topics I can here.

It's fantastic being back - I did always like the company, and particularly the people.

It's going to be strange, but great, to be able to dedicate my time there to actual software development. My previous job became a mix of random assistance, project managing, line-managing, code reviews, meetings, and only occasionally did I get the chance to write any code myself. It's already clear that the self-training I did on Java Spring, unit testing, and even AngularJS, will come in useful, even at this early stage.

So, while I'm clearly no longer available over the next 5 months for other contract work, I can still take on some freelance work. I'd just need to fit it around the Jagex contract job, and I am able to book time off with sufficient notice.

If you have anything you'd like me to take a look at, please do still get in touch, as I might well be able to fit it in. If not, I may be able to recommend another freelancer to do it. So there's nothing to lose really!

11 February 2017

VDSS - Simulation and Rendering

It's been quite a busy week for me; getting some professional photos taken, attending a local business event, a fair amount of admin, and family things, so I've not been able to make as much progress with this as I would've liked. Good reasons though!

However, I did significantly improve the Simulation process - it's now much closer to what I was expecting to see.

I've also added very simple 'glass' objects to the 3D rendering, for the main display sphere, spinning screen, and the beam source. Here's a quick video of what I've got so far (it's much smoother in reality):

Clearly, that doesn't look much like glass, and I need to remove the portion of the sphere covered by the beam source cones. That'll come later.

I also need to figure out a good way to show the screen spinning really fast. This is actually easier said than done. It's currently rendered using the overly simplistic method of adding half a degree to its Y rotation every frame. This has a number of issues:

  1. It's not very fast. But simply adding more degrees per frame results in choppy animation. Imagine adding 90 degrees per frame. Then you end up with an X. Not smooth.
  2. It's inconsistent. Because it's progressing a certain distance per frame (frame based rendering), as the frame rate varies (particularly while rotating the view), it appears to speed up and slow down. If I do any kind of animation, I should be using time based rendering.*
I'll investigate motion blur, and maybe even just replace the flat spinning screen with a cylindrical effect. I'm uncertain the approach I'll take at the moment, but it's not a priority yet. This might well be a topic for a future blog post in itself.

As for the simulation itself, it's getting there, but it's not quite perfect yet. It should be a bit more like an hourglass top to bottom. It's probably related to some inconsistent scaling (both in the simulation and the rendering) which I'll tidy up, and it's not working properly for multiple beam sources. I'll fix it though :).

Once I've fixed the simulation, I'll concentrate on the web interface!

* Older PC games used to use frame based rendering. This is why, when you played them on a more powerful PC, which was capable of rendering more frames per second, these games ran comically fast. The "touch the forward button and now you're at the other side of the map" kind of fast. This is why time based rendering is so much better - the time that elapsed between frames is used to determine how much something should be moved. Now, the speed is constant, regardless of the power of the CPU.

3 February 2017

Volumetric Display Systems Simulator

"What's... one of those?" I hear you ask.

One of these!

(images clearly downloaded off the 'net)

More specifically, "swept volume displays" are a type of 3D display technology that relies on the "Persistence of Vision", drawing points of light onto a rapidly spinning screen to produce the effect of genuine 3D objects in space.

For my final year project at University, 13 years ago now, I implemented a 3D simulator for swept volume displays. More specifically, it simulated "distortional dead zones" within any simple display configuration, allowing you to explore the best configuration for image quality. Put simply, if the screen is at right-angles to the beam source, the voxel is the perfect shape. The more acute the angle, the more elongated and fuzzier the voxel becomes, reducing image quality.

The interface was originally implemented in Visual Basic, with the calculations done in C, and OpenGL responsible for the rendering.

The original Visual Basic interface
The original Visual Basic interface

The original 3D rendering, using C and OpenGL
 The original 3D rendering, using C and OpenGL

I've learned an awful lot since then, and I was always fond of the project, so I've decided to reimplement it using modern web technologies, finally unifying the interface with the rendering in a fun and intuitive way.

27 January 2017

JHipster - Spring Code Generation

A month and a bit ago, I wrote about Ruby on Rails, comparing some nice features it has over the lack of similar Spring features.

Specifically, application structure/code generation, and automated database migrations.

While it's still true that you get a lot of features baked in to vanilla Rails that you just don't get with Spring, I've recently discovered a bunch of Spring projects that provide these features.

Probably one of the most extreme/exciting is JHipster, which is a tool that brings together loads of other projects in a easy and consistent way.

20 January 2017

"And what do you do?"

This Wednesday (18th), I attended the SME Cambridgeshire Communications & Awards Masterclass networking event in Cambourne, to learn more about effective business communication and do some networking. It was definitely worthwhile attending, but I also learned something very interesting that wasn't part of the presentations.

I didn't have a really nice, clear, interesting answer to "And what do you do?"