Blog Posts

Notes, write-ups, and the occasional deep dive: research from my PhD years, home automation, and side projects.

Jul 2023
Home Automation / Home Assistant setup with recommended hardware: The four-year update Overview of my current hardware for my smart home powered by Home Assistant. An update on my previous post of four years ago (!) when I had just started with home automation.
Jan 2023
Automatically turn on tv when streaming to a Chromecast Quick Node-RED tutorial on automatically turning on a TV when streaming media.
Jan 2022
AI for diagnosis of prostate cancer: the PANDA challenge Artificial intelligence (AI) for prostate cancer analysis is ready for clinical implementation, shows a global programming competition, the PANDA challenge.
Jul 2020
Automatic dark mode for Home Assistant Quick tutorial on setting up an automatic dark mode for Home Assistant.
Jun 2020
Local face recognition for Home Assistant using TensorFlow.js, Part 2: Learning to recognize faces Second post of my series on face recognition for presence detection in Home Assistant. In this post, I create a face recognition system.
May 2020
Local presence detection using face recognition and TensorFlow.js for Home Assistant, Part 1: Detection Face recognition can be a cool addition to a smart home but has potential severe privacy issues. In this post, I start building on a completely local alternative to cloud-based solutions. This first part focusses on face detection.
Apr 2020
Improve prostate cancer diagnosis: participate in the PANDA Gleason grading challenge Can you build a deep learning model that can accurately grade prostate biopsies? Participate in the PANDA challenge
Feb 2020
The potential of AI in medicine: AI-assistance improves prostate cancer grading In a completely new study we investigated the possible benefits of an AI system for pathologists. Instead of focussing on pathologist-versus-AI, we instead look at potential pathologist-AI synergy.
Oct 2019
Setting up Home Automation with Docker Compose: Home Assistant, Node-RED, and more Docker-compose is a convenient way to setup and configure your home automation system. In this post, I describe my setup and the configuration needed to run the containers.
Aug 2019
Epithelium segmentation using deep learning and immunohistochemistry We developed a new deep learning method to segment epithelial tissue in digitized hematoxylin and eosin (H&E) stained prostatectomy slides using immunohistochemistry (IHC) as reference standard.
Jul 2019
The public PESO dataset: prostate H&E whole-side images for epithelium segmentation Public dataset of prostatectomy whole-slide images for epithelium segmentation, licensed under a BY-NC-SA Creative Commons license.
Jul 2019
Pathologist-level Gleason grading using artificial intelligence (AI) & deep learning We developed a fully automated deep learning system to grade prostate biopsies using 5759 biopsies from 1243 patients, and showed that this system achieved pathologist-level performance.
Feb 2019
My Home Assistant Smart Home setup with hardware list Continuously updated overview overview of the tech I use in my smart home.
Jan 2019
Node-RED based custom full-room wake-up light Using Node-RED and Home Assistant and would you like to build a custom full room wake-up light? In this post I show my setup and explain how to build a wake-up light using Node-RED.
Jan 2019
Simple and efficient data augmentations using the Tensorfow tf.Data and Dataset API The tf.data API of Tensorflow is a great way to build a pipeline for sending data to the GPU. In this post I give a few examples of augmentations and how to implement them using this API.
Jan 2019
Setting color temperature and brightness of IKEA Tradfri lights simultaneously with Home Assistant A small trick to set the color temperature and brightness of IKEA Tradfri lights simultaneously using Home Assistant and/or Node-RED.
Dec 2018
Talking to my house: Building a chat bot with Home Assistant, AppDaemon and Telegram In this blog post I discuss talking (or chatting) to your home using a Telegram bot. I cover making a new Telegram bot, connecting it to Home Assistant and then building functionality using AppDaemon.
Oct 2018
Unsupervised Cancer Detection using Deep Learning and Adversarial Autoencoders Prostate cancer is graded based on distinctive patterns in the tissue. At MIDL2018 I presented an unsupervised deep learning method, based on clustering adversarial autoencoders, to train a system to detect prostate cancer without using labeled data.
Jun 2018
Epithelium segmentation in H&E-stained prostate tissue using deep learning Building systems to detect tumor, in this case prostate cancer, is often hard due to a lack of data. Tumor annotations made by pathologists are often coarse due to time constraints. With this project we want to automatically refine these annotations by building a system that can automatically filter out irrelevant parts of the data.
Apr 2018
Room wake-up light: Custom room-wide wake-up light using Home Assistant In this post I will show you how to build a custom wake-up light system. The automation will be configurable (on/off, time) and has a switch to disable it on weekends.
Oct 2017
Getting started with GANs Part 2: Colorful MNIST In this post we build upon part 1 of 'Getting started with generative adversarial networks' and work with RGB data instead of monochrome. We apply a simple technique to map MNIST images to RGB.
Sep 2017
Getting started with generative adversarial networks (GAN) Generative Adversarial Networks (GANs) are one of the hot topics within Deep Learning right now and are applied to various tasks. In this post I'll walk you through the first steps of building your own adversarial network with Keras and MNIST.
Jun 2017
Import/Adding Instagram posts to Jekyll To integrate Instagram posts in to my website I created a small helper script that does the importing. In this post I'll explain how it works.
May 2017
Website upgrade & Jekyll blog optimizations It has been over two years since the last full update of my website itself and it was time for an upgrade!
Apr 2016
IoTDI/IC2E 2016 Presentation: Human SLAM Last week I gave a presentation at IoTDI 2016 regarding my Human SLAM research. My presentation can be viewed online.
Mar 2016
Blog Optimization: Replacing Font Awesome with SVG My blog is hosted using Jekyll which is a static site generator. Static sites are inherently fast, but I took some extra measures to achieve an even faster website. This is part 1 of the series: replacing Font Awesome.
Feb 2016
Website status monitor using Jenkins Jenkins is a great tool for continuous integration and deployment. It can also be used for monitoring websites that are live. In this post I'll show you my approach using a simple shell script.
Jan 2016
Building a Sous Vide temperature monitor (Part 1, Hardware) Part one of my custom built external water bath monitor for sous vide. Running on a Spark Core and using DS18B20 temperature sensors for measurements.
Dec 2015
Publishing an ES6/ES2015 package to NPM How to take an ES6/ES2015 library, transpile it with Babel, and publish it to npm so it runs on ES5 systems without elaborate build tooling.
Oct 2015
Kalman filters explained: Removing noise from RSSI signals Why RSSI signals are noisy, why that matters for indoor localization, and how a one-dimensional Kalman filter cleans them up in real time.
Sep 2015
Lightweight Javascript library for Noise filtering using Kalman filters KalmanJS, a tiny dependency-free Kalman filter for one-dimensional signals in the browser. Built originally for an indoor localization project.
Sep 2015
Human SLAM, Indoor localization using particle filters A particle-filter approach to indoor localization that maps a building and locates the user at the same time, using only a phone and Wi-Fi RSSI.
Jun 2015
SLAC.js Indoor localisation using Javascript SLAC.js, a JavaScript implementation of FastSLAM for indoor localisation. Locates the user and the access points around them at the same time.
Feb 2015
Diving in into the Model with GPy A closer look at the inner workings of GPy models, decomposing the Gaussian Process Latent Variable model parameter by parameter.
Feb 2015
First steps with GPy A practical introduction to Gaussian processes through GPy, the Python framework maintained by the Sheffield machine learning group.
Feb 2015
Simple WSN Simulation with Matplotlib Animations A small Python simulator for wireless sensor networks I wrote during my graduation internship, with Matplotlib animations of the result.
Feb 2015
Hello, World! The mandatory first post of the blog. Nothing technical here, just a marker for the day the site went live in February 2015.

Back to interests

Copyright © 2026 Wouter Bulten

I may not have gone where I intended to go, but I think I have ended up where I needed to be.

— Douglas Adams, The Long Dark Tea-Time of the Soul

Colophon & disclaimer