KrISS feed 8.7 - A simple and smart (or stupid) feed reader. By Tontof
  • Wednesday 15 October 2014 - 16:50
      Daniel Sörlöv, un MVP PowerShell Suédois, vient de publier un outil qui va en intéresser plus d'un ! Il s'agit...
  • Wednesday 12 March 2014 - 09:24
    Progressbar légère en Javascript. On peut même difficilement faire plus léger.
    Le code est simple à comprendre, c'est bien le genre de lib que j'aime, tiens.

    Et pour rebondir, 6 mois après, sur les propos de Bronco (http://www.warriordudimanche.net/shaarli/?Yopklg) : un chargement n'est pas forcément celui d'une simple page web. Ca devient surtout utile pour les chargement "très long" : certes pour une page qui met moins de 3 secondes on s'en fiche, mais pour l'upload d'un fichier qui met 10 minutes, c'est tout de suite plus utile, et mois inefficace.

    via http://shaarli.h3b.us/?uPJ3Gg
    (Permalink)
  • Wednesday 12 February 2014 - 16:33
  • Monday 03 February 2014 - 16:59
    Vous rêviez de réaliser des jeux-vidéo mais n'en aviez jamais eu le courage ? Alors ce jeu est fait pour vous.

    On me l'a fait découvrir ce ce weekend. Très semblable à Game Dev Tycoon, il est plus ancien, plus joli (imho), tout aussi efficace, et très addictif.

    A 1,88 €, sans achat supplémentaire en jeu (il est d'ailleurs dans la liste fournie par seb : http://sebsauvage.net/links/?M4PIkA ), je ne peux que vous conseiller d'y jouer.

    La démo gratuite se paye inévitablement des pubs et est limitée à 4 années de jeu (entre 1/2h et 2h de jeu, au doigt mouillé), mais elle permet de se faire un avis sur l'engin.
    (Permalink)
  • Saturday 23 January 2016 - 17:11

    Afin d'éviter de re-télécharger les paquets pour chaque projet nous allons voir ce petit truc extra simple qui est d'activer le cache local de pip.
    Le principe est simple, la première fois que vous installez un paquet, ce dernier est téléchargé, puis mis en cache.
    La seconde fois ( s'il s’agit de la même version ), pip va simplement l'installer depuis le cache.

    Ok, ça ne va pas vous changer la vie, mais moi je trouve ça sympa à utiliser, surtout lorsque vous devez installer des gros paquets avec une connexion d’hôtel faiblarde, ça peut vous faire gagner de précieuses minutes .

    Configuration de PIP

    Commençons par éditer le fichier de configuration de pip

    vim ~/.pip/pip.conf
    

    Ajouter dans la section "global":

    [global]
    download-cache=/usr/local/pip/cache
    

    enfin on donne les droits d'écriture

    mkdir -p /usr/local/pip/cache
    chmod -R 755 /usr/local/pip/cache
    

    Deuxième méthode un peu plus courte

    Simplement ajouter dans votre fichier de profil : ~/.bash_profile

    export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
    

    Voilà pour ce micro billet.

    Bon weekend .

  • Thursday 01 October 2015 - 10:30

    A la création d'une instance EC2, vous avez un compte par défaut ( ec2-user ou admin selon la distrib ) .
    Ce compte vous permet d’accéder et d'administrer votre instance via une connexion SSH , avec une authentification par certificat ( que vous avez préalablement téléchargé à la création de l'instance ).

    On va voir ici comment ajouter un compte utilisateur avec un nouveau certificat pour qu'il puisse également se connecter sur cette instance EC2.

    Première étape le certificat

    Nous allons commencer par créer ce nouveau certificat via l'interface d'amazon ( la clef privée )

    Clef privée ( .pem )

    C'est très simple, suivez le guide...

    Dirigez-vous vers le service EC2 Capture_d_e_cran_2015-10-01_a__09.22.02.png

    Gestion des clef Capture_d_e_cran_2015-10-01_a__09.22.13.png

    Créer un clef Capture_d_e_cran_2015-10-01_a__09.22.23.png

    Vous devrez alors télécharger cette nouvelle clef ( ici elle s'appelle lindev.pem )

    Clef public

    Coté serveur, nous allons devoir spécifier la clef publique liée à cette clef privée pour le nouvel utilisateur.
    Commençons donc par récupérer cette clef publique.

    Changez les droits du certificat
    chmod 400 lindev.pem
    
    Générer les clef publique à partir de la clef privée
    ssh-keygen -y
    

    Cette commande va vous demander le chemin vers la clef privée. Suite à quoi il va vous sortir la clef public .
    Par exemple :

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCISBb/pQYoSz1tm2mWrBBK8Yfs+8z2rdcbYhCIgz7oLE2YNrT/cs8D9WXduTezS1p/SjdfA4zhXSJNBvjNP0A0M2s1Mj3E+edpENhsYrLBxDc1F60CQ4be0hLICX2e2mDzPYi7sLgAzAdVI67Eo2Zmj/0QYwckS4JgFl7JXedV8Fz4D2gm8xjByxbtlsPhG84Y9wq7GGmtHuaHzi+H+RVS1hlDZIH8QKwX9U5eWJY3BaQjXpwnorNvn2OrlO9wmTE+22A7F0vF8zsRia+t5TwqPaVYmfX7DN5zqBMcd8tQC1LdYS0b+h6+fLAkUdaqQ0kXGm1FCxYH00hTYNS+JV/V
    

    Gardez cette clef nous allons en avoir besoin bientôt coté serveur.

    Coté serveur

    Nous sommes maintenant sur notre instance EC2 avec l'utilisateur par defaut, nous allons donc créer notre second utilisateur et lui transmettre notre clef publique.

    Création de l'utilisateur

    root@ip-172-41-26-237:/home/admin# adduser lindev
    Adding user `lindev' ...
    Adding new group `lindev' (1001) ...
    Adding new user `lindev' (1001) with group `lindev' ...
    Creating home directory `/home/lindev' ...
    Copying files from `/etc/skel' ...
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    Changing the user information for lindev
    Enter the new value, or press ENTER for the default
    	Full Name []: Lindev
    	Room Number []: 
    	Work Phone []: 
    	Home Phone []: 
    	Other []: 
    Is the information correct? [Y/n] Y
    

    Voilà mon utilisateur créé, ne nous reste plus qu'à lui créer sa configuration ssh

    ssh

    Création du répertoire contenant la configuration ssh de l'utilisateur

    sudo -s
    su - lindev
    mkdir /home/lindev/.ssh
    chmod 700 /home/lindev/.ssh
    

    Création du fichier contenant les clefs publiques

    touch /home/lindev/.ssh/authorized_keys
    chmod 600 /home/lindev/.ssh/authorized_keys
    

    Editer le fichier authorized_keys et y coller votre clef public .

    vim /home/lindev/.ssh/authorized_keys
    

    je colle donc :

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCISBb/pQYoSz1tm2mWrBBK8Yfs+8z2rdcbYhCIgz7oLE2YNrT/cs8D9WXduTezS1p/SjdfA4zhXSJNBvjNP0A0M2s1Mj3E+edpENhsYrLBxDc1F60CQ4be0hLICX2e2mDzPYi7sLgAzAdVI67Eo2Zmj/0QYwckS4JgFl7JXedV8Fz4D2gm8xjByxbtlsPhG84Y9wq7GGmtHuaHzi+H+RVS1hlDZIH8QKwX9U5eWJY3BaQjXpwnorNvn2OrlO9wmTE+22A7F0vF8zsRia+t5TwqPaVYmfX7DN5zqBMcd8tQC1LdYS0b+h6+fLAkUdaqQ0kXGm1FCxYH00hTYNS+JV/V
    

    On enregistre et on quitte.

    Tests

    Il ne vous reste plus qu'à tester a connexion avec votre nouvel utilisateur .

    ssh -i "lindev.pem" lindev@52.29.115.207
    

    Normalement vous devriez être connecté sans avoir à rentrer le moindre mot de passe, en utilisant le certificat Amazon.

  • Wednesday 30 December 2015 - 15:04

    S3, espace de stockage illimité chez Amazon avec des tarifs défiant toute concurrence. Qui en plus de son prix, offre des options plus qu’intéressantes...

    • chiffrement des données
    • versioning automatique
    • rotation ou mise en glacier des vielles versions ..


    Etc ...
    Je ne vais pas détailler ces options dans ce billet, mais juste expliquer comment monter un Bucket S3 ( répertoire S3 ) sur une machine / serveur linux afin d'y accéder comme un simple montage réseau . Nous verrons également comment le monter automatiquement via une simple ligne dans le fstab.

    Prérequis

    Nous allons utiliser fuse pour monter ce bucket, et l'authentification peut être chiffrée selon vos options, nous allons installer tout ce qu'il nous faut...

    sudo apt-get install build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool fuse-utils pkg-config libssl-dev
    

    S3fs-fuse

    Maintenant, S3 + fuse n'étant pas un "système de fichiers" conventionnel, nous allons utiliser l'outil s3fs-fuse disponible sur un dépôt Gît

    cd /usr/local/src/
    git clone https://github.com/s3fs-fuse/s3fs-fuse
    cd s3fs-fuse/
    ./autogen.sh
    ./configure --prefix=/usr --with-openssl 
    make
    sudo make install
    

    Authentification S3

    Sauf si votre serveur se trouve sur la plateforme Amazon et que vous lui avez donné des droits spécifiques (S3) à sa création, il vous faudra obligatoirement préciser le couple "Access Key / Secret Key" récupéré sur la plateforme Amazon.
    Personnellement, je donne à mes utilisateurs un minimum de droits. Dans mon exemple donc, mon utilisateur fictif "John Doe" aura uniquement accès à son bucket, qui sera appelé "jdbucket".
    Nous allons donc éditer le fichier qui va lister les authentifications passwd-s3fs.

    sudo vim /etc/passwd-s3fs
    

    Le contenu devra respecter la forme suivante bucketName:accessKeyId:secretAccessKey :

    jdbucket:AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    

    Nous allons maintenant retirer un maximum de droits au fichier passwd-s3fs

    sudo chmod 600 /etc/passwd-s3fs
    

    Montage

    Ne nous reste plus qu'à monter notre bucket jdbucket . Disons sur le répertoire /var/mntJdBucket

    Commençons par créer le répertoire de montage.

    sudo mkdir /var/mntJdBucket; sudo chmod 777 /var/mntJdBucket
    

    Testons le montage avant de la mettre dans le fstab

    /usr/bin/s3fs jdbucket /var/mntJdBucket -ouse_cache=/tmp,passwd_file=/etc/passwd-s3fs
    

    Note: Spécifier le fichier de mot de passe S3 n'est pas obligatoire.
    Si tout va bien .. vous voilà connecté à votre S3 !
    Ne vous faite pas berner par le débit ( important ), ici le débit apparent sera celui de votre disque dur, car l'option use_cache=/tmp utilise un répertoire local comme cache entre votre système et le S3.

    Fstab

    Ne nous reste plus qu'à configurer notre montage dans le fstab, afin que le montage se fasse à chaque démarrage.

    sudo vim /etc/fstab
    


    Voici la ligne qu'il faut ajouter

    #Fuse
    s3fs#jdbucket	/var/mntJdBucket	fuse	rw,_netdev,use_cache=/tmp,allow_other,passwd_file=/etc/passwd-s3fs	0	0
    

    Au niveau des options, du classique, droits en lecture et écriture pour les utilisateurs, attente de la connexion réseau pour tenter de monter le bucket, configuration du répertoire de cache et du fichier de mot de passe ( toujours facultatif )

    Conclusion

    Nous avons maintenant fait le tour du montage S3 sur une machine debian, rien de bien méchant. Cependant, suite à mes tests, je conseille d'utiliser les commandes s3cmd pour envoyer de gros fichiers ( plusieurs Gb ) celle-ci étant plus adaptée.

    N'hésitez pas si vous avez des questions.

    Ch.

  • Wednesday 30 December 2015 - 15:04

    Prestashop et ses bizarreries

    presta.png Je travaille quotidiennement sur Prestashop, car à mon grand regret, il n’existe pas aujourd'hui, beaucoup d'alternatives qui proposent un produit :

    • libre
    • fonctionnel et évolutif
    • supporté par une communauté active
    • avec une documentation complète ( pour l'utilisateur et le développeur )
    • développé en python sous Django par exemple .... humm ce dernier point sent le troll ;)

    Bref dans ma grande frustration personnel, je dois tout de même admettre que Pretashop offre une solution complète performante et fonctionnelle pour l'utilisateur final, mais dés qu'il s'agit de mettre les mains dans le code, la documentation et plus que maigre !! Et il faut investiguer, poser des questions qui bien souvent dés que ces dernières sont un peu techniques, restent sans réponse sur le forum officiel :( !!
    Nous ( développeurs ) sommes doc seuls devant le code et devons faire preuve de patience pour apprivoiser le code sans documentation approfondie. Ce manque d'information est selon moi voulu pour pousser le système économique qui tourne autour de Prestashop ( modules payants pour ajouter des fonctionnalités qui parfois devraient être disponibles par défaut dans la solution ).

    D'autant que certains choix fait par Prestashop semblent parfois peu efficaces, voir illogiques.
    Prenons le cas de la référence commande, qui est sous la forme d'une chaine de caractères aléatoire et unique .
    Pour une boutique qui n'a que quelques commandes / jour cela ne pose aucun problème (quoique), mais pour un flux plus important, cette référence qui sera utilisée par vous et vos clients n'est absolument pas pratique.

    Prenons un exemple. Si je vous donne la référence : QRFRUMBMF vous êtes bien avancé, ce n'est pas mnémotechnique et ne vous apprend rien sur la commande.

    Alors que ( par exemple ) une référence comme : 20151206-225 qui est la concaténation de :

    • 2015 : L'année de la commande
    • 12 : le mois de la commande
    • 06 : le jour de la commande
    • 225 : id unique de la commande

    Aurait était un choix beaucoup plus pertinent pour tout le monde ( client et marchand ).

    Posez la questions sur le forum et vous aurez avec un peu de chance, une âme charitable qui va vous guider pour effectuer ce changement. Dans le cas contraire, votre demande tombera dans les abîmes avec les autres messages du genre restés sans réponse .

    Aller au boulot, voyons comment faire ce changement dans le code.

    La surcharge

    Je ne vais pas détailler comment surcharger les différents éléments de Prestashop mais utiliser cette technique pour deux fichiers.

    Comme expliqué pus haut, prestashop est bien fini et permet de tout "surcharger" pour vous permettre de modeler/modifier les fonctionnalités de base de l'outil à volonté.

    Nous allons donc surcharger dans un premier temps les fichiers suivants :

    1. classes/order/OrderHistory.php
    2. classes/PaymentModule.php

    OrderHistory.php

    Cette classe gère l'historique des commandes et de ce fait, gère également l’expédition des emails liés à ces états. Mails dans lesquels est rappelé la référence de la commande.

    Nous allons donc créer le fichier de surcharge override/classes/order/OrderHistory.php , copier la méthode d'origine addWithemail et enfin le modeler à notre sauce.

    ce qui donne :

    <?php
    class OrderHistory extends OrderHistoryCore{
        
        /**
         * @param bool $autodate Optional
         * @param array $template_vars Optional
         * @param Context $context Optional
         * @return bool
         */
    
    	public function addWithemail($autodate = true, $template_vars = false, Context $context = null){
                if (!$context)
                    $context = Context::getContext();
    
                $order = new Order( (int)$this->id_order );
                $date = new DateTime($order->date_add);
    
                $data = array(
                    '{id_order}' => $date->format('Ymd').'-'.$this->id_order
                );
    
                if ($template_vars){
                    $data = array_merge($data, $template_vars);
                }
    
                return parent::addWithemail($autodate, $data, $context);
        }
    }
    

    Ne vous reste plus qu'à remplacer dans vos mails la balise {order_name} par {id_order}

    PaymentModule.php

    Cette classe est utilisée à la confirmation de commande et s'occupe également de l'expédition du mail de confirmation de commande ( pourquoi avoir séparé ce mails des autres ? ). Bref, nous allons donc également surcharger cette classe et plus précisément la méthode validateOrder.

    Nous allons donc créer le fichier de surcharge override/classes/PaymentModule.php , copier la méthode d'origine validateOrder() et enfin le modeler à notre sauce.

    class PaymentModule extends PaymentModuleCore{
        
            /**
         * Validate an order in database
         * Function called from a payment module
         *
         * @param int $id_cart
         * @param int $id_order_state
         * @param float   $amount_paid    Amount really paid by customer (in the default currency)
         * @param string  $payment_method Payment method (eg. 'Credit card')
         * @param null    $message        Message to attach to order
         * @param array   $extra_vars
         * @param null    $currency_special
         * @param bool    $dont_touch_amount
         * @param bool    $secure_key
         * @param Shop    $shop
         *
         * @return bool
         * @throws PrestaShopException
         */
        public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown',
            $message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false,
            $secure_key = false, Shop $shop = null)
        {
    
            ...
            ...
            ...
            //contenu de la méthode d'origine ( copier - coller de la methode validateOrder dans le fichier classes/PaymentModule.php )
            ...
            ...
            ...
            // Avant la liste des paramétres, o va formater la date de la commande
            $dateOrder = new DateTime($order->date_add);
            ....
            //Vers la ligne 622 dans la liste des paramètres balancés au template du mail, ajouter la ligne 
            ...
            '{id_order}' => $dateOrder->format('Ymd').'-'.$order->id
            ...
            ...
            ...
        }
    }
    

    Voilà , ne vous reste plus qu'à mettre à jour le mail orderConf pour remplacer {order_name} par {idorder}

    vider le cache

    Afin que les surcharges soient bien prises en compte, vous devez supprimer le fichier de cache suivant :

    cache/class_index.php

    Conclusion

    Voilà comment changer une partie de prestashop sans toucher au code d'origine.
    Si ce que vous avez fait ne fonctionne pas ou casse quelque chose, il vous suffit alors de supprimer ces fichiers ( dans le répertoire Override ) et remettre les balises dans les mails.
    Pas d'inquiétude donc lancez-vous.