Important: Zoetrope Labs has decided to close down after 5 great years of business. The team are moving on to new adventures. This site is left up for reference only.

Tech Blog

Welcome to the Lab

Bluetooth Mesh - the Highlights

At Zoetrope labs, we’re really excited about the potential that Bluetooth mesh offers and we’ve already started to use it on several projects. In a nutshell - Bluetooth mesh expands on BLE (Bluetooth Low Energy) to allow each Bluetooth device to connect to more than one other Bluetooth device. With... Read more

Testing complete IoT systems with hardware

Zoetrope labs has been involved in many IoT projects which lead to hardware ending up in end users homes and businesses. This poses a great challenge in that all hardware and software must not only work, but be resilient enough to deal with a wide range of customers usage patterns.... Read more

Zero downtime schema updates for mongodb / mongoengine

In IoT workflows, there is rarely an opportunity to take a system offline whilst updates are applied. In some situations a message queue can be used to hold back a torrent of incoming messages (from MQTT or AMQP), however this can only happen for so long. When your database reaches... Read more

A Serial Communication Library for Arduinos

Recently, we’ve been working on a large internet connected machine. This involves quite a large amount of electronics to drive all it’s motors, actuators and sensors. In a recent upgrade we redesigned the electronics and ended up using a system distributed across multiple arduinos, necessitating a communication protocol which could... Read more

SWmobile talk

Thanks for having me SWmobile! I’ve uploaded a web version of my deck, which you should be able to see below: Read more

Really simple MQTT IoT logging with Keen IO

We’ve blogged about Keen IO before, and love using MQTT in our IoT projects. So we decided to combine the two! Announcing KeenMQTT. MQTT is perfect for distributing and acting on near realtime data, but there isn’t much in the way of historical data access. That’s where KeenIO comes in.... Read more

ESP8266 Bootloader Modes and GPIO state on Startup

Introduction The ESP8266 is an extremely cheap wifi module with a fairly capable processor on board. Recently, it’s exploded on the hobbyist scene due to its low cost. Even better, there’s a high level development platform available (NodeMCU) which runs eLua code making programming quick and simple. We’ve been using... Read more

Web spaghetti - @drupal, @getbase, @zapier and web hooks

At Zoetrope, we keep very close ties between engineering and sales (we’re still all in the same room after all!). As part of this we attempt to reduce the number of copy-paste type tasks. On the Zoetrope homepage you may have seen this Demo registration form: This form pings off... Read more

Angle Sensor Breakout Board Giveaway

Giveaway! Edit: Thanks for all the comments, some brilliant ideas. If we could send one to everyone we would but unfortunately we only have three. We'll be sending them out soon. We’ve recently made up a batch of the angle sensor boards described below, leave a comment if you’d like... Read more

Reverse Engineering Wireless Pro Studio Lighting

Introduction At Zoetrope we always want to make sure our photos look as good as possible, this means ensuring the lighting is perfect for every shot. We currently use a number of Lencarta UltraPro 300 studio strobes to light our photos but in some cases, the power of the flashes... Read more

Beyond JPEG: Videos and emerging image standards

We’ve recently been investigating file formats to allow our animated 3D product photography to be optimised for different use cases, rather than just on the web. Currently our viewer loads 108 JPEGs of various sizes depending on the user’s device. In some situations, a javascript environment may not be available... Read more

Integration Testing with Protractor, WebdriverJS and Sauce Labs

Edit: See our follow up post to this which explains how we’ve refined our process. We’ve recently begun automating integration tests of the Zoetrope widget. When releasing any new code which could affect clients in production we have to be very careful, mainly ensuring that cross-browser compatibility is retained. WebdriverJS,... Read more

Javascript translations with google drive forms and gulp.js

We worked hard to keep the Zoetrope Engage™ Viewer (ZEV) embeddable widget as independent of language as possible. Most users find interacting with the widget very simple and require no help at all, however we wanted to ensure that it’s obvious that the image is interactive in words too. As... Read more

Replaying user interactions from Keen IO data

At Zoetrope we create engaging product photography allowing viewers to rotate and interact with products on ecommerce sites. One area we have been working on is analytics for the image viewer embedded in our client’s sites. We wanted to see how users actually behave while viewing a product; whether they... Read more

In Pursuit of Better Tethered Autofocus

Getting our images looking perfect is a huge priority at Zoetrope, and to help with this we developed a small utility providing a web interface to DSLR cameras. One issue we have is that using autofocus on our products is sometimes difficult - the small screens on cameras make it... Read more

Refining our UI Regression Tests

A few months ago we wrote about using Saucelabs and Protractor to create a testing framework around our javascript 3D photography viewer. Since then we’ve made a few changes to our process. Our previous process We started out by using Protractor and Saucelabs to grab screenshots of the viewer at... Read more