Shared posts

06 Feb 22:49

La grande liste de "vilaines chaînes de caractères" (Naughty Strings)

by Camille Roux

The Big List of Naughty Strings est une liste de chaînes de caractères qui ont une grande probabilité de causer des erreurs lorsqu’elles sont utilisées comme des entrées utilisateur.


Commentaires
L'article La grande liste de "vilaines chaînes de caractères" (Naughty Strings) a été posté dans la catégorie Développement de Human Coders News
06 Feb 22:44

Maman, Papa, je suis développeur front-end et voilà ce que ça veut dire

by Matthieu Segret

Mes parents n’ont aucune idée de ce que je fais. On s’amuse souvent de cette réplique. C’est une façon de dire qu’on se sent incompris, que le métier qu’on exerce est complexe et que peu de gens peuvent en parler clairement. Mais je crois qu’on est avant tout coupable de s’en sentir valorisé.

1*4b8bqwarttnzj vnlkrapa
Commentaires
L'article Maman, Papa, je suis développeur front-end et voilà ce que ça veut dire a été posté dans la catégorie Développement de Human Coders News
27 Jan 22:46

Telescopes: Refractor vs Reflector

On the other hand, the refractor's limited light-gathering means it's unable to make out shadow people or the dark god Chernabog.
25 Jan 08:06

If you don’t trust your employees to work remotely, you shouldn’t have hired them in the first place

by /u/speckz
23 Jan 18:02

Audiences : Franceinfo en passe de remporter son pari risqué

by Yoann Ferret
En se transformant en Franceinfo, la vénérable France Info est devenue tout à la fois radio, chaîne de télévision et média d'informations numérique.
20 Jan 12:54

The trouble with online porn: it’s impossible to block

by Danny Bradbury
Finding ways to restrict access to harmful material while respecting the right of adults to watch consensual porn is proving more difficult than politicians around the world would like
20 Jan 12:40

Scrum Rituals: Sprint Demo

by M. David Green

The following is an extract from our book, Scrum: Novice to Ninja, written by M. David Green. Copies are sold in stores worldwide, or you can buy it in ebook form here. At the end of the sprint, everything that was worked on for the current sprint is demonstrated for the team, the product owner, […]

Continue reading %Scrum Rituals: Sprint Demo%

20 Jan 07:48

Vos selfies en mode « peace » sont dangereux pour votre sécurité

by Elodie
Inherent ViceSelon un professeur japonais, effectuer le V de victoire ou symbolisant la paix pourrait vous attirer de sérieux ennuis. Des […]
19 Jan 07:21

Who Dies: You Decide in Self-Driving Car Survey

by JLister

MIT researchers want you to decide how self-driving cars should make moral decisions. It’s a modern – and potentially real – twist on a classic hypothetical ethics problem.

The trolley problem, in its most simplest form, asks you to imagine you are driving a train and find you are about to hit five people who are on the track ahead. There’s no time to stop the train or for the people to get out of the way, but you could divert it onto another track where you spot one person in the way.

The question is whether you divert and, at its simplest, the choice is between the more rational decision of minimizing the casualties by diverting and the more philosophical view that actively choosing to divert makes you responsible for killing the one person whereas staying on track means the five deaths are nobody’s fault. Variants include making the one person a relative or friend of yours.

In normal car driving, people occasionally have to make similar decisions when a crash is imminent and, for the most part, it’s accepted this is just down to the individual to respond. However, with self-driving technology now a reality, philosophers, lawmakers and manufacturers alike are weighing up if and how cars should be programmed to make such moral decisions.

The MIT project, Moral Machine, asks participants to explore such dilemmas and say which decision they’d like to see the car make. One example involves a decision of whether to continue down a road and hit five pedestrians, or swerve and hit a bollard, killing two passengers in the car.

After making the decision, you can check how other people responded. You can even create your own scenarios.

The post Who Dies: You Decide in Self-Driving Car Survey appeared first on Geeks are Sexy Technology News.

18 Jan 23:26

Comment effacer vraiment un disque dur avant de le revendre ou le donner ?

by Korben

Vous le savez surement, un simple formatage ne suffit pas pour vraiment supprimer les données présentes sur un disque dur ou une clé USB. Il est toujours possible de les récupérer comme je l'expliquais la dernière fois.

Heureusement, il existe des tas de logiciels (comme wipe ou dban), certains payants, qui permettent de supprimer VRAIMENT les données présentes sur un disque dur. En effet, si vous voulez donner ou revendre un disque dur, voire le balancer dans une déchèterie, autant être sûr qu'un petit malin ne puisse pas récupérer de données dessus.

Aujourd'hui, je ne vais pas parler d'un logiciel qui permet d'effacer un disque dur de manière sécurisée, mais on va plutôt revenir aux basiques avec la fameuse commande "dd". En effet, avec dd on peut faire des images disque, copier de la donnée, mais on peut aussi supprimer de manière efficace, les données qui se trouvent sur un disque dur (ou une clé USB ou une carte mémoire...etc).

La première étape consiste à trouver le chemin qui pointe vers le disque sur que vous voulez nettoyer. Un petit "fdisk -l" sous Linux ou "diskutil -list" sous Mac vous permettra de localiser ce disque. Voici celui qui m'intéresse :

Il s'agit d'un disque de 500 Gb dont je veux me débarrasser. La commande d'effacement qu'on retrouve partout et qui est la plus rapide consiste à remplir le disque dur avec des 0. Pour cela, ouvrez un terminal et lancez la commande suivante en prenant bien soin de remplace X par le numéro de votre disque. Attention, il n'y a pas de garde fou pour cette commande, donc soyez sûr de votre coup, car un accident (effacer par erreur le mauvais disque) est vite arrivé.

sudo dd if=/dev/zero of=/dev/diskX

Toutefois, écrire uniquement des zéros, ce n'est pas suffisant, car en utilisant des techniques de récupération avancées, il est encore possible de récupérer des données d'une ancienne vie du disque.

Alors que faire ? Et bien, la même chose, mais en utilisant /dev/random qui écrira des données totalement aléatoires sur le disque.

sudo dd if=/dev/random of=/dev/diskX

Il n'y a plus qu'à patienter, car la procédure peut durer longtemps, surtout si votre disque est gros. Mais quand il s'agit de sécurité, on ne compte pas. D'ailleurs, pour voir l'avancement de la commande dd, faites un CTRL + T dans le terminal (sous macOS) ou un "sudo pv /dev/diskN" sous Linux pour voir les données qui sont écrites en random sur votre disque.

Au bout d'un moment, le disque sera rempli et l'opération sera terminée. Mais d'après les spécialistes, cela ne suffit pas être pour être certain que les données seront vraiment irrécupérables, il est recommandé de relancer cette commande 7 fois d'affilé.

Pour cela, vous pouvez faire un petit script (appelé dans mon exemple wipe.sh) avec la commande suivante :

#!/bin/bash

for n in `seq 7`; do dd if=/dev/urandom of=/dev/diskN ; done

Rendez ce fichier executable avec un

chmod +x wipe.sh

Puis lancez le avec sudo :

sudo ./wipe.sh

Et c'est parti pour 7 tours d'effacement !

Voilà pour les bases sur comment effacer proprement un disque dur. C'est long, mais on n'a rien sans rien. Autrement sous Linux, si la commande est disponible vous pouvez utiliser shred ou d'autres outils pour Windows et Mac OS.

Amusez-vous bien et surtout, attention à ce que vous effacez !

Cet article merveilleux et sans aucun égal intitulé : Comment effacer vraiment un disque dur avant de le revendre ou le donner ? ; a été publié sur Korben, le seul site qui t'aime plus fort que tes parents.

18 Jan 22:52

Utiliser un résolveur DNS public ?

Après la censure administrative en France via des DNS menteurs, puis une panne spectaculaire des résolveurs DNS d'Orange, au moins trois pannes analogues de ceux de Free, et enfin un détournement accidentel de Google et Wikipédia vers le Ministère de l'Intérieur, pas mal d'utilisat·eur·rice·s de l'Internet se demandent si on peut vraiment faire confiance au résolveur DNS de son FAI. Et beaucoup se mettent alors à utiliser un résolveur DNS public, le plus célèbre étant Google Public DNS. Mais est-ce une bonne idée ?

D'abord, recadrons un peu la terminologie. Le protocole DNS a deux sortes de serveurs, qui n'ont pas grand'chose à voir, les serveurs faisant autorité et les résolveurs. Confondre les deux (par exemple en parlant du vague « serveur DNS ») ne va pas aider l'utilisat·eur·rice à comprendre, et donc à faire des choix corrects. Les serveurs faisant autorité sont ceux qui connaissent les informations sur le contenu des domaines. Par exemple, ceux de l'AFNIC connaissent le contenu de .fr et ceux de CloudFlare, hébergeur utilisé par Next INpact, connaissent le contenu de nextinpact.com, par exemple l'adresse du site Web (104.25.248.21 et 104.25.249.21 aujourd'hui). Les résolveurs (on dit aussi serveurs récursifs, ou bien serveurs caches), eux, ne connaissent rien, à part l'adresse des serveurs de la racine, où ils commencent leurs interrogations. Les serveurs faisant autorité sont gérés par des hébergeurs DNS spécialisés (comme Dyn), ou bien directement par le titulaire du nom de domaine. Les résolveurs sont typiquement gérés par le service informatique du réseau où vous vous connectez, ou bien par le FAI, pour les accès grand public. Ces résolveurs sont une partie cruciale du service d'accès à l'Internet : sans DNS, il n'y a quasiment rien qui marche. S'ils sont en panne, plus d'Internet. S'ils mentent, on est détourné vers un mauvais site.

On voit depuis des années apparaître des résolveurs DNS publics, qui ne dépendent ni du FAI, ni du réseau local d'accès. Ce sont Google Public DNS, Cisco OpenDNS, FDN, OpenNIC, Verisign, Yandex, etc. Attention à ne pas confondre ces résolveurs publics avec ce qu'on nomme les résolveurs ouverts. Tous ont en commun qu'ils acceptent de répondre à des requêtes DNS, quelle que soit leur source. Mais les résolveurs ouverts le sont par accident, par erreur de configuration, et ne sont pas gérés. Les résolveurs publics, eux, le sont déliberement, ils sont (normalement...) gérés par des gens sérieux. La différence est importante car un résolveur ouvert est un outil utile dans de nombreuses attaques comme les attaques par amplification ou comme certains empoisonnements. C'est pour cette raison que le RFC 5358 demande que les résolveurs DNS ne soient pas ouverts.

Après ce long préambule, retour aux pannes de résolveurs DNS. Aujourd'hui, dès qu'un problème Internet survient, et quelle que soit la cause réelle du problème, la réponse fuse sur tous les rézosocios : « utilise Google DNS » (ou bien, version libriste, « utilise FDN »). Un exemple, pris au hasard lors de la dernière panne Free est ce tweet. (Et voici une documentation plus élaborée.)

Ce genre de conseils ne tient pas compte de plusieurs inconvénients sérieux des résolveurs publics. Je vais commencer par les inconvénients communs à tous les résolveurs publics. Le principal est que le lien entre vous et le résolveur public est long et non sécurisé. Même si vous avez une confiance aveugle dans le résolveur public et ceux qui le gèrent, sur le trajet, des tas de choses peuvent aller mal. D'abord, le trafic peut être écouté trivialement (les seuls résolveurs publics qui proposent une solution à ce problème sont Cisco OpenDNS et OpenNIC, avec DNSCrypt). Comme le rappelle le RFC 7626, le trafic DNS est très bavard (trop), circule en clair, passe par des réseaux supplémentaires (en plus du trafic « normal »), et peut donc poser des problèmes de vie privée. Avec un résolveur DNS habituel, le problème est limité car le résolveur est proche de vous, limitant le nombre de gens qui peuvent écouter. Avec un résolveur public, le nombre d'écoutants potentiels augmente.

Mais il y a pire : la plupart des résolveurs publics n'offre aucune authentification (là encore, la seule exception est Cisco OpenDNS et OpenNIC, mais où cette authentification est facultative, et je ne sais pas combien d'utilisateurs s'en servent réellement). Même les mesures les plus triviales comme le NSID du RFC 5001 ne sont pas mises en œuvre (NSID ne fait pas une réelle authentification, mais il permet de détecter certains problèmes). Si vous utilisez des résolveurs publics pour contourner la censure, c'est un sérieux problème. Des censeurs ont déjà effectué des détournements de résolveurs DNS public (comme en Turquie, mais aussi dans d'autres pays). Donc, même si le résolveur public est géré par des gens biens, et que vous connaissez, cela ne suffit pas, car vous n'avez aucun moyen de savoir si vous parlez bien à ce résolveur, et pas à un usurpateur (le DNS utilise UDP, qui n'offre aucune protection contre l'usurpation d'adresse).

Il est amusant (et révélateur du manque de connaissances sur le fonctionnement de l'Internet) que les débats sur les résolveurs ouverts se focalisent souvent sur la confiance que l'on peut accorder (ou pas) au serveur, et jamais sur celle qu'on peut accorder (ou pas) au réseau qui y mène !

Il y a aussi des inconvénients qui sont spécifiques à certains des résolveurs publics souvent recommandés :

  • Je soupçonne que certains ne sont pas si bien gérés que cela (normalement, ils doivent faire de la limitation de trafic, être supervisés 24 heures sur 24, etc) et peuvent être utilisés pour des attaques par réflexion, avec amplification,
  • Google, Cisco et Verisign sont situés aux États-Unis, pays qui n'a aucune protection des données personnelles, même théorique (argument bien développé chez Shaft),
  • Yandex est en Russie, si vous voulez donner vos informations au FSB plutôt qu'à la NSA,
  • OpenNIC est une racine alternative, ce qui veut dire qu'ils ajoutent des TLD « bidons », qui ne marcheront que chez eux,
  • Certains services sont peu fiables, souvent en panne, très lents, ou disparaissant sans laisser de nouvelles.

Alors, si utiliser les résolveurs publics est une mauvaise idée, quelle est la bonne ? Le mieux serait évidemment de pouvoir utiliser les résolveurs DNS de son FAI. Un résolveur DNS correct fait partie (ou devrait faire partie) de l'offre Internet de base. Les utilisateurs devraient réclamer un tel service, fiable et rapide. Les pannes récentes, ou bien les horreurs des résolveurs DNS des points d'accès Wi-Fi des hôtels et des aéroports, et enfin le problème de la censure étatique (qu'un service de qualité chez le FAI ne résoudra pas) font qu'il n'y a plus guère le choix, il faut utiliser d'autres résolveurs que ceux du FAI. La solution la plus propre est d'avoir son propre résolveur DNS, pas forcément sur chaque machine de son réseau local, mais plutôt dans une machine unique, typiquement le routeur d'accès. Avant qu'on ne me dise « mais ce n'est pas Michu-compatible, M. Michu ne vas quand même pas installer OpenBSD sur un Raspberry Pi pour avoir un résolveur sur son réseau », je dis tout de suite qu'évidemment, cela ne doit pas être fait directement par M. Michu mais une fois pour toutes dans un paquet logiciel et/ou matériel qu'il n'y a plus qu'à brancher. (Un truc du genre de la Brique Internet.)

Parfois, il est difficile ou peu pratique d'avoir son propre résolveur. En outre, un résolveur à soi sur le réseau local protège bien contre la censure, ou contre les pannes, mais peu contre la surveillance, puisqu'il va lui-même émettre des requêtes en clair aux serveurs faisant autorité. Il est donc utile d'avoir des résolveurs publics accessibles en DNS-sur-TLS (RFC 7858), ce qui protège la confidentialité et permet l'authentification du résolveur. Ces résolveurs publics (comme par exemple celui de LDN ou bien celui de Yeti) peuvent être utilisés directement, ou bien servir de relais pour le résolveur local. Attention, la plupart sont encore très expérimentaux. Vous trouverez une liste sur le portail DNS Privacy. (Pour la solution non normalisée DNScrypt, on trouve, outre le site Web officiel, la doc de malekalmorte ou bien celle-ci.)

Pour se prémunir contre la censure (mais pas contre les pannes, ni contre la surveillance), une autre technologie utile est DNSSEC. Le résolveur local doit donc valider avec DNSSEC. Notez que, malheureusement, peu de domaines sont signés.

La meilleure solution est donc un résolveur DNS validant avec DNSSEC et tournant sur une machine du réseau local (la « box » est l'endroit idéal). Cela assure un résolveur non-menteur et sécurisé. Si on veut en plus de la vie privée, il faut lui faire suivre les requêtes non-résolues à un résolveur public de confiance (donc pas Google ou Verisign) et accessible par un canal chiffré (DNS sur TLS).

Si votre box est fermée et ne permet pas ce genre de manips, remplacez-la par un engin ouvert, libre et tout ça, comme le Turris Omnia qui a par défaut un résolveur DNSSEC.

18 Jan 22:33

ExceptionPatterns Wiki

Known wiki pages dealing with exceptions or error handling in general
18 Jan 07:24

A radical plan to defeat poverty

If the state paid everyone an income it could reinvent our relationship to work
17 Jan 19:10

Try An Experiment With Photosynthesis

10 Jan 17:46

Wording debate : Is this my interface or yours?

Remember back in the day when Windows had a My Computer icon? It was a glorious little icon that represented all the stuff you had on your computer—all your programs, all your work, all the digital pieces of you.

In later versions of Windows, Microsoft changed the label of this icon to Computer, then changed it again to This PC. Did they change it because “my” was misleading? Inconsistent? Unnecessary?

This little change got me thinking about a bigger question: Why do products sometimes label things as my stuff, and sometimes label things as your stuff?

As you tap around from app to app, you’ll see that there’s no standard way to refer to the things that belong to you within an interface. Some say it’s my stuff. Some say it’s your stuff.

YouTube and Google Drive call it “my” stuff. Spotify and Amazon call it “your” stuff.

If you’re designing an interface, does it matter whether the words are written from the user’s point of view or the product’s point of view? I think there’s a subtle difference, and it all depends on how you want your users to feel while using your product.

By using “my” in an interface, it implies that the product is an extension of the user. It’s as if the product is labeling things on behalf of the user. “My” feels personal. It feels like you can customize and control it.

By that logic, “my” might be more appropriate when you want to emphasize privacy, personalization, or ownership. And maybe that’s why My Computer worked well years ago. Back then, a computer was almost always a single-player experience. People usually didn’t share files, and all their stuff felt safe inside that one little icon.

Mine. All mine.

By using “your” in an interface, it implies that the product is talking with you. It’s almost as if the product is your personal assistant, helping you get something done. “Here’s your music. Here are your orders.”

By that logic, “your” might be more appropriate when you want your product to sound conversational—like it’s walking you through some task. Whether it’s paying bills, scheduling an appointment, or filling out tax forms, many products help people do things faster, smarter, and more easily.

Nowadays, computers and apps are even taking on the persona of a personal assistant. They have names like Siri, Alexa, and Cortana. They help you take notes, remind you to buy milk, and read emails out loud to you.

Hey Siri, can you change my baby’s dirty diaper?

Many different apps, including Medium, give you recommendations. In my mind, I think of this like a personal assistant hand-picking stories for me to read today. I think this trend will only become more widespread, and we’ll probably see more and more apps using “your” instead of “my.”

As with most things in design, there’s no one-size-fits-all solution that works for every situation. But one thing that many products do nowadays is to just cut out words like “my” or “your” whenever labeling things that belong to the user.

No mention of “my” or “your” here.

And maybe this dropping of the “my” is the exact same approach that Windows took when it decided to change My Computer to Computer.

Unfortunately, cutting out “my” or “your” doesn’t work 100% of the time. Sometimes you really do need to differentiate the user’s stuff from someone else’s stuff. For example, in YouTube, you can’t just say “Channel,” because it’s not clear whether that’s referring to your channel, channels that you’ve subscribed to, or channels that YouTube is recommending to you.

Just using “Channel” won’t work in this context.

And maybe, just maybe, this is why Windows eventually changed Computer to This PC. It was because Computer was too ambiguous on its own, and they needed to clarify that they were referring to this computer.

Up until now, I’ve mainly been talking about the things that belong to you in an interface. That’s just a small fraction of the words that you’ll come across as a user. What about things like button labels, instructions, settings screens, and so on?

There are widely differing opinions on this, but here are the general guidelines I like to follow:

  • When to use me: Use I, me, my, or mine when the user is interacting with the product, like clicking a button or selecting a checkbox. But only add these words if you absolutely need to for clarity.
  • When to use you: Use you or your when your product is asking questions, giving instructions, or describing things to the user. Just imagine what a personal assistant might say.

Before I wrap up, I have to mention one more point of view that‘s pretty common out there: our point of view. This is when products use “we,” “our,” or “us” within the interface.

From Chase Bank’s homepage

By using “we,” “our,” or “us,” they’re actually adding a third participant into the mix — the people behind the product. It suggests that there are real human beings doing the work, not just some mindless machine.

If your product is selling people-powered services like cooking, designing, or cleaning, “we” adds a human touch. “We’re here to help.” “See our services.” Knowing that real humans are there, behind all those windows and boxes, can help the user feel a little more at ease.

On the other hand, if your product is an automated tool like Google’s search engine, “we” can feel misleading because there aren’t human beings processing your search. In fact, Google’s UI writing guidelines recommend not saying “we” for most things in their interface.

I wrote this story because I’ve seen this question come up time and time again from designers, developers, and writers. Why do we use “my” here? Why do we use “your” there? And yet, I’ve seen very little of this documented externally in style guides.

Do you have your own guidelines for dealing with perspective in an interface? If so, I’d love to hear your point of view.

10 Jan 17:42

La peste graphique: le cambert

Le camembert (ou pie chart, comme disent les anglo-saxons) est partout. Discutons un peu plus de ce graphique si fréquent et pourtant si peu utile.

Malheureusement, les camemberts sont omniprésents. Je me souviens avoir eu un soupir de soulagement en lisant The Functional Art (d’Alberto Cairo) il y a quelques années ; il y parlait de ce qu’il a appelé “the bubble plague”. Il parlait assez spécifiquement de l’utilisation des bulles et autres ronds pour présenter visuellement des comparaisons exactes et des quantités précises. Approche affreusement incorrecte, s’il en est.

Je mets l’utilisation abusive du camembert dans cette même catégorie de pestes graphiques. Ce n’est pas parce qu’Excel propose la possibilité de faire des camemberts à partir de tableaux qu’on doit tous s’y mettre (ou pire encore, vendre cette “visualisation” comme prestation ou service à valeur ajoutée).

Les camemberts et les bulles sont le Comic Sans de la visualisation. Voici en quelques mots pourquoi le camembert et les bulles, c’est mal. Et comment arrêter de (se) faire du mal.

Je vais vous la faire courte : quand on regarde une bulle (un cercle, quoi), ce qu’on voit, c’est une aire. Or, pour savoir quel cercle est plus grand qu’un autre, on cherche à comparer leurs rayons.

Ce n’est pas du tout la même chose. Une pizza pour une personne (pas trop affamée) ferait, disons, 10 cm de rayon, soit 20 cm de diamètre. Si vous avez vraiment faim, vous pouvez commander une pizza double. Selon votre pizzaïolo préféré, cette taille double peut s’exprimer soit en taille de la pizza (soit 20 cm de rayon ou 40 cm de diamètre et une patte fine), soit en épaisseur de la patte et une taille qui augmente à peine (disons, 12–13 cm de rayon). La taille diffère, mais vous serez toujours plus rassasié qu’avec la petite version.

Si je vous demande de comparer par contre, une pizza enfant avec 10 cm de rayon et votre pizza épaisse de 12–13 cm de rayon, vous pouvez très bien me dire qu’elles sont pareilles. Et comme on le sait, ce sera faux. Je vous laisse découvrir cette expérience très intéressante (et avec des données à l’appui) pour mieux appréhender pourquoi les bulles mentent et pourquoi il faudrait vraiment faire attention à l’utilisation qu’on en fait.

Je ne suis pas fan des arguments d’autorité. J’ai trouvé cependant qu’Edward Tufte le résume parfaitement :

(Les gens qui utilisent les camemberts méritent le même scepticisme que ceux qui confondent “its/it’s” [“sa/ça” par ex. en français], “there/their” [“là/la” par ex. en français]. Pour bien comparer [des valeurs], utiliser un petit tableau ou une phrase, non pas des camemberts.)

La chose la plus importante à retenir à propos des camemberts est qu’ils servent à représenter la relation d’une part avec son entier. Comme quand en école primaire, on apprend aux enfants qu’en coupant une pizza en 4, chaque part représente 1/4 de la totalité de la pizza. Et c’est à peu près là que s’arrête l’utilité immédiate d’un camembert : à vous dire que 25%, c’est 1/4 de quelque chose.

Fantastique, hein. Vous me direz que ce n’est pas si mal : les graphiques en barres n’ont pas cette propriété. C’est vrai. Et c’est pourquoi on ne les utilise pas pour visualiser (comprendre : représenter visuellement) la relation entre une part et son entier. Intelligent, hein.

Alors pourquoi utiliser les camemberts pour représenter visuellement des choses qu’ils ne peuvent pas représenter correctement ? C’est une vraie question, pas un troll. Parce que quand on fait le genre de représentation que celle ci-dessous, on utilise les camemberts à visualiser ce qu’ils ne sont pas censés pouvoir (en)coder visuellement de manière correcte :

Dites-moi : quel est le parti avec le nombre de représentants le plus élevé ?

… 30 secondes plus tard, vous l’aurez probablement deviné. Peut-être même en utilisant Wikipédia…

Vous allez me dire que j’aurais pu mettre les pourcentages (i.e., parti machin représente telle proportion du Parlement) comme légende à côté de chaque part du camembert. Comme ça :

OK. Mais là, vos regards continuent l’aller-retour entre le camembert et ses pourcentages, et la légende sur le côté qui vous donne la correspondance entre la couleur et le nom du parti. Alors, oui, on peut ajouter les noms des partis à côté des pourcentages en tant que légende de chaque part du camembert :

Mais attendez un peu. Qu’est-ce qu’on vient de faire ? Parce que le camembert initial était trop compliqué à lire — et donc ne permettait pas de remplir la fonction “comparaison précise et claire” ,—on a rajouté des informations. Du coup, ça sert à quoi, le camembert ? Il devient beaucoup plus compliqué et, somme toute, inutile. On peut se dire qu’ici, avec le peu de valeurs qu’on a, une représentation de type tableau ferait l’affaire (surtout ordonné par nombres de sièges décroissants).

Un tableau, c’est quand même vite dur à lire dès que ça dépasse les 6–7 lignes. Et si vous tenez à une visualisation, utilisez les graphes en barres :

Et vous savez quoi ? Vous avez essayé de faire cette comparaison dès le début. Autrement dit, vous avez tenté de comparer chaque portion du camembert à une autre, trouver laquelle est la plus grande, puis comparer une autre paire, etc. Ce qui donne découpage de camembert en morceaux, puis tentative (plus ou moins désespérée) de comparer chaque bout à un autre…

Alors… réfléchissez-y la prochaine fois que vous dégainez l’Excel. Et comme on voit aussi beaucoup ce genre d’erreurs dans le milieu professionnel, je vous recommande la lecture de ce billet de Pierre Paperon :

30 ans de vie professionnelle. 30 ans de micro-fatigues ou lassitudes à voir des présentations contenant des graphiques inappropriés pour exploiter ou présenter des données pourtant bien intéressantes. Et l’ère du big data ne fait qu’amplifier le pathétique de ces présentations de déferlantes de chiffres que les graphiques tentent tant bien que très mal de résumer. Mais là encore, “big cata” ou “big pasta” car les “basiques” sont ignorés.

P.S. Oh, et petit rappel : je dis Excel partout, mais je vous invite vivement à plutôt utiliser LibreOffice Calc, l’équivalent libre, ouvert et gratuit du tableur Microsoft. Satisfaction garantie, comme qu’y dirait. Le logiciel libre et open source, c’est le bien :-)

06 Jan 17:41

Savez-vous que vos données contenues dans la saisie automatique peuvent être hameçonnées ?

by mdestroy

Savez-vous que vos données contenues dans la saisie automatique peuvent être hammeçonnées ?

La saisie automatique est une fonctionnalité présente la plupart des navigateurs modernes. Elle permet de gagner du temps en remplissant automatiquement les formulaires parfois longs trouvés sur la Toile. Cette fonctionnalité plutôt pratique présente pourtant une grande faille.
Par ailleurs, un développeur en a fait une démonstration sur Github.

Imaginez, vous remplissez les champs nom et email d’un formulaire sur un site Web. Et ce site parvient tout de même à obtenir d’autres informations supplémentaires que vous n’avez pas insérées mais présentes dans la saisie automatique tels que votre numéro de téléphone, votre adresse postale ou votre carte de crédit.
L’image suivante présente le test.

Démo du browser autofill phishing

Sur la page, seuls les champs Name et Email sont visibles. Mais en réalité d’autres champs sont également présents mais cachés. Le navigateur ne fait aucune différence et les remplit également.

Les champs présents

En gros, la propriété CSS margin-left:-500px de par sa valeur négative se charge ici d’éloigner les autres champs de notre visuel.

Cette faille est présente chez Google Chrome, ainsi qu’avec tous les navigateurs basés sous Chromium, comme le montre l’image ci-dessous avec Yandex Browser.

Démo sur Yandex Browser

En 2012, ce bug avait été déjà été signalé, mais aucune solution ne semble avoir été trouvée.
Pour plus d’informations sur le code html, prière visiter la page du développeur sur Github.

Source: ghacks.net

mdestroy

The post Savez-vous que vos données contenues dans la saisie automatique peuvent être hameçonnées ? appeared first on Homputer Security.

29 Dec 23:33

12 doigts, c'est plus facile pour apprendre à compter

by Baruch Jacques-Olivier
12 est un nombre permettant davantage de progrès dans la compréhension des mathématiques que 10. Voici pour quelles raisons.
29 Dec 22:48

How to explain recursion and recursive functions to people by using paper & boxes

What is recursion and how to wrap your head around it? Learn about this powerful and very important concept in few minutes.

Free exercises, quizzes, videos and lots of additional materials, illustrations, references, etc. Learn JavaScript and the most important fundamentals of computer programming for free!

Learn more at https://en.hexlet.io/courses/intro_to...

29 Dec 22:31

Bolloré sauvera-t-il Autolib’ ?

Cinq ans après le lancement de la petite auto grise et électrique dans les rues de Paris et de sa proche banlieue, Autolib’ s’avère ruineux pour le groupe Bolloré qui voit fondre le nombre d’utilisateurs.
28 Dec 12:46

Airbnb à Berlin : « La fille nous a interdit de répondre à l’interphone »

by Jacques Pezet
Depuis la loi du 1er mai 2016, le nombre d'offres sur Airbnb a baissé et les propriétaires font preuve d'inventivité pour continuer à louer.
28 Dec 12:31

Artificial intelligence is going to make it easier than ever to fake images and video

A sample of Smile Vector’s work
Tom White

Smile Vector is a Twitter bot that can make any celebrity smile. It scrapes the web for pictures of faces, and then it morphs their expressions using a deep-learning-powered neural network. Its results aren’t perfect, but they’re created completely automatically, and it’s just a small hint of what’s to come as artificial intelligence opens a new world of image, audio, and video fakery. Imagine a version of Photoshop that can edit an image as easily as you can edit a Word document — will we ever trust our own eyes again?

“This will be a quantum step forward.”

“I definitely think that this will be a quantum step forward,” Tom White, the creator of Smile Vector, tells The Verge. “Not only in our ability to manipulate images but really their prevalence in our society.” White says he created his bot in order to be “provocative,” and to show people what’s happening with AI in this space. “I don’t think many people outside the machine learning community knew this was even possible,” says White, a lecturer in creative coding at Victoria University School of design. “You can imagine an Instagram-like filter that just says ‘more smile’ or ‘less smile,’ and suddenly that’s in everyone’s pocket and everyone can use it.”

Smile Vector is just the tip of the iceberg. It’s hard to give a comprehensive overview of all the work being done on multimedia manipulation in AI right now, but here are a few examples: creating 3D face models from a single 2D image; changing the facial expressions of a target on video in realtime using a human “puppet”; changing the light source and shadows in any picture; generating sound effects based on mute video; live-streaming the presidential debates but making Trump bald; “resurrecting” Joey from Friends using old clips; and so on. Individually, each of these examples is a curiosity; collectively, they add up to a whole lot more.

“The field is progressing extremely rapidly,” says Jeff Clune, an assistant professor of computer science at the University of Wyoming. “Jaw-dropping examples arrive in my inbox every month.” Clune’s own work isn’t about manipulating images, but generating them, whole cloth. His team at Wyoming began work on this in 2015 by adapting neural networks trained in object recognition. Inspired by research done on the human brain in 2005, they identified the neurons that lit up when faced with certain images, and taught the network to produce the images that maximized this stimulation.

In 2015, their networks were creating pictures like this:

 Jason Yosinski, Jeff Clune, Anh Nguyen, Thomas Fuchs, and Hod Lipson

In 2016, they’re creating pictures like this:

 Anh Nguyen, Jason Yosinski, Yoshua Bengio, Alexey Dosovitskiy, Jeff Clune

To create these images, the neural network is trained on a database of similar pictures. Then, once it’s absorbed enough images of ants, redshanks, and volcanoes it can produce its own versions on command — no instruction other than “show me a volcano” is needed. The two bottlenecks at the moment are image resolution (none of these pictures are bigger than 256 x 256) and finding the labeled pictures to train the networks with. “Our current limitation isn’t the capability of the models but the existence of data sets at higher resolution,” says Clune. “How long until we can produce full HD images that are photorealistic? It’s anyone’s guess, but it’s probably on the order of years, not decades.”

Style transfer went from research paper to top app in less than a year

Once these techniques have been perfected, they spread quickly. A good example is a method known as “style transfer” which uses neural networks to apply the characteristics of one image to another. A key paper on this subject was published in September 2015, with researchers turning this work into an open-source web app in January 2016. In June, a Russian startup finessed this code into a mobile app named Prisma, which allowed anyone to apply various art styles to pictures on their phones and share them in various social networks. The app exploded in popularity, and this November, Facebook unveiled its own version, adding a couple of new features along the way. From cutting-edge research to commercial product in less than a year; that’s how fast these tools can be adopted.

Clune says that in the future, AI-powered image generation will be useful in the creative industries. A furniture designer could use it as an “intuition pump,” he says, feeding a generative network a database of chairs, and then asking it to generate its own variants which the designer could perfect. Another use might be creating content for video games and virtual reality, which users could literally dictate in real time. Want dragons? Just ask for them. Want bigger dragons, with guns for arms and bright purple mohawks? Also fine. Researchers are already working on precursors to this type of interface. In the picture below, the images on the right were created based on the captions on the left, nothing more.

 Scott Reed, Zeynep Akata, Xinchen Yan, Lajanugen Logeswaran, Bernt Schiele, Honglak Lee

Another obvious beneficiary would be hoaxes. Consider the video below — a demonstration of a program called Face2Face, which essentially turns people into puppets, letting you map their facial expression to your own. The researchers demonstrate it using footage of Trump and Obama. Now combine that with prototype software recently unveiled by Adobe that lets you edit human speech (the company says it could be used for fixing voiceovers and dialog in films). Then you can create video footage of politicians, celebrities, saying, well, whatever you want them, too. Post your clip on any moderately popular Facebook page, and watch it spread around the internet.

That’s not to say these tools will steer society into some fact-less free-for-all. After all, the practice of retouching photos goes all the way back to the dark room, and the media has often been tricked into reporting fakes images as real. Anything from North Korean “missile launches” to pictures of Osama bin Laden’s “corpse” splashed on the pages of British tabloids. And the same can be done with video — see, for example, the 2015 Planned Parenthood scandal that relied on undercover footage that had been edited to support sensational and false claims.

However, we can’t deny that digital tools will allow more people to create these sorts of fakes. There’s nothing AI can do to an image or a video that a human expert couldn’t (given enough time), but once everyone can doctor a photo as easily as creating a Word document, it would be overly optimistic to claim there won’t be any side effects. AI-powered fakes and manipulations aren’t hard to spot now (blurring is one of the most common tells, as is low resolution and just plain “looking fake”), but researchers say they’re just going to get better and better.

What happens when everyone can doctor a photo as quickly and easily as a professional?

The proliferation of realistic fakes would be a boon to conspiracy theorists, and would contribute to the current climate of deteriorating confidence in journalism. Once people know there are fake images being circulated, it gives them reason to doubt real images they might not want to believe, for whatever reason. (See, for example, this 2012 blog of Hurricane Sandy photos, which not only verifies fakes, but also genuine images.) And if new software allows us to manipulate audio and video content as easily as images, it would undermine another pillar of “reliable” evidence.

AI researchers involved in this fields are already getting a firsthand experience of the coming media environment. “I currently exist in a world of reality vertigo,” says Clune. “People send me real images and I start to wonder if they look fake. And when they send me fake images I assume they’re real because the quality is so good. Increasingly, I think, we won’t know the difference between the real and the fake. It’s up to people to try and educate themselves.”

28 Dec 12:13

Why are strange baby names on the rise?

The shifts reveal surprising shifts in our attitudes
28 Dec 12:10

Combien coûte un service tiers gratuit ?

Vous auriez tort de croire que la réponse est à moitié dans le titre : n’importe quel script ou service externe que vous rajoutez à votre site va vous coûter quelque chose, qu’il soit gratuit ou pas.

Cet article et le suivant sur les pubs sont une transcription d’une conférence donnée à Blend Web Mix 2016. Cliquez ici si vous êtes plus audio que texte.

De quels coûts parle-t-on ?
Ma spécialité étant la performance frontend, j’ai dû m’attaquer au sujet pour des raisons techniques qui m’ont amené à constater que les dégradations en qualité et en performance perçue se traduisaient par un certain nombre de coûts cachés:

  1. des pertes sèches d’activité
  2. un manque à gagner dû au ralentissement du chargement ou au gel de l’interface
  3. une ouverture pour le piratage industriel
  4. une image de marque entamée.

Qui sont les tiers ici ?

  • Analytics, tracking
  • Boutons de partage, réseaux sociaux
  • Tests A/B
  • Widgets divers : cartes, commentaires, chats…

Et étant donnéées leurs spécificités, citons-les à part : les publicités, auxquelles j’ai dédié un article moins technique.

Passons en revue les problèmes et solutions.

1. Les 20 secondes page blanche

Dans le plus spectaculaire des cas, vous pourriez avoir un site qui n’affiche rien pendant plusieurs secondes.

20 secondes de page blanche, puis affichage du site

Veuillez patienter, nous allons prendre votre temps.

Pour rajouter un peu de sel sur la plaie, disons que c’est le grand patron qui découvre cela un samedi après-midi de vacances. On va alors se lancer dans une partie de Cluedo pour savoir qui a tué le site et les premiers suspects sont les administrateurs système.
Heureusement pour eux, ce sont également fréquemment les seuls à être suffisamment bien équipés en monitoring pour démontrer que les serveurs de la boîte vont bien. Dans le meilleur des cas ils savent mener une analyse rapide du réseau, vue d’un navigateur.

outil chrome dev tools montrant une requête qui ne répond pas

la requête coupable est une longue barre grise, sur-lignée en rouge (forcément)

Après analyse, c’est un petit script hébergé sur un serveur qui ne répond pas qui bloque la page. On passe donc en revue les suspect suivants :

  • les développeurs frontend qui n’ont fait que leur devoir en implémentant la solution demandée par le métier,
  • les services marketing et commercial qui ont légitimement besoin de cette solution de [adserving | test A/B | widget | tracker]
  • le service tiers, qui avait donné comme garantie au moment de l’intégration : « On est sur un CDN ».

L’enfer c’est les autres

Il est très tentant d’incriminer le tiers à la moindre occasion, et parfois c’est justifié, comme cet incident il y a quelques années où certains tunnels de paiement se mettaient à afficher des erreurs de sécurité.

alerte de sécurité SSL de chrome dûe au serveur jquery

une alerte de sécurité du plus bel effet au moment de payer

Les pages touchées étaient celles en HTTPS qui incluaient jQuery depuis le CDN code.jquery.com … dont l’administrateur avait oublié cette après midi là de renouveler le certificat de sécurité.
Mais il y a plein d’autres raisons pour lesquelles un serveur tiers peut ne pas répondre comme :

  • des attaques mettant à mal votre prestataire ou ses propres prestataires. Dans le cas de l’attaque DDoS contre le DNS Dyn, Twitter n’était plus visible de certains endroits de la planète … tant pis pour les pages incluant les widgets.
  • des erreurs réseau de l‘hyper-espace comme la redirection temporaire du domaine Google vers un site de prévention du terrorisme du gouvernement … Uniquement pour les clients Orange un 17 octobre o_O
  • les wifis gratuits publics (hôtels, aéroports…) qui redirigent certaines requêtes pour insérer dans les pages leurs propres régies publicitaires
  • les firewalls d’états (Chine en tête) ou les proxys d’entreprise qui ont une opinion tranchée sur l’utilisateur Facebook ou Youtube et qui bloquent les domaines : dommage pour les widgets et analytics

Bref : il y a 1001 raisons pour qu’un serveur tiers plante ou ralentisse, il faut donc prévoir son intégration avec cet état de fait.

Savoir intégrer les tiers

Généralement l’intégrateur reçoit simplement comme instruction un mail disant :

Insérez ce script dans le <head>

J’exagère un peu, parfois on a droit à un document Word formaté proprement (mais qui dit la même chose).
Il arrive aussi que les développeurs décident d’eux même de faire une bêtise :

  • inclusion de librairies JS / CSS directement depuis leurs CDNs respectifs, comme le préconisent les documentations,
  • récupération des fichiers de polices depuis les serveurs Google Fonts ou autre.

Dans ce dernier cas, il peut y avoir l’excuse de la licence qui n’autorise pas forcément le rapatriement du fichier. Du coup vous faites subir à vos utilisateurs le comportement par défaut de tous les navigateurs (sauf IE) qui n’affichent pas le texte tant que le fichier de police n’est pas présent.

Je vois pas le problème

Pour visualiser les problèmes d’intégration, et surtout leurs conséquences pour l’utilisateur, je ne saurais trop vous recommander les outils suivants :

  • L’indispensable service en ligne WebPagetest : déplier « Advanced Settings », onglet « SPOF » et y mettre les noms d’hôtes à faire planter.
  • L’extension Chrome SPOF-o-Matic qui permet d’alerter, de tester et même de programmer un test comparatif sur WebPagetest.
  • En ligne de commande (pour l’intégration continue par exemple), je vous ai fait un petit script par dessus SPOF-check
capture de l’interface SPOF-o-Matic

l’extension SPOF-o-Matic débusquant les potentiels fauteurs de troubles

Solutions

Pour ne jamais dépendre d’un tiers, il n’y a qu’environ 2 stratégies :

  1. Les ressources critiques sont à rapatrier sur vos propres serveurs. Le CSS bien sûr, les dépendances JS, les polices si vous en avez le droit.
  2. Tout ce qui reste hébergé ailleurs doit passer en asynchrone : trackers, analytics, widgets, les polices

Il y a certains cas spéciaux comme l’inclusion des tests A/B qui sont à la fois dynamiques et critiques pour le rendu de la page, étant donné qu’ils essayent de le modifier. Mais si vous demandez poliment une mécanique de « timeout » ou un rapatriement périodique du fichier, vous n’aurez plus de soucis.

2. Les retards à l’allumage

Une fois traité le problème impressionnant mais rare de la page blanche dûe à un tiers, reste le problème sournois du ralentissement quotidien, moins visible mais bien plus coûteux. Même avec des inclusions asynchrones on peut se retrouver dans ces situations

un moteur de recherche de voyages mis en attente

Moteur de recherche (95% du business) attendant une régie pub (5% du business)

Beaucoup (trop) de fonctionnalités dépendent complètement de JavaScript et de moins en moins de développeurs tentent l’amélioration progressive. Dans certains cas comme ici un moteur de recherche complexe, il est même irréaliste de vouloir afficher un moteur sans JS, d’où l’idée de mettre une interface de chargement pour patienter. En sachant que ce code métier critique est inclus en haut de page, quand l’exécuter ? Du pire au mieux :

  1. en haut de page ! Bien sur que NON, le DOM n’est pas forcément disponible à ce moment-là (ce qui ne se voit pas forcément quand on développe sur son poste en local d’ailleurs :) )
  2. on fait confiance à StackOverflow et on attend que document.readyState === 'complete' … Cela correspond à l’événement window.load, c’est-à-dire qu’on va attendre patiemment que toutes les images, iframes et même certains scripts asynchrones soient chargés ! L’utilisateur n’attendra pas, lui.
  3. on attend l’événement document.DOMContentLoaded (en jQuery : $(document).ready(init) ou juste $(init)). Cet événement est retardé par les insertions de scripts même en bas de page, les scripts asynchrones avec l’attribut defer et toute exécution de script, dont le tueur de performances document.write(). La pub utilise toujours cette instruction.
  4. juste après le code HTML du formulaire : vous avez à la fois la garantie que le DOM est présent, et d’être exécuté avant tous les événements navigateur. C’est ce que je recommande pour du code critique comme ce formulaire.

Il y a donc un conflit ouvert entre le tiers inclus et votre code métier, que vous pouvez résoudre en exécutant plus tôt votre code. Si vous persistez à vouloir dépendre de l’événement DOMContentLoaded pour exécuter votre code, il va falloir travailler au corps l’inclusion des scripts des tiers :

  • s’ils ne sont pas lourds à l’exécution et importants, le plus bas possible dans la source avec l’attribut standard async (IE10 +)
  • s’ils sont secondaires, en inclusion asynchrone classique après le chargement de la page (natif façon Analytics ou $.getScript)
  • refuser les scripts dépendant ou utilisant document.write() (d’ailleurs partiellement dépréciée par Chrome).

La pub est spéciale : les régies ne peuvent pas se passer de l’instruction document.write() car leurs propres fournisseurs l’utilisent peut-être. La solution technique est simplement d’inclure la publicité en iframe, ce qui interdit certains formats invasifs. Désolé de vous le dire mais si votre business dépend de la pub et que vous vous êtes engagé à afficher des pubs qui peuvent déborder de leur cadre, il n’y a pas de solution purement technique ! On va voir dans un autre article qu’il y a matière à bien faire, mais que les décisions sont loins d’être techniques.

Après le chargement

Vous avez forcément déjà constaté les effets d’interface gelée voire de crash sur mobile, ou vous avez eu l’impression que votre ordinateur portable allait décoller de votre bureau par la seule force de ses ventilateurs. Pour faire le test, je vous conseille de visiter cette page parodique sans adblock, voire sur mobile : http://worldsmostshareablewebsite.greig.cc/, qui se contente d’inclure plusieurs fournisseurs de boutons de partage. Sur une tablette Nexus 7, l’interface est gelée pendant 20 secondes.
La nouvelle bataille de la performance frontend, est clairement les temps d’exécution abusifs côté client. J’ai déjà eu le cas avec de « simples » inclusions de bouton de partage (Facebook et G+ en tête) mais c’est le cas avec n’importe quel script qui va modifier l’interface. Il y a un principe général à comprendre avec les tiers :

Si c’est rapide à intégrer, c’est que ça va ramer

Les tiers, en particulier s’ils ont une version gratuite, ont 2 besoins antinomiques : simple et passe-partout. Le tutoriel doit paraître simple et consiste généralement en une inclusion de script et à la création d’un peu de HTML. À l’image du bouton Facebook.

code d’inclusion du bouton facebook

Trop simple pour être performant

Remarquez que l’insertion du script est généralement asynchrone comme ici, car les tiers ont fait des efforts pour ne pas bloquer les chargements ces dernières années.

Détecter le problème

Maintenant mettez vous à la place du développeur de ce code : comment faire pour savoir où afficher son widget ? La réponse est aussi simple que contre-performante : en s’auto-exécutant dès que possible, et en scannant le DOM régulièrement. Selon la lourdeur initiale de votre site, on peut vite arriver à de jolis blocages dont vous ne comprendrez l’origine qu’avec un profilage en règle. Notez qu’il faut utiliser de vraies machines pour tester correctement tout cela.

capture d’écran de l’outil de profilage chrome

3 longues secondes d’exécution pour ce seul tiers

Le fichier mis en cause ici (post-widget.js surligné en gris) provient effectivement d’un tiers qui inclut des boutons sociaux. Il bloquait l’interface et faisait même régulièrement planter un iPad mini 2. À sa décharge, la page visée était lourde et contenait 150 éléments que le script recherchait et modifiait.
Il n’existait pas d’outil dédié — même payant — permettant de déceler facilement qui était responsable des pics de charge processeur sur une page. J’ai du écrire un petit script du nom de 3rd-party-cpu-abuser qui exploite la timeline de Chrome Dev Tools pour mettre des noms sur les responsables :

tableau de statistiques de consommation CPU

80% du CPU consommé l’est par les tiers

WebPagetest a également récemment introduit une visualisation du CPU répartie par fichier JS : onglet « chrome », case « capture devtools timeline »).

Pour débloquer la situation, je me suis contenté comme souvent d’aller lire la documentation pour y chercher 2 optimisations classiques :

  • comment ne pas initialiser le script automatiquement, afin d’éviter l’effet Big Bang du début de construction de page et ne l’exécuter qu’au moment opportun.
  • comment indiquer le DOM à modifier, pour éviter les recherches DOM coûteuses

Pratiquement tous les fournisseurs de widget proposent maintenant ces options dans leurs APIs. Si ce n’est pas le cas, c’est mauvais signe donc partez chez le concurrent !

3. L’espionnage industriel

Rajouter quelques boutons de partage n’est pas aussi gratuit que ça en a l’air. Il y a bien sûr la performance utilisateur, qui en pâtit.

comparaison de screenshot montrant le chargement d’une page wordpress avec et sans boutons

4 boutons = ralentissement de l’affichage et du temps de chargement

Sur cette page wordpress simple et optimisée, rajouter 4 boutons natifs multiplie le temps de 1er affichage et de chargement par deux !

Les taux de transformation

Mais il faut aussi se demander si ces boutons apportent vraiment quelque chose au site. Par exemple Smashing Mag en 2012 avait constaté qu’en ENLEVANT le bouton Facebook, leurs utilisateurs partageaient plus les articles sur Facebook !

le traffic depuis Facebook a augmenté depuis que nous avons enlevé les boutons FaceBook de nos articles

Smashing Mag : « le trafic depuis Facebook a augmenté depuis que nous avons enlevé les boutons FaceBook de nos articles » (2012)

NB: Entretemps Facebook a sorti un bouton « Partage » plutôt que simplement « Like », et Smashing Mag l’a ré-intégré de manière statique.

Autre exemple : un test A/B fait par un site de e-commerce qui a consisté à SUPPRIMER ces boutons de la page produit et leur a permis de constater que cette suppression AUGMENTAIT les taux de conversion de 12%. Ils supposent que finalement ces boutons n’étaient qu’une distraction à ce moment-là, et que les chiffres de partage affichés, proches de 0 comme souvent dans le e-commerce, renvoyaient un sentiment négatif. J’y ajouterais que la légère dégradation de performance induite par ces boutons a dû contribuer :)

Bref : comme pour n’importe quelle fonctionnalité, demandez vous si elle ne dessert pas plutôt votre produit, ou s’il n’y a pas une meilleure manière de l’intégrer.

Nourrir vos concurrents

La raison d’être secondaire de ces boutons pour Google et Facebook est qu’il leur permet de mieux qualifier leurs propres utilisateurs, en dehors de leurs propres murs. Même lorsque l’utilisateur n’interagit pas avec, leur simple présence signale à G. et FB qu’un de leurs utilisateurs visite une page, leur permettant ainsi d’affiner les profils. Dans le cas de Google, l’utilisateur n’a même pas besoin d’avoir un compte. Ne me lancez pas sur le respect de la vie privée, d’autres le font mieux que moi, parlons plutôt argent.
À toute fin utile, il faut tout de même rappeler que Google mange 42% du marché de la publicité en France (95% des 47% du CA de la search).

Pour le marché qui vous intéresse probablement, c’est-à-dire le « display » (affichage de bannières classiques) on estime que Facebook en capte 30%. Ce que les annonceurs apprécient, outre l’audience, c’est que leur base est hyper qualifiée, et c’est en partie grâce aux sites qui incluent les boutons.
Déjà que ces boîtes s’évitent un maximum d’impôts en France, ce n’est pas la peine de leur faire de cadeau supplémentaire en utilisant leurs scripts tels quels.

Les solutions

En admettant que vous ayez déterminé que les boutons de partage étaient vraiment bons pour votre site (typiquement, un site d’articles), il existe des manières d’inclure qui ne nourrissent pas vos concurrents, sont performantes et respectent votre charte graphique :

  1. les boutons statiques, qui sont des liens simples formatés permettant le partage et que vous pouvez mettre par dessus de simples icônes
  2. si vous avez besoin de fonctionnalités supplémentaires comme des icônes toutes faites, afficher les compteurs ou avoir des analytics, vous pouvez rajouter un peu de JavaScript. Voici une solution open-source parmi d’autres
  3. enfin il existe quantité de services tiers (addThis, shareThis, shareAholic …) mais on retombe sur les travers habituels des tiers : il faut benchmarker les temps de chargement car ils vont du simple au triple et le business model de certains comme shareAholic est de revendre les données utilisateur

Les tiers des tiers de vos tiers

Le problème

Quand il n’y en a qu’un ça va

S’il est normal de faire confiance à un prestataire direct, la confiance ne peut que s’étioler au fur et à mesure de la chaîne d’appel de leurs partenaires. Or quand vous accordez techniquement les pleins pouvoirs à votre prestataire (une simple insertion de script), vous les accordez également à toute une chaîne de sociétés dont vous n’aviez peut-être jamais entendu parler. Je vais utiliser l’outil RequestMap pour visualiser un affichage sur la Une du journal Le Monde.

visualisation des requêtes faites vers les 1er tiers

Appels vers les tiers de 1er niveau

Chaque cercle est un nom de domaine, les flèches sont les appels. Au centre en bleu clair, le domaine principal www.lemonde.fr qui appelle 2 sous-domaines de statiques (s1 et s2.lemde.fr). Tous les autres domaines (cercles) appartiennent aux tiers de 1er niveau et correspondent à une quinzaine de sociétés. On y trouve 3 solutions d’analytics, une solution de test A/B (Kameleoon), un tracking de réseau social (Po.st), FaceBook, un moteur de recommandation d’articles (Outbrain ici), Cedexis … Ce sont les tiers de 1er niveau : ceux que l’on inclut de manière tout à fait consciente. Les relations avec ces tiers sont régies par un contrat direct ou par l’acceptation des CGU, et tant que les principes d’intégration cités plus haut dans cet article sont respectés, je n’ai plus rien à rajouter.

Puis arrive le moment où l’on contacte la régie pub (SmartAd en l’occurrence, à droite sur le graphe précédent, à gauche sur le graphe suivant).

Tiers de niveau 2, 3 et 4 … Oh la belle rose

Appel des tiers de niveau 2, 3 et 4 … Oh la belle rose


Une fois sur son domaine, la régie appelle une dizaine de sociétés, principalement des tags de tracking, puis 2 systèmes de mise aux enchères de mon profil utilisateur. C’est la société de RTB CasaleMedia qui prend le relai, et qui contacte une vingtaine d’autres sociétés. Cela c’est côté client, on ne sait pas combien d’enchérisseur ont accès au profil utilisateur côté serveur. L’enchère a été gagnée par une société de retargeting (Turn) qui elle-même contacte une vingtaine de sociétés.
En tout c’est 50 sociétés qui ont été contactées côté client. Si le script du 1er tiers inclus de manière classique, ces 50 sociétés avec qui vous n’avez aucun contrat ont tout pouvoir sur la page. Il leur est techniquement possible de la modifier (on a vu des sociétés malhonnêtes remplacer les publicités des autres) ou d’y récupérer des informations : outre les informations de navigation, elles pourraient cibler un site de e-commerce et estimer ses ventes et leur nature par exemple, simplement en scannant le DOM. Ces scénarii sont pratiquement indétectables et quand on voit qu’il arrive que des pirates diffusent des virus grâce aux régies publicitaires, il n’est pas irréaliste d’imaginer une société voulant récupérer des informations chez son concurrent.

Les solutions

Se parler !

Les premières actions ne sont pas techniques du tout.
D’abord, lister quelles sociétés atterrissent sur vos pages, avec des solutions :

Ensuite, du côté des contrats signés avec vos partenaires, vérifiez que leurs partenaires à eux vous conviennent et demandez-vous quels engagements de moyens ils ont et pourquoi pas imaginer un système de pénalités. Les régies savent se montrer réactives lorsqu’un de leurs clients leur signale un problème avec un prestataire, mais détecter le problème en question est très compliqué.
Enfin, il faut établir un dialogue entre les équipes IT et les utilisateurs des services tiers (marketing, produit, commerciaux …), en faisant un point régulier « Tiers », avec l’ordre du jour suivant :

  1. l’IT fait l’inventaire des tiers de 1er niveau et remontent éventuellement les problèmes rencontrés
  2. côté business, on classe par ordre d’importance les tiers … oui il va y avoir du débat !
  3. décisions de suppression
  4. décisions quant à l’ordre de chargement

On se retrouve à prendre des décisions complexes car comment décider de ce qui est plus important entre un test A/B, les analytics, le player vidéo, les pubs, la carte ou les boutons de partage ? Il faut pourtant que ce soit une décision réfléchie car jusqu’ici, cette décision était de fait laissée à l’intégrateur et au navigateur …

Côté technique

Si votre business model vous permet de vous passer des publicités invasives, ce qui est le cas des sites de e-commerce par exemple, alors je ne saurais trop vous recommander la bonne vieille technique de l’inclusion en iframe. Cela gomme les inconvénients de document.write(). L’attribut sandbox vous permet (depuis IE9) d’accorder aux tiers d’accéder à votre page, vos cookies ou le droit d’ouvrir une popup.
<iframe sandbox="allow-scripts" src="carre_pub.html" /> suffit pour les publicités classiques : il autorise JavaScript, mais la sous-page ne peut rien faire sur la page principale. Si vous avez besoin de communiquer, l’API postMessage est là pour ça !

Pour aller plus loin, mais je ne l’ai encore jamais vu en production, il y a le standard Content Security Policy (à partir de Edge) qui permet entre autres de limiter les pouvoirs donnés aux tiers inclus directement en JavaScript. Pour une transition en douceur, vous pouvez passer par une phase d’observation des erreurs côté client (report-uri). Maintenant on ne va pas se mentir : la vraie difficulté, c’est de faire admettre que l’on veut limiter le pouvoir des tiers, pas de les en empêcher !

Conclusion

Les tiers posent leurs lots de problèmes mais ils ont pratiquement tous une solution technique, au contraire des publicités. Du moment que l’on fait attention au moment de l’intégration et que l’on surveille les régressions de performance, on évite la plupart des écueils. Si vous avez plus de quelques services externes et qu’ils peuvent mettre en péril votre business, mettre en place une solution de monitoring dédiée est à envisager rapidement.

28 Dec 12:03

Why most A/B tests give you bullshit results - The Signal

By now, anyone in product or marketing knows what A/B testing is. What we don’t know, or at least won’t admit, is that too many A/B tests yield nothing.

Too often they measure meaningless variants, produce inconclusive results, and nothing comes from them. Of course, some A/B tests yield real, meaningful, actionable results. Those are the ones you hear about. We’ve all seen the articles. Company X increases conversions 38% with this simple trick. Hell, I’ve written some of them.

But those success stories have hidden the grey underbelly of testing and experimentation.

AppSumo revealed that only 1 out of 8 tests produce results. Kaiser Fung estimates that 80 to 90 percent of the A/B tests he’s run yield statistically insignificant results.

Yet many new testers walk into A/B testing thinking it’ll be quick and easy to get results. After running a handful of simple tests, they think they’ll find the right color for this button or the right tweak to that subject line, and conversions will, poof, increase by 38% like magic.

Then they start running tests on their apps or sites, and reality suddenly sets in. Tests are inconclusive. They yield “statistically insignificant” results and no valuable insights about the product or users. What’s happening? Where’s that 38% bump and subsequent pat on the back?

Don’t get frustrated. If you’re going to be running A/B tests, you’re going to have some tests that fail to produce meaningful results you can learn from. But if you run good tests, you’ll have fewer failures and more successes. By running thoughtful A/B tests, you’ll get more statistically significant results and real learnings to improve your product.

Click to Tweet - 7 out of 8 A/B tests are inconclusive and we don't talk about it enough.

And that makes it seem like you learn from every A/B test you run. You don’t, but (almost) no one is sitting down to write a blog post about the time they tested three variants and saw no noticeable difference in conversions. That means the results are not statistically significant enough to draw any conclusions from the experiment. Essentially it’s asking what is the chance of getting these same results, or results with even larger difference in performance, without there being any actual difference between your A and B.*

Imagine you’re tossing two coins, twenty times each. Coin A lands on heads 12 times. And Coin B lands on heads nine times. You wouldn’t rush out proclaiming you’ve found a coin that is 33% more successful at landing on heads, right? From your understanding of coins, you know the difference is simply by chance. It’s not statistically significant.

Now if you tossed each coin another 180 times, and Coin A landed on heads 120 times and Coin B landed on heads 90 times, clearly something significant is happening. But, again, we know that isn’t what would happen. After 200 hundred tosses, there might still be a small difference in how many times each landed on heads, but it would be chance. Any difference is just noise.

And that might seem like a silly experiment. Of course two coins aren’t going to perform noticeably different. But, honestly, this is precisely why so many A/B tests yield inconclusive results. We waste our time testing variants without any real meaningful differences and, unsurprisingly, we end up with a bunch of tests with statistically insignificant results.

And if anyone is to blame, it’s that stupid button example’s fault.

The button color experiment is the “Hello, World!” of A/B testing. It’s a simple example that does an excellent job of explaining the concept. And so, without fail, any time A/B testing is being explained for the first time, someone is using the button color example, where one variant of a page has a green button purchase button and one has a red button. You run the test and see which color button has a higher conversion rate.

And the truth is, some companies have conducted the button experiment and actually received meaningful results to improve their product. If you want your user to interact with something, there is certainly value to making it stand out. That said, as most who have run the experiment have discovered, while button color is an excellent way to describe A/B testing, it’s rarely a meaningful way to improve your product.

Click to Tweet - Meaningless A/B tests are pervasive because they are so easy to run.

I ran my own meaningless test about a month and a half ago.

Mixpanel rarely sends out emails to our master list. We usually only email out our new articles to users that have subscribed to the blog (which you can do at the bottom of this article). But it had been some time since a large send, so we got the okay to email the latest in our Grow & Tell series, a feature on QuizUp’s transition into a social platform, to a large chunk of our users. It seemed like the perfect opportunity to run a really quick A/B test.

The email had a subject line of “Why 15 million users weren’t good enough for this mobile trivia app”. But I’d heard that starting out an email with your company name can improve open rate, so I made a variant with the subject line, “Mixpanel – Why 15 million users weren’t good enough for this mobile trivia app.” Easy, right? And if it performed better, we could put what we learned to use, starting every subject with our name, increasing open rates on all of our emails, and hopefully increasing results – people doing what you’re doing right now, reading our articles.

The email went out to hundreds of thousands of users, split between the two versions. And then I waited impatiently for my success to come rolling in.

When the results did come in, they could not have been less statistically significant. The subject line without “Mixpanel” had a 22.75% open rate. The subject with “Mixpanel” had a 22.73% open rate. A difference of .02%.

Hundreds of thousands of emails sends later, the difference in my test was 20 opens. For all intents and purposes, I was flipping coins.

Even with such a large sample size, there just wasn’t enough contrast in my test to yield significant results. I learned nothing, except to take my tests more seriously.

So what could I have done to get more significant results?

Well, first, I could have tested a completely different subject line altogether. Like less scintillating but more semantic article title of “Why QuizUp turned the fastest-growing game in history into a social platform.” That contrast would have had a much greater chance of producing statistically significant results.

But even then, what would I have learned besides that one did better than the other? What actions would I have taken from it? Perhaps if I tested it a few more times I could reach the large conclusion of whether our readers prefer scintillating subject lines or semantic ones.

My test was meaningless because it wasn’t constructed well and it wasn’t part of a larger strategy asking meaty questions about what matters to our readers. It was quick and simple, but it didn’t go anywhere. A/B testing is never as easy as it seems. If you want results, it takes work. Either put in the time to thoughtfully and strategically test many little things hoping to find an array of small improvements, like different pictures, slightly different designs, and changes in the text of your calls to action. This is one camp of A/B testers, the “optimize your way to success” testers. The other camp includes those who develop out features of the product and test a drastically different experiences, like re-working the process of user onboarding.

You can find valuable lessons and improve your product with A/B testing, but it takes some hard work.

I’m not the only one mulling on this. Recently, I spoke with Hari Ananth, co-founder of Jobr, about some not-so-meaningless A/B tests they conducted to improve user acquisition.

“We wanted to improve our onboarding flow to get more users in the app and swiping,” Hari, told me.

Jobr is an app that allows job seekers to swipe, Tinder-style, through curated job opportunities.

“We identified two crucial steps in our funnel and built a sufficiently wide list of variants for each experiment to ensure proper coverage. After sending enough traffic through each variant, we were able to incorporate the optimized flow and boost conversions by 225%.”

Jobr essentially rebuilt their onboarding process, informed by data on where users dropped out of the previous process.

Cozi‘s A/B tests were more in the “optimize your way to success” camp. In an Office Hours talk last summer, Tara Pugh recalled their own process of removing friction from their user onboarding.

After testing hypothesis after hypothesis, Tara and the team at Cozi were able to incorporate bits of learning into the flow. Some were small aesthetics tweaks, like switching to a lighter background. Others where larger changes that asked the user to do fewer steps and removed friction from the process – like pre-populating forms and eliminating checkboxes.

No single change resulted in a major increase in conversions. But combined, the improvements raised the signup completion rate from 55% to 76%.

Run tests that produce meaningful results

It wasn’t random that these experiments were able escape the all-too-often plight of A/B testing and deliver meaningful results. The experiments were constructed to test meaningful aspects of the product, aspects that had a strong impact on how the user would behave. And of course they ran the experiment enough times to produce statistically significant results.

So if you’re sick of bullshit results, and you want to produce that 38% lift in conversions to get that pat on the back and the nice case study, then put in the work. Take the time to construct meaningful A/B tests and you’ll get meaningful results.

*Editor’s note: This sentence previously read, “Essentially it’s asking what is the likelihood that the performance difference in your variants was merely a result of chance.” After a little feedback and a chat with Trey Causey it was revised.

Click to Tweet - Why most A/B tests give you bullshit results

28 Dec 11:59

Advice for our user

by Jaclyn Perrone

You’re a dog walker and you have a friend who is designing an app for dog walkers. She emails you one day and asks if you’d like to participate in an interview and usability test for her app. You accept, because you want to help out your friend, but then you ask yourself “what the heck is a usability test?”

Firstly, thank you for accepting and stepping out of your comfort zone. You’ve made your friend, and all designers, very happy. She is trying to make an app for you and dog walkers everywhere, but alas, she is not a dog walker. She doesn’t know first-hand what it means to be a dog walker. This is where you come in. She is going to ask you questions and show you some designs. She wants to learn from you to fill in any gaps and poke holes in her ideas. At the end of the day, she is reaching out to you because you are the expert, and you have the knowledge and experience she needs to make her product a success.

What is a user interview?

A user interview is a research technique used to gather information about your experiences, preferences, and behaviors that will help inform a product’s design. For example, you might be asked about the websites you visit most often, or how you share articles among friends. Generally speaking, a product designer has a good idea of who might be interested in their app. By talking to you and others like you, they are gathering information that will either validate or invalidate assumptions about their potential market fit. These research efforts are the initial steps towards understanding an audience and building a product that they couldn’t live without.

Things to remember

  • Be honest, open, and give lots of details.
  • There are no wrong answers.
  • We are here to learn from you, so anything you say is useful (and will never be held against you!)
  • You don’t have to answer every question. If you don’t feel comfortable answering something, or if your mind draws a blank, it’s okay! That in and of itself is a valuable finding. If enough people cannot provide a response, then it means we need to either rephrase the question or think about it differently.

What is a usability test?

During a usability test, a designer presents you with a design, prototype, or app and asks you to use it. They observe as you perform tasks, and ask you questions along the way to learn about how (and if) you would use such an app. From here they discover which parts of the interface work and which parts need more thought. This is a great way for designers to gain valuable insight into their design; to see how they can make its experience as smooth and intuitive as possible. Because, in a world where there is an app for everything, a confusing app is easily cast aside in favor of a simple one that does the job better.

Things to remember

  • Every bullet point from above also applies here. There are no wrong answers, and be open and honest.
  • You will not hurt our feelings. If you think you would never use our app, tell us. That’s something we need to know!
  • You are not being tested—the design is.
  • Think out loud the entire time. We want to know what you’re thinking as you move through the app. We want to hear about your confusions, your understandings, and your realizations.
  • If you’re stuck on something, that’s good! Talk through your experience. It’s a great opportunity for us to learn how to improve it.

And hey…

You might find that you have a knack for giving feedback, and that you like helping out in this stage of the design process. If that’s the case, keep your eyes peeled for usability testing posts on sites like TaskRabbit, or sign up to be a tester on a service like Usertesting.com. Either way, thank you again for your help, and we hope it’s as insightful for you as it is for us!

28 Dec 11:53

Even faster images by using http2 and progressive jpegs

tl;dr: Progressive images render faster on HTTP2, thus increasing perceived performance. Take control of progressive JPEG’s scan layers to show meaningful image content with only 25% of image data sent. Use HTTP2 Server Push for progressive JPEG scan layers to maximize rendering performance for key images.

We Have An Image Problem

Engaging, enraging and encouraging images Images make the world go round: they engage, enrage & encourage us. The web as we know it depends on images. This comes at a price: images make up ~65% of average total bytes per page and have a high correlation to page load time as well as the Speed Index. They also grow by ~200kb year after year. In short, images are heavy and make things slow.

Get Compressin’!

HTTP Archive Statistics The best way to counter negative effects of loading image assets is image compression: using tools such as Kornel Lesiński‘s ImageOptim, which utilizes great libraries like mozjpeg and pngquant, we can reduce image byte size without sacrificing visual quality. And thanks to libraries such as DSSIM we can ensure good visual quality testing different compression levels.

The bad news is that even after reducing image byte size by an average ~29% per image using above tools and even making use of other image formats such as WebP, images are still likely to be the single largest asset type on any given website – closely followed by JavaScript. We need a way to deliver these crucial components for emotional engagement faster.

Enter Multiplexing

HTTP2 Multiplexing Diagram Part of the solution comes from a popular area of the performance conundrum: HTTP2. One of its main benefits is “Multiplexing”: the ability to handle multiple requests and responses at the same time, all using the same TCP connection.

With Multiplexing, website assets load faster. Depending on site architecture, you can also prioritize resources inside a multiplexed connection: flagging assets such as critical CSS with high priority in HTTP2 will make them load sooner. On top of this, pushing not yet requested but crucial assets via HTTP2 Server Push can create a super fast perceived performance, when applied correctly. More on this later.

HTTP2 Waterfall demo on WebPagetest Multiplexing has a curious side-effect when it comes to image loading: certain kinds of images load significantly faster in terms of perceived performance because initial image information can be downloaded in parallel via HTTP2 Multiplexing. Progressive JPEGs and interlaced PNGs benefit from this.

Progressive All The Things

Baseline sequential image loading example

Progressive JPEG image loading example

Progressive and interlaced images are like layer cake: they contain information not in a single stream that renders images from top left to bottom right, but as a stack of layers, each improving on information already shipped in earlier layers. Each individual layer is more lightweight in terms of byte size than the final image.

Since browsers loading website assets via HTTP2 Multiplexing will initiate almost all image downloads simultaneously, the initial, lightweight layers of progressive and interlaced images start rendering much more quickly than sequentially encoded images. Sequentially encoded images render in a windowblind manner: line by line until all image information has been shipped.

John Mellor's SPDY test demo That perceived performance and the Speed Index benefit from delivering progressive JPEG scan layers via HTTP2 Multiplexing was already observed by Google’s John Mellor in 2012. He was experimenting with the SPDY protocol, a precursor to HTTP2. Today, we can improve on this discovery to make progressive images appear even faster:

Take The Power Back! Or: The Scans File

Demo of 10 scan layers Progressively encoded JPEGs contain ten scan layers by default. That means ten iterative layers of image information build on each other to deliver the final visual quality of the image. The first visible scan layer of a progressive JPEG is always highly pixelated and often black & white because it saves on color channel information. If you want to check out how each scan layer looks, use Frédéric Kayser’s “jsk” tool to split a progressive JPEG into its individual scan layers.

Why ten layers? That’s the default setting inside all common JPEG encoders. It’s a compromise between byte size per scan layer, visual quality and helping the JPEG encoder achieve smaller total image file sizes during Huffman table optimizations.

Default scan layers script Unlike PNGs, which use a fixed method called Adam7 encoding to create interlaced layers, we can supplement JPEG encoders with custom directives for scan layer creation: the “-scans” flag for JPEG encoders. You can use it like this with mozjpeg: “cjpeg -quality 75 -scans customscans.txt -outfile output.jpg input.jpg”. Now the JPEG encoder accepts a plaintext file containing your custom commands for scan layer creation.

Each line in the scans file defines a new scan layer. They contain multiple parts of information on color channel, matrix index and lossiness.

The three channels are brightness (‘Y’), blue (‘Cb’) and red (‘Cr’), which respectively have the numbers 0,1 & 2 in the scans file. The matrix index in the scan file goes from 0 to 63, covering a 64-pixel block. (JPEG encoding has a native 8×8 block setting.)

Getting Creative

Custom scan layers script Our goal is to show meaningful image contents sooner while enabling browsers to lay out the site speedily. Our initial scan layer should therefore be lean but meaningful, followed by an as steep increase in perceived visual quality as possible.

The custom scans file displayed here ensures a first scan layer with appropriate colors. At the second scan layer, we already have a highly acceptable preview. Scan layers three and four deliver the necessary color information: the red channel before blue channel since it is likely that red color information is more important to improve visuals, e.g. when showing faces. After the fourth scan layer, the image looks complete and the final fifth scan layer improves only fine high frequency details. These improvements are reflected in an ~6% better Speed Index, reflecting the perceived performance.

WebPagetest results

Progressive JPEG image loading example

The above scans script is only one example of what is possible when customizing progressive JPEG encoding: using the same approach, you could recreate Guy Podjarny’s LQIP technique within progressive JPEGs as shown by Jon Sneyers.

Push! Push! Push!

HTTP2 offers another tool we may use for even faster delivery of image contents: Server Push. In supporting HTTP2-enabled web servers, it is possible to flag individual scan layers of progressive JPEGs with high priority and making the server push those scan layers into the client browsers’ Push cache even before the request for the respective image is initiated. Browsers then can lay out the page and render initial scan layers with the performance of a warmed cache, making users perceive the site’s images as rendering exceptionally fast.

Check out this brilliant article in this year’s Performance Advent Calendar to find out more about HTTP2 Server Push.

WebPagetest results

Progressive JPEG image loading example

This technique should only be used strategically: find out which images are crucial for creating user engagement on your page, e.g. an emotion-evoking hero image or a product overview image, and only apply Server Push to the initial scan layers of those JPEG images. This will enable you to increase user engagement and thus successful conversions without harming overall site asset downloads.

Takeaways

  • Multiple progressive or interlaced images render faster on HTTP2 thanks to Multiplexing
  • Taking control of progressive JPEG creation may give users a better visual experience
  • HTTP2 Server Push can increase perceived performance for important images

Credits: Thanks to Corinna Baldauf for proof & editing. Thanks to Colin Bendell and Yoav Weiss for inspiration & support.

23 Dec 01:22

IT Jobs Explained With A Broken Lightbulb [Comic]

by Geeks are Sexy

Do you know what the differences between a front-end and backend developers are? And what about those project managers or IT support specialists? Do you know what they really do? This fantastic comic by Mart Virkus from toggl explains all of these quite well by illustrating each job through the rather mundane job of changing a broken lightbulb.

Yep, totally true. All true.

[Source: Toggl]

The post IT Jobs Explained With A Broken Lightbulb [Comic] appeared first on Geeks are Sexy Technology News.

23 Dec 01:00

Brèves considérations sur l'affaire Christine Lagarde

by Eolas

La Cour de justice de la République (CJR) a rendu ce lundi son arrêt dans le volet ministériel de l’arbitrage Tapie. L’ancienne ministre de l’économie a été reconnue coupable du délit de l’article 432-16 du code pénal, à savoir avoir permis, par sa négligence la destruction, le détournement ou la soustraction d’un bien public, en l’espèce des fonds publics, contre les réquisitions du parquet, mais dispensée de peine, avec cet ajout que cette condamnation, comme le permet la loi, ne sera pas mentionnée casier judiciaire, pas même le bulletin n°1, le plus complet, réservé à la justice.

Mon ami Authueil a traité cette affaire du point de vue politique, dans un billet très critique et documenté. Judge Marie, qui n’est pas moins mon amie, a traité sur son blog l’aspect juridique. Il me serait bien difficile d’écrire des choses plus intelligentes qu’eux, et vous épargnerai de la paraphrase, puisque je rejoins en tout point leurs conclusions. La dispense de peine ne me paraissait pas juridiquement possible, non pas tant du fait que la victime n’a pas été indemnisée, mais parce que le trouble à l’ordre public n’a pas cessé. Quant à prononcer une déclaration de culpabilité contre les réquisitions du parquet, mais dispenser et de peine et de B1, c’est à dire ne donner strictement aucune portée à cette condamnation n’a aucune explication juridique.

Je vais donc me risquer à une hypothèse pour trouver un sens à cette décision d’une cour composée, rappelons-le, majoritairement de politiques : douze juges sur quinze sont des parlementaires, députés ou sénateurs, et les décisions se votent à la majorité ; autant dire que les trois magistrats sont réduits à la portion congrue quant au sens de la décision mais la France n’ayant jamais fait sienne la tradition de l’opinion dissidente, ils sont obligés d’être solidaires de la décision quoi qu’elle dise.

Tout au cours du procès, Christine Lagarde a opposé une défense qui laisse Authueil, fin connaisseur des arcanes de l’État, circonspect, pour le moins. Et les douze juges politiques ont dû être tout aussi réservés sur le fait que ce dossier ait pu échapper de son écran radar. Le plus probable est que ce dossier a dû être retiré de sa compétence par le n+1 et le n+2 de Christine Lagarde, c’est à dire le premier ministre et le président de la République d’alors, du fait du caractère sensible du dossier et du caractère intrusif dudit chef. Christine Lagarde a probablement reçu l’ordre de ne pas intenter ce recours. Mais le dire revenait à se fâcher avec l’ancien et le prochain président de la République, ce qui ne se fait pas quand on veut faire carrière. Elle a d’ailleurs expressément assuré que ce n’était pas le cas, et que François Fillon et Nicolas Sarkozy ont donc appris sa décision de ne pas faire de recours en lisant la presse, sans doute.

Cette condamnation sans condamnation, alors que le parquet a requis la relaxe, peut s’interpréter comme une façon de dire “nous ne sommes pas dupes de votre histoire, mais nous comprenons que vous n’aviez pas votre mot à dire”. Ça n’a rien de juridique, et de fait le juriste perdra son latin avant de trouver un sens juridique à cette décision, mais politiquement, ça a du sens. Ça n’en fait certainement pas une bonne décision, et devrait être, espérons-le, l’arrêt de mort de cette juridiction d’exception dont il n’est jamais rien sorti de bon.

23 Dec 00:53

The Proper Way to Handle Multiple Time Zones in MySQL