Archive for the ‘Tech-geekery’ Category

Return of the Son of the End of Free, Part I

May 17th, 2009 by Reinder

So the big media news last week was that Rupert Murdoch wants to start charging for the Wall Street Journal online, and the coverage brought back a word that I hadn't heard in a couple of years and that I didn't really expect to hear again: micropayments.

I'll talk about the new End of Free (there was a website by that name, once, but I can't find it anymore) and how I think it will play out in part II of this series, but I want to indulge in some nostalgia/give the younger readers a little history lesson first.

Ah, Micropayments. Scott McCloud loved them, Jakob Nielsen loved them, back in the days of the Dot.bomb. They were touted as an alternative to subscriptions beginning about a decade ago, when it first started becoming clear that banner ads weren't going to keep bringing in the $40 CPMs that they did back in 1997. When the 2001 recession hit and avertising revenue really tanked, demand for payment based content distribution models grew and a large number of firms popped up that offered content on either a subscription or a micropayment basis. Modern Tales was originally one of the subscription-based content providers; there was a micropayment-based site called Bitpass that was popular with cartooonists for a while, which I experimented with a bit half-heartedly at the time. Modern Tales, of course, is still here but it offers most (or in practice, all) of its services for free, financed mostly by advertising. Bitpass is gone. This seems to be the pattern everywhere, with only the formery subscription-based sites even lasting long enough to make the switch back to free content financed (just) by the much lower advertising CPMs common today.

What went wrong? Why didn't micropayments work out? I think there were three closely related reasons.

Firstly, micropayments didn't become immediate. There was no single infrastructure for them - instead there were a number of micropayments providers, plus some of the content providers themselves. Users had to sign up to a new site for each individual content provider or third-party scheme they came across, they had to get their account credentials, maybe make a deposit through a fourth party, thenthey could make the micropayment, then they could be redirected to the content they wanted. It was clunky and it meant that on top of the monetary micropayment, the user's time investment, at least for the first transaction, went through the roof. People online like immediacy and they hate uncertainty and waiting, so users weren't too keen on the whole process. So as Clay Shirky argued as early as 2000, people hated micropayments.

Secondly, users didn't just hate micropayments, they didn't understand them either. They did not understand the distinction between a micropayment and a payment, or between micropayments and subscriptions. Originally, a micropayment was defined as a small payment between a quarter and a fraction of a penny. By the time of the arrival of Bitpass in 2003, typical transactions offered were in the 25¢ to 75¢ range, and the fact that this was so was a big part of Scott McCloud's rebuttal to another Shirky piece accurately predicting Bitpass's failure, in which McCloud argued that this one would be different. By 2005, users in internet forums like the Comicgenesis forum were using the word "Micropayment" to refer to Modern Tales' subscription fees or regular Paypal donations. The term had been swept under the rug and never heard from again.

Third, the recession ended just at the time when the price of bandwidth and hosting plummeted. In other words, businesses started advertising online again as the cost of publishing came down dramatically. Free content became worthwhile again.

I haven't kept track of how the recession is affecting online ad revenue. My own ad income is up since I joined Webcomicsworld and ditched my Google ads, but that's not enough data to go on. However, I don't think it's a coincidence that this idea starts raising its head again in a new recession and comes from an industry that is having a really hard time.

In part II, I'll discuss some scenarios in which I think the idea may turn out to work after all. They are not going to be pleasant for people who like easy access to content (free or not) or

Open letter to the Scribus development community

April 26th, 2009 by Reinder

Dear people working on the open source desktop publishing application Scribus,

Thank you for working on this project. Linux needs desktop publishing software badly, and it seems like for some reason, you are the only community who can be bothered to work on it. Maybe DTP carries a stigma because it's primarily associated with print, which is all unhip and old-media these days.

However, there are some areas in which you really have to do better. First off, your application is uncharacteristically crash-prone. Also, the Dutch localization is so poor you might as well not have offered it at all. But these issues pale in comparison to the sheer appallingness of your Story Editor in which users can do basic text editing. Yes, I understand that a desktop publishing program is not a word processor. However, the ability to enter text is necessary in a desktop publishing program, and the functionality is relatively easy to implement. So why is the Story Editor incapable of entering into my document what I just typed into it or inserted through the menu for adding symbols?

For the record, when I use the menu to add a double left quote, double right quote or apostrophe, and then hit the Commit button to have the text inserted into the text box, I do not expect any of the following to happen:

  • Insertion of a straight quote or straight apostrophe at the insertion point
  • Insertion of nothing at all at the insertion point
  • One of the above, plus insertion of a space to the right of the insertion point
  • Insertion of a space two characters to the right of the insertion point
  • Deletion of the character to the right of the insertion point and/or the next character to the right
  • Insertion of the correct quote, but at a point other than the insertion point
  • Preservation of an existing straight quote that was selected to be overwritten

It often takes six or seven attempts to insert all the apostrophes and quotes correctly and the extra proofreading involved slows me down considerably. This is not good enough if you claim to have a professional-level product.

To my best understanding, barring problems with the conversion and handling of various character sets, the problem of inserting text at a cursor and passing it on to a different function, application or file was solved some time in the 1960s. Smart quotes have been known since the mid-eighties. I'm puzzled as to why Scribus appears unable to take advantage of existing knowledge in this basic area of computing functionality.

Regards, Reinder Dijkhuis, who would like an open source DTP program that does not actively work against him.

PS: Another exasperating behaviour from Story Editor is how it changes numbers typed into it into letters upon commit or when switching between windows. Please make this stop.

I hate WordPress, its new Dashboard, and its upgrade process I hate with the passion of a thousand suns

April 14th, 2009 by Reinder

Update: Nevermind, I've figured it out.

So, after several months worth of reminders sent by my web host that my old WordPress installation may be vulnerable, I decide to finally update it to version 2.7. I have this vague thought in the back of my head that I will regret it. but hey, I've learned from the last time I tried to update, right? So I back up my SQL database, root through the file structure to find my old templates and back them up, and THAT should make me safe against losing my customisations again, right?

Wrong.

Once the upgrade, performed through my web host's Cpanel, is finished, I have a shiny default-themed WordPress installation, just like I expected, and ... a distinctly UNshiny new Dashboard. God, that thing is ugly and everything is in the wrong place. But I find my Theme editor, cut and paste in my old themes, and... nothing changes. I have lost all my customisations and will have to figure out from scratch how to implement them.

Thankfully, due to the fear of wasted effort that I developed after the last time I upgraded and lost everything, I changed very little. But what I changed, I REALLY, REALLY want to be on the weblog. so I'm not happy

I used to be able to figure it out, but since the early days of Waffle, I got a day job and a life. I do not want to waste hours of my life figuring out how to make stuff work that worked just an hour ago. So this upgrade of WordPress is going to be my last, ever. I will ignore upgrade warnings from now on. Balancing the risk that the blog may get hacked if it falls behind against the CERTAINTY of damage if I upgrade, I can not justify upgrading it ever again. WordPress sucks and is too difficult for normal people to use.

Bye-bye AdSense, or It was great when it lasted, now it’s not even nice.

April 3rd, 2009 by Reinder

Last month, I got a message from Google AdSense that told me it was time to speed up phasing out my remaining Google ads and in fact cancel my AdSense service altogether. The e-mail announced the introduction of "interest-based targeting" using the infamous Doubleclick Dart cookie, which tracks users' behaviour across multiple sites and keeps tabs on their interests. The message also suggested I update my privacy policy, which I do not have. I consider this technology to be invasive and the fact that I'm supposed to warn people about the invasive technology in a privacy policy confirms that. So I took my Google ads off my active pages and asked the kind people at one of my other ad providers, Webcomics World if they could take Google ads out of the fallback chain for ads they serve on my websites (they said yes, and I haven't seen Google ads coming from them since).

I also installed Google's browser extension for opting out of the Doubleclick cookie, though since I tend to use more than just one browser on my home box, it's probably time I dug out the giant /etc/hosts file again to protect myself at the operating system level.

There may still be some Google ads lying around here and there, in the older corners of my content empire that I no longer visit. Not for long, though; today, I finally logged in to AdSense to cancel my account. Google ads should be gone soon.

PngOptimizer

March 28th, 2009 by Reinder

While doing some internet research for a future post on webcomic image optimization, I came across a blog post that claims a GPL-licensed Windows program called PngOptimizer outperforms PNGout by about 8% of the original uncompressed file size. I was a bit skeptical as the quoted compression percentage for PNGout in the post seems a bit low to me (typically for me, PNGout takes out 8 to 10% of the original file size) but I downloaded and tried it anyway. I tested it on the web files for Feral and while I don't see PngOptimizer outperforming PNGout on those, it does perform very well and is easy to use. Windows-only, though. I'll investigate more when I get home and have a better set of testing files at my disposal.

Also, here's how to enable using PNGout directly from your Windows Explorer window. Neat, if you like registry hacking.

Also,

Scanner/SCSI card/cable update, plus my first all-digital art

February 4th, 2009 by Reinder

I have a working SCSI card again, and though it uses a different cable configuration than I described earlier, I know what cable that is and where to find it. I may balk a bit at the cost but will probably put in the order soon, as the alternatives aren't too appealing. I have had a few items scanned at a local scanner service, but at a price of € 5 a scan and a maximum resolution of 400 DPI (NOT good enough for archiving or indeed for submission to a professionally printed magazine), the cable price becomes worth paying very quickly.

It may still be a few days before I can scan at home again, and today after testing the card, I spent some time exploring yet another alternative: all-digital drawing. I've had tablets for years, and do a lot of work with them, but until today, I had never created more than a doodle from scratch in any art software. Today, I changed that by drawing this:

Portrait of Tamlin, for use on the Modern Tales cast pages

Portrait of Tamlin, for use on the Modern Tales cast pages

It was a bit awkward for me to work on as I found it hard to draw some of the curves. I undid the jawline a few dozen times before getting one that was good enough. But the result, while flawed, is flawed in pretty much the same ways as my hand-drawn work, so for a first attempt, it's very encouraging. The image is used in the new cast pages on Modern Tales and I will try and do a full-body portrait this weekend. Total time less than an hour and likely to get faster with practice.

Bleg no. 2: old SCSI cable for scanner

January 11th, 2009 by Reinder

I've been back from my holiday at Aggie's for a week. Aggie has already written up the whole week in her blog, and I don't have anything to add to that. It was a fantastic Christmas.

Since then, I've been back to the grind, and one of the items on the list is getting my A3 scanner to work again. Last time I wrote about it, my PC wasn't recognising the SCSI card. I've since received a potential replacement card that may or may not work; I've also noticed that the BIOS sometimes does notice that there is a SCSI card attached. The reason I haven't tested the new card yet is that the position of the suitable connector is awkward - I'd have to leave the case permanently open to hook the scanner up to it. I'll get to testing it out next week though I don't know yet how I'm going to scan the next comics page yet.

Meanwhile, though, the work has hit a new snag. I have reason to believe that the SCSI cable is also broken. It's a 68-pins High-density SCSI cable built in 1997 and I may have a hard time replacing it. The connectors are 2 1/2 inches (6.3 cm) wide.

The connectors I need

The connectors I need

I need a cable with connectors matching those, and I need them from a supplier in the Netherlands, so that I can just go and look at the connectors and check that they are the same. Like I said earlier, this may be a lot of effort to go through just to get a cable, but replacing the scanner would be prohibitively expensive. As would depending on an outside service, in the long run. As I'm doing more pencil art and more single-panel pages lately, splicing artwork together or scanning from reduced copies isn't an option either.

So if you have a cable that looks like the one in the picture, or you know a store that sells them, preferably in Groningen but anywhere in the Netherlands will be all right, please let me know at reinder.dijkhuis@gmail.com or in the comments here. Thank you.

State of the comic – broken scanner/SCSI card

December 21st, 2008 by Reinder
Line art for page 17 (really) of the epilogue for <i>Invasion</i>, shot using my cell phone camera

Line art for page 17 (really) of the epilogue for Invasion, shot using my cell phone camera

I'm not out of the woods yet. The desktop PC has a new hard drive, Ubuntu linux is working beautifully including the tablet and Photoshop over Wine, but the scanner is still bust. I got a SCSI card sent to me courtesy of Mithandir and Alien of Chasing the Sunset — Mithandir also set me up with the A3 scanner three and a half years ago — but there's a new problem. Before sending me the card, Mith asked me whether the scanner needed SCSI 1 or 2, and my reply basically amounted to "Moo?". Like most computers everywhere, I know buggerall about SCSI. It's an old, but fast hardware interface with large 68-pins connectors, right?

Wrong.

Once I noticed that the connector at the back of the card wasn't the same as that on the scanner's cable, I did some research. There's a wide range of different connectors. SCSI is still being made and developed, mostly for higher-end systems, but for cheaper systems like the one I bought last march in a rush to replace the studio computer (which has since become the home desktop - I've had a very rough year, computer-wise), getting support will be hard and will become harder in the future.

Why is this important? Because the A3 scanner, antiquated though it is, is still a very nifty device that would take me over fifteenhundred Euro to replace with a similar but newer, USB-based, one. This would effectively wipe out my hardware budget for the next year so that if any other machine breaks, it would have to be replaced in a hurry by another cheap and nasty box that will have more problems within the year like the one I'm typing this on now. Instead of finally moving over to a schedule of smooth, no-interruption replacements of my production hardware before it breaks, I'd have another year of having to react to incidents as they occur, which is exactly the thing that's been frustrating me so much about the computer troubles I've had all year, including the latest hard drive/SCSI card breakage.

It's not hopeless though. When I investigated the card I got in the mail more closely, I noticed there was a 68-pins connector on the side of the card. If the physical chassis allows me to, I might be able to plug that in if I leave the side panel off the system and take the whole shebang out of its niche in my (old and decrepit) computer desk. That's a long-shot though. It presupposes that a) the problem is with the SCSI card in the first place (I still haven't tested that fully, and can't do so without a second box to put the card in); b) the connectors are as compatible as they look; c) it is actually possible with the compact box configuration. We'll see. If the card doesn't work, I'll have to start looking again, and it's going to cost me in both time and money. There may be renewed comic delays.

Lurching from one problem to another

December 11th, 2008 by Reinder

I've got a new hard drive, and managed to buy a SATA drive this time. I've got Kubuntu linux Hardy Heron running, and because I've reinstalled Kubuntu so often during the past year due to repeated hardware failures, I've found the usual configuration hassles to be pretty bearable. So I'm all set to get back to business as usual, right?

Wrong.

Once Kubuntu was installed, I was initially pleasantly surprised at how fast it booted compared to what I'd got used to. Until I realised that part of the reason it booted so fast was that the SCSI initialisation got skipped in the process. The SCSI card in my machine is there to connect the A3 scanner. Since new A3 scanners are ridiculously expensive, I'll be looking for a new SCSI card for it, in the hope that that will in fact fix the problem. It could be a number of different things and I can't really test for any of them with just one functional desktop PC in the house.

Luckily, I won't have to do any scanning in the next few weeks. Invasion updates are scanned for the next five weeks and all I have to do is finish them up. But it's yet another hurdle to getting Feral back on track. And it's more expense just keeping this system going. I guess I should start a hardware fund and put a hundred Euro or so in it every month. Don't know if I can manage that on top of what I already save... not without seriously tightening the belt anyway.

In more positive news... I've figured out how to make a sidebar appear in individual blog pages... that was rather easy. I can't remember or easily tell what the original source of the solution was but it involved very minor changes in the template code. Now the sidebar's more or less consistent across pages, shows more of what's in the blog to people coming in from search engines, and shows the two ads everywhere. Win.

Useful WordPress hack courtesy of Erin, plus to-do list for the blog

December 10th, 2008 by Reinder

I didn't lose a lot of irreplaceable stuff in last Sunday's hard drive crash. Luckily, all my working files and my financial accounts are on external drives as a matter of standard procedure - I never keep them on the same physical volume where my operating system is. But I did lose a few items that needed to be on that volume or that I'd quickly saved into my Documents folder. I lost a handy shell script for ripping sound (and only sound) from DVDs that Xepher of Xepher.net gave me the basics of and that I finished myself until it did what it was supposed to, in a clunky way. And I nearly lost this: <?php $reinAdCode = array(); //just prepping the array. //this defines the google adWords javascript for later use $reinAdCode['adWords'] =
'<script type="text/javascript"> <<!-- googleadclient = "[number]"; googleadwidth = 160; googleadheight = 600; googleadformat = "160x600as"; googleadtype = "textimage"; //2007-03-18: Blog googleadchannel = "[number]"; googlecolorborder = "36414d"; googlecolorbg = "FFFFFF"; googlecolorlink = "0000FF"; googlecolortext = "000000"; googlecolorurl = "008000"; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>';

//project wonderful code for later use
$__reinAdCode['project_wonderful'] =    
        '&lt;!-- Begin Project Wonderful ad code: -->
        &lt;!-- IMPORTANT: All lines, including these comments, must be included. -->
        &lt;!-- Removing or altering them could result in your ads being automatically shut down! -->
        &lt;!-- Ad box ID: [number] -->
        &lt;script language=\'JavaScript\' type=\'text/javascript\'>
            // &lt;![CDATA[
            r = new String (Math.random()*1000);
            r = r.substr(0, 5);
            s = new String ("&lt;script language=\'JavaScript\' type=\'text/javascript\'");
            s += "src = http://www.projectwonderful.com/gen.php";
            s += "?id=[number]&amp;type=4";
            s += "&amp;r=" + r;
            if (document.referrer){
            s += "&amp;referer=" + escape(document.referrer);
            }
            s += ">&lt;\/scr";
            s += "ipt>";
            document.write(s);
            // ]]>
        &lt;/script>
            &lt;noscript>&lt;map name="admap[number]" id="admap[number]">&lt;area href="http://www.projectwonderful.com/out_nojs.php?r=0&amp;c=0&amp;id=[number]&amp;type=4" shape="rect" coords="0,0,125,125" title="" alt="" target="_blank" />&lt;/map>
            &lt;table cellpadding="0" border="0" cellspacing="0" width="125" bgcolor="">&lt;tr>&lt;td>&lt;img src="http://www.projectwonderful.com/nojs.php?id=[number]&amp;type=4" width="125" height="125" usemap="#admap1971" border="0" alt="" />&lt;/td>&lt;/tr>&lt;tr>&lt;td bgcolor="" colspan="1">&lt;center>&lt;a style="font-size:10px;color:#0000ff;text-decoration:none;line-height:1.2;font-weight:bold;font-family:Tahoma, verdana,arial,helvetica,sans-serif;" href="http://www.projectwonderful.com/advertisehere.php?id=[number]&amp;type=4" target="_blank">Project Wonderful - Your ad here, right now, for as low as $0&lt;/a>&lt;/center>&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="1" valign="top" width="125" height="3" bgcolor="#000000">&lt;center>&lt;img src="http://www.projectwonderful.com/black.png" width="125" height="3" border="0" alt="" />&lt;/center>&lt;/td>&lt;/tr>&lt;/table>
        &lt;/noscript>
        &lt;!-- End Project Wonderful ad code. -->';

?>

&lt;div id="sidebar">
    &lt;?php
        /* Widgetized sidebar, if you have the plugin installed. */
        if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) :
    ?>
    &lt;ul>

        &lt;li>
            &lt;?php include (TEMPLATEPATH . '/searchform.php'); ?>
        &lt;/li>

        &lt;!-- Author information is disabled per default. Uncomment and fill in your details if you want to use it.
        &lt;li>&lt;h2>Author&lt;/h2>
        &lt;p>A little something about you, the author. Nothing lengthy, just an overview.&lt;/p>
        &lt;&lt;/li>
        -->

        &lt;?php 
            if ( is_404() || is_category() || is_day() || is_month() 
                    ||  is_year() || is_search() || is_paged() ) :
        ?>
        &lt;li>

            &lt;?php
                if (is_404()) {/* If this is a 404 page (currently empty) */ 
                } elseif (is_category()) { /* If this is a category archive */
            ?>
            &lt;p>You are currently browsing the archives for the &lt;?php single_cat_title(''); ?> category.&lt;/p>


            &lt;?php    } elseif (is_day()) {/* If this is a daily archive */ ?>
            &lt;p>
                You are currently browsing the &lt;a href="&lt;?php bloginfo('url'); ?>/">&lt;?php echo bloginfo('name'); ?>&lt;/a> blog archives for the day &lt;?php the_time('l, F jS, Y'); ?>.
            &lt;/p>


            &lt;?php } elseif (is_month()) { /* If this is a monthly archive */ ?>
            &lt;p>
                You are currently browsing the &lt;a href="&lt;?php bloginfo('url'); ?>/">&lt;?php echo bloginfo('name'); ?>&lt;/a> 
                blog archives for &lt;?php the_time('F, Y'); ?>.
            &lt;/p>


            &lt;?php } elseif (is_year()) { /* If this is a yearly archive */ ?>
            &lt;p>
                You are currently browsing the &lt;a href="&lt;?php bloginfo('url'); ?>/">&lt;?php echo bloginfo('name'); ?>&lt;/a> 
                blog archives for the year &lt;?php the_time('Y'); ?>.
            &lt;/p>


            &lt;?php } elseif (is_search()) { /* If this is a search page */ ?>
            &lt;p>
                You have searched the &lt;a href="&lt;?php echo bloginfo('url'); ?>/">&lt;?php echo bloginfo('name'); ?>&lt;/a>
                 blog archives for &lt;strong>'&lt;?php the_search_query(); ?>'&lt;/strong>. If you are unable to find anything in these search results, you can try one of these links.
            &lt;/p>


            &lt;?php  } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { /* this is paged browsing view */ ?>
            &lt;p>You are currently browsing the &lt;a href="&lt;?php echo bloginfo('url'); ?>/">&lt;?php echo bloginfo('name'); ?>&lt;/a> blog archives.&lt;/p>
            &lt;?php } /* this ends the paged browsing output and the chain of elseif's */ ?>

        &lt;/li>
        &lt;?php
            /* this ends the if( is_404() || is_category() || is_day() ||..blah blah blah crap above */
            endif;
        ?>

        &lt;li>
            &lt;div style="margin:20px auto;padding:10px 3px 10px 25px;text-align:center;">
                &lt;?php echo $__reinAdCode['project_wonderful']; ?>
            &lt;/div>
        &lt;/li>

        &lt;?php wp_list_pages('title_li=&lt;h2>Pages&lt;/h2>' ); ?>

        &lt;li>
            &lt;h2>Archives&lt;/h2>
            &lt;ul>
                &lt;?php wp_get_archives('type=monthly'); ?>
            &lt;/ul>
        &lt;/li>

        &lt;!-- rein I think the below needs to be wrapped in an &lt;li>&lt;/li> -->
        &lt;?php wp_list_categories('show_count=1&title_li=&lt;h2>Categories&lt;/h2>'); ?>

        &lt;?php
            /* If this is the frontpage or a normal page? */
            if ( is_home() || is_page() ) :
        ?>

        &lt;li> 
            &lt;?php wp_list_bookmarks(); ?>
        &lt;/li>    

        &lt;li>
            &lt;?php echo $__reinAdCode['adWords']; ?>
        &lt;/li>

        &lt;li>
            &lt;h2>Meta&lt;/h2>
            &lt;ul>
                &lt;?php wp_register(); ?>
                &lt;li>&lt;?php wp_loginout(); ?>&lt;/li>
                &lt;li>&lt;a href="http://wordpress.org/" title="Powered by WordPress, state-of-the-art semantic personal publishing platform.">WordPress&lt;/a>&lt;/li>
                &lt;?php wp_meta(); ?>
            &lt;/ul>
        &lt;/li>
        &lt;?php else : ?>
        &lt;li> 
            &lt;?php echo $__reinAdCode['adWords']; ?>
        &lt;/li>
        &lt;?php endif;  /* end of the homepage/normal page check */    ?>
    &lt;/ul>
    &lt;?php endif;  /* this is the end of the dynamic sidebar if */ ?>
&lt;/div>   

(Notes: HTML/PHP tags are escape-crippled so they show up in the published blog, so do not use the source code for this blog page; identifying information for the ad boxes has been stripped out. Quotes should not show up as smart quotes, and one of these days, I'm gonna figure out how to turn that off in WordPressNevermind. Single quotes in the javascript for the ad boxes have been escaped, which they should be if you decide to use this. Apologies for the lack of indents - they were there in the source, but the blog doesn't have CSS to make them show up correctly. Pastebin version)

What it is: a modification to the sidebar in WordPress's default theme, so that the ad boxes show up in a certain place within the sidebar, regardless of whether the version of the sidebar shown is the full version shown on the front page or the shorter version shown in the archive navigation sections and custom pages. It was sent to me by reader Erin, who insists that it's not up to the standards of coding she writes in her day job, but it's definitely an improvement on the original in both clarity and functionality.

Now the next step for me will be to make that sidebar show up on all pages. That could take me a while, though. WordPress's template structure is hideously complicated and I'd have to sit down and study if for several days before I'd be able to figure out how to manipulate it fully. This is in stark contrast with the template coding for Movable Type, which was tag based and very easy for me to understand. On the other hand, WordPress runs a lot more smoothly; Movable Type's performance was horrible and despite the efforts of some very smart coders, it was pretty much defenseless against spam - the spam wouldn't get published but a concerted attack could kill the installation, the site it was on and the system hosting it. So I'll put up with having less effective control over the blog's appearance - I can always study it whenever I do have some time.

Other to-do items include adding some alternate templates for distribution to the website, though I may end up doing that through WillowCMS and CaRP instead,