Zest Writer un éditeur hors-ligne pour vos contenus ZdS

sortie de la 2.0.0 (03 aout 2020)

a marqué ce sujet comme résolu.

Salut les agrumes,

Pour ceux qui ne me connaissent pas, je suis une toute petite souris du nom de firm1. J’aime bien programmer pour m’amuser. J’aime aussi découvrir de nouveaux langages, mais mon langage de prédilection reste le Java.

Aujourd’hui je viens vous présenter un remake d’un vieux projet qui s’appelle aujourd’hui: Zest-Writer. Qui n’est ni plus ni moins qu’un éditeur zMarkdown pour des tutoriels et articles en mode hors-ligne.

Le logo de Zest Writer (Merci à Titi_Alone)
Le logo de Zest Writer (Merci à Titi_Alone)

Présentation

Comment est né le projet ?

Ce n’est un secret pour personne, les éditeurs markdown correct en mode non connecté, ne courent pas les rues. C’est encore pire quand on veut profiter des spécificités du Markdown de ZdS, le zMarkdown.

L’objectif de ce projet

Mon premier objectif ici était de mener un projet de bout en bout avec JavaFX qui est le digne successeurs de Swing, SWT et cie coté interface en Java.

Le deuxième objectif était d’en faire quelque chose de plus pratique que l’éditeur en ligne, en proposant de petites fonctionnalités sympa. En espérant que ça vous plaise.

La valeur ajoutée : qu’est ce qui le rend unique ?

Zest Writer dispose de quelques petites perles en terme de fonctionnalités. Parmi lesquelles

La rédaction
  • Rédaction d’articles et de tutoriels en mode hors ligne, c’est à dire sans avoir besoin d’une connexion internet
  • Support de la syntaxe zMarkdown (le Markdown avec les petits ajouts utilisés sur le site Zeste de Savoir)
  • La prévisualisation instantanée lors de la rédaction
  • Bouton d’aide à la rédaction Markdown (gras, italique, blocs customs, tableaux, listes, etc.)
La navigation
  • La navigation dans le sommaire d’un contenu sous forme d’arbre
  • Le déplacement des conteneurs et des extraits grâce au drag’n drop
  • L’édition des titres des extraits et conteneurs depuis l’arbre de navigation
Conseil de rédaction
  • Indice de lisibilité des extraits (afin d’améliorer la lisibilité de son texte)
Synchronisation avec le site de ZdS
  • Possibilité de se connecter au site depuis l’éditeur
  • Possibilité de télécharger en local ses contenus en rédaction sur ZdS
  • Possibilité d’envoyer sur le site les modifications effectuées sur le contenus en local
Personnalisation et Internationalisation

Zest Writer est massivement personnalisable (Police, Affichage, Thème, etc.) et disponible aujourd’hui en deux langues officielles (Français et Anglais). Tout se passe dans les préférences de l’application.

État d’avancement

Actuellement l’éditeur est en version 2.0.0. Toute remarque ou bug pendant l’utilisation est la bienvenue.

Si vous vous y connaissez en Java, vous pouvez aussi participer au projet qui est open source et disponible via le lien vers le github du projet.

En ce qui concerne les fichiers de téléchargement de l’application reportez vous au billet de publication.

Screen

La page d'accueil
La page d'accueil
La page d'accueil version dark
La page d'accueil version dark
Aperçu de la rédaction
Aperçu de la rédaction
Aperçu de la rédaction version dark
Aperçu de la rédaction version dark

Remerciement

Je remercie tout ceux qui ont pris la peine jusqu’ici de tester Zest Writer et de m’en faire un retour, je pense donc à : Aabu, Andr0, joseph, WinXaito, Thunderseb, yoch, the_new_sky, Kryptos, -L0Lock- , Rockaround, Bat', Ymox, LudoBike, Roipoussiere. C’est grâce à vous que Zest Writer est devenue ce qu’il est aujourd’hui.

Je remercie aussi WinXaito, Andr0, SpaceFox, Titi_Alone, artragis et Roipoussiere pour leurs PRs dans le projet.

L'application fonctionne sur Windows (32 et 64 bits), Linux et OS X quelque soit la version de la JVM sur votre machine, car l'application embarque sa propre JVM.

Arrrgh, non :(

Sinon j'ai pas testé (en tous cas pas cette version), mais je peux déjà dire que tu dois re-configurer ton IDE : ton code est indenté aléatoirement avec des tabulations et des espaces.

L'application fonctionne sur Windows (32 et 64 bits), Linux et OS X quelque soit la version de la JVM sur votre machine, car l'application embarque sa propre JVM.

Arrrgh, non :(

Étant donné que pour lancer JavaFX il te faut un Java8, et qu'on ne le trouve pas forcément à jour partout, j'ai opté pour ça. Pour les autres, il suffit de downoader le code et gradle build

Sinon j'ai pas testé (en tous cas pas cette version), mais je peux déjà dire que tu dois re-configurer ton IDE : ton code est indenté aléatoirement avec des tabulations et des espaces.

SpaceFox

Ouais, j'ai vu qu'il y a du nettoyage à faire. Je crois que j'ai utilisé trop d'EDI différent ici ;)

Ouais, mais du coup, tu obliges l'utilisateur à télécharger tout un JRE généralement inutile (je ne sais pas qui ne peut pas avoir simplement un JRE 8, sauf peut-être les utilisateurs de Debian 8 stable, et encore) et qui ne sera pas correctement mis à jour.

PS : là par exemple, le build Windows x64 fait 113 Mo, à comparer aux 234 Mo de la suite complète LibreOffice. Quant à ta solution de télécharger de code et de builder toi-même l'éditeur si tu ne veux pas embarquer un JRE inutile, elle est bancale, parce qu'elle suppose que tu as un IDE Java configuré avec un JDK 8 – et là oui, c'est rare.

Étant donné que je suis en phase de bêta, je préfère éviter les retours "qui ne marchent pas parce qu'on a pas installé la JRE8 ou parce qu'on a pas mis à jour son PATH correctement". Typiquement chez moi avec Java 7 d'installé, lorsque j'ai voulu passer à Java 8, il a fallu que je refasse mes PATH moi même.

Une fois l'application stabilisée, on pourra (et c'est pour ça que gradle c'est cool) proposer plusieurs version à télécharger (avec ou sans JRE).

Salut,

J'ai testé un peu, voilà quelques remarques :

  • Essaie de proposer dès maintenant une version sans JRE. Je me vois mal télécharger les 300 Mo de l'archive Linux à chaque fois (presque 10 min…).
  • J'ai eu un peu de mal à trouver l'exécutable au fin fond du dossier. Une petite note sur son emplacement serait cool pour les suivants.
  • La connexion au site semble marcher. Par contre, le téléchargement des contenus m'amène des dossiers vides et des archives corrompues…
  • L'ouverture d'une archive téléchargée depuis le site fonctionne.
  • Sur un dossier ouvert dans l'arborescence, "Clic droit > Supprimer" ne fait que le fermer, ce qui est bien, mais du coup, il faudrait renommer ça en "Fermer" ou "Retirer du panneau".
  • En double cliquant sur un fichier, je croyais que ça allait l'ouvrir… En fait, ça propose de le renommer. Je te propose de mettre l'ouverture au double clic et le renommage dans le menu contextuel.
  • Ça manque de raccourcis clavier tout ça !
  • Pour le rendu des maths, le module "Markdown Preview Plus" d'Atom sait le faire, si ça t'inspire.
  • Il y a un bug étrange avec les citations (la source est mise en forme, mais pas le contenu de la citation).
  • Le drag n' drop est totalement chaotique, j'ai supprimé un extrait en voulant en déplacer un. Le fichier n'est pas supprimé par ailleurs (et c'est peut-être mieux ainsi), mais ce comportement est pour le moins étrange. Surtout que j'ai réussi à supprimer la conclusion (qui ne peut pas l'être par clic droit !).

Sinon, ça part dans une bonne direction, mais à ce stade c'est plutôt de l'alpha que de la bêta. ;)

Bonne continuation !

Je suis donc à la recherche de :

  • Testeurs : N'hésitez pas à tester un peu l'éditeur et me donner des axes d'amélioration
  • Riche Utilisateur de OS X : pour pouvoir builder mon code sous OS X et me fournir un dmg. C'est Java, le build fonctionne quasi toujours. ;)

firm1

Je suis entrain de faire ma première compilation de projet java, juste pour voir…

+0 -0

Aabu, merci pour ton retour assez complet. J'aurai besoin de savoir quel est ton système d'exploitation (Windows 8 ? Windows 7 ? Windows 10 ? ) car ça pourrait expliquer certaines petites choses.

En double cliquant sur un fichier, je croyais que ça allait l'ouvrir… En fait, ça propose de le renommer. Je te propose de mettre l'ouverture au double clic et le renommage dans le menu contextuel.

J'ai bien eu un souci pour gérer le coté ergonomique de ce point. Mais je pense m'orienter vers cette proposition, c'est plus naturel.

Pour le rendu des maths, le module "Markdown Preview Plus" d'Atom sait le faire, si ça t'inspire.

J'envisageais le passage par MathJax, mais j'ai peur de sa gourmandise. Je vais jeter un oeil à celui d'Atom

Merci encore pour ton retour.

J'envisageais le passage par MathJax, mais j'ai peur de sa gourmandise. Je vais jeter un oeil à celui d'Atom

Attention, un code différent de celui du site veux aussi dire que probablement il y aura des cas pathologique o* le rendu sera différent sur le site que sur ton éditeur et tu t'expose à des remontés de bug du type "ça rend bien sur l'éditeur et pas sur le site" (ou inversement).

Attention, un code différent de celui du site veux aussi dire que probablement il y aura des cas pathologique o* le rendu sera différent sur le site que sur ton éditeur et tu t'expose à des remontés de bug du type "ça rend bien sur l'éditeur et pas sur le site" (ou inversement).

Kje

Effectivement, c'est pour cela qu'instinctivement je m'orientais sur MathJax. Je note, je vais voir.> > Je suis entrain de faire ma première compilation de projet java, juste pour voir…

Je suis entrain de faire ma première compilation de projet java, juste pour voir…

Xia

1
2
3
BUILD SUCCESSFUL

Total time: 10 mins 24.401 secs

Xia

\o/ Java it's magic

Linux Mint 17.3 'Rosa' (Cinnamon 64-bit). C'est basé sur Ubuntu 14.04.

Aabu

Ok, merci. Je fais mes tests sur une Ubuntu 15.10, je devrais pouvoir reproduire tes bugs.

Bien, j'ai fais un build sur OS X et j'ai pu tester l'application. Voici mes retours :

Authentification

  • Si je renseigne des mauvais identifiants, il me dit bien que mes identifiants sont mauvais mais le menu me propose de me déconnecter (connexion étant grisé). A partir de là, impossible de me "déconnecter". Je suis obligé de quitter et de relancer l'application.
  • Il ne conserve pas ma connexion quand je quitte et que je relance l'application. C'est un peu chiant.

Menu

  • Les sous-menus dans "Edition" ne font rien.
  • Les sous-menus dans "Aide" ne font rien.

Synchronisation

  • Mes contenus sont vides quand je lance une synchronisation. Impossible de tester l'édition d'un contenu.

Général

  • De manière générale, j'ai de gros freeze quand tu fais des requêtes HTTPs. Ca sent les requêtes faites sur le thread principal, c'est pas génial.
+1 -0

Il ne conserve pas ma connexion quand je quitte et que je relance l'application. C'est un peu chiant.

Je ne voulais pas spécialement enregistrer des informations perso (cookies ou autre), mais je vais peut-être proposer une case à cocher "rester connecté"

Les sous-menus dans "Aide" ne font rien.

ça c'est normal, il faut que j'y mette quelque chose ;)

Les sous-menus dans "Edition" ne font rien.

ça ce n'est pas normal par contre ;)

Mes contenus sont vides quand je lance une synchronisation. Impossible de tester l'édition d'un contenu.

Tu ne semble pas être le seul, je vais essayer de voir ce qui ne passe pas. Mais si tu veux tester l'édition du contenu, tu peux télécharger ton archive depuis le site.

De manière générale, j'ai de gros freeze quand tu fais des requêtes HTTPs. Ca sent les requêtes faites sur le thread principal, c'est pas génial.

Bien vu.

Merci pour vos retours, je liste les problèmes sur le dépot github, et je vais voir pour sortir rapidement une version qui vous permet de mieux tester.

N'hésitez pas à faire de PRs cela dit.

Pour builder l'application, vous devez avoir installé gradle

Bah ça sert à rien d'utiliser le wrapper alors :(

Pourtant tu l'as bien utilisé.

Ensuite comme tu es en Gradle 2.8, tu peux te passer de la moche syntaxe apply from, utilise le bloc plugins si tu peux, c'est moins vilain.

Ca sent les requêtes faites sur le thread principal, c'est pas génial

Client asynchrone ou green threading, fais ton choix :)

http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm

+0 -0

Je vais essayer de te faire une PR avec ma code review. Y'a quand même pas mal de pistes d'amélioration.

Les plus notables :

  • tu utilises Java 8 sans utiliser aucune de ses features : la streaming API, les lambdas, …
  • du coup tu utilises Java 7, en zappant aussi pas mal de ses fonctionnalités (switch sur les String, diamond operator, Files, Charsets, …)
  • tu ne fermes jamais les stream que tu ouvres (cf. remarque du dessus : try-with-resources)
  • StringBuffer -> StringBuilder
  • Y'a des logs en Anglais, des logs en Français
  • La gestion des exceptions est curieuse. Des fois tu déclares des exceptions qui ne sont pas lancées, des fois tu balances des IOExceptions mais on ne sait pas ce qu'il faudrait faire concrètement (et notamment fermer les streams ! au plus "près")
  • Attention à la concaténation des strings inutiles (notamment dans les logs)

NB : j'ai commencé mais y'a trop trop de boulot. Je commite sur mon fork, si j'ai le courage de continuer ce week-end je continuerai, au moins en attendant ça peut te donner des pistes d'amélioration.

PS : essaie de configurer ton IDE/éditeur au mieux, l'indentation SpaceFox te l'a signalée (ça sent le c/c de code) mais y'a des trucs qu'IntelliJ ou Eclipse me mentionne directement (diamond operator, lambdas où c'est possible, variable initialisées inutilement, …). Tu y gagnerais certainement.

+1 -0

petits retour depuis Win 10 64b :

  • Bug d'encodage des caractère dans l'application
  • je synchronise avec le site, et la, je n'ai que les titres de tuto. Y a t'il une manip particulière à faire?
  • Les menus aide et edition ne font rien
  • le téléchargement des tutos ne fait que créer le dossier de base, mais rien dedans, de plus, impossible de les éditer.
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte