Articles

  • Utilisation des classes Proxy de Magento 2

    Magento 2 utilise le principe d’injection de dépendances comme alternative à la classe finale Mage de Magento 1. Cela veut dire que si une classe A dépend du service B, B doit être injecté directement dans le constructeur de A, ce n’est plus à A de récupérer la dépendance B au moment où il en a besoin.

    Cela implique inévitablement que B doit être instancié avant d’être injecté dans A. Cela n’a rien de problématique en soi, par contre imaginons que l’instanciation de B soit relativement lourde en terme de ressource et que B possède également des dépendances, qui elles-mêmes possèdent des dépendances, qui elles-mêmes… Vous l’aurez compris, cela peut commencer à devenir non négligeable, surtout (et c’est là que la problématique devient intéressante) si A a besoin de B uniquement dans certaines conditions (selon l’état d’une variable, l’état d’un service, le calcul d’un résultat, ou autre), l’instanciation de B devient donc inutile si A n’en a jamais besoin. Les classes de type Proxy sont présentes pour répondre à cette problématique.

    plus...

  • Tu fais chier Windows !

    Voilà le topo.

    Cet après-midi je suis en télétravail. Je m’installe à mon bureau avec mon laptop pour commencer à taffer. Ce dernier ayant un écran 15 pouces un peu dégueulasse, je décide d’allumer la tour que j’ai dans mon bureau pour bénéficier d’un deuxième écran, plus confortable.

    J’allume la bécane, j’attends… ça démarre doucement, et puis vient enfin l’écran de démarrage :

    Tu fais chier Windows

    Echec de la configuration des mises à jour de Windows - Annulation des modifications

    Bon, il s’avère que j’ai un Windows à la maison, à l’époque pour des raisons basées sur le principe que pour jouer à des jeux corrects il fallait Windows (c’est un autre débat). Cette machine n’avait pas été allumée depuis un certain temps, évidemment… GRAVE ERREUR !

    A croire que cet OS a été conçu pour ne fonctionner correctement que lorsqu’il a sa dose de drogue de services Windows quotidienne à base de Defender, Outlook, Word, et machunchouette. Quoi que, la drogue a ses inconvénients, tous les 8 mois il faut formater sinon la lenteur du truc devient irrémédiable.

    Bref, du coup je continue à attendre…

    Deux bonnes heures plus tard je vois enfin mon fond d’écran, mais rien n’est utilisable, il redémarre tout seul et relance la procédure. Cette fois-ci elle a l’air de mieux se comporter et arrive enfin à son terme, sauf qu’il est 19h30.

    Je n’ai pas pu profiter d’un deuxème écran de l’après-midi. La prochaine dois je débranche l’écran et je le branche directement sur le laptop.

    Tu fais chier Windows !

    plus...

  • Augmenter la mémoire allouée au GPU sur Raspbian pour Kodi

    Bah oui, voilà, j’ai attrapé la raspberrite. Je me suis donc offert le Raspberry PI modèle 3 dans l’optique d’en faire un média center… mais pas que. J’ai donc opté pour installer l’OS Raspbian et y installer Kodi plutôt que de prendre une distribution média center ouf of the box.

    L’installation de Kodi s’est déroulée sans soucis et les premiers essais sont concluants, après avoir correctement configuré la résolution d’affichage et deux ou trois bricoles.

    Et puis là, j’essaie de lire un film en qualité 720p et c’est le drame. Soit Kodi ne me donne que les 5 premières secondes audio du film, soit rien du tout, alors que la vidéo est en cours de lecture. Redémarrer ne sert à rien. Pas normal…

    Pas de panique, ce n’est pas un problème de perf matériel, la version 3 du Raspberry est laaargement suffisante pour lire des 720 et 1080p. Par contre, il s’agit d’un problème de configuration du matériel. Raspbian, à la base, n’étant pas conçu pour être un OS multimédia, la quantité de mémoire allouée à la puce GPU est configurée par défaut à 64Mb, trop peu pour des vidéos de qualité.

    Fort heureusement, cette configuration peut se faire “à la souris” depuis le menu “Configuration du Raspberry” (ou alors directement dans /boot/config.txt), onglet Performance. J’ai monté la valeur à 256Mb, j’ai redémarré et le problème a disparu. :)

    plus...

  • Le Full Page Cache (FPC) de Magento 2

    Le Full Page Cache (FPC) est un élément important à prendre en compte lors du développement d’un site quel qu’il soit afin d’en améliorer nettement les performances. L’arrivée de Magento 2 apporte une gestion native du FPC dans la version Community Edition (CE) lorsque Magento 1 ne le proposait que dans la version Enterprise Edition (EE). Il est possible d’utiliser le Full Page Cache avec un des mécanismes suivants :

    • le système de fichier,
    • la base de données,
    • Redis,
    • Varnish.

    La recommandation de Magento est d’utiliser Varnish pour l’environnement de production, la configuration est en effet très simpliste car accessible depuis le back-office de Magento dans Stores > Configuration > System.

    Il y a cependant quelques bonnes pratiques à respecter lors du développement de nouveaux modules pour bien exploiter le FPC de Magento 2.

    plus...

  • Magento 2 et les Virtual Types

    Un “type virtuel” est un mécanisme de l’injection de dépendances de Magento 2. Il permet de changer les arguments d’un constructeur d’un objet spécifique, donc de gérer ses dépendances, sans affecter les autres classes qui ont elles-même une dépendance à cet objet. Dans les faits un virtual type n’est rien d’autre qu’une classe étendant une autre classe.

    Il ne faut cependant pas interpréter un virtual type comme étant un moyen de surcharger une classe en modifiant l’une ou l’autre fonction de la classe étendue. Le virtual type n’est pas voué à changer le comportement d’un objet, mais seulement ses dépendances.

    plus...

  • Utiliser le widget javascript loader de Magento 2

    Sur la balise body d’un site Magento 2 vous pouvez voir l’attribut suivant :

    <body data-mage-init='{"loaderAjax": {}, "loader": { "icon": "http://la-jolie-url.com/static/frontend/Magento/luma/fr_FR/images/loader-2.gif"}}'>

    L’attribut data-mage-init permet d’initialiser un widget javascript de Magento 2 sur la dite balise. Ici, les widgets loaderAjax et loader ont été initialisés sur la balise body.

    Partant de ce principe, nous pouvons afficher le célèbre spinner animé pour faire patienter l’internaute très simplement :

    jQuery('body').loader('show');
    jQuery('body').loader('hide');

    plus...

  • Création d'attributs produits Magento 2 via setup

    C’est quelle clé que je dois mettre pour la propriété is_user_defined dans mon setup ??

    Il arrive fréquemment que pour un site Magento 2 la création d’attributs produits supplémentaires devient nécessaire. On va donc commencer par créer son petit module pour y mettre un joli Setup dont le contenu devrait ressembler grosso modo à :

    <?php
    /* ... */
    $eavSetup->addAttribute(
        Product::ENTITY,
        'joli_attribut',
        [
            'label' => 'Mon joli attribut',
            'required' => false,
            'visible_on_front' => true,
            'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
            'searchable' => true,
            'filterable' => RenderLayered::FILTERABLE_WITH_RESULTS,
            'comparable' => false,
            'type' => 'varchar',
            'input' => 'select',
            'unique' => false,
            'is_used_in_grid' => true,
            'is_filterable_in_grid' => true,
            'filterable_in_search' => true,
            'used_for_promo_rules' => true,
            'is_html_allowed_on_front' => false,
            'used_in_product_listing' => false,
            'used_for_sort_by' => false,
            'user_defined' => true,
            'group' => 'my_group'
        ]
    );
    /* ... */

    On définit l’entité sur laquelle l’attribut sera créé, le code de l’attribut, et un tableau de configuration de l’attribut. Mais comment on connait les clés à mettre dans ce tableau ?

    plus...

  • Activer le chiffrement TLS sur pure-ftpd

    Partons du principe que nous avons déjà un serveur FTP qui tourne avec pure-ftpd. C’est bien, mais transmettre les infos en clair des mots de passe c’est mal. Sécurisons ça un minimum pour chiffrer les données.

    plus...

  • Welcome to (yeoman ?) Jekyll!

    Ce premier article décrit de façon très brouillon l’installation de ce blog ainsi que mes notes que j’avais prises au fur et à mesure.

    Je souhaitais quelque chose de très simple, sans base de données, même si le fait d’avoir une bdd n’ajoute pas forcément de complexité, mais au moins quelque chose de très condensé et très personnalisable. Jekyll paraissait une solution assez proche de cette vision et puis assez “geek”. Je me suis donc lancé sans vraiment réfléchir trop longtemps.

    plus...