Q/R Tutorat PA 2012 - Deadline de rendu repoussée au 11 juin MIDI PILE
SVN/connection
Q:Je n'arrive pas à faire fonctionner le svn de l'extérieur
Réponse : essayer de faire un diagnostic précis (et installer subversion sur votre machine !)
- Test de votre réseau : ping google.fr Vous devez voir des lignes de la
forme 64 bytes from wg-in-f94.1e100.net (173.194.78.94):
icmp_req=8 ttl=46 time=20.1 m(à arrêter avec Control-C). Si ce
n'est pas le cas, vous avez un problème réseau, que vous devez
régler. Essayez tout d'abord de vous connecter sur votre box
directement à l'aide d'un cable éthernet. Si ça ne fonctionne pas, il
vous faudra aller voir dans la configuration de votre box.
- Voir si la machine portier répond au ping (test réseau) :
ping portier.polytech-lille.fr Si le test précédent fonctionne et pas celui là, c'est que la machine portier est dans les choux, et donc vous n'y pouvez rien ...
- Si le test précédent est OK, essayer de se connecter à portier en utilisant le port 2222 : ssh monlogin@portier.polytech-lille.fr -p 2222. Vous devez vous retrouver sur portier. Tester que vous voyez bien vos fichiers de votre compte polytech (ls) puis fermer le terminal.
- Si le test précédent est OK, essayer le tunnel pour le SVN à partir d'un terminal de votre machine locale: ssh -L 2200:synthe.studserv.deule.net:22 -p2222 monlogin@portier.polytech-lille.fr Faites attention à bien coller les deux-points aux nombres 2200 et 22. Une fois le tunnel mis en place, dans le terminal vous devez être sur weppes, faire ls pour voir que vous y êtes bien et que votre compte est bien "monté". Laisser ce terminal OUVERT.
- Se rapporter à la feuille de tp SVN pour la suite (en particulier, un éventuel checkout se fait à partir d'un autre terminal !).
Q : Je ne comprends pas la première étape de l'annexe 2 du TP.
Réponse: on vous demande de créer ou d'ouvrir un certain fichier à un certain endroit puis d'y ajouter du texte.
- Est-ce que le répertoire .ssh existe sur mon home ( à la racine ?) La commande ls -lai exécutée à partir de la racine de votre répertoire perso (~login) (ou alors, ls -lai ~/) vous donne la liste de tous les fichers et répertoires présents sur cette racine (même ceux commençant par "point". Il suffit de regarder ensuite si le répertoire .ssh (point-s-s-h) existe. Dans le cas contraire mkdir .ssh
- Aller dans le répertoire .ssh et lancer emacs config &. Le fichier config (oui, dans extension) est alors créé ou ouvert. Vous pouvez ensuite copier les lignes de configuration dedans puis sauver et quitter
- Vérifier (ls -ail) que le fichier config a bien les droits -rw-r--r--. Dans le cas contraire faire chmod 644 config pour les mettre.
Q : Mon SVN est tout cassé !
réponse : pas de panique, au
pire vous n'avez cassé que votre copie locale. Par contre, il
faut absolument faire attention à la chose suivante : les copies
locales contiennent des répertoires .svn (dans chaque
sous répertoire). Si vous copiez des sous répertoires (avec cp ou
à la souris), les sous répertoires .svn sont aussi
copiés. Ensuite, vous modifiez les fichiers de cette copie, et
vous voulez remettre le répertoire dans votre copie locale, et là
cela se passe mal car vous pouvez potentiellement écraser des
répertoires .svn, dont svn a besoin pour vivre. La façon de faire
est que lorsque vous voulez modifier votre copie locale, vous ne
copiez que des fichiers un par un. Si votre copie locale est
cassée, vous pouvez toujours faire un checkout dans un autre
endroit de votre compte pour réparer (le checkout vous donne la
dernière version commitée).
en bref, On ne modifie pas une copie locale à l'aide du gestionnaire de fichier et de la souris. La ligne de commande est plus sûre
Sujet
Q : faut-il traiter les poèmes ? Faut-il traiter les noms des personnages ? les titres ?
Réponse : non pour les poèmes. Dans le sujet il est écrit de ne traiter que les tirades. On pourra par exemple mettre dans un répertoire tous les html correspondant aux "entire play".
Q : quelles sont les fonctionnalités prioritaires ?
Réponse : prendre un fichier html en paramètre, stocker les mots dans une hashtable avec leur nombre d'occurences mis à jour à chaque nouvel ajout , et imprimer sur la sortie standard le contenu de la hashtable avec les occurrences.
Q : On nous demande de passer un répertoire en paramètre mais pour l'instant on n'a du code que pour traiter une liste de fichiers
Réponse : oui, c'est vrai. Vous pouvez au choix:
- traiter une liste de fichiers (comme dans le tp11), en utilisant *.html
- Trouver une solution par exemple avec dirent.h (opendir et readdir, voir le man) et les libs systèmes.
La deuxième solution n'est évidemment pas prioritaire, les fonctionnalités du programme sont plus importantes que l'interface utilisateur. D'ailleurs, comme première étape, il semble judicieux de traiter un seul fichier html ...
Q : La page wikipedia de Bernstein ne comporte pas de fonction de hachage, où aller chercher l'information ?
Réponse : ici par exemple
Q : Dans le sujet on parle de void*, qu'est-ce que c'est ?
Réponse : cette fonctionnalité permet de passer des fonctions en
paramètre dans des fonctions C. C'est un concept compliqué, à utiliser
uniquement si le reste de sujet est bien avancé, voire fini. Je fournis des
explications sur demande par mail aux personnes intéressées.
Réponse : le vrai numéro de ligne du fichier. Exemple, dans le fichier de hamlet suivant : là, le mot "king" apparait pour la première fois à la ligne 39 (faire clic droit/view source dans votre navigateur) .
Q : Comment on fait pour mettre les mots au singulier ? pour traiter la conjugaison
Réponse : On oublie !!! L'énoncé a été un peu ambitieux ..
Q : on fait quoi des tirets ? des apostrophes ? (exemple : john's bed)
Réponse : on fignole en dernier si tout le reste est fait. Si on se retrouve dans le dico avec s, re, etc, ce n'est pas très grave.
Q : comment découper une ligne de texte en petits bouts ?
Réponse : une fois qu'on a récupéré une ligne de texte, par exemple avec fgets (attention, elle contient encore le caractère de fin de ligne), on peut décider de traiter la chaîne obtenue à la main (ie caractère par caractère), ou alors d'utiliser les fonctions de la librairie string, par exemple strstr pour savoir si une certaine sous chaîne existe dans ce mot, et strtok. Un exemple d'utilisation de cette dernière fonction est ici (à n'utiliser que si vos fonctions perso ne fonctionnent pas ...).
Rendu
Q : Je n'arrive pas à rendre le projet par svn (vous comprenez je suis sous windows, ma machine est morte, etc etc) voici une archive par mail
Réponse : Aucun rendu ne sera accepté de cette façon. À vous de faire en sorte de prévoir ce rendu en temps et en heure.
Q : Qu'appelez vous binaire (à nommer shakespeare) , est-ce bien
le fichier compilé exécutable du programme?
Réponse :
OUI. Attention ce binaire ne devra pas être dans le SVN
Q : Pour le rendu, le répertoire Code peut-il contenir des
sous-répertoires de librairies?
Réponse : OUI.
Q : Le répertoire Code peut-il contenir le fichier texte du dico anglais?
Réponse : OUI. Idéalement néanmoins il serait dans un répertoire à part
Q : Faut-il commenter le code en Anglais ?
Réponse : oui, veillez à ne pas trop surcharger le code non plus.
Q : Comment utiliser le script pour vérifier mon répertoire ?
Réponse :
- faites d'abord une copie locale de votre
projet à un endroit différent de votre répertoire de travail
habituel (svn checkout ...), disons dans ~/toto/
- mettre le .py dans le répertoire toto.
à ce stade toto contient le .py et une copie locale de votre svn,
exemple AlexandreLeuliet
- mettez les droits en exécution au script
chmod 755 nomduscript.py
- lancer le script : ./nomduscript.py nomdubinome.
le script doit arriver à "Good job !"
Q : J'ai des problèmes avec le script au niveau des Makefile
Réponse : cela peut venir de plusieurs choses:
- vos règles clean qui font une erreur si le fichier que vous
voulez supprimer n'existe pas. Remplacer rm par rm
-f
- Il y a des erreurs dans la phase de link :
/usr/bin/ld: cannot find -lhash1
Cela signifie que libhash.a n'existe pas au moment où vous essayez de
linker. Il faut donc ajouter une règle dans le makefile pour compiler
la librairie hash AVANT le programme principal. Ce Makefile de secours peut vous aider.