Chris Lowis by Chris Lowis

Show and Tell 30

  • When: Wed 08 Mar 2017
  • Where: Forge and Co, 154-158 Shoreditch High St, London E1 6HU
  • Links:

Chris R, James and I were joined by Rob, Ben and Pablo for our 30th Show and Tell event.

Chris R

Chris lives on a houseboat moored on an island in the Thames. To get on and off his boat he uses another small boat with an outboard motor. This means he is particularly interested in the stream conditions of the Thames where he lives.

The Environmental Agency do not seem to provide open data about the stream conditions but they do have a website that gives a visual indication.

Chris showed us a script he has written. It uses PhantomJS to grab a screenshot of this page. He runs it on a Digital Ocean instance and uses cron to take a snapshot every hour.

Creating the script made Chris wonder where the data comes from. He noticed that the local lock keeper’s board displays the local stream conditions but that the information is often out of sync with the website. This raises the question - does the lock keeper measure the stream conditions, inform the Environment Agency who then update the website? Or does the Agency have a device which measures the condition, updates the website and the lock keeper who then updates their board? Chris is interested in solving this puzzle and finding out if there’s a more machine-readable source of data that he could get access to.

I asked Chris how he uses the downloaded data to assess the current stream conditions. It turns out he uses the old-fashioned “throw a twig in the river” trick. But it’s good to have a backup!


James had a few things to show us this week. At Go Free Range we use Google Drive to store our documentation. And like with all cloud-based services, it’s good practice to keep a backup in case of outages or data loss disasters. James showed us rclone a library which syncs between cloud storage solutions in a similar way to how rsync syncs between file systems. It supports syncing without an intermediate 3rd server (for example your laptop) but can also shuttle data between services by keeping a local copy as it does so. James wrote up some instructions to sync Google Drive with Amazon’s S3 storage and we use this to periodically take a backup of our data. James was particularly impressed with the command line interface for rclone. It asks a series of questions that makes it easy to setup the credentials required for the tool to talk to the various services.

James has also been using Google’s OAuth 2.0 Playground. This web application makes it easy to experiment with code that uses the OAuth 2 protocol to authenticate. It comes with built in support for a large number of Google’s APIs and can also be used with 3rd party APIs that use OAuth - in particular James has been using it to interact with the FreeAgent API.

Finally, James was moving his personal blog engine from Webby to Middleman. He created a new Git repository to hold the new version of his blog but later felt sad about losing the git commit history from the old project. He discovered Git Grafts which effectively allow the history from one git branch to be stiched onto the end of a new one. One problem he ended up solving along the way was that although common git commands such as log work fine when a graft has been performed he actually needed to run git-filter-branch for everything to work as expected. James felt that if he did this again he would have done all of the new development inside the old repository as this would have been easier in the long run.


Rob has a long-term client who runs a holiday cottage rental company. For several years the client has been collecting the email addresses of customers and potential customers but hasn’t found the time to do anything with them. This week Rob helped his client build an email newsletter using Campaign Monitor that has a list of current rentals and some timely news for the upcoming holiday season. Rob was worried that because the email list contained email addresses that were collected several years ago there was a strong possibility that some people who received it would not remember that they had signed up and may mark the email as spam. A spam report rate as low as 3 in 10,000 emails can mean that some email servers start to reject future messages. Rob configured Campaign Monitor with some cohorts based on sign-up date and sent the newsletter in batches starting with the most recent cohort. He monitored the spam report rate, and was happy that only 1 person marked the email as spam in the end. He’s helping his client think through the next steps - whether to continue sending newsletters and if so how to test copy and other features to improve the conversion rate.


Ben has been taking his 8 year old son to a Saturday “code club” where he is able to learn to program with other children. The club teaches coding using Scratch - an MIT-developed visual programming language. Ben showed us the Batman-themed game his son had built which involves Batman flying around a building grabbing things from windows and putting them into his Batmobile.

Ben shows us his son's Batman game written in Scratch

Scratch is a fully visual programming environment that involves connecting blocks together to build programs. Ben showed us how Scratch communicates the idea of types. For example control flow is handled by putting hexagonal blocks (which represent boolean return values) into hexagonal slots and only that shape of block will fit in those positions. Ben was interested to see if his son was ready to start programming with variables and functions. He showed us Snap a variant of Scratch allowing the user to “build their own blocks” by programming their behaviour in a scheme-like language.

Ben said his son took to Snap fairly quickly and could see how it would allow him to do some things that were very difficult in Scratch. He said the big downside is that he doesn’t want to type! Ben mentioned that at code club when the children move on to programming in Python that the syntax of the language and having to type everything correctly is one of the biggest barriers to progression.

Ben finished up by showing some variants and extensions of Scratch/Snap including Edgy an environment for exploring graphs and graph theory.

Chris L

At Go Free Range we try to distribute all of the work required to run our company fairly among the three of us. We do this to ensure that everyone has a good working knowledge of how everything works. We use a combination of and calendar reminders to randomly assign each of our upcoming tasks to one specific person. In order to make it possible for someone to complete a task we keep detailed step-by-step guides in our internal wiki. I talked about this process and showed an example for a task I had recently been asssigned - filing our quarterly VAT returns.

I spoke about how I think there is a lot of value locked inside our internal wiki and some of the processes - as well as the reasons why we work in this way, might be useful to other businesses. I’m particularly interested in how we can help other small groups of freelancers form their own co-operatives. I showed a couple of examples of guides that other companies have published including New Zealand cooperative Enspiral’s handbook and Ruby development shop Thoughtbot’s playbook. We discussed some of the pros and cons of sharing this kind of information - in particular we noted how useful these type of guides can be to new starters in an organisation but also how they can be used to enforce certain types of behaviour if they are not written from a common, shared set of experiences and understanding. I’m going to think a bit more about where I’d like to take this project next.

James shows Jase Cale's slides about Go Free Range

My discussion of how we work reminded James of a slide deck by former Go Free Range member Jase on how we work. We went though those slides for a while before heading downstairs for a drink.

If you have any feedback on this article, please get in touch!

Historical comments can be found here.