Geekery: Transferring this blog from iBlog 2 to WordPress

Note: For those looking to move from iBlog 2 to wordpress, this article and some follow-up can be found at the iBlog survivors’ forum. The complete script is available there for download. You really don’t have to understand all this stuff.

I started using iBlog several years ago, when it was new and I was new to blogging. It had one advantage over other blogging packages: it came free with my .mac account back in the day and it worked on .mac servers, which are, to put it kindly, inflexible.

Two things have happened in the intervening years: first, all the blogging platforms have gotten much better, including the ability to work on the blog while offline. The second is that iBlog made an abortive step forward to iBlog 2, which was a major improvement, but then the whole company stalled before that release was really finished (although by then I was fully committed to it). I will miss iBlog 2, but not as much as I will enjoy getting my stuff onto a faster, more versatile platform.

After a rather exhaustive search of blogging and CMS systems, I settled on WordPress. While it’s not perfect, it is a straightforward MySQL-Apache-php application that is easy to fiddle with, and some of the customizations I was looking for were much easier with WordPress than with others.

WordPress has a whole bunch of tools and instructions for importing your stuff from other blog systems. None of those did me much good at all, however, as iBlog was too obscure for anyone to worry about. After searching the Internet I found some helpful information, but it all applied to iBlog 1 – most people never made the move to the ill-fated upgrade. I was pretty much on my own.

WordPress can import data in a variety of formats, but it was up to me to get the data out of iBlog in a format WrodPress could understand. The most versatile format was one created by the folks at WordPress, which could include information specific to WordPress. Cool! Decision made, I was on my way.

Except… the folks at WordPress have never bothered to document the structure of their files. Apparently It’s something they’ve been meaning to get around to eventually (though the people writing translation software for the other major blogging software have long since muddled through it). I did what everyone else has had to do to export data: copy one of WordPress’s files and fiddle with it until it works. Not only is this a pain in the patoot, there might be tags that don’t appear in my examples that could nonetheless be useful to me. Oh, well.

I needed my import file to include definitions of categories, and then each of the blog entries, with correct category associations. My example file had a lot of fields that seemed redundant for my purposes, but without documentation I wasn’t going to waste time trying to figure out which tags were required and which weren’t.

Here is a very small (one episode) export file. We’ll go into the details of things like nicename later:

<rss>
<channel>
    <title>Muddled Ramblings and Half-Baked Ideas</title>
    <link>http://jerssoftwarehut.com/muddled</link>
    <description>blog!</description>
    <pubDate>Thu, 28 Jun 2007 21:32:21 +0000</pubDate>
    <generator>Jers Very Clever Script</generator>
    <language>en</language>
    <wp:wxr_version>1.0</wp:wxr_version>
    <wp:base_site_url>http://jerssoftwarehut.com/muddled</wp:base_site_url>
    <wp:base_blog_url>http://jerssoftwarehut.com/muddled</wp:base_blog_url>
 
<wp:category>
    <wp:category_nicename>bars-of-the-world-tour</wp:category_nicename>
    <wp:category_parent></wp:category_parent>
    <wp:posts_private>0</wp:posts_private>
    <wp:links_private>0</wp:links_private>
    <wp:cat_name><![CDATA[Bars of the World Tour]]></wp:cat_name>
    <wp:category_description><![CDATA[blah blah blah]]></wp:category_description>
</wp:category>
 
<item>
    <title>Delayed by Weather</title>
    <link></link>
    <pubDate>2007-03-27 18:23:57</pubDate>
    <dc:creator><![CDATA[Jerry]]></dc:creator>
    <category><![CDATA[Bars of the World Tour]]></category>
    <category domain="category" nicename="bars-of-the-world-tour"><![CDATA[Bars of the World Tour]]></category>
    <content:encoded><![CDATA[<p>The Weather Channel is calling the roads around here "a big mess", so I'm going to take time out from driving and catch up on some writing. Unfortunately, TWC is also calling for dangerous surf and "rough bar conditions". I'd better leave the laptop in my room.</p>]]></content:encoded>
    <excerpt:encoded><![CDATA[&amp;nbsp;]]></excerpt:encoded>
    <wp:post_id>1065</wp:post_id>
    <wp:post_date>2007-03-27 18:23:57</wp:post_date>
    <wp:post_date_gmt>2007-03-27 18:23:57</wp:post_date_gmt>
    <wp:comment_status>open</wp:comment_status>
    <wp:ping_status>open</wp:ping_status>
    <wp:post_name>Delayed by Weather</wp:post_name>
    <wp:status>publish</wp:status>
    <wp:post_parent>0</wp:post_parent>
    <wp:post_type>post</wp:post_type>
</item>
 
</channel>
</rss>

But how to create the file? The data for iBlog 2 is distributed over (literally) thousands of files. Writing a program to track down all the information and make sense of it would be a major chore. That’s where AppleScript came in. iBlog’s programmer took the time to provide access to the iBlog data through the Apple Scripting system. I was able to let iBlog read all of its silly scattered files and make sense of them, then provide the data to me in a coherent fashion. So far, so good. All I needed to do was loop through all the episodes, pull out the data I needed, and shovel it into a text file that WordPress could read.

[IMPORTANT NOTE: I’ve tried to go back and reconstruct the scripts as they were at the appropriate stage in development, but the snippets are untested.]

[ALSO IMPORTANT: you don’t really have to understand the code. If you are in this boat, I will help you. You should understand the challenges, but I’m here for you.]

on run

set exportFile to 0

try

set exportFile to open for access “Users:JerryTi:Documents:scripts:” & niceName & “.xml” with write permission

set eof of exportFile to 0

tell application “iBlog” to set cats to the categories of the first blog

repeat with cat in cats

tell application “iBlog” to set catname to (the name of cat) as text

set niceName to the first word of catname

write rssHead to exportFile as «class utf8» — xml/rss header stuff that’s always the same

set catDescription to “blah blah blah”

write out the category info

tell application “iBlog” to set nextText to “<wp:category>” & newLine & tab & “<wp:category_nicename>” & niceName & “</wp:category_nicename>” & newLine & tab & “<wp:category_parent></wp:category_parent>” & newLine & tab & “<wp:posts_private>0</wp:posts_private>” & newLine & tab & “<wp:links_private>0</wp:links_private>” & newLine & tab & “<wp:cat_name><![CDATA[” & catname & “]]></wp:cat_name>” & newLine & tab & “<wp:category_description><![CDATA[” & catDescription & “]]></wp:category_description>” & newLine & “</wp:category>” & newLine & newLine

write nextTex
t
to exportFile as «class utf8» — have to coerce the text from 16-bit unicode

tell application “iBlog” to set ents to the entries of cat

repeat with ent in ents

get the stuff in iBlog’s world, work with it here

tell application “iBlog”

set titl to (the title of ent)

set desc to (the summary of ent)

set bod to (the body of ent)

set postDate to the post date of ent

end tell

set nextText to (((“<item>” & newLine & tab & “<title>” & titl & “</title>” & newLine & tab & “<link></link>” & newLine & tab & “<pubDate>” & postDate) & “</pubDate>” & newLine & tab & “<dc:creator><![CDATA[Jerry]]></dc:creator>” & newLine & tab & “<category><![CDATA[” & the name of cat & “]]></category>” & newLine & tab & “<category domain=”category” nicename=”” & niceName & “”><![CDATA[” & the name of cat & “]]></category>” & newLine & tab & “<content:encoded><![CDATA[” & bod & “]]></content:encoded>” & newLine & tab & “<excerpt:encoded><![CDATA[” & desc & “]]></excerpt:encoded>” & newLine & tab & “<wp:post_id></wp:post_id>” & newLine & tab & “<wp:post_date>” & postDate) & “</wp:post_date>” & newLine & tab & “<wp:post_date_gmt>” & postDate) & “</wp:post_date_gmt>” & newLine & tab & “<wp:comment_status>open</wp:comment_status>” & newLine & tab & “<wp:ping_status>open</wp:ping_status>” & newLine & tab & “<wp:post_name>” & titl & “</wp:post_name>” & newLine & tab & “<wp:status>publish</wp:status>” & newLine & tab & “<wp:post_parent>0</wp:post_parent>” & newLine & tab & “<wp:post_type>post</wp:post_type>” & newLine & “</item>” & newLine & newLine

write nextText to exportFile as «class utf8»

end repeat

end repeat

write rssTail to exportFile as «class utf8» — xml/rss file closing stuff

on error errStr number errorNumber

if exportFile is not equal to 0 then

close access exportFile

set exportFile to 0

end if

error errStr number errorNumber

end try

if exportFile is not equal to 0 then

close access exportFile

set exportFile to 0

end if

end run

So far things are pretty simple. The script loops through the categories, and in each category it pulls out all the episodes. Only it kept stalling. It turns out that sometimes iBlog took so long to respond that the script gave up waiting. I added

with timeout of 600 seconds

at the start to make the script wait a full ten minutes for iBlog to respond. Yes, iBlog certainly is no jackrabbit of a program.

Now the program ran! The only problem is, the resulting file doesn’t work. Hm. The first thing the importer reports is that it can’t read the dates the way AppleScript formats them. So, I added a function to reformat all the dates to match the example. Then it was importing categories, but not items. Why not?

Um… actually I don’t remember the answer to that one. Let’s just say that it took a lot of fiddling and testing to get it right. Eventually, hurrah! There in my WordPress installation were episodes from iBlog.

And they looked like crap. The thing is, that iBlog included unnecessary HTML tags around the blog title, excerpt, and body. It’s going to be a lot easier to clean them up now, while we’re mucking with each bit of text anyway, so back to AppleScript’s lousy string functions we go to clean up iBlog’s mess. Now, after we get all the data from iBlog, we call a series of functions to clean it all up:

set titl to stripParagraphTags(titl)

set desc to stripParagraphTags(desc)

set postDate to formatDate(postDate)

set bod to fixBlogBodyText(bod, postDate)


The actual functions are available in the attached final script.

Things are looking better, but still not very good. Much of this is due to some junk iBlog did when converting my older episodes into iBlog 2 format. One thing it did was to insert hard line breaks in the text of the blog body. No idea why. Maybe they were there all along and I had no way to see them. WordPress helpfully assumes that if you have a line break in the data it imports, you want a line break when it shows on the screen. So, every line break is replaced by a <br /> tag when imported into WordPress. This will not do. Additionally, iBlog replaced paragraph breaks </p><p> with a pair of break tags: <br /><br />. Once again, the reason for this is a mystery. The latter issue is less important, but we may as well address it while the hood is up.

Back we go into the fixBlogBodyText function, to repair more silly iBlog formatting. The resulting function looks like this:

on fixBlogBodyText(s, postDate)

this assumes that if an episode is supposed to start with a div, it will have a style or class

if (the offset of “<div>” in s) is equal to 1 then

set s to text 6 thru (the (length of s) – 6) of s

in some cases there was an extra line feed at the end of the text as well

if the last character of s is “<” then

set s to text 1 thru (the (length of s) – 1) of s

end if

set s to “<p>” & s & “</p>”

end if

clean up iBlog junk (lots of this stuff is the result of upgrading to iBlog 2 – the conversion was not clean

replace all line breaks with spaces

set s to replaceAll(s, “

“, ” “)

replace all double-break tags with paragraph tags

set s to replaceAll(s, “<br /><br />”, “</p>” & newLine & “<p>”)

replace all old-fashioned double-break tags with paragraph tags

set s to replaceAll(s, “<br><br>”, “</p>” & newLine & “<p>”)

get rid of some pointless span class info


set s to replaceAll(s, ” class=”Apple-style-span””, “”)

return s

end fixBlogBodyText

note: replaceAll is a utility function I wrote that does pretty much what it says. You will find it in the attached source file. newLine is a variable I defined because left to it’s own devices AppleScript uses the obsolete Mac OS 9 line endings. What’s up with that?

At this point the text is importing mostly nicely. But wait! I was running my tests just working with one category to save time. When I looked at Allison in Anime on WordPress, some really weird things started happening. It turns out that when importing the data, you need line breaks every now and then, otherwise the importer will insert them. That would be nice to put in the documentation somewhere! In one of my episodes, the newline was inserted right in the middle of a <div> tag, which led to all kinds of trouble. So, to the above script I added a line that inserts a line break between </p><p> tags. As long as any one paragraph isn’t too long, I’ll be all right.

set s to replaceAll(s, “</p><p>”, “</p>” & newLine & “<p>”)

And with that, we’ve done it! We’ve written a script that will export all the data from iBlog 2 and format it in a way that WordPress can accept. Time to run it on the whole blog, go take a little break, and come back and see how things went…

Dang. Didn’t work. There’s a maximum file size for import, and my blog is too damn big. Not a huge problem, just a bit of modification to make each category a separate file. Now, at last, the data is imported, the text looks nice, and we’re ready to make the move to our new home.

Except…

The images don’t show up, and links between episodes are broken. Also, it would be nice if people could still read the old Haloscan comments. I guess we’re not done yet.

Image links were the easiest to repair. In iBlog 2 the source code always looks for the image at path /https://muddledramblings.com/wp-content/uploads/iblog/. We just have to find those links and replace them with new info. I used Automator to find all the image files in the iBlog data folders, then I copied them all up to a directory on the WordPress server, and pointed all the links there. Worked like a charm! (Icerabbit goes into more detail on that process here. I used different tools, but the process is the same.)

Links between episodes turned out to be a lot trickier. It came down to this: How do I know what the URL of the episode is going to be when I load it into WordPress? I had to either know what the episode’s id was going to be, or I had to know what its nicename was going to be.

Nicename is a modified title that can be used in URL’s – no spaces and whatnot. “Rumblings from the Secret Labs” becomes “rumblings-from-the-secret-labs”. If I set up wordpress to use the nicename to link to an episode rather than the ID number, it would have some advantages, but I can get long-winded (have you noticed?) and that applies to my episode titles as well. The URL’s for my episodes could get really long. Therefore, I’d rather use the episode’s ID for its permalink. (If you try the icerabbit link above, you will see the nicename version of a link.)

Happily, the import file format allows me to specify the id of episodes I upload. (I don’t know what it does if there’s already an episode with that ID.) After some fiddling I managed to specify reliably what ID to give each episode. Now in my script I make a big table with the iBlog paths to each episode and the ID I will assign it. Before the main loop I have another that builds the table:

first loop

set postID to firstPostID

set idTableRef to a reference to episodeIDTable

tell application “iBlog” to set cats to the categories of the first blog

repeat with cat in cats

set cat to item 1 of cats

tell application “iBlog” to set catFolderName to the folder name of cat

display dialog catFolderName

copy {catFolderName, -1} to the end of idTableRef

tell application “iBlog” to set ents to the entries of cat

repeat with ent in ents

tell application “iBlog” to set episodeFolderName to the folder name of ent

set episodePath to catFolderName & “/” & episodeFolderName

copy {episodePath, postID} to the end of idTableRef

set postID to postID + 1

end repeat

end repeat


Now it’s possible to look up the id of any episode, and build the new link. The lookup code is in the attached script, and also handles the special cases of linking to a category page and to the main page. For category pages, I just hand-built a table of the category ID’s I needed based on previous import tests.

Finally, there is the task of preserving the links to the old comment system. Happily, those Haloscan comments are also connected based on the file path of the episode. (Though it looks like really old comments are not accessible, anyway, which is a bummer.)

In the main loop, after the body text has been cleaned up, tack the link to Haloscan on the end, complete with hooks to allow CSS formatting:

set bod to bod & newLine & newLine & “<div class=”jsOldCommentBlock”><span>Legacy Comment System:</span> <a href=”javascript:HaloScan(‘” & entFolder & “‘);”><script type=”text/javascript”>postCount(‘” & entFolder & “‘); </script></a></div>”

Not mentioned above are functions for logging errors and a few other utililties that are in the main script file. They should be pretty obvious. The script includes code that is specific to issues I encountered, but it should be a good start for anyone who wants to export iBlog 2 data for import into another system. It SHOULD be safe to execute on your iBlog data; it doesn’t change anything on the iBlog side of things. I don’t know if there’s anyone else in the world even using iBlog 2 anymore, but if you would like help with this script, let me know.

New Blog Design Progressing Sideways

Ambitions are skyrocketing here at the Hut as the new blog starts to take shape. Too bad you can’t see most of it. But I’d like to ask two things:

1) When you wander over there, can you tell me what you see? I’ve got some of the same CSS that kills Internet Explorer over here at work over there as well, but I think I have things constrained so that the poor software can handle it.

2) Do you see a really dumb animated header? If not, what do you see?

Behind the scenes, that dumb header is grabbing haiku from a database using XML. The perfect storm of tech and art. Best of all, some of those haiku were written in a spreadsheet.

Which, now that I think of it, leads me to another way someone can help. All the old poems in the rotation are image files. Now I need them as text. Anyone want to transcribe them? It would be a big help! Just need a nice table (or spreadsheet!) with poem, author, comment, and link, if applicable. Surely someone out there is looking for a way to contribute to the arts.

So there we have it. My head is in such a technical realm right now that I can’t even watch cartoons. I amused myself tonight with wine and the ActionScript 3.0 documentation, with brief forays into php and WordPress APIs, thinking all the while about how to tackle a page count memory leak in Jer’s Novel Writer. Yeah, I know how to party on a Saturday night.

Moving the Blog!

Yesterday I was hacking at some code, fixing a problem with the way the site looks on the Opera browser. I use iBlog right now, a platform with some cool features and some pretty obvious warts. It was designed to work on servers where the blogger had no control over the server at all (say, Apple’s .mac servers), and therefore the way it did some things was… unusual. Without going into too much detail, iBlog does some things that have unpredictable results on some browsers, including the latest Opera. In addition, the company that made it stopped working on it some time ago and even the discussion forums are gone now.

I fixed the most obvious problem, but there were others, and once again I was faced with the choice of spending my time cobbling together the old system or shifting to a more robust platform. Sooner or later I’m going to have to move, so I decided not to spend any more time tweaking this one.

I’ve been looking into various blogging and content management packages, without finding one that matched the features of iBlog. A couple came close, however, and that’s going to have to do. I will be moving to WordPress sometime this spring. I should be able to make it do what I want, as long as I don’t mind getting my hands dirty. Looks like I’ll be learning a bit of php.

Here’s where you come in: I’ve got a test blog up and running, and out of the box it looks… boring. Slick and professional and all that, but not really me. I Browsed through the bazillion other options people have already created and, well, they’re not very good either – either stodgy or designed by illiterates for illiterates. “Oh, you want to read the text? Dang, I never considered that…”

I takes only a glance around here for you to to see that my design skills are no better; but now I’m going to be doing a ground-up redesign of the site, even if I want to keep it looking the same. I have some thoughts about some fairly ambitious things I’d like to try, but before I get carried away I’d like to know what you guys think of the way things look right now. What do you like? What don’t you like? Layout? Colors? Content? Too much in the sidebar? Not enough whatnot?

One idea I just had: a page with links to all my stories, with a way for people to rate them. The favorites would rise to the top. Yeah, I suspect that feature’s not coming soon. But maybe your crazy idea will work! Leave a comment! Go nuts!

Anyone Have advice on blogging software?

So here I am blogging on my new laptop, which is also my oldest laptop. I picked it up cheap from a buddy of mine, complete with its tiny hard drive, slow processor, and long, long battery life. This will become my day-to-day writing laptop, so it will also be the platform on which I do the majority of my blogging. Now, I haven’t actually tried my blog software on this thing yet, but it is really, really slow on my other laptop, which is about three times faster and has a lot more hard drive space, so I’m not optimistic that I’ll be able to tolerate its performace here. Plus, I need a blog that better supports having multiple machines. It’s time to accept that iBlog is likely a dead end, and find an alternative. Maybe some of you can make recommendations.

Her are the requirements:

1) Able to composse offline and update later (absolutely not negotiable).

2) Can embed fancy html in the episodes, or can create custom episode templates easily (in minutes).

3) Can update from any computer (or phone).

4) Search-engine friendly URLs

5) Custom CSS for episodes based on category

6) category pages can have different display rules (some categoried display oldest to newest while others are newest to oldest, for instance).

7) Some way to automate transferring a very large blog, complete with internal links and lots of custom HTML in various episodes (intern?).

Dr. Pants recommended WordPress, which has a lot of people tweaking it alll the time, so that’s my front-runnner right now. I’m certain I could do all the above (except off-line composing, perhaps) using a fancy content management system like Drupal, which I know in an offhand way. It’s pretty darn powerful and pretty darn versatile, but to turn that into a working blog the way I like it might be a lot of work. I’ve used blogger a bit, but it seems quite limited for what I want, at least on the surface. The other online blog services seem to be similarly inflexible.

What offline editors are out there I could use? Are they going to be too limited, since they are made to be universal? How would they handle embedded images and custom markup?

So, I’m wondering if anyone out there has any suggestions.

A Note About Comments

Holey moley doing two writing workshops at the same time can be tiring! Please bear with me during this time; I’ll get back to my ramblin’ ways soon. I hope.

Meanwhile, I just got notification that HaloScan, the company that provides the commenting service on this page, has been acquired. The notification was filled with Great Happy News (like features I don’t want automatically included), but did not mention any action required on my part to keep things going. At this writing, however, the comments system is not responding. Let’s all hope that the new company is using the wee small hours to move data to the new servers, and that things will be back to normal soon.

In the meantime, think of all the comments you would like to make, and save them up for the morning.

Back?

Hey, remember me? I used to post my random thoughts and useless musings here. Things were pretty hectic there for a while, what with travel and malfunctioning computers and big projects and whatnot, and something (actually a few somethings) had to give. While things aren’t back to normal yet, at least the gods of technology are smiling and with any luck I’ll be back to regular posts soon. I’ve got a lot to write about and I miss doing it. Probably by the time you work your way down to this episode it will be moot, buried under other posts, but that’s the way things go.

Blogger’s Dilemma

Back there a couple of episodes, I thought I hit a classic old-school muddled ramble. The vibe of a traveler, an observer, a humble host for your vicarious adventures. Almost immediately I came up with two more minor episodes that, while they do manage to summarize the human condition in a few magical words and therefore just might change someone’s life, are not as fun as the bit about my voyage from Prague to London.

But could I hold those episodes back, to keep the (relatively) good one at the top for a bit? No. The media empire is impatient that way.

It feels good, though, being on the road, seeing things faster than I can record them, a sense of newness and discovery permeating everything. London! Dang! Language aside, this place is more foreign to me than Prague.

Half a Million Words

I ran my little “just how much of his life has Jerry wasted” script this morning and got back the result: this blog has passed the half-million words line. 503,909, to be precisely inexact. The total includes a few words written by other people (as in the Bacon Haiku episode), but does not include episode titles or the little blurb at the beginning of most episodes.

For a very rough comparison, at 250 words per page in a typical paperback, printing the contents of this blog would cover roughly 2000 pages. (It might be less because there is relatively little dialog here, but you get the idea.) That’s a lot of muddled ramblings. I’m sitting here sipping my congratulatory tea, trying to imagine someone reading this thing from start to finish. Ouch. Maybe it would be like Las Vegas – success just often enough to keep a reader going. Somehow I doubt that.

Still, I suspect that out there are folks who have read just about all of those half-million words. This milestone is for you guys, the stalwarts, the ones who have stuck around through the lean times. It’s also dedicated to the newcomers, those who have become regulars recently, the ones stepping up to carry Muddled Ramblings into the future! (Both of you.)

So, where should we celebrate MuddleCon 1,000,006 in 2012?

Ratings System Thingie

I have turned on a new Haloscan feature that allows you to rate the blog episodes here. Honestly I don’t know if such a feature makes sense in this context, but I thought we could give it a try together. I have a feeling that most episodes (like this one) won’t really inspire readers to give it a score, and I’m pretty sure that I won’t want ratings on the fiction episodes and the like.

But what the heck. It’s free.

Edited to Add: I voted, then when I reloaded the page, it showed no ratings again. If anyone loads the page and sees a rating, could you mention that in the comments? Thanks!

Also note that the ratings thingies are the very last thing on the page to load. That might take a while on a slow connection.

Edited again to add: I have tried to put the ratings thingie in manually, rather than depending on the automatic implementation by Haloscan. We will see if it can remember votes now, and this way I can also control where the ratings show up a little better.

Episode 1000

Depending on exactly how you count things (there are many unpublished episodes lurking around, and different parts of iBlog report different numbers), Saturday’s little story snippet was the 1000th episode on this blog. I’d seen the number coming, and entertained several ideas about how to celebrate it. Even more remarkable than my having written 1000 episodes is that there are people who have read them.

Tonight I took a random stagger through old episodes, ostensibly to find links broken when I upgraded my blogging software (there are a lot of them), and to fix a few formatting issues also caused by the conversion. My first impression: Muddled Ramblings is a good name for this blog. I can be incomprehensible when I don’t put my mind to it. It hurts the most when I turn cryptic right at the key moment of the episode, the big payoff sentence. This is the result, I suppose, of continuously publishing rough drafts, but Defective Yeti doesn’t seem to have the same problems I do. (In fairness to myself, I often attempt sentences with a high difficulty factor. You can’t play jazz if you don’t take chances. On the other hand, just because I’m taking chances doesn’t mean I’m playing jazz.)

Tonight I read some episodes I’d completely forgotten, and others I remembered with varying degrees of fondness and trepidation. I read the words ‘expecially’ and ‘whork’. One of those was intentional and satisfying, the other mortifying (and subsequently edited). Pronouns fly with reckless abandon, unburdened by the need to represent anything. My pronouns are free spirits, and don’t have time for oppressive grammatical shit. Free them! They don’t have time for things! Anything but things! They don’t care what they say.

Sometimes I was surprised to find two episodes next to each other. It’s impossible for me to picture the events discussed as having happened at pretty much the same time. In some cases they feel years apart in my memory. I’m not sure how that makes me feel about the last few years of my life being verifiable. I’m going to have to deal with future spouses, publishers, and other litigants with a better memory for my deeds than apparently I have.

One thought I had tonight was that should I become famous (hey, it’s possible), some poor intern at a publisher somewhere is going to have to read through all this crap, mining for nuggets that might be considered insightful or wise. By now, just over a thousand episodes in, that wretched soul is sitting with eyes crossed, pencil still poised over a blank page, knowing that if she doesn’t come up with something, she’s going to have to read the whole damn thing over again. To that person: Sorry, dude. Really. Remember when you were happy that you landed this sweet gig? Think of it this way, though. Now you can say, “Yeah, I’ve paid my dues. The check’s in the mail.” (I want to credit Snake Pliskin with that line, but it was some other guy.)

Roughly a quarter of the episodes are filed under Idle Chit-Chat. There hasn’t been much in the get-poor-quick category for a long time. I’m not sure why that is. Perhaps it is the company I keep. I don’t have anyone around to discuss sporting events based on cloning up wooly mammoths, or the correct way to construct a hotel on the moon. On the other hand, just about everybody here has a get-poor-quick scheme. I think that first rush of capitalism has given the locals the impression that all you need is a good idea and you’re on your way to fame and fortune. Everyone is a schemer here.

I’m mildly curious how many words this blog has in it by now. It’s a bunch. I did a count a while back, when the blog had maybe half this many episodes, and it came out to 170,000 words — a very fat fantasy novel or two mainstream novels. It’s likely I’ve more than doubled that count, but we’ll see.

Meanwhile, for an oddly anticlimactic milestone, yippee.

* * *

OK, a bit of time has passed. I was pleasantly surprised to find that iBlog was scriptable, so with a bit of cursing at the worst programming language ever (AppleScript) I managed to write a little routine that counted the words in the bodies of all the episodes in this blog. While testing particular entries yielded slightly different results than I got from Jer’s Novel Writer for the same text (something worth digging into), it’s pretty safe to say that this blog has more than 450,000 words in the bodies of the episodes alone. That would make three quite fat novels, or five normal-sized ones.

I don’t know what to make of that.

The Good Part About Being a Geek

There I was, updating the Big Number display over in the sidebar, when for whatever reason the site I generally use to look up the relevant prime number was not responding. The last time my favorite prime site went away, it took me quite a while to find a new place with a sufficient table of primes. I wasn’t looking forward to digging around again. The Internet is big.

PNTScreenshot.png

It occurred to me that I could write a program to calculate primes faster than I could find a place to look them up. Duh! Half an hour later, I had this beauty:

As you can see, it’s tailored just for calculating the next Big Number. It also may be the only prime-calculating software that uses exclamation points. I don’t think I’ll be marketing this one over at Jer’s Software Hut; the market for next-prime-after-an-even-thousand calculators is probably pretty limited.

That’s what’s cool about being a geek. You want a program that works a certain way, you just make it.

Of course, the mac people out there will immediately realize this should be a desktop widget. Hmm… I’ve never done one of those…

… which brings us to what sucks about being a geek. Right now all I can think about is a slick optimization for a program that generates a finite-sized table of primes. Ahh! My head! It’s in my head! I’ll probably have to code the dang thing just to make it go away. I don’t even need a table of primes, let alone one that was generated a tiny bit faster than most other tables of primes were generated.

Remembering the Great Bloggers of the Early 21st Century

A few days ago I heard about a notable literary figure, whose name I have of course forgotten. He was apparently one of the first diarists, a man who recorded his life (or at least a part of it) faithfully, and his life was interesting enough — or perhaps I should say well expressed enough — to be good reading, even a few hundred years later.

My brother’s step-father-in-law has in his possession the diary of a man who was a landowner when the communists came. If the diary is half of what Jirka says it is (not a safe bet), there’s a master’s thesis there. The parts he told me about were fascinating. (The people in charge were asslickers, not farmers, and when the decree came down that they would be switching from horses to tractors, they did, over the objections of the people who knew better. The horses were shipped off, and the tractors sank in the very soft soil. It was a disaster.) In these volumes (so I’m told) are those magical moments of life that at the time appear to be the daily grind, a window into another person’s world.

Try this. Sit in a bar strike up a conversation with the guy sitting next to you, and eventually tell him you’re a writer. A little more time will pass, and then that guy will be telling you why you should help him write his autobiography. (Actually that won’t happen where I am now, but the response is nearly universal in the US.) While I sometimes deride these folks, they do know one thing, and it goes right back to what I said before. It’s not wheter the life is interesting, but whether the account of the life is interesting.

And then there are blogs. It is remarkable, actually, that there are so many people out there who are able to put their lives out there in a way that is both articulare and honest. There are thousands of blogs like that. Then there are the millions of others. Searching for that leg-up out of the “other” category, I thought about what it was than made some blogs interesting while most were just reminders that a large segment of our society needs more to do. I’m really thinking more of the journal-type blog than journalistic-type blogs like those dedicated to politics or sports.

So what might I do, I asked myself, to lift this blog above the vast, sucking pit that is most of the blogosphere? What can I do to make the Media Empire a blazing beacon of lucid, penetrating thought, shining through the locust-plague-darkened skies of unfettered free speech? I devoted some time to this, because as with anything you do, it should be possible to get better. Eventually I arrived at the answer: What I can do is nothing.

(Involuntary falshback to a cartoon from the 50’s or 60’s, with two white-coated men standing at one end of a gigantic computer. There are dials and wires and bigness and the computer says everything about what people thought Earth-shattering computers would be like, back then. One scientist is holding the tape which feeds from a slot in the front of the machine. “It says the answer is two,” he says to the other. A lot of effort to get a simple answer.)

Nothing, or at least not much. Blogging is like hitting a baseball, maybe. Most times, the batter walks back to the dugout, unsuccessful. Yet there are some hitters who can make contact with astonishing consistency (approacing 40% not-sucking!), while others are less consistent but sometimes knock it out of the park. In those terms, this episode probably counts as bunting for a base hit.

(This thought process started as “how can I use my blog to help establish my writing career?” “Stop putting out crappy serial fiction,” was the most obvious answer. But I like putting out crappy serial fiction, even though no one reads it. In fact, as soon as I’m done with this, I think I’m going to poop out some serial fiction. Because I can.)

What I set out to say before making this all about me, me, me, was that while the diary as a literary form may continue, I fear it will be lost among the journals, blogs, scrapbooks, and Muddled Ramblings of our age. We are, as a crowd, very eager to tell about ourselves, to somehow with well-chosen words elevate our lives from “same ol’ shit” to “a unique perspective”.

I tried to imagine bloging fifty years in the future, and to me it looks a lot more like You-Tube than wordpress. We could be living in the Golden Moment of underfettered self-expression via the written word. The next generation of successful bloggers will be more like actors that writers.

Programming Note: Comments RSS

For those who worry about missing comments made in old threads, this might help. It is the RSS feed that nourishes the recent comments list in the sidebar. Perhaps in conjunction with your RSS reader you can catch comments before they slip away. To the best of my knowledge, there is no way to make it show more than the ten most recent. If you find a way to make it show more, I’d like to hear about it.

get your feed here!

Whew! It’s over.

It was with a deep sigh of relief that I submitted my draft for the final word count and read the congratulatory message from the folks at NaNoWriMo central. This was the first time the outcome was in doubt since the first year I did National Novel Writing Month, a lifetime ago. (Literally — I was an Engineer homeowner in Southern California then. Proof that there is such a thing as reincarnation.)

My plan was to publish it as a blog, and let people stumble across it and interact with it, allowing it to grow. The first thing I realized was that 50,000 words in a month is way, way, too much for a blog, and trying to develop all the themes simultaneously so they could reach conclusions in a month was just plain crazy. So I kept writing at the same pace, but posting at a more human-digestable rate. Then, I ran out of story at around 40K. I had tried to scope the project so it could be told in 50,000 words, but at 80% of the target I was just fiddling with pieces, starting to get repetitious, (not that this or almost any other blog isn’t, but this blog has no pretense of being literature), and I had said all that I had set out to say. I had a couple of thousand words to go to wrap things up, which I just couldn’t keep from being maudlin no matter how hard I tried.

Finally I sat down and spent a day writing an 8000-word subplot in a completely different style, that the world will never see.

I haven’t posted much on the other blog recently; to be honest after pulling my hair out over the thing these last weeks I’m pretty sick of it. This evening I’ll do a bit of recreational writing before getting back to work in December.

Programming note

It occurred to me that Jer’s Software Hut is a pretty big part of my life, and Jer’s Novel Writer is slowly developing into a piece of software that will long be remembered for all the ideas that all the other word processors eventually copied. As such, I have created a new category here at MR&HBI devoted to all the advancements going on in the hut’s secret bunker, chilly and drippy, buried deep beneath the impassible mountain range that passes through this quiet Prague neighborhood. Security measures are extremely tight here (had to boot Dick Cheny a while back; the dude could could not keep his big yap shut), but every once in a while we allow carefully calculated information to leak to what we euphamistically call the ‘outside world’.

I went back and found some episodes that belong in this category, and along the way I was continuously surprised by the close proximity of events that in retrospect seem far apart, and the distantness of things that seem like yesterday. Most of all, I feel the time. It was a long time ago now that I was exploring the small roads of North America. It was a long time ago that I flirted with bartenders in Montana, and watched a thunderstorm on my cousin’s patio on the Fourth of July.

Whoops! Almost did a retrospective episode, there! This is about the future. ‘Rumblings from the Secret Labs’ will be the outlet for carefully controlled propagana concerning all that is good about Hut products. That is all you need to know.