An Experiment (Seesmic and The Black Swan) [en]

I love reading, and I have a pile of interesting books waiting for me to dig through them. I’ve just picked up The Black Swan where I left it over a month ago.

One of my frustrations with reading, I realise, is the difficulty in sharing the interesting stuff I discover. Being an online person, I’m used to being able to share all the interesting stuff I find or think of very easily. Going from printed book to the web is not that simple.

I painstakingly typed up quotes in my tumblr but honestly, it’s not the best solution. Maybe somebody will offer me a pen-scanner one day (that would be fun!) but in the meantime, I’m a bit stuck without a good bridge between my dead-tree reading and my online community.

So, I just did an experiment with Seesmic. I read out quotes and commented some of the stuff I was reading. There are two videos because (as I just discovered!) Seesmic cuts you off at 10 minutes. In total, here are 16 minutes or so of me rambling on and reading quotes to you.

The Black Swan I

The Black Swan II

Sorry for those of you who can’t see the videos. For those of you who can, do let me know if you think this is a good idea or not.

Update: more videos…

The Black Swan III

The Black Swan IV

Seesmic Tips [en]

[fr] Quelques tuyaux à partager après quelques jours sur Seesmic. (Traduction intégrale, pour une fois.)

  • Allez directement sur http://www.seesmic.com/Seesmic.html pour éviter d'avoir à vous re-loguer à chaque fois.
  • N'essayez pas de tout suivre. Comme dans la vie, on ne peut pas tout suivre. Autant l'accepter tout de suite, sous peine de sombrer dans la folie.
  • Pour le moment, il n'y a aucun moyen simple de voir à quelle vidéo répond une autre vidéo, ou bien où sont les réponses à une vidéo donnée -- sauf en faisant manuellement le tour de la timeline publique à la recherche de vidéos du même nom. Mais ils bossent dessus.
  • La qualité vidéo est merdique, mais n'y prenez pas garde. C'est une Bonne Chose, en fait. Ça nous libère des soucis de qualité technique pour nous encourager à nous concentrer sur le contenu.
  • Pour éviter que la fin de vos vidéos soit coupée, attendez sagement que la bare de progression grise dans l'écran de prévisualisation ait atteint le bout de la barre (illustration). Parfois, il manque quelques secondes à la vidéo quand vous la prévisualisez, mais dans mon expérience, la vidéo finale est complète (pour autant que vous ayez attendu!).
  • N'annoncez pas toutes vos vidéos sur Twitter. Soyez sélectifs. Ou ouvrez un nouveau compte rien que pour ça.
  • Quand vous cliquez sur "follow xyz" à droite de la vidéo, ça donne l'impression qu'il ne se passe rien, mais en fait, la personne est effectivement rajoutée à vos amis.
  • Essayez de regarder la caméra, et pas votre image sur l'écran (plus facile à dire qu'à faire!)
  • La webcam reste active après que vous ayez fini l'enregistrement. C'est un bug Flash, pas de la faute à Seesmic (donc vous en faites pas, ça tourne pas!) Si ça vous dérange ou que vous avez besoin d'économiser vos batteries, rechargez simplement la page.
  • La timeline est parfois capricieuse, ou certaines entrées n'y apparaissent pas. Dans le doute, rechargez la page, ou visitez les pages individuelles des gens pour être sûr.
  • Si vous en avez marre de devoir subir les annonces de vidéos dans des langues étrangères qui vous échappent, cliquez sur la petite terre à côté de "Post a video" pour les filtrer.
  • Voilà, je crois que c'est tout!

A few tips after a few days using Seesmic.

  • Head for http://www.seesmic.com/Seesmic.html directly if you don’t want to be asked to log in each time.
  • Don’t try to listen to all the videos. Just like in life, you can’t follow everything. Accept it now or it’ll drive you crazy.
  • There is no way for the moment to easily find which video another video is replying to, or where the replies to a given video are — short of going through the public timeline and clicking on anything with a similar name. They’re working on it, though.
  • Don’t worry about the fact the video quality is bad. It’s a Good Thing. Forces you to concentrate on content rather than technical quality (a daunting prospect, when it comes to video).
  • Prevent Seesmic from chopping off the end of your video by making sure you wait for the grey progress bar in the preview screen (after recording) reach the end. The preview may be cut before the end, but in my experience, the final video isn’t.
  • Don’t Twitter all your videos. Be selective or set up a separate Twitter account.
  • Clicking on the “follow username” link on the right actually does make you follow that person, even though it seems nothing is happening.
  • Try to look at the camera, and not yourself on the screen (easier said than done).
  • Your webcam will remain active after recording a video. It’s a Flash bug, not Seesmic’s fault (don’t worry about your privacy, it’s not recording). If you need to save power or if it bothers you, just reload the page.
  • The timeline sometimes gets screwed up, or some posts don’t appear in it. Reload, or visit individual user pages.
  • If you’re sick of having your timeline “polluted” by foreign languages you don’t understand, click on the little earth icon (next to “Post a video”) and filter them out.

There, I think that’s it!

Désinformation en 20 secondes: Google Reader [fr]

[en] A brief note about the Google Reader Shared Items problem in a local free newspaper gives the impression that Google is sharing all subscribed feeds with our chat buddies. I can't stand by and watch this kind of stuff without reacting.

Lundi 31 décembre 2007. Je suis dans le bus. Comme souvent lorsque je suis dans le bus, je feuillette le journal gratuit 20 minutes. J’arrive à la page multimédia, que je lis généralement avec intérêt, car elle me donne un point de repère : qu’est-ce qui est « mainstream », qu’est-ce qui ne l’est pas ? Soudain, mes yeux tombent sur la dépêche suivante, qui me fait littéralement bondir :

Google encore épinglé

Le moteur de recherche a mis en place une fonctionnalité intrustive qui partage automatiquement les listes de flux RSS de Google Reader avec les contacts Google Talk d’un membre. Malgré les protestations, Google refuse pour l’heure de modifier le système.

Très clairement, la personne qui a rédigé cette dépêche n’a pas pris plus de 20 secondes pour vérifier ce qu’elle était en train de raconter. Difficile de faire mieux en matière de désinformation primaire.

Des explications ? Mais bien sûr. Je l’ai même déjà fait ici (c’est un article en anglais, mais il y a un résumé en français assez complet).

À en croire 20 minutes, ce que fait Google Reader, c’est de partager sans autre forme de procès toute la liste des flux RSS auxquels vous est abonnés avec vos partenaires de chat. Ça, ce serait effectivement scandaleux !

En réalité, Google ne met à disposition de vos partenaires de chat que les articles, parmi tous ceux que vous recevez via vos flux RSS, que vous avez expressément choisi de partager via vos “Shared Items”. En pratique, cela ressemble à ça. Si vous voyez un article qui vous plaît, vous cliquez simplement sur “Share”:

Google Reader Shared Items

Pas tout à fait la même chose !

Il reste bien entendu le problème que cette « page publique » est accessible via une adresse compliquée, et donc pas si privée que ça… Mais c’est un autre problème.

Un cactus pour 20 minutes, donc, pour avoir contribué à la désinformation ambiante au sujet des technologies du Web.

Two Successes! WPD2 and WoWiPAD1 [en]

[fr] Aussi bien le Website Pro Day 2 (WPD2) que le WoWiPAD1 (World Wide Paperwork and Administrivia Day, ou bien "Journée Paperasse" de son petit nom) ont rencontré un franc succès.

Du coup, on remet ça. WPD 3 (sur Lausanne, mais vous pouvez saisir la balle au bond et organiser des événements-frères ailleurs) le 16 janvier, et WoWiPAD2 dès que quelqu'un d'intéressé m'aura contacté pour fixer une date.

Je trouve aussi qu'une journée pour bloguer à 100% (finir les brouillons, écrire ces billets auxquels on pense depuis des lustres mais y'a toujours plus urgent à faire) serait pas mal, ainsi qu'un pour mettre à jour ses uploads de photos sur Flickr... (quoi? vous êtes à jour? zou!)

I’ll be brief, because I’m running around a bit like a headless chicken these days with tons of different things to do, and the blog gets neglected. So, here’s a short article, rather than no long article (because that’s what tends to happen).

Both WPD2 and WoWiPAD1 were a great success. I really think that gathering people together towards a common goal on a given day is a really good idea — especially for people working from home, or freelancers.

The Lausanne branch of the Website Pro Day initiative have already decided that we needed a WPD3. The date that has been chosen is January 16th. Make a note of it now! I’ll create a Facebook event shortly.

WoWiPAD1 (that Suw wants to rename the “Administrivia Day” because she doesn’t like the ugly acronym… who can blame her?) saw participants joining us from all over the place, including Ton and Elmine from the Netherlands and even Stowe Boyd from San Francisco. We posted updates to the event wall, Twitter (most of them private, unfortunately), and Seesmic. I’ve collected links to related Seesmic videos in the event links.

Personally, I’m ready for WoWiPAD2. If you are too, ping me and we’ll choose a date (better to be at least two people to set a date).

I’m also ready for “Write All Those Blog Posts Already Day” (100% blogging, a chance to finish drafts and catch up on old post ideas!) as well as “Digging Through That Flickr Backlog Day” to upload those photos you took six months ago and still haven’t seen the light of day. Ping me if you’re interested, and we’ll make them happen!

Seesmic Invite Lottery [en]

[fr] Pour les lecteurs de Climb to the Stars, 20 invitations Seesmic à utiliser dès maintenant. Premier arrivé, premier servi -- bonne chance!

For Climb to the Stars readers, here is a collection of 20 Seesmic invite codes. If you haven’t had the chance to receive one yet or if you’re too shy to ask, here’s your chance! First come, first served.

  • QNsZKlopct
  • CFAwTRQkO
  • ZATz7D8XlW
  • 5sNU0U5qv9
  • seV4suRvPx
  • 6IfJCNszGt
  • tNqo6cIYZh
  • H3oeyWkQZE
  • Jtv2MTfX9N
  • pQzdnE0IRj
  • ZArOcvfyS4
  • 6uSbxVqVAj
  • gojraQB7Hf
  • YAPHMTsapy
  • 62KufO31fG
  • vJN7OqBBYQ
  • zyFJF4TB5Z
  • SOFPpl5bJW
  • JDAtaIeq7L
  • E8wvO4LgSb

Update, 12:30: wow, gone already! here are 5 more (but I’m seeing the end of my stash soon)

  • fvJApxktS4
  • YvohS2ejmR
  • 8s2NgisH4h
  • 9pNeDQhknd
  • B0vce37ECV

Seesmic Addiction [en]

After the initial doubts, addiction:

I’ve lost count of the number of videos I recorded. I’m drowning in them. I’m afraid you can’t easily track them down if you’re not the lucky holder of a Seesmic account (it’s still closed, though they’re working on opening it — there are 15’000 people on the waiting list for invites).

I did a short piece on WoWiPAD. I talked about upcoming posts here on CTTS. I spoke against conversation threading. I participated to the collective dissing of the expression “social graph”.

I left a nice message for Loïc, in French, to tell him I liked his service (I usually complain about his stuff more than praise it, so it’s worth noting).

Two Plugin Updates: Basic Bilingual 0.32 and Language Linker 0.2 [en]

[fr] Je me suis levée à l'aube pour aller faire la nouille sur RSR1 et prendre un p'tit déj improvisé chez une ancienne copine d'uni. Ensuite, j'ai passé la journée les mains dans le PHP, ce qui veut dire que je n'ai beaucoup blogué, mais que j'ai mis à jour deux plugins: Basic Bilingual, qui permet de tenir sans peine un blog "bilingue" comme celui-ci (c'est ce qui me permet de rédiger et d'afficher ce petit extrait en français) et Bunny's Language Linker, très utile pour afficher des liens entre pages correspondantes des différentes traductions d'un site.

After waking up at an ungodly hour this New Year’s Day (for a live radio appearance and impromptu breakfast at a uni friend’s home nearby) I spent the rest of my day elbows deep in PHP code. As a result, I haven’t written the half-dozen of posts that have been sitting in my drafts list over Christmas, but I have updated two plugins — an old one, and a new-born.

Basic Bilingual 0.32

Download | zip | .phps

This release fixes the disappearing excerpts problem (was fixed in 0.31 actually, but I never announced it) and replaces the ugly “language box” floating somewhere near the top of the post admin page by a pretty DBX (let me know what it stands for) box in the sidebar:

Basic Bilingual got a dbx box for the new year!

Bunny’s Language Linker 0.2

Download | zip | .phps

(I always want to call it “Language Links”, which was the initial name I chose — still not sure I was right to change.) Anyway, this version is pretty exciting, as it does something I’ve been thinking of for a while: it puts the link to the other localized versions of the page you’re viewing in the menu bar if you’re using a Sandbox-based theme:

Language Linker link in the menu bar!

Otherwise, it puts it at the end of the page in its own div (you can style it the way you wish). I’m not saying this is the best, final solution, but I think it’s headed in the right direction.

Hoosgot: The Lazyweb is Back! [en]

[fr] Hoosgot, réincarnation du lazyweb d'antan, est en ligne. Merci à Dave Sifry, fondateur de Technorati!

One of the great things about the internet is that it brings people and ideas closer. One of the ways I (and many others) use it is to find things, or make sure the great idea we just had hasn’t already been implemented somewhere before we start building it.

Many years ago, when trackbacks were young and the the Internet Topic Exchange was hot, some brave folks put their heads and fingers together to give birth to The Lazyweb. If you had a request or a question, you would blog about it, send a trackback and a small prayer to the lazyweb, and maybe the lazyweb would answer with a solution. (As you’ve understood, the “lazyweb” is the community of people sending requests and keeping an eye on those from their brethren.)

I sent a few requests its way at the time.

Unfortunately,spam killed the lazyweb.

Yesterday, Dave Sifry announced the birth of hoosgot, reincarnation of the lazyweb.

So, how do you send your requests over to hoosgot? Simply mention hoosgot in post or Twitter message, and it will appear on the website and in the associated RSS feed — which you should definitely subscribe to and keep an eye on.

Thanks, Dave!

Bunny's Language Linker: New WordPress Plugin [en]

[fr] Un nouveau plugin WordPress que je viens d'écrire. Celui-ci vous permet de gérer les liens entre pages équivalentes de deux versions linguistiques d'un site. Par exemple, si vous avez http://stephanie-booth.com/en et http://stephanie-booth.com/fr (deux installations WordPress séparées!), le plugin vous aidera à faire en sorte qu'il y ait des liens entre http://stephanie-booth.com/en/about et http://stephanie-booth.com/fr/a-propos.

Ladies and Gentlemen, I’m proud to announce the WordPress plugin Bunny’s Language Linker (zip, phps).

I’ve been wanting to write this plugin for ages, and I’ve finally done it this evening. This is a plugin for people who have a WordPress site with content duplicated in more than one language, like I’m going to have with stephanie-booth.com. For example, you have an “about” page in English, and another “about” page in German. This plugin helps you create and manage links between such “sister” pages. (“Pages”, not “posts”. It doesn’t work with posts at all.)

The plugin adds an extra field to the page editing form, inviting you to input the page slug of the sister page:

Bunny's Language Linker - Admin view

The screenshot is a bit small, but there on the right, there is a little box with “a-propos” — the slug of the French sister page. It works with more than one other language, too. You just need to edit the settings in the plugin file to specify which languages you’re playing with (instructions are in the plugin file). If I had sites in 3 other languages, say French, Spanish, and German, my settings line in the plugin file would look like this:

$bll_other_languages=array('fr', 'es', 'de');

And the little box would provide three different fields for the page slugs of the different localized sites. (OK, I’m making this sound complicated, sorry.)

The plugin then automatically adds links to the sister pages you’ve indicated. Here’s what it could look like:

Bunny's Language Linker - Page view

There’s a readme file with the plugin which will give you some more details. I’ll soon have a client site in production using that plugin, so if these explanations weren’t very clear, hopefully the demonstration will help.

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.

Multiviews

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!