Levels of Roller Customization

Junkfood has a nice summary of the different levels of Roller customization and the documentation you need to do customization. He writes "Roller is poorly documented" and he's right. I haven't updated the user guide since 0.9.8 and the macro reference, which is auto-generated from tags in the Velocity code just doesn't cut it. I'm working on user and install docs now. Next up are the customization docs.

Here are Junkfood's levels of Roller customization:

1. Edit CSS stylesheets to customize styles.
2. Edit page templates to add/delete/move page elements and Roller macros.
3. Select different theme packages to get different base page templates and CSS stylesheets.
4. Create and use new macros.
5. Override existing Roller macros.
6. Change Roller configuration and installation.
7. Change Apache configuration.
8. Edit Roller source code.

Roller is nofollowing along

I added nofollow attributes to all links displayed from incoming comments, referrers, and trackbacks to Roller today. This fix and a couple of others will be included in a Roller 1.0.1 release sometime next week.


Raleigh paralyzed by 0.7 inches of snow

We were hit by an unexpected winter storm today. It dusted the area with less than an inch of snow and paralyzed the city. Hundreds of kids are still stuck at school and many will spend the night there. We've got a couple of extra kids staying with us too. Folks are trapped in gridlock all over the area right now at 11PM, still not able to get home from work even though they left halfway through the afternoon. Folks are complaining about the school system's poor planning, the county's inadequate response, and the horrible gridlock. How do I know? They're snowblogging it on the WRAL site.


And then there were 10

Right out of the blue comes RSS 1.1, a revision of RSS 1.0 produced by "independent group of RSS 1.0 users" not associated with the RSS-Dev working group. Nine Incompatible Versions of RSS + 1 = 10.


BlogClient 1.0 is available

BlogClient is an experimental blog client library designed to make it easy to write Java programs that blog. It supports both Atom and XML-RPC based protocols. I wrote BlogClient for the new Manning book Blogs, Wikis, and Feeds In Action, which is due for release this Spring. I'm not quite done but I am ready to get some feedback, so please download BlogClient, try it out in your own programs (or try the test GUI), and let me know how I can make it better.

How does it work?


The idea is to define a couple of simple interfaces for the objects we need to blog, such as a BlogClient, BlogSite, and BlogEntry. Then, provide implementations of those interfaces for the different protocols. The diagram below shows the interfaces and classes that make up the Blog Client API. Right now, I have two implementations of the interfaces. I have an AtomBlogClient, that is based on the Atom protocol and a MetaWeblogApiClient that is based on a combination of the MetaWeblog and Blogger APIs.

Diagram of Blog Client interfaces

Using Blog Client

Assuming that you have the BlogClient jars in your classpath, using the BlogClient to make a post to your blog via the MetaWeblog API works like this:
    BlogClient client = new MetaWeblogApiClient(
"http://jroller.com/xmlrpc", "scott", "tiger");
String[] sites = client.getUserBlogs();
BlogSite site = client.getBlogSite(sites[0]);

BlogEntry entry = site.createEntry();
BlogEntry.Content content = new BlogEntry.Content("Hello blog world!")
entry.setContent(content);
entry.save(true);
As you can see, some improvements could be made in API usability. Let me know how you'd like to see the API work. Oh, and those jars I mentioned:

rome-0.5.jar (modified to support link titles and rel="resource.post")
xmlrpc-1.2-b1.jar
commons-httpclient-2.0.2.jar
jdom.jar
commons-codec-1.1.jar
commons-lang-2.0.jar
commons-logging.jar

Where to learn more

You can find the complete BlogClient API interfaces on the Roller wiki and you can download version 1.0 of the client library here: blogclient-1.0.tar.gz. Also, included in the client library is a Swing-based GUI that supports creating, editing, and deleting blog entries as well as uploading images. Here 's a screenshot:
BlogClient GUI
And here are a couple more:
Login | Editor view | Entries view


Status of BlogClient

BlogClient is not complete because Atom itself is not complete. Work remains to bring BlogClient in-line with the current Atom protocol and format specifications. BlogClient been tested against the important blog servers -- by which I mean, of course, Blojsom, Pebble, Roller, and a couple of others. The table below shows the testing that has been done so far.


New
Entry
Edit
Entry
Delete
Entry
Get
Entries
New
Resource
Get
Categories
Set
Category
Roller 1.1 XML-RPC X
X
X
X
X
X
X
Roller 1.1 Atom X
X
X
X
X
**
**
Blojsom XML-RPC X
X
X
X?
X
X
fail
Blojsom Atom X
X
X
X
fail
**
**
Pebble XML-RPC X*
X*
fail
X
fail
X
X
Movable Type XML-RPC X
X
X
X*
fail
***
***
Das Blog XML-RPC








? Can't tell what expected behavior should be
* Operation succeeds but exception is thrown

** Atom does not support categories yet
*** Movable Type does not implement categories via MetaWeblog API

Plans for Blog Client

I'm releasing BlogClient as open source now to get feedback and I'll be improving it over the next month or so. Once the book goes to print, I'll try to find it a nice home (most likely as a Rome sub-project).

Enjoy!

Roller 1.0 is available

Finally! Roller 1.0 is available. There will be a slightly more formal announcement on the Roller blog a little later.

If you have problems during install, join the Roller mailing lists or join us in the #roller IRC chat room on Freenode. BTW, I'll be updating the User Guide for 1.0 next week.


Andi's next computer

She doesn't know it yet, but Andi's getting a Mac mini. The kids can have the old Windows box, but we'll have to disconnect it from the net so they can use it safely ;-)

Roller docs in Chinese and Japanese

Thanks to two very generous contributors, we now have translations of the Roller user guide, installation guide, and FAQ. Take a look:

Thanks Noniko and Nan Chang. I'm sure your efforts will be appreciated by many new Roller users.

By the way, the Installation Guide is in sync with Roller 1.0, but I still need to update the User Guide to document the new Roller 1.0 features.

Submitted Chapter 7: Publishing with XML-RPC based APIs

I just uploaded Blogs, Wikis, and Feeds In Action Chapter 7: Publishing With XML-RPC based APIs to Manning for review. After introducing the  reader to XML-RPC, the Blogger API, and the MetaWeblog API the chapter the leads the reader through the development of a complete blog client library using C# and Cook Computing XML-RPC.Net (there is also a Java and Apache XML-RPC based version of the library which will be available on the book's website). The blog client library interfaces look kinda the ones I proposed on the Roller wiki, but they've evolved a bit and I imagine they'lll evolve a bit more as I complete the Atom implementation.


Joint syndication-publishing session at JavaOne?

Pat Chanezon suggests that the developers of the newsfeed parsers, newsfeed generators, and blog API client libraries should come together, learn from each other, and -- at JavaOne -- educate the rest of the Java community about syndication and publication technologies. I'm included in his list of developers because of Roller and because of my recent work on Blogs, Wikis, and Feeds In Action which includes a blog client library which works with either Atom or XML-RPC based blog servers.

I think this is a great idea. As you might expect, each of us has our own point of view and different needs for our APIs. For example, some developer prefer a SAX like approach like Kevin Burton's FeedParser while others prefer a DOM like approach like Rome. And, some developers want a liberal parser while others prefer "draconian" XML error handling.

If we put together a joint session, we'll each get insight into each other's motivations and needs, we'll educate others, and we may just find our way towards a common set of interfaces -- perhaps even a JSR - for publishing and syndication. We've got to move quickly though; the JavaOne deadline is January 31.


6A + LJ = critical mass for Atom

Robert Sayre: "Six Apart's recent acquisition of LiveJournal means goodness for Atom format and protocol clients. Together with Blogger, this should push things to critical mass."
True.

Oh, and I forgot to mention Atom Protocol support (ROL-605) in my list of possible post-1.0 Roller features (it is almost complete now, BTW).

What happens after Roller 1.0?

Now that we're getting down to the last couple of bugs, it's time to think about what comes after Roller 1.0. I've been reviewing the bug database and making sure all the things folks have been asking for are in there as bugs, new features, or improvements. I've put together a list of the new feature areas that I personally think are most interesting with links into our JIRA issue tracker.

I'm posting this to get feedback from anybody and everybody willing to give it, but this is not a democratic process. My manager will ultimately determine what I work on (since the book eats all of my so called free time) and the other Roller developers will decide what they each want to work on. But we'd all like to hear what you, the Roller users and fans and victims (like Charles at Javablogs.com) have to say. You can respond here, on your blogs, in the issue tracking system (as votes or comments), or on the Roller mailing lists.

Group blogging

Group blogging is a long requested feature. We've always known that eventually, each user would have more than one blog and each blog could have more than one user (ROL-598). We've also discussed the idea of a simple workflow, where only designated "editors" in a group blog can post and regular authors can only save drafts (ROL-599).

Better front page / community area

Better front page and community features are also much requested. We need better ways to explore the blogs on a Roller server, better reports, and some way to browse users. Right now, you can only see who posted recently and the top 40 blogs for the day, based on hit counts (ROL-561). Rick Ross has suggested adding a language field for each weblog entry, so that visitors can switch between the all languages front page to view only French entries, only Spanish, or whatever they prefer (ROL-423). We've also discussed the idea of adding a community aggregator to the front page (ROL-596).

Category improvements

We need to complete support for hierarchical categories (ROL-511) and allow multiple categories per blog entry (ROL-58). Also, to better support new front page views and corporate blogging, we should consider having an option for a shared category tree (ROL-606) instead of allowing each user to have his/her own category scheme.

Better comment management

We've come a long way with comment spam protection in Roller 1.0, but have a ways to go. We have both CAPTCHA and simple math-question comment authenticators, but we could use some others. And we need better ways to manage, edit, and even bulk delete comments (ROL-563).

Better plugin support

We have plugins now -- such as the read-more, wiki, and others -- but they could do so much more. We have discussed a proposal to expand plugin support to allow plugins to add arbitrary metadata to blog entries and to allow plugins to hook into the weblog editor (ROL-601). Such a plugin would make it very easy to add support for Podcasting (ROL-597).

Better URLs and GUIDs

Tim Bray commented on Roller's "lame" perma-links, which need fixing (ROL-594). Also, Roller permalinks include the publication dates which can be changed so they don't really make good GUIDs -- we should fix that as well (ROL-595). We'd better fix those are the same time too, so that Charles at Javablogs.com doesn't have to endure multiple floods of new JRoller and blogs.sun.com entries.

Administrative Improvements

Changes are also needed to help support Roller administrators. For example, a Roller admin should have a super-user capability so that they can view, edit, and delete any blog entry or comment in the system. (ROL-600). To ease the pain of Roller installs, we need a real installer (we've discussed this on mailing list and IRC, but there is no JIRA issue). And poor old bug #9  which calls for a forgot-my-password page, has been ignored for far too long.

That's all I have for you tonight. Now it's your turn. What features do you think Roller needs most?

Bootchart for Solaris

That looks very cool.

The other analyst

Turns out, one of the "other analysts" that Michael Signer spoke of was a blogger named James Governor. In the comments to my previous post, James writes:

"actually it was me. i got a quick email from Michael and gave him a rapid response. its pretty harsh to accuse him of making the idea up if he attributed it to an analyst. Basically i felt that you are doing good work with Roller, and engaging with Sun customers, but that Sun itself has said basically not much about the future of the product at all. Michael had heard a sniff of an open source splash and is looking for ideas. i have not got the inside skinny, but i could easily imagine Sun "packaging" the Roller and open source news, or changing the license. or something. Either that or open sourcing some other JES componentry. Feel free to set the record straight. What are Sun's plans for Roller?"

James, I assumed that he was making things up because he was so far off base. How could he not know that Roller is already open source? Development is done on a public CVS server, issue tracking is public, and discussions happen on public mailing lists, blogs, and the Roller wiki.

James asks that I "set the record straight" and "what are Sun's plans for Roller?" I'm not going to discuss Sun's future product plans or announcements, but my personal plan is to make Roller the best possible platform for blogging, collaboration, and community building. If you want to know how that plan is going, watch me work.


News flash: Roller to be OPEN SOURCE!

Sun Readies Open Code, Michael Singer: "Other analysts say Sun could also open source its enterprise blogging application, named Roller. While the platform began its life as an open source project, before Sun hired its founder David Johnson, the company has not given the software the full on corporate treatment since he joined."
I don't believe those "other analysts" actually exist, this guy is just talking out of his, uh, never mind. I guess I need to set the record straight. First, Roller is and has always been open source. The version of Roller we use at Sun is the same one that you can download from the Roller project site at Java.Net in either source code or binary form. Second, I'm not interested in the "full on corporate treatment" -- I'm a married man.

SixApart to buy LiveJournal?

That is big news. I did not realize that LiveJournal.com, a blogging service with 5.5 million bloggers, is based on open source software. It will be interesting to see how this develops. Will SixApart work to foster the continued development of the open source LiveJournal software or will it instead focus harvesting paying users for it's TypePad service?

Shorts weather

It's cold in Denver, but we're enjoying some local warming here in Raleigh. It's so warm, in fact, that the kids all wore shorts today to school. I'm working out on the porch today.


Why your JavaOne talk was rejected

Casey Cameron explains the common pitfalls of JavaOne proposals. You have until January 31 to submit your proposal.

Back to work

I spent most of the break working on the book and now it's time to get back to Roller. Bugs have been trickling in from blogs.sun.com. Plus, Matt and Rick over at Javalobby upgraded JRoller to Roller 1.0RC2 last week and that shook loose a couple of bugs. So, now there's a short list of bugs that should be fixed before Roller 1.0 final. Thanks to everybody who has helped out by reporting bugs.

« Previous page | Main | Next page »