<?xml version="1.0" encoding='utf-8'?>
<!-- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
-->
<?xml-stylesheet type="text/xsl" href="https://rollerweblogger.org/roller-ui/styles/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom">
    <title type="html">Blogging Roller</title>
    <subtitle type="html">Dave Johnson on open web technologies, social software and software development</subtitle>
    <id>https://rollerweblogger.org/roller/feed/entries/atom</id>
        <link rel="self" type="application/atom+xml" href="https://rollerweblogger.org/roller/feed/entries/atom?tags=roller" />
    <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/" />
    <updated>2026-06-08T23:12:31+00:00</updated>
    <generator uri="http://roller.apache.org" version="6.1.5">Apache Roller</generator>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/building-an-open-source-j2ee</id>
        <title type="html">Building an Open Source J2EE Weblogger</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/building-an-open-source-j2ee"/>
        <published>2022-04-17T16:42:50+00:00</published>
        <updated>2023-03-16T22:55:41+00:00</updated> 
        <category term="General" label="General" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">I wrote this article for O&amp;#39;Reilly&amp;#39;s OnJava.com over twenty years ago and it was published on April 17, 2002. Roller would not become Apache Roller until about five years later. Publishing this article changed my life and set my career on a new trajectory. I can&amp;#39;t find it online anymore so to celebrate this anniversay, i&amp;#39;m going to publish it here on Roller.

As a Java developer, you should be aware of the tremendous wealth of open source development software that is available for your use -- even if you have no desire to release any of your own software as open source. In this article, I will introduce you to some of the most useful open source Java development tools by showing you how I used these tools to develop a complete database-driven Web application called Roller.</summary>
        <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;I wrote this article for O&amp;#39;Reilly&amp;#39;s OnJava.com over twenty years ago and it was published on April 17, 2002. Roller would not become Apache Roller until about five years later. Publishing this article changed my life and set my career on a new trajectory. I can&amp;#39;t find it online anymore so to celebrate this anniversay, i&amp;#39;m going to publish it here on Roller.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;

 
&lt;/p&gt;&lt;p&gt;As a Java developer, you should be aware of the tremendous
wealth of open source development software that is available for your use
-- even if you have no desire to release any of your own software as open
source. In this article, I will introduce you to some of the most useful
open source Java development tools by showing you how I used these tools
to develop a complete database-driven Web application called Roller.&lt;/p&gt;
 
&lt;p&gt;Roller fits into the relatively new category of software called webloggers: applications that make it
easy for you to maintain a weblog, also known as a &lt;i&gt;blog&lt;/i&gt; -- a public diary where you link to recent reading on the Web and comment on items of interest to you.&lt;/p&gt;
 
&lt;p&gt;The Roller Web application
allows you to maintain a Web site that consists of a weblog, an organized collection of favorite Web bookmarks,
and a collection of favorite news feeds. You can define Web pages
to display your weblog, bookmarks, and news feeds. By editing the HTML templates
that define these pages, you have almost total control over the layout and
appearance of these pages. Most importantly, you can do all of this without
leaving the Roller Web application -- no programming is required.&lt;/p&gt;
 
&lt;p&gt;I used over a dozen open source development tools to develop
Roller, the most useful of which are listed in Table 1; however,
this article focuses on just four tools: the XDoclet code generator,
the Castor persistence framework, the Struts Servlet/JSP
framework, and the Velocity code-generation engine. In this article
I will describe the Roller application, its architecture, and specifically
how I used XDoclet, Castor, Struts, and Velocity in its development.&lt;/p&gt;
 
&lt;p&gt;&lt;i&gt;Table 1: Open source tools used in Roller Development&lt;/i&gt;&lt;/p&gt;
 
&lt;table border=&quot;1&quot; bordercolor=&quot;#cccccc&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Developer&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;strong&gt;Type of License*&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Castor&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Persistence framework&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Exolab&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Similar to BSD license&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;HSQL&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Small but powerful Java database&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Thomas Meuller&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Similar to BSD license&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Ant&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;XML-driven Java build system&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Commons&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Collections, utilities&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Struts&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Servlet/JSP framework&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Tomcat&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Servlet/JSP Server&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Jakarta Velocity&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Template-driven code generator&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Netbeans&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Integrated Dev. Environment&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&amp;nbsp;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Sun Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Xerces&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;XML parser&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Apache Public License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;XDoclet&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Code generator&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Dreambean&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Similar to MIT License&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
 
&lt;p class=&quot;smalltext2&quot;&gt;* For more information on open source licenses see &lt;a href=&quot;http://www.opensource.org/&quot;&gt;&lt;i&gt;opensource.org&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;The Roller Application&lt;/h3&gt;

&lt;p&gt;Roller does not support
all of the features of commercial weblogging software (such as Userland&amp;#39;s
&lt;a href=&quot;http://onjava.com/onjava/2002/04/17/radio.userland.com&quot;&gt;Radio&lt;/a&gt; or Pyra Labs&amp;#39; &lt;a href=&quot;http://www.blogger.com/&quot;&gt;Blogger&lt;/a&gt; products), but Roller does support what I consider the essential weblogging features. With Roller you
can:&lt;/p&gt;
 
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Maintain a weblog, with user-defined categories.&lt;/b&gt; You can write new weblog entries and edit entries that have already been posted. You can define a set of weblog categories and can assign weblog entries to different categories. This allows you to maintain several different weblogs, each covering a different topic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Publish your weblog as an RSS news feed.&lt;/b&gt; Roller
makes your weblog available as a standard Rich Site Summary (RSS) news feed
so that readers can subscribe to and read your weblog without visiting your
Roller site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Maintain a collection of favorite bookmarks, organized
by bookmark folders.&lt;/b&gt; You can define new bookmark folders and can add,
delete, and edit the bookmarks within these folders. You can then display
these bookmarks on one or more of your Roller site&amp;#39;s pages. This allows you to do &lt;i&gt;blogrolling&lt;/i&gt; -- displaying links to your favorite weblogs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Maintain a collection of favorite RSS news feeds.&lt;/b&gt; This allows you
to display headlines with links to news stories from your favorite news
sources or weblogs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;b&gt;Define a set of Web pages to display your weblog, bookmarks, and news feeds.&lt;/b&gt; Pages are defined using HTML templates with embedded macros for each type of data. For example, there is a &lt;code&gt;$Bookmarks&lt;/code&gt; macro that will draw a portion of your bookmark collection on a Web page and a &lt;code&gt;$WeblogCalendar&lt;/code&gt; macro that will draw a calendar view of your past weblog entries. These templates allow you almost complete control over the layout and look-and-feel of your Web pages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
 
&lt;p&gt;There are two types of Roller users: readers and editors.  Readers are simply anonymous visitors to the Roller Web site. Editors have user accounts and must log in by providing a user name and password.  Editors have the ability to edit their weblog entries, bookmarks, newsfeeds, and page templates.&lt;/p&gt;


 
&lt;p&gt;Figure 1 illustrates the Roller application by showing the Roller Web page navigation tree. The boxes represent Web pages and the arrows represent links between pages. The gray pages are the public pages that any visitor may access, the yellow pages are the login pages, and the red pages are the pages that only editors can access.&lt;/p&gt;
 
&lt;table width=&quot;645&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 1: Roller Web Pages&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;h3&gt;Roller Architecture&lt;/h3&gt;
 
&lt;p&gt;Internally, Roller is divided into a presentation
tier and a business tier, as recommended in Sun&amp;#39;s J2EE Pattern Catalog. The presentation tier is responsible for Roller&amp;#39;s user interface,
and the business tier is responsible for Roller&amp;#39;s application logic and the 
persistence of application data. Figure 2 provides an overview of
the Roller architecture.&lt;/p&gt;
 
&lt;table width=&quot;391&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 2: Roller Architecture&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;The presentation tier is implemented using the Model-View-Controller (MVC) pattern and the Struts MVC framework.  The Model is an abstraction of the
application logic and application data and is represented by a set of interfaces 
defined in the &lt;code&gt;org.roller.model&lt;/code&gt; package.  The View is implemented using Servlets, JSP pages, and Velocity page templates.  The Controller is Struts, which is responsible for receiving incoming requests and dispatching them to the View.  The implementation of the presentation tier is further discussed in the sections on Struts and Velocity.&lt;/p&gt;
 
&lt;p&gt;The business tier implements the interfaces in the &lt;code&gt;org.roller.model&lt;/code&gt; package, using the Castor JDO persistence framework. The business tier exchanges data with the presentation tier in the form of simple, lightweight JavaBeans known as Value Objects. Value Objects are yet another of the Sun J2EE patterns. Each Value Object maps to a table in the Roller database.&lt;/p&gt;
 
&lt;p&gt;Figure 3 shows the Roller Value Objects, their properties, and the relationships between them. Each editor is represented by a User object.  Each User has a Website object, which represents the editor&amp;#39;s Web site and which has weblog entries, bookmark folders, newsfeeds, and page templates.  The Website object also specifies the default page template of the Web site and which page template is used for rendering a day of weblog entries.&lt;/p&gt;
 
&lt;table width=&quot;466&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 3: Roller Value Objects&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;


 
&lt;p&gt;The business tier uses Castor JDO to store and retrieve Value Objects to and from a JDBC-accessible database. Castor JDO is part of the larger Castor data-binding framework, which according to the Castor Web site is &amp;quot;the shortest path between Java objects, XML documents, SQL databases, and LDAP.&amp;quot;&lt;/p&gt;

&lt;p&gt;As a persistence framework, Castor JDO is similar to commercial object-relational mappers such as TopLink and Cocobase. Castor JDO fulfills a role similar to that of Sun&amp;#39;s Java Data Objects, but Castor JDO is not an implementation of Sun&amp;#39;s JDO specification (JSR-000012). Castor JDO allows you to define a mapping between Java classes and tables in a relational database. You can then issue queries using Castor&amp;#39;s own Object Query Language (OQL) and receive the results as collections of Java objects.&lt;/p&gt;
 



&lt;p&gt;Before you can use Castor JDO, you must provide a mapping file -- an XML file that maps each class to a database table and each class property to a field within a database table. Below is a portion of Roller&amp;#39;s mapping file.&lt;/p&gt;
 
&lt;pre&gt;&lt;code&gt;&amp;lt;mapping&amp;gt; 
&amp;lt;class name=org.roller.model.BookmarkData&amp;quot; identity=&amp;quot;id&amp;quot;
    access=&amp;quot;shared&amp;quot; key-generator=&amp;quot;UUID&amp;quot; auto-complete=&amp;quot;false&amp;quot;&amp;gt;
    &amp;lt;map-to table=&amp;quot;bookmark&amp;quot;/&amp;gt; 
    &amp;lt;cache-type type=&amp;quot;count-limited&amp;quot;/&amp;gt;
    &amp;lt;field name=&amp;quot;folderId&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;id&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;image&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;name&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;priority&amp;quot; type=&amp;quot;java.lang.Integer&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
    &amp;lt;field name=&amp;quot;url&amp;quot; type=&amp;quot;java.lang.String&amp;quot;&amp;gt;&amp;lt;/field&amp;gt;
&amp;lt;/class&amp;gt;
...
&amp;lt;/mapping&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once you provide Castor with a mapping file, retrieving a collection of objects from the database can be as simple
as the code snippet shown below:&lt;/p&gt;
 

&lt;pre&gt;&lt;code&gt;// Construct a new query and bind its parameters
String query = &amp;quot;SELECT p FROM BookmarkData p WHERE websiteId=$&amp;quot;;
OQLQuery oql = db.getOQLQuery( query );
oql.bind( websiteId );

// Retrieve results and print each one
QueryResults results = oql.execute();
while ( results.hasMore() ) {
   BookmarkData bookmark = (BookmarkData)results.next();
   System.out.println( bookmark.toString() );
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;XDoclet&lt;/h3&gt;
 
&lt;p&gt;XDoclet is a code generator that is implemented as a Javadoc extension, a &lt;i&gt;Doclet&lt;/i&gt;. To
use XDoclet, you place special Javadoc tags in your Java source code. Based
on these tags, XDoclet can generate additional Java code that supports your
classes, mapping files that map your classes to database tables, and deployment
descriptors that assist in deploying your classes.&lt;/p&gt;
 
&lt;p&gt;XDoclet started out
its life as EJBDoclet, a tool that allows you to implement an Enterprise JavaBean
by writing just one source code file. Now, the XDoclet product includes two
Doclets: EJBDoclet and WebDoclet. EJBDoclet is for generating EJB
classes, value objects, and database mappings. WebDoclet is for generating
all sorts of Servlet Web Application deployment descriptors, including &lt;code&gt;web.xml&lt;/code&gt; files, Tag Library Descriptors, and
Struts configuration files.&lt;/p&gt;
 
&lt;p&gt;The Roller build
process uses both EJBDoclet and WebDoclet, as shown in Figure 4. In
Step 1, EJBDoclet is used to process a set of abstract classes of
type &lt;code&gt;javax.ejb.EntityBean&lt;/code&gt; -- one
for each one of the Roller Value Objects. From these classes, EJBDoclet generates
a Castor mapping file, the Roller Value Object classes, and a set of corresponding
Struts form classes. In Step 2, WebDoclet is used to process a
source directory that contains JSP tags, Servlet classes, and Struts classes.
The output of the WebDoclet is the complete set of Roller Web Application
deployment descriptors.&lt;/p&gt;
 
&lt;table width=&quot;476&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 4: XDoclet and the Roller Build Process&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Below is a simple example bean that shows the EJBDoclet tags necessary to create a Value Object. The &lt;code&gt;@castor&lt;/code&gt; tags provide the information needed to generate the Castor mapping entries for the bean. The &lt;code&gt;@ejb&lt;/code&gt; tags provide the information needed to generate the Value Object and a complete EJB entity bean (which Roller does not use).&lt;/p&gt;
 
&lt;pre&gt;&lt;code&gt;/**
 * Represents a single URL in a user&amp;#39;s favorite web-bookmarks collection.
 * @ejb:bean name=&amp;quot;Bookmark&amp;quot; type=&amp;quot;CMP&amp;quot; jndi-name=&amp;quot;roller/Bookmark&amp;quot;
 * @ejb:data-object extends=&amp;quot;org.roller.model.ValueObject&amp;quot;
 * @struts:form 
 * @castor:class name=&amp;quot;bookmark&amp;quot; table=&amp;quot;bookmark&amp;quot; xml=&amp;quot;bookmark&amp;quot;
 *               id=&amp;quot;id&amp;quot; key-generator=&amp;quot;UUID&amp;quot;&lt;br&gt; */

public abstract class BookmarkBean implements EntityBean 
{

  /** @ejb:interface-method 
   *  @ejb:transaction type=&amp;quot;Required&amp;quot; */
   public abstract void setData(org.roller.model.BookmarkData dataHolder);

  /** @ejb:interface-method */
   public abstract org.roller.model.BookmarkData getData();

  /** @castor:field set-method=&amp;quot;setId&amp;quot;
   *  @castor:field-xml node=&amp;quot;attribute&amp;quot;
   *  @castor:field-sql name=&amp;quot;id&amp;quot; sql-dirty=&amp;quot;check&amp;quot; dirty=&amp;quot;true&amp;quot; 
   *  @ejb:interface-method 
   *  @ejb:pk-field
   *  @ejb:persistent-field */
    public abstract String getId();

  /** @ejb:pk-field
   *  @ejb:persistent-field */
    public abstract void setId( String value );
    ...
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Struts&lt;/h3&gt;
 
&lt;p&gt;The Roller presentation tier is implemented using Struts and Velocity. Struts is a Servlet application framework that is based on the MVC pattern. In a typical Struts application, the Model is a set of JavaBeans that hold the data to be presented in the View; the View is a set of JSP pages that render 
HTML; and the Controller is a Servlet and set of action classes that are
registered to handle incoming requests.&lt;/p&gt;
 
&lt;p&gt;Roller&amp;#39;s Edit-Bookmark form provides a nice, simple example of how Struts works. There are four parts to the Edit-Bookmark form implementation: the &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; page, the &lt;code&gt;BookmarkForm&lt;/code&gt; JavaBean class, the &lt;code&gt;BookmarkFormAction&lt;/code&gt; action handler, and some entries in Roller&amp;#39;s &lt;code&gt;struts-config.xml&lt;/code&gt; file that tie the first three items together. So, let&amp;#39;s introduce the players:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; page looks just
like an HTML page, except that it uses the Struts HTML form tags instead
of standard HTML form tags. The Struts HTML form tags know how to find
the &lt;code&gt;BookmarkForm&lt;/code&gt; JavaBean and how to use its properties to populate the form with data.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkForm&lt;/code&gt; class is a dumb JavaBean that just holds data -- it has the exact same properties as the Bookmark Value Object. As you may recall, the &lt;code&gt;BookmarkForm&lt;/code&gt; class and all of its sibling form classes are generated by XDoclet. In Struts, form classes must extend &lt;code&gt;org.apache.struts.action.ActionForm&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; is essentially an action handler. It is registered (in the &lt;code&gt;struts-config.xml&lt;/code&gt; file) to handle incoming requests that include the pattern &lt;code&gt;/bookmark.do&lt;/code&gt;. In Struts, action classes must extend &lt;code&gt;org.apache.struts.action.Action&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
 
&lt;p&gt;Figure 5 shows the sequence of events that occurs when a request for the Edit-Bookmark form comes into the system. Roller needs to respond to this request by creating an HTML form populated with data for the bookmark that is to be edited.&lt;/p&gt;

&lt;table width=&quot;634&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 5: Incoming request for Edit-Bookmark page&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Here are the steps in processing an incoming request for the Edit-Bookmark page:&lt;/p&gt;
 
&lt;ol&gt;&lt;li&gt;&lt;p&gt;The Struts Controller Servlet receives a request for the Edit-Bookmark action. The Controller uses the URI of the request to look up the  &lt;code&gt;FormAction&lt;/code&gt; that should handle the request.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The Struts Controller Servlet dispatches the request to the &lt;code&gt;BookmarkFormAction.edit()&lt;/code&gt; method. Knowing that the user has requested the Edit-Bookmark page, the &lt;code&gt;BookmarkFormAction&lt;/code&gt; looks for a request parameter that specifies the bookmark that is to be edited.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; calls the &lt;code&gt;BookmarkManager&lt;/code&gt; to retrieve the bookmark information that is to be edited.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; creates the &lt;code&gt;BookmarkForm&lt;/code&gt;
bean and adds that bean to the request&amp;#39;s attributes so that it can be accessed
by the JSP page.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; finally forwards the request to &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; so that the page may be rendered.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The Struts form tags on the &lt;code&gt;edit-bookmark.jsp&lt;/code&gt; page reads data from the &lt;code&gt;BookmarkForm&lt;/code&gt; bean and uses that data to populate the Edit-Bookmark form. After that, the HTML page is returned to the user&amp;#39;s browser for display.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Figure 6 shows
the sequence of events that occurs when the request that contains posted
data from the Edit-Bookmark page comes into the system. Roller needs to take
the incoming form data and use it to update the bookmark that is stored in
the data store managed by the business tier.&lt;/p&gt;

&lt;table width=&quot;608&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 6: Request with data posted from Edit-Bookmark page&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Here are the steps in processing a request with data from a posted Edit-Bookmark page:&lt;/p&gt;
 
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Struts Controller
Servlet receives a request for the &lt;code&gt;Update-Bookmark&lt;/code&gt; action. The Struts Controller
determines which action should handle the request and which form bean should
receive the data from the incoming form post.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Struts Controller Servlet populates the &lt;code&gt;BookmarkForm&lt;/code&gt; bean with data from the incoming request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Controller calls the &lt;code&gt;BookmarkFormAction&lt;/code&gt; and passes
in the form bean.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;BookmarkFormAction&lt;/code&gt; retrieves the data
from the &lt;code&gt;BookmarkForm&lt;/code&gt; bean.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The action calls upon the &lt;code&gt;BookmarkManager&lt;/code&gt; to store
the updated bookmark information.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
 
&lt;h3&gt;Velocity&lt;/h3&gt;
 
&lt;p&gt;While JSP pages work
well for the Roller editor pages, which rarely change, JSP does not work
so well for the user pages. Weblog authors are not programmers, and they
cannot be required to learn JSP and Java programming just to customize
their weblog and associated Web pages. Furthermore, allowing Roller users
to add new JSP pages, and thus new Java code, to the Roller application at
runtime is a security risk.&lt;/p&gt;
 
&lt;table width=&quot;622&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;p class=&quot;tiny&quot;&gt;&lt;br&gt;
Figure 7: Velocity-generated public page&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;The best solution to the user pages problem is Velocity. Velocity is a general purpose template-based code-generation engine. That may sound complicated, but from the user&amp;#39;s point of view, it is simple and easy-to-use. For example, the weblog page shown in Figure 7 is generated by a simple Velocity template. This template is shown below:&lt;/p&gt;
 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;
&amp;lt;html&amp;gt;
;&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;$macros.showWebsiteTitle()&amp;lt;/title&amp;gt;     
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;$macros.includePage(&amp;quot;_css&amp;quot;)&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
;&amp;lt;body&amp;gt; 
&amp;lt;table cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;15&amp;quot; &lt;br&gt;   border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; width=&amp;quot;95%&amp;quot;&amp;gt;   
   &amp;lt;tr&amp;gt;    
   &amp;lt;td width=&amp;quot;20%&amp;quot; valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;      
      $macros.showNavBar(true)&amp;lt;br&amp;gt;       
      $macros.showEditorNavBar(true)&amp;lt;br&amp;gt;
      $macros.showBookmarks(&amp;quot;Blogrolling&amp;quot;,true)&amp;lt;br&amp;gt;       
      $macros.showBookmarks(&amp;quot;News&amp;quot;,true)    
   &amp;lt;/td&amp;gt;    
   &amp;lt;td width=&amp;quot;60%&amp;quot; valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;                
      &amp;lt;h2&amp;gt;$macros.showWebsiteTitle()&amp;lt;/h2&amp;gt;                       
      $macros.showWeblogCategoryChooser()&amp;lt;br&amp;gt;       
      $macros.showWeblogEntries()    
   &amp;lt;/td&amp;gt;    
   &amp;lt;td valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot; width=&amp;quot;20%&amp;quot;&amp;gt;         
      $macros.showWeblogCalendar()&amp;lt;br&amp;gt;       
      $macros.showRSSBadge()    
   &amp;lt;/td&amp;gt; 
   &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;                  
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The items that start with &lt;code&gt;$&lt;/code&gt; are Velocity expressions, most of which result in calls to JSP tags that have been specially designed to work with Velocity. For example, the &lt;code&gt;$macros.showWeblogCategoryChooser()&lt;/code&gt; expression results in the generation of the navigation bar at the top of the page -- the one that reads &amp;quot;All | Technology | News | Entertainment.&amp;quot; The navigation bar is implemented in a custom JSP tag class named &lt;code&gt;org.roller.presentation.tags.NavigationTag&lt;/code&gt;, which is also used in the JSP-based Roller editor pages.&lt;/p&gt;
 


&lt;p&gt;Each user can define
any number of pages, and since these pages are simply HTML pages, they can
be customized using Front Page or any other HTML editor. The user just has
to put the Velocity expressions in the right place. Below is a list of some
of the Velocity expressions that are available for use in user-defined Roller
Web pages.&lt;/p&gt;
 
&lt;table border=&quot;1&quot; bordercolor=&quot;#cccccc&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;b&gt;Macro&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot; bgcolor=&quot;#e6e6e6&quot;&gt;
&lt;p&gt;&lt;b&gt;Emits HTML for:&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showNavBar()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Navigation bar, with a link to each one of the user&amp;#39;s user-defined pages&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showEditorNavBar()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Editor navigation
bar, with links to the edit-bookmarks,edit-newsfeeds, edit-weblog,
and edit-website pages &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showBookmarks()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Entire bookmark
collection in a multi-column table &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showNewsfeeds()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;Current headlines
and story descriptions for the user&amp;#39;s RSS newsfeeds 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showWeblogEntries()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;The most recent weblog entries &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;&lt;b&gt;$macros.showWeblogCalendar()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p&gt;A weblog calendar,
with a link for each day on which there is a weblog entry 
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
 
&lt;h3&gt;Conclusion&lt;/h3&gt;
 
&lt;p&gt;In this article,
I have described four open source Java development tools and how these tools
can be used together to develop a fairly sophisticated Web application. I
hope I have given you a good idea of the power and flexibility of these tools.&lt;/p&gt;
 
&lt;p&gt;Although I have not
mentioned any problems with the open source tools that I have discussed,
I did run into a number of bugs.  I was able to find work-arounds and fixes
for these bugs, but it was not always easy.  I had to spend some time browsing
mailing-lists, searching with Google, and, in one case, downloading the latest
source for a product and building it myself. Formal technical support is
not available for many open source tools, so keep in mind that you may have
to solve your own problems.&lt;/p&gt;
 
&lt;p&gt;In closing, I would like to thank the many developers and other contributors that made possible the open source Java development tools that I used in the development of Roller.  The tools are great and they just keep getting better.&lt;/p&gt;
 
&lt;h3&gt;Resources&lt;/h3&gt;
 
&lt;h4&gt;Weblogging&lt;/h4&gt;
 
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://newhome.weblogs.com/historyOfWeblogs&quot;&gt;The History of Weblogs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://radio.userland.com/&quot;&gt;Userland Radio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.blogger.com/&quot;&gt;Pyra Labs Blogger&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Castor&lt;/h4&gt;
 
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://castor.exolab.org/castor&quot;&gt;The Castor Project Homepage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Struts&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jakarta.apache.org/struts&quot;&gt; The Jakarta Struts Project&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.javaworld.com/javaworld/jw-12-2000/jw-1201-struts.html&quot;&gt;&amp;quot;Strut your stuff with JSP tags&amp;quot;&lt;/a&gt; (JavaWorld article)&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Velocity&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jakarta.apache.org/velocity&quot;&gt; The Jakarta Velocity Project Homepage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;XDoclet&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://xdoclet.sourceforge.net/&quot;&gt;The XDoclet Project Homepage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://onjava.com/pub/a/onjava/2002/01/30/xdoclet.html&quot;&gt; &amp;quot;Using XDoclet: Developing EJBs with Just the Bean Class&amp;quot;&lt;/a&gt; (onJava.com article)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://onjava.com/pub/a/onjava/2002/01/30/xdoclet.html&quot;&gt; &amp;quot;Deciding Whether EJB is Appropriate&amp;quot;&lt;/a&gt; (OnJava.com article)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Originally published here:&amp;nbsp;&lt;a href=&quot;http://onjava.com/onjava/2002/04/17/wblogosj2ee.html&quot; target=&quot;_blank&quot;&gt;http://onjava.com/onjava/2002/04/17/wblogosj2ee.html&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;
&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/blogging-about-roller-6-1</id>
        <title type="html">Blogging about Roller 6.1</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/blogging-about-roller-6-1"/>
        <published>2021-12-22T22:53:38+00:00</published>
        <updated>2023-03-26T21:38:44+00:00</updated> 
        <category term="Open Source" label="Open Source" />
        <category term="blogql" scheme="http://roller.apache.org/ns/tags/" />
        <category term="graphql" scheme="http://roller.apache.org/ns/tags/" />
        <category term="node" scheme="http://roller.apache.org/ns/tags/" />
        <category term="react" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I barely even update this blog, but I do update the software that powers it and I&amp;#39;m happy to still have the help of an awesome team of volunteers who pitch in when they want to and always when needed. Today we released Apache Roller 6.1.0, a release we had been talking about, but that was prompted by the Log4J vulnerability. See the &lt;a href=&quot;https://rollerweblogger.org/project/entry/apache-roller-6-1-0&quot; target=&quot;_blank&quot;&gt;project&amp;#39;s blog&lt;/a&gt; for details.&lt;/p&gt;&lt;p&gt;I&amp;#39;m not the one making the most code changes in Roller now days, but I do help with releases. I&amp;#39;ve been spending my spare cycles hacking on BlogQL, a Node/TypeScript-based blog server with a GraphQL API and a React front-end. It&amp;#39;s really more of an example app to help me understand those technologies, kind of like Roller was. Maybe I&amp;#39;ll write about it someday. That&amp;#39;s all for now.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/digitalocean-kubernetes</id>
        <title type="html">Powered by Digital Ocean Kubernetes</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/digitalocean-kubernetes"/>
        <published>2019-02-10T22:42:05+00:00</published>
        <updated>2019-02-10T22:43:12+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="asf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="digitalocean" scheme="http://roller.apache.org/ns/tags/" />
        <category term="kubernetes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">
&lt;p&gt;Just a note to say that I&amp;#39;ve switched this site over to &lt;a href=&quot;https://blog.digitalocean.com/digitalocean-releases-k8s-as-a-service/&quot;&gt;Digital Ocean Kubernetes&lt;/a&gt; service, which is in Limited Availability right now. &lt;/p&gt;


&lt;p&gt;Digital Ocean&amp;#39;s Kubernetes service is just as simple and well designed as the rest of Digital Ocean. I &lt;a href=&quot;https://rollerweblogger.org/roller/entry/powered-by-kubernetes&quot;&gt;mentioned before&lt;/a&gt; that I rolled my own Kubernetes cluster via Ansible and Kubeadm. Now I can delete all those config files and that&amp;#39;s a good thing. Plus, the price is right; I can get by with one $10/month node (1 CPU / 2 GB memory) and a $10/month load balancer.&lt;/p&gt;


&lt;p&gt;&lt;div style=&quot;margin:1em 0 1em 0;text-align:center;width:100%;&quot;&gt;&lt;img src=&quot;https://rollerweblogger.org/roller/mediaresource/a352bcf3-b7d9-4f2d-821d-a3ae42e0b06c&quot; width=&quot;80%&quot; halign=&quot;middle&quot;&gt;&lt;/div&gt;&lt;/p&gt;


&lt;p&gt;To get this site up and running I had to deploy four things to my cluster. I installed the &lt;a href=&quot;https://www.nginx.com/products/nginx/kubernetes-ingress-controller/&quot;&gt;NGINX Ingress Controller&lt;/a&gt;, &lt;a href=&quot;https://cert-manager.readthedocs.io/en/latest/&quot;&gt;Cert-Manager&lt;/a&gt; for automatic creation of Let&amp;#39;s Encrypt TLS certs, &lt;a href=&quot;https://www.postgresql.org&quot;&gt;PostgreSQL&lt;/a&gt; and my custom build of &lt;a href=&quot;https://roller.apache.org&quot;&gt;Apache Roller&lt;/a&gt;. All of that went pretty smoothly and I didn&amp;#39;t run into and problems that I could blame on Digital Ocean. &lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/powered-by-kubernetes</id>
        <title type="html">Powered by Kubernetes</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/powered-by-kubernetes"/>
        <published>2018-03-13T14:29:55+00:00</published>
        <updated>2018-03-14T21:38:53+00:00</updated> 
        <category term="Web Development" label="Web Development" />
        <category term="asf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="docker" scheme="http://roller.apache.org/ns/tags/" />
        <category term="kubernetes" scheme="http://roller.apache.org/ns/tags/" />
        <category term="postgres" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">
&lt;p&gt;&lt;img src=&quot;https://rollerweblogger.org/roller/mediaresource/0a80ebe2-257d-48f3-84ba-9aff47c8c3c8&quot; alt=&quot;kubernetes logo&quot; align=&quot;right&quot;&gt; Just a quick note to say that I ditched Docker Swarm and now this rarely updated blog is powered by &lt;a href=&quot;https://kubernetes.io&quot;&gt;Kubernetes&lt;/a&gt;. Total overkill, I know. Like Roller itself, I did it as a learning exercise. I hope to blog more about what I learned by doing this. For now, here&amp;#39;s a quick summary of what I&amp;#39;ve done so far.&lt;/p&gt;


&lt;p&gt;&lt;b&gt;Created a cluster&lt;/b&gt;&lt;/p&gt;


&lt;p&gt;I created a 2-node Kubernetes cluster on &lt;a href=&quot;https://www.digitalocean.com&quot;&gt;Digital Ocean&lt;/a&gt; using some hand-crafted &lt;a href=&quot;https://www.ansible.com&quot;&gt;Ansible&lt;/a&gt; scripts that call &lt;code&gt;apt-get&lt;/code&gt; to install and &lt;code&gt;kubeadm&lt;/code&gt; to start Kubernetes.  I considered using &lt;a href=&quot;https://www.digitalocean.com/community/projects/kubernetes-on-digital-ocean-typhoon&quot;&gt;Typhoon&lt;/a&gt; to create the cluster, but I really wanted to learn how to install Kubernetes &amp;quot;from scratch&amp;quot;.&lt;/p&gt;


&lt;p&gt;&lt;b&gt;Ran two Ingress Controllers&lt;/b&gt;&lt;/p&gt;


&lt;p&gt;To avoid using Digital Ocean&amp;#39;s &lt;a href=&quot;https://www.digitalocean.com/products/load-balancer/&quot;&gt;$20/month load balancer&lt;/a&gt; I&amp;#39;m running an Nginx Ingress controller on each node, and pinning containers to nodes using labels and nodeSelectors. I had to borrow &lt;a href=&quot;https://github.com/poseidon/typhoon/tree/master/addons/nginx-ingress/digital-ocean&quot;&gt;Nginx Controller setup files from the Typhoon project&lt;/a&gt; because I&amp;#39;m still kind of bewildered by Ingresses.&lt;/p&gt;


&lt;p&gt;&lt;b&gt;Deployed my containers&lt;/b&gt;&lt;/p&gt;


&lt;p&gt;Next, I wrote Kubernetes YAML files for deploying my containers: a private Docker Registry, PostgreSQL and my custom Roller image.  Getting the private registry working properly was the biggest challenge. I need private because I don&amp;#39;t want to make my custom Roller image public. Next, I&amp;#39;ll install Jenkins next for CI/CD of my custom Roller build via the &lt;a href=&quot;https://github.com/jenkinsci/kubernetes-plugin&quot;&gt;Jenkins Kubernetes plugin&lt;/a&gt;. &lt;/p&gt;


&lt;p&gt;Let me know if there are any aspects of this that you&amp;#39;d like to see covered in a blog entry, or suggestions for running the cluster without two Ingress Controllers. I&amp;#39;ve already got a post cooking about installing a TLS secured Docker Registry on Kubernetes.&lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/new_bootstrap_based_theme</id>
        <title type="html">New Bootstrap based theme</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/new_bootstrap_based_theme"/>
        <published>2014-01-19T21:10:01+00:00</published>
        <updated>2014-01-20T05:13:25+00:00</updated> 
        <category term="Blogging" label="Blogging" />
        <category term="bootstrap" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I&amp;#39;m not motivated to write new blog entries but for some reason I was motivated to update my blog&amp;#39;s theme. This time I decided to go with &lt;a href=&quot;http://getbootstrap.com/&quot;&gt;Twitter Bootstrap&lt;/a&gt; + &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;. It&amp;#39;s responsive, so to speak. What do you think? I think it takes a little too long for the banner image to load.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/latest_links48</id>
        <title type="html">Latest Links - August 1, 2011</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/latest_links48"/>
        <published>2011-07-31T15:00:01+00:00</published>
        <updated>2011-08-02T15:28:34+00:00</updated> 
        <category term="Links" label="Links" />
        <category term="identity" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wayin" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;Latest links, favorites and photos shared elsewhere:&lt;/p&gt;
    &lt;p style=&quot;margin-left:2em;text-indent:-1em;&quot;&gt;
            &lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/0f4c0070-b26e-4bf9-91bf-1ed071fbc9d5&quot;&gt;
            &lt;a href=&quot;http://twitter.com/snoopdave/statuses/98069278300975104&quot;&gt;snoopdave&lt;/a&gt; RT @mraible: Happy 9th Blogiversary to &lt;a href=&quot;http://raibledesigns.com&quot;&gt;http://raibledesigns.com&lt;/a&gt;: 3045 entries, 13,269 comments. Thanks for keeping all my memories Apach ... &lt;span&gt;12:35:12 PM 01 Aug 2011&lt;/span&gt;
            &lt;/p&gt;

            &lt;p style=&quot;margin-left:2em;text-indent:-1em;&quot;&gt;
            &lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/1b58fb4b-7ebe-4a5e-8b84-983cc356c325&quot;&gt;
            &lt;a href=&quot;http://twitter.com/mgile/statuses/98037589663154176&quot;&gt;mgile&lt;/a&gt; First day at the new, new office. Obligatory empty startup office pic:  &lt;a href=&quot;http://t.co/7oVDQjk&quot;&gt;http://t.co/7oVDQjk&lt;/a&gt; &lt;span&gt;10:29:17 AM 01 Aug 2011&lt;/span&gt;
            &lt;/p&gt;

            &lt;p style=&quot;margin-left:2em;text-indent:-1em;&quot;&gt;
            &lt;img src=&quot;http://rollerweblogger.org/roller/mediaresource/7473d1b1-7fde-4520-aad2-437e11a222a3&quot;&gt;
            &lt;a href=&quot;http://twitter.com/snoopdave/statuses/98025192042934272&quot;&gt;snoopdave&lt;/a&gt; Shared: Million Persona March on Google, Labor Day? &lt;a href=&quot;http://bit.ly/qmAR5y&quot;&gt;http://bit.ly/qmAR5y&lt;/a&gt; #fb &lt;span&gt;09:40:01 AM 01 Aug 2011&lt;/span&gt;
            &lt;/p&gt;

            </content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/welcome_new_roller_committer_shelan</id>
        <title type="html">Welcome new Apache Roller committer Shelan Perera</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/welcome_new_roller_committer_shelan"/>
        <published>2011-05-23T17:53:33+00:00</published>
        <updated>2011-05-25T21:34:35+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="asf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="mobile" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;i&gt;(cross-posted from the Roller project blog)&lt;/i&gt;
&lt;/p&gt;&lt;p&gt;
&lt;p&gt;Here&amp;#39;s some happy news. A new committer has joined the Apache Roller project. Shelan Perera has been helping out on the mailing lists, submitting fixes and recently won a Google Summer of Code (GSOC) project to add mobile blogging features to Roller. He was nominated for committer-ship and voted in on May 5, 2011.
&lt;/p&gt;
&lt;p&gt;Shelan&amp;#39;s GSOC project is to add mobile theming capabilities to Roller. You can find the &lt;a class=&quot;external&quot; href=&quot;http://socghop.appspot.com/gsoc/proposal/review/google/gsoc2011/shelan/1&quot;&gt;Mobile Theming for Roller&lt;/a&gt; proposal on the GSOC website. Shelan is seeking feedback on requirements and design for the project, and keeping the community in the loop by running a blog to journal his progress: &lt;a class=&quot;external&quot; href=&quot;http://rollermobile.blogspot.com&quot;&gt;Apache Roller Mobile Platform&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Welcome Shelan!&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/oauth_everywhere_continued</id>
        <title type="html">OAuth everywhere (continued)</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/oauth_everywhere_continued"/>
        <published>2009-03-26T02:00:00+00:00</published>
        <updated>2014-11-28T20:50:03+00:00</updated> 
        <category term="Social Software" label="Social Software" />
        <category term="oauth" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensocial" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="socialsite" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">In my earlier &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/oauth_everywhere&quot;&gt;OAuth everywhere&lt;/a&gt; post I explained at a high level &amp;quot;how I got a Roller Gadget working, one that uses OAuth to call Roller and enables Roller to use OAuth to call back to the social network.&amp;quot; I ended with some unanswered questions. In those post I&amp;#39;ll answer those questions with source code, screenshots and more.
</summary>
        <content type="html">&lt;p&gt;In my earlier &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/oauth_everywhere&quot;&gt;OAuth everywhere&lt;/a&gt; post I explained at a high level &amp;quot;how I got a Roller Gadget working, one that uses OAuth to call Roller and enables Roller to use OAuth to call back to the social network.&amp;quot; I ended with some unanswered questions:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;How do I add my gadget to SocialSite so users can install and use it?
&lt;/li&gt;&lt;li&gt;How does SocialSite get the Consumer Key and Secret needed for calling Roller?
&lt;/li&gt;&lt;li&gt;How does Roller get the Consumer Key and Secret needed for calling SocialSite?
&lt;/li&gt;&lt;li&gt;How does the user authorize Roller&amp;#39;s access to his Profile information in SocialSite?
&lt;/li&gt;&lt;li&gt;When is OAuth support coming to the Roller trunk and can you use it for AtomPub?
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;i&gt;(that last question was answered in &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/oauth_for_roller&quot;&gt;OAuth for AtomPub in Roller&lt;/a&gt; earlier this week)&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;Now that I&amp;#39;ve wrapped up my work on &lt;a class=&quot;external&quot; href=&quot;http://oauth.net&quot;&gt;OAuth&lt;/a&gt; in &lt;a class=&quot;external&quot; href=&quot;http://socialsite.dev.java.net&quot;&gt;SocialSite&lt;/a&gt; and OAuth in &lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org&quot;&gt;Roller&lt;/a&gt;, I&amp;#39;m prepared to answer those questions. I&amp;#39;ll do it by reviewing how I developed my Social Roller gadget and set it up to work on &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org&quot;&gt;http://rollerweblogger.org&lt;/a&gt;, my Roller and SocialSite powered site. 
&lt;/p&gt;
&lt;p&gt;Along the way, I&amp;#39;ll provide links to source code and screen-shots. I&amp;#39;ll be referring to the diagram from first post, so I&amp;#39;ll reproduce it here for the sake of convenience:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/oauth-roller-socialsite.jpg&quot; alt=&quot;http://rollerweblogger.org/roller/resource/oauth-roller-socialsite.jpg&quot;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;NOTE: this post is based on the current code in the &lt;a class=&quot;external&quot; href=&quot;https://socialsite.dev.java.net/source/browse/socialsite&quot;&gt;Project SocialSite SVN trunk&lt;/a&gt;. The things described below WILL NOT work with the SocialSite M3 release.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step1DevelopAnOpenSocialApplication&quot;&gt;Step 1 - Develop an OpenSocial Application#&lt;/h4&gt;
&lt;p&gt;My first step was to develop an OpenSocial application for Roller. This application is made up of the three parts listed below. These are the parts show in light-blue in the diagram above.
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;An OpenSocial Gadget for Roller&lt;/b&gt; that a user can install into his SocialSite profile. An OpenSocial Gadget is defined by Gadget Specification, an XML file with the metadata, HTML, CSS and JavaScript that render the gadget&amp;#39;s user interface. I developed my gadget as a Roller page template and you can view it&amp;#39;s source code here: &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/project/page/viewsource?pageName=gadget.xml&quot;&gt;gadget.xml&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;A gadget setup page&lt;/b&gt;, a new JSP page in Roller that is called by the gadget to enable and disable Activity posting. This JSP page is protected by OAuth and returns data in JSON format to the gadget. View the source code here &lt;a class=&quot;external&quot; href=&quot;http://code.google.com/p/opensosuite/source/browse/trunk/components/apache_roller/copyover/setupgadget.jsp&quot;&gt;setupgadget.jsp&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;b&gt;A Roller Task&lt;/b&gt; that runs periodically, checks to see if any gadget users have created new blog posts and if they have, posts a Activity to SocialSite for each, by calling the OAuth-protected OpenSocial REST API provided by SocialSite. View the source code here &lt;a class=&quot;external&quot; href=&quot;http://code.google.com/p/opensosuite/source/browse/trunk/components/apache_roller/src/org/rollerweblogger/SocialRollerTask.java&quot;&gt;SocialRollerTask.java&lt;/a&gt;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step2RegisterGadgetWithSocialSite&quot;&gt;Step 2 - Register gadget with SocialSite#&lt;/h4&gt;
&lt;p&gt;&lt;i&gt;This section answers the question &amp;quot;How do I add my gadget to SocialSite so users can install and use it?&amp;quot;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;My next step was to register my application. Remember that SocialSite is intended to add social features to existing web sites and has very little user interface of its own, it&amp;#39;s mostly made up of gadgets. So, the way you register a new application on a SocialSite-enabled site is to sign-up as a user of that site, go to your profile page, install the SocialSite Developer Gadget and then use that gadget to register your new application. 
&lt;/p&gt;
&lt;p&gt;You can see a screenshot of the SocialSite Developer Gadget below. In the simplest case, you just enter the URL of your Gadget Specification, but I needed to take a couple of extra steps because my gadget needs to call an OAuth protected resource in Roller.
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-register.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-register.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;This next paragraph answers the question &amp;quot;How does SocialSite get the Consumer Key and Secret needed for calling Roller?&amp;quot;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;I need my gadget to call back to the Roller setupgadget.jsp page (that&amp;#39;s part &lt;b&gt;#4&lt;/b&gt; in the diagram above) to enable/disable activity posting. Because that page is protected by OAuth, I had to go into Roller and get Roller&amp;#39;s site-wide OAuth key and secret (see also: &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/oauth_for_roller&quot;&gt;OAuth for Roller&lt;/a&gt;) and then enter those it the Developer Gadget. SocialSite stores them and will use them to take care of the OAuth authentication process on each gadget call to Roller (in part &lt;b&gt;#2&lt;/b&gt; above).
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step3ApproveGadgetRegistration&quot;&gt;Step 3 - Approve gadget registration#&lt;/h4&gt;
&lt;p&gt;Since I&amp;#39;m the administrator of my site, I approved my own gadget registration. I did this by logging into my site&amp;#39;s SocialSite admin console, went to the Gadget Management tab, saw my new gadget registration request and approved it. Here&amp;#39;s a screenshot of the Gadget Registration approval page:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-approval.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-approval.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step4AddOAuthConsumerKeyAndSecretToRoller&quot;&gt;Step 4 - Add OAuth consumer key and secret to Roller#&lt;/h4&gt;
&lt;p&gt;&lt;i&gt;This next paragraph answers the question &amp;quot;How does Roller get the Consumer Key and Secret needed for calling SocialSite?&amp;quot;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;After your gadget is approved for use on a SocialSite enabled site, you&amp;#39;ll find the consumer key and secret that Roller needs to call the OpenSocial REST API (that&amp;#39;s step &lt;b&gt;#6&lt;/b&gt; above) in the SocialSite Developer Gadget. Here&amp;#39;s what you see in the Developer Gadget once you gadget is approved.
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-approved.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-approved.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;My OpenSocial Roller application needs to know about those keys, so I put them in its configuration. For simplicity&amp;#39;s sake, I&amp;#39;m not going to go into the details of this step.
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step5InstallTheSocialRollerGadget&quot;&gt;Step 5 - install the Social Roller gadget#&lt;/h4&gt;
&lt;p&gt;Finally, the OpenSocial Roller application is ready for use. To install it, I went to my profile page, clicked the Gadget Directory button, browsed through the gadgets until I found it and then clicked the install button. Here&amp;#39;s a screenshot of the SocialSite Gadget Directory, which you can access from the SocialSite Profile Gadget:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-gadgetdir.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-gadgetdir.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;The Social Roller Gadget is the last item in the list, the &amp;quot;Simple Roller Gadget.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step6AuthorizeAndEnableTheSocialRollerGadget&quot;&gt;Step 6 - authorize and enable the Social Roller gadget#&lt;/h4&gt;
&lt;p&gt;After I installed the gadget, it appeared in my Profile page as you can see in the screenshot below.  It&amp;#39;s installed and ready to run, but it&amp;#39;s not yet authorized to access my Roller account so it tells me &amp;quot;Before you can use this gadget, you must authorize it to access your Roller account.&amp;quot;
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-unauthorized.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-unauthorized.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Finally, I can answer the question &amp;quot;How does the user authorize Roller&amp;#39;s access to his Profile information in SocialSite?&amp;quot;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;I want the gadget to access my Roller account so I clicked on the authorize link and saw this page popup, directly from Roller, which asks me to take the final step to authorize access.
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-authorization.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-authorization.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;After I clicked the authorize button, page disappeared and the Social Roller gadget redisplayed itself as you can see in the screenshot below. The gadget is now ready to access my Roller account and is asking me to enable activity posting:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-disabled.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-disabled.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;I clicked the enable posting button and saw this:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-enabled.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-enabled.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;And now, whenever I post a new blog entry, an activity is added to my profile. Here&amp;#39;s proof in the form of a screenshot:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-activities.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-activities.png&quot;&gt;
&lt;/p&gt;
&lt;h4 id=&quot;section-dummyPage-Conclusion&quot;&gt;Conclusion#&lt;/h4&gt;
&lt;p&gt;I&amp;#39;ve done the work to enable OAuth in SocialSite and Roller, so now it&amp;#39;s possible to develop OpenSocial gadgets for Roller that will work with SocialSite and other OpenSocial containers. The Roller side of this work is now available in Apache Roller (in the SVN trunk), but the future of the SocialSite is still uncertain. 
&lt;/p&gt;
&lt;p&gt;I think SocialSite still has great potential. That&amp;#39;s why I&amp;#39;m spending so much time promoting it and moving it forward, but I can&amp;#39;t do it all myself. I&amp;#39;m joining IBM next week and as far as I know, SocialSite will NOT be part of my job. I&amp;#39;ll wrap up this series of posts tomorrow with a post discussing the future of Project SocialSite.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/socialsite_on_rollerwebloggerorg</id>
        <title type="html">Socialsite on rollerweblogger.org</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/socialsite_on_rollerwebloggerorg"/>
        <published>2009-03-25T23:59:59+00:00</published>
        <updated>2014-11-28T20:52:52+00:00</updated> 
        <category term="Social Software" label="Social Software" />
        <category term="jspwiki" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensocial" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="socialsite" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;The value of &lt;a class=&quot;external&quot; href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt; is that it allows you to add social networking features, including the ability to run &lt;a class=&quot;external&quot; href=&quot;http://opensocial.org&quot;&gt;OpenSocial&lt;/a&gt; gadgets, to existing web sites and have those sites all using the same &amp;quot;social graph&amp;quot; of data about people and relationships. To demonstrate this, I&amp;#39;ve deployed SocialSite to my site, &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org&quot;&gt;http://rollerweblogger.org&lt;/a&gt;, and finally implemented those things I described in my August 2008 &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/social_roller&quot;&gt;Social Roller&lt;/a&gt; post.&lt;br&gt; &lt;br&gt;
&lt;/p&gt;&lt;p&gt;My site includes a blog and a wiki, &lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org&quot;&gt;Roller&lt;/a&gt; and &lt;a class=&quot;external&quot; href=&quot;http://jspwiki.org&quot;&gt;JSPWiki&lt;/a&gt;, so it&amp;#39;s a pretty good candidate for demonstrating how SocialSite. It&amp;#39;s not perfect because it&amp;#39;s got only a very small number of users, less than a dozen and because it&amp;#39;s private; you have to login to see the social features. It&amp;#39;ll have to do.
 
In this post, I&amp;#39;ll explain the steps you have to take to add SocialSite to a multi-application web site and I&amp;#39;ll illustrate the steps with examples and screenshots from my work on this site.&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;The value of &lt;a class=&quot;external&quot; href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt; is that it allows you to add social networking features, including the ability to run &lt;a class=&quot;external&quot; href=&quot;http://opensocial.org&quot;&gt;OpenSocial&lt;/a&gt; gadgets, to existing web sites and have those sites all using the same &amp;quot;social graph&amp;quot; of data about people and relationships. To demonstrate this, I&amp;#39;ve deployed SocialSite to my site, &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org&quot;&gt;http://rollerweblogger.org&lt;/a&gt;, and finally implemented those things I described in my August 2008 &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/social_roller&quot;&gt;Social Roller&lt;/a&gt; post (except for protected entries).&lt;br&gt; &lt;br&gt;
&lt;/p&gt;&lt;p&gt;My site includes a blog and a wiki, &lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org&quot;&gt;Roller&lt;/a&gt; and &lt;a class=&quot;external&quot; href=&quot;http://jspwiki.org&quot;&gt;JSPWiki&lt;/a&gt;, so it&amp;#39;s a pretty good candidate for demonstrating how SocialSite can work with multiple existing webapps. It&amp;#39;s not perfect because it&amp;#39;s got a very small number of users, less than a dozen, and because it&amp;#39;s private; you have to login to see the social features, but it&amp;#39;ll have to do.
 
In this post, I&amp;#39;ll explain the steps you have to take to add SocialSite to a multi-application web site and I&amp;#39;ll illustrate the steps with examples, links to source code and screenshots from my work on this site.
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/threefish.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/threefish.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;NOTE: this post is based on the current code in the &lt;a class=&quot;external&quot; href=&quot;https://socialsite.dev.java.net/source/browse/socialsite&quot;&gt;Project SocialSite SVN trunk&lt;/a&gt;. The things described below may or may not work with the SocialSite M3 release.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step1SetupAnAuthenticationDelegatePageInYourSite&quot;&gt;Step 1 - Setup an Authentication Delegate page in your site#&lt;/h4&gt;
&lt;p&gt;SocialSite doesn&amp;#39;t do any user management, it leaves that to the sites that it enables. In my case, I&amp;#39;ve got Roller and JSPWiki setup to authenticate against the same database table of usernames and passwords, and I&amp;#39;ve got Tomcat&amp;#39;s simple SSO setup so that logins work across both webapps. I want SocialSite to depend on Roller to verify that users are logged. SocialSite&amp;#39;s Authentication Delegation mechanism makes this possible. 
&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s how SocialSite Authentication works. You add a delegate page, a dynamic page (JSP, PHP, etc.) to the webapp that is to do the authentication, configure SocialSite to trust that webapp and then at runtime, SocialSite will call that delegate page to verify user logins. In my case, I want Roller to do the authentication so I added a delegate page to Roller called &lt;a class=&quot;external&quot; href=&quot;http://code.google.com/p/opensosuite/source/browse/trunk/components/apache_roller/copyover/socialsite_context.jsp&quot;&gt;socialsite_context.jsp&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;When a SocialSite gadget running inside of Roller needs to call back to the OpenSocial API provided by SocialSite it will pass Roller&amp;#39;s login cookie with the call, an assertion about who the logged-in user is and the URL of Roller&amp;#39;s authentication delegate page (socialsite_context.jsp). SocialSite will then call that delegate, pass the cookie and verify that assertion. SocialSite expects the delegate to return some JSON data like this:
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Example: JSON data from socialsite_context.jsp&lt;/i&gt;
&lt;/p&gt;
&lt;pre&gt;

  {
    &amp;#39;timeout&amp;#39;: 30,
    &amp;#39;assertions&amp;#39;: {
      &amp;#39;containerId&amp;#39;: &amp;#39;rollerweblogger.org&amp;#39;,
        &amp;#39;viewer&amp;#39;: davej,
        &amp;#39;owner&amp;#39;: davej,
      }
    }
  }

&lt;/pre&gt;
&lt;p&gt;In the above example, Roller is confirming the assertion that the user is &amp;#39;davej&amp;#39; and the owner of the page containing the gadget is also &amp;#39;davej&amp;#39;. Knowing this, SocialSite can decide what data the caller is allowed to access.
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step2ConfigureSocialSiteToTrustYourAuthenticationDelegatePage&quot;&gt;Step 2 - configure SocialSite to trust your Authentication Delegate page#&lt;/h4&gt;
&lt;p&gt;SocialSite won&amp;#39;t trust just any authentication delegate page. Once you have created your page, you must configure SocialSite to trust it. You do this by editing a SocialSite configuration file in WEB-INF/classes/socialsite_context.xml. Here&amp;#39;s an example that sets up a trust relationship with Roller&amp;#39;s socialsite_context.jsp page:
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Example: socialsite_context.xml in SocialSite&lt;/i&gt;
&lt;/p&gt;
&lt;pre&gt;

  &amp;lt;rules&amp;gt;
    &amp;lt;rule&amp;gt;
      &amp;lt;sources&amp;gt;
        &amp;lt;indirect&amp;gt;*&amp;lt;/indirect&amp;gt;
      &amp;lt;/sources&amp;gt;
      &amp;lt;assertions&amp;gt;
        &amp;lt;reject&amp;gt;*&amp;lt;/reject&amp;gt;
      &amp;lt;/assertions&amp;gt;
    &amp;lt;/rule&amp;gt;

    &amp;lt;rule&amp;gt;
      &amp;lt;sources&amp;gt;
        &amp;lt;direct&amp;gt;http://rollerwebogger.org/socialsite_context.jsp&amp;lt;/direct&amp;gt;
        &amp;lt;direct&amp;gt;*&amp;lt;/direct&amp;gt;
      &amp;lt;/sources&amp;gt;
      &amp;lt;assertions&amp;gt;
        &amp;lt;accept&amp;gt;*&amp;lt;/accept&amp;gt;
      &amp;lt;/assertions&amp;gt;
    &amp;lt;/rule&amp;gt;
  &amp;lt;/rules&amp;gt;

&lt;/pre&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step3AddSocialSiteContextDeclarationsToTargetPages&quot;&gt;Step 3 - Add SocialSite Context declarations to target pages#&lt;/h4&gt;
&lt;p&gt;Once the Authentication Delegate page is in place, you&amp;#39;re just about ready to start adding gadgets to the pages of your web applications. Each page that includes gadgets will need to include a couple of SocialSite scripts and information about the SocialSite context, i.e. the URL of the authentication delegate. Here&amp;#39;s an example of the the JavaScript that I include include in Roller pages that use SocialSite gadgets:
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Example: SocialSite context declaration for a Roller page template&lt;/i&gt;
&lt;/p&gt;
&lt;pre&gt;

  #set($viewer = $utils.getAuthenticatedUser().getUserName())
  #set($userName = $model.getRequestParameter(&amp;quot;user&amp;quot;))
  #if ($userName)
    #set($owner = $userName)
  #else
    #set($owner = $viewer)
  #end
  #set($contextURL = &amp;quot;${url.absoluteSite}/socialsite_context.jsp&amp;quot;)
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; 
    src=&amp;quot;${url.absoluteSite}/social/js/consumer.jsp&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
    socialsite.setContext({
      &amp;#39;delegate&amp;#39;: {
        &amp;#39;method&amp;#39;: &amp;#39;GET&amp;#39;,
        &amp;#39;url&amp;#39;: &amp;#39;$contextURL?owner=$owner&amp;amp;amp;viewer=$viewer&amp;#39;,
        &amp;#39;headers&amp;#39;: {
          &amp;#39;cookie&amp;#39;: document.cookie
        }
      }
    });
  &amp;lt;/script&amp;gt;

&lt;/pre&gt;
&lt;p&gt;The above code pulls in some JavaScript from SocialSite and sets up the context necessary for gadgets to call back to SocialSite. It uses Roller&amp;#39;s $utils.getAuthenticatedUser() to determine the logged-in user and a request parameter &amp;#39;user&amp;#39; to determine who owns the page.
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step4DecideWhereToPutKeySocialNetworkingPages&quot;&gt;Step 4 - decide where to put key social networking pages#&lt;/h4&gt;
&lt;p&gt;Finally, you&amp;#39;re ready to add gadgets to the pages of your site. First, you&amp;#39;ll want to do some planning. You&amp;#39;ll want to decide where to place some key pages. The SocialSite widgets are designed to support a &lt;i&gt;dashboard&lt;/i&gt; page, which allows users to browse people, make friends and receive messages. They also support both personal and group &lt;i&gt;profile&lt;/i&gt; pages.
&lt;/p&gt;
&lt;p&gt;For rollerweblogger.org, I decided to use one Roller page template &amp;#39;people&amp;#39; to act as both the Dashboard and Profile page. If you access the page with a URL that specifies a user, then you&amp;#39;ll see the profile page of that user. If you access the page with without specifying a user, then you&amp;#39;ll see your dashboard page. Here&amp;#39;s what I put in the socialsite.properties file to set all this up:
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Example: SocialSite URL properties from socialsite.properties&lt;/i&gt;
&lt;/p&gt;
&lt;pre&gt;

  # People page shows your Dashboard
  socialsite.dashboard.url=\
    http://rollerweblogger.org/project/page/people

  # People page with user parameter shows profile of specified user
  socialsite.profile.url=\
    http://rollerweblogger.org/project/page/people?user=${userid}

  # Group profile page will be hosted in JSPWiki
  socialsite.group.url=\
    http://rollerweblogger.org/wiki/Wiki.psh?page=${groupid}

&lt;/pre&gt;
&lt;p&gt;NOTE that in the above configuration, I&amp;#39;m using my wiki to host group profile pages; more about that later. 
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Step5AddOpenSocalGadgets&quot;&gt;Step 5 - add OpenSocal Gadgets#&lt;/h4&gt;
&lt;p&gt;Once you&amp;#39;ve decided how to set things up, you&amp;#39;re ready to start adding gadgets. Assuming that you&amp;#39;ve added the SocialSite context declarations in your pages, you can add a gagdet with a single line of JavaScript. For example, to add the SocialSite &lt;b&gt;Owner Activities&lt;/b&gt; Gadget you&amp;#39;d add this code:
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Example: add gadget code from a Roller page template&lt;/i&gt;
&lt;/p&gt;
&lt;pre&gt;

  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
    socialsite.addGadget({&amp;#39;spec&amp;#39;:&amp;#39;local_gadgets/owner_activities.xml&amp;#39;, 
      &amp;#39;removable&amp;#39;:false, &amp;#39;height&amp;#39;:75, &amp;#39;includeChrome&amp;#39;:true});
  &amp;lt;/script&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;

&lt;/pre&gt;
&lt;p&gt;NOTE that you can add any OpenSocial gadget by specifying its URL in the spec argument of the socialsite.addGadget() call. 
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Screenshots&quot;&gt;Screenshots#&lt;/h4&gt;
&lt;p&gt;It&amp;#39;s screenshot time. I&amp;#39;ve included small thumbnail images belo, which you can click for a closer view. If you&amp;#39;re on my site, photos will display in a light-box. First up, is the new People page that you will see if you are logged into rollerweblogger.org. It uses the SocialSite Profile, Face, Status, Friends and Activities gadgets.
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-profile.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-profile.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;Next up, the dashboard page. It uses just one gadget, the SocialSite Dashboard, which provides a bunch of different features and was introduced in the &lt;a class=&quot;external&quot; href=&quot;http://blogs.sun.com/socialsite/entry/a_little_more_about_socialsite&quot;&gt;SocialSite M2&lt;/a&gt; release. In one tab you can see the most recent activities of your friends or any of your groups:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-dashboard1.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-dashboard1.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;In the second tab of the Dashboard Gadget, you can search and filter the people in the social network. You can filter by friends or by your groups. You can also create new relationships and accept or ignore relationship requests from this view.
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-dashboard2.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-dashboard2.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;In the last tab of the Dashboard Gadget, you can view and manage incoming messages and friendships requests:
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-dashboard3.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-dashboard3.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;Want to see the source code? You can see the page template code for my People page in the Roller page templates &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/project/page/viewsource?pageName=peopleSidebar&quot;&gt;people&lt;/a&gt;, which contains the SocialSite context declaration, and &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/project/page/viewsource?pageName=people&quot;&gt;people&lt;/a&gt;, which contains the main body of the page. 
&lt;/p&gt;
&lt;p&gt;Finally, let&amp;#39;s take a look at an example group profile page, which is located in my wiki. 
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/socialroller-wiki.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/socialroller-wiki.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;Hmm... I never explained how I got SocialSite gadgets working in JSPWiki. Better fix that now.
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-ANoteAboutSocialSiteInJSPWiki&quot;&gt;A note about SocialSite in JSPWiki#&lt;/h4&gt;
&lt;p&gt;To get SocialSite gadgets working in JSPWiki, I had to to a little extra work. In my instance of JSPWiki, I don&amp;#39;t allow HTML so I couldn&amp;#39;t just drop in the JavaScript code necessary to declare the SocialSite context and make the socialsite.addGadget() calls. What I had to do was to create a couple of JSPWiki plugins, one for the SocialSite context and one for the add-gadget call. Here the raw wiki text of the Atomic Group page pictured above:
&lt;/p&gt;
&lt;pre&gt;

  !!!SocialSite Group: Atomic

  [{SocialSiteGroupContext group=&amp;#39;atomic&amp;#39; 
    consumerUri=&amp;#39;http://rollerweblogger.org/social/js/consumer.jsp&amp;#39; 
    authUri=&amp;#39;http://rollerweblogger.org/socialsite_context.jsp&amp;#39;}]

  Demonstrates the SocialSite Group gadgets, running in JSPWiki.

  !!Group Profile Gadget

  Below is the Group Profile for group __Atomic__. You can use the buttons at 
  the bottom to edit the group&amp;#39;s profile properties, to send a message to 
  the group and to add OpenSocial gadgets to this page.

  [{SocialSiteAddGadget spec=&amp;#39;/local_gadgets/group_profile.xml&amp;#39; removable=&amp;#39;true&amp;#39;}]

  !!Installed Gadgets

  This is where the group&amp;#39;s OpenSocial gadgets will appear.
  [{SocialSiteAddGadget collection=&amp;#39;GROUP&amp;#39;}]

&lt;/pre&gt;
&lt;p&gt;And here are links to the source code for the two plugins: &lt;a class=&quot;external&quot; href=&quot;http://code.google.com/p/opensosuite/source/browse/trunk/components/apache_jspwiki/src/org/rollerweblogger/plugins/SocialSiteGroupContext.java&quot;&gt;SocialSiteContext.java&lt;/a&gt; and &lt;a class=&quot;external&quot; href=&quot;http://code.google.com/p/opensosuite/source/browse/trunk/components/apache_jspwiki/src/org/rollerweblogger/plugins/SocialSiteAddGadget.java&quot;&gt;SocialSiteAddGadget.java&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;h4 id=&quot;section-dummyPage-Conclusion&quot;&gt;Conclusion#&lt;/h4&gt;
&lt;p&gt;That should give you a pretty good idea of what you can do with SocialSite. Don&amp;#39;t be dissappointed if the gadgets don&amp;#39;t look like exactly what you want. The important thing is that &lt;b&gt;SocialSite gives you a centralized social graph service and the infrastructure needed to add social networking features to your sites via OpenSocial gadgets&lt;/b&gt;. If you don&amp;#39;t like the gadgets that come with SocialSite, you easily write your own using the standard OpenSocial APIs and the SocialSite extensions to those APIs.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/oauth_for_rome_propono</id>
        <title type="html">OAuth for ROME Propono</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/oauth_for_rome_propono"/>
        <published>2009-03-24T12:00:00+00:00</published>
        <updated>2009-03-24T19:37:49+00:00</updated> 
        <category term="Feeds" label="Feeds" />
        <category term="atompub" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oauth" scheme="http://roller.apache.org/ns/tags/" />
        <category term="propono" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rome" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;https://rome.dev.java.net/&quot;&gt;
&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/rome-logo.png&amp;quot; 
alt=&amp;quot;ROME logo&amp;quot; align=&amp;quot;right&amp;quot; vspace=&amp;quot;10px&amp;quot; hspace=&amp;quot;10px&amp;quot; /&amp;gt;
&lt;/a&gt;

&lt;p&gt;Yesterday I wrote about &lt;a href=&quot;http://rollerweblogger.org/roller/entry/oauth_for_roller&quot;&gt;OAuth support in the upcoming Roller 5.0 release&lt;/a&gt;. Today I&amp;#39;m following up with a post about &lt;a href=&quot;http://oauth.net&quot;&gt;OAuth&lt;/a&gt; support in &lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/RomePropono&quot;&gt;ROME Propono&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As you may remember, ROME Propono is a subproject of &lt;a href=&quot;http://rome.dev.java.net&quot;&gt;ROME&lt;/a&gt;, the Java-based RSS/Atom feed library. ROME Propono includes an &lt;a href=&quot;http://www.atomenabled.org/developers/protocol/&quot;&gt;AtomPub&lt;/a&gt; server library and an AtomPub client. I added OAuth support to the AtomPub client and in this post, I&amp;#39;ll show how you can use it to post to the Roller 5.0-dev (i.e. the snapshot build that I made available yesterday).&lt;/p&gt;

&lt;h4&gt;ROME 1.0 and coming soon: ROME Propono 1.0&lt;/h4&gt;

&lt;p&gt;In case you haven&amp;#39;t already heard, thanks to the recent hard work of Nick Lothian, &lt;a href=&quot;http://nicklothian.com/blog/2009/03/11/rome-10-released&quot;&gt;ROME 1.0 is now available&lt;/a&gt;. You can find downloads at &lt;a href=&quot;http://rome.dev.java.net&quot;&gt;rome.dev.java.net&lt;/a&gt; and a list of changes in the &lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/RomeChangesLog&quot;&gt;Change Log&lt;/a&gt; there. To celebrate this momentous event, I&amp;#39;m planning on releasing ROME Propono 1.0 as well, and in preparation, I&amp;#39;ve made a release candidate available. The new Propono includes ROME 1.0 and support for OAuth. You can get it via the links below:&lt;/p&gt;

&lt;p style=&quot;margin-left:2em;&quot;&gt;
    &lt;a href=&quot;https://rome.dev.java.net/source/browse/*checkout*/rome/www/dist/rome-propono-1.0RC1.tar.gz&quot;&gt;rome-propono-1.0RC1.tar.gz&lt;/a&gt; (2.0 mb)
&lt;/p&gt;

&lt;p style=&quot;margin-left:2em;&quot;&gt;
    &lt;a href=&quot;https://rome.dev.java.net/source/browse/*checkout*/rome/www/dist/rome-propono-1.0RC1.zip&quot;&gt;rome-propono-1.0RC1.zip&lt;/a&gt; (3 mb)
&lt;/p&gt;


&lt;h4&gt;Posting to Roller via AtomPub and OAuth&lt;/h4&gt;

&lt;p&gt;To use the Propono AtomPub client, you place the Propono jars in your Java VM classpath and then call the &lt;code&gt;AtomClientFactory&lt;/code&gt; to get started, as described in the &lt;a href=&quot;https://rome.dev.java.net/apidocs/subprojects/propono/1.0/com/sun/syndication/propono/atom/client/package-summary.html&quot;&gt;ROME Propono 1.0 Javadocs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Below is a &lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt; example that shows how to post a blog entry to Roller via AtomPub and OAuth. You can get the consumer key, secret and URLs you need to call your instance of Roller from the OAuth Credentials page in the Roller admin interface.&lt;/p&gt;

&lt;pre&gt;

  import com.sun.syndication.propono.atom.client.*
  import com.sun.syndication.feed.atom.*

  def authStrategy = new OAuthStrategy(
    &amp;quot;roller&amp;quot;,                               // username
    &amp;quot;55132608a2fb68816bcd3d1caeafc933&amp;quot;,     // consumer key
    &amp;quot;bb420783-fdea-4270-ab83-36445c18c307&amp;quot;, // consumer secret
    &amp;quot;HMAC-SHA1&amp;quot;,                            // key type
    &amp;quot;http://blogs.example.com/roller-services/oauth/requestToken&amp;quot;,
    &amp;quot;http://blogs.example.com/roller-services/oauth/authorize&amp;quot;,
    &amp;quot;http://blogs.example.com/roller-services/oauth/accessToken&amp;quot;)

  // get the AtomPub service
  def appService = AtomClientFactory.getAtomService(
    &amp;quot;http://blogs.example.com/roller-services/app&amp;quot;, authStrategy)

  // find workspace of my blog
  def blog = appService.findWorkspace(&amp;quot;Blogging Roller&amp;quot;)

  // find collecton that will accept entries
  def entries = blog.findCollection(null, &amp;quot;application/atom+xml;type=entry&amp;quot;)

  // create and post an entry
  def entry = entries.createEntry()
  entry.title = &amp;quot;TestPost&amp;quot;
  def content = new Content()
  content.setValue(&amp;quot;This is a test post. w00t!&amp;quot;)
  entry.setContent([content])
  entries.addEntry(entry)

&lt;/pre&gt;


&lt;p&gt;If you have questions or feedback about ROME Propono 1.0 RC1, please post them to the &lt;a href=&quot;https://rome.dev.java.net/servlets/ProjectMailingListList&quot;&gt;ROME dev mail list&lt;/a&gt; and I&amp;#39;ll do my best to respond there.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/oauth_for_roller</id>
        <title type="html">OAuth for AtomPub in Roller</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/oauth_for_roller"/>
        <published>2009-03-23T12:00:00+00:00</published>
        <updated>2009-03-23T19:04:11+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="atompub" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oauth" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://roller.apache.org&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/images/rollerbadge.png&quot; alt=&quot;powered by Roller badge&quot; align=&quot;right&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; border=&quot;0&quot;&gt;
&lt;/a&gt;

&lt;p&gt;Over the past month or so I&amp;#39;ve been adding &lt;a href=&quot;http://oauth.net&quot;&gt;OAuth&lt;/a&gt; support to just about every open source project that I can commit to. I added OAuth support to &lt;a href=&quot;http://roller.apache.org&quot;&gt;Roller&lt;/a&gt; so that you can now use OAuth to protect Roller&amp;#39;s &lt;a href=&quot;http://www.atomenabled.org/developers/protocol/&quot;&gt;AtomPub&lt;/a&gt; server and other things. I also added OAuth support to &lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/RomePropono&quot;&gt;ROME Propono&lt;/a&gt;&amp;#39;s AtomPub client so you can now use Propono to post to Roller (more about that later). Here&amp;#39;s a quick overview of how OAuth in Roller works.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;NOTE that this post applies to Roller 5.0, which has not yet been officially released.&lt;/i&gt;&lt;/p&gt;


&lt;h4&gt;Setting up OAuth for AtomPub in Roller&lt;/h4&gt;

&lt;p&gt;If you want to use OAuth with AtomPub on your Roller site, go to the Server Admin page and find the Web Services section, enable AtomPub and specify &amp;#39;oauth&amp;#39; as the authentication mechanism, like so:&lt;/p&gt;

&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/rol_oauthconfig.jpg&amp;quot; 
    alt=&amp;quot;OAuth config in Roller 5.0-dev&amp;quot; /&amp;gt; 


&lt;h4&gt;Getting your OAuth key, secret and URLs&lt;/h4&gt;

&lt;p&gt;Once you&amp;#39;ve done the setup, you&amp;#39;ll find an OAuth Credentials link on the Roller Main Menu page, which will lead you a page like the one below showing your OAuth consumer key &amp;amp; secret and, if you are a site admin user, the site-wide key &amp;amp; secret. Currently, there&amp;#39;s only one set of site-wide credentials; I plan to fix that.&lt;/p&gt; 

&lt;img src=&quot;http://rollerweblogger.org/roller/resource/rol_oauthkeys.jpg&quot; alt=&quot;OAuth keys page in Roller 5.0-dev&quot;&gt;

&lt;p&gt;Of course, those aren&amp;#39;t my real keys. You&amp;#39;ll want to keep your OAuth keys secret as they can enable anybody to access your Roller account via AtomPub.&lt;/p&gt;


&lt;h4&gt;Want to try it yourself?&lt;/h4&gt;

&lt;p&gt;I mentioned that Roller 5.0 has not yet been released and that&amp;#39;s true. There&amp;#39;s still a lot of work to be done on 5.0, but that doesn&amp;#39;t mean you can&amp;#39;t get your hands on the code and binaries now. To make it easy, I&amp;#39;ve made an &lt;b&gt;unofficial snapshot&lt;/b&gt; version of Roller 5.0-dev available for testing purposes only. It&amp;#39;s what I&amp;#39;m running on my site. You can get it here in two flavors:&lt;/p&gt;

&lt;p style=&quot;margin-left:2em;&quot;&gt;
    &lt;a href=&quot;http://people.apache.org/~snoopdave/snapshots/apache-roller-5.0-dev-20090321-SNAPSHPOT.tar.gz&quot;&gt;apache-roller-5.0-dev-20090321-SNAPSHPOT.tar.gz&lt;/a&gt; (31 mb)
&lt;/p&gt;

&lt;p style=&quot;margin-left:2em;&quot;&gt;
    &lt;a href=&quot;http://people.apache.org/~snoopdave/snapshots/apache-roller-5.0-dev-20090321-SNAPSHPOT.zip&quot;&gt;apache-roller-5.0-dev-20090321-SNAPSHPOT.zip&lt;/a&gt; (31 mb)
&lt;/p&gt;

&lt;p&gt;The instructions in the old &lt;a href=&quot;http://roller.apache.org/download.cgi#roller40&quot;&gt;Roller 4.0 installation guide&lt;/a&gt; should work fine, so follow them to install and configure the 5.0-dev SNAPSHOT. Please send questions and feedback to either the &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Roller+Mailing+Lists&quot;&gt;Roller dev mail list&lt;/a&gt; and I&amp;#39;ll do my best to respond there.&lt;/p&gt;

&lt;p&gt;You&amp;#39;ll also need an OAuth capable AtomPub client. More on that topic tomorrow...&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/apachecon_eu_2009</id>
        <title type="html">ApacheCon EU 2009!</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/apachecon_eu_2009"/>
        <published>2009-03-22T14:19:16+00:00</published>
        <updated>2014-11-28T20:55:34+00:00</updated> 
        <category term="Social Software" label="Social Software" />
        <category term="apachecon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jspwiki" scheme="http://roller.apache.org/ns/tags/" />
        <category term="oauth" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensocial" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/snoopdave/481130847/&quot; title=&quot;View of art center (foreground) and Movenpick Hotel by snoopdave, on Flickr&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/202/481130847_87a45d2910_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; vpsace=&quot;10&quot; hspace=&quot;10&quot; alt=&quot;View of art center (foreground) and Movenpick Hotel&quot; align=&quot;right&quot;&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;I&amp;#39;m off to &lt;a href=&quot;http://www.eu.apachecon.com/c/aceu2009&quot;&gt;ApacheCon EU 2009&amp;gt; tomorrow in Amsterdam to  speak on the topic of &lt;a href=&quot;http://www.eu.apachecon.com/c/aceu2009/sessions/184&quot;&gt;Shindig for Blogs and Wikis&lt;/a&gt;. I&amp;#39;m really looking forward to catching up with my Apache friends and colleagues. That&amp;#39;s the conference venue in the photo on the right, the Movenpick hotel (in the background behind the music hall). &lt;/a&gt;&lt;/p&gt;


&lt;p&gt;I&amp;#39;m staying a couple of extra days, so I hope to have time for bicycling around the city as I&amp;#39;ve done in the past (see also: Flickr photo sets for &lt;a href=&quot;http://www.flickr.com/photos/snoopdave/sets/72157604420939847/&quot;&gt;2007&lt;/a&gt; and &lt;a href=&quot;http://www.flickr.com/photos/snoopdave/sets/72157604616476673&quot;&gt;2008&lt;/a&gt;). Unfortunately, the weather forecast stinks. There&amp;#39;s a 60% chance of rain every day that I&amp;#39;m in town. Oh well; guess I&amp;#39;ll have plenty of time for blogging. &lt;/p&gt;


&lt;p&gt;Speaking of blogging.This week, I&amp;#39;ll be posting some blog entries to highlight the work that I&amp;#39;ve done in preparation for my talk. Here&amp;#39;s what I plan to cover:&lt;/p&gt;


&lt;p&gt;* Monday: OAuth for AtomPub in Roller&lt;br&gt;
* Tuesday: OAuth for ROME Propono&lt;br&gt;
* Wednesday: SocialSite on rollerweblogger.org&lt;br&gt;
* Thursday: OAuth everywhere (continued)&lt;br&gt;
* Friday: the future of Project SocialSite&lt;/p&gt;


&lt;p&gt;If you plan to attend my talk, at 4:30PM on Friday March 27, then you should follow along. Pay special attention to the SocialSite on rollerweblogger.org and OAuth everywhere (continued) posts, which will include detailed background info. I&amp;#39;m looking forward to seeing you there.&lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/preparing_for_shindig_talk</id>
        <title type="html">Preparing for my Shindig talk next month</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/preparing_for_shindig_talk"/>
        <published>2009-02-06T12:58:34+00:00</published>
        <updated>2009-03-09T16:06:16+00:00</updated> 
        <category term="Social Software" label="Social Software" />
        <category term="jspwiki" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensocial" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/234x60-aceu2008-speaker.gif&amp;quot; 
alt=&amp;quot;ApacheCon speaker badge&amp;quot; align=&amp;quot;right&amp;quot; hspace=&amp;quot;8&amp;quot; vspace=&amp;quot;5&amp;quot; /&amp;gt;

&lt;p&gt;The day before the layoff axe fell at Sun, I blogged about my upcoming &lt;a href=&quot;http://rollerweblogger.org/roller/entry/talking_shindig_at_apacheconeu&quot;&gt;Shindig for Blogs and Wikis&lt;/a&gt; talk at &lt;a href=&quot;http://www.eu.apachecon.com/c/aceu2009/&quot;&gt;ApacheCon EU&lt;/a&gt; in March. Since then, I&amp;#39;ve been working almost non-stop on finding a new gig and have had little time to work on my presentation. That&amp;#39;s not good, because I have fairly ambitious plans for this talk. I&amp;#39;ll explain.&lt;/p&gt;

&lt;p&gt;I want to be able to show how to add social features including &lt;a href=&quot;http://opensocial.org&quot;&gt;OpenSocial&lt;/a&gt; support to a blog server and a wiki server by using plain old &lt;a href=&quot;http://incubator.apache.org/shindig/&quot;&gt;Shindig&lt;/a&gt; and then &lt;a href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt;. I&amp;#39;m targeting &lt;a href=&quot;http://rollerweblogger.org&quot;&gt;Roller&lt;/a&gt; and &lt;a href=&quot;http://jspwiki.org&quot;&gt;JSPWiki&lt;/a&gt; because they&amp;#39;re the blog and wiki source code bases that I know best right now and they&amp;#39;re both Apache efforts, but the same techniques should work with other systems like Wordpress or Drupal. If I have time I might be able to demo those too (but I wouldn&amp;#39;t count on it).&lt;/p&gt;

&lt;p&gt;I&amp;#39;m not sure how far I can go with plain old Shindig because, like most blog and wiki servers, neither Roller nor JSPWiki has detailed profile data, social relationships or activities. I should be able to get Google Gadgets working via Shindig, but OpenSocial Gadgets will take a lot more thought and effort.&lt;/p&gt;

&lt;p&gt;I&amp;#39;m much more confident in the Project SocialSite approach. SocialSite provides for storage of detailed profile information, groups, activities and app data as well as the necessary UI. I&amp;#39;m confident enough that I&amp;#39;m going to deploy it on this site. So, stay tuned. I hope to have something to show by the end of next week.&lt;/p&gt;

&lt;p&gt;Oh, and by the way. Today is the last day to register for ApacheCon EU with the early-bird discount. So sign-up already!&lt;/p&gt;

&lt;div style=&quot;margin:0 0 1em 2em;&quot;&gt;
&lt;h4&gt;ApacheCon Europe 2009 &lt;a href=&quot;http://www.eu.apachecon.com&quot;&gt;(link)&lt;/a&gt;&lt;/h4&gt;
23-27 March 2009 | MÃ¶venpick Hotel, Amsterdam&lt;br&gt;
&lt;a href=&quot;http://www.eu.apachecon.com/c/aceu2009/articles/prices&quot;&gt;Pricing&lt;/a&gt; 
(register before Feb 6 for discount)
&lt;/div&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/leaving_sun</id>
        <title type="html">Leaving Sun...</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/leaving_sun"/>
        <published>2009-01-22T17:23:11+00:00</published>
        <updated>2009-01-23T01:37:17+00:00</updated> 
        <category term="Sun" label="Sun" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="socialsite" scheme="http://roller.apache.org/ns/tags/" />
        <category term="sun" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://www.flickr.com/photos/snoopdave/259291256/&quot; title=&quot;Silver Lake sunset by snoopdave, on Flickr&quot;&gt;&lt;img align=&quot;right&quot; src=&quot;http://farm1.static.flickr.com/99/259291256_1a770a4422_m.jpg&quot; hspace=&quot;5px&quot; vspace=&quot;5px&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Silver Lake sunset&quot;&gt;&lt;/a&gt;

&lt;p&gt;It was over four years ago when I &lt;a href=&quot;http://rollerweblogger.org/roller/entry/blogs_sun_com&quot;&gt;discovered&lt;/a&gt; that Sun was using my software, Roller, to power &lt;a href=&quot;http://blogs.sun.com&quot;&gt;blogs.sun.com&lt;/a&gt;. I was &lt;a href=&quot;http://rollerweblogger.org/roller/entry/full_time_roller&quot;&gt;thrilled&lt;/a&gt; to go to work for the company back in 2004 and what an awesome cast of characters I&amp;#39;ve gotten to work with over the years. I really enjoyed the folks I worked with on the blogs.sun.com team, the open source folks and most recently, the Glassfish team -- some of the most talented and nicest folks I&amp;#39;ve ever worked with. It&amp;#39;s been a great four and a half years but all good things must come to an end and today is the day.&lt;/p&gt;

&lt;p&gt;I&amp;#39;ve been swept up in the latest round of Sun layoffs. Sun has decided to disinvest in Project SocialSite and as of today &lt;b&gt;I&amp;#39;m free and available for employment&lt;/b&gt;. Though I do feel some urgency due to the bad economy, Sun&amp;#39;s layoff package is pretty good and so I have some time to figure out what comes next and no need to make hasty decisions. Whatever I end up doing, I&amp;#39;ll be blogging it here.&lt;/p&gt;

&lt;p&gt;Oh, and about &lt;a href=&quot;http://roller.apache.org/&quot;&gt;Apache Roller&lt;/a&gt; and &lt;a href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt;? I&amp;#39;m not ready to give up just yet. I&amp;#39;ll be using a little of my time to do some mentoring and to move forward plans for Roller 5.0 this spring. And I see real value in the Project SocialSite &amp;quot;social-enable existing web sites&amp;quot; concept and I&amp;#39;m considering ways to move that forward as well, with or without Sun. I&amp;#39;m still giving my talk &lt;a href=&quot;http://rollerweblogger.org/roller/entry/talking_shindig_at_apacheconeu&quot;&gt;Shindig for Blogs &amp;amp; Wikis&lt;/a&gt; in March 2009 and, actually, I&amp;#39;m pretty happy I have some time right now to focus on those demos and slides.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_4_0_1_bug</id>
        <title type="html">Roller 4.0.1 bug fix release available</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_4_0_1_bug"/>
        <published>2009-01-14T11:30:00+00:00</published>
        <updated>2009-01-14T19:43:04+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&amp;quot; 
   alt=&amp;quot;roller logo&amp;quot; align=&amp;quot;right&amp;quot; /&amp;gt;

&lt;p&gt;Here&amp;#39;s the announcement from the Roller project blog:&lt;/p&gt;

&lt;blockquote&gt;
It&amp;#39;s been over a year since our last Roller release and we&amp;#39;ve fixed a couple dozen bugs in that time including an XSS vulnerability reported recently by &lt;a class=&quot;external&quot; href=&quot;http://secunia.com/advisories/31523&quot;&gt;Secunia.com&lt;/a&gt;. Now those fixes are available as an official Roller release, 4.0.1
&lt;ul&gt;
&lt;li&gt; Bugs fixed are listed in the &lt;a class=&quot;external&quot; href=&quot;https://issues.apache.org/roller/secure/ReleaseNote.jspa?projectId=10000&amp;amp;styleName=Html&amp;amp;version=10290&quot;&gt;JIRA Issue Tracker Release Notes&lt;/a&gt; page.
&lt;/li&gt;
&lt;li&gt; Updated files and docs are available via the &lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org/downloads.html&quot;&gt;Apache download mirror network&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a bug-fix only release with no new features.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wondering what&amp;#39;s next for Roller? I&amp;#39;m going to push for a Roller 5.0 release in Spring 2009, as we&amp;#39;ve got good stuff in the trunk and more on the way, but I&amp;#39;m going to need your help to get there. More about that later.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/openid_support_in_roller</id>
        <title type="html">OpenID support in Roller</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/openid_support_in_roller"/>
        <published>2008-09-03T07:46:50+00:00</published>
        <updated>2008-09-03T15:08:02+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="google" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="openid" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;Thanks to one hard working student and the &lt;a href=&quot;http://code.google.com/soc/2008/&quot;&gt;Google Summer of Code&lt;/a&gt;, we now have a patch for &lt;a href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt; support in Roller and its ready to commit to trunk. Here&amp;#39;s a teaser screenshot:&lt;/p&gt;

&amp;lt;img src=&amp;quot;http://cwiki.apache.org/confluence/download/attachments/86221/login-hybrid.png&amp;quot; 
title=&amp;quot;OpenID login screen&amp;quot; /&amp;gt;

&lt;p&gt;If you want to know more, the &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Proposal+OpenID+Support&quot;&gt;proposal for OpenID support&lt;/a&gt; is on our wiki and the patch is attached to &lt;a href=&quot;https://issues.apache.org/roller/browse/ROL-1733&quot;&gt;issue ROL-1733&lt;/a&gt; in our bug tracking system.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_at_open_source_days</id>
        <title type="html">Roller and SocialSite at Open Source Days 2008</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_at_open_source_days"/>
        <published>2008-08-18T18:36:38+00:00</published>
        <updated>2008-08-19T01:36:38+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="conferences" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="socialsite" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;img src=&quot;http://rollerweblogger.org/roller/resource/OSD-Logo2008_155.png&quot; alt=&quot;Open Source Days 2008 logo&quot; align=&quot;right&quot;&gt;

&lt;p&gt;I&amp;#39;m happy to report that I&amp;#39;ll be traveling to Copenhagen, Denmark to talk about &lt;a href=&quot;http://roller.apache.org&quot;&gt;Roller&lt;/a&gt; and &lt;a href=&quot;http://socialsite.dev.java.net&quot;&gt;Project SocialSite&lt;/a&gt; at the &lt;a href=&quot;http://www.opensourcedays.org/2008/&quot;&gt;Open Source Days 2008&lt;/a&gt; conference on Oct. 3-4 this year. I&amp;#39;m going to tell the story of Roller and lessons learned along the way and then talk about blogging in the age of social networks and how to social-enable Roller with the SocialSite widgets. The session is called titled &lt;a href=&quot;http://www.opensourcedays.org/2008/agenda/sessions/DaveJohnson.shtml&quot;&gt;The once and future Roller&lt;/a&gt;.&lt;/p&gt;


</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_status3</id>
        <title type="html">Roller status</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_status3"/>
        <published>2008-08-18T18:27:40+00:00</published>
        <updated>2008-08-19T01:27:40+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="asf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;img src=&quot;http://rollerweblogger.org/roller/resource/apachelogo.gif&quot; alt=&quot;feather logo&quot;&gt;

&lt;p&gt;If you want the lowdown on what&amp;#39;s going on with Roller community health, ongoing work and upcoming releases then check out the &lt;a href=&quot;http://cwiki.apache.org/confluence/x/Q2sB&quot;&gt;Apache Roller August 2008 Board Report&lt;/a&gt;.&lt;/p&gt;


</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/happy_4th_birthday_to_blogs</id>
        <title type="html">Happy 4th birthday to blogs.sun.com</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/happy_4th_birthday_to_blogs"/>
        <published>2008-04-27T17:30:43+00:00</published>
        <updated>2008-04-28T00:57:31+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="sun" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I remember how freaked-out I was to see the referrer hits start rolling in (pun fully intended) from &lt;a href=&quot;http://blogs.sun.com&quot;&gt;http://blogs.sun.com/roller&lt;/a&gt;. I can&amp;#39;t believe it&amp;#39;s been four years already. Thanks to &lt;a href=&quot;http://blogs.sun.com/lskrocki/entry/happy_4th_birtday_sun_blogs&quot;&gt;Linda&lt;/a&gt; for the reminder.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/latest_links25</id>
        <title type="html">Latest Links: Roller, REST and more</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/latest_links25"/>
        <published>2008-04-21T14:00:07+00:00</published>
        <updated>2008-04-22T03:43:24+00:00</updated> 
        <category term="Links" label="Links" />
        <category term="rest" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;ul&gt;



&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/lskrocki/entry/sun_blogs_sees_it_s1&quot;&gt;Skrocki&amp;#39;s Blog: WOOHOO Sun Blogs sees its 100,000th blog post!!!&lt;/a&gt;&lt;br&gt;
Pat Chanezon made the first post, not sure who made the 100,000th&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.jroller.com/phidias/entry/google_docs_and_jroller&quot;&gt;Mark Fortner: how to publish to Roller via Google Docs&lt;/a&gt;&lt;br&gt;
&amp;quot;Google Docs &amp;#39;publish&amp;#39; feature allows you to publish a doc as a blog entry.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.jroller.com/stchandra/entry/using_wbloggar_4_with_jroller&quot;&gt;Chandra Chan: Using wbloggar 4 with JRoller version 3&lt;/a&gt;&lt;br&gt;
&amp;quot;using the new version of w.bloggar version 4.03&amp;quot;&lt;/li&gt;
&lt;br&gt;



&lt;li&gt;&lt;a href=&quot;http://weblogs.java.net/blog/jfarcand/archive/2008/04/jersey_07_relea.html&quot;&gt;Jean-Francois Arcand: Jersey 0.7 released...with a tiny taste of Grizzly Comet Support&lt;/a&gt;&lt;br&gt; &amp;quot;gives us a couple weeks and we gonna have something really amazing&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/sandoz/entry/jersey_0_7_is_released&quot;&gt;Earthly Powers: Jersey 0.7 released&lt;/a&gt;&lt;br&gt;
&amp;quot;many additions and clarifications to the API&amp;quot; plus Comet support&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://cld.blog-city.com/netbeans_61_rc2_available__let_the_ide_do_the_web_services.htm&quot;&gt;NetBeans 6.1 RC2: Let the IDE Do The Web Services Plumbing For You&lt;/a&gt;&lt;br&gt;
&amp;quot;brings support for web services from Google, Amazon, Facebook and others&amp;quot;&lt;/li&gt;
&lt;br&gt;



&lt;li&gt;&lt;a href=&quot;http://blogs.zdnet.com/BTL/?p=8555&quot;&gt;ZDNet: Social networking will be biggest enterprise 2.0 priority by 2013&lt;/a&gt;&lt;br&gt;
&amp;quot;smaller businesses arenâ&#128;&#153;t even considering, while the giants are diving in head first&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.cmswire.com/cms/enterprise-20/move-over-lotus-notes-sharepoint-is-filling-yer-shoes-002475.php&quot;&gt;Move Over Lotus Notes, SharePoint is Filling Yer Shoes&lt;/a&gt;&lt;br&gt;&amp;quot;What Microsoft makes look easy â&#128;&#148; can quickly become a nightmare in the making&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://weblogs.java.net/blog/joshy/archive/2008/03/bleg_do_you_kno.html&quot;&gt;Joshua Marinacci: know of any good forum software?&lt;/a&gt;&lt;br&gt;Comments suggest JForum, LifeRay message board and other Java options&lt;/li&gt;
&lt;br&gt;



&lt;li&gt;&lt;a href=&quot;http://www.stdlib.net/~colmmacc/2008/04/21/aws-appengine-and-the-future-of-data/&quot;&gt;colmmacc: AWS, AppEngine and the future of data&lt;/a&gt;&lt;br&gt;coping with the &amp;quot;fallout of using a planet instead of a hard-disk&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.sun.com/searchguy/entry/minion_an_open_source_search1&quot;&gt;Search Guy: Minion open source search engine from Sun Labs&lt;/a&gt;&lt;br&gt;search &amp;quot;engine that ships with the Portal Server and Web Server&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://chimprawk.blogspot.com/2008/04/productive-unit-structures-introducing.html&quot;&gt;Unit Structures: Introducing Freedom&lt;/a&gt;&lt;br&gt;&amp;quot;I find myself desperately searching out places where I can be network-free&amp;quot;&lt;/li&gt;

&lt;/ul&gt;
</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/google_summer_of_code_ideas</id>
        <title type="html">Google Summer of Code ideas for Roller</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/google_summer_of_code_ideas"/>
        <published>2008-03-16T13:55:31+00:00</published>
        <updated>2008-03-16T20:55:32+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="google" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I asked for Google Summer of Code (GSOC) ideas for Roller a couple of days ago. Below are links to the proposals I thought were good enough to volunteer as possible mentor for and to submit. The deadline is tomorrow, so you&amp;#39;ve still got time to suggest additions to the list.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008#roller-openid&quot;&gt;Roller OpenID&lt;/a&gt;: 
Open ID support for Roller blog server, for user accounts and comments&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008#roller-mobile&quot;&gt;Roller Mobile&lt;/a&gt;:
Mobile interface for Roller blog server&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008#roller-activities&quot;&gt;Roller Activities&lt;/a&gt;: 
Simple Social Networking for Roller blog server, Twitter-like activities&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008#roller-abdera&quot;&gt;Roller Abdera&lt;/a&gt;: 
Abdera-based AtomPub implementation for Roller blog server&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008#roller-atomexport&quot;&gt;AtomPub Export&lt;/a&gt;:
AtomPub Export for Roller blog server, export all!&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008#roller-shindig&quot;&gt;Roller Shindig&lt;/a&gt;: 
Google Gadget support in Roller blog server themes via Shindig&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008#roller-photogallery&quot;&gt;Roller Photo Gallery&lt;/a&gt;:
Better photo and file upload features in Roller blog server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here&amp;#39;s the full list of &lt;a href=&quot;http://wiki.apache.org/general/SummerOfCode2008&quot;&gt;Apache GSOC proposals&lt;/a&gt;.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/apachecons_2008</id>
        <title type="html">ApacheCons 2008</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/apachecons_2008"/>
        <published>2008-03-01T16:21:21+00:00</published>
        <updated>2008-03-02T00:21:21+00:00</updated> 
        <category term="Open Source" label="Open Source" />
        <category term="apachecon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I&amp;#39;ve been busy as can be, working on launching a new project at work, lots of presentations and not enough code. March seems to have snuck up behind me, spun me around and punched me right in the stomach. Not good. I need more time. Slides for my &lt;a href=&quot;http://eu.apachecon.com/eu2008/program/talk/2621&quot;&gt;Advanced Roller talk&lt;/a&gt; are due today, ApacheCon EU is a little over a month away and JavaOne is right around the corner (more about that later). That&amp;#39;s enough whining. Now, it&amp;#39;s my duty to remind you that &lt;i&gt;there&amp;#39;s still plenty of time to register for ApacheCon EU&lt;/i&gt; in beautiful city of Amsterdam, so here goes:&lt;/p&gt;

&lt;p style=&quot;text-align:center;margin:1em 0 1em 0;&quot;&gt;
   &lt;a href=&quot;http://eu.apachecon.com/eu2008/&quot;&gt;
      &lt;img src=&quot;http://eu.apachecon.com/eu2008/images/buttons/basic_468x60.jpg&quot; alt=&quot;ApacheCon banner ad&quot;&gt;&lt;/a&gt;
   &lt;br&gt;
   &lt;br&gt;
   &lt;a href=&quot;http://guest.cvent.com/i.aspx?4W,M3,8956c522-e4e3-42f5-9c83-79779f34e484&quot;&gt;
      Click here to register for ApacheCon EU 2008&lt;/a&gt;. 
&lt;/p&gt;


&lt;p&gt;And in other news, the &lt;a href=&quot;http://www.us.apachecon.com/us2008/&quot;&gt;ApacheCon US 2008 Call For Papers&lt;/a&gt; is now open. This year ApacheCon US will be November 3-7 in New Orleans, Louisiana.&lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/social_software_glassfish_screencast</id>
        <title type="html">Social Software for Glassfish screencast</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/social_software_glassfish_screencast"/>
        <published>2008-02-21T16:13:44+00:00</published>
        <updated>2008-02-22T00:13:44+00:00</updated> 
        <category term="Java" label="Java" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="slynkr" scheme="http://roller.apache.org/ns/tags/" />
        <category term="socialsoftware" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;img src=&quot;http://rollerweblogger.org/roller/resource/sfish1.png&quot; alt=&quot;fish1&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/sfish2.png&quot; alt=&quot;fish2&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/sfish3.png&quot; alt=&quot;fish3&quot;&gt;

&lt;p&gt;I &lt;a href=&quot;http://rollerweblogger.org/roller/entry/ssg_ea2&quot;&gt;mentioned&lt;/a&gt; the Social Software for Glassfish (SSG) EA2 release before the winter break, but I never got around to posting any details. 

Since then 
&lt;a href=&quot;http://wiki.updatecenter.java.net/Wiki.jsp?page=CommunityDocs&quot;&gt;some documentation&lt;/a&gt; has appeared, 
&lt;a href=&quot;http://weblogs.java.net/blog/manveen/archive/2008/01/social_software.html&quot;&gt;Manveen Kaur&lt;/a&gt; blogged it, 
&lt;a href=&quot;http://blogs.sun.com/theaquarium/entry/blogging_content_rating_jmaki_and&quot;&gt;The Aquarium&lt;/a&gt; too 
and now screen-cast master 
&lt;a href=&quot;http://blogs.sun.com/arungupta&quot;&gt;Arun Gupta&lt;/a&gt; has created an excellent 
&lt;a href=&quot;http://blogs.sun.com/arungupta/entry/screencast_23_social_software_for&quot;&gt;Social Software for Glassfish screencast&lt;/a&gt; 
that walks you through the features in this &lt;i&gt;very&lt;/i&gt; early access release. Now I don&amp;#39;t have to say nearly as much.&lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/springsource_and_covalent_good_thing</id>
        <title type="html">SpringSource and Covalent: good thing for Apache?</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/springsource_and_covalent_good_thing"/>
        <published>2008-01-30T09:27:34+00:00</published>
        <updated>2008-01-30T17:27:36+00:00</updated> 
        <category term="Open Source" label="Open Source" />
        <category term="asf" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.springsource.com&quot;&gt;SpringSource&lt;/a&gt;, the company behind the Spring Framework, has purchased &lt;a href=&quot;http://www.covalent.net/&quot;&gt;Covalent&lt;/a&gt;, a company that provides support for Apache projects. This popped up on my radar because Covalent offers support contracts for Roller and in fact, SpringSource CEO Rod Johnson mentioned Roller specifically when talking about the deal (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;&amp;lt;a href=
&amp;quot;http://www.informationweek.com/news/showArticle.jhtml?articleID=205920751&amp;quot;&amp;gt;Rod Johnson: &amp;quot;We want to support the open source software that people want to use,&amp;quot; including the Geronimo application server, the Axis Web Services Framework from Apache, and the &lt;b&gt;Apache Roller Blog&lt;/b&gt; multi-user blogging software.&amp;quot;
&lt;/blockquote&gt;

&lt;p&gt;Sounds like a good thing and hopefully it will improve the support story for all Apache products. In fact, it could be a really good thing for Apache projects because Rod&amp;#39;s philosophy is that you can&amp;#39;t support software unless you are one of the software&amp;#39;s creators. &lt;/p&gt;

&lt;blockquote&gt;&amp;lt;a href=
&amp;quot;http://www.infoq.com/news/2007/06/open-source-models&amp;quot;&amp;gt;Rod Johnson: 
&amp;quot;You can&amp;#39;t divorce the process of maintaining software from the process of creating software...That&amp;#39;s not the future of enterprise open source - unless open source has no future&amp;quot;&lt;/blockquote&gt;

&lt;p&gt;Based on that, we can assume that SpringSource will now be paying committers to do creative work on Roller and other Apache projects so that they can provide the best maintenance and support of those same projects. Right? Maybe I&amp;#39;m too naive -- after all, I figured having Roller in Lotus Connections meant IBM would be contributing.&lt;p&gt;
&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/the_all_dave_feed</id>
        <title type="html">The &amp;quot;all Dave&amp;quot; feed</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/the_all_dave_feed"/>
        <published>2008-01-09T15:19:15+00:00</published>
        <updated>2008-01-09T23:19:15+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="atom" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rss" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;Another thing I worked on over the winter break was an all-Dave feed, a single page and feed that combines all of the various things that I post to the web: blog entries, Flickr photos, del.icio.us links and Twitter activity. So far, this is what I&amp;#39;ve got:
&lt;a href=&quot;http://rollerweblogger.org/roller/page/feeds&quot;&gt;http://rollerweblogger.org/roller/page/feeds&lt;/a&gt;.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_strong_12</id>
        <title type="html">Roller Strong #12</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_strong_12"/>
        <published>2008-01-04T15:27:04+00:00</published>
        <updated>2016-01-22T23:36:26+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ibm" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I have just one item for Roller Strong today: the &lt;a href=&quot;http://www.snellspace.com/wp/?p=844&quot;&gt;post below from James Snell&lt;/a&gt; of IBM, which lists some pretty impressive stats for IBM&amp;#39;s internal blogging system. James doesn&amp;#39;t mention it in the post, but I&amp;#39;ve been told that the site is powered by &lt;a href=&quot;http://roller.apache.org&quot;&gt;Apache Roller&lt;/a&gt; v3.1.&lt;/p&gt;

&lt;blockquote&gt;
&lt;a href=&quot;http://www.snellspace.com/wp/?p=844&quot;&gt;Growth&lt;/a&gt;:
Quick note: IBM&amp;#39;s internal blogging environment currently has 95k+ entries, 94k+ comments, 41k+ registered users, 11k+ Blogs (about 13% of which are considered active), 20k+ distinct tags, and 6k+ ratings on entries (entry rating has only been around since June of 2007). On average, there are just under 150 new entries posted to about 115 blogs per day. The number of comments per day fluctuate between 80-230 per day. A range of between 200-400 tags are used each day. Update: in the first three days of January, the server access logs show 109,439 unique visitors, 3,265,739 hits, and 61.37 GB of data transferred.
&lt;/blockquote&gt;

&lt;p&gt;And that&amp;#39;s internal boggers only. 
Just think what they could do with an external blog site. 
Roller &lt;a href=&quot;http://blogs.sun.com&quot;&gt;works well&lt;/a&gt; outside the firewall too.&lt;/p&gt;
&lt;img src=&quot;https://rollerweblogger.org/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot;&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/holiday_project_jmaki_for_roller</id>
        <title type="html">Holiday project: JMaki for Roller</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/holiday_project_jmaki_for_roller"/>
        <published>2008-01-02T13:12:54+00:00</published>
        <updated>2008-01-21T16:05:01+00:00</updated> 
        <category term="Java" label="Java" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="javascript" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jmaki" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/jmaki-logo.png&quot; alt=&quot;JMaki seal&quot; align=&quot;right&quot;&gt;
Over the holidays I avoided doing anything directly related to my current set of work tasks. Sun went quiet, which helped, and I ignored the messages that piled-up in the Roller user and dev lists.  It was so quiet that I had time for a fun little project: a JMaki plugin for Roller.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://ajax.dev.java.net&quot;&gt;JMaki&lt;/a&gt; makes it easy to use JavaScript widgets (Dojo, Google, YUI, etc.) from PHP, JSP, JSF and now Roller. To use a widget, all you have to do is call a method or include a tag and JMaki takes care of including the right JavaScript files and generating the right HTML for you. That&amp;#39;s not all JMaki does, there&amp;#39;s also a pub/sub facility to make it easy to wire widgets together via events, there&amp;#39;s a proxy for fetching remote resources common table and tree data models. The theme is cool widgets with ease-of-development and that&amp;#39;s what I&amp;#39;d like to see in Roller. You can read more about the JMaki value proposition on the &lt;a href=&quot;https://ajax.dev.java.net/whyusejmaki.html&quot;&gt;Why Use JMaki page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s an example. Below is a Roller page template that uses two JavaScript widgest, the Dojo Clock and the YUI Data Table. All it takes is a single line of template code to include each widget, and one widget is dynamic i.e. the table is populated via an RSS feed.&lt;/p&gt;

&lt;pre&gt;

    &amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;JMaki test page&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;

        &amp;lt;h1&amp;gt;JMaki test: dojo.clock&amp;lt;/h1&amp;gt;
        $jmaki.addWidget(&amp;quot;dojo.clock&amp;quot;)

        &amp;lt;h1&amp;gt;JMaki test: yahoo.dataTable&amp;lt;/h1&amp;gt;
        $jmaki.addWidget(&amp;quot;yahoo.dataTable&amp;quot;, &amp;quot;/roller/xhp?id=rss&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;)

    &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;

&lt;/pre&gt;

&lt;p&gt;And here&amp;#39;s what that page looks like when displayed by Roller:&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/snoopdave/2143146264/&quot; title=&quot;JMaki Plugin for Roller w/Dojo and YUI by snoopdave, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2221/2143146264_2d39b97ff9.jpg&quot; width=&quot;500&quot; height=&quot;377&quot; alt=&quot;JMaki Plugin for Roller w/Dojo and YUI&quot;&gt;&lt;/a&gt;
&lt;br&gt;

&lt;p&gt;I&amp;#39;ll write more about the plugin once I install it on this site. If you want some details about how the plugin was developed, you can read the email that I sent to the JMaki dev list: &lt;a href=&quot;https://ajax.dev.java.net/servlets/ReadMsg?list=dev&amp;msgNo=2035&quot;&gt;JMaki for Roller issues and suggestions&lt;/a&gt;. It links to the Java source code for the plugin.&lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/ssg_ea2</id>
        <title type="html">SSG EA2</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/ssg_ea2"/>
        <published>2007-12-21T13:26:23+00:00</published>
        <updated>2007-12-21T21:26:24+00:00</updated> 
        <category term="Sun" label="Sun" />
        <category term="glassfish" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="socialsoftware" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I&amp;#39;m supposed to be on vacation today and I&amp;#39;m doing my best, but I just wanted to point out that something interesting has quietly appeared in the Glassfish Update Center. Why so quiet? Well, it&amp;#39;s an EA2 release and the emphasis is definitely on  the E. I&amp;#39;ll post some more details later, perhaps after winter break. I&amp;#39;ve still got shopping to do now and I&amp;#39;m &lt;i&gt;supposed&lt;/i&gt; to be on vacation.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/ssgea1-ss1.png&quot; alt=&quot;Social Software for Glassfish&quot;&gt;&lt;/p&gt;

&lt;p&gt;Interested? If you haven&amp;#39;t done so already grab yourself a copy of the new &lt;a href=&quot;http://blogs.sun.com/theaquarium/entry/must_have_release_glassfish_v2&quot;&gt;Glassfish V2 UR1&lt;/a&gt; release. 
Run the updatetool and install the latest EA2 release of &lt;b&gt;Social&lt;/b&gt; Software for Glass&lt;b&gt;Fish&lt;/b&gt;.

&lt;p&gt;See also: &lt;a href=&quot;http://rollerweblogger.org/roller/entry/something_fishy&quot;&gt;Something fishy&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/latest_links34</id>
        <title type="html">Latest Links</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/latest_links34"/>
        <published>2007-12-18T14:00:07+00:00</published>
        <updated>2007-12-19T05:36:02+00:00</updated> 
        <category term="Links" label="Links" />
        <category term="opensocial" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Today, I&amp;#39;ve got a couple of additions to my powered-by-Roller list:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gmjjavadesigns.com/gmjd/entry/apache_roller_4_0_released&quot;&gt;GMJ Designs : Apache Roller 4.0 Released&lt;/a&gt;&lt;br&gt;&amp;quot;I love the interface and it works great.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blogs.toasttechnology.com.au/roller/&quot;&gt;Toast Technology Blogs : Weblog&lt;/a&gt;&lt;br&gt;
SOA and business portal consultancy blogging with Roller&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.limlom.com/blog/&quot;&gt;Limlom.com company blog&lt;/a&gt;&lt;br&gt;
Business solutions and J2EE consultancy blogging with Roller&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://journal.biblicalrecorder.org/br/&quot;&gt;Biblical Recorder journals&lt;/a&gt;&lt;br&gt;
Blogs and Baptist Planet all powered by Roller&lt;/li&gt;
&lt;/ul&gt;


More about the opening of the Social Networking platforms of the world:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.25hoursaday.com/weblog/2007/12/13/SomeThoughtsOnTheOpeningOfTheFacebookPlatformArchitecture.aspx&quot;&gt;Dare Obasanjo: Thoughts on the Opening of the Facebook Platform&lt;/a&gt;&lt;br&gt;
&amp;quot;looks like Facebook plans to assert their Intellectual Property rights on anyone who clones their platform&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://opensocialapis.blogspot.com/2007/12/lets-get-this-shindig-started.html&quot;&gt;OpenSocial API Blog: Let&amp;#39;s get this Shindig started&lt;/a&gt;&lt;br&gt;
&amp;quot;We&amp;#39;re thrilled to tell you the initial commit to the Shindig repository is in&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://factoryjoe.com/blog/2007/12/13/ruminating-on-diso-and-the-public-domain/&quot;&gt;Ruminating on DiSo and the public domain&lt;/a&gt;&lt;br&gt;
&amp;quot;Iâ&#128;&#153;m hopeful about projects like Shindig that call themselves â&#128;&#156;open sourceâ&#128;&#157; and are able to be sponsored by stringent organizations like the Apache foundation. But...&amp;quot;&lt;/li&gt;
&lt;/ul&gt;

And some more about the intersection of corporate interests and community open source:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoworld.com/article/07/12/12/Open-source-and-the-corporate-elephant_1.html?source=rss&amp;url=http://www.infoworld.com/article/07/12/12/Open-source-and-the-corporate-elephant_1.html&quot;&gt;InfoWorld: Open source and the corporate elephant (FOSS.IN coverage)&lt;/a&gt;&lt;br&gt;
Danese Cooper: &amp;quot;Having a well-read blog is the best defense you can have against any problems you may encounter&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.eweek.com/article2/0,1895,2231465,00.asp&quot;&gt;eWeek: Sun Open-Source Support Questioned&lt;/a&gt;&lt;br&gt; 
&amp;quot;The only reason anyone should be surprised by anything Sun does with [the open-source projects] it controls is because that person has fundamentally created an expectation that access to source code meant more than just thatâ&#128;&#148;and that is a flawed assumption.&amp;quot;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.regdeveloper.co.uk/2007/12/05/sun_opends_defining_terms/print.html&quot;&gt;Reg Developer: Bruce Perens on the OpenDS spat&lt;/a&gt;&lt;br&gt;
&amp;quot;In general open source is only going to work if you let it be a community led project. Sun has had a hard time learning this, and some of their open source projects have had a hard time getting outside contributors, because Sun has insisted on owning the [project]&amp;quot;&lt;/li&gt;
&lt;/ul&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_themes_part_2</id>
        <title type="html">How to create a Roller 4.0 theme, part 2</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_themes_part_2"/>
        <published>2007-12-13T13:14:53+00:00</published>
        <updated>2007-12-13T21:27:11+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">In part one I explained how to create a theme directory and add the required template and resource files. Now I&amp;#39;ll wrap things up by explaining what goes into a theme.xml theme definition file and how to deploy your new theme.&amp;nbsp;</summary>
        <content type="html">&lt;p&gt;This is part two of a two part series:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/how_to_create_a_roller&quot;&gt;How to create a Roller 4.0 theme, part 1&lt;/a&gt;: directory structure and required files
&lt;/li&gt;&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/roller_themes_part_2&quot;&gt;How to create a Roller 4.0 theme, part 2&lt;/a&gt;: the theme.xml file
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In part one I explained how to create a theme directory and add the required template and resource files. Now I&amp;#39;ll wrap things up by explaining what goes into a theme.xml theme definition file and how to deploy your new theme.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Create a theme.xml file&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;The example1 theme that I discussed in part one has a preview image, a Stylesheet Override file, a weblog template, a _day template, a custom template that displays an about page and a single image called aquadot.jpg. The theme.xml theme definition file below includes each of those items.
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;weblogtheme&amp;gt;    
  &amp;lt;id&amp;gt;example1&amp;lt;/id&amp;gt; 
  &amp;lt;name&amp;gt;Example1: minimal theme&amp;lt;/name&amp;gt;
  &amp;lt;author&amp;gt;Dave Johnson&amp;lt;/author&amp;gt;     
  &amp;lt;preview-image path=&amp;quot;preview.jpg&amp;quot; /&amp;gt;

  &amp;lt;stylesheet&amp;gt;
    &amp;lt;name&amp;gt;Override&amp;lt;/name&amp;gt;
    &amp;lt;description&amp;gt;Stylesheet override&amp;lt;/description&amp;gt;
    &amp;lt;link&amp;gt;override.css&amp;lt;/link&amp;gt;
    &amp;lt;templateLanguage&amp;gt;velocity&amp;lt;/templateLanguage&amp;gt;
    &amp;lt;contentsFile&amp;gt;override.css&amp;lt;/contentsFile&amp;gt;
  &amp;lt;/stylesheet&amp;gt;

  &amp;lt;template action=&amp;quot;weblog&amp;quot;&amp;gt;
    &amp;lt;name&amp;gt;Weblog&amp;lt;/name&amp;gt;
    &amp;lt;description&amp;gt;Main template of weblog&amp;lt;/description&amp;gt;
    &amp;lt;link&amp;gt;weblog&amp;lt;/link&amp;gt;
    &amp;lt;navbar&amp;gt;false&amp;lt;/navbar&amp;gt;
    &amp;lt;hidden&amp;gt;true&amp;lt;/hidden&amp;gt;
    &amp;lt;templateLanguage&amp;gt;velocity&amp;lt;/templateLanguage&amp;gt;
    &amp;lt;contentType&amp;gt;text/html&amp;lt;/contentType&amp;gt;
    &amp;lt;contentsFile&amp;gt;weblog.vm&amp;lt;/contentsFile&amp;gt;
  &amp;lt;/template&amp;gt;

  &amp;lt;template action=&amp;quot;custom&amp;quot;&amp;gt;
    &amp;lt;name&amp;gt;_day&amp;lt;/name&amp;gt;
    &amp;lt;description&amp;gt;Displays one day of entries&amp;lt;/description&amp;gt;
    &amp;lt;link&amp;gt;_day&amp;lt;/link&amp;gt;
    &amp;lt;navbar&amp;gt;false&amp;lt;/navbar&amp;gt;
    &amp;lt;hidden&amp;gt;true&amp;lt;/hidden&amp;gt;
    &amp;lt;templateLanguage&amp;gt;velocity&amp;lt;/templateLanguage&amp;gt;
    &amp;lt;contentType&amp;gt;text/html&amp;lt;/contentType&amp;gt;
    &amp;lt;contentsFile&amp;gt;day.vm&amp;lt;/contentsFile&amp;gt;
  &amp;lt;/template&amp;gt;

  &amp;lt;template action=&amp;quot;custom&amp;quot;&amp;gt;
    &amp;lt;name&amp;gt;About&amp;lt;/name&amp;gt;
    &amp;lt;description&amp;gt;About this weblog...&amp;lt;/description&amp;gt;
    &amp;lt;link&amp;gt;about&amp;lt;/link&amp;gt;
    &amp;lt;navbar&amp;gt;true&amp;lt;/navbar&amp;gt;
    &amp;lt;hidden&amp;gt;false&amp;lt;/hidden&amp;gt;
    &amp;lt;templateLanguage&amp;gt;velocity&amp;lt;/templateLanguage&amp;gt;
    &amp;lt;contentType&amp;gt;text/html&amp;lt;/contentType&amp;gt;
    &amp;lt;contentsFile&amp;gt;about.vm&amp;lt;/contentsFile&amp;gt;
  &amp;lt;/template&amp;gt;

  &amp;lt;resource path=&amp;quot;images/aquadot.jpg&amp;quot; /&amp;gt;   
&amp;lt;/weblogtheme&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Now I&amp;#39;ll break it down and explain each element.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Inside &lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;The root element of the XML file contains some theme meta-data, an optional stylesheet, one or more templates and zero or more resources. Here&amp;#39;s a run-down of the meta-data you must include in each theme:
 
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; - the unique ID, by convention this is the same as directory name
&lt;/li&gt;&lt;li&gt; - name of the theme
&lt;/li&gt;&lt;li&gt; - name of theme author
&lt;/li&gt;&lt;li&gt; - path to image preview file, relative to theme directory
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;The  override&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;Following the theme meta-data is the stylesheet declaration, including all of the required elements:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; - name of stylesheet 
&lt;/li&gt;&lt;li&gt; - description of stylesheet
&lt;/li&gt;&lt;li&gt; - value used in stylesheet URI (e.g. http://example.com/../page/&lt;b&gt;styles.css&lt;/b&gt;)
&lt;/li&gt;&lt;li&gt; - in 4.0, this must be &amp;#39;velocity&amp;#39;
&lt;/li&gt;&lt;li&gt; - path to theme file containing stylesheet, relative to theme directory
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;The  elements&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;Next are the template elements, one for each page template. Each element must have an &amp;#39;action&amp;#39; attribute that declares on which action the template will be invoked. Here are the possible values of the action attribute:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;weblog: Each theme must have a weblog template, which displays the main page of the blog
&lt;/li&gt;&lt;li&gt;permalink: (optional) template which will be used when displaying individual entries
&lt;/li&gt;&lt;li&gt;searchIndex: (optional) template to be invoked to display search results
&lt;/li&gt;&lt;li&gt;tagsIndex: (optional) template to be used when displaying entries by tag
&lt;/li&gt;&lt;li&gt;custom: (optional) You can add as many custom templates as you want.
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And here are the elements that must be included in a :
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; - name of the template
&lt;/li&gt;&lt;li&gt; - description of template
&lt;/li&gt;&lt;li&gt; - value used in stylesheet URI (e.g. http://example.com/../page/&lt;b&gt;mypage&lt;/b&gt;)
&lt;/li&gt;&lt;li&gt; - true if page should be include in navigation menus generated by standard macros
&lt;/li&gt;&lt;li&gt; - true if page not to be called directly and only used as an include
&lt;/li&gt;&lt;li&gt; - in 4.0, this must be &amp;#39;velocity&amp;#39;
&lt;/li&gt;&lt;li&gt; - the content-type to be generated by the template
&lt;/li&gt;&lt;li&gt; - path to theme file containing template, relative to theme directory
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Including resources&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;After the template elements, we include the one  element we need for the one image that is included in the theme. The path is relative to the theme directory.
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt;Deploying your theme to Roller&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;To make your theme available to Roller, copy the theme directory into the Roller themes directory. Restart Roller and watch the logs to see that your theme is deployed correctly. If there is an error in your theme.xml file you should see an XML parser error in your roller.log file. You can also turn on additional theme debugging by adding the following to your roller-custom.properties override file.
&lt;/p&gt;
&lt;pre&gt;

log4j.category.org.apache.roller.weblogger.business.themes=DEBUG

&lt;/pre&gt;
&lt;p&gt;If you want to share your theme with an even wider audience, then consider contributing it to the Roller Support project, a site that hosts additional themes that are not included in the official Apache Roller release because Roller ships with only four core themes.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;That&amp;#39;s all&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;I think that covers all the bases. Let me know if it works for you or what parts of the doc could be improved. I hope to get this into the next rev of the Roller Template Guide (which you can get from the &lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org/download.cgi&quot;&gt;Roller download page&lt;/a&gt; in PDF form).
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Here&amp;#39;s the example1 theme that I discussed in this post:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/resource/example1-theme.tar&quot;&gt;example1-theme.tar&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/resource/example1-theme.zip&quot;&gt;example1-theme.zip&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/how_to_create_a_roller</id>
        <title type="html">How to create a Roller 4.0 theme, part 1</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/how_to_create_a_roller"/>
        <published>2007-12-10T16:58:46+00:00</published>
        <updated>2007-12-13T21:15:25+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="velocity" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">The Roller 4.0 Template Author Guide explains how to customize your Roller theme by editing the page templates that define, but it doesn&amp;#39;t explain how to create an all-new Roller theme. This is the first of two posts that explain how to create theme for use with Roller 4.0.&amp;nbsp;</summary>
        <content type="html">&lt;p&gt;This is part one of a two part series:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/how_to_create_a_roller&quot;&gt;How to create a Roller 4.0 theme, part 1&lt;/a&gt;: directory structure and required files
&lt;/li&gt;&lt;li&gt;&lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/roller/entry/roller_themes_part_2&quot;&gt;How to create a Roller 4.0 theme, part 2&lt;/a&gt;: the theme.xml file
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The Roller 4.0 Template Author Guide explains how to customize your Roller theme by editing the page templates that define it. It tells you how to use Roller&amp;#39;s template language (&lt;a class=&quot;external&quot; href=&quot;http://velocity.apache.org&quot;&gt;Velocity&lt;/a&gt;), what objects are available to your template code and what macros you can use to generate HTML and other content. You can &lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org/download.cgi&quot;&gt;download it here&lt;/a&gt; in PDF form. 
&lt;/p&gt;
&lt;p&gt;But the template guide does not tell you how to create a complete new Roller theme, one that you can share with other Roller site admins. That&amp;#39;s a problem because I&amp;#39;d really like to see more themes, so I&amp;#39;m going to rough-out some docs right here on my blog. In part one I&amp;#39;ll explain how to get started, what files you must provide and the new Roller 4.0 Stylesheet Override feature. In part two I&amp;#39;ll explain how to create the new theme.xml theme definition file that you must include in your theme. Let&amp;#39;s roll.
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt;Getting started&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;Just as before, a Roller theme is a directory of files, some page templates and some &amp;quot;resource&amp;quot; files, which are typically images. So, your first step in creating a new theme is to create a directory to hold those files. Give it a simple one word alphanumeric name with no spaces. 
&lt;/p&gt;
&lt;p&gt;In the next sections, I&amp;#39;ll explain what files you need and I&amp;#39;ll show some example templates from a minimal theme called &amp;quot;example1.&amp;quot; This example theme is made up of seven files, including three Velocity templates (.vm files), a couple of images and a theme.xml file. Here&amp;#39;s the directory layout of example1.
&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/theme-example1.jpg&quot; alt=&quot;http://rollerweblogger.org/roller/resource/theme-example1.jpg&quot;&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt;Add Weblog and _day templates&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;A theme must have at least a weblog template with the name &amp;quot;Weblog&amp;quot; and you&amp;#39;ll find an example of one below. It&amp;#39;s advisable to also have a _day template,  which is responsble for displaying one day&amp;#39;s worth of blog entries. 
&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the Weblog.vm file for the example1 theme, with 
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;title&amp;gt;$model.weblog.name #if($model.permalink) 
     : $model.weblogEntry.title #end&amp;lt;/title&amp;gt; 
  #showAutodiscoveryLinks($model.weblog)
  &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
  h1 { color:red; } 
  h2 { color:orange; }
  a { color:orange; text-decoration:none; font-weight: bold; }
  &amp;lt;/style&amp;gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;all&amp;quot; href=&amp;quot;$model.weblog.stylesheet&amp;quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;table width=&amp;quot;80%&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;
        &amp;lt;h1&amp;gt;$model.weblog.name&amp;lt;/h1&amp;gt;
        #set($rootCategory = $model.weblog.getWeblogCategory(&amp;quot;nil&amp;quot;))
        #showWeblogCategoryLinksList($rootCategory false false)
        #set($pager = $model.getWeblogEntriesPager()) 
        #showNextPrevEntriesControl($pager)
        #showWeblogEntriesPager($pager)
      &amp;lt;/td&amp;gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;
        #showPageMenu($model.weblog)
        #showAuthorMenu(true)
      &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;And here&amp;#39;s the corresponding _day template:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;h2 class=&amp;quot;dayheading&amp;quot;&amp;gt;$utils.formatDate($day, &amp;quot;MMM dd, yyyy&amp;quot;)&amp;lt;/h2&amp;gt; 
#foreach($entry in $entries)
  &amp;lt;h2 class=&amp;quot;entryheading&amp;quot;&amp;gt;
    &amp;lt;img src=$url.resource(&amp;quot;images/aquadot.jpg&amp;quot;) /&amp;gt;&amp;amp;nbsp;
    &amp;lt;a href=&amp;quot;$url.entry($entry.anchor)&amp;quot;&amp;gt;$entry.title&amp;lt;/a&amp;gt;
  &amp;lt;/h2&amp;gt;
  &amp;lt;p&amp;gt;$utils.formatDate($entry.pubTime, &amp;quot;HH:MMa z&amp;quot;) by $entry.creator.fullName&amp;lt;/p&amp;gt;  
  &amp;lt;p&amp;gt;
  #if($model.permalink)
    $entry.displayContent
  #else
    $entry.displayContent($url.entry($entry.anchor))
  #end
  &amp;lt;/p&amp;gt;
#end
&lt;/pre&gt;
&lt;p&gt;You can read more about the Weblog and _day templates in the Roller Template Guide, what I&amp;#39;d like to highlight now is a new 4.0 feature called the &lt;b&gt;Stylesheet Override&lt;/b&gt;. Notice that the Weblog.vm file above includes some CSS styles, followed by a  to a CSS file with URL $model.weblog.stylesheet, that&amp;#39;s the Stylesheet Override file. Let me explain.
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt;Add a Stylesheet Override file&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;Roller 4.0&amp;#39;s new Stylesheet Override feature makes it possible for users of your theme to to change font, colors and other things without having to edit any of the templates that define the blog. Instead, they edit a CSS file known as the override file and that file is included in the right places when the blog is displayed.
&lt;/p&gt;
&lt;p&gt;To support Stylesheet Override your theme must provide an 1) override file, 2) an entry its theme.xml file and 3) must reference the override file in the right place as shown above in the example Weblog.vm file.
&lt;/p&gt;
&lt;p&gt;When you create your override file, keep in mind that your theme should stand-alone without the override file. The override file is for specifying &lt;i&gt;additional&lt;/i&gt; styles above and beyond what your theme already provides. It&amp;#39;s perfectly OK and even a good idea for your theme&amp;#39;s override file to be empty, or containing a comment like this:
&lt;/p&gt;
&lt;pre&gt;

  /* add your own custom CSS here */

&lt;/pre&gt;
 
&lt;p&gt;&lt;b&gt;Add other resources required by your theme&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;If your theme requires any static resources, i.e. images for the banner or for the background, then include them in the theme directory or its sub-directories. You must reference each one in your theme.xml definition file.
&lt;/p&gt;
&lt;p&gt;Your theme must also provide a &lt;b&gt;Preview Image&lt;/b&gt;, an image (recommended size ~350x400) that will be shown to users as they browse possible themes within Roller. To satisfy this requirement, you include a preview image file in your theme directory and reference it from your theme.xml file.  
&lt;/p&gt;
&lt;p&gt;In part 2, I&amp;#39;ll explain how to create that theme.xml file with references to all the tempate files and images that make up a theme.
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_4_0_released</id>
        <title type="html">Roller 4.0 released</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_4_0_released"/>
        <published>2007-12-05T13:16:32+00:00</published>
        <updated>2007-12-05T21:16:32+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;br&gt;
Finally!
&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;inline&quot; src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; alt=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Apache Roller 4.0 has been released and is now available for download.&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;This is a major new Roller release which includes easier blog theme customization, a much more simple installation/upgrade process, infrastructure improvements and numerous other small fixes. You can get the release files and the official documentation via the Apache mirrors at this page:
&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; href=&quot;http://roller.apache.org/download.cgi&quot;&gt;http://roller.apache.org/download.cgi&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;And you can read about the new features on the &lt;a class=&quot;external&quot; href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;What&amp;#39;s New in Roller 4.0&lt;/a&gt; page of the Roller wiki.
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Project releases are approved by vote of the Apache Roller Project Management Committee (PMC). Support for a release is provided by project volunteers on the project &lt;a class=&quot;external&quot; href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Roller+Mailing+Lists&quot;&gt;mailing lists&lt;/a&gt;. Additional free support is provided by many other volunteer subscribers to the list. Bugs found in a release may be discussed on the list and reported through the &lt;a class=&quot;external&quot; href=&quot;http://opensource.atlassian.com/projects/roller&quot;&gt;issue tracker&lt;/a&gt;.
&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Roller is a Project of the &lt;a class=&quot;external&quot; href=&quot;http://apache.org/foundation&quot;&gt;Apache Software Foundation&lt;/a&gt; (ASF), formed by a resolution of the &lt;a class=&quot;external&quot; href=&quot;http://apache.org/foundation/board&quot;&gt;ASF Board of Directors&lt;/a&gt;. As an ASF Project, Roller is subject to the &lt;a class=&quot;external&quot; href=&quot;http://apache.org/foundation/bylaws.html&quot;&gt;ASF Bylaws&lt;/a&gt; and the direction of the ASF Board. The user mailing list and issue tracker are the &lt;/i&gt;only&lt;i&gt; support options hosted by the Apache Roller project.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;Cross posted from the &lt;a class=&quot;external&quot; href=&quot;http://rollerweblogger.org/project&quot;&gt;Roller project blog&lt;/a&gt;.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/openqabal</id>
        <title type="html">OpenQabal: a social software platform w/Roller</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/openqabal"/>
        <published>2007-12-04T13:56:55+00:00</published>
        <updated>2007-12-04T21:59:30+00:00</updated> 
        <category term="Open Source" label="Open Source" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="socialsoftware" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
I&amp;#39;m always happy to see Roller used in new sites, projects and products. 
Here&amp;#39;s an interesting new example that I&amp;#39;ve been meaning to blog for a while now.

Phillip Rhodes is working on building what he calls &lt;a href=&quot;http://openqabal.dev.java.net&quot;&gt;OpenQabal&lt;/a&gt; a  &amp;quot;social software operating system.&amp;quot; The project integrates a set of social software applications, including Roller and JavaBB, via Single Sign-On (SSO), a common look-and-feel and &lt;a href=&quot;http://www.sioc-project.org/&quot;&gt;Semantically-Interlinked Online Communities&lt;/a&gt; (SIOC). 

He explains it all in an lengthy and informative &lt;a href=&quot;http://www.jroller.com/openqabal/entry/so_what_is_openqabal_and&quot;&gt;blog post&lt;/a&gt; on the project&amp;#39;s JRoller.com blog. &lt;/p&gt;

&lt;p&gt;I&amp;#39;d never heard of SIOC before. Here&amp;#39;s the executive summary:&lt;/p&gt;

&lt;blockquote&gt;Semantically-Interlinked Online Communities SIOC or is a framework aimed at connecting online community sites and internet-based discussions. Currently, online communities (boards, blogs, etc.) are like islands - they contain valuable information but are not well connected. SIOC allows us to interlink these sites, and enables the extraction of richer information from various discussion services.&lt;/blockquote&gt;

&lt;p&gt;Sounds like it could be pretty darn useful. 

But then again, I spent a little time exploring the list of SIOC enabled sites with the &lt;a href=&quot;http://sioc-project.org/firefox&quot;&gt;SIOC Firefox plugin&lt;/a&gt; and didn&amp;#39;t really find any examples of interlinked communities or conversations. 

Am I missing something?&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/rc10_is_4_0</id>
        <title type="html">RC10 is 4.0</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/rc10_is_4_0"/>
        <published>2007-12-03T13:35:41+00:00</published>
        <updated>2007-12-03T21:35:41+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;We&amp;#39;ve got the votes to release our tenth release candidate as Apache Roller 4.0. I&amp;#39;ll make formal announcements after I&amp;#39;ve put files in place and updated the various release and docs pages.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/speaking_at_apachecon_eu_april</id>
        <title type="html">Advanced Roller at ApacheCon EU, April 2008</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/speaking_at_apachecon_eu_april"/>
        <published>2007-12-03T13:33:13+00:00</published>
        <updated>2007-12-03T21:33:13+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="apachecon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="conferences" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;One of my five &lt;a href=&quot;http://www.eu.apachecon.com/&quot;&gt;ApacheCon EU 2008&lt;/a&gt; proposals was accepted. I submitted a couple of proposals for customizing Roller, one for advanced Roller and one on RSS/Atom.  The advanced Roller talk was accepted. Here&amp;#39;s the abstract:&lt;/p&gt;

&lt;blockquote&gt;Apache Roller is a popular open source blog server designed to serve the needs of large multi-user blogging sites and typically used by large corporations, universities and government organizations. This session for managers, sysadmins and developers will goes beyond the Roller installation guide and explores the advanced issues of planning and executing a Roller deployment, including deployment architecture and configuration options as well as options for customization and automation.&lt;/blockquote&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_strong_11</id>
        <title type="html">Roller Strong #11</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_strong_11"/>
        <published>2007-11-27T21:04:43+00:00</published>
        <updated>2008-01-04T19:44:43+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="opensource" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I&amp;#39;ve got a couple of Roller related items to blog about, so why not just call it Roller Strong #11.&lt;/p&gt;

&lt;p&gt;First, Lars Trieloff responds to some of the questions I raised about 
&lt;a href=&quot;http://weblogs.goshaky.com/weblogs/lars/entry/jcr_for_roller&quot;&gt;JCR and Roller&lt;/a&gt; 
in my ApacheCon wrap-up post. I left a comment on his blog in response. 
Personally, I think a JCR back-end is a very interesting idea 
and I wish I had some more time to explore it.&lt;/p&gt;

&lt;p&gt;Manchi Leung AKA Thinkboy posted the code for a new &lt;a href=&quot;http://markmail.org/message/gs34nqgkocfpi4g2&quot;&gt;Textile plugin&lt;/a&gt; to the Roller dev list, using 
&lt;a href=&quot;https://textile-j.dev.java.net/&quot;&gt;Textile-J&lt;/a&gt;. Thinkboy says &amp;quot;it supports almost all of the Textile syntax. 
very much the same as &lt;a href=&quot;http://www.atlassian.com/software/confluence/&quot;&gt;Confluence wiki&lt;/a&gt;. Now I can easily sync or copy working notes from Confluence wiki to my personal Roller blog.&amp;quot; Nice. Note to self: I need to fix up some of our existing entry plugins -- I think some of them (e.g. Ekit) still haven&amp;#39;t been updated for Roller 3.1.&lt;/p&gt;

&lt;p&gt;Arun Gupta blogged recently about &lt;a href=&quot;http://blogs.sun.com/arungupta/entry/totd_17_backin_up_your&quot;&gt;Backing up your Roller entries&lt;/a&gt; and explained how to use the Grabber example (now known as BlogBackup in Blogapps 2) from the &lt;a href=&quot;https://blogapps.dev.java.net/&quot;&gt;Blogapps project&lt;/a&gt; to backup your Roller blog. Backing-up your entries, but backing up your uploads is not. Hopefully, blogs.sun,com will turn on Atom protocol someday and that&amp;#39;ll will make it easy for a tool like Grabber backup both entries and uploads. &lt;/p&gt;

&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; alt=&quot;roller logo&quot; align=&quot;right&quot;&gt;

&lt;p&gt;We&amp;#39;re still waiting on &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt;, but I sense our wait is soon over. &lt;a href=&quot;http://markmail.org/message/5ccve3y6sgittjo4&quot;&gt;Roller 4.0 RC10&lt;/a&gt; was released one week ago with just a couple of bug fixes. And so far, no critical issues have been found. We&amp;#39;ve got only one +1 vote (thanks &lt;a href=&quot;http://www.busybuddha.org/blog/&quot;&gt;Anil&lt;/a&gt;!) so far so committers please test and vote.&lt;/p&gt;

&lt;p&gt;And finally, I have to mention MarkMail because I&amp;#39;ve been using it throughout this blog post. MarkMail provides a slick interface and excellent facilities for mailing lists of all kinds. They&amp;#39;re indexing all of the Apache mailing lists and providing statis and charts for each. Check the &lt;a href=&quot;http://roller.markmail.org/&quot;&gt;Roller page at MarkMail&lt;/a&gt; for example.&lt;/p&gt;

&lt;p&gt;That&amp;#39;s all I&amp;#39;ve got for this go-round. Keep on rollin&amp;#39;&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_strong_10</id>
        <title type="html">Roller Strong #10</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_strong_10"/>
        <published>2007-10-29T20:34:46+00:00</published>
        <updated>2008-01-04T19:45:06+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">It&amp;#39;s been over a month since the last Roller Strong, so now I&amp;#39;m really glad I didn&amp;#39;t call this thing Roller Week. Anyhow, in this installment I&amp;#39;ve got news about including new releases, a big new Roller customer and upcoming Roller-related events. I&amp;#39;ll start with the release news.&amp;nbsp;</summary>
        <content type="html">&lt;p&gt;It&amp;#39;s been over a month since the last Roller Strong, so now I&amp;#39;m really glad I didn&amp;#39;t call this thing Roller Week. Anyhow, in this installment I&amp;#39;ve got news about including new releases, a big new Roller customer and upcoming Roller-related events. I&amp;#39;ll start with the release news.&lt;/p&gt;

&lt;h3&gt;Apache Roller 4.0 RC9 available for testing&lt;/h3&gt;

&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; alt=&quot;Roller 40 logo&quot; align=&quot;right&quot;&gt;

&lt;p&gt;In addition to the internal testing done by Sun&amp;#39;s blogs.sun.com and App Platform teams, the Apache Roller community has also tested eight release candidates of Roller 4.0. That&amp;#39;s a lot of testing and fixing, but we&amp;#39;re still not quite done. We found enough issues in RC8 to justify yet another build, so today I spun a new one, made it available for testing and called for another release vote. Here are the files:

&lt;p style=&quot;margin-left:3em;&quot;&gt;RC9 file are available for testing purposes here:&lt;br&gt;
&lt;a href=&quot;http://people.apache.org/~snoopdave/apache-roller-4.0-rc9&quot;&gt;
http://people.apache.org/~snoopdave/apache-roller-4.0-rc&lt;/a&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left:3em;&quot;&gt;Ten new 4.0 themes (from &lt;a href=&quot;http://rollerthemes.com&quot;&gt;rollerthemes.com&lt;/a&gt;) are now available here:&lt;br&gt;
&lt;a href=&quot;https://roller.dev.java.net/servlets/ProjectDocumentList&quot;&gt;
https://roller.dev.java.net/servlets/ProjectDocumentList&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;&amp;quot;Your US government blog&amp;quot; powered by Roller&lt;/h3&gt;

&lt;p&gt;The US Government recently launched a blog called GovGab (&lt;a href=&quot;http://govgab.gov&quot;&gt;http://govgab.com&lt;/a&gt;). It&amp;#39;s powered by five employees of the &lt;a href=&quot;http://www.gsa.gov/Portal/gsa/ep/channelView.do?pageTypeId=8199&amp;channelPage=%2Fep%2Fchannel%2FgsaOverview.jsp&amp;channelId=-13326&quot;&gt;Office of Citizen Services and Communications&lt;/a&gt; and Apache Roller 3.1. &lt;/p&gt;

&lt;a href=&quot;http://govgab.gov&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/govgab-logo.png&quot; alt=&quot;GovGab logo&quot; align=&quot;center&quot;&gt;&lt;/a&gt;

&lt;p&gt;The GovGab folks have been helping out with the (still ongoing) Roller 3.1.1 release by reporting bugs and suggesting fixes. I hope we&amp;#39;ll be seeing more from them as they role out more blogs and more Roller-powered blog sites.&lt;/p&gt;

&lt;h3&gt;Roller at ApacheCon US and EU&lt;/h3&gt;

&lt;a href=&quot;http://us.apachecon.com/us2007/&quot;&gt;
&amp;lt;img align=&amp;quot;left&amp;quot; hspace=&amp;quot;10px&amp;quot;
src=&amp;quot;http://rollerweblogger.org/roller/resource/acus2007_125x125.png&amp;quot;&amp;gt;
&lt;/a&gt;

&lt;p&gt;&lt;a href=&quot;http://www.us.apachecon.com/&quot;&gt;ApacheCon US 2007&lt;/a&gt; is only a couple of weeks away but there&amp;#39;s still enough time for you to sign up and make travel arrangements for Atlanta, GA. So get on it! You don&amp;#39;t want to miss my talk again now, do you? I&amp;#39;ll be presenting my &lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/2023&quot;&gt;Roller and blogs as a web development platform&lt;/a&gt;, the same one I gave earlier this year at ApacheCon EU. I&amp;#39;ll also be at the Struts/Roller BOF on Wednesday night to talk about Roller&amp;#39;s recent migration to Struts2. BTW, &lt;a href=&quot;http://rollerweblogger.org/roller/entry/apachecon_us_2007_count_down&quot;&gt;Raible says&lt;/a&gt; there will be FREE BEER at the BOF.&lt;/p&gt;

&lt;p&gt;In related news, I just proposed five Roller related talks for ApacheCon EU 2008. While I was submitting my proposals, I saw that Matt Raible submitted one too (on Roller w/LDAP and SSO), so it&amp;#39;s pretty likely that somebody will be talking Roller in Amsterdam in April 2008 too.&lt;/p&gt;

&lt;p&gt;That&amp;#39;s all I&amp;#39;ve got for you today. See ya next time...&lt;/p&gt;
&lt;p&gt;- Dave&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/instructions_for_roller_w_ldap</id>
        <title type="html">Instructions for Roller w/LDAP and CAS plus Roller on Geronimo</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/instructions_for_roller_w_ldap"/>
        <published>2007-10-23T19:04:15+00:00</published>
        <updated>2008-01-04T19:46:20+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="authentication" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ldap" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://www.ja-sig.org/products/cas/&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/ja-sig-logo.jpg&quot; align=&quot;right&quot;&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/apache_roller_acegi_security_ldap&quot;&gt;Matt Raible&lt;/a&gt; gave a &lt;a href=&quot;http://www.softwaresummit.com/2007/speakers/raible.htm&quot;&gt;talk&lt;/a&gt; today at the Colorado Software Summit on integrating Roller with LDAP and CAS. He also has provided some nice notes on that and running Roller on Geronimo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Roller+4.0+with+LDAP+and+CAS&quot;&gt; Roller 4.0 with LDAP and CAS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Roller+4.0+on+Geronimo&quot;&gt;Roller 4.0 on Geronimo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Matt had to make a couple of tweaks to get thing going with Roller 4.0 RC8 and a couple other problems have been found, so you can expect RC9 shortly.&lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_plugins</id>
        <title type="html">Ten types of plugins supported by Roller 4.0</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_plugins"/>
        <published>2007-10-17T10:12:31+00:00</published>
        <updated>2010-04-28T04:53:01+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="plugins" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&amp;lt;a href=&amp;quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0
&amp;quot;&amp;gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; align=&quot;right&quot; alt=&quot;Roller 4.0 logo&quot;&gt;
I&amp;#39;m working on documenting the Roller plugin system, comparing it to similar systems (e.g. &lt;a href=&quot;http://codex.wordpress.org/Plugin_API&quot;&gt;Wordpress&lt;/a&gt; and &lt;a href=&quot;http://confluence.atlassian.com/display/DOC/Writing+Confluence+Plugins&quot;&gt;Confluence&lt;/a&gt;) and coming up with some proposals for improvements. 
As part of that work, I&amp;#39;ve come up with a list of the plugin types supported by &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt;.&amp;nbsp;</summary>
        <content type="html">&lt;p&gt;&amp;lt;a href=&amp;quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0
&amp;quot;&amp;gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; align=&quot;right&quot; alt=&quot;Roller 4.0 logo&quot;&gt;
I&amp;#39;m working on documenting the Roller plugin system, comparing it to similar systems (e.g. &lt;a href=&quot;http://codex.wordpress.org/Plugin_API&quot;&gt;Wordpress&lt;/a&gt; and &lt;a href=&quot;http://confluence.atlassian.com/display/DOC/Writing+Confluence+Plugins&quot;&gt;Confluence&lt;/a&gt;) and coming up with some proposals for improvements. 
As part of that work, I&amp;#39;ve come up with a list of the plugin types supported by &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Page Model Plugin&lt;/b&gt; (Interface: &lt;a href=&quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PageModel.java?view=markup&quot;&gt;PageModel&lt;/a&gt;)
&lt;br&gt;Allows you to make new objects available to Roller page templates, providing a way to display external data in the blog pages and feeds generated by Roller.

&lt;li&gt;&lt;b&gt;Weblog Editor UI Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/core/plugins/WeblogEntryEditor.java?view=markup&amp;quot;&amp;gt;
WeblogEntryEditor)&lt;br&gt; Plugin your own Rich Text or other type of editor into the New/Edit Entry page in the Roller web UI. Roller comes with two such plugins: a plain-text editor and a rich-text editor based on Xinha.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Weblog Entry Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/plugins/entry/WeblogEntryPlugin.java?view=markup&amp;quot;&amp;gt;
WeblogEntryPlugin)&lt;br&gt; Allows you to transform weblog entry content at the time it is displayed in a weblog page or a feed. Once you&amp;#39;ve installed your entry plugin, blog authors can enable and disable it on a per entry basis. For example, if you&amp;#39;ve got the Wiki Plugin installed then bloggers can choose to blog using wiki syntax and the plugin will transform the wiki syntax to HTML on display.&lt;/li&gt;
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Weblog Entry Comment Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/business/plugins/comment/WeblogEntryCommentPlugin.java?view=markup&amp;quot;&amp;gt;
WeblogEntryCommentPlugin)&lt;br&gt; Allows you to transform comment content at the time it is displayed in a weblog page or feed. By default, Roller uses a link-markup plugin to turn URLs into clickable links, an auto-format plugin to add paragraph breaks and a safe-subset plugin to strip out all but the safest HTML tags. You can add new comment formatter plugins or replace the existing ones. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Comment Authenticator Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.java?view=markup&amp;quot;&amp;gt;
CommentAuthenticator)&lt;br&gt; Plugin your own comment authenticator to replace the math-question test used in most Roller blogs. Allows you to add some additional HTML to the comment form and some server-side logic for authenticating comment posts. You could add a CAPTCHA test this way, but I&amp;#39;m not sure there&amp;#39;s enough pluggability to support OpenID authentication. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Comment Validator Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.java?view=markup&amp;quot;&amp;gt;
CommentValidator)&lt;br&gt; Allows you to add additional comment spam filters to Roller. Your filter can examine each comment posted and report to Roller whether it appears to be spam or not. Roller includes an Akismet validator, a too-many-links validator and a trackback validator. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Renderer Plugin&lt;/b&gt; (Interfaces: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/RendererFactory.java?view=markup&amp;quot;&amp;gt;
RendererFactory and &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/Renderer.java?view=markup&amp;quot;&amp;gt;
Renderer)&lt;br&gt; Allow you to plugin a renderer for a specific template language name. Roller&amp;#39;s stock templates and theme all use the Velocity template language, but by plugging in your own renderer you can author templates in whatever JVM based language you wish. For example, plugins exist for authoring Roller templates in JavaScript, JRuby and Groovy Server Pages (GSP) languages. &lt;/li&gt;

&lt;li&gt;&lt;b&gt;Request Mapper Plugin&lt;/b&gt; (Interface: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/RequestMapper.java?view=markup&amp;quot;&amp;gt;
RequestMapper)&lt;br&gt; Allows you to plugin to Roller&amp;#39;s URL structure and request handling system, like adding a Servlet but not requiring you to edit web.xml.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Cache system Plugin&lt;/b&gt; (Interfaces: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/util/cache/CacheFactory.java?view=markup&amp;quot;&amp;gt;
CacheFactory and &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/util/cache/Cache.java?view=markup&amp;quot;&amp;gt;
Cache)&lt;br&gt; Plugin your own cache system to replace or augment Roller&amp;#39;s in-memory cache system. For example, you might want to plugin memcached as your distributed page/feed cache as Sun does for blogs.sun.com.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Repeatable Task&lt;/b&gt; (Classes to extend: &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/runnable/RollerTask.java?revision=559911&amp;view=markup&amp;quot;&amp;gt;
RollerTask or &amp;lt;a href=
&amp;quot;http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/runnable/RollerTaskWithLeasing.java?revision=559911&amp;view=markup&amp;quot;&amp;gt;
RollerTaskWithLeasing)&lt;br&gt; Roller runs a number of tasks behind the scenes and you can add your own tasks and configure when they start and how often they run. There&amp;#39;s also a lease-system for working in a distributed environment.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;UPDATE: The &lt;a href=&quot;http://people.apache.org/~snoopdave/presentations/advanced-roller-aceu2008.pdf&quot;&gt;Advanced Roller presentation from ApacheCon EU 2008&lt;/a&gt; covers many of the different types of plugins above and gives examples, configuration tips, etc.&lt;/p&gt;


</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/atom_news_round_up</id>
        <title type="html">Latest links: AtomPub news round-up edition</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/atom_news_round_up"/>
        <published>2007-10-12T12:31:13+00:00</published>
        <updated>2007-10-22T18:41:49+00:00</updated> 
        <category term="Blogging" label="Blogging" />
        <category term="atom" scheme="http://roller.apache.org/ns/tags/" />
        <category term="atompub" scheme="http://roller.apache.org/ns/tags/" />
        <category term="feeds" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gdata" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="movabletype" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wordpress" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">I&amp;#39;ve been in crunch-mode working on a new project, but I&amp;#39;ve been trying to keep an eye on what&amp;#39;s going on the world of &lt;a href=&quot;http://tools.ietf.org/wg/atompub/&quot;&gt;Atom Publishing Protocol&lt;/a&gt; or AtomPub as the cool kids &lt;a href=&quot;http://blog.ianbicking.org/2007/08/12/atom-publishing-protocol-atompub/&quot;&gt;call it&lt;/a&gt;. Here&amp;#39;s a wrap-up of some of the AtomPub news I&amp;#39;ve picked up on the past month or so.&amp;nbsp;</summary>
        <content type="html">&lt;p&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/atom-logo75px.gif&quot; alt=&quot;atom logo&quot; align=&quot;right&quot;&gt;
I&amp;#39;ve been in crunch-mode working on a new project, but I&amp;#39;ve been trying to keep an eye on what&amp;#39;s going on the world of &lt;a href=&quot;http://tools.ietf.org/wg/atompub/&quot;&gt;Atom Publishing Protocol&lt;/a&gt; or AtomPub as the cool kids &lt;a href=&quot;http://blog.ianbicking.org/2007/08/12/atom-publishing-protocol-atompub/&quot;&gt;call it&lt;/a&gt;. Here&amp;#39;s a wrap-up of some of the AtomPub news I&amp;#39;ve picked up on the past month or so.

&lt;h3&gt;Specifications&lt;/h3&gt;

&lt;p&gt;
The big news is, of course, that AtomPub has been granted an RFC number &lt;a href=&quot;http://tools.ietf.org/html/rfc5023&quot;&gt;RFC-5023&lt;/a&gt; and is now an IETF &amp;quot;proposed standard&amp;quot; like Atom format (RFC-4287). The folks at Ricoh have provided a &lt;a href=&quot;http://www.ricoh.co.jp/src/rd/webtech/rfc5023_ja.html&quot;&gt;Japanese translation&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Extensions to AtomPub are under development and you can find a good list of them at the &lt;a href=&quot;http://xml.coverpages.org/atom.html&quot;&gt;XML Cover Pages page for Atom&lt;/a&gt;. 

One I find interesting is James Snell&amp;#39;s AtomPub &lt;a href=&quot;http://tools.ietf.org/html/draft-snell-atompub-feature-10&quot;&gt;Feature Discovery&lt;/a&gt; spec, which is designed to help AtomPub clients determine what features are supported and required by servers. The features spec is controversial and has sparked a lot of good discussion including, Brian Smith&amp;#39;s email &lt;a href=&quot;http://www.imc.org/atom-protocol/mail-archive/msg10265.html&quot;&gt;Atom Weblog Publishers Guide&lt;/a&gt; and &lt;a href=&quot;http://sberyozkin.blogspot.com/2007/09/atom-and-ws-policy.html&quot;&gt;Sergey Beryozkin&lt;/a&gt; and &lt;a href=&quot;http://netzooid.com/blog/2007/09/25/atompub-ws-policy/&quot;&gt;Dan Diephouse&amp;#39;s discussion of AtomPub and WS-Policy&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;Server implementations&lt;/h3&gt;

&lt;p&gt;
More big news to report here: the new Wordpress 2.3 release provides full support for AtomPub. Sam Ruby blogged about it in &lt;a href=&quot;http://intertwingly.net/blog/2007/08/30/WordPress-2-3-AtomPub&quot;&gt;Wordpress 2.3 loves AtomPub&lt;/a&gt; and the &lt;a href=&quot;http://codex.wordpress.org/AtomPub&quot;&gt;Wordpress 2.3 AtomPub docs&lt;/a&gt; provide a good summary and cover some limitations. 

Yesterday, Sam posted &lt;a href=&quot;http://intertwingly.net/blog/2007/10/11/Wordpress-Vigilance-and-Plans&quot;&gt;Wordpress vigilance and plans&lt;/a&gt;. He wants to get Wordpress to score a perfect 0 errors and 0 warnings on the APE tests, which means among other things preserving foreign markup.
&lt;/p&gt;

&lt;p&gt;
New releases of Apache Roller have also been updated for the final AtomPub spec. The upcoming Roller 3.1.1 and &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt; releases include AtomPub support. Both releases are up for vote now, so they should be out Real Soon 

Now. And I&amp;#39;m working on adding AtomPub support for comments for Roller 4.1, building on top of the Atom Threading Extension (&lt;a href=&quot;http://www.ietf.org/rfc/rfc4685.txt&quot;&gt;RFC-4685&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
I&amp;#39;ve been googling and browsing the SixApart site, but I can&amp;#39;t figure out if Movable Type 4.0 supports the final AtomPub spec. Anybody know?
&lt;/p&gt;

&lt;p&gt;
And Google has added another AtomPub based API. Read about it on &lt;span style=&quot;color:#3c3c3c;&quot;&gt;Bill de hÃ&#147;ra&amp;#39;s blog &lt;/span&gt;&lt;a href=&quot;http://www.dehora.net/journal/2007/08/youtube_via_gdata.html&quot;&gt;YouTube via GData&lt;/a&gt; and on the YouTube Developer API blog: &lt;a href=&quot;http://apiblog.youtube.com/2007/08/new-youtube-api-released-into-wild.html&quot;&gt;New YouTube API Released into the Wild&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;Client implementations&lt;/h3&gt;

&lt;p&gt;
In &lt;a href=&quot;http://jcheng.wordpress.com/2007/10/09/stick-a-fork-in-it/&quot;&gt;Stick a fork in it&lt;/a&gt; Joe Cheng writes &amp;quot;The Windows Live Writer team is still on track to deliver AtomPub support in the next version, which I am looking forward to immensely. Itâ&#128;&#153;s definitely an exciting time to be in the blogging tools space!&amp;quot; Based on what I saw at the last face-to-face AtomPub interop, it looks like Microsoft may have the best AtomPub-based blog client around. I wonder when MarsEdit and Ecto will get on board with AtomPub.
&lt;/p&gt;

&lt;h3&gt;Toolkits and programming libraries&lt;/h3&gt;

&lt;p&gt;I already blogged about the &lt;a href=&quot;http://rollerweblogger.org/roller/entry/rome_propono_0_6_released&quot;&gt;Propono 0.6&lt;/a&gt;, a Java-based client and server library for AtomPub, which has been updated for final spec. 

Since then the Apace Abdera project has released &lt;a href=&quot;http://www.nabble.com/-Announce--Apache-Abdera-0.3.0-t4577068.html&quot;&gt;Apache Abdera (incubating) 0.3 release&lt;/a&gt; is available with a long list of improvements and new features. 
There are also a couple of &lt;a href=&quot;http://www.snellspace.com/wp/?p=770&quot;&gt;usage&lt;/a&gt; &lt;a href=&quot;http://www.snellspace.com/wp/?p=773&quot;&gt;notes&lt;/a&gt; from James Snell. 

Also on the topic of Abdera, Dan Diephouse has done some work to make &lt;a href=&quot;http://netzooid.com/blog/2007/09/04/spring-abdera/&quot;&gt;Spring and Abdera&lt;/a&gt; work well together.
&lt;/p&gt;

&lt;p&gt;The Perl &lt;a href=&quot;http://search.cpan.org/~takeru/Atompub/lib/Atompub/Client.pm#NAME&quot;&gt;AtomPub::Client at CPAN&lt;/a&gt;&lt;span style=&quot;color:#3c3c3c;&quot;&gt; has updated for final AtomPub too.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;That&amp;#39;s all I&amp;#39;ve got for now. Did I miss any important AtomPub news?&lt;/p&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/blogapps_2_1_released</id>
        <title type="html">Blogapps 2.1 released</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/blogapps_2_1_released"/>
        <published>2007-10-02T21:49:40+00:00</published>
        <updated>2008-01-04T19:46:17+00:00</updated> 
        <category term="Java" label="Java" />
        <category term="app" scheme="http://roller.apache.org/ns/tags/" />
        <category term="atom" scheme="http://roller.apache.org/ns/tags/" />
        <category term="blogapps" scheme="http://roller.apache.org/ns/tags/" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jspwiki" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <category term="rss" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;&amp;lt;a href=
&amp;quot;http://www.amazon.com/dp/1932394494?tag=bloggingrolle-20&amp;link_code=as3&amp;creativeASIN=1932394494&amp;creative=373489&amp;camp=211189&amp;quot;&amp;gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/dmjohnson_3d.gif&quot; alt=&quot;RSS and Atom in Action image&quot; align=&quot;right&quot;&gt;
The next releases that I&amp;#39;d like to announce are the &lt;a href=&quot;http://blogapps.dev.java.net&quot;&gt;Blogapps&lt;/a&gt; 2.1 Examples and the Blogapps 2.1 Server.&lt;/p&gt;


&lt;p&gt;If you&amp;#39;d like to learn more about the Blogapps examples and server then read &lt;a href=&quot;http://today.java.net/pub/a/today/2006/10/17/the-blogapps-project.html&quot;&gt;The Blogapps Project&lt;/a&gt; article at Java.net. Here&amp;#39;s a quick summary:&lt;/p&gt;

&lt;blockquote&gt;
            The Blogapps project hosts a collection of &lt;b&gt;useful RSS and Atom utilities and 
            examples&lt;/b&gt; from &lt;a href=&quot;http://manning.com/dmjohnson&quot;&gt;RSS and Atom In Action&lt;/a&gt; 
            by Dave Johnson.  They&amp;#39;re 
            designed to be useful even if you haven&amp;#39;t read the book and they&amp;#39;re available 
            under the Apache License 2.0 so you can use the code in your applications and 
            you can modify and redistribute them as you wish. 
&lt;/blockquote&gt;

&lt;p&gt;What&amp;#39;s changed since 2.0? The examples have been updated to include the latest version of ROME Propono, which means that most of them now support the final Atom protcol spec. The server has been updated to include Roller 4.0 RC5, which also includes Atom protocol support and JSPWiki 2.4. And of course, various bugs have been fixed. Here are the release files, installation instructions and release notes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/server.html&quot;&gt;Blogapps server install instructions&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70491/blogapps-server-2.1.tar.gz&quot;&gt;Blogapps Server-2.1.tar.gz&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70516/blogapps-server-2.1.zip&quot;&gt;Blogapps-Server-2.1.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/java/blogapps_2.x/README.html&quot;&gt;Blopapps example release notes&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70489/blogapps-java-examples-2.1.tar.gz&quot;&gt;Blogapps-Examples-2.1.tar.gz&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blogapps.dev.java.net/files/documents/4151/70490/blogapps-java-examples-2.1.zip&quot;&gt;Blogapps Examples-2.1.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This blog entry was posted via Atom protocol and the MatisseBlogger blog-client, which you can see in the screen-shot below (which was also posted via Atom.&lt;/p&gt;

&lt;a href=&quot;http://rollerweblogger.org/roller/resource/roller-2007100222411.jpg&quot;&gt;
   &lt;img src=&quot;http://rollerweblogger.org/roller/resource/matisse-blogger-2.1.jpg&quot; alt=&quot;screenshot of MatisseBlogger&quot;&gt;
&lt;/a&gt;

&lt;p&gt;What&amp;#39;s next? Not sure at this point, but I will do another Blogapps release once ROME 1.0 is released.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/apachecon_us_2007_early_bird</id>
        <title type="html">ApacheCon US 2007 - still time to be an early bird</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/apachecon_us_2007_early_bird"/>
        <published>2007-09-07T18:48:10+00:00</published>
        <updated>2008-01-04T19:46:10+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="apachecon" scheme="http://roller.apache.org/ns/tags/" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://us.apachecon.com&quot;&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/apachecon2007_logo.png&quot; alt=&quot;ApacheCon US 2007 logo&quot;&gt;&lt;/a&gt;

&lt;p&gt;ApacheCon is coming up fast. I just faxed in my speaker&amp;#39;s agreement and I&amp;#39;m starting to update my &lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/2023&quot;&gt;talk&lt;/a&gt; to cover the latest changes in the upcoming Apache Roller 4.0 and 4.1 releases.&lt;/p&gt;

&lt;p&gt;I&amp;#39;ve been four times now and ApacheCon is always a great conference. It&amp;#39;s small and cozy enough, but almost all of the Apache projects are represented. So it&amp;#39;s easy to find the experts, make new friends and get all of your questions answered. The session line-up looks great this year; here are ones that caught my eye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1913&quot;&gt;
    Hacking Atom with Apache Abdera&lt;/a&gt; - Garret Rooney&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/2012&quot;&gt;
    A little REST and Relaxation&lt;/a&gt; - Roy Fielding&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1882&quot;&gt;
    WS-* vs. REST: Facts, Myths and Lies&lt;/a&gt; - Sanjiva Weerawarana&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/2058&quot;&gt;
    Go Light with Apache Struts 2 and REST&lt;/a&gt; - Don Brown&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1971&quot;&gt;
    How to Run a Business Around The ASF&lt;/a&gt; 
    - Sanjiva Weerawarana&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1990&quot;&gt;
    Open Source Community Anti-Patterns&lt;/a&gt; - Ted Leung&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1985&quot;&gt;
    RIAs using Apache Derby and Comet&lt;/a&gt; 
    - Jeanfrancois Arcand &amp;amp; Francois Orsini&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1982&quot;&gt;
    Apache Derby - Saucer Separation&lt;/a&gt; - Rick Hillegas&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://us.apachecon.com/us2007/program/talk/1956&quot;&gt;
    JCR in Action - Content-based Applications with Apache Jackrabbit&lt;/a&gt;
    - Carsten Ziegeler&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to go? There&amp;#39;s still time to shave a couple of hundred dollars off the conference fees by registering early. Early bird pricing has been extended to Sept. 22, 2007.&lt;/p&gt;

&lt;p&gt;And the Weston looks like a pretty nice place for a conference:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://rollerweblogger.org/roller/resource/peachtree-westin-atlanta.jpg&quot; alt=&quot;Westin hotel&quot;&gt;&lt;/p&gt;

&lt;a href=&quot;http://us.apachecon.com&quot;&gt;ApacheCon US 2007&lt;/a&gt; | &lt;a href=&quot;http://guest.cvent.com/i.aspx?5S,M3,5356863a-01a0-4859-b0d3-35153b04110e&quot;&gt;Register here&lt;/a&gt;&lt;br&gt;
November 12-16, 2007&lt;br&gt;
&lt;a href=&quot;http://www.Westin.com/Peachtree&quot;&gt;Westin Peachtree Plaza&lt;/a&gt;&lt;br&gt;
Atlanta, Georgia&lt;br&gt;


</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_strong_8</id>
        <title type="html">Roller Strong #8</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_strong_8"/>
        <published>2007-08-14T10:20:17+00:00</published>
        <updated>2008-01-04T19:46:04+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
&lt;img src=&quot;http://rollerweblogger.org/roller/resource/roller-cartoon-140x126.png&quot; alt=&quot;cartoonish steam roller flying a 4.0 flag&quot; align=&quot;right&quot;&gt;

It&amp;#39;s been a couple of weeks since the last Roller Strong because I&amp;#39;ve been very busy with 4.0 and some other new projects. Plus, I was getting a little tired of saying &amp;quot;we&amp;#39;re still working on 4.0.&amp;quot; So now I&amp;#39;m happy to report that &lt;i&gt;release candidates have been made available for upcoming Apache Roller 4.0 release&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;It should be very easy to try out the new release because we spent a lot of time focusing on a new easy-install process, plus there is no need to download a separate bundle of Hibernate files as Roller no longer uses Hibernate. With the new easy-install, installation should be as easy as editing four settings in a small configuration file and dropping the WAR into Tomcat or Glassfish.&lt;/p&gt;

&lt;p&gt;
Below are some links to the 4.0 RC1 release files.&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://people.apache.org/~snoopdave/apache-roller-4.0/apache-roller-4.0-rc1.tar.gz&amp;quot;&amp;gt;apache-roller-4.0-rc1.tar.gz
(&lt;a href=&quot;http://people.apache.org/~snoopdave/apache-roller-4.0/apache-roller-4.0-rc1.tar.gz.asc&quot;&gt;key&lt;/a&gt;)
&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://people.apache.org/~snoopdave/apache-roller-4.0/apache-roller-4.0-rc1.zip&amp;quot;&amp;gt;apache-roller-4.0-rc1.zip
(&lt;a href=&quot;http://people.apache.org/~snoopdave/apache-roller-4.0/apache-roller-4.0-rc1.zip.asc&quot;&gt;key&lt;/a&gt;)
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;What&amp;#39;s new in Roller 4.0&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://opensource.atlassian.com/projects/roller/secure/ReleaseNote.jspa?projectId=10000&amp;amp;styleName=Html&amp;amp;version=10270&amp;quot;&amp;gt;Roller 4.0 Change list in JIRA
&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://people.apache.org/~snoopdave/apache-roller-4.0/roller-install-guide.pdf&amp;quot;&amp;gt;Roller 4.0 Installation Guide (PDF)
&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://people.apache.org/~snoopdave/apache-roller-4.0/roller-user-guide.pdf&amp;quot;&amp;gt;Roller 4.0 User Guide (PDF)
&lt;/li&gt;

&lt;li&gt;&amp;lt;a href=
&amp;quot;http://people.apache.org/~snoopdave/apache-roller-4.0/roller-template-guide.pdf&amp;quot;&amp;gt;Roller 4.0 Template Guide (PDF)
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Keep in mind that 4.0 RC1 is not an official Apache release and is meant for testing only. Even so, this is probably a pretty solid release. The .Sun Engineering team put the code into production at at blogs.sun.com over a month ago and my coworkers on the Sun App Platform team just put the code through a couple weeks of testing.&lt;/p&gt;

&lt;p style=&quot;font-weight:bold;&quot;&gt;rollerthemes.com&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://rollerthemes.com/&quot;&gt;&amp;lt;img src=&amp;quot;http://rollerweblogger.org/roller/resource/roller-themes.png&amp;quot; 
alt=&amp;quot;screenshot of rollerthemes.com&amp;quot; align=&amp;quot;right&amp;quot; /&amp;gt;&lt;/a&gt;

Big thanks to Gene Strokine! As seen on &lt;a href=&quot;http://raibledesigns.com/rd/entry/roller_themes&quot;&gt;raibledesigns.com&lt;/a&gt;, Gene has been busy with Roller theme development and has started a new site &lt;a href=&quot;http://rollerthemes.com/&quot;&gt;rollerthemes.com&lt;/a&gt; to promote his work. Gene is also the newest committer on the &lt;a href=&quot;http://roller.dev.java.net&quot;&gt;Roller Support&lt;/a&gt; project at Java.net and has committed many of his themes there (they still need to be upgraded to work with 4.0 though).&lt;/p&gt;

&lt;p style=&quot;font-weight:bold;&quot;&gt;Notes on Roller and JA-SIG CAS SSO&lt;/p&gt;

&lt;p&gt;And Phillip Rhodes &lt;a href=&quot;http://www.jroller.com/mindcrime/entry/success_roller_weblogger_and_javabb&quot;&gt;reports success&lt;/a&gt; integrating Roller and JavaBB with single-sign on via &lt;a href=&quot;http://www.ja-sig.org/products/cas/&quot;&gt;JA-SIG CAS&lt;/a&gt; and has plans for additional identity related work. He has posted his &lt;a href=&quot;http://www.nabble.com/example-config-for-using-CAS-for-SSO-with-Roller-p12102132s12275.html&quot;&gt;notes on Roller and CAS/SSO&lt;/a&gt; to the Roller dev list.&lt;/p&gt;

&lt;p style=&quot;font-weight:bold;&quot;&gt;JRoller.com troubles&lt;/p&gt;

&lt;p&gt;In the &amp;quot;OK, so maybe Roller ain&amp;#39;t so strong&amp;quot; department, JRoller.com has been having problems with Roller 3.1. Matt Schmidt upgraded JRoller.com from Roller 2.0 to Roller 3.1 a couple of weeks back and ran into database connection pool problems, which were resolved by switching back from Tomcat to Resin. Now he&amp;#39;s dealing with some explosive memory usage and &amp;lt;a href=
&amp;quot;http://www.javalobby.org/java/forums/t99490.html&amp;quot;&amp;gt;asking for help from the Javalobby community.&lt;/p&gt;

&lt;p style=&quot;font-weight:bold;&quot;&gt;Coming soon: a Geronimo plugin for Roller&lt;/p&gt;

&lt;p&gt;Our Geronimo friends David Jencks and Peter Peterssen stopped by the Roller-dev list this month to contribute some code to make it easier for Roller to work in Apache Geronimo. They&amp;#39;re cookin&amp;#39; up a Geronimo plugin for Roller and I&amp;#39;m looking forward to seeing it in action.&lt;/p&gt;

&lt;p style=&quot;font-weight:bold;&quot;&gt;In other news...&lt;/p&gt;

&lt;p&gt;One final note. We&amp;#39;ve made a bunch of fixes to 3.1 so we also have a new RC available for the upcoming Apache Roller 3.1.1 fix release. You can find the &lt;a href=&quot;http://people.apache.org/~snoopdave/apache-roller-3.1.1/&quot;&gt;RC files for 3.1.1&lt;/a&gt; in my Apache site and the &lt;a href=&quot;http://opensource.atlassian.com/projects/roller/secure/ReleaseNote.jspa?projectId=10000&amp;amp;styleName=Html&amp;amp;version=10282&quot;&gt;change list&lt;/a&gt; in JIRA.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/atom_protocol_has_been_finalized</id>
        <title type="html">Atom protocol has been finalized</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/atom_protocol_has_been_finalized"/>
        <published>2007-07-24T17:21:09+00:00</published>
        <updated>2007-07-25T00:21:09+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="atomprotocol" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="propono" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;Good news today from Tim Bray: &lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2007/07/24/Atom-is-Finished&quot;&gt;Atom protocol has been finalized&lt;/a&gt;. The final version of the spec is going to be &lt;a href=&quot;http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-17.html&quot;&gt;Atom protocol draft #17&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Instead of staying up until the dawn hours (not naming names) reading the final Harry Potter book, I spent most of the weekend working on bringing &lt;a href=&quot;http://wiki.java.net/bin/view/Javawsxml/RomePropono&quot;&gt;Propono&lt;/a&gt; in-line with the draft #17 and in particular adding support for out-of-line categories and relative URIs. I&amp;#39;ve got code ready to commit that passes Tim&amp;#39;s &lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2006/08/11/Meet-the-Ape&quot;&gt;Ape&lt;/a&gt; tests, so hopefully we&amp;#39;ll have a new Propono 0.6 release ready very soon that supports the final spec.&lt;/p&gt;

&lt;p&gt;Roller&amp;#39;s Atom protocol implementation is already up to date and passing Ape tests, so Roller 4.0 will be Atom protocol ready. I still need to do a little work to document the setup.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_strong_4</id>
        <title type="html">Roller Strong #4</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_strong_4"/>
        <published>2007-06-23T12:19:13+00:00</published>
        <updated>2008-01-04T19:46:41+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;div style=&quot;border:1px solid rgb(68, 68, 68);padding:3px;float:right;text-align:right;font-size:xx-small;margin-bottom:30px;margin-left:30px;&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Roller&quot;&gt;
&lt;img width=&quot;180&quot; height=&quot;240&quot; border=&quot;0&quot; alt=&quot;Lilac breasted Roller&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/LilacBreastedRollerCropped.jpg/200px-LilacBreastedRollerCropped.jpg&quot;&gt;&lt;/a&gt;
&lt;br&gt;
Lilac-breasted Roller by David Meeker
&lt;/div&gt;




&lt;p&gt;Not too much to report this week...&lt;/p&gt;&lt;p&gt;Matt Raible gave his &lt;a href=&quot;http://raibledesigns.com/rd/entry/webinar_on_wednesday_introduction_to&quot;&gt;Introduction to Apache Roller webinar&lt;/a&gt;
on Wednesday. Most unforunately, I was unable to break out of my
Wednesday meeting marathon to attend. At some point Matt says he&amp;#39;ll
post his slides to the Roller wiki.&lt;/p&gt;&lt;p&gt; In Roller development we wrapped up work on the new &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Proposal+Easy+Install&quot;&gt;Roller EZ install&lt;/a&gt;, which makes it really easy to install Roller -- just set four properties, deploy roller.war and Roller will start up, creating or upgrading tables as needed. &lt;/p&gt;&lt;p&gt;Also, my &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Proposal+Introduce+DI+with+Guice&quot;&gt;Guice proposal&lt;/a&gt; gained consensus and I merged the work into the Roller trunk just this morning. As of now, I believe we&amp;#39;re feature complete for Roller 4.0.&lt;/p&gt;&lt;p&gt;Tune in next week and perhaps I&amp;#39;ll have something to say about release. It&amp;#39;s about time to start getting 3.1.1 and 4.0 release candidates ready.&lt;br&gt; &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/reminder_covalent_s_roller_webinar</id>
        <title type="html">Reminder: Covalent&amp;#39;s Roller webinar is tomorrow</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/reminder_covalent_s_roller_webinar"/>
        <published>2007-06-19T17:25:27+00:00</published>
        <updated>2008-01-04T19:45:58+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="covalent" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">Roller fans don&amp;#39;t forget, Covalent&amp;#39;s Introduction to Apache Roller webinar is tomorrow, Wednesday June 20 at 2PM ET. Raible has the &lt;a href=&quot;http://raibledesigns.com/rd/entry/webinar_on_wednesday_introduction_to&quot;&gt;details&lt;/a&gt;. &lt;br&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/powered_by_struts2_and_openjpa</id>
        <title type="html">Powered by Struts2 and OpenJPA</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/powered_by_struts2_and_openjpa"/>
        <published>2007-06-18T13:06:25+00:00</published>
        <updated>2007-06-18T20:06:26+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="foss" scheme="http://roller.apache.org/ns/tags/" />
        <category term="hibernate" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="jpa" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;I stayed up a little too late last night upgrading this site (&lt;a href=&quot;http://rollerweblogger.org&quot;&gt;rollerweblogger.org&lt;/a&gt;) to the latest &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;Roller 4.0&lt;/a&gt; code base, which includes the new Struts2 based Admin UI and a new OpenJPA based back-end. No more Hibernate for me. The upgrade was a bit of a rocky road, but the site seems to be working OK now.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_strong_3</id>
        <title type="html">Roller Strong #3</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_strong_3"/>
        <published>2007-06-15T23:07:30+00:00</published>
        <updated>2007-06-16T08:40:02+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="blogging" scheme="http://roller.apache.org/ns/tags/" />
        <category term="bsc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="esri" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gis" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;&lt;a href=&quot;http://blogs.sun.com&quot;&gt;&lt;img vspace=&quot;0&quot; hspace=&quot;0&quot; border=&quot;0&quot; align=&quot;left&quot; src=&quot;http://rollerweblogger.org/roller/resource/bsc-banner.png&quot;&gt;&lt;/a&gt;This week was a big week for Roller, development and deployment-wise. As you may already know from &lt;a href=&quot;http://blogs.sun.com/lskrocki/entry/roller_4_0_now_live&quot;&gt;Linda Skrocki&amp;#39;s blog&lt;/a&gt;, Roller 4.0 went live this week at the premier corporate blogging site &lt;a href=&quot;http://blogs.sun.com&quot;&gt;blogs.sun.com&lt;/a&gt; (BSC) with some nice new themes, easier blog customization and a UI that has been completely rewritten to do use Struts2. Check the &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0&quot;&gt;What&amp;#39;s New in Roller 4.0&lt;/a&gt; page to learn more about the upcoming release.&lt;/p&gt;&lt;p&gt;But don&amp;#39;t get too excited, you can&amp;#39;t download Roller 4.0 just yet. Sun deployed a pre-release version of Roller and if you want to do the same, you&amp;#39;ll either have to build it yourself or wait for the official Apache Roller 4.0 release coming out this summer. And don&amp;#39;t be too disappointed, that&amp;#39;s one of the nice things about Roller: before we make a release, the code is battle tested on blogs.sun.com. Big thanks to .Sun Engineering for that.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://blogs.esri.com&quot;&gt;&lt;img vspace=&quot;0&quot; hspace=&quot;0&quot; border=&quot;0&quot; align=&quot;right&quot; src=&quot;http://rollerweblogger.org/roller/resource/esri-blogs-banner.png&quot;&gt;&lt;/a&gt;A couple folks wrote into to tell me that GIS software developer&lt;span style=&quot;text-decoration:underline;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://www.esri.com/&quot;&gt;ESRI&lt;/a&gt; is blogging with Roller, something I&amp;#39;ve been meaning to mention for quite some time. In fact, I&amp;#39;ve been meaning to mention it for over a year and now it&amp;#39;s time to wish ESRI a happy 1st blogaversary. Man, how time flies.&lt;br&gt;&lt;/p&gt;&lt;p&gt;That&amp;#39;s it for this weeks installment of Roller Strong. Y&amp;#39;all come back now.&lt;br&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/roller_strong_2</id>
        <title type="html">Roller Strong #2</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/roller_strong_2"/>
        <published>2007-06-08T17:43:30+00:00</published>
        <updated>2008-01-04T19:45:50+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="foss" scheme="http://roller.apache.org/ns/tags/" />
        <category term="java" scheme="http://roller.apache.org/ns/tags/" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;div style=&quot;border:1px solid rgb(68, 68, 68);padding:3px;float:right;text-align:right;font-size:xx-small;margin-bottom:30px;margin-left:30px;&quot;&gt;
&lt;a href=&quot;http://flickr.com/photos/mtl_shag/32034163/&quot;&gt;
&lt;img width=&quot;180&quot; height=&quot;240&quot; border=&quot;0&quot; alt=&quot;Vampire (Roller coaster)&quot; src=&quot;http://farm1.static.flickr.com/22/32034163_bdb9966858_m.jpg&quot;&gt;&lt;/a&gt;
&lt;br&gt;
Â© &lt;a href=&quot;http://flickr.com/photos/mtl_shag/&quot;&gt;Oliver Mallich&lt;/a&gt;
&lt;/div&gt;

Welcome to the second edition of Roller Strong. This has been a busy week for me with a silly number of telecons, but I&amp;#39;ve still managed to keep up with Roller events and even get a little development done so here&amp;#39;s the Roller news round-up.&amp;nbsp;&lt;p&gt;First, an announcement from Covalent. They&amp;#39;ve rescheduled their &lt;a href=&quot;https://osgroupllc.on.raindance.com/confmgr/&quot;&gt;Apache Roller webinar&lt;/a&gt; with &lt;a href=&quot;http://raibledesigns.com/&quot;&gt;Matt Raible&lt;/a&gt; to June 20.&lt;br&gt; &lt;/p&gt;&lt;p&gt;A couple of new users showed up on the Roller mailing-list this week. One was Ryan Delaplante who wrote about his Roller installation experience and the nice new theme he developed on his blog &lt;a rel=&quot;nofollow&quot; href=&quot;http://www.ryandelaplante.com/rdelaplante/entry/talk_about_how_i_made&quot;&gt;ryandelaplante.com&lt;/a&gt;. Jason Johnson stopped by to tell us about the new Roller-based blogging system at the University of South Dakota &lt;a href=&quot;http://blogs.usd.edu&quot;&gt;blogs.usd.edu&lt;/a&gt;. They&amp;#39;ve got some looking themes there too, check out Astra &lt;a href=&quot;http://blogs.usd.edu/jrbethke/entry/astrablue_template&quot;&gt;blue&lt;/a&gt; and &lt;a href=&quot;http://blogs.usd.edu/jrbethke/entry/astrared_template&quot;&gt;red&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;In the blogs, here&amp;#39;s a post for Sun bloggers only from Rich Sharples: &lt;a rel=&quot;nofollow&quot; href=&quot;http://blogs.sun.com/sharps/entry/openid_delegation_with_roller_take&quot;&gt;OpenID Delegation with Roller (take 2)&lt;/a&gt;. Rich explains how to setup your Roller-based blog as a proxy for your Sun OpenID account.&lt;/p&gt;&lt;p&gt;In development, we&amp;#39;re still finishing up the Roller 4.0 release. Most commits this week are coming from Allen who is working on bug fixes across the board. I&amp;#39;ve been making slow and steady progress on the Roller easy install work. Also, if you look at the Subversion logs you&amp;#39;ll see that I&amp;#39;m working in a separate branch to implement Dependency Injection (DI) in Roller via Google&amp;#39;s &lt;a href=&quot;http://code.google.com/p/google-guice/&quot;&gt;Guice&lt;/a&gt;. I&amp;#39;m almost ready to show-and-tell with a &lt;a href=&quot;http://cwiki.apache.org/confluence/display/ROLLER/Proposal+Introduce+DI+with+Guice&quot;&gt;proposal&lt;/a&gt;. Denis Balazuc has also created a &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/roller-dev/200706.mbox/%3c4662379C.5010500@balazuc.net%3e&quot;&gt;DI implementation&lt;/a&gt; using Spring, so we may have some interesting discussions next week.&lt;/p&gt;&lt;p&gt;No significant news about releases this week. We&amp;#39;ve probably got enough fixes to justify a Roller 3.1.1 release, but nobody has prepared a release candidate yet. I might be able to do one next week. &lt;br&gt; &lt;/p&gt;&lt;p&gt;That&amp;#39;s it for this edition. Have a great weekend.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Roller Strong Disclaimer: this is a personal blog and I do not speak on behalf of Sun Microsystems or the Apache Software Foundation.&amp;nbsp;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://rollerweblogger.org/roller/entry/apache_roller_webinar</id>
        <title type="html">Apache Roller webinar from Covalent</title>
        <author><name>Dave Johnson</name></author>
        <link rel="alternate" type="text/html" href="https://rollerweblogger.org/roller/entry/apache_roller_webinar"/>
        <published>2007-05-23T23:12:43+00:00</published>
        <updated>2007-05-24T06:12:43+00:00</updated> 
        <category term="Roller" label="Roller" />
        <category term="roller" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;a href=&quot;http://www.covalent.net/&quot;&gt;Covalent&lt;/a&gt; is presenting a web presentation titled &amp;quot;Introduction to Apache Roller&amp;quot; that will cover Roller architecture, features, installation, customization and road-map with Roller committer and blogger &lt;a href=&quot;http://raibledesigns.com/&quot;&gt;Matt Raible&lt;/a&gt;. The presentation is on June 6 at&amp;nbsp; 11AM Pacific Time. You can sign up at &lt;a href=&quot;https://osgroupllc.on.raindance.com/confmgr/&quot;&gt;raindance.com&lt;/a&gt;.</content>
    </entry>
</feed>

