Articles

CSS basics

HTML defines the content of a web page but not its aesthetics. Styling a document is achieved using CSS, which stands for Cascading Style Sheet and is another language that web browsers can interpret.
TutorialsCSSWeb

Bathroom occupancy monitor

Bathroom occupancy monitor thumbnail
One of the companies I used to work for had a serious bathroom issue: My floor had only three toilet stalls for about 200 employees. There were countless times when I would walk all the way to the bathroom only to find all stalls occupied. I built this simple system to quickly identify whether one or more stall were. It consists of an IoT sensor installed on the bathroom stalls' door and an indicator placed somewhere easily visible.
ESP8266IoTElectronicsProjects

Bash check if environment variable is set

When writing bash scripts, it is sometimes necessary to check if an environment bariable is set.
Bash

Barking alarm

Barking alarm thumbnail
Dogs are great at detering burglars from entering one's home. This system brings the same advantage, without the need for an actual dog.
ElectronicsProjectsArduino

BLE presence detection

BLE presence detection thumbnail
I wanted my home automation system to detect when I arrive home so as to unlock my door automatically or let me know if I leave the apartment without turning the A/C off. I figured my smartphone could be used to achieve this since it is equipped with a vast array of sensors and connectivity options. For example, I could use an app like OwnTracks which would send an MQTT message once I enter a certain perimeter around my apartment. However, constantly monitoring one's GPS location is wasteful in terms of battery life. Another option would be to ping my phone's IP address to check if it is connected to the WiFi, but smartphones can sometimes take a while to connect. So, I decided to use BLE advertising, which does not use too much battery while still remaining constantly active.
ESP32ProjectsIoTBluetooth

Auto CRUD

Auto CRUD thumbnail
Most web applications that manage data in a database perform at least some form of create, read, update or delete (CRUD) operations on stored records. Moreover, web applications also often expose those operations via a REST API. Most database tables - corresponding to the entities manged by the application - need their own CRUD controller and set of HTTP endpoints. Because of this, large applications can quickly become tedious to develop and maintain. However, the logic for each table is usually quite similar. Auto CRUD has been developed to reduce this workload.
ExpressProjectsNPMPrismaDatabase

Arduino button debounce function

Arduino button debounce function thumbnail
Physical buttons and switches do not switch between open and close position instantly and perfectly. Instead, they have a tendency to "bounce" between the two states before settling on one. This issue is thoroughly described in circuitdigest's excellent article. Consequently, when using such components with, for example, an Arduino microcontroller, a proper debouncing algorithm must be implemented.
ArduinoElectronics

Arduino 7-segment alarm clock

Arduino 7-segment alarm clock thumbnail
This is one of my earliest electronics project: An alarm clock built around an Arduino nano, a real-time clock (RTC) module and a 7-segment display.
ArduinoProjectsElectronics

Application containerization

Application containerization thumbnail
Let's imagine a developer building an application on his computer and that this application is meant to be deployed on a different machine (production environment). In order to execute properly, this application requires multiple libraries, binaries and packages. For example, a Python program requires the Python interpreter as well as all the imported Python modules.
DevOpsDockerTutorials

Apache reverse proxy for web app

Let's imagine that we've just finished developping a NodeJS application that listens for HTTP requests on port 8086 and that we have an Apache2 instance listening on port 80.
NetworkProxyApache