Using Bodmer TFT_eSPI Library with PlatformIO

If you start playing around with TFT on your ESP8266 or ESP32, you will arrive at the excellent TFT_eSPI Library by Bodmer. It's not only magnitudes faster than the Adafruit driver, it's also comes with support for a wide range of display drivers.

Unfortunately it has one catch: The library is not really ready to be included as a library in your projects as it requires adjustments in the library itself. While it's not uncommon to define your settings with #define directives, this library expects you to patch files to configure it. The official way goes like this Locate the library folder (Windows would be Documents\Arduino\libraries\TFT_eSPI) and create your own setup in the library sub folder User_SetupsTo use your configuration, patch the file User_Setup_Select.h to include your configurationThis has obviously some disadvantages. At latest when you wan't to update the library or work with different screens at the same time. A couple of people have highlighted that as i…

Migrating from Ardiuno IDE to Visual Studio Code to PlatformIO

Like every other beginner on ESP8266 I started with my first steps in the official Arduino IDE. I was impressed by the simplicity and easy to use examples that were build-in to the UI. Also the simple UI made it easy to start in uncharted land, especially for someone that did never develop embedded firmware. The library manager let me install additional libraries to play around with, and it also mostly worked.

Needless to say, I missed a lot of the features that I was used to from more powerful IDE's like IntelliJ or Visual Studio. I think even Visual Basic 6 had a better IntelliSense support than the Arduino IDE. In fact, Arduino IDE has none. Also, the lack of a dependency management (for libraries) makes it really hard to share code between multiple peers, as you have to manually install the correct version of a library in the global libraries folder. Guess what happens if you use different versions?
But overall the Ardunio IDE is a good place to start, and I'm st…

Synology Presto Review

I still run my NAS in Switzerland while I'm living abroad in Singapore. I frequently run backups of for my files where I leverage my Switzerland NAS as an off-side backup location. After all, keeping my NAS in Switzerland is cheaper than the costs for international shipping from Switzerland to Singapore. But it comes with two draw-backs:
Average internet connection speed is still worse in Switzerland compared to other places, especially the upload speedLatency is typically around 370ms, which unfortunately has a huge impact on file transfer speeds. While the first issue can be solved with money, the second is more expensive. During some analysis on the topic, I found that Synology actually came up with an extension called Presto for their DSM. It's based on the somewhat mysterious technology called "SITA" which should solve the issue of high latency transfers.

According to their explanation on YouTube (video below), they are able to use the available bandwidth more ef…

Fixing CrashPlan Upgrade to 4.8.2

I recently got a E-Mail from Crashplan indicating that my NAS is not backing up data for more then 3 days. Since I don't check all the other backup state e-mails, this definitely got my attention

An they weren't wrong. My local installation did not connect to the NAS anymore and the java process was also missing in the Synology's task manager.

Staring the package in the "Package Canter" didn't work, but at least the log was somehow interesting
I 05/02/17 04:30PM Downloading a new version of CrashPlan. I 05/02/17 04:57PM Download of upgrade complete - version 1436674800482. I 05/02/17 04:57PM Installing upgrade - version 1436674800482 I 05/02/17 04:57PM Upgrade installed - version 1436674800482 I 05/02/17 04:58PM CrashPlan stopped, version 4.8.0, GUID XXXXXXXXXXXXXXXXX I 05/06/17 10:16AM Synology extracting upgrade from /var/packages/CrashPlan/target/upgrade/1436674800482_4.jar According to the discussion on the package owners blog post, this seems to…

Synology DS1815+ with Crashplan

I recently bought a very nice new Synology DS1815+ to replace my self-made NAS which was based on a HP Miniserver and OpenMediaVault. Although the performance was no issue, I had to spend too much work in fixing thinks after software upgrades, apt-get this and apt-get that, etc.

So, here we are are: A brand new Synology DS1815+. It comes with
8 bays (extendable to 18 bays with 2 extension-boxes with 6 additional bays each)2 GB RAM (extenable to 16GB)2.4 GHz (Atom C2538)A management UI that helps to run your NAS smoothly A own an existing CrashPlan+ accounts which means I pay $$$ to backup all my data to their datacenter. Fortunately, there is already a Package that helps installing Crashplan on a Synology NAS.
Installation I used the installation guide from and worked with Mike Tabor's guide when it comes to the windows client installation However, installing Java ex…

Azure Active Directory Domain Services Limitations

I work with Azure Active Directory (AAD) and enabled the Domain Services (AAD DS) feature to manage all my virtual machines and user-accounts. Domain Services is basically a Windows Domain Controller (in fact there are two of them), which provides Domain Join, LDAP and Authentication for your cloud hosted network and machines.
As a result, all users in the AAD can login to the Windows machines by using their AAD-Account.
From the documentation ( Your domain controller as a service “Lift-and-shift” apps to Azure more easily than everUse LDAP, Active Directory domain join, NTLM, and Kerberos authenticationRely on a managed, highly-available serviceGet started in minutes, pay as you goDevelop and test with no identity worriesManage Azure virtual machines effectively using Group Policy I use the following setup, often referred as "cloud-only organizations"

Known Limitations While still in the preview phase, I would …

Fixing empty files with grunt-typescript

I recently faced the problem of an empty app.js file while working with gulp and the typescript compiler, which was wrapped using the grunt-typescript module.

Synopsis: Almost every third or fourth call, the concatenated app.js was empty at the time where other gulp-tasks where running. The dependencies where all fine, and the gulp-output showed that the typescript-Task has successfully completed before the dependent task was started. However, the file was empty a the moment the dependent task tried to do anything with it.

As you can see, the build:ts and even the build-task has completed without errors.

Solution: After hours of work (debugging grunt-plugins is a pain), I found a solution which helped to actually wait for the particular file to exist or has its contents written to it.

Its a simple task, which I have added to the chain of tasks immediately before the task which actually needs the missing file to exist
var fs = require("fs") // Load the filesystem …