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.

Tag: horde

  • CardDAV vs MacOS Contacts

    In case you run Horde, NextCloud or other CalDAV/CardDAV server products, sooner or later you will encounter users who want to use the MacOS Addressbook application, “Contacts”, to access their server contacts. As of MacOS 11.5.2, the apple contacts app only supports one addressbook per principal. It will pick the first addressbook and use it…

  • Can Horde’s internal API use PSR-7 Messages?

    Applications call into abstract services backed by other apps, with limited coupling. This may sound a little like micro services, but predates the concept by a decade. Horde’s registry routes the call to the implementing app if present. For example, both “sam” and “ingo” applications implement some spam filter related API calls. Registry setup decides…

  • Authentication & Authorization is complex

    Could there be any more straight forward topic than authentication & authorization? The user provides user name and password and clicks “login”, the backend checks if credentials are valid. Invalid credentials are not authorized, valid credentials are authorized and identified (authenticated). End of story. Right? Well… in many cases, it’s not that trivial. As a…

  • CardDAV: What is Turba’s true data model?

    by

    in ,

    Turba Addressbook imports, exports and syncs to and from many formats. I discussed all the formats in a previous article. You can even customize the addressbooks, make them contain extra fields or omit common fields. Saving and loading data from the addressbook backend is in some way one more such conversion. Turba can actually read…

  • Horde’s HTTP component goes PSR

    This weekend, I gave the horde/http component a some major redesign. See how things escalated. Oh my. My minimum goals were namespacing, PSR-4 (Revised Autoloading Standard) and some minor, schematic adjustments. The final result is quite different. I ended up implementing PSR-7 (HTTP Message Interface), PSR-17 (HTTP Factories) and PSR-18 (HTTP Client). The code largely…

  • Horde/Rdo ORM: PSR-4 and BC Breaks

    Summary: Horde/Rdo ORM got upgraded for Namespaces. User code conversion is straight-forward. Backward Compatibility is limited. If you ever wondered, RDO stands for Rampage Data Objects. This has been on my list for quite long, but it took some time to get it right. The horde/rdo library is horde’s Object Relational Mapping (ORM) solution. It…

  • Why extending PHPUnit might be wrong

    Over the last few months, I spent a lot of cold winter evening hours looking into porting ancient PHPUnit 4.x test suites over to PHPUnit 9.x. The test suites, you guessed it, belong to the Horde framework. Horde actually does not just use phpunit but wraps it into its own testing library horde/test. The full…

  • Turba Addressbook (II) – Architecture

    In the first chapter we looked at Turba’s features, APIs, Protocols. In the current installment, I want to present the concepts and structure of the code. Turba is among the oldest horde applications. As such, it contains parts from various stages of Horde’s development.

  • Turba Addressbook (I) – Features

    This will be the first part of a short series of articles exploring the Turba application and its architecture. Part I covers all the features and integrations provided by Turba. Part II will look into implementation, code structure etc. Part III will consist of proposals for a changed architecture.

  • What’s new in Maintaina Horde: Status 3/2021

    CalDAV and CardDAV now run off SabreDAV 4 rather than SabreDAV 2 We now support both the Composer installer versions 1 and 2. Nothing still depends on the PEAR protocol. The Horde Icalendar Library now supports vCard 4. Still, importing/exporting vCard 4 or using it in CardDAV in the addressbook App Turba is not yet…