mercredi 5 février 2014

Quand on corrige du code, les poils se dressent...

Comme notre confrère et néanmoins ami LeFa, il nous arrive de mettre le nez dans le cambouis. En effet, en tant qu'enseignant d'informatique il m'arrive d'avoir à corriger du code; mais pour mon malheur je sais lire et je découvre parfois des trucs bizarres. Allez on rigole un bon coup...

Premier exemple

if (i==0) {
    blabla = toto;
}
if (i==1) {
    blabla = titi;
}

Le codeur : J'imagine que dans le cas où le nombre de tests serait plus grand que 100 (le prof il a le droit de demander ça au fait ? C'est dans les conventions de Genève ?), l'écriture d'une bonne macro ©Word résoudrait le problème de l'écriture du code (ça fera geek comme réponse, il va être impressionné, héhé) ? Ou alors une bonne règuexpe ? Faut que je regarde ce que ça veut dire ce truc, ça m'a l'air trop puissant, il a le droit de demander des trucs puissant le prof ? Faut vraiment que je lise ces foutues règlements intérieurs moi... Je commence à avoir faim, je finirais mon projet tout à l'heure.

Deuxième exemple

Object *o = new Object();
o = tartempion.getSomeObject();
// delete o;

Le codeur : Argh! C'est chiant ces pointeurs, je sais jamais quoi en faire. Bon on m'a dit qu'il valait mieux les initialiser pour éviter les problèmes alors... allons-y! Bon en ligne 3, je suis bien embêté, j'ai essayé de libérer la mémoire de la ligne 1 mais ça marche pas bien, ma foutue machine empêche mon super programme de bien fonctionner, c'est chiant (je crois que je vais passer à ©Windows, Linux c'est trop hi-tech)! Bon je commente le truc; au moins ça ne déconne plus; je règlerais ces menus détails plus tard. Mon pote me dit « peut-être y'a une fuite mémoire mais c'est pas sûr », j'ai regardé sous la table mais j'ai rien vu couler alors je pense qu'il a dit ça pour déconner (il est rigolo mon pote, toujours à déconner). Bon, allez, je vais me chercher un sandwich à la cafét'.

Troisième exemple


Le correcteur : Là, j'ai cherché s'il n'y avait pas une corde dans mon bureau, et puis je me suis souvenu que j'avais du coaxial 10Base2 avec connecteurs BNC, c'est solide ce truc, non ? Je devrais y passer assez vite... Faut que je prenne quoi comme longueur pour me casser les vertèbres à coup sûr et bien net ? 2m ? Et puis, paf! V'là t'y pas, debout sur le tabouret face à la fenêtre ouverte, que j'me dis que finalement, y'a bien des gugusses qui développent des DAB avec du Windows 3.2 dedans alors...
Subtile transition dans la tête du codeur : Du coup cette interface me paraît moderne, pas vous ? En tous cas c'est digne d'un futur ingénieur. Moi je serais fier de pouvoir montrer que je sais développer sur iOS. Le vert, il est pas un peut trop vert ? #00ee00 ? #00dd00 ? Faut que je commit mes tests au fait (tiptiptip, cp source_23.m source_24.m)... Au fait, faudrait aussi que je pense à attacher une petite fonctionnalité sympa sur le bouton gotoscreen2 (peut-être aller sur un autre écran ? vert ?); bon on verra ça plus tard pour l'instant faut que je potasse mes exams; Wah! J'ai faim, je vais aller à la cafét'.

Quatrième exemple

// c'est bon
for (int i=0; i<[[o list] count]; i++) {
    NSLog(@"%@",[(MyClass *)[[o list] objectAtIndex:i] name]);
    NSLog(@"%@",[(MyClass *)[[o list] objectAtIndex:i] age]);
    NSLog(@"%@",[(MyClass *)[[o list] objectAtIndex:i] mail]);
}

Le correcteur : Ahhh, ça c'est de la bonne trace! Bon ça fait des tâches mais avec un bon solvant ça partira.
Le codeur :
  1. Quoi, une énumeration ? kesako, lui zyva! Reste poli, moi je développe en Objective-C pas en énumeration ou j'sais pas quoi...
  2. J'ai écrit MyClass tout seul, c'est cool hein ? J'ai bien essayé le toString() mais ça marche pas! Ce Java me semble un peu pourri, enfin bon (je sais pas pourquoi le prof' il arrête pas de dire Objective-C tout le temps, il connaît pas Java ?)... En plus dans la Javadoc chez ©Oracle j'ai pas trouvé MyClass, ça doit être pour ça que le toString() marche pas. Quoi Objective-c ?! Hein ? En cours ? Il a dit quoi ? description ? Ben j'ai documenté, qu'est ce qui va pas ?
  3. Quoi NSLog le array direct ? Eh patate, comment tu veux que le Java pourri y trouve comment afficher ? T'es vraiment un naze toi, réfléchit!
Le correcteur : je me demande s'il ne faudrait pas introduire un cours de programmation dans le cursus d'informatique. J'ai faim, je vais commander du caviar chez ©FirstPetrossian24/24, il paraît qu'ils livrent en ©Honda, Goldwing 1800.

Cinquième exemple

NSURL *url = [NSURL fileURLWithPath:@"http://blablablabla/blibliblibli.jpg"];
...
NSData *imageData = [NSData dataWithContentOfURL:url];
UIImage *image = [[UIImage alloc] initWithData:imageData];
// [self.imagePlaceHolder setImage:image]; MET UNE IMAGE BLANCHE ALORS QUE MON URL EST CORRECTE

Le correcteur : Quand on commente en majuscules c'est qu'on est pas content, mais pas du tout! L'URL est correcte alors forcément hein ? So what's wrong ? Une simple petite trace fait apparaître que, bien sûr, les datas ne sont pas chargées (imageData null)... Alors pourquoi ? Peut-être que l'objet URL n'est pas correct, l'URL oui mais l'objet ? Ben oui, pour l'obtenir la méthode fileURLWithPath a été utilisée! Et comme son nom l'indique (voilà la raison d'être du mode verbeux de nommage des méthodes) cette méthode crée une URL de fichier à partir d'un chemin... Si on remplace par URLWithString, c'est fou ça marche!
Sinon, quand on décommente la dernière ligne, qu'arrive t-il ? Ben il faut commenter à partir de MET... Pratique non ? J'ai un petit creux, je me demande si un bon Tournedos Rossini me ferait pas du bien...

Sixième code

Contexte : Bon il s'agit d'écrire un code permettant de charger des données depuis un serveur sur le réseau.
Le codeur : Bien entendu, quand je développe je place tout sur ma propre machine ce qui donne bien entendu une URL de la forme suivante :

          http://localhost/chemin/fichier.xml

Le correcteur : Je me demande encore pourquoi ça ne fonctionne pas quand je corrige.
Un coup de steadycam et on entre dans la tête du codeur : Tout m'a l'air correct, ou alors j'ai un doute, il faut que je mette l'adresse en dur si jamais son DNS ne connaît pas localhost ? Le prof a une machine chelou alors faut que je prenne des précautions. Que penser de 127.0.0.1 ? Ou 255.255.255.255 ? Je sais plus moi! Bon de toutes les façons, j'en ai besoin à plusieurs endroits alors je vais tout recopier par couper/coller, c'est plus facile (y'a bien mon voisin qui me dit que peut-être un fichier d'entête avec les constantes ça pourrait être pas mal - mais il parle une langue étrangère alors je fais semblant de comprendre, je hoche la tête et comme ça je le vexe pas). En plus, je me suis débrouillé pour qu'à l'exécution on obtienne un joli index 0 beyond bounds for empty array (y'a pas que mon voisin qui parle une langue étrangère, mon ordi aussi, pourtant j'ai bien sélectionné français comme environnement, enfin bon, la ©Pomme c'est plus ce que c'était). Mais je crois que je vais ruser encore, parce que ce vicieux de prof pourrait être tenté de comprendre mon code (y'a peu de chance tout de même, vu qu'il est vieux); je vais faire compliqué comme ça il saura que je suis super fort :

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:[[something getAMutableArray] count]];
for (i=0; i<[[something getAMutableArray] count]; i++) {
    [array addObject:[[something getAMutableArray] objectAtIndex:i];
}

Le codeur : Héhé! Je l'ai bien eu le gars n'empêche. Ca fait tout de même 4 lignes de code bien longues pour obtenir un MutableArray à partir d'un MutableArray. J'aurais pu cloner à la limite mais bon, c'était trop simple. Peut-être même que j'aurais pu utiliser le MutableArray de départ, mais...heu...attends voir...non! impossible...trop trivial...non...euh...Je demande à l'alien à côté de moi ou pas ?non...pfff tous ces projets... Vaut mieux être prudent, copions... Qu'est ce que j'ai faim moi, allez hop allons chez Sans2Viche&SangDeProche pour changer.

DjiBee

Aucun commentaire:

Enregistrer un commentaire