marcelpetrick

Qt: custom-class and specialities for QVariant and QSettings

Written by  on December 11, 2019

While implementing some custom-class (C++17; Qt5.12) some specialities became (painfully) noticeable.
The guide at the Qt-source is quite well written.

  • ctor, copy-ctor and dtor are all required and have to be public
  • add Q_DECLARE_METATYPE(CustomClass)
  • QDebug-stream-operator in case of simple debugging-messages
  • if the QVariant-version of the CustomClass shall be written to QSettings, then implement also the two streaming operators: << and >> (else crash with Assert “unable to save type”): howto

block ads on music videos on youtube

Written by  on December 9, 2019

Task: youtube has annyoing ads at certain music-videos, which are set as playback-version for last.fm. I like to stream some music while programming, but I hate getting conditioned by advertisments.

Situation: Firefox 71.0, 64 bit, Win10

Solution: install “AdBlocker for YouTube™von AdblockLite” and configure it like this:

MicroPython (uPython) – the future is here

Written by  on November 27, 2019

My activity with the ESP8266/ESP32 boards had somehow fallen asleep after I set up one of the ESP8266 as Wifi-repeater. It worked, but creating own devices was too cumbersome. Firing up the ArduinoStudio took ages, building and downloading the firmware in C++ was error-prone, took ages (seriously, this is a tiny program, what the hell happens in the background?).
But I knew there exists a path, which could save some time: µPython (micropython). It runs a firmware, you just deploy your “code”. In my case now a tiny hello-world-like program.

I used this and that tutorial and the uPyCraft-IDE. Got it working with an ESP8266 in minutes.

Seriously: goodbye crappy, non-structured and slow-to-build C/C++ for my microcontrollers. The future is here o/

By the way: the motivation also comes from my current daily practice of Python (of course, I still contribute to C++/Qt-based projects), but my current flame is Python (for Project Euler and daily coding challenges).

C++ name demangling

Written by  on November 20, 2019

Like described in “Today I learned” (TIL): c++filt is quite helpful for demangling:

But what if you have none readily available? -> c++filtjs

Three ways to find the location of a certain DLL at Windows

Written by  on November 11, 2019

Common problem: just using the current working directory is not sufficient, because especially for unit-tests started from the Visual Studio-testrunner the opriginal, relative path is not fitting anymore. Fallback would be check an environment variable , which is set during installation or using the WinAPI (ugh).

versioned code can be found at: github/cppcCollection

Visual Studio 2015: error LINK1158 rc.exe not found

Written by  on October 22, 2019

Challenge: Visual Studio 2015, Windows Kit 8 and 10 installed, test application (as solution) for a SDK not buildable
Solution:
copy rc.exe and rcdll.dll from
C:\Program Files (x86)\Windows Kits\8.1\bin\x64
to
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

SSH/SCP quick help

Written by  on October 17, 2019

Challenge was to reconfigure a device, which has a Linux running on a TQ-board. Some files had to be adjusted.

Connect to the device:

(Then enter password.)

List amount of free space:

Show target of symlink:

quick git stats

Written by  on October 11, 2019

(Another way without external tools.)

Visual Studio testrunner still running … and stopping you from accessing DLLs for linking

Written by  on October 8, 2019

Problem Challenge:
Several instances of vstest.executionengine.clr20.exe are still running, despite closing that nice Visual Studio 2015 and therefore the access to compile and link several DLLs with QtCreator is blocked.
Closing them one by one with the taskmanager is annoying.

Solution:
* CMD as admin
* $ taskkill /IM vstest.executionengine.clr20.exe /T /F
* or: $ wmic process where name=’vstest.executionengine.clr20.exe’ delete

QTest: increase the timeout duration for a test-case

Written by  on October 7, 2019

Set via environment variable QTEST_FUNCTION_TIMEOUT a higher timeout duration.
qputenv sets them temporary for the run of the single test case (put this at the beginning of the test case).

nota bene: This block has to be put before qExec is ran, so put it into the constructor of the test-suite!