<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
    "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
	xmlns:dc="http://purl.org/dc/elements/1.1/" >
<head>
<title>BottomFeeder 3.8 Tutorial</title>
<meta name="description" content="An introduction to the use of BottomFeeder, a RSS aggregator." />
<meta name="keywords" content="RSS, aggregator, BottomFeeder, tutorial" />
<meta name="dc:title" content="BottomFeeder 3.8 Tutorial" />
<meta name="dc:creator" content="Richard A. Demers" />
<meta name="dc:date" content="2005-01-01" />
<meta name="dc:language" content="en-us" />
<meta name="dc:publisher" content="Cincom Systems, Inc." />
<meta name="dc:rights" content="copyright 2005, Richard A. Demers" />
<meta name="dc:subject" content="BottomFeeder RSS aggregator tutorial" />
<meta name="dc:type" content="text" />
<meta name="dc:description" content="An introduction to the use of BottomFeeder, a RSS aggregator." />
<link	rel="dc:relation" href="http://www.cincomsmalltalk.com/BottomFeeder/" />
<style type="text/css">
<!--
h1 {font-family: serif; font-size: 24pt; font-weight: bold}
h2 {font-family: serif; font-size: 20pt}
h3 {font-family: serif; font-size: 18pt}
h4 {font-family: serif; font-size: 16pt}
h5 {font-family: serif; font-size: 14pt}
h6 {font-family: serif; font-size: 12pt; font-style: oblique}
code {font-family: sans-serif; font-size: 10pt} /* examples */
code.control {font-weight: bold} /* windows and window controls */
code.command {font-weight: bold; font-style: oblique} /* menu actions */
code.setting {font-weight: bold; font-family: monospace} /* variables */
span.note {background-color: lightyellow} /* usage notes */
dfn {font-style: normal; text-decoration: underline} /*definitions */
small {font-family: sans-serif; font-size: 8pt }
hr.noshade {border-top: 669966 border-bottom: 669966 }
-->
</style>
</head>
<body>

<table width="100%" border="24" cellspacing="0" cellpadding="0" bordercolor="669966">
<tr><td><table width="100%" border="0" cellspacing="0" cellpadding="0">

  <tr><td>
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>    
		<td align="left" valign="top" width="30%">
			<a href="http://www.cincomsmalltalk.com/BottomFeeder/">
			<img src="BFSplash.JPG" width="400" border="0" 
			alt="BottomFeeder Home Page"/></a>
		</td>
		<td align="center" valign="center">
			<h1>BottomFeeder 
			<br/>Version 3.8
			<br/>Tutorial</h1>
			<p>January 1, 2005</p>
		</td>
  </tr>
  </table>
	</td></tr>
  
	<tr><td>  
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>    
		<td align="center" valign="middle">
			<p>&#160;</p>
			<a href="https://sourceforge.net/projects/bottomfeeder/">
			<img src="SourceForge.jpg" width="100" border="0"
			alt="BottomFeeder on SourceForge"/></a>
		</td>
	  <td align="center" valign="middle">
			<p>&#160;</p>
			<a href="http://www.cincom.com/smalltalk/">
			<img src="CST_SP_Logo.gif" width="100" border="0"
			alt="Cincom Smalltalk Home Page"/></a>
		</td>
    <td align="center" valign="middle">
			<p>&#160;</p>
			<a href="http://www.softwarewithstyle.com/">
			<img src="WithStyleLogo.gif" width="100" border="0"
			alt="Software WithStyle Home Page"/></a> 
    </td>	
  </tr>
  </table>    
	</td></tr>
  
	<tr><td>
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>    
		<td align="left">
			<p>&#160;</p>
			<p><small>&#169; 2005, Richard A. Demers</small></p>
		</td>
		<td align="right">
			<p>&#160;</p>
			<p><a href="#ugContents"><small>Contents</small></a></p>
		</td>
  </tr>
  </table>    
	</td></tr>

</table></td></tr>  
</table>
<p>&#160;</p>

<a id="bfContents"/>
<table width="100%" border="12" bordercolor="669966" cellspacing="0" cellpadding="0"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="BFSplash.JPG" height="100"/></td>
		<td><h2>Contents</h2></td>
	</tr>
</table>
</td></tr></table>

<table width="100%" border="0" cellspacing="1">
<tr>

<td valign="top" width="50%">

<br/>&#160;&#124;&#150;
	<a href="#bfIntroduction"><b>Introduction</b></a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfNotice">Notice</a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfRelatedDocuments">Related Documents</a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfSome Terms">Some Terms</a>

<br/>&#160;&#124;
<br/>&#160;&#124;&#150;
	<a href="#bfSocialContext"><b>What can BottomFeeder do for you?</b></a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfInformationOverload">Information Overload</a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfYourLonelyVoice">Your Lonely Voice</a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfYourPersonalPresence">Your Personal Presence</a>

<br/>&#160;&#124;
<br/>&#160;&#124;&#150;
	<a href="#bfTechnicalConcepts"><b>Technical Concepts</b></a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFeeds">Feeds</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfAggregatingFeeds">Aggregating Feeds</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfUpdatingFeeds">Updating Feeds</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedStandards">Feed Standards</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfSampleFeed">A Sample Feed</a>

<br/>&#160;&#124;
&#160;&#160;&#124;

<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedlists">Feedlists</a>
<br/>&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedlistsFromSyndicators">Feedlists From Syndicators</a>
<br/>&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedlistsFromBottomFeeder">Feedlists From BottomFeeder</a>
<br/>&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedlistStandards">Feedlist Standards</a>
<br/>&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfSampleFeedlist">A Sample Feedlist</a>
<br/>&#160;&#124;

<br/>&#160;&#124;&#150;
	<a href="#bfTasks"><b>BottomFeeder Tasks</b></a>
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfWorkingWithFolders">Working With Folders</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfManagingFolders">Managing Folders</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfAddingFeeds">Adding Feeds to a Folder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfViewingAllItemsInAFolder">Viewing All Items in a Folder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfMarkingAllFolderFeeds">Marking All Feeds of a Folder as Old or New</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfUpdatingAllFolderFeeds">Updating All Feeds of a Folder</a>

<br/>&#160;&#124;
&#160;&#160;&#124;

<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfWorkingWithFeeds">Working With Feeds</a>
<br/>&#160;&#124;
&#160;&#160;&#166;
&#160;&#160;&#124;&#150;
	<a href="#bfFindingFeedOfWebsite">Finding the Feed of a Website</a>
<br/>&#160;&#124;
&#160;&#160;&#166;
&#160;&#160;&#124;&#150;
	<a href="#bfFindingInterestingWebsitesWithFeeds">Finding Interesting Websites With Feeds</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfWebSurfing">Web Surfing</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedBrowsing">Feed Browsing</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfblogging">Blogging</a>

<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfBuildingFeeds">Building Feeds</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfAmazonFeedBuilder">Amazon Feed Builder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfBlogDiggerFeedBuilder">BlogDigger Feed Builder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfBottomFeederFeedBuilder">BottomFeeder Feed Builder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedsterFeedBuilder">Feedster Feed Builder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfGoogleFeedBuilder">Google Feed Builder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfNewsFeedBuilder">News Feed Builder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfDiscoveringFeeds">Discovering Feeds</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfManagingFeeds">Managing Feeds</a>

</td>
<td valign="top">

<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfGettingFeedInformation">Getting Information About a Feed</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfCommentingOnAFeed">Commenting on a Feed</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfViewingTheItemsInAFeed">Viewing the Items in a Feed</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFilteringFeedItems">Filtering Feed Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedNotifiers">Getting Notified When New Items Arrive</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfMarkingAllFeedItems">Marking All Items of a Feed as Old or New</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfRestoringDeletedItems">Restoring Deleted Items</a>

<br/>&#160;&#124;
&#160;&#160;&#124;
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfWorkingWithItems">Working With Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfViewingItems">Viewing Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfViewingRelatedItems">Viewing Related Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfZoomingItems">Zooming Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfMarkingItems">Marking Items as Old or New</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfDeletingItems">Deleting Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfMakingItemsPersistent">Making Items Persistent</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfFlaggingItems">Flagging Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfGettingInformationAboutAnItem">Getting Information About an Item</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfCommentingOnItems">Commenting On Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfViewingItemComments">Viewing Item Comments</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfTellingOthersAboutItems">Telling Others About Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfCopyingItemInformation">Copying Item Information</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfSearchingForItems">Searching For Items</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfBlogDiggerSearches">BlogDigger Searches</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfBottomFeederSearches">BottomFeeder Searches</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfFeedsterSearches">Feedster Searches</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfGoogleSearches">Google Searches</a>

<br/>&#160;&#124;
&#160;&#160;&#124;
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfWorkingWithFeedlists">Working With Feedlists</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfAddingFeedlistsToAFolder">Adding Feedlists to a Folder</a>
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfGettingInformationAboutAFeedlist">Getting Information About a Feedlist</a>

<br/>&#160;&#124;
&#160;&#160;&#124;

<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<a href="#bfOtherTasks">Other Tasks</a>
<br/>&#160;&#124;
&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfWorkingWithFavorites">Working With Favorites</a>
<br/>&#160;&#124;
&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfWorkingWithSettings">Working With Settings</a>
<br/>&#160;&#124;
&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfStylesheets">Working With StyleSheets</a>
<br/>&#160;&#124;
&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfSavingRestoring">Saving and Restoring</a>
<br/>&#160;&#124;
&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfSynchronizing">Synchronizing Multiple BottomFeeders</a>

<br/>&#160;&#124;
<br/>&#160;&#124;&#150;
	<a href="#bfPlugins">Plugins</a>
<br/>&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfWhatArePlugins">What Are Plugins?</a>
<br/>&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfDownloadingPlugins">Downloading Plugins</a>
<br/>&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfPluginAPI">BottomFeeder's Plugin API</a>
<br/>&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfCreatingPlugins">Creating Plugins</a>
<br/>&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfCustomizingMenus">Customizing Menus</a>
<br/>&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfEvents">Getting Notified Of Events</a>
<br/>&#160;&#160;
&#160;&#160;&#124;&#150;
	<a href="#bfObjectMessages">Object Messages</a>

</td></tr></table>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 2222222222222222222222222222222222222222222222222222222222 -->
<a id="bfIntroduction"/>
<table width="100%" border="12" bordercolor="669966" cellspacing="0" cellpadding="0"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="BFSplash.JPG" height="100"/></td>
		<td><h2>Introduction</h2></td>
	</tr>
</table>
</td></tr></table>

<p>This Tutorial is for general users of the Internet. It will help you to learn BottomFeeder, a tool for working with the feeds provided by many websites.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfNotice"/>
<hr size="6" noshade />
<h3>Notice</h3>

<p>BottomFeeder has been released as an Open Source program, under the <a href="http://www.opensource.org/licenses/artistic-license.php">Artistic License</a>. When you download it, you agree to abide by this license.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfRelatedDocuments"/>
<hr size="6" class="noshade" />
<h3>Related Documents</h3>

<p>The following documents are available to help you get the most benefit from BottomFeeder:</p>

<ul>
<li>The <a href="../Tutorial/Tutorial.htm">BottomFeeder Tutorial</a> -- helps you learn how to do specific tasks using BottomFeeder.</li>
<li>The <a href="../UsersGuide/UsersGuide.htm">BottomFeeder User's Guide</a> -- provides detailed information about setting up BottomFeeder and using each feature of its windows, controls and settings. </li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfSome Terms"/>
<hr size="6" noshade />
<h3>Some Terms</h3> 

<p>Here are some Internet terms you probably already know:</p>
<ul>
<li><dfn>Resource</dfn> -- a file containing text, images, and other media.
<li><dfn>URL</dfn> (Universal Resource Locator) -- the address of an Internet resource.</li>
<li><dfn>Website</dfn> -- a repository of URL linked resources.</li>
<li><dfn>Webpage</dfn> -- a collection of linked resources of a website presented as a page by a browser.</li> 
<li><dfn>Browser</dfn> -- a client tool for viewing webpages (e.g., Windows Internet Explorer or Netscape).</li>
<li><dfn>Search engine</dfn> -- a website devoted to searching many websites for information (e.g., Google) .</li>
<li><dfn>Web log</dfn> (also known as a "blog") -- a website whose pages consist of items in reverse timestamp order. Often personal journals, blogs are beginning to be used for many purposes.</li>
</ul>

<p>And here are some new Internet terms you will see in this tutorial:
<ul>
<li><dfn>Feed</dfn> -- a file published by a website about recent changes to its resources.  A feed is itself a resource of a website. </li>
<li><dfn>Syndicator</dfn> -- a website that brings together and organizes into categories the feeds of many websites (e.g., Syndic8).</li>
<li><dfn>Feedlist</dfn> -- a directory of feeds published by a syndicator. </li>
<li><dfn>Aggregator</dfn> -- a client tool for assembling feeds and feedlists from multiple websites for convenient reading (e.g., BottomFeeder).</li>
</ul> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a></p>
<!-- 2222222222222222222222222222222222222222222222222222222222 -->
<a id="bfSocialContext"/>
<table width="100%" border="12" bordercolor="669966" cellspacing="0" cellpadding="0"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="BFSplash.JPG" height="100"/></td>
		<td><h2>What can BottomFeeder do for you?</h2></td>
	</tr>
</table>
</td></tr></table>


<p>Every tool exists to accomplish specific tasks in a larger social context.  A plumber's wrench is for connecting pipes, but its larger purpose is to build sewage systems to prevent the spread of disease.  So too with BottomFeeder; it is a tool for keeping up with changes to websites, but its larger purpose is to enhance your personal <dfn>presence</dfn> on the web.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfInformationOverload"/>
<hr size="6" noshade="true" />
<h3>Information Overload</h3>

<p><i>Do a Google search on "quilting" and you get 644,000 hits. Overload!!!</i></p>

<p>When the telephone was first invented, people quickly realized it was a great business tool - a real improvement over the telegraph, a way to improve business productivity.  A few businessmen installed telephones in their homes - for better communications with the office, of course. Their families found other uses, social uses, personal uses -- uses that quickly overwhelmed business uses. From then on, growth in the telephone network was exponential.</p>

<p><i>Limit the search to "Shaker quilting" and you get 3,500 hits. Still too many!</i></p>

<p>The same thing happened with the Internet. First scientists used it to e-mail each other and to share data files.  Then, business people found all kinds of on-line, "e-commerce" uses: advertising, catalogs, sales, and intermediation.  Along the way, as more and more people put computers in their homes, social and personal uses became dominant - e-mail, shopping, games, education, conferences, and on-line communities of all kinds.</p>

<p><i>"Shaker quilting in Minneapolis Minnesota" yields 10 hits. Manageable, but is this what you really want? Maybe the best websites are in Kentucky? </i></p>

<p>Today, there are so many people doing so many things with the Internet, it is impossible for anyone to keep up.  Even in a relatively small subject area there are likely to be hundreds (if not thousands) of newsgroups, websites, forums, discussion groups, collaborations, blogs, wikis, and web rings -- with new ones coming online every day and old ones dying off almost as fast. </p>

<p><i>After you find the 100 best "Shaker quilting" websites, how do you keep up with all the changes made by their owners and users?</i></p>

<p>It is great to have the Internet available to everyone, 24 by 7. The world is changing because of it. But somehow, to be useful, you need to be able to carve out the parts of the Internet that best suit your interests, and make them work for you. You need to be able to say, "I am interested in this, but not that," and have the Internet help you manage the overload.</p>

<p><i>How many hours a day do you have to spend "surfing the net," looking at page after page, just to keep up with what's happening in Shaker quilting?  And what about your other interests?</i></p>

<p>The more people, organizations and businesses "get on the net," the greater the overload. The Internet as a solution becomes the Internet as a problem. But these problems mean opportunities to help people use the Internet more productively. </p>

<p><i>Instead of the Internet as "the worldwide web," you want it to be a "personal web," that helps you solve your problems. </i></p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfYourLonelyVoice"/>
<hr size="6" noshade="true" />
<h3>Your Lonely Voice</h3>

<p>We live in an age of mass culture, with mass advertising and mass media shouting at us from every angle.  Even if you take the trouble to develop educated opinions about the areas that interest you -- politics, religion, science, sports, hobbies, etc. -- it has become increasingly difficult to make your voice heard over the din.</p>

<p>You have always been able to write letters to the editor of a magazine or newspaper, but there was no guarantee the editor would publish them. Editors have to be selective because of space and audience interest constraints.  Now, though, there are many more mass media channels (newspapers, magazines, radio and TV) specializing ever more narrowly, all clamoring for "content" from wherever they can get it, and with much less filtering. The result, however, is more noise; more competing voices shouting to be heard.</p>

<p>But there is something new in the world -- the Internet -- a more powerful two-way channel for communications. Not only can you hear what the mass media is broadcasting, you can talk back in a great many new ways: e-mail, forums, discussion groups, wikis, personal websites, web logs, etc.</p>

<p>Doesn't this just add to the din?  Yes it does, but with a difference.  Now, it is possible for any individual to establish an unfiltered and persistent voice that can be heard worldwide. Getting anyone to listen, however, is a different problem.  To do that you need to become part of a community.  </p>

<p>The Internet is a sphere, all users and resources are points on the surface with universal connectivity among any two points.  Communities of unlimited size, complexity and durability form as those connections develop and evaporate. To be effective in these communities, you need to establish a presence that other people recognize and respect, and that presence has to be both attractive and persistent.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfYourPersonalPresence"/>
<hr size="6" noshade />
<h3>Your Personal Presence</h3>
 
<p>Lots of people have vanity pages in their ISP's server: usually just a few pages of pictures and links hardly anyone ever looks at, ever links to, or ever goes back to.  But some people work hard to establish a meaningful Internet identity.  They build their own website or weblog, keeping in mind three important goals: make it easy to find, make it attractive, and make it sticky. </p> 
<ul>
<li>Easy-to-find means there are lots of links to your website: from other websites, from syndicators, and from search engines.  </li>
<li>Attractive means great presentation and great content. People who find your website have to quickly find content that is interesting, well-organized and well-presented; otherwise, they will blow right by it.</li>
<li>Sticky means people come back for more visits to see what is new.  It also means there is something that brings them back, reminders that good things are happening on your website that they want to be part of. One way to be sticky is to send e-mail to <i>subscribers</i> whenever there is something new.   Another way is to publish a feed, a file that makes it easy for people to find out what is new.  It also helps if you register the feed with a syndicator. </li>
</ul> 

<p>Whether you have your own website or blog, or just comment on those of others, people come to recognize your name, and hopefully respect your opinions. Your goals, now, are the inverse of someone who builds a personal website: finding good websites, evaluating them, and keeping up with them. </p>
<ul>
<li>Finding websites. The search engines tend to inundate you with too many hits to check out individually, but you can almost always narrow the list over a series of searches. There are many websites that organize and categorize other websites by topic. The value of these websites depends on the quality of the categories, and how well the list of websites in each category is maintained.  And of course, you can follow links provided by other people in messages that catch your interest.  </li>
<li>Evaluating websites. Determining how well a website meets your interests, and will continue to meet them, can be difficult.  Surfing pages, blog entries and messages gives you a first taste, but that can be time-consuming. Some websites provide a mechanism for visitors to vote on content, which can be helpful - depending on who does the voting. And of course, there are recommendations from people you have come to trust. </li>
<li>Keeping up with changing websites. Once you have found a set of websites you like, how do you keep up with their changes? You can periodically surf each of them - if you have mountains of free time.  Or you can subscribe to e-mail notices, from the sites that provide that service. Or you can use a  type of program called an <dfn>aggregator</dfn> to periodically check a list of websites for changes.  This works great, but only for websites that provide a feed.</li>
</ul>
<p>If you really want a strong presence on the Internet, you have to do all of the above.  You have to create a quality website of your own, and you have to find, evaluate and keep up with many other websites. For all of this, you need tools - good tools like BottomFeeder!</p>

<p align="right"><a href="#bfContents"><small>Contents</small></a></p>
<!-- 2222222222222222222222222222222222222222222222222222222222 -->
<a id="bfTechnicalConcepts"/>
<table width="100%" border="12" bordercolor="669966" cellspacing="0" cellpadding="0"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="BFSplash.JPG" height="100"/></td>
		<td><h2>Technical Concepts</h2></td>
	</tr>
</table>
</td></tr></table>

<p>You can skip this chapter if you are more interested in <i>how to do</i> specific BottomFeeder tasks. You do not have to understand how BottomFeeder works in any great detail -- no more than the driver of a car needs to know how its engine works -- but you may find it helpful to understand a few basic concepts.</p> 

<p>The most basic concept is <dfn>object orientation</dfn> -- also called <i>action on an object</i>.  BottomFeeder is all about objects and commands to those objects. <dfn>Folders</dfn>, <dfn>Favorites</dfn>, <dfn>Feedlists</dfn>, <dfn>Feeds</dfn> and <dfn>Items</dfn> are the kinds of objects you see in BottomFeeder.  (More about them in the following sections.) Icons and text in BottomFeeder's windows represent each kind of object, so you always know what you are seeing.</p>

<p>But objects are more than just pretty pictures. Each object responds to your commands. All you have to do is select an object and choose a command to send it. The main trick is knowing what kind of object to select to do what you want, but that will become clear when you know a bit more about each kind of object. 
Sending a command to an object is then just a matter of selecting an option in the Main Window menu, in the Main Window Toolbar, or in the popup menus of each of the window panes. </p>

<p>The really cool thing (if you're into tech stuff) is that BottomFeeder is itself made up of objects that send commands to each other.  So there is a direct relation between your commands and the way that BottomFeeder performs those commands. But that's the beauty of programming in Smalltalk!</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfFeeds"/>
<hr size="6" noshade />
<h3>Feeds</h3>

<center>
<p><img src="WebpageWithFeed.jpg"/></p>
</center>

<p>A <dfn>feed</dfn> is an object that represents a special kind of file in a website; one that specifies what has changed in the other files of the website. It is called a <i>feed</i> because it supplies, or <i>feeds,</i> information to whomever will consume it.  The website does not have to send messages to individual subscribers to tell them about changes.  It just updates its feed file.  Anyone on the web can then ask for a copy of the feed file.</p>

<p>BottomFeeder does not care how a website creates a feed file and adds new items to it. In some cases, the website accumulates items in a change log, and on a periodic basis builds a new feed file, and replaces its old feed file.  An alternative is for a website to update its feed file every time there is a new item.  As a consumer of feed files, you really do not care.</p>

<a id="bfAggregatingFeeds"/>
<hr size="3" noshade />
<h4>Aggregating Feeds</h4>

<center>
<p><img src="AggregatingFeeds.jpg"/></p>
</center>

<p>BottomFeeder is a program that aggregates -- a fancy word for "brings together" -- feeds from multiple websites. You tell BottomFeeder what feeds you are interested in by <dfn>subscribing</dfn> to them. BottomFeeder then checks for changes by getting the feed file, and telling you about each change. Just leave BottomFeeder running in the background; it checks for feed updates every N minutes, and let's you know when something is new.</p>

<p>But there's a catch; for BottomFeeder to do its thing, a website must publish a feed.  An ever increasing number of websites (over 15,000, now) publish feeds, and it's an idea that is quickly catching on. People tend to revisit sites that provide feeds - and that's a good thing, so more and more sites are coming on board.  If you find an interesting  website that doesn't publish a feed yet, send the web master a message to "get with the program." </p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfUpdatingFeeds"/>
<hr size="3" noshade />
<h4>Updating Feeds</h4>

<p>The process by which BottomFeeder updates feeds from their source websites is straightforward, and worth a few minutes of time to understand.</p>

<ol>
<li>BottomFeeder keeps an internal object model that consists of a Feed object for every subscribed feed.  And for every feed, there is a collection of Item objects that is sorted by timestamp. </li>
<li>BottomFeeder saves a maximum of N items for any feed (default = 50). These are the N items with the most recent timestamps. </li>
<li>Subscribed feeds are updated automatically by BottomFeeder every M minutes (default = 30 minutes). Feeds can also be updated on your command. </li>
<li>When a feed is updated, BottomFeeder begins by asking the feed's website if the feed file has changed since the timestamp of the last received feed file. If the feed file has changed, BottomFeeder requests a copy of the entire feed file from the website. </li>
<li>BottomFeeder compares the timestamp of each incoming item with the timestamps of the saved Item objects of the feed. 
	<ul>
	<li>If there is a match, BottomFeeder ignores the incoming item.</li>
	<li>If there is no match, BottomFeeder determines if the item passes through any filters you created for incoming items.  It adds the accepted items to the feed's collection -- in timestamp order. </li>
	</ul>
</li>
<li>If the number of items saved for a feed's collection is greater than the maximum allowed, the items with the oldest timestamps are discarded.</li>
<li>An exception to the last point is that you can tell BottomFeeder that an item is to persist. The number of items saved for a feed can then be greater than the maximum number allowed.</li>
<li>You can also tell BottomFeeder to delete an item, but this just means you don't want BottomFeeder to show it to you again.  A deleted item continues to hang around until the update process replaces it with a new item; meanwhile, you can ask to see deleted items, and even restore them to the normal item views.</li>
</ol>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedStandards"/>
<hr size="3" noshade />
<h4>Feed Standards</h4>
 
<p>A website creates its feed files according to the <b>RSS</b> standard. <dfn>RSS</dfn> stands for <i>Really Simple Syndication</i>.  There have been several versions of this standard, with many differences among them as people have tried to make RSS feeds handle different things. As a user of BottomFeeder, you do not have to be concerned with this; BottomFeeder handles all of the common standards just fine, including:</p>
<ul>
<li><a href="http://www.zvon.org/xxl/RSS0.9reference/Output/">RSS 0.9</a>.  This was the original, very simple standard for feeds.</li>
<li><a href="http://backend.userland.com/stories/rss091">RSS 0.91</a>. RSS 0.91 is upward compatible with RSS 0.9.</li>
<li><a href="http://backend.userland.com/rss092">RSS 0.92</a>. RSS 0.92 is upward compatible with RSS 0.91.</li>
<li><a href="http://backend.userland.com/rss093">RSS 0.93</a>. RSS 0.93 is upward compatible with RSS 0.92.</li>
<li><a href="http://web.resource.org/rss/1.0/spec">RSS 1.0</a>. RSS 1.0 is upward compatible with RSS 0.9, but with an RDF syntax and extension through modules.</li>
<li><a href="http://web.resource.org/rss/1.0/modules/content/">RSS 1.0 Content Module</a>. A module for the actual content of websites, in multiple formats.</li>
<li><a href="http://web.resource.org/rss/1.0/modules/syndication/">RSS 1.0 Syndication Module</a>. Provides syndication hints to aggregators, such as feed update frequency.</li>
<li><a href="http://web.resource.org/rss/1.0/modules/admin/">RSS 1.0 Administrative Module</a>. This module provides administrative properties that can be used to help improve providers, aggregators, clients, and other users.</li>
<li><a href="http://backend.userland.com/rss">RSS 2.0</a>.  RSS 2.0 is upward compatible with RSS 0.93, with extensions through modules.</li>
<li><a href="http://dublincore.org/documents/dces/">Dublin Core Module</a>. A metadata standard for cross-domain information resource description.</li>
<li><a href="http://madskills.com/public/xml/rss/module/trackback/">Trackback Module</a>. Trackback informs the receiving site that the sending site has made a reference to a post on the receiving site.</li>
<li><a href="http://madskills.com/public/xml/rss/module/pingback/">Pingback Module</a>. This is a way to request notification when somebody links to a document.</li>
<li><a href="http://www.w3.org/2003/01/geo/">RDF Geographical Module</a>. This is a vocabulary for describing Points with latitude, longitude, and altitude.</li>
<li><a href="http://www.postneo.com/icbm/">ICBM Geographical Module</a>. This is an alternate vocabulary for describing Points with latitude, longitude, and altitude.</li>
<li><a href="http://wellformedweb.org/story/9">Well Formed Web Comment API Module</a>. This is a vocabulary for sending comments about a feed or item.</li>
<li><a href="http://www.laudably.com/rss2-comments/">includedComments Module</a>.  This is a vocabulary for describing comments about a feed or item.</li>
<li><a href="http://www.intertwingly.net/wiki/pie/RoadMap">Atom syndication format</a> This is an attempt to resolve the differences in all of the above with an entirely new standard. Versions 0.1, 0.2 and 0.3 are supported by BottomFeeder.</li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfSampleFeed"/>
<hr size="3" noshade />
<h4>A Sample Feed</h4>

<p>Here's an example of a minimal RSS 0.91 feed (taken from a 
<a href="http://www.mnot.net/rss/tutorial/">RSS Tutorial</a>):</p>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;rss version="0.91"&gt;
  &lt;channel&gt;
    &lt;title&gt;Example Channel&lt;/title&gt;
    &lt;link&gt;http://example.com/&lt;/link&gt;
    &lt;description&gt;My example channel&lt;/description&gt;
  &lt;/channel&gt;
  &lt;item&gt;
     &lt;title&gt;News for September the Second&lt;/title&gt;
     &lt;link&gt;http://example.com/2002/09/01&lt;/link&gt;
     &lt;description&gt;other things happened today&lt;/description&gt;
  &lt;/item&gt;
  &lt;item&gt;
     &lt;title&gt;News for September the First&lt;/title&gt;
     &lt;link&gt;http://example.com/2002/09/02&lt;/link&gt;
  &lt;/item&gt;
&lt;/rss&gt;
</code></pre>

<p>Without going into all of its details, this is an XML encoded file consisting of tagged elements. The root element, <code>&lt;rss&gt;</code> to <code>&lt;/rss&gt;</code>,  encloses all other elements.  Its first element is <code>&lt;channel&gt;</code>, which specifies the title, link and description of the feed's source website. This is followed by a series of <code>&lt;item&gt;</code> elements, each of which specifies the title, link and description of some aspect of the source website that is new or changed. If the website covers multiple topics, it may produce multiple feeds so that users can select which ones they want to monitor. </p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfFeedlists"/>
<hr size="6" noshade />
<h3>Feedlists</h3>

<p>A <dfn>feedlist</dfn> is a specially formatted file that contains the names and addresses of feeds.  It is a convenient way to send information about some feeds to aggregator like BottomFeeder.</p>

<p>A feedlist does not contain feeds, themselves; only their names and addresses. BottomFeeder keeps feedlists in a separate folder tree under a root folder called <dfn>Feedlists</dfn>.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedlistsFromSyndicators"/>
<hr size="3" noshade />
<h4>Feedlists from Syndicators</h4>

<center>
<p><img src="SyndicatingFeeds.jpg"/></p>
</center>

<p>A syndicator is a website that publishes directories of Feeds published by other websites. Many syndicators help you to create a personal directory of feeds, called a feedlist, a kind of feed about feeds.</p>

<p>If you subscribe to a <dfn>category</dfn> in a syndicator, every time you ask for an update of your personal feedlist, you get an updated list of the feeds in that category.  This is a good way to keep up with any new websites coming online that you might find interesting.</p> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedlistsFromBottomFeeder"/>
<hr size="3" noshade />
<h4>Feedlists from BottomFeeder</h4>

<p>BottomFeeder isn't a syndicator, but it does have a limited facility for producing feedlists.  You can export a feedlist containing entries for each of the feeds in your Subscriptions folder.  BottomFeeder writes this feedlist to a file on your local disk.  You can then send is as an email attachment to other users.  BottomFeeder can then also import the feeds identified by a feedlist (but not the feedlist itself in this version).</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedlistStandards"/>
<hr size="3" noshade />
<h4>Feedlist Standards</h4>

<p>Feedlists are a type of XML file whose elements are defined by one of the following standards.  BottomFeeder can read them all.</p>

<ul>
<li><a href="http://internetalchemy.org/ocs/">Open Content Syndication (OCS)</a>. Each OCS file contains information about the directory itself and sub sections for each of the content feeds (channels) available at that site.</li>
<li><a href="http://www.opml.org/spec">Outline Processor Markup Language (OPML)</a>. This format provides a way to exchange information between outliners and Internet services.  An OPML file can be used for many purposes, including as a directory of feeds.</li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfSampleFeedlist"/>
<hr size="3" noshade />
<h4>A Sample Feedlist</h4>

<p>Here's an example of an OPML feedlist file exported by BottomFeeder:</p>
<pre><code>
&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;
&lt;opml version="1.0"&gt;
&lt;head&gt;
   &lt;title&gt;BottomFeeder OPML Export&lt;/title&gt;
   &lt;dateCreated&gt;Thu, 21 Aug 2003 11:37:29 GMT&lt;/dateCreated&gt;
&lt;/head&gt;
&lt;body&gt;
   &lt;outline 
      description="Cincom Product Manager"
      htmlUrl="http://www.cincomsmalltalk.com/rssBlog/rssBlogView.xml" 
      language="en" 
      text="Cincom Smalltalk Blog - Smalltalk with Rants"
      xmlUrl="http://www.cincomsmalltalk.com/blog/blogView"/&gt;
   &lt;outline description="Cincom Smalltalk Developer's Wiki"
      htmlUrl="http://www.cincomsmalltalk.com/rssWiki/rssWiki.xml" 
      language="en-us" 
      text="CincomSmalltalkWiki" 
      xmlUrl="http://www.cincomsmalltalk.com/CincomSmalltalkWiki"/&gt;
&lt;/body&gt;
&lt;/opml&gt;
</code></pre>

<p>Each <code>&lt;outline.../&gt;</code> element describes a feed in the feedlist.</p>

<p align="right"><a href="#bfContents"><small>Contents</small></a></p>
<!-- 2222222222222222222222222222222222222222222222222222222222 -->
<a id="bfTasks"/>
<table width="100%" border="12" bordercolor="669966" cellspacing="0" cellpadding="0"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="BFSplash.JPG" height="100"/></td>
		<td><h2>BottomFeeder Tasks</h2></td>
	</tr>
</table>
</td></tr></table>

<p>It is one thing to understand the objects and commands of a program, it is quite another to know how to use its facilities in the most effective way.  This section discusses various tasks you may want to accomplish using BottomFeeder, and gives you hints on how to perform them.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfWorkingWithFolders"/>
<hr size="6" noshade />
<h3>Working With Folders</h3>

<p>Assume for a moment that you are participating in three different virtual communities: Computer Programming, Science Fiction, and Origami.  You regularly interact with half a dozen websites in each community, all of which publish feeds. You probably don't want to put all of these feeds into a single big list; instead, you want to keep them in separate groups.  This makes it easier to keep track of what is happening in each topic. </p>

<p>BottomFeeder helps you to organize your feeds in folders, similar to the file folders on your personal computer.  It provides a root folder, called <dfn>Subscriptions</dfn> in which you organize your feeds.  You can also create your own topical folders under Subscriptions to categorize feeds even finer, in a hierarchy of folders.  For example, you could have folders organized like this, each with zero or more feeds:</p>

&#160;&#124;&#150;
	<b>Subscriptions</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Computing</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Programming</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Smalltalk</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<i>Why Smalltalk</i> feed
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<i>Smalltalk Industry Council</i> feed
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<i>Cincom Smalltalk Blog</i> feed
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Python</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Perl</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Operating Systems</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Testing</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Science Fiction</b> folder
<br/>&#160;&#124;
&#160;&#160;&#124;&#150;
	<b>Origami</b> folder

<p>BottomFeeder provides facilities for working with 
<ul>
<li>Periodically updated feeds, in a folder called <dfn>Subscriptions</dfn>.</li>
<li>Feedlists, in a root folder called <dfn>Feedlists</dfn>.</li>
<li>Feeds created on-demand by search engines, in a root folder called <dfn>Searches</dfn>.</li>
<li>Links to favorite websites, in a root folder called <dfn>Favorites</dfn>.</li>
</ul>
</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfManagingFolders"/>
<hr size="3" noshade />
<h4>Managing Folders</h4>

<p>To create a tree of folders, select a folder and the <code class="command">Add folder</code> command in its pop-up menu.  BottomFeeder prompts you for the name of the new folder. If you later decide it should have a different name, choose the <code class="command">Rename folder</code> command. To get rid of a folder (and everything in it!) choose the <code class="command">Remove folder</code> command.  You can also move a folder (and everything in it) from the folder that contains it to a different folder by using drag-and-drop.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfAddingFeeds"/>
<hr size="3" noshade />
<h4>Adding Feeds to a Folder</h4>

<p>Select a folder in the Subscriptions tree and the <code class="command">Add Feed...</code> command.  The <code class="control">Add Feed</code> prompt asks you for a "URL," the Internet address of the feed.  If you know a feed's URL, you can just type it or copy it into the prompt, but this leads to some more general questions:</p>
<ol>
<li>"How do I find the feed of a website?"</li>
<li>"How do I find interesting websites that have feeds?"</li>
</ol>
 
<span class="note">See <a href="#bfFindingFeedOfWebsite">Finding the Feed of a Website</a> and <a href="#bfFindingInterestingWebsitesWithFeeds">Finding Interesting Websites With Feeds</a>.</span>


<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfViewingAllItemsInAFolder"/>
<hr size="3" noshade />
<h4>Viewing All Items in a Folder</h4>

<p>Items are contained in feeds, not folders, but a folder knows about all the feeds it contains (directly and in lower level folders). If you want to see all the items in a folder, just select the folder.  The result is a list of all items in the feeds of the selected folder.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfMarkingAllFolderFeeds"/>
<hr size="3" noshade />
<h4>Marking All Feeds of a Folder as Old or New</h4>

<p>If all of the items of a feed are old, then BottomFeeder identifies the feed as being old; and if a feed contains any new items, then BottomFeeder identifies the feed as being new. There are times, when you want all feeds of a folder to be either old or new.  Select the folder and the <code class="command">Mark all feeds as new</code> command or the <code class="command">Mark all feeds as old</code> command.  BottomFeeder goes into each feed and marks all contained items as old or new, making the feeds old or new.</p> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfUpdatingAllFolderFeeds"/>
<hr size="3" noshade />
<h4>Updating All Feeds of a Folder</h4>

<p>Folders know about the objects in their group, so if you want BottomFeeder to update all of the feeds in a folder, select the folder and the <code class="command">Update all feeds</code> command. It then tells each feed to update itself, the same as if you individually told each feed to update itself.  Cool, but folders also contain other folders, which may themselves have feeds. No problem, your command to a folder to update its feeds propagates on down to the lowest contained feed.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfWorkingWithFeeds"/>
<hr size="6" noshade />
<h3>Working With Feeds</h3>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFindingFeedOfWebsite"/>
<hr size="3" noshade />
<h4>Finding the Feed of a Website</h4>

<p>Finding the feed of a website is usually easy -- if it has one. The website tells you in one of these ways:</p>
<ul>
<li><p>Some webpages have a simple statement such as</p>

<code>Feed at: http://xxx/xxx.rss</code>

<p>Copy the URL (the <code>http://xxx/xxx.rss</code>) and paste it into a BottomFeeder <code class="control">Add Feed</code> prompt.</p>

<span class="note">
<p>Techy websites sometimes refer to feeds as "RSS feeds" or just as "RSS" or "XML".</p>
</span>

<li><p>Some webpages use a special kind of link that you can click to have their feed added to your aggregator. These links look like other links with the link title underlined, but the link title says something like "my feed."</p>
	<span class="note">
<p> Select <code class="control">File / Register as Default Aggregator</code> in the BottomFeeder menu. This tells BottomFeeder program to add a special program to the Windows registry.</p>
</span>
</li>

<p>&#160;</p>

<li><p>Other times, you see this button in webpages</p>

<p align="left"><img src="xmlLinkButton.jpg"/></p>

<p>Click this button and a new browser is opened on the feed itself - in all of its RSS and XML glory.  Ignore everything but the URL of the feed file in the <code>Address</code> field of the browser.  Copy this URL and paste it into a BottomFeeder <code class="control">Add Feed</code> prompt. </p>  
</li>

<li><p>Fancier yet, you may see this button:</p>

<p align="left"><img src="BottomFeederLinkButton.jpg"/></p>

<p>Click this button and your browser passes the URL of the website's feed to BottomFeeder, which puts the new feed in the root Subscriptions folder.  You can move it to a different folder if you want. Of course, BottomFeeder has to be running on your computer at the same time as the browser.</p>
</li>

<span class="note">
<p>Not every website knows about BottomFeeder, but you may see one of these buttons:</p>
</span>

<p align="left"><img src="RSSLinkButtons.jpg"/></p>

<p>If you are running BottomFeeder instead of one of these programs, click the button anyway. It does not matter which one you click; the URL always goes to BottomFeeder.  (No, this is not piracy!  Very few websites support more than one Feed Button, and you are not likely to be running more than one Feed Browser.)</p>
 
<span class="note">
<p>For this to work, make sure <code class="setting">Run Server Interfaces Compatible With Other Tools</code> is checked in the BottomFeeder Settings Window.</p>
</span>
</li>

<li><p>One more button you may see is this one</p>

<p align="left"><img src="subLinkButton.jpg"/></p>

<p>Click it and your browser takes you to a special website where a variety of Feed Browsers are registered.  There, you will see some of the buttons already discussed, plus others for additional Feed Browser programs.  Click the button for the Feed Browser running in your computer, such as BottomFeeder, and a subscription to the Feed is added to that program. (Here too, BottomFeeder accepts requests to any of the programs.)</p>
</li>

<li><p>Another method, which is really only intended for use by programs (such as syndicators, browsers, and search engines) is to look in the source file of a website's main page. Select the <code class="command">View / Source</code> command in your browser's main menu.  This gets you a display of the HTML source file of the page.  Then look for something like the following within the &lt;head&gt;&lt;/head&gt; element near the top of the file:</p>
<blockquote>
&lt;link rel="alternate" 
   type="application/rss+xml" 
   title="RSS" 
   href="url/to/rss/file"/&gt;
</blockquote>
<p>The value of the "href" parameter is the URL of the site's feed.  Can't find it? Too bad -- a lot of websites aren't doing this yet.</p>
</li>

<li><p>You can also get your browser to look in a web page you are viewing for a link to a feed.</p>

<p>Drag the following link (from this document) to your browser's <code>Links</code> toolbar:</p> 
<p>
<a href="javascript:void(d=document);void(el=d.getElementsByTagName('link'));for(i=0;i<el.length;i++){if(el[i].getAttribute('rel').indexOf('alternate')!=-1 &amp;&amp; el[i].getAttribute('type').indexOf('application/rss+xml')!=-1){void(location.href='http://localhost:8666/btf?rss='+el[i].getAttribute('href')+'&amp;go=1')};};">Bf Subscribe</a> </p>

<span class="note">
<p>You may have to persuade your browser to show its "Links" toolbar. If you are using Windows Internet Explorer, keep selecting the <code class="command">View / Toolbars / Links</code> command until it shows up.</p>
</span>

<p>When you are looking at a webpage, select this link from your <code>Links</code> toolbar. If there is a feed present, it is added to the BottomFeeder Subscriptions folder. You can then move it to a different folder if you want.</p>

</li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFindingInterestingWebsitesWithFeeds"/>
<hr size="3" noshade />
<h4>Finding Interesting Websites With Feeds</h4>

<p>It is one thing to find the feed of a website you are browsing, quite another to find interesting websites with feeds. Some times you need to find websites of interest, and then determine if they have a feed.  Other times you need to find feeds, and then determine if their websites are really of interest. BottomFeeder helps you do both.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfWebSurfing"/>
<hr size="1" noshade />
<h5>Web Surfing</h5>

<p>One of the ways people find new things on the web is by following links from webpage to webpage. Use your regular Internet Browser to find interesting websites. Click on links in webpages to go from website to website, "surfing" your way through the Internet.  Your browser's <i>Favorites</i> or <i>Bookmarks</i> feature helps you save links to the sites you like.</p>

<span class="note">
<p>BottomFeeder provides limited support for surfing. Although it is not a full-function browser, BottomFeeder attempts to present new pages in the Item Pane. Alternatively, you can have BottomFeeder launch an external browser for linked pages, which gives you the full function of the external browser.</p> 
</span>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedBrowsing"/>
<hr size="1" noshade />
<h5>Feed Browsing</h5>

<p>When you browse feeds in BottomFeeder, you see many links to webpages related to individual items. Following these links often leads to websites of interest.</p>
<ul>
<li>Each feed is linked to its source website.  To go there, select the <code class="command">Browse Feed Link</code> command. The website may have additional feeds for other categories of information.</li>
<li>Each item of a feed is usually linked to a specific page (or fragment of a page) in its source website. To go there, double-click the item or select the <code class="command">Browse</code> command or one of the <code class="command">Launch</code> commands. </li>
<li>The description of an item presented in the Item Pane often has links to other webpages. This is particularly true of weblogs, in which "blog" entries often relate to each other or to pertinent webpages.</li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfblogging"/>
<hr size="1" noshade />
<h5>Blogging</h5>

<p>A common practice of people who publish a blog is to include a <dfn>Blog Role</dfn>, a list of links to other blogs and websites that they find interesting.  In this way, an implicit community of blogs develops through references to each other.  The links in a blog role are, in effect, recommendations of other websites worth looking at.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfBuildingFeeds"/>
<hr size="3" noshade />
<h4>Building Feeds</h4>

<p>A feed was described in the <a href="#bfTechnicalConcepts">Technical Concepts</a> section as a file periodically generated by a website that identifies the changes that have occurred in the website.  A broader view is that a feed is a file that contains links to a set of related items; for example, the results of performing a search. The generation of this kind of pseudo-feed file is on-demand, rather than periodic, but BottomFeeder presents its items the same as any other feed.</p>

<p>In fact, BottomFeeder helps you to build a variety of pseudo-feeds. When you select one of the <code class="control">Search / xxx feed builder...</code> options, BottomFeeder asks a search engine to return the results of the search as a feed file.</p>

<p>As needed, you can select the feed and use the <code class="control">Update feed</code> command.  BottomFeeder then asks the search engine to create a new feed for the same query string.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfAmazonFeedBuilder"/>
<hr size="1" noshade />
<h5>Amazon Feed Builder</h5>

<p><a href="http://www.amazon.com">Amazon</a> 
is a commercial website that catalogs and sells a wide variety of books and other media. The <code class="command">Search / Amazon feed builder...</code> command opens a <code class="control">Amazon Feed Builder</code> window, in which you can identify the feed you want from Amazon; for example, a feed on all books related to a specific subject.  BottomFeeder adds the new feed to the currently selected Subscriptions folder, or to the Subscriptions Folder itself.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfBlogDiggerFeedBuilder"/>
<hr size="1" noshade />
<h5>BlogDigger Feed Builder</h5>

<p>To use <a href="http://www.blogdigger.com">BlogDigger</a> as a feed builder, select <code class="control">Search / BlogDigger feed builder...</code>.  BottomFeeder opens a dialog in which you can specify a query string to send to BlogDigger.  Google returns a feed of items containing the query string, from the various blogs that it searched.  BottomFeeder adds the new feed to the currently selected Subscriptions folder, or to the Subscriptions Folder itself.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfBottomFeederFeedBuilder"/>
<hr size="1" noshade />
<h5>BottomFeeder Feed Builder</h5>

<p>BottomFeeder maintains a local copy on your system of all of the items of all of the feeds that it has read (that have not yet been replaced by newer items).  You can search these items and build a feed of the results.</p>
 
<p>To use BottomFeeder as a feed builder, select a folder in the Searches tree and the <code class="control">Add search</code> command.  BottomFeeder opens a dialog in which you can specify a query string.  It returns a feed of items containing the query string, from the various items that it searched.  BottomFeeder adds the new feed to the currently selected Searches folder.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedsterFeedBuilder"/>
<hr size="1" noshade />
<h5>Feedster Feed Builder</h5>

<p>To use <a href="http://www.feedster.com">Feedster</a> as a feed builder, select <code class="control">Search / Feedster feed builder...</code>.  BottomFeeder opens a dialog in which you can specify a query string to send to Feedster.  Feedster returns a feed of items containing the query string, from the various feeds that it searched.  BottomFeeder adds the new feed to the currently selected Subscriptions folder, or to the Subscriptions Folder itself.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfGoogleFeedBuilder"/>
<hr size="1" noshade />
<h5>Google Feed Builder</h5>

<p>To use <a href="http://www.gogle.com">Google</a> as a feed builder, select <code class="control">Search / Google feed builder...</code>.  BottomFeeder opens a dialog in which you can specify a query string to send to Google.  Google returns a feed of items containing the query string, from the various webpages that it searched.  BottomFeeder adds the new feed to the currently selected Subscriptions folder, or to the Subscriptions Folder itself.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfNewsFeedBuilder"/>
<hr size="1" noshade />
<h5>News Feed Builder</h5>

<p>This is similar to the Feedster Feed Builder. Select <code class="control">Search / Headline News feed builder...</code>.  BottomFeeder opens a dialog in which you can specify a query string to send to the Headline News, Yahoo or NewsTrove service.  The returned feed consists of items containing the query string, from the various feeds it searched.  BottomFeeder adds the new feed to the currently selected Subscriptions folder, or to the Subscriptions Folder itself.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfDiscoveringFeeds"/>
<hr size="3" noshade />
<h4>Discovering Feeds</h4>

<p><a href="http://www.syndic8.com/">Syndic8</a> is a type of website called a "syndicator."  Other websites register the feeds they produce with Syndic8, which then obtains updates to those feeds on a regular basis.  A program like BottomFeeder can submit queries to Syndic8 to obtain a list of feeds that contain information that matches a query string.  BottomFeeder presents the list of feeds that contained the query string, and you can select the feeds you want to add to a folder.</p>
<ul>
<li>If you select the <code class="command">Search / Feed Auto-Discovery</code> command from the main menu, BottomFeeder creates a new folder for the feeds in the Subscriptions root folder. The name of the new folder is derived from the search string. </li> 
<li>You can also select a folder in the tree and the <code class="command">Discover feeds</code> command.  BottomFeeder then adds the new feeds to that folder.</li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfManagingFeeds"/>
<hr size="3" noshade />
<h4>Managing Feeds</h4>

<p>Over time, some of the feeds you acquire may need some amount of  attention.  Select a feed and one of the following commands:</p>
<ul>
<li><code class="command">Mark Feed Inactive</code> tells BottomFeeder to stop updating the feed from its website.  BottomFeeder also changes the color of the feed's icon to black.</li>
<li><code class="command">Mark Feed Active</code> tells BottomFeeder to restart the automatic updating of an inactive feed from its website.  BottomFeeder immediately gets an update and changes the color of the feed's icon to red.</li>
<li><code class="command">Update Feed</code> tells BottomFeeder to update the feed from the feed's website.  This updates the list of items BottomFeeder has saved for the feed.  BottomFeeder automatically updates subscribed feeds, but you can update a feed whenever you want.</li>
<li><code class="command">Remove Feed</code> deletes the feed from the containing folder. Careful with this command; BottomFeeder deletes all items saved for the feed.</li>
<li><code class="command">Regenerate Feed</code> removes the feed and rebuilds it from the website's feed file.  BottomFeeder deletes all items saved for the feed before it gets new items from the website's feed file.</li>
<li><code class="command">Report feed error to author</code> opens a New Message window addressed to the provider of the feed so that you can report an error in the feed.</li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfGettingFeedInformation"/>
<hr size="3" noshade />
<h4>Getting Information About a Feed</h4>

<p>Additional information is available about each feed and its website.  Select the feed and one of the following commands:</p>
<ul>

<li><code class="command">Browse Feed Link</code> opens a browser on a page of the website specified by the feed, usual the website's home page.</li>

<li><code class="command">Feed Properties</code> opens the <dfn>Feed Properties</dfn> window which has two tabs:
	<ul>
		<li>General -- for properties common to all feeds.</li>
		<li>Details -- for optional properties provided by some websites.  You can copy selected information from the details into the system clipboard.</li>
	</ul>

<li><code class="command">Browse Feed Source</code> opens a browser on the feed's RSS file, with full RSS markup tags. </li>

<li><code class="command">Map It</code> opens a browser on the <a href="http://mapper.acme.com/">Acme Mapper</a> website with the geographical coordinates specified by the feed's website.  The displayed webpage shows a satellite image that locates the coordinates.  You can then zoom in or out and move the starting point to explore the area.  This command is available only for feeds that provide geographical coordinates.</li>

</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfCommentingOnAFeed"/>
<hr size="3" noshade />
<h4>Commenting on a Feed</h4>

<p>Some feeds allow you to provide them with comments, or to enter a query for their website. Select the feed and the <code class="command">Send comment on feed</code> command.  BottomFeeder then opens the Feed Comments window in which you can enter a comment or a query.  If the website returns results from a query, BottomFeeder presents them in the Item pane.</p>

<span class="note">
<p>To comment on an item of a feed, select the item and use the <code class="command">Send comment on item</code> command.</p>
</span>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfViewingTheItemsInAFeed"/>
<hr size="3" noshade />
<h4>Viewing the Items in a Feed</h4>

<p>The easiest way to view the active items in a feed is to simply select the feed in the Tree pane. Active items are those that have not been filtered out and that you have not deleted. Inactive items are hidden until replaced by new items when the feed is updated or regenerated.  Until then, hidden items can still be viewed by selecting the <code class="command">View hidden items</code> command. </p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFilteringFeedItems"/>
<hr size="3" noshade />
<h4>Filtering Feed Items</h4>

<p>You may not be interested in seeing some of the items that appear in a feed.  For example, a blogger may include sports or rock music items interesting to him or her but boring to you.  To eliminate these items when they arrive, select the <code class="command">Search / Define Global Filters</code> command in the main menu or the <code class="command">Define Filters</code> command of a selected feed.  BottomFeeder applies global filters to all items of all feeds, but it selectively applies a feed's filters to just that feed.</p>

<p>You can define multiple global or feed-specific filters.  BottomFeeder filters out items that have a specific word or phrase in their category, title or contents.  You can also tell BottomFeeder to filter out all old items in a feed.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedNotifiers"/>
<hr size="3" noshade />
<h4>Getting Notified When New Items Arrive</h4>

<p>You can ask BottomFeeder to alert you whenever there are new items in a subscribed feed. Select the feed and the <code class="command">Add Feed Notifier</code> command.  BottomFeeder adds a bell icon to the feed's icon so you can see which feeds have notifiers. When you no longer want a notifier on a feed, select the feed and the <code class="command">Remove Feed Notifier</code> command. </p>

<p>When new items arrive in any of your subscribed feeds, BottomFeeder adds them to the New Items list and enables the <code class="command">New Items</code> tool button.  BottomFeeder also adds the new items in feeds with notifiers to its Alert list and enables the <code class="command">Alerts</code> tool button. In effect, you are alerted whenever new items show up in any subscribed feed.  </p>

<p>So when should you add a notifier to a feed? One answer is to use notifiers for only those feeds you want to track closely.</p>

<span class="note">
<p>Each item is represented by only one Item object.  An item exists only in its containing feed, but it can also appear in other lists, such as the New Items list or a list of items found by a search.  Anything you do to an item in any list, such as marking it as old, affects the item in its feed and in all other lists.  </p>
</span>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfMarkingAllFeedItems"/>
<hr size="3" noshade />
<h4>Marking All Items of a Feed as Old or New</h4>

<p>Whenever a feed is updated from its website, either by subscription or on demand, BottomFeeder checks to see if there are any new items.  If there are, it displays the title of the new items in red text.  Click a new item and BottomFeeder assumes it is now an old item, and displays its title in black text.  This distinction between old and new items has one more visual effect. If all items of a feed are old, the feed's icon in the tree is blue; if any items are new, the feed's icon is red.</p>

<p>There are times, however, when you want BottomFeeder to treat the items of a feed as either all old or all new.  Select the feed and the <code class="command">Mark all feed items as new</code> command or the <code class="command">Mark all feed items as old</code> command.</p> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfRestoringDeletedItems"/>
<hr size="3" noshade />
<h4>Restoring Deleted Items</h4>

<p>When you are working with a list of items, you can delete individual items from the containing feed.  BottomFeeder does not actually remove the item until it needs space for a new item; it just marks it as deleted and does not show it in any item lists.  Until the time when it is actually removed, a deleted item can be restored to the feed.  Select the feed and the <code class="command">View hidden items</code> command. BottomFeeder shows you a list of the deleted (and filtered) items in the feed.  You can review them and individually restore deleted items to the feed. Alternatively, you can select the feed and the <code class="command">Restore all deleted items</code> command.</p>

<span class="note">
<p>Items that have been filtered out of a feed also appear in the display of hidden items.  However, they cannot be restored in the same way as a deleted item because they would just be filtered out again at the next update of the feed.  Instead, to permanently restore filtered items, use the <code class="control">Define Filters</code> to change the feed's filters.</p>
</span>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfWorkingWithItems"/>
<hr size="6" noshade />
<h3>Working With Items</h3>

<p>When you select a feed, BottomFeeder displays either a list of its items,  or a convenient, scrollable <i>newspaper</i> view of the items. The list view provides many commands for working with items that are not available in the newspaper view. 
  
<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfViewingItems"/>
<hr size="3" noshade />
<h4>Viewing Items</h4>

<p>If you are using the list view of items, BottomFeeder displays a table with the date,  title and category of each item in the <code class="control">Item List</code> pane.  You can sort items by date, title or category.  BottomFeeder tells you which items are old and which are new.  Clicking on a new item makes it old, but you can make any item new again, or you can make all items either old or new.</p>

<p>Click an item, and BottomFeeder shows you its contents in the <code class="control">Item</code> pane. This is whatever the publisher of the feed wants it to be. It may be text that describes a change to a website page, it may be a copy of the change, or it may be a link to a changed page in the website.  It just depends on what the website put into the item.</p>

<ul>
<li>If it is simple text, BottomFeeder displays it in the <code class="control">Item</code> pane. </li>
<li>If it is only a link, what BottomFeeder does depends on a program setting. If the <code class="setting">Auto-browse Empty Descriptions</code> setting is checked, it displays the referenced page in the <code class="control">Item</code> pane; otherwise, it displays the URL of the link in the <code class="control">Item</code> pane (which you can click to open a browser on that page).</li>
<li>If there is both simple text and a link, BottomFeeder displays the text in the <code class="control">Item</code> pane. To view the referenced page, right-click the item in the <code class="control">Item List</code> pane to get its popup menu.  You can then use one of the following commands:
<ul>
<li><code class="command">Browse Item in BottomFeeder</code> - the webpage is displayed in the <code class="control">Item</code> pane.</li>
<li><code class="command">Launch New Browser on Item</code> - a new browser window is opened on the webpage.</li>
<li><code class="command">Launch Browser on Item</code> - if there is an existing browser window open, it is used to show the webpage; otherwise a new browser is opened.  This only works on Windows.</li>
</ul> 
<li>Double clicking an item in the <code class="control">Item List</code> pane is the same as launching a new browser on the item.</li>
</ul>

<p>If you are using the newspaper view of items, BottomFeeder displays items as scrollable pages of items. To obtain a newspaper view, check the appropriate settings in the BottomFeeder <code class="control">Settings</code> window or in the <code class="control">Settings</code> tab of a <code class="control">Feed Properties</code> window.</p>
  
<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfViewingRelatedItems"/>
<hr size="3" noshade />
<h4>Viewing Related Items</h4>

<p>Every item has a link (URL) back to its source file in a website, and this is often used to make a reference from one item to a different item in the same or in a different feed.  These references appear in the text of the referencing item as normal web page links.  As people write blog items and as they comment on each other's items, complex networks of such links often get created.  It can be useful to find out what links other people have made to an item you are viewing, especially when you subscribe to many feeds on a single topic.</p>

<p>When BottomFeeder updates a feed it looks for links in all new items and comments and keeps a record of them.  Later, to determine if an item you select in the <code class="control">Item List</code> has any related items, get its popup menu and see if the <code class="control">View related items</code> option is enabled. If it is and you select that option, BottomFeeder shows all related items in the <code class="control">Item List</code>.  Note, however, that only items that BottomFeeder has already saved in your local system are shown.  For broader searches of the Internet, use one of BottomFeeder's many search facilities. </p>

<p>If you are subscribed to a large number of feeds that have lots of items and comments, you may not want BottomFeeder to cross reference related items.  To turn off this feature, go to the <code class="control">Feeds</code> tab in the BottomFeeder <code class="control">Settings</code> and uncheck the <code class="control">Do item cross referencing?</code> check box.</p>


<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfZoomingItems"/>
<hr size="3" noshade />
<h4>Zooming Items</h4>

<p>Displaying items in the <code class="control">Item</code> pane works fine for small items, but for larger ones, it is too constraining.  BottomFeeder has a simple solution. Select the <code class="command">Toggle Zoom</code> command, and BottomFeeder uses the entire window to the right of the <code class="control">Tree</code> pane to show the item.  You can toggle back to the normal view in the same way.  For even more room, you can drag the right side of the <code class="control">Tree</code> pane to the left, and you can  maximize the window in the desktop.</p>

<span class="note">
<p>If you are using an Item List view, which has no <code class="control">Tree</code> pane, the <code class="control">Item</code> pane uses the entire view area of the <a code class="control">Main</code> window.</p>
</span>

<p>While in zoom mode, you can use keyboard shortcuts (Up arrow, Down arrow, Page Up, Page down, Ctrl-Home and Ctrl-End) to go from item to item. This gives you an alternate way to use BottomFeeder.</p>

<span class="note">
<p>For convenience, the popup menus of both the <code class="control">Item List</code> pane and the <code class="control">Item</code> pane have most of the same commands for working with items.</p>
</span>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfMarkingItems"/>
<hr size="3" noshade />
<h4>Marking Items as Old or New</h4>

<p>Whenever a feed is updated from its website, BottomFeeder checks if there are any new items.  If there are, it displays the title of the new items in red text.  Click a new item and BottomFeeder assumes it is now an old item, and displays its title in black text. </p>

<p>You can make any old item new again by selecting the item and clicking the <code class="command">Mark item as new</code> command.  BottomFeeder then changes its title back to red text.</p>

<span class="note">
<p>As a convenience, you can mark all the items in an Item List as old or new by clicking any item in the list and clicking the <code class="command">Mark all items as old</code> command or <code class="command">Mark all items as old</code> command.  This violates the "action on an object" metaphor, but it is a convenience. </p>
</span> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfDeletingItems"/>
<hr size="3" noshade />
<h4>Deleting Items</h4>

<p>Old items normally disappear when new items need their space. But sometimes, you may decide you never need to see an item again, so it can be deleted from the feed right away.  Select the item and the click the <code class="command">Delete item from feed</code> command.  BottomFeeder marks the item as deleted so that it will not show it to you again.  However, the item continues to be saved until it is replaced by a new item.  Until then, you can ask the feed to restore a deleted item, either individually or all deleted items in the feed.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfMakingItemsPersistent"/>
<hr size="3" noshade />
<h4>Making Items Persistent</h4>

<p>Sometimes there is an item that you want to keep indefinitely. Select the item and click the <code class="command">Make item persistent</code> command.  BottomFeeder marks the item as one to keep and displays its title in italics.  If at a later time you decide you no longer want the item, select the item and click the <code class="command">Let item expire</code> command.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFlaggingItems"/>
<hr size="3" noshade />
<h4>Flagging Items</h3>

<p>When you first read an item you may decide that you want to be easily able to come back to it at a later time.  Select the item in the <code class="control">Item List</code> pane and the <code class="command">Flag for Follow up</code> command.  Alternatively, select the <code class="command">Toggle flagging</code> command in the  <code class="control">Item</code> pane. BottomFeeder marks the item as flagged by changing the color of its text to green.</p>

<p>When you want to look at your flagged items, select the <code class="control">Flagged</code> view button and BottomFeeder will display a list of all flagged items.</p>

<p>To unflag an item, select the item in an <code class="control">Item List</code> pane and the <code class="command">Unflag item</code> command.  Alternatively, select the <code class="command">Toggle flagging</code> command in the <code class="control">Item</code> pane.</p> 
  
<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfGettingInformationAboutAnItem"/>
<hr size="3" noshade />
<h4>Getting Information About an Item</h4>

<p>Additional information is available about each item.  Select the item and click the <code class="command">Item properties</code> command.  BottomFeeder open the <code class="control">Item Properties</code> window which has two tabs:</p>
<ul>
<li>General -- for properties common to all items.</li>
<li>Details -- for optional properties provided by some websites.  You can copy information from the details tab to the system clipboard.</li>
</ul> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfCommentingOnItems"/>
<hr size="3" noshade />
<h4>Commenting On Items</h4>

<p>Some feeds allow you to comment on their items. Select the item and the <code class="command">Send comment on item</code> command.  BottomFeeder then opens the <code class="control">Item Comments</code> window in which you can enter a comment.</p>

<span class="note">
<p>This is particularly useful for commenting on blog entries.</p>
</span>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfViewingItemComments"/>
<hr size="3" noshade />
<h4>Viewing Item Comments</h4>

<p>Just as you can comment on the items of a feed, so can other people. In some cases, the original item becomes just the starting point for an extended discussion among the writer of the original item and one or more commentators. </p>

<p>If the owner of a feed makes comments available to viewers of his website, they  are usually added to the original items in the website's feed, either as links (URL's) or as text. The next time BottomFeeder gets an update of the feed, it also gets any new comments.  To see the comments, select the item and scroll to the bottom of <code class="control">Item</code> pane.</p>

<p>To help you see what items have new comments, BottomFeeder marks the items containing new comments as being new items, which also marks the containing feed as having new items.  If you don't want to be informed of new comments in this way, go to the <code class="control">User Interface</code> tab in the BottomFeeder <code class="control">Settings</code> and uncheck the <code class="control">Items new if new comments?</code> check box.</p>

<p>As mentioned above, some websites only provide links (URL's) to comments on items.  Click on such a link in the <code class="control">Item</code> pane and BottomFeeder gets the comment from the website and displays it in the <code class="control">Item</code> pane.  But this really isn't very convenient for you, especially if there are a series of comments on an item; so instead, when BottomFeeder finds a comment link in a feed it automatically goes to the website, gets the comment, and appends the text of the comment to its saved copy of the item.  Of course, it only has to do this once for each comment.</p>

<p>If you are subscribed to a large number of feeds that have lots of comments, you may not want BottomFeeder to automatically get copies of all comments.  To turn off this feature, go to the <code class="control">Feeds</code> tab in the BottomFeeder <code class="control">Settings</code> and uncheck the <code class="control">Aggregate comments with feeds?</code> check box.</p>
  
<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfTellingOthersAboutItems"/>
<hr size="3" noshade />
<h4>Telling Others About Items</h4>

<p>The Internet is all about communicating with other people.  Sometimes when you see an item of interest, you may want to tell someone else about it.  BottomFeeder gives you three ways; select the item and click on one of these commands:</p>
<ul>
<li><code class="command">Print item</code> -- which formats the item as a printed page and sends it to your printer.  You then have all the advantages of the "sneaker net" at your disposal. </li>
<li><code class="command">Send item as e-mail</code> -- which formats the item as an e-mail message in a New Message window. You can then edit the message any way you want, and send it on to whomever you want.</li>
<li><code class="command">Save to file</code> -- which copies the item to a new file in your system.  You can then handle it as any other file.</li>
<li><code class="command">Blog it!</code> -- which opens the <code class="control">Blog Posting</code> window (if you have this plugin installed) with a reference to the item that you can comment on in you blog.</li>
</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfCopyingItemInformation"/>
<hr size="3" noshade />
<h4>Copying Item Information</h4>

<p>One of the simplest ways in which application programs cooperate is by making it possible to copy information into and out of the system clipboard.  BottomFeeder enables information to be copied from items in the following ways:</p>

<ul>
<li>In the <code class="control">Item List</code> pane, you can copy the title of an item by selecting the item and clicking the  <code class="command">Copy item title</code> command.</li>

<li>In the <code class="control">Item List</code> pane, you can copy the item's link to a webpage by selecting the item and clicking the <code class="command">Copy item link</code> command.</li>

<li>In the <code class="control">Item</code> pane, you can copy text by highlighting it and clicking the <code class="command">Copy selected text</code> command.  (You can also use the common Ctrl-C and Ctrl-X keyboard shortcuts.)</li>

<li>In the <code class="control">Item</code> pane, you can copy a link within the text of the item by placing the mouse over the link and clicking the <code class="command">Copy selected link</code> command.</li>

<li>In the <code class="control">Item</code> pane, you can copy an entire table from within an item by placing the mouse in the table and clicking the <code class="command">Export table</code> command.  The table does not, however, go into the clipboard; it is written to a file on your local disk.</li>

</ul>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfSearchingForItems"/>
<hr size="6" noshade />
<h3>Searching For Items</h3>

<p>Finding websites and feeds are important things you do in using the Internet, but you may also want to find items within feeds, either saved by BottomFeeder or out in the Internet.  </p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfBottomFeederSearches"/>
<hr size="1" noshade />
<h5>BottomFeeder Searches</h5>

<p>To find an item in one of the feeds in your local BottomFeeder cache,  select the <code class="command">Search / Search BottomFeeder...</code> command. BottomFeeder uses your query string to search its cache. The results are displayed in the <code class="control">Item List</code> pane.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedsterSearches"/>
<hr size="1" noshade />
<h5>BlogDigger Searches</h5>

<p><a href="http://www.blogdigger.com">BlogDigger</a> 
is a website that indexes blogs that it finds throughout the Internet. The <code class="command">Search / Do search engine search...</code> command opens a <code class="control">Search</code> window, in which you can submit a query to BlogDigger.  The results returned by BlogDigger are displayed in a browser window. </p>

<p>For more advanced searches, and for other BlogDigger services, you still have to go the the <a href="http://www.blogdigger.com">BlogDigger</a> website.</p>  

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfFeedsterSearches"/>
<hr size="1" noshade />
<h5>Feedster Searches</h5>

<p><a href="http://www.feedster.com">Feedster</a> 
is a website that indexes feeds that it finds throughout the Internet. The <code class="command">Search / Do search engine search...</code> command opens a <code class="control">Search</code> window, in which you can submit a query to Feedster.  Popup menus in the <code class="control">Item List</code> pane and <code class="control">Item</code> pane also provide shortcuts to the Search tool.  BottomFeeder takes the title of an item (or any text selected in the <code class="control">Item</code> pane) as the query string, but you can edit the query string before requesting a Feedster search. The results returned by Feedster are displayed in the <code class="control">Item</code> pane, with links to the feeds found.  To copy the URL of a feed, position the cursor on the "RSS" link and select the <code class="command">Copy link</code> command.</p>

<p>For more advanced searches, and for other Feedster services, you still have to go the the <a href="http://www.feedster.com">Feedster</a> website.</p>  

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfGoogleSearches"/>
<hr size="1" noshade />
<h5>Google Searches</h5>

<p>The massive indexes and powerful search engines of the <a href="http://www.google.com/">Google</a> website make it an invaluable aid for finding websites. The <code class="command">Search / Do search engine search...</code> command opens a <code class="control">Search</code> window, in which you can submit a query to Google.  Popup menus in the <code class="control">Item List</code> pane and <code class="control">Item</code> pane also provide shortcuts to the <code class="control">Search</code> window. BottomFeeder takes the title of an item (or any text selected in the <code class="control">Item</code> pane) as the query string, but you can edit the query string before requesting a Google search. The results returned by Google are displayed in the <code class="control">Item</code> pane, with links to the webpages found.</p>

<p>For more advanced searches, and for other Google services, you still have to go the <a href="http://www.google.com">Google</a> website.</p>  

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfWorkingWithFeedlists"/>
<hr size="6" noshade />
<h3>Working With Feedlists</h3>

<p>Like a folder, a feedlist object can be opened to see its feeds; or closed to hide them.  The feeds in a feedlist are not automatically read or updated.  That happens only when you click the feed. The same goes for feedlists; if you want to update a feedlist, click it and BottomFeeder gets a refreshed feedlist from its syndicator.</p>

<p>You cannot add feeds to a feedlist, or remove them from a feedlist, or move them between feedlists or folders. However, you can select the <code class="command">Subscribe to feed</code> command, or drag and drop it on a folder in the Subscriptions tree.  The feed stays in the feedlist, but also appears in the subscriptions tree.  It is then automatically updated the same as any other subscribed feed.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfAddingFeedlistsToAFolder"/>
<hr size="3" noshade />
<h4>Adding Feedlists to a Folder</h4>

<p>To add a feedlist to the Feedlist tree, select one of its folders and choose the <code class="command">Add feedlist</code> command. BottomFeeder asks you for the the address (URL) of the feedlist, reads it, and then adds a corresponding feedlist object to the folder.</p>

<p>Get feedlists from the <a href="http://www.syndic8.com/">Syndic8</a> website.  Go there and establish a personal account, and then use its search facilities to create a list of the feeds and categories of feeds in which you have an interest.  As new feeds are registered in those categories (or deleted), Syndic8 keeps your feedlist up to date. Syndic8 will tell you the address of your personal feedlist to use.</p>
  
<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfGettingInformationAboutAFeedlist"/>
<hr size="3" noshade />
<h4>Getting Information About a Feedlist</h4>

<p>Additional information is available about each feedlist.  Select the feedlist and click the <code class="command">Feedlist properties</code> command.  BottomFeeder opens the <code class="control">Feedlist Properties</code> window which lists the properties common to all feedlists.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<!-- 3333333333333333333333333333333333333333333333333333333333 -->
<a id="bfOtherTasks"/>
<hr size="6" noshade />
<h3>Other tasks</h3>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfWorkingWithFavorites"/>
<hr size="3" noshade />
<h4>Working With Favorites</h4>

<p>Using BottomFeeder, you can do some of the things that you normally do with your Internet browser. It is not a full function browser, but it is enough of a browser to help you find and use websites and feeds.</p>

<p>First of all, you can open browsers on feed items, on web pages linked by a feed item, on the home page of a feed's website, and on information about BottomFeeder.  You can also use Favorite or Bookmark links from your default browser, and you can open browsers on web pages you find by doing Google and Feedster searches through the BottomFeeder search tool. These features are available through the <code class="command">Browse</code> and <code class="command">Search</code> menus of the Main window. </p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfWorkingWithSettings"/>
<hr size="3" noshade />
<h4>Working With Settings</h4>

<p>BottomFeeder is a very flexible program.  You can tailor its operation to your preferences in many ways.  The most basic way is to set values in its initialization (<code>.ini</code>) file before you start the program.  This file is shipped with BottomFeeder to give it default values for these preferences.  You too can change these values but it is better to use the <code class="control">Settings Window</code> when BottomFeeder is running.</p>

<p>Select the <code class="command">System / Settings</code> command of the main menu, and BottomFeeder opens the <code class="control">Settings Window</code>.  This window displays the current settings in tabbed pages. Select a tab, and make any changes you need.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfStylesheets"/>
<hr size="3" noshade />
<h4>Working With StyleSheets</h4>

<p>A stylesheet is a description of how the elements of a document are to be presented in a specified media.  A magazine, for example, has roughly the same appearance from month to   month, even though its contents changes.  This is because the writers and editors all work as required by a predefined stylesheet. It tells them, for example, to use a certain typeface of a certain size for titles.  The same for BottomFeeder; the items of the subscribed feeds change, but the way BottomFeeder presents them remains consistent because of a stylesheet. </p>

<p>BottomFeeder is initially installed with more than a dozen different stylesheets, and you can select the one you want, to obtain the presentation style that best suits your needs.  The <code class="control">Stylesheets</code> menu in the main window is a list of named stylesheets that you can select.  </p>

<p> The stylesheets BottomFeeder uses are defined according to a standard Internet language called <cite>Cascading Style Sheets</cite>, or <cite>CSS</cite> for short. If you like to try new things, you can also create your own custom stylesheets. You may find it helpful to obtain one of the many books published about CSS.</p>

<p>The <code>stylesheets</code> directory in your BottomFeeder home directory contains the named stylesheets that are installed with BottomFeeder.  Copy one of these stylesheets (with a new name) into the same directory, and try changing some of its specifications.  When you restart BottomFeeder, you will find the name of your custom stylesheet in the <code class="control">Stylesheets</code> menu.</p>
<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfSavingRestoring"/>
<hr size="3" noshade />
<h4>Saving and Restoring</h4>

<p>For good performance, BottomFeeder works with folders, feeds and feedlists as objects in your computer's memory.  When you exit from BottomFeeder, it writes all of these objects out to the hard disk so that they will be available when you next start the program.  While it is running, more objects are added to memory as feeds are updated. Changes to memory also occur when you create, rename, or move objects.  In these ways, the memory objects increasingly differ from what was last written to the hard disk. If your computer crashes (as PC's are all too often known to do), then all of the updates since the last save are lost. </p>

<p>To avoid this, occasionally tell BottomFeeder to save the current state of its memory objects to disk.  Click the <code class="command">File / Save All</code> command on a regular basis, and BottomFeeder saves the current state of all memory objects, along with the current position and size of the Main Window and the current values of the your control settings.</p>

<p>When you quit BottomFeeder, by clicking the <code class="command">File / Exit</code> command, BottomFeeder checks the <code class="setting">shouldSaveFileOnExit</code> setting. If true, it automatically does a <code class="command">File / Save All</code> command.</p>

<p>You can also tell BottomFeeder, through the <code class="command">File / Save All To...</code> command, to save objects in a directory of your choice on your local hard disk.  You may want to do this so you can later use <code class="command">File / Restore All</code> command to restore that aspect of BottomFeeder to a specific state, or so you can share it with another user.</p>

<p>It is also possible to save feeds, feedlists or settings to a network file, and to restore them from a network file server.  Request these actions through the <code class="command">Network</code> menu.</p> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a>
<a id="bfSynchronizing"/>
<hr size="3" noshade />
<h4>Synchronizing Multiple BottomFeeders</h4>

<p>If you use more than one computer system, perhaps a desktop system and a laptop, you may want to have BottomFeeder running on all of them.  That way, you can be kept up-to-date regardless of what system you happen to be using. Ideally, you would like to have them all show the same feeds at the same update level, but this doesn't happen automatically.</p>
<p>For example, if your desktop system is continually connected to the Internet, BottomFeeder updates all feeds automatically; but your laptop system may be connected only when you are actually using it. When you start BottomFeeder on the laptop system, its feeds are also updated, but not the records that BottomFeeder keeps on the desktop system about which items have been read, deleted, filtered or made persistent. Nor does the laptop BottomFeeder know about any feeds, folders, or filters added or removed from the desktop system.  </p>
<p>To bring your laptop BottomFeeder to the same update level as your desktop BottomFeeder, you need to <i>synchronize</i> them. There are two ways to do this, through a network connection, or through saved and loaded synchronization files.</p>
<ul>
<li>If both systems are connected to the Internet, all you have to do is select the <code class="command">System/Synchronize</code> command in one of them.  BottomFeeder prompts you for the name of the server with which you want to synchronize.  For example, if you want to synchronize your laptop BottomFeeder with your desktop system, select the <code class="command">System/Synchronize</code> command in you laptop BottomFeeder and specify the server address of the desktop system on which BottomFeeder is currently running. 
Specify just the name or IP address of the server (for example, <code>server.domain.com</code>); not a full URL (for example, <code>http://server.domain.com/...</code>).
</li>
<li>If one of the systems is not connected to the Internet, two steps are required:
	<ol>
	<li>Select the <code class="command">System/Save Synchronize File</code> command in the BottomFeeder system with which you want the other systems to synchronize; for example, the desktop system.  If you save this file to a portable media (such as a CD-ROM), you can then use your sneaker-net to take it to the other systems.</li>
<li>Select the <code class="command">System/Load Synchronize File</code> command in the BottomFeeder system to be synchronized, and specify the name of the previously saved synchronization file.</li>
	</ol>
</li>
</ul>

<p align="right"><a href="#bfContents"><small>Contents</small></a></p>
<a id="bfPlugins"/>
<table width="100%" border="12" bordercolor="669966" cellspacing="0" cellpadding="0"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="BFSplash.JPG" height="100"/></td>
		<td><h2>Plugins</h2></td>
	</tr>
</table>
</td></tr></table>

<a id="bfWhatArePlugins"/>
<h3>What Are Plugins?</h3>

<p>Plugins are programs that plug into a host program to enhance it or change it in some way. The host program works well without any plugins, but if you install plugins, the host program becomes more useful to you in some way. </p>

<p>BottomFeeder is a host program to an open-ended set of plugins. BottomFeeder adds the names of the plugins you install to the <code class="control">Plugins</code> menu of its <a href="#bfMainWindow"><code class="control">Main</code></a> window.  When you click on a plugin name in that menu, BottomFeeder starts the selected plugin program.  Depending on its function, the plugin may open additional windows or it may enhance BottomFeeder in some other way.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a></p>
<a id="bfDownloadingPlugins"/>
<hr size="6" noshade="true" />
<h3>Downloading Plugins</h3>

<p>One source for plugins is BottomFeeder, itself. Useful plugins have been created by the BottomFeeder development team. In other cases, other people have sent plugins to the development team.  All of these plugins can be downloaded by using the <a href="#bfSystemMenu"><code class="command">System / Check for Upgrades...</code></a> command. </p>

<p>Any file transfer program can be used to download plugins from other sources. Just put them into the <code>plugins</code> directory under the 
BottomFeeder Home Directory.</p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a></p>
<a id="bfCreatingPlugins"/>
<hr size="6" noshade="true" />
<h3>Creating Plugins</h3>

<p><span class="note">Creating plugins is best left to experienced VisualWorks Smalltalk programmers.</span></p>

<p>The plugins that BottomFeeder can install and start are VisualWorks Smalltalk programs that have been deployed as VisualWorks parcels.  To create a plugin, use Cincom VisualWorks to create and test appropriate Smalltalk classes and methods, and export them as a <code>.pcl</code> file. Put this file into the BottomFeeder <code>plugins</code> directory so it can be loaded when BottomFeeder is started.</p>

<p>When BottomFeeder loads a plugin, the parcel loader calls the following plugin method so that it can initialize itself.</p>
<pre><code>
	postLoad
	   <i>...plugin initialization code...</i>
</code></pre> 

<p>This method must also send one of the following call-back messages to BottomFeeder to register itself as a plugin: </p>
<pre><code> 
	#{RSS.RSSFeedViewer} ifDefinedDo: [:cls |
	   cls
	      registerPluginClass: PluginClassName
	      startupMessage: #<i>startupMethodName</i>
	      label: labelString].
 
	or
 
	#{RSS.RSSFeedViewer} ifDefinedDo: [:cls |
	   cls
	      registerPluginClass: PluginClassName
	      startupMessage: #<i>startupMethodName</i>
	      label: labelString
	      isForUI: false]
</code></pre> 
				
<p><span class="note">The #ifDefinedDo: message just ensures that RSS.RSSFeedViewer has been imported by the class of the plugin.</span></p>

<p>If a plugin has a user interface, BottomFeeder adds an entry to its <code class="command">Plugins</code> menu.  When clicked, this menu entry sends the startup message specified in plugin's registration to the registered plugin class.  If the plugin does not have a user interface, the startup message is sent immediately after registration. </p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a></p>
<a id="bfPluginAPI"/>
<hr size="6" noshade="true" />
<h3>BottomFeeder's Plugin API</h3>

<p>Some plugins, such as the <code>IRC Client</code>, provide new capabilities that have little or nothing to do with the basic BottomFeeder application of aggregating feeds.  For them, the basic plugin interface described above is all they need.</p>

<p>Other plugins, however, augment BottomFeeder's handling of feeds in some way. For example, the <code>CST Blog Tool</code> opens a tool for creating a blog entry about a selected item of a feed. They need a way to work with selected feeds or items, and users need a way to request their services.  For them, BottomFeeder provides an Application Programming Interface (API) for customizing menus, and to be notified of  BottomFeeder events. </p>

<p align="right"/><a href="#bfContents"><small>Contents</small></a></p>
<a id="bfCustomizingMenus"/>
<hr size="3" noshade="true" />
<h4>Customizing BottomFeeder Menus</h4>

<p>BottomFeeder's primary user interface is through menu actions that can be requested on a selected feed or item. A plugin can add an action to the <a href="#bfItemListPane"><code class="control">Item List</code></a> popup menu.  When a feed is selected in the <a href="#bfTreePane"><code class="control">Tree</code> </a> pane, BottomFeeder sends the following message to the plugin's class (the one registered with BottomFeeder):</p>

<pre><code> 
	<i>PluginClassName</i>
		customizeMenu: <i>aMenu</i>
		forItem: <i>anItem</i>
		andFeed: <i>aFeed</i>
</code></pre> 

<p>Here is an example of such a plugin method:</p>

<pre><code> 
	customizeMenu: aMenu forItem: anItem andFeed: aFeed
		"add a menu pick if appropriate"
		self isMyActionAvailableForItem: anItem andFeed: aFeed 
			ifTrue: [aMenu addItem: self myAction]
</code></pre> 

<p align="right"/><a href="#bfContents"><small>Contents</small></a></p>
<a id="bfEvents"/>
<hr size="3" noshade="true" />
<h4>BottomFeeder Events</h4>

<p>A variety of events occur when BottomFeeder processes user requests. In some cases, a plugin needs to take actions beyond what BottomFeeder has already done. To be notified of these events a plugin must register itself as a receiver of each event. Depending on whether or not the event includes an argument, register by sending one of the following messages: </p>

<pre><code> 
RSS.RSSFeedViewer 
   when: #placeEventNameHere 
   send: #placeYourEventHandlerMethodNameHere 
   with: argument

or

RSS.RSSFeedViewer 
   when: #placeEventNameHere 
   send: #placeYourEventHandlerMethodNameHere


</code></pre> 

<table border="1" >

<tr>
<th>Event</th>
<th>Argument</th>
<th>Description</th>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#addedFeedList:</code>
</td>
<td valign="top" bgcolor="silver">
<code>aFeedlist</code>
</td>
<td valign="top">
Sent when a feedlist is successfully added.
</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#addedFeed:</code>
</td>
<td valign="top" bgcolor="silver">
<code>aFeed</code>
</td>
<td valign="top">
Sent when a feed is successfully added.
</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#bottomFeederStarting:</code>
</td>
<td valign="top" bgcolor="silver">
<code>anApplicationModel</code>
</td>
<td valign="top">
Sent after BottomFeeder has started, but before it has updated any feeds. The BottomFeeder feed viewer application model (for the main BottomFeeder window) is passed as an argument. Plugins can perform additional startup operations for themselves.
</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#bottomFeederQuitting</code>
</td>
<td valign="top" bgcolor="silver">
<code>&#160;</code>
</td>
<td valign="top">
Sent after the BottomFeeder feed viewer application model has terminated, but before the containing Smalltalk image has been terminated. Plugins can perform additional termination operations for themselves.</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#newItemsFor:</code>
</td>
<td valign="top" bgcolor="silver">
<code>aFeed</code>
</td>
<td valign="top">
Sent when there are new items for a feed (after a manual update, or via the update loop).
</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#newItemsForAlert:</code>
</td>
<td valign="top" bgcolor="silver">
<code>aFeed</code>
</td>
<td valign="top">
Sent when there are new items for a feed which is set for alerts (after a manual update, or via the update loop).
</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#removedFeed:</code>
</td>
<td valign="top" bgcolor="silver">
<code>aUrl</code>
</td>
<td valign="top">
Sent when a feed is removed.  The argument is the feed's URL; the removed feed is not available.
</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#removedFeedList:</code>
</td>
<td valign="top" bgcolor="silver">
<code>aUrl</code>
</td>
<td valign="top">
Sent when a feedlist is removed.  The argument is the feedlist's URL; the removed feedlist is not available.
</td>
</tr>

<tr>
<td valign="top" bgcolor="silver">
<code>#quitting</code>
</td>
<td valign="top" bgcolor="silver">
<code>&#160;</code>
</td>
<td valign="top">
Sent when the BottomFeeder image is going to quit.  The image does not quit before the plugin method returns.
</td>
</tr>

</table>

<p><span class="note">A plugin only needs to register for the events it wants to handle; the others are ignored.</span></p>


<p align="right"/><a href="#bfContents"><small>Contents</small></a></p>
<a id="bfObjectMessages"/>
<hr size="3" noshade="true" />
<h4>BottomFeeder Object Messages</h4>

<p>BottomFeeder passes feed and feedlist objects on some of the API's listed in the previous section.  This makes it possible for the plugin to send messages to those objects to request various services. The obvious questions to ask are, "What services?" and "What messages?" </p>

<p>At this point in the development of BottomFeeder, these questions can only be answered by repeating that you have to be a VisualWorks Smalltalk programmer.  If you are, download a VisualWorks development image from 
<a href="http://www.cincom.com/scripts/smalltalk.dll/downloads/index.ssp">Cincom Smalltalk Downloads</a>, and a copy of the current BottomFeeder bundle from the Public store.  Look for classes <code>RSSFeed</code> and <code>RSSFeedList</code> in the <code>RSSViewer-Domain</code> package. </p>

<p align="right"><a href="#bfContents"><small>Contents</small></a></p>
<!-- 2222222222222222222222222222222222222222222222222222222222 -->
<table width="100%" border="12" bordercolor="669966" cellspacing="0" cellpadding="0"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="BFSplash.JPG" height="100"/></td>
		<td><h2>The End</h2></td>
	</tr>
</table>
</td></tr></table>

</body>
</html>

