I run a weekly photo cleanup routine because I want two things at the same time: Only curated photos in iCloud Real files on disk for archive and backup I like having my photos as normal files. I can inspect them, back them up to external drives, and know exactly where they live instead of relying entirely on a cloud service. For years, Dropbox Camera Uploads handled an important part of this…
For a long time, my Zigbee setup in Home Assistant was fully based on ZHA running on Home Assistant Yellow. It was stable, reliable, and already managing more than 40 devices. So when I needed better support for a few specific devices (especially a Tuya button), I did not want to migrate everything and risk breaking a working network. Instead, I built a hybrid architecture: Keep ZHA exactly as it…
Every winter, the same problem returned in my flat: Wet windows in the morning Condensation around glass doors Bedrooms sitting at 60-70% relative humidity overnight One morning I noticed water pooling on the floor near the glass door. That was the moment I stopped treating this as a minor annoyance. Outside humidity here during winter is often 70–90%, while temperatures frequently sit around 0 °C…
I live in Prague, and like many apartment buildings here, the mailboxes are grouped in the building entrance instead of inside the flat. Letters arrive through a slot and fall directly inside the box. There is something deeply satisfying about turning physical events into software events. Not just monitoring systems, not dashboards, not metrics. Real-world events, like receiving a letter. This…
In many systems, file uploads follow a familiar pattern: A client sends the file to your application server. The backend processes it (e.g., for validation or virus scanning). Then it forwards the file to a cloud storage service like Amazon S3. While this works, it’s highly inefficient. Your app becomes a middleman consuming bandwidth, CPU, and memory, just to pass files along. Why This Is a…
For years, I maintained my CV using various online builders. They got the job done, but there was always a subscription fee. This last time I tried to update my CV through one of them, their payment process got stuck. They withdrew the subscription fee from my card but didn’t enable any premium features. That was the last nail in the coffin for me. This year, I decided to rebuild my CV from…
When I first ventured into home automation, like many, I started with Alexa. Voice commands and plug-and-play devices felt futuristic—until I began hitting limitations. Many devices required separate hubs, cloud access, or their own apps just to function. Even something as simple as turning on a socket often involved sending a request to a remote server before the action happened locally. The…
Having a digital photo frame at home has always been a nice way to keep our memories alive. Over the years, I’ve collected thousands of photos from family trips, special events, and everyday moments. This turned our digital frame into a slideshow of our best experiences. However, recently, I had issues with my Frameo-powered digital frame, leading me to look for a better solution. Here’s how I…
Programming paradigms such as functional programming (FP) and object-oriented programming (OOP) are used in conjunction with some important principles and concepts in order to create modular and maintainable code. Today we’ll take a look at the concepts of composition and inheritance, demonstrating their use with some examples. In this article What is Composition? Pros of using Composition Cons of…
When considering database optimization, the efficiency of retrieving information is crucial. One key player in this quest for efficiency is the database index. Let’s dive into the world of database indexes and uncover what happens under the hood. In this article What are Database Indexes? Types of Indexes Trade-offs and Considerations Practical examples Inserting some data Examples of index usage…
Gnome is a free and open-source desktop environment for Linux and Unix-like operating systems. It is one of the most popular desktop environments for Linux, and is the default desktop environment for many Linux distributions. Gnome is known for its simplicity, ease of use and a user-friendly interface. It is designed to be easy to use for people of all ages and skill levels and it’s also fully…
The software release process is a critical aspect of any software development project. A manual software release process can be time-consuming, error-prone, and often leaves room for human error. This is where an automated release process comes in. The tools mentioned in this article (used in TypeScript/Javascript projects) can help streamline and optimize the software release process, making it…
I’ve been working a lot with APIs during the last few years, either developing them or integrating with third party APIs. So I’ve decided to gather some of the knowledge I gained along the way and write about it here. Many of the APIs I’ve integrated with didn’t follow any kind of pattern, so their documentation had to be consulted more often than if they were following some of the points below.…
Have you ever implemented an API endpoint that takes a while to respond? Maybe some seconds? Imagine when you have thousands of clients accessing your API at the same time and this response time increases because of that. An I/O call such as reading content from a file or a very complicated query in the database may take a while to complete. If this content doesn’t change at all, it’s much better…
When you develop an API, most of the times you’ll need part or all of its endpoints to require authentication. How to do that using Node.js? A combination of passport.js with JWT and bcrypt is one of the best ways to implement it. Time to go stateless ! This post is based on the authentication implemented in the TODO List API project that you can find here . In this post, all the code is in…
When you are developing an API and one or more developers (frontend, desktop, mobile, etc) will have to integrate their code with it, it’s very important to have it well documented so they know what and how they can use. For that, in Node.js projects I’ve been using apiDoc , as it is able to generate documentation in HTML from annotations in the source code. For this post, I’ll use the TODO List…
I’ve developed a backup script for MongoDB using TypeScript. It’s available as GPL3 here . If you download or clone the repository, you can choose to run it with Docker (so cron is already configured) or run it without Docker (If you want to configure cron on your host OS by yourself ). The cron example there is the same I wrote about on my previous post about cron with Docker . In any case,…
When you need to setup a cron job, you can do it using Docker. The best way to do it with Docker is using an Alpine Linux image, as it has only 5MB initial size. Don’t know what is Docker? Check more about it here . In this post I expect you to already have Docker and docker-compose installed on your OS. Creating the image In the case below I needed an Alpine Linux container with Node.js inside,…
Some apps are very useful when you decide to keep track of your fitness activities and habits. Here I list some apps I have used and others I still use and recommend. Runkeeper This is one of the most well known apps out there. If you like taking long walks, running or biking, it’s perfect for that. It tracks your speed, pace and distance (using your phone’s GPS). In the end of your activity it…
In my software development career I’ve worked so far with both frontend and backend development, also with Desktop apps development (.NET) and Hybrid mobile development (Ionic Framework), but always enjoyed and focused more on the backend. I started my career in 2008 with PHP, so around this time JavaScript was mostly for creating alert messages, form validation and a bit of user interaction. Who…