Where Does Tumblr Fit in? [en]

[fr] Tumblr est un outil génial pour rassembler et republier les choses sympa que l'on trouve en ligne, agrémenté d'un réseau social à la Twitter (non-réciproque) qui nous permet de suivre sans difficultés les publications des personnes qui nous intéressent.

Last night on the way home, I was telling a friend about Tumblr. I have a blog there, Digital Crumble, and really really like using it. Many of my friends do not use Tumblr, and I realize that some explaining is not useless.

Tumblr is great as a scrapbook (scrapblog!) of content seen online. Not to say it can’t be used for original content, but that’s not where it shines (in my opinion) and I personally hardly ever put original content in Digital Crumble.

For me, Tumblr is somewhere between Twitter, Buzz, and WordPress.

One reason many people do not get Tumblr is that until you get an account, you do not know about the dashboard. The dashboard is the Tumblr equivalent to the Twitter stream. It is a neverending page of posts by people you have chosen to follow. That’s the big difference between Tumblr as a blogging tool and WordPress: Tumblr is really built around the following/being followed dynamic of Twitter and Buzz.

Here are two zoomed-out shots of parts of my dashboard page so you can see what it looks like:

Tumblr Dashboard Tumblr Dashboard

Two things make Tumblr great for collecting non-original content:

  • the “reblog” button on each post in the dashboard
  • the bookmarklet.

If you’re familiar with Twitter, the “reblog” button is like Twitter’s “retweet” button (but the Tumblr reblog button was there way before Twitter’s retweet one). See something you like in your dashboard? You can “like” it, of course, but in a click of the mouse you can reblog it, publishing it to your tumblelog and pushing it along to your followers. A lot of the content in Tumblr is visual (photographs, design, videos…) — which is pretty cool.

When you stumble upon something interesting online, you can hit the Tumblr bookmarklet, and a pop-up window allowing you to instantly publish what you’ve found to your tumblelog appears. Tumblr makes a guess as to the nature of the content, too: video, link, quote, photo. Hit publish, and get on with your browsing. Tumblr takes care of the rest — including a link to the original source.

Share on Tumblr

A lot of the things I post to Digital Crumble come from the people I’m following on Tumblr. Aside from that, I also reblog a lot of quotes from things I read online. If I’m reading something interesting, I have just to highlight the paragraph I want to save/quote, hit the bookmarklet, hit publish, and it’s on Digital Crumble. Let’s say it’s the web 2.0 equivalent of when I was a student and painstakingly copied out quotes and paragraphs from books I was reading into a small notebook. 😉 (Here’s an example of a recent quote I captured like that.)

What makes this all the more precious is that you can afterwards easily search through your Tumblr Dashboard or your own postings to bring up snippets you’ve saved. When I’m doing online research for a blog post or article, I’ll stick all the interesting snippets in Tumblr, which means I then have them handy (with link to the source!) when I’m writing up.

Finally, what I like about Tumblr is the playfulness of the community. It’s fun. It doesn’t feel too serious, or like the geek/intelligentsia quarters. I think that for non-bloggers who do spend time online reading and browsing without feeling the urge to crank out pages and pages of original writing, it’s a great publication platform to start with.

Give it a try, and let me know how it goes!

Twitter @Replies Kerfuffle: Not Just About Discovery [en]

[fr] La suppression de son flux Twitter des @replies à destination de personnes que l'on ne suit pas n'est pas un problème uniquement parce qu'elle entrave la découverte de nouvelles personnes. C'est un problème, parce que cela nous prive d'une partie (parfois importante) de ce que partagent sur Twitter ceux que nous suivons.

A day or so after my blog post alerting you to the change in the way Twitter showed you @replies from the people you are following, Twitter broke the silence with a blog post giving more detailed information on the technical reasons why they removed this functionality. (Don’t see a direct cause-and-effect phenomenon here — I’m not that influential, despite what some may believe.)

Though I appreciate their apology about the communication disaster, there are still a few open points as far as I’m concerned:

  • 97% of accounts did not use this functionality: this does not mean that they had chosen not to use it. Had the default setting been “show all @replies”, you can be sure that more than 3% of users would have been viewing all @replies
  • if I follow somebody, why would the default assumption be that I don’t want to see what they write to other people I don’t follow? Here’s what would make sense for me: default setting should be that if you follow somebody, you see all their tweets. Now, to cater for those who get frustrated by half-conversations or chatty followees (hey, you chose to follow them in the first place), allow suppression of “@replies to people I don’t follow” on a per-user basis.
  • the reason I am mad (and others too) about having @replies to people I’m not following stripped out of my stream is that it is depriving me of part of the public tweets of people I chose to follow. If I hadn’t seen @giagia’s tweet responding the @isntit on May 11th, I would have missed out all the fun around the heated “babies at conferences” debate. This isn’t about discovering a new person. This is about keeping up with stuff somebody I’m following (Gia in this case) is tweeting about, and involved in.

So, please, Twitter: don’t assume that all this is about discovering new people. It’s not. Since you removed @replies to people I’m not following from my stream, everything is more quiet, and I’m missing out on important parts of my friends’ lives.

Edit: oh, and while writing this post, I discovered that Twitter search does not go very far back in time. What next? are we going to discover that our oldest tweets have silently been removed from the database, one day?

Retweeting [en]

[fr] Le "retweeting", ou l'équivalent chez Twitter du forwarding d'e-mails.

So, lately, when people have asked me for a hand with something, all I’ve had to offer (due to a very tight time budget) has been along the lines of “I’ll be happy to retweet it”.

I got a few (virtual) blank stares.

Retweeting is the Twitter equivalent of e-mail forwarding.

It’s used to help spread requests for assistance further, or let more people know about fun and interesting stuff.

How does it work?

You write a tweet. Keep it under 120/125 chars (to leave a little space for the retweeting).

Twitter / charbax: Looking for $1000 sponsor ...

Some Twitter clients, like twhirl, for example, offer a “retweet” feature: just hit the retweet button and the tweet in question is “forwarded” with a prefix (I choose “RT” as it’s shorter than “retweeting” and each character counts).

twhirl - re-tweeting

If your client doesn’t support this, you can always just copy-paste the tweet by hand. The format is:

retweeting @somebody: original twitter message here!


RT @somebody: original twitter message here!

If I retweet something, my followers get to see it too.

Twitter / Stephanie Booth: RT @charbax: Looking for $ ...

The big difference between forwarding an e-mail and retweeting a tweet is that when you forward an e-mail, you are the one who decides who it goes to. With twitter, your tweet is sent to those who have elected to follow you.

Hopefully my retweeting will help Charbax find his sponsor for LeWeb’08!

Browser Language Detection and Redirection [en]

[fr] Une explication de la méthode que j'ai suivie pour que http://stephanie-booth.com redirige le visiteur soit vers la version anglaise du site, soit la française, en fonction des préférences linguistiques définies dans son navigateur.

Update, 29.12.2007: scroll to the bottom of this post for a more straightforward solution, using Multiviews.

I’ve been working on stephanie-booth.com today. One of my objectives is the add an English version to the previously French-only site.

I’m doing this by using two separate installations of WordPress. The content in both languages should be roughly equivalent, and I’ll write a WordPress plugin which allows to “automate” the process of linking back and forth from equivalent content in different languages.

What I did today is solve a problem I’ve been wanting to attack for some time now: use people’s browser settings to direct them to the “correct” language for the site. Here is what I learnt in the process, and how I did it. It’s certainly not the most elegant way to do things, so let me know if you have a better solution by using the comments below.

First, what I needed to know was that the browser language preferences are sent in the HTTP_ACCEPT_LANGUAGE header (HTTP header). First, I thought of capturing the information through PHP, but I discovered that Apache (logical, if you think of it) could handle it directly.

This tutorial was useful in getting me started, though I think it references an older version of Apache. Out of the horses mouth, Apache content negotiation had the final information I needed.

I’ll first explain the brief attempt I did with Multiviews (because it can come in handy) before going through the setup I currently have.


In this example, you request a file, e.g. test.html which doesn’t physically exist, and Apache uses either test.html.en or test.html.fr depending on your language preferences. You’ll still see test.html in your browser bar, though.

To do this, add the line:

Options +Multiviews

to your .htaccess file. Create the files test.html.en and test.html.fr with sample text (“English” and “French” will do if you’re just trying it out).

Then, request the file test.html in your browser. You should see the test content of the file corresponding to your language settings appear. Change your browser language prefs and reload to see what happens.

This is pretty neat, but it forces you to open a file — and I wanted / to redirect either to /en/ or to /fr/.

It’s explained pretty well in this tutorial I already linked to, and this page has some useful information too.

Type maps

I used a type map and some PHP redirection magic to achieve my aim. A type map is not limited to languages, but this is what we’re going to use it for here. It’s a text file which you can name menu.var for example. In that case, you need to add the following line to your .htaccess so that the file is dealth with as a type map:

AddHandler type-map .var

Here is the content of my type-map, which I named menu.var:

URI: en.php
Content-Type: text/html
Content-Language: en, en-us, en-gb

URI: fr.php
Content-Type: text/html
Content-Language: fr, fr-ch, fr-qc

Based on my tests, I concluded that the value for URI in the type map cannot be a directory, so I used a little workaround. This means that if you load menu.var in the browser, Apache will serve either en.php or fr.php depending on the content-language the browser accepts, and these two PHP files redirect to the correct URL of the localized sites. Here is what en.php looks like:

And fr.php, logically:

Just in case somebody came by with a browser providing neither English nor French in the HTTP_ACCEPT_LANGUAGE header, I added this line to my .htaccess to catch any 406 errors (“not acceptable”):

ErrorDocument 406 /en.php

So, if something goes wrong, we’re redirected to the English version of the site.

The last thing that needs to be done is to have menu.var (the type map) load automatically when we go to stephanie-booth.com. I first tried by adding a DirectoryIndex directive to .htaccess, but that messed up the use of index.php as the normal index file. Here’s the line for safe-keeping, if you ever need it in other circumstances, or if you want to try:

DirectoryIndex menu.var

Anyway, I used another PHP workaround. I created an index.php file with the following content:

And there we are!

Accepted language priority and regional flavours

In my browser settings, I’ve used en-GB and fr-CH to indicate that I prefer British English and Swiss French. Unfortunately, the header matching is strict. So if the order of your languages is “en-GB, fr-CH, fr, en” you will be shown the French page (en-GB and fr-CH are ignored, and fr comes before en). It’s all explained in the Apache documentation:

The server will also attempt to match language-subsets when no other match can be found. For example, if a client requests documents with the language en-GB for British English, the server is not normally allowed by the HTTP/1.1 standard to match that against a document that is marked as simply en. (Note that it is almost surely a configuration error to include en-GB and not en in the Accept-Language header, since it is very unlikely that a reader understands British English, but doesn’t understand English in general. Unfortunately, many current clients have default configurations that resemble this.) However, if no other language match is possible and the server is about to return a “No Acceptable Variants” error or fallback to the LanguagePriority, the server will ignore the subset specification and match en-GB against en documents. Implicitly, Apache will add the parent language to the client’s acceptable language list with a very low quality value. But note that if the client requests “en-GB; q=0.9, fr; q=0.8”, and the server has documents designated “en” and “fr”, then the “fr” document will be returned. This is necessary to maintain compliance with the HTTP/1.1 specification and to work effectively with properly configured clients.

Apache, Content Negotiation

This means that I added regional language codes to the type map (“fr, fr-ch, fr-qc”) and also that I changed the order of my language preferences in Firefox, making sure that all variations of one language were grouped together, in the order in which I prefer them:

Language Prefs in Firefox

Catching old (now invalid) URLs

There are lots of incoming links to pages of the French site, where it used to live — at the web root. For example, the contact page address used to be http://stephanie-booth.com/contact, but it is now http://stephanie-booth.com/fr/contact. I could write a whole list of permanent redirects in my .htaccess file, but this is simpler. I just copied and modified the rewrite rules that WordPress provides, to make sure that the correct blog installation does something useful with those old URLs (bold is my modification):

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . **/fr**/index.php [L]

# END WordPress

In this way, as you can check, http://stephanie-booth.com/contact is not broken.

Next steps

My next mission is to write a small plugin which I will install on both WordPress sites (I’ve got to write it for a client too, so double benefit). This plugin will do the following:

  • add a field to the write/edit post field in which to type the post slug of the correponding page/post in the other language *(e.g. “particuliers” in French will be “individuals” in English)
  • add a link to each post pointing to the equivalent page in the other language

It’s pretty basic, but it beats manual links, and remains very simple. (I like simple.)

As I said, if you have a better (simpler!) way of doing all this, please send it my way.

A simpler solution [Added 29.12.2007]

For each language, create a file named index.php.lg where “lg” is the language code. For French, you would create index.php.fr with the following content:

Repeat for each language available.

Do not put an index.php file in your root directory, just the index.php.lg files.

Add the two following lines to your .htaccess:

Options +Multiviews
ErrorDocument 406 /fr/

…assuming French is the default language you want your site to show up in if your visitor’s browser doesn’t accept any of the languages you provide your site in.

You’re done!

Why Events? [en]

[fr] J'explique dans ce billet pourquoi je me lance dans l'organisation de conférences-événements. (Le français c'est ambigu: une conférence ça peut être un blabla par une personne, ou bien une journée entière avec plusieurs intervenants. Je parle de ce dernier cas de figure. Faites signe si vous avez un meilleur mot.)

J'ai perdu le compte des conférences auxquelles je suis allée assister au cours des derniers 18 mois. Au point que j'en ai un peu marre, j'avoue. Les organisateurs de conférence commencent à avoir l'habitude de lire mes critiques au sujet de leurs événements, donc je sais qu'on va m'attendre au contour.

Donc, je commence à voir un peu de quoi c'est fait, ces fichues conférences. C'est l'occasion de me lancer dans un projet un peu plus à long terme que ce que je fais d'habitude, de m'entourer de personnes compétentes (parce que finalement, je me rends compte que j'en connais une pile), et d'utiliser ma connaissance du milieu web/tech pour monter un programme qui non seulement tienne debout, mais danse la valse.

Donc, voilà. Comme je l'ai déjà dit, cela ne veut pas dire que je mets un frein à mes activités de consultante ou de conférencière (j'ai d'ailleurs des idées à ce sujet que je vais développer dans un prochain billet).

The idea of starting a company and organising conferences like Going Solo is the result of a conversation I had a bit over a month ago, just before Web 2.0 Expo in Berlin.

Even though it sounded like a wacky idea to me at first, organising events now really seems like the “right thing to do” today. I’ve been to more conferences during the last 18 months than I can remember, so I’m starting to get a good sense of the ingredients. I have a good network. I have a “generalist’s” view of the web/tech world. I’m also a detail-oriented person. It’s also time I became more active in my professional life (ie, “taking things into my own hands”), and I like the idea of building something over the long term (well, long term by my standards).

If you’re a reader of this blog, you know I’ve become a bit conference-weary lately. I’m also known (to conference organisers, at least) for my sometimes nasty (but heart-felt!) feedback on their events. So, rather than continue complaining, I’m going to organise conferences I’d like to attend. I’m perfectly aware that given my track-record for finding fault with conference organisation, you’re all going to be waiting for me when I do mine. So be it ;-).

I believe it isn’t possible to please everybody: my intention isn’t therefore to organise the “perfect event”, as I know that it doesn’t exist. However, I’m strongly committed to getting all the basic stuff right, and to providing something slightly different from what already exists. More will unfold about that over the next weeks.

I’d like to state again that I am continuing with my speaking and consulting business (I actually even have plans for it in the near future, particularly in Lausanne). I know organising a conference is a lot of work (and luckily I’m not alone for that, I have two great partners and a bunch of very precious advisors), but that doesn’t mean I’m dropping everything else while I organise it.

Going Solo will be my first event, but I already have ideas for events to follow on other topics. The responses so far to my desire to organise an event for freelancers and very small businesses as been very encouraging, and has caused me to start thinking about what else I could set up for this audience/public (which I’m part of).

So, please, keep the feedback coming — I’m off to start writing my next post. (Feeling like a serial blogger just now.)

Delicious! A Great Bookmarks Manager [en]

Delicious is an online bookmark manager. It makes it very easy to add and categorize bookmarks, as well as share them with other users. You can also extract your bookmarks from delicious and integrate them in your blog to create a linklog. When I say ‘easy’, I really mean it!

Now, why on earth didn’t I start using delicious ages ago, when I first stumbled upon it? Maybe it didn’t look pretty enough, and didn’t flaunt its features loudly enough for me?

A couple of days ago I paid delicious another visit. See, somebody on #joiito mentioned my Keeping the Flat Clean post, and I suddenly found there was a bunch of people from delicious visiting that article. I thought: “My, people are actually using this thing!” and signed up for an account.

So… what does delicious do? It allows you to easily add pages you visit to your bookmarks, using intelligent bookmarklets (two clicks and no typing to add a link if you want to be minimalist). This is already easier than what I have to do to add links to my LinkBall.

You can categorize your bookmarks very easily by typing words in the “tag” field of the bookmarklet. No need to define categories — delicious takes care of it all for you. You can then view your bookmarks by category or (and this is where it gets interesting) all the bookmarks marked with a same tag. Each bookmark in your list is one-click editable, and each bookmark in somebody else’s list is one-click copyable. For each link, you can also view a list of all the users who have bookmarked it.

Does it stop there? No. All the bookmark lists (by user or by tag) are available in RSS and can be subscribed to within delicious. As a user, you have an Inbox which aggregates the feeds you have subscribed to. You may subscribe to a “user feed” or a “tag (category) feed”. On top of that, bookmark lists are available in plain html, and many users have contributed various hacks which can help you integrate your bookmarks with your weblog. (Update 02.06.04: one thing you shouldn’t do, though, is simply include that HTML feed with a PHP include or an iframe, as this will cause the delicious server to be hit each time somebody views your page.)

If you aren’t a user of delicious yet, you need to go and register right now.