Journal FreshRSS, 1 an et quelques dents

Posté par  . Licence CC By‑SA.
29
25
oct.
2013

Sommaire

Bonjour 'nal !

Pour mon premier journal je voulais fêter un anniversaire un peu spécial. Il y a un an je démarrais le projet FreshRSS par un laconique « First commit ». Pour autant, il y avait déjà là tout ce qui allait faire le succès (on s'en approche :)) de ce simple agrégateur de flux RSS.

Du coup je me suis dit qu'il serait intéressant de partager avec toi le bilan que j'ai pu en faire. Si je le fais ici et non pas sur mon site personnel c'est que celui-ci s'est fait pirater et que tous les serveurs sont tombés c'est qu'il y a ici, il me semble, des personnes intéressées par ce genre de retour. Et puis si ça peut aider quelqu'un dans son projet, alors j'en serai très heureux :)

J'aurais bien des choses à raconter et j'avais même prévu un plan pour faire les choses bien… mais le feeling c'est pas mal aussi.

FreshRSS, c'est quoi ?

Outres le fait d'être un agrégateur de flux RSS écrit en PHP (rien n'est parfait) il s'agissait aussi et surtout, à l'époque, d'une réponse au manque criant d'agrégateurs web légers et auto-hébergeables. Apparaissait aussi, à peu près en même temps, Leed, l'agrégateur d'Idleman et mis en avant par Sebsauvage. Je n'ai néanmoins pas accroché à son ergonomie et me suis lancé dans ce que j'appelais une semaine plus tard ma 1.0 alpha.

(je voulais insérer un screenshot ici mais je n'ai plus d'hébergeur… sans doute pour une prochaine fois :))

Inspiré au début par l'ergonomie de Gnome (ceci n'est pas un troll), je me suis très vite rendu compte que ce n'était pas top du tout. Mais quand bien même c'était fade / pas beau / pas pratique, c'était mon agrégateur et, qui plus est, léger et sans fioriture en JavaScript. Rien que pour ça je n'étais pas peu fier et ça me soulageait d'un RSSLounge bogué jusqu'à la moelle et lourd, lourd, lourd.

Passage de la 1.0 alpha à la 0.1

De l'ergonomie d'un projet

Il faut bien noter la différence entre ergonomie et design. Un site peut être moche tout en étant ergonomique. Ce que j'entends par ergonomie c'est la logique de placement des différentes fonctionnalités. Si l'on se pose les questions « Mais comment je peux marquer cet article comme lu ? » ou « Qu'est-ce qu'il vient de se passer ? » ou encore « À quoi sert ce bouton ? », alors c'est qu'il y a un défaut dans l'ergonomie qui est sans doute à revoir. Je ne dis pas que c'est toujours possible ou facile, mais il faut au moins faire attention à ces questions (certains vont râler que les utilisateurs ne sont pas (tous) des assistés, on peut en parler dans les commentaires)

Bien que ergonomie et design restent subjectifs, je pense que le premier l'est un peu moins car se base sur des comportements utilisateurs habituels. Par exemple, le fait de cliquer (souvent par réflexe) sur le bouton en bas à droite pour valider une action.

Le renouveau de FreshRSS

Cette version 1.0 alpha me posait donc deux soucis : elle n'était ni ergonomique, ni jolie. Pour corriger le tir, je me suis fait une page de wiki (les images ont sauté suite au piratage de mon hébergeur, encore lui) à-la-Gnome listant les différentes solutions que je connaissais à l'époque pour essayer d'en tirer le meilleur de chacune. Pour être sincère, c'est Google Reader qui m'a le plus inspiré. Ici notez bien qu'il ne s'agissait que d'ergonomie et non pas de design.

Pour le design j'ai voulu commencer rapidement avec Bootstrap. Mais Bootstrap c'est aussi assez lourd et ça demande du JavaScript pour certaines choses comme les menus déroulants et hors de question d'imposer le JavaScript pour FreshRSS. Aussi je me suis amusé à « re-coder » un Bootstrap maison en faisant quelques modifications par-ci par-là. L'important est que je codais uniquement ce dont j'avais besoin sans fioriture. Ce fut finalement assez intéressant et je me suis rendu compte des petites (mais nombreuses) différences entre les moteurs de rendu

Au final donc je me suis retrouvé avec un design à-la-Bootstrap mais avec mon propre code juste (un peu) plus dégueu. L'ergonomie quant à elle a été revue avec les retours (rapides) de mon colocataire qui était aussi mon premier et unique utilisateur. Avec tous ces gros changements et les idées neuves que j'avais pour mon projet, je me décidai à basculer finalement en 0.1. Rien ne sert de se presser, j'ai tout mon temps.

L'ajout de fonctionnalités

Être son premier utilisateur

Dans un projet tel que celui-ci, vous devez être votre premier utilisateur. FreshRSS je le développe d'abord pour moi, ensuite pour les autres. Celui-ci est né d'un réel besoin de ma part ce qui m'a aidé dans le développement des fonctionnalités. Je sais plus que quiconque (sauf peut-être Google ou la NSA), ce dont j'ai besoin.

Par exemple, j'ai ajouté une vue « globale » (un peu l'équivalent des widgets de Netvibes) qui permet de voir d'un coup d'œil quels sont les articles non lus. Cette fonctionnalité je ne l'utilise pas moi-même. Aussi lorsqu'il y a eu de gros changements dans le JavaScript, le mode de vue globale ne fonctionnait plus comme il aurait dû et je m'en suis rendu compte un mois plus tard en faisant une vérification générale de l'application. Si j'avais été utilisateur de cette fonctionnalité, je l'aurais vu immédiatement.

Les utilisateurs

Lorsque j'ai débuté FreshRSS c'était pour moi, rien que pour moi. J'ai bien écrit un article relayé sur le Planet-Libre en me disant que ça pourrait en intéresser quelques-uns mais sans aucune attente derrière. Je ne souhaitais pas maintenir mon agrégateur plus que nécessaire.
C'était sans compter sur mon coloc' qui fut mon premier utilisateur et avec lui, les premières remarques « c'est moche », « il manque ça », « j'ai pas trouvé comment faire ça ». Tout ça je le savais certes, mais je n'étais pas motivé pour l'améliorer. Mais l'ego est tel que quand vous avez votre premier utilisateur, vous n'avez pas envie qu'il aille voir ailleurs. Ainsi je me suis forcé à répondre à ses demandes.

J'ai aussi eu droit à mon petit effet Sebsauvage qui a boosté le temps d'une semaine (mais voire aussi durablement) le nombre de visiteurs sur mon site et a attiré les chercheurs d'agrégateurs RSS.

Ainsi, de fil en aiguille j'ai touché d'autres (potentiels) utilisateurs. Souvent il s'agit d'un simple mail me disant « FreshRSS semble me convenir mais j'aimerais savoir si je peux faire telle chose ». Parfois (et de plus en plus souvent) il s'agit d'une ouverture de ticket sur Github pour demander une nouvelle fonctionnalité. Plus rarement c'est un mail pour me dire que ça ne marche pas, puis en investiguant je me rends compte qu'il manque des messages d'erreur ou des avertissements. La plupart du temps je réponds favorablement à la demande ou au moins essaye de donner des pistes. En tout cas je fais de mon mieux pour répondre et aider, ce qui démarre une discussion et procure ainsi de nouvelles idées.

Motivation es-tu là ?

Voilà le point critique de tout projet. Je dois vous avouer qu'au bout d'un an la motivation n'est plus là-même qu'au début du projet. Cela tient en plusieurs raisons :

  • Le PHP est un langage puissant, mais particulièrement sale, surtout après avoir tâté du Python. Malgré quelques conventions de coding style que je me suis imposé, celles-ci évoluent en fonction de mes envies. Et plus le code grossit moins je peux me permettre de tout réécrire pour coller parfaitement à un coding style bien défini.
  • Il y a toujours autant de boulot à faire un an après. À chaque version je me dis que c'est la dernière. Mais à chaque nouvelle version j'ai de nouveaux utilisateurs avec des besoins différents et, c'est important, justifiés. À chaque fois donc je repousse la version 1.0 et je ne vois pas le bout du tunnel.
  • J'ai de plus en plus de boulot à côté dans le cadre de mes études et j'ai envie d'obtenir mon diplôme… quand même oui.
  • On n'y peut rien. La motivation ça va ça vient. Je ne peux qu'essayer de me remémorer qu'à chaque fois que je me remets à corriger des bugs ou ajouter des fonctionnalités ça me motive pour continuer.

Heureusement, depuis quelques mois j'ai aussi la chance d'avoir un contributeur régulier qui m'a proposé des améliorations vraiment géniales que je n'aurais pas eu le courage de coder moi-même. J'avoue que ça m'a permit de me reposer un peu et que ça fait du bien lorsqu'on a du boulot à côté et pas trop de temps à accorder à son projet.

Les trucs que j'aurais pu mieux prévoir

La communication

De ce côté-là, je pense que je me suis assez bien débrouillé, au moins au début. J'ai vite redirigé les demandes vers le bugtracker de Github afin de centraliser les demandes. Je propose aussi de me faire les demandes par mail parce que je sais que certaines personnes ne supportent pas Github (et je peux les comprendre). Autant permettre une interaction la plus large possible pour avoir le plus de retours possibles.

Maintenant je me rends compte que j'aimerai aussi pouvoir envoyer des informations aux personnes intéressées plus souvent. Parfois le blog suffit (sortie d'une nouvelle version par exemple), mais parfois ça ne vaut pas le coup d'écrire un article (« attention dans la version de dev il faudra mettre à jour la base de données »). Aussi, je pense mettre en place un site dédié qui ne parlera que de FreshRSS avec une mailing list dédiée . Mais il reste une question en suspens : « Vais-je avoir le temps d'animer tout ça ? ». Je me laisse donc jusqu'à mon retour en France, en janvier, pour réfléchir à cette question.

La communication ce n'est pas qu'un truc de marketeur. Ça aide aussi à faire connaitre (ou connaître ?) le projet à des personnes qui pourraient être intéressées mais qui n'en ont pas entendu parler. Ça permet de récupérer des retours qui amélioreront le produit et ça créé un lien avec les utilisateurs qui se sentent impliqués dans le processus de création (et c'est bien le cas). Puis c'est surtout bon pour l'égo lorsque les retours sont positifs :)

Le code

J'ai trop négligé le code sur plusieurs aspects.

Tout d'abord la propreté et le coding style. Si au départ je suis parti avec de bonnes intentions (j'utilise des tabulations, pas des espaces, j'essaye de commenter ni trop ni pas assez, j'utilise le CamelCase pour les classes et les méthodes, etc.), celles-ci ont peu à peu disparues ou ne me conviennent plus. Les commentaires ont disparu, j'aimerai utiliser des espaces finalement à la place des tabulations et la CasseChameau est variable.

Ensuite au niveau des technologies, j'utilise PHP car c'est ce qu'il y a de plus répandu sur les serveurs mutualisés et que c'était mon langage de prédilection au départ. Mais j'ai aussi décidé d'utiliser mon propre framework que j'ai codé principalement à la fin de mon DUT. Utiliser son propre framework c'est bien, mais même si ça ressemble à du Zend Framework, je pense que ça limite les contributions externes.
Mais le principal maintenant c'est que le PHP m'agace de plus en plus et que j'aimerai passer à du Python… mais je ne peux pas :)

Enfin au niveau de la documentation, là, c'est le néant. J'ai beau essayer de me motiver de temps en temps, mais ça ne sort pas. Les commentaires comme je disais plus haut ont disparu (shame on me), la documentation générale pour les développeurs n'a jamais existé et je ne sais pas par où ou quoi commencer. Néanmoins ça fait parti de mes plans critiques pour la sortie de la 1.0 qui arrivera… un jour.

L'internationalisation

Ce n'est peut-être pas le point le plus critique, mais à partir d'un certain moment, il peut être bon de rendre son application accessible à plus de monde. Pour le moment, l'anglais (moyen) et le français sont pris en charge. Ça a d'ailleurs été un travail assez long à mettre en place puisque je n'avais pas prévu ça dans mes plans initiaux. Il a donc fallu remplacer toutes les chaînes de caractères déjà écrites ce qui a été (très) long.
De plus, il faut noter que toute la communication se fait en Français, ce qui limite la portée de mon message.

Dans mon idéal à moi, FreshRSS serait traduit en français, anglais, espagnol, italien, allemand et Klingon pour l'aspect universel. La communication elle se ferait en anglais sur un site dédié avec traduction en français pour les récalcitrants.

Ce qui a évolué depuis le début

Mes prétentions

Je n'étais parti au départ avec aucune prétention si ce n'est celle de satisfaire mes propres besoins. Force est de constater que mes besoins ne sont pas uniques et les nombreux articles post-Google Reader vantant les mérites de tel ou tel agrégateur RSS n'ont pas su combler tout le monde. D'après les différents retours (enthousiastes :D) que j'ai pu avoir, je pense que FreshRSS a une place à se faire. Ainsi mes prétentions pour ce « simple petit agrégateur RSS » ont peu à peu mué pour devenir quelque chose de plus gros et plus solide.

Ma vision du JavaScript

Quelques faits :

  • J'ai horreur du JavaScript (ça doit venir du préfixe)
  • J'ai horreur des sites qui imposent l'utilisation du JavaScript
  • J'ai horreur des lourdeurs bien trop fréquentes dues au JavaScript
  • Je suis tiraillé depuis le début entre écrire JavaScript, Javascript ou JS

C'est faits n'ont pas bougé. Néanmoins je me rends compte peu à peu de l'utilité bien réelle de ce langage. Je me rends compte aussi comme on peut être bloqué des fois entre choisir entre améliorer les temps de chargement et son envie d'éviter le JavaScript a tout pris. Car oui, parfois, le JavaScript peut améliorer les performances de votre application…

Peu à peu ma vision du tout-sauf-JavaScript évolue. J'essaye d'ajouter quelques fonctionnalités, je vérifie que ça marche sans, mais petit à petit je me lasse de cette vérification. Plus le projet grossit, plus il est dur de ne pas imposer le JavaScript pour certaines fonctionnalités.

La solution que je compte mettre en place est une option de configuration pour optimiser la navigation sans JavaScript et générer plus de choses côté serveur. Je pourrai ainsi me permettre plus de code JavaScript d'un côté, tout en prenant en compte le cas sans.

Mais surtout, surtout, je ne compte pas surcharger FreshRSS de JavaScript.

Tout développer de zéro

Au début, tant que le projet restait confidentiel, tout re-développer de zéro c'était vachement cool. J'ai appris un tas de choses comme ça, notamment lorsque j'ai écrit Minz, mon framework PHP.

Mais voilà, au bout d'un moment on atteint ses limites.

Minz n'a pas bénéficié du travail de développeurs sans doute meilleurs que moi, qui ont été confrontés à des problématiques auxquels je n'ai été confronté que sur le tard.

Ma « réimplémentation de Bootstrap » n'est pas parfaite et je crains du résultat sur certains navigateurs (même en excluant la famille IE).

Les bases de données ont quand même du bon (facilité de manipulation, performances) et j'ai vite abandonné mon stockage sous forme de fichiers. Néanmoins je sais qu'une base de données n'est pas nécessaire dans mon cas (on ne tardera pas à me pointer du doigt les projets qui font sans) et cela reste un choix personnel… Après libre à vous de contribuer, j'utilise une architecture MVC et il n'y a que la partie DAO à modifier pour se passer d'une base de données :p

Enfin, j'ai très vite sauté sur la librairie SimplePie pour parser les flux RSS. Écrire mon propre parseur me posait trop de problèmes sur lesquels je ne voulais pas m'appesantir et sachant que d'autres les ont déjà résolus pour moi.

Ma petite conclusion

Pour conclure ce petit pavé, FreshRSS est pour moi le projet que j'ai le plus à cœur. J'ai déjà passé un an dessus et je compte bien continuer tant que je ne serai pas satisfait à 100% du résultat. Il me tient d'autant plus à cœur qu'il m'a permit de découvrir un tas de bonnes pratiques, m'a permit de construire ma première « communauté » et répond exactement à ce pourquoi je me suis lancé dans l'informatique : créer un logiciel utile et agréable à d'autres.
Ne soyons pas dupe non plus, ce projet me permettra aussi sans doute de me démarquer durant un entretien d'embauche (travail en équipe, communication, utilisation de git, gestion de projet, etc.) même si je n'ai pas que cette carte-là dans ma manche.

Même si je pense que FreshRSS n'est pas parfait, je me serai au moins bien amusé à le développer et c'est, je pense, bien le plus important. Et pour tout ceux qui ont un projet en tête, lancez-vous juste, vous en tirerez toujours quelque chose.

Et désolé 'nal si j'ai été un peu bavard :(

  • # Très intéressant

    Posté par  . Évalué à 1.

    J'ai trouvé cet article vraiment très intéressant !
    Je me suis un peu retrouvé dans ton discours. Il y a quelques années, j'avais commencé à coder une appli PHP de gestion de collection de jeux vidéos (GaCoMa). J'ai rencontré les mêmes étapes que tu décris dans cet article et finalement, j'ai laissé tombé le projet (je précise que je ne suis pas dev' mais admin sys) bien que l'appli était déjà très utilisable.
    J'ai également souvent eu envie de tout reprendre depuis zéro mais cela me demanderait trop de temps, temps que je n'ai malheureusement plus.

    Concernant FreshRSS, cela fait plus de 6 mois que c'est dans ma todo list à tester afin de remplacer mon RSSLounge (que j'adore vraiment). À ce sujet, tu dis que RSSLounge est hyper lourd et archi bogué, je l'utilise activement plusieurs fois par jour, je ne le trouve pas du tout lourd (rien à voir avec TTRSS que j'utilisais au tout début) et pas aussi bogué que tu le dis. Je n'ai pas souvenir d'un bogue rencontré ces 6 derniers mois.
    Ceci étant dit, il n'est plus maintenu et je cherche une alternative. FreshRSS est celui qui a le plus retenu mon attention (et j'ai cherché et cherché) :)
    J'espère que son développement ne sera pas stoppé et que des améliorations viendront encore et encore.

    Bon courage et à bientôt sur Github :)

    • [^] # Re: Très intéressant

      Posté par  . Évalué à 2.

      Merci pour ce commentaire encourageant :)

      Pour ce qui est du côté bogué de RSSLounge, je me souviens particulièrement que c'était une horreur à chaque fois que je voulais ajouter un flux :

      • des fois c'était la boite de dialogue qui ne s'affichait pas
      • d'autres fois le bouton pour valider ne marchait pas
      • encore une autre fois RSSLounge m'annonce que le flux a été ajouté mais je ne le vois nul part

      Au niveau du mode de chargement des articles aussi il me semble qu'il y avait des soucis. Mais c'est vrai que j'ai été un peu médisant sur le coté bogué dans mon journal :p Après c'est sûr que comparé à TTRSS, RSSLounge était un poids plume (encore que je crois qu'ils se sont bien amélioré ces derniers temps), mais il était encore trop lourd pour mon usage, surtout sur mobile.

      Et pour le moment le développement est loin d'être stoppé, il y a pleins de choses à ajouter ou déboguer :) je prends juste un petit break (en partie imposé) pour mieux continuer le développement après ! Mais j'essaye toujours de répondre aux demandes quand j'ai un peu de temps

      • [^] # Commentaire supprimé

        Posté par  . Évalué à 3.

        Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: Très intéressant

          Posté par  . Évalué à 1.

          J'ai vos deux webapps qui tourne en ce moment sur mon portable.

          Les points notables:

          NWS: La vue en colonne est très sympa, le choix des couleurs aussi mais c'est franchement lent à charger bien que ça ne soit pas vraiment génant. Il serait peut-être bon d'améliorer configuration car elle est un peu sommaire. Mais je sais que tu n'as pas mis la même quantité de temps et de travail que Marien et que NWS est beaucoup plus jeune.

          FreshRSS: Très rapide, configuration plutôt bonne, j'aime les raccourci j+k pour basculer entre les articles, la détection auto du lien RSS à partir du nom de domaine contrairement à NWS. Par contre, j'aurais préféré la vue globale par défaut plutôt que le mélange des entrées même si les catégories jouent le rôle de "filtre", je préfère regarder les flux par site.

          • [^] # Re: Très intéressant

            Posté par  . Évalué à 1.

            @xaccrocheur > les media-queries offrent déjà pas mal de possibilité pour faire du responsive design :) FreshRSS ne contient que quelques lignes de plus pour le mobile et c'est très bien géré

            @LeGab > Tu peux mettre la vue globale par défaut dans les options de configuration :) (idem pour les raccourcis d'ailleurs, et plein d'autres trucs)

  • # Quand l'autohébergement devient un plaisir

    Posté par  (site web personnel) . Évalué à 5.

    Je dois reconnaître que FreshRSS a su remplacer avantageusement tout ce que j'avais pu tester avant (dont l'extension Brief de Firefox sur laquelle mon choix s'était arrêté).

    FreshRSS est réactif, fluide, fonctionne à merveille sur mon téléphone, il est simple d'utilisation, il fait absolument tout ce que je faisais avec ma précédente solution en bien plus pratique. Je peux exporter mes flux dans un format standard et partir quand je le souhaite, mais plus couramment : faire mes sauvegardes.

    C'est un projet que je suis depuis mars si je me souviens bien, j'ai vu une partie de son évolution et on ressent vraiment le projet animé par un passionné. Il me semblait avoir entendu parler de choses sociales reposant sur RSS, j'espère que ça n'est pas endormi dans un tiroir !

    Quoi qu'il en soit cet article fait vraiment plaisir à lire, c'est une invitation à entreprendre et un très bel hommage à ton projet (pourtant si discret il semblerait). Les problèmes périphériques liés à la diffusion et à la documentation de ton projet, j'ai déjà vu ça dans d'autres petits projets tels que Movim. Le décollage est dur mais lorsque la popularité arrive, ce sont les utilisateurs qui finissent par écrire des tutos =) Patience ! Et bon courage pour la suite !

  • # Démo ?

    Posté par  . Évalué à 2.

    Je viens de cliquer sur le lien démo et j'ai une jolie erreur 404. Maintenance en cours ?

    • [^] # Re: Démo ?

      Posté par  . Évalué à 1.

      En quelque sorte oui, comme j'ai écrit dans l'article mon hébergeur s'est fait attaquer et a sans doute perdu toutes mes données. J'ai réussi à migrer finalement mon site vers un autre serveur mais je n'ai pas encore tout remis en place. Il faut que je m'en occupe ce week-end mais pour le moment je n'ai absolument pas le temps ;)

    • [^] # Re: Démo ?

      Posté par  . Évalué à 2.

      Je viens de remettre en place la démo si tu veux. Par contre le serveur est en phase de "stabilisation" et tout ne fonctionne pas parfaitement, genre je n'ai réussi à importer que quatre flux (j'ai l'impression que mes règles pour le pare-feu sont un peu strictes)

      • [^] # Re: Démo ?

        Posté par  . Évalué à 2.

        Je viens de regarder, très sympa comme concept !

      • [^] # Re: Démo ?

        Posté par  . Évalué à 2.

        Dans la démo, comment ajouter un flux ?

        • [^] # Re: Démo ?

          Posté par  . Évalué à 1.

          Désolé, la config par défaut avait été changée par d'autres utilisateurs et tous les flux supprimés (j'en ai profité pour détecter un bug au passage). C'est le problème des démos ouvertes… J'ai remis la config par défaut et ajouté des flux, ça devrait être plus compréhensible :)

Suivre le flux des commentaires

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