<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[michilehr.de]]></title><description><![CDATA[michilehr.de]]></description><link>https://michilehr.de</link><generator>GatsbyJS</generator><lastBuildDate>Thu, 07 May 2026 18:46:53 GMT</lastBuildDate><item><title><![CDATA[You should know what you are doing]]></title><description><![CDATA[ This may sound obvious to you, but it isn't. Developers commit code which they neither understand nor question. Maybe it worked in the first place. Maybe it will break something else. Either way, it creates the base for technical debt, bugs, security vulnerabilities, and even worse: developers who do not grow. <br /><br /> This problem was surely not created by AI, but the rapid adoption of it is amplifying those effects.
]]></description><link>https://michilehr.de/2025-12-31-you-should-know-what-you-are-doing </link><guid isPermaLink="false">https://michilehr.de/2025-12-31-you-should-know-what-you-are-doing </guid><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate></item><item><title><![CDATA[Reverse Engineering the API of a turnstile controller]]></title><description><![CDATA[ Some years ago when I built the software for an online ticketing platform, we wanted to have turnstiles which can be used to  improve the pass through rate of the ticket scanning process at larger events. <br /><br /> We found a fitting product and the seller promised us that the controller of the turnstile can easily be integrated into our  local on-site application. Of course it was not as easy as promised. We only received a DLL as an SDK for C++ for the protocol called LL268 and a demo application. So how to integrate this turnstile into our software? <br /><br /> Well, eventually I was able to reverse engineer the core functionality of the API so we were able to use it for our purpose.  Since the product is not used any longer, I can finally write about it. ]]></description><link>https://michilehr.de/reverse-engineering-the-api-of-a-turnstile-controller</link><guid isPermaLink="false">https://michilehr.de/reverse-engineering-the-api-of-a-turnstile-controller</guid><pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Authorization vs. Authentication - Securing Web Applications]]></title><description><![CDATA[ Although authorization sounds similar to authentication and a relationship between the two exists, they are not the same and play a different role in the data security process. <br /><br /> In 2021, Broken Access Control moved up from the fifth to the first position in the OWASP Top10. Besides, I did report some serious vulnerabilities to SaaS companies regarding unhandled authorization in the last months. <br /><br /> That's why it is important to know the difference between the two and what else to take care of to protect resources and information from being read or altered by third parties which should be prevented from doing so in order to secure web applications. ]]></description><link>https://michilehr.de/authorization-vs-authentication-securing-web-applications</link><guid isPermaLink="false">https://michilehr.de/authorization-vs-authentication-securing-web-applications</guid><pubDate>Sun, 08 Sep 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Shrink an image of a single board computer like the Raspberry PI for a smaller SD card]]></title><description><![CDATA[ When you back up a sd card and attempt to flash the image to a second card, it can happen that you will be greeted by the  message "Too small.". This can happen because two sd cards from even the same vendor could have slightly different sizes. <br /><br /> In this tutorial, I will show you how to shrink an image to a specific size so it can fit on a smaller sd card. ]]></description><link>https://michilehr.de/shrink-an-image-of-a-single-board-computer-like-the-raspberry-pi-for-smaller-sd-card</link><guid isPermaLink="false">https://michilehr.de/shrink-an-image-of-a-single-board-computer-like-the-raspberry-pi-for-smaller-sd-card</guid><pubDate>Fri, 26 Jan 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Full-Text Search with MySQL and Doctrine]]></title><description><![CDATA[ MySQL has supported Full-Text Search (FTS) functionality for quite some time. The (FTS) capability was already introduced  in MySQL version 3.23.23, which was released in September 2001, and yet I have never used it - until now. ]]></description><link>https://michilehr.de/full-text-search-with-mysql-and-doctrine</link><guid isPermaLink="false">https://michilehr.de/full-text-search-with-mysql-and-doctrine</guid><pubDate>Tue, 26 Dec 2023 00:00:00 GMT</pubDate></item><item><title><![CDATA[Reduce integration test runtime while using MySQL]]></title><description><![CDATA[ Integration tests are a crucial part of the software development process, ensuring that different components of your  application work seamlessly together. The faster the feedback, the faster the release.<br /> <br /> So how can we reduce the test runtime to give the engineers faster feedback and improve the CI pipeline when using MySQL  or MariaDB? ]]></description><link>https://michilehr.de/reduce-integration-test-runtime-while-using-mysql</link><guid isPermaLink="false">https://michilehr.de/reduce-integration-test-runtime-while-using-mysql</guid><pubDate>Sun, 05 Nov 2023 00:00:00 GMT</pubDate></item><item><title><![CDATA[Find the missing data - interpolation and extrapolation with Python]]></title><description><![CDATA[When you have a set of data, there is a high chance that it is incomplete. Not only does the data, outside  the given range not exist, but also values between known ones are missing. But what if your work relies on that missing data?<br /> You can use interpolation and extrapolation to fill the missing gaps in your data set. ]]></description><link>https://michilehr.de/find-the-missing-data-interpolation-and-extrapolation-with-python</link><guid isPermaLink="false">https://michilehr.de/find-the-missing-data-interpolation-and-extrapolation-with-python</guid><pubDate>Sat, 14 Oct 2023 00:00:00 GMT</pubDate></item><item><title><![CDATA[How to test GraphQL with Codeception in PHP]]></title><description><![CDATA[GraphQL is a query language for APIs. It was developed by Facebook and is often used as an alternative to REST  APIs - but you can define the specific data you want to retrieve from the API. But how to test GraphQL with Codeception in PHP?<br /><br /> Spoiler: You do not need an extension. ]]></description><link>https://michilehr.de/how-to-test-graphql-with-codeception</link><guid isPermaLink="false">https://michilehr.de/how-to-test-graphql-with-codeception</guid><pubDate>Thu, 15 Dec 2022 00:00:00 GMT</pubDate></item><item><title><![CDATA[Local integration of airRohr in Home Assistant]]></title><description><![CDATA[Since air pollution is the single largest environmental health risk in Europe, I have decided to join the  Sensor.Community by adding an outdoor particular sensor. <br /> The API for sending the data directly from the sensor works perfect but the community integration for Home Assistant does not,  so I have added the sensor locally with the help of the Scrape Integration which absolutely makes more sense. ]]></description><link>https://michilehr.de/local-integration-of-airrohr-in-home-assistant</link><guid isPermaLink="false">https://michilehr.de/local-integration-of-airrohr-in-home-assistant</guid><pubDate>Sun, 20 Nov 2022 00:00:00 GMT</pubDate></item><item><title><![CDATA[Do you test for sufficient randomness?]]></title><description><![CDATA[Some years ago, I have used an existing random string generator for generating random unique strings. From one  day to another, there were a lot of timeouts in the application.<br /> It turned out that the random string generator was not as random as I thought.<br /> Do you run automated tests against a random string generator if it can provide for sufficient randomness? ]]></description><link>https://michilehr.de/do-you-test-for-sufficient-randomness</link><guid isPermaLink="false">https://michilehr.de/do-you-test-for-sufficient-randomness</guid><pubDate>Sat, 10 Sep 2022 00:00:00 GMT</pubDate></item><item><title><![CDATA[Open current folder in PhpStorm from command line]]></title><description><![CDATA[Do you work a lot with the shell and PhpStorm on macOS? You can easily open the current folder in PhpStorm or  in any other IntelliJ product with a shortcut direct out of the console by adding an alias!]]></description><link>https://michilehr.de/open-current-folder-in-phpstorm-from-command-line</link><guid isPermaLink="false">https://michilehr.de/open-current-folder-in-phpstorm-from-command-line</guid><pubDate>Fri, 02 Sep 2022 00:00:00 GMT</pubDate></item><item><title><![CDATA[Shell keyboard shortcuts you will love]]></title><description><![CDATA[The shell, used precisely, is a very powerful tooling for every Software Engineer. There are a lot of keyboard shortcuts which make it possible to navigate, modify and by this complete the current job in a much faster way. Here you can find a list of my favorite shortcuts.]]></description><link>https://michilehr.de/shell-keyboard-shortcuts-you-will-love</link><guid isPermaLink="false">https://michilehr.de/shell-keyboard-shortcuts-you-will-love</guid><pubDate>Fri, 20 May 2022 00:00:00 GMT</pubDate></item><item><title><![CDATA[The best shell tools I use as a developer]]></title><description><![CDATA[As a software engineer, I am using the shell a lot. Besides the IDE, it is the most important tool. Since working in the shell can be complex sometimes, it is important to find the right tools which not only makes working in the shell a lot of fun but also boost your productivity.]]></description><link>https://michilehr.de/the-best-cli-tools-i-use-as-a-developer</link><guid isPermaLink="false">https://michilehr.de/the-best-cli-tools-i-use-as-a-developer</guid><pubDate>Tue, 01 Feb 2022 00:00:00 GMT</pubDate></item><item><title><![CDATA[The eruption of the Hunga Tonga volcano and its blast wave around the globe]]></title><description><![CDATA[On the 14 January in 2022, a large eruption of Hunga Tonga-Hunga Haʻapai volcano began at 04:14 UTC. The eruption was so loud that it could be heard not only in Fiji which is 750 km away, but also at Alaska which is more than 9.300 km away.<br /> At Germany, we didn't hear anything - but the blast wave which has traveled around the whole globe was measurable. ]]></description><link>https://michilehr.de/the-eruption-of-hunga-tonga-volcano-and-its-blast-wave-around-the-globe</link><guid isPermaLink="false">https://michilehr.de/the-eruption-of-hunga-tonga-volcano-and-its-blast-wave-around-the-globe</guid><pubDate>Sun, 16 Jan 2022 00:00:00 GMT</pubDate></item><item><title><![CDATA[ESPHome on the Magic Home LED WiFi monochromatic controller]]></title><description><![CDATA[The Magic Home LED WiFi Monochromatic (1CH) Controller is a very cheap device for controlling a 1CH LED strip or wire which are often used for Christmas trees.  Since it is using an esp8266 chipset, it can easily be flashed with an alternative firmware.]]></description><link>https://michilehr.de/esphome-on-the-magic-home-led-wifi-monochromatic-controller</link><guid isPermaLink="false">https://michilehr.de/esphome-on-the-magic-home-led-wifi-monochromatic-controller</guid><pubDate>Mon, 13 Dec 2021 00:00:00 GMT</pubDate></item><item><title><![CDATA[Hash the hash - Password hashing migration]]></title><description><![CDATA[The number of data leaks including hashed passwords have increased from year to year and with the rising number of web applications, they will continue this path.<br /> In these dumps, lots of passwords of older accounts were hashed by the insecure SHA1 or even the absolutely unsafe MD5 algorithm.<br /> Data security doesn't get the love it should get. Time to act.]]></description><link>https://michilehr.de/hash-the-hash-password-hashing-migration</link><guid isPermaLink="false">https://michilehr.de/hash-the-hash-password-hashing-migration</guid><pubDate>Sun, 07 Nov 2021 00:00:00 GMT</pubDate></item><item><title><![CDATA[IKEA hacking: Making the air quality sensor VINDRIKTNING smart powered by ESPHome and Home Assistant]]></title><description><![CDATA[IKEA has released an air quality sensor which measures the PM2.5 density in the air and shows the classification by a green, yellow or red LED. <br />For my surprise, it is a dump sensor with no ZigBee support like some other devices IKEA has released in the past months. <br />So let's make the sensor smart with the help of ESPHome and Home Assistant and add an additional eCO2 sensor.]]></description><link>https://michilehr.de/ikea-hacking-making-the-air-quality-sensor-vindriktning-smart-and-adding-an-additional-eco2-sensor-powered-by-esphome-and-home-assistant</link><guid isPermaLink="false">https://michilehr.de/ikea-hacking-making-the-air-quality-sensor-vindriktning-smart-and-adding-an-additional-eco2-sensor-powered-by-esphome-and-home-assistant</guid><pubDate>Sun, 15 Aug 2021 00:00:00 GMT</pubDate></item><item><title><![CDATA[MacOS productivity - The tools I can't live without]]></title><description><![CDATA[Almost every time I show somebody something on my MacBook, the question „How did you do that?” or „What tool is that?” comes up. After all those years, I have decided to write a blog post about the tools I use and which have increased my productivity not only as a developer, but also in general on MacOS. ]]></description><link>https://michilehr.de/macos-productivity-the-tools-i-cant-live-without</link><guid isPermaLink="false">https://michilehr.de/macos-productivity-the-tools-i-cant-live-without</guid><pubDate>Mon, 14 Jun 2021 00:00:00 GMT</pubDate></item><item><title><![CDATA[How to integrate an external API into Home Assistant - An example with the Ambee Pollen API]]></title><description><![CDATA[Home Assistant is an open source home automation hub with a huge ecosystem powered by a worldwide community. With its RESTful integration, you can easily add an external API as a sensor on which you can build an automation or just show the given data on your dashboard. In this tutorial, I will show you how to integrate the pollen data of Ambee which provides powerful APIs for real-time air quality, weather, pollen and fire data. ]]></description><link>https://michilehr.de/how-to-integrate-an-external-api-into-home-assistant-an-example-with-the-ambee-pollen-api</link><guid isPermaLink="false">https://michilehr.de/how-to-integrate-an-external-api-into-home-assistant-an-example-with-the-ambee-pollen-api</guid><pubDate>Fri, 16 Apr 2021 00:00:00 GMT</pubDate></item><item><title><![CDATA[Adding a single line can destroy the reputation of your app]]></title><description><![CDATA[On the 18th of december, there was an update for the ARD Mediathek app. The update seems to have included one configuration line which led to a lot of frustration and a very bad user experience. Ten days later, nothing has been fixed. Some reminders and learnings from my side.]]></description><link>https://michilehr.de/2020-12-27-adding-a-single-line-can-destroy-the-reputation-of-your-app</link><guid isPermaLink="false">https://michilehr.de/2020-12-27-adding-a-single-line-can-destroy-the-reputation-of-your-app</guid><pubDate>Sun, 27 Dec 2020 00:00:00 GMT</pubDate></item><item><title><![CDATA[Why you should and how you could implement the dark mode]]></title><description><![CDATA[The dark mode, also called night mode, is a special color schema which uses light-colored text on dark backgrounds.  The opposite of dark mode is the light mode which is or was the de facto default schema. The dark mode not only has effects on the  human body but also on the power consumption of newer devices.]]></description><link>https://michilehr.de/why-you-should-and-how-you-could-implement-dark-mode</link><guid isPermaLink="false">https://michilehr.de/why-you-should-and-how-you-could-implement-dark-mode</guid><pubDate>Sat, 14 Nov 2020 00:00:00 GMT</pubDate></item><item><title><![CDATA[Zero downtime on MySQL schema change]]></title><description><![CDATA[Have you ever deployed a feature which interrupted your application because the schema change on the MySQL database  has locked the table? Then I have good news for you! There are some tools like the Percona Toolkit which can apply the operation without a downtime. ]]></description><link>https://michilehr.de/zero-downtime-on-mysql-schema-change</link><guid isPermaLink="false">https://michilehr.de/zero-downtime-on-mysql-schema-change</guid><pubDate>Wed, 14 Oct 2020 00:00:00 GMT</pubDate></item><item><title><![CDATA[Combining data sources without control structures]]></title><description><![CDATA[Inspired by a tweet of Dominikus Herzberg, I have created a small JavaScript which  combines location data with Google Maps to show the current location of the ISS above the ground  in almost real-time without any control structures in the code.]]></description><link>https://michilehr.de/combining-data-sources-without-control-structures</link><guid isPermaLink="false">https://michilehr.de/combining-data-sources-without-control-structures</guid><pubDate>Thu, 05 Nov 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[Timelapse of the sun eclipse with the help of python]]></title><description><![CDATA[On the 20th March 2015, there was a partial sun eclipse. I wanted to make a timelapse. I put my camera on a  tripod, placed the sun in the lower left corner of the display and started the timelapse mode which made a photo every  5 seconds.  After 20 muinutes, I realized that the sun will soon move out of the picture.]]></description><link>https://michilehr.de/timelapse-of-the-sun-eclipse-with-the-help-of-python</link><guid isPermaLink="false">https://michilehr.de/timelapse-of-the-sun-eclipse-with-the-help-of-python</guid><pubDate>Sat, 21 Mar 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[Anchor link with a fixed or sticky header]]></title><description><![CDATA[If you have an anchor link on a page with a fixed or sticky header, the element linked to will disappear behind the header. To fix this, you will have to add the property scroll-margin-top to the element.]]></description><link>https://michilehr.de/anchor-link-with-a-fixed-header</link><guid isPermaLink="false">https://michilehr.de/anchor-link-with-a-fixed-header</guid><pubDate>Wed, 21 Jan 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[Resize a LVM partition in a Debian VirtualBox]]></title><description><![CDATA[Have you ever developed in a Debian VirtualBox running out of space? This happened to me some days ago when I have imported the live database for debugging. Following this step by step tutorial, you can increase the disk space.]]></description><link>https://michilehr.de/resize-a-lvm-partition-in-a-debian-virtualbox</link><guid isPermaLink="false">https://michilehr.de/resize-a-lvm-partition-in-a-debian-virtualbox</guid><pubDate>Mon, 15 Sep 2014 00:00:00 GMT</pubDate></item><item><title><![CDATA[Overwrite CMD+S / CTRL+S in Javascript]]></title><description><![CDATA[Do you often work with backend forms in your web application scrolling endless down to the submit button? Why  not overwrite the submit button with the common use save keyboard hotkeys CMD+S (Mac) and CTRL+S (Win) with Javascript?]]></description><link>https://michilehr.de/overwrite-cmds-and-ctrls-in-javascript</link><guid isPermaLink="false">https://michilehr.de/overwrite-cmds-and-ctrls-in-javascript</guid><pubDate>Mon, 15 Sep 2014 00:00:00 GMT</pubDate></item><item><title><![CDATA[Fontello or how to master icon fonts in web development]]></title><description><![CDATA[Icons are used everywhere nowdays on UI elements on the world wide web. But how can you integrate icons on your website without having to much trouble with their integration and speed?]]></description><link>https://michilehr.de/fontello-or-how-to-master-icon-fonts-in-web-development</link><guid isPermaLink="false">https://michilehr.de/fontello-or-how-to-master-icon-fonts-in-web-development</guid><pubDate>Sat, 09 Aug 2014 00:00:00 GMT</pubDate></item><item><title><![CDATA[Some technical things to know when going online multilingual]]></title><description><![CDATA[When you are successful with your web application, there will be the day when you decide to deploy the application in more than your native language. Before we decided to go online with a multilingual version of diginights.com, I thought about challenges and also stumbled over some other problems later.]]></description><link>https://michilehr.de/some-things-to-know-when-going-online-multilingual</link><guid isPermaLink="false">https://michilehr.de/some-things-to-know-when-going-online-multilingual</guid><pubDate>Fri, 01 Aug 2014 00:00:00 GMT</pubDate></item><item><title><![CDATA[Resize iframe by its content – cross-domain]]></title><description><![CDATA[We all had this problem once: Including an iframe into a website and then – there were scroll bars which mess  up everything. But have you ever heard of the JavaScript method Window.postMessage? We can use this method to  communicate between the iframe and its parent and it is also widely supported.]]></description><link>https://michilehr.de/resize-iframe-by-its-content-cross-domain</link><guid isPermaLink="false">https://michilehr.de/resize-iframe-by-its-content-cross-domain</guid><pubDate>Fri, 24 Jan 2014 00:00:00 GMT</pubDate></item><item><title><![CDATA[Think before using 'return false;']]></title><description><![CDATA[One of the first things jQuery coders learn is how they can stop the browser from calling the default action of an event.  'return false;' will stop the browser calling the default behaviour: opening the clicked link. But using 'return false;'  in that way is not good because this can break everything behind.]]></description><link>https://michilehr.de/why-you-should-think-before-using-return-false</link><guid isPermaLink="false">https://michilehr.de/why-you-should-think-before-using-return-false</guid><pubDate>Fri, 27 Sep 2013 00:00:00 GMT</pubDate></item><item><title><![CDATA[Resize images and save with new name recursively with bash]]></title><description><![CDATA[When we prepared the relaunch of diginights.com with our new and awesome responsive layout, we needed to  resize a bunch of flyer, location and avatar images (~1.000.000). One of our requirements was that we save the images  with a new tag so we won’t affect the running application.]]></description><link>https://michilehr.de/resize-images-and-save-with-new-name-recursively-with-bash</link><guid isPermaLink="false">https://michilehr.de/resize-images-and-save-with-new-name-recursively-with-bash</guid><pubDate>Mon, 06 May 2013 00:00:00 GMT</pubDate></item><item><title><![CDATA[JimFlow – my bachelor thesis]]></title><description><![CDATA[To complete my bachelor degree course “Software Engineering” at Heilbronn University, I have written my  bachelor thesis with the title 'Develop a system for monitoring, recording and processing of state changes on a work plan'.]]></description><link>https://michilehr.de/jimflow-my-bachelor-thesis</link><guid isPermaLink="false">https://michilehr.de/jimflow-my-bachelor-thesis</guid><pubDate>Mon, 24 Sep 2012 00:00:00 GMT</pubDate></item></channel></rss>