Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Séance d'optimisation d'un projet PHP développé par un collègue, j'y trouve un fichier « time.php », et décide d'y jeter un œil :

$year = date('Y');
$month = date('m');
$day = date('d');
$hour = date('H');
$minute = date('i');
echo "$year $month $day $hour $minute";

Une concaténation de variable entre des double-quote, la création de 5 variables, et l'utilisation de 5 appels à la fonction « date() », là où un simple « echo date('Y m d H i'); » aurait produit le même résultat : PEBKAC.
PEBKAC #7066 proposé par blag le 26/02/2013 | 28 commentaires | 👍🏽 👎🏽 +216
Pourquoi faire simple quand on peut faire compliqué (et chiant) ? Surtout qu'à maintenir des trucs de ce genre tu peux parfois chercher longtemps d'où viennent les bugs ^^
Commentaire #80851 écrit par Shadam le 26/02/2013 à 12h36 | 👍🏽 👎🏽
"Pourquoi faire simple quand on peut faire compliqué"
... zut, j'ai été devancé ...
Commentaire #80853 écrit par Youplà le 26/02/2013 à 12h38 | 👍🏽 👎🏽
Parce qu'on est payé à la ligne? Ça justifie aussi les trucs du genre define("UN",1); ...
Commentaire #80858 écrit par triman le 26/02/2013 à 12h48 | 👍🏽 👎🏽
Perso, avant le echo, j'aurais fait une foultitude de if pour vérifier que chaque élément de date est dans le bon format.

Petit joueur.
Commentaire #80861 écrit par neeko le 26/02/2013 à 12h52 | 👍🏽 👎🏽
Y a que ça dans le fichier ? Même pas dans une fonction ?
Donc s'il veut l'afficher 3 fois sur sa page (quelqu'un capable d'écrire ce genre de code trouvera forcément une utilité à afficher 3 fois la date courante sur la page) il doit faire 3 include du fichier ?
Commentaire #80863 écrit par Acorah le 26/02/2013 à 12h56 | 👍🏽 👎🏽
Mais non. Il a trois fonctions différentes, pour faire trois includes. Comme ça, ça prend plus de temps le jour où on veut changer le format des dates !

Il faut être malin, et ne pas laisser l'info te prendre la vedette en simplifiant ce qui peut être compliqué ! Sinon où va-t-on ?
Commentaire #80877 écrit par Aaargh!!! le 26/02/2013 à 13h33 | 👍🏽 👎🏽
Ah oui bien sûr, où avais-je la tête. Tout ceci fait partie d'un plan diablement ingénieux pour forcer le client à accepter le contrat de maintenance de l'application.
Commentaire #80879 écrit par Acorah le 26/02/2013 à 13h36 | 👍🏽 👎🏽
Les définitions de constantes stupides me font plus penser à une boite imposant des conventions de codages débiles, du genre « Pas de constantes littérales » :
#define UN 1
 #define DEUX 2
 #define TROIS 3
 ...
 #define TREIZE_MILLIONS_SEPT_CENT_SOIXANTE_TROIS_MILLE_SIX_CENT_QUATRE_VINGT_DIX_HUIT 13763698
 ...


Oui, car la taille de /0 pourrait changer :
char *dest = calloc(strlen(src) + UN, sizeof(char));
 strcpy(dest, src);
Commentaire #80884 écrit par BSK le 26/02/2013 à 13h49 | 👍🏽 👎🏽
Bonjour,

Avec un peu de chance, aux alentours de 23h59:59 un jour J, on peut avoir le jour J+1 la date :
année mois jour-1 00 00 et donc 24h00 de décalage.

Cela peut être un bug amusant à chercher et corriger.

"Allo le support ? Mon ordinateur change parfois brutalement de fuseau horaire sans prévenir !"

:-)

Luc
Commentaire #80894 écrit par Luc le 26/02/2013 à 14h27 | 👍🏽 👎🏽
Juste une petite remarque : il y a un autre problème dans le code posté : en faisant plusieurs appels à la date courante, il est possible que celle-ci change entre deux appels. Par exemple, si un poil avant 17h la récupération de l'heure est effectuée, puis lors des minutes l'heure vient de passer. Alors, dans l'affichage, ça donnera 16h au lieu de 17h...

Je sais que ce cas de figure est extrèmement rare, mais c'est justement ce genre de bug qui est très difficile à corriger parce que difficilement reproductible. Personnellement, j'appelle ça un Heisenbug, par référence au principe d'incertitude d'Heisenberg (http://fr.wikipedia.org/wiki/Principe_d%27incertitude) .

EDIT : grillé par Luc le temps que j'écrive mon commentaire...
Commentaire #80896 écrit par Acné le 26/02/2013 à 14h34 | 👍🏽 👎🏽
@BSK : non, le fait de demander à ce qu'il n'y ait pas de constantes littérales n'est pas débile, tant que l'implémentation est faite correctement. Il ne faut pas nommer la constante en fonction de son contenu, mais en fonction de son sens.

Ca me fait penser aussi au classes CSS du style "texteVert" qui affichent le texte en rouge italique...
Commentaire #80899 écrit par Acné le 26/02/2013 à 14h39 | 👍🏽 👎🏽
Les instructions sans au moins 15 if(!toto) {do nothing;} successifs c'est pour les faibles, sans indentation et imbriqués bien sûr.
Commentaire #80900 écrit par Shadam le 26/02/2013 à 14h49 | 👍🏽 👎🏽
@BSK : +1 avec Acné (pardon, "+UN").
Si tu veux que ça ait un sens il faudrait plutôt faire ça :
#define SIZEOFZERO 1

char *dest = calloc(strlen(src) + SIZEOFZERO, sizeof(char));
 strcpy(dest, src);
Commentaire #80910 écrit par Acorah le 26/02/2013 à 15h27 | 👍🏽 👎🏽
C'est joliment nommé (même si ton lien a foiré à cause de la parenthèse).
:-)
Commentaire #80914 écrit par Acorah le 26/02/2013 à 15h30 | 👍🏽 👎🏽
Je rêve d'un parseur de lien qui serait assez intelligent pour détecter une parenthèse ouvrante avant le lien et donc comprendre que la parenthèse fermante à la fin du lien n'en fait pas partie.

Les conséquences en sont tout de même catastrophiques : pour que le lien soit correct, on est obligé d'insérer un espace entre le lien et la parenthèse fermante. Ceci entraîne automatiquement un message de réprimande de Ponctuation Nazi, ce qui, presque partout sur le globe, équivaut au déshonneur et pousse des gens au suicide.
Commentaire #80917 écrit par FBM le 26/02/2013 à 15h39 | 👍🏽 👎🏽
@FBM : Il faut demander à Clem de modifier un peu son expression régulière. Avec une bouteille de petrol hahn ça pourrait aller (toute personne ayant essayé une fois d'écrire une expression régulière comprendra).
Commentaire #80926 écrit par Acorah le 26/02/2013 à 16h52 | 👍🏽 👎🏽
Ça fonctionne dans certains cas mais là ça a foiré à cause du point suivant la parenthèse. En décalant le point d'un espace ça fonctionnait. Mais bon je vais améliorer ça.
Commentaire #80930 écrit par Clem le 26/02/2013 à 17h30 | 👍🏽 👎🏽
FBM : on dit "une espace" en typographie.
Commentaire #80950 écrit par gnbis le 26/02/2013 à 18h51 | 👍🏽 👎🏽
On est même pas payé à la ligne, c'est une apli qui doit tourner en back-office chez nous ;)
(et les convention de codage des PHP c'est moi qui les fait pour le coup, autrement dit je suis pas bien méchant...)
Commentaire #80951 écrit par blag le 26/02/2013 à 18h56 | 👍🏽 👎🏽
C'est le même dev' que sur la #7009 ( http://www.pebkac.fr/pebkac/7009/ ).
Autrement dit, des if en balade dans le code j'en ai déjà pas mal, lui donne pas des mauvaises idées... XD
Commentaire #80953 écrit par blag le 26/02/2013 à 19h00 | 👍🏽 👎🏽
Les copiés-colés c'est tellement plus simple...
Commentaire #80961 écrit par triman le 26/02/2013 à 19h42 | 👍🏽 👎🏽
sans compter si ce jour J est un 31 décembre et que le passage au 1ier janvier se fait juste après le premier appel à la fonction date()
Commentaire #80988 écrit par Fred le 26/02/2013 à 22h45 | 👍🏽 👎🏽
Bon, ça, c'était dans mes 100 premières lignes et de mémoire, c'était destiné à synchroniser les jetons de temps entre les instances du programme, différents serveurs et celui du serveur central. De plus, il y avait des problèmes sur les 0 (le casting était pas encore d'actualité) et que pour des hashs, c'est compliqué à gérer le cross langage.
Pour la syntaxe, j'avais encore besoin de ça pour me repérer et pour l'echo... ben on va dire que c'est moins grave qu'autre chose...
(je pense que blag a encore quelques anecdote de vieux codes >.>)
Commentaire #80990 écrit par Taiki le 26/02/2013 à 22h48 | 👍🏽 👎🏽
Il est pas très gentil :p
Venge-toi en retournant ce qu'il fait contre lui : poste des pebkacs sur lui !
Commentaire #81134 écrit par Banon le 27/02/2013 à 16h17 | 👍🏽 👎🏽
Je tente de le convertir au C, si ça marche, on en aura :D
Commentaire #81262 écrit par Taiki le 28/02/2013 à 00h39 | 👍🏽 👎🏽
Vivement les brevets logiciels, que ces pratiques se généralisent.
« Ben, depuis que date('Y m d H i'); est breveté, pour ne pas se prendre un procès on a dû écrire la fonction d'affichage de la date autrement. »
Commentaire #81669 écrit par /etc/passwd le 02/03/2013 à 15h59 | 👍🏽 👎🏽
On n'est plus à l'époque d'IBM et de ses kiloloc, et heureusement !
Commentaire #134374 écrit par Hopper le 16/03/2014 à 21h21 | 👍🏽 👎🏽
"Pourquoi faire simple quand on peut faire compliqué"
... zut, moi aussi ... de peu en plus ...
Commentaire #143680 écrit par Gentil Lapin le 06/08/2014 à 01h44 | 👍🏽 👎🏽