Technical insights and software architecture

Deep dives into PHP development, Horde Framework evolution, and practical software engineering. Focused on real-world solutions for complex technical challenges.

Core Topics

PHP, Horde Framework, authentication systems, composer workflows, and modern development practices.

Long-form Analysis

Comprehensive technical articles exploring architectural decisions, migration strategies, and lessons learned from real projects.

Code & Community

Open source contributions, framework development, and sharing knowledge with the PHP developer community.

  • Horde Installer: Return to the Vendor

    TL;DR – horde/horde-installer-plugin will now install apps to vendor dir and then link to web dir Apps in the web dir Until today, the composer plugin for installing horde apps installed apps directly into the web dir and linked configs from outside the webdir into the apps. That had several drawbacks. Developers could not just

    Continue reading


  • Auth Headaches

    Back in the old days when rock musicians took the same drugs as your grandfather, authorisation and authentication might have been very simple. You had a user name, you had a password. Most likely you had one and the same password for each and everything. Congrats if you were smarter back then. Maybe your application

    Continue reading


  • Exceptional Dependency Decency

    Libraries can become less attractive to 3rd party integrators if they depend on too many unwanted other elements. This is especially true for libraries that are themselves pulled in as a dependency. Our horde/exception library is no exception to this. It is pulled in by almost all horde libraries because it is horde’s goto solution

    Continue reading


  • Horde/Yaml: Graceful degradation

    Tonight’s work was polishing maintaina’s version of horde/yaml. The test suite and the CI jobs now run successfully both on PHP 7.4 and PHP 8.1. The usual bits of upgrading, you might say. However, I had my eye on horde/yaml for a reason. I wanted to use it as part of my improvements to the

    Continue reading


  • PHP: Tentative Return Types

    PHP 8.1 has introduced tentative return types. This can make older code spit out warnings like mad. Let’s examine what it means and how to deal with it.

    Continue reading


  • Horde Installer: Recent Changes

    Major codebase change. Now triggers on autoload-dump rather than earlier in the install phase. Outputs info to console, new comments in autogenerated files.

    Continue reading


  • Maintaina/Horde UTF-8 on PHP 8

    On recent OS distributions, two conflicting changes can bring trouble. MariaDB refuses connections with ‘utf-8’ encoding Recent MariaDB does not like the $conf[‘sql’][‘charset’] default value of ‘utf-8’. It runs fine if you change to the more precise ‘utf8mb4’ encoding. This is what recent MySQL understands to be ‘utf-8’. You could also use ‘utf8mb3’ but this

    Continue reading


  • A new phase in life

    TL;DR – I changed job and this will not affect ongoing maint. of anything Horde I spent almost my whole work life with a single employer. It was quite a trip. I was part of it as a company grew from a hand full of guys into fifty, then hundred and ever more. I saw

    Continue reading


  • Net_DNS2 PHP 8.x compat issue

    TLDR: When using horde/mail_autoconfig or other features using pear/net_dns2 under PHP 8.x, use the “master” branch or wait for a release of version 1.5.3 or higher. While upgrading the Maintaina Horde codebase for PHP 8.1, I stumbled upon a problem: It turns out Net_DNS2 as of latest version 1.5.2 has a problem in its filesystem

    Continue reading


  • Maintaina Horde: Tumbleweed and PHP 8.1

    PHP 8.1 is available off the shelf in openSUSE Tumbleweed. I will shortly prepare a PHP 8.1 / tumbleweed version of the maintaina Horde containers. These will initially be broken due to some outdated language constructs. As PHP 7.4 will EOL by the end of this year, I decided not to bother with PHP 8.0

    Continue reading