Joshua de Haan
Builder of things.

Hey there! Welcome to my portfolio. I have a diverse set of skills that I use in my profession as well as in my personal projects.

Hardware design

I have more than a decade of experience designing printed circuit boards.
In this period I have designed products with varying requirements regarding power, speed, size and flexibility.
Here is a small selection of the designs I have made;

Obruza

A device designed to automate cell culture processes. From controlling the environment to monitoring the cells it replaces multiple devices and manual steps needed to cultivate cells. Built in collaboration with a highly interdisciplinary team, I designed nearly all of the electronics and I did some of the programming.

The MoMoSyMo

Programmable music synthesizer module for eurorack. Design includes:
- Cyclone II FPGA
- Eight 16 bit ADCs 200ksps
- Eight 16 bit DACs 200ksps
- Eight digital inputs & Eight digital outputs
- Ram expansion for delay & reverb
Click here to see the first test run.

ACKade Controller

Created for the arcade machine in our hackerspace, it allows 28 buttons to be connected and can emulate a keyboard or joystick. Uses USB so can be used on a wide variety of devices. Firmware updates can be done over USB.

IncoSense Smart

Incontinence sensor developed for nursing homes to notify staff when residents need attending. Keeping the power consumption low and finding the right wireless technology made this a challenging project. I ended up developing a very clever technique for removing measurements errors. Unfortunately due to lack of funding the project stalled. I did co-write a patent which you can find here.

HDMYboy

My first real big project. I made a mod that allowed users to upgrade the original gameboy to be able to output HDMI. Ran a kickstarter campaign and a pre-sale but unfortunately couldn't manage to deliver as I lacked experience and my budget was extremely limited. I still regard the project as a success because it taught me quite a few valuable lessons on product design. Here is the website.

Software design

My favorite programming language is Python! 🐍
Though lately I have been building more projects with javascript because Vue.js is awesome.
Occasionally I'll dabble in other languages, it depends on what the situation requires really.

Bezier seaweed

Module for creating Bezier curves.
‍
Give a set of control points and it will calculate the points that make up the resulting Bezier curve. By changing the control points over time you can animate the curves.

Github

ACKbar

Point of sale system for our hackerspace.

ACKbar is a self checkout system that keeps track of inventory and cashflow. This allows insight into product consumption and when the moneybox needs emptying. We use Grafana to plot data over time and show current status.

Github

Primi

Primi helps you prioritize between choices.

Making choices isn't always easy. There can be a lot of factors that you need to take into account. If the list of items you are comparing is also relatively large you need a good overview to remain effective. Primi helps you with this. Just fill it in and it will return a list sorted to your specs. You can try it out by clicking here.

Github

Isles

Module for easier python threading.
‍
Inspired by microservices, Isles uses a messaging system to call functions, return values and raise exceptions across threads. The use of messages makes logging a breeze and helps prevent common threading pitfalls due to their atomic nature.

Github

3D NFT Art Generator

A tool to make more expressive 3D NFTs.

Current NFT design workflows are limited by an intermediate 2D step required to mix parts in order to create the final image. This results in a constrained camera, pose and lighting setup that makes the images look extremely static. My tool allows the artist to have more creative freedom by performing the mix operation in the 3D environment itself. The images shown here have been generated by this tool.

Github repo is currently private.

Generate and visualize pointcloud from cell images

I was curious to find out if I could create a 3d point cloud from cell images take at different focus depths. I made a naive implementation by extracting features from images and sorted them by sharpness (FFT high frequency). If a feature had a sharpness above a certain threshold it would display as a point. Color denotes the depth. Written in python. Uses Opencv, Numpy and Open3d.

Spirograph

I was curious to find out how a spirograph would look if you could not only see the resulting path from some initial conditions but also alter them over time. For a strong visual contrast I chose to use the primary colors and I really like how it looks.Written in python. Uses pygame.

Bouncing metaballs

Metaballs display a fluid like attraction to one another when they get close enough. I found it so appealing that I tried several approaches before settling on this one. I like to optimize my algorithms before throwing more processing speed at them and I found a particular clever trick to get this to render real-time. Written in python. Uses pygame.

LEDstrip animation library and emulator

One of the members of ACKspace (xopr) created a 200 pixel LED strip whose LEDs were addressable by sending UDP packets. Enthusiastic about the project, I made an emulator and a library that allowed the easy creation and debugging of animations based on mathematical principles.

Fractal generator

I like making programs that produce pretty images. This is one of them. By pressing buttons it allows the user to change the rules of generation. One of the shapes that appears is the classic Sierpinski triangle. Written in python. Uses pygame.

Simple raycaster

I've developed several raycasters over the year and figured it was a nice exercise to try and build one in javascript to get familiar with the language. I implemented walking around, collisions, a mini-map and walls having different colors and was happy with the result.

Doom level parser

As a kid Doom was one of my favorite games. As an adult I like reading up on how the engine worked astonishingly well for its time. Depicted is the map of the first level of Doom 2. I wrote a python program that parsed the WAD file and drew the location of the walls and items as an exercise.

CodinGame Challenges

CodinGame is a platform with a wide variety of programming challenges.
Each challenge consists out of several levels and one must write a program that is generalized enough to solve them all.
Some of the challenges are rather difficult, but that just makes them more fun 💪
Here are some of the challenges I finished which I particularly like;

The Labyrinth

"The goal of this puzzle is to explore a map with a fog-of-war until you have found a point of interest and the best path to get back. Take all the time you need on exploration because you will need to be certain to have the shortest path to get back to the entrance from the point of interest."

I solved this challenge with Dijkstra's algorithm and a simple heuristic that favors exploring until it finds the shortest path.

Mars Lander

Land a spaceship on a flat piece of land without running out of fuel or landing too hard.

To solve this challenge I used a state machine to divide the goal into several smaller steps, namely; approach, brake, drop and land.

For approach and brake I calculated an angle to thrust ratio that minimizes vertical acceleration by gravity.

During approach I estimate where the ship would stop if I would decelerate and use that to determine when to commence braking.

Death First Search 2

Prevent the agent from reaching a gateway by blocking routes.

I used Dijkstra's algorithm to calculate the path of the agent to all the gateways. If possible nodes connected to multiple gateways are prioritized above single connected nodes. Either way, the closest of the nodes is selected and their routes are blocked.

In retrospect a tree searching algorithm would have better fitted the problem and I'm considering implementing that instead.

Art and graphic design

As is probably apparent from my software projects, I also really enjoy aesthetics.
Here are a few things I've made.

Tuinkabouters

I created this logo for a fictional garden center. I wanted something playful yet 'strak' as they say in Dutch. I think I managed to capture those properties quite nicely.

Golfclub Egelen

I created this logo for a fictional golf course. Shown is a wavy terrain typical for golf courses. The curves evoke the relaxed feeling people associate with golfing, whereas the font choice stands as a reminder that this is an establishment with class.

H'ack & Wh'ack

Our hackerspace "ACKspace" has its own D&D group. It is tradition within our hackerspace to try and incorporate the letters 'ACK' as often as possible in everything we do and build; this logo played into that very nicely.

Making planets in Blender

Blender has an excellent shader system that has a great degree of flexibility with the use of nodes. I have made a couple of planets and I'm really happy with the results I got.

Low poly spaceship in Blender

Playing around with the mesh editor in Blender and having fun with extruding, beveling and inset faces to create this simple spaceship.

Making a head in Blender

Interested in learning how to make more organic shapes in Blender I decided to pick up the sculpt tool. I decided to create a head as that just seemed to be the most interesting to make. In a couple of hours I made this, not too shabby I think but practice would definitely improve this skill.

Self portrait with lines

One particular early morning I made a picture of myself and my surroundings to show a colleague where I was so that he could come pick me up. Amused by my own tired expression I decided to recreate the image in a more stylized way by drawing everything with just lines.

Self portrait with pixels

I always had great admiration for people who make pixel art. Some creators can put so much expression in something with so little resolution, amazing. I am no pixel artist by any means but I'm happy with the results I produced here.

Self portrait with oil paint

I really like the properties of oil paint but I get stress from painting. I will stare at a blank canvas for ages before my creative juices get flowing. This particular painting happened to be preceded by 2 hours of looking at a blank canvas after which I suddenly felt inspired to make this within 20 minutes or so.

CAD design

I like to dabble in CAD design from time to time.
I mostly use it to build 3d models of electronic parts as well as the occasional mechanical part for 3d-printing.

Shrouded bananaplug connector

When designing PCBs I strongly prefer for all the components to have 3D models. That way I can check whether components have enough clearance as well as an extra check to make sure that I got the pin locations right. Sometimes I can find the desired models online, other times I will make them myself.

Toilet paper holder that attaches to radiator

A friend of mine has his toilet close to his radiator meaning that he doesn't have any space for a conventional holder. To fix this I made a design that I 3d-printed that does the job perfectly.

Simple PCB riser

This PCB I designed for a friend of mine is a wing shield for an arduino. To make sure that the weight of the connectors and the cable don't topple it over and damage or disconnect the header I quickly made this riser in Fusion360.

Connector blocks for square aluminium profile

For a project we needed to weigh quite a few packages and copy the information written on them. To make life easier we got a USB weighing scale and a camera and I made this frame to hold both in place. The user then only needed to press a button on the computer to record the weight and take a picture of each package.