Bulix.org » Life snippets

lundi 20 décembre 2010

Why apps are good, why apps are bad

There's an app for that. (probably trademarked by Apple). We now all know this little mimic from our friends in Cupertino. In the last two or three years, the mobile world has evolved from portable telephone booths to 100 grams portable and very capable computers. And with the evolution of the hardware and of the networks came a whole new field of opportunities for the mobile web and mobile applications.

Although being a huge supporter of open web standards, I have never been a huge fan of web-based applications. I always felt that the browser was only a piece of software in an operating systems. In short, that the Internet was not just the Web. That there is a whole other 65535 other ports for doing great stuff, differently, with the network. Applications offer so much more possibilities.

Just looking at the growth rate of the various mobile app markets out there shows the vast potential of these new platforms.

But I am afraid this will soon backfire.

Windows Mobile, iOS, Android. Microsoft-based, Apple-based, Linux-based. Sounds familiar? Yep, we still have that very same portability issue. Every single application needs to be written three times, in three different languages and frameworks, to reach the broadest audience. And that's not even mentioning Blackberry and Nokia, if these guys are even still meaningful.

Newer and cutting-edge web standards are slowly closing the gap, and great things are now possible with HTML5, CSS3, Canvas, etc (although I have yet to see good, hardware-accelerated, multi-browser support for all of this). What we need though, is better mobile browsers that really fade away to leave you with your application. ChromeOS probably does a step in the right direction there, but it needs a lot more than that to be awesome on the mobile phone space.

And finally, security. Most of these applications are closed-source, which makes auditing them virtually impossible. You don't have access to web services source code either, you'd say. And I would agree, but in more cases that is actually fine. I don't really care what the Pandora app is doing, how it logs in, etc. But what about your favorite banking application? Are you really sure it's really secure? When logging in my bank's website, I can check the SSL certificate, and I trust my open-source browser for doing the right thing with HTTPS and certificate checking. Can we really say the same about a mobile application? Does it actually check the SSL certificate, or just accepts anything? Does it even use SSL? Are you even sure it comes from your bank?

The mobile application market is growing so quickly some of the good virtues of F/OSS (open and accessible source code, transparency, security, attachment to standards, etc) didn't have the time to reach the large community of mobile developers. And Android might be the most "open" (yes, you need to say it fast) commercial platform available right now, the apps that run on it clearly aren't. And that's a shame.

I don't think the "app model" will fall apart. It's there already, and an even greater proportion of its users (compared to computer users) simply doesn't care as it "just works". But for these (not so well put together) reasons, I wish applications developers, publishers and markets would do a better job of either using the full capabilities of the mobile web or providing more transparence through the development of their applications, if at all possible!

The same actually applies to TVs, now that we connected that to the Internet as well :-)

# · Un commentaire
lundi 19 juillet 2010

State of the Map 2010

Chillin' at SOTM2010Me voilà de retour de vadrouille, il est donc grand temps de revenir sur mon séjour express en Espagne avec mon frère Thomas à la 4ème conférence annuelle OpenStreetMap : State of the Map, les 10 et 11 juillet 2010. Nous y avions proposé une conférence sur MapOSMatic en mars, qui a été acceptée.

Nous avons passé un excellent week-end lors de cette conférence. La communauté OpenStreetMap, que nous ne connaissions par vraiment, est particulièrement accueillante. Il était d'ailleurs intéressant de constater qu'elle est un peu disjointe de la communauté du logiciel libre, et l'aspect communautaire/crowdsourced d'OSM vient pour beaucoup avant son aspect libre. Nous avons donné notre présentation de MapOSMatic le dimanche midi devant une salle presque comble, et le moins que l'on puisse dire est que MapOSMatic a reçu un accueil plus que chaleureux de la part de la communauté OpenStreetMap !

La conférence en elle-même était très bien organisée, avec beaucoup de talks intéressants. La météo pendant le week-end était bien évidemment excellente à cette période de l'année en Espagne. Je regrette juste de ne pas avoir eu un peu plus de temps pour visiter le centre de Girona et faire une petite visite touristique de la vieille ville. Ça sera pour un autre voyage en Espagne !

Thomas et moi avons fait un compte-rendu de la conférence sur le blog de MapOSMatic. N'hésitez pas à aller le lire; vous y trouverez également un lien vers les slides de notre présentation !

# · Aucun commentaire
dimanche 21 mars 2010

Recent updates in MapOSMatic

The following blog post was cross-posted on the MapOSMatic blog earlier today.

pub/2010/03/21/saint-laurent-en-grandvaux.png

MapOSMatic recently passed an important milestone in its history. A few weeks ago, we served our 10,000th rendered map (Saint-Laurent-en-Grandvaux, Jura, France) ! We are very pleased with this accomplishment and feel it is important for us to continue improving the MapOSMatic service for our users. We are working on several objectives in parallel:

Today we rolled out on MapOSMatic a few changes that have been brewing and undergoing extended testing on our development setup, and as I write this post I am pleased to see that we are making good progress on these three main directions.

First and foremost, I think the most important update today comes from the addition of a Spanish translation of the MapOSMatic website (and the corresponding capability to generate maps and indexes internationalized for Spanish-speaking countries), contributed by Julio Costa Zambelli, Sebastian Borgwardt and Jean-Guilhem Cailton. We hope the availability of MapOSMatic in Spanish will help the Chile earthquake disaster response teams.

Next, we restored the bounding-box area input fields for specifying an exact zone to render by the coordinates of its top-left and bottom-right corners. We also added a new feature to the slippy map: by maintaining the Control key pressed, you can draw a rectangle directly on the map to precisely define the limits of the area you wish to render!

This update allows integrates better support for some languages :

pub/2010/03/21/korean-map.png
Small part of Seoul, South Korea

And finally, as advertised in a previous post about MapOSMatic improvements, we are now using a new version of the rendering daemon (the software in charge of processing the rendering requests queue and creating the maps and indexes). This new daemon lays the groundwork for future concurrent rendering and rendering jobs distribution which will help reducing the rendering latency, when completed. It also has better management of obsolete renderings, with the direct impact of no longer listing hundreds, if not thousands of maps we no longer have the rendered files for.

I would like to conclude this post by thanking, again, all the amazing contributors to MapOSMatic for their continuous feedback, ideas, bug reports and their celerity in providing translations updates when we add new features to MapOSMatic!

# · 2 commentaires
lundi 15 mars 2010

Proposition de conférence sur MapOSMatic à SOTM

State of the MapMon frère Thomas et moi-même venons de soumettre une proposition de conférence sur MapOSMatic pour la prochaine édition de State Of The Map (SOTM), la conférence annuelle consacrée à OpenStreetMap qui se tiendra en 2010 à Girona, en Espagne.

L'abstract que nous avons proposé, ainsi que toutes les infos, sont disponibles sur le billet MapOSMatic talk proposal submitted for SOTM 2010 du blog de MapOSMatic.

Nous espérons que notre conférence sera acceptée, nous permettant ainsi de présenter MapOSMatic à la communauté OpenStreetMap et récolter un maximum de retours et d'idées pour améliorer le service fourni par MapOSMatic !

# · Aucun commentaire
lundi 15 février 2010

FOSDEM 2010

J'étais il y a une dizaine de jours à Bruxelles pour le FOSDEM 2010, un évènement d'envergure internationale rassemblant des centaines de développeurs de logiciels libres de part le monde. C'était ma première fois au FOSDEM, et j'ai été stupéfait par l'affluence : du monde partout, les salles de conférences pleines à craquer 5 à 10 minutes avant le début du talk, etc.

Le week-end en lui-même était tout sauf reposant. Belfort-Bruxelles, ce n'est pas la porte à côté. Rajoutez les sorties les vendredi et samedi soirs, un semblant de fin de nuit sur un tapis de sol et vous obtenez un week-end assez pauvre en sommeil. Mais ça valait le détour.

Le FOSDEM accueille tellement de conférences qu'il est dur de choisir. Je vous laisse juger avec le planning. Parmis les conférences que j'ai apprécié, on retrouve :

J'aurais aimé pouvoir assister à plus de choses, notamment dans les tracks Embedded et Coreboot mais entre les salles pleines, les rencontres et notre départ assez tôt le dimanche pour rentrer sur Belfort, ça ne rentrait tout simplement pas dans le planning :)

Une bonne expérience que ce FOSDEM : c'est vraiment une conférence sympa, pleine de monde, de gens à rencontrer et de projets à découvrir !

Je regrette aussi de ne pas avoir eu plus de temps pour croiser et discuter avec des amis qui étaient sur place, ou encore d'avoir manqué de temps pour visiter Bruxelles. Mais il y aura d'autres FOSDEM, et d'autres occasions de se rendre là bas !

# · Aucun commentaire
mercredi 20 janvier 2010

Lauréats des Étoiles du Libre 2009

pub/2010/01/20/pull.jpgWoah, voilà un post qui aurait dû être fait il y a bien longtemps. Vous avez déjà lu à ce sujet par ici, en 2009 s'est tenue la toute première édition des Étoiles du Libre. Pas loin de 25 candidats se sont disputés les 9 places en finale (3 places dans 3 catégories) au cours d'une pré-sélection sans merci. Après avoir évalué et discuté longuement de chaque candidature, nous avons fin novembre annoncé les finalistes.

Puis, le 12 décembre, nous les avons réunis dans les locaux de Numérica à Montbéliard pour la-dite finale. Chaque candidat est venu présenter son projet et sa contribution devant un jury composé de David Anderson (Google), d'Alexandre Caminada (directeur du département informatique de l'utbm), Jérémie Laval et Alexandre Gondran (co-fondateurs des Étoiles du Libre) et moi-même (MontaVista). L'événement a eu aussi un peu de public, ce qui faisait plaisir. On espère augmenter la fréquentation pour les éditions suivantes !

Les présentations étaient vraiment intéressantes, avec plusieurs approches bien différentes au monde du logiciel libre selon les candidats. Après avoir entendu tous les candidats, nous avons pu délibérer et annoncer le classement. Le classement final de l’édition 2009 pour chaque catégorie est :

Applications scientifiques et éducatives :

  1. Gilles Chabert pour Ibex et Quimper
  2. Frédéric Weisbecker pour sa contribution au noyau Linux de FGT (Function Graph Tracer).
  3. Nathanael Cottin pour Hide&Reveal

Développement de logiciels pour le poste de travail :

  1. Christophe Dumez pour qBittorrent
  2. Eric Bachard pour Ooo4Kids
  3. Maxime Bride pour Mcc Html Mapper

Développement Web et Réseaux :

  1. Alexandre Lissy pour sa contribution à Kerrighed (probes et politique d’ordonnancement)
  2. Cédric Nirousset pour nyroModal, plugin pour jQuery
  3. Nicolas Brodu pour Encours

Bravo à tous les candidats ! Nous espérons que les Étoiles du Libre 2009 vous ont plu, que vous êtes contents de vos prix, et que vous ferez passer le mot : les Étoiles du Libre reviendront en 2010 !


pub/2010/01/20/edl.mini.jpg pub/2010/01/20/jury.mini.jpg pub/2010/01/20/prix.mini.jpg
Photos Loïc Geslin (Creative Commons Attribution Share Alike 2.0)

En attendant, n'hésitez pas à aller voir les photos de l'édition 2009, et de surveiller le site pour les news sur l'an prochain !

edit: avec un titre sans une faute plus énorme que le Big Ben, c'est mieux.

# · Aucun commentaire
mardi 12 janvier 2010

MapOSMatic updates

http://www.openstreetmap.org/images/osm_logo.pngA little while ago, back in September, I talked about MapOSMatic, a free and open source map creating service based on the OpenStreetMap data. After its original announcement in September, the project was very well received by the community, and this encouraged us to continue working on the project.

# · Lire toute l'histoire · 2 commentaires
mardi 22 décembre 2009

AETC 2009

AETC2009Bien ancré dans le rythme effréné de ces deux derniers mois, j'ai effectué le 10 décembre un aller-retour express à Paris pour assister à l'ARM European Technical Conference (AETC) 2009 au centre de conférences Cap15 à deux pas de la Tour Eiffel. Ce genre de journées est toujours assez fatigante en particulier à cause du temps de transport depuis Belfort donnant un ratio transport:conférence presque supérieur à 1.

On passera également sur la petite surprise made in SNCF à 5h10 sur le quai de la gare de Belfort : mon train aller et mon train retour étaient supprimés ce jour-là pour cause de grève. Bon, ça arrive, et le chef d'escale nous a échangé gratuitement notre billet pour une place sur le TGV partant un peu plus tard. En tout et pour tout, j'ai eu moins d'une demi-heure de retard, ce qui est plutôt pas mal étant donné le problème.

Bref, un peu d'attente à Belfort et quelques heures dans le TGV à lire Beautiful Code plus tard, me voilà arrivé à Paris où je m'empresse de rejoindre le site de la conférence et profiter de la matinée pour visiter le showroom. J'y retrouve (ou rencontre pour la première fois!) avec grand plaisir quelques collègues de MontaVista, et quelques têtes que j'avais déjà vues ou croisées au Salon RTS ou à l'Embedded Linux Conference Europe un peu plus tôt dans l'année.

Cette fois-ci bien sûr, l'évènement est centré sur les technologies ARM. La prise d'importance en 2009 des architectures ARM dans les domaines de la téléphonie et des netbooks apportant une lumière toute particulière sur les évolutions futures des processeurs ARM, sur l'arrivée récente du Cortex-M3 (high-level, mais low-cost) et des processeurs MP-Core (multicore).

Les entreprises présentes sur le showroom étaient d'horizons très divers, de KEIL et Antycip à Canonical et Microsoft, en passant par (bien sûr) MontaVista, ou encore de petits fondeurs russes venant montrer leurs premiers prototypes. C'est toujours intéressant d'aller rencontrer les gens comme ça, demander ce qu'ils font, sur quoi ils travaillent, quelles technologies ils utilisent. Et répondre à leurs interrogations sur MontaVista Linux 6, directement de la bouche des ingénieurs qui s'en servent quotidiennement pour notre processus de développement (même si en tant que développeur on a pas forcément encore eu l'occasion d'expérimenter tout ce que la plateforme MVL6 permet à nos clients).

Après un petit buffet, l'après-midi a été occupée par les conférences. Particulièrement techniques et principalement centrées sur les aspects matériel des nouvelles technologies ou challenges à venir. Avec 5 tracks en parallèle je n'ai bien sûr (et malheureusement) pas pu assister à toutes ces conférences, mais celles que j'ai suivies étaient vraiment intéressantes :

J'ai malheureusement dû m'enfuir avant la dernière conférence pour attraper mon train retour, qui était du coup un peu plus tôt que prévu si je ne voulais pas rester coincé à Paris. Grand mal m'en a pris, vu que j'avais apparemment été sélectionné parmi les questionnaires de feedback et avait gagné une Nintendo DS ! Mais le tirage au sort a eu lieu après mon départ, et je ne sais pas si quelqu'un d'autre à MontaVista a pu la récupérer pour moi :( Merci à Gilles Blanc de me l'avoir appris indirectement, et après coup, dans son billet sur ce même évènement !

Quoi qu'il en soit, l'AETC est désormais un évènement annuel que j'ajoute à mon calendrier de conférences, et j'espère pouvoir y revenir l'an prochain.

# · Aucun commentaire
lundi 14 décembre 2009

Geekeries du jour

Au menu des geekeries du jour, j'ai enfin résolu les problèmes de WiFi sur mon MacBook. Depuis plusieurs mois, la portée du WiFi sur mon MacBook s'était considérablement dégradée, un peu comme si l'antenne n'était plus branchée. Je ne pouvais donc que très rarement me servir du WiFi sur mon laptop, ce qui était particulièrement handicapant en déplacement, et même dans mon appart où je ne pouvais pas m'éloigner à plus de quelques mètres du routeur.

Après quelques recherches, c'était apparemment un problème connu, mais malheureusement non-résolu par Apple. Une des solutions proposées sur les forums était de remplacer la carte WiFi du laptop. J'ai donc acheté sur eBay une carte WiFi d'occasion pas chère (BCM94321 a/b/g/n) que j'ai reçu un peu plus tard. Le temps d'acheter les tournevis de précision qu'il me manquait, et me voilà enfin en train de démonter des dizaines de vis de tous les côtés pour accéder à la carte WiFi et la remplacer. Magie, l'opération est un succès ! Il s'agissait donc bien de la carte et non de l'antenne (certains utilisateurs mentionnaient des câbles d'antenne sectionnés !), et je peux maintenant à nouveau profiter d'un WiFi fonctionnel, avec le petit bonus de la compatibilité 802.11n.

Autre geekerie du jour, que je note ici pour simple mémoire, concerne sed. Pour remplacer les caractères NUL (\0) dans un flux, il faut utiliser \x0 et non \0 directement :

$ echo "Hello\0world." | sed -e 's/\x0/, /g'
Hello, world.

Notez que ça fonctionne aussi avec \d0 (pour spécifier la valeur en décimal plutôt qu'en hexadécimal, ce qui ne change rien pour 0).

Enfin, Google propose depuis peu des paquets Debian officiels pour Chrome sous Linux. Je teste donc la 4.0.249.30-r33 actuellement, et sans surprise sur une machine quad-core ça avance beaucoup plus vite que ce bon vieux Firefox. Bonus points pour la vitesse du navigateur, sa rapidité générale dans l'interface et le rendu, et pour la présence des extensions. Malus points pour l'absence d'une extension Delicious correcte, et l'absence d'une extension Vimperator (à première vue, si il y en a une faites tourner).

# · 7 commentaires
lundi 30 novembre 2009

Network autoconfiguration

Network autoconfiguration is considered one of the interesting features of IPv6. But it also exists in IPv4, albeit a lot less used in the real world. I had the opportunity to give it a try a few weeks ago during one of my practical sessions on NxOS at the UTBM to transfer some software archives to the students' laptops, which were of course not all running a GNU/Linux system.

With all the computers on the same network segment, we simply left all computers on automatic addressing via DHCP. Without a DHCP server available, the computers fell back to IP address autoconfiguration, getting a 169.254.x.y address in a /16 subnet. Then, without ever having to wonder about which computer got which IP address, we simply relied on mDNS to get .local names automatically. For more info, take a look at the Wikipedia article on MDNS and Zero configuration networking.

So, only a few seconds after plugging the Ethernet cables, students were able to access http://egg.local/~sam/nxos/ and get all the software they needed. Way faster than using USB sticks, and a very good proof of interoperability through open, recognized standards and technologies, all for a seamless experience!

# · Aucun commentaire
vendredi 23 octobre 2009

There and back again

I was last week at the Embedded Linux Conference Europe 2009, held by the CE Linux Forum at the World Trade Center of Grenoble, France. Yes, I'll spare you their tragically awful logo A perfect occasion to get out of Belfort for a few days, listen to several interesting talks on embedded Linux, and finally meet my colleagues from MontaVista.

I am indeed working as part of a team since I converted to full-time back in March, but I never got the chance to actually meet these colleagues. I was also able to meet a number of people from the embedded Linux community, be them professionals or hobbyists.

So I was in Grenoble from Wednesday, 14th to Saturday, 17th. I had a great time there, discovering the city and attending the conference. I never went to Grenoble before, and was amazed by its geography and the awesome landscapes and views of the surrounding mountains. I probably would have climbed a few of them right away if I had more time!

Anyway, I just wanted to post it the brain dump I did after I got back from Grenoble about the talks I went to during these two days.

A panoramic view of Grenoble from La Bastille

# · Lire toute l'histoire · Un commentaire
dimanche 18 octobre 2009

Les étoiles du libre

pub/2009/10/18/pull.jpgCette année, l'association des étudiants de l'utbm lance la première édition des Étoiles du Libre, un prix visant à récompenser les contributions individuelles des acteurs du monde universitaire (incluant bien sûr les étudiants) à des projets libre. Les inscriptions sont dores et déjà ouvertes et le seront jusqu'au 15 novembre 2009 sur le site du concours. Pour plus de détails, rendez-vous sur www.etoiles-du-libre.org.

Après une phase de pré-sélection des candidatures reçues, un jury (dont je fais partie) décidera du classement final de chaque catégorie. Le gagnant se verra remettre un chèque de 1000 euros, et un prix sera également remis pour les 2è et 3è places. Le tout pendant une cérémonie de remise des prix qui aura lieu le 12 décembre 2009 dans l'aire urbaine de Belfort-Montbéliard.

L'objectif de ce prix universitaire du logiciel libre est de récompenser les contributions d'un individu plutôt que le projet tout entier comme c'est le cas pour les Trophées du Libre par exemple. On cherche ici à donner envie aux étudiants, thésards, et autres membres de la communauté universitaire de contribuer à des projets libres ainsi que de montrer l'intérêt pédagogique que ces travaux peuvent avoir.

N'hésitez pas à participer !

# · Aucun commentaire
lundi 12 octobre 2009

A faster git branch in your prompt

A little while ago, I posted here a snippet that would add the current git branch (when applicable) into your prompt's display. This snippet used git branch directly, which turned out to be quite slow when entering a git repository in a new shell session, especially large repositories like kernel trees.

Salvaging from Bash's completion for git, a new snippet was put together. Albeit much larger, it is way faster since it directly relies on the files present in the .git/ directory. Here it is, as included in my ~/.zshprompt file:

# For the git branch name in the prompt
function git_ps1 {
  if which git &> /dev/null; then
    local g="$(git rev-parse --git-dir 2>/dev/null)"
    if [ -n "$g" ]; then
      local r
      local b
      if [ -d "$g/rebase-apply" ]; then
        if test -f "$g/rebase-apply/rebasing"; then
          r="|rebase"
        elif test -f "$g/rebase-apply/applying"; then
          r="|am"
        else
          r="|am/rebase"
        fi
        b="$(git symbolic-ref HEAD 2>/dev/null)"
      elif [ -f "$g/rebase-merge/interactive" ]; then
        r="|rebase-i"
        b="$(cat "$g/rebase-merge/head-name")"
      elif [ -d "$g/rebase-merge" ]; then
        r="|rebase-m"
        b="$(cat "$g/rebase-merge/head-name")"
      elif [ -f "$g/MERGE_HEAD" ]; then
        r="|merging"
        b="$(git symbolic-ref HEAD 2>/dev/null)"
      else
        if [ -f "$g/BISECT_LOG" ]; then
         r="|bisecting"
        fi
        if ! b="$(git symbolic-ref HEAD 2>/dev/null)"; then
          if ! b="$(git describe --exact-match HEAD 2>/dev/null)"; then
            b="$(cut -c1-7 "$g/HEAD")..."
          fi
        fi
      fi

      printf "%s" "(${b##refs/heads/}$r)"
    fi
  else
    printf ""
  fi
}

You can then simply add $(git_ps1) to your PROMPT variable definition.

# · Aucun commentaire
dimanche 11 octobre 2009

Notes on Django applications internationalization

Yesterday I took a closer look at Django's i18n framework to bring translations to a small web application I'm currently working on. Django's documentation on i18n is, as always, comprehensive and well-explained as long as you take the time to read it entirely. But there are still a few tricks that aren't covered by this documentation and I would like to explain them here for others to find, or else for myself as future reference.

When internationalizing a Django application, there are three main places that need work:

  1. the templates, of course, to mark all the strings that need translation;
  2. the code, where models and forms field names need to be marked as translatable as well, plus maybe a few other places in your code depending on your application;
  3. and finally the locale files where you actually translate everything.

In the templates. Marking strings for translation in your templates is fairly easy. You just need to enclose each string with the {% trans "my string" %} tag. This goes well until you start having complex strings with variable values inside them. In this case, you need to use the {% blocktrans %}...{% endblocktrans %} construct, and each variable inside will be replaced by a placeholder for translation. For example, the following block:

{% blocktrans %}
Hello, {{ name }}.
{% endblocktrans %}

Will yield the following string to translate: "Hello, %(name)s." But this is only supported if you aren't going to apply any value filter on your variable. Say you want to convert the name to titlecase, you can't just add the |titlecase filter to your variable there. You need to inform blocktrans of what you're attempting to achieve:

{% blocktrans with name|titlecase as name_t %}
Hello, {{ name }}
{% endblocktrans %}

This is still reasonable. The problems come when you have different formulation depending on the cardinality of a variable to decide if you need a singular or plural form. Normally, you would do something like:

I have {{ money }} euro{{ money|pluralize }}.

But pluralization is a complex problem in internationalization, which can unfortunately only be solved by explicitly having the singular and the plural forms expressed in the template and translated. For this, blocktrans comes again to the rescue, this time in an even less intuitive markup:

{% blocktrans count apples as apples_t %}
There is {{ apples_t }} apple.
{% plural %}
There are {{ apples_t }} apples.
{% endblocktrans %}

This will create the following construct in your .po files:

msgid "There is %(apples_t)s apple."
msgid_plural "There are %(apples_t) apples."
msgstr[0] ""
msgstr[1] ""

Where msgstr[0] is used to translate the singular form, and msgstr[1] is used to translate the plural form. Note that this will only work if you have exactly the same placeholders in both the singular and plural forms, as the same string formatting is applied afterwards, so all placeholder keys must match.

For value filters that include strings, like the |yesno filter, it is still possible to translate the output:

{{ my_boolean|yesno:_("yup,neh") }}

And then providing the translation for the combined string: "yup,neh" in the locale file, for example "ouaip,nan".

In the code. Let alone the few strings here and there you may keep in your code like form validation errors, the main things you need translated are your model names and fields, and your form fields. You probably know that Django infers a lot of information automatically from the model classes names and properties names. Unfortunately, if you want those translated, you will need to specify them yourself.

For the model names, which you probably want translated if you plan on using the administration site, you need to add a Meta class to each one of your models to specify the singular and plural name:

class Apple(models.Model):
    class Meta:
        verbose_name = _('apple')
        verbose_name_plural = _('apples')

Note that these must not be capitalized, as Django will do that itself only when required and you would otherwise have capitalized model names in places you shouldn't.

For field names, you specify them like this:

class Apple(models.Model):
    kind = models.CharField(_('Kind'), max_length=1, choices=APPLE_KINDS)

This may seem redundant, but it's unfortunately required so that Django uses the provided translatable verbose field name instead of the statically inferred one.

In forms, this is very similar:

class EatAppleForm(forms.Form):
    count = forms.IntField(label=_('How many?'))

Now come the tricky stuff. If your model contain a relation, it's likely that you have it showing up it the administration site when editing an object of that type. To get this relation field translated, you need to specify a verbose_name on the relation, too:

class Apple(models.Model):
    kind = models.ForeignKey(AppleKind, related_name='apples',
                             verbose_name=_('Kind'))

Even trickier: you may have defined extra model methods that you use in your templates or in the list_display setting of the administration pages for this model. Here's how to get this translated:

class AppleKind(models.Model):
    ...

    def apples_count(self):
        return self.apples.count()
    apples_count.short_description = _('Apples count')

To find this in Django's documentation, you need to go back to the very first tutorial, and it's not even in an i18n context there.

One last thing about putting these translation hooks in your code. Django provides two methods for translation: ugettext and ugettext_lazy (along with the ungettext/ungettext_lazy versions that support plural forms). The non-lazy versions directly return the translated string, whereas the lazy ones return a lazy object that will provide the translation only when necessary.

The bottom-line is: never use the non-lazy versions in the static parts of your code like model and forms definitions, otherwise these will be set at the server's startup time and will not change even when requesting a language change with the LocaleMiddleware!

Translating the locale files. After placing all the markers for translations in your code and in your template files, you can generate the .po file with django-admin makemessages and start translating, by hand or using a translation tool. On this subject, what is your preferred tool? I tried poedit, which seems fine but segfaults on non supported headers and does not support plural forms. gtranslator works a bit bettor, and has a nice translation memory, but its management of plural form doesn't seem to work either!

All in all, Django's i18n framework is very decent. The i18n helpers from django.utils.translation and the i18n URLs from django.conf.urls.i18n provide a complete solution to easily localize your application. The LANGUAGE_BIDI constant will even tell you if the currently selected locale uses a right-to-left language, which could allow you to output from a different template. Well, that's just one of the joys of i18n/l10n!

# · 2 commentaires
mardi 29 septembre 2009

Télétravail et formation

D'importantes étapes franchies dans ma vie professionnelle la semaine passée. Cela fait en effet 1 an que je travaille pour MontaVista Software, dont 6 mois en tant qu'ingénieur diplômé à plein temps. Cette milestone m'a poussé à m'interroger sur le chemin effectué depuis la fin de mes études. Une sorte de bilan personnel différentiel, si vous voulez.

D'un point de vue humain, relations humaines, et organisation, les progrès sont incontestables. Les premiers six mois passés en Californie au siège, puis le changement vers le télétravail à la fin de mon stage m'ont véritablement beaucoup appris sur la vie en entreprise. J'avais bien évidemment beaucoup appris pendant mon stage à Google, en particulier sur les relations intra- et inter- équipe. Mais il faut avouer que le cadre, l'ambiance et même le "concept" entreprise à Google Mountain View sont radicalement différents de ce que l'on trouve dans une entreprise plus traditionnelle -- et encore, on reste ici dans le software.

Le passage au télétravail m'a permis d'évoluer dans d'autres domaines. Sur le partage d'informations, la définition de la priorité de chaque tache en tenant d'avantage compte des relations bloquantes entre les composants, et aussi le travail asynchrone. Je ne partais heureusement pas de zéro, mon expérience passée en télétravail et mes contributions au logiciel libre me familiarisant déjà avec ces problématiques et modes de fonctionnement.

Du côté technique, chaque problème auquel je m'attaque m'en apprend un peu plus sur le noyau Linux ou sur un composant hardware. Le dernier en date, le support du chip bq27000 (un battery gas gauge sensor), qui m'a fait découvrir le HDQ/Dallas 1-wire et la classe power_supply. Mais devant l'étendue des choses à connaitre, tout cela me parait n'être qu'une goute d'eau. J'ai encore des problèmes pour suivre certaines discussions techniques, par manque de connaissances et parfois simplement de "culture générale" hardware ou software.

Je m'interroge donc sur les possibilités de formation et d'auto-formation pour les télé-travailleurs. Le droit à la formation est bien sûr présent et est très important, mais il faut avouer que les formations pour mon domaine sont assez rares (ou loin, donc chères). Free-Electrons par exemple consacre une partie de son activité à la réalisation de formations sur l'embarqué, mais je pense qu'une trop grande partie de leur programme couvre des sujets avec lesquels je suis déjà familier, en grande partie grâce à mon travail pour MontaVista.

J'attends. Peut-être qu'il ne s'agit que d'une question d'expérience. Après tout, je ne suis diplômé que depuis six mois, et le bout de papier (que je n'ai pas encore d'ailleurs) n'apporte pas les connaissances. Je vais donc essayer de lire un chapitre d'un livre technique, ou une série d'articles Wikipedia relatif à mon domaine de travail, par semaine.

Et vous, comment faites-vous pour acquérir des connaissances dans votre domaine de travail ? Est-ce que vous vous reposez uniquement sur l'expérience, qu'elle soit strictement professionnelle ou personnelle, ou accordez-vous un peu de temps à de l'auto-documentation ?

# · 4 commentaires

1 · 2 · ... · 17 · 18