So it's official: I'm leaving WordPress behind. I'm involved with the development of Habari, the next-generation blogging solution. One might wonder why we're re-inventing the wheel. Someone recently quipped that we're past the wheel, and are now working on the hovercar! Nonetheless, an explanation of what Habari offers should help explain why I'm involved.
Community
Community is the cornerstone of Habari development. It was community that brought the four of us together, and we're keeping community squarely in mind as we approach decisions and plan features. We recognize that only through collaboration will Habari succeed: each participant brings with him or her their own unique skills and passions. This diversity of talent and ability is an important aspect of Habari's community.
Another important aspect is that Habari is owned by the community. No one person has full authority over it. The people who use it and work on it are the ones who should -- and will -- make decisions about Habari development. Additionally, community members should be given the power to take charge of their areas of expertise. If someone is passionate about documentation, they ought not have to work through someone else's restrictions in order to make the docs successful.
Innovation
Habari is about innovation. There's a lot of great things being done with internet technologies, and we are very interested in integrating them into the way we blog. Things like OpenID, CoComment, and the Atom Publishing Protocol are all very useful innovations. We've been frustrated by the difficulty in integrating these -- and more -- into WordPress. Some of the roadblocks to integration into WordPress were technical, while others were clearly non-technical. We hope to remove both kinds of roadblocks and make Habari the most cutting-edge blogging system available.
One of the very first decisions when planning Habari was to make it a fully object oriented system, and leverage the powerful features of PHP objects. This has resulted in some wonderfully efficient code, and so far the system is remarkably fast. Object oriented programming allows us to streamline the development of user-created plugins; allows us to integrate a unified error handling system; and vastly simplifies the construction of our Application Programming Interface.
Another early goal of Habari was database independence. There exist enough database abstraction libraries that locking oneself into a single database really does seem a poor design decision these days. By using PHP version 5, we gain access to the PHP Data Objects (PDO), which is the PHP-native database independence solution. We currently have MySQL and SQLite working, and are eager to find contributors with PostgreSQL experience. Preliminary conversations suggest that Oracle support wouldn't be too hard, either, surprisingly enough. Another very real benefit to using PHP5 + PDO is that we gain the use of prepared statements for all database interactions. This drastically reduces the likelihood of a SQL injection attack against your blog. We're considering using stored procedures, too, as both a means to improve performance as well as to improve database independence.
Documentation
As much as we're striving to make a system that's friendly and intuitive, we recognize that not all people have the same background as we do; and as such what's intuitive to us might not be intuitive to a first-time blogger. Documentation is of paramount importance to the Habari project. End-user documentation and developer documentation will both be included in the download.
We plan to integrate links to the manual into the Habari administrative interface, so that you may get help about specific parts of each screen with a single click. The manual will be part of your Habari installation, so if you can get to your site you can read the manual. Users should be able to access the documentation without relying on our possibly flaky servers to store the manual they need.
Developers -- and would-be developers -- should also be provided with meaningful documentation. We're fully documenting (via PHPdoc) the source code to Habari, and plan to include thorough instructions as to how the system operates: initialization, request processing, theme and plugin dispatching, and more. This is a fundamental part of the Habari distribution, and not left to the kindness of volunteers after the fact. New methods will be documented when they're included in a new release, not after someone figures it out on behalf of everyone else.
Another important aspect of documentation is meaningful changelogs, listing real changes to the product since the last release. Distributors and integrators rely on changelogs to see what's happened. Developers rely on changelogs to be made aware of fundamental changes to systems they might be using or extending.
Experimentation
Habari is not afraid to experiment with new ideas. The Subversion repository ensures that nothing is ever truly deleted. If someone eagerly checks in a new idea that proves to be either poorly implemented, or maybe just not such a great idea after all, the revision control system makes it easy to correct the situation and move on. We hope to support developer branches for their own work outside of the core trunk.
With all these people having access to check in new code, it's a very real possibility that someone might try to intentionally foul things up. If someone were to flake out and try to actively harm the project by deleting files or polluting contents, the other project members could simply roll back to a previous version before the attack and keep going. If someone checks in something by mistake, or implements something broken outside of their area of expertise, it can be dealt with relatively easily.
Development Model
I met DrBacchus several years ago, and it's been fascinating to listen to him speak about the Apache development process. The meritocracy of the Apache Software Foundation is such that regular participation results in increased permission within the project. This is the model we've decided to adopt for Habari: frequent contributors are given access to submit new stuff directly, because they've proven themselves capable.
This is important for several reasons. First, we each have our own areas of interest and expertise, so by getting more people involved directly we speed up the development of all areas of the code. Second, more people are available to deal with problem situations. Third, the project as a whole doesn't slow down if a few of the developers are offline for extended periods of time. Finally, more developers improves our "bus factor": it takes more people getting hit by more buses to interrupt the project.
Spread the news
We've been working on Habari since October, 2006. I'm tickled that many of the suggestions on "What the new kid on the block needs to get right" had been discussed long before we ever announced the project. With the influx of interest and enthusiasm, there's been a lot of attention on the installation process. Hopefully we can dedicate as much energy to the upgrade process as well.
I'm thrilled with the response to Habari so far. Owen's posted some more info about Habari, as well as a collection of links to some other posts about it. The IRC channel is becoming surprisingly busy. I know eventually all the enthusiasm will taper off, and tough decisions will need to be made; but for right now the sky's the limit!
Needless to say, I'm very excited about Habari!
Our New Year's Eve plans changed several times in the days leading up to the event, and then changed again Sunday morning when we decided to keep the twins at home, rather than have them spend the night at Carina's parents' house. We played Pictionary, which is always a lot of fun with the girls, and then watched some Monty Python's Flying Circus. I'm delighted that the girls enjoy the humor of Monty Python, and that we can share that together.
Around 10 PM, we decided to watch The Tick, which Carina had received from Netflix. I was a huge fan of the animated show, and had always been curious about the live action series. It's completely over-the-top, and we all laughed out loud during each episode we watched. The girls couldn't get enough of the Tick's zany monologues! (Indeed, they were up early this morning watching the show again.)
We watched the ball drop in Times Square, toasted some champagne, and enjoyed a quiet (and safe!) New Year's at home.
I'm looking forward to 2007. The girls will turn a decade old. We're planning a vacation to the Grand Canyon. And there will no doubt be lots of wonderful memories made.
In early December our main drain began backing up, depositing sewage into our basement. It would slowly drain back out. I tried various things to resolve the problem, to limited success, but ultimately we needed to call a plumber. Serendipitously, we received an unsolicited advertisement from a drain cleaning company on our door one day, so I called them. They snaked the main drain and pulled up a lot of roots. We ran a lot of water from the washing machine down the drain with no backup, so I assumed all was fixed.
Last week, the drain started backing up again. I called Rescue Rooter, hoping for a quick fix. They informed me of their pricing ($200 for the first hour, $90 each additional half hour) and my heart began to sink. Thankfully, they review the situation and offer an estimate before beginning any work. Even better, the fellow who did come out was very helpful, and told me to call back the first folks who worked on the drain before spending any money with his company. (This is a marked departure from when I called Roto Rooter some years back, and the repairman offered to come back on his own time to work on my problem in exchange for a cash payment directly to him.) I had indeed tried to call the first company back prior to calling Rescue Rooter, but got no answer.
After some phone tag, we finally coordinated for the first company to come back the next day. In a fortuitous turn of events, Carina had some months prior met the former occupants of this house, so we were able to ask them for some history of the plumbing. This proved very helpful, and the drain guy was able to use this information to run another snake via an outside access pipe that had been installed by the previous owners. More roots were removed, and the drain began working as normal, again.
Now the only plumbing problem we have is a very slow drain in the upstairs bathroom sink. I've been meaning to buy a small auger for this for some time, but it's never been enough of a problem to really motivate me to action.
This morning I woke up with a slight headache, and ambled downstairs to prepare some coffee. As I walked past the Christmas tree in our living room, I heard a weird, repeating sound. It sounded like two ornaments gently clinking against one another. Curious, I looked for the ornaments, hoping I could separate them so that they wouldn't exacerbate my headache. I couldn't find any two ornaments clinking together... but wait, why was the floor wet? Come to think of it, why was the tree wet?
It turns out that one of the twins had used the upstairs sink during the night, and left it on ever so slightly. The water dripped all night long, slowly filling the pipe, then the sink basin, and finally running over onto the floor. Left unattended for hours, the water seeped through the floor and came out the ceiling of our living room. It didn't stop there, though! It leaked on through to the basement.
Happy f'ing New Year.
I played Chiron Beta Prime (one of my new favorite Christmas songs!) for the twins the other night. They enjoyed it, both for the catchy tune and the entertaining lyrics. I had to explain what robot overlords were, but other than that they picked it up right away.
Several hours later, well removed from the context of listening to the song, Tyler began asking me questions about it. A lot of questions. She'd been mulling over the song, and decided she really wanted to know why the robot council had evicted the family. Why did they want someone to come rescue them? Just what were the robot overlords doing to them?
I should point out that Tyler does the same thing during movies. It's nearly impossible for her to watch a movie without asking at least a dozen questions. Most of the time, the questions she asks will be answered as the movie develops, and we keep trying to explain this to her ("Just watch! The movie wants to tell you everything you need to know."). Occassionally she'll ask a question that's well beyond the scope of the story being told. Answering these questions -- even if just to say "don't worry about it" -- almost always makes Tyler miss the next bit of the movie, which results in more questions, ad infinitum.
It was a bit exhausting, having to deflect this recent barrage of questions. I found it hard to explain to Tyler that sometimes things can be funny -- or entertaining -- without knowing all of the details. It's fun all by itself to hear a Christmas song about robot overlords, and we don't need to know all of the particulars about those overlords in order to enjoy the silliness of the song. One's imagination can fill in the missing pieces in whatever way one chooses.
Don't get me wrong: I'm thrilled that Tyler is able to think about these things in such depth. She's clearly processing the information that was presented to her, and she wants to know more. That's exciting, and very satisfying to me as a parent.
I got some small bit of turn-around on Tyler the other day at the oral surgeon's office. She's going to have some baby teeth removed, and we were required to fill out a lengthy personal history for her prior to our initial consultation visit. I asked Tyler every question on the form, even though I knew all of the answers. It was quite a moment, sitting in the waiting room with the other patients, asking Tyler things like "Do you you now, or have you ever had a stroke? A heart attack? Liver disease?" Tyler's look of incredulty when I asked "Are you pregnant? Are you nursing?" was indescribably funny. I took a sidelong glance at a few of the other folks in the waiting room, and had to suppress a giggle as I saw the smiles creeping onto their faces.
Last year, for various reasons, we didn't put up a Christmas Tree. We received quite a bit of flak about this from family and friends. So this year we made sure to purchase a tree.
Growing up, Christmas trees were always a big part of the holiday. When my sister and I were young, and believed in Santa Claus, my parents would keep the tree hidden in the garage until we'd fallen asleep on Christmas Eve. Then they'd put up the tree and decorate, as well as prepare, wrap, and/or assemble everything for the following day. It made for an incredibly magical Christmas Day for us kids to run downstairs and see the Christmas tree there, decorated and lit. I can only imagine how exhausting it must have been for my folks.
As we got older, dressing the tree became a family tradition. Mom and dad would put on Christmas music, and we'd spend an evening putting on the decorations together. We had a lot of ornaments, and it was usually a fun family experience to reminisce over the history of individual pieces. We each had our favorite. My favorite ornament, for as long as I can remember, is the shiny Elvis Claus:

At some point in my teenage years, dad purchased a string of bubble lights for the tree. These quickly became his absolute favorite decoration, much to my mom's chagrin. Every year there was a heated battle as mom tried to coerce dad not to put up the bubble lights. She could never change his mind, so she'd always resort to encouraging him to place the lights in out-of-the-way places. This rarely worked, either, because I would always back dad's side, being fond of the lights myself.
Several years ago, mom found a way to trump dad's bubble lights by purchasing a string of lights shaped like red jalapeno peppers. These were, by far, the most unique item on our tree that year, and dad seriously considered entering into a truce with mom so that his beloved bubble lights would be removed if it meant that the pepper lights would be, too. For reasons unknown to me, that truce never occurred, and for every year after the tree was graced with both bubble lights and pepper lights.