Depuis sa présentation pyAggr3g470r a pas mal évolué. Comme j'étais plutôt content des retours du premier journal, j'ai décidé d'en écrire un second ;-)
Alors, quoi de neuf depuis tout ce temps?
- un contributeur a pas mal contribué, notamment en améliorant l'interface et en accélérant le chargement de la page d’accueil;
- j'ai pris sur moi en ajoutant un peu de JavaScript pour rendre l'interface plus dynamique;
- comme promis, le logiciel est maintenant disponible en Anglais et en Français;
- il est possible d'exporter son compte dans un fichier JSON et évidemment de le ré-importer;
- des services Web sont disponibles et permettent d'utiliser votre propre crawler pour ajouter des articles;
- quelques diverses améliorations au niveau des performances. Mon instance locale pour les tests contient maintenant bien plus de 100.000 articles. Aucun problème noté, même la recherche avec Whoosh;
- j'ai également fait des efforts pour simplifier le déploiement. Le déploiement sur Heroku peut être effectué avec un bouton. Il est aussi possible d'utiliser Vagrant (voir les liens en annexe);
- finalement, depuis peu pyAggr3g470r fonctionne avec Python 3. Il est déployé sur Heroku avec la version 3.4.2 de Python. Du coup, je peux tester le module asyncio (PEP 3156). Le nouveau crawler de flux est donc encore en phase de test. J'ai même activé la page d'inscription pour ceux qui voudraient tester.
Voilà, comme toujours, je suis ouvert aux suggestions!
Liens
- Instance officielle
- Déploiement Heroku:
- Déploiement Vagrant
# python3 uniquement ?
Posté par Benoît Laurent (site web personnel) . Évalué à 1.
Ça veux dire qu'il ne fonctionne qu'avec python3 ?
Il semblerait, mais c'est peut même uniquement la partie crawling ?
Traceback (most recent call last):
File ".../pyaggr3g470r/fetch.py", line 11, in <module>
from pyaggr3g470r import crawler
File ".../pyaggr3g470r/pyaggr3g470r/crawler.py", line 51
response = yield from aiohttp.request('GET', *args, **kwargs)
^
SyntaxError: invalid syntax
Pas que ça me pose problème, au contraire, mais c'est pas forcement clair en lisant la doc.
[^] # Re: python3 uniquement ?
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 1.
En effet Python 3.4 ou alors 3.3 si on installe asyncio via pip.
Il est vrai que je pourrai le préciser dans la documentation.
Mais mis à part le crawler de flux, pyAggr3g470r fonctionne toujours avec Python 2.7. Tu as raison.
Et pour le crawler, on peut connecter son propre crawler avec les services web. Bien que je n'ai pas testé.
[^] # Re: python3 uniquement ?
Posté par El Titi . Évalué à 2.
Ceci signifie t'il que Flask supporte correctement python 3 ?
ou que tu n'utilises plus Flask ?
[^] # Re: python3 uniquement ?
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 1.
Oui, Flask supporte très bien Python 3. Y compris toutes les extensions que j'utilise. À ce niveau, je n'ai franchement rien eu à faire.
[^] # Re: python3 uniquement ?
Posté par flan (site web personnel) . Évalué à 2.
Si je ne m'abuse, tu auras toujours un problème avec Python 3.3, vu que le « yield from X » est une nouveauté de Python 3.4.
[^] # Re: python3 uniquement ?
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 0.
La grammaire a été mise à jour dans Python 3.3. Il suffit d'installer asyncio.
Je développe 50% avec Python 3.3.2 et 50% sur Python 3.4.2.
Pour les tests de déploiement, c'est souvent sur Heroku (Python 3.4.2) ou Vagrant (actuellement Utopic server, donc Python 3.4.2).
[^] # Re: python3 uniquement ?
Posté par palm123 (site web personnel) . Évalué à 2.
Pourquoi ne pas avoir gardé du code Python 2.7 passé dans modernize
https://pypi.python.org/pypi/modernize
pour en faire du code compatible Python 2 et 3 ?
ウィズコロナ
[^] # Re: python3 uniquement ?
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 3. Dernière modification le 10 février 2015 à 14:12.
Lorsque c'est possible, je préfère de suite faire tourner mon code avec Python 3, et des librairies standards ou même provisionnelles comme asyncio.
Et dans le cas de pyAggr3g470r, je pense qu'il n'y a pas de problème à casser la compatibilité avec Python 2. Je développe avec une Debian stable… Et pour le déploiement sur Heroku, de même, je n'ai rien eu de spécial à faire.
Pour le crawler, je voulais surtout tester asyncio et me passer de gevent. Asyncio était plus ma motivation de passer à Python 3.
Et mis à part le crawler, dans le reste du code je n'ai rien fait pour faire fonctionner l'application sous Python 3. Mon seul soucis était avec gevent (j'ai trouvé quelques "fork" de gevent pour Python 3). Donc en fait, je n'ai même pas vraiment fait de portage. Même pas avec 2to3.
Après je pourrai très bien restaurer l'ancien crawler, puis importer le bon crawler en fonction de la version de Python utilisée. Mais ça fera plus de code à maintenir.
# Petit retour
Posté par El Titi . Évalué à 2. Dernière modification le 10 février 2015 à 14:47.
L'application à bien évolué et semble assez stable et bien léchée.
Voici quelques retours principalement sur la navigation
D'une manière générale, on a un peu de mal à s'y retrouver même si on s'habitue.
lorsqu'on clique sur la page principale on retrouve un panneau avec tous les flux sur la gauche et la liste des flux en série en fonction de celui sélectionné à gauche.
Si on passe par "Filtrer" ils apparaissent en un mode mosaique. Ne peut-on pas basculer d'un mode à l'autre interactivement et choisir ou non de faire apparaître le volet gauche au besoin.
En mode série si on choisit afficher par 10, comment passe t'on à la page des 10 suivantes ?
Le menu "Filtrer" est assez inconsistant
Tantôt il présente des articles "non lus", tantôt des flux. Il ne les présentent pas de la même manière que la page d'accueil (cf. remarque plus haut) et par exemple on peut marquer tous les flux en lu si on les affiche au lieux des articles (Filter > tout les flux)… cette page de gestion des flux devrait être à part
Je n'ai pas trouvé comment marquer tout mes lus non lus après cette fausse manip
Je n'ai pas compris commenta fonctionnait la recherche
Lorsqu'on télecharge des articles, il serait bien d'avoir un indicateur de progression
Au niveau de la gestion des flux.
Il serait bien de pouvoir les regrouper sous forme arborescente ou par tag dans le navigateur à gauche et pouvoir ainsi parcourir tous les flux d'un même sujet
C'est dans ce navigateur qu'on retrouverait les favoris (entre autre tags) plutôt que dans le menu filtre
Les flux pourraient être réorganisés par glisser-deposer
Ce volet pourrait aussi inclure l'ajout d'un nouveau flux plutôt que "Articles > Ajouter un flux"
Comme on peu éditer chaque flux contextuellement le menu Filtrer > "Tous les flux" devient inutile surtout si on peut alterner entre les 2 mode d'affichage des articles.
Enfin au niveau de la navigabilité entre articles, je ne suis pas fan des menus fonction "tout marquer en lu", "marquer ce flux comme lu"
qui obligent à marquer les fichiers après coup. N'y aurait t'il pas moyen de prévisualiser les flux:
-- en mode série, on fait défiler le curseur ou alors on rajoute un bouton contextuel sur l'article qui marquerait les précédents de la list (plutôt que tous). Un article s'ouvre en cliquant mais le texte s'insère plutôt que de s'ouvrir dans une nouvelle page et d'obliger à revenir en arrière.
-- en mode mosaique on peu envisager un panneau qui s'ouvre en ba pour la visualisation.
-- 1enfin il pourrait y avoir un mode en profondeur dans lequel les article d'un flux sont ouverts et dans lequel on navigue vers les précedent et suivant … du flux tel qu'il est filtré. Ici j'ai l'impression qu'il s'agit des billets précédents et suivant indiqué par les sites.
Les menus Filter et Articles pourraient du coup disparaître
Voilà
[^] # Re: Petit retour
Posté par El Titi . Évalué à 3.
Et ce nom …
http://linuxfr.org/users/cbonhomme/journaux/pyaggr3g470r#comment-1534014
[^] # Re: Petit retour
Posté par El Titi . Évalué à 3.
Quel est l'intêret de supprimer un article ?
Une fois lu, on le taggue "pour plus tard" par exemple ou on l'ajoute en favori et de temps à autre on refouille dans ses non-lus.
Si c'est pour une question de stockage, il serait mieux que ça fasse partie d'un paramètrage. En fonction de la taille allouée les plus anciens lus seraient effacés, avec des alertes sur le stockage, non ?
[^] # Re: Petit retour
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 1.
Je ne tiens forcément pas à faire comme la plupart des agrégateurs. Le seul que je connaisse vraiment bien, c'est akregator, avec lequel il est possible de supprimer des articles. Et je n'avais jamais utilisé celui de Google.
Personnellement, j'essaie plutôt de lire un maximum d'articles qui semblent intéressant. Si un article m'intéresse particulièrement je le marque en tant que favori.
Je le supprime surtout quand je vois que l'auteur du post à fait une erreur. Par exemple, j'ai parfois des articles en double de LinuxFr. Genre une petite différence dans le titre. Souvent quand l'auteur a fait une faute de frappe. Si mon crawler et passé avant que le titre soit corrigé, j'ai les deux versions dans ma base…
Il y a une fonction pour supprimer les anciens articles accessible via une des pages Web. Il faudrait que j'utilise cette fonction via un cron sur Heroku (il y a déjà un cron pour le crawler). J'aurai pas grand chose à changer pour faire ceci.
Car là, ma base "Hobby-dev" est en train d'exploser avec tous les comptes qui ont été créés aujourd'hui ;-)
J'ai déjà reçu une alerte d'Heroku en fin d'après-midi ;-)
[^] # Re: Petit retour
Posté par claudex . Évalué à 3.
Normalement, ça ne devrait pas arriver, le crawler devrait mettre à jour l'article dans la base vu que l'id est le même.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Petit retour
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 0.
À une époque je faisais comme tu dis. Je générai l'identifiant avec un hash sur le contenu de l'article… Et je crois même que les id des articles étaient relatifs aux flux. Mais ça ne me plaisait pas trop. Maintenant l'id est simplement une variable auto-incrémenté (non relative au flux).
Actuellement, j'utilise simplement l'adresse de l'article pour vérifier si il est déjà en base. Après avoir nettoyé l'URL. Akregator a le même problème, j'ai des doublons. Mais ça ne me choque pas du tout. Comment vraiment générer un ID qui sera unique et désigne toujours le même article?
Pour moi, c'est d'autant plus embêtant que j'utilise pratiquement toujours Tor, même avec cet agrégateur.
Ainsi je peux récupérer le même article avec différentes adresses. Exemple:
http://python-history.blogspot.[fr|de|it]/2013/11/the-history-of-bool-true-and-false.html
Ça dépend donc du noeud de sortie.
Ou, pire:
- http://feedproxy.google.com/~r/AFewThoughtsOnCryptographicEngineering/~3/kbMS_0-DeYQ/how-do-we-pay-for-privacy.html (URL dans le flux ATOM/RSS. Dégueulasse)
- http://blog.cryptographyengineering.com/2015/02/how-do-we-pay-for-privacy.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+AFewThoughtsOnCryptographicEngineering+%28A+Few+Thoughts+on+Cryptographic+Engineering%29&utm_content=FeedBurner (URL qu'on obtient après avoir fait un GET sur l'URL de flux. Horrible)
C'est pour ça que je nettoie les URL.
Et si j'active cette option l'URL sera stockée sous la forme:
http://blog.cryptographyengineering.com/2015/02/how-do-we-pay-for-privacy.html
Et là, je limite vraiment les problèmes de doublons.
Sur ma base de test, j'ai plus de 100.000 articles. Et aucun doublon (quelques uns, mais j'ai une fonction pour les détecter automatiquement. Je supprime manuellement après contrôle).
[^] # Re: Petit retour
Posté par claudex . Évalué à 4.
Pourquoi vouloir en générer un et ne pas utiliser celui qui est fourni dans le flux Atom directement pour chaque article ? Par exemple, sur LinuxFr. Ça donne des ID du style
<id>tag:linuxfr.org,2005:News/36119</id>
.« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Petit retour
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 0.
Pourquoi pas.
Il faudrait juste que je repasse à des id relatifs aux flux pour éviter les collisions.
Mais si c'est vraiment fiable, ça vaut le coup que j'essaie. Il faut savoir que certains flux RSS sont mal formés (surtout au niveau des dates). Donc il faut que je puisse générer un id indépendemment de celui fournit par le flux, en cas de pépin.
Et il faudrait quand même extraire cet ID de la chaîne. Il y a différentes possibilités (RSS, ATOM, etc.):
https://pythonhosted.org/feedparser/reference-entry-id.html
Par contre, je pense qu'il est bien de nettoyer les adresses des articles. Notamment, je n'aime pas avoir des adresses avec feedproxy dedans.
[^] # Re: Petit retour
Posté par claudex . Évalué à 4.
Il me semble que ttrss fait ça (typiquement, je n'ai pas de doublon quand le titre change sur linuxfr).
Bien sûr, mais autant en profiter quand c'est bien utilisé.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Petit retour
Posté par Cédric Bonhomme (site web personnel, Mastodon) . Évalué à 1.
Merci pour ces bons retours!
Je suis conscient de certains problèmes. Par exemple pour les catégories. Je vais y penser. Actuellement, l'import d'un OPML ne prend volontairement pas en compte les catégories. Dans tous les cas je limiterai les catégories à un seul niveau. Ça me dérange surtout pour l'interface. Je n'aime trop les interfaces… C'est pour ça que j'aime bien Bootstrap.
Je vais donc prendre en compte tes commentaires. Déjà pour simplifier le menu principal et pour les catégories.
Concernant le menu principal, j'aime avoir pas mal de fonctionnalités accessibles via ce menu. Car l'affichage est correct sur mon smartphone (Nexus 4). Le menu de gauche est moins utilisable sur un petit écran, donc il disparaît.
Il faut donc que je trouve un compromis si je veux vraiment supprimer le menu "Filter" et "Articles".
J'ai conservé le mode mosaïque pour des raisons historique (c'était la vue de la page principale). J'ai pensé à le supprimer, mais j'aime garder la possibilité de l'utiliser.
Je suis d'accord pour le menu filtrer. C'est un peu un menu fourre-tout.
Il faudrait peut être déjà changer son nom.
Bonne idée. En fait, je n'affiche jamais les articles 10 par 10. Je lis bcp de news. Et si j'ai bcp de retard -> "Mark all as read" ;-)
Pour le moment, tu dois indexer manuellement les articles via la page "management". J'ai désactivé l'indexation automatique des nouveaux articles pour pouvoir mieux tester le nouveau crawler. L'indexation sera appelée dès que le crawler a fini son travail.
Sur Heroku, l'indexation est désactivée. Whoosh utilise un fichier et le système de fichier sur Heroku n'est pas persistant (l'application peut changer des conteneurs…).
J'ai peur que ce soit moins utilisable sur un smartphone. Pour l'instant l'interface est plutôt bien sur mon Nexus 4.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.