deniscope

Aller au contenu | Aller au menu | Aller à la recherche

2015 mai 5

izzyFTP, une Firefox OS application

Il y a quelques mois, j'ai fait l'acquisition d'un ZTE sous Firefox OS. C'est mon premier smart phone et je l'ai surtout acheté car je voulais voir ce qu'était Firefox OS (j'aime bien ce que fait Mozilla en règle général). Mon opinion sur cet OS tient en un mot et n'est pas du tout le sujet de billet. Rien de mieux pour découvrir un environnement que de développer une application, j'ai donc décidé de faire un client FTP (initialement je voulais faire un client SSH mais les RFC sont vraiment trop touffues).

J'ai donc développé izzyFTP.

Le développement en HTML5 est sympa mais le truc génial c'est les retours. J'ai plusieurs projets à mon actif, je communique en général via ce blog et depuis peu sur Twitter. Je ne sais pas si c'est "l'effet Twitter" mais j'ai eu des retours inattendus.

D'abord une personne m'a contacté sur Twitter car elle voulait refaire mon interface car je cite "elle pique les yeux". Ensuite j'ai eu des conseils et/ou des demandes spécifiques toujours via Twitter. Et enfin, une demande (via linkedin) pour présenter mon retour d'expérience sur le développement de cette application lors d'un meetup de Firefox OS France. Toutes cette popularité soudaine et inattendue, ça fait plaisir.

Et puis il y a ça: stats Incroyable, il y a environ 10 installations d'izzyFTP par semaine. Au commencement, je ne voyais pas bien l'utilité d'un client FTP sur mobile. Maintenant que j'ai le mien d'installé sur mon mobile, j'avoue l'utiliser quelques fois pour mes sites perso (mais ça reste des cas isolés). Je trouve ces stats énormes, je ne les explique pas vraiment mais encore une fois, c'est super gratifiant.

Depuis, je push quelques hot fixes (available on github) et je suis de loin ce qui se passe sur Firefox OS. Je développerais peut être un version 2 avec un support FTPs (pas sûr) et je continue à regarder les stats en souriant.

NB: Le mot est "mitigé".

2014 mar. 7

Smart Match - Contenu d'email dynamique

Introduction

Smart Match est une nouvelle technologie qui permet de rendre le contenu d'un email dynamique.

Description technique

La technique consiste à cacher des images subtilement dans le contenu des emails. Ces images seront contactées par le client mail mais ne retourneront pas de contenu (code HTTP 204: No Content), elles devront avoir une url contenant des paramètres définissant le coté dynamique du contenu (par exemple l'identifiant d'une commande ou la référence d'un formulaire). Lorsque le serveur servant les images décide de changer le contenu de l'email, il n'a qu'à retourner un contenu valide par image, il grillera alors les allumettes "Match" car ces images seront mises en Cache par le client email. Correctement disposées avec des attributs CSS adaptés, les images peuvent recouvrir une partie du contenu, en ajouter, rendre des boutons inactifs ou même ajouter des informations.

Exemple: Validation d'une demande

Imaginez un accusé de réception pour une demande quelconque. Vous recevriez un email dans le début pourrait ressembler à ça: pending.png Une fois la commande acceptée (ou refusée), l'email deviendrez: accepted.png Code de l'email:

<div style="background: url('http://izzyway.com/background/pending.gif') no-repeat top right;">
   <img src = "http://izzyway.com/background/ribbon.php?id=123" style = "float: right; margin: 0; padding: 0;z-index:100;" alt = "" title = "" />
   <img src = "http://izzyway.com/background/msg.php?id=123" style = "margin:0 0 0 44px;" alt = "" title = "" />
   <div>
      <p>Nous accusons de votre demande. </p>
</div></div>

Aussi longtemps qu'il est nécessaire l'image nommée ici background/ribbon.php retournera "204 No Content", une fois la demande effectivement validée (ou refusée), le serveur retournera le contenu de l'image avec biensur le code 200. L'image background/msg.php agira de la même façon mais avec un contenu donnant des informations complémentaires sur la validation de la demande.

Autres applications possibles

  1. Griser des boutons (en positionnant une image transparente au dessus)
  2. Suivi de livraison de commande (une image par ligne dans un tableau d'information)
  3. Information sur l'ouverture de l'email (pour le cas de liste d'email)
  4. et bien d'autres...

Tests

Smart Match a été testé avec gmail, yahoo, hotmail, et d'autres clients emails lourds (pas Outlook je l'avoue), cela fonctionne super bien.

Conclusion

Plus qu'une nouvelle technologie, Smart Match est un algorithme habile pour rendre dynamique le contenu d'un email. Le point crucial de la technique est la gestion du Cache du client email, une fois l'image utilisée, elle sera mise en Cache (elle sera "grillée" comme une allumette) et ne pourra alors plus être utilisé pour changer le contenu de l'email. Le résultat est bluffant, les images changent dès l'ouverture de l'email et le contenu semble vraiment changer.

2013 nov. 24

BubbleBabble sur izzyway

Vous pouvez désormais encoder ou décoder vos chaines de caractères en ligne sur izzyway: http://bubblebabble.izzyway.com/ et les sources sont même disponibles.

xibod-lunil-futad-binek-zotid-burak-zorof-zoxex

2013 nov. 9

La fin de javascript ?

Aujourd'hui javascript est un langage incontournable pour la construction d'un site web même modeste. De plus en plus utilisé, possédant une grosse communauté de développeurs, javascript a le vent en poupe et on trouve maintenant de nombreux frameworks l'utilisant. Et pourtant. Pourtant, si on regarde quelques années en arrière, javascript était déjà présent dans les pages internet. Plutôt alors réservé aux développeurs expérimentés, il était souvent délaissé au profit de technologies lourdes (java ou flash) pour rendre "dynamique" une page. L'internet grandissant, les navigateurs ont également évolué. Ce qui prenait plusieurs kilos de lignes de code javascript avant, peut aujourd'hui s’exécuter en quelques instructions. Cela a pris du temps, le marketing aidant, on a même pu nommer les différentes périodes de cette évolution (DHTML, Ajax, Web2.0...) et petit à petit des choses se sont mises en place. Ces choses vont toutes dans le même sens : une mise en œuvre plus rapide et plus soignée du modèle MVC (Model View Controler).

Aujourd'hui toujours, javascript a beaucoup de mal à trouver sa place dans le système MVC. Trop souvent employé pour le 'V', heureusement rarement pour le 'M', il ne devrait apparaitre que dans le 'C', et encore. La prochaine grande évolution du web ne semble laisser que peu de place à un langage tel que javascript. Déjà HTML5/CSS3 remplacent avantageusement certains frameworks d'animation d'éléments visuels. Combien de temps faudra-t-il au web pour pouvoir se passer de javascript ?

La grande force d'un langage client puissant et d'une "bidouillabilité" exceptionnelle est qu'elle permet de faire une foultitude de choses d'une foultitude de manières. Mais le développement du web est aussi (et avant tout) un milieu réservé à des professionnels. Avec l’essor de l'internet mobile, les périphériques se multiplient et donc les clients web qui poussent vers une normalité des pratiques car il est toujours plus facile d'interpréter une norme selon ses spécificités (petit écran, tactile, noir et blanc...) plutôt que de compiler un code souvent complexe pour finalement seulement se rapprocher du comportement voulu. C'est pourquoi, même s'il sera toujours amusant à utiliser, le javascript devrait, en toute logique, disparaitre peu à peu de nos clients web.

2011 oct. 12

Bubble Babble, java implementation

J'ai récemment découvert l'algorithme d'encodage Bubble Babble. Pour résumé, c'est un peu comme base64 mais avec un résultat lisible et prononçable par une personne.

Par exemple le petit nuage qui est là: cloud.png

se dirait:

C'est tout de même autre chose.

"deniscope" se dirait "xinak-horuk-nusuk-firyl-benux", c'est un peu plus long mais ça a son charme.

Tout cela pour dire que je viens de terminer une implémentation java que vous pouvez télécharger sur le site d'izzyway ou directement en cliquant sur Bubble Babble Java implementation (binary + source + documentation).

xidid-lynul-fosys-fepol-dined-besyl-honud-bibup-lumed-betok-zital-fomek-camel-berel-hoxax

2010 juil. 19

Rapidement en passant

Izzyway

Izzyway est en pleine réfection et, pour l'occasion, il s'est muni d'un fil RSS à cette adresse: http://feed.izzyway.com. A vos agrégateurs...



2010 janv. 24

Les petits secrets de nos navigateurs: Partie 7

BrowserShot printscreen

Commentaires conditionnés

Le secret du jour n'est pas vraiment un secret puisqu'il s'agit d'une technologie liée à Internet Explorer que l'on appelle les conditional comments.

Je me rappelle la première fois où j'avais vu une page utilisant cet techno, j'avais trouvé la chose on ne peut plus "crade". Bon cela dit, je n'ai pas vraiment changé d'opinion sur ce genre de pratique qui consiste à utiliser quelque chose d'existant (ici, les commentaires) et de les bidouiller pour complétement en changer la nature (ici, ajouter un filtre à navigateur).

Comme nous le montre le test 7, cela ne fonctionne que sous IE (et pour cause, c'est une techno propriétaire) et on peut d'ailleurs voir avec le test browsershot que cela ne fonctionne qu'à partir d'IE 5.

Je n'ai rien a ajouter sur ce secret, si ce n'est qu'une fois de plus c'est le navigateur Internet Explorer qui se distincte des autres.

2009 nov. 25

Les petits secrets de nos navigateurs: Partie 6

BrowserShot printscreen

Faute de frappe

J'avoue avoir hésité à publier ce secret car il n'est vraiment pas extraordinaire. Que se passe t'il lorsqu'une propriété d'un tag est mal écrite? Comme nous pouvons le voir sur le résultat browsershot et grâce au test 6, une fois encore, cela dépend des navigateurs.

Le test 6 comporte une série de tag (un par ligne) avec, à chaque fois, une façon différente d'écrire la couleur de fond.

Ce secret n'est pas si extravagant que cela car tout le monde se doute bien que devant une faute d'écriture de tag, les navigateurs se rattrapent un peu aux branches et font ce qu'ils peuvent pour rentre le tag au mieux. Et c'est exactement ce qui se passe là. La plupart des navigateurs ignorent simplement la propriété mal écrite alors que d'autre essai autant que faire se peut d'évaluer une valeur (pour cette propriété).

Un petit plus tout de même pour ce secret, lié à la dernière ligne du test 6. Cette ligne définit deux fois la même propriété pour changer la couleur de fond: <div style = "background: green" style = "background: blue" />. On peut noter ici qu'aucun des navigateurs testés ne prend la seconde valeur, toutes les dernières lignes sont vertes (ouais, c'est pas évident sur l'image mais vous me faites confiance hein?).

2009 juil. 9

Les petits secrets de nos navigateurs: Partie 5

BrowserShot printscreen

Se réveiller après la bataille

Le secret numéro 1 a déjà révélé un comportement étrange après l'événement onload. Le secret numéro 5 n'en est pas moins étonnant. Plantons le décors.

L'histoire se passe après l'événement onload, et c'est l'histoire d'un tag SCRIPT généré et inséré au DOM. L'histoire raconte que le script contenu dans le tag SCRIPT en question n'est pas automatiquement exécuté comme on pourrait s'y attendre.

Regardons de plus près un exemple avec le test 5, pour simplifier il peut se découper en trois étapes:

  1. Appel d'une méthode pour mettre un fond rouge
  2. L'événement onload appel une méthode
  3. La méthode construit un tag SCRIPT qui contient la même méthode que le point 1 mais avec un fond vert

Le test contient deux façons différentes de construire le tag SCRIPT, à gauche en écrivant littéralement le tag dans la propriété innerHTML d'un tag DIV et à droite en utilisant la méthode createElement. Pour résumer, si le carré est vert c'est que le tag SCRIPT a été exécuté, s'il reste rouge c'est qu'il ne l'a pas été.

Et là, que peut-on voir de nos petits yeux, encore embrumés d'une telle découverte, que les résultats sont pour le moins inconstant (voir le récapitulatif BrowserShots sur l'image ci-dessus). Certains navigateurs font très bien leur boulot et obtiennent les deux carrés verts, pendant que d'autres n'en ont qu'un seul voir pas du tout. On peut noter, pour ce secret, une nette différence (ils sont opposés) entre les deux gros concurrents leader du marché, Firefox et Internet Exporer.

Maintenant, quant à expliquer le phénomène, je me contenterais de faire comme pour les autres secrets, c'est à dire de seulement le constater.

2009 juin 25

Créer un cercle en CSS

J'ai récemment écrit une méthode pour faire un cercle en javascript et CSS:

/**
 * Draw a circle in the given color and Element
 * @param radius radius of the circle
 * @param color color of the circle 
 * @param id id of the Element where the circle will be drawed 
 **/
function drawCircle(radius, color, id){
    var circle = document.getElementById(id);
    if (!circle) return;
    circle.style.width  = (2 * radius) + 'px';
    circle.style.height = (2 * radius) + 'px';
    var index = 0;
    for (index = 0; index < (2 * radius); index ++){
        var line = document.createElement('p');
        line.appendChild(document.createTextNode(' ')); 
        line.style.border = 'none';
        line.style.borderSpacing = '0px';
        line.style.padding = '0px';
        line.style.height = '1px';
        line.style.fontSize = '0px';
        line.style.backgroundColor = color;
        var r = Math.abs(radius - index);
        var width = 2 * Math.round(Math.sqrt(radius * radius - r * r));
        line.style.margin = '0px ' +  (radius - width / 2) +
                            'px 0px ' + (radius - width / 2) + 'px';
        line.style.width = width + 'px';
        circle.appendChild(line);
    }
}

Comme un exemple vaut toujours mieux que mille explications. En voici un:

<div id = "circle"></div>
<script>
      drawCircle(100,  'magenta', 'circle');
</script>

Ce qui donne:

L'utilité de la chose est limitée j'en conviens.

Mise à jour: J'ai reçu des milliers de plaintes me disant que ceci n'est pas un cercle mais un disque. Force m'est de constater que vous avez raison. Voici donc une méthode avec l'exemple qui va bien pour créer un cercle (cette fois).

/**
 * Draw a circle in the given color and Element
 * @param radius radius of the circle
 * @param color color of the circle 
 * @param id id of the Element where the circle will be drawed 
 **/
function drawCircle(radius, color, id){
    var circle = document.getElementById(id);
    if (!circle) return;
    circle.style.width  = (2 * radius) + 'px';
    circle.style.height = (2 * radius) + 'px';
    var index = 0;
    for (index = 0; index < (2 * radius); index ++){
        var line = document.createElement('p');
        line.appendChild(document.createTextNode(' '));
        line.style.borderLeft = 'solid 1px '+color;
        line.style.borderRight = 'solid 1px '+color;
        line.style.borderTop = 'none';
        line.style.borderBottom = 'none';
        line.style.borderSpacing = '0px';
        line.style.padding = '0px';
        line.style.height = '1px';
        line.style.fontSize = '0px';
        var r = Math.abs(radius - index);
        var width = 2 * Math.round(Math.sqrt(radius * radius - r * r));
        line.style.margin = '0px ' +  (radius - width / 2) +
                            'px 0px ' + (radius - width / 2) + 'px';
        line.style.width = width + 'px';
        circle.appendChild(line);
    }
}

Voici l'exemple:

<div id = "circle2"></div>
<script>
      drawCircle(100,  'magenta', 'circle2');
</script>

Ce qui donne:

L'utilité en n'est pas vraiment accrue.

2009 juin 11

Les petits secrets de nos navigateurs: Partie 4

BrowserShot printscreen

Absolutely URL

Je m'apprête à écrire mon quatrième "petit secret de navigateur" lorsque je m'avise de n'avoir pas encore définit le terme. Pallions donc ce grave manquement.


> "petit secret de navigateur":
(expression)
  1. Comportement inattendue d'un navigateur pour une situation qui ne l'est pas moins (inattendue).
  2. Action surprenant d'un navigateur devant une situation d'exception (rare).

Oui, je suis bien conscient que ce genre de définition n'aide pas vraiment, et je vais donc passer à l'exemple qui n'est rien de moins que le secret numéro 4. Voyez vous même dans l'image ci-dessus, à une situation burlesque, certain navigateur donne un résultat inattendue.

Résultat du test 4 avec Internet Explorer

Vous l'aurez sans doute comprit, le secret numéro 4, qui a également sa propre page test, concerne les url relatives. Si le rectangle vert apparait, c'est que l'url est correctement interprétée. Je ne m'étendrais pas plus sur ce secret tellement il est simple, je vous invite à voir les résultats browsershots ci-dessus.

2009 mai 22

Les petits secrets de nos navigateurs: Partie 3

BrowserShot printscreen

Une livre sinon rien

Lorsqu'un navigateur communique avec un serveur, ils utilisent des codes pour être sûr de bien se comprendre. Ces codes sont naturellement les mêmes pour tous et ne permettre guère l'improvisation. Il n'en reste pour autant pas moins qu'une requête HTTP (car c'est bien de cela qu'on parle) peut être constitué d'une entête et de données. En règle général et sauf contre ordre, les navigateurs affiches les données quelques soient le code envoyé.

Pour illustrer ces communications, j'ai créé une petite page test avec les principaux codes HTTP. Comme le montre le détail de la page test ci dessous, chaque code est appelé deux fois. La première fois (à gauche) avec peu de donnée, la seconde (à droite) avec plus de 512 octets de donnée, les deux pages affichant un carré vert.

Code HTTP 200 OK, zoom

Alors pourquoi cette limite des 512 octets? Et bien c'est là que réside le secret (et le jeu de mot foireux du titre également). Si vous regardez de plus près le résultat donné par le site broswershots (ci dessus), le navigateur Internet Explorer réagit différemment aux réponses HTTP en fonction du nombre d'octet envoyé. J'avoue que même si vous pouvez cliquer sur l'image des résultats pour zoomer, la chose n'est pas flagrante, c'est pourquoi, dans ma grande mansuétude, j'ajoute une copie d'écran (ci-dessous) d'une partie de la page test sous Internet Explorer. Détail des résultats d'Internet Explorer Encore une fois, Internet Explorer se démarque des autres navigateurs par un comportement que je n'arrive pas vraiment à comprendre. Concrètement, Internet Explorer n'interprète les données envoyées seulement si elles sont assez nombreuses...

Vous avez une explication?

2009 mai 20

Quand l'ergonomie tue l'ergonomie

Durant mes éparses études, on m'a appris que l'ergonomie était la science qui adaptait les choses à l'Homme (avec un grand H comme dans Femme). Les sites, en règle générale, regorgent de fonctionnalités ergonomiques et bien pensées qui font que nous, pauvres humains, arrivons à les utiliser.

Une petite astuce ergonomique bien connue consiste à rediriger un utilisateur qui utilise un navigateur français (ou autre), vers le site français (ou autre). Cela ne vaut bien entendu que pour les gros sites internationaux qui ont une couverture en plusieurs langues. C'est pratique et ergonomique.

Par contre, à trop vouloir bien faire, parfois, on obtient l'effet opposé à celui escompté. C'est le cas d'AOL. Si vous utilisez un navigateur français (par exemple) et que vous contactez la page aol.com, vous allez automatiquement être redirigé sur la page d'accueil française, et c'est bien. Par contre, vous n'avez pas du tout la possibilité d'aller sur aol.com qui est la page états-unienne d'aol. Même en cliquant sur le lien disponible pour s'y rendre, vous allez encore et toujours être redirigé, ce qui est vraiment mal. Cela mériterait presque un bannissement à jamais de ce site pour faute grave. Cela dit, je ne vais jamais sur aol.

2009 mai 9

Les petits secrets de nos navigateurs: Partie 2

BrowserShot printscreen

No comment

S'il y a quelque chose dont les bloggeurs sont friands, c'est bien des commentaires. Mais cela n'a rien à voir avec notre sujet, je ne parlerais pas des commentaires de blog (même si je les apprécie) mais bel et bien des commentaires HTML.

Un commentaire HTML débute par les caractères "<!--" et termine par "-->", voilà pour la théorie.

Comme je suis joueur, j'ai essayé plusieurs autres façons d'écrire des commentaires sur cette page test. Lorsque le carré rouge apparait, c'est que le commentaire n'est pas pris en compte.

Les tests sont les suivants:

<!--   -->   <!--   --!>
<!--       <--   -->
<!-   -->   <!--   ->

Comme vous pouvez le constater sur l'image des résultats ci-dessus (toujours obtenus grâce au service en ligne BrowserShots), les commentaires HTML n'ont pas toujours le comportement auquel on s'attend.

Si vous oubliez de refermer votre commentaire, ou si vous le fermez mal (selon les navigateurs), il sera automatiquement fermé au prochain caractère supérieur (>) de votre page. Pour reprendre une expression des expressions régulières, on pourrait dire que les commentaires HTML sont "non greedy" (ou "lazy"). C'est à dire que si le tag de fermeture (-->) n'est pas trouvé, le navigateur fermera "au plus tôt" le commentaire, en l'occurrence au prochain caractère supérieur (>).

Cela laisse sans voix non? (ou plutôt sans commentaire).

2009 avr. 27

Les petits secrets de nos navigateurs: Partie 1

Si Champollion m'était conté.

browsershot1.jpg On a tous nos petits secrets, des comportements inavouables que la décence nous fait cacher aux yeux du grand public. Mais voilà, Internet n'est pas constitué seulement du grand public et, immanquablement, tout secret finit par être percé et exploité. Regardons de plus prêt une méthode javascript largement utilisée sur le web: document.write.

Si je me fis à cette documentation en ligne, il est dit:

Do not use the write method or the writeln method on the current document after the document has finished loading unless you first call the open method, which clears the current document window and erases all variables.

Comme je suis taquin, j'ai écrit une petite page pour vérifier cette information. Cette page est constituée de deux pages tests. Chaque page test est constituée d'un gros carré rouge et d'un appel à une méthode qui écrit un gros carré vert. Seul l'appel à cette méthode n'est pas placé au même endroit. Voici le code de la méthode:

 function beGreen(){
     document.write('<div style = "width: 100%; height: 100%; background: green" />');
     document.close();
 }

La première page test appelle la méthode document.write juste après le chargement de la page.

window.onload = beGreen;

L'effet est immédiat, le gros carré vert apparait.

La seconde page test est un peu plus complexe. Le code est également situé dans l'événement onload mais ressemble à ca:

window.onload = function(){    var obj=document.createElement("script");obj.src="onload.js";document.body.appendChild(obj);}

On construit un élément SCRIPT dont la source sera onload.js qui lui contient exclusivement un appel à la méthode beGreen. L'effet n'est pas si immédiat, mais le gros carré vert apparait tout de même, mais... Mais le gros carré vert n'apparait curieusement pas avec tous les navigateurs.

En utilisant l'excellent service en ligne BrowserShots sur la page test, vous obtenez les résultats présentés sur l'image ci-dessus (vous pouvez cliquer sur l'image pour la voir en plus grand). Que passa? Il y a encore du rouge avec les navigateurs Internet Explorer? Pour des raisons qui m'échappent Internet Explorer se refuse à écraser le document sur la seconde page test. Alors pourquoi? Et bien, pour tout dire, je n'en sais rien...

2009 avr. 20

izzyway.com, tech'it izzy

izzyway Il ne vous a surement pas échappé qu’izzyway était un peu partout dans ce site. Je n’ai pourtant pas réussi à garder les services que j’avais mis en place il y a deux ans. Il y a une telle pollution dans les envois d’email que les emails envoyés à cette époque n’arrivaient jamais à destination, bloqués par un serveur zélé qui les considérait comme SPAM.

Aujourd’hui izzyway existe toujours et propose des services un peu moins sophistiqués mais rigolos tout de même (pour ceux qui ont de l’humour).

  • Server Information : Cette page résume les principales informations qu’un serveur peut utiliser quand vous, client, vous le contactez. Sinon vous pouvez toujours utiliser BrowserHawk qui est bien plus exhautif.
  • Navigation introspection : Ce service énumère les différents objets fournis par votre navigateur, il détaille également les méthodes et les propriétés. Cela peut être utile pour comparer les différents navigateurs.
  • Broken links : Ce service permet de lister les liens défectueux d’un site ou d’une page. Exactement ce que propose aussi Link checker en somme.
  • HTTP Method: Le service, que je trouve le plus marrant, permet de créer une requête http et de l‘exécuter. La requête sera exécuter du serveur (free) et la réponse sera alors affichée sans aucune modification (même les chunks apparaissent tels quels).

Le site est en anglais car j'adore me la péter.

J’ajouterais sans doute, au fil du temps, des nouveaux services.

2009 avr. 16

Silverlight, la lumière est belle

On peut dire que Microsoft sait trouver les arguments pour augmenter les utilisateurs de Silverlight. Cela s'appelle PlayboyArchive, ça ne fonctionne qu'avec le plugin Silverlight et ça porte bien son nom ("PlayboyArchive" pour ceux qui suivent pas). Bon évidemment ce n'est pas directement lancé par Microsoft mais c'est tout de même un joli coup marketing.