zestedesavoir / zds-site

Cœur du projet technique de Zeste de Savoir
https://zestedesavoir.com
Other
268 stars 162 forks source link

Implement a .tuto (xml) to markdown converter #13

Closed firm1 closed 10 years ago

firm1 commented 10 years ago

Implementer un convertisseur du formats .tuto vers markdown en langage python.

Il s' agit donc de corriger la fonction tuto_to_markdown presente dans la view.py des tutorial.

La principale difficulté reside en l'ecriture de la regxp associée.

La spécification du markdown utilisé sur ZdS est ici

Pour info, le texte qui sert d'exemple est celui-ci :

Coy0te commented 10 years ago

J'ai déjà récupéré les tutos de Ths depuis le serveur ZdS, pas de souci à ce niveau.

Pour le nombre de tutos "propres", difficile à estimer précisément. A la louche, doit y'en avoir entre 50 et 100 qui sont impactés par des trucs plus ou moins critiques (certains ont des tableaux pourris, d'autres un peu de zCode foireux, etc.).

Mais les seuls qui posent vraiment souci, c'est ceux pour lesquels il faut corriger le tuto dans sa version zCode puis le re-parser derrière. Pour ceux dans lesquels il reste une ou deux balises ou incohérences par ci par là (c'est la majorité des problèmes rencontrés), je corrigerai ce que je peux manuellement avant l'import. les quelques trucs qui passeront à travers les mailles du filet, on s'en rendra compte sur le tas, et on traitera ça directement à coup d'éditions mineures depuis l'interface de ZdS.

O_o mais ça veut dire que tu seras doublement productif :-P

Ou pas ! Nouvel an chinois, banquets, alcool, etc. :-°

cgabard commented 10 years ago

A defaut de pouvoir les corriger automatiquement, est ce que ton code peut au moins détecter les trucs louches ? Si il te sort un avertissement à chaque fois, idéalement en specifiant ou est le prob, on peut gagner du temps pour la correction manuel.

cgabard commented 10 years ago

Bon boulot sinon !

firm1 commented 10 years ago

A defaut de pouvoir les corriger automatiquement, est ce que ton code peut au moins détecter les trucs louches ?

Je ne me rappelle plus très bien, mais il me semble que THS avait un fichier DTD pour vérifier la structure des fichiers. Tu coup, en appliquant cette DTD sur tous les tutos, on peut savoir quelles sont ceux qui sont bien formés ou pas.

Coy0te commented 10 years ago

A defaut de pouvoir les corriger automatiquement, est ce que ton code peut au moins détecter les trucs louches ?

C'est le cas pour certains problèmes, mais pas tous.

il me semble que THS avait un fichier DTD pour vérifier la structure des fichiers.

Excellente nouvelle. =)

firm1 commented 10 years ago

Coucou,

Pour certains besoins, on va devoir gérer les images des tutos en mode relatifs. Donc, dans ton convertisseur, au lieu de prendre en compte le chemin absolu (url vers le sdz), tu devrais prendre en compte le chemin relatif (à l'intérieur des balises dans le .tuto).

De mon coté, je vais rajouter l'import des images en même temps que l'import du tuto.

Est-ce que tu peux gérer ça ?

Coy0te commented 10 years ago

En fait, Ths a déjà modifié les URL des images avec une URL relative dans les .tuto. Ils pointent tous vers le dossier ./images/<nom_image>.<ext> présent à côté de chaque fichier tuto. Je te laisse regarder un exemple dans l'arborescence complète qu'il a uploadée sur ZdS.

firm1 commented 10 years ago

Oui c'est pour celà que je voudrais que tu charges les balises ![]() avec les url relatives contenus dans les .tuto, et pas avec les urls absolus. De mon coté, il faudra que je prépare un champ pour uploader les images (du dossier image de THS) vers le serveur lors de l'import

Quand tu le fais, j'aimerais bien avoir le résultat du .tuto sur la 3D avec irrlicht converti pour faire mes tests d'import.

Coy0te commented 10 years ago

Ce que je veux dire c'est qu'à partir du moment où je parse un .tuto fourni par Ths, les URL y étant déjà relatives, y'a aucun souci les .tuto en sortie contiendront bien des ![]() avec URL relatives aussi. :)

Je n'ai pas les tutos de Ths avec moi maintenant, je te fais ça ce soir en rentrant.

firm1 commented 10 years ago

Dans ce cas, peux tu me reparser le .tuto sur la 3D irrlicht ?

Coy0te commented 10 years ago

Euh...

Je n'ai pas les tutos de Ths avec moi maintenant, je te fais ça ce soir en rentrant.

Si tu le veux ce matin, envoie-le moi par mail. ^^ Je ne peux pas faire de SSH depuis le boulot pour aller récupérer le tuto sur le serveur ZdS.

firm1 commented 10 years ago

J'avais oublié que ton parseur est en ligne. Je l'ai utilisé pour parser moi même.

Coy0te commented 10 years ago

Ok. Tu noteras que j'ai pas encore poussé sur GH les dernières modifs apportées à la syntaxe md (vidéos, légende et citations).

Coy0te commented 10 years ago

Finalement ma connexion en Chine n'est pas si pourrie, j'ai mis en ligne les dernières modifs faites sur la syntaxe des vidéos et des citations.

firm1 commented 10 years ago

Ah nice.

Par contre, j'aurais une doléance pour toi. Finalement, il nous faudrait dans le contenu en markdown, les images avec chemin absolu. pensens tu pouvoir mettre à jour ton parseur pour qu'il intègre des chemin absolu (à partir des fichiers de THS plus complet) ?

Coy0te commented 10 years ago

[...] les images avec chemin absolu

À partir des fichiers de Ths, qu'est-ce que tu appelles "chemin absolu" pour une image exactement ? Ths a déjà modifié toutes les URLs pour les transformer en relatives, tu veux que je les re-transforme en URL absolues pointant vers le SdZ, ou vers ZdS ?

firm1 commented 10 years ago

Oui exactement. Ou tu peux aussi voir si THS a encore ses .tuto d'origine (c'est a dire avant téléchargement des images).

Coy0te commented 10 years ago

Moi je veux bien, au niveau du parseur c'est pas grand chose à changer, mais je ne comprends pas trop la finalité du truc : on va importer les tutos, mais récupérer les images depuis le SdZ ? On avait, il me semble, statué sur le fait qu'il était obligatoire d'associer les images à chaque tuto en local, pas d'appels à des images distantes.

[Edit] par ailleurs, je croyais qu'on créait un repo Git contenant directement les images du tuto, du coup, c'est pas hyper simple de le faire à coup de mv depuis l'architecture déposée par Ths ?

Coy0te commented 10 years ago

Je viens de voir ça : https://github.com/Taluu/ZesteDeSavoir/pull/120

Du coup, ça implique quoi pour moi ? Je laisse les URL de Ths telles quelles ?

firm1 commented 10 years ago

ouaip.

firm1 commented 10 years ago

Est-ce que @Coy0te pourrait nous packager son convertisseur en un unique .jar de tel sorte qu'en lançant la commande : java -jar convert_tuto_to_markdown.jar /mon/repertoire/de/tuto/ , l'outil convertisse tous les fichiers .xml en prennant soin de les renommer en .tuto ?

Pour chaque problème de conversion sur un tuto, il faudra que ça rollback et donc, tout les fichiers .xml seront ceux qui ont échoués la conversion et les .tuto seront ceux qui ont réussis.

Je compte lancer cette commande directement sur le serveur ou sont stockés les tutos.

Coy0te commented 10 years ago

J'ai déjà récupéré tous les tutos en local.

Si on me confirme que la syntaxe markdown ne bougera plus, je lance la conversion en local chez moi, regarde ce qui a merdé (quelques tableaux malformés que j'ai identifiés notamment, mais pas seulement), et je corrige à la mano les quelques .tuto qui déconnent avant de tout réinjecter sur le serveur ZdS en version convertie en md.

C'est ce qui me paraît le plus simple et le plus judicieux (j'ai déjà répertorié les quelques tutos qui posent problème, je sais quoi y modifier pour que la conversion se passe bien).

Le 20 février 2014 16:00, firm1 notifications@github.com a écrit :

Est-ce que @Coy0te https://github.com/Coy0te pourrait nous packager son convertisseur en un unique .jar de tel sorte qu'en lançant la commande : java -jar convert_tuto_to_markdown /mon/repertoire/de/tuto/ , l'outil convertisse tous les fichiers .xml en prennant soin de les renommer en .tuto ?

Pour chaque problème de conversion sur un tuto, il faudra que ça rollback et donc, tout les fichiers .xml seront ceux qui ont échoués la conversion et les .tuto seront ceux qui ont réussis.

Je compte lancer cette commande directement sur le serveur ou sont stockés les tutos.

Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-35629462 .

firm1 commented 10 years ago

Je pense que notre syntaxe markdown est stable.

Tu peux lancer les conversions. On en aura besoin pour les tests.

Ceci dit, si tu peux, il faut que chaque tuto soit accompagné d'un fichier images.zip qui contient le dossier des images liés au tuto.

Coy0te commented 10 years ago

Il te faut les images directement placées à la racine du zip ? Genre : /dossier_tuto_1 -> tuto_1.tuto -> images.zip /dossier_tuto_2 -> tuto_2.tuto -> images.zip

etc.

?

Le 20 février 2014 16:52, firm1 notifications@github.com a écrit :

Je pense que notre syntaxe markdown est stable.

Tu peux lancer les conversions. On en aura besoin pour les tests.

Ceci dit, si tu peux, il faut que chaque tuto soit accompagné d'un fichier images.zip qui contient le dossier des images liés au tuto.

Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-35635609 .

firm1 commented 10 years ago

Oui

Coy0te commented 10 years ago

Ok. Je fais ça dès que possible, et le met en ligne sur le serveur dans la foulée (probablement d'ici dimanche, si ma freebox arrive d'ici là).

2014-02-20 17:04 GMT+01:00 firm1 notifications@github.com:

Oui

Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-35637006 .

firm1 commented 10 years ago

Je fais ça dès que possible, et le met en ligne sur le serveur dans la foulée

Petit coucou sur cette issue.

Alors tu as retrouvé free ? tu as tout compris ?

Coy0te commented 10 years ago

Haha, j'ai tout compris depuis quelques jours déjà, je vais pouvoir uploader tout ça. Avec un peu de chance, j'aurai le temps de m'en occuper ce soir !

Le 25 mars 2014 15:06, firm1 notifications@github.com a écrit :

Je fais ça dès que possible, et le met en ligne sur le serveur dans la foulée

Petit coucou sur cette issue.

Alors tu as retrouvé free ? tu as tout compris ?

Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-38567605 .

firm1 commented 10 years ago

Cookie....

Coy0te commented 10 years ago

C'est bon, j'ai enfin le temps de me repencher sur ZdS ! J'ai reparsé tous les cours et fait une liste des cours contenant des tableaux foireux (qu'il faudra éditer à la main).

J'ai aussi zippé tous les dossiers images.

J'envoie tout ça demain sur le serveur.

Coy0te commented 10 years ago

C'est fait, tout est dans le dossier ~/tutos_sdzv3/Sources_md/

firm1 commented 10 years ago

Bon bah, y'a encore un léger effort a faire sur la conversion des tutos. C'est un cas super spécifique sur lequel je suis tombé et qui peut se généraliser.

Je prend en exemple le tuto de mateo sur git. Quand on le télécharge en regardant le fichier .tuto on trouve des lignes de ce genre : ![Dossier de travail de Git](uploads/fr/files/236001_237000/236994.png) c'est à dire, qu'on doit avoir dans le dossier d'images ce fichier. Problème, le fichier n'existe pas dans le dossier images.

Le problème vient du fait que mateo a surement intégré à l'époque un chemin relatif que THS n'a pas téléchargé.

Pour résoudre ce problème, il faudrait que Coyote, dans le parseur, remplace systématiquement chaque chaine qui suit le modèle suivant : ![Dossier de travail de Git](uploads/fr/files/236001_237000/236994.png) par ![Dossier de travail de Git](http://uploads.siteduzero.com/files/236001_237000/236994.png)

en gros, ça revient à remplacer toutes les occurences de ](uploads/fr/files par ](http://uploads.siteduzero.com/files

Au pire on peut faire un script linux à passer directement sur le serveur pour faire le replace.

Coy0te commented 10 years ago

Ça arrive souvent, ou seulement dans quelques cours de Mateo ?

J'avoue que j'ai pas vérifié les URL des images dans les fichiers de Ths, j'ai assumé qu'il avait fait du bon boulot... :p

Le 10 avril 2014 18:04, firm1 notifications@github.com a écrit :

Bon bah, y'a encore un léger effort a faire sur la conversion des tutos. C'est un cas super spécifique sur lequel je suis tombé et qui peut se généraliser.

Je prend en exemple le tuto de mateo sur githttp://zestedesavoir.com/author-files/process.php?email=mateo21@siteduzero.com . Quand on le télécharge en regardant le fichier .tuto on trouve des lignes de ce genre : Dossier de travail de Gitc'est à dire, qu'on doit avoir dans le dossier d'images ce fichier. Problème, le fichier n'existe pas dans le dossier images.

Le problème vient du fait que mateo a surement intégré à l'époque un chemin relatif que THS n'a pas téléchargé.

Pour résoudre ce problème, il faudrait que Coyote, dans le parseur, remplace systématiquement chaque chaine qui suit le modèle suivant : Dossier
de travail de Git par Dossier
de travail de Git

en gros, ça revient à remplacer toutes les occurences de ](](uploads/fr/files par ](http://uploads.siteduzero.com/files

Au pire on peut faire un script linux à passer directement sur le serveur pour faire le replace.

Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-40104380 .

firm1 commented 10 years ago

Aucune idée sur la fréquence d'apparition. Premier testé premier planté

SpaceFox commented 10 years ago
$ grep -r --include "*.tuto" "](uploads/fr/files" . | wc -l
739

La liste complète ici : http://pastebin.com/JNSQPM3c

Coy0te commented 10 years ago

Est-ce que c'est des images qui sont bien présentes dans le dossier /images, mais dont les liens n'ont pas été "relativisés" ? Ou bien est-ce que c'est des images qui sont absentes localement ?

2014-04-10 21:04 GMT+02:00 SpaceFox notifications@github.com:

$ grep -r --include "*.tuto" "](uploads/fr/files" . | wc -l739

La liste complète ici : http://pastebin.com/JNSQPM3c

Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-40125235 .

SpaceFox commented 10 years ago

Il en manque au moins une partie. Par exemple le images.zip du tuto 263 fait 0 octets.

2014-04-10 22:54 GMT+02:00 Coyote notifications@github.com:

Est-ce que c'est des images qui sont bien présentes dans le dossier /images, mais dont les liens n'ont pas été "relativisés" ? Ou bien est-ce que c'est des images qui sont absentes localement ?

2014-04-10 21:04 GMT+02:00 SpaceFox notifications@github.com:

$ grep -r --include "*.tuto" "](uploads/fr/files" . | wc -l739

La liste complète ici : http://pastebin.com/JNSQPM3c

Reply to this email directly or view it on GitHub< https://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-40125235> .

Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-40141147 .

firm1 commented 10 years ago

Normalement en appliquant la règle de remplacement que j'ai donné les problèmes sont résolus car lors de l'import du .tuto la règle appliqué est : "si l'image est une url alors telecharge la toi même".

Donc si la super commande de Spacefox pzut etre mixée avec un replace ça serait parfait.

Coy0te commented 10 years ago

Je me suis pris une erreur Python en essayant de publier mon tuto en preprod. Ça parle a priori d'une URL en http://uploads.siteduzero... :

IOError at /tutoriels/validation/valid
[Errno 2] No such file or directory: u'/opt/zdsenv/ZesteDeSavoir/tutoriels-public/44_creez-votre-application-web-avec-java-ee/http://uploads.siteduzero.com/files/369001_370000/369034.png'
Request Method: POST
Request URL:    http://178.32.53.245:8001/tutoriels/validation/valid
Django Version: 1.6.2
Exception Type: IOError
Exception Value:    
[Errno 2] No such file or directory: u'/opt/zdsenv/ZesteDeSavoir/tutoriels-public/44_creez-votre-application-web-avec-java-ee/http://uploads.siteduzero.com/files/369001_370000/369034.png'
Exception Location: /usr/lib/python2.7/urllib.py in retrieve, line 243
Python Executable:  /opt/zdsenv/bin/python
Python Version: 2.7.3

Par ailleurs, je me prends aussi des erreurs 500 ou d'autres erreurs python (une histoire de character encoding), en me balladant en lecture offline dans les chapitres :

UnicodeEncodeError at /tutoriels/off/44/creez-votre-application-web-avec-java-ee/une-bonne-vue-grace-a-la-jstl/la-bibliotheque-core/
'ascii' codec can't encode character u'\xe0' in position 498: ordinal not in range(128)
Request Method: GET
Request URL:    http://178.32.53.245:8001/tutoriels/off/44/creez-votre-application-web-avec-java-ee/une-bonne-vue-grace-a-la-jstl/la-bibliotheque-core/?version=ae9448827ee398ed4fe2131c15d7238a902b0263
Django Version: 1.6.2
Exception Type: UnicodeEncodeError
Exception Value:    
'ascii' codec can't encode character u'\xe0' in position 498: ordinal not in range(128)
Exception Location: /usr/lib/python2.7/xml/etree/ElementTree.py in feed, line 1641
Python Executable:  /opt/zdsenv/bin/python
Python Version: 2.7.3

Enfin, les titres des parties sont bons, mais les titres des sous-parties sont mauvais (du genre "introduction-a-mysql-et-jdbc" au lieu de "Introduction à MySQL et JDBC").

firm1 commented 10 years ago

Je me suis pris une erreur Python en essayant de publier mon tuto en preprod. Ça parle a priori d'une URL en http://uploads.siteduzero...

A traiter

Par ailleurs, je me prends aussi des erreurs 500 ou d'autres erreurs python (une histoire de character encoding), en me balladant en lecture offline dans les chapitres :

Erreur due à l'intégration du nouveau design. Si t'en trouve encore, signale les avec plus de précision quand même :)

Enfin, les titres des parties sont bons, mais les titres des sous-parties sont mauvais (du genre "introduction-a-mysql-et-jdbc" au lieu de "Introduction à MySQL et JDBC").

Ah ouais, a corriger.

Mais globalement, vaut mieux créer des issues séparées pour ce type de bug, ça permet de mieux cibler leurs résolutions.

Du coup, tu as faire le remplacement des upload comme prévu sur le serveur ?

Coy0te commented 10 years ago

Du coup, tu as faire le remplacement des upload comme prévu sur le serveur ?

C'est pas SpaceFox qui s'en est chargé ? Un coup de sed ou replace ou je sais pas quoi sur la liste d'occurrences qu'il a pondue, ça devrait le faire non ? :-°

SpaceFox commented 10 years ago

C'est pas SpaceFox qui s'en est chargé ?

Ha non, pas du tout :D Mais je peux le faire, si nécessaire.

Le 14 avril 2014 17:00, Coyote notifications@github.com a écrit :

Du coup, tu as faire le remplacement des upload comme prévu sur le serveur ?

C'est pas SpaceFox qui s'en est chargé ? Un coup de sed ou replace ou je sais pas quoi sur la liste d'occurrences qu'il a pondue, ça devrait le faire non ? :-°

— Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-40375427 .

firm1 commented 10 years ago

Mais je peux le faire, si nécessaire.

Vendu et cool.

Coy0te commented 10 years ago

Vendu et cool.

+1 !

SpaceFox commented 10 years ago

Testé en local uniquement. Sauf erreur de ma part, la commande à lancer sur le serveur est :

find . -name *.tuto -type f -exec sed -i 's/](uploads\/fr\/files/](http:\/\/uploads.siteduzero.com\/files/g' {} \;

Ça prend 2-3 minutes et tous les .tuto sont convertis. Vérification avec :

spacefox@cthulhu:/data/zds/tutos_sdzv3/Sources_md$ grep -r --include "*.tuto" "](uploads/fr/files" . | wc -l
0

Si personne n'y voit d'erreur flagrante je fais une sauvegarde et la lance sur le serveur.

Coy0te commented 10 years ago

Si t'as pas le temps (y'a une chiée de fichiers), t'emmerdes pas à faire une sauvegarde des tutos, j'ai tout le contenu uploadé sur le serveur ici en local.

SpaceFox commented 10 years ago

Ouais mais ça prends 10 plombes à réuploader, alors qu'une sauvegarde c'est juste un tar à créer :)

Le 14 avril 2014 23:01, Coyote notifications@github.com a écrit :

Si t'as pas le temps (y'a une chiée de fichiers), t'emmerdes pas à faire une sauvegarde des tutos, j'ai tout le contenu uploadé sur le serveur ici en local.

— Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-40417583 .

SpaceFox commented 10 years ago

(J'ai parlé de sauvegarde, pas de faire dans le détail !)

Le 14 avril 2014 23:10, SpaceFox ujueseo.yeou@gmail.com a écrit :

Ouais mais ça prends 10 plombes à réuploader, alors qu'une sauvegarde c'est juste un tar à créer :)

Le 14 avril 2014 23:01, Coyote notifications@github.com a écrit :

Si t'as pas le temps (y'a une chiée de fichiers), t'emmerdes pas à faire

une sauvegarde des tutos, j'ai tout le contenu uploadé sur le serveur ici en local.

— Reply to this email directly or view it on GitHubhttps://github.com/Taluu/ZesteDeSavoir/issues/13#issuecomment-40417583 .

SpaceFox commented 10 years ago

Quelqu'un a passé le script sur la prod (dossier /home/zds/tutos_sdzv3/Sources_md) ?

Si oui, c'eut été cool de prévenir ici, que je ne refasse pas une sauvegarde pour rien :(

Sinon, y'a un truc que je ne comprends pas.

firm1 commented 10 years ago

C'est pas moi mon commandant :-)

Et que ne comprends tu pas ?