Journal Nouveautés de pyAggr3g470r

14
9
fév.
2015

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

  1. Instance officielle
  2. Déploiement Heroku: DLFP
  3. Déploiement Vagrant
  • # python3 uniquement ?

    Posté par (page perso) . Évalué à 1.

    finalement, depuis peu pyAggr3g470r fonctionne avec Python 3.

    Ç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 (page perso) . É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 . Évalué à 2.

        Ceci signifie t'il que Flask supporte correctement python 3 ?
        ou que tu n'utilises plus Flask ?

      • [^] # Re: python3 uniquement ?

        Posté par (page perso) . É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 (page perso) . É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 (page perso) . É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 ?

      If you choose open source because you don't have to pay, but depend on it anyway, you're part of the problem.evloper) February 17, 2014

      • [^] # Re: python3 uniquement ?

        Posté par (page perso) . Évalué à 3. Dernière modification le 10/02/15 à 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 . Évalué à 2. Dernière modification le 10/02/15 à 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 . Évalué à 3.

    • [^] # Re: Petit retour

      Posté par . É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 (page perso) . É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 (page perso) . Évalué à 3.

          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…

          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 (page perso) . É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.

      Le menu "Filtrer" est assez inconsistant

      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.

      En mode série si on choisit afficher par 10, comment passe t'on à la page des 10 suivantes ?

      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" ;-)

      Je n'ai pas compris commenta fonctionnait la recherche

      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…).

      Ce volet pourrait aussi inclure l'ajout d'un nouveau flux plutôt que "Articles > Ajouter un flux"

      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 à ceux qui les ont postés. Nous n'en sommes pas responsables.