« Dans combien de temps passe mon bus? La réponse en temps réel… », pas si simple !

Depuis quelques jours, il est indiqué, à grand renfort de couleur rouge bien visible, sur le site des TCL (Transports en Commun Lyonnais), qu’on « peut savoir dans combien de temps passe mon bus », grâce à un widget installable :

Une version Windows (ou OS X) est téléchargeable, récupérons-la : moi qui pensais y trouver un petit « assistant visuel » comme le propose E-Como (La Poste) ou Vente Privée, je me retrouve finalement avec un « Widget Windows ».

Au delà du choix technique un peu étrange, le contenu du widget est quant à lui concis et efficace. Une fois connecté avec votre compte TCL.fr, vous pouvez rajouter des arrêts favoris pour en consulter les prochains passages :

Et un accès rapide à l’info trafic est proposé :

Cependant, quelques bugs fâcheux gênent un peu l’utilisation quotidienne :

  • une fois la liste des prochains passages affichée, il est impossible de revenir à l’écran d’ajout d’un arrêt. On doit alors se déconnecter puis revenir, pour arriver à enfin l’afficher;
  • de la même manière, une fois les détails d’une perturbation du trafic affichés, il est impossible d’en obtenir la liste complète.

Et un problème subsiste : on reste ici sur des technologies très spécifiques (widgets, que pour certains OS, etc).

Pourquoi ce choix technologique ne me parait pas adapté, à l’heure de l’accessibilité et de l’internet pour tous ?

  • Tous les postes sous Windows XP en sont privés (pas de barre de widgets avant Vista).
  • Si vous n’utilisez pas cette fameuse barre (c’est mon cas), vous ne pouvez bénéficier de manière efficace de ce widget (en effet, il passe devant les icônes du bureau si vous le déplacez).
  • Si vous êtes sur un système d’exploitation hors des deux proposés, il n’est pas possible d’en bénéficier (par exemple sous Linux).

Vu la taille du widget (environ 300 px de large sur 400 de haut), on pourrait se demander : mais ça a l’air d’être optimisé pour les mobiles, je vais donc pouvoir l’utiliser sur mon smartphone.

Il n’en est rien !

En effet (et j’en profite ici pour passer un coup de gueule), tout le trafic « mobile » arrivant sur le site des TCL est redirigé systématiquement vers la version mobile du site, m.tcl.fr.

Quelles implications cela a-t-il ?

  • Impossible de consulter le site « classique » www.tcl.fr, pour y chercher une information (par exemple les horaires de fermeture des agences).
  • Impossible de consulter n’importe les plans en version PDF, notamment ceux « par zone de l’agglomération ».
  • Impossible d’utiliser le dit widget, qui n’est en fait qu’une page web dont l’adresse est http://www.tcl.fr/widget7/ .

De la même manière, essayer de consulter m.tcl.fr depuis un navigateur « classique » vous renverra systématiquement sur la version « complète », même si vous voulez justement privilégier la légèreté d’affichage de la version mobile.

Il est malgré tout possible d’afficher ce widget sur un mobile (en utilisant Firefox pour Android et son plugin Phony permettant de changer l’user agent ou avec Opera Mini, pour les détails techniques), et voilà ce que cela donne :

Et il existe également des versions iGoogle ou Netvibes pour celles et ceux qui utilisent ces systèmes de portails.

Qu’est-il possible de faire pour améliorer ce système ?

  • Ne plus rediriger les utilisateurs mobiles vers m.tcl.fr pour leur faire bénéficier de ce widget
  • Proposer une petite application indépendante du système de widgets Windows ou Mac OS X, pour ne pas limiter son utilisation aux seules versions qui possèdent cette fonctionnalité
  • Proposer une version Linux (en effet, ce système d’exploitation commence à se repandre même auprès du grand public)
  • Corriger les bugs de fonctionnement de l’outil (l’impossibilité de revenir aux listes d’arrêts et de perturbations par exemple)
  • Peut-être consulter plus en amont les utilisateurs finaux afin d’adapter plus efficacement ce genre d’outils à leur cible parmi les clients TCL

Un point important à signaler : il est évoqué dans la description du widget une notion de « temps réel ». Cela signifie donc que les données « d’horaires de passage réels » sont disponibles, vu qu’elles sont fournies aux utilisateurs de ce système.

On peut donc imaginer qu’à terme les TCL « libèrent ces données » pour que d’autres applications extérieures au SYTRAL puissent les utiliser, par exemple des panneaux dans les entreprises indiquant les prochains horaires de passage des lignes environnantes.

En résumé, de la même manière que pour mon test d’e-Tecely, la conclusion est la suivante : des bonnes idées mais une mise en pratique à améliorer, plus adaptée à la réalité des usagers, et à réaliser en concertation avec ces derniers.

e-Tecely : beta-test 2e phase : retour d’expérience

Après un démarrage un peu laborieux, pour ne pas dire assez difficile, le beta-test d’e-Tecely a enfin démarré le 8 février 2012 (la date à laquelle il devait se terminer, mais trêve de troll, vous verrez plus loin que ça fonctionne tout de même assez correctement).

Premier contact

Le site, accessible à l’adresse http://e-tecely.tcl.fr (à partir de mars pour les usagers non testeurs), vous tombez sur l’écran ci-dessus.

Toutes les informations dont nous avons besoin sont visibles : création de compte, rechargement (les petits cadenas indiquent bien sur les pages accessibles seulement si vous êtes connectés avec votre compte e-Tecely).
On peut également accèder directement aux pages de support (perte de carte, etc).

Création d’un compte

Page d'inscription

Essayons de nous inscrire : aucun problème particulier, un captcha (facile à pirater, mais qui voudrait payer ton abonnement à ta place ?).

Une confirmation par email est ensuite envoyée (jusque-là on reste dans un processus ultra-classique).

Une fois cette opération d’inscription réalisée, on peut enfin se connecter à son compte e-Tecely.

Configuration du compte client

Rattachement nécessaire
Compte client

On va maintenant tenter de recharger notre carte TCL.

Mais vu que nous n’avons pas encore associé celle-ci à notre compte, un message d’erreur survient.

Association de la carte TCL

Code de rattachement
Rattachement

Cette opération est très simple, il suffit de fournir le n° marqué au dos de la carte. On reçoit ensuite un code par email ou par courrier.

Il est, bien sur, très facile de saisir le n° d’un autre abonné, mais l’intérêt est nul : vous rechargeriez sa carte (et les coordonnées étant masquées vous ne pourriez le retrouver).

Commande d’un lecteur

Panier
Commande lecteur

Rentrons dans le vif du sujet : histoire de pouvoir enfin faire  joujou, commandons le fameux lecteur USB ! (d’un coût unitaire de 9€).

Encore une fois, les écrans sont très clairs et compréhensibles.

Premier accroc : après avoir effectué mon règlement, je suis renvoyé sur le site, avec mon lecteur toujours dans le panier, comme si je n’avais pas commandé ni payé. Ce problème a depuis été résolu.

Deuxième accroc : « normalement », le site aurait du me proposer l’acquisition d’une nouvelle carte Técély équipée d’une puce. Ce problème est connu et va être corrigé.

Troisième accroc : le site ne propose « normalement » ce changement de carte qu’au retour sur le site après le paiement. Il serait plus logique de le rajouter au panier via un message explicite, en indiquant très clairement que ce changement n’est pas facturé.

Pourquoi une nouvelle carte ? car les cartes Técély ancienne génération ne sont pas compatibles avec ces fameux lecteurs (mais le changement est gratuit).

Rechargement de la carte

Choix rechargement
Lecteur Teo (Xiring)

Une semaine plus tard (entre les problèmes ci-dessus et les délais inhérents à un beta-test), j’ai recu mon lecteur USB : un Teo de la marque Xiring (une des marques les plus courantes pour ce genre d’appareils).

Maintenant qu’on a le lecteur, il est enfin possible de se rendre sur la page « Je recharge ma carte » et de cliquer sur le 1er choix.

Problème carte
Autorisation éxécution Java

C’est la technologie Java qui a été retenue pour assurer la connexion entre le navigateur et l’USB. Je vois pointer les trolls qui vont rire d’un tel choix : à ce jour, il n’y a que Java qui permette ce genre de performances, et cela sous les 3 OS les plus courants (Windows, Linux, Mac OS).

Le lecteur, quant à lui, s’est installé tout seul, sans pilotes à fournir (au moins sous Windows 7).

Quatrième (petit) accroc : la carte à puce n’est pas reconnue par Windows (pilote manquant) mais ca n’empêche pas du tout son bon fonctionnement.

Choix d’un abonnement / produit pour ma carte

En dehors du sempiternel abonnement mensuel, il est aussi possible de charger un forfait « une semaine » (et il sera possible en 2013 de charger des « trajets », un peu comme le fait la Oyster Card à Londres; Lyon69 se faisait d’ailleurs l’écho, récemment, d’une demande importante des usagers à ce niveau).

Rechargement #2
Rechargement
Choix d'un produit

Et si je ne peux/veux pas utiliser un lecteur USB ?

Répartition des bornes
Localisation borne

Il reste possible de payer en ligne et d’aller valider une seule fois en début de mois sa carte, en utilisant les bornes e-Tecely, implantées un peu partout sur le réseau (au moins sur les grands axes sur Lyon et limitrophes).

La carte est assez claire, et permet à l’aide d’une photo de repérer facilement la borne dans son environnement (très bonne idée au passage).

Questions / réponses

  • Les attestations d’abonnement ? Elles sont maintenant envoyées par mail automatiquement au paiement.
  • La date de mise en service? Initialement, mars 2012, je ne sais pas si ca a été déplacé avec le retard des tests.
  • Ça tourne sous Linux ou Mac OS? Le site, oui, mais, à ce jour, pas la fonctionnalité de « rechargement via le lecteur USB »
  • Une réduction est-elle prévue pour les utilisateurs rechargeant à domicile, qui font donc baisser les frais des TCL? Pas que je sache. (merci @savatte pour la question)

Conclusion

A part quelques petits bugs (qui auraient tout de même dû être détectés avant le béta-test, mais passons), ce test s’est bien déroulé.

  • Avantages :
    • On se bousculera moins aux bornes.
    • On prend moins le risque de se mettre en retard avec l’achat de l’abonnement.
    • Même si je n’ai pas de distributeur TCL sur mon trajet, je peux acheter mon abonnement.
  • Inconvénients :
    • Il est toujours nécessaire de valider son achat, quelque soit le système retenu.
    • Le lecteur a un coût (faible) / Il n’y a pas de bornes partout.
    • On ne peut pas encore recharger X trajets sur la carte, consommables à sa guise.

En résumé, ce nouveau système, et tout l’espace client qui va avec, est un réel pas en avant de la part des TCL, c’est incontestable, mais parallèlement, les données de transport (horaires, plans, position des bus et arrêts) ne sont toujours pas ouvertes, et Keolis ne dispose toujours pas d’un community manager assurant l’interface entre les usagers et l’opérateur : e-Tecely n’est, à mon avis, que le premier pas d’une profonde refonte salvatrice de la gestion clientèle et de la communication en ligne des TCL.

e-Tecely : beta-test du service

Même si on casse souvent du sucre sur leur dos (retards, site web qui date, pas de données ouvertes, etc), les TCL savent aussi vivre avec leur temps et surtout nous faciliter la vie.

La preuve en est avec le projet e-Tecely, qui arrive enfin dans sa période de beta-test (avant un lancement en mars 2012).

En quoi ca consiste? Pour l’instant, la possibilité de gérer son abonnement (modifier ses informations, recharger sa carte pour les détenteurs d’un Pass Partout, le forfait rechargeable au mois) depuis son domicile, de 2 manières :

  • Paiement en ligne puis rechargement direct via un lecteur USB (moins de 10€) branché sur l’ordinateur
  • Paiement en ligne puis rechargement via une borne située dans les stations de métro et autres lieux de passage, comme celle-ci :
Borne e-Tecely

Le test se déroulera durant tout le mois de février et je ne manquerais pas de vous faire suivre mes péripéties.

M’ont été fournis :

  • Un jeu d’identifiants pour me connecter au site
  • Un ticket « collector » (en raison de sa durée de validité de 11 jours!)
Ticket TCL valable 11 jours, pour le beta-test e-Tecely
Ticket TCL valable 11 jours, pour le beta-test e-Tecely

Petite analyse rapide :

  • Pour :
    • Fini la queue aux bornes TCL, avec des utilisateurs qui ne savent pas s’en servir, n’ont pas leur carte bleue, etc
    • Pratique si on n’a pas de bornes sur son trajet
  • Contre :
    • Coût du lecteur (même s’il reste faible)
    • Une opération « en plus du paiement » reste nécessaire, que cela soit via un lecteur USB ou sur les bornes e-Tecely
    • Pas de réduction pour les utilisateurs privilégiant la dématérialisation (mais le projet n’étant pas encore lancé, aucune information à ce sujet)

Pas d’analyse ergonomique du site, celui-ci étant en panne à l’heure ou j’écris cet article.

(sources : Lyon en Lignes pour la photo de la borne )

Questions / Réponses :

  • Pourra-t-on gérer/recharger plusieurs comptes depuis un même ordinateur ?
    • Oui, sans problème

 

Rajouter un nouveau hook dans Prestashop 1.4 grace à l’override

Prestashop, dans sa dernière version (de mars 2011), propose une vraie amélioration (parmi beaucoup d’autres) : l’override.

Avant de rentrer dans les détails de ce système, rappelons comment est architecturé Prestashop :

  • Les classes, dans /classes, définissent le comportement des fonctionnalités principales (Cart, Order, Customer, etc)
  • Les modules, dans /modules, permettent d’étendre les possibilités de base (newsletter, alertes email, paiement, etc)

Parallèlement, il existe à de nombreux endroits dans Prestashop des hooks (« crochets ») qui sont des points dans le code sur lesquels les modules peuvent se brancher (dans les classes, ou même dans les fichiers à la racine, qui gèrent le panier, le compte-client, etc).

Une bonne manière de comprendre le fonctionnement de ces « hooks » est de les comparer au déroulement d’une vie : vous pouvez intervenir à des moments stratégiques de celle-ci, pour modifier ou non le comportement d’une personne. C’est un peu pareil avec les hooks : ils permettent aux modules de déclencher des actions à des moments-clés du fonctionnement de Prestashop (à l’affichage de l’en-tête, mais aussi au passage d’une commande ou lors de son annulation, etc). Autre exemple : un développeur peut décider d’utiliser le hook « panier » et d’afficher à cet emplacement du contenu (par exemple la météo ou des produits associés).

Certains hooks sont « invisibles » et sont plus des hooks de calcul ou de traitement (génération de PDF, envoi de mail).

Le problème avec ces hooks est qu’ils sont pré-existants dans l’application : en clair, il peut arriver qu’il en manque un précisément là où il serait nécessaire.

Jusqu’à Prestashop 1.3.7, le seul moyen était de le rajouter à la main dans le code, mais avec le risque qu’à la mise à jour suivante, ces modifications disparaîtraient.

Depuis Prestashop 1.4, il existe un dispositif qui permet de résoudre ce problème : l’override.

Derrière cet anglicisme se cache tout simplement la possibilité de « surcharger » Prestashop, c’est à dire de redéfinir ce que fait l’application, et sans craindre de perdre ces changements à la prochaine évolution.

En effet, ces « surcharges » se situent dans un répertoire /override, vide par défaut dans les versions téléchargeables de l’outil, donc qui ne sera pas écrasé par une mise à jour.


Prenons un exemple pratique, pour voir comment tout cela se décompose.

Pitch : On désire rajouter du contenu avant le footer, dans une zone qu’on appellera « surfooter », indépendante du bas de page.

– 1ère étape : Créer le hook dans la base de données

En effet, pour que Prestashop puisse déclencher une action sur un hook, il faut que celui-ci soit référencé dans la liste des choix possibles.

On va ici utiliser PHPMyAdmin pour l’insérer. Rendez-vous dans la table ps_hook (ou toute table finissant par « _hook », selon le préfixe que vous avez utilisé). Cliquez sur Insérer, et complétez comme suit l’écran qui apparaît :

Et cliquez sur Exécuter.

Pour les fans du SQL, la commande suivante est équivalente :

INSERT INTO ps_hook (name,title,position,live_edit) VALUES ('surfooter', 'Hook surFooter', '1', '0')

– 2ème étape : Positionner le hook dans le code de l’application

Dans l’exemple qu’on a choisi, le « surfooter » doit se déclencher juste avant le « footer ». Comment se déclenche le hook « footer » ? Regardons dans le fichier footer.php (logique, non?) :

$controller = new FrontController();
$controller->displayFooter();

Depuis la 1.4, on utilise dans Prestashop des contrôleurs, réunis dans un dossier /controllers, qui contiennent les fonctions utilisées dans les différentes pages.

Regardons le code de la fonction displayFooter dans /classes/FrontController.php :

public function displayFooter()
	{
		global $cookie;
		if (!self::$initialized)
			$this->init();

		self::$smarty->assign(array(
			'HOOK_RIGHT_COLUMN' => Module::hookExec('rightColumn', array('cart' => self::$cart)),
			'HOOK_FOOTER' => Module::hookExec('footer'),
			'content_only' => (int)(Tools::getValue('content_only'))));
		self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
		//live edit
		if (Tools::isSubmit('live_edit') AND $ad = Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))
		{
			self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
			self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
		}
		else
			Tools::displayError();
	}

La ligne HOOK_FOOTER’ => Module::hookExec(‘footer’) permet de déclencher « les fonctions hookfooter situés dans les modules installés sur la boutique ». Parallèlement, on retrouve dans le template un bloc {$HOOK_FOOTER} qui affichera là ou il est inséré le contenu généré par les fonctions qu’on vient évoquer.

Pour notre « surfooter », il suffirait donc de rajouter :

HOOK_SURFOOTER' => Module::hookExec('surfooter'),

Mais (il y a un « mais »), comme on l’a précisé au début de l’article, ces fichiers du coeur de Prestashop seront écrasés à la prochaine mise à jour. On va donc « dupliquer » cette fonction, et créer un fichier /override/classes/FrontController.php, contenant :

//La classe d'origine située dans /classes/FrontController.php s'appelle FrontControllerCore, on utilise donc ici FrontController
class FrontController extends FrontControllerCore
{
	//Copie de la fonction displayFooter située dans /classes/FrontController.php, mais avec le "surfooter" en +
	//C'est la copie qui prendra la main sur la fonction d'origine appelée dans /footer.php
    public function displayFooter()
	{
		global $cookie;
		if (!self::$initialized)
			$this->init();

		self::$smarty->assign(array(
			'HOOK_RIGHT_COLUMN' => Module::hookExec('rightColumn', array('cart' => self::$cart)),
			//On rajoute l'appel à notre nouveau hook
			'HOOK_SURFOOTER' => Module::hookExec('surfooter'),
			'HOOK_FOOTER' => Module::hookExec('footer'),
			'content_only' => (int)(Tools::getValue('content_only'))));
		self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
		//live edit
		if (Tools::isSubmit('live_edit') AND $ad = Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))
		{
			self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
			self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
		}
		else
			Tools::displayError();
	}
}

– 3ème étape : « greffer » un module sur notre hook

Que l’on souhaite être directement connecté au « surfooter », ou qu’on souhaite les relier ensuite par « Greffer un module », la procédure est la même : il faut déclarer au début du fichier du module que l’on souhaite s’y connecter.

Prenons l’exemple de « Bloc newsletter », (/modules/blocknewsletter/blocknewsletter.php) et de sa fonction install() (présente dans toutes les extensions Prestashop) :

if (parent::install() == false OR $this->registerHook('leftColumn') == false OR $this->registerHook('header') == false)
	return false;

On voit qu’est utilisée plusieurs fois la fonction registerHook, qui permet de se « référencer » sur un hook précis. On va donc modifier cette ligne ainsi :

if (parent::install() == false OR $this->registerHook('leftColumn') == false
OR $this->registerHook('header') == false  OR $this->registerHook('surfooter') == false) {
	return false;
}

Désormais, à la prochaine installation de ce module (donc par exemple si on le désinstalle/réinstalle), il se branchera sur « surfooter » et cherchera à éxécuter sa propre fonction hooksurfooter(), qu’on va créer pour l’occasion (toujours dans le même fichier /modules/blocknewsletter/blocknewsletter.php) :

function hooksurfooter($params)
	{
		//Mettre ici du code à exécuter dans le surfooter
	}

Il faudra bien sur rajouter le bout de code nécessaire dans notre template, par exemple:

{$HOOK_SURFOOTER}

(merci à Jérémy Kleinclaus pour la remarque à ce sujet là)
Bien sur, comme toute modification importante sur un template et sur la boutique, il peut être nécessaire de vider le cache Prestashop si les changements n’apparaissent pas.

On peut également utiliser ce procédé pour modifier le fonctionnement d’une fonction du core de Prestashop, sans nécessairement vouloir rajouter un hook, ou « surcharger » un contrôleur, en utilisant le répertoire /override/controllers.