Gerrit Niezen

Maker of open-source software and hardware.

Feature image

Have you seen the Remote Only manifesto written by Gitlab that has been doing the rounds on the internets lately? This is basically how we work at Tidepool.

We currently have a team of 14 people based in the US, Canada, Australia and the UK. We used to have a main office in San Francisco, but now that our team is not mainly concentrated in the Bay Area anymore, we are now truly remote only.

Slack works well for us in terms of asynchronous communication. When I start work in the morning, I can quickly reply to questions people in other timezones left me overnight. For group video calls we still use the old Google Hangouts, as the new Google Hangouts Meet is very much a downgrade at the moment. For one-on-one meetings Slack's video call feature works quite well – I especially like the feature to draw on the other person's screen during screen sharing.

We use Trello for tracking tasks and prioritizing work, falling back to Google Docs if something needs more than a card to describe it. GitHub has been invaluable for remote collaboration, which is why I consider their acquisition by Microsoft earlier this week to be a cause for concern.

Having a fast, reliable internet connection is essential for remote-only. A good microphone helps too. And having a separate room that you use for your office helps to separate work and family life.

We try to get together at least twice a year in the same location (usually Santa Cruz), as it's true that remote work is not a substitute for human interaction. These offsites are usually reserved for prioritising tasks and overall company strategy. I also try to work from a co-working space in town at least once a week, to stave off loneliness and interact with people working on other software-related projects.

From my experience working remote for almost three years now, the benefits outweigh the disadvantages by far. If you have the opportunity to work for a remote-only company, or if you can transition your existing organisation to a remote-only one, I would highly recommend it.

#Tidepool

Comment on this post

Feature image

We had an allotment[1] for a couple of years here in Swansea. It took us a year and a half[2] to get hold of one, as the waiting lists tend to be very long everywhere in the UK. We enjoyed the grow-your-own part of it very much, but it was just too far away to make economic or environmental sense.

It usually took anywhere from 20 to 40 minutes to get there based on the traffic. It's partly this quote from Jay Rayner's “A Greedy Man in a Hungry World” that made me think twice:

if you are renting an allotment a mile or two from your house, which you have to drive to, so as to carry tools there and produce back, you will quickly bestow upon your food a carbon footprint of the size that would embarrass a multinational oil company.

I disagree with a lot of what he says in that book, but he's got a point about the carbon footprint of an allotment that's not within walking distance. We gave up the allotment at the beginning of this year.

Given the super short summer and lots of rain here in Wales, you have a pretty limited growing season if you're not using a greenhouse. It's also easy for pests to quickly wipe out an entire crop. We had lovely tomato plants that were destroyed in less than a week by blight.

I was also a bit surprised by how expensive it can be, for example to provide nutrients like compost if you don't already have your own compost heap. And I found weeding to be very time-consuming, but my wife tends to enjoy it. Overall what I found most disappointing was the yield when conditions weren't perfect.

But what if:

  • we can grow all year round
  • we can eliminate weeds and pests
  • minimize the amount of nutrients required
  • do it anywhere, even on an airship or a boat
  • maximize yield

That's the promise of hydroponics, which is why I want to give it a try. I found a tutorial on Instructables that I'm going to give a go, and will post the progress here when I get started.


  1. also known as a community garden in the US ↩︎

  2. registered with the city council in November 2014, got the allotment in May 2016 ↩︎

#Hydroponics

Comment on this post

Feature image

I use Goodreads to keep track of the books I've read. You may notice on my Goodreads profile that I joined their 2018 Reading Challenge. This is the second year that I've done it, as it gives that extra bit of motivation to continue my reading habit:

Just by building a tiny habit of reading at least 30 minutes per day I have already read 21 books this year ✊ https://t.co/Fuw2wc56MZ

— Gerrit Niezen (@gendor) October 5, 2017

I prefer to get my books from the library, but sometimes being able to immediately start reading a book I just found is great on Kindle. I also use the highlight function on Kindle, and receive a daily digest of recent highlights in my inbox, courtesy of Readwise.io. And of course, when I finish a book on Kindle, it automatically gets marked as read on Goodreads! That said, nothing beats holding a physical book in your hands.

#Reading

Comment on this post

Feature image

During my afternoon run I was listening to The Amp Hour podcast interviewing Jeri Ellsworth who co-founded CastAR, and thinking to myself that doing a VC-funded startup if you're an engineer sounds like a really bad idea.

Jeri and her co-founder Rick Johnson were working on Augmented Reality (AR) glasses at Valve, and started CastAR to commercialise the technology on their own after Valve shut down the project. They did a Kickstarter, but returned all the money to their backers when they raised their first round of VC funding. CastAR shut down in 2017 after they ran out of money, but to hear the reasons why from Jeri herself was illuminating.

Basically, as soon as her investors decided to scale and brought in a new CEO that was aligned with investor interests, she lost control of the company. The number of middle-management employees ballooned, they spent hundreds of thousands of dollars just on renaming the product, and the new upper management were taking multiples of her founder's salary in compensation.

That made me think that an open-source hardware project like Gordon Willam's Espruino is really at the other end of the scale. Each new product is funded through Kickstarter, and then sold through his e-shop and other distribution partners. I noticed that he is also getting donations through Patreon, as a lot of people (me included, see yesterday's post) use the Espruino software with ESP8266 and this provides another channel to fund his work.

While this second route seems hard and doesn't promise massive returns, I think it's less risky than the VC-funded route and a lot more fulfilling. I realise Espruino and CastAR are completely different projects, but I do wonder what a successfully bootstrapped open-source hardware project making consumer hardware would look like.

#Bootstrapping

Comment on this post

Feature image

I have a tiny growhouse standing outside that I've used for seedlings in the past, and potentially want to use for growing veggies hydroponically in the future. It occurred to me that I don't know how hot or cold it gets inside.

Given that it is standing against the side of the house, it gets a lot of sunlight at certain times of day and almost nothing at other times. When I know it's warm outside I open up the flap to make sure it doesn't get too hot, but I'd like to know exactly how hot it gets.

I've worked with DS18B20 temperature sensors in the past, so I knew that they are ubiquitous and pretty easy to work with. You can buy the bare chip, but I went with the waterproof version at the end of a 3 metre lead from Amazon for £3.99 including P&P. The reason for getting a temperature sensor on a lead is so that I could keep the prototype (with microcontroller on a breadboard) inside the house connected to power and just run the lead outside through the window, so that it's the only part that needs to be waterproof.

I then had to decide which microcontroller to use. Originally I wanted to use my C.H.I.P. from Next Thing Co. but it looks like they recently went bust, so I dediced to give the ESP8266 chip a try. There are a bunch of NodeMCUs at my local hackspace available for less than a fiver, and they seem like a pretty neat prototyping platform, as it's breadboard-compatible and then just plugs into USB. I've tried using the built-in Lua interpreter in the past, but I found it to be a bit flaky so decided to go down the Arduino Core route instead.

I took me forever to get the basic DS18B20 Arduino code example to work. It turns out that I had my wires swapped: There are two types of DS18B20 sensors with red, yellow and green wires and I had the less common type where the yellow wire instead of the green one is ground. One good thing came out of this: On that page describing the sensor types I discovered that there is an ESP8266 port of Espruino, which would allow me to write actual JavaScript code, not “NodeJS-like” code which is actually Lua[1].

Man, was this a game changer. Espruino has great example code, and a simple web-based editor which allows you to connect to the device over WiFi and update your code over the air (OTA) almost instantly. Compared to the Arduino Core where it can take quite long to update your code over USB, this felt magical. I know Arduino Core has OTA capability too, but I haven't tried it yet.

So, without further ado, here is the code I use to connect to the temperature sensor, cobbled together from various Espruino examples. It takes a sensor reading every minute (in Celsius) and runs a web server that displays a temperature graph. It also toggles the on-board LED when it takes a reading. I specifically did not want to use an IoT platform/service, as they don't tend to stay around for long and the ESP8266 is perfectly capable of running its own web server:

temperature graph

var wifi = require('Wifi');
var http = require('http');

var led = Pin(NodeMCU.D4); // on-board LED
var toggle = 1;
var ow = new OneWire(NodeMCU.D3); // data pin connected to D3
var sensor = require("DS18B20").connect(ow);
var history = new Float32Array(30); // store 30 readings

function updateLed(){
  digitalWrite(led, toggle);
  toggle=!toggle;
}

setInterval(function() {
  updateLed();

  var temp = sensor.getTemp();
  console.log(temp);
  // move history back
  for (var i=1; i<history.length; i++)
    history[i-1]=history[i];
  // insert new history at end
  history[history.length-1] = temp;
}, 60000);

function onPageRequest(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('<html><head><meta charset="utf-8"/><meta http-equiv="refresh" content="60"></head>'+
            '<body><canvas id="canvas" width="200" height="200" style="border:1px solid #888;"></canvas><script>');
  res.write('var d='+JSON.stringify(history)+';'+
'var c=document.getElementById("canvas").getContext("2d");'+
'c.moveTo(0,100 - (d[0]-d[d.length-1])*10);'+
'for (i in d) {'+
'var x = i*200/(d.length-1); var y = 100 - (d[i]-d[d.length-1])*10;'+
'c.lineTo(x, y);'+
'if (i % 5 === 0) c.fillText(Number.parseFloat(d[i]).toFixed(1),x,y - 2);}'+
'c.stroke()'+
'</script>');
  res.end('</body></html>');
}

function onInit() {
  wifi.restore();
  http.createServer(onPageRequest).listen(80);
  console.log("Server created at " + wifi.getIP().ip);
}

onInit();

What's also great about Espruino is that it saves your WiFi credentials separately on the flash memory, which means you don't accidentally expose them in your example code. 😉


  1. which is where NodeMCU gets its name from ↩︎

#Hydroponics #Electronics

Comment on this post

Feature image

It looks like a lot of people are migrating to GitLab in the wake of the Microsoft acquisition news.

I came across a tweet this morning by John O' Nolan, founder of Ghost[1]:

Hope this is true. Github could use some fresh leadership, and Microsoft under Satya is probably the best possible home for it. https://t.co/7v2ztLXP2U

— John O'Nolan @ 🇨🇦 (@JohnONolan) June 3, 2018

I wish I could be this optimistic, but I really think it's going the other way. Even under Satya Nadella, Microsoft is a company that kills it acquisitions:

.@Microsoft's open source playbook: https://t.co/d2JMknhXLv
1. embrace <-– we are here
2. extend
3. extinguish

— manic pixie dream boy 🇳🇿 (@ahdinosaur) June 4, 2018

The reason this hits so close to home for me is that during 2009 to 2012 I was working on my PhD as part of a larger EU project called SOFIA[2]. This project was led by Nokia, right around the time that they got bought by Microsoft. Nokia (now under Microsoft) were suddenly not all interested in the work we were doing. Instead of the stuff I worked on being productised and used in the real world, the only place where they ended up was in my thesis. that's to not even mention the impact that Microsoft's embrace-extend-extinguish strategy of Nokia has had on Finland's economy, people and psyche.

I still remember when Microsoft bought my favourite todo-list app, WunderList:

Microsoft just bought Wunderlist :( How sad, it has been my favourite to-do list app for a long time. Alternatives?

— Gerrit Niezen (@gendor) June 1, 2015

It took them fewer than two years to get to step 3:

I knew it was only time before Microsoft would do this, the bastards! https://t.co/b1UnJfJWtd

— Gerrit Niezen (@gendor) April 20, 2017


  1. the platform this blog runs on ↩︎

  2. Smart Objects For Intelligent Applications ↩︎

Comment on this post

Feature image

I joined Facebook more than a decade ago. The beginning was great – a social website that was actually well designed was taking on the big MySpace. The more people joined the more fun it was.

I remember even developing a Facebook app at one stage, something that would show a series of photos of your choosing on your profile. (I think Facebook includes that feature by default now?) It started going downhill after the news feed launched, when Facebook profiles were not the main focus anymore.

Facebook was great to stay in touch with friends when I moved overseas. But I started using it less and less. The whole Cambridge Analytics scandal felt like the last straw, and I downloaded all my account data with the intention to close my account. But I still didn’t have the impetus I needed to click the delete account button.

Yesterday my wife sent me a message asking “why are we not friends on Facebook anymore”? I haven’t logged in in a week, but when I took a look at my account all my friends were unfriended. It looked like a Facebook glitch, but finally gave me that push I needed to click that button. #DeleteFacebook

Comment on this post

Feature image

I've made many attempts at starting a blog. Let's see if it sticks this time ...

Comment on this post

Enter your email to subscribe to updates.