Journal Charta, des nouvelles !

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
28
oct.
2025
Ce journal a été promu en dépêche : Charta, des nouvelles !.

Rappel

Charta est un outil en ligne de commande écrit en Go pour générer des graphiques colorés dans un terminal. Il génère plusieurs types de graphiques (Simple, Min/Moy/Max, Cumul, Comparaison) et divers formats d'entrée, JSON, YAML et texte brut et l'entrée standard (stdin). Charta offre des options d'entrée flexibles, une sortie colorée avec des couleurs personnalisables, des capacités de regroupement pour l'analyse de données, et un support de seuils avec des niveaux d'avertissement et d'alerte. Parfait pour la visualisation de données dans les environnements terminaux et les workflows de scripts shell.
Le voici maintenant en version 0.3.1.

Principales nouveautés

  • Refactorisation du code, simplifiant la gestion des plugins
  • Gestion des valeurs négatives pour les graphique simple et minmax
  • Ajout de titre aux graphiques (facultatif)
  • Ajout de légendes aux graphiques (facultatif)
  • Ajout du type de graphique compare permettant la comparaison de 2 valeurs. Ceci permet par exemple la génération de pyramides des âges.
  • Ajout de type de graphique cumul

Copies d'écran

Simple depuis Stdin

Simple depuis Stdin

Minmax depuis Stdin

Minmax depuis Stdin

Cumul depuis Stdin

Cumul depuis Stdin

Compare depuis un fichier texte

label=>100
12.67 2.976
new
label=95-99
8.273 2.058
19.813 4.977
27.754 7.239
37.882 10.101
48.398 14.477
new
label=90-94
61.235 20.525
76.447 27.317
91.072 34.519
105.456 44.797
124.322 55.382
new
label=85-89
139.226 66.602
164.803 83.373
175.872 95.104
192.55 108.339
195.596 116.712
new
label=80-84
210.98 131.872
213.902 139.041
222.853 153.145
226.088 160.969
232.663 171.854
new
label=75-79
239.598 182.015
231.318 179.151
221.914 177.799
249.057 204.674
269.401 224.687
new
label=70-74
279.055 234.112
286.325 242.793
378.561 327.085
400.876 350.179
409.072 361.485
new
label=65-69
413.673 364.312
422.019 374.817
408.05 364.694
418.007 374.781
413.428 371.165
new
label=60-64
421.875 381.146
424.094 382.395
427.893 390.345
430.912 395.817
433.635 400.042
new
label=55-59
442.263 410.415
444.709 416.331
444.896 421.161
445.047 422.099
460.412 438.142
new
label=50-54
464.153 444.96
459.31 442.828
457.665 441.979
447.421 432.749
450.472 434.971
new
label=45-49
452.879 441.572
457.896 448.697
466.462 457.822
469.527 459.886
460.384 448.213
new
label=40-44
435.157 426.173
413.722 404.346
404.35 390.441
413.671 404.816
414.208 399.149
new
label=65-39
424.441 405.581
448.307 427.643
442.482 421.707
438.39 416.777
414.133 391.214
new
label=30-34
417.815 396.435
420.79 398.786
422.167 397.979
413.955 392.786
409.842 390.899
new
label=25-29
405.038 385.034
397.08 384.835
385.366 377.772
376.224 373.66
357.966 356.195
new
label=20-24
358.614 357.849
367.951 371.731
374.177 381.869
370.258 384.384
384.532 398.993
new
label=15-19
390.002 410.714
412.56 433.377
409.037 431.086
403.441 423.901
402.532 422.127
new
label=10-14
403.761 422.877
405.218 424.141
415.28 433.073
408.166 426.744
410.703 430.934
new
label=5-9
408.232 427.917
412.555 429.919
403.349 418.623
396.835 417.471
389.92 407.611
new
label=0-4
387.042 399.232
372.402 387.906
363.162 378.518
355.472 370.453
347.749 364.155

Compare depuis un fichier texte

Vous souhaitez contribuer ?

Les contributions sont les bienvenues !
N'hésitez pas à forker le dépôt, proposer des améliorations, signaler des bugs ou soumettre des pull requests.
Les empaqueteurs pour les différentes distributions sont également les bienvenus. La génération du paquet devrait être simple puisqu'un simple go build génère un exécutable qui n'a besoin d'aucune dépendance.
Packaging status

Liens

  • # Faire une heatmap?

    Posté par  (site web personnel) . Évalué à 7 (+4/-0).

    Dans un but mal défini et largement exploratoire, j'avais un début de velléité d'essayer de faire le même type de graphe que https://linuxfr.org/statistiques/users#stats_state mais sur les différentes tables SQL du site : en clair de voir si la densité des clés primaires dans les tables SQL a bougé au cours du temps : diviser l'espace entre 0 et l'id max en 10, par tranche de 10% de ids utilisés dans le passé donc, et ensuite de regarder combien il reste d'ids réellement utilisés dans une tranche de 10%.

    Bref dire par exemple que pour les utilisateurs du site on aurait (exemple fictif) :

    🟧⬜⬜⬜🟨🟨🟧🟧🟧🟥

    et donc voir qu'il y a des vénérables utilisateurs historiques, puis beaucoup moins, et ça remonte en densité au fur et à mesure qu'on se rapproche du présent (honnêtement je pencherais plutôt pour une baisse de la densité à cause du spam massif qui est nettoyé mais crame des ids).

    Reste à pouvoir grapher 10 valeurs par ligne (et limite maintenant que j'ai commencé avec des simples caractères unicode, je me dis que la précision est suffisante pour mon besoin… en jouant sur les formes ou les couleurs, genre 9 valeurs possibles avec ▫️◽◻️⬜🟨🟧🟥🟪⬛ )

    • [^] # Re: Faire une heatmap?

      Posté par  (site web personnel) . Évalué à 2 (+1/-1).

      Pour des petites valeurs, tu peux utiliser le point médian aussi (⋅). Mais tu risques de provoquer l'ire d'une frange étroite (d'esprit) du lectorat.

      Adhérer à l'April, ça vous tente ?

    • [^] # Re: Faire une heatmap?

      Posté par  (site web personnel) . Évalué à 4 (+1/-0). Dernière modification le 28 octobre 2025 à 23:03.

      ⬜⬜⬜⬜⬜🟨🟥🟪🟥🟥 accounts (35%) (comptes)
      ⬜⬜⬜⬜🟨⬜⬜⬜⬜🟥 banners (10%) (bannières)
      🟪⬛⬛⬛⬛⬛⬛⬛⬛⬛ bookmarks (97%) (liens)
      ⬛⬛🟪🟥🟥⬛⬛⬛⬛⬛ categories (91%) (catégories du suivi)
      ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ comments (98%) (commentaires)
      ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ diaries (97%) (journaux)
      🟧🟪🟪🟪🟪⬛⬛🟥⬛🟪 forums (80%) (forums)
      ⬛🟧⬜⬛⬜🟧⬛🟧⬛⬛ friend_sites (63%)
      ⬜⬜⬜🟧🟪🟥🟧🟥🟥🟪 friendly_id_slugs (47%)
      🟥🟥🟥🟥🟥🟪🟪🟪🟪⬛ links (77%) (liens des dépêches)
      🟪🟪🟥🟪🟧🟧🟧🟨🟧🟥 logs (59%) (logs admin)
      🟥🟧🟥🟧🟧🟥🟪⬛🟪🟪 news (67%) (dépêches)
      ⬛⬛⬛⬛🟪🟪🟪🟪⬛⬛ news_versions (95%) (versions de dépêches)
      🟥🟥⬛⬛⬛⬛🟪🟪🟪🟪 nodes (88%) (contenus)
      🟥🟨🟨🟥🟪🟪⬛⬛⬛⬛ oauth_access_grants (76%) API grants
      ⬜⬜⬜⬜⬜⬜⬜🟨🟪⬛ oauth_access_tokens (24%) API tokens
      🟪⬛⬛🟨🟨🟪🟪🟨⬛🟥 oauth_applications (69%) applications
      ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ pages (100%) (pages statiques)
      🟨🟨🟨🟨🟨🟨🟨🟧🟧🟧 paragraphs (30%) (paragraphes de dépêches)
      ⬛⬛⬛🟥🟥🟥🟥🟥🟪🟪 poll_answers (82%) (réponses proposés de sondages)
      ⬛⬛⬛🟥🟥🟥🟥🟥🟥🟪 polls (76%) (questions de sondages)
      🟥⬛⬛⬛⬛⬛⬛🟪🟪🟪 posts (91%) (entrées de forums)
      ⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛ responses (92%) (réponses pour les dépêches)
      ⬛⬛⬛⬛⬛🟪⬛⬛⬛⬛ sections (99%) (sections de dépêches)
      🟨🟪🟪🟪🟪🟪🟪⬛⬛⬛ taggings (87%) (étiquetages)
      🟪🟪🟪🟪🟪🟪🟪🟪🟪🟪 tags (89%) (étiquettes)
      ⬛⬛⬛⬛⬛🟪🟧⬜⬜🟨 trackers (65%) (suivi)
      🟧🟨🟧🟧🟧🟧🟪⬛🟪🟥 users (58%) (personnes utilisatrices)
      🟧🟨🟨🟧🟨⬜⬜🟧🟪⬛ wiki_pages (41%) (pages wiki)
      🟧🟨🟥🟥🟪🟥🟥🟧⬛⬛ wiki_versions (65%) (versions de pages wiki)

      légende de 0 à 10% ⬜⬜🟨🟨🟧🟧🟥🟥🟪🟪⬛

      • [^] # Re: Faire une heatmap?

        Posté par  (site web personnel) . Évalué à 4 (+1/-0).

        tentative d'analyse :
        - pages statiques : aucune ne manque
        - commentaires / journaux / liens : très peu (en proportion) ont été supprimés lors de purges de comptes
        - sections : elles sont archivées et non supprimées donc très peu de perte (et petit échantillon)
        - réponses / catégories du suivi : très peu de changement (et petit échantillon)
        - logs : effet important minimisation et purge de comptes
        - tokens d'API : expiration + minimisation et purge des comptes
        - bannières / sites amis : leur vie est éphémère sauf exception (et petit échantillon)
        - accounts / users : minimisation et purge des comptes
        - forums : visiblement quelques créations/destructions de forums dans le temps (et petit échantillon)
        - polls / poll_answers : j'imagine beaucoup de sondages anonymes rejetés et purgés ?
        - trackers : une vague de spam nettoyée ?
        - les autres : minimisation et purge des comptes -> conséquences sur les contenus / étiquetages associés

        • [^] # Re: Faire une heatmap?

          Posté par  (site web personnel) . Évalué à 3 (+1/-0).

          j'ai du mal à suivre ton interprétation par incompréhension principalement de la légende : 0 à 10% de quoi ? des id ?

          les id sont propres à chaque table ? (a priori oui)

          quelle est la période de temps ? les 3 derniers mois ?

          bon, j'ai l'avantage de connaître (un peu) le modèle de données du site, pour autant une description moins lapidaire aiderait à la lecture.

          en gros tu sautes à la conclusion, mais l'analyse descriptive intermédiaire me manque pour comprendre ta conclusion, ce que tu observes par rapport à ce que tu attendais pourrait aider à mieux voir l'interprétation possible. 'fin globalement pour les stats, de toute façon, il manque une description de ce qu'est censé montrer l'indicateur retenu (pour certains c'est évident, pour d'autres moins…)

          Pour prendre un exemple, qui (me) semble compréhensible :

          banners / bannières ⬜⬜⬜⬜🟨⬜⬜⬜⬜🟥 banners (10%) (bannières)

          • description : ce sont les bannières affichées aléatoirement en haut de page principale, certaines perdurent (sites amis), d'autres correspondent à des événements (donc plus ponctuelles, ce que tu indiques comme éphémères)
          • comment expliquer le point jaune ? (2 sur ton échelle de 11 valeurs, qui affiche pareil 0 et 1) => tous les id à la moitié à peu près sont restés actifs, les id suivant peu actifs, les plus récents actifs ? (et que signifie actif ?)

          pour reprendre ton exemple initial, je ne sais pas l'interpréter et je ne comprends pas ta conclusion

          🟧🟨🟧🟧🟧🟧🟪⬛🟪🟥 users (58%) (personnes utilisatrices)

          c'est quoi le 58% ?

          le carré noir c'est des utilisateurs de quelle période ? (2015 ou 2017 je dirais ?)

          toi tu t'attendais à :

          🟧⬜⬜⬜🟨🟨🟧🟧🟧🟥

          et donc voir qu'il y a des vénérables utilisateurs historiques, puis beaucoup moins, et ça remonte en densité au fur et à mesure qu'on se rapproche du présent (honnêtement je pencherais plutôt pour une baisse de la densité à cause du spam massif qui est nettoyé mais crame des ids).

          donc, contrairement à ce à quoi tu t'attendais, il y a un phénomène de longue traîne où à chaque époque des comptes restent actifs (avec un creux jaune des après-débuts, orange pour historiques même si ta légende distingue peu orange clair et orange moins clair :/ ou c'est mes yeux o_O)

          bon, on pourrait peut-être continuer sur une entrée de suivi idoine

          • [^] # Re: Faire une heatmap?

            Posté par  (site web personnel) . Évalué à 4 (+1/-0).

            j'ai du mal à suivre ton interprétation par incompréhension principalement de la légende : 0 à 10% de quoi ? des id ?

            Toutes les tables sont avec des clés primaires 'id' numériques entiers positifs, donc potentiellement entre 1 et le MAX(id) de la table. On cherche à regarder la densité des id présents parmi les id possibles. On découpe en 10 tranches, et on regarde combien des ids possibles sont réellement encore utilisés. Par exemple les id d'une table xxx sont entre 1 et 120, tu regardes sur [0,11], [12,23], …, [118, 120] combien tu as d'ids. Si la tranche est pleine, carré noir 10/10 ou 100%, un peu moins pleine carré violet 9/10 ou 90%, etc.

            les id sont propres à chaque table ? (a priori oui)

            oui

            quelle est la période de temps ? les 3 derniers mois ?

            tout ce qui est en base, donc sur plus ou moins 27 ans

            banners / bannières ⬜⬜⬜⬜🟨⬜⬜⬜⬜🟥 banners (10%) (bannières)
            description : ce sont les bannières affichées aléatoirement en haut de page principale, certaines perdurent (sites amis), d'autres correspondent à des événements (donc plus ponctuelles, ce que tu indiques comme éphémères)
            comment expliquer le point jaune ? (2 sur ton échelle de 11 valeurs, qui affiche pareil 0 et 1) => tous les id à la moitié à peu près sont restés actifs, les id suivant peu actifs, les plus récents actifs ? (et que signifie actif ?)

            Y a des bannières / assos qui sont assez stables (genre Framasoft, April, LinuxFr.org, …) et d'autres plus volatiles (un événement, une campagne). Stable veut ici dire que l'id de la bannière reste (même si elle est éditée pour changer la date ou le message), tandis que volatile veut dire qu'on a pris un 'id' pour la foire aux manchots de Trifouilli-les-gnous en septembre 2007, puis qu'on a viré la bannière et donc supprimer cet 'id'.

            pour reprendre ton exemple initial, je ne sais pas l'interpréter et je ne comprends pas ta conclusion
            🟧🟨🟧🟧🟧🟧🟪⬛🟪🟥 users (58%) (personnes utilisatrices)

            c'est quoi le 58% ?

            58% de densité moyenne (ie. il reste 58% des 'id' qui ont été attribués depuis la nuit des temps, c'est à dire 58% des valeurs inférieures au plus grand id attribué).

            le carré noir c'est des utilisateurs de quelle période ? (2015 ou 2017 je dirais ?)

            entre 70% à 80% des comptes créés, je ne sais pas :).

            je m'attendais à un effet du spam, et les trois derniers carrés me confortent dans cette idée : quand on a mis en place la minimisation des comptes, on s'attend à un effet hebdomadaire de nettoyage des comptes de spam, et un effet au bout de 3 ans sur les comptes inactifs (*). Si on a dégagé beaucoup de spams récemment, on a beaucoup de trous, donc une faible densité. Si on a juste du vieillissement tranquille et de la purge régulière, on aurait un simple dégradé (du clair au sombre temporellement).

            (*) on n'a pas atteint les 3 ans, ie. le 28 juin 2026, donc pas ça actuellement ; le nettoyage après 3 ans d'inactivité changera le graphe

            • [^] # Re: Faire une heatmap?

              Posté par  (site web personnel) . Évalué à 3 (+1/-0). Dernière modification le 29 octobre 2025 à 12:20.

              ah ok, je n'avais pas suivi que tu effaçais des id des tables dans ton raisonnement (faudra que je retrouve la dépêche où tu en parles, ça me dit vaguement quelque chose). Attention, avec MariaDB c'est croissant mais pas forcément un incrément de 1 en 1 : en prévision d'insertion en masse, il peut prendre un pool d'id et pas forcément tous les attribuer (d'où des trous, inhérents à ce fonctionnement ; ça peut dépendre de la config').

              ok, donc pour les bannières, j'avais à peu près compris.

              me reste à faire l'exercice pour le reste :D

              le carré noir c'est des utilisateurs de quelle période ? (2015 ou 2017 je dirais ?)

              entre 70% à 80% des comptes créés, je ne sais pas :).

              moui, c'est une requête supplémentaire : premier id à rapprocher date de création et dernier id date de création (les deux vont croissants) ou plus fin : MIN(MIN(date de contenu pour un id), pour tous les id) et MAX(MAX(date de contenu pour un id), pour tous les id) mais là ça prend en compte les contributions et oublie les utilisateurs ne postant pas(ou plus) de contenu.

              => rapprocher l'interprétation d'une échelle de temps permet de faciliter l'interprétation àmha. es id croissants, ce n'est pas très parlant :p

              ah, je vois l'intérêt d'un 11ème carré : forcément, comme il est en cours de peuplement, la tranche n'est pas complète (c'est plus le cas sur les statistiques que sur celle-ci en particulier). Sur celle-ci tes intervalles varient dans le temps en fonction des ajouts d'id

              En revanche je ne vois pas pourquoi s'être limité à 5 couleurs d'après ta légende (10 aurait été un peu plus précis).

              Merci de tes explications, je vais réfléchir à ouvrir une entrée pour clarifier les statistiques déjà affichées ;-)

              • [^] # Re: Faire une heatmap?

                Posté par  (site web personnel) . Évalué à 4 (+1/-0).

                En revanche je ne vois pas pourquoi s'être limité à 5 couleurs d'après ta légende (10 aurait été un peu plus précis).

                Y a 9 carrés de couleur unicode dans mon sélectionneur de caractères, je n'arrivais pas à ordonner les neufs pour un dégradé logique donc ça en fait moins, et les autres caractères de couleur de taille différente ne s'alignaient pas correctement dans mon terminal, alors je me suis limité en couleurs. (Déjà que le rendu dans vim pour le code bash utilisé était un tantinet aléatoire à l'affichage…).

    • [^] # Re: Faire une heatmap?

      Posté par  (site web personnel) . Évalué à 3 (+2/-0).

      Bonne idée.

      Je vais essayer d'implémenter ce type de graphique assez rapidement.
      J'ai quelques idées, mais voici les contraintes à respecter :
      - Être générique
      - Être paramétrable
      - Adaptable à un terminal 8 bit ou TrueColor
      - Que cela ne devienne pas une usine à gaz.

      À suivre… (peut-être la semaine prochaine)

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.