Perceptual Speed Index : définition et axes d’amélioration

Introduction

Le Perceptual Speed Index est un indice de performance de chargement de page qui indique à quelle vitesse le contenu d’une page commence à être visible. Plus le score est est proche de zéro, mieux c’est. L’outil d’audit Lighthouse utilise SpeedLine pour tester cet indice.

Pourquoi améliorer cet indice me demandez-vous ?

"Une étude Google montre la corrélation évidente entre le temps de chargement et le taux de rebond : pour un temps de chargement mobile qui passe de 1 seconde à 10 secondes, le taux de rebond augmente de 123%. Plus encore, 1 visite sur 2 est abandonnée au-delà de 3 secondes de chargement sur un site mobile en 3G." - source

Si vous en déduisez la même chose que moi, réduire la perception du temps de chargement fait baisser le taux de rebond et donc aide à l’amélioration du taux de conversion. Lire la suite de « Perceptual Speed Index : définition et axes d’amélioration »

Vous avez aimé ? Partagez 🙂

Auditer la performance d’une page web avec Lighthouse

Lighthouse est un outil open-source et automatique fourni par Google pour améliorer la qualité des pages Web, notamment les temps de chargement. Vous pouvez l’exécuter sur n’importe quelle page de votre site web, même celles nécessitants une authentification pour s’afficher. L’outil fournit différents audits dont :

  • Performance globale
  • Accessibilité
  • PWA (Progressive Web Apps)

Vous pouvez voir un exemple d’audit que j’ai réalisé ici (site leboncoin) : http://etienne-lesaffre.fr/exemples/www.leboncoin.fr_2017-10-03_15-04-23.html

Il existe trois méthodes pour exploiter Lighthouse. Tout d’abord, une extension pour le navigateur Chrome : Chrome DevTools. Vous pouvez également utiliser l’outil en lignes de commande ou tant que module Node. Vous indiquez à Lighthouse une URL qui exécute ensuite une série de tests et audits sur la page. Un rapport complet est ensuite généré en indiquant les scores et résultats de tous les éléments testés. Lire la suite de « Auditer la performance d’une page web avec Lighthouse »

Vous avez aimé ? Partagez 🙂

Machine Morale : dilemmes moraux pour les machines intelligentes

Initiative intéressante. Le MIT propose avec le site http://moralmachine.mit.edu/hl/fr de juger des cas moraux devant lesquels des machines intelligentes (principalement des voitures autonomes) pourraient être confrontées. En dernier recours, faut-il foncer dans un mur et tuer les occupants de la voiture ou dévier la trajectoire et écraser un piéton ? Lire la suite de « Machine Morale : dilemmes moraux pour les machines intelligentes »

Vous avez aimé ? Partagez 🙂

Centrale domotique avec Raspberry et Home Assistant

Introduction

Home Assistant est une solution open source pour domotiser votre habitat. Il en existe beaucoup d’autres comme Jeedom ou Domoticz. Néanmoins, pour les avoir essayer, je trouve que Home Assistant est la meilleure solution du moment. Simple, léger, très facile à prendre en main. Comme pour Jeedom, il existe de nombreux « composants » que l’on peut activer pour faire cohabiter différents appareils. Lire la suite de « Centrale domotique avec Raspberry et Home Assistant »

Vous avez aimé ? Partagez 🙂

Configurer un Raspberry Pi sans clavier ni écran

La plupart du temps, surtout sur des projets DIY ou IoT, le Raspberry Pi est utilisé sans écran ni clavier. C’est donc une contrainte de devoir sortir un vieux clavier usb, un cable HDMI et de brancher le tout sur un écran ou une télévision. Il existe désormais une méthode pour activer le SSH et configurer le WIFI avant même la première utilisation de votre petit ordinateur préféré. Lire la suite de « Configurer un Raspberry Pi sans clavier ni écran »

Vous avez aimé ? Partagez 🙂

Introduction aux ChatBots et l’ANI : Artificial Narrow Intelligence

Definition

L’Artificial Narrow Intelligence est une intelligence artificielle qui se concentre sur une seule tâche contrairement à l’AI (Artificial Intelligence) qui est une machine avec la capacité d’appliquer l’intelligence à n’importe quel problème, plutôt qu’un problème spécifique.

Siri est un bon exemple d’ANI. Siri opère dans une gamme limitée prédéfinie, il n’y a pas d’intelligence véritable, pas de conscience de soi.

Les chatbots, ou agents conversationnels, sont les interfaces permettant d’exploiter une ANI. Lire la suite de « Introduction aux ChatBots et l’ANI : Artificial Narrow Intelligence »

Vous avez aimé ? Partagez 🙂

Lancement du Raspberry Pi Zero W : wifi et bluetooth intégrés

La fondation Raspberry a lancé fin février, 5 ans après la sortie du premier modèle Pi, une version « wireless » du Pi Zero. Il se nomme Zero W, avec vous l’avez deviné, W qui signifie Wireless. En effet, cette nouvelle mouture embarque la connectivité wifi et bluetooth nativement. La puissance reste la même que sa version précédente. Le tout pour £9 seulement.

Principales caractéristiques

  • 802.11 b/g/n wireless LAN
  • Bluetooth 4.1
  • Bluetooth Low Energy (BLE)
  • 1GHz, CPU simple coeur
  • 512MB RAM
  • Mini HDMI et USB On-The-Go ports
  • alimentation par Micro USB
  • HAT-compatible 40-pin header
  • Composite video
  • connecteur caméra CSI

Avec ceci, de nouveaux boitiers officiels sont également disponibles. Ils offrent différentes ouvertures sur le couvercle selon l’utilisation que vous désirez faire de votre nano ordinateur.

Ce nouveau modèle promet donc de facilité encore un peu plus la mise en oeuvre de projets IoT ou domotique. Le tout encore une fois pour un coup très maitrisé.

En bonus, voici un comparatif de la consommation électrique de chaque modèle de la famille Raspberry (tests réalisés par RaspiTV) :

 

Vous avez aimé ? Partagez 🙂

Reconnaissance d’objets avec TensorFlow

TensorFlow est une librairie pour le machine learning et l’intelligence logiciel. Nous allons aujourd’hui l’utiliser avec le language Python mais vous pouvez également l’utiliser en C.

Vidéo de présentation :

Je suis sous Mac, et pour installer la librairie j’ai utilisé les commandes suivantes :

$ sudo easy_install pip

$ sudo easy_install --upgrade six

Ensuite, il faut choisir la bonne version à installer :

# Ubuntu/Linux 64-bit, CPU only, Python 2.7 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0-cp27-none-linux_x86_64.whl # Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 7.5 and CuDNN v5. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0-cp27-none-linux_x86_64.whl
# Mac OS X, CPU only, Python 2.7: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0-py2-none-any.whl
# Mac OS X, GPU enabled, Python 2.7: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0-py2-none-any.whl
# Ubuntu/Linux 64-bit, CPU only, Python 3.4 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0-cp34-cp34m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 7.5 and CuDNN v5. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0-cp34-cp34m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, CPU only, Python 3.5 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0-cp35-cp35m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 7.5 and CuDNN v5. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0-cp35-cp35m-linux_x86_64.whl
# Mac OS X, CPU only, Python 3.4 or 3.5: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0-py3-none-any.whl
# Mac OS X, GPU enabled, Python 3.4 or 3.5: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0-py3-none-any.whl

Il ne reste plus qu’à installer. Selon que vous êtes sous Python 2 ou 3, voici les commandes :

# Python 2 $ sudo pip install --upgrade $TF_BINARY_URL

# Python 3 $ sudo pip3 install --upgrade $TF_BINARY_URL

Nous sommes maintenant prêts pour faire un premier test avec une photo ou une image que vous aurez trouvé sur internet.

Allons dans le répertoire ou la librairie est installée. Dans mon cas, elle se situe ici (sous Mac) :

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tensorflow/

Vous pouvez situer l’emplacement en utilisant la commande suivante :

locate tensorflow

Cette commande, qui fonctionne aussi sous Mac ou Linux, vous liste les emplacements ou « tensorflow » est trouvé. Déplacez vous jusqu’au bon répertoire. Tapez ensuite cette commande pour faire un test :

sudo python classify_image.py

Vous devriez obtenir le résultat suivant :

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.88493) indri, indris, Indri indri, Indri brevicaudatus (score = 0.00878) lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00317) custard apple (score = 0.00149) earthstar (score = 0.00127)

Par défaut, c’est une image de panda qui est identifiée. Nous allons pouvoir maintenant tester avec nos propres photos. J’ai pris une photo chez moi. Il s’agit d’une guitare et la photo est de qualité plutôt moyenne.

La voici :

guitare

C’est assez sombre, et franchement je ne m’attendais pas à ce que le script puisse reconnaitre un objet sur cette photo. Et pourtant …

En tapant la commande qui suit, Tensorflow a su reconnaitre l’objet principal de la photo :

sudo python classify_image.py --image_file /Users/maxduke/Desktop/test.jpg

test.jpg est évidemment le fichier jpeg de ma photo. Le script m’a renvoyé le résultat suivant :

electric guitar (score = 0.96822)

acoustic guitar (score = 0.00692)

stage (score = 0.00334)

pick, plectrum, plectron (score = 0.00106)

microphone, mike (score = 0.00057)

Comme vous pouvez le constater, le script est certain à 96% qu’il s’agit d’une guitare électrique. C’est presque incroyable mais ça fonctionne. J’ai fait une cinquantaine de tests, et TensorFlow a retrouvé 2 fois sur 3 le bon objet 🙂

Ca laisse beaucoup de place à l’imagination. Comment se servir d’un tel script ? Je suis en ce moment en train de concevoir un robot avec un Raspberry, et ça me donne pas mal d’idées … Et si mon robot pouvait reconnaitre mon chat et ainsi pouvoir interagir avec lui ?

Je reviendrais certainement avec d’autres articles sur le sujet. En attendant, amusez-vous bien.

Vous avez aimé ? Partagez 🙂

C.H.I.P : nano ordinateur complet à 9 dollars

Les nano ordinateurs ont le vent en poupe. Les plus connus et les plus vendus sont les Arduino et Raspberry Pi. Un petit nouveau nommé C.H.I.P devrait connaitre le succès avec son prix de vente à 9 dollars. Presque le double du Pi Zero me direz-vous … et c’est vrai. Mais vous avez beaucoup plus. Dans à peine 4cm x 6 cm vous aurez :

  • Processeur 1 Ghz
  • Processeur graphique Mali 400
  • 512Mo de RAM DDR3
  • 4Go de stockage interne
  • Wifi / Bluetooth 4.0
  • Port USB
  • Sorties aux normes I2C, SPI, UART et GPIO

Il vous faudra ajouter une petite carte d’extension pour un port HDMI (15 dollars) ou VGA (10 dollars). Une protection plastique vous coutera 2 dollars. Le tout prêt à fonctionner car le système d’exploitation est déjà installé. Il s’agit d’un noyau linux optimisé pour le Chip. Vous pouvez le pré-commandé dès aujourd’hui, sa livraison est prévue pour novembre 2016.

 

 

Vous avez aimé ? Partagez 🙂

Construire son robot à base de Raspberry Pi – étape 2 : les moteurs

Etape 1 : construire le châssis
Etape 2 : les moteurs

On l’a vu dans un premier article, construire le châssis du robot est une chose aisée. Voyons maintenant comment faire fonctionner les quatre moteurs. Deux solutions s’offrent à nous.

Faire fonctionner les moteurs

La première, c’est l’utilisation des ports GPIO sans carte de contrôle de moteurs. On branche directement les moteurs sur les ports. Ça fonctionne mais ça limite l’utilisation qu’on peut faire de notre robot. C’est parfait pour faire quelques tests et se faire la main avec le code. On peut en effet facilement démarrer soit en bash soit en python avec la librairie RPi.GPIO.

raspberry-pi-zero-gpio

Si vous avez déjà lu un article sur comment allumer une LED avec votre Raspberry, c’est exactement la même chose. Le problème est que tel quel, vous ne pourrez pas gérer le sens de rotation des moteurs électriques. En effet, les moteurs classiques DC (à courant continu) peuvent fonctionner dans les deux sens de rotation. Il n’ont pourtant que deux fils pour la plupart. Il font donc ajouter en plus du branchement au ports GPIO, un montage électronique pour pouvoir gérer le sens de rotation. Sans ça, votre robot n’ira qu’en marche avant …

Principe de fonctionnement d’un moteur à courant continu :

moteur-courant-continu

Sur ce type de moteur, en inversant les polarités, on inverse également le sens de rotation. Facile 🙂

ZeroBorg : la carte de contrôle tout en un

zeroborg-piborgLa seconde option est d’utiliser une carte de contrôle. Vous en trouverez à tous les prix mais mon choix s’est porté sur le ZeroBorg de PiBorg. Le modèle KS1 pour être précis. Pour à peine plus de 20 euros, il vous permet de contrôler jusqu’à 4 moteurs DC ou 2 moteurs pas à pas. Ca tombe bien, j’ai quatre moteurs à faire fonctionner. Le grand plus, c’est une librairie python avec plusieurs scripts d’exemples qui sont disponibles. Vous les trouverez à cette adresse : https://github.com/piborg/zeroborg

La voici branchée sur mon robot :

robot-complet-dessus

Nous allons maintenant voir comment procéder, depuis l’activation du bus I2C aux premiers tours de roues 🙂

Tout d’abord, il faut savoir que la ZeroBorg utilise le Bus I2C des ports GPIO. Il faut donc l’activer si ce n’est pas déjà fait (par défaut c’est désactivé). Pour faire la manipulation, taper dans un terminal les commandes suivantes (on commence par avoir un système à jour) :

sudo apt-get update
sudo apt-get upgrade

Accessoirement, installer les outils de contrôle de fonctionnement I2C :

sudo apt-get install python-smbus
sudo apt-get install i2c-tools

Maintenant, on peut passer à l’activation du bus :

sudo raspi-config

Vous arrivez sur la fameuse fenêtre bleue :

raspi-config-advanced_options

A l’aide des flèches, descendez jusqu’à l’option 8 « Advanced Options » et appuyez sur entrée.

La fenêtre des options avancées s’ouvre, sélectionnez « A7 I2C » :

raspi-config-i2c

On vous demande alors si vous souhaitez activez I2C. On répond « yes » !

raspi-config-enable_i2c

On vous demande ensuite si le module doit être chargé lors du boot. Encore une fois on répond « yes ».

raspi-config-load_i2c_module_at_boot

Vous revenez ensuite au menu principal, utiliser la touche tabulation pour quitter. Vous devez maintenant rebooter pour que les changements soit pris en compte. On maintenant prêt à installer et utiliser notre ZeroBorg.

Branchements électriques de la carte

Le branchement au Raspberry est facile. Soit on utilise 6 câbles femelle/femelle soit on soude via les PINS le ZeroBorg sous le Raspberry. Personnellement, j’ai choisi le câblage. Voilà notre carte branchée au ports du bus I2C.

zeroborg-branchement

Il reste à l’alimenter. On peut y faire passer entre 2,7 et 10,8 volts. C’est parfait. On va utiliser la sortie 3,3 volts GPIO (broche 17, voir schéma tout en haut de page).

Broche 17 : 3,3 volts
Broche 20 : GND (masse)

zeroborg-alimentation

Nous voilà désormais complètement câblé … non, il reste les moteurs ! Prenez votre petit tournevis plat, il y en a pour 1 minute.

Il suffit de suivre l’exemple de la photo ci-dessous :

zeroborg-cablage-moteurs

Ce coup ci on est prêt. Nous pouvons passer au code 🙂

Comme expliqué en début d’article, le ZeroBorg a une libraire Python créée spécialement pour. Cela facilite grandement la prise en main puisqu’on faire tourner un moteur en quelques lignes de code et en moins de 5 minutes.

Pour ce faire, enchainez les commandes suivantes dans votre terminal :

sudo mkdir /zeroborg
cd /zeroborg
sudo wget http://www.piborg.org/downloads/zeroborg/examples.zip
sudo unzip examples.zip
sudo chmod +x install.sh
./install.sh

Passons au code, en créant un script de test :

sudo nano test.py

Copiez / coller ensuite ce code :

import ZeroBorg
import time
ZB = ZeroBorg.ZeroBorg()
ZB.Init()
ZB.SetMotor1(0.5)
time.sleep(4)
ZB.SetMotor1(0)
exit()

Le code ci-dessus fait fonctionner le moteur 1 à 50% de sa vitesse maximale pendant 4 secondes avant de se couper. Vous l’aurez compris, en ajoutant ZB.SetMotor2(1), le second moteur tournera à 100%.

Une valeur négative le fera tourner en sens inverse. Par exemple pour faire tourner les moteurs 1 et 2 en sens inverse, le code sera :

import ZeroBorg
import time
ZB = ZeroBorg.ZeroBorg()
ZB.Init()
ZB.SetMotor1(-1)    # rotation inverse moteur 1
ZB.SetMotor2(-1)    # rotation inverse moteur 2
time.sleep(4)
ZB.SetMotor1(0)     # arret moteur 1
ZB.SetMotor2(0)     # arret moteur 2
exit()

Facile non ? et bien voilà, nous savons faire tourner nos moteurs en quelques lignes de code. A vous de jouer maintenant 🙂 Utilisez les quatre moteurs, marche avant, marche arrière.

Toutes les fonctions disponibles sont expliquées ici : https://www.piborg.org/zeroborg/examples#api

Pour stopper l’ensemble des moteurs en une ligne :

ZB.MotorsOff()

Pour tourner à droite ou à gauche, il suffit de faire fonctionner les deux moteurs d’un même côté. Par exemple, pour tourner à droite, on fera tourner uniquement les deux moteurs situés sur la droite. Inversement pour tourner à gauche.

Dans le prochain article, nous verrons comment contrôler notre robot avec les flèches du clavier et nous ajouterons des leds et un klaxon.

 

 

 

 

 

Vous avez aimé ? Partagez 🙂