Journal JARR v1

Posté par (page perso) . Licence CC by-sa
25
13
avr.
2016

Bonjour nal !

Pour cette première entrée je pensais te présenter un projet sur lequel je taff depuis pas mal de temps: JARR (qui veut dire Just Another RSS Reader).

C'est donc un agrégateur de flux RSS / Atom ainsi qu'un outil pour lire les entrées ainsi récupérées.

JARR est la reprise et la refonte quasi totale d'un projet qui avait déjà été présenté ici. Je tiens donc tout d'abord à remercier son auteur pour m'avoir laisser travailler sur son projet et avoir apporter pas mal de changements qui l'ont changé assez profondément.

Avant d'entrer dans les détails, vous pouvez tester le projet sur mon instance en y créant un compte !

La Stack

Le projet tourne sous Python3.4 (minimum) et utilise lourdement Flask pour le framework web, SQLAlchemy pour l'ORM.

Personnellement je fais tourner tout ça sur un PostgreSQL mais l'ORM permet tout aussi simplement d'utiliser sqlite à la place.

Pour l'UI, on a du ReactJS à la pointe de la technologie pour une one page app du plus bel effet.

Petite présentation

aperçu

Comme vous pouvez le voir sur la capture d'écran au dessus, l'interface est divisée en trois colonnes.

De droite à gauche :

  • la première liste les catégories et les flux et permet de filtrer la seconde colonne selon ces catégories ou flux. On peut replier les catégories ou filtrer les flux pour n'afficher que ceux avec des articles non lu ou ceux qui ont rencontré des erreurs les dernières fois que JARR a tenté de les mettre à jour.
  • la deuxième colonne est la liste des articles. Elle se met à jours quand on sélectionne un flux ou un article pour n'afficher que les articles idoines
  • la troisième colonne est le détail de la catégorie, du flux ou de l'article sélectionné.

Certains flux ne fournissent pas de contenu pour leurs entrées ou des entrées tronquées. Dans ce cas vous avez deux choix, soit aller sur le site source de l'article pour le consulter, soit utiliser Readability dont l'icône en forme de petit fauteuil est visible dans le coin haut droit du panneau droit. Cette icône apparaît si une clef a été fournie soit à l'installation de JARR soit dans le profil utilisateur. En cliquant dessus, JARR utilisera l'API de readability pour parser l'article et avoir un rendu plutôt propre (ça dépends fortement du site parsé). Ce parsage peut être automatisé pour tout un flux.

C'est très pratique pour des sites agrégateur de liens comme le journal du hacker.

Mobile

JARR, est utilisable sur plateforme mobile, même si ce n'est pas optimal puisque, comme vous pouvez le voir sci-dessous on perd d'abord la possibilité de consulter les articles directement, puis la possibilité de filtrer par flux et catégories.

Aperçu sur tablette :

tablets

Et sur téléphone :

tablets

Développement à venir

Les développements à venir auxquels j'ai pensé sont listé sur github dans les milestones. La plupart d'entre eux sont des améliorations de l'interface et / ou de l'utilisabilité (comme marquer un article comme "à lire plus tard" ou avoir une meilleur intégration de flux populaire qui sont mal foutu).

Mais la fonctionnalité principal que j'ai en tête c'est le regroupement intelligent d'article. L'idée serait dans un premier temps de grouper des entrées parce qu'elles ont la même url (typiquement, une entrée de LinuxFr repostée sur le journal du hacker) et plus tard d'élargir le procédé à une analyse du contenu de chaque entrée.

Conclusion

Je vous enjoins à installer le projet (j'ai retravaillé récemment l'installateur à cette fin), ou l'essayer sur mon instance.
Bien entendu, je suis avide de retour d'expérience utilisateur et de commentaires sur le projet en général.
Les contributions sont aussi les bienvenues !

  • # Vous ne passerez pas !!

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

    J'ai voulu tester pour le comparer à mon instance de FreshRSS, mais la page d'accueil ma gentiment rappelée que je ne faisais pas partie des élus…

    C'est dommage.

    • [^] # Re: Vous ne passerez pas !!

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

      Oui, il n'y a pas de compte de test ouvert à tout le monde. Il faut nécessairement créer le sien pour tester le projet.

      J'ai désactivé la création de compte classique (login / mot de passe) sur mon instance mais ça reste possible avec un provider d'Oauth (google, Facebook, Twitter).

  • # euh...

    Posté par (page perso) . Évalué à 5. Dernière modification le 14/04/16 à 08:19.

    vous pouvez tester le projet sur mon instance en y créant un compte !

    Marche pas terrible, ton truc.

    Edit: Ah, oké, posté trop vite. Il faut être inféodé au grand capital pour tester le projet.

    * Ils vendront Usenet^W les boites noires quand on aura fini de les remplir.

    • [^] # Re: euh...

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

      Bah, grand capital, tout de suite, c'est de l'openId !

      Du coup, j'ai réactivé la gestion "classique" des utilisateurs (on peut se créer un compte via login/mdp), mais je suis pas super fan de faire tout ça de mon côté, quand des fournisseur d'identité le feront mieux que moi.

      • [^] # Re: euh...

        Posté par . Évalué à 3.

        Bonjour,

        Un de mes amis est en train de développer une application, amis comme pour le moment ce n'est qu'un proof of concept, il n'y a rien de divulguable. Nous sommes donc pour le moment que 4 à tester.

        Or je peux me connecter via LinuxFR !

        Ne serait il pas possible d'avoir cette option également ? Cela m'éviterait d'ouvrir un compte "tout court" ;-)

        • [^] # Re: euh...

          Posté par . Évalué à 3.

          Ce serait sympa, mais c'est pas mal de boulot je pense pour linuxfr de devenir fournisseur d'identité.

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: euh...

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

          Je ne savais pas que LinuxFr fournissait de l'OAuth ! Je vais créer une implémentation dans la journée. Merci !

        • [^] # Re: euh...

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

          Juste pour notifier que linuxfr a été rajouté comme fournisseur d'OAuth ! :)

      • [^] # Re: euh...

        Posté par . Évalué à 4.

        Merci beaucoup d'avoir autorisé la création de comptes indépendants, je suis sûr que ça va permettre à beaucoup d'entre nous de tester :)

      • [^] # Re: euh...

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

        Y'a plus qu'à implémenter l'accès via XMPP (cf. ici)

      • [^] # Re: euh...

        Posté par . Évalué à 3.

        Malheureusement ces fournisseur d’identité ne se prive pas d'épier tes moindre fait et geste … une alternative plus respectueuse de la vie privé aurait sans doute été bien mieux accepté

      • [^] # Re: euh...

        Posté par . Évalué à 5.

        Ggl/Fb/twtr.
        Il faut donc avoir une identité parmi l'une de ces sociétés privées pour exister sur le web ?
        Je vote non.

        Que tu permettes d'utiliser un identity provider, je plussois.
        Que tu t'estimes moins qualifié qu'un identity provider pour gérer des identités, je dis pareil et je plussois encore.
        Mais, ne restreint pas la liste des fournisseurs, please.

        Vive la fédération !

        • [^] # Re: euh...

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

          Je suis en train de mettre linuxFr mais l'implémentation n'est pas strictement identique entre tous les fournisseurs, donc je ne peux pas juste mettre des champs en mode "utilisez l'openId que vous souhaitez". Il faut un minimum d'implémentation.

          Mais oui en avoir un maximum, pour laisser un maximum de choix me semble carrément la piste à suivre.

        • [^] # Re: euh...

          Posté par . Évalué à 4.

          Mais, ne restreint pas la liste des fournisseurs, please.

          Selon l'implémentation, tu dois enregistrer ton application.

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # Prometteur

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

    Salut,

    Je viens de tester rapidement en créant une instance et ça marche très bien. j'aime beaucoup l'UI, elle me semble vraiment bien organisée. Je vais essayer de l'utiliser quelque temps en parallèle de mon instance de Freshrss.

    En plus du Python et de l'AGPLv3 miam miam

    • [^] # Re: Prometteur

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

      Je suis également franchement intéressé. Ça me paraît pas mal du tout ! Je n'ai pas eu le temps de tester, mais je le mets sur ma liste de choses à installer.

      Par pur plaisir d'être pénible, j'aurais quelques remarques, uniquement basées sur la doc et liées à mes petites manies :

      • pour moi, un projet Python devrait s'installer via pip (quitte à avoir une commande pour créer la doc), ou via des paquets (type .deb ou .rpm), le tout associé à un fichier de conf' : c'est toujours plus agréable d'avoir une seule méthode pour installer tous les projets, et de pouvoir les installer sans accès internet. C'est en tout cas ainsi que je raisonne pour mes projets perso (basés sur Django), mais j'ai l'impression que ce n'est pas le cas ici.
      • y a-t-il moyen d'utiliser le REMOTE_USER (ou HTTP_REMOTE_USER) pour authentifier l'utilisateur ? j'aime bien avoir mes utilisateurs authentifiés via Kerberos.
      • [^] # Re: Prometteur

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

        un projet Python devrait s'installer via pip

        Tout à fait d'accord pour une dépendance ! Mais JARR n'en étant pas une, et n'étant pas 100% python (github me dit 40% html/js) et le JS étant compilé, ça va pas forcément être pratique à utiliser via l'env python. D'autant que si on utilise un serveur http digne de ce nom, il faudra préciser l'entry point pour wsgi et si c'est loin dans un env, encore une fois, ça va être malpratique.

        y a-t-il moyen d'utiliser le REMOTE_USER (ou HTTP_REMOTE_USER) pour authentifier l'utilisateur ? j'aime bien avoir mes utilisateurs authentifiés via Kerberos.

        Hum. Bonne question, ça doit pouvoir se faire avec quelques ajustement et en tripatouillant la conf du serveur. Je suis pas du tout contre une intégration de ce genre de chose, mais clairement je vais pas avoir le temps de plancher là dessus :/

        • [^] # Re: Prometteur

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

          Merci pour tes réponses. Je n'ai pas encore eu le temps de m'y plonger sérieusement, mais je note pour plus tard, dans ma liste de choses à installer ^ ^

          Peut-on l'utiliser en reverse proxy, plus simplement ?

          Y a-t-il moyen de compiler facilement et de l'exporter sous forme de .deb ?
          De plus, si je comprends bien, la conf' est écrite dans un fichier .py au milieu du code. Serait-il envisageable de l'exporter dans un .ini ?

          Que se passe-t-il pour la mise à jour de la base de données si tu changes le modèle ? Je suis habitué au système de migrations de Django, mais je ne connais pas du tout Flask.

          Encore une question : peut-on partager ou rendre publiques des catégories ? Je n'ai pas vu de telle option en me logguant rapidement.

          • [^] # Re: Prometteur

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

            Peut-on l'utiliser en reverse proxy, plus simplement ?

            Techniquement, oui. Si il y a du contenu distant dans les flux récupéré ce dernier ne sera pas chargé en base et sera récupéré par le navigateur (ce qui, j'imagine, doit être un comportement désactivable). Les icônes des flux sont chargées sur le server ainsi que le contenu récupéré par readability, dans un souci de vie privée mais ça se limite à ça.

            Y a-t-il moyen de compiler facilement et de l'exporter sous forme de .deb ?

            Je n'ai pas fait mais je crois que faire un .deb à partir d'un projet python est assez aisé. Je pense pas que ça demanderait beaucoup de travail (enfin sauf d'écrire des MakeFile jusqu'à plus soif quoi :D).

            De plus, si je comprends bien, la conf' est écrite dans un fichier .py au milieu du code. Serait-il envisageable de l'exporter dans un .ini ?

            Alors ça, c'est voulu. À la base elle était dans un point .ini mais l'intégration était vraiment pas top et j'ai finit par refaire le système pour qu'il fasse ainsi. L'idée est que l'intégration avec flask est bien meilleur avec la conf directement dans un module. On peut faire autrement (dans un objet python qui va chercher ses variables dans la conf par exemple) et c'est carrément indiqué si on veut compiler tout ça dans un .deb.
            Mais tout ça, (faire des .deb, compiler des sources, refaire le système de conf) n'est pas vraiment dans mes priorités immédiates…

            Que se passe-t-il pour la mise à jour de la base de données si tu changes le modèle ? Je suis habitué au système de migrations de Django, mais je ne connais pas du tout Flask.

            Ça c'est très bien géré avec Flask-Migrate.

            git pull 
            ./manager.py db upgrade

            Et c'est finit :)

            Encore une question : peut-on partager ou rendre publiques des catégories ?

            Non et qu'est ce que tu entends par là ?

            • [^] # Re: Prometteur

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

              Ok, merci encore pour toutes ces réponses.

              pour les catégories ou les flux publics, je pensais à la possibilité de mettre des flux ou des groupes de flux visibles d'autres personnes, avec une page proposant ces groupes déjà prêts à être ajoutés dans une sélection perso.

              • [^] # Re: Prometteur

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

                Et bien j'avais ça de planifié pour un peu tard. L'idée étant de proposer des flux déjà dans la base avec une recherche par mot clef. Après, ça n'aurait pas de rapport avec les catégories et chaque utilisateurs devra toujours organiser ses flux à la main.

  • # Selfoss

    Posté par . Évalué à 4.

    Salut,

    Merci pour ton travail et ta solution !

    Après test je préfère rester sur mon Selfoss, beaucoup plus clair et simple de mon point de vue, après c'est les goûts et les couleurs…
    Le gros point positif de ta solution, c'est pour les flux RSS qui te file tout l'article et non seulement le preview, la lecture en devient agréable avec le panel de droite

    • [^] # Re: Selfoss

      Posté par . Évalué à 2.

      idem, ça semble très bien (joli, pratique), mais j'ai déjà un selfoss qui fonctionne bien, donc je le garde ;)

  • # Erreur 500

    Posté par . Évalué à 2.

    Bon, j'ai eu une erreur 500 sur la suppression de mon user avec https://jarr.info/user/delete_account/25

    C'est pas grave, hein :)

    Sinon, c'est vrai que le chemin est long pour atteindre le niveau des lecteurs RSS actuels. Mais je te souhaite de continuer. Parce que c'est déjà une vraie alternative. Et en Python :)

  • # Super !

    Posté par . Évalué à 4.

    Ton projet a l'air super !

    Sur mon mobile avec Firefox je n'ai qu'une page blanche.
    Je ne l'utiliserais pas tout de suite parce que je suis assez content de TTRSS et surtout du client Android que j'utilise (qui a la possibilité de s'utiliser en mode déconnecté).

    Est-ce que tu envisage de travailler sur ce cas d'usage ? En implémentant un mode déconnecté à la partie web, en implémentant les webservice de ttrss ou en créant ta propre appli mobile ? C'est un énorme travail j'en suis tout à fait conscient… :(

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Super !

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

      Sur mon mobile avec Firefox je n'ai qu'une page blanche.

      Effectivement c'est très moche, mais ça marche parfaitement sur chrome mobile, donc aussi très bizarre. Je vais plancher dessus.

      Est-ce que tu envisage de travailler sur ce cas d'usage ? En implémentant un mode déconnecté à la partie web, en implémentant les webservice de ttrss ou en créant ta propre appli mobile ?

      Vu que ce n'est qu'une page web, un mode hors ligne n'est pas vraiment envisageable tel quel. Je pense qu'il faudrait développer une app pour ça comme tu dis. Et à vrai dire, je n'en suis vraiment pas là…

      • [^] # Re: Super !

        Posté par . Évalué à 5.

        Vu que ce n'est qu'une page web, un mode hors ligne n'est pas vraiment envisageable tel quel.

        Si si c'est tout à fait possible.

        Ce n'est pas simple à mettre en place par contre (surtout après coup je pense).

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: Super !

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

          Ah, au temps pour moi, mais comme tu le dis ça a l'air assez lourd à mettre en place. Et le cache à générer pour que ça soit utilisable serait assez conséquent (au minimum tous les articles non lus, ce qui, selon les usages, peu monter à quelques milliers !).

          Mais je garde ça dans un coin.

          • [^] # Re: Super !

            Posté par . Évalué à 4.

            Et le cache à générer pour que ça soit utilisable serait assez conséquent (au minimum tous les articles non lus, ce qui, selon les usages, peu monter à quelques milliers !).

            Non pour ça il vaut mieux utiliser localstorage ou IndexedDB. Tu a un vrai accès programmatique et tu peux faire du crud (là où le cache est déclaratif).

            Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Super !

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

      J'ai régler le problème sur firefox mobile :)

  • # readability

    Posté par . Évalué à 4.

    Bravo pour ton projet.
    L'interface a l'air très clean.

    Je trouve la fonctionnalité de "readability" très novatrice pour ce type de logiciel. Bravo !
    Par contre, est ce qu'il ne sera pas possible de travailler avec une bibliothèque intégrée plutôt qu'avec les API d'un fournisseur privé ? Je pense aux travaux que font Mozilla/Firefox (reader mode) ou wallabag.

    Bonne continuation

    • [^] # Re: readability

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

      Je vais voir pour wallabag, mais c'est du php (donc moyennement intégrable dans JARR côté server) et je vais aussi regarder du côté de Mozilla/Firefox pour le reader mode. Malheureusement de ce que j'ai vu voir vite fait, il ne propose pas une api requêtable comme le fait readability. L'intégration sera forcément plus laborieuse.

      En tout cas merci du commentaire !

  • # Suggestions: raccourcis clavier

    Posté par . Évalué à 3.

    Vraiment très sympa, ce projet. Utilisateur de tt-rss, j'apprécie énormément les raccourcis claviers qui permettent par exemple de passer d'un article à l'autre sans avoir à toucher la souris. C'est le genre de chose qui enlarge tellement la productivity qu'il est difficile de s'en passer :)

Suivre le flux des commentaires

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