Demenagement en Caroline du Nord

Written by erik - 12 april 2013

Bonjour a vous,

J'ai ete bien occupe ces derniers mois par mon travail et mes candidatures. Apres avoir envoye des dossiers a plus de 40 universites americaines et passe de nombreux entretiens, je suis arrive a un arrangement final. Je rejoindrai University of North Carolina at Charlotte dans le departement de Computer Science en tant qu'Assistant Professor. Je prendrais mon poste autour du 15 Aout et demenagerai de Columbus un peu avant.

Si vous passez dans le coin, faites moi signe!

PS: peut etre que je devrais renommer ce blog "Prof Saule in the US" :)

Classified in : Homepage, 3617mylife, fr - Tags : none - 2 comments

[C] Que faire en cas de "segmentation fault"?

Written by erik - 22 november 2012

Bonjour a vous,

Je recontre souvent des etudiants (locaux ou a travers internet) ou des debutants en programmation C. Ils posent souvent la question "J'obtiens segmentation fault. Qu'est ce que c'est? Que faire?".

Qu'est ce que "Segmentation fault"?

Il s'agit de l'erreur de l'on obtient en C lorsque le programme lis ou ecrit sur une partie de la memoire qui est protege en lecture ou en ecriture. Par protege, je veux dire que le systeme d'exploitation conserve une liste des adresses memoire sur lesquelles ont peut lire et sur lesquelles on peut ecrire. Ces zones sont appellees des segments. Il y a plusieurs raison pour laquelle un segment peut etre protege; le plus courant est que la zone memoire n'est pas allouee.

Par exemple, les deux codes suivants atteignent certainement segmentation fault:

int * p = NULL;
*p = 12;

ou encore

int* p = (int*) malloc (10*sizeof(int));
for (int i=0; i<1000; ++i)
  p[i] = 42;

Le premier code atteint segmentation fault parce que l'adresse 0 est toujours protege contre la lecture et l'ecriture. C'est une adresse qui est utilise par convention par les programmeurs pour signifier "nulle part, ca n'existe pas." Le second code atteint segmentation fault parcequ'il y a des ecriture bien apres la fin de l'espace memoire alloue: seulement 10 entiers ont ete alloues, mais 1000 sont ecrit. Certaiement bien apres la fin du tableau, on fini par rencontrer une adresse qui n'est pas allouee. C'est un depassement de tableau (en anglais, buffer overflow)

"segmentation fault" est utilise par Linux. D'autre systeme d'exploitation ont d'autre message d'erreur. Certain BSD rapportent aussi des "bus error". Windows typiquement rapporte une erreur du type "le programme a ete arrete a cause d'un access illegal en memoire" ou un truc du genre (ca fait trop longtemps que je n'ai pas utilise windows pour me rappeller du message exacte.)

Que faire contre une "segmentation fault"?

La plupart des cours en ligne ou des programmeurs disent quelquechose du genre "Utilise un debugger!" Un debugger est un outils comme gdb qui sert a suivre l'execution d'un programme et a afficher les valeurs des variables d'un programme pendant que le programme fonctionne ou a posteriori. L'utilisation classique des debugger est de laisser le programmer planter et de regarder l'etat de la memoire apres l'erreur. Je ne conseille gdb qu'en dernier recours. Parcequ'un debugger va vous avertir d'une "segmentation fault" apres que l'erreur soit survenu. Mais souvent l'erreur est une consequence d'un probleme moins important qui est survenu plus tot dans l'execution du programme. C'est ce probleme la qu'il est important d'attrapper.

Il y a quatre outils qui sont magique en C pour detecter les problemes tot.

Le compilateur

Les compilateurs sont votre premiere ligne de defense contre les erreurs. Le C est un langage assez permissif. Beaucoup de comportement incorrecte d'un programme peuvent etre detecter facilmenet pendant la compilation. Cependant comme le C est permissif beaucoup de ces comportement ne sont pas juger critique par votre compilateur et il en fait des warning, ou les passe sous silence. Dans mon experience, tous les warning d'un compilateur sont important. Activer tous les warning possible et imaginable et forcer le compilateur a les considerer comme des erreurs. Avec GCC, compilez votre code avec "-Wall -Wextra -Werror --std=c99". Et corrigez tous les problemes. Ne les passez pas sous silence. Ne retirez pas ce -Werror pour faire taire le compilateur. Il est la pour vous aider.

Quel type d'erreur le compilateur va relever qu'il ne n'indiquait pas avant:

  • Une variable est declare mais pas utilise, en particulier dans les parametres de fonctions. Si une variable n'est pas utilisee, retirer la. Cela augmentera la lisibilite de votre programme. Si un parametre n'est pas utilise, probablement la fonctin ne fait pas ce qu'elle devrait faire. (Si c'est un des cas ou un parametre est ignore, il n'est pas obligatoire en C de nommer un parametre de fonction.)
  • Une fonction n'est pas declare mais est utiliser. En C, il n'est pas obligatoire de declarer une fonction avant de l'utiliser. Si une fonction n'est pas declare, le C lui donne automatiquement la signature "int f (int)". Si vous passez autre chose qu'un int en parametre, le compilateur va convertir et certainement, vous obtiendrez un comportement non desire. Si la fonction ne retourne pas int, le probleme est encore pire, parcequ'il decale la pile d'appel.
  • Une fonction qui retourne un parametre n'a pas de "return". En C, ce n'est pas une erreur. Mais certainement si la signature indique que quelquechose est retourne, il y a une raison. La fonction ne fait pas ce qu'elle doit faire.
  • Une variable est utilisee sans etre initialisee. Le C ne donne pas de valeur par defaut au variable, une variable non initialise peut contenir n'importe quelle valeur. Certainement il s'agit d'une erreur qui n'apparaitera pas tout le temps.

Il y a plein d'autre comportement dans le code qui ne sont pas rapporte par gcc comme une erreur, mais qui dans 99% des cas va generer une erreur a un moment ou un autre.

L'analyseur statique splint

splint est un programme d'analyse de code statique. Vous pouvez le trouver ici ou dans le gestionnaire de paquet de votre distribution. splint analyse les fonction de votre code pour trouver des comportement problematique. Il peut detecter certaine fuite de memoire, des buffer overflows, ...

Certaines annotations peuvent etre donne au code pour exprimer le sens des operations et permettre a splint de faire la difference entre un probleme potentiel et un comportement voulu. Utiliser splint demande d'ajouter pas mal de chose dans le code comme commentaire ou type cast. Mais le jeu en vaut la chandelle, cela force a ecrire du code plus propre, plus robuste et mieux documente.

Un verificateur de memoire a l'execution: valgrind

valgrind est un outil d'analyse dynamique de programme (certainement disponible dans le gestionnaire de paquet de votre distribution). Basiquement c'est un emulateur x86 et x86-64 qui traque l'etat de la memoire. Il permet de detecter de nombreuse erreur a l'execution qui ne sont pas detectable statiquement. Par exemple, un tableau peut etre partiellement initialise: les indices pairs sont initialise, mais pas les indices impair. Un analyseur statique ne pourra pas faire la difference dnas la majorite des cas. valgrind conserver l'information pour chaque octet de la memoire: est ce que cette zone memoire est initialise ou non?. Ainsi, valrind permet de detecter des erreurs qui viennent de l'utilisation de memoire non initialise.

valgrind conserve egalement l'information "quelles sont les zones de memoire alloues?". Cela permet de detecter les fuites de memoires. A la fin de l'execution du programme valgrind rapporte combien de memoire est toujours alloue. Il rapporte egalement si certaineszone de memoire ne sont plus accessible: c'est a dire des zones de memoire vers lesquels le programme n'a plus de pointeur. De facon generale, une fuite de memoire doit etre considerer comme une erreur. Meme si le systeme va recuperer la memoire allouee a la fin de son execution, la presence de fuite de memoire denote un probleme de conception dans le logiciel.

Parcequ'il conserve toutes les zones de memoire alloue, valgrind peut pour chaque acces a la memoire verifier si cette acces est dans une zone alloue ou non. Il reportera tous les acces memoire qui ne sont pas normaux. Ces access sont souvent effectue avant une segfault. Dans certains cas, bien avant et ils sont le probleme qui cause une segfault incomprehensible. En effet, cela vient principalement du fonctionnement de malloc. Deux appels consecutifs a malloc retournent souvent des zone memoire proche. Donc si il y a un depassement de tableau, le programme va ecrire sur la prochaine zone memoire alloue. Si la zone memoire ecrite contient un pointeur, lorsque ce pointeur sera dereference plus tard, une segfault apparaitra. Un debugger ne vera pas le depassement de buffer, il ne vera que le dereferencement de pointeur. Et l'erreur paraitra incomprehensible. valgrind typiquement detecte ce genre d'erreur. En effet, malloc typiquement utilise de la memoire entre deux zones allouees pour sa gestion interne. Cet espace memoire est considere par valgrind comme etant innaccessible et il previendra si cette espace est utilise.

Compilez le code avec -g. Executez "valgrind ./programme parametre1 parametre2".

Une barriere electrique: Electric Fence

efence est une bibliotheque ecrit par Bruce Perens pour debugger du code C. Basiquement, efence utilise des fonctions systemes pour entourer les allocations de memoire d'un large segment de memoire protege en lecture et ecriture. Ainsi tous les acces memoire qui depasse une zone alloue (d'un cote ou de l'autre) va entrainer une segmentation fault. Ici le but est d'obtenir une erreur des le premier access "douteux" a la memoire.

efence fourni des protection similaire a valgrind. Cependant il se complete bien. valgrind est un logiciel qui est lent par nature, efence fonctionne a vitesse reel. valgrind detecte plus d'erreur (fuite memoire et memoire non initialise.). Bref, les deux se completent.

En resume

Lorsque vous avez une segmentation fault, assurez vous toujours d'avoir au moins verifier ces choses la:

  • Est ce que le code est compile avec avec toutes les verifications possibles? Le compilateur previent il de quoi que ce soit? Si oui, corrigez ceci d'abords.
  • Est ce que je peux utiliser un analyseur de code statique, comme splint, pour assurer la qualite de mon programme?
  • Quel est la premiere erreur reporte par valgrind?
  • Y a t'il une fuite de memoire?
  • Quel est le premier acces memoire invalide reporte par efence?

Ces choses sont faciles a verifier et la vraie source d'erreur dans la majorite des cas. Utilisez les!

Classified in : Homepage, fr, geek, programming - Tags : none - 4 comments

Reouverture et migration chez deblan

Written by erik - 14 july 2012

Bonjour a vous tous,

Cela fait bien longtemps que je n'ai rien ecrit sur mon blog. En fait, on a arrete notre souscription a l'apinc qui gerait les DNS. Du coup, l'addresse godrik.mandragor.org ne pointait plus vers rien. J'ai redemare le blog sur deblan aujourd'hui (Merci Simon!). J'ai profite pour migrer le blog de mon CMS custom fait a la main pour Pluxml. Il suit les memes principes que mon CMS custom suivait (gestion par fichier, pas de base de donne, style et listing simple), mais il supporte plus de fonctionnalites et est plus joli et comme ca je n'ai pas a l'ecrire moi meme. (Mais il reste suffisament simple pour que je puisse changer ce que je veux). Dites moi si vous voyez des liens casse. Il y en a certainement qui traine.

J'ai plein de truc a vous raconter, mais pas dans ce post.

Stay tuned!

Classified in : Homepage, 3617mylife, fr, geek - Tags : none - no comments

Toujours en vie apres IPDPS

Written by erik - 02 october 2010

Vendredi 1er Octobre, 23h42. J'ai soumis un papier a IPDPS il y a 30 minutes. La deadline est a 23h59. Je viens tout juste de rentrer chez moi. Je n'ai pas arrete de bosser la dessus depuis que je suis revenu de Frejus. C'est pour ca que vous n'avez pas eu de nouvelles. Depuis que je suis rentre, j'ai passe tous mes jours de la semaine a bosser au moins 9 heures et les week end a dormir pour me retapper. Aujourd'hui, c'est le pic a 14 heures de boulot, mais j'ai bien du faire 10 heures par jour en moyenne. Autant dire que je suis bien creve.

Mon passage en France etait super. Ca m'a fait plaisir de vous voir (je pense que j'ai vu tous les gens qui doivent lire ce blog). J'ai fait le plein de pote, d'ami et de culture. Je serais a sec bien avant de repasser. Mais bon. C'est la vie! Ca me donnera le temps d'avoir envie de repasser vous voir !

Dans les pages annexes. J'ai passe une bonne partie de mon temps de eveiller-et-pas-au-travail soit avec Joori soit a geeker. Comme les petits oiseaux cuicui, vous devez vous en foutre completement, je vais passer a la section geek.

BD. J'ai fini "Fragment d'Amour" de Kiriko Nananan. Un manga qui presente des sequences d'histoire d'amour (le debut ou la fin) de plusieurs filles. C'est interessant de voir que plus on va loin plus c'est pareil. (Julien, tu avais dit que ca s'appellait comment ce type de manga ?) J'ai aussi lu "Un Ciel Radieux" de Jiro Taniguchi. L'histoire d'un lyceen qui a un accident de voiture et se retrouve a partager son corps avec le conducteur du van avec qui il a eu son accident. Le corps du conducteur du van est mort et le temps qu'ils vont passer ensemble va lui donner derniere occasion de revoir sa femme et sa fille. Du Taniguchi, comme d'habitude c'est tres bien. Et ca m'a fait penser a Jungdok, un film Coreen (mais pourquoi je regarde des trucs comme ca ?) que j'ai vu sur un theme similaire.

SF. En cherchant le dernier Harlan Coben en paperback chez Barnes and Nobles, je suis tombe sur le dernier Peter Hamilton. Damned, un an que je l'attends et je loupe sa sortie ! The Evolutionnary Void conclu "The Void Trilogy". Ce n'est pas si bien que la saga du Commonwealth (qui a lieu quelques centaines d'annee plus tot), mais si vous avez aimez du Hamilton, vous aimerez celui-la aussi.

(Dans le temps de rediger ce message il est minuit. Je ne resiste pas a l'envie de vous raconter l'echange de SMS avec Joori. Elle: "If I come, will we eat?". Moi: "Sure." Elle: "What do we have?". Moi: "Ramen always work. There is also a spicy chicken leg I could put in the oven. And some salad too.". Elle: "All three then!". Quand je vous dit qu'elle est faite pour moi!)

JV. J'ai eu un peu de temps pour jouer a Okami (version Wii) aussi. Je viens de finir le premier chapitre. (Jusqu'a tuer orochi en le bourant a coup de sake dnas la "moon cave".) Ce jeu c'est de la balle. Je suis passe dnas un magasin de jeu video et j'ai ete etonne du nombre de jeu qui ont l'air super qu'il faut que j'essaye. Et j'ai pas le temps naturellement...

PS: Bon visiblement, j'ai eu le temps d'en faire des trucs malgre mon boulot.

Et je previens personne comme ca on vera qui suis le RSS.

Classified in : Homepage, 3617mylife, fr - Tags : none - 4 comments

Little Brother et For The Win

Written by erik - 08 august 2010

Bonjour a vous. Je vous ai deja dit tout le bien que je pense de Cory Doctorow. J'ai fini de lire hier For The Win et il y a quelques mois, j'ai lu Little Brother. Ce sont deux livres de genie que l'on trouve au rayon jeunes adultes.

Little Brother met en scene w1n5t0n, aka Marcus, un jeune lyceen de 17 ans vivant a San Francisco. Il n'appreccie pas les mesures securitaires mises en place dans son lycee et a appris a les contourner, par exemple en mettant des cailloux dans ses chaussures pour changer sa demarche et tromper les capteurs de demarche.

Alors qu'il sechait le lycee avec des amis, un evenement imprevisible arriva. Des terroristes font sauter Bay Bridge et les lyceens se font arreter pour interrogations. Transporter dans une prison off-shore, les interrogations (guatanamo bay style) durent des jours et des jours avant qu'ils soient relaches. Quand ils retournent a la realite, la ville a changee. Department of Homeland Security (DHS) a quasiment pris la ville en otage en monitorant toutes les communications, en arretant les voitures qui ne sont pas sur leur trajet habituel. W1n5t0n va prendre sur lui de combattre le DHS a l'aide des techniques qu'il connait deja et a l'aide d'information qu'il trouvera sur internet.

Ce livre est a la fois une excellante fiction, mais c'est aussi un livre qui presente assez clairement les fondations de la cryptographie, de la securite sur internet. Mais aussi plus generalement de la securite et de l'impression de seecurite. W1n5t0n mettra clairement en evidence que malgre toutes les mesures prises par le DHS, les rues ne sont pas plus sures qu'avant et que si un lyceen arrive a contourner les mesures de securite alors il est certain qu'un terroriste y arrivera egalement.

For The Win est un autre livre qui est a la fois une bonne fiction et un livre pedagogique. Il racconte l'histoire de plusieurs groupes de gold farmer (des gens qui colleccte de l'or et des objets dans les mmorpgs afin de les revendre a des joueurs) dans les pays pauvres d'Asie : Indes, Chine, Malesie... Ces groupes de travailleurs vont s'organiser dans les mondes virtuels ou ils travaillent pour monter un syndicat international des gold farmer et tenter d'ameliorer leurs conditions de vie. Cory explique clairement en des termes simples les principes economiques sur lesquels sont bases les principes de monnaies, d'inflation, de speculation boursiere. Il met en evidence que les nouveaux moyens de communication changent l'equilibre entre les proucteurs et les dirigeant.

Ces deux livres sont a mon avis des must read. Je ne pense pas qu'ils aient ete traduit en francais, mais ils peuvent etre achetes en anglais sur Internet. De plus, Cory est un auteur moderne. Tous ces textes sont disponibles sous licence Creative Commons with Non-Profit Derivative Right. Vous pouvez donc les telecharger gratuitement et legalement sur craphound.com. For The Win. Little Brother.

Classified in : Homepage, 3617mylife, fr, books - Tags : none - 2 comments

Rss feed of the category

page 1 of 2 next

Categories

Archives

Tags

Last articles

Last comments