Blog

  • Astuce Smartphone – Ajouter ses coordonnées GPS sur les photos

    Dernièrement, je me suis beaucoup posé la question sur la manière d’ajouter des coordonnées GPS à des photos.
    Comme beaucoup de gens en été, je prend pas mal de photos de lieux, et je me demandais comment mettre ces photos sur une maps (Google Maps, Leaflet ou autres).

    Il existe beaucoup de solutions pour cela, mais je me heurtais à un premier problème : j’avais pris beaucoup de photos, en l’occurrence plus d’une centaines, et aucunes des photos ne contenaient des coordonnées GPS.
    Pour régler mon problème, j’étais dans l’obligation de tout faire à la main, et cela m’a pris plusieurs heures de correction.

    Il existe néanmoins une solution simple pour ne plus avoir à faire ce genre de chose. Il suffit d’enregistrer la position GPS lors de la prise des photos, directement dans les méta-data. Cette astuce se fait en quelques secondes.

    Sur son Smartphone, choisir son application de téléphone
    Bouton des paramètres
    Choisir le bouton des paramètres
    Activer l'enregistrement de la position.
    Activer l’enregistrement de la position (GPS)

    En suivant ces 3 étapes, les coordonnées devraient s’enregistrer directement.
    Pour exemple, voici une de mes photos avec les informations souhaités.

    J’espère que cette astuce vous aidera

  • array_rand – Prendre des clés au hasard dans un tableau

    En PHP, et dans les autres langages aussi, il existe les fonctions générant de l’aléatoire.
    En premier lieux, pour ces fonctions-là, nous pensons souvent à rand et mt_rand. Elles sont les plus courantes, générant des valeurs aléatoires et nous retournant des chiffres.

    Il existe d’autres fonctions, basé sur l’aléatoire, mais qui ne nous retourne pas des chiffres. Je vais prendre l’exemple de array_rand.

    array_rand : comment ça marche

    J’ai rencontré cette fonction il n’y a pas très longtemps.
    array_rand prend une ou plusieurs clés, au hasard dans un tableau, et retourne la ou les clés de ces valeurs.

    Voici un exemple de cette fonction :

    <?php
    $input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
    $rand_keys = array_rand($input, 2);
    echo $input[$rand_keys[0]] . "\n";
    echo $input[$rand_keys[1]] . "\n";
    ?>

    Ce code nous donnera en sortie, 2 des noms de personnage de la saga Matrix contenu dans le tableau.

    Chose importante, il faut savoir que cette fonction ne convient pas pour de la cryptographie.

    Un problème réel

    Comme je disais plus haut, j’ai connu cette fonction il n’y a pas longtemps, pour la création du bot Twitter @1animalparjour.

    Ce bot a pour but de donner, chaque jour, une photo d’animal mignon.
    Pour faire cela, j’ai cherché ou créé différentes API qui contenaient les photos des différents animaux.
    Les URLs des différentes API ont ensuite été mises dans un tableau PHP.

    $ar = [
        'https://random.dog/woof.json',
        'https://randomfox.ca/floof/',
        'http://randomanimal.guillaume-richard.fr/animals/bunny/',
        'http://randomanimal.guillaume-richard.fr/animals/cat/',
        'http://randomanimal.guillaume-richard.fr/animals/hedgehog/'
    ];
    $rand_keys  = array_rand($ar);
    $infos      = $ar[$rand_keys];
    
    var_dump($infos); // réponse possible : https://random.dog/woof.json

    Ce code en lui-même ne sert pas à grand chose. C’est juste pour l’exemple.
    La suite de mon script de mon bot récupère ce lien, et lit les informations qui y sont contenu.
    Je récupère le lien de l’image, télécharge cette dernière image, puis l’upload sur le fil Twitter tous les matins.

    Use Case

    Je ne peux pas forcément montrer de réel Use Case de mon script. Comme vous pouvez le comprendre, la finalité de ce script étant l’upload d’image sur le fil Twitter.
    Je ne peux que monter certaines des photos qui sont déjà sur ce fil Twitter.

    Conclusion

    J’ai créé ce compte Twitter pendant mon chômage partiel. Je voulais voir ce qu’il était possible de faire dans ce cas-là.
    Cela m’a permis d’apprendre à connaitre cette fonction, et ce qui était possible de faire avec.

    Il est tout à fait possible d’améliorer cette fonction, et même de la refaire complètement en quelques lignes. Je compléterai cette article quand j’aurai fait cette partie.

    J’espère que cette exemple vous à plus.

  • Réduire la taille d’une image en Bash

    Petit retour d’expérience sur une demande que j’ai eu récemment. Une connaissance m’avait demandé de diminuer la taille d’une de ces photos.

    Personnellement, je ne voulais pas perdre de temps à utiliser Gimp pour faire ce genre de chose. Utilisant Linux, j’ai trouvé la solution avec imagemagick.
    il suffit de taper la commande suivante :

    convert image.jpg -resize 50% image50.jpg

    Cette ligne de commande permet de réduire l’image image.jpg de 50%.
    L’image image50.jpg sera l’image réduite.

    Pour aller plus loin. Imaginons que vous ayez tout un dossier de photo jpg à réduire, je vous propose le script suivant :

    for i in *.jpg; do
    	j="${i%.jpg}"
    	if [ -z "$1" ]; then
    		convert "$j.jpg" -resize 50% "$j.jpg";
    	elif [ -n "$1" ]; then
    		convert "$j.jpg" -resize "$1"% "$j.jpg";
    	fi
    done

    J’ai personnellement mis ce script dans un fichier, que j’ai nommé pictures.sh.

    pictures.sh
    pictures.sh 25
    pictures.sh 60

    Dans votre terminal, si vous lancez le script sans argument, il réduira les images à 50%.

    Si vous ajoutez un argument, comme 25 ou 60 dans l’exemple ci-dessus, les images seront réduire de 25% ou 60%.

    Améliorations

    Il y a plein de piste d’amélioration à ce script Bash.
    La première amélioration étant la gestion de l’argument, et le fait de n’accepter que des chiffres de 1 à 99.
    La deuxième amélioration étant la gestion des autres formats d’images : PNG, JPEG, etc…

    Inspirations

    Site michtoblog : [terminal] Réduire la taille d’une image en ligne de commande
    Documentation imagemagick : https://doc.ubuntu-fr.org/imagemagick
    Site commentcamarche : Bash – Les arguments (paramètres)

  • L’import-export d’événements dans Google Agenda

    La gestion de son temps est devenu un concept primordial dans la société actuelle. Le fait de ne pas pouvoir gérer son temps est, je trouve, un réel problème.
    Personnellement, j’essaye de gérer mon temps au mieux, même si ce n’est pas parfait. Je sais que je peux encore m’améliorer dans cette partie.

    Ayant un smartphone, j’utilise l’agenda de base installé qu’est Google Agenda. On peut dire tout ce qu’on veut sur Google, mais les applications que la firme proposent me conviennent pour le moment.

    Problématique

    J’utilise Google Agenda depuis quelques années, sur tous les supports (smarphone, tablette et ordinateur). Mais un jour, j’ai eu les 2 problématiques suivantes :

    • Comment importer plusieurs événements rapidement
    • Comment sauvegarder tout un agenda (ou comment faire un export complet).

    Pour faire cet article, j’ai utilisé les données du calendrier scolaire que j’ai trouvé sur le site data.gouv.fr. Il est primordial d’utiliser le format iCal, format spécifique de l’application.

    Import de l’agenda

    Quand vous vos situez sur la page principale de votre agenda, cliquez sur l’icône de paramètre, comme sur l’image ci-dessous. Il se situe dans l’en-tête de votre agenda.

    Paramètres Google Agenda
    étape n°1 : Paramètres

    Un menu apparaît. Cliquez sur le premier lien : Paramètres.
    Une nouvelle page apparaît. L’étape suivante se fait grâce au menu de gauche, et le sous-menu Importer et exporter

    Menu Importer et exporter - Google Agenda
    Menu Importer et exporter – Google Agenda

    Après avoir cliquer sur ce menu, nous avons la page souhaité. Nous pouvons importer et exporter des événements de notre agenda.

    Page d'import-export
    Page d’import-export

    Pour importer des événements, il suffit de sélectionner le fichier ics qui va bien. Dans mon cas, c’est le fichier Calendrier_Scolaire_Zones_A_B_C.ics.

    Si tout se passe bien, une petite fenêtre apparaît avec le nombre d’éléments importé.
    Vous pouvez vérifier dans votre agenda. Normalement, tous les événements y sont.

    L’export de l’agenda

    Pour exporter votre agenda, c’est facile.
    Sur la même page d’import-export, il suffit de cliquer sur le bouton exporter. Un fichier ZIP sera proposé en téléchargement.

    Il faut savoir que l’export récupère la totalité des événements de votre agenda.

    Liens

    Importer des événements dans Google Agenda – Lien
    Exporter votre agenda Google – Doc

  • Implode en PHP

    Malgré le fait que PHP soit mal aimé, il reste majoritairement utilisé pour la création de site Web.
    Même après des années d’expériences dans ce langage, on découvre toujours de nouvelles fonctions. Dans certains cas, on les améliore pour qu’ils correspondent à nos besoins.

    implode : comment ça marche.

    A priori, 99% des développeurs PHP connaissent cette fonction, qui permet de rassembler les éléments d’un tableau en une chaîne.
    Voici un petit exemple issu de la documentation de PHP :

    $array = array('lastname', 'email', 'phone');
    $comma_separated = implode(",", $array);
    
    echo $comma_separated; // lastname,email,phone

    Comme vous pouvez le voir, tous les éléments du tableau $array se regroupent dans la chaîne de caractère $comma_separated.
    Tous les éléments de la chaîne de caractère, se retrouvent dans le même ordre que dans le tableau.

    Un problème réel

    J’ai eu l’occasion, fin 2019, de créer un bot Twitter simple qui donne les prix d’essence les moins chères en Haute-Garonne.
    Dans certains cas, plusieurs villes pouvaient avoir le prix le moins cher, selon le type d’essence.

    https://twitter.com/EssenceHg/status/1262260894094053376

    Comme je récupérais le nom de ces villes dans un tableau, et que je devais les ajouter dans un tweet, l’utilisation de la fonction implode était obligatoire.

    De plus, entre les 2 dernières villes, je ne voulais pas mettre la même séparation que les autres éléments.
    En l’occurrence, je voulais mettre un ‘et’ à la place d’une virgule. La fonction finale donne :

    /**
     * Join a string with a natural language conjunction at the end.
     * @param string $glue
     * @param array $pieces
     * @param string $conjonction
     * @return string $str
     */
    function implode_cjt(string $glue, array $pieces, string $conjonction = 'et'):string {
      $str = array_pop($pieces);
      if ($pieces) {
        $str = implode($glue, $pieces).' '.$conjonction.' ' $str;
      }
      return $str;
    }

    Comme vous pouvez remarquer, ma fonction récupère 3 paramètres :

    • une chaîne de caractère glue, liaison des infos du tableau.
    • la tableau pieces, qui est le tableau de chaînes à rassembler.
    • conjonction, qui est la liaison des 2 derniers éléments du tableau.

    La fonction est simple.

    • On retire d’abord le dernier élément du tableau, avec un array_pop.
    • Si le tableau pieces contient encore des éléments, on les regroupe avec un implode (sans oublier notre conjonction et la valeur récupérée dans le Step 1)

    Use Case

    Voici deux exemples d’utilisations de cette fonction :

    $villes = ["Paris", "Bordeaux", "Toulouse", "Marseille"];
    $str = implode_cjt(',', $villes);
    echo $str; // Paris, Bordeaux, Toulouse et Marseille
    
    $villes = ["Blois", "Paris", "Toulouse", "Castres"];
    $str = implode_cjt(',', $villes, 'ou');
    echo $str; // Blois, Paris, Toulouse ou Castres

    Conclusion

    Je voulais inaugurer ce concept d’articles avec un exemple simple.
    J’espère que cet article vous à plus. Si vous en voulez d’autres, n’hésitez pas à me le dire.