Application Building With Horde

Chuck Hagenbuch

The Horde Project

I thought Horde was just ...

Different kinds of Horde Applications

"What is Horde?"

Why: Libraries

Why: Standards

Why: Backend Independence

Why: Applications

Why: Internationalization

Why: The Project

Application Building

All of these applications, APIs, libraries, etc. are why you can build any kind of application or site with Horde.

What makes a Horde application?

Typically Horde applications share a common structure and code organization. The skeleton application provides this for you.

With a skeleton!

What makes..., cont.

But all you really need is:

That's all?

Technically, yes. But to take full advantage of Horde, you'll also want:


Here's an application's registry.php entry:

Building our catalog applications

Getting started

Introduction to Rdo

Rdo Example Usage

Rdo: Creating & Editing

Rdo: More Find & Delete

Form Generation

Introduction to Horde_Form


Motivation: How many times do I have to loop through this #*)&%% array?

Remember Flyweight?

Flyweight is a software design pattern. When many objects must be manipulated and these cannot afford to have extraneous data, flyweight is appropriate.

In the flyweight pattern, the data has no pointers to the data type methods, because these would consume too much space. Instead, the subroutines are called directly. In some cases, flyweight inheritance is performed by "shift-in" and "shift-out" data markers as a higher-level operation cycles through an array of flyweight data.

One classic example of a flyweight pattern are the characters stored in a word processor. Each character represents an object that has a font face, font size, and other formatting data. As you can imagine, a large document with this data structure would bloat the memory footprint of the word processor. Moreover, since much of this data is repeated, there must be a way to reduce the footprint - the Flyweight pattern. Each of the character objects would contain a reference to a separate formatting object which contains the required properties. This greatly reduces the memory footprint by combining all of the like-formatted characters into simpler objects that reference a single formatting object.

Lens use

Doing more with our data

Let's provide a different way to see the packages we're expecting. How about WebDAV?

WebDAV browsing made simple

Obrowser, where art thou?

Alternate ways to see what WebDAV sees:

Obrowser, cont.

Obrowser, cont.

Implementing /browse