François Ziserman : Intelligence Artificielle, moteur de recommandations personnalisées pour le ecommerce, big data, marketing prédictif, moteur de personnalisation, entrepreneuriat
L’idée générale est que la France, ou plus largement l’Europe, devraient avoir une dépendance limitée, contrôlée, dans le domaine du numérique. Continuer la lecture →
Je voulais donc voir, tester si on pouvait construire un ordinateur, à partir d’un Arduino.
Je l’ai fait.
Arduino ordinateur complet, avec l’Arduino Mega, le clavier, l’écran, le composant Horloge et le composant lecteur de carte SD
J’avais en tête de faire un ensemble d’articles, avec une progression “pédagogique”, mais ce n’est pas très compatible avec mon agenda actuel… Je vais donc faire un article de résumé sur ce sujet. Si vous avez des questions, j’y répondrai avec plaisir.
donc un ordinateur, il faut un processeur, un clavier et un écran.
Une horloge, pour associer la date et l’heure aux programmes sauvegardés.
Une fois notre matériel défini, il faut passer à la couche logicielle, et en particulier au langage de programmation.
Mon idée a été de partir sur un pseudo assembleur, ou chaque instruction est composé :
D’une action
Eventuellement d’un paramètre
L’environnement sera composé d’un espace mémoire (que j’appellerai RAM par la suite) et de trois registres, nommés A B et C.
Une action est une instruction simple, comme :
Déplacer une valeur de la RAM vers un registre (ou l’inverse)
Afficher un caractère à l’écran
Faire une opération, comme, par exemple une addition. Dans ce cas, l’opération se fait de la manière suivante : C = A + B
Définir un Label : c’est une adresse qui sera ensuite utilisée pour un branchement vers cet endroit du programme
Faire un saut vers un label. Un saut peut être inconditionnel, conditionnel (si un registre vaut 0 par exemple). J’ai ajouté également la notion de Jump Sub, qui permet d’aller à un label, puis de revenir juste après le Jump Sub, avec un Return.
… On dispose en tout d’une centaine d’instructions…
Le langage est stocké dans l’EEPROM de l’Arduino. En effet, un des problèmes de l’Arduino est la place très limitée de la mémoire vive. Stocker le programme en EEPROM permet donc d’économiser la place mémoire, et également au passage de rendre persistant le programme, même quand on éteint l’Arduino.
La RAM est composée de deux parties :
Une première partie de 1k octets, est stockée en mémoire vive
Une deuxième partie, également de 1k, stockée en EEPROM
La RAM est utilisée pour :
Enregistrer des variables applicatives
Gérer la mémoire de l’écran
Gérer une pile
La pile est en fait une double pile :
Une pile est utilisée pour enregistrer l’adresse du retour, suite à un JUMP SUB (on va donc se débrancher à un label donné, puis revenir poursuivre l’exécution)
Une pile applicative, pour stocker des variables
La petite astuce a consisté à utiliser le même espace mémoire, pour stocker les deux piles, chaque pile utilisant une extrémité de l’espace réservé.
L’ordinateur s’utilise de la manière suivante :
On est soit en mode Exécution, soit en mode Edition
En mode Edition, on édite le programme, en tapant le code de l’action, et éventuellement le code du paramètre, avec le clavier hexadécimal donc. L’éditeur permet de faire défiler le programme, ligne à ligne, ou 4 lignes par 4 lignes ;
En mode Exécution, on peut lancer l’exécution, ou alors passer en mode Pas à pas, et exécuter le programme ligne à ligne pour voir ce qui se passe et éventuellement débugger. Le mode exécution affiche sur la première ligne la valeur des 3 registres A B C, et affiche en dessous le programme en cours d’exécution ;
En mode Edition, on peut également gérer les programmes stockés sur la carte SD. Le programme courant est automatiquement sauvegardé avec CURRENT.car comme nom. On peut dupliquer un programme, le renommer, ou charger un programme pour l’exécuter. Petite subtilité : pour taper le nom d’un programme, il faut saisir la valeur hexadécimal de chaque caractère…
Le mode Edition est plutôt sympa, car l’interface affiche l’instruction, dès qu’on a tapé son code.
Les programmes sont stockés sur carte SD en mode texte “Pseudo assembleur”, et sont donc assez lisibles. Cela permet d’éditer ces programmes depuis un ordinateur, puis de les copier sur la carte SD (les programmes doivent être dans le répertoire PRGM de la carte SD avec comme extension “CAR”).
Voici un exemple de programme stocké sur la carte SD :
SCR_ON # Basculer en mode SCREEN LABEL 0040 # LOOP SCR_CLR # Effacer l'écran PRT_TM # Afficher l'heure SCR_NL # retour à la ligne PRT_DT # Afficher la date JUMP 0040 # LOOP
Le code est séparé en différentes classes. Voici les principales classes :
Engine est le point d’entrée principale, pointant vers l’Editor (l’éditeur) et le Program ;
Editor est la classe en charge de l’édition ;
Program est la classe en charge de l’environnement d’exécution. Cette classe contient le grand “switch” permettant d’exécuter une ligne du programme ;
Instructions est la classe gérant le programme lui même, c’est à dire la liste des instructions.
Voici quelques remarques suite à cette expérience de programmation sur Arduino :
La mise au point des programmes est assez délicate, car les erreurs ne sont en générale pas gérée, et génèrent des comportements aléatoires du processeur…
Pour la mise au point, j’ai souvent utilisé une classe Log, permettant d’afficher sur le moniteur série des messages.
L’espace mémoire est très limité, il faut en particulier mettre toutes les constantes en EEPROM.
Dans le doc sur le langage, vous trouverez également une page pour imprimer les étiquettes à coller sur les touches des claviers :
Voila, ceux qui veulent essayer doivent avoir a peu près ce qu’il faut pour le faire 😉
Cela fait des années que des lois s’empiles les unes sur les autres, pour contraindre l’usage des cookies.
L’idée de l’Europe, reprise par chaque pays, est d’obtenir le consentement des clients, avant de collecter leurs données.
Comme les cookies sont le meilleur moyen pour tracer un internaute, les lois obliges les annonceurs à ajouter des popups, pour demander l’avis du client avant de le tracker. Continuer la lecture →
La crise du Covid a accéléré le processus de digitalisation : Nous tous, consommateurs, enfermés chez nous, avons acheté en ligne, et c’était souvent la seule façon de faire nos courses.
Au delà de cette période particulière, le ecommerce continue sa perpétuelle révolution : le mobile représente aujourd’hui plus de la moitié du trafic : le smartphone nous accompagne, partout, tout le temps, et c’est devenu un véritable auxiliaire de vie.
Bien sûr, le taux de transformation sur mobile est bien plus bas que sur l’ordinateur, mais l’usage n’est souvent pas comparable : le mobile est, plus que l’ordinateur, un élément clé de l’expérience omnicanal :
Les clients vont sur le mobile, regardent les produits, comparent, cherchent des informations complémentaires, avant d’aller en magasin, ou même pendant leur visite en magasin.
Une autre tendance est la volonté, de plus en plus forte, de consommer local. Là aussi, la crise du Covid est apparue comme un signal, pour nous rappeler que rien n’est éternel, et que la planète ne peut plus être traitée n’importe comment.
Bien sûr, entre le déclaratif (ce que disent les sondages) et les chiffres réels, c’est le grand écart : on veut tous faire du bien à la planète, mais au moment de faire ses courses, si on nous propose un produit 5 fois moins cher, il est difficile de résister…. mais cela n’empêche pas les mentalités d’évoluer, et on sent bien qu’on est à un moment de bascule.
Dans ce contexte, une solution de personnalisation (comme Target2Sell) est plus que jamais un élément clé de cette transformation.
Le client a besoin d’une expérience cohérente, sur tous les points de contact (ordinateur, mobile, magasin).
Prenons un exemple : j’ai regardé des produits sur mon smartphone. Quand je retourne sur le site depuis mon ordinateur, grâce à une solution de personnalisation, le site marchand affiche ces produits dès la page d’accueil. J’ai donc une expérience cohérente et personnalisée entre ma navigation mobile et mon ordinateur.
Sur le mobile, le client est dans un contexte particulier. En mobilité, le client a besoin de trouver très vite ce qu’il cherche, et l’écran est bien plus petit que celui de l’ordinateur. En particulier sur les pages affichant des listes de produits, le client aura besoin d’avoir les “bons produits” en haut de la liste. Sur le mobile plus qu’ailleurs, une solution de personnalisation est indispensable pour accélérer la recherche du produit qu’il souhaite acheter.
Enfin, le moteur de personnalisation peut favoriser les produits locaux, soit parce que c’est le choix du marchand, soit parce que c’est ce que souhaite le client (soit pour les deux raisons combinées 🙂 ).
L’avenir du commerce est donc omnicanal, mobile, local, et personnalisé !
ça fait un bout de temps qu’on s’y attendait : Apple vient d’annoncer le changement des puces, d’Intel vers les puces conçues par Apple et basées sur une architecture ARM, pour les ordinateurs Mac.
Même chose pour Facebook, ou Youtube, ou encore pour les résultats de recherche de Google (qui sont donc contextualisés, pour chaque internaute).
C’est aussi le cas d’Amazon, et de Netflix (c’est aussi le cas de tous les marchands qui utilisent une solution de personnalisation comme Target2Sell bien sûr… C’est donc un sujet qui me concerne tout particulièrement).
Comme on passe beaucoup de temps sur ces services, on peut donc dire qu’on voit beaucoup de contenus recommandés par ces algorithmes.
Alors, quel est l’impact de ces technologies sur notre société ?
Pour un site marchand, avoir des pages qui se chargent très vites est un vrai critère pour “vendre plus”, ou, pour le dire d’un point de vue client, pour “donner aux clients une expérience positive”.
Comme toujours sur les sujets commerciaux, ce critère est un critère parmi d’autres. Pour offrir une bonne expérience, il faut être bon sur plusieurs sujets clés comme : pertinence de l’offre, vitesse de chargement des pages, qualité des contenus, SEO, qualité du moteur de recherche, processus achat fluide, …
Il faut voir ça comme une compétition de saut en hauteur par exemple. Le résultat est binaire : on passe ou pas. Mais les critères pour passer l’obstacle sont nombreux : préparation, qualité des chaussures, météo, … Il faut être bon partout pour passer l’obstacle.
La vitesse de chargement des pages est donc l’un de ces critères, et c’est donc très important de bien traiter ce sujet. C’est important pour les clients (qui sont pour la plupart sur smartphone, ou ce critère est encore plus important) et pour le référencement : google pénalise les sites qui se chargent trop lentement.
Pour autant, accélérer le chargement des pages est complexe : c’est un sujet transversal.
Ce que je veux dire, c’est que ce n’est pas un sujet qu’on peut traiter à la fin ou indépendamment des autres activités : ce sujet concerne des métiers différents, de l’architecture du site marchand, à la réalisation de la couche front, en passant par l’hébergement, …
Au début, l’idée est simple : les différentes pages (page d’accueil, page catégories, ….) doivent s’afficher “rapidement”, pour que le client n’ai pas le sentiment d’attendre devant une page blanche, en cours de chargement.
Il existe de nombreux outils pour mesurer ce temps de chargement.
Comme on le voit, la mesure de qualité de chargement d’une page est en fait rapidement assez technique, je vous encourage a tester un tel outil, avec différentes pages, et de regarder ce que propose PageSpeed, comme indicateurs et comme informations pour améliorer les choses.
Le temps de chargement est notamment lié à :
La complexité et la performance des bases de données. Un copain expert commence toujours ses analyses par l’audit des bases de données. On explique en général une bonne partie des ralentissements à ce niveau là. Si une page est construite avec un grand nombre de requêtes, et si il y a des requêtes “lourdes”, on tient là un très bon candidat pour réduire fortement le temps de chargement des pages ;
La qualité de l’intégration : une page Web peut être composé de dizaines d’appels HTTP, de plusieurs natures : contenus HTML, CSS, javascript et médias. Plus on a d’appels, plus la page est longue à charger. Au delà du nombre d’appels, on doit aussi analyser l’ordre dans lequel les éléments sont chargés, qui permettent (ou pas) d’afficher les premiers éléments de la page rapidement ;
La gestion des médias : une page web contient des dizaines d’images. On peut regrouper les images (sprite) et les compresser.
Utilisation de solution de cache en ligne, comme Akamai.
Réduire au maximum le temps de chargement des pages doit donc être un chantier à travailler. Ce sujet va être intéressant, car il va impacter pas mal d’équipes, et va probablement challenger l’organisation même de l’entreprise. Exemple classique : un site bien fait va nécessiter la mise en place d’une vrai charte graphique, qui sera appliqué sur l’intégralité du site. La mise en place d’une telle charte demande une certaine maturité.
Ce chantier va prendre du temps, et en parallèle, c’est en général une bonne idée d’utiliser une solution tierce pour accélérer le temps de chargement des pages sans délai.
Il s’agit de solutions qui se positionnent entre le client et le site marchand, comme un proxy.
La requête du client est donc traité par la solution d’accélération, qui va soit répondre directement avec du contenu pré-calculé (en cache donc), soit aller chercher les infos sur le site marchand.
Fasterize : L’entreprise existe depuis pas mal d’années, et est utilisé par de nombreux sites marchands. La solution marche très bien. Il faut dire qu’elle a été montée par un vrai pro du ecommerce, Mr Stéphane Rios, qui fut le CTO de Rue Du commerce. Il connait donc son sujet 🙂
Ce sujet, de l’accélération via du cache logique, à un lien avec ce que propose les solutions de personnalisation, comme Target2Sell. En effet, ce que propose un moteur de personnalisation, c’est de proposer du contenu spécifique pour chaque visiteur. Ces contenus ne peuvent donc pas, par définition, être mis en cache.
Il faut donc être attentif à bien traiter ce point quand on met en place une solution de personnalisation avec une solution de “cache applicatif”.
Chaque entreprise a son histoire, et cette histoire est importante, parce qu’elle défini sa nature, son ADN.
Prenons par exemple Hybris. A la base (1997), Hybris était un PIM, très orienté multi-canal. ensuite, pour élargir son offre, Hybris a racheté iCongo (en 2011), iCongo étant un CMS. Donc historiquement, Hybris n’est pas un CMS, et ça se sent dans le produit. Le “centre de gravité” de l’offre est le PIM.
Le cas de l’offre Salesforce est différent, puisqu’elle est basée sur Demandware, qui était bien un CMS, conçu pour être un CMS adapté aux “gros marchands”, en mode SaaS. Là aussi, ça se sent : l’offre est très “front”, et bien faite pour la partie CMS, la tuyauterie pour gérer tous les aspects back office étant bien moins développé.
Enfin, Proximis est un troisième exemple différent. Pour Proximis, depuis le début, le sujet est l’omnicanal, ce qu’ils appellent le commerce unifié. Le sujet, c’est de proposer un socle commun, pour présenter une offre cohérente aux clients, quelque soit le canal d’achat utilisé. Un des élément clé est une gestion intelligente du stock, sur les différents points de ventes. Le “centre de gravité” de Proximis est donc plus dans une logique de middleware, entre l’ERP du marchand, et les différents canaux de ventes.