Blogging Roller http://rollerweblogger.org/page/roller Dave Johnson on software development, Java, and the Roller Weblogger project. en-us Copyright 2005 Fri, 18 Feb 2005 09:35:48 EST Roller Weblogger 1.0.1 (20050208013657:dave) Write about anything <blockquote><a href="http://blogs.sun.com/roller/comments/paulhu/Weblog/tips_for_bloggers_i_do">Paul Humphreys</a>: Jonathan wants Sun employees to blog. The title on the blogs.sun.com page says 'Welcome to Blogs.sun.com! This space is accessible to any Sun employee to write about anything.' It really is true. I do not get reminder or requests from anyone that I must write wonderful things about Sun, increase my technical content and not to write about random things that no one has any interest in.</blockquote> People I meet have a hard time believing that "write about anything bit" but it's true. I'd like to see every company, every organization in fact, adopt something like Tim's <a href="http://www.tbray.org/ongoing/When/200x/2004/05/02/Policy">Policy on Public Discourse</a>. Blogging http://rollerweblogger.org/page/roller/20050218#write_about_anything http://rollerweblogger.org/page/roller/20050218#write_about_anything http://rollerweblogger.org/page/roller?anchor=write_about_anything Fri, 18 Feb 2005 09:35:48 EST David M Johnson Notes from the Chapel Hill Blog Together meet-up <p /> <a href="http://mistersugar.com/blogtogether/article/8/chapel-hill-meetup-21605-notes">Anton</a> posted some notes about the first Chapel Hill Blog Together meet-up. It was held Wednesday at the tiny <a href="http://www.caffedriade.com/">Caffe Driade</a>, a <a href="http://www.caffedriade.com/images/13.jpg">bunker in the woods</a> off of Franklin Street that has been converted in to a cute little coffee bar. <p /> It was really cool to meet a bunch of very enthusiastic bloggers from my hometown. These folks are revved up about using blogs for important things like community activism, social change, and health care. Yes, health care. I met a new Roller user: <a href="http://virgo.cit.nih.gov:4080/roller/page/bglassmanblog/Weblog">Bernard Glassman</a> of the National Cancer Research Institute is using Roller as part of a project to help patients share experiences and educate each about treatment options. <p /> As <a href="http://justinsomnia.org/" title="justinsomnia.org" >Justin</a> <a href="http://mistersugar.com/blogtogether/article/8/chapel-hill-meetup-21605-notes">said</a>, "what an excellent cross-section of the community." Inspirational, even. Chapel Hill is a 35 mile drive for me, but I'll be back.</p> Blogging http://rollerweblogger.org/page/roller/20050218#notes_from_the_chapel_hill http://rollerweblogger.org/page/roller/20050218#notes_from_the_chapel_hill http://rollerweblogger.org/page/roller?anchor=notes_from_the_chapel_hill Fri, 18 Feb 2005 09:27:37 EST David M Johnson "there should be no standard [wiki] syntax" <p>First google result for: <a href="http://www.google.com/search?q=standard+wiki+syntax">standard wiki syntax</a></p> <p>Is "no standard syntax" really a good thing? When the wiki itself is the user interface, perhaps it is, but if you want the user interface to be a slick WYSIWYG desktop client that edits any wiki via Atom, then having a different syntax for each wiki really sucks.</p> Blogging http://rollerweblogger.org/page/roller/20050218#there_should_be_no_standard http://rollerweblogger.org/page/roller/20050218#there_should_be_no_standard http://rollerweblogger.org/page/roller?anchor=there_should_be_no_standard Fri, 18 Feb 2005 09:03:55 EST David M Johnson Triangle blogger con 2005 links <p /> <a href="http://www.loebrich.org/2005/02/13/blog_together_triangle_bloggers_conference_2005.html">Bruce</a> has a great list of links about the Triangle Blogger conference. The first weekly Triangle blogger meet-up</a> is tonight at Caffe Driade in Chapel Hill (<a href="http://blogtogether.mistersugar.com/blogtogether/article/3/chapel-hill-meetup-21605">Anton Zuiker</a> has the details). General http://rollerweblogger.org/page/roller/20050216#triangle_blogger_con_links http://rollerweblogger.org/page/roller/20050216#triangle_blogger_con_links http://rollerweblogger.org/page/roller?anchor=triangle_blogger_con_links Wed, 16 Feb 2005 08:58:09 EST David M Johnson Clearly see the big three <p /> <img src="http://www.rollerweblogger.org/resources/roller/google-share-02-05.gif" alt="pie chart of blog server market share" /> <p> "Interesting analysis of the market share of the popular blogging tools by Elise Bauer." She used Google to gather the statistics. From <a href="http://www.threadwatch.org/node/1485"> Threadwatch.org</a> via Scoble. </p> Roller http://rollerweblogger.org/page/roller/20050216#clearly_see_the_big_three http://rollerweblogger.org/page/roller/20050216#clearly_see_the_big_three http://rollerweblogger.org/page/roller?anchor=clearly_see_the_big_three Wed, 16 Feb 2005 08:46:54 EST David M Johnson Planet Roller internals <p>I promised some details on PlanetTool (the command-line tool that generates <a href="http://rollerweblogger.org/planet">Planet Roller</a>) internals, so here goes. This is what happens when PlanetTool runs:</p> <img src="http://www.rollerweblogger.org/resources/roller/aggregator.png" alt="diagram of PlanetTool" > <p /> <b>Startup</b> <p><b>(1)</b> We start by reading the XML configuration file (via JDOM and XPath)</p> <p><b>(2)</b> From the config, we create a config object, subscriptions and groups</p> <p><b>(3)</b> A group has subscriptions</p> <p><b>(4)</b> And a subscription can belong to more than one group</p> <b>Refresh subscription data</b> <p><b>(5)</b> For each subscription, call the Rome Fetcher</p> <p><b>(6)</b> Fetcher uses Conditional Get and Etags and caches feeds on disk</p> <p><b>(7)</b> Feeds parsed into entries objects and added to subscription objects</p> <b>File generation</b> <p><b>(8)</b> Call Velocity Texen with name of a control template</p> <p><b>(9)</b> Texen calls our control template</p> <p><b>(10)</b> Control template calls file generation templates</p> <p><b>(11)</b> Templates calls planet object to get config, group, subscription, and entry objects needed to generates files needed for aggregated site (HTML, RSS, OPML, etc.)</p> Blogging http://rollerweblogger.org/page/roller/20050215#planet_roller_internals http://rollerweblogger.org/page/roller/20050215#planet_roller_internals http://rollerweblogger.org/page/roller?anchor=planet_roller_internals Tue, 15 Feb 2005 08:42:17 EST David M Johnson Turning the paper into a community forum <blockquote> <a href="http://dangillmor.typepad.com/dan_gillmor_on_grassroots/2005/02/the_news_record.html">Dan Gillmor on Grassroots Journalism, Etc.: The News & Record</a>: "As noted here before, the News & Record, the newspaper of record in Greensboro, North Carolina, is embarking on one of mainstream journalism's most important experiments: turning the paper into a community forum, 'to build a Web presence that invites readers in to share the news they know and engage in the civic discussion,' as John Robinson, the paper's editor wrote on his blog. (See online editor Lex Alexander's <a href="http://blog.news-record.com/staff/lexblog/archives/2005/01/newsrecordcom_a_1.html">memo</a>, chock-full of ideas, for more.)" </blockquote> What about the stodgy old Raleigh N&amp;O? <a href="http://www.newsobserver.com/member_center/rss/">Newsobserver.com</a> has newsfeeds now, I guess that's a start. By the way, the N&amp;O newsfeeds are not really hidden behind the registration wall, anybody can get them. Here is the current list:</p> <table border="0" width="60%" align="center"> <tr> <td width="30%"> <a href="http://apps.newsobserver.com/rss/rss1.xml">News</a><br /> <a href="http://apps.newsobserver.com/rss/rss2.xml">Politics</a><br /> <a href="http://apps.newsobserver.com/rss/rss3.xml">Business</a><br /> <a href="http://apps.newsobserver.com/rss/rss4.xml">Sports</a><br /> <a href="http://apps.newsobserver.com/rss/rss5.xml">College Sports</a><br /> </td> <td width="30%"> <a href="http://apps.newsobserver.com/rss/rss6.xml">Duke</a><br /> <a href="http://apps.newsobserver.com/rss/rss7.xml">NCSU</a><br /> <a href="http://apps.newsobserver.com/rss/rss8.xml">UNC</a><br /> <a href="http://apps.newsobserver.com/rss/rss9.xml">WFU</a><br /> <a href="http://apps.newsobserver.com/rss/rss10.xml">ECU</a><br /> </td> <td width="30%"> <a href="http://apps.newsobserver.com/rss/rss11.xml">Preps</a><br /> <a href="http://apps.newsobserver.com/rss/rss12.xml">Canes</a><br /> <a href="http://apps.newsobserver.com/rss/rss13.xml">Lifestyles</a><br /> <a href="http://apps.newsobserver.com/rss/rss14.xml">Opinion</a><br /> </td> </tr> </table> Story via <a href="http://radio.weblogs.com/0107946/2005/02/14.html#a3404">Ed Cone</a>. <p /> Blogging http://rollerweblogger.org/page/roller/20050214#turning_the_paper_into_a http://rollerweblogger.org/page/roller/20050214#turning_the_paper_into_a http://rollerweblogger.org/page/roller?anchor=turning_the_paper_into_a Mon, 14 Feb 2005 11:52:40 EST David M Johnson Couple of notes from the Triangle blogger con <p>I attended the Triangle Bloggers Conference 2005 on Saturday morning in Chapel Hill. The meeting was held in a classroom large enough to accommodate the approximately 150 people in attendance, power in every seat, and wireless internet. The agenda was divided into three portions, but the conference was really one long, seamless, and very interesting conversation between audience members and the speakers. The theme was using blogs to build community, how to build a larger readership for your blog, how to use blogs in grassroots journalism. Here are a couple of the things I wrote down (these are not 100% accurate quotes): <ul> <li><a href="http://radio.weblogs.com/0128341/2004/12/28.html">David Hoggard</a>: You've heard of 'dancing like nobody is watching' -- you've got blog like nobody is reading if you want to get your authentic voice out there. </li><li> <a href="http://scripting.com">Dave Winer</a>: Why do you care about being popular? Bloggers don't need readers. Bloggers are documenting the human knowledge base and making expertise available that was previously only available to the press and big institutions. </li><li> <a href="http://www.lotusmedia.org/blog/">Ruby Sinreich</a>: blogs will never replace the mainstream media, their role is to watchdog the media and that is a good place to be. Few people will get their news from blogs, but those that do are journalists, politicians, activists -- people who can make a difference. </li><li> <a href="http://www.mathewgross.com/blog/">Matt Gross</a>: On the Blog for America site, approximately 5% of visitors would click on the comments link and 1% would leave a comment. </li> </ul> <p>I also got a chance to talk to folks about corporate blogs at SAS and IBM (both have some internal Roller sites) and student blogs at UNC. I also spent some time talking to Roch Smith, the man behind the <a href="http://www.greensboro101.com/mod/info/display/contact/index.php">Greensboro 101</a> community aggregator. All and all it was a great experience. I learned a lot about blogging and I feel a little more connected to my hometown and the Triangle in general. Thanks to <a href="http://mistersugar.com/">Anton Zuiker</a>, <a href="http://www.ibiblio.org/pjones/wordpress/">Paul Jones</a>, and everybody else who helped put it together. More information, check <a href="http://mistersugar.com:2538/blogtogether/show/live+blogging+the+conference">here</a> and <a href="http://www.technorati.com/cosmos/search.html?rank=&amp;url=http%3A%2F%2Fmistersugar.com%3A2538%2Fblogtogether%2Fshow%2FTriangle%2BBloggers%2BConference%2B2005">here</a>.</p> Blogging http://rollerweblogger.org/page/roller/20050213#couple_of_notes_from_the http://rollerweblogger.org/page/roller/20050213#couple_of_notes_from_the http://rollerweblogger.org/page/roller?anchor=couple_of_notes_from_the Sun, 13 Feb 2005 22:17:59 EST David M Johnson Rome + Texen = Planet Roller <BR /> <BR /> After a couple days of hacking with the Rome Fetcher and Velocity Texen, <A CLASS="external" HREF="http://www.rollerweblogger.org/planet/roller.html">Planet Roller</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> is born. <P> Planet Roller is currently a command-line line tool that reads a configuration file of newsfeed subscription data, then generates an aggegated weblog with an <A CLASS="external" HREF="http://rollerweblogger.org/planet/roller.rss">RSS feed</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" />, and an <A CLASS="external" HREF="http://rollerweblogger.org/planet/roller.opml">OPML listing</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> of all subscriptions. It's essentially a Java version of <A CLASS="external" HREF="http://www.planetplanet.org/">Planet Planet</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" />. I've got it set up to run every 30 mintues. Yes, I'm aware that the RSS gets a warning on <A CLASS="external" HREF="http://feedvalidator.org/check.cgi?url=http%3A%2F%2Frollerweblogger.org%2Fplanet%2Froller.rss">validation</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" />. No, I haven't added newsfeed autodiscovery yet. Yes, I stole <A CLASS="external" HREF="http://www.dme.org/">David Edmondson</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" />'s Planet Sun theme.&nbsp; No, I haven't done any testing on the OPML. Enough questions already! I need to get back to work. <P> I'll be adding a couple more details to this post as the night progresses. <P> OK, I'm back. Did I mention that Planet Roller is a <A CLASS="external" HREF="http://www.rollerweblogger.org/page/roller/20040201">community aggregator</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" />, a &quot;A Community Aggregator is a portal-like web application that displays weblog posts from a group of closely related but separately hosted weblogs and provides synthetic newsfeeds so that readers may subscribe to the group as a whole.&quot; <P> <B>Configuring Planet Roller</B> <P> Currently, Planet Roller is just a <I>simple command-line tool</I> that is designed to run as a scheduled task. It reads a list of newsfeed subscriptions from an XML file, as shown below. Eventually, there will also be a UI for Planet Roller so that you don't have to shell into to a server and edit an XML file to add and delete subscriptions. <P> <PRE> &lt;planet-config&gt; &lt;main-page&gt;control.vm&lt;/main-page&gt; &lt;admin-name&gt;Dave Johnson&lt;/admin-name&gt; &lt;admin-email&gt;dave.johnson@rollerweblogger.org&lt;/admin-email&gt; &lt;site-url&gt;http://rollerweblogger.org/planet&lt;/site-url&gt; &lt;output-dir&gt;/nfs/ank/home1/r/roller/public_html/planet&lt;/output-dir&gt; &lt;template-dir&gt;/nfs/ank/home1/r/roller/planet-roller/templates&lt;/template-dir&gt; &lt;cache-dir&gt;/nfs/ank/home1/r/roller/planet-roller/cache&lt;/cache-dir&gt; &lt;subscription id="dave"&gt; &lt;title&gt;Blogging Roller&lt;/title&gt; &lt;feed-url&gt;http://rollerweblogger.org/rss/roller&lt;/feed-url&gt; &lt;site-url&gt;http://rollerweblogger.org/page/roller&lt;/site-url&gt; &lt;/subscription&gt; &lt;subscription id="lance"&gt; &lt;title&gt;Vanity Foul&lt;/title&gt; &lt;feed-url&gt;http://www.brainopolis.com/roller/rss/lance&lt;/feed-url&gt; &lt;site-url&gt;http://www.brainopolis.com/roller/page/lance&lt;/site-url&gt; &lt;/subscription&gt; &lt;subscription id="matt"&gt; &lt;title&gt;Raible Designs&lt;/title&gt; &lt;feed-url&gt;http://raibledesigns.com/rss/rd&lt;/feed-url&gt; &lt;site-url&gt;http://raibledesigns.com/page/rd&lt;/site-url&gt; &lt;/subscription&gt; &lt;subscription id="anil"&gt; &lt;title&gt;Collected Bits&lt;/title&gt; &lt;feed-url&gt;http://www.busybuddha.org/blog/rss/anil&lt;/feed-url&gt; &lt;site-url&gt;http://www.busybuddha.org/blog/page/anil&lt;/site-url&gt; &lt;/subscription&gt; &lt;subscription id="henri"&gt; &lt;title&gt;Goldfish Bowl&lt;/title&gt; &lt;feed-url&gt;http://blog.generationjava.com/roller/rss/bayard&lt;/feed-url&gt; &lt;site-url&gt;http://blog.generationjava.com/roller/page/bayard&lt;/site-url&gt; &lt;/subscription&gt; &lt;subscription id="pat"&gt; &lt;title&gt;P@ Sunglasses&lt;/title&gt; &lt;feed-url&gt;http://blogs.sun.com/roller/rss/pat&lt;/feed-url&gt; &lt;site-url&gt;http://blogs.sun.com/roller/page/pat&lt;/site-url&gt; &lt;/subscription&gt; &lt;group handle="roller"&gt; &lt;title&gt;Planet Roller&lt;/title&gt; &lt;description&gt;Other folks who are blogging Roller&lt;/description&gt; &lt;max-page-entries&gt;30&lt;/max-page-entries&gt; &lt;max-feed-entries&gt;30&lt;/max-feed-entries&gt; &lt;subscription-ref refid="dave" /&gt; &lt;subscription-ref refid="lance" /&gt; &lt;subscription-ref refid="pat" /&gt; &lt;subscription-ref refid="matt" /&gt; &lt;subscription-ref refid="anil" /&gt; &lt;subscription-ref refid="henri" /&gt; &lt;/group&gt; &lt;group handle="trijug"&gt; &lt;title&gt;Planet TriJUG&lt;/title&gt; &lt;description&gt;Triangle Java User Group Bloggers&lt;/description&gt; &lt;max-page-entries&gt;40&lt;/max-page-entries&gt; &lt;max-feed-entries&gt;40&lt;/max-feed-entries&gt; &lt;subscription-ref refid="dave" /&gt; &lt;/group&gt; &lt;/planet-config&gt; </PRE> <P> The configuration file contains three types of information: 1) configuration information for the planet site itself, 2) newsfeed subscriptions, and 3) groups. Groups allow a single Planet Roller site to host differernt aggregations. In the above configuration file, I've defined two groups &quot;Planet Roller&quot; and &quot;Planet <A CLASS="wikipage" HREF="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=TriJUG">TriJUG</A>&quot;. Note that one subscription can appear in more than one group. <P> <B>Customizing Planet Roller File Generation</B> <P> The command-line version of Planet Roller uses the <A CLASS="external" HREF="http://jakarta.apache.org/velocity/texen.html">Texen</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> feature of <A CLASS="external" HREF="http://jakarta.apache.org/velocity/">Velocity</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> to generate whatever files you want in your Planet Roller site. I included templates for HTML, RSS, and OPML, but you can tweak these and/or add whatever you want. <P> You tell Planet Roller which templates to use by specifying a Texen control template in the <TT>&lt;main-page&gt;</TT> element of the config file. Specify the templates directory in the <TT>&lt;template-dir&gt;</TT> element. The control template does not generate anything itself. It controls the file generation process and it determines which files are generated and which template is used for each. Here is Planet Roller's current control template: <P> <PRE> #set ($groupHandles = $planet.groupHandles) #foreach ($groupHandle in $groupHandles) #set ($outputFile = $strings.concat([$groupHandle, ".html"])) $generator.parse("html.vm", $outputFile, "groupHandle", $groupHandle) #set ($outputFile = $strings.concat([$groupHandle, ".rss"])) $generator.parse("rss.vm", $outputFile, "groupHandle", $groupHandle) #set ($outputFile = $strings.concat([$groupHandle, ".opml"])) $generator.parse("opml.vm", $outputFile, "groupHandle", $groupHandle) #end </PRE> <P> The control template loops through the groups defined in the config file and for each, generates an HTML file using the <TT>html.vm</TT> template, an RSS file using the <TT>rss.vm</TT> template, and an OPML file using the <TT>opml.vm</TT> template. You can provide your own control template, or just hack the one that comes with Planet Roller. <P> Based on the above configuration data and control template, when Planet Roller runs, you'll end up with six files: <P> <UL> <LI> <A CLASS="external" HREF="http://www.rollerweblogger.org/planet/roller.html">roller.html</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> </LI> <LI> <A CLASS="external" HREF="http://www.rollerweblogger.org/planet/roller.opml">roller.opml</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> </LI> <LI> <A CLASS="external" HREF="http://www.rollerweblogger.org/planet/roller.rss">roller.rss</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> </LI> <LI> <A CLASS="external" HREF="http://www.rollerweblogger.org/planet/trijug.html">trijug.html</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> </LI> <LI> <A CLASS="external" HREF="http://www.rollerweblogger.org/planet/trijug.opml">trijug.opml</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> </LI> <LI> <A CLASS="external" HREF="http://www.rollerweblogger.org/planet/trijug.rss">trijug.rss</A><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt="" /> </LI> </UL> <P> Let's look at the RSS template, so you can get a feel for how the templates work. <P> <PRE> &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"&gt; &lt;channel&gt; #set($group = $planet.getGroup($groupHandle)) &lt;title&gt;$utilities.textToHTML($group.title,true)&lt;/title&gt; &lt;link&gt;$planet.configuration.url/${group.handle}.html&lt;/link&gt; &lt;description&gt;$utilities.textToHTML($group.description,true)&lt;/description&gt; &lt;lastBuildDate&gt;$utilities.formatRfc822Date($date)&lt;/lastBuildDate&gt; &lt;generator&gt;Roller Planet 1.1-dev&lt;/generator&gt; #set($entries = $planet.getAggregation($group, 30)) #foreach( $entry in $entries ) &lt;item&gt; &lt;title&gt;$utilities.textToHTML($entry.title,true)&lt;/title&gt; &lt;description&gt;$utilities.textToHTML($entry.content,true)&lt;/description&gt; &lt;category&gt;$utilities.textToHTML($entry.category,true)&lt;/category&gt; &lt;link&gt;$entry.permalink&lt;/link&gt; &lt;pubDate&gt;$utilities.formatRfc822Date($entry.published)&lt;/pubDate&gt; #if($entry.author)&lt;dc:creator&gt;$utilities.textToHTML($entry.author,true)&lt;/dc:creator&gt;#end &lt;/item&gt; #end &lt;/channel&gt; &lt;/rss&gt; </PRE> <P> And here is the OPML template: <PRE> &lt;?xml version="1.0" encoding='utf-8'?&gt; #set($group = $planet.getGroup($groupHandle)) &lt;opml version="1.1"&gt; &lt;head&gt; &lt;title&gt;$group.description&lt;/title&gt; &lt;dateCreated&gt;$utilities.formatRfc822Date($date)&lt;/dateCreated&gt; &lt;dateModified&gt;$utilities.formatRfc822Date($date)&lt;/dateModified&gt; &lt;ownerName&gt;$planet.config.adminName&lt;/ownerName&gt; &lt;ownerEmail&gt;$planet.config.adminEmail&lt;/ownerEmail&gt; &lt;/head&gt; &lt;body&gt; #foreach($sub in $group.subscriptions) &lt;outline text="$utilities.textToHTML($sub.title)" xmlUrl="$utilities.textToHTML($sub.feedUrl)" htmlUrl="$utilities.textToHTML($sub.siteUrl)" /&gt; #end &lt;/body&gt; &lt;/opml&gt; </PRE> <P> Within a template, you have access to the configuration through the $planet object, plus there are a couple of other objects that you'll find helpful in generating files. Here are the objects that are available in a template: <P> <UL> <LI> <B>groupHandle</B>: a string that contains the &quot;handle&quot; of the current group, which you can use to get the group object from the planet. </LI> <LI> <B>planet</B>: the planet object allows you to access groups via <TT>$planet.getGroup($groupHandle)</TT> and aggregations for groups via <TT>$planet.getAggregation($group, N)</TT> where N is the max number of entries to be returned. </LI> <LI> <B>planet.configuration</B>: this object contains configuration information, such as </LI> <LI> <B>date</B>: current date </LI> <LI> <B>utilities</B>: text-to-HTML, data formatting, and other utilities </LI> </UL> <P> <B>Running Planet Roller</B> <P> You can run Planet Roller from a simple script, like the one below: <P> <PRE> #!/bin/bash _CP=.:./lib/planet-roller-1.1-dev.jar _CP=${_CP}:./lib/rollerbeans.jar _CP=${_CP}:./lib/commons-logging.jar _CP=${_CP}:./lib/jaxen-full.jar _CP=${_CP}:./lib/jdom.jar _CP=${_CP}:./lib/dom4j-1.4.jar _CP=${_CP}:./lib/rome-0.5.jar _CP=${_CP}:./lib/rome-fetcher-0.5.jar _CP=${_CP}:./lib/velocity-1.4.jar _CP=${_CP}:./lib/velocity-dep-1.4.jar java -classpath ${_CP} org.roller.tools.planet.PlanetTool $1 </PRE> <P> If you want Planet Roller to run on a schedule, schedule it. For example, on UNIX you can use cron. I use the following cron task to run Planet Roller on the 6th and 36th minute of every hour: <P> <PRE> 6,36 * * * * (cd ~roller/planet-roller; ./planet-roller.sh) </PRE> <P> Planet Roller uses the Rome Fetcher library to retrieve, parse, and cache newsfeed data to disk. Fetcher uses HTTP Conditional Get and Etags to ensure that feeds are only downloaded when truly updated. <P> That's enough for now. Tomorrow, I'll tell you about Planet Roller internals. Blogging http://rollerweblogger.org/page/roller/20050213#rome_texen_planet_roller http://rollerweblogger.org/page/roller/20050213#rome_texen_planet_roller http://rollerweblogger.org/page/roller?anchor=rome_texen_planet_roller Sun, 13 Feb 2005 19:31:09 EST David M Johnson First blogs.sun.com podcast <blockquote> <a href="http://blogs.sun.com/roller/page/jimgris/20050210#neooffice_j_podcast_on_bsc">Jim Gisanzio</a>: Check out what is probably Sun's first BSC Podcast -- <a href="http://blogs.sun.com/roller/page/webmink/20050209#san_diego_preso">Simon Phipps interviewing Ed Peterlin</a> at Linux Desktop Summit on <a href="http://www.neooffice.org/">NeoOffice/J</a> </blockquote> Sun http://rollerweblogger.org/page/roller/20050211#first_blogs_sun_com_podcast http://rollerweblogger.org/page/roller/20050211#first_blogs_sun_com_podcast http://rollerweblogger.org/page/roller?anchor=first_blogs_sun_com_podcast Fri, 11 Feb 2005 09:52:23 EST David M Johnson Triangle Bloggers Conference 2005 <p>I'm looking forward to <a href="http://mistersugar.com:2538/blogtogether/show/Triangle+Bloggers+Conference+2005">Triangle Blogger Con 2005</a> in Chapel Hill tomorrow. Big time bloggers <a href="http://www.scripting.com/">Dave Winer</a>, <a href="http://dangillmor.typepad.com/">Dan Gillmore</a>, and <a href="http://www.lotusmedia.org/blog/">Ruby Sinreich</a> will be in attendance and, I assume, helping to lead the discussions. It's a very short conference with thee sessions in the morning focusing on using blogs to help build communities. That's a very appropriate topic for me since I'm spending today writing a <a href="http://www.rollerweblogger.org/page/roller/20040201">community aggregator</a> front end for Roller, which I'm calling <a href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=Proposal_PlanetRoller">Planet Roller</a> (I'm not sure if the name will stick).</p><p><span style="font-weight: bold;">Update</span>: via <a href="http://mistersugar.com/article/3865/">Mister Suger</a>, the Durham Morning Herald on the conference: <a href="http://www.herald-sun.com/orange/10-575389.html">Bloggers Gathering Outside Cyberspace</a></p> Blogging http://rollerweblogger.org/page/roller/20050211#triangle_bloggers_conference_2005 http://rollerweblogger.org/page/roller/20050211#triangle_bloggers_conference_2005 http://rollerweblogger.org/page/roller?anchor=triangle_bloggers_conference_2005 Fri, 11 Feb 2005 09:11:04 EST David M Johnson Raleigh, NC: coffee shops with free wireless <p>These are the best places I've found in Raleigh to get work done, drink good coffee, and enjoy free wireless access to the net.</p> <ul> <li><a href="http://www.helioscoffee.com/">Helios Coffee</a> - in trendy Glenwood South (413 Glenwood Ave). Bonus features: very cool music, outside seating, good smoothies, beer and&nbsp; wine.</li> <li><a href="http://percolatorlounge.com/">Percolator Lounge</a> - in North Raleigh at Quail Corners (5039 Falls of Neuse Rd, used to be a Cupajoe)</li> <li><a href="http://triangle.com/dining/restaurantreview/story/1239600p-7350317c.html">Cafe Cyclo</a> - in Cameron Village (2020 Cameron St.). Bonus features: excellent food, full bar, ice cream store next door.</li> </ul> <p>Know any others? I need to find similar places in Chapel Hill. I'll leave comments open on this one.</p> General http://rollerweblogger.org/page/roller/20050210#raleigh_nc_coffee_shops_with http://rollerweblogger.org/page/roller/20050210#raleigh_nc_coffee_shops_with http://rollerweblogger.org/page/roller?anchor=raleigh_nc_coffee_shops_with Thu, 10 Feb 2005 14:25:11 EST David M Johnson Corporate Podcasting goes live at Sun <p><a href="http://blogs.sun.com/roller/page/rama/20050208#podcasts_via_the_command_line">Rama</a> and the rest of the crew at <a href="http://sun.com">Sun.com</a> have been working long and hard to bring you the coolest of the cool. Podcasting, or <a href="http://mediacast.sun.com">MediaCast</a>ing as the cool kids call it, has gone live at Sun (actually it's beta).&nbsp; Stay tuned to Rama's blog because the best is yet to come.<br> <br> I'm proud to say that I'm part of the Sun.com crew. My little part in this endeavor was to add MediaCast support to the Roller instance we have running on blogs.sun.com. I did it by implementing part of the <a href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=Proposal_WeblogEntryPlugin">Weblog Entry Plugin</a> architecture, which is on the table for <a href="http://sourceforge.net/mailarchive/forum.php?thread_id=6510081&amp;forum_id=9297">Roller 1.1</a> release.<br> </p> Blogging http://rollerweblogger.org/page/roller/20050208#corporate_podcasting_goes_live_at http://rollerweblogger.org/page/roller/20050208#corporate_podcasting_goes_live_at http://rollerweblogger.org/page/roller?anchor=corporate_podcasting_goes_live_at Tue, 8 Feb 2005 20:26:47 EST David M Johnson Blogger with no time to blog <p> I find it somewhat ironic that, because I'm working on a book about blog technologies and working full time on developing blog software, I have almost no time to blog. That's why you've seen so few personal blog entries recently. <a href="http://raibledesigns.com/page/rd?anchor=life_update">Matt's right</a>, the mix of personal entries are what really make a blog for me. I hope that will change soon. Now that Roller 1.0 is really, truly out of the way (fingers crossed) and the really fun part of the book is starting up, I hope that will change (but I'm not making any promises). </p> Blogging http://rollerweblogger.org/page/roller/20050208#blogger_with_no_time_to http://rollerweblogger.org/page/roller/20050208#blogger_with_no_time_to http://rollerweblogger.org/page/roller?anchor=blogger_with_no_time_to Tue, 8 Feb 2005 19:46:58 EST David M Johnson Roller 1.0.1 bug fix release (with nofollow support) <blockquote> <a href="http://www.rollerweblogger.org/page/project/20050208">Roller Weblogger</a>: Roller 1.0.1 is a bug fix release that also adds support for Google's new rel="nofollow" flag. You can <a class="external" href="http://roller.dev.java.net/servlets/ProjectDocumentList?folderID=2775&amp;expandFolder=2775&amp;folderID=2641">get the release</a><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt=""> on Roller's Java.Net download space. You can read the <a class="external" href="http://opensource.atlassian.com/projects/roller/secure/ReleaseNote.jspa?projectId=10000&amp;styleName=Html&amp;version=10150">change list</a><img class="outlink" src="http://www.rollerweblogger.org/wiki/images/out.png" alt=""> on Roller's JIRA issue tracking system. And, you can find <a class="wikipage" href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=InstallationGuide">install instructions</a> and <a class="wikipage" href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=RollerMinorUpdateGuide">instructions for upgrading</a> your existing Roller 1.0 install to 1.0.1 on the Roller wiki. Happy rolling! </blockquote> Roller http://rollerweblogger.org/page/roller/20050208#roller_1_0_1_bug http://rollerweblogger.org/page/roller/20050208#roller_1_0_1_bug http://rollerweblogger.org/page/roller?anchor=roller_1_0_1_bug Tue, 8 Feb 2005 14:14:05 EST David M Johnson