<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://skepticats.com/LnBlog/themes/default/styles/rss.css" ?>
<?xml-stylesheet type="text/xsl" href="http://skepticats.com/LnBlog/themes/default/styles/rss.xsl" ?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<link>http://lnblog.skepticats.com/feeds/Plugins_news.xml</link>
<title>LnBlog</title>
<description>A flexible file-base weblog</description>
<generator>LnBlog 1.0.0</generator>
<item>
<title>BotBlock with Invisible CAPTCHA  </title>
<link>http://lnblog.skepticats.com/entries/2007/11/BotBlock_with_Invisible_CAPTCHA.php</link>
<description>
&lt;p&gt;It looks like &lt;a href=&quot;http://linksleeve.org/&quot;&gt;LinkSleeve&lt;/a&gt; has been failing me lately.  The past week I've been inundated with comment spam.  So, to fix that problem, I updated the BotBlock plugin.  You can &lt;a href=&quot;bot_block.zip&quot;&gt;download version 0.2.0 here&lt;/a&gt;.  Just unzip and drop it in your LnBlog/plugins directory, overwriting the old version.&lt;/p&gt;&lt;p&gt;For the new version, I basically rewrote the plugin.  The old version did nothing but force bots to download the comment form before submitting, which was fairly useless.  &lt;/p&gt;&lt;p&gt;The new version, however, implements an &lt;a href=&quot;http://haacked.com/archive/2006/09/26/Lightweight_Invisible_CAPTCHA_Validator_Control.aspx&quot;&gt;invisible CAPTCHA&lt;/a&gt;.  This is not the annoying image-based &lt;acronym title=&quot;Completely Automated Public Turing test to tell Computers and Humans Apart&quot;&gt;CAPTCHA&lt;/acronym&gt; you see all over, but rather a simple math problem.  Furthermore, it's &amp;quot;invisible&amp;quot; to anyone with JavaScript enabled - i.e. it includes JavaScript code to automatically solve the &lt;acronym title=&quot;Completely Automated Public Turing test to tell Computers and Humans Apart&quot;&gt;CAPTCHA&lt;/acronym&gt; and hide the form field.  So, for 90% of visitors, the comment form should work as before, but block any bots that don't interpret JavaScript (which is a lot of them).  For the rest, there will be a simple math problem and they will be prompted to type in the answer.  (Note: There is an option to turn the non-JavaScript text off, if you're so inclined.  Of course, that makes it less accessible, but apparently lots of people are into discriminating against the disabled.)&lt;/p&gt;&lt;p&gt;As a fall-back measure, I also included an option (on by default) for some simple content filtering - that is, comments with HTML links in them get blocked.  The idea is that most of the comment spam I get includes plain text, HTML, and BBCode links, but LnBlog only allows plain text in comments.  Therefore, anyone who posts a comment with an HTML link is either a spammer or too stupid to read the instructions.  Either way, we probably don't care what they have to say.&lt;/p&gt;&lt;p&gt;So there it is.  I haven't had any comment spam since installing the new version on my site.  Of course, I'm still having problems with TrackBack spam for some reason.  Apparently the LinkSleeve and TrackbackValidator plugins aren't working for this particular wave, though I don't know why.  I'll have to work on that.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<comments>http://lnblog.skepticats.com/entries/2007/11/28_2103/comments/</comments>
<guid>http://lnblog.skepticats.com/entries/2007/11/28_2103/</guid>
</item>
<item>
<title>New BotBlock plugin </title>
<link>http://lnblog.skepticats.com/entries/2007/01/New_BotBlock_plugin.php</link>
<description>
&lt;p&gt;I've just uploaded a new version of the &lt;a href=&quot;http://lnblog.skepticats.com/content/plugins/bot_block.php.zip&quot;&gt;BotBlock plugin&lt;/a&gt;.  This one adds two options.  One makes the comment check depend on a cookie, so user agents that don't accept them will be blocked.  The other option blocks any comment that contains markup for HTML or BBcod-style links.  Since markup isn't allowed in comments anyway, it's a pretty good bet that comments with links are spam.  Either that, or the commenter wasn't paying attention.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<comments>http://lnblog.skepticats.com/entries/2007/01/27_2256/comments/</comments>
<guid>http://lnblog.skepticats.com/entries/2007/01/27_2256/</guid>
</item>
<item>
<title>Aren't I Web 2.0-y</title>
<link>http://lnblog.skepticats.com/entries/2006/11/01_2035/</link>
<description>
&lt;p&gt;I've been reworking the sidebar calendar plugin lately.  It was kind of buggy and just didn't work as well as I would have hoped.  In particular, using query strings to browse through the months just really sucked.&lt;/p&gt;&lt;p&gt;My solution to the bugginess was to rewrite a large chunk of it.  It's much cleaner and more managable now.&lt;/p&gt;&lt;p&gt;My solution to query strings sucking was to get with this whole Web 2.0 thing and do it with AJAX.  So now, rather than the whole page refreshing when you click the previous month link on the calendar, a JavaScript requests an update from the server and then updates the page in place.  The down side of this is that the next and previous links don't work if you don't have JavaScript or are using an archaic browser.  Of course, you can still use the archive links, so it's not like you can't get to the previous month's links.&lt;/p&gt;&lt;p&gt;I've installed the new calendar plugin on this site.  I haven't made it available for download yet because it's still in progress and requires a couple of support files.  However, it will be standard in the next version.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<slash:comments>3</slash:comments>
<comments>http://lnblog.skepticats.com/entries/2006/11/01_2035/comments/</comments>
<wfw:commentRss>http://lnblog.skepticats.com/entries/2006/11/01_2035/comments/comments.xml</wfw:commentRss>
<guid>http://lnblog.skepticats.com/entries/2006/11/01_2035/</guid>
</item>
<item>
<title>TrackBack spam solved   </title>
<link>http://lnblog.skepticats.com/entries/2006/09/TrackBack_spam_solved.php</link>
<description>
&lt;p&gt;Following up on the post I just made about the &lt;a href=&quot;entries/2006/09/BotBlock_plugin.php&quot;&gt;BotBlock plugin&lt;/a&gt;, I thought I should mention that the reason I'm getting comment spam is that I turned off the DisableComments plugin on &lt;a href=&quot;http://www.skepticats.com/linlog/&quot;&gt;LinLog&lt;/a&gt;.  The reason I turned it off was to test out the TrackbackValidator plugin that comes standard with LnBlog 0.8.0.&lt;/p&gt;&lt;p&gt;The DisableComments plugin allows you to automatically turn off replies (TrackBacks and comments) on entries older than a given number of days.  Since my big problem was TrackBack spam, and it was mostly on entries that were more than a month old, I &amp;quot;fixed&amp;quot; the problem by simply setting DisableComments to disable replies after 30 days.  On the up side, this stopped the flood of TrackBack spam.  On the down side, it stopped all legitimate replies too.&lt;/p&gt;&lt;p&gt;Well, it turns out that I don't really need the DisableComments plugin as much anymore,  Happily, the new TrackbackValidator plugin, which only allows TrackBacks from URLs that &lt;em&gt;actually&lt;/em&gt; link to you, has completely solved my comment spam problem.  My server access logs will show lots of TrackBack pings, but not a single spam ping has gotten through.  &lt;/p&gt;&lt;p&gt;The only down side is that now I need to worry about &lt;em&gt;comment&lt;/em&gt; spam on old entries.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<comments>http://lnblog.skepticats.com/entries/2006/09/03_1111/comments/</comments>
<guid>http://lnblog.skepticats.com/entries/2006/09/03_1111/</guid>
</item>
<item>
<title>BotBlock plugin </title>
<link>http://lnblog.skepticats.com/entries/2006/09/BotBlock_plugin.php</link>
<description>
&lt;p&gt;I added a new plugin to the &lt;a href=&quot;content/plugins/&quot;&gt;plugins page&lt;/a&gt; today.  It's called BotBlock, and it's just simple attempt to keep robots from posting comments.  &lt;/p&gt;&lt;p&gt;I wrote this because, for the past several days, I've been getting a lot of comment spam.  The messages were comming in groups of two to six messages at a time, had varying content, and came from varying IP addresses.  However, the general format of all the posts was the same (short fake greeting, followed by lines of URLs and two or three word descriptions) and they all targeted the &lt;a href=&quot;http://www.skepticats.com/linlog/entries/2006/07/PHP_suckiness_XML.php&quot;&gt;same blog entry&lt;/a&gt;.  So obviously these were either being posted by a robot or a &lt;em&gt;very&lt;/em&gt; stupid human.&lt;/p&gt;&lt;p&gt;Thus I implemented this stop-gap solution.  Basically, it just adds a hidden field to the comment form that contains a hash value based on your LnBlog configuration and the client IP address.  When the client submits a comment, it checks this hash.  If it's either missing or doesn't match the calculated value, the comment is rejected.&lt;/p&gt;&lt;p&gt;Of course, this depends on the bot being relatively stupid and the spammer not being motivated enough to figure out your specific configuration.  A determined spammer could bypass this protection without too much effort, which is why I call this a stop-gap.  However for small-time blogs like mine, which aren't worth the effort to crack, this solves the immediate problem.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<comments>http://lnblog.skepticats.com/entries/2006/09/03_1047/comments/</comments>
<guid>http://lnblog.skepticats.com/entries/2006/09/03_1047/</guid>
</item>
<item>
<title>TrackbackValidator: sneak preview</title>
<link>http://lnblog.skepticats.com/entries/2006/07/TrackbackValidator_sneak_preview.php</link>
<description>
&lt;p&gt;I read an interesting article on TrackBack spam today, called &lt;a href=&quot;http://seclab.cs.rice.edu/proj/trackback/papers/taking-trackback-back.pdf&quot;&gt;Taking TrackBack Back (from Spam)&lt;/a&gt;.  The ideas seemed sensible to me, so I banged out a &lt;a href=&quot;trackback_validator.php.zip&quot;&gt;TrackbackValidator plugin&lt;/a&gt; to implement it.&lt;/p&gt;&lt;p&gt;The idea behind the paper and the plugin is simple: the sites linked to by TrackBack spam &lt;em&gt;never&lt;/em&gt; contain a link back to your blog entry, but nearly every legitimate blog entry that pings you does.  Therefore, rather than fancy content filter, we can eliminate TrackBack spam by simply fetching the URL in the ping and only accepting it if the page actually contains a link to your site.  &lt;/p&gt;&lt;p&gt;This plugin implements that idea.  It also includes options to white-list all pings coming from your domain and to allow ping that link to files under your entry (e.g. an uploaded file or the comments page) rather than just the permalink.  My spam rates have been way up lately, so I'll be uploading this tonight and we'll see how it goes.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<comments>http://lnblog.skepticats.com/entries/2006/07/17_1913/comments/</comments>
<guid>http://lnblog.skepticats.com/entries/2006/07/17_1913/</guid>
</item>
<item>
<title>New plugin: HideSidebar</title>
<link>http://lnblog.skepticats.com/entries/2006/07/New_plugin_HideSidebar.php</link>
<description>
&lt;p&gt;I've uploaded a new plugin to the &lt;a href=&quot;content/plugins/#misc&quot;&gt;plugins page&lt;/a&gt;.  It's called HideSidebar and it, well, hides the sidebar.  The idea came from &lt;a href=&quot;http://www.skepticats.com/lnblog/entries/2006/06/25_1123/comments/#comment2006-06-27_182901&quot;&gt;this comment&lt;/a&gt; and the plugin is a sort of proof of concept.  I don't know how useful it will be, but it's a good demonstration of the power of the plugin system.&lt;/p&gt;&lt;p&gt;For the curious, it works by injecting an inline JavaScript into the page when it loads.  It has PHP code to add a link to the menubar and insert the JavaScript into the page.  The JavaScript then manipulates the &lt;acronym title=&quot;Document Object Model&quot;&gt;DOM&lt;/acronym&gt; to hide the sidebar when the link is clicked.  It's really quite simple.  In fact, the JavaScript portion took me longer to write than the rest of the plugin.  &lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<slash:comments>1</slash:comments>
<comments>http://lnblog.skepticats.com/entries/2006/07/08_1810/comments/</comments>
<wfw:commentRss>http://lnblog.skepticats.com/entries/2006/07/08_1810/comments/comments.xml</wfw:commentRss>
<guid>http://lnblog.skepticats.com/entries/2006/07/08_1810/</guid>
</item>
<item>
<title>New plugins: RecentComments and PrivateBlog </title>
<link>http://lnblog.skepticats.com/entries/2006/06/New_plugins_RecentComments_and_PrivateBlog.php</link>
<description>
&lt;p&gt;I've added a couple of new plugins to the &lt;a href=&quot;content/plugins/&quot;&gt;plugins page&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The RecentComments plugin is a sidebar panel that shows a list of the most recently posted plugins.  It's got configuration options to control the display of the poster's name and the entry it's posted to.&lt;/p&gt;&lt;p&gt;The new verions of PrivateBlog, which used to be part of the standard set, lets you block access to a blog by all except a given list of logged-in users.  You can allow access by username or by group membership.  In addition to redirecting pages, the new version also blanks out all entries, articles, and comments that might be displayed by other plugins (like in the sidebar).  However, this only works for dynamic PHP pages: static files like RSS feeds are not blocked.  So if you really want the blog to be &lt;em&gt;truly&lt;/em&gt; private, you might want to consider turning off the RSS plugins.&lt;/p&gt;&lt;p&gt;Also, I fixed some broken and missing links on the plugins page.  The two plugins I added yesterday now have links associated with them and the links to the two editor plugins are fixed now.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<slash:comments>6</slash:comments>
<comments>http://lnblog.skepticats.com/entries/2006/06/25_1123/comments/</comments>
<wfw:commentRss>http://lnblog.skepticats.com/entries/2006/06/25_1123/comments/comments.xml</wfw:commentRss>
<guid>http://lnblog.skepticats.com/entries/2006/06/25_1123/</guid>
</item>
<item>
<title>ContactForm plugin</title>
<link>http://lnblog.skepticats.com/entries/2006/06/ContactForm_plugin.php</link>
<description>
&lt;p&gt;Ask and ye shall receive!  By &lt;a href=&quot;http://www.skepticats.com/lnblog/entries/2006/06/12_2119/comments/#comment2006-06-21_104937&quot;&gt;popular demand&lt;/a&gt;, I cooked up a little contact form plugin today.  You can &lt;a href=&quot;http://www.skepticats.com/lnblog/content/plugins/#misc&quot;&gt;download it&lt;/a&gt; from the plugins page.  To install, just extract it from the ZIP archive and drop it in your LnBlog/userdata/plugins folder.  (&lt;strong&gt;Note&lt;/strong&gt;: This is the new recommended location for non-standard plugins.  You can still use LnBlog/plugins or your per-blog plugins folder as well.)&lt;/p&gt;
&lt;p&gt;Basically, this plugin provides a contact page that users can use to send e-mail to the blog owner.  It also puts a link to the contact page in the sidebar.  Note that the blog owner must have an e-mail address set.&lt;/p&gt;
&lt;p&gt;This is just the initial release, so I'll expand and integrate this more later.  You know, putting the link in user profiles, allowing more than just the blog owner to be e-mailed, etc.  I'm trying to go with that whole open-source &quot;releaswe early, release often&quot; thing here.  Plus this is only the second plugin I've done that generates and entire page, so I wanted to work on the basic design before worrying too much about features.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<slash:comments>4</slash:comments>
<comments>http://lnblog.skepticats.com/entries/2006/06/22_2136/comments/</comments>
<wfw:commentRss>http://lnblog.skepticats.com/entries/2006/06/22_2136/comments/comments.xml</wfw:commentRss>
<guid>http://lnblog.skepticats.com/entries/2006/06/22_2136/</guid>
</item>
<item>
<title>Theming, Part 2: Sidebar Templates and Plugins</title>
<link>http://lnblog.skepticats.com/entries/2006/05/Theming_Part_2_Sidebar_Templates_and_Plugins.php</link>
<description>
&lt;p&gt;It's time for part 2 of the LnBlog themes tutorial series.  In this episode,
we'll cover modifying your sidebar.  This will include a brief discussion of how
theme templates work as well as an introduction to the plugin system.  In the 
process, we will also create a very simple 
and extremely unimpressive plugin.  Note that in this tutorial, unlike the last 
one, I will assume that you have a basic knowledge of HTML and CSS.  This 
tutorial will also include some PHP code, although I will nto assume a working
knowledge of PHP (although if you have one, it will help).&lt;/p&gt;

&lt;p&gt;As you may recall from last time, LnBlog's theme system has a concept of
paths.  This applies not only to images and style sheets, as we saw before, but
also to template.  In other words, LnBlog will look for a given template first
in your blog's templates directory, second in the templates directory of your
current theme, and lastly in the templates for the default theme.  This means
that you can easily modify the templates for each of your blogs individually or
for all of them at a time.&lt;/p&gt;

&lt;h4&gt;Modifying the template&lt;/h4&gt;
&lt;p&gt;Let's start by making a copy of your
&lt;code&gt;LnBlog/themes/default/templates/include_sidebar.php&lt;/code&gt; file and saving
it on your local hard drive so we can play with it.  If you open up the file in 
a text editor, you'll notice that there's almost nothing in it.  It should just
look like this:
&lt;code style=&quot;white-space: pre&quot;&gt;
&lt;?php 
global $EVENT_REGISTER;
$EVENT_REGISTER-&gt;activateEventFull($tmp=false, &quot;sidebar&quot;, &quot;OnOutput&quot;);
$EVENT_REGISTER-&gt;activateEventFull($tmp=false, &quot;sidebar&quot;, &quot;OutputComplete&quot;);
?&gt;
&lt;/code&gt;
Of course, if you don't know PHP, that's probably doesn't mean anything to you.  
In fact, it probably doesn't mean much even if you &lt;em&gt;do&lt;/em&gt; know PHP.  
That's because this code is part of LnBlog's event system&lt;/p&gt;

&lt;p&gt;As you may already know, the default page banner, menubar, and sidebar in
LnBlog are all implemented as plugins.  If you open up your
&lt;code&gt;include_banner.php&lt;/code&gt; or &lt;code&gt;include_menubar.php&lt;/code&gt;, they'll
contain similar code.  Basically, this code raises an &lt;em&gt;event&lt;/em&gt;, i.e. it
tells LnBlog's event manager that something interesting is happening and any
plugin that's interested in this event better get it's act together.  The event
manager them checks a list of plugins that signed up to be notified when this
event happens and tells them to do their thing.&lt;/p&gt;

&lt;p&gt;Now, since this is a template, we can actually ad HTML code right into it.
For illustrative purposes, I'll add some of my favorite links to the sidebar.
Here's what the resulting code looks like:
&lt;code style=&quot;white-space:pre&quot;&gt;
&amp;lt;?php 
global $EVENT_REGISTER;
$EVENT_REGISTER-&amp;gt;activateEventFull($tmp=false, &quot;sidebar&quot;, &quot;OnOutput&quot;);
?&amp;gt;
&amp;lt;h3&amp;gt;Recommended Links&amp;lt;/h3&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blogs.msdn.com/oldnewthing/&quot;&amp;gt;The Old New Thing&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.securityfocus.com/&quot;&amp;gt;Security Focus&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.larkware.com/&quot;&amp;gt;The Daily Grind&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;?php
$EVENT_REGISTER-&amp;gt;activateEventFull($tmp=false, &quot;sidebar&quot;, &quot;OutputComplete&quot;);
?&amp;gt;
&lt;/code&gt;
Notice that I broke the PHP code into two blocks and put the HTML in between
them.  Since tempaltes are actually PHP files, anything inside the &amp;lt;?php ?&amp;gt;
tags is treated as PHP code, and anything outside them is treated as HTML.
If you're sharp, you probably noticed that I did this because of the event code:
I put my markup between the OnOutput and OutputComplete events.&lt;/p&gt;

&lt;p&gt;If you save this file and upload it to your blog's templates directory,
you'll see your list of links in the sidebar.  However, you'll notice that the
links are at the &lt;em&gt;bottom&lt;/em&gt; of the sidebar.  That's because all the plugins
are loaded by the OnOutput event.  If you move the HTML code above that event,
then all your links will end up at the &lt;em&gt;top&lt;/em&gt; of the sidebar.  But what if
you want your links in the &lt;em&gt;middle&lt;/em&gt; somewhere?  Maybe you want your links
between your articles and your RSS feeds.  Well, that's why this isn't the 
recommended way to add to the sidebar.&lt;/p&gt;

&lt;h4&gt;A simple sidebar plugin&lt;/h4&gt;
&lt;p&gt;However, there is good news.  Writing a simple plugin to display some links
in the sidebar is easy.  Really easy.  In fact, it's about a dozen lines of
boiler-plate PHP code with your HTML inserted in the middle.  And once you have the
plugin written, it will be detected by the plugin manager and you will be able
to change where it appears in the sidebar by changing its load order in the 
plugin loading configuration page.&lt;/p&gt;

&lt;p&gt;Here's a plugin version of the links in the example above:
&lt;code style=&quot;white-space:pre&quot;&gt;
&amp;lt;?php
class MyLinks extends Plugin {
	function MyLinks() {
		$this-&amp;gt;plugin_desc = &quot;Shows my favorite links in the sidebar&quot;;
		$this-&amp;gt;plugin_version = &quot;0.1.0&quot;;
	}

	function show_links() {
?&amp;gt;
&amp;lt;h3&amp;gt;Recommended Links&amp;lt;/h3&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blogs.msdn.com/oldnewthing/&quot;&amp;gt;The Old New Thing&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.securityfocus.com/&quot;&amp;gt;Security Focus&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://www.larkware.com/&quot;&amp;gt;The Daily Grind&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;?php
	}
}

$plug = new MyLinks();
$plug-&amp;gt;registerEventHandler(&quot;sidebar&quot;, &quot;OnOutput&quot;, &quot;show_links&quot;);
?&amp;gt;
&lt;/code&gt;
This is about the simplest plugin you can have.  It is a simple PHP class with a
constructor that defines the version number and a short description, and a
single method that dumps some HTML output to the screen.  Note at the bottom
that you have to create an instance of the class and register the method with
the event manager.&lt;/p&gt;

&lt;p&gt;Now is probably a good time to mention that plugins use a path mechanism too.
In other words, you can have plugins that apply only to a single blog, just like
you can with theme template and style sheet.  Just make a &quot;plugins&quot; directory in
the blog's directory and put the plugins there.  They will be treated just like
a regular plugin, but no other blog will be able to see them.&lt;/p&gt;

&lt;p&gt;So, now let's install your new plugin.  Copy the above code and paste it into
a new file named &lt;code&gt;sidebar_mylinks.php&lt;/code&gt;.  Note that it is &lt;em&gt;very
important&lt;/em&gt; that you not have any blank lines or spaces outside the PHP 
&amp;lt;?php &gt;&amp;gt; tags, as this will cause error messages due to the way PHP handles 
output.  Now, create that plugins directory in you blog's directory on the 
server and upload the &lt;code&gt;sidebar_mylinks.php&lt;/code&gt; file into it.  If you
open up your blog in a web browser, you should see the new links.  If you change
the load order of your sidebar_mylinks plugin from the plugin loading page, then
the link section will move in the sidebar.&lt;/p&gt;

&lt;p&gt;If you want to have several independant sidebar sections, you can make copies
of this plugin to achieve that.  Just change the HTML code, the plugin_desc on
the fourth line, and change all three instances of the name MyLinks to
MyOtherLinks, or something like that (the exact name doesn't matter, so long as
no two plugins have the same name).  If you're feeling adventurous, you can also
adapt this to add markup to the banner or menubar by changing the &quot;sidebar&quot;
parameter in the registerEventHandler line to &quot;banner&quot; or &quot;menubar&quot;.&lt;/p&gt;

&lt;p&gt;You can download files for this tutorial &lt;a
href=&quot;tutorial2_files.zip&quot;&gt;here&lt;/a&gt;.  In the next installment, we'll go into
theming the content areas of a page, including templates for blog
entries.  We&quot;ll also cover modifying the associated style sheets and possibly 
adding some images.&lt;/p&gt;
</description>
<author>pageer@skepticats.com (Peter Geer)</author>
<comments>http://lnblog.skepticats.com/entries/2006/05/12_1650/comments/</comments>
<guid>http://lnblog.skepticats.com/entries/2006/05/12_1650/</guid>
</item>
</channel>
</rss>