Alan Richardson's Blog

Subscribe to Alan Richardson's Blog feed
Updated: 1 day 15 hours ago

How to improve your CV and improve your chances of finding your next software testing job

Wed, 07/12/2016 - 14:10
TLDR; Write your CV as benefits, and build a portfolio, to become more than just another CV on the pile and help the busy CV reader see the value that you can bring to their team.

I’m trimming out an email backlog and came across a few “I can’t get a job - please review my CV and tell me what I’m doing wrong!” emails.

I’ve collated and distilled the advice I tend to give out, to help me trim out my email and an attempt to cut down on the number of CV’s I’m sent with people asking for “help” - although agencies and companies I’ll happily consult with you, for suitable remuneration, to help you solve your CV and recruitment issues.

Some of this may have appeared on this blog before. And if you’ve asked for my advice before don’t be alarmed. I have generalized and anonymised any personal details.

Your CV is a sales pitchYour CV is an initial sales pitch. And the easy thing to learn from sales is “concentrate on benefits not features”, but its hard to put into practice. Particularly when CVs are involved.
  • Most CVs are lists of features
    • my name is
    • i live at
    • I have been trained in A (on this date), B (on this date), C (on this date)
    • from time X to time Y
      • I worked here
      • my job title was Z
      • i did X
    • i went to school, here are my grades
    • i went to university, here is my final grade
    • i like to read books and walk in the park and do other stuff too, here is a list
I look at my CV and the second page is pretty much like this too, so I don’t fully take my own advice.
Because it’s hard.

Why does it benefit the reader, your future employer, that you were “trained in A”, did you use that information? Did you build on that skill? What did you achieve with that skill? How will it transfer to my environment? Do you even remember it?

I think this is the hardest thing to do, but please try.

Make the early part of your CV a sales pitch, so read sales books, advertising copy books, and tweak and edit mercilessly.
Once you’ve sold the benefits, show them the productWe can’t wait till an interview to show the product (which is us, by the way, the person who writes the CV).

We want to show them the product early so that, either:
  • they want to interview us and are excited by our profile
  • they don’t want to interview and know that we are not for them
We only want to work with people that we are a good fit for, so we need to have a way of filtering out those environments that are not a good fit for us.

“But I put my interests on the bottom of the CV”

Yeah, I assume you can read. And I don’t care if you like to walk in the park. I want to know if you can actually do what you’ve said you can do. Assuming that you’ve already convinced me that I will benefit from you doing it.

Convince me with a (demo) portfolio of work.
  • create a blog - blogger, wordpress, medium, whatever free blog host
  • write up what you learned when you ‘did X’ and your ‘job title was Z’
  • demonstrate as many benefits as possible
    • if a benefit you will bring is ‘improving testing efficiency by coding adhoc custom automated tools’, then show me some code that does that on Github
    • if a benefit is that you can create ‘robust automated execution of the system to continually check high priority functional flows succeed by using Selenium in Java’ then show me some code that does that on Github
    • if a benefit is that you are ‘Trained in A and can knowledge share quickly with my co-workers’, then show me the evidence, and possibly slides that show your distilled knowledge
Release everything:
Releasing code to github also demonstrates, and builds, competence with version control systems. Using Travis can demonstrate, and build, an understanding of CI.

If you are nervous that the code you do outside work doesn’t reflect the quality of your code then:
  • release it
  • critique it in a blog post
“But all my work is commercially sensitive and belongs to my past employer”

Then do more work, at home, so you own it. Write code that represents the core parts of what you have learned.

“But I don’t have time”

Here’s some other advice from people:

Felix Feng
TJ Maher
If you want it, you work for it.And you probably already have worked for it.

I want you to make all the hard work that you’ve already done, and continue to do, impossible for the people reading your CV to ignore.

Because they will try to ignore it. Because they are busy. And the first excuse they have to drop your CV and move on to the next, they will take.
Rewrite your CV for the roleWhy are CV’s short? Is it for the benefit of the reader?

No. It’s so we can update it and tailor it for each role. (and possibly for the benefit of the reader).

When you do this, you might find that some of your experience doesn’t fit the role. Particularly when you are just starting out.

Which means, for experience that is not related to the current role, rewrite to emphasise the overlap between the previous role, not just the task. This helps when you take a ‘benefit’ approach to writing your CV.

It is vital to rewrite your summary for each role. Particularly if you have an “I am looking for a role where I can…” section, you better make sure that what you’ve stated you want, is actually on offer, otherwise the reviewer won’t move beyond that.
What about Linkedin?Use Linkedin as a supplement for your CV.
  • Your CV can concentrate on the benefits and the evidence since it only has a short amount of space.
  • Linkedin can describe the features - where you worked, and what you did.
  • Linkedin can also support your evidence with slideshare integration and ‘publications’ and ‘projects’
  • Use the summary on Linkedin as your sales pitch.
  • Remember to make your profile visible to public visitors, because people reviewing your CV probably aren’t connections yet.
We don’t have time to cover Linkedin profile summaries here, but feel free to have a look at mine and reverse engineer it to tweak yours:
A few tips we do have time for:
  • sell in the summary
  • use unicode characters (stars, ticks, circles, etc.) to format your title and summary
  • have a decent/business photo
  • write information about each role, flesh the profile out
Melanie Dodaro has good advice on using linkedin on her blog
  • benefits not features
  • provide links to evidence in a portfolio
  • make every experience count by describing benefits
  • supplement your benefit based CV with Linkedin
If you do a little extra work building a portfolio, then you can become more than just another CV on the pile. And you’ll help the busy CV reader see the value that you can bring to their team.

Best of luck.
Categories: Agile, Software Testing

Hacking JavaScript Games - Cellular Automata - Supporting Notes

Thu, 01/12/2016 - 21:20

Hacking JavaScript Games - Cellular Automata - Supporting Notes

Hacking JavaScript Games - Cellular Automata from Alan Richardson

And there are more notes below:

Hacking JavaScript Games - Cellular Automata - Supporting Notes

We will Hack This Game

Cellular Automata Life Game Suitable for Hacking

Supporting Videos

Challenge - Change Colour in Cellular Automata

The simplest thing we can do to this game of life is to change the colour.
It is also the most visible thing.
Using the game:
Colour in the GameIn the code we have the World function - which is an object class.
And the World object has an entityColour.
If we can change that, then we can change the colour.
I could use any six values from 0-9, A-F to make an HTML colour code
Change colour by debuggingI set a break point on the line where the colour is set in the sources view.
  • Line 153
  • this.entityColour = "#FF0000";
  • Step over that line so the colour is set.
  • press esc to get the console up.
  • change the colour in the console:
this.entityColour = "#111111";
Change colour from console when runnning game
  • change the colour using the console
  • inspect element and find where World is instantiated with new. i.e. ctrl+F and search for new World.
var world = new World(worldSizes.myWorldWidth, 
And I can change that whenever I want:
world.entityColour = "#111111";
Watch The Video
Change Colour AutomaticallySimple - have a bot to change colour every set time interval - say 1000 milliseconds.
The challenge is that I need to use a hex value to do that. So let's figure that out first.
Random Hex Value
  • I can use 0xFF as a Hex integer value, and it is 255
  • I can use the toString method on a Number to convert a number to a base e.g. base 2 for binary or base 16 for hex:
  • I need to get a 6 character string, even if my hex value is only FF and I can do that by creating a string and using the last 6 characters e.g.
  • And I want my string to be "0" padded at the front so I'll just add "000000" at the front of any string:
  • And I want a Hash # in front
var myNum=3;
"#" + (("000000" + myNum.toString(16)).substr(-6))
Use Game Random Int CodeThe game already has a random number generator:
getRandomInt(0, 0xFFFFFF);
Use that
"#" + (("000000" + 
getRandomInt(0, 0xFFFFFF).toString(16)).substr(-6))
And I have a way to generate a random HTML hex colour value.
Randomly set the colour every secondCreate a bot to change the colour every 1000 milliseconds.
var colourChangeBot = setInterval(function() {
world.entityColour = "#" + (("000000" +
getRandomInt(0, 0xFFFFFF).toString(16)).substr(-6));
}, 1000);
Stop the bot with:
Make Bot Faster or SlowerChange the value 1000, to make it faster, or slower:
  • 500 - every half second
  • 200 - every 200 milliseconds
Danger Flashing Lights.
Just be careful you don't make it so fast that you have a seizure.
Cycle over all the coloursThis is a bit slower:
var currColour = 0;
var colourChangeBot = setInterval(function() {
world.entityColour = "#" + ("000000" +
if (currColour >= 0xFFFFFF) {
currColour = 0;
}, 1)
Watch The Video

An Invasion Challenge

Control the InvasionStop the invasion by calling:
Start an invasion with:
Where 100 is the amount of milliseconds before the next lifeform is added.
Create a Glider
Which creates a glider at position (10,0)
I could create an invasion of gliders like that
var gliderInvasion = setInterval(function() {
addLifeForms.glider(world, 10, 0);
}, 1000);
But an invasion should be randomFirst stop the old invasion:
Then start our new invasion:
var gliderInvasion = setInterval(function() {
getRandomInt(0, world.xSize - 50),
getRandomInt(0, world.ySize - 50));
}, 100);
Watch The Video

Change World Size

One of the challenges in the Cellular Automata game is changing the world size.
There is a clue in the game code, because we know that it does some resizing when we change the window size.
var world = new World(
Let's Change the World - Make is smaller
Let's Change the World - Make is bigger
Nope, that didn't work
Let's Change the World - Make is biggertell the world that it is bigger
world.xSize=1000; world.ySize=1000;
That worked - and its a little slower now, because thats 1000 x 1000 grid, which is 1,000,000 (1 million) cells!
Simulate ZX-81The ZX-81 had a resolution of 64x48, and it was black and white, so let's simulate that.
worldSizes.myWorldWidth=64; worldSizes.myWorldHeight=48;
And slow it down:

Watch The Video

Create A Random World

We first want total control over the game.
  • start game
    • startGame(5)
  • stop game
    • stopGame()
  • stop invasion
    • stopInvasion()
Stop the Game and Clear the world
It would be useful to also clear the display.
But we'll only see the results if we start & stop the game again:
Randomly generate stuffReset the population:
world.population = [];
I'll add items in a loop, and create 100 of them:
for(var itemLoop=0; itemLoop < 100; itemLoop++){
world.addToPopulation(new LifeForm().move(0,
getRandomInt(0, world.xSize),
getRandomInt(0, world.ySize)));
Start the game, we should see the results:
100 might not actually be big enough, you might need to create more for a viable world.
Experiment and Watch the VideoExperiment with different loop sizes to see what works for your world - remember its a harsh world out there for these cells so sometimes you need to start with a lot of them.

History of Game Of Life

John Horton Conway's Game of Life
Programs to download, install and experiment with:

online games of life:

Cellular Automata Life Game Suitable for PlayingCellular Automata Life Game Suitable for Hacking

Related References:

Good simple Overview
Good set of resources
Wolfram description
History of Computer Game Design - Stanford

Recommended Books

  • Artificial Life - by Stephen Levy
  • The Garden in the Machine by Clause Emmeche

Watch A Video on the History of the Game of Life

Other Contributions

Danny Dainton experimented with the Game of life and created a 'text' image.
And he has released thecode for it on github.

Thanks Danny

How to Create Text

I took a different approach to Danny for the text creation:
  • I thought it would be easier to write text to the screen
  • scrape the pixels
  • add the pixels as blocks to the world
First Write the Text
// stop the world and clear the world and screen
world.population = [];

// plot the text we want

context.font = "14px verdana";
// kerning hack
var padding = String.fromCharCode(8202)+String.fromCharCode(8202);
context.strokeText("Thank".split("").join(padding), 0, 15);
context.strokeText("You".split("").join(padding), 0, 30);
context.strokeText("Danny".split("").join(padding), 0, 45);
Then get the pixels and add them to the world
var imageData = context.getImageData(0,0,200,60);

var scale=4; // less than 4 and it will evolve
var imageX=0;var imageY=0;
for (var i=0;i<;i+=4)
if([i]!==0 ||[i+1]!==0 ||[i+1] !== 0){

addLifeForms.block(world, imageX*scale,imageY*scale);

Then startGame(5);

Watch Bonus Video: Making Text With Cellular Automata 

What can you do with it?

Experiment and see what you come up with
Categories: Agile, Software Testing