Blogometer Reboot

December 26th, 2005

Alan’s Blogometer Has Moved

The blogometer has moved. The URL for my blog is now.

http://blogometer.com/

This is the new URL for the web log of Alan Gutierrez. I’m going to find another place for the my boring technical notes, and use this as a place to record my real career experiences.
I registered the domain name blogometer.com in early 2004, but foolishly, I’ve not used it. Rather I followed more traditional tact of hiding behind some small corporate identity, fooling no one.

A Good Move?

The Googlenym Alan Blogometer puts me at the top of the list. The ever fledgling Engine Room gave me no ranking at all. Worse it brought up a bunch of stuff that looked like a small software concern, just not mine. When Debbie Weil asked my affiliation, it made me realize that the one I had made me look clueless as a blogger.

These days, however, people are moving away from catch phrases for URLs, and toward long winded, search optimized domain names like, marketingheadhunter.com. Perhaps, it’s not the best move, but

I’m not sure I have a succinct definition of my career at this point, so I’ll cross that bridge when I get there.

Update Your Feed Readers

Back to the task at hand. Please update your feed readers. My new RSS feed is.

http://blogometer.com/feed/

Hope you enjoy Alan’s Blogometer. I’ll be writing more about blogging, myself, Ann Arbor and New Orleans. It will be a lot more personable.

Corporate Persona

December 22nd, 2005

Bad Blogger! - I’m posting this now, but I’ve got too much to do today. This is my next post. It will be updated throughout the day.

Persona Management

People tell me that they like my blog when I post about New Orleans, but the rest of the stuff, it doesn’t mean anything to them. Sometimes those postings about installing this or that, or fixing some bug will get a response, but usually in e-mail. In fact, one of the first blog entries that every got comments was a blog entry on Crawfish.

This gave me a sense of how the blogometer was off the mark. Blogging wasn’t keeping me connected. I’ve tried blogging personal issues, but they don’t fit in the context of “The Engine Room”, a professional technical blog.

What I’d like to do is write a blog entry, and then assign it a persona. Then it could go to this blog, or if it is more personal it can go to a different blog. If you are interested in my different persona, there is an aggregate view of all entries.

Here’s the trick…

We’d have to learn to respect this division in the real world. One would not bring up blog topics from a personal blog, in a professional context.

Corporate Persona

CxO blogging is not the same as personal blogging. The CxO is blogging from a position where there is increased liability. They must watch what they say.

UPDATE

Got back from Bi Bim Bop lunch. I’ll flickr the photographs in a little bit. Everyone had something cool to say. I tried to talk about the persona management issue. Joe Coltron felt that the division between business and personal personae are night and day, which is understandable. I enjoy the personal interaction of blogging.

Also, raised the question of the overhead of maintaining multiple personae.

This is an interesting issue along the lines of corporate blogging. I’m going to have to revisit it in a different post.

ReThink New Orleans

December 21st, 2005

This is an announcement of the re-release of Think New Orleans, you can follow along at the beta site Think New Orleans (Beta), which will stay a step ahead at all times. (More later, in a posting to be entitled, Forever Beta.)

It’s maybe a bit too early to announce, but there’s traffic here for corporate blogging, and I’d like to draw your attention to this labor of love that is very dear to me.

Editing this after posting. Composing not covering up. Bad Blogger!

Think New Orleans

A software application that organize conversations about New Orleans, providing:

  • Data organized the by way we met; neighborhood, school, church, restaurant, cafe, bar, etc.
  • Easy to use, cross-browser UIs that edit data one piece at a time.
  • Tagging. That’s for sure! That’s for sure!
  • Aggregation of New Orleans information, otherwise known as gathering.
  • Syndication of New Orleans information.

A web application that lives and breathes New Orleans.

Request For Comments

I’m going to double down for the new year. All New Orleans all the time.

You want to see the use cases? They are on the Wiki.

If you would like to see the editing interfaces, drop me a message in the comments, or via e-mail. I’d love feedback from the usability folks, other programmers, and bloggers.

Special Thanks

Yeah, well, I’ll get it going and then roll on the floor in gratitude to everyone who helped me with the Wiki. If I did it now, it would sound like name dropping, because the people that rallied were invariably the coolest people out there.

The coolest people in the blogosphere, in Ann Arbor, Michigan, and in New Orleans, Louisiana.

Die Hard Update

For all the folks that helped me on the Wiki, who’ve waited, here’s how I’ve spent the last two months:

  • Building a new Fedora Core 4 Linux server at SolidHost, including building out a proper e-mail server on Postfix. Thank you to Jose Nazarrio for showing me the Postfix light.
  • Increasing test coverage of the framework behind Think New Orleans, using Cenqua Clover, which was gracously donated to Think New Orleans. This exercise uncovered lots of little issues.
  • Relay, the XML dependency engine that drives Think New Orleans, got dumbed down for the better. I’d worked on it so long, it had a few too many clever ideas. It is not much lighter and smaller.

It will be a soft launch, made ever so soft by the low volume of traffic to my blog. This blog has been hush for so long. I’d keep a lid on it, but hey, if you wonder where I got all these snarky ideas on corporate blogging, well, here it is. Web 2.0 ain’t here yet.

When Good Web Services Go Bad

December 20th, 2005

TypePad collapses twice in a week, and now del.icio.us falls apart.

I have a mere 1986 del.icio.us bookmarks, but that’s a lot of information that I’d dearly miss. It’s a list of the stuff that I found important since late 2004. If that were to be lost, I’d have a hollow feeling. I’ve used del.icio.us to augment my memory. I’d have to wonder, what am I forgetting?

Software Is Only Human

Now is the time for the pundits to cry for quality in software, and liability. This collapse of infrastructure just won’t do! Software vendors should be held to the same standards of quality as aerospace. This is the only way that the ASP model of software can move forward.

But it’s back. My bookmarks are back. TypePad is back. We’re all good.

Why so good?

  • If you were to take the time spent rebooting, reformatting, or regretting MS/DOS, these outages are drops in the bucket. Now add Windows in all it’s flavors, and you’ve got yourself an ocean of blue screens.

    UPDATE - Caveat, I’m not a Windows basher, that’s what it look like here, but no. Windows grows ever more stable. My point was that we went through the teething of the PC. New is flakey. We dig it. We deal. Stable can be had, but we’re not having it. We want what’s next, now.

  • Because we are software.

    This is pretty obvious to bloggers and friends. We’ve written little scripts or macros, we’ve added little tweaks to our blogs, we’ve made countless mistakes. It’s really not all that foreign. A software failure is more of a human failure, and we can forgive those.

    This is pretty obvious in a large software system, where training is used to complete a software application. In these cases it’s the task that matters, not the software, and counting on perfect software is a blatant violation of Murphy’s Law.

Those that call for aerospace quality in our bookmark manager are calling on us to waste valuable resources that should be used to keep airplanes in the air.

How a Web Service Can Surviving an Web Service Outage

Here are the three things you must do to keep your customers sane during a meltdown.

  1. Tell Them What Went Wrong - Tell them why it went down. In English, describe the failure. Tell them what you are doing. Don’t apologize. People don’t want apologies, they want service.

    Keep them posted. Live blog the crisis.

  2. Make no promises - You won’t keep them.

    Do not promise deadlines. In crisis deadlines are meaningless. Ballpark it. That’s all. You’re moving as fast as you can.

    Do not promise full recovery. Someone probably did lose something. Someone will take you literally, and feel betrayed if they lost a single record, even if they lost it by clicking delete and yes I’m sure I want to delete, two weeks before the incident.

  3. Apologize - Wait until the service has recovered. Running apologies sound insincere. Save it for a great big apology at the end of the crisis. Then apologize to everyone for the lack of service. Apologize to individuals who lost information, or have specific examples of lost revenue, and offer something to make them whole.

    Move on. An apologetic non-human entity, like a corporation, gives me the heebie-jeebies.

  4. Tell Them What Went Wrong In Detail - Write down exactly what went wrong. Do a white paper describing the failure and your response, the issues faced in the response, and what measures are put in place to prevent recurrences. Put it out there for people to consider. Share your experiences.

The del.icio.us outage was no big thing for me. I’ve gathered my bookmarks on my desktop, to feed del.icio.us later. The blogged about the crisis. I felt for them. It was all too familiar. The service is back up. I’m happy.

How Users Can Prepare for a Web Service Outage

All of these services allow you to download your data. Consider the ones that are most important to you, and put a date on your calendar to download the information to your local computer.

In del.icio.us for example, you can download your bookmarks by clicking on the settings link and clicking the export link found on that page. It will generate an HTML page that it can re-import.

Here’s a URL for my bookmarks export, you’d have to put your name in place of “alan”.

http://del.icio.us/settings/alan/export?export=1&showtags=showtags&showextended=showextended

Now, if only OS X Automator would remember my cookies, I might be able to share a script with you. Hmm…

Crisis = Opportunity

Now is maybe a good time for one C# programmer to make a TypePad backup widget for Windows, and one Cocoa programmer to make a TypePad backup widget for OS X. Then do one for del.icio.us. Make it extensible so you can add other services. You’ll have one, very popular download. Put up a PayPal link and ask for $4.99.

Or make it a web service. Heh.

(Linux users wrote their shell program and popped it their crontab when they signed up.)

UPDATE - Scoble Says: Long Live the Client Side

Scoble touches on Web Services gone Bad in his posting Salesforce Hits Problems.

But, back to the Six Apart point. Truth is that these systems are still way too fragile and having a totally resilient system is extremely difficult. I’m certainly not going to throw the first rock here. But, I love having systems that have BOTH a Web and a local storage capability.

See. Now go start developing your Web 2.0 desktop clients. They are next big thing. And for goodness sake, why don’t you write the universal backup widget for Windows or OS X?

UPDATE - Christopher Coulter give 8 Reasons Why Web Services Fail

In a Comment on Salesforce hits problems, Christopher Coulter reminds us of the great many ways in which web applications can fall apart.

Servers, scability, limits of mark-up tech, coding errors/buffer-overflow’s/poor error-control, differing browser implementations/different renderings, database strain, DOS attacks, Security/hackings — whatever the point of failure and wherever you decide to lay the (political) blame, the fact remains — backups are vital. Indeed the first step.

Something to consider. Why network when you don’t have to?

The Corporate Blogging Book

December 19th, 2005

One of the people who responded to 5 Steps to Coporate Blog Rollout was Debbie Weil. She’s writing a book on corporate blogging called The Corporate Blogging Book.

I’m looking forward to reading it. The forward is by none other than corporate blogger Bob Lutz.

There are many interesting articles on the book site, like this one So what could your organization do with a blog?.

She also runs BlogWrite for CEOs, which asks and answers questions like Does Your Company Belong in the Blogosphere?.

Keeping The Ball Rolling on Big Blogging

December 18th, 2005

I expanded my posting on Big Blogging last night. I expanded it greatly, in response to a post by Robert Scoble, on Being Yourself. Scoble came by and left a comment. Thank you, Robert. Now, how to I get others to converse with me about this? What do real bloggers think the 5 Steps for Fortune 500 blogging should be?

How do I get people to look at a post that is scrolling off the edge of my blog? This is why I don’t like blogging. I’m not a news ticker. It’s hard for me to package my ideas as a syndication.

If you want to talk, please go to Big Blogging and leave a comment. I’d like to have this conversation with as many people as possible.

UPDATE: Getting many responses and now facing the annoyance that my blog is pretty crufty. I probably do need to spend time on getting this blog fixed, even though I keep thinking I’m going to replace it with an XSLT based solution.

Have a Rupee, Leave a Rupee

December 17th, 2005

Niti Bhan tells a story, about coinage and an awkward kindness, in her posting The Karma of Brown Folk that I find amusing.

Apparently, she’s been off to India. Apparently that’s home. There’s quite a travelogue, with flickr photos of family and essays on the effects 8% growth, Indian innovation, and life in the call center.

A lot of good writing. What are you doing here?

RSS 2.0 Import

December 17th, 2005

This is live blogging of boring things. Suffer with me as I spend my Saturday night working on something that I’ve longed to have finished for some time. A waste of bits and bandwidth, and dear reader, a waste of your precious time, but I must, must get this completed.

Let this be a record of me doing something long after it is exciting or amusing. This is work. Unpaid work. Whee!

First things first, define the problem. The core problem is I need more content for Think New Orleans. My tagging and geocoding interfaces are far along, but I don’t have a generic import.

Articles in Think New Orleans are stored as Atom 1.0. They are indexed in a MySQL database. I’ve created an RSS 2.0 to Atom 1.0 conversion pipeline in Relay. This is an XSLT 2.0 transform, and a special pipeline that will parse the contents of the RSS 2.0 description and content:encoded elements to XHTML, so that the RSS 2.0 feed will be an Atom 1.0 feed. If you are interested in that then you can fill out this form and get a conversion of a WordPress feed.

I’m importing WordPress RSS 2.0 to start. Why? Because Maitri runs WordPress, and her blog is an excellent post-Katrina, New Orleans resource.

Not all RSS 2.0 feeds are created equal. Some are quite crufty. WordPress does a good job however.

An important part of Maitri’s blog are the comments. There is a lot of great information there. The RSS 2.0 feed has a special element that references another RSS 2.0 feed for the comments of a blog entry. Pity, then, that the RSS 2.0 comments feeds are 404s at vatul.net. That is a set back.

In any case, here I am, needing to pull in the comments, whether they work or not. That is, I’m sure they’ll be working if I beseech the blogger in question. So, here goes.

(Is this literate programming? Something I’ve been meaning to blog about.)

Feeds

Gave it some thought. Let’s pick on me for a change. Let’s say I have two blogs, one specifically about New Orleans, and one a simpering plea for attention. How do I go about representing these blogs in Think New Orleans?

Well, as noted before, there are People, Circles, and Syndicated Feeds in Think New Orleans. But here’s an annoyance. How does one represent a syndicated feed for a person.

The following is the URI for the tags I generate for the tag uptown.

http://thinknola.com/alan/tags/uptown/index.html

Following the established pattern for importing feeds, the taggable import feed for this blog would look something like this.

http://thinknola.com/taggable/feeds/engrm.com/blogometer/index.html

And I like it. I’d rather have an administrator add feeds to the system, than have people assign whatever feed suits them. In this way a feed is authoritative, no duplicates. In the future, I might have to pass the URI of the source feed as parameter, but for now, I want them to be readable.

My tables for feeds look like this.

CREATE TABLE feeds (
    feed_id    integer auto_increment,
    guid       text,
    url        text,
    path       varchar(255),
    alternate  varchar(255)
)
g

Thus, I’ll insert the engrm.com blog using the following.

INSERT INTO feeds(guid, url, path, alternate)
VALUES('tag:thinknola.com,2005:feed:convert:/engrm.com/blogometer/',
       'http://engrm.com/blogometer/feed/',
       'engrm.com/blogometer',
       'http://engrm.com/blogometer/')
g

I’m not much of a stickler for normalization these days. Use to be all OCD about it. In fact, why even use MySQL? Why not use Lucene and only Lucene?

Good question. I’m glad I asked.

Because the joins will be interesting. It’s how the tagging is done. Maybe you can do that in Lucene just as easily, but I’m pretty good with a select statement.

Anyway, I’m going to have to add a field to the feeds table. It will be a feed type. It will be a simple text field. And I’ll add RSS 2.0 for the value for my blog since that’s the feed flavor.

Okay, here’s the DDL.

ALTER TABLE feeds
ADD COLUMN type VARCHAR(32) NOT NULL DEFAULT RSS 2.0'
g

Tributaries

Lets call the Atom 1.0 feeds for comments tributaries. One to many. No hierarchy as of yet. I’m not going to search the comments feeds for comments feeds, and threading is still a ways out.

CREATE TABLE tributaries (
    tributary_id  INTEGER AUTO_INCREMENT,
    feed_id INTEGER,
    uri VARCHAR(255),
    reference_guid VARCHAR(255),
    created TIMESTAMP,
    PRIMARY KEY (auto_increment)
    FOREIGN KEY (feed_id) REFERENCES feeds(feed_id)
)
g

The created stamp will be used as offset for updates. Anything created in the last 24 hours is polled every fifteen minutes. Anything created in the last seven days, is polled hourly. Easy SQL. After that, I’ll have to pick some way of chunking through the feeds daily or every other day.

Convert from RSS 2.0

I’ve already got a nice RSS 2.0 to Atom 1.0 converter. Let me roll out the WAR for you.

http://thinknola.com/beta/convert/from/rss-2-0.xml?uri=http%3A%2F%2Fengrm.com%2Fblogometer%2Ffeed%2F

http://thinknola.com/beta/convert/from/rss-2-0.xml?uri=http%3A%2F%2Fengrm.com%2Fblogometer%2Ffeed%2F - Convert RSS 2.0 to Atom 1.0.

You can choose a feed to convert using this simple form. At this point, it should only really be working with WordPress RSS 2.0 feeds.

Import Comments as Tributaries

This turned out to be simple. I created a Relay pipeline that generates an Enfilade document, and put it in a tee, which is a runner that branches, and the table is not being populated. Now I need to get back to this, and create a pipeline that will import comments, and add the new Atom elements for threaded discussions.

WATCH THIS SPACE

Import Entries

Now that entries are Atom 1.0, I can import them. This bit can be reused for other entry types of feed as well. Once you’ve built the Atom 1.0 feed, this is the import procedure.

There are other imports, there building an entry is an expensive operation. It’s not cheap with RSS 2.0, because I’m parsing the description and content using JTidy. It would be nice to not convert the entries that already exist in the database, but it’s not so darn expensive as all that.

It’s easiest to import the article body into the filesystem first, before putting the documents in the MySQL database. If the entry is written to file before it is written to the database, the database will appear to not contain that file, so it will simply try to import it again during the next import. If the database record is written before the file is saved, and the file save fails, all kinds of bad things happen. This means that I need to first check if the article doesn’t already exist, so I don’t write it to file, but then find it’s already in the datbase.

The procedure is as follows.

  1. Check which entries already exist in the database, strip those that exist from the feed.
  2. Write the entries to the filesystem.
  3. Create records for each entry in the database.

Checking if the entry exists requires two pipelines. One takes the feed and queries the database to create an XML document that looks like this.

<pre>
<exists>
  <guid>http://engrm.com/blogometer/2005/12/19/the-corporate-blogging-book/</guid>
  <guid>http://engrm.com/blogometer/2005/12/18/keeping-the-ball-rolling-on-big-blogging/</guid>
  <guid>http://engrm.com/blogometer/2005/12/17/have-a-rupee-leave-a-rupee/</guid>
</exists>
</pre>

This document will contain a <guid/> element for each entry in the current version of the feed that exists in the database. Then I’ll use an identity XSLT transform on the feed that references this document, and excludes those entries that exist in the document to create a feed document. Get it? It’s an identity transform. It creates a copy but skips those entries that can be found in the existence document above.

Then I run the document through my existing import script, which splits the document out into the filesystem, and writes to the database.

Better Living Through cron

Now it’s time to create a client program that will run this import periodically. I’m going to schedule a script in my crontab to poll the feeds. The script will simply make an HTTP GET request for each feed, invoking the relay pipelines, and saving the output to file.

The scripting language will be XSLT of course. But, I need to get a question answered here. What happens to an XSLT transform when the result of a query is an error of some sort? Error handling in Relay is quite spotty at the moment. Definitely something that needs more attention.

Seasonal Effecitive Disorder

December 17th, 2005

I’m having a long slow meltdown. In part it’s the snow. Well, not the snow. I like snow. Cold. The cold is no fun.

Snow makes it easier to bear. It is pretty, a sight to behold.

When it is simply cold, with no snow, there’s no sense to that.

That’s just Michigan being angry.

Literary Fop

December 17th, 2005

I’m suffering from mincing mid-winter Michigan prose.