KrISS feed 8.7 - Un simple et superbe (ou stupide) lecteur de flux. Par Tontof
  • Thursday 03 May 2018 - 08:46

    Cela fait un moment que je n’avais pas fait de retour l’événement annuel des développeurs en France : Devoxx France 1 2 3.

    Depuis 3 ans, cette conférence a deux facettes pour moi : en tant que conférencier et orateur.

    Mon programme

    Voici les conférences auxquelles j’ai pu assister :

    Les quickies sont souvent super intéressants mais j’avais envie de prendre le temps de manger et faire une coupure dans ces journées marathon. Alors je n’en ai suivi aucun… :-/ Vu le format, c’est assez facile à regarder sur la liste officielle des Quickies de Devoxx France 2018.

    Ma conférence

    C’est la 3e année que je postule et que j’ai la chance de présenter un sujet ! Je n’ai jamais pris le temps de partager sur cette expérience mais c’est très enrichissant sur plein de points de vue. Je pense que je pourrais écrire des pages et des pages sur le sujet mais je ne trouve pas le temps…

    Comme il y a 3 ans avec RAML, je propose un sujet sur Open API sans trop y croire… Le sujet est accepté à ma grande surprise (1re épisode) ! J’avais un autre sujet qui me tenait plus à cœur sur le traitement d’image et qui était en liste d’attente. Mais il n’est finalement pas passé.

    Pour revenir sur le sujet initial, c’est la première fois que je faisais une telle présentation en binome (hors meetup local). C’est une expérience différente avec ses avantages et inconvénients. Hormis les séances de répétition classiques, nous avons eu l’occasion de la dérouler 2 fois en public (pour le BreizhCamp et Codeurs en Seine). Ce qui apporte un confort non négligeable.

    Quelques jours avant Devoxx France, j’apprends que nous passerons dans l’amphi principal. Le sujet intéresse beaucoup de monde à ma grande surprise (2e épisode) !

    La session se déroule comme prévu et sans mauvaise surprise. Pas de question à la fin de la présentation mais une demie douzaine dans le couloir à la sortie. Un public timide ? 🙂

    Pour être franc, je trouve qu’il manque quelque chose à cette présentation mais je ne sais pas quoi… De plus, si je devais la refaire, je choisirais une autre forme : un live coding ?

    Le mot de la fin

    Comme chaque année, on rentre de Devoxx France avec plein d’idées et d’outils à tester.
    Comme chaque année, on rentre de Devoxx France avec l’envie d’y retourner l’année suivante.
    Comme chaque année, on rentre de Devoxx France avec le secret espoir de pouvoir présenter à nouveau un sujet.

    Un grand bravo aux organisateurs, à l’équipe, aux sponsors, aux hôtes, aux speakers et aux participants ! A l’année prochaine !


    © SeB for Le weblogue de SeB, 2018. | Permalink | No comment

    Add to del.icio.us

    Search blogs linking this post with Technorati

    Want more on these topics ? Browse the archive of posts filed under Développement, Java EE.

  • Thursday 14 June 2018 - 08:28

    Continuons notre série d’articles sur Git – le b.a.-ba.

    Quand vous travaillez dans un dépôt Git, vous avez parfois besoin de sauvegarder votre travail en cours sans forcément le commiter. Ceci est possible avec le remisage et la commande git stash.

    Jusqu’à présent je n’utilisais que 2 commandes pour le remisage :

    # remiser le travail en cours
    $ git stash
    
    # retourner dans la dernière version de travail
    $ git stash pop
    

    Ce sont vraiment les 2 lignes de commandes minimales à connaitre. Mais quand on multiplie les branches et surtout les interruptions (ie. les tâches en parallèle), il est nécessaire de mieux connaitre le fonctionnement du remisage et les commandes utiles.

    Sauvegarder et mettre de côté les modifications

    Nous venons de le voir, un simple git stash fera l’affaire. Après avoir exécuté cette commande, toutes vos modifications disparaissent de votre espace de travail.

    Restaurer les dernières modifications

    Si on souhaite seulement restaurer les dernières modifications, il faut alors procéder à un git stash apply. Dans ce cas, vos modifications seront de nouveau présentes dans votre espace de travail. Et elles sont également toujours sauvegardées. Vous pourrez donc les appliquer de nouveau plus tard si besoin.

    Ce qui est intéressant ici, c’est qu’il est possible d’appliquer la modification à une autre branche que la branche sur laquelle a été faite la modification à l’origine.

    De plus, par défaut, seules les modifications sont appliquées. Si vous aviez des indexations en cours lors du remisage, il est possible de les restaurer également avec l’option --index et donc de cette façon git stash apply --index.

    Lister les modifications sauvegardées

    Pas de suspens. Il faut faire un git stash list pour avoir la liste de vos modifications enregistrées.

    Nommer une modification

    En multipliant les modifications, il va être rapidement nécessaire de pouvoir les identifier rapidement. Heureusement pour nous, il est possible de nommer une modification lors du remisage avec la commande git stash save "test du nouveau framework JS à la mode".

    Restaurer une modification en particulier

    La liste des remisages retourne un identifiant de la forme stash@{N}. Il est possible de restaurer une modification en particulier à partir de cet identifiant avec la commande suivante git stash apply stash@{0}.

    Consulter une sauvegarde

    Vous souhaitez vérifier le contenu d’une sauvegarde avant de l’appliquer ? Rien de plus simple avec git stash show stash@{0} qui retournera l’équivalent d’un git diff --stat. Si vous souhaitez obtenir le contenu des modifications (comme avec git diff), il faut alors ajouter l’option -p comme ceci : git stash show -p stash@{0}.

    Supprimer une sauvegarde

    Le dernier remisage peut être supprimé avec la commande git stash drop. Si vous souhaitez supprimer une sauvegarde en particulier, il faut alors préciser son identifiant : git stash drop stash@{0}.

    Restaurer et supprimer une sauvegarde

    On retrouve ici la commande de base git stash pop qui vous permet d’appliquer votre modification précédemment sauvegardée tout en l’oubliant.

    Créer une branche à partir d’une sauvegarde

    Vous aviez mis de côté une modification et maintenant vous devez vous remettre dessus et même créer une branche spécifique ? Rien de plus simple avec git stash branch stash@{0}.

    Annuler une restauration

    Imaginons que vous avez restauré une modification sur laquelle vous réalisez d’autres modifications. Puis arrive un moment où vous souhaitez annuler seulement les modifications de la remise mais pas celles qui ont suivi. Vous suivez ? Ceci est possible en chainant 2 commandes git : git stash show -p stash@{0} | git apply -R.

    Aller plus loin

    Comme vous avez pu le constater, un “stash” se manipule comme un commit. vous pouvez donc y appliquer les mêmes opérations telles que merge, patch, checkout, etc…

    Sans pousser une utilisation aussi avancée, vous avez maintenant toutes les clés pour gérer vos différentes modifications concurrentes sans avoir à créer des branches ou faire des commits pour rien.


    © SeB for Le weblogue de SeB, 2018. | Permalink | No comment

    Add to del.icio.us

    Search blogs linking this post with Technorati

    Want more on these topics ? Browse the archive of posts filed under Développement, Non classé.

  • Wednesday 10 October 2018 - 07:44

    Il est loin le temps, où l’on montait un média center de salon à base de carte mère au format mini-ITX de 17x17cm et surtout sans ventilateur. Aujourd’hui, le Raspberry Pi est bien plus répandu et le modèle zero tient dans les dimensions de 6,5×3,1cm !

    Voyons donc comment l’installer et le configurer sans utiliser ni clavier, ni écran, ni WiFi, ni même d’alimentation secteur. Pour cela, nous aurons besoin d’un PC quelconque (avec un port USB), d’un cable USB vers micro-USB, d’une carte micro-SD et d’un Raspberry Pi Zero v1.3.

    Installation

    Image Raspbian

    La première étape consiste à installer la distribution Raspbian sur la carte micro-SD. Pour cela, il faut télécharger la version LITE1. Après avoir téléchargé la distribution et inséré la carte mémoire dans votre PC, vous pouvez copier l’image via un outil tel que Etcher.

    Une fois l’image copiée, la carte mémoire ne devrait plus être visible sur votre PC. Éjectez-la et réinsérez la.

    Activation du SSH

    N’ayant ni écran, ni clavier, nous allons nous connecter à distance au Raspberry. Il est donc nécessaire d’activer le service SSH en créant un simple fichier ssh vide à la racine de la carte mémoire (correspondant à la partition boot).

    Ethernet sur USB

    Notre Raspberry n’a pas de Wi-Fi et nous n’avons pas non plus de cable Ethernet. Pourtant nous souhaitons nous connecter à distance. Ceci est possible via le câble USB grâce au support de l’Ethernet sur USB.

    Pour activer cette fonctionnalité, nous devons modifier 2 fichiers. Tout d’abord, il faut ajouter à la fin du fichier config.txt la ligne suivante :

    dtoverlay=dwc2
    

    Ensuite, il faut ajouter l’option modules-load=dwc2,g_ether juste après rootwait dans le fichier cmdline.txt.

    Démarrage

    Notre carte mémoire est prête. Nous pouvons l’éjecter du PC, l’insérer dans le Raspberry Pi et brancher ce dernier en USB (sur le port marqué “USB” et pas “PWR IN”) sur ce même PC.

    La petite lumière verte clignote, le système démarre. Il est prêt dès qu’elle devient fixe.

    Connexion

    Pour se connecter en SSH, il faut connaitre l’adresse IP du Raspberry. Il y a 2 options :

    1. BonjourPS2 : un service qui enregistre tous les hostnames du réseau local. Le Raspberry est donc disponible via le nom raspberrypi.local3.
    2. Angry IP Scanner : un scanner de port sur le réseau local. Il faut au préalable vérifier le sous-réseau local utilisé par l’interface réseau du port USB 4 puis lancer le scan sur cette plage.

    Vous vous retrouvez alors à lancer l’une des 2 commandes suivantes (en remplaçant l’IP par celle de votre Raspberry Pi) :

    $ ssh pi@raspberrypi.local
    
    $ ssh pi@192.168.137.51
    

    Si la connexion s’effectue, vous pouvez passer la section suivante.

    Driver RNDIS

    Il se peut que la connexion ne puisse pas s’établir avec le Raspberry Pi. Cela doit provenir du Driver USB, RNDIS, de votre PC qui même s’il a été détecté, ne fonctionne pas correctement.
    Dans ce cas, il faut télécharger le driver de Mod Duo et mettre à jour l’interface USB RNDIS avec ce driver.

    La connexion doit maintenant fonctionner !

    Configuration

    Accès à Internet

    Votre Raspberry Pi Zero est accessible sur le réseau local mais il n’a pas encore accès à Internet. Comment faire ? Rien de plus simple, il suffit de se rendre sur la configuration de l’interface réseau donnant accès Internet à votre PC et d’activer l’option “Autoriser d’autres utilisateurs du réseau à se connecter via la connexion Internet de cet ordinateur” dans l’onglet “Partage” et choisir l’interface réseau USB.

    IP statique

    Pour que le Raspberry conserve toujours la même adresse IP, il est nécessaire de modifier le fichier de configuration /etc/dhcpcd.conf avec la commande sudo nano /etc/dhcpcd.conf pour lui ajouter les lignes ci-dessous :

    interface usb0
    
    static ip_address=192.168.1.2/24
    static routers=192.168.1.1
    static domain_name_servers=192.168.1.1
    

    Et ensuite, redémarrer le système avec la commande sudo reboot.

    Nom de la machine

    Comme nous l’avons vu précédemment, les Raspberry ont un même nom par défaut : raspberrypi. Si vous en possédez plusieurs, il est intéressant de changer leur nom. Voici comment renommer notre Raspberry Pi Zero en raspberrypizero :

    $ sudo echo "raspberrypizero" > /etc/hostname
    $ sudo sed -i "s/raspberrypi/raspberrypizero/g" /etc/hosts
    

    Conclusion

    Pour 5€5, nous avons pu créer un “serveur parasite” autonome et fonctionnel en se branchant sur le port USB de la machine hôte. Il est temps de passer aux choses sérieuses maintenant !

    1. Ici, j’ai fait le test avec Raspian 2018-06-27
    2. Version 2.0.2.0 testée avec succès.
    3. Il peut y avoir des conflits si vous avez d’autres Raspberry sur votre réseau qui ont toujours le nom par défaut.
    4. Pour mon cas, le sous-réseau était le 192.168.137.0.
    5. Le prix est malheureusement doublé avec les frais de port…


    © SeB for Le weblogue de SeB, 2018. | Permalink | No comment

    Add to del.icio.us

    Search blogs linking this post with Technorati

    Want more on these topics ? Browse the archive of posts filed under Linux.

  • Tuesday 27 November 2018 - 07:42

    Bravo ! Vous avez enfin réussi à faire le buzz avec l’un de vos articles. Vous êtes relayés par des influenceurs américains sur Facebook et vous percez sur Reddit. Un flux continu de visiteurs maintient pendant un certain temps un trafic important sur votre serveur. Tout roule !

    Pourtant, une fois le buzz retombé, votre serveur continue d’être fortement sollicité alors que tout semble être retourné à la normal sur votre outil de suivi des visiteurs. Que ce passe-t-il ?

    Introduction

    En cherchant, vous vous rendez compte que vous subissez des vagues de robots provenant de Chine et Russie. Il semble qu’en étant autant exposé, votre site suscite l’intérêt de ces bots. Ce nouveau trafic, qui ne vous apporte rien, met à mal votre serveur. Il est tant de mettre en œuvre une solution radicale : bloquer le trafic provenant de ces pays.

    La première idée qui vient à l’esprit est de configurer iptable. N’étant pas un expert, j’avais peur de perdre l’accès au serveur sur une erreur de configuration. J’ai donc opté pour une autre solution : le blocage du trafic au niveau HTTP avec un module Apache de géolocalisation.

    Installation

    Pour cela, il est possible d’utiliser le module pour Apache de Max Mind : mod_geoip. Disponible sur Debian et Ubuntu, il s’installe très simplement :

    $ apt-get install libapache2-mod-geoip

    Une fois installé, il est nécessaire de l’activer et de lui indiquer d’utiliser la base locale en éditant le fichier /etc/apache2/mods-available/geoip.conf avec la configuration suivante:

    <IfModule mod_geoip.c>
      GeoIPEnable On
      GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
    </IfModule>

    Il ne reste plus qu’à redémarrer le serveur pour que le module soit fonctionnel :

    $ /etc/init.d/apache2 restart

    Configuration d’un site

    Le seconde étape consiste à configurer le blocage pour un site. Cette configuration peut se faire un niveau du fichier de configuration du vhost ou dans le fichier .htacces. Voici un exemple de blocage de la Chine, Russie et Corée du Nord :

    SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
    SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
    SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry
     
    Deny from env=BlockCountry

    Si vous l’avez configuré au niveau du vhost, pensez à recharger la configuration.

    Maintenant, votre serveur Apache va répondre des erreurs 403 à tous les clients provenant de ces pays.

    Conclusion

    Cette solution ne permet pas de bloquer complètement le trafic réseau provenant de certains pays. Le serveur Apache continue de servir les requêtes HTTP. Néanmoins, le trafic réseau est réduit car les réponses sont beaucoup plus petites et les bots ne vont plus suivre les liens de votre site. De plus, la charge de traitement de ces requêtes va être considérablement réduite. Et donc, votre serveur HTTP va retrouver un état plus stable.


    © SeB for Le weblogue de SeB, 2018. | Permalink | 3 comments

    Add to del.icio.us

    Search blogs linking this post with Technorati

    Want more on these topics ? Browse the archive of posts filed under Développement.

  • Tuesday 18 December 2018 - 15:36

    Avec cette nouvelle série d’articles, je propose de partager une nouvelle façon de concevoir nos applications web.

    • Le web dynamique et la chaleur de données
    • Etape par étape – PWA
    • Etape par étape – REST API en lecture seule
    • Etape par étape – SPA
    • Etape par étape – permaliens
    • Etape par étape – indexation
    • Etape par étape – BaaS & Full services
    • Déploiement – On-premise
    • Déploiement – Cloud & PaaS

    Les liens vers les articles seront prochainement publiés.


    © SeB for Le weblogue de SeB, 2018. | Permalink | No comment

    Add to del.icio.us

    Search blogs linking this post with Technorati

    Want more on these topics ? Browse the archive of posts filed under Conception, Développement.

  • Thursday 10 January 2019 - 09:06

    A l’époque où le JSON est roi, ce billet fait un peu tâche, non ? Pourtant le XML est toujours là, plutôt côté serveur, bien discret. Et même s’il n’est plus aussi populaire que le JSON, nous sommes parfois amené à le manipuler.

    Pour tout ce qui est transformation de document, vous pouvoir aller voir du côté du bien connu XSL. Mais si vous souhaitez seulement explorer un XML pour y extraire simplement et rapidement des informations dans un script shell ou en ligne de commande, je ne saurais vous conseiller xmlstarlet.

    Installation

    $sudo apt-get install xmlstarlet

    Usage

    Imaginons que vous souhaitiez connaitre le nombre de billets disponibles sur le flux RSS de ce blog. Rien de plus simple :

    $ curl -s -L https://blog.lecacheur.com/feed/ | xmlstarlet sel -t -v "count(//item)" -n
    10

    De même, si vous souhaitez lister les billets avec leur URL:

    $ curl -s -L https://blog.lecacheur.com/feed/ | xmlstarlet sel -t -m "//item" -v title -o " : " -v "feedburner:origLink" -n
    Le statique est la nouvelle dynamique : https://blog.lecacheur.com/2018/12/18/le-statique-est-la-nouvelle-dynamique/
    Apache – bloquer l’accès HTTP à certains pays : https://blog.lecacheur.com/2018/11/27/apache-bloquer-lacces-http-a-certains-pays/
    Installer un Raspberry Pi Zero sans périphérique : https://blog.lecacheur.com/2018/10/10/installer-un-raspberry-pi-zero-sans-peripherique/
    Git – le b.a.-ba – mettre de côté son travail : https://blog.lecacheur.com/2018/06/14/git-le-b-a-ba-mettre-de-cote-son-travail/
    Devoxx France 2018, encore et toujours ! : https://blog.lecacheur.com/2018/05/03/devoxx-france-2018-encore-et-toujours/
    Swagger, OpenAPI ou OpenAPI Spec ? : https://blog.lecacheur.com/2018/02/20/swagger-openapi-ou-openapi-spec/
    Debug d’une application web locale sur un mobile avec Chrome : https://blog.lecacheur.com/2018/01/16/debug-dune-application-web-locale-sur-un-mobile-avec-chrome/
    Installer Scrapy sous Windows : https://blog.lecacheur.com/2017/12/28/installer-scrapy-sous-windows/
    Le Nextbit Robin et le debugging USB : https://blog.lecacheur.com/2017/12/26/le-nextbit-robin-et-le-debugging-usb/
    Tester en local les Firebase Functions : https://blog.lecacheur.com/2017/11/03/tester-en-local-les-firebase-functions/

    Même si j’aurais tendance à préférer l’utilisation de cURL, xmlstarlet est capable de récupérer un document XML via une URL et l’option --net:

    $ xmlstarlet sel --net -t -m "//item" -v title -n http://feeds.feedburner.com/LeWeblogueDeSeb
    Le statique est la nouvelle dynamique
    Apache – bloquer l’accès HTTP à certains pays
    Installer un Raspberry Pi Zero sans périphérique
    Git – le b.a.-ba – mettre de côté son travail
    Devoxx France 2018, encore et toujours !
    Swagger, OpenAPI ou OpenAPI Spec ?
    Debug d’une application web locale sur un mobile avec Chrome
    Installer Scrapy sous Windows
    Le Nextbit Robin et le debugging USB
    Tester en local les Firebase Functions

    Il est bien évidemment possible de récupérer un élément particulier dans une liste, comme par exemple pour récupérer le titre du dernier billet publié :

    $ xmlstarlet sel --net -t -m '//item[1]' -v title -n http://feeds.feedburner.com/LeWeblogueDeSeb
    Le statique est la nouvelle dynamique
    

    Il est également possible de manipuler des documents HTML avec l’option --html comme ceci :

    $ xmlstarlet sel --net --html -t -m "//src" -v "@src" -n http://blog.lecacheur.com/

    Cependant, je n’ai pas réussi à extraire des informations car il y avait régulièrement des erreurs HTML ou d’entités manquantes…

    Conclusion

    Nous avons vu comment extraire des données, qui est le cas le plus courant. Mais il faut savoir que xmlstarlet est une vraie boîte à outil pour le XML. Il est capable de modifier un document, d’appliquer des transformation XSL, de valider ou formatter un document, afficher la structure, etc…

    xmlstarlet est donc un outil très simple qui peut se révéler très efficace quand il s’agit d’automatiser des traitements basés sur des informations stockées dans des documents XML.

    A vos scripts bash !


    © SeB for Le weblogue de SeB, 2019. | Permalink | No comment

    Add to del.icio.us

    Search blogs linking this post with Technorati

    Want more on these topics ? Browse the archive of posts filed under Développement, Linux.