Browsed by
Tag: link

No Blog Post Is an Island [en]

No Blog Post Is an Island [en]

[fr] Une des grandes difficultés dans l'art de bloguer: intégrer des liens à son texte. D'une part parce que les liens rajoutent une dimension au texte, perçant en quelque sorte des trous dans celui-ci par lesquels le lecteur est libre de s'échapper, à la façon des "livres dont vous êtes le héros" de notre adolescence, et d'autre part parce que la nature hypertexte du web donne à l'intertextualité une place capitale. Un article de blog n'est pas une île isolée, mais un fragment textuel nageant au milieu d'un océan d'autres fragments similaires, avec lequel il a des liens plus ou moins proches, que la bonne maîtrise de l'hyperlien permet d'expliciter. Ceci nécessite, outre une habileté avec les mots (pour pouvoir retourner sa phrase dans le sens qui permet un bon ancrage du lien), une certaine culture des autres textes entourant le sien. Sinon, comment faire des liens qui feront sens?

Fellow blogger Adam Tinworth points to a leaked memo from The Guardian encouraging internal linking. He shares his astonishment on Facebook “that this still isn’t standard practice at most places”. I am not that astonished, I have to say.

During my many years as blog editor-in-chief and teaching blogging to students, I have seen again and again that from a technical point of view, aside from managing to write in your own personal voice, the most difficult aspect of blogging to master is integrating hyperlinks into your writing.

Autour du chalet, colliers de perles

I think this is because writing well with hyperlinks requires one to write differently. It is not just about “writing and then adding links”.

Adding meaningful hyperlinks to your sentences is going to have an impact on the way you construct them. You need to be comfortable shuffling the words around, or looking for others, so that you end up with a phrase that provides you with adequate anchor text for the link you want to insert.

Most people’s training in writing is probably in standalone texts. Offline writing, the type that worked well on paper. Your reader starts at the top, and finishes at the bottom. You may have footnotes and references, but nothing as dramatic as a hyperlink, which literally pokes a hole in your text.

I like to think of hyperlinks as adding an extra dimension to a text. Normal text is 1D. Just follow it through. Hypertext is 2D at least — remember those books we must all have read as teenagers? If you go right, head to page 16, but if turn left, run off to page 67?

So, the first challenge in writing with links is finding a gracious way to anchor all those links into your words.

The second challenge is less obvious, but even more important: intertextuality.

Intertextuality” is a rather vast topic, but it generally has to do with the fact that how you understand or read one text can be shaped by your knowledge of another. References or allusions, explicit or not, that connect different texts.

On the web, everything we write is swimming in a sea of other interconnected texts. It’s not called the World Wide Web for nothing, dammit. Everything that is published on the web is stitched together. The blog post you are writing now is not an island, it is swimming alongside all sorts of other pieces of writing. How you position your piece of writing amongst the others may be just as important as the writing itself.

Intertextuality in the world of hypertext is a crucial thing to be aware of.

What are you going to link to? What is there out there that complements your writing, or takes your reader further, or down a parallel path? What are the associations between parts of your writing and preexisting writing?

This requires, in addition to the will to connect one’s writing into this existing web, some degree of knowledge of what is out there. Culture. Or dexterity in the use of the search engine. Or both.

I agree with Adam: internal linking should be a no-brainer. I do it a lot on Climb to the Stars: whenever I’m writing a blog post, I’m wondering what else I have written in the past which is related to it. Am I building upon a previous post? Am I writing on a topic I’ve already touched upon? How can I work a link to this or that post into what I’m writing now?

I do it on Open Ears too. As editor-in-chief, I have read all the articles we publish. The difficulty is I often receive articles which are written as standalone pieces, so I have to either work with the blogger to incorporate a reference to another article, or do it myself as part of the editing process. But as I mentioned above, adding links changes the way you write and construct your text, so “adding a link” is rarely as straightforward as “just adding a link” — and in some cases can only difficultly be done if it wasn’t planned for from the start.

When I was discovering the web, one of the first sites I spent a lot of time reading was The Psychology of Cyberspace. It’s still online, and I encourage you to visit it: as the author explains, it is an online book, that is, written with hypertext in mind.

There is a table of contents, but in addition to that, inside the chapters, there are links to other chapters whenever there is a mention or a passing reference to something covered elsewhere. This frees the reader to wander around in the order they wish, and avoids redundancy — if you need to explain X again, just link to it. I think this was a very good learning example for me of how to build text online.

So now. How would you teach people the skills to do this, when it doesn’t seem to come naturally to them?

Similar Posts:

Linking Flickr Images in Thesis' Multimedia Box [en]

Linking Flickr Images in Thesis' Multimedia Box [en]

[fr] Instructions pour faire en sorte que les photos de la boîte multimédia du thème WordPress Thesis renvoient vers leur page Flickr.

I haven’t had Thesis on my blog for 24 hours that I’m already messing with it. Oh well. So, one thing I’ve done and will explain in some detail is added tons of photos from my Flickr account to the Thesis multimedia box up right, with links to the original Flickr pages.

  1. I have shell access to my server, which makes life so much simpler. Once inside the rotator folder, all I have to do is grab the URL of the middle-sized photograph I want (All sizes > Medium) and wget it. For example: wget
  2. On the Thesis Options page, I insert the Flickr photo page URL in the “alt” field for that photo. It’s pretty easy to deduce it from the filename. For example: 2725414522_4a9b2887df.jpg =>
  3. Following these instructions, I replaced one line in the multimedia_box_functions.php file so that the images would actually link to their Flickr page.


Similar Posts:

Scripts for a WordPress Weblog Farm [en]

Scripts for a WordPress Weblog Farm [en]

Update 03.11.06: Batiste made me realise I should point the many people landing here in the search of multi-user WordPress to WordPress MU. All that I describe in this post is very pretty, but nowadays completely obsolete.

Here is the best solution I’ve managed to come up with in half a day to finally install over 30 WordPress weblogs in under 5 minutes (once the preparation work was done).

A shell script copies the image of a WordPress install to multiple directories and installs them. A PHP script then changes a certain number of options and settings in each weblog. It can be used later to run as a “patch” on all installed weblog if a setting needs modifying globally.

Here are the details of what I did.

I first downloaded and unzipped WordPress into a directory.

tar -xzvf latest.tar.gz
mv wordpress wp-farm-image

I cleaned up the install (removing wp-comments-popup.php and the import*.php files, for example), added a language directory (as I’m wp-farming in French) and modified index.php to my liking; in particular, I edited the import statement for the stylesheet so that it looked like this:

@import url( );

The styles directory is a directory in which I place a bunch of WordPress styles. I don’t need the style switcher capability, but I do need to styles. Later, users will be able to change styles simply by editing that line in their index.php (or I can do it for them).

Another very important thing I did was rename wp-config-sample.php to config-sample and fill in the database and language information. I replaced wp_ by xxx_ so that I had $table_prefix = 'xxx_';.

To make it easier to install plugins for everyone, correct the language files, and edit whatever may be in wp-images, I moved these three directories out of the image install and replaced them with symbolic links, taking inspiration from Shelley’s method for installing multiple WordPress weblogs.

mv image/wp-content common
mv image/wp-images common
mv image/wp-includes/languages common
ln -s common/wp-content image/wp-content
ln -s common/wp-images image/wp-images
ln -s common/languages image/wp-includes/languages

I also added an .htaccess file (after some painful tweaking on a test install).

Once my image was ready, I compiled a list of all the users I had to open weblogs for (one username per line) in a file named names.txt, which I placed in the root directory all the weblog subfolders were going to go in.

I then ran this shell script (many thanks to all those of you who helped me with it — you saved my life):

for x in `cat names.txt`
cp -rv /home/edublogs/wp-farm/image/ $x
cat $x/wp-config.php | sed "s/xxx/${x}/" > config.tmp
mv config.tmp $x/wp-config.php

This assumes that my WordPress install image was located in /home/edublogs/wp-farm/image/ and that the weblog addresses were of the form

This script copies the image to a directory named after the user, edits wp-config to set the table prefix to the username, and then successively wgets the install URLs to save me from loading them all in my browser.

After this step, I had a bunch of installed but badly configured weblogs (amongst other things, as I short-circuited the form before the third install step, they all think their siteurl is

Entered the PHP patch which tweaks settings directly in the database. I spent some time with a test install and PHPMyAdmin to figure out which fields I wanted to change and which values I wanted to give them, but overall it wasn’t too complicated to do. You’ll certainly need to heavily edit this file before using it if you try and duplicate what I did, but the basic structure and queries should remain the same.

I edited the user list at the top of the file, loaded it in my browser, and within less than a few seconds all my weblogs were correctly configured. I’ll use modified versions of this script later on when I need to change settings for all the weblogs in one go (for example, if I want to quickly install a plugin for everyone).

In summary:

  1. compile list of users
  2. prepare image install
  3. run shell script
  4. run PHP script

If you try to do this, I suggest you start by putting only two users in your user list, and checking thoroughly that everything installs and works correctly before doing it for 30 users. I had to tweak the PHP script quite a bit until I had all my settings correctly configured.

Hope this can be useful to some!

Update 29.09.2005: WARNING! Hacking WordPress installs to build a farm like this one is neat, but it gets much less neat when your weblog farm is spammed with animal porn comments. You then realise (oh, horror!) that none of the anti-spam plugins work on your beautiful construction, so you weed them out by hand as you can, armed with many a MySQL query. And then the journalist steps in — because, frankly, “sex with dogs” on a school website is just too good to be true. And then you can spend half a day writing an angry reaction to the shitty badly-researched article.

My apologies for the bad language. Think of how you’re going to deal with spam beforehand when you’re setting up a school blog project.

Similar Posts:

Indulging in Memes [en]

Indulging in Memes [en]

[fr] Encore un meme. D'habitude, je ne saute pas dans le train, mais celui-ci a l'intéret (a) d'être créé afin d'en tirer quelque enseignement et (b) de nous permettre de visualiser immédiatement le "chemin de blogs" parcouru.

Update 04.08.04 23:50: post text modified as requested by Nova. (It’s pretty different from the initial text, but the idea remains the same. Not that I’m obsessed by Google ranking, as I hope you’ll guess.)

Copy This GoMeme From This Line to The End of this article, and paste into your blog. Then follow the instructions below to fill it out for your site.

Steal This Post!!!! This is a GoMeme– a new way to spread an idea along social networks. This is the second generation meme in our experiment in spreading ideas. To find out what a GoMeme is, and how this experiment works, or just to see how this GoMeme is growing and discuss it with others, visit the Root Posting and FAQ for this GoMeme at .

By adding this GoMeme to your Weblog you can get higher Google rankings for your site, and help your friends get higher Google rankings too. Your blog will be linked from every other blog that discovers this GoMeme downstream from your blog (from your readers, their readers, and so on). And that will raise your Google rankings in proportion to the number of downstream bloggers that get this GoMeme from you and post it to their blogs. The more people who blog the GoMeme from your blog, the better your Google rankings will get.

By hosting this meme on your blog, you will also be participating in an experiment to generate a distributed Blog survey and test how memes spread through social networks. The dataset from this experiment is public, open and decentralized — every blog that participates hosts their own data about their own blog. Anyone can then get the whole dataset by just searching Google for this unique string: 98818912959q This code is the “global unique identifier,” or GUID for this GoMeme — it marks every web page that participates in this GoMeme so that it can later be found with all the others. (Note it may take a week or longer before Google indexes your blog, so be patient).


This is purely an experiment and is just for fun. We are really just curious to see what will happen and this is not a commercial project. Participation is voluntary. We don’t mean to annoy anyone. However, if you don’t have much curiosity, or at least a sense of humor, you may find this experiment to be upsetting. In that case, you might try drinking a good strong cup of coffee. If after that you are still unhappy with us, just don’t read any further and have a great day! (If you don’t want your blog to get better Google rankings, that’s purely your choice!) On the other hand, if you are interested in exploring new technologies and pushing the envelope, then keep reading and we look forward to your participation in this experiment. We also request that participants in this experiment refrain from spamming anyone with this GoMeme. To spread it, just put it on your blog; that should be enough.


Step 1 First, to add your site to this experiment, copy the GoMeme to your site from the “Copy This GoMeme From Here” heading above to the End of this article. Please copy this whole article and try not to alter the text so that it is authentic for the people who get it from your blog. If you would like to come up with your own catchy headline, or anything else to help your GoMeme spread, feel free! Let’s see what works best.

Step 2: Now, fill in your answers to these Required Survey Fields (Note: Replace the answers below with your own answers). These will later be automatically data-mined by bots to compile the survey results.

(1) I found this GoMeme at URL:

(2) I found this GoMeme on date (day/month/year):04/08/04

(3) I found this GoMeme at time (in GMT format): 07:30:00

(4) I foundit via “Newsreader Software” or “Browsing the Web” or “Searching the Web” or “An E-Mail Message”: Browsing the Web

(5) I posted this GoMeme at my URL (use a hyperlink): Climb to the Stars

(6) I posted this on date (day/month/year): 04/08/04

(7) I posted this at time (in GMT format): 07:50:00

(8) My posting location is (city, state, country): Lausanne, Vaud, Switzerland

Step 3: If you’re feeling very altruistic today, also fill in these optional survery fields (Replace the answers below with your own answers):

(9) My Weblog is hosted by: Myself

(10) My age is: 30

(11) My gender is: Female

(12) My occupation is: Teacher

(13) I use the following RSS/Atom reader software: NetNewsWire Lite

(14) I use the following software to post to my blog: WordPress

(15) I have been blogging since (day, month, year): 13/07/00

(16) My web browser is: FireFox

(17) My operating system is: OSX

Step 4:Now add an entry for your site after the last entry in the PATH LIST below: Your entry should be of the form: line number, URL, hyperlink, optional personal GUID for your blog.

(Note: If you would like to track all postings of the Meme that result from your posting of it, once Google has indexed them, you may add your own optional GUID after your hyperlink on your line of the Path List — just make sure it is short, unique, and doesn’t return any results on Google — for example “mysitename137a2r28”. Also note, if the path list gets too long, you should still try to include the whole path in your blog — even if you have to put the list on a continuation page rather than the excerpt for your posting — and make sure others copy the whole GoMeme along with your Path List when they get the GoMeme from you — If they don’t copy it, your blog and your upstream blogs won’t be linked from their blogs).


1. Minding The Planet, mindingtheplanet14798
2. Climb to the Stars, climbtothestars87432
3. (your Path List entry goes here in the form URL, hyperlink, GUID. Also, please add a new line after this one, for the next person.)

The End

Similar Posts:

Alarm: Orcut, Evil Fake Orkut Clone? [en]

Alarm: Orcut, Evil Fake Orkut Clone? [en]

[fr] Comment j'ai cru que était un faux site destiné à  ramasser des mots de passe orKut, et un commentaire sur l'irresponsabilité de Google, qui par de telles pratiques encourage les internautes à  tomber victimes du phishing.

Preliminary note: although nice blogging tools like WordPress have really sexy interfaces for you to type your posts in, resist the temptation. I won’t tell you more, except that Q and W are right next to each other on my keyboard, and that I’m about to write up this bl***y post for the second time.

So, I’m a bit of a referrer junkie. When I see something new, I usually click’n see. Today, I found this in my recent referrals. Now, since I nearly got phished, I’m a bit cautious, and I immediately noticed that it was orCut and not orKut in the URL, even though (particularly as) the pages on the two sites look exactly the same.

Do you smell a rat? I smelled a phish, and it seems I’m not alone. A quick expedition on google, however, tells us that many think is legitimate. Scary! Think of what these people would do with all the juicy information they would get out of our Orkut logins and profiles! And hey, it’s not just orCut, there is orkAt too!

But wait. Everybody freeze! Look what Suw managed to dig out: a May 04 post from Evan William’s blog, telling us orkAt, orCut, and even orCIt are legitimate alternatives to Well, we’re most relieved to know this wasn’t all some evil scam — and Ev should know what he’s talking about, as he works from Google.

However, doesn’t it strike you as a trifle irresponsible on the part of Google to do something like this? I mean, doesn’t this make users more vulnerable to phishing? Next time they get a PayPal e-mail with a fake link in it, are their alarm bells going to ring, after their positive experience with the “alternative Orkut URLs”? Methinks they could at least have specified the alternate URLs somewhere on the home pages. A quick trip to would have cleared any doubts of mine. ‘Coz now, who is to stop, or any other nice-sounding possible clone that phishers may come up with?

Similar Posts:

Life and Trials of a Multilingual Weblog [en]

Life and Trials of a Multilingual Weblog [en]

[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>

(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
	$_POST['metakeyselect'] = 'language';
        $_POST['metavalue'] = $_POST['language'];

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: {
  content: " [fr] ";
  font-weight: normal;
} {
  content: " [en] ";
  font-weight: normal;
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:

<fieldset style="clear:both">
<legend><a href=""
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 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 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>
<!-- I moved around some tabindex values too -->

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
	$_POST['metakeyselect'] = 'keywords';
        $_POST['metavalue'] = $_POST['keywords'];
   // add other excerpt
	$_POST['metakeyselect'] = 'other-excerpt';
        $_POST['metavalue'] = $_POST['other-excerpt'];

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


    <div class="other-excerpt" lang="<?php print($the_other_language); ?>">
    <?php print($the_other_excerpt); ?>

accompanied by the following CSS:

background-color: #FAECE7;
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!

Similar Posts: