A modest calendar server

I’ve been long frustrated with the lack of small, simple CalDAV servers to support shared calendaring for my ISP‘s customers. There’s Chandler/Cosmo, Hula (now Bongo), OGo and sOGo, and probably a bunch of others written in Java that I haven’t found, but on average, they weigh in at a hundred megabytes of code, include huge dependencies, are hard to compile, hugely complex systems that scream “Enterprise” and not in a good way.

CalDAV is much maligned as a complicated protocol. I’ll grant that, but it’s not terrible. It’s possible to implement a server that speaks it (if in a pidgin dialect) in a handful of hours.

So I did that. Weighing in at 8.3K, I present Camping calendar, which can now run a (very insecure, I caution) a shared calendar between Mozilla Sunbird and Evolution.

I’d love feedback, especially code-structuring tips for dealing with such a huge pile of rather arbitrary, namespaced XML.

Evolution and CalDAV

I’ve been writing a small CalDAV implementation, which isn’t as bad as it’s made out to be. Yes, it’s a weird standard with lots of edge cases, but the development has been really linear, spec in hand, implementing sections at a time.

Testing, however, is a major pain. There’s a lot of little things that will make accessing a CalDAV store silently fail.

Evolution, in particular, is picky. Namespaces declared on the wrong elements, despite being semantically equivalent, cause havoc. Using DAV: instead of D: as the prefix for elements (Are you even using namespaces, folks?!), not sending etags, having etags match, all of these will make Evolution silently ignore your calendar data.

This can be a lot better, folks.

Camping

I’ve been using the Camping Microframework for a while now, and really liking making web apps with it. It’s suffering a little bit, though, from its concession to its self-imposed 4K limit on code size.

I’d like to suggest another benchmark: 4K × (1+log<sub>2</sub> version).

That’d put Camping 1.6 at 6021 bytes, and Camping 2.0 at 6935 bytes. So much wiggle room! I bet we could even get basic WebDAV in version 2 that way.

There’d even be room to improve the parser for R(), removing a few of the pointy bits from the simplicity of that routine, and a few other things.

Tumble

New Mexican whiptail lizards, 15 species of which reproduce asexually by parthenogenesis. They’re polyploid, too. (Polyploidy in humans is weiird.) Triticale (a hybrid of wheat and rye) is hexaploid, and non-sterile, while the diploid hybrid is sterile. Polypoloidy is implicated in some models of speciation. Also, the Triangle of U, the triangular relation between members of the genus Brassica is interesting.

Congressman Tim Ryan meets the TSA in his experiment with trying to live on a foodstamp allowance diet. Welcome to the world my friends often live in, Tim. Thanks for making some awareness!

Pimlico, a simple PIM platform. GTK+ and Evo, woot!

The Hula project has been forked and called Bongo. Maybe I can get it to actually run. That’d be nice.

Gnome Launch Box, a clone of quicksilver. Also damn fast.

Tumble

Cryonica electronic music.

Dovecot 1.1 plans. It’s a hell of a good IMAP server. Solid, secure and fast.

Blender 2.44 is out, and it does Subsurface Scattering. I’m impressed.

ANTLR 3.0 is out, and next month will have Ruby and Objective C support.

Quote

baileyjordan: Nooo! Hot girls trump evil!

Posted using TxtLJ

Summer rain! It smells so good! Cold meets warm, yet meets thirsty land. The pavement is dark, and the car makes that wonderful sound.

Tumble

Downsize DC: “Read The Bills Act”. Good idea. Never would have thought of that. And here I was thinking that we should legislate voting by fair dice roll.

A jet powered loo.

Open-source petabyte-scale filesystem. I wonder how it supports POSIX IO semantics, especially locking and concurrent access.

Basic Authentication for Camping.

Congrats to Joshua on his first commit.

Anyone have information on origami for the blind?

E7 looks interesting to a programming language geek.

Hot Springs

Today was free entrance to the local hot springs pool. My sister came by and said “Do you want to go?” I did.

An actual quote from the men’s locker room (hey, I’d rather surprise than intimidate): “So. How far along are you?”

I like this town. I like the people. A lot. I’m recognized — and accepted — as trans. No uncertainty, no wondering if people know. They get it. And it works out damn well. People aren’t stupid. Most of the time. And even when they don’t understand, they at least relate as close as they can.

“Hey, I’m glad you can just be

“A lot easier than not being, that’s for sure”, I say.

“Yeah. For sure.” I put on my pants, towel covering my midsection still.

That said, swimming naked, during the daylight, in a crowded hot springs pool is a strange experience. My upper body is decidedly female-shaped. My lower body, not so much. I’m also not the type to just get in and stay in, since I get overheated and have to switch to the cold water every 20 minutes or so. I’m not sure how I feel about being so exposed.

988

Responding to Math (Eww?):

Let me start off: Math? Eww!

Let me revise. Math teaching? Eww!

I had the fortune to not learn math the traditional way. I didn’t learn abstract problems. I’ve never done much formal algebra. I’m working on calculus now, because it’s interesting for what I’m learning.

But I didn’t learn formal algebra, the so-called prerequisite.

I learned trigonometry first.

At this point, I’d been programming computers for a fair number of years (I started at age 6, on my TI 99 -4a. And I started with text manipulation, because we had the speech synthesizer addition.) I had an idea what variables were. I had a good idea how to twist the symbols around programatically. I could do what one might consider algebra, on the computer. But I wasn’t thinking about balanced equations and transformations—that came later when I wrote a wiki, and I thought about it textually. I was trying to get things to add up right to make the game world the right size. I was trying to make pretty colors (16 Bit!). I learned binary arithmetic.

But then I had to learn trigonometry.

And there was a reason for this.

We were building a house. And we’re not talking 16-inch-center studs, slap two up around every doorway cookie-cutter house, we were Building A House. Out of big timbers and straw bales.

And it had to not fall down. There’s no book of The Way You Must Do This that’s pre-approved, no thought required. There’s a bunch of engineering books. Some of them quite accessible. We had to make a plan and get an engineer to approve it.

So we did. My dad and I learned trigonometry together. We paced around timber and computer models. We learned about force vectors. We learned how the triangular structure of the house would distribute the loads.

I wrote a few programs then to figure some parts out. If I’d had Ruby at the time, I’d have used Ruby. But I had Quattro. And AutoCAD. And we made it work.

I’d been programming for years before I did much more than counting, mathematically, with it. I learned math, not by being taught abstractions, but by having a real physical use for it.

Really, math is shapes and transformations and patterns and relationships. The way it’s taught is manipulations on abstract symbols and so wholly unapplied that it’s painful to watch.

Programming, the way I learned, however, was fun. I wrote a wiki. I wrote text tools. I chopped words up in all sorts of ways. I wrote madlib generators. Lists of words, lists of sentences, lists of paragraphs. Yes, you can count elements in a list. Yes, you can think of the elements as symbols in a set alphabet.

But when it comes down to it, programming words is fun. And math is better when applied, either manipulating graphics or lumber. Teaching it in the abstract is boring. Really, really boring.

Oh, and the house is still standing. And it doesn’t shake in the wind like the one we lived in before did.

Bookshelf

These books have all had a big effect on how I think. Thanks to elliotpp for the idea.

Education and life goals: “Real Lives” (Grace Llewellyn, ed.) and “The Teenage Liberation Handbook” (Grace Llewellyn), though the effect of the TLH has been entirely secondary in my life since I was already doing what it suggests.

Relationships: “All About Love” (bell hooks) — Thank you, Elliot.

Place: “Red” (Terry Tempest Williams)

Mind: “Metamagical Themas” and “Gödel, Escher, Bach” (Douglas Hofstader)

Food: “The Bread Book” (Collister & Blake), “The Moosewood Cookbook” (Katzen)

Philosophy and spirituality: “The Care of the Soul” (Thomas Moore), the “Ender’s Game” series (Orson Scott Card), “Winnie the Pooh” (Milne), and “Red” mentioned above.

And two that aren’t on my shelf, but that had a big effect: A book about the link between depression and hypoglycemia (that sentence sums up what I got from the book, and why I’m not depressed anymore), which was on my mother’s shelf, and the big coffee-table bread book that my parents own, talking in detail about techniques for making bread, both professionally and otherwise, with real, not-dumbed-down recipes.

Funny headline of the week

“O” Magazine has a picture of Kate Walsh, and the headline reads “Kate Walsh (of Grey’s Anatomy) finds her McDreamhouse”. I wonder if evoking “McMansion” is what they really wanted.

Tumble (a small one)

The Calculus of Caffeine Consumption.

Foiling a robber with kindness. We need more false-positive-okay security systems like this.

Horseradish-Onion-Garlic dressing

Sauteé ½ small onion and 5 cloves of garlic until brown.

Blend with ¼ cup mayonaise, ¼ cup buttermilk, a teaspoon or two of prepared horseradish, and a tablespoon of soy sauce.

Let stand at least 4 hours in the refrigerator.

[Exist DB](http://exist-db.org/), an open source XML database. I still say that's a sick idea.

On the other hand...

I hitched to Ouray today with a couple skiiers from Ophir, a little town outside Telluride. They’ve got no high-speed internet service up there, and wireless is perfect for distribution there — a bowl-shaped valley, with high points to put antennas on that everyone can see. We talked about the cost of putting in service up there. I know numbers off the top of my head these days, having done this for so long. I know the break-even points, the approximate cost of leased lines.

They’re gonna call me some time to talk more. Fun consulting gig!

Tumble

BSD Authentication. Why isn’t PAM this sane?

Google highlights the war in Darfur. Powerful.

Openlink Virtuoso released Version 5.0.0, with SPARQL Update support. Also, it’s fast and easy to set up and has the good parts of being Enterprisey.

Fortune cookie snark

Kerrighed, another cluster-computer OS, this one more like MOSIX, making a cluster appear as an SMP system.

This one’s a short post, but there’s some really good stuff out there.