Je vous présente aujour’hui un de mes projets personnels : Updates-warner.
C’est un logiciel libre (GPL v3), écrit en C, d’environ 9 250 lignes de code (environ trois mois de dev’, sur mon temps libre). Ce projet est né suite à un besoin que j’ai de suivre certains projets pour des questions de sécurité dans mon boulot. La première esquisse était un script shell que je lançais manuellement tous les jours. Par flemme, j’ai donc créé ce logiciel qui est beaucoup plus beau, pratique et multi‐tâches ! Et j’ai décidé de le partager, j’espère que vous le trouverez tout aussi pratique que moi !
C’est un logiciel qui permet d’être alerté sur la mise à jour d’une ressource Web publique, par exemple :
- être alerté sur la sortie d’une nouvelle vidéo d’une chaîne YouTube (pas de compte requis) ;
- être alerté sur la nouvelle version d’une bibliothèque de développement (pratique pour mettre à jour en cas de problème de sécurité) ;
- être alerté heure par heure de l’avancée de votre financement participatif préféré (certains sauront de quoi je parle ;)) ;
- être alerté de la sortie d’une nouvelle version d’un logiciel ou d’un jeu dont votre distribution n’a pas intégré cette dernière version ;
- etc.
Attention, que l’on soit clair, ce n’est pas du temps réel, la mise à jour la plus rapide est fixée à 60 minutes, mais 24 h me paraît être globalement plus adapté à la plupart des situations, mettre un temps plus court serait clairement du gâchis de bande passante.
Quelques petites fonctionnalités du logiciel
- il permet d’être toujours au premier plan ou en arrière‐plan sur le bureau ;
- si l’icône de la zone de notification est activée, le logiciel peut être caché ou affiché avec un clic gauche ;
- si l’icône de la zone de notification est activée, l’icône change et clignote en fonction de l’alerte ;
- il permet de lancer rapidement l’application concernée avec un clic droit ;
- il permet d’accéder rapidement au site Web avec un clic droit ;
- il permet de rafraîchir le numéro de version locale ou officielle rapidement avec un clic droit ;
- la couleur et l’opacité du fond peuvent être choisis pour être plus en accord avec votre thème ;
- prise en charge d’un fichier de langage (actuellement, le logiciel est en anglais et en français sans fichier externe) ;
- comparaison de la version officielle avec la version locale (manuelle ou automatiquement récupérée) ;
- le logiciel a son propre user‐agent :
Updates-warner
ce qui permet aux sites Web de fournir un contenu adapté si jamais ce logiciel rencontre un succès phénoménal (Eh, chut ! Pas de remarques désagréables ! Laissez‐moi rêver !).
Ce qu’il faut savoir pour créer un « watcher »
(ce qui va régulièrement récupérer la version officielle)
- la récupération de la version officielle se fait, globalement, avec les pages Web qui sont analysées ;
- l’interface graphique est bourrée de bulles d’aide pour vous aider à mieux comprendre la fonctionnalité ;
- pour configurer un watcher, il faut donc mettre les mains dans le HTML et regarder quel élément peut être utilisé pour en soutirer la version qui sera modifiée à chaque mise à jour ; ce qui reste assez intuitif si vous avez l’habitude de
grep
etcut
; - un fichier de configuration par défaut est proposé, vous pourrez voir comment faire un watcher manuellement dans ce fichier ou alors dans l’interface graphique ;
- les images à utiliser doivent faire 26 × 26 pixels, sinon le rendu ne sera pas tip top ;
- les pages HTML téléchargées sont sauvegardées dans le dossier de cache (par défaut
~/.cache/updates-warner/
).
Petite remarque : je mets à disposition le code source, mais l’installeur est plutôt fait pour fonctionner avec les dérivées de Debian (j’ai prévu d’améliorer le script pour d’autres distributions — dérivées de Slackware et Red Hat).
Contactez‐moi
N’hésitez pas à me contacter en cas :
- d’éventuelles idées, bogues ou choses à améliorer (faites un tour dans la partie Ajout futurs auparavant ;-)) ;
- de proposition de fichier de langue autres que français et anglais ;
- d’erreurs de compilation, d’installation ;
- d’erreurs d’orthographe (anglais ou français d’ailleurs).
Un wiki arrivera plus tard sur le site Web qui est tout neuf et encore en cours de construction…
Aller plus loin
- Site officiel du projet (854 clics)
- Post sur ubuntu-fr.org (148 clics)
# Pourquoi pas
Posté par Denis Dordoigne . Évalué à 7.
Effectivement ça pourrait être intéressant, parce que les annonces du type « pour savoir si quelque chose est publié, il faut nous suivre sur twitter » me sont insupportables. Cependant pour ma part je suis plusieurs sites web, projets et chaines YouTube/Dailymotion, et jusqu'à présent j'ai toujours trouvé un flux RSS (même s'il faut souvent fouiller pour le trouver).
Membre de l'april, et vous ? https://april.org/adherer -- Infini, l'internet libre et non commercial : https://infini.fr
[^] # Re: Pourquoi pas
Posté par Denis Dordoigne . Évalué à 9.
Accessoirement, j'aurais plutôt utilisé notifier ou alerter, plutôt que warner dans le nom du logiciel, je trouve que ça sonne étrange.
Membre de l'april, et vous ? https://april.org/adherer -- Infini, l'internet libre et non commercial : https://infini.fr
[^] # Re: Pourquoi pas
Posté par videca . Évalué à 1.
Le nom est passé par plusieurs phase (Warn-Updates, Update-Alerts, …. et finalement, j'ai choisi 'Updates-warner', même si 'warn + er' n'existe pas mais c'est pas grave, c'est un nom de logiciel, pas une description
[^] # Re: Pourquoi pas
Posté par Haftrone (site web personnel) . Évalué à 2.
Oui enfin c'est une question de mots mais la finalité ne reste-elle pas sensiblement la même ?
[^] # Re: Pourquoi pas
Posté par Denis Dordoigne . Évalué à -1.
Accessoirement, j'aurais plutôt utilisé notifier ou alerter, plutôt que warner dans le nom du logiciel, je trouve que ça sonne étrange.
Membre de l'april, et vous ? https://april.org/adherer -- Infini, l'internet libre et non commercial : https://infini.fr
[^] # Re: Pourquoi pas
Posté par gUI (Mastodon) . Évalué à 3.
Je pense qu'il y a d'autres utilité, comme vérifier si le site web qu'on administre a été piraté.
Mais la dépêche manque en effet d'un peu de contexte.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Pourquoi pas
Posté par videca . Évalué à 1.
bah… le contexte, je l'ai donné, c'est un besoin que j'ai résolu avec un script shell, qui s'est ensuite transformé en interface graphique, c'est mon outil que je propose à tous.
Et d'ailleurs, je n'avais pas pensé a ce genre d'utilisation, mais du coup ce serai plus intéressant de descendre le minuteur de 60 min à 1 sec et que chaque watcher ai son propre thread pour ce genre de surveillance. (ce qui n'est pas le cas actuellement, car mon contexte d'utilisation est dans un cadre beaucoup moins critique)
[^] # Re: Pourquoi pas
Posté par videca . Évalué à 1.
J'aime bien les flux RSS, mais j'y vois 2 inconvénients, qui me gênent:
- Je ne reçoit pas pas forcement l'info qui m'intéresse, c'est le gestionnaire du flux qui m’envoie l'info qu'il veut
- énormément de site et ressources n'ont pas de flux RSS associés
[^] # Re: Pourquoi pas
Posté par Annaïg "Scara" . Évalué à 2.
Je me suis retrouvée régulièrement confrontée à ce genre de problème sur les sites d'annonces d'emploi qui ne proposent presque jamais de flux RSS ou atom ; un tel outil m'aurait été bien utile !
# forge logiciel / gestionnaire de ticket
Posté par Mimoza . Évalué à 5.
Le site est un peu «à l'ancienne», il serait pas mal que tu mettes en place un forge logiciel tel que Git(lab|hub) pour que tes utilisateur puisse contribuer et te faire des remontés de bug.
Sinon ça m'intéresse en effet, je ne suis pas très fan d'ouvrir un compte pour juste être prévenu d'une nouvelle.
[^] # Re: forge logiciel / gestionnaire de ticket
Posté par videca . Évalué à 1.
Pour le site web, je pensais faire au départ ce genre de site :
- http://valgrind.org
ou
- https://www.sudo.ws
Simple techniquement, mais moche (notion totalement subjective)
N'étant pas développeur de site web mais développeur C, j'ai quand même décidé de faire un site un peu moins moche, donc un peu plus technique (php + CSS = un peu de responsive design).
N'ayant pas envie de passer ma vie à bosser sur le site web (c'est pas mon truc), il est uniquement là pour la distribution de mes projets (+quelques infos)
# Sympa
Posté par Maxzor . Évalué à 1.
Bien que "sans grande utilité" moi aussi j'ai trifouillé :) du :
+cron
Là c'est un autre niveau bien plus classe, mais tu restes en mode polling, ça existe pas l'interrupt (hors RSS)?
[^] # Re: Sympa
Posté par aiolos . Évalué à 3.
Pour moi, le RSS, ça reste du "polling", j'ai faux ?
[^] # Re: Sympa
Posté par Maxzor . Évalué à 1. Dernière modification le 10 octobre 2017 à 17:09.
Ah non, c'est moi qui connait rien au RSS :)
[^] # Re: Sympa
Posté par mothsART . Évalué à 1.
Faudrait un RSS (ou équivalent) mais via websocket: du coup, il suffirait de se connecter à un canal et d'attendre le push du serveur.
[^] # Re: Sympa
Posté par Maxzor . Évalué à 0.
Je comprends pas bien, si le serveur pousse et l'agrégateur de contenu RSS tire, l'info est où entre les deux ? :)
[^] # Re: Sympa
Posté par mothsART . Évalué à 0.
je parlais du format RSS (XML normalisé) et non pas du fonctionnement des agrégateurs de flux RSS qui lui fait bien du polling sur le protocole HTTP mais pourrais changer leur comportement si ils passaient par du websocket.
[^] # Re: Sympa
Posté par whity . Évalué à 5.
Peu d’intérêt. Maintenir la connexion via websocket va charger inutilement le serveur, beaucoup plus que pour un raffraichissement toutes les heures (ou même que tous les quart d’heure).
Les websockets, c’est plutôt fait pour les notifications « temps-réel », quand tu trouves que 5 secondes d’attente c’est trop long. Pas le cas d’utilisation du RSS.
Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0
[^] # Re: Sympa
Posté par Mildred (site web personnel) . Évalué à 2.
Une connexion tcp ou websockets qui n'a pas de traffic, ne consomme rien en terme de ressources. C'est juste une entrée dans une table de connections ouvertes sur le serveur et sur le client, c'est tout.
Après, si les implems derrière font n'importe quoi, c'est un autre problème.
[^] # Re: Sympa
Posté par steph1978 . Évalué à 4.
Le push en HTTP n'est pas complètement impossible mais nécessite une surcouche tehcnique type BOSH, long polling, websocket, plutôt consommatrice pour le serveur.
Et si tu surveilles des 100aines de sites, ça devient compliqué aussi pour le client.
Et finalement quel intérêt d'être informé à la seconde d'une nouvelle version ?
Un poll par jour doit satisfaire la plupart des usages.
Sinon on s'approche plus d'un usage de supervision. Et là on change de solution : IMAP, IRC, XMPP, SMS, que sais-je.
# Équivalent sous windows
Posté par Nicoledit . Évalué à 1.
Ça me fait beaucoup penser à un programme (Ketarin) que j'utilisais sous Windows, qui pouvait de faire à peu près la même chose. Il me permettait de vérifier les mises à jour d'un tas de programmes et de les télécharger en un clic. Pratique.
Peut-être qu'il contient quelques idées que tu pourrais piocher.
[^] # Re: Équivalent sous windows
Posté par videca . Évalué à 1.
Merci, je connaissais pas, je vais jeter un tit coup d'oeil :)
J'ai prévu, plus tard, ce genre de fonctionnalité, mais c'est bcp plus complexe avec Linux car beaucoup de mécanisme différents à prendre en compte
# Anitya fait en partie le travail :)
Posté par Renault (site web personnel) . Évalué à 8.
Il y a le programme Anitya, qui fut développé pour les besoins de Fedora qui fait une partie du programme que tu as fait.
On peut consulter les données et configurer des alertes sur https://release-monitoring.org/
Son but est de surveiller les paquets / projets logiciels des distributions, pour alerter si une mise à jour a été publiée par le projet officiel afin que les distributions et autres dépôts puissent réagir. Ce n'est pas limité à Fedora.
Exemples :
https://release-monitoring.org/distro/Debian/
https://release-monitoring.org/project/5830/
C'est assez pratique pour les mainteneurs d'un paquet, ou pour quelqu'un qui souhaite suivre un projet en particulier.
[^] # Re: Anitya fait en partie le travail :)
Posté par Anonyme . Évalué à 2.
C’est vraiment super bien comme truc.
Par contre créer un compte sur FAS et configurer les notifications/filtres c’est laborieux. Ça serait cool de pouvoir suivre des projets en particulier d’un simple clique.
[^] # Re: Anitya fait en partie le travail :)
Posté par Renault (site web personnel) . Évalué à 3.
Si tu utilises le bouton login en haut des pages, normalement tu devrais pouvoir utiliser d'autres fournisseurs OpenID, le compte FAS n'est pas nécessaire normalement.
J'avoue qu'ayant déjà un compte FAS, je n'ai pas testé les autres possibilités.
# Youtube
Posté par gusterhack . Évalué à 1.
Comment on fait quand on a été notifiée d'une nouvelle vidéo et qu'on la regarder pour dire au logiciel de plus me notifier cette vidéo ?
[^] # Re: Youtube
Posté par videca . Évalué à 1.
tu va dans la liste des watchers, tu clique sur celui qui t’intéresse, puis "modifier" et a coté de la version locale tu a un bouton contenant la nouvelle version (ou dans ton cas le nouveau titre) avec une flèche "<=" qui te permet de mettre la version officiel à la place de la version local
# Ajouter des catégorie
Posté par gusterhack . Évalué à 0.
Honnêtement l'application est très cool ! Mais je pense qu'il faudrait pouvoir créée des catégories pour triée un peux tout cela. Pourquoi pas un système de boite ?
[^] # Re: Ajouter des catégorie
Posté par videca . Évalué à 0. Dernière modification le 10 octobre 2017 à 20:00.
Qu'entends tu exactement pas un système de boite ? Sinon j'avais pensé à ajouter la possibilité d'utiliser plusieurs fichiers de configuration qui ouvrirai plusieurs fenêtres (donc ce serai à toi de faire tes catégories par fichier de conf/fenêtre)
[^] # Re: Ajouter des catégorie
Posté par mothsART . Évalué à 0.
boite == tag ?
# Huginn
Posté par nanard . Évalué à 3.
Ca me fais penser à ce projet qui à l'air de jouer dans la même cour.
https://github.com/huginn/huginn
Allez tous vous faire spéculer.
[^] # Re: Huginn
Posté par steph1978 . Évalué à 2.
Ça a l'air chiadé.
Par contre RoR + node.js :(
Heureusement, ils distribuent sous forme de container.
Ça m'a rappelé trigger-happy, présenté ici
# BeautifulSoup
Posté par 41px . Évalué à 0.
Ca me fait penser à https://www.crummy.com/software/BeautifulSoup/ - https://fr.wikipedia.org/wiki/Beautiful_Soup .
Il fallait être courageux pour se lancer dans ce genre de programme avec du C
[^] # Re: BeautifulSoup
Posté par steph1978 . Évalué à 2. Dernière modification le 11 octobre 2017 à 17:45.
Beautiful_Soup est une bibliothèque logicielle qui permet de corriger un document HTML mal formé pour qu'il apparaisse bien formé et puisse être traité par un parseur XML.
Et c'est là une faiblesse du logiciel proposé je trouve. Avoir un document XML permet d'utiliser XPath qui est beaucoup plus efficace qu'une regexp pour aller chercher de l'information dans un document structuré.
Pour ma part, j'ai pris mes habitues avec lxml.
[^] # Re: BeautifulSoup
Posté par 41px . Évalué à 0.
"Ca me fait penser" c'était juste pour l'ajouter à la liste des "Ca me fait penser" des précédents commentaires. Si non, effectivement, d'un point de vue technique des solutions comme bs ou lxml paraissent plus appropriées que des:
Encore une fois, il fallait être vraiment courageux pour écrire ca en C ;) pour ne pas dire "tu as dû vraiment te faire chier !"
[^] # Re: BeautifulSoup
Posté par videca . Évalué à 0.
Au contraire, je me suis bien amusé ! Et c'est vraiment pas la partie qui m'a pris le plus de temps.
[^] # Re: BeautifulSoup
Posté par videca . Évalué à 1.
Intéressant comme point de vue, ce que tu appelles une faiblesse, j'appelle ça une force : Mon logiciel n'est pas cloisonné aux ressources XML.
D'ailleurs, je compte affiner/améliorer les possibilités de découpages pour la récupération de données, car actuellement, c'est trop limité.
[^] # Re: BeautifulSoup
Posté par steph1978 . Évalué à 2.
Alors disons que l'un n'empêche pas l'autre.
L'écrasante majorité du contenu sera du HTML (donc du XML) et XPath est très puissant.
Cela n'exclut pas les regex voire un combinaison des deux : une regex dans une xpath.
[^] # Re: BeautifulSoup
Posté par 41px . Évalué à 1.
Par exemple si je veux utiliser ton logiciel pour "watcher" une annonce leboncoin ou une vidéo YouTube. Et bien en l'état cela me parait impossible.
Le HTML généré par leboncoin (et comme 90% des autres sites internet du moment) ne peut pas se contenter d'un :
"Dans le documents HTML, la version est récupérable à la ligne n° x" ou "dans le champ n° x coupé par …"
Il suffit qu'une pub, un bandeau dynamique, un commentaire ou autre s'ajoute dans la page et ton algo pour chercher dans la page est faux.
C'est pour ca qu'il est quand même préférable d'utiliser un parser xml (il en existe en C) ou mieux des framwork comme https://scrapy.org/ qui ont déjà prévu certain cas pratique que tu/nous aurions pas forcement implémenté du premier coup.
[^] # Re: BeautifulSoup
Posté par videca . Évalué à 1. Dernière modification le 12 octobre 2017 à 00:32.
Mmm tu n'a pas bien compris comment créer un watcher…
Mais j'assume totalement le fait que mon interface ne soit pas super user-friendly (j'ai prévu des trucs pour améliorer ça)
Contrairement à ce que tu dit sur youtube, tu peux récupérer très facilement :
- le nombre de vues : 1er ligne avec watch-view-count
- le nombre de pousses positifs : 1er ligne avec yt-uix-button-content
- le nombre de pousses négatifs : 3eme ligne avec yt-uix-button-content
- le nombre d'abonnées : 1er ligne avec yt-subscriber-count
- Dernière vidéo de la chaine ajoutée : 1er ligne avec <h3 class="yt-lockup-title (j'ai actuellement plusieurs watchers fonctionnant très bien pour m'avertir de l'ajout de vidéos sur plusieurs chaines youtube)
Pour le bon coin, faire un watcher sur une annonce, je vois pas trop l’intérêt vu que c'est plutôt statique, à part le prix peut-être ? (récupérable avec la 1ère ligne contenant 'prix : "')
Par contre, un watcher pour l'ajout d'une annonce selon une recherche précise se fait très bien avec la 1ère ligne contenant 'class="list_item clearfix trackable"'
Si tu te base sur les bonnes données, les pub n'influent en rien, les bandeaux dynamiques n'influent en rien, les commentaires n'influent en rien.
Les seuls choses qui rendrai l'aglo faux, c'est le changement total d'interface du site web, mais quelque soit le parseur utilisé, quelque soit l'algo, quelque soit la lib utilisée, tu devra refaire ton watcher
Et je ne suis toujours pas convaincu que me limiter au XML, alors que je peux très facilement faire plus, est une bonne idée.
[^] # Re: BeautifulSoup
Posté par steph1978 . Évalué à 1.
Je pense qu'il a bien compris.
Et qu'il essaye de t'expliquer le même point que moi : un xpath est bien plus simple est fiable pour récupérer un contenu dans un arbre (xml) qu'une regexp qui sera plus adapté à un fichier ligne à ligne (log).
D'abord et avant tout parce que ces deux outils ont été conçus pour leur domaine respectif.
[^] # Re: BeautifulSoup
Posté par mothsART . Évalué à 0.
xpath plus simple : permet moi d'en douter.
Fiable : j'ai envie de répondre : ça dépend.
Dans le cadre du soft "update-warners" qui ne fait pas vraiment du scraping poussé mais juste la récupération d'un motif de chaine, (c'est pas une regex d'ailleurs) je trouve ça plutôt malin et xpath me semble surfait.
Je n'arrive pas à trouver de cas ou "soit disant" xpath serait plus fiable.
Pour moi, xpath c'est bien sur du xml normalisé (via xsl) mais pas pour du html ou l'arbo peut vite changer du tout au tout.
[^] # Re: BeautifulSoup
Posté par steph1978 . Évalué à 2.
Et bah là c'est du charabia pour moi. Ce qui pourrait expliquer ta réticence envers xpath.
Tu es maître de ton design.
Si il te convient, c'est parfait.
J'ai pour ma part fait énormément de scrapping web et faisait simplement part de mon expérience.
# Des goodies tout fait
Posté par Misc (site web personnel) . Évalué à 6.
Je sais déjà ce que tu peux offrir comme goodies:
Des brosses, pour dire "c'est une updates-warner brosse".
# pas de package binaire
Posté par montuno . Évalué à 0.
Bonjour,
Je voulais tester updates-warner, mais je n'ai pas l'intention d'installer 70Mo de package de développement gtk sur ma machine… Donc j'attendrai. C'est dommage !
[^] # Re: pas de package binaire
Posté par videca . Évalué à 1.
N'ayant pas encore les connaissances pour créer des packages (.deb, .rpm), je ne peux pour l'instant proposer que la compilation des sources
Les paquets que tu installes uniquement pour le développement ne sont pas nécessaire après l'installation et peuvent donc être désinstallés après coup
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.