Softwire Blog


Encouraging women in(to) technology


16 February 2016, by

IMG_7268Following on from our managing director Zoe Cunningham’s blog post on getting more women into technology, I thought I’d share some of my own recent experiences around encouraging women in, and into, technology.

(more…)

Softwire Comedy Night #2


2 August 2013, by

We recently held our second annual stand-up comedy night, raising over £700 for Ashanti Development.

Five brave Softwire employees performed in front of 75 even braver spectators! Here are the (pre-watershed) highlights…

Softwire Speed Coding Challenge – 2013


24 July 2013, by

Softwire recently hosted their third speed coding challenge. The competition was open to current employees and was designed to give everyone a chance to show off their ability to code solutions to a variety of problems in as short a time as they can!

Employees speed coding

The night was organised by Matthew Richards, winner of the challenge last year. Questions were created by Matthew and were designed to be challenging (but solvable) programming puzzles which would take 30-45 minutes each. Any programming language could be used, C# was by far the most popular, but we also had some interesting solutions in languages such as Node.js, and Haskell.

The competition comprised of four questions to be answered. Two questions were set before a brief pizza break (paid for by Softwire morale) with the final two questions being set after everyone had recovered their strength!

For each question, points were given based on the speed of the (correct) response, with a maximum of 10 points for 1st place, 9 for 2nd, 8 for 3rd and so on. In addition to this, extra style points (maximum 4 in total per question) could be given “for solutions that were particularly neat, elegant or otherwise impressive” as well as extra bonus points (maximum 4 in total per question) for answering the extension questions.

Questions could go on as long as necessary until someone got an answer, at which point everyone else would have half as much time again to finish (so a question answered correctly in 20 minutes would be ended after a half-hour).

The following question is one that was posed on the night. Why not try it yourself? We’ll publish the winning answer in the next post.

Question – Hidden Images

We saw in the last Speed Coding that you have to be careful when encrypting things lest your encryption is not as robust as you thought it was. So this time round we’ll try a different technique – hiding your message so no-one even knows there’s something to decrypt. In this problem we will consider an algorithm for hiding one image within another one. (Note: In reality you probably want to use decent encryption as well!).

The hiding algorithm

Call the image you want to hide the secret. Find another, non-secret, image 3 times as wide and 3 times as tall – call this the cover. You will hide the top-left pixel (0,0) of the secret in the top-left 3*3 pixels of the cover, and so on – in general pixel (i,j) of the secret is hidden in the 3*3 block starting at (i*3,j*3).

Each pixel is hidden as follows. Consider the red element of the pixel, which is in the range 0..255. Consider this as a binary number 0..28-1 i.e. there are 8 bits of data to hide. Hide the least significant bit of the redness (which I’ll label 20) in the top left pixel, the next most significant bit (21) in the next pixel to the right, and so on as per this diagram:

Hiding one bit of redness in a pixel is achieved by taking the redness of the cover pixel, and changing its least significant bit to match the bit you’re hiding. Repeat this process for green and blue to hide the entire image. (Ignore transparency considerations – treat each pixel as having red, green and blue elements only). Since you’re only mangling the bottom bit of each colour byte, the impact on the overall image is minor – not readily visible to the naked eye.

The speed coding challenge

Here is an image of a Scottish loch in winter. Hopefully you will agree it’s not immediately obvious that I’ve hidden a secret image within it, using the above algorithm. But I have. Find that secret image. (Hint: The answer looks like a proper picture, not e.g. a random blur of colours).

Bonus questions

That wasn’t the real secret image. Having created a perfectly good secret, I let my colleague Greg loose on it for testing purposes and it acquired five more hidden images, encoded in a very similar way. Find them all.

And obviously Greg didn’t go as far as he could have done. Add some more secrets!

Softwire in the top 20 in Best Companies to Work For Awards


10 April 2013, by

For the third year running, Softwire are in the top 20 of the Sunday Times Best Small Companies to Work For Awards!

The announcement that we had ranked 12th was made at a glitzy awards ceremony in the Battersea Evolution, hosted by Kate Silverton and attended by Softwire employees Robynne and Todd.

The evening started with a champagne reception, followed by a three course meal, including a fancy trio of desserts to finish off!

It was a tense evening as we waited to find out where we had ranked this year, however Robynne and Todd kept the rest of us up to date throughout the night on our Twitter feed.

It was a great night and we’re all really happy that Softwire have ranked so highly three years in a row!

Softwire Olympics 2012 – Part I


11 October 2012, by

You may or may not have heard about a massive sporting event in London this summer… that’s right, I’m talking about the inaugural Softwire Olympics! The Olympics are a keenly contested battle between the two floors of our London offices: Upstairs (Suite 330) and Downstairs (Suite 325).

The opening ceremony coincided with the annual company picnic (one of many cool morale-building events in the Softwire calendar), which was on the 14th of August this year, and saw a number of entrants from both floors in the “Wacky Races” event and “Football Golf”.

So, “Wacky Races”… What exactly are those then? The four races were:

  • The Beanbag Race
  • Egg and Spoon Race
  • Sack Race
  • Wheelbarrow Race

This was then finished off with a medley, with one person (or pair) from each team. Each race was worth one point for a victory or two points if your team got a 1-2; the medley event was worth 3 points. All races were run on the same course, around a bucket (20-metres from the start line) and back. Independent adjudicators Dan Shavick and Tom Ward were at hand to make sure there were no shenanigans from either team!

(more…)

Battleships


20 September 2012, by

So what does a company of software developers do in its free time? Well sometimes the answer is “write more code for fun”. To this end Softwire recently held a Battleships tournament. The competition consisted of writing a bot that implemented a particular battleships playing interface. All the bots were then played off against each other in a league format. Each match in the league was a best of 100 games series. A new bot was instantiated for each match, but the same bot played all 100 games within a match. This meant that some bots were able to learn from their opponent’s earlier games to try and do better as the match went on.

The tournament itself was made up of three two week rounds and was kicked off with an evening of beer, pizza, and coding. A league was run at the end of each round and the top ten players were awarded tournament points. After the third round the player with the most tournament points became the overall winner.

(more…)

Project Euler: Inaugural meeting


4 June 2012, by

Last Wednesday, Softwire had our first Project Euler evening. After a day’s work writing code, we got together to socialise… and write some more code! But the evening shifted our focus from real-world programming problems to the abstract world of mathematics.

Like many others at Softwire, my background is in mathematics (the queen of all subjects).  Until about a year ago I had never even considered a job in computer programming, but then­­ I came across ProjectEuler.net.

Project Euler is a fantastic website that provides hundreds of puzzles and problems that require a blend of mathematics and computing to solve. After I tried a few of the problems I was hooked on programming, eventually leading me to apply to Softwire.

Since I owed my career choice to the website, I thought it was worth asking around the office to see if anyone else was interested in getting together to tackle a few problems. This led to the first meeting of the Softwire Eulerians society on Wednesday night.

The big green tick on screen is your reward for a job well done!

(more…)

Softwire Speed Coding Challenge – Question 4 Discussion


28 May 2012, by

previous article in series

In our last coding challenge post, we posed the final question from our coding challenge. Did you manage to finish it?

(more…)

Softwire Speed Coding Challenge – Question 4


21 May 2012, by

previous article in series

We’re back, with the final question of the 2011 Softwire Coding Challenge!

Navigating The Hampton Court Maze

Here is a picture of a familiar-looking maze. This version of the image is slightly cut down from the version used in the competition itself; click it to see the full-size image (which you should use if you’re trying this yourself).

Hampton Court Maze - Click for full size

 

Write a program to draw a magenta line (#FF00FF) from the exact bottom middle of the image to the exact centre of the image in the shortest distance possible. Pixels are considered adjacent if they touch horizontally, vertically or diagonally, and only perfectly white pixels (#FFFFFF) are traversable. The answer should contain the total distance travelled in terms of number of pixels (not spatial distance) and the program you used.

Hint:

The simplest optimal path finding algorithm is called Dijkstra’s algorithm (hope you brushed up on it!), and goes something like this:

  • Assign each pixel a distance from the start, initialise these values to +infinity
  • Assign the start pixel distance 0, add it to the back of a FILO queue
  • While your queue is not empty, pop the first pixel from the queue: call this “current pixel”
    • Examine all the pixels adjacent to the current pixel
    • If their recorded distance is greater than the current pixel’s recorded distance + 1, then:
      • Set their distance to be the current pixel’s recorded distance + 1
      • Add the pixel to the back of the queue
  • When you have examined all pixels in this fashion, each pixel will be marked with its minimum possible distance to the start
  • You can then trace the optimal route from the end to the start by placing a pointer at the “end” pixel and moving repeatedly to an adjacent pixel whose distance is 1 less than where you are looking (until you reach distance “0” – the start)

Once again, best of luck with this one; let us know how you get on with this in the comments and we’ll post the answer soon!

next article in series

Softwire Speed Coding Challenge – Question 3 Discussion


14 May 2012, by

previous article in series

In our last coding challenge post, we posted question 3 from our coding challenge. Did you try it yourself? Here’s the question again, as a reminder:

(more…)