A couple of years ago (way back on May 22nd, 2006) James Snell posted on the Apache Incubator General list about a new project he wanted to bring to the incubator.  That project ended up becoming Abdera, and now over two years later it's finally graduated to become its own new top level Apache project.  It took a really long time, and a lot of people put in a lot of work, but I'm happy to say that Abdera has become a nice little community built around some neat code, and I'm quite proud to see it moving on from the incubator to bigger and better things.

The actual move from the incubator to our new home at abdera.apache.org will happen over the next few weeks, but for now lets just give the Abdera developers a round of applause.  They've really done something great.


The year is rapidly slipping by, and I was moderately concerned about visiting a state highpoint during the year. Today my fears were soothed as I got a chance to visit the top of Alabama: Cheaha Mountain. I was at the FSE-16 conference Atlanta and made the early morning drive across state lines to visit the highpoint. It was a bit chilly, but the leaves were nice, and it was good to get out of the hotel for a bit. See the trip report for a full account of my trip.


So everyone knows my job at Google is to tech-lead the team responsible for our Subversion servers, as part of our larger open-source project hosting service. Thus, having come to a reasonable temporary stopping point with my previous 20% project, I’ve turned to a new 20% project: making Subversion itself better.

Specifically, I want to right a wrong, undo something I’ve felt nasty about for years. Subversion’s HTTP protocol is very complicated and unintelligible to mere mortals. Honestly, if Greg Stein and I got hit by buses, nobody would really understand what’s going on inside mod_dav_svn. What’s the backstory here? Basically, we tried to make mod_dav_svn implement a reasonable subset of DeltaV, which was a mostly-failed spec written long ago to implement Clearcase^H^H^H^H version control over HTTP. Eight years later, this extra complexity hasn’t bought us any interoperability with other version control systems — just a big headache to maintain and a icky performance penalty. The Subversion client, in being a “good DeltaV citizen”, isn’t allowed to directly talk about URLs that represent revisions, transactions, historical objects, and so on. Instead, it has to play dumb and continually issue a series of requests to “discover” opaque URLs that represent these concepts. It’s sort of like the client playing a formal game of 20 Questions, when it already knows the answers.

So after some chats with Greg Stein and others, I’ve collected ideas on how to streamline our existing protocol into something much more simple, tight, and comprehensible. Way fewer requests too. You can read our evolving design document and send questions/feedback to dev@subversion.tigris.org. Subversion 1.6 is planned to be released at year’s end, so if we’re lucky we’ll see this new protocol in Subversion 1.7 next summer.

Speaking of Subversion 1.6, however: a smaller sort of glastnost is happening there as well. In this new spirit of HTTP openness, we’re officially ending our policy of “not telling people how to access older revisions” over HTTP. If you recall, the Subversion book has always said:

Q: Can I view older revisions?
A: Your web browser speaks ordinary HTTP only. That means it knows only how to GET public URLs, which represent the latest versions of files and directories. [...] To find an older version of a file, a client must follow a specific procedure to “discover” the proper URL; the procedure involves issuing a series of WebDAV PROPFIND requests and understanding DeltaV concepts. This is something your web browser simply can’t do.

I’m here to break the chains! Reveal the lies! RELEASE THE KRAKEN. In Subversion 1.6, we’ve gone and implemented an official public query syntax for accessing older (revision, path) coordinate pairs:

http://host/repos/path?r=REV
http://host/repos/path?p=PEGREV
http://host/repos/path?p=PEGREV&r=REV

This query syntax offers the same peg-revision concept that one sees in the Subversion commandline client. The first syntax means “start at PATH in the latest revision, then follow the object back in time to revision REV.” This works even if the object was renamed and exists at a different place in the older revision. The second syntax allows one to pinpoint an object with no history tracing: just jump to revision PEGREV, and find PATH. The third syntax is very much like running “svn subcommand -r REV path@PEGREV”: start at PEGREV, find PATH, then trace the object back into older revision REV.

In any case, this means source code browsers and other tools can stop using “secret” internal urls to access older objects.


I feel compelled this evening to write a bit. The last couple of months have been full of ups and downs. We’ve been so blessed to have grandmas here to help take care of us and the support of dear friends here and friends and family everywhere else. Jonathan’s birth, Hyrum’s appendectomy, bishopric calling and travels and just all of us generally trying to adjust to Jonathan’s addition has created a little craziness around our house.

Jonathan continues to bless our life everyday as does Hannah. Hannah loves her little brother and I’m sure she will have no problem mothering him for the rest of his life. She loves to give him hugs and kisses. Today she kept wiping the drool off his chin. Jonathan continues to grow and look so cute with his double chin. I wait everyday for that first real giggle. I think I heard one the other night but it may have been a dream.

Hyrum is out of town again this week but happily for me this his last trip for the semester, at least work related travel. He and Ian are hatching a trip for over Christmas break, we’ll see what happens with that. I sure miss him when he’s gone and so does Hannah. Today she heard the wind rustling leaves outside our door and asked if it was daddy. I said no and she followed up with Grandpa. She was pretty disappointed that neither Daddy nor Grandpa was going to walk in our door.

We’ve seen the Wrights for the last two weekends and she loves seeing them. We are glad they live close enough to see pretty often. We wish we could see my parents more often though. We’re feeling pretty lucky for having seen them twice this year. Family is a wonderful blessing. We’re so lucky to be part of two big wonderful families. We just wish we could all live a little closer together. I have siblings in Utah, Idaho, and Colorado with my parents in New York and Hyrum’s parents are in Texas with siblings in Texas and Utah.

I’m really looking forward to the holiday season. I love the smells, the music and just the general feelings. I love shopping for Christmas presents and planning my goodies for the holiday. I bought fabric the other day to make a tree skirt. I am really excited. I love creating things whether it’s crafts, dresses for Hannah, food or something else. I feel intelligent when I figure out how to make a pattern for the project I have in mind. These days, an opportunity to use my brain is greatly appreciated. I always hated math in school but I have to admit that I use it a lot when I am making a pattern. I never thought I’d say that.

We’re doing well just trying to make it one day at a time. We are loving life and dealing with all the excitement and the daily happenings that remind us we’re alive and really blessed. I’m glad that my problems are potty training our toddler and keeping our infant happy. Those things really are pretty simple compared to things other people have to deal with. I’m grateful for my husband. I have two beautiful children and the opportunity to care for them and love them is such a blessing. God has blessed us and for that I am grateful.


This past summer, via my role as project owner for the Subclipse project, I decided to participate as a mentor in the Google Summer of Code program.  Summer of Code is a great way to bring some visibility to your project as well as build relationships with other open source developers.  One of the first things you have to do when participating in Summer of Code as a mentor organization is to come up with some ideas for projects that students can work on for the summer.  It needs to be something interesting enough to attract talented students and at the same time it ought to be something where a measurable amount of work can be accomplished in just one summer.  I came up with a number of ideas, but the one I knew someone would go after, and the one I hoped would get done, was to add a revision graph feature.

One of the top requests I hear from new Subversion users is the desire for a good revision graph feature.  Unfortunately the way that Subversion stores information in its repository is not conducive to providing a feature like this.  Specifically, Subversion does not currently track "copy-to" information.  It can tell you the history of a given item and trace that history back through all of the places it was "copied-from", but for any given path/revision pair it cannot tell you if it has been copied to another location.  This is an essential feature to create a proper revision graph, so in order to draw a decent graph, you pretty much need to have the entire history of the repository available so that you can construct the "copy-to" information yourself.  Performance would be terrible if you had to get this history every time, so a good local cache of the information is essential.  This is a fairly challenging engineering task and therefore was one that the existing Subclipse team was unlikely to ever find the time to do.  At the same time, it was a great task for a motivated student.  Combined with the ability to visualize the information in cool ways via the rich graphical library that Eclipse provides, I knew we would attract some interest.

We were fortunate enough to attract a great student, Alberto Gimeno.  He dove right into the task when the Summer of Code program started and did a great job delivering the feature.  I was hoping we would come out of this with some interesting code that someone else might want to pick up and finish, but Alberto was able to drive this feature to a point that it was nearly ready to ship when the summer ended.  We have just spent a few months adding some Eclipse-polish to it and integrating it into Subclipse.  Today we release it, and this is what a simple graph looks like:

Notice that the graph is capable of showing merge information when used with Subversion 1.5.  It also contains a number of nice features made available via the Eclipse Graphical Editing Framework.  Namely, the ability to zoom in/out, export to an image file as well as the ability to navigate a large graph via the Outline view.

This feature will be included in an upcoming release of the CollabNet Desktop - Eclipse Edition.  You can get it today via the "dev-builds" update site for the CollabNet Desktop.  Download information for the CollabNet Desktop can be found at the project home here.

Additional details on the revision graph feature can be found at the Subclipse site.

I would like to close by once again thanking Alberto for the work he did on this feature.  I look forward to his continued involvement in this feature and the Subclipse project.  I would also thank Google for running Summer of Code and including Subclipse in the program for 2008.


It’s been almost ten years since I graduated from “dear old Allen High,” but yesterday, I had a chance to go back in time for a few minutes. My youngest brother is a drum major in the Allen Eagle Escadrille marching band, and a senior this year, so we decided to take in a game and a halftime show. Heather and I packed up the letter jacket, loaded up the kids and made the 4-hour trek up to Allen for the final home game of the season.

It’s the first high school football game I’ve been to since being in high school myself, and I’d almost forgotten what high school football in Texas is like. The football wasn’t particularly stellar, but the environment can’t be beat. Even the little kids enjoyed it, though I think they were ready to leave after we saw the band at half-time. Seeing the 500+ member marching band perform was amazing. It was also a new experience, since I’ve always been in the band, not watching it.

Allen ended up winning the game by 3 points, and will mostly likely go the playoffs, though based upon what I saw last night, I’m not very confident in their chances. Still, for a few hours, it was good to be an Allen Eagle again.


The intervals between millions are getting shorter. Looks like we are constantly having > 500.000 downloads per month now.



[cue Doogie Howser theme music]

Dear diary,

Google is probably one of the only companies in the U.S. that gives an actual paid paternity leave (7 weeks!)… why, it’s almost as civilized as living in Europe. It not only gives us a chance to bond with babies, but try to reset our lives as we walk around in a sleepless stupor. Highlights of my downtime so far:

  • When mommies and babies are sleeping, it’s still possible to practice the banjo with the magic of Mike’s Mute, the mostly highly rated of mutes on all of Banjo Hangout (where the cool kids are!). The photos don’t do it justice. It just clamps onto the bridge and makes your banjo as quiet as an unplugged electric guitar… yet it still sounds like a banjo!
  • Did you know that the bottom of a newborn baby’s foot, being completely unused, looks exactly like the bottom of a hand? Delicate little lines everywhere — the same ones palm readers look for. It’s amazing to think that those features are hiding under the thick dead layer of smoothness on the bottom of adult feet. In that same vein, did you know that when a newborn straightens out his arm, all one can see is a single puffy tube of flesh? There is no visible elbow, no indication of how or where the arm bends… thus proving my scratchy elbows are a product of nurture, not nature.
  • As the temperatures drop into the 40’s in Chicago, our pantry is overflowing from potatoes delivered by our local community supported farm. It’s time again to dig into my favorite recipe for potato leek cheese soup. Seriously: just boil some potatoes and leeks, add cream cheese, and you’re in heaven. Blending with a stick blender is strictly optional; I can’t get enough of the stuff. Go make this soup right now.

Back to the diapers.