Difficultés

Problème relatif au système d'exploitation

Au début du semestre, lorsque j'ai du choisir de quelle manière j'allais utiliser Unix chez moi, j'ai commencé par me tourner vers une solution qui me paraissait simple et peu risquée : j'ai créée une clé USB bootable (avec Linux Live) qui me permettait de démarrer mes machines sous Linux. Cela s'est révélé être une fausse bonne idée, car le fonctionnement était assez lent, avec une tendance au "freeze" assez prononcée. Je m'en accomodais jusqu'au freeze de trop où mon ordinateur n'a plus répondu du tout ! J'ai alors forcé l'extinction, et ce fut le drame. La clé a été endommagée et surtout, je ne sais comment, l'OS d'origine de ma machine (Windows Vista) était devenu introuvable au démarrage. Pour une solution que j'avais lue "sûre"...
Heureusement, l'ordinateur en question ne risquait pas grand chose, je l'avais préalablement vidé de son contenu. J'en ai alors pris mon parti et j'ai installé Linux pour de bon. Je n'ai plus rencontré aucun problème !
Moralité : ce vieil ordinateur qui trainait chez moi et que je n'utilisais plus depuis longtemps à cause de sa lenteur est maintenant mon outil de travail préféré.


Problème relatif à la commande curl

Concernant l'aspiration des pages, nous avions le choix entre deux commandes, wget et curl, avec d'emblée une mise en garde : curl fonctionnerait bien mieux que wget. Je n'ai pas tardé à le constater par moi même, et j'ai donc choisi d'intégrer curl à mon script. Les premiers tests ont été concluants, les pages s'aspiraient correctement. J'ai ensuite ajouté diverses options en plus de -o (permettant l'écriture du flux de sortie dans un fichier), pour suivre les liens de la page par exemple. Ce n'est que bien plus tard, vers la fin du semestre, que j'ai constaté un problème assez grave : en inversant l'ordre d'aspiration de mes fichiers d'URL, les langues se mélangeaient dans les tableaux. Pour un lien en anglais, la page aspirée correspondante était en français par exemple. J'ai eu du mal à comprendre le souci mais j'ai fini par mettre le doigt dessus : pour une raison que j'ignore, lorsque je mets plus d'une option à une commande, cela l'empêche de s'exécuter. J'ai essayé de les écrire séparément (-e -L -o) ou ensemble (-eLo), rien n'y a fait. C'est ainsi que depuis des semaines je travaillais sur les pages aspirées au tout début du projet... J'en ai retenu une bonne leçon : avant d'éxécuter le script, toujours vider les dossiers dans lesquels on s'apprête à créer des fichiers. On est ainsi certain que les fichiers présents après l'éxécution sont bien ceux qui viennent d'être créés.

De l'intérêt de la commande echo

Dans l'effervescence de ma découverte de la programmation, j'ai pris la mauvaise habitude d'exécuter le script d'une seule traite et de voir les erreurs dans les tableaux générés. C'est une très mauvaise idée. Voir le résultat en html permet certes de cerner les problèmes mais pas d'en identifier les causes. C'est ainsi qu'à la mi-semestre j'ai découvert que l'une de mes conditions était mal formulée, ce qui faisait que le traitement s'en échappait constamment alors qu'il aurait du y entrer. C'est grâce à l'ajout d'une commande echo, associée à un read que j'ai pu le constater. Dans ce cas précis, echo fait apparaître en sortie standard que iconv ne reconnait pas l'encodage, et read permet de demander au script d'attendre une réponse de l'utilisateur avant de poursuivre l'exécution.

Le cas Wikipedia

Dans ma recherche initiale d'URL, j'ai sélectionné à plusieurs reprises, dans les trois langues, des adresses d'articles issus de Wikipedia.

Ces articles se sont révélés poser des problèmes assez étranges
En effet, malgré le fait que les pages de Wikipédia soient, semble-t-il, encodées "correctement" (c'est à dire en UTF-8) et s'aspirent sans problème je n'ai pas réussi à obtenir de dump-texts exploitables. Ce problème s'est retrouvé dans les autres groupes qui utilisaient des URL issues de Wikipedia.
J'ai choisi d'illustrer ce problème à travers des captures d'écran des différents stades de traitement.

Captures des pages d'origines :

Example pic


Les pages aspirées ne posent pas de problèmes comme on peut le voir ici :


Et c'est au niveau des dumps que les ennuis commencent :


Capture des codes sources des pages Wikipedia (où l'on constate que la page est bien encodée en UTF-8) :


J'ai donc noté que contrairement au japonais et au français, les pages en anglais ne posaient pas de problème. Cela m'a intrigué, et dans la mesure du temps qu'il me restait pour achever le projet, j'ai décidé de réinvestir mon script de travail dans une "enquête complémentaire" portant sur Wikipédia. J'ai sélectionné un sujet (tout à fait au hasard, les Monty Python) à propos duquel je pourrais trouver des articles dans suffisamment de langues différentes.
J'ai modifié le script pour ne retenir que les étapes d'aspiration et de dump des pages, puis j'ai choisi une dizaine de langues utilisant des systèmes d'écritures différents. Parmi celles-ci, j'ai choisi le néerlandais : en effet, comme l'anglais, c'est une langue n'utilisant pas (ou peu) de signes diacritiques, elle s'écrit donc principalement grâce aux caractères ASCII.

Voici le résultat, un nouveau tableau :


Tableau de liens Wikipédia
URLPAGES ASPIREESRETOUR CURLDUMPCODAGEDUMP CONVERTI
ALLEMANDPAGE ASPIREE1 0 DUMP-TEXT utf-8-
ANGLAISPAGE ASPIREE2 0 DUMP-TEXT utf-8-
COREENPAGE ASPIREE3 0 DUMP-TEXT utf-8-
ESPAGNOLPAGE ASPIREE4 0 DUMP-TEXT utf-8-
FRANCAISPAGE ASPIREE5 0 DUMP-TEXT utf-8-
JAPONAISPAGE ASPIREE6 0 DUMP-TEXT utf-8-
NEERLANDAISPAGE ASPIREE7 0 DUMP-TEXT utf-8-
RUSSEPAGE ASPIREE8 0 DUMP-TEXT utf-8-
TCHEQUEPAGE ASPIREE9 0 DUMP-TEXT utf-8-


(j'avoue que, n'ayant pas réussi à les faire générer par le script, j'ai modifié à la main les langues dans la colonne URL)
Le résultat est donc celui auquel je m'attendais : toutes les langues nécessitant des caractères dits "spéciaux", c'est à dire non-ASCII, ne sont pas dumpées correctement, contrairement aux pages en anglais et en néerlandais. Comme mes camarades l'ont également rencontré, je soupçonne que ce problème vient d'une question de tables complémentaires de caractères. Malheureusement je n'ai pas pu prendre le temps d'approfondir la question. Il serait cependant très intéressant de savoir s'il s'agit d'une volonté ou d'une erreur de la part Wikipedia. Je penche plutôt pour l'erreur, car je ne vois pas pourquoi le dump pour les pages "en ASCII" serait possible et pas pour les autres.


Observations diverses

  • Concernant l'élaboration du script et du site, c'est la première fois que je "mets les mains dans le cambouis". Je suis contente de voir que contrairement à ce que je pensais au début du semestre, ce n'est pas insurmontable. Il suffit de rigueur et de travail, et je dois dire que malgré les difficultés rencontrées, c'est très gratifiant de voir le travail avancer (et aussi très démoralisant de le voir stagner, ou pire, reculer). Si je retiens un grand principe de cette expérience, c'est que les problèmes viennent presque toujours de devant l'écran et non pas de derrière.
  • Ce projet était supposé se faire dans le cadre d'un travail de groupe. Malheureusement, la coopération avec ma partenaire de travail n'a pas été fructueuse et c'est pourquoi j'ai préféré que nous présentions nos résultats chacune de notre côté.
  • Je regrette également de ne pas avoir bien su gérer mon temps. Cela m'aurait permis de développer un peu plus le script. Par exemple, j'ai cherché à mettre en place une condition qui aurait exclu les pages mal aspirées (400 bad request, Whoops !, etc) du traitement, sans succès, ou encore d'inclure une expression régulière aux commandes de recherche, et ainsi obtenir des résultats un peu plus précis. De la même manière, le blog a été assez peu mis à jour et je pense que c'est dommage.
  • Je souhaite remercier tous mes camarades de classe qui m'ont aidée à avancer dans le script. Vous noterez peut être la présence dans le script d'une commande echo un peu particulière : "Loïc a raison.". C'est un exemple de l'aide que j'ai pu recevoir ! Je remercie également les étudiants des promotions passées, qui, même s'ils ne nous aident pas activement, apportent souvent de précieuses informations par le biais de leurs blogs et sites.
  • Enfin je remercie nos professeurs pour leur patience et leurs conseils !