Friday 1 August 2014

Proud father

I'm a proud father! My son Michel, 15 years old, has published his first game on the Google Play Store! It's a bit rough around the edges but I'm so proud! :-)

Wednesday 30 July 2014

Where is Daniel

I suffered last week a major lumbago, leaving me totally blocked, under morphine and hospitalized. I am recovering slowly, stuffed with strong medicines, my back being too weak now to stand a visit to my osteopath. Since I am unable to seat too long in front of a computer (I spend most of my days in bed), don't count on me these days for anything work-related, including unfortunately W3C stuff. Don't expect fast answer to emails either. I need at least one extra week of complete rest to recover a bit. Thanks.

Friday 20 June 2014

Leaving Samsung

This is my last day at Samsung. I am open to job opportunities. I'll continue co-chairing the CSS Working Group, but under my Disruptive Innovations' wings, starting immediately.

Monday 9 June 2014

US Navy LCT 537

In my plane between Paris and Boston, a few WWII veterans were coming back from Normandy and the 70th anniversary of D-Day. In the middle of my flight, I left my seat to walk a little bit (I still have a bad left knee) and saw one of them. He was wearing a "US Navy LCT 537" hat. I stopped in front of him and asked him "Excuse me sir, you're a WWII veteran coming back from Normandy, right?". He replied a strong "yes!". So I told him "There is something I want to tell you: I am French and Jewish. So thank you very much...". He took my arms, my left arm with his right arm, my right arm with his left one, _very_ firmly looked at me and said "God bless you, God bless you.".

I am really glad I did this today.

Wednesday 28 May 2014

from iPhone 4S to Samsung S5

I switched from an iPhone 4S (and an iPhone 2G before that) to a Samsung S5 a month and a half ago and it's probably time to summarize what that change meant to me from both hardware and software points of view.


I loved my iPhone 4S's hardware for the following reasons:

  • metal and glass, feels and is robust
  • side button to mute it or block rotation
  • excellent control of iTunes through the headphones' chord: one click to pause, two clicks to move to next song, three clicks to move to previous song
  • lots and lots of accessories
  • battery charging really fast!

I started disliking my iPhone 4S for the following reasons:

  • screen too small and I thought the iPhone 5S was a too expensive and not interesting enough upgrade
  • rather bad sound quality of the too fragile headphones
  • the buttons on the headphones' chord don't work well when it's very cold outside
  • battery is not removable
  • impossible to add a microSD card
  • rear camera too far behind state of art
  • screen quality too far behind state of art
  • loudspeaker not loud enough
  • rather poor 3G reception and no 4G
  • all covers and case add too much to phone's thickness

I love the S5's hardware for the following reasons:

  • laaaaarger and much higher quality screen
  • removable battery and better battery life than the 4S
  • microSD card slot
  • the View Cover of the S5 is very, very nice
  • the induction-charging View Cover is even nicer...
  • dust- and water-proof
  • very good rear camera
  • loudspeaker is loud
  • micro-USB
  • excellent WiFi, Bluetooth and 4G
  • IR to control my TV and set-top box
  • fingerprint reader

What I don't really like in S5's hardware:

  • plastic... When you come from the iPhone 4S, the S5 feels a bit like a toy
  • less accessories
  • it's easy to scratch the metal-like plastic border of the phone
  • no button to mute or block the rotation; I know this can be done easily with a few clicks but, unlike the 4S, I need to remove the phone from my pocket for that
  • the heartbeat sensor is not precise enough and it's rather hard to make it work properly
  • the + and - volume buttons are not separated
  • apparently, three clicks on the headphone's chord does not move to previous song; or it does not work here.
  • the wonderful temperature sensor of the S4 is gone in the S5


I really appreciated my iPhone 4S for the following reasons:

  • iTunes worked well on my Mac; the UX of iTunes seems to me almost unbeatable despite of a few flaws.
  • simplicity and intuitiveness of the whole iOS UI
  • homogeneous UI/UX of almost all apps in the iOS ecosystem, making them in general very intuitive to use
  • iOS preferences are easy to deal with even if they lack a few things
  • trivial Airplay
  • I used a lot an application called "Notes de Frais" for my expense reports. Superbly done and maintained.
  • new OS releases are announced
  • I loved the keyboard and some of its features like switching back automatically to regulars chars after the insertion of an apostrophe, something important when you write in french
  • kinetic scrolling has always been superb
  • worked beautifully with my car's infotainment system.

I was increasingly fed up with the following things in my 4S:

  • my 4S was having a lot, really a lot of trouble, finding a network provider abroad in less than 15 minutes. I often had to shut it down and reboot it for that. Very annoying. Let me put that in the software section as a bug.
  • not enough options in the floating panel of the home screen.
  • no widgets on the home screen
  • too slow to add new features
  • no other browser than Safari; I should say no other rendering engine

S5 and its Android stack won me with:

  • no more roaming issues
  • widgets on home screen
  • lot of options on the home screen's floating panel
  • still lots of apps
  • Smart Booster to use WiFi and 4G together
  • Eco Mode making the battery last days and days
  • private mode
  • Smart Stay, my phone does not go to standby if it can see my eyes...
  • I can use Firefox...
  • I don't use NFC yet but I'm glad it's in

But there are things I am still not used to:

  • I need a replacement for Kies, that I don't like. Any recommendation?
  • no rotation of the home screen?
  • the home screen's floating panel can contain 10 shortcuts and only ten. WHY ONLY TEN?
  • Google, google, google everywhere
  • Contacts offer by default only one Name field. Not two FirstName and Name fields.
  • Android preferences are just a true PITA. It's a mess of epic magnitude, some prefs being completely impossible to understand or sometimes hidden in an unexpected section of the preferences. Geekiness maxima.
  • why the hell is Calendar named S Planner? Seriously?
  • no native DLNA, I add to install the Samsung Link app
  • rotation is sometimes too slow
  • keyboard is not predictive enough and has too small keys; I too often hit the wrong key
  • I still have not figured how to reproduce the apostrophe behaviour of the iOS keyboard described above. Help!
  • bloatware I never used and will almost certainly never use
  • apps UI is too heterogeneous. Not enough intuitiveness. Some apps offer a back button between screens, some rely on the back hardware button, some allow both.
  • all my attempts to find a decent equivalent to my iOS expense report app, with a very good currency management, failed
  • the weather widget takes 1/3rd of the screen! Seriously? I don't need it to show time, I only want local weather. Could be just an icon. In general, widgets eat far too much screen space.
  • works some times weirdly with my car's infotainment system. From time to time, I can't reach my contacts list from the car.
  • some issues with kinetic scrolling and zooming.

All in all, I am a happy S5/Android user. I am pretty sure the UI issues of Android will fade away with new releases. It feels like I'm back in 2014 again.

Update: comments closed, thanks to trolls.

Tuesday 15 April 2014


Après mon billet précédent, on vient de me demander si j'avais encore des screenshots de mon agent de messagerie MIME. Il se trouve que oui : c'est visible ici. Les fichiers ont pour date 2003 mais ils ont en fait pas loin de dix ans de plus... Pour mémoire, à l'époque, on envoyait des attachements en utilisant uuencode et uudecode...

À l'assaut

Suite à un tweet d'Aymeril Hoang, je viens de lire le billet de Nicolas Colin intitulé « L’industrie du taxi à la frontière de l’innovation ». Un paragraphe m'a méchamment fait tiquer :

Une fois qu’une position a été prise par une entreprise américaine, il n’y a plus de rattrapage possible par une entreprise d’un autre pays. Il est impossible de créer un Google français, de même qu’il est impossible de développer DailyMotion face à YouTube ou de faire prospérer une activité de vente en ligne face à Amazon. Sauf à ce que l’entreprise dominante s’endorme sur ses lauriers (= MySpace défait par Facebook), il n’est plus possible de partir à l’assaut d’une filière une fois que sa transformation numérique est achevée.

Il se trouve que je ne suis pas d'accord du tout et que ce point de vue est un des plus grands regrets personnels de ma carrière. En 1992-1994, j'étais l'auteur d'un des tous premiers agents de messagerie MIME (RFC 1341 à l'époque). Pour les incultes technologiques, MIME est ce qui vous permet d'avoir des pièces jointes dans vos messages, des jeux de caractères différents d'ASCII et pas mal d'autres choses encore. MIME est aussi bien reconnaissable dans les bases du protocole HTTP. Mon outil avait pas mal d'usagers dans le monde, une communauté s'était forgée autour, et faire de ce projet un produit me tentait. Un de mes meilleurs amis (caskaboulons qui se reconnaîtra) m'a alors présenté son père, industriel du logiciel. Celui-ci m'a écouté, attentivement, m'a demandé mon âge, m'a questionné sur mon projet. La réponse, définitive, m'a laminé : « laissez tomber, vous êtes trop jeune et vous lancer face à Microsoft est impossible, vous n'avez aucune chance depuis que Microsoft a décidé de se lancer dans le courrier électronique ». Connement, je l'ai écouté. Je le regrette encore, un million de fois, et je le regretterai toujours.

Cette opinion dictée par les études de marché et la bien-pensance (si vous me permettez ce néologisme) détruit stupidement de la valeur. Aurait-il fallu ne jamais lancer Apache à cause de la domination de Microsoft IIS qui pourtant introduisait de nouvelles fonctionnalités à chaque version ? Aurait-il fallu ne jamais croire en Firefox à cause de la domination mondiale d'Internet Explorer qui certes s'endormait un peu sur ses lauriers ? Aurait-il fallu ne jamais lancer Google à cause de la domination d'Altavista ? Aurait-il fallu faire une croix sur Qt parce que wxWidgets dominait le marché ? Non, je n'y crois pas.

Je crois en deux choses. Tout d'abord une réponse faite par Steve Jobs il y a très, très longtemps, à un journaliste qui l'interrogeait sur le fait qu'Apple ne représentait toujours que 4 ou 5% au plus des parts du marché du PC... Il avait répondu qu'il n'y avait pas besoin d'être le premier pour être un succès. Ensuite, je crois en une chose que Chris Hofmann de Mozilla m'avait dite à Barcelone, lors d'une réunion de mozilliens : si Mozilla avait du faire une étude de marché ou appliquer quelque méthode « habituelle » que ce soit pour lancer Firefox, jamais cela ne serait arrivé ; à la place, ils se sont servis de leur pif et se sont lancés.

Il faut avoir foi en les éléments suivants:

  1. L'innovation perturbatrice. Il est parfaitement possible dans le Logiciel, même pour une toute petite équipe opérant depuis un garage, de donner des coups de boutoir inimaginables à une grande entreprise établie et dominante parce que tout grande entreprise sera toujours plus lourde, moins agile, moins réactive que la petite équipe organisée en commando.
  2. La prise de risque. Si on ne se lançait que lorsque les risques sont nuls, on ne se lancerait jamais.
  3. L'intuition. Les études de marché sur des choses nouvelles et perturbatrices sont difficiles voire impossible à réaliser. J'ai appris depuis bien longtemps qu'il est totalement illusoire de demander aux usagers s'ils apprécient ou vont apprécier une rupture technologique. S'il avait fallu écouter les études de marché, les SMS n'existeraient pas.
  4. La versatilité du marché. Les usagers, même Corporate, sont et restent versatiles. Ils sont constamment à la recherche de la nouveauté, soit par mode, soit par recherche de qualité/modernité, soit par lente désaffection.

Il a mon avis donc parfaitement possible d'attaquer une entreprise américaine dominante sur son marché même après la fin de sa transformation numérique. Il faut le faire en mode commando, en profitant de chaque faille, en trouvant de nouveaux paradigmes, sans écouter les oiseaux de mauvais augure.

Mise à jour: « Don't try to be pioneer if you're relying on market research studies ».

Welcome cbeard

Among Mozillians, there is a small (not too small, in fact..) group of people who were already here before 15-jul-2003. After that date, we saw old-time contributors rejoin Mozilla one by one, and new hires too, something we had forgotten about since the 2002 Netscape layoffs. Chris Beard was one of them, at the end of 2004 IIRC (time flies, holy cow, time flies...). If old-time Mozillians saw a necessary little shift in the local culture because of these new hires, it was clearly not the case with cbeard, who adapted so well to Mozilla we immediately used his IRC nick to mention him. Having a vision, dealing very well with the community, always open to discussion, leading new projects, highly respected, I'm glad he was appointed interim CEO. Welcome Chris!

Friday 4 April 2014

Sad day

It's a very sad day. I just landed in San Francisco and learned about Brendan's resignation and I am totally shocked. I have very mixed feelings today about the "Mozilla Community" and I am not sure I like what it became.

Mitchell wrote the following:

We welcome contributions from everyone regardless of age, culture, ethnicity, gender, gender-identity, language, race, sexual orientation, geographical location and religious views. Mozilla supports equality for all.

Yes, we do. But I think we also value democracy, and what happened during the last days seems to be a negation of democracy. One should be able to express legal opinions without having to face a witch-hunt-like repression.

Today, Mozilla is weaker because of this witch hunt. Mozilla, who is standing for the better of everyone on the Web, is weaker because some people thought it would be stronger without Brendan. This is ridiculous, this is a shame, this is a scandal. A small step for a few, a giant leap back for the Web.

Who said "Mozilla Community"? Who said Openness? Pfffff. I've been a Mozillian for fourteen years and I'm not even sure I still recognize myself in today's Mozilla Community. Well done guys, well done. What's the next step? 100% political correctness? Is it still possible to have a legally valid personal opinion while being at Mozilla and express it in public?

Personal message to Brendan : Paris in April and May can be such a wonderful city. Come over here for a break, I have a few good restaurants, bars and unknown superb monuments to show you... With all my thoughts and support.

"I may disagree with what you have to say, but I shall defend, to the death, your right to say it"

(comments disallowed, I still have in mind the hate messages left on this blog last week)

Update: I perfectly understood the fact Brendan resigned because of the external pressure. But that external pressure would probably not have existed at all without the original internal pressure. Reminding Brendan's position was, I already said it, pointing an index at him. Being an employee and explicitly saying in public "I don't support Brendan as CEO because of his prop8 support" triggered the rest. That's where I don't understand the Mozilla Community any more.

Wednesday 2 April 2014

Mac and rtl

After years of wait, Apple Keynote was just updated to v6.2 and includes a far better support for rtl scripts. For the first time, the cursor and the caret movements are reliable and it becomes possible to edit a rtl slideshow. Pages is still in v5.2 though.

On the Microsoft Word front though, still no rtl at all...

Monday 31 March 2014

Du noir sur la carte

FREJUS deux listes de droite se maintiennent, le FN qui aurait été battu par une liste unitaire est élu
LE LUC droite et gauche, incapables d'un front républicain, le FN est élu
COGOLIN le FN gagne à la loyale
BEAUCAIRE le FN est élu dans une quadrangulaire mais serait largement battu dans une union DVD
LE PONTET l'UMP et le candidat DVD ensemble surpassent nettement le candidat FN qui est pourtant élu
VILLERS_COTERET Les deux candidats DVD surpassent très largement le candidat FN qui est pourtant élu
HAYANGE la quadrangulaire profite au FN mais si les deux candidats DVD s'étaient unis, ils le battaient. Si un front républicain avec PS avait eu lieu, ils l'écrasaient
MANTES-LA-VILLE les candidats PS et DVG pouvaient écraser le candidat FN mais ne l'ont pas fait
CAMARET-SUR-AIGUES un front républicain aurait écrasé le FN
BOLLENE Le FN gagne à la loyale

Sur ces 10 villes, 8 victoires du FN étaient totalement évitables, elles n'arrivent que par la connerie de nos politiciens. La victoire du FN en nombre de villes n'est pas une victoire du FN, c'est d'abord une défaite des partis républicains ensemble. Lamentable.

Saturday 29 March 2014

SNCF : Savoir te Niquer Comme un Fou

Si cette information est confirmée, c'est un scandale d'une magnitude rarement atteinte dans cette catégorie de mon blog, la catégorie Franchouillardises. La SNCF aurait verbalisé un ado traversant la gare de Reims au nom d'un décret datant de Vichy et interdisant « à toute personne de faire usage sur les quais des gares d'appareils ou instruments sonores » parce qu'il portait autour du cou des écouteurs.

Je crois qu'il serait utile, si vous lisez le présent article, que vous relayiez cette information sur votre propre blog, sur twitter, où vous voulez. Il faut faire plier la SNCF, qui est en l'occurence d'une débilité confondante, se retranchant derrière un décret tombé en désuétude sociale évidente et datant des heures les plus sombres de notre pays.

Honte, honte absolue sur la SNCF.

MISE A JOUR : un des comptes twitter de la SNCF a publié une information complémentaire. Si cela est vrai, le gamin a cherché les emmerdes et ce qui précède est nul et non avenu. En cas de confirmation, cet article de blog sera intégralement mis à jour puis supprimé peu de temps après.

Thursday 27 March 2014

A moron...

The kind of things I have received because I have expressed support to Brendan Eich. The moron who sent me that does not know - of course - and does not care about - of course - I have always been in favor of same-sex marriage, most french readers of this blog can probably testify on it.

insult received by email

I am here writing directly to the neuronless imbecile (IP address  who sent me the above. You and the exact words you are using, the methods you are using, these are exactly the reasons why I did send my support to Brendan. In a democracy, fighting for a cause cannot - I repeat it cannot - mean launching ad hominem attacks. Ad hominem attacks can be tolerated if and only if the attacked people are using illegal means to promote their opinions or if their opinion is illegal. For instance when fighting against extreme-right because extreme-right uses the weaknesses of democracy to kill democracy.

Intimidation, insults, ad hominem attacks always decrease the legitimity of a cause. Imbeciles do it too, but they won't understand it. Let's call that an excuse.

Après le rapport de Tariq Krim

J'ai eu hier une longue conversation téléphonique avec Tariq. Nous avons constaté que nous avons, à quelques années d'écart, des parcours similaires, des souvenirs identiques et surtout que nous sommes en phase quasi-complète sur notre évaluation de l'état de l'industrie du Logiciel en France et de ce qui la bloque.

Nous sommes aussi d'accord sur un point majeur : son rapport va dans le bon sens et soulève les bons problèmes.

Je pense qu'il faut donner une suite à ce rapport, et que le seul moyen de le faire est le suivant : il faut écrire un second rapport, plus fourni, plus orienté vers l'action, détaillant par exemple 10 points essentiels à changer ou faire et les moyens de le faire. Ce nouveau rapport ne doit pas juste soulever des questions, il doit absolument fournir des solutions.

Je vais m'atteler prochaînement à la rédaction d'un tel rapport et j'espère bien que nous pourrons être plusieurs à le co-signer. L'idée est de le soumettre après son achèvement comme une pétition en ligne, que tous les acteurs de l'industrie du Logiciel en France pourront signer. Je vais consacrer du temps bénévole à cette action, comme je peux, quand je peux. A dirty job but someone has to do it.

Il est grand temps de faire quelque chose, je n'en peux plus de voir nos cerveaux quitter le pays ou végéter dans des boulots de production alors qu'ils pourraient, en R&D, créer de la valeur en France par la naissance d'un véritable écosystème Logiciel de très, très haut niveau.

Suivez ce blog, tout se fera ici. Souhaitez-moi bon courage ?-)

Wednesday 26 March 2014

Le rapport de Tariq Krim #2

Maintenant que le rapport de Tariq est public, j'ai enfin pu le lire. Voici donc mes commentaires:

Les talents français du code

Les absents sont bien plus nombreux que les présents dans cette liste. Il aurait fallu dire par exemple que les experts français du jeu ou de l'imagerie sont légions et qu'ils sont excellents. Que souvent ils sont aux USA pas parce qu'on ne les valorise pas ici mais parce qu'il n'y pas d'entreprise embauchant dans leur secteur ici. Il aurait fallu aussi lister les opportunités ratées, le peu de crédit que l'on accorde aux technologues, qu'on flanque de décisionnaires souvent incompétents qui considèrent que l'Ingénieur est une feuille de l'arbre. « La feuille, ça tombe, la branche ça reste » ai-je entendu trop souvent.

Ces développeurs français qui ont marqué...

Bon. Même commentaire. Cette partie me gêne un peu et pas seulement parce que j'y suis listé. Merci pour la citation mais il manque tellement de gens extraordinaires dans cette liste qu'elle est un peu à double emploi...

Tirer parti des talents français du code

Je suis entièrement d'accord avec Tariq sur plusieurs points :

  1. le tropisme persistant en faveur des Grands Groupes est une vraie réalité. Il faut, pour une fois, écouter Raffarin quand il parle du tissu PME.
  2. la France manque cruellement de startups "disruptive". Oui. Faut dire qu'on ne dit même pas aux étudiants ayant écrit un bô projet qu'ils devraient se lancer... La technologie est totalement dévalorisée dans notre pays, c'est la Finance, le Droit, les Sciences Politiques et la Médecine qui ont l'image du talent.

Je trouve les autres assez capillotractés.


Prendre en compte le rôle essentiel des développeurs
Certes. Mais je ne vois aucune recommandation d'action. Comment ? Qui ? Quand ? Où ?
Une feuille de route technologique...
Je n'y crois pas du tout.
Un github français
Je n'y crois pas plus...
Promouvoir les développeurs dans l'Administration
Oui, je suis d'accord. Cependant, cela me semble impossible dans l'état actuel des finances de la France.
Adapter les conditions d'investissement.
Oui, totalement d'accord. Voir ci-dessous.
Formation des développeurs
Non. Le problème n'est pas la formation technique. Le problème est la formation à l'entreprenariat, lamentable voire absente. Il faut inciter les développeurs à se lancer, leur montrer la voie, leur faire créer de la valeur et de l'emploi. Ce n'est qu'en créant l'écosystème au complet qu'on y arrivera.
Un visa de travail pour les développeurs étrangers
Alors là j'ai pouffé. Il n'y a déjà pas beaucoup de boulots techniques passionnants pour les geeks français alors accueillir des étrangers... Quant aux entrepreneurs étrangers du Logiciel, tout notre système ne peut aujourd'hui que les faire fuir. Une catastrophe.

J'aurais voulu voir développés les axes suivants :

  1. réformer la convention Syntec et enfin avoir une double chaîne hiérarchique, l'une technique jusqu'au CTO et l'autre managériale jusqu'au COO, dans Syntec
  2. mieux valoriser les projets estudiantins en les accompagnant vers l'industrialisation, j'en ai déjà souvent parlé ici
  3. bien mieux favoriser l'investissement direct des contributions ISF dans les JEI. Quand je dis "direct", c'est-à-dire que le contribuable prend directement des parts d'entreprise pour le montant ISF et à payer et fournit à l'administration fiscale la preuve de son investissement. Pas de passage par des FCPI.

Voilà. En hopant que ça helpe.

Mise à jour : j'oubliais un point important : et il faut arrêter de considérer que les SSII font de la technologie... Elles vendent de la viande et rares sont celles qui ne livrent pas de la merde.

Tuesday 25 March 2014

Mood of the day

Throwing up. The Web is so full of stinking shit this morning.

Le rapport de Tariq Krim

À mon immense surprise (c'est Thierry Stoehr qui m'a prévenu), je me retrouve dans la « Liste d'une centaine de développeurs marquants » (à la page 175) que Tariq Krim a du remettre avec son rapport à Fleur Pellerin, la ci-devant Ministre déléguée aux PME, à l'Innovation et à l'Économie numérique. Sincèrement, je suis flatté et c'est tout à fait inattendu. Je suis juste un petit bout'd'mec tombé enfant dans la babasse, qui adore ça, et qui tente de faire bien ce qu'il fait. Le reste est venu comme un effet de bord, dirons-nous. Bon j'ai aussi la joie d'y retrouver des potes, dont le bon Ludovic Dubost et le toujours étonnant Paul Rouget, l'incroyable Bortzmeyer, y revoir la bonne frimousse d'un Wolfhugel (que le temps passe Christophe, mais que le temps passe...), le délicieux Patrick Chanezon, l'ineffable Samuel Tardieu, les excellents Christophe Massiot, Maurice Svay, Stéfane Fermigier, Hadrien Gardeur, Sébastien Tricaud (long time no see Sébastien !).

Merci Tariq. Je note que tu n'es pas rancunier - ou en tous cas pas trop - ce qui fait plaisir. La prochaine bière est pour moi.

Welcome Brendan!

I could not be happier to see Brendan Eich become the new CEO of Mozilla :-)

Brendan has a vision, a unique vision that made Mozilla what it is today, and he is a great leader, respected all over the world, all over our geek's world. Reliable, hyper-smart, friendly and knowing perfectly - of course - the organization he co-founded.

But there is one thing I would like to come back to, because I read something too disruptive to me on planet.mozilla.org: yes, Brendan donated to the anti-marriage equality Prop. 8 campaign in California. I don't like, I don't like at all seeing that pop up again in public space because that's pointing an index at someone for his/her beliefs, that's something that should not happen in a community like ours. When Brendan was under attack, two years ago, I sent him my support. Not a support to his opinion, but a support to his freedom of opinion and freedom of expression of that opinion through all legal means. Including a donation.

Seen from Europe with a European point of view, I do not understand how one can complain about it. Mozilla promotes openness and freedom of choice, that's its Manifesto, that's our core values, why most of us contribute to Mozilla. I want that openness and freedom of choice to be a deep, anchored value of the whole Mozilla community. With that in mind, I entirely respect Brendan's personal choice, that was exposed only because of the Californian law and was attached to the name of Mozilla only because that law makes it mandatory to mention the affiliation of the donator above a given level of donation IIRC. I trust - we all trust - Brendan to be able to deal with the whole community - employees or contributors - equally, whatever their own beliefs or personal choices. I met Brendan 14 years ago and have never seen him behave in a different way.

The Mozilla community at large represents quite well the diversity of thoughts on the globe. We have people who love fire weapons; I don't like it but that's legal in their countries. We have people supporting death penalty; I hate it but that's legal in their countries. We have people from all political sides, including extremes; I don't understand it but I accept it. We have people based in countries one could easily qualify as antidemocratic and who support their regime; yes, diversity is a marker of the human kind. And we have people who have diverging opinions about major societal issues, within the limits of the law, absolutely. We even have true nerds, barely social, who can't understand what's a private and family life. So what? Again, seen from Europe and with a European point of view, not a problem at all.

Pointing an index at someone of our community for his/her beliefs can only have one side-effect: people will stop expressing their opinions because they will be afraid of the kickback, people will be blamed in public for legal behaviours and that's totally unacceptable to me as a European. That's not the world I want to live in, that's not my concept of democracy and freedom of opinion/speech. That's not the Mozilla I want. Brendan, I value your opinion, and that does not say anything about my agreement or disagreement with your opinion itself.

We, as a community, cannot promote openness and freedom of choice without a deep respect for individual beliefs. A reminder of Brendan's personal choices years ago is unfair and violates too much for me the core values of the Mozilla community. I am writing this article because I want it to be the very last time we read about it in public space. FWIW, and given the long chats we had about it in Europe two years ago, I think the above is a quite widely shared opinion in the European Mozilla community.

Welcome Brendan, and long life to Moz.

Update: following a private message, I want to say that, yes, I carefully read the message that triggered my response above. My take is that even in a positive message about Brendan, reminding the Prop8 story is putting, again, an index at him. And I feel it is just totally wrong because his opinion is not less respectable than others.

Update again: I did not intend to let the comments open here, my bad. What I feared did happen: hate messages. Closing comments then. My blog, my prerogative, and the French law makes me accountable for all comments on this blog. Period. Sorry for the people who left polite messages, agreeing or disagreeing; I hope you understand.

Thursday 20 March 2014

Samsung Web Tech Talk on JavaScript trends

SRA-SV LogoSamsung Research America will host a meetup about JavaScript trends in its San Jose R&D center on the 7th of april. This is a free event and anyone can attend.

Date: 07-apr-2014
Time: 5pm - 8pm
Location: 95 Plumeria Drive, San Jose, CA


  • 4:30pm - 5:00pm Welcome
  • 5:00pm - 5:30pm "Web Technologies on Mobile - Opportunities and Challenges", Andreas Gal, VP Mobile at Mozilla
  • 5:35pm - 6:00pm "Supersonic JavaScript", Ariya Hidayat, Shape Security
  • 6:20pm - 6:45pm "JavaScript in the Small", Satish Chandra, Samsung
  • 6:45pm - 8:00pm Open Discussion
  • 8:00pm - 9:00pm Networking

Feel free to attend using the link at the top of this article!

Wednesday 19 March 2014

A better CSS OM for parsed values

A large part of the current CSS Object Model sucks. More specifically, the CSSValue, CSSPrimitiveValue, CSSValueList, RGBColor, Rect and Counter interfaces are so poorly designed they're not implemented. I just tried to implement them for a project of mine and I must say the model is so weak and incoherent it cannot be implemented as is.

I have then tried to refine what's in the 2000-nov-13 spec of DOM Level 2 Style to reach something workable. I am NOT saying this has to be done or implemented. Call it a mental exercise I did just for fun, w/o caring about performance.

Let's first look at what's wrong:

Interface CSSValue

      interface CSSValue {
        // UnitTypes
        const unsigned short      CSS_INHERIT                    = 0;
        const unsigned short      CSS_PRIMITIVE_VALUE            = 1;
        const unsigned short      CSS_VALUE_LIST                 = 2;
        const unsigned short      CSS_CUSTOM                     = 3;
                 attribute DOMString        cssText;
                                              // raises(DOMException) on setting
        readonly attribute unsigned short   cssValueType;

"inherit" is here considered as a special identifier despite of the fact a CSSPrimitiveValue can be a CSS_IDENT. There is no UnitType for "initial". A CSS_CUSTOM is, according to the spec, a "custom value"; but a custom value still has to be valid per CSS syntax so it should be representable with CSS_VALUE_LISTs and CSS_VALUEs.

Interface CSSValueList

interface CSSValueList : CSSValue {
  readonly attribute unsigned long    length;
  CSSValue           item(in unsigned long index);

All in all, this one is simple and should be quite ok. But one thing is missing: a property can accept a comma-separated list of whitespace-separated values. The current CSSValueList cannot express if the serialization of a CSSValueList should be whitespace- or comma-separated.

Interface CSSPrimitiveValue

interface CSSPrimitiveValue : CSSValue {

  // UnitTypes
  const unsigned short      CSS_UNKNOWN                    = 0;
  const unsigned short      CSS_NUMBER                     = 1;
  const unsigned short      CSS_PERCENTAGE                 = 2;
  const unsigned short      CSS_EMS                        = 3;
  const unsigned short      CSS_EXS                        = 4;
  const unsigned short      CSS_PX                         = 5;
  const unsigned short      CSS_CM                         = 6;
  const unsigned short      CSS_MM                         = 7;
  const unsigned short      CSS_IN                         = 8;
  const unsigned short      CSS_PT                         = 9;
  const unsigned short      CSS_PC                         = 10;
  const unsigned short      CSS_DEG                        = 11;
  const unsigned short      CSS_RAD                        = 12;
  const unsigned short      CSS_GRAD                       = 13;
  const unsigned short      CSS_MS                         = 14;
  const unsigned short      CSS_S                          = 15;
  const unsigned short      CSS_HZ                         = 16;
  const unsigned short      CSS_KHZ                        = 17;
  const unsigned short      CSS_DIMENSION                  = 18;
  const unsigned short      CSS_STRING                     = 19;
  const unsigned short      CSS_URI                        = 20;
  const unsigned short      CSS_IDENT                      = 21;
  const unsigned short      CSS_ATTR                       = 22;
  const unsigned short      CSS_COUNTER                    = 23;
  const unsigned short      CSS_RECT                       = 24;
  const unsigned short      CSS_RGBCOLOR                   = 25;

  readonly attribute unsigned short   primitiveType;
  void               setFloatValue(in unsigned short unitType, 
                                   in float floatValue)
  float              getFloatValue(in unsigned short unitType)
  void               setStringValue(in unsigned short stringType, 
                                    in DOMString stringValue)
  DOMString          getStringValue()
  Counter            getCounterValue()
  Rect               getRectValue()
  RGBColor           getRGBColorValue()

This is so completely crazy I don't know where to start...

  • CSS_UNKNOWN is supposed to represent a "value that is not a recognized CSS2 value". Then it should be thrown away by the parser as invalid and never reach the OM, right?
  • the list of units is long and not easily extensible
  • attr(), counter(), counters(), rect() and the more recent gradients or var() calls are all functions; adding a new setter and a new getter for each new type is overkill
  • attr() was extended by recent specs and can now take more than one argument. The above does not allow to individually modify those arguments.
  • "initial" and "inherit" are, as I already said above, covered by both CSSValue and CSS_IDENT here
  • let's suppose we have a CSSValue that is a CSSPrimitiveValue. Setting its cssText to "10px 10px" will then trigger an exception since a CSSPrimitiveValue cannot transmute magically into a CSSValueList...
  • I love how the spec prose says setStringValue() has "No Parameters"...

Interface Rect

interface Rect {
  readonly attribute CSSPrimitiveValue  top;
  readonly attribute CSSPrimitiveValue  right;
  readonly attribute CSSPrimitiveValue  bottom;
  readonly attribute CSSPrimitiveValue  left;

This looks and smells like a CSSValueList far too much.

Interface RGBColor

interface RGBColor {
  readonly attribute CSSPrimitiveValue  red;
  readonly attribute CSSPrimitiveValue  green;
  readonly attribute CSSPrimitiveValue  blue;

This cannot represent rgba(), hsl() and hsla() colors. We also have to use three CSSPrimitiveValue for the three color components because they can be a percentage or an integer...

Interface Counter

interface Counter {
  readonly attribute DOMString        identifier;
  readonly attribute DOMString        listStyle;
  readonly attribute DOMString        separator;

Again, something is missing here: nothing says if it's supposed to be a counter() or a counters() value. And no, the separator could not do the trick since it can be the empty string.


To have a better OM for Values, i.e. an extensible OM that allows an application to deal with parsed values of all kinds, we need to change of perspective. First, the list of reserved idents, the list of units and the list of functions are not extensible. Secondly, we have cast issues between PrimitiveValues and ValueLists and we need a single interface. We can deal with all the issues with a single CSSValue interface:

New interface CSSValue

interface CSSValue {

  // ValueTypes
  const unsigned short      CSS_SYMBOL                     = 0;
  const unsigned short      CSS_NUMBER                     = 1;
  const unsigned short      CSS_UNIT                       = 2;
  const unsigned short      CSS_STRING                     = 3;
  const unsigned short      CSS_URI                        = 4;
  const unsigned short      CSS_IDENT                      = 5;
const unsigned short CSS_VALUE_LIST = 6; readonly attribute unsigned short type; attribute boolean commaSeparated;
readonly attribute unsigned long length;
CSSValue item(in unsigned long index);

void setFloatValue(in float floatValue) raises(DOMException); float getFloatValue() raises(DOMException);
void setStringValue(in DOMString stringValue) raises(DOMException); DOMString getStringValue() raises(DOMException); };

Definition group ValueTypes

An integer indicating the type of the Value

The value is a single character than cannot be interpreted otherwise. For instance the / character in the font shorthand property. The value can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a simple number. The value can be obtained by using the getFloatValue() method and set through by setFloatValue() method.
The value is a number followed by a unit. The number part of the value can be obtained by using the getFloatValue() method and set through by setFloatValue() method. The unit part of the value can be obtained by using the getUnit() method and set through by setUnit() method
The value is a string. The value can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a URI. The parameter of the url() function can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a CSS identifier. The value can be obtained by the getStringValue() and set by the setStringValue() method.
The value is a list of values or a function. It is a function if the getStringValue() method does not reply the empty string. The list of values is whitespace-separated if the commaSeparated attribute is false and comma-separated otherwise.


type of type unsigned short, readonly
The type of the value as defined by the constants specified above.
commaSeparated of type boolean
The separation type of the list of values. Meaningful only if the type attribute is CSS_VALUE_LIST. The list is whitespace-separated if the attribute is false and comma-separated otherwise.
length of type unsigned long, readonly
The number of CSSValue in the list. The range of valid values of the indices is 0 to length-1 inclusive.
INVALID_ACCESS_ERR: Raised if the CSS value is a not a CSS_VALUE_LIST.


Retrieves the value of a CSS_NUMBER or the number part of the value of a CSS_UNIT. If this CSS value is not a CSS_NUMBER or a CSS_UNIT, a DOMException is raised.
Return Value
float The float value of this CSS_NUMBER or CSS_UNIT
INVALID_ACCESS_ERR: Raised if the CSS value isn't a CSS_NUMBER nor a CSS_UNIT.
For a CSS_SYMBOL, retrieves the single character used as a symbol.
For a CSS_STRING, retrieves the string. Enclosing quotes or double-quotes are NOT included.
For a CSS_UNIT, retrieves the unit of the value.
For a CSS_URI, retrieves the argument of the url(...) notation. Enclosing quotes or double-quotes are NOT includedt.
For a CSS_IDENT, retrieves the identifier.
For a CSS_VALUE_LIST and if that list of values is passed as the parameters of a function, retrieves the function name. Retrieves the empty string otherwise.
For a CSS_NUMBER and CSS_UNIT, a DOMException is raised.
No Parameters
Return Value
DOMString The float value of this CSS_NUMBER or CSS_UNIT
INVALID_ACCESS_ERR: Raised if the CSS value is a CSS_NUMBER or a CSS_UNIT.
For a CSS_VALUE_LIST, Used to retrieve a CSSValue by ordinal index. The order in this collection represents the order of thevalues in the CSS style property. If index is greater than or equal to the number of values in the list, this returnsnull.
For all other value types, a DOMException is raised.
index of type unsigned long: index into the collection.
Return value
CSSValue The CSSValue at the index position in the CSSValueList, or null if that is not a valid index.
INVALID_ACCESS_ERR: Raised if the CSS value is a not a CSS_VALUE_LIST.
Sets the value of a CSS_NUMBER or the number part of the value of a CSS_UNIT. If this CSS value is not a CSS_NUMBER or a CSS_UNIT, a DOMException is raised.
floatValue of type float;
No Return Value
INVALID_ACCESS_ERR: Raised if the CSS value isn't a CSS_NUMBER nor a CSS_UNIT or if the attached property doesn't support the float value or the unit type.
NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.
For a CSS_SYMBOL, sets the single character used as a symbol.
For a CSS_STRING, sets the string.
For a CSS_UNIT, sets the unit of the value.
For a CSS_URI, sets the argument of the url(...) notation.
For a CSS_IDENT, sets the identifier.
For a CSS_VALUE_LIST and if the parameter is not the empty string, make the list of values become a function and sets the function name. Make the list become a plain list of values if the parameter is the empty string.
For a CSS_NUMBER and CSS_UNIT, a DOMException is raised.
stringValue of type DOMString
No Return Value
INVALID_ACCESS_ERR: Raised if the CSS value is a CSS_NUMBER or a CSS_UNIT, if the type of the value is CSS_SYMBOL and the string can be parsed as an other type of value, if the type of the value is CSS_UNIT and the string is not a valid CSS unit, if the type of the value is CSS_URI and the string is not a valid URI, if the type of the value is CSS_IDENT and the string is not a valid CSS identifier, if the type of the value is CSS_VALUE_LIST and the string is not a valid CSS identifier or the empty string.
NO_MODIFICATION_ALLOWED_ERR: Raised if this property is readonly.


The above should be enough to describe any CSS value, specified or computed. The model will become a bit complex for complex values but it ensures any web application can have access to parsed values, deal with their types and modify them. Let's take an example:

background-image: linear-gradient(to bottom, yellow 0%, blue 100%), url(foo.png);

This will result in the following OM (click on the image to enlarge it):

OM example

Again, I'm not saying the above is the thing to do or implement. It can certainly be improved, for instance for colors. A totally different perspective is also perfectly possible. I am only saying that making a better CSS OM allowing a full representation of parsed values in stylesheets and computed values is feasible. I hope the CSS OM will offer such power in the future.

UPDATE: the new CSSValue interface above lacks one thing, the ubiquitous cssText for parsing and serialization. Sorry for that.

- page 2 of 282 -