KrISS feed 8.7 - A simple and smart (or stupid) feed reader. By Tontof
  • Wednesday 27 April 2011 - 14:37
  • Friday 06 May 2011 - 00:10
    Cette ligne de commandes retourne true si votre machine est connectée à internet ou false dans...
  • Tuesday 10 May 2011 - 23:29
      On vient de me faire parvenir une offre d'emploi qui peut probablement vous intéresser, alors la voici : SCC est l'un des leaders...
  • Friday 13 May 2011 - 14:16

    Qu’est-ce qu’Internet ?

    Beaucoup de personnes se demande si il faut « réguler », « civiliser » internet, ces questions ne se posent que si on a une vision parcellaire du fonctionnement de ce monde.

    Voici la première partie d’une série de 3 conférences. Benjamin Bayard nous expose son point de vu. Je vous laisse le déguster sans modérations.


    Qu'est-ce qu'Internet ? 1/3 – Conférence… par IUT-CERGY-PONTOISE

    Grand Maître L

    The post Benjamin Bayard et ce monde étrange qu’est internet… appeared first on Le blog de Luc.

  • Monday 16 May 2011 - 14:22
  • Wednesday 18 May 2011 - 16:27
  • Wednesday 18 May 2011 - 23:58
    Windows PowerShell 2.0 Core Help – May 2011 Update L'aide intégrée de PowerShell, bien que d'une valeur inestimable, commence à dater un peu......
  • Monday 23 May 2011 - 11:21
  • Saturday 28 May 2011 - 11:28

    Tout au long de ce tutoriel je vais vous apprendre à installer un serveur web avec la distribution linux Fedora.

    Lorsque les commandes commencent par un $, c’est que je suis un simple utilisateur si non c’est un # et je suis un super utilisateur, dans tous les cas il ne faut pas recopier le $ ou le # pour exécuter la commande.

    Etape 1

    Etape 2

    Le gros avantage c’est que tout est en français, de plus l’installation permet d’utiliser la souris (Qui à dit que linux c’est compliqué ?).

    • Montage de l’image disque dans Virtual box ou installation sur une machine dédiée (dans ce cas il faut démarrer sur le cd).
    • Sélection du type d’installation : (je choisis de n’installer que le noyau et la couche réseau sans l’interface graphique)
    • Je décide d’ajouter « fedora 15 repository i-386 » en dépôt

    Etape 3

    • Redémarrage de la machine suite à l’installation de l’os
    • Redémarrage de l’interface réseau pour l’attribution d’une ip (commande : # service network restart)

    Création d’un utilisateur pour mes besoins personnels avec la commande :

    # adduser luc

    ensuite

    # passwd luc

    • Prise de connaissance de l’IP attribuée avec « ifconfig » en l’occurrence c’est l’ip 192.168.1.106 qui m’a été attribuée
    • Comme le protocole SSH est automatiquement disponible et pour avoir plus de confort notamment le copier collé je me connecte via le logiciel « Putty » (commande : ssh root@192.168.1.106 en tant qu’utilisateur root)
    • Je réalise une commande : « # yum update » pour être sûr d’avoir la dernière version de linux et des ces composants
    • Installation de man (manuel d’utilisation) avec la commande # yum install man
    • Installation de nano comme éditeur de texte # yum install nano
    • Comme la machine que j’utilise va être un serveur web il est judicieux quelle soit avec une IP fixe pour cela je me rend dans le dossier sysconfig avec la commande : $ cd /etc/sysconfig , je vérifie que la directive NETWORKING est à « yes » grâce à la commande $ nano network
    • Je me rends dans le dossier network-scripts puis dans le fichier ifcfg-eth0
    • (celui de la carte réseau) pour appliquer les réglages :

    DEVICE=eth0

    TYPE=Ethernet

    BOOTPROTO=none

    ONBOOT=yes

    USERCTL=yes

    IPADDR=192.168.1.106

    GATEWAY=192.168.1.254

    NETMASK=255.255.255.0

    DNS1= 212.27.40.240

    • Comme je veux que network soit lancé au démarrage de la machine j’utilise la commande : # su -lc ‘chkconfig network on’
    • Je redémarre ma machine pour appliquer les réglages avec la commande $ reboot
    • Apres le redémarrage j’exécute la commande $ ifconfig qui me renvoi :

    Link encap:Ethernet HWaddr 08:00:27:F7:DE:DD

    inet adr:192.168.1.106 Bcast:192.168.1.255 Masque:255.255.255.0

    adr inet6: 2a01:e35:8a50:5350:a00:27ff:fef7:dedd/64 Scope:Global

    adr inet6: fe80::a00:27ff:fef7:dedd/64 Scope:Lien

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:47 errors:0 dropped:0 overruns:0 frame:0

    TX packets:42 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 lg file transmission:1000

    RX bytes:5565 (5.4 KiB) TX bytes:5485 (5.3 KiB)

     

    lo Link encap:Boucle locale

    inet adr:127.0.0.1 Masque:255.0.0.0

    adr inet6: ::1/128 Scope:Hôte

    UP LOOPBACK RUNNING MTU:16436 Metric:1

    RX packets:0 errors:0 dropped:0 overruns:0 frame:0

    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 lg file transmission:0

    RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

    • Je peux ainsi constater que mes réglages IP ont bien été effectués

    Etape 3

    • Installation du serveur web apache avec la commande # yum install httpd
    • Installation du manuel de apache avec la commande # yum install httpd-manual
    • Installation du module ssl de apache avec la commande # yum install mod_ssl
    • Démarrage de apache, commande : # service httpd start
    • Comme je veux que apache soit lancé au démarrage de la machine j’utilise la commande : # su -lc ‘chkconfig httpd on’
    • Redémarrage de apache avec la commande # service httpd restart

    Etape 4

    • Pour que apache soit accessible depuis l’extérieur et opérationnel, il faut ouvrir le port 80. Je me rends dans le fichier iptables avec la commande

    # cd /etc/sysconfig et je rajoute la ligne :

    -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

    Comme mon fournisseur d’accès est free et qu’il gère l’ip v6 je fais de même dans le fichier ip6tables

    • Pour restreindre l’accès aux adresses ip de ma machine je modifie le ficher /etc/httpd/conf/httpd.conf et je modifie la directive par défaut suivante :

    Listen 80

    Par

    Listen 127.0.0.1:80 192.168.1.107:80

    On peut vérifier que le serveur écoute sur les bonnes adresses avec la commande :

    Netstat –an | grep 80 qui renvoie :

    tcp 0 0 192.168.1.107:80 0.0.0.0:* LISTEN

    tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN

     

    Etape 5

    • Dans le dossier /var/www je crée le dossiers suivant en utilisant la commande :

    # mkdir site1

    • comme les dossiers ont été créé par l’utilisateur root, il faut changer le propriétaire pour cela j’utilise la commande suivante :

    # chown luc:luc site1

    Je dois ensuite modifier les droits pour le dossier site1, pour cela je donne au propriétaire tous les droits, aux membres du groupe et aux autres les droits de lecture et d’accès.

    Je fais :

    # chmod 755 site

    • Avec la commande :

    # ll

    Je liste le contenu du répertoire www, je peux ainsi contrôler les droits et permissions de mes dossiers.

    drwxr-xr-x. 2 root root 4096 27 oct. 12:04 cgi-bin

    drwxr-xr-x. 3 root root 4096 22 janv. 19:19 error

    drwxr-xr-x. 2 root root 4096 23 janv. 17:33 html

    drwxr-xr-x. 3 root root 4096 22 janv. 19:19 icons

    drwxr-xr-x. 14 root root 4096 22 janv. 20:02 manual

    drwxr-xr-x. 2 luc luc 4096 27 janv. 21:32 site1

    Etape 6

    • Ajout des hôtes virtuels dans le dossier : /etc/httpd/conf.d

    Je crée le fichier virtualhost.conf avec la commande :

    # nano virtualhost.conf

    Et j’y inscris :

    <VirtualHost 127.0.0.1:80>

    DocumentRoot /var/www/site1

    <Directory /var/www/site1>

    Order allow,deny

    Allow from all

    </Directory>

    </VirtualHost>

    • Il faut maintenant créer les fichiers d’accueil à la racine de ces sites avec la commande :

    # nano site1/index.htm

    Comme c’est l’utilisateur root qui à créé ces fichiers, il faut que change le propriétaire avec les commandes :

    # chown -R luc:luc site1

    • Avec la commande more je m’assure que mes dossiers et les contenus sont conformes :

    # more site*/index.htm

    • En retour j’ai :

    ::::::::::::::

    site1/index.htm

    ::::::::::::::

    Coucou site 1

    ::::::::::::::

    • Je me rends ensuite dans le dossier site1 avec la commande :

    # cd site1

    • Le système de sécurité « SeLinux » à été problématique, il est installé d’origine sur fédora15, la doc n’est pas clair je dois modifier les capacités d’exécution des scriptes dans le dossier cgi-bin avec la commande # chcon –t httpd_sys_script_exec_t *.cgi

    Comme j’ai autorisé le ssh à s’exécuter je peux sans problème proposer à mes utilisateurs d’utiliser un logiciel comme FileZilla pour mettre à jours leur site, ils se connecteront via sftp avec leur compte utilisateur, ce sera beaucoup plus sécurisé et aussi efficace que d’utiliser le protocole ftp.

    Pour vérifier que mon travail est terminé et comme je n’ai pas d’interface graphique j’installe le navigateur en mode texte Lynx avec la commande # yum install lynx

    Je peux ainsi constater que mon travail est terminé.

    @bientot Grand Maître L

    The post Installer Un Serveur web linux Fedora de A à www appeared first on Le blog de Luc.

  • Thursday 02 June 2011 - 16:10
  • Wednesday 15 June 2011 - 14:16
  • Monday 20 June 2011 - 13:47

    Une nouvelle mouture de notre langage de prédilection présente le bout de son nez. Malgré les apparences, il s’agit d’une version en réalité majeure. En effet, la mort de PHP6 il y a plus d’un an pour cause de problème d’intégrations de l’Unicode a chamboulé le planning.

    C’est pour cela qu’une version alpha vient d’être mise à disposition sur le SVN de PHP.net.

    Les contributeurs ne se sont pas endormis, car plus de 6 000 points ont été modifiés. De nombreuses idées de PHP6 ont été implémentées. Malheureusement, la bonne idée de l’Unicode a été repoussée sans date.

    Comment fonctionne PHP ?

    PHP est un langage de programmation impérative de type CGI, qui peut être utilisé en procédural ou orienté objet (POO). C’est un langage de haut niveau qui doit être exécuté par une machine spéciale pour fonctionner, généralement un serveur (cette exécution ne peut pas être accomplie par un navigateur, il en est incapable).

    Pour que le PHP soit interprété, il faut qu’on lui dise comment ; c’est le rôle du moteur de PHP, appelé Zend Engine.

    Ce moteur est écrit en C. C’est le cœur du langage ; c’est en fait lui qui évolue à chaque nouvelle version.

    Les nouveautés

    Principaux changement apportés

    safe_mode, register_globals et register_long_array sont définitivement supprimés de PHP. De quoi ravir les développeurs, qui n’aurons plus à réaliser toute une série de vérifications concernant ces directives de configuration.

    Pour le register_globals, on peut dire que c’est une vraie avancée en termes de sécurité, même si depuis de nombreuses versions cette fonction était désactivée par défaut dans le php.ini.

    Avec le register_globlals à « ON », on ne faisait pas de différence entre une variable superglobale et une variable « interne » : un vrai problème de sécurité, car on ne savait pas si une variable venait du site — et donc était fiable — ou de l’extérieur, et par conséquent potentiellement dangereuse.

    Concernant le safe_mode et register_long_array, la documentation de PHP indique en effet :

    Citation : Documentation PHP

    Cette fonctionnalité est OBSOLÈTE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l’utiliser.

    Les ajouts apportés à cette version

    Il est maintenant plus explicite de passer des arguments en références.

    Pour rappel, voici comment on passe un argument en référence avec PHP :

    Code : PHP – Soumission d’argument sous forme de référence

     < ?php
        function foo( &  $var){
           $var++;
    }
    
    function & bar(){
            $a=5;
            return $a;
    }
    
        foo ( bar ());
    ?>

    Un passage par référence va modifier la variable inscrite en mémoire par une nouvelle version de cette variable, c’est le & devant $var qui le permet.

    Il est aussi possible de faire ceci, actuellement :

     < ?php      
    myFunction(& $toto);
     ?>

     

    Un simple avertissement est généré sous PHP 5.3. Désormais, avec PHP 5.4, le code plante et renvoie une erreur.

    Les traits

    Une nouvelle fonctionnalité (un conteneur) apparaît également : les traits. C’est un regroupement de méthodes qui peuvent être partagées entre différentes classes (ce qui est différent de l’héritage et des interfaces).

    Image utilisateur Plus d’informations sur les traits.

    Ajout du support d’Autoconf

    GNU Autoconf, livré avec PHP 5.4 dans sa version 6.59, est un outil permettant de générer des scripts shell qui configurent automatiquement les sources d’un logiciel dans l’optique de l’adapter aux systèmes UNIX (Linux, Mac OS X, etc.).

    Notez que Autoconf ne fait que configurer : il n’est pas nécessaires aux personnes exécutant le script d’avoir Autoconf installé sur leurs machines.

    Image utilisateur Plus d’information sur Autoconf.

    Image utilisateur Image utilisateur Description officielle d’Autoconf.

    La feuille de route

    • Le 28 juin 2011, la version alpha 1 sera publiée.
    • Le 26 juillet, ce sera au tour de l’alpha 2.
    • La version bêta sera livrée le 23 août.
    • Enfin, la version Relase Candidate n° 1 (RC 1) sera publiée le 20 septembre 2011.
    • Après cela, une version RC sera publiée toutes les deux semaines, jusqu’à la version stable.

    Les dates présentés ci-dessus sont cependant susceptible d’être modifiées.

    La communauté de PHP

    Tout comme la communauté de l’anneau, la communauté de PHP était lancée pour fait de grandes choses car elle était unie. Cependant, des divisions apparaissent régulièrement sur la gouvernance et la prise de décisions.

    On peut en gros la diviser en deux groupes : les contributeurs historiques et les nouveaux contributeurs.

    Les contributeurs historiques considèrent que l’évolution doit aller vers une stabilisation du langage, une éradication des bugs et une simplification, alors que les autres aimeraient que les nouveautés soit implémentées plus rapidement pour ne pas se retrouver à attendre trop longtemps des fonctionnalités qu’ils jugent essentielles pour programmer avec des méthodes modernes.

    La dissolution des développeurs de PHP n’est heureusement pas à l’ordre du jour, mais il manque cependant un leader.

    Rasmus Lerdorf, le créateur de PHP, serait capable de dire où il faut aller, mais il se contente de prendre le rôle de médiateur. Cette situation a conduit à un drame (la mort de PHP6), de nombreuses leçons doivent donc en être tirées…

    Image utilisateur Vous pouvez trouver la liste complète des nouveautés de cette version en vous rendant ici.

    Sources

    <pre class= »brush:[php] »>

    The post Php 5.4 Alpha 1, quand php renait de ces cendres… appeared first on Le blog de Luc.

  • Thursday 23 June 2011 - 15:44
  • Friday 24 June 2011 - 10:48
  • Thursday 07 July 2011 - 23:56
      Vous ne le savez peut-être pas mais l'administration des produits de la gamme Office 365 (http://www.microsoft.com/fr-fr/office365/online-software.aspx) repose essentiellement sur les...
  • Friday 29 July 2011 - 21:00

    Bonjour à tous, je profite de mes vacances pour buller… et faire de l’aéromodélisme. J’ai don fait l’acquisition de ce motoplaneur avec la propulsion tuning pour plus de vitamines.

    Voici les photos de mon modèle avec une décoration made in moi…

    @ bientôt

    grand maître L

    The post Mon nouveau jouet : La Xeno de multiplex appeared first on Le blog de Luc.

  • Wednesday 03 August 2011 - 09:42
  • Friday 12 August 2011 - 17:42

    Grâce à petit code en javaScript Vous pouvez calculer la valeur optimale de charge de vos accus Lipo.

    function calculerValeurDeCharge(){
    var coefDeCharge = parseInt(document.getElementById('coefDeCharge').value, 10);
    var capacite = parseInt(document.getElementById('capacite').value, 10);
    
        var valeurRaisonable = 1.2;
            capacite /= 1000;
    
        if ((coefDeCharge && capacite ) != 0 ){
                var resultatTheorique = coefDeCharge * capacite;
                var resultatReel = (resultatTheorique)/coefDeCharge * valeurRaisonable;
            } 
            else 
            {
                alert('Merci de renseigner les valeurs');
        }
            alert('Voici la valeur de charge maximum thŽéorique : '+ resultatTheorique+' A');
            alert('Voici la valeur de charge recommandŽée : '+ resultatReel+' A');
    }

    Et voici le html :

    < !DOCTYPE html>
    <html lang="fr">
    <head>
     <meta charset="utf-8">
     <title>Charger des accus LiPo</title>
      <!-- meta -->
        <meta name="description" content=""/>
        <meta name="author" content="luc sanchez"/>
        
     </meta></head>    
     <body>       
                    <input type="number" min="1" max="12" id="coefDeCharge" value="2" />
                <input type="number" id="capacite" value="1110"/>
                <input type="submit" onclick="calculerValeurDeCharge();" name="Calculer"/>
                <script src="./js/accus.js"></script>
        </body>
     
    </html>
    

    Pour le voir en fonctionnement cliquez ici, voici la formule utilisée : (valeur de charge théorique / (capacité totale de l’accu/1000)) * 1,2 .

    The post Calculer l’apérage nécéssaire à la charge d’un accu lipo appeared first on Le blog de Luc.

  • Tuesday 20 September 2011 - 13:37
    PowerShell v3 CTP 1  Enfin un peu de nouveauté : la Community Technology Preview 1 de PowerShell version 3 est arrivée !!! Pour...
  • Sunday 02 October 2011 - 11:24
  • Monday 24 October 2011 - 11:08

    Avec cette petite class je gère les dates plus facilement. Bien sûr on peut toujours l’améliorer pour lui rajouter la prise en charge de timestamp par exemple, je reste ouvert à vos suggestions.

    
    /**
     * transDater
     *
     * @package
     * @author luc
     * @copyright Copyright (c) 2012
     * @version $Id$
     * @access public
     */
    /* la date en entrée doit être valide mais pas de type timestamp */
    class TransDater {
    
        /**
         * TransDater::dateTransform()
         *
         * @param string $dateString
         * @param mixed $newDateFormat
         * @return
         */
        static function dateTransform($dateString = '01-01-1979', $newDateFormat) {
            if ($dateString && ($format = $newDateFormat)) {
                $date = new DateTime($dateString);
                return $date->format($format);
            }
            return (bool) false;
        }
    
        /**
         * *Si on récupère le numéro du mois de l'année on peut le transformer en nom en toutes lettres
         */
        static function monthTransformFr($date) {
            static $mois = array(
                '01' => 'janvier',
                '02' => 'fevrier',
                '03' => 'mars',
                '04' => 'avril',
                '05' => 'mai',
                '06' => 'juin',
                '07' => 'juillet',
                '08' => 'aout',
                '09' => 'septembre',
                '10' => 'octobre',
                '11' => 'novembre',
                '12' => 'decembre'
            );
            $m           = self::dateTransform($date, 'm');
    
            if (!empty($mois[$m])) {
                return (string) $mois[$m];
            }
        }
    
        /**
         * TransDater::dayWord()
         * @abstract Si on récupère le numéro du jour de l'année on peut le transformer en nom en toutes lettres (0->français,1->Anglais,2->Allemand)
         * @param mixed $date
         * @param mixed $int
         * @return
         */
        static function dayWord($date, $int) {
            $french  = array('dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi');
            $english = array('Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Monday');
            $german  = array('Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag', 'Montag');
            switch ($int) {
                case 0 : $day = $french;
                    break;
                case 1: $day = $english;
                    break;
                case 2: $day = $german;
                    break;
                default:
                    false;
            } // switch
            $d = self::dateTransform($date, 'w');
            if (!empty($day[$d])) {
                return (string) $day[$d];
            }
            return (bool) false;
        }
    
        /* fonction : bissextile */
    
        static function leapYear($date) {
            $date = self::dateTransform($date, 'y-m-d');
    
            if ((is_int($date / 4) && !is_int($date / 100)) || is_int($date / 400)) {
                return (bool) true;
            } else {
                return (bool) false;
            }
        }
    
        /**
         * TransDater::datePlusUnMois()
         *
         * @abstract fonction rajoutant un mois a une date
         * @param mixed $date
         * @return string date plus 1 mois
         */
        static function datePlusUnMois($date) {
            $newDate = new DateTime($date);
            $newDate->modify('+1 month');
    
            return (string) $newDate->format('Y-m-d');
        }
    
        /**
         * TransDater::dateMoinsUnJour(()
         *
         * @abstract fonction enlevant 1 jour à une date
         * @param mixed $date
         * @return string date moins 1 jour
         */
        static function dateMoinsUnJour($date) {
            $newDate = new DateTime($date);
    
            return $newDate->modify('-1 day');
        }
    
        /**
         * TransDater::age()
         *
         * @abstract Fonction pour calculer l'age
         * @param string  date de naissance type 'd/m/Y'
         * @param string  date à laquelle on veux calculer l'age
         * @return age /integer
         */
        static function age($date_naissance, $currentDate = NULL) {
            if ($date_naissance != NULL) {
                if ($currentDate == NULL) {
                    $currentDate = date('d/m/Y');
                }
            }
            $arr1 = explode('/', $date_naissance);
            $arr2 = explode('/', $currentDate);
            if (($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0]))) {
                return $arr2[2] - $arr1[2];
            }
            return (int) $arr2[2] - $arr1[2] - 1;
        }
    
        /**
         * returns the difference, in days, between two dates.  avoids the daylight's savings issue by using GMT
         */
        static function dateDiff($date1, $date2) {
            $date1 = date_parse($date1);
            $date2 = date_parse($date2);
            return ((gmmktime(0, 0, 0, $date1['month'], $date1['day'], $date1['year']) - gmmktime(0, 0, 0, $date2['month'], $date2['day'], $date2['year'])) / 3600 / 24);
        }
    
        /**
         * @name dateExcelToHuman()
         * @param string $date
         * @return string date
         */
        static function dateExcelToHuman($date) {
            $date = ($date - 25569) * 86400;
            return (string) date('Y-m-d H:i:s', $date);
        }
    
        /**
         * @abstract Returns elapsed time with human format in french
         *
         * @param     int The timestamp of the date
         * @return    string
         */
        public function elapsed_time($date) {
    
            $old_time = $date;
    
            // Current time
            $time = time();
    
            // Little check
            if ($time < $old_time) {
    
                return FALSE;
            }
    
            // Get seconds elapsed
            $seconds = round($time - $old_time);
    
            // Convert into minutes
            $minutes = round($seconds / 60);
    
            // Convert into hours
            $hours = round($minutes / 60);
    
            // Returns
            if ($hours >= 72) {
                return 'Le ' . date('d/m/Y', $old_time);
            } elseif ($hours >= 48 && $hours < 72) {
                return 'Avant Hier';
            } elseif ($hours >= 24 && $hours < 48) {
                return 'Hier';
            } elseif ($hours >= 1) {
                return 'Il y a ' . $hours . ' h';
            } elseif ($minutes >= 1) {
                return 'Il y a ' . $minutes . ' mn';
            } elseif ($seconds == 0) {
                return 'A l\'instant';
            } else {
                return 'Il y a ' . $seconds . ' s';
            }
        }
    
        static public function addSeconde(\DateTime $date, $seconde) {
            return self::addInterval($date, 'PT' . (int) $seconde . 'S');
        }
    
        static public function addMonth(\DateTime $date, $month) {
            return self::addInterval($date, 'P' . (int) $month . 'M');
        }
    
        static public function addDay(\DateTime $date, $day) {
            return self::addInterval($date, 'P' . (int) $day . 'D');
        }
    
        static public function addYear(\DateTime $date, $year) {
            return self::addInterval($date, 'P' . (int) $year . 'Y');
        }
    
        static public function addInterval(\DateTime $date, $value) {
            try {
                $interval = new \DateInterval($value);
                $date->add($interval);
            } catch (Exception $exc) {
                throw new \Exception(__METHOD__ . 'The format of $value is not valid (String) exemple : P55S (add 55 second) ');
            }
            return $date;
        }
    
    }
    
    

    à bientôt Grand maître L

    The post Gerer les dates en php avec la class transDater appeared first on Le blog de Luc.

  • Tuesday 25 October 2011 - 12:52

    les conférence des ENREST dont je vous ai parlé sur ce blog continuent.

    En voici une nouvelle, comment communiquer sur internet avec le PDG de Skyrock, Pierre Bellanger

    @bientôt, Grand Maître L

    The post Communiquer sur internet appeared first on Le blog de Luc.

  • Saturday 05 November 2011 - 09:30

    On va rester dans la série des questionnements sur ce magnifique outils qu’est internet pour répondre à cette simple question : « Dit maman c’est quoi internet ? ».

    je vous laisse en compagne de Benjamin Bayard de FDN dont nous avons déja parlé sur ce blog.

    The post Dit maman c’est quoi internet ? appeared first on Le blog de Luc.

  • Tuesday 22 November 2011 - 18:06
    Il est facile avec la console GPMC d’identifier si l’héritage au niveau d’une OU a été coupé à cause de...
  • Monday 05 December 2011 - 18:41

    C’est toujours Agréable de voir que le langage PHP poursuit son bonhomme de chemin sans prendre de retard.

    En effet le 24 Novembre la devteam à mis à disposition la Rc2 dans un timing prévu il y a maintenant plus de 6 mois (du jamais vu !!!). Au passage, on apprend que nous aurons droit à une Rc3 car de nombreux bugs ont été corrigés.

    Pas de grandes nouveauté comme l’indique Mageekblog à l’exception d’une fonctionnalité ajouté à SOAP.

    @plus Grand Maître L

    The post PHP 5.4 est disponible en Rc2 appeared first on Le blog de Luc.

  • Tuesday 20 December 2011 - 04:44
    PowerShell v3 CTP 2 Décidément l'équipe PowerShell ne chaume pas ces derniers temps car 3 mois seulement après la première Community Technology Preview...
  • Wednesday 21 December 2011 - 05:53
      Pour effectuer une mission de 18 mois (2x9 mois) pour un client dans le secteur bancaire en région parisienne, un profil...
  • Thursday 19 January 2012 - 11:37
  • Friday 20 January 2012 - 19:40
    1327084231  Il peut arriver que, tout comme moi, vous soyez amené dans votre vie de scripteur PowerShell à manipuler un jour...
  • Monday 02 April 2012 - 07:02
      Comme chaque année, ne manquez pas les Scripting Games ! Il s'agit d'un évènement unique en son genre où vous...
  • Thursday 05 April 2012 - 05:17
      Voici une news à côté de laquelle je suis passé : Quest PowerGUI Pro 3.0 (http://dmitrysotnikov.wordpress.com/2011/08/22/compile-powershell-scripts-to-exe/), qui est la version...
  • Tuesday 10 July 2012 - 10:59
  • Tuesday 31 July 2012 - 13:55

    Il y a quelque temps, j’ai eu le plaisir de découvrir la ville des moines franciscains « San Francisco ».
    Voici quelques images :

    20120731-135447.jpg

    20120731-135509.jpg

    20120731-135613.jpg

     

    The post Des images de San Francisco appeared first on Le blog de Luc.

  • Thursday 06 September 2012 - 17:39

    C'est grâce à l'ami Korben que j'ai découvert Subliminal, ce petit outil en console permettant de récupérer des sous-titres pour nos séries / films préféré(e)s !

    Pour l'installer sous ArchLinux, rien de plus simple, utilisons AUR :

    yaourt subliminal

    Yaourt va s'occuper de récupérer les dépendances, à savoir :

    • python2
    • python2-beautifulsoup4
    • python2-guessit
    • python2-requests
    • python2-enzyme
    • python2-html5lib
    • python2-distribute

    Puis, pour l'utiliser :

    subliminal -l fr Game.of.Thrones.S01E02.720p.BluRay.X264-REWARD.mkv

    Remplacez "fr" par la langue choisie pour vos sous-titres. Chez moi, cette commande génère une erreur :

    subliminal -l fr Game.of.Thrones.S01E02.720p.BluRay.X264-REWARD.mkv 
    Traceback (most recent call last):
      File "/usr/bin/subliminal", line 99, in <module>
        main()
      File "/usr/bin/subliminal", line 83, in main
        force=args.force, multi=args.multi, scan_filter=scan_filter)
      File "/usr/lib/python2.7/site-packages/subliminal/async.py", line 134, in download_subtitles
        subtitles_by_video = self.list_subtitles(paths, languages, services, force, multi, cache_dir, max_depth, scan_filter)
      File "/usr/lib/python2.7/site-packages/subliminal/async.py", line 120, in list_subtitles
        tasks = create_list_tasks(paths, languages, services, force, multi, cache_dir, max_depth, scan_filter)
      File "/usr/lib/python2.7/site-packages/subliminal/core.py", line 57, in create_list_tasks
        scan_result.extend(scan(p, max_depth, scan_filter))
      File "/usr/lib/python2.7/site-packages/subliminal/videos.py", line 231, in scan
        return [(video, video.scan())]
      File "/usr/lib/python2.7/site-packages/subliminal/videos.py", line 138, in scan
        existing = [f for f in os.listdir(folder) if f.startswith(basename)]
    OSError: [Errno 2] No such file or directory: ''

    Pour contouner cette erreur, ajoutez "./" à votre fichier, comme ci :

    subliminal -l fr ./Game.of.Thrones.S01E02.720p.BluRay.X264-REWARD.mkv

    Cela me génère toujours des erreurs, mais à la fin vous pouvez constater la ligne Downloaded 1 subtitle(s) for 1 video(s).

    subliminal -l fr ./Game.of.Thrones.S01E02.720p.BluRay.X264-REWARD.mkv 
    WARNING: subliminal.core Service bierdopje not available: none of available features could be used. One of ['xml'] required
    ERROR: subliminal.async Exception raised in worker Thread-2
    Traceback (most recent call last):
      File "/usr/lib/python2.7/site-packages/subliminal/async.py", line 47, in run
        result = consume_task(task, self.services)
      File "/usr/lib/python2.7/site-packages/subliminal/core.py", line 131, in consume_task
        result = service.list(task.video, task.languages)
      File "/usr/lib/python2.7/site-packages/subliminal/services/__init__.py", line 154, in list
        return self.list_checked(video, languages)
      File "/usr/lib/python2.7/site-packages/subliminal/services/subswiki.py", line 49, in list_checked
        results = self.query(video.path or video.release, languages, get_keywords(video.guess), series=video.series, season=video.season, episode=video.episode)
      File "/usr/lib/python2.7/site-packages/subliminal/services/subswiki.py", line 81, in query
        sub_keywords = split_keyword(self.release_pattern.search(sub.contents[1]).group(1).lower())
    AttributeError: 'NoneType' object has no attribute 'group'
    **************************************************
    Downloaded 1 subtitle(s) for 1 video(s)
    ./Game.of.Thrones.S01E02.720p.BluRay.X264-REWARD.srt from tvsubtitles
    **************************************************
  • Wednesday 19 September 2012 - 18:05

    J'ai pour habitude de développer beaucoup de scripts Shell pour automatiser l'administration de mes serveurs sous Linux. Ça faisait un petit moment que je cherchais par quel moyen je pouvais avoir un peu de mise en forme pour mes scripts Bash (couleurs, tabulations, ...).

    Et je suis tombé sur la commande "tput", qui permet de mettre en forme certaines parties de mon script.

    De la couleur :

    Voici comment mettre un peu de couleur dans vos scripts. Ajoutez ceci au début de votre script :

    # Mise en forme
    #+ Couleur de base
    RESETC="$(tput sgr0)"
    # Couleurs + Gras
    # Rouge
    RED="$(tput bold ; tput setaf 1)"
    # Vert
    GREEN="$(tput bold ; tput setaf 2)"
    # Jaune
    YELLOW="$(tput bold ; tput setaf 3)"
    # Bleu
    BLUE="$(tput bold ; tput setaf 4)"

    Une fois que vous avez défini vos couleurs, vous n'avez plus qu'à les utiliser :

    echo -n "${YELLOW}- Tâche n°1"

    Préfixes par "${COULEUR}" chaque phrase que vous souhaitez mettre en forme !

    Du placement, des tabulations :

    Faites débuter vos scripts par la commande "clear", histoire d'avoir une console propre.

    Utilisez la commande suivante, puis votre "echo", comme ceci :

    tput cup 2 3
    echo -n "${YELLOW}- Tâche n°1"

    Cette commande aura pour effet de vous afficher "- Tâche n°1" en jaune, sur la 2ème ligne, et avec un décallage vers la droite de 3 caractères.

    Une autre ? La voici :

    tput cup 4 10
    echo -n "${YELLOW}- Mise à jour de data/configuration/parametres.xml"
    sed -i "s/www/dev/g" $DEV_FOLDER/data/configuration/parametres.xml
    tput cup 4 80
    echo "${GREEN}[OK]"

    Cette commande, nous affiche "- Mise à jour de data/configuration/parametres.xml" en jaune, sur la 4ème ligne, et avec un décallage de 10 caractères vers la droite. De plus, nous afficherons un petit "[OK]" avec un décallage de 80 caractères vers la droite !

    À partir de maintenant, vous pouvez ajouter des lignes, et organiser le placement comme vous le voulez. Là, que le premier echo fasse 10 caractères ou 20, le echo qui affiche [OK] sera dans tous les cas décallés de 80 caractères, en partant du début !

    Si vous voulez partir de la fin, utilisez la commande tput cols, qui vous renvoie le nombre de caractères de large que votre console fait.

    Bref, comme d'habitude, RTFM !

  • Thursday 20 September 2012 - 17:41

    Shinken dispose d'un pack pour monitorer une imprimante HP, mais pas une imprimante Samsung... Du coup, voici un petit pack pour ajouter votre imprimante Samsung (CLP-610ND pour ma part) à votre outil de supervision préféré !

    Voici les éléments que nous allons monitorer :

    • Disponibilité de l'imprimante (ping)
    • État des cartouches (cyan, magenta, noir, et jaune).

    Dans notre exemple, on suppose que l'imprimante s'appelle myprinter, et que son IP est 192.168.2.10.

    Étape 1 : check_samsung_cartridge

    La première étape consiste à récupérer le script "check_samsung_cartridge", qui va vérifier l'état de nos cartouches.

    Récupérez le fichier .tar.gz à sur Nagios Exchange, décompressez-le, et placez le fichier check_samsung_cartridge dans le dossier /usr/local/shinken/libexec, et fixez ses permissions :

    mv check_samsung_cartridge /usr/local/shinken/libexec
    chown shinken:shinken /usr/local/shinken/libexec/check_samsung_cartridge

    Puis, on teste notre script :

    # ./check_samsung_cartridge -H myprinter -Q cyan -w 40 -c 10
    OK: Toner Cyan (Bestell-Nr.: CLP-C600A) - Resttoner: 81%|CYAN=81%;40;10;;

    Si vous avez à peu près le même résultat que moi, c'est que l'accès à votre imprimante est bien paramétré, sinon, revoyez l'accès SNMP.

    En revanche, il y a une petite coquille dans le script fourni par Nagios Exchange. Éditez le script, et repérez la ligne 55 :

    BLACK_LEVEL='1.3.6.1.2.1.43.11.1.1.9.1.2' #BLACK Level

    Remplacez le dernier "2" à droite par "4", comme ceci :

    BLACK_LEVEL='1.3.6.1.2.1.43.11.1.1.9.1.4' #BLACK Level

    Comme le précise ce commentaire, le chemin SNMP pour la vérification du noir correspondait au magenta.

    Étape 2 : le pack

    Voici le petit pack que j'ai fait, en téléchargement à cette adresse (md5 : 2d3d7ddfff1c318c639532c2fa109515).

    Décompressez le fichier tar.bz2, et placez le dossier dans /usr/local/shinken/etc/packs/printers/ afin d'avoir côte à côte le dossier "samsung" et le dossier "hp", si vous ne l'avez pas supprimé.

    Faisons un petit tour d'horizon du contenu du dossier samsung :

    • commands.cfg, qui contient les 4 commandes de vérification de l'état des cartouches (1 commande par couleur).
    • templates.cfg, qui contient la définition de l'hôte.
    • services/check_cartridge.cfg, qui contient les 4 services liés aux 4 commandes de vérification des couleurs.
    • services/etat.cfg, qui contient la définition du service qui vérifie l'état de l'imprimante, via une commande ping.

    Normalement, vous n'avez rien à modifier, sauf peut-être le fichier commands.cfg, qui contient notamment les 2 seuils d'alertes : critical et warning.

    Étape 3 : définition de l'hôte

    Maintenant que notre pack est créé et que notre commande fonctionne, on peut créer la définition de notre hôte : créez un fichier myprinter.cfg dans le dossier /usr/local/shinken/etc/hosts avec ce contenu :

    define host{
    	name		Myprinter
    	host_name	myprinter
    	address		192.168.2.10
    	use		printer-samsung
    }

    Et voilà, c'est fini ! Maintenant, il ne reste plus qu'à vérifier notre configuration grâce à cette commande :

    # /usr/local/shinken/bin/shinken-arbiter -v -c /usr/local/shinken/etc/nagios.cfg -c /usr/local/shinken/etc/shinken-specific.cfg
    ...
    [1348153167] Info :    Things look okay - No serious problems were detected during the pre-flight check

    Si le résultat est concluant, on peut redémarrer l'arbiter :

    /etc/init.d/shinken-arbiter

    On retourne sur notre la WebUI, et on constate que ça fonctionne :

    Shinken Printer

  • Tuesday 16 October 2012 - 15:01

    Voici comment activer l'autologin sur Lxdm, un gestionnaire de connexion :

    Éditez le fichier "/etc/lxdm/lxdm.conf", et, décommentez la troisième ligne :

    # autologin=myuser

    Comme ceci :

    autologin=jeoffrey

    Enregistrez, et la prochaine fois que vous allumez votre ordinateur, l'autologin fonctionnera.

  • Monday 22 October 2012 - 18:30

    Allez, puisque j'ai passé un peu de temps ce week-end à faire joujou avec vim, voici le rendu final de mon vimrc :

    vimrc

    Ce dernier est disponible à cette adresse.

    Voici quelques explications sur son contenu. Avant toute chose, sachez qu'un commentaire dans un fichier .vimrc débute par une double-quote : ".

    Activer la numérotation des lignes et la coloration syntaxique

    set number
    syntax on

    La première commande permet déjà d'ajouter la numérotation des lignes à gauche de notre vim. C'est très utile, vous verrez. Ensuite, lorsque l'on édite régulièrement des scripts, que ce soit du php, ou du Bash, il est très utile d'avoir la coloration syntaxique de son code, c'est à cela que sert la seconde ligne !

    De nouvelles couleurs

    colorscheme koehler

    La couleur de base de vim ne vous plaisant pas forcément, il ne serait pas du luxe de pouvoir la changer ! Heureusement, vim met à disposition un ensemble de "thèmes", qui se situent dans le dossier /usr/share/vim/vim72/colors/. Pour ma part, j'utilise koehler ! Bien sûr, il est également possible d'installer des thèmes venant d'Internet ;).

    Jouer avec la souris

    set mouse=a

    Inutile si vous êtes sur un serveur, cette directive servira surtout aux desktops users, qui veulent faire de la sélection de texte avec la souris !

    Ne pas taper à l'aveugle

    set showcmd

    Lorsque vous faites un couper-coller, vous utilisez la commande "2dd" ( couper 2 lignes). Seulement, votre "2dd" ne s'affiche nulle part ! Grâce à la commande showcmd, votre instruction s'affichera en bas à droite.

    Avec l'autoindentation tu joueras

    filetype plugin indent on

    Cette ligne permet d'ajouter l'indentation automatique.

    De tout, tu te souviendras

    set history=100

    Vous le savez surement, les commandes utilisables avec sont légions. Si vous voulez récupérer une commande entrée il y a quelques temps, rien ne vaut un bon historique. N'hésitez pas à mettre plus que 100.

    Retrouver une parenthèse perdue

    set showmatch

    Grâce à showmatch, vous pourrez retrouver facilement l'accolade ou la parenthèse que vous avez ouverte quelques milliers de lignes plus haut. Très pratique pour les développeurs !

    Bling bling, couleurs !

    set hlsearch
    set incsearch

    La commande hlsearch permet de surligner les éléments recherchés, et incsearch permet de déplacer le curseur dans les résultats au fur et à mesure de la saisie (dans le genre de la recherche sous Firefox).

    Bling bling sur la ligne courante

    set cursorline
    hi Cursorline ctermbg=darkgrey guibg=#771c1c cterm=none

    Pour rapidement savoir ou l'on se trouve, on utilise cursorline, qui met en valeur la ligne où le curseur se trouve. Vous pouvez vous amuser avec les valeurs "ctermbg" et "guibg" !

    Une recherche sans casse

    set ignorecase

    Pour désactiver la casse lors des recherches ;). Si vous voulez l'utiliser ocasionnellement, utilisez cette commande : /marecherche\c

    C'est le paramètre \c qui spécifie une recherche sans respect de la casse ;).

    Détection parfaite

    filetype on

    Lorsque vous éditez un fichier, VIM peut détecter automatiement le type de fichier, et adapter la coloration synntaxique.

    É on écri sent photes !

    set spelllang =fr
    set spell
    set spellsuggest =5

    Voici quelques lignes qui vous permettront de corriger automatiquement vos textes...

    Quelques raccourcis

    iab <? <?php

    Pour mettre en place des raccourcis assez sommaires, utilisez "iab". Lorsque vous tapperez "<?", ça sera automatiquement remplacé par "<?pphp" ;).

    On se souvient de la dernière édition ?

    if has("autocmd")
            filetype plugin indent on
                    autocmd FileType text setlocal textwidth=78
    
            autocmd BufReadPost *
            \ if line("'\"") > 0 && line("'\"") <= line("$") |
                    \   exe "normal g`\"" |
            \ endif
     endif
    

    Utilisez ce petit morceau de script pour replacer le curseur là ou il était lorsque vous avez fermé vim. Très pratique en cas d'édition régulière d'un fichier ;).

    Amusez-vous bien avec vim !

  • Friday 02 November 2012 - 11:43

    Je viens tout juste d'installer Archlinux et Gnome 3.6 sur mon tout nouveau Zenbook prime. Au reboot, je me suis rendu compte que toutes les icônes liées à Gnome ne s'affichaient pas :

    Image

    Sur les forums d'ArchLinux, certains conseillaient de réinstaller librsvg, mais ça n'a rien donné chez moi... En revanche, la commande suivante a résolu ce soucis pour ma part :

    /usr/bin/gdk-pixbuf-query-loaders --update-cache

    Cela relance le cache des images, et les affiche de nouveau ;).

  • Monday 05 November 2012 - 09:45

    Ce matin, je voulais installer Spotify sur ma nouvelle distro sous Manjaro... J'ai été gratifié d'une belle erreur :

    jeoffrey@arch ~$ yaourt spotify
    The URL http://aur.archlinux.org/rpc.php?type=search&arg=spotify returned error : 301

    Cela vient du fait que l'AUR d'ArchLinux est récemment passé en https... Pour y passer vous aussi, éditez le fichier /usr/lib/yaourt/util.sh, et remplacez la ligne suivante :

    AURURL='http://aur.archlinux.org'

    Par celle-ci :

    AURURL='https://aur.archlinux.org'

    Relancez votre commande yaourt, et vous pourrez de nouveau installer vos paquets via AUR !

  • Wednesday 14 November 2012 - 10:02
      La version 3.0 de PowerShell est enfin disponible en version finale pour notre plus grand bonheur. Au programme des réjouissances de nombreuses...
  • Wednesday 14 November 2012 - 10:58
    Certainement lié au fait que la console graphique ISE (Integrated Scripting Evironment) a été grandement améliorée dans PowerShell 3.0, IDERA (http://www.idera.com/) a...
  • Friday 16 November 2012 - 11:58

    Ça y'est, le client Web de Spotify est disponible à cette adresse : https://play.spotify.com/. Beaucoup de sites précisent qu'il faut lié son compte Facebook pour y avoir accès, mais pour ma part, disposant d'un compte Premium, j'ai pu me loguer sans lié mon compte à Fasebouque...

    Spotify Web

  • Monday 19 November 2012 - 16:50

    Voici un rapide article pour vous expliquer comment s'authentifier sur vos machines Linux à travers votre serveurs LDAP...

    Pour cet article, j'ai utilisé le paquet "slapd" de Squeeze, à savoir la version 2.4.23-7.2 qui est actuellement dans les dépôts. Pour ma part, j'ai installé cet environnement en local seulement, ne soyez donc pas étonnés de retrouver une adresse en .lan...

    Commençons par installer le paquet suivant :

    apt-get install libpam-ldapd

    Voici ce qu'il faut répondre aux questions (à adapter en fonction de votre serveur bien sûr) :

    URI du serveur LDAP : ldap://infra.dom.lan

    Base de recherche du serveur LDAP : dc=dom, dc=lan

    Services de nom à configurer : Pour ma part, j'ai coché group, hosts, et shadown pour synchroniser les utilisateurs, leurs mots de passe et les groupes. Si vous voulez reconfigurer cette partie plus part, éditez le fichier /etc/nsswitch.conf

    Normalement c'est bon, vous devriez pouvoir vous authentifier avec votre utilisateur LDAP ;).

    Si vous voulez que le home paramétré dans votre LDAP soit créé lors de la 1ère connexion de votre utilisateur, ajoutez cette ligne au fichier /etc/pam.d/common-session :

    session required	pam_mkhomedir.so skel=/etc/skel umask=0022

    Pour autoriser la connexion seulement si l'utilisateur appartient à un certain groupe, dans le fichier /etc/pam.d/common-auth, décommentez la ligne suivante :

    auth	required			pam_access.so

    Et ajoutez cette ligne au fichier /etc/security/access.conf :

    -:ALL EXCEPT root usersallowed:ALL EXCEPT LOCAL

    usersallowed est le groupe LDAP que vous souhaitez autoriser uniquement ;).

    Pour relancer le cache LDAP sur le client, relancez le démon nscd : /etc/init.d/nscd restart.

  • Thursday 22 November 2012 - 13:33

    Hier, j'ai eu droit à la mise à jour vers Android 4.2 pour mon Galaxy Nexus. Install, reboot, vérification des applications, tout fonctionnait. C'est à ce moment que je me suis rendu compte que SwiftKey 3, ce formidable clavier intuitif avait été désinstallé de mon téléphone...

    SwiftKey Logo

    Rapidement, je me rends sur le Google Play, et je constate qu'il m'est impossible d'installer l'application... Apparemment, c'est un problème connu chez SwiftKey, mais qui ne serait pas spécifique à eux puisque d'autres applications rencontreraient le même problème...

    Voici la bonne méthode pour réinstaller votre application :

    • Sur votre téléphone, allez dans les paramètres, puis dans Applications. Dans l'onglet "Toutes", cherchez "Google Play Store". Appuyez sur "Forcer l'arrêt", validez, et une fois qu'il est arrêté, appuyez sur "Effacer les données".
    • On recommence la même chose, mais avec "Framework des services Google", on force l'arrêt, et on supprime le cache et les données.
    • Redémarrez votre téléphone... Surprise, l'installation de votre application fonctionne de nouveau !
  • Monday 26 November 2012 - 16:07
      Les barres de progressions sont souvent négligées des scripteurs, et ce en général par manque de temps mais peut-être aussi...
  • Saturday 15 December 2012 - 14:23
    J’étais en formation C# ces derniers jours et comme c’est encore frais dans ma tête, j’ai envie de partager avec...