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. “Always close to the source”.

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.

Category: First Page

  • WSL2 openSUSE Tumbleweed ssh-agent

    ssh-agent does not persist over sessions in WSL2 with current openSUSE Linux and other common distributions. Linux native bashrc solutions don’t work here.Let’s use keychain instead Then let’s add some snippet to .bashrc and remove any eval ssh-agent lines Then open a new window. It will ask you to enter your passphrase once. Enter any…

  • Recovering from the unexpected

    My 2023 started in a bad way. I did not attend to any non-work twitter, email or other communication and FOSS work to deal with that. Don’t worry, I will catch up soon. Sorry for any delays and inconveniences.

  • Satis is now a Composer Plugin.

    Satis is the lightweight, static repository generator for the composer package manager. It enables admins to provide PHP software packages inside airgapped CIs, OS packaging environments and restricted data centers. Back in August I added a plugin mode to satis to make it work as a regular composer plugin. While working on it, I also…

  • Let’s have a date. Revised horde/date ideas

    It’s bad but not as bad as you think. The way we write dates is very different among cultures and technologies. Even countries of the same language family might have totally different notions where to put the year, where to put the month, where to put the day when writing down a date in numbers.…

  • Modernizing horde/text_diff

    If you ever read a github pull request or similar extension proposal, you will likely have seen side by side comparisons of the original and the changed file. You may also have seen some text format that highlights only differences and a little context but hides the unchanged rest of the file. Both of these…

  • Code Generators: Bad, worse & ugly

    Code generators have been invented and forgotten at least four times in software history. They have an appeal to developers like the sun to Daedalus’ son. Let’s not be Icarus, let’s keep them generators at a distance and watch them carefully. Whenever a language, framework or paradigm forces developers to do the same thing over…

  • Why you should develop for latest, greatest

    Developers sometimes choose not to use the latest available language features that would be appropriate to tackle a problem for fear of alienating users and collaborators. This is a bad habit and we should stop doing that. Part of the solution are transpilers. What are transpilers, where are they used and what is the benefit?…

  • Phar out: horde/components in one file

    tl;dr – I packaged horde/components as a single file for easy inclusion in build pipelines. The horde/components commandline app is an important development tool. It lets you generate a composer.json file from the .horde.yml definition, helps with managing the changelog yml and provides a simple workflow utility which I use for release pipeline. Last year…

  • 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…

  • 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…