Windows 10 wedges itself

One or more of the recent updates for Windows 10 rendered my laptop incapable of communicating with the outside world. The Windows Firewall failed to run due to Base Filtering Engine not being able to run either. It’s the dreaded “Error 5: Access denied” error message all over again. Windows 10 also thought it was not activated, which is plain wrong. And no, I haven’t changed any hardware, save upgrading the wireless NIC in May last year. Running sfc /scannow with elevated privileges found nothing wrong. Restoring the system to the state prior to the latest updates made the network and firewall subsystems running again. All is well. What a mess.

Voyager 1 on 2027-12-26T23:59:36,9+0000

I downloaded a new version of NASA’s Eyes from The old version was unable to upgrade itself for some reason.

I ran a simulation on Voyager 1 towards the end of its life. At 2027-12-26T23:59:36,9+0000, the spacecraft changed its attitude, pointing the high gain antenna towards outer space. I checked the Wikipedia article, but found no description. Maybe the change in attitude is an artifact of NASA’s Eyes.

Does anyone know what the final act of Voyager 1 will be, save running out of electrical energy?

Office 365 and error 30125-28 (404)

The Office 365 instance installed on a student’s laptop showed signs of not being activated and in need of an update. Clicking on any of the small buttons below the ribbon made no difference. Running Office updates manually from “File → Account → Update” gave us an error message: 30125-28 (404).

Running sfc /scannow with elevated rights managed to repair enough of the corruption to allow Office 365 to continue working.

Why are modern “cloud” software so fragile? Why are Dropbox and Google Drive far superior to the equivalent of Microsoft? Why is OneDrive for Business more on the order of OneDrive from Hell?

Cisco Catalyst 9400 Series

Cisco’s Catalyst 9400 Series introduced this summer do look promising, but it’s still missing a few highlights:

  • Complete support for redundant supervisors; unavailable according to the release notes dated July 31, 2017

    The supervisor module (hardware) supports redundancy, but the software does not. The associated route processor redundancy (RPR) and stateful switchover (SSO) features are also currently not supported. Redundacy[sic] in software will be supported in a later release.

  • Multigigabit line card
  • SFP+ line card, and possibly
  • QSFP/QSFP+ line cards
  • Visio stencils for chassis, power supplies, supervisor, and line cards

The release notes and data sheets are unclear on the supervisor’s ability to perform as a mobility agent.

So far the Catalyst 4500E Series seems more developed than the new Catalyst 9400 Series.

Upgrading PHP from 7.0.22 to 7.1.9

I created a shell script which began its simple life as


# Use on first run

# Use on subsequent runs

portupgrade ${FLAGS} lang/php71 lang/php70 || exit

portupgrade ${FLAGS} textproc/php71-ctype      textproc/php70-ctype      || exit
portupgrade ${FLAGS} ftp/php71-curl            ftp/php70-curl            || exit
portupgrade ${FLAGS} textproc/php71-dom        textproc/php70-dom        || exit
portupgrade ${FLAGS} graphics/php71-gd         graphics/php70-gd         || exit
portupgrade ${FLAGS} devel/php71-gettext       devel/php70-gettext       || exit
portupgrade ${FLAGS} security/php71-hash       security/php70-hash       || exit
portupgrade ${FLAGS} converters/php71-iconv    converters/php70-iconv    || exit
portupgrade ${FLAGS} devel/php71-json          devel/php70-json          || exit
portupgrade ${FLAGS} net/php71-ldap            net/php70-ldap            || exit
portupgrade ${FLAGS} converters/php71-mbstring converters/php70-mbstring || exit
portupgrade ${FLAGS} security/php71-mcrypt     security/php70-mcrypt     || exit
portupgrade ${FLAGS} databases/php71-memcache  databases/php70-memcache  || exit
portupgrade ${FLAGS} www/php71-opcache         www/php70-opcache         || exit
portupgrade ${FLAGS} security/php71-openssl    security/php70-openssl    || exit
portupgrade ${FLAGS} databases/php71-pdo       databases/php70-pdo       || exit
portupgrade ${FLAGS} databases/php71-pdo_pgsql databases/php70-pdo_pgsql || exit
portupgrade ${FLAGS} databases/php71-pgsql     databases/php70-pgsql     || exit
portupgrade ${FLAGS} www/php71-session         www/php70-session         || exit
portupgrade ${FLAGS} textproc/php71-simplexml  textproc/php70-simplexml  || exit
portupgrade ${FLAGS} net/php71-soap            net/php70-soap            || exit
portupgrade ${FLAGS} net/php71-sockets         net/php70-sockets         || exit
portupgrade ${FLAGS} databases/php71-sqlite3   databases/php70-sqlite3   || exit
portupgrade ${FLAGS} textproc/php71-wddx       textproc/php70-wddx       || exit
portupgrade ${FLAGS} textproc/php71-xml        textproc/php70-xml        || exit
portupgrade ${FLAGS} archivers/php71-zlib      archivers/php70-zlib      || exit

portupgrade ${FLAGS} www/mod_php71 www/mod_php70 || exit

After running the script for a second time and a third time, etc, the script was successively changed to:


# Use on first run

# Use on subsequent runs

#portupgrade ${FLAGS} lang/php71 lang/php70 || exit

#portupgrade ${FLAGS} textproc/php71-ctype      textproc/php70-ctype      || exit
#portupgrade ${FLAGS} ftp/php71-curl            ftp/php70-curl            || exit
#portupgrade ${FLAGS} textproc/php71-dom        textproc/php70-dom        || exit
#portupgrade ${FLAGS} graphics/php71-gd         graphics/php70-gd         || exit
#portupgrade ${FLAGS} devel/php71-gettext       devel/php70-gettext       || exit
#portupgrade ${FLAGS} security/php71-hash       security/php70-hash       || exit
#portupgrade ${FLAGS} converters/php71-iconv    converters/php70-iconv    || exit
#portupgrade ${FLAGS} devel/php71-json          devel/php70-json          || exit
#portupgrade ${FLAGS} net/php71-ldap            net/php70-ldap            || exit
#portupgrade ${FLAGS} converters/php71-mbstring converters/php70-mbstring || exit
#portupgrade ${FLAGS} security/php71-mcrypt     security/php70-mcrypt     || exit

#portupgrade ${FLAGS} www/php71-session         www/php70-session         || exit
#portupgrade ${FLAGS} archivers/php71-zlib      archivers/php70-zlib      || exit
#portupgrade ${FLAGS} databases/php71-memcache  databases/php70-memcache  || exit

#portupgrade ${FLAGS} www/php71-opcache         www/php70-opcache         || exit
#portupgrade ${FLAGS} security/php71-openssl    security/php70-openssl    || exit
#portupgrade ${FLAGS} databases/php71-pdo       databases/php70-pdo       || exit
#portupgrade ${FLAGS} databases/php71-pdo_pgsql databases/php70-pdo_pgsql || exit
#portupgrade ${FLAGS} databases/php71-pgsql     databases/php70-pgsql     || exit
#portupgrade ${FLAGS} textproc/php71-simplexml  textproc/php70-simplexml  || exit
#portupgrade ${FLAGS} net/php71-soap            net/php70-soap            || exit
#portupgrade ${FLAGS} net/php71-sockets         net/php70-sockets         || exit
#portupgrade ${FLAGS} databases/php71-sqlite3   databases/php70-sqlite3   || exit

portupgrade ${FLAGS} textproc/php71-xml        textproc/php70-xml        || exit
portupgrade ${FLAGS} textproc/php71-wddx       textproc/php70-wddx       || exit

portupgrade ${FLAGS} www/mod_php71 www/mod_php70 || exit

Restart Apache using service apache24 restart.

In the end, PHP 7.0.22 got upgraded to PHP 7.1.9. All is well.

Revit 2018.1 and Licensing System Error 1

A student experienced Revit 2018.1 giving him this rather useless error message:

Licensing System Error 1

After Googling for a solution, we installed/repaired all the Visual C++ runtimes we could find in 3rdParty\x64\VCRedist and in 3rdParty\x86\VCRedist from the Revit 2018 distribution.


Shame on lazy developers not willing to code reasonable error messages explaning what the program attemped to do with what.

GNU style error messages is a lot better than nonsense words. E.g.:

sourcefile.c: lineno: open("/some/file") = -1, errno = 2 (No such file or directory)

Update 2017-09-05:

Today I had the opportunity to examine another case of “Licensing System Error 1”. This time I installed 3rdParty\x86\VCRedist\2005\vcredist_x86.exe only. As far as I can tell, Visual C++ 2005 Runtime x86 wasn’t installed at all prior to my actions.

Revit 2018.1 and GeForce GTX 1050 Ti

Yesterday, a student installed Autodesk Revit 2018 on his Windows 10 x64 laptop. He then upgraded to Revit 2018.1. After entering the licensing details, Revit crashed. Installing the latest drivers from nVidia, currently at version 385.41, and rebooting the laptop saved us from any more grief.

Pässler PRTG

I’ve been exploring Pässler PRTG on Microsoft Windows Server 2016 (Microsoft Imagine Premium) for the past couple of days. While the system is impressive and on the border of being overwhelming, it lacks complete IPv6 support.

The web interface is IPv4 only, and the NetFlow v9 collector only understands IPv4. PRTG can do PING, SNMP, etc, over IPv6, but you can only specify whether PRTG should contact a device using IPv4 or IPv6, not both. For as long as our networks remain dual-stack it makes sense to explore both network protocols simultaneously, in the same manner we can do with Icinga and Nagios, i.e. specify IPv4 and IPv6 addresses where applicable. A workaround is to register a device twice, once for IPv4 and again for IPv6. Be careful not to create too many duplicate sensors.

I wish PRTG would ask me if I wanted to run autodiscovery after installing it. PRTG detected our core switch as the DHCP (relay) service, duplicating all the sensors it could find.

Neither SNMP nor PRTG are ZFS aware, and in many cases it’s utterly pointless to monitor a lot of ZFS filesystems. Instead we should monitor ZFS pools, if only that were possible.

SNMP doesn’t convey whether a filesystem is diskbased or not, so I had to remove sensors for mountpoints such as /dev, /dev/fd, /proc, /usr/compat/linux/proc, /var/Named/dev, etc.

Patch for math/py-matplotlib

Without this patch, python2.7 will crash when the loop in reaches setupext.BackendGtk3Cairo().

---       2016-09-09 04:50:50.000000000 +0200
+++    2017-08-03 17:50:19.742905000 +0200
@@ -98,7 +98,7 @@
-    setupext.BackendGtk3Cairo(),
+    #setupext.BackendGtk3Cairo(),

Yet another technical oriented blog, more or less