Avatar
🏃
achat android animaux anticor apple arnaque association biot bluesky bricolage canoe canyoning ccesoir chateau choisir-velo cinema citation citroen-c8 commission configuration consomacteur course courses courses-dobstacles cuisine cv-pro dawarich debian dell depannage dev docker don dsi désinformation economie facebook fedora firewall football garmin gohugo gravel hebergement home-assistant hugo humhub inondation internets iphone-ipad jeux justice kali linux livre loisirs mac marathon mastodon mecanique misere momes-dazur musee-loisirs nice-matin non-classe oracle padel petition peugeot-206 peugeot-307 peugeot-406 photos php politique postgresql pro proxmox randonnee randonnée raspberry redhat redis republique-numerique reseaux-sociaux sante-internets sante-loisirs securite-internets self-hosted ski ski de randonnée sortir soutien spam sport-biot-2 sports stockage theatre trail twitter/x twitter/x ubuntu velo velo-biot velo-sur-biot via-ferrata ville villes visites voyage vtt windows wordpress wordpress-fr xbox élections municipales 0189xxxxxx 10-km 10-miles 10km 12-km 140 2014 2kv 307 406 406-hdi 920 920xt 930 935 abus acpi actif azur adb adhesion adsl agay age air aix-en-provence alcatel allianz allianz-riviera alpe-dhuez alpes-maritimes alpilles alternateur amap amazon amp anaconda analyse analytics android animaux anote anthea anthea-fr antibes anticor antutu apache2 apn apple applepi-baker april arcep arfi arnaque aroooo aseb-am asics association assurantprotection.fr asterisk asus asus-zenfone atos atsemtex audit auron authentique-fr autoroute avis awesome-note awk awox baignade balade balade-fr barcelonnette barnier base-de-donnee bash basket-ball belt benchmark bento bentomedia betrail biellette bigreen bilan bilan professionnel bilan sportif bilan-fr bio biot biot-fr biot-vernir bitdefender bkl-l09 blacklist blender blockchain-fr blog blogger-com bluesky bonifacio bormes-les-mimosas bot brague braun breil-sur-roya brew bricolage brm brm200 bruxelles bueil bug c cadolive cagnes-sur-mer caille caisse-depargne calanques calencon calendrier camargue cannes cannes-fr canoe cantabrie canyon canyoning cap-dantibes cardio carlit carnaval-de-nice carnaval-de-nice-fr carros carroz casa castellane castellar cat catamaran caussols ccbot ccc cdisplay ceinture cevennes chamonix chateau chaussures cheiron choisir velo cinema circuit cisco citation citrix classement claudebot clignotant cloud cloud-act cloud-personnel cnews codegouv col connecté col de greoliere col-connecte col-de-la-madone col-de-turini colmars competition compression configuration connect consomacteur conspiracy watch convergence-azureenne coreos coronarivus coronavirus corse courmes course course-a-pied course-dobstacle course-dobstacles course-dorientation course-fr coursegoules courses-2 covid covid-19 cozy-cloud cozytouch cpu critique cross cuda cuenod curl cursor dansup dark-web data dataforseo dawarich dawarich.app day-journal debian decathlon decodex deletefacebook dell dello-sciliar-catinaccio delphi demi-yasso derby-de-la-meije developpement developper-tools-access diag diario diaro diaspora digikam digiposte distribution docker docteur-gsm-com dolceacqua dolomites domolites domotique don dourgne dsi duranus débats désinformation ecologie economie education el-capitan elasticsearch elk elm327 email endurain enphase ensol entreprises entretien epidemie escape-game escarene escroquerie espagne estrosi europe eurovelo evasion-fiscale evolution-a-faire exiftool export eze f-f-a facebook facture facture-deau-fr fakenews falicon fan fayence fedora fenix 7 ffa ffmpeg filebeat fillion fillon film-bon film-moyen filtre-a-gazole filtre-pollen fire firewall fittrackee folder foodwatch footing for forerunner forerunner-935 forerunner-945 forerunner-955 forgejo framasoft framasphere france culture france-3 france-soir fraude fraude-fiscale free free-mobile freebox frejus funchal gafams gaillac garageband garmin garmin-connect gavarnie gcc gelas geodes gilette git github glance gmail goaccess gohugo google google-analytic google-analytics google-search-console gopro gorbio gotify goudurix gouffre gourdon gourdon-fr gptbot gpx grafana grasse gravel graxx greoliere greolieres greolieres-les-neiges grub gréolières gtest guillon hadopi haproxy hautpoul hebergement high-trail-vanoise hintertux hipay hipay-com historique-des-dons holdup home-assistant homeassistant hommage honeywell honor hop howto htv huawei hugo huile-direction-assiste humhub ia ibm iconservicesagent ie ign ilonse imagento imageoptim imagneto immich imovie import impots indent injecteur inondation insee insta360 installation internet intimidation ipad ipad-argus iphone iphoto iptables isola-2000 issue italie itra itunes j2s jaime-courir java javascript jeedom jenkins jetpack jeux jeux-de-sophia jeux-de-sophia-antipolis joplin joseph journey jpegoptim juns jupyter justice kali karer-pass kayak kernel kibana kies-app kilometre-vertical kisskissbankbank kiwix klaxon kodi kokopelli korben la-brague la-capelette la-grave-de-peille la-poste la-quadrature-du-net la-vie lac-de-vens langage lantosque lapeyre laquadrature latemar lateral lautrec lcd le-monde leon les-cammazes les-visiteurs-du-soir let's encrypt lets-encrypt levens libreoffice libvirt lightmd linux liste livebox livre logement logiciel logstash loi-numerique lombricomposteur luberon lulu mac mac-os macjournal macos macos-high-sierra madere malade malware mamp mandelieu maps marathon marche mariadb markdown marseille mastodon matomo matomo-analytics matosdon matrix mazamet mcafee mecanique mediapart meduses meije meltdown memo menuiserie mercantour merci-michel mermaid meta metricbeat microsoft-teams migration misere mkdocs module mogrify mojave monsanto montagne-noire montagne-noire-fr montauroux motionpro mougins moulinet mouton msf mud-day mud-day-fr munin mysql mytf1 mytf1-fr mywellness myzone naiad naiad2020 natation natation-libre nature nautipolis neige netamo netatmo nextcloud nginx nice nice-fr nice-matin notes nsinvalidargumentexception ntfs nuxit nvidia objective-see obsolescence-programmee obstacle occ occasion odbii ok-google ollama olvid onedrive oopad open open-data open-sky open-source open-source-experience opencv opendata opensky opensky-a-valbonne opio oracle-linux orange origine-cycles orsiere osm france osmc oss-paris osx osxp osxp2024 osxp2025 outlook owncloud pac paca padel panorama panoramique paradisdiscount-com parc-du-paradou parc-naturel-dello-sciliar-catinaccio paris pascal paul paypal pdf peillon peinture petition peugeot peugeot-307 phare photo photon photos photovoltaique php phpnet phpnet-org pichauris pigeon pinterest pip piscine planning play-store plongee plu plugin pluviometrie pneu politique pollution polylang postfix postgresql ppri prejuges preparation print prix programmation prom-classic prometheus provence proxmox pssh publicite purge pyrenees python python3 qnap quartier qwant raid rameur-dinterieur rancheros randonnee randonnee-2 randonnees randonnée raspberry recette recette-fr redbysfr redhat redis redmi reparartion reparation reseau-sociaux resideo rest-api resultat reunion revue-de-presse rgpd rimplas rock64 root roquebilliere roubion rouret row rsyslog rt-france rubitrack rue89 saint-amancet-fr saint-avit saint-fereol saint-jeannet saint-vallier-de-thiey saintetic salade-nicoise-fr salle-serveur salon samsung san-remo sante sauter scop sd-card securite security.txt sed selection self-hosted semaine-de-la-critique semi semi-marathon semi-marathon-fr sentier seranon server-git serveur service-public siagne sidobre sierra signal sip ski ski de randonnée ski-de-randonnee skred skype slack smart-home smartphone smsc snap sommets sondage sondage-en-ligne sophia-antipolis soreze soreze-fr sortie-en-famille sospel soual spam spartan spartan-race spartan-race-fr spartian spectre sport sql sqlite ssd stable-diffusion stade station-meteo statistique statistiques stockage strava suisse suivi summary surf svn swap swarm syslog systemd tanneron tapform tarif tarn tarn-fr taxes telerama television temp temperature template templier tende tennis tennis-de-table tensorflow test testeur tests textwrangler theatre theoule-sur-mer thorenc thunderbird thunderbirds tignes tor tour-des-sangliers tour-du-sanglier tourisme tourrettes-sur-loup trail trail-de-la-vesubie transposh transvesubienne trashbusters travail travaux trial trifecta turbie tux tuxedo tuxedo-computer tuya twitter tyrol ubaye ubuntu ufc-que-choisir ultra uniq unknown unroot update urbain urban-trail urbanbiker utcam utelle utmb vae valbonne valeo vallee-des-merveilles valloire vallon-des-horts valmasque var vaucluse vaultwarden vauplane vegay velo velotaf vence ventoux veolia verdon vesubie vidange video villeneuve-loubet vim virtual-box virtualbox virus vma vmware vol voyage vpn vps vtc vtt wanderer wannacry webalizer wget whatsapp wifi wikimedia-foundation wikipedia wiko windows wine woocommerce wordfence wordpress x xbmc xbox yahoo-mail yolo zenfone zenpad zigbee
  • Avant d’utiliser Digikam, il est plus facile de supprimer les images identiques via un simple script :

    find Images/  -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 15 > dupes.txt
    
    awk '/^$/{getline;print;}' dupes.txt | awk '{print $2 " " $3 " " $4}' | xargs gvfs-trash {}

    Il est aussi possible d’utiliser :

    fdupes -rSm Images

    L’option -d permet la suppression.

    Ensuite on peut utiliser Digikam, qui lui permet de reconnaitre des images identiques mais n’ayant pas la même taille.

    digikam Created Fri, 20 Mar 2020 00:00:00 +0000
  • J’ai amélorié ( voir : https://www.cyber-neurones.org/2020/03/thunderbird-mbox-to-influxdb-and-postgresql-to-grafana-in-python/ ) le programme afin d’injecter sur MySQL ( MariaDB en vérité ). Le plus facile a manipuler sur Grafana c’est MariaDB.

    Pour se connecter de Grafana à MariaDB :

    Les requêtes SQL pour Grafana :

    Par jours :

    SELECT
    UNIX_TIMESTAMP(date) AS time_sec,
    domain as ‘metric’,
    count(domain) as value
    FROM thunderbird
    WHERE
    $__timeFilter(date)
    GROUP BY DAY(date),MONTH(date),YEAR(date)
    ORDER BY date

    Par mois :

    SELECT
    UNIX_TIMESTAMP(date) AS time_sec,
    domain as ‘metric’,
    count(domain) as value
    FROM thunderbird
    WHERE
    $__timeFilter(date)
    GROUP BY MONTH(date),YEAR(date)
    ORDER BY date

    Par années :

    SELECT
    UNIX_TIMESTAMP(date) AS time_sec,
    domain as ‘metric’,
    count(domain) as value
    FROM thunderbird
    WHERE
    $__timeFilter(date)
    GROUP BY YEAR(date)
    ORDER BY date

    Les sources du programme :

    ( Source sur : https://github.com/farias06/Python/blob/master/parse_email_v2.py )

    grafana thunderbird Created Thu, 19 Mar 2020 00:00:00 +0000
  • J’ai donc fait un programme en python afin de faire un export des données de Thunderbird ( fichier mbox contenant les emails) vers Influxdb et Postgresql (dans un premier temps).

    Le but du programme est de maitriser le python afin de faire ensuite des exports vers Grafana. Sur mes exemples j’ai mis en login/password arias/arias (je sais c’est pas secure mais c’est un exemple …).

    Configuration GRAFANA:

    Le programme :

    ( Source disponible ici : https://github.com/farias06/Python/blob/master/parse_email.py )

    thunderbird Created Tue, 17 Mar 2020 00:00:00 +0000
  • J’ai donc installé le soft :

    $ uname -r
    5.3.0-40-generic
    $ sudo apt-get install garmin-forerunner-tools
    ...
    $  sudo dpkg-query -l | grep garmin-forerunner-tools 
    ii  garmin-forerunner-tools                       0.10repacked-10                                 amd64        retrieve data from Garmin Forerunner/Edge GPS devices

    Ensuite j’ai connecté ma montre :

    $ lsusb 
    Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 003: ID 04f2:b649 Chicony Electronics Co., Ltd 
    Bus 001 Device 009: ID 091e:4c29 Garmin International 
    Bus 001 Device 004: ID 8087:0025 Intel Corp. 
    Bus 001 Device 006: ID 062a:4106 Creative Labs 
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Par contre les commandes ne fonctionnent pas :

    garmin Created Wed, 11 Mar 2020 00:00:00 +0000
  • Michel, je te sais tout patraque depuis que tu as vu une série d’articles indiquant que Débian avait plus de faille que Windows:

    La liste des failles de Débian est ici : https://www.cvedetails.com/vendor/23/Debian.html .

    debian Created Wed, 11 Mar 2020 00:00:00 +0000
  • J’ai donc testé le script suivant : https://github.com/myspaghetti/macos-guest-virtualbox : macos-guest-virtualbox . Le but du script est de faire une machine Virtuel sous Ubuntu. A noter que le déroulement du script est très long, je pense qu’il faut compter 4 heures.

    Voici tous le process d’installation :

    # wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
    
    # wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
    
    # sudo add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian bionic contrib" 
    
    # sudo apt update
    
    # sudo apt install virtualbox-6.1 virtualbox-dkms
    
    # sudo apt install libcanberra-gtk-module libcanberra-gtk3-module
    
    # sudo apt-get install dmg2img

    Il est impératif d’avoir une version de virtualbox > 6.1. Par défaut sur Ubuntu on a la version 5.0 …

    macos ubuntu virtualbox Created Wed, 11 Mar 2020 00:00:00 +0000
  • Je ne comprends pas pourquoi j’ai autant de SWAP avec ma configuration de swappiness :

    $ swapon -s
    Filename				Type		Size	Used	Priority
    /dev/sda3                              	partition	8388604	924672	-2
    $ cat /proc/sys/vm/swappiness
    1
    $ cat /proc/sys/vm/vfs_cache_pressure
    100
    $ getconf PAGESIZE
    4096
    $ cat /etc/os-release | grep "PRETTY_NAME"
    PRETTY_NAME="Ubuntu 18.04.3 LTS"
    $ free -m
                  total        used        free      shared  buff/cache   available
    Mem:          64081        4045        8756         506       51279       58818
    Swap:          8191         903        7288

    Quand je regarde la documentation, vu que j’ai 64 Go de RAM je ne devrais pas avoir de SWAP :

    ubuntu Created Wed, 11 Mar 2020 00:00:00 +0000
  • J’ai fait une petite lecture des tables de Dikikam afin de faire un export des images similaires avec un taux à 1.0 :

    $ sqlite3 
    SQLite version 3.22.0 2018-01-22 18:45:57
    Enter ".help" for usage hints.
    Connected to a transient in-memory database.
    Use ".open FILENAME" to reopen on a persistent database.
    sqlite> .open similarity.db
    sqlite> .tables
    ImageHaarMatrix     ImageSimilarity     SimilaritySettings
    sqlite> .schema ImageSimilarity
    CREATE TABLE ImageSimilarity
                        (imageid1 INTEGER NOT NULL,
                        imageid2 INTEGER NOT NULL,
                        algorithm INTEGER,
                        value DOUBLE,
                        CONSTRAINT Similar UNIQUE(imageid1, imageid2, algorithm));
    sqlite> .schema ImageHaarMatrix
    CREATE TABLE ImageHaarMatrix
                        (imageid INTEGER PRIMARY KEY,
                        modificationDate DATETIME,
                        uniqueHash TEXT,
                        matrix BLOB);
    CREATE TRIGGER delete_similarities DELETE ON ImageHaarMatrix
                        BEGIN
                            DELETE FROM ImageSimilarity
                                WHERE ( ImageSimilarity.imageid1=OLD.imageid OR ImageSimilarity.imageid2=OLD.imageid )
                                  AND ( ImageSimilarity.algorithm=1 );
                        END;
    sqlite> .schema SimilaritySettings
    CREATE TABLE SimilaritySettings
                        (keyword TEXT NOT NULL UNIQUE,
                        value TEXT);
    sqlite> .open digikam4.db
    sqlite> .tables
    AlbumRoots          ImageHistory        ImageRelations      Settings          
    Albums              ImageInformation    ImageTagProperties  TagProperties     
    DownloadHistory     ImageMetadata       ImageTags           Tags              
    ImageComments       ImagePositions      Images              TagsTree          
    ImageCopyright      ImageProperties     Searches            VideoMetadata     
    sqlite> .schema Images
    CREATE TABLE Images
                        (id INTEGER PRIMARY KEY,
                        album INTEGER,
                        name TEXT NOT NULL,
                        status INTEGER NOT NULL,
                        category INTEGER NOT NULL,
                        modificationDate DATETIME,
                        fileSize INTEGER,
                        uniqueHash TEXT,
                        manualOrder INTEGER,
                        UNIQUE (album, name));
    CREATE INDEX dir_index  ON Images (album);
    CREATE INDEX hash_index ON Images (uniqueHash);
    CREATE INDEX image_name_index ON Images (name);
    CREATE TRIGGER delete_image DELETE ON Images
                        BEGIN
                            DELETE FROM ImageTags          WHERE imageid=OLD.id;
                            DELETE From ImageInformation   WHERE imageid=OLD.id;
                            DELETE From ImageMetadata      WHERE imageid=OLD.id;
                            DELETE From VideoMetadata      WHERE imageid=OLD.id;
                            DELETE From ImagePositions     WHERE imageid=OLD.id;
                            DELETE From ImageComments      WHERE imageid=OLD.id;
                            DELETE From ImageCopyright     WHERE imageid=OLD.id;
                            DELETE From ImageProperties    WHERE imageid=OLD.id;
                            DELETE From ImageHistory       WHERE imageid=OLD.id;
                            DELETE FROM ImageRelations     WHERE subject=OLD.id OR object=OLD.id;
                            DELETE FROM ImageTagProperties WHERE imageid=OLD.id;
                            UPDATE Albums SET icon=null    WHERE icon=OLD.id;
                            UPDATE Tags SET icon=null      WHERE icon=OLD.id;
                        END;
    sqlite>  .schema ImageInformation
    CREATE TABLE ImageInformation
                        (imageid INTEGER PRIMARY KEY,
                        rating INTEGER,
                        creationDate DATETIME,
                        digitizationDate DATETIME,
                        orientation INTEGER,
                        width INTEGER,
                        height INTEGER,
                        format TEXT,
                        colorDepth INTEGER,
                        colorModel INTEGER);
    CREATE INDEX creationdate_index ON ImageInformation (creationDate);
    sqlite> .schema Albums
    CREATE TABLE Albums
                        (id INTEGER PRIMARY KEY,
                        albumRoot INTEGER NOT NULL,
                        relativePath TEXT NOT NULL,
                        date DATE,
                        caption TEXT,
                        collection TEXT,
                        icon INTEGER,
                        UNIQUE(albumRoot, relativePath));
    CREATE TRIGGER delete_album DELETE ON Albums
                    BEGIN
                        DELETE FROM Images
                        WHERE Images.album = OLD.id;
                    END;
    sqlite> attach 'digikam4.db' as db1;
    sqlite> attach 'similarity.db' as db2;
    sqlite> select count(*) from db1.Images as A, db2.ImageSimilarity as B, db1.Albums as C where B.imageid2 = A.id and B.algorithm = 1.0 and A.album = C.id;
    36796
    sqlite> select relativePath || '/' || name from db1.Images as A, db2.ImageSimilarity as B, db1.Albums as C where B.imageid2 = A.id and B.algorithm = 1.0 and A.album = C.id group by relativePath;
    ...
    sqlite> .output file_duplicate.txt
    sqlite> select '.' || relativePath || '/' || name from db1.Images as A, db2.ImageSimilarity as B, db1.Albums as C where B.imageid2 = A.id and B.algorithm = 1.0 and A.album = C.id group by relativePath;
    
    sqlite> select count(*) from db1.Images as A, db2.ImageSimilarity as B, db1.Albums as C where B.imageid2 = A.id and A.album = C.id and relativePath = '/2019/11/28';
    654
    sqlite> select count(*) from db1.Images as A, db2.ImageSimilarity as B, db1.Albums as C where B.imageid1 = A.id and A.album = C.id and relativePath = '/2019/11/28';
    2545
    sqlite> .output file_duplicate_2.txt
    sqlite> select '.' || relativePath || '/' || name from db1.Images as A, db2.ImageSimilarity as B, db1.Albums as C where B.imageid2 = A.id and B.algorithm > 0.96 and A.album = C.id;
    sqlite> .output file_duplicate_3.txt
    sqlite> select '.' || relativePath || '/' || name from db1.Images as A, db2.ImageSimilarity as B, db1.Albums as C where B.imageid1 = A.id and B.algorithm > 0.96 and A.album = C.id;
    sqlite> .quit

    Ensuite pour la suppression j’ai fait :

    digikam sqlite Created Thu, 30 Jan 2020 00:00:00 +0000
  • Sous Mac OS j’avais fait plusieurs articles …Mais sous Ubuntu c’est plus simple, voici les commandes que j’utilise :

    $ du -sh Images/
    $ find Images/ -iname '*.jpg' -exec mogrify \{} -verbose -resize 1920x1080\> \{} \;
    $ 

    Je considère que la résolution max est 1920x1080 (on peut aussi prendre 2048x1536). Il est vivement conseillé d’avoir un backup avant de lancer les commandes. Et je vous conseille cette lecture  : https://fr.wikipedia.org/wiki/Impression_photo_num%C3%A9rique

    A noter aussi que je déplace toutes les vidéos avant de lancer la commandes :

    digikam linux mogrify Created Thu, 30 Jan 2020 00:00:00 +0000
  • Suite à la compression via Digikam, toutes les nouvelles images compressées ont eu une mauvaise date. Ce qui donne sur le timeline ceci :

    Le pic de 2019, n’a pas lieu d’être … j’ai donc essayer de lancer une ligne de commande pour changer la date de modification et de création des images.

    $ time exiftool -v -r "-filemodifydate<datetimeoriginal" "-filecreateddate<datetimeoriginal" Images/
    ...
     3214 directories scanned
    119812 image files updated
    15783 image files unchanged
      203 files weren't updated due to errors
    
    real	22m59,695s
    user	22m0,499s
    sys	0m21,394s

    Ensuite j’ai refait un scan avec Digikam : Je n’ai pas remarqué de changement sur la courbe … misère.

    digikam exiftool Created Tue, 28 Jan 2020 00:00:00 +0000