Blogging Roller

Dave Johnson on open web technologies, social software and software development


Status, cc:world

It's status time again. Quick summary: last week I spent most of my time on Roller 1.2 related issues and the Apache move. This week, I'll get back to the Roller 2.0/group blogging work.

On the Roller 1.2 front, I made some small enhancements to the Planet Roller aggregator and did some work to make the blogs.sun.com front pages a little easier to maintain. I also did a number of deployments last week to our internal blog server for testing.

Unfortunately, changing the front-pages in a Roller site is not quite as easy as changing a blog's theme. The front-pages are JSP, so you can't edit them through the Roller UI and folks who don't know Java and JSP have a hard time making changes. A number of people have suggested the idea of having a blog serve as the front pages of Roller and I think that's a great idea.

Now let's turn to Apache. Our Subversion repository space is ready at the Apache Incubator, but we're not. Since the Roller 1.2 release is coming up soon, last week we decided to keep main-line Roller development in CVS. Once the release is ready, we'll move to Subversion and branch 1.2 from there. Also: our new mailing lists are ready at Apache, but we haven't made the move yet.

Roller 2.0 work got short shrift last week, due to Roller 1.2 and related issues. Since Roller 2.0 lives in its own branch and Apache won't allow us to bring branches and history along with us (for a number of reasons, some legal), I had to do some extra work to recreate the Roller 2.0 branch in Subversion. I managed to complete that work and resume work on group blogging. I'm hoping that I can spend the rest of this week on group blogging.

That's all folks. I'm going to cover RSS and Atom in Action status in a separate post.

UPDATE: I completely forgot that we released Roller 1.1.2 last week, a minor bug fix release.

Tags: Roller

Kids online

Today, I set up a new computer for the kids. I took the new 2.8Ghz Celeron box that had been serving as my Linux file-server and swapped it with the old 450Mhz P3 box that the kids were using. I was a little surprised how easy it was to make the switch. I just took the hard-drive out of the Celeron and put it in the P3 and Linux came right back up.

I set up Windows XP Home on the Celeron box and installed the important software (Warcraft and SimCity 3000) for the kids. I would have preferred something other than Windows, but we have quite an investment in games and educational software for Windows.

I also added a wireless adapter. So now, for the first time, the kids computer is on-line. I didn't setup any parental controls or filtering software and I'm not really sure what to do about "internet safety." The boys are 7 and 8 and I'm pretty sure they aren't going to go looking for trouble quite yet, but I am a little worried that Google will send them to a site of ill-repute or some horrible porn-spam message will land in their inbox. If you've got kids around that age on-line, I'd love to hear what you do to protect them from porn-spam and other internet threats.

Tags: family

del.icio.us links [June 09, 2005]

Tags: Links

Dr. G on my iPod

Thanks to the wonders of podcasting, an interesting talk by SAS CEO Dr. Jim Goodnight appeared on my iPod this morning. You don't have to have an iPod to listen to Dr. G explain the secrets of SAS Institute's sucess (it's all about the M&M's by the way, 22 tons per year) at the Software 2005 conference. You can download the talk directly from the IT Conversations site.

Tags: Blogging

Raleigh/Cary Bloggers meetup tonight

Join us tomorrow (Tuesday, June 7th) for the first 
Raleigh/Cary Bloggers meetup of the month.

What:  An open meeting to talk about blogging, 
       podcasting & whatever's on your mind
When:  Tues @ 6:30 p.m.
Where: Cafe Cyclo, in Cameron Village

2020 Cameron St
Raleigh, NC 27605 (map)
(919) 829-3773

Who: Bloggers & people who want to blog (Podcasters welcome!)

Hope to see you there!
via Josh
Tags: Blogging

Weekly status, CC:world


  • Roller 1.1.2: still haven't released this minor bug-fix release, maybe later today.
  • Roller 1.2: not a whole lot of progress 1.2 last week, but I did take three full days (1 holiday and 2 vacation days) to work on RSS and Atom in Action and as part of that, I implemented Atom Protocol Draft 04 in Roller's CVS head. The code will be part of 1.2, but will not be enabled.
  • Roller 2.0: made some more progress in Roller 2.0 data model work last week, but not much.
  • Roller@Apache: All accounts appear to be in place. Perhaps we'll make the move to Apache's Subversion repo this week?
  • RSS and Atom in Action: Those two vacation days I took were part of a final push to finish the book. Although I was able to write a useful blog entry on Atom Protocol, I found that it is not yet stable enough to allow me to complete Chapter 8 Publishing with Atom. So, the plan is now to push all the rest of the chapters through production and wrap Chapter 8 just before going to print.
Tags: Roller

Atom has better podcasting support than RSS



Podcasting originated as a feature of RSS, but as the world moves to the new standard Atom format, podcasters will too. Atom can support podcasting through the element. As is the case with RSS 2.0 based podcasts, you can only have one podcast per entry. But, with Atom you can have a different representation for each language and for each content-type. For example, if you want to make a podcast available in both English and German and in both MP3 and WMV formats, you can do it by adding links like those below to the entries in your feed:

   <link href=”http://example.com/podcasts/show001-usenglish.mpg” 
       hreflang=”en-US” length=”21472922” type=”audio/mpg” />

   <link href=”http://example.com/podcasts/show001-usenglish.wmv” 
       hreflang=”en-US” length=”23889921” type=”audio/wmv” />

   <link href=”http://example.com/podcasts/show001-german.mp3” 
       hreflang=”de-DE” length=”20032879” type=”audio/mpg” />

   <link href=”http://example.com/podcasts/show001-german.wmv” 
       hreflang=”de-DE” length=”19907766” type=”audio/wmv” />

Disclaimer: Atom is a work in progress (but nearly complete). This is based on Atom format draft 08. Atom experts: did I get something wrong in the above example?

Tags: Blogging

del.icio.us links [June 05, 2005]

  • Wiki wiki world
    "Business wikis are being used for project management, mission statements and cross-company collaborations."
  • Two garbage trucks
    "it could well turn out that Sun made the right call by doing the unexpected"
  • Spring honeymoon over
    Rafe: "Spring is too smart for its own good when binding values from an HTTP request to a Java bean"
Tags: Links

del.icio.us links [June 04, 2005]

  • Apple goes X86?
    According to CNET. Say it ain't so!
  • SiteMaps = LRSS
    Bob: "The existing degree of almost gratuitous incompatibility is simply not useful"
Tags: Links

How Atom Publishing Protocol works

Unlike the other RSS and Atom books that are hitting the shelves these days, RSS and Atom in Action is going to cover the Atom Publishing Protocol. So, I'm following the protocol development very closely. This blog entry is a summary of Atom as it stands today (based on Draft 04 released May 10, 2005). It's a follow up to my post earlier post Atom in a nutshell which explained Atom API 0.9.

Atom Publishing Protocol (a work in progress) is a new web services protocol for interacting with a blog, wiki or other type of content management system by simply sending XML over HTTP, no SOAP or XML-RPC required. Your code interacts with collections of web resources by using HTTP verbs GET, POST, PUT and DELETE as they are meant to be used. Here's how it works.

Discovering your workspaces and collections

To start out, you do an authenticated GET on a server's Atom URL to get a description of the services available to you. You get back an an Atom Services XML document that lists the workspaces and within each the collections available. A workspace could be a blog, a wiki namespace or content collection that you have access to via your username/password.

Each workspace can contain two types of collections: entries and resources. Eventually, the spec will probably allow for (at least) five types of collections: entries, categories, templates, users, and generic resources.

Here is an example of a services document XML for a blog user with access to two blogs "My Blog" and "Marketing Team Blog":

<?xml version="1.0" encoding='utf-8'?>
<service xmlns="http://purl.org/atom/app#">
     <workspace title="My Blog" > 
        <collection contents="entries" title="Blog Entries" 
            href="http://localhost:8080/roller/atom/myblog/entries" />
        <collection contents="generic" title="File Uploads" 
            href="http://localhost:8080/roller/atom/myblog/resources" />
     </workspace>
     <workspace title="Marketing Team Blog">
         <collection contents="entries" title="Blog Entries" 
             href="http://localhost:8080/roller/atom/marketingblog/entries" />
         <collection contents="generic" title="File Uploads" 
             href="http://localhost:8080/roller/atom/marketingblog/entries" />
     </workspace>
</service>

Working with collections

So, a workspace is a blog and a blog contains collections of things like entries, uploaded file resources, categories, etc. All of these collections are handled the same way and respond the same way to the HTTP verbs. All support paging, so the server can return a collection in easy to digest chunks. All support query by date, so you can filter collections by start and end date.

To get a collection, do a GET on it's URI (that's the collection's 'href' as listed in the services document).

The services document specifies a URI for each collection. If you do a GET on a collection URI, you'll get back an Atom Collection XML document that lists the first X number of members in the collection. If there are more than X members, then the document will include a next URI which you can use to get the next batch of members. You can also specify an HTTP Range header to restrict a collection to only those between specific start and end dates.

Here is an example of a the collection document XML you might receive by doing a GET on the Blog Entries collection from My Blog above.

<?xml version="1.0" encoding='utf-8'?>
<collection xmlns="http://purl.org/atom/app#"
   next="http://localhost:8080/roller/atom/myblog/entry/77088a1" >
   <member title="The Connells: Fun and Games"
         href="http://localhost:8080/roller/atom/myblog/entry/7700a0" 
         updated="2005-04-16T23:07:08-0400" />
   <member title="The Connells: Boylan Heights"
         href="http://localhost:8080/roller/atom/myblog/entry/7700c9" 
         updated="2005-04-15T23:06:09-0400" />
   <member title="The Connells: Gladiator"
         href="http://localhost:8080/roller/atom/myblog/entry/7700c8" 
         updated="2005-04-14T14:05:31-0400" />
</collection>

Each member in a collection document has a title and a URI. To get a member of a collection, you do a GET on the member's URI. To delete it you use DELETE. To update it you use PUT. Here's an example of the entry XML you might receive by doing a GET on the first member of the Blog Entries collection example above:

<entry xmlns="http://purl.org/atom/ns#">
  <title>The Connells: Fun and Games</title>
  <id>7700a0</id>
  <updated>2005-06-01T19:07:45Z</updated>
  <content type="html">
     Let me tear down into your heart
     Let me take a seat and stay awhile
     Let me have a half of your whole  
     Let me keep it for myself awhile  
  </content>
</entry>

To add a member to a collection, you simply POST the member to the collection's URI. If you're POSTing a new entry, send the XML for the entry (example entry XML shown below). If you're POSTing a file upload, then send the file.

That's it. Pretty simple huh?

What about authentication?

The Atom spec requires that a server support either HTTP digest authentication, which can be difficult for some bloggers to implement (depending on their ISP and web server), or CGI authentication, which can be a lot easier to implement (I believe WSSE qualifies as CGI authentication, and that's what my Atom implementation uses).

What about devices with limited HTTP support?

Some devices have crippled HTTP client capabilities. For example, some Java J2ME powered cell phones can't do an HTTP PUT or DELETE. If you can't do a PUT or a DELETE, you can use POST instead with a SOAP wrapper that specifies a Web-Method of PUT or DELETE. Atom servers are required to support SOAP POSTS and returning results in SOAP envelopes.

What about draft vs. published states for entries?

Still undecided. Some folks suggest using different collections for entries in different states (draft, approved, published, etc.). But it's more likely that a new element will be introduced in the Atom format to specify the state of an entry.

Summary

That's my summary of Atom protocol as it stands today. I think it's a great improvement over existing blog APIs in terms of features and design. And it's not very difficult to implement. I know because I'm almost done with my server and client implementations. I hope to release them shortly for review. The release will probably be a standalone release of Roller (the Atom server) and my BlogClient UI (the Atom client).

If you see some opportunities for improvement in the protocol, please join the Atom Protocol mailing list and help out. Last call for spec changes in now slated for October. And for the Atom experts out there: what did I get wrong? Leave a comment.

Tags: app atom blogapps

del.icio.us links [June 03, 2005]

Tags: Links

Apache XML-RPC 2.0 is out

FeedPoster (the little blog app that posts my del.icio.us links via MetaWebog API) stopped working, complaining about unknown XML entity #8217. I didn't see any weird characters in my del.icio.us feed and the error was coming from Apache XML-RPC. I dropped in the brand new Apache XML-RPC 2.0 and problem solved! I love it when that happens. I didn't even have to recompile FeedPoster.

Tags: Blogging

del.icio.us links [June 01, 2005]

  • Sco Bro
    Scoble's brother is blogging for ComputerWorld
  • Yahoo blog guidelines
    Yahoo! Employee Blog Guidelines: The official version and my own advice (by Jeremy Zawodny)
  • Participation age
    Van Den Hoohen: "Our cause at Sun will be about eliminating the digital divide"
  • Pint lock
    Keep your Ben and Jerrys pint safe and secure
  • Feedmesh
    eWeek reports on Feedmesh, a "next-generation approach for distributing update notifications to the syndicated feeds"
  • Productive blogger
    Keith: "People often ask me how I’m able to keep my sites moving forward and updated with (hopefully) good content as often as I do."
Tags: Links

« Previous page of month (Jun 2005) | Main | Next month (Jul 2005) »