A Story About Tags, and Technorati, and Tags [en]

[fr] Une conversation sur Twitter au sujet des tags, de la grande époque de Technorati, et de où on en est maintenant. Ce qu'on a perdu: un "tagspace" commun pour la blogosphère (c'était ce qu'offrait Technorati...).

Yesterday I innocently answered a tweet about Technorati tags from Luis Suarez. This led to an interesting three-way conversation between Luis, Thomas Vander Wal. Ideas got tossed around, and we decided to continue the discussion through our blogs, as if it were 2003 (2001?) all over again. You know, I really miss the old blogging days, sometimes. But more about that in another post.

Now, before I get to the meat, I want to tell you a little about the history of tags and tagging. I was there, you see — and I’d like to tell you what I saw of history unfolding at the time, because it gives some background to the ideas that came up for me while chatting with Luis and Thomas.

(Note that I am absolutely not using the sacred inverted pyramid here. I’m not trying to optimize. I’m taking you for a ride, come along if you wish.)

A long long time ago, when the blogosphere was frisky and bloggers were still strange beasts, Movable Type invented the Trackback.

Trackbacks were exciting. You have to understand that at the time, comments on blogs were barely a couple of years old, and bloggers still had the good habit of carrying on conversations through their blogs, linking to each other’s articles like there was no tomorrow. Trackbacks allowed us bloggers to tell each other we were mentioning each other’s posts without having to “head over there and leave a comment” or rely on the linkee’s obsession with referrer monitoring (all our metrics and stats tools were much more primitive at the time, and we didn’t have Google Alerts).

Some people started sending trackbacks when their posts were simply related to posts on other blogs — an abusive practice, if you ask me, laying the grounds for what was to become trackback spam.

Enter TopicExchange. It doesn’t exist anymore, but I fell in love with it right away. TopicExchange was a site which hosted “channels”, keywords that you could trackback so that your post would appear in a given channel. TopicExchange was, in fact, a somewhat clumsy precursor of tagspaces. The idea was there, but it was built on trackbacks rather than microformats.

Roughly around that same period (of years), delicious started using tags to allow users to classify bookmarks. Flickr followed, and tagging started to take off.

In 2005, Technorati started tracking tags in blog posts it indexed, and the microformat for tagging was born. Days later, I’d released the first WordPress tagging plugin, Bunny’s Technorati Tags. Now, you may not care much about Technorati in 2010, but at the time, it was a Big Thing.

First of all, Technorati were the only ones indexing what they then called the “Live Web” (or was it the “Living Web”, I can’t remember). Forget Twitter, Facebook, and today’s real-time craziness: in 2005, blogs were pretty much the fastest form of publication around. Google Blogsearch didn’t exist. So, bloggers (and blogging software) would ping Technorati each time they published an article, Technorati would crawl their RSS feed and index their content. This meant you could search for stuff in blogs. Technorati indexed links between blog posts, so you could look up the “Technorati Cosmos” for any URL (ie, the collection of blog posts linking to it.)

If you were serious about blogging, you made sure you were in Technorati. And your properly tagged articles would appear on the corresponding Technorati tag page. (See where this meets TopicExchange?)

Second, and this is where in my opinion the Technorati implementation of “let’s group posts from different bloggers about a same topic on a single page somewhere” beats TopicExchange: it’s based on a microformat, technologically much simpler to implement than a trackback. Anybody who could write HTML could add tags. It also meant that other tools or companies could create their own tagspaces and index existing tags — which was not possible with a trackback-based implementation, as trackbacks are “pushed” to one specific recipient.

The blogosphere went wild with tags, and my brain started bubbling on the topic.

TopicExchange died, drowned under trackback spam.

And as far as I’m concerned, Technorati is dead (at least to me), probably drowned or crippled by splogs and tag spam.

Which leads me to express a law which I’ll call “Stephanie Booth’s Law of Death by Spam”, just in case nobody had thought of it before, and it catches on and makes me famous:

Sooner or later, all smart ideas to better connect people or ideas through technology drown in spam, unless the arms race to defeat it is taken seriously enough and given the ressources it needs.

Right, I think you have enough context now, and I can come back to the conversation that kept Luis, Thomas and I occupied for a bit last night. Luis was asking if anybody still cared about Technorati tags, and we drifted off (at least I did) on the Golden Days of Technorati (hence the slightly nostalgic storytelling that makes up the first big chunk of this post).

Clearly, Technorati is not playing the role it used to play for the blogosphere (whatever that is nowadays, the blogosphere I mean, now that every online publication is a “blog”).

There’s Icerocket, which actually does a not-too-bad job of letting you search for stuff over blog posts (check out my ego search and blog search). Actually, as I’m writing this, I’m discovering that their advanced search is pretty neat (though I’m not certain why this query returns nothing).

One issue I see with Icerocket is that you have to actively sign up and include tracking code on your blog — which means that less bloggers will go through the trouble of getting themselves indexed (and less spammers, of course, which is probably the idea, though I did spot a few splogs in my searches above). Another one is that it’s not very visible. Do you bloggers know about it? Have you registered? Does it bring you traffic? Technorati had cosmos and tag links that made it visible on the blogs it indexed (just as I tried to make TopicExchange more visible in my blog when I was using it).

Another more systemic issue is that a “blog” today and a “blog” in 2005 is not the same thing. Well, some are (I hope this one is), but nowadays we have all these big online publications that I call media-blogs: run as businesses, multi-author, revenue-stream… Their quality ranges from cheap content-factory to properly journalistic. Are they still blogs? In 2010, what is a blogger? What kind of blogs do I want to see indexed by a service like Icerocket — and is there some objective way to draw lines, or am I letting my personal bias take over? As you may know, my work around blogger accreditations for LeWeb has led me to ponder the lines between journalist, blogger, other-online-publisher. I don’t have answers yet.

But I digress.

When WordPress finally implemented proper tags, the default tagspace was not Technorati (as it had been with my plugin), but a tagspace local to the WordPress installation. This made sense in some way (probably by that time tag spam on Technorati was already taking its toll) — but we lost something precious in the process: a shared space where separate blogs and blog posts could collide over common topics.

I want that back. But maybe I don’t want a tagspace shared by the whole humungous somethingsphere of 2010. So, how about this?

Let’s imagine a tool/platform which allows a certain number of bloggers to gather together, as a group. You know all about groups, in their various incarnations: Flickr groups, Google groups, Facebook groups, new Facebook groups… What about blogger groups? I could gather a bunch of bloggers I know and like, and who know each other, and who tend to read each other, and we could decide to create a little blogosphere of our own. The group could be public, private, invitation-only, whatever.

And this group would have a shared tagspace.

If you’re starting from scratch, you’d do this with a multi-user WordPress implementation (go to WordPress.com for example: there is a shared tagspace for the blogs there). But here, imagine the bloggers in question already have blogs. Would there be no way to recreate this, independantly of which blogging tools they’re using?

This is similar but not identical to shared spaces like SxDSalon. SxDSalon slurps in all posts with a given tag from a list of bloggers. It’s nice, it works, it’s useful, but it’s not what I’m thinking of.

Planet is a cool tool too, but to my knowledge it only aggregates posts. Maybe we could add a shared tagspace to it?

I look forward to reading what Luis and Thomas will write on their blogs about our conversation. 😉 Blogs are alive! Twitter has not killed them!

Technorati Tagified [en]

Technorati collects links, photos and posts with tags/categories and displays them all on a nice page. Start tagging!

[fr] Technorati s'intéresse aux "tags". Les "tags", ce sont des étiquettes que l'on colle aux photos chez Flickr ou aux liens chez del.icio.us.

Technorati collecte le tout sur une jolie page, avec les billets de weblogs, bien entendu -- classés soit par leurs catégories, soit par des tags ajoutés manuellement. C'est facile! Voyez la page pour le tag technorati, par exemple.

Qu'est-ce que vous attendez? Lâchez vos tags!

Lo and behold, Technorati goes tags!

Technorati collects weblog posts, Flickr images, and del.icio.us links and organises them by tag on a pretty page.

Tags on weblog posts? Easy. If you have categories, and your RSS/Atom feed is formatted correctly, Technorati will treat your categories as tags. In addition to that (or instead of that), you can also add tags manually to any blog post. Learn how to do it, and get tagging!

Some tag pages I’ve looked at: India, Switzerland, tools, StephanieBooth

I wonder. What are the implications for TopicExchange? Will Technorati tags make ITE obsolete?

Easier TopicExchange Trackbacks for WordPress [en]

A WordPress hack which makes it quicker to add TopicExchange channels to trackback, and makes them visible (like categories) in the weblog. (Sorry for the duplicate postings, trying to fix it.)

[fr] Ce 'hack' pour WordPress permet d'ajouter facilement des trackbacks vers les canaux de TopicExchange, et liste sur le weblog les canaux concernés pour chaque billet.

Here is a solution to make it a little quicker to trackback TopicExchange channels with WordPress, and make those channels visible in your weblog.

I love TopicExchange. When I asked Suw what they had talked about during BlogWalk, she mentioned trackbacks. I asked if anything had been discussed about trackback etiquette. For example, I’m often tempted to trackback people who have written posts related to mine, but which I haven’t linked to. Well, the consensus is that this is not what trackback is for. Trackback is really for making a “backlink”. TopicExchange is the answer to the “related posts” issue.

I’ve been using TopicExchange a lot during the last weeks, but nobody has noticed it, apart from those people who already use TopicExchange as a source of information. As Seb Paquet notes, TopicExchange needs to be made more viral. It needs visibility. What follows is my interpretation of “making ITE easier to use, and more visible.”

This WordPress hack creates an extra field in the posting form where ITE channel ID’s (e.g. “wordpress”, “multilingual_blogging”) can be entered (I was tired of typing the whole trackback URL’s all the time). It then stores these channel ID’s as post meta data (in the postmeta table), so that it can retrieve them and display links to the corresponding channels along with the post, just as is usually done with categories.

First of all, add the following code to my-hacks.php. Then, edit post.php (in your wp-admin directory) and add this code where indicated (the comment at the top of the file explains where to insert the code).

Also in post.php, after the line add_meta($post_ID);, insert the following code:

// add topic exchange channels
	if(isset($_POST['ite-topic']))
	{
		$_POST['metakeyselect'] = 'ite_topic';
		foreach($topics as $topic)
		{
    		$_POST['metavalue'] = $topic;
    		add_meta($post_ID);
    	}
    }

In edit-form.php, add this code to create an extra input field for ITE trackbacks:

$form_ite = '<p><label for="ite-topic"><strong>Trackback</strong> TopicExchange:</label>
(Separate multiple channel ID's with spaces.)<br />
<input type="text" name="ite-topic" style="width: 360px" id="ite-topic"
tabindex="8" /></p>';
	$form_trackback.=$form_ite;

It goes near the top of the file, after the line which defines $form_trackback (do a search for that and you’ll find it).

Finally, in your index.php template, you can use <?php the_ite_channels(); ?> to display a paragraph containing a comma-separated list of channels trackbacked for each post. If you want to change the formatting, play around with the function definition in my-hacks.php.

If, like me, you have old posts with trackbacks to TopicExchange, and you would also like these to appear on your posts, use this patch from inside wp-admin. The patch will tell you what meta data it is adding — just load it once in your browser and check the result in your weblog. (Don’t load it twice — it’s supposed to be able to check the existing channels in the database to avoid duplicate entries, but I haven’t got it to work. Read instructions and debug notes at the top of the patch file.)

In future, it will also be possible to use the TopicExchange API to return the “nice title” for the channels listed — so we sould have “Multilingual blogging” instead of “multilingual_blogging”. (I’ve asked, it will behas been added to the API.)

Good luck with this if you try it, and as always, comments most welcome!

Note: as far as I have tested, the code seems to work now.

Life and Trials of a Multilingual Weblog [en]

Here is an explanation of how I set up WordPress to manage my bilingual weblog. I give all the code I used to do it, and announce some of the things I’d like to implement. A “Multilingual blogging” TopicExchange channel is now open.

[fr] J'explique ici quelles sont les modifications que j'ai faites à WordPress pour gérer le bilinguisme de mon weblog -- code php et css à l'appui. Je mentionne également quelques innovations que j'ai en tête pour rendre ce weblog plus sympathique à mes lecteurs monolingues (ce résumé en est une!) Un canal pour le weblogging multilingue a été ouvert sur TopicExchange, et vous y trouverez peut-être d'autres écrits sur le même sujet. Utilisez-le (en envoyant un trackback) si vous écrivez des billets sur le multinguisme dans les weblogs!

My weblog is bilingual, and has been since November 2000. Already then, I knew that I wouldn’t be capable of producing a site which duplicates every entry in two languages.

I think this would defeat the whole idea of weblogging: lowering the “publication barrier”. I feel like writing something, I quickly type it out, press “Publish”, and there we are. Imposing upon myself to translate everything just pushes it back up again. I have seen people try this, but I have never seen somebody keep it up for anything nearing four years (this weblog is turning four on July 13).

This weblog is therefore happily bilingual, as I am — sometimes in English, sometimes in French. This post is about how I have adapted the blogging tools I use to my bilingualism, and more importantly, how I can accommodate my monolingual readers so that they also feel comfortable here.

First thing to note: although weblogging tools are now ready to be used by people speaking a variety of languages (thanks to a process named “localization”), they remain monolingual. Language is determined at weblog-level.

With Movable Type, I used categories to emulate post-level language awareness. This wasn’t satisfying at all: I ended up with to monstrous categories, Français and English, which didn’t help keep rebuild times down.

With WordPress, the solution is far more satisfying: I store the language information as Post Meta, or “custom field”. No more category exploitation for something they shouldn’t be used for.

Before I really got started doing the exciting stuff, I made a quick change to the WordPress admin interface. If I was going to be adding a “language” custom field to each and every post of mine, I didn’t want to be doing it with the (imho) rather clumsy “Custom Fields” form.

In edit.php, just after the categorydiv fieldset, I inserted the following:

<fieldset id="languagediv">
      <legend>< ?php _e('Language') ?></legend>
	  <div><input type="text" name="language" size="7"
                     tabindex="2" value="en" id="language" /></div>
</fieldset>

(You’ll probably have to move around your tabindex values so that the tabbing order makes sense to you.)

I also tweaked the wp-admin.css file a bit to keep it looking reasonably pretty, adding the rule below:

#languagediv {
	height: 3.5em;
	width: 5em;
}

and adding #languagediv everywhere I could see #poststatusdiv, so that they obeyed the same rules.

In this way, I have a small text field to edit to set the language. I pre-set it to “en”, and have just to change it to “fr” if I am writing in French.

We just need to add a little piece of code in the form processing script, post.php, just after the line that says add_meta($post_ID):

 // add language
	if(isset($_POST['language']))
	{
	$_POST['metakeyselect'] = 'language';
        $_POST['metavalue'] = $_POST['language'];
        add_meta($post_ID);
        }

The first thing I do with this language information is styling posts differently depending on the language. I do this by adding a lang attribute to my post <div>:

<div class="post" lang="<?php $post_language=get_post_custom_values("language"); $the_language=$post_language['0']; print($the_language); ?>">

In the CSS, I add these rules:

div.post:lang(fr) h2.post-title:before {
  content: " [fr] ";
  font-weight: normal;
}
div.post:lang(en) h2.post-title:before {
  content: " [en] ";
  font-weight: normal;
}
div.post:lang(fr)
{
background-color: #FAECE7;
}

I also make sure the language of the date matches the language of the post. For this, I added a new function, the_time_lg(), to my-hacks.php. I then use the following code to print the date: <?php the_time_lg($the_language); ?>.

Can more be done? Yes! I know I have readers who are not bilingual in the two languages I use. I know that at times I write a lot in one language and less in another, and my “monolingual” readers can get frustrated about this. During a between-session conversation at BlogTalk, I suddenly had an idea: I would provide an “other language” excerpt for each of my posts.

I’ve been writing excerpts for each of my posts for the last six months now, and it’s not something that raises the publishing barrier for me. Quickly writing a sentence or two about my post in the “other language” is something I can easily do, and it will at least give my readers an indication about what is said in the posts they can’t understand. This is the first post I’m trying this with.

So, as I did for language above, I added another “custom field” to my admin interface (in edit-form.php). Actually, I didn’t stop there. I also added the field for the excerpt to the “simple controls” posting page that I use (set that in Options > Writing), and another field for keywords, which I also store for each post as meta data. Use at your convenience:

<!-- BEGIN BUNNY HACK -->
<fieldset style="clear:both">
<legend><a href="http://wordpress.org/docs/reference/post/#excerpt"
title="<?php _e('Help with excerpts') ?>"><?php _e('Excerpt') ?></a></legend>
<div><textarea rows="1" cols="40" name="excerpt" tabindex="5" id="excerpt">
<?php echo $excerpt ?></textarea></div>
</fieldset>
<fieldset style="clear:both">
<legend><?php _e('Other Language Excerpt') ?></legend>
<div><textarea rows="1" cols="40" name="other-excerpt"
tabindex="6" id="other-excerpt"></textarea></div>
</fieldset>
<fieldset style="clear:both">
<legend><?php _e('Keywords') ?></legend>
<div><textarea rows="1" cols="40" name="keywords" tabindex="7" id="keywords">
<?php echo $keywords ?></textarea></div>
</fieldset>
<!-- I moved around some tabindex values too -->
<!-- END BUNNY HACK -->

I inserted these fields just below the “content” fieldset, and styled the #keywords and #other-excerpt textarea fields in exactly the same way as #excerpt. Practical translation: open wp-admin.css, search for “excerpt”, and modify the rules so that they look like this:

#excerpt, #keywords, #other-excerpt {
	height: 1.8em;
	width: 98%;
}

instead of simply this:

#excerpt {
	height: 1.8em;
	width: 98%;
}

I’m sure by now you’re curious about what my posting screen looks like!

To make sure the data in these fields is processed, we need to add the following code to post.php (as we did for the “language” field above):

// add keywords
	if(isset($_POST['keywords']))
	{
	$_POST['metakeyselect'] = 'keywords';
        $_POST['metavalue'] = $_POST['keywords'];
        add_meta($post_ID);
        }
   // add other excerpt
	if(isset($_POST['other-excerpt']))
	{
	$_POST['metakeyselect'] = 'other-excerpt';
        $_POST['metavalue'] = $_POST['other-excerpt'];
        add_meta($post_ID);
        }

Displaying the “other language excerpt” is done in this simple-but-not-too-elegant way:

<?php
$post_other_excerpt=get_post_custom_values("other-excerpt");
$the_other_excerpt=$post_other_excerpt['0'];
if($the_other_excerpt!="")
{
	if($the_language=="fr")
	{
	$the_other_language="en";
	}

	if($the_language=="en")
	{
	$the_other_language="fr";
	}
?>
    <div class="other-excerpt" lang="<?php print($the_other_language); ?>">
    <?php print($the_other_excerpt); ?>
    </div>
  <?php
  }
  ?>

accompanied by the following CSS:

div.other-excerpt:lang(fr)
{
background-color: #FAECE7;
}
div.other-excerpt:lang(en)
{
background-color: #FFF;
}
div.other-excerpt:before {
  content: " [" attr(lang) "] ";
  font-weight: normal;
}

Now that we’ve got the basics covered, what else can be done? Well, I’ve got some ideas. Mainly, I’d like visitors to be able to add “en” or “fr” at the end of any url to my weblog, and that would automatically filter out all the content which is not in that language — maybe using the trick Daniel describes? In addition to that, it would also change the language of what I call the “page furniture” — titles, footer, and even (let’s by ambitious) category names. Adding language sensitivity to trackbacks and comments could also be interesting.

A last thing I’ll mention in the multilingual department for this weblog is my styling of outgoing links if they are written in a language which is not my post language, using the hreflang attribute. It’s easy, and you should do it too!

Suw (who has just resumed blogging in Welsh) and I have just set up a “Multilingual blogging” channel on TopicExchange — please trackback it if you write about blogging in more than one language!

Connect to BlogTalk [en]

BlogTalk resources: live stream, topic exchange, wiki page… stay connected, whether you are lucky enough to be in Vienna or not.

If you aren’t lucky enough to be attending the BlogTalk conference today and tomorrow, you can still follow the fun with the live stream from the conference.

Other than that, two topics to keep an eye on over at Topic Exchange:

Topic Exchange allows to comfortably solve the problem “do I trackback other related posts, even if I haven’t linked to them directly?” — use Topic Exchange.

If you’re at the conference and/or staying at Hotel Atlas, make use of Rendez-Vous (Rendez-Vous allowed me to “bump” into a fellow blogtalker last night), the BlogTalk wiki page and #blogtalk on freenode. Also — no fear of stating the obvious — come up for a chat, I love meeting others in the flesh!