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.

Bonjour à tous, et encore merci à tous ceux qui me font des retours, ça ne peut qu'aider à améliorer Zest Writer. Je viens aujourd'hui avec de bonnes nouvelles pour vous.

  • Notre ami the_new_sky (et tout ceux qui étaient dans la même situation que lui) va être content car il est maintenant possible de créer un nouveau contenu de toute pièce, sans avoir besoin d'aller sur le site.

Créer un nouveau contenu

  • Rockaround aussi sera ravi d'apprendre que le bug de l'upload des contenus à été corrigé.

  • @-L0Lock- : je ne t'oublie pas, je vais avoir besoin de plus d'infos pour reproduire ton problème (on voit ça par MP).

Mesdames et messieurs, mes chers agrumes, laissez moi vous présenter, comme chaque semaine la dernière mouture de ZestWriter : 0.6.0

Système d'exploitation Lien de téléchargement
Tous les systèmes Exécutable Jar (81 Mo)
Windows Exécutable 32 bits (123 Mo)
Windows Exécutable 64 bits (124 Mo)
Debian/Ubuntu/… Installation deb
Fedora/CentOS/etc Installation Rpm

Au programme des changements :

Correctifs
  • Le bug de l'upload des contenus à été résolu. Le problème était tout bête, mais j'ai eu du mal à le trouver, j'ai été trompé par la spec des manifests :(
  • Zest Writer interdit maintenant de créer des choses qui ne seront pas acceptés par le serveur du site. Je pense ici à notre ami -L0Lock- qui a voulu créer un extrait "A propos" à un niveau qui n'est pas censé être autorisé par le site :)
Fonctionnalités
  • Il est possible désormais de créer un nouveau contenu sans passer par le site et de l'envoyer en tant que nouveau contenu
  • Chaque nouvelle version de Zest Writer pour linux est maintenant envoyée sur un dépôt spécifique, ce qui facilite les mises à jour de Zest Writer pour les utilisateur linux. La doc d'install sur votre système tiens en quelques lignes.

Bonne rédaction.

zestwriter is already the newest version.

Je ne l'avais pas retéléchargé. Le logiciel se met à jour tout seul ?

Rockaround

Zest Writer ne se mettra jamais à jour sans l'autorisation de son utilisateur :)

Au vu de ton message, je suppose que tu as une debian-like. Tu as certainement oublié de faire sudo apt-get update avant.

Je me demande si je dois le préciser dans la doc tiens.

@pierre_24 : Dans le manifest.json l'attribut "version" doit obligatoirement être de type entier et non chaine de caractère. Sauf que dans la documentation, on a des exemples qui sont trompeurs en faisant des trucs comme:

1
2
3
4
5
{
"title" : "Le titre de mon tutoriel"
[...]
"version" : "2"
}

Au lieu de :

1
2
3
4
5
{
"title" : "Le titre de mon tutoriel"
[...]
"version" : 2
}

@ -L0Lock- : ta boite à MP a du sonner :)

@pierre_24 : Dans le manifest.json l'attribut "version" doit obligatoirement être de type entier et non chaine de caractère. Sauf que dans la documentation, on a des exemples qui sont trompeurs en faisant des trucs comme:

1
2
3
4
5
{
"title" : "Le titre de mon tutoriel"
[...]
"version" : "2"
}

Au lieu de :

1
2
3
4
5
{
"title" : "Le titre de mon tutoriel"
[...]
"version" : 2
}

@ -L0Lock- : ta boite à MP a du sonner :)

firm1

Mmmmh, on a une régression sur les bras, alors, puisqu'il serait logique qu'on puisse écrire "2.1" (ou alors l'explication sur les versions n'aurait pas lieu d'être).

Mmmmh, on a une régression sur les bras, alors, puisqu'il serait logique qu'on puisse écrire "2.1" (ou alors l'explication sur les versions n'aurait pas lieu d'être).

Ce qui est sur c'est que ça ne fonctionne pas avec une chaine. Quand ça sera corrigé sur zds, j'adapterai Zest Writer en conséquence.

J'avais utilisé la version 0.5.0 en Java pour faire quelques modifications sur un tutoriel exporté depuis un ZIP, sans souci. Avec le JAR de la 0.6.0 (Windows, Java 1.8.0.77 x64), je n'ai plus aucune prévisualisation, même sur de petits fichiers avec du markdown simple comme les introductions et conclusions.

Si jamais, j'ai utilisé ton travail pour le tutoriel WAMP.

+0 -0

@Rockaround : comme on a pu le voir ensemble par MP ton système semble un peu vieux (je compile sur une ubuntu 14.04). Je suis en train de voir dans quelle mesure je pourrais automatiser le build sous la 12.04 pour ceux qui sont contraints d'utiliser des vieux equipements.

@Ymox : Ah c'est bien la première fois que j'entend parler de ce bug.

Puisque tu utilise le jar, est-ce que tu peux le lancer depuis ton terminal (java -jar zest-writer-xxx.jar) et me dire si tu as des messages d'erreurs dans ta console ?

Voici la stack trace. Là, ce soir, même pas possible de lancer l'application.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
C:\>java -jar zest-writer-all-0.6.0.jar
Exception in Application constructor
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class com.zestedesavoir.zestwriter.MainApp
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source)
        ... 1 more
Caused by: java.lang.RuntimeException: Could not create E:\
        at com.zestedesavoir.zestwriter.utils.LocalDirectorySaver.openDirCreateIfNecessary(LocalDirectorySaver.java:36)
        at com.zestedesavoir.zestwriter.utils.LocalDirectorySaver.<init>(LocalDirectorySaver.java:21)
        at com.zestedesavoir.zestwriter.utils.LocalDirectoryFactory.<init>(LocalDirectoryFactory.java:20)
        at com.zestedesavoir.zestwriter.utils.Configuration.loadWorkspace(Configuration.java:150)
        at com.zestedesavoir.zestwriter.utils.Configuration.<init>(Configuration.java:60)
        at com.zestedesavoir.zestwriter.MainApp.<init>(MainApp.java:43)
        ... 13 more
Exception running application com.zestedesavoir.zestwriter.MainApp

Edit

En fait, topo similaire pour la 0.5.0 sur Windows (j'avais testé cette version sur Mac).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
C:\>java -jar zest-writer-all-0.5.0.jar
Exception in Application constructor
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class com.zestedesavoir.zestwriter.MainApp
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source)
        ... 1 more
Caused by: java.lang.RuntimeException: Could not create E:\
        at com.zestedesavoir.zestwriter.utils.LocalDirectorySaver.openDirCreateIfNecessary(LocalDirectorySaver.java:36)
        at com.zestedesavoir.zestwriter.utils.LocalDirectorySaver.<init>(LocalDirectorySaver.java:21)
        at com.zestedesavoir.zestwriter.utils.LocalDirectoryFactory.<init>(LocalDirectoryFactory.java:20)
        at com.zestedesavoir.zestwriter.utils.Configuration.loadWorkspace(Configuration.java:150)
        at com.zestedesavoir.zestwriter.utils.Configuration.<init>(Configuration.java:60)
        at com.zestedesavoir.zestwriter.MainApp.<init>(MainApp.java:43)
        ... 13 more
Exception running application com.zestedesavoir.zestwriter.MainApp

Il semble que ça pourrait être lié à un paramètre de sécurité chez moi, paramètre qui n'avait pas la même valeur juste après téléchargement. Si je lance la commande en tant qu'administrateur, l'app Java se lance, et j'ai juste ceci, sans que l'app soit inutilisable :

1
2
3
4
5
C:\>java -jar zest-writer-all-0.6.0.jar
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
1 .. 2 .. 3 .. PYTHON START

Pour la version Windows x64, pareil : si je lance en tant qu'utilisateur standard, j'ai des erreurs, je dois lancer en tant qu'administrateur.

+0 -0

Coucou!
J'ai pensé à un p'tit truc tout bête : mettre des infobulles lorsqu'on survole les boutons, histoire de ne pas se demander "qu'est-ce que quoi que ça être ce bouton" pendant une plombe.
Enfin comme dans beaucoup de logiciels quoi! ^^

Edit : j'ai peut-être une piste concernant la synchronisation tuto qui semble ne pas fonctionner pour l'upload vers ZDS.
Pour rappel : lorsqu'on lance l'upload du tuto depuis zwriter, la procédure semble s'effectuer avec succès d'après la pop-up du logiciel. Mais une-fois sur ZDS, aucun changement notable, comme-si l'upload de zwriter n'a jamais eu lieue.
J'ai donc essayé de faire la mise à jour du tuto manuellement, en utilisant l'archive que crée zwriter lors de l'upload : Échec, avec le message d'erreur "Le fichier "annexes/introduction.md" n'existe pas dans l'archive." (alors que le fichier est bien présent et semble intact après extraction de l'archive).
Idem si je fais moi-même le fichier archive.

+2 -0

Salut,

d’abord merci pour ce beau travail, l'application a l'air super mais elle ne fonctionne visiblement pas sur archlinux

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ java -jar Téléchargements/zest-writer-all-0.6.0.jar 
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/zestedesavoir/zestwriter/MainApp : Unsupported major.minor version 52.0
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
  at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

1
2
3
4
$ java -version
java version "1.7.0_95"
OpenJDK Runtime Environment (IcedTea 2.6.4) (Arch Linux build 7.u95_2.6.4-1-x86_64)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)

Si j'ai bien compris la version de java proposé par arch est trop récente.

Sinon bonne chance pour mener à bien ce projet et éradiquer les bugs :)

+0 -0

Ta version de Java est trop vieille : il faut Java 8, tu as Java 7.


Une petite analyse du .jar, que je trouve démentiel. Il fait 81 Mo ; décompressé on y trouve 65 398 fichiers pour 164,5 Mo d'utilisation disque :

  • org/python prends plus de 100 Mo à lui tout seul, dont 37,9 pour le sous-dossier icu.
  • Mathjax : 123 Mo, principalement des fonts, dont 119,7 Mo de PNG (!)
  • Je vois plein de dossier javafx (dans sun et directement à la racine), c'est pas sensé être fourni avec le JRE ?
  • Je vois des unittest dans le dossier lib
  • J'ai l'impression que tu tires des tas de libs Java dans leur intégralité (genre lucene, avec les codecs lucenes v 50, 40, 42, 49, 41, 410, 45 et 46 – par exemple)

Bref tant que c'est une bêta c'est pas trop un problème, mais à mon avis tu devrais te poser sérieusement la question de la taille de ton application avant de la passer en version finale. Je me demande si un outil genre ProGuard sur Android peut être passé sur les JAR autonomes, non pas pour l'obscurcir mais pour dégager du build final toutes les classes et méthodes inutiles des libs utilisées.

Ta version de Java est trop vieille : il faut Java 8, tu as Java 7.

SpaceFox

effectivement, par contre il doit encore me manquer une lib

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
$ java -Dprism.verbose=true -jar Téléchargements/zest-writer-all-0.6.0.jar
Prism pipeline init order: es2 sw 
Using java-based Pisces rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2
GraphicsPipeline.createPipeline failed for com.sun.prism.es2.ES2Pipeline
java.lang.UnsatisfiedLinkError: Can't load library: /home/ludovic/amd64/libprism_es2.so
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
  at java.lang.Runtime.load0(Runtime.java:809)
  at java.lang.System.load(System.java:1086)
  at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:201)
  at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:94)
  at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:39)
  at com.sun.prism.es2.ES2Pipeline.lambda$static$460(ES2Pipeline.java:68)
  at java.security.AccessController.doPrivileged(Native Method)
  at com.sun.prism.es2.ES2Pipeline.<clinit>(ES2Pipeline.java:50)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:264)
  at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:187)
  at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91)
  at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
  at java.lang.Thread.run(Thread.java:745)
*** Fallback to Prism SW pipeline
Prism pipeline name = com.sun.prism.sw.SWPipeline
GraphicsPipeline.createPipeline failed for com.sun.prism.sw.SWPipeline
java.lang.UnsatisfiedLinkError: Can't load library: /home/ludovic/amd64/libprism_sw.so
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
  at java.lang.Runtime.load0(Runtime.java:809)
  at java.lang.System.load(System.java:1086)
  at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:201)
  at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:94)
  at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:39)
  at com.sun.prism.sw.SWPipeline.lambda$static$468(SWPipeline.java:42)
  at java.security.AccessController.doPrivileged(Native Method)
  at com.sun.prism.sw.SWPipeline.<clinit>(SWPipeline.java:41)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:264)
  at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:187)
  at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91)
  at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
  at java.lang.Thread.run(Thread.java:745)
Graphics Device initialization failed for :  es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
  at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
  at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:227)
  at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:173)
  at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:209)
  at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675)
  at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337)
  at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
  at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
  at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
  at java.lang.Thread.run(Thread.java:745)
Exception in thread "main" java.lang.reflect.InvocationTargetException
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: No toolkit found
  at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:185)
  at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:209)
  at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675)
  at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337)
  at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
  ... 5 more

Ayant vu cette ligne Prism pipeline init order: es2 sw, j'ai tenter d'installer ce que pacman -Ss me donnait pour es2 et sw mais rien n'y change.

+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