La ligne de commande aujourd’hui, ou comment évolue les mentalités ;)

Ajourd’hui, à l’heure des interfaces tactiles multipoints, des débats sur le flat design… les utilisateurs de la ligne de commande passe pour des barbus de l’informatique ;)
Elle est aujourd’hui associée aux hackers, linuxiens et autre administrateurs: dans de nombreux films elle symbolise l’interaction avec la matrice, le hack d’une page voir d’une administration aussi sécurisé que la CIA/FBI (cf opération Espadon…)
Oui la ligne de commande est qualifiée d’anti-ergonomique, on parle souvent de Mme Michu pour indiquer que celle-ci est anti-convivial, on lui préfère des interfaces ou l’on clique, scroll, slide…

Et pourtant…
Il ne faut pas oublier qu’aux débuts de l’informatique, Mme Michu (la fameuse) n’avait pas d’interface graphique (ça n’existait pas), elle était habituée dans son travail à taper des lignes de commandes.
Dans de nombreuses sociétés, les utilisateurs passaient par telnet ou un autre protocole pour parler à un serveur UNIX-like (généralement), j’ai d’ailleurs travaillé il y a quelques années sur un ERP qui était accédé en telnet via un logiciel qui interprétait certains caractères pour les remplacer par des barres, coins, boutons… afin de simuler une interface graphique.

Tout ça pour dire que la ligne de commande n’avait à l’époque rien de rebutant pour l’utilisateur moyen, que celui-ci s’adaptait et faisait avec sans se plaindre :)

Madeleine de Proust numérique
Je me souviens d’un temps que les moins de vingts ans ne peuvent pas connaitre, celle où sur son Atari/Comodore ou autre, on faisait son petit « cd monJeux » suivi d’un petit « run » pour lancer celui-ci ;)
Il y avait même certains jeux qui se jouaient en mode texte: The big Bang Theory (très bonne série d’ailleurs) y fait un clin d’oeil dans un épisode où sheldon propose une soirée jeux.
Sans oubliez notre bon vieux minitel, qui n’avait pas non plus d’interface graphique au sens actuel du terme ;)

La ligne de commande, la puissance à l’état brut
Même si la majorité du public est passé aux interfaces graphiques, on utilise encore dans beaucoup de postes informatiques la ligne de commande.
Car même, si depuis de nombreux outils (client lourd / client web) aient été développé, on peut accorder plusieurs avantages à notre bonne vieille ligne de commande.

  • Elle est performante: rien n’égale un grep ;)
  • Elles permettent de se faire scriptées/ automatisées très facilement
  • Toutes les fonctionnalités ne sont pas disponibles dans les solutions graphiques*
  • Permet simplement d’administrer des serveurs / postes distants sans devoir installer/configurer une solution de partage d’écran

*il est très lourd de devoir developper toutes les interfaces / formulaires pour égaler les multiples paramètres

Sans oubliez certains outils en ligne de commande d’une puissance / performance incroyable, au choix: sed/awk/grep/find/df…

Conclusion
Ce billet pour indiquer que les esprits changent, évoluent mais surtout que les utilisateurs sont assez intelligent pour s’adapter à leurs outils.
Si aujourd’hui avec l’effervescence des interfaces tactiles (smarphone/tablettes) certains éditeurs veulent nous imposer cette vision juqu’à nos PCs non tactiles, il ne faut pas oublier que c’est l’utilisateur final aura le dernier mot, et se servira de son porte monnaie pour émettre son avis ;)

Il est également intéressant de voir aujourd’hui à l’heure du tout tactile, la ligne de commande est toujours autant apprécié et puissante :)

ORM or not ORM faut-il les utiliser ?

Avec l’arrivée des frameworks php, nous avons appris à évoluer entre ces nouveaux acronymes: MVC, DAO, DRY et ORM
Mais qu’est-ce qu’un ORM ?
Un ORM (Object Relation Mapping) est un ensemble de librairies qui vous permettent d’interagir avec vos données via des objets.
La plupart des frameworks respectant le design MVC* intègrent leurs propres ORM plus ou moins performants.
note: pour les exemples de syntaxes d’ORM j’utiliserai l’ORM du mkFramework.

*MVC: Model View Controller (séparation de la couche modèle de l’affichage et du controlleur)

Un ORM pourquoi faire ?
Pourquoi utiliser un ORM plutôt que d’écrire simplement des requêtes SQL dans pdo ?
Si vous voulez coder propre, vous allez dans un premier temps écrire toutes vos requêtes dans un fichier php.
Si vous souhaitez organiser un peu mieux, vous allez regrouper les requêtes par table…
Si vous souhaitez éviter de vous répéter, vous aller créer un fichier/une classe pour les éléments récurrents (connexion, requête…) : principe de DRY*
Le fait de faire ceci, vous avez créé un pseudo début d’ORM ;)

*DRY Don’t Repeat Yourself (créer des fonctions/classes pour éviter d’écrire plusieurs fois le même code)

Un des avantages des ORM se situe concernant la manipulation des données.
Prenons un exemple ou dans plusieurs pages vous devez modifier uniquement le titre, l’auteur ou le nombre de vue d’un article.
En pdo simple vous écririez:

‘UPDATE article SET titre=? WHERE id=?’,$titre,$îd
‘UPDATE article SET auteur=? WHERE id=?’,$auteur,$îd
‘UPDATE article SET nbVue=nbVue+1 WHERE id=?’,$îd

Avec l’ORM vous n’avez pas besoin d’écrire à l’avance vos différents types de requêtes

$oArticle=model_Article::getInstance()->findById($id);
$oArticle->titre=$titre;
$oArticle->save();
//ou
$oArticle->auteur=$auteur;
$oArticle->save();
//ou
$oArticle->nbVue=($oArticle->nbVue+1);
$oArticle->save();

note: vous pouvez, si vous le souhaitez écrire des requêtes update
Exemple:

class model_article extends abstract_model{
(…)
public function updateNbVue($id){
$this->execute(‘UPDATE article SET nbVue=nbVue+1 WHERE id=?’,$id);
}
}

Les avantages sont multiples:

  • Organiser vos requêtes
  • Gagner du temps à l’écriture
  • Bénéficier des avantages du design MVC*

Tous les ORMs n’offrent pas les mêmes performances
Pour argumenter un post dans un topic sur ce même site, j’avais à l’époque procédé au benchmark suivant:
100 000 enregistrements en base de donnée mysql, et l’affichage de ces lignes dans un tableau html.
5 types différents:
– php simple en utilisant pdo
– une application en Zend Framework (version 1.11.12)
– une application en Yii (version yii-1.1.14)
Рune application en MkFramework (m̩thode findMany() )
Рune application en MkFramework en utilisant la r̩cup̩ration rapide (m̩thode findManySimple() )

Résultat des courses:

benchmark

– 0.50s : pdo simple
Р0.58s : MkFramework en utilisant la r̩cup̩ration rapide
– 0.68s : Yii (version yii-1.1.14)
– 1.97s : MkFramework (normal)
– 11.20s : Zend Framework (version 1.11.12):

note : j’ai fait un benchmark sur 100 000 entrées pour avoir un volume assez important pour mettre en évidence les différences de performances, si j’avais fait un findById(4)
Sur un seul enregistrement on aurait
benchmark2

– 0.007s : pdo simple
Р0.015s : MkFramework en utilisant la r̩cup̩ration rapide
– 0.043s : MkFramework (normal)
– 0.049s : Zend Framework

note 2 : pour obtenir de bonnes performances avez yii j’ai écrit les requêtes sans passer par les classes « ORM »

$sql=’SELECT * FROM Article';
$connection=Yii::app()->db; // vous devez avoir une connection « db »
$command=$connection->createCommand($sql);
$articles=$rows=$command->queryAll();

Les ORMs offrent de la flexibilité
J’ai lu à plusieurs reprise que les ORM étaint lourd, qu’ils retournaient toujours toutes les colonnes même ceux non utilisées, que pour faire une jointure on se retrouvait à récupérer une ligne entière sur les deux tables liés…
Premièrement, vous pouvez choisir de récupérer uniquement certains champs de votre table. Beaucoup d’ORM proposent d’écrire sa requête SQL
Par exemple:

class model_article extends abstract_model{
(…)
public function findListAuteurName(){
return $this->findMany(‘SELECT auteur.name FROM auteur’);
}
}

Idem pour les fameuses jointures, vous avez le choix de récupérer par exemple un objet article puis de lui demander de nous retourner son auteur pour afficher son nom ainsi

$oArticle=model_article::getInstance()->findById(4);
print $oArticle->findAuteur()->nom;

Mais vous pouvez également écrire une méthode qui vous retournera les articles avec leur auteurs ;)

class model_article extends abstract_model{
(…)
public function findArticleWithAuteur(){
return $this->findOne(‘SELECT article.titre, auteur.name FROM article INNER JOIN auteur ON article.auteur_id=auteur.id WHERE article.id=?’,(int)$id);
}
}

Une flexibilité aussi concernant les performances: selon les parties de vos sites vous avez besoin de récupérer plus ou moins d’élements et ceci plus ou moins rapidement.
La encore vous avez le choix: si vous devez récupérer un auteur, ses articles et ceci sans trop regarder les performances vous pouvez utiliser la méthode de récupération d’objets riches findMany/findOne
Si au contraire vous souhaitez afficher un bon nombre d’article d’auteurs, ou autre, vous pouvez utiliser la méthode rapide retournant des objets « simple » findManySimple/findOneSimple

Vous avez le choix :)

Conclusion
Comme vous avez pu le lire ici, tous les ORM ne sont pas des usines à gaz, ils sont très pratiques et vous permettent dans l’esprit du MVC de bien organiser votre couche modèle.
Les ORM sont une bonnes choses que vous codiez une petite application ou une application importante: l’essentiel c’est de penser à long terme (la maintenabilité).
Il sera plus simple pour vous ou un collègue d’intervenir sur votre application avec ORM que sans ORM ;)
Certains ORM sont plus ou moins flexible et performant comme les frameworks, mais ne les mettez pas tous dans le même panier, essayez en plusieurs avant de vous faire un avis.

note: je n’ai pas inclus Symfony 2 (pour tester doctrine) dans le benchmark car malgré mes efforts d’optimisation de cache, mode production… je n’arrivais pas à passer sous la barre des 23 secondes :(
Si vous pouvez m’envoyer un exemple d’application affichant ces 100 000 enregistrements en moins de 2 secondes je suis preneur ;)

note2: retrouvez dans mon post d’origine les éléments du benchmarks (sauf celui de yii fait ici pour l’occasion)
http://www.developpez.net/forums/d1252983-2/club-professionnels-en-informatique/actualites/etes-vous-pour-contre-orm-blogueur-invite-a-tenir-baton-par-milieu/#post6847792

La réalité augmentée comme nouveau périphérique d’interaction ?

Depuis le début de l’informatique, on utilise le clavier d’abord pour saisir des lignes de commandes, puis avec l’arrivée des premiers logiciels de traitement de texte à saisir du texte.
Et ceci, malgré l’arrivée des interfaces graphiques toujours plus ergonomique, cela n’a pas évoluer: on utilise toujours un clavier physique pour saisir nos champs de saisies, rédiger nos courrier, faire des « raccourcis clavier » sous photoshop/gimp/maya/blender… et autres logiciels de DAO
Idem pour les logiciels de montages (et bien sur les jeux)
La souris, elle, n’est arrivée qu’au début des années 80 (même si elle fût crée dans les années 60), elle a permis d’améliorer grandement notre utilisation de l’ordinateur, en permettant de cliquer/cochez, déplacer des éléménts des curseurs… plus facilement.

Des périphériques de saisies qui n’évoluent plus
Mais ça fait tout de même 30 ans que ceux-ci nous accompagne, et à part ajouter quelque touches sur le clavier, des lumières sur l’un et des boutons/molettes supplémentaires sur le second, ils n’ont plus vraiment évolué depuis.

Dans le reste de la famille, tous ont évolué
Des écrans devenus ultra plat (face aux cathodiques d’antant), des unités centrales plus petites, des disques durs sans mécanique, du réseau sans fil…
Tous les autres composants/périphériques évoluent sauf nos bons vieux claviers/souris (mis à part le passage de la boule au laser…)
On a également vu nos écran devenir eux-même des périphériques de saisie avec l’arrivée et la démocratisation du tactile, certains edieur d’OS ont même fait évoluer leur interface dans ce sens.

Ne sous exploitons pas la puissance de la réalité augmentée
Il existe une technologie qui malheureusement comme le souflée a suscité au départ beaucoup d’idées pour finalement être aujourd’hui très sous exploitée: la réalité augmentée.
Celle-ci est utilisée aujourd’hui pour le monde ludique avec Kinect(microsoft), le marketing d’ Atol (qui permet d’essayer des lunettes en ligne), dans certains applications sur smarphone (on voit à l’écran la rue avec des indications supplémentaires comme le métro, les restaurants…) , ou dans de futurs produits comme les Google Glass
Mais aujourd’hui, avec le prix des webcam en chute libre et leur qualité grandissante, on pourrait utiliser cette réalité augmentée chez nous, dans notre quotidien :)

Et si on inventait un nouveau mode d’interaction
Il y a deux différentes façons d’utiliser cette technologie:
1. en ayant des éléments réels identifiés qui servirait d’interface:
2. en comptant sur la reconnaissance de nos mains pour interagir avec l’application

Première solution en utilisant des élements physiques reconnu dans nos applications.
Imaginez par exemple qu’en fonction de l’application que vous utilisez, vous pouviez sortir une plance A4 ou plus grand comprenant les boutons nécessaires pour décharger l’application de ceux-ci
Ainsi, au lieur d’user de raccourcis clavier, vous auriez des boutons avec des visuels/icones plus reconnaissable :)
C’est une manière de gagner de la place à l’écran et d’avoir votre bureau organisé comme vous l’entendez.
Pour rendre ceci plus modulable, on pourrait imaginez des boutons/icones aimantés, et ainsi posez des surfaces en metal ou simplement métalique sur votre bureau avec les boutons/icones/raccourcis disposés où vous le souhaitez.
Vous changez d’application ? pas de soucis, rangez cette plaque et prenez celle de l’autre application ;)

Deuximème solution: utilisez vos propre mains comme périphérique virtuelle: allez cliquez sur un icone, prenez et tourner un objet en 3d.
Quelques exemples:
En 3D:
Prenez un objet dans les mains et redimensionnez le avec vos deux mains, déposez le où vous le souhaitez, tourner le pour travaillez sur une partie précise, et user de votre souris quand vous souhaitez être plus précis.

En montage vidéo:
Prenez dans une main votre piste vidéo, pendant que dans la seconde vous activez un effet dessus.
Prenez votre piste a deux mains et redimensionnez la, voir posez la sur votre bureau pour la mettre de coté.

Je vous invite a regader ces vidéos pour voir ce qu’il est possible de faire:
http://cg.cs.uni-bonn.de/fileadmin/Downloads/Hand-Tracking/assembly-simulation.wmv
Ou celle-ci http://cg.cs.uni-bonn.de/aigaion2root/attachments/hybrid-cursor-video.avi

Conclusion
Vous avez pu voir ici des idées d’utilisation de la réalité augmentée comme un nouveau périphérique pour votre ordinateur.
Note: certaines vidéos date de 2009 (soit 4 ans) ce qui est énorme en informatique, depuis les webcam et nos processeurs ce sont encore amélioré, et l’on peut imaginer une meilleure précision ainsi qu’une meilleure analyse de nos mouvements plus fluide.
Note 2: souvent les démonstrations montre des mains levés pour manipuler des éléments de l’interface, nous avons bien conscience que ceci pourrait s’avérer gênant et fatiguant à l’usage. Il vaudrait mieux filmer nos mains à plat sur le bureau.

Personnellement je préferais mixer les deux modes d’utilisation: filmer le bureau qui contiendrai des élements physiques d’intéraction (boutons/raccourcis..) ainsi que la prise en compte de nos deux mains car le fait de pouvoir utiliser les deux en même temps, et de manière complémentaire serait un vrai plus.
Qui n’a jamais pensez ouvrir de sa main gauche un repertoire pour y coller de la main droite des fichiers ;)
C’est toujours un peu frustrant en 2013 de n’avoir que sa souris pour interagir à l’écran, rien que le fait d’en avoir deux (avec deux curseurs à l’écran) pourrait nous faire gagner du temps au quotidien :)
Après on peut imaginer pour optimiser la reconnaissance de nos mains, soit une ou plusieurs bagues à mettre, soit un simple gant, ou comme sur certaines démonstrations des doigtier de couleurs.
Retenez également que toutes ces idées ne demanderait que très peu d’investissement pour gagner en confort contrairement au tactile qui nécessite changer son écran entier :(

sources:
Realitée augmentée chez atol: http://www.opticiens-atol.com/collections-atol/realite-augmentee/index.php
L’application Metro Paris: http://www.metroparisiphone.com/
Une idée d’interaction avec nos interfaces http://cg.cs.uni-bonn.de/en/projects/markerless-vision-based-hand-tracking-for-interaction/

L’écran tactile peut-il se passer de clavier physique sur smartphone/tablette ?

Au début on utilisait uniquement des claviers physiques sur nos téléphones, puis, avec l’arrivée des smartphones, on a vu notament grâce à nokia voir une molette lateralle cliquable, puis blackberry avec sa petite boulle cliquable permet de faire évoluer une souris.
Depuis on a des interfaces tactiles qui nous simplifient la vie dans toutes nos applications sauf pour un point: la saisie de texte :(

L’écran tactile remplace le clavier/souris physique ?
Oui et non, si l’écran tactile, permet de remplacer la souris: on clique avec le doigt, on fait défiller/scroll… pour le clavier c’est un autre débat.
Le clavier a pour principal avantage d’être très productif/confortable, il permet de taper du texte de manière naturelle et rapide, ce qui n’est pas le cas du clavier tactile qui nous oblige a regarder les touches (car ne les sentant pas sous les doigts)

Des idées innovations qui pourrait faire évoluer les choses
tikinotes
Premièrement certains prennent le pari de modifier notre manière de saisir les lettres, comme tikinotes qui divise le clavier en groupe de lettres.
source: http://www.tikilabs.com/
Mais le principal défaut du tactile, c’est de ne pas « sentir » les touches sous les doigts: même si certains smartphone comme le Samsung S4 propose un retour « haptique » qui indique que l’on a bien cliqué sur une touche, on ne « sent » pas les touches autour et on a donc du mal a bien positionner ses doigts sur le clavier virtuel.

Et si il suffisait de faire « pousser » des touches sous les doigts ?
tactus
Non vous ne rêvez pas, la société Tactus travaille sur une technologie permettant de faire « sortir » des boutons de la surface en modifiant un fluide particulier.
L’idée est très bonne en effet et permet de palier au plus gros soucis du tactile ;)

Une vidéo vaut mieux qu’un pavé de texte, visionnez juste cette vidéo issu du CES de cette année pour vous faire une idée: La vidéo youtube de présentation

source: http://www.tactustechnology.com/

Conclusion
Dans ce billet je n’ai pas parlé des claviers additionnels, stylet.. (bluetooth ou autre), ce n’est pas l’objet, ici on parle bien de l’écran de tactile en lui-même.
Comme vous avez pu le voir, nous ne sommes pas au bout de nos surprises, et ces prochaines années nous réservent des innovations qui vous semble magique actuellement mais seront aussi banal pour nos enfants /petis enfants que le fait d’envoyer des photos vidéos par des ondes ;)