On ne fait pas de la magie

«Toute technologie suffisamment avancée est indiscernable de la magie.» Arthur C. Clarke

  • HTML et CSS pour les CMS

    Publier un site Web pour présenter son activité, écrire un blog, … est aujourd’hui très aisé grâce aux CMS (WordPress, Joomla, …) ou aux outils de publication en ligne (Weebly, 1and1, Facebook, …).

    Ces solutions proposent de nombreuses mises en forme prédéfinies, des templates, des pluggins qui permettent de personnaliser très finement son site. Mais parfois, il faut modifier du code HTML ou des styles CSS pour obtenir exactement la présentation souhaitée ou pour améliorer le référencement. Et là, on se trouve confronté à des aspects techniques de compréhension de la syntaxe et de l’utilisation du HTML ou du CSS.

    Une formation HTML et CSS classique n’est pas très bien adaptée pour maitriser ces aspects techniques. D’une part, certains sujets n’ont que peu d’intérêt dans le contexte d’un CMS, par exemple les formulaires ou les iframe, et d’autre part, l’accès au HTML et aux styles s’effectue au travers d’éditeurs dédiés.

    Pour ces raisons, j’ai élaboré une formation HMTL/CSS spécifique pour les CMS, mettant l’accent sur la personnalisation de CMS et sur l’amélioration du référencement naturel. La première session aura lieu très bientôt à Grenoble.

  • Partage d’une connexion wifi sous Windows 7

    Il est aujourd’hui courant d’avoir accès à une connexion wifi dans une chambre d’hôtel, ce qui permet d’accéder à Internet avec un confort tout à fait agréable.

    Mais le nombre d’appareils dont on dispose et que l’on souhaite connecter augmente et on tombe parfois sur une difficulté majeure : on ne peut accéder à la connexion wifi de la chambre qu’avec un seul appareil à la fois. Et suivant les cas, il n’est pas possible de se déconnecter : c’est le premier équipement qui est lié à la connexion wifi et c’est « définitif ».

    Pour résoudre cette difficulté, il faudrait pouvoir partager sa connexion Internet en créant son propre hotspot …

    Que nous dit Google là dessus ?

    Quelques minutes de recherche permettent de trouver des solutions payantes ou gratuites, avec l’approche classique : un logiciel à télécharger, à installer et si tout se passe bien, avec de la chance, on a une solution. Mais si cela ne marche pas bien, on patauge, on désinstalle, on réinstalle, on change de logiciel, on pose des questions désespérées dans les forums …

    Vous vous en doutez si vous lisez ce blog : il y a une autre solution que de foncer dans le brouillard.

    Pour cela, il faut disposer de Windows 7 (ou Windows Server 2008 R2), dans lequel Microsoft a fourni une nouvelle fonctionnalité : une carte wifi virtuelle. Vous pouvez voir que cette carte est présente dans la liste des cartes réseau. L’image suivante montre la présence d’une carte « Microsoft Virtual Wifi Miniport Adapter »

    Carte Wifi virtuelle

    Que faire avec une telle carte ? Nous allons activer un réseau virtuel avec l’outil netsh, à l’aide des commandes :

    netsh wlan set hostednetwork mode=allow monwifi key=12345678
    netsh wlan start hostednetwork

    Que font elles ? La première permet de paramétrer le réseau hébergé de Windows, nommé très logiquement hostednetwork, en définissant un nom que vous pouvez choisir comme vous voulez (monwifi pour ma part) et en spécifiant la clé de connexion (12345678 dans cet exemple).
    La seconde ligne lance effectivement le réseau wifi, qui apparaît alors dans la liste des réseaux disponibles.

    La dernière opération à effectuer est d’activer le partage de connexion Internet de la connexion Wifi, en indiquant que le réseau qui peut accéder à Internet est le réseau hébergé que l’on vient d’activer :

    Partage de connexion Wifi

    Et le tour est joué : vous pouvez utiliser tous les équipements que vous voulez et accéder à Internet avec votre connexion wifi !

  • Ecrire un plugin jQuery pour centrer des éléments

    Lorsqu’on utilise jQuery, on peut écrire des fonctions javascript classiques qui font simplement appel à jQuery pour effectuer le traitement souhaité.

    L’ennui avec ces fonctions est que leur utilisation est plus délicate que l’utilisation de jQuery.

    Par exemple, prenons le cas d’une fonction qui permet de centrer un élément. Cette fonction peut s’écrire ainsi :

    function centreElement(element) {
    $(element).css({
    'top': (($(window).height() - $(element).height()) / 2) + $(window).scrollTop(),
    'left': (($(window).width() - $(element).width()) / 2) + $(window).scrollLeft()
    });
    }

    Cette fonction peut être appelée sur n’importe quel élément, de cette façon centreElement('#image1'). Mais que se passe t-il si on veut centrer horizontalement plusieurs éléments images ?

    Il suffit de modifier un peu cette fonction pour ne centrer qu’horizontalement. Par contre, il faut exécuter une boucle, par exemple avec la fonction each de jQuery, pour appeler autant de fois que nécessaire cette fonction. Une solution plus élégante peut être d’écrire son propre plugin jQuery, c’est à dire, tout simplement, une fonction personnelle qui se comporte comme une fonction intégrée de jQuery.

    Voilà la façon dont on pourrait écrire un tel plugin :

    (function($) {
    $.fn.centreElement = function() {
    this.each(function() {
    var $e = $(this);
    $e.css({
    'left': (($(window).width() - $e.width()) / 2) + $(window).scrollLeft()
    });
    });
    return this;
    };
    })(jQuery);

    Un plugin jQuery nom est tout simplement une fonction définie avec $.fn.nom. Pour éviter tout télescopage avec d’autres bibliothèques installées, on utilise une fonction anonyme qui reçoit un paramètre $, et on appelle cette fonction avec jQuery :

    (function($) {

    // ici, $ représente jQuery sans aucun risque de télescopage avec une autre bibliothèque

    })(jQuery);

    Il suffit maintenant de définir une fonction anonyme pour $.fn.centreElement.
    Cette fonction doit pouvoir être chainée avec d’autres appels de fonction jQuery et pour cela, elle doit renvoyer l’objet this fourni par jQuery.
    Elle doit également exécuter son traitement sur chaque noeud référencé par jQuery, ce que l’on peut réaliser avec la fonction each().
    Voilà donc la structure que doit avoir tout plugin jQuery :

    $.fn.centreElement = function() {
    this.each(function() { // boucle générique sur chacun de éléments avec la fonction each()
    // code spécifique au plugin écrit
    });
    return this; // valeur de retour pour pouvoir effectuer le chainage
    };

    Et il ne reste plus, pour effectuer le centrage, qu’à reprendre ce que nous avions écrit dans la première fonction, en enlevant le top :

    var $e = $(this);
    $e.css({
    'left': (($(window).width() - $e.width()) / 2) + $(window).scrollLeft()
    });

    Notre plugin permet maintenant d’écrire des instructions comme :

    $('img').centreElement().show();

    Cet exemple est parfois employé comme exercice de cours jQuery

  • Référencement et sites Web… ou je ne suis pas le seul à lutter contre la magie

    Parfois, au détour du Web, je découvre que je ne suis pas le seul à essayer de lutter contre la magie. Je vous conseille cet excellent article sur le référencement et le SEO, dont je partage les points de vue.

    Mais qu’il est parfois difficile de faire comprendre que l’important est le contenu …

  • GOTO : Fortran, C, C++, Java, C# et PHP

    Lors des formations sur les langages de développement que je réalise, il y a toujours un moment fort lorsque les stagiaires sont des développeurs : la discussion sur le GOTO !

    Discussion dont la longueur est très variable suivant le langage. En Fortran 77, il est impossible de quitter une boucle DO sans utiliser le GOTO. Ce n’est que dans des versions plus récentes de la norme que sont apparus CYCLE et EXIT.

    Mais pourquoi des langages plus modernes, comme CC++ ou C#, continuent-ils à disposer d’une instruction GOTO ? Et pourquoi la dernière version de PHP (5.3) a-t-elle introduit cette instruction qui n’existait pas dans les versions précédentes ?

    Les critiques sur le GOTO datent d’un article de 1968 Go To Statement Considered Harmful, écrit par Dijkstra. Vous trouverez dans l’article Goto Perl l’histoire détaillée de cet article et la polémique qui en a résulté. Polémique qui a dégénéré en réponses dogmatiques : « GOTO c’est mal » et « il ne faut pas utiliser GOTO ».

    Certes, mais comment résoudre un problème d’algorithmique courant : la sortie de deux boucles imbriquées ? Pour y répondre, j’ai parfois vu des constructions alambiquées, utilisant des variables logiques, transformant des boucles à nombres d’itération connus (par exemple un parcours de matrice suivant les lignes et les colonnes) en boucles WHILE incompréhensibles demandant trois lectures pour commencer à entrevoir le traitement effectué.

    Or, que reproche-t-on à GOTO ? De conduire à du code incompréhensible à un humain …

    Le principal cas où il faut utiliser le GOTO dans des langages comme C, C++, C# ou PHP est la rupture de boucle. Ces quatre langages proposent les instructions break et continue pour quitter une boucle. Mais ils ne proposent pas la syntaxe break n du Java qui permet de quitter plusieurs boucles imbriquées. D’où la nécessité de disposer de l’instruction GOTO.

    Suivant les cas, il peut également être légitime d’utiliser GOTO lorsqu’une erreur ou un évènement externe à l’algorithme se produit, lorsqu’on ne peut pas ou on ne veut pas utiliser d’exception.