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.
J'ai récemment eu le bonheur de reprendre un site Web (basé sur Joomla!, on commence mal) développé par une prestataire freelance. Après deux jours d'exploration, mes plus belles découvertes :

– Tout le code dans une seule fonction par classe : check.
– Aucun objet, aucune fonction en dehors du strict nécessaire pour Joomla! : check.
– Des boucles de plus de 500 lignes et un usage sur-abusif du continue et break : check.
– Des conditions TOUTES formées sur le modèle : if (quelque chose) { // RIEN } else { faire_un_truc(); } : check.
– Une sanitization absente, tout pris dans $_REQUEST : check.
– Toutes les requêtes SQL en dur dans le code, aucune requête préparée même celles répétées des milliers de fois : check.
– À peu près 200 tables pour une application, le tout sans AUCUNE contrainte d'intégrité (hormis un bête UNIQUE sur l'ID de chaque table) : check.
– Utiliser l'obsolète l'API mysql_ à l'ère de PDO : check.

Pour toutes ces raisons, plus celles à suivre : PEBKAC.
PEBKAC #8925 proposé par iFrancois le 13/11/2013 | 36 commentaires | 👍🏽 👎🏽 +152
J'ai mis quelques secondes à comprendre la signification du « check »… Au début, je pensais qu'il s'agissait du nom de la (seule) fonction par classe.
Commentaire #118179 écrit par Epok__ le 13/11/2013 à 12h45 | 👍🏽 👎🏽
idem XD
(je trouvais bizarre de présenter ça avec une structure de ternaire mais bon...)
Commentaire #118180 écrit par blag le 13/11/2013 à 12h48 | 👍🏽 👎🏽
Pour ça que les FramW c'est bien, mais qu'il faut déjà savoir développer from scratch avant si tu veux savoir ce que tu fait et les concepts que tu doit mettre en place... :P
Commentaire #118181 écrit par blag le 13/11/2013 à 12h49 | 👍🏽 👎🏽
[parano]Aucun rapport, mais est-ce qu'il n'y aurait pas un (ou deux) trolls qui downvotent toutes les PEBKAC dès leur publication ? je vois des "-2" sur toutes les PEBKAC récentes...[/parano]
Commentaire #118186 écrit par Alfred456654 le 13/11/2013 à 13h20 | 👍🏽 👎🏽
Certains disent que si on veut faire un "if not truc then machin", le remplacer par "if truc then rien else machin" améliore la lisibilité du code. Principalement parce que ça permet de mieux maintenir le code si on veut finalement remplacer le rien par quelque chose, que c'est plus proche du langage naturel, et plus généralement, que les négations sont à éviter autant que possible parce que ça embrouille tout.
Commentaire #118187 écrit par Chipotage le 13/11/2013 à 13h22 | 👍🏽 👎🏽
D'autant plus qu'après compilation, le code résultant sera strictement le même. Je ne sais pas si dans le langage dont parle l'auteur (Joomla ? Est-ce un langage ?) il y a compilation, mais je parle dans le cas général.
Commentaire #118192 écrit par Epok__ le 13/11/2013 à 13h30 | 👍🏽 👎🏽
Et PAF ! ça fait orange.fr !
Commentaire #118195 écrit par Siggy le 13/11/2013 à 13h34 | 👍🏽 👎🏽
Franchement, par expérience personnelle, je suis complètement opposé à ce mode de pensée.

Ma façon de faire est plutôt : moins il y a de code, plus il sera facile à comprendre (ce qui peut aussi être contestable, mais personne ne s'en plaint dans mon équipe). Évidemment, cela ne prend pas en compte les commentaires.
Commentaire #118196 écrit par Raizarachi le 13/11/2013 à 13h37 | 👍🏽 👎🏽
Wikipédia : Joomla! est un système de gestion de contenu (en anglais CMS pour content management system) libre, open source et gratuit. Il est écrit en PHP et utilise une base de données MySQL

Bref, c'est basé sur du PHP, qui n'est pas un langage compilé. De toute façon, je suis pas sur qu'optimiser les conditions vides apporte de réels gains de performance.

@Chipotage :
Un truc du genre if(!a) ne me dérange pas. Par contre, if(!a | !b) est parfois moins évident, et un if(a & b){ //rien } else {...} peut éventuellement être plus explicite.
Commentaire #118197 écrit par Link le 13/11/2013 à 13h37 | 👍🏽 👎🏽
Assez moche, en effet.

Par contre au niveau des abus de continue; / break;, je préfère quand même en mettre, plutôt que de me retrouver avec des empilages d'indentation.
Commentaire #118198 écrit par Raizarachi le 13/11/2013 à 13h39 | 👍🏽 👎🏽
Disons que selon les cas, c'est plus ou moins justifié (personne n'ira écrire "if x=0 then () else toto" plutôt que "if x <> 0 then toto", j'espère...). Mais pas de quoi hurler sur ceux qui privilégient l'une ou l'autre approche (voire alternent selon les circonstances)...

Une exception : les langages qui ne proposent pas de vraie symétrie entre les branches then et else. Genre le lisp emacs où le then doit être une seule instruction, contrairement au else. Mais là on a des fonctions when et unless qui remplacent à merveille if pour notre cas à une seule branche.
Commentaire #118201 écrit par Chipotage le 13/11/2013 à 13h43 | 👍🏽 👎🏽
Au moins on peut suivre la logique des indentations.
Un abus de continue et de break revient ni plus ni moins qu'à développer à l'aide de goto.
Commentaire #118202 écrit par mini le 13/11/2013 à 13h47 | 👍🏽 👎🏽
> À peu près 200 tables pour une application, le tout sans AUCUNE contrainte d'intégrité (hormis un bête UNIQUE sur l'ID de chaque table)

Il peut y avoir plusieurs bonnes raisons pour lesquelles il n'y a pas de contraintes d'intégrité, quelle que soit le nombre de tables. Ce n'est pas forcément une erreur... CTLP
Commentaire #118204 écrit par ArchiArchi le 13/11/2013 à 13h52 | 👍🏽 👎🏽
C'est sûrement Pifenmoins ;)
Commentaire #118206 écrit par Moot le 13/11/2013 à 14h13 | 👍🏽 👎🏽
Je n'ai pas tout compris mais je suis sûr d'une chose : sanitization n'est pas un mot français...
Commentaire #118207 écrit par Tharkun le 13/11/2013 à 14h16 | 👍🏽 👎🏽
Mais il ne peut y avoir aucune bonne raison qui justifierait de confondre « quel » et « quelle » !
Commentaire #118208 écrit par Grammar Nazi le 13/11/2013 à 14h26 | 👍🏽 👎🏽
@Link Mauvais choix d'opérateurs, mais je me trompe peut-être. Tu as choisi les opérateurs binaires & et |, et non les booléens && et ||.

Surprise garantie pour amateurs de sensations fortes. :)
Commentaire #118215 écrit par mAn le 13/11/2013 à 15h36 | 👍🏽 👎🏽
Ça c'est dû au fait que je travaille sur Matlab en ce moment, et qu'il lui faut les opérateurs une seule fois.
Commentaire #118218 écrit par Link le 13/11/2013 à 16h04 | 👍🏽 👎🏽
"améliore la lisibilité du code" ?
J'aimerai que ces personnes m'expliquent comment rajouter du code inutile améliore la lisibilité du tout...

C'est un peu comme ces sketchs où un gars explique la route à un autre:
"Au bout de la rue, y'a un embranchement: si tu vas à droite tu vas passer devant une épicerie et un lavomatic, ben c'est pas par là: c'est de l'autre côté qu'il faut aller" et répète ce genre d'explication tout le long: au bout d'un moment t'es pommé.
En prog c'est pareil: pour m'être tapé de modifier des programmes avec ce genre de "logique" ça prend vite la tête (surtout quand l'indentation laisse à désirer avec moult conditions sont imbriquées, histoire de pimenter le tout).
Commentaire #118225 écrit par Youplà le 13/11/2013 à 17h00 | 👍🏽 👎🏽
Tu as tout à fait raison, ce n'est pas contestable, moins il y a de code, plus des lisibles (sans compter l'indentation, les retours à la ligne et les commentaires, qui sont sources de compréhension pour les développements ultérieures).
Commentaire #118228 écrit par Cartman34 le 13/11/2013 à 17h37 | 👍🏽 👎🏽
et son frère !
Commentaire #118246 écrit par Lou Montana le 13/11/2013 à 18h56 | 👍🏽 👎🏽
Du MySQL en MyISAM sur 90% des tables. J'appelle pas ça une bonne raison, surtout quand derrière on fait des `LEFT JOIN`sur 5 tables, et que la requête prend 30 secondes à s'exécuter
Commentaire #118251 écrit par iFrancois le 13/11/2013 à 19h22 | 👍🏽 👎🏽
Anéfé. -z+s
Commentaire #118252 écrit par iFrancois le 13/11/2013 à 19h23 | 👍🏽 👎🏽
Aucun problème ! Ya pas de commentaires non plus.
Commentaire #118253 écrit par iFrancois le 13/11/2013 à 19h23 | 👍🏽 👎🏽
Et tu bosses encore avec cette prestataire ? (Histoire que tu nous fournisses plus souvent du contenu collector comme celui-là :D)
Commentaire #118258 écrit par Limeila le 13/11/2013 à 19h44 | 👍🏽 👎🏽
Je ne bosse pas avec, mais je dois reprendre et améliorer le même logiciel. yaura sûrement d'autres PEBKAC dessus
Commentaire #118262 écrit par iFrancois le 13/11/2013 à 20h46 | 👍🏽 👎🏽
Mais encore ?
Sanatisation n'est pas plus français...
Commentaire #118265 écrit par Tharkun le 13/11/2013 à 21h34 | 👍🏽 👎🏽
Sinon ne pas hésité a créer une methode avec un nom explicite juste pour la condition
if(mesConditionsSontremplies()) {
}

Ca a l'avantage de bien se lire sans devoir parser les conditions.
Commentaire #118275 écrit par aaa le 13/11/2013 à 23h15 | 👍🏽 👎🏽
Rhoo non pas d'empilage d'indentation! Il faut faire plus de methodes (beaucoup plus même)!
Commentaire #118276 écrit par aaa le 13/11/2013 à 23h17 | 👍🏽 👎🏽
-"sanitization" +"filtrage, nettoyage et vérification"
Commentaire #118282 écrit par iFrancois le 14/11/2013 à 00h13 | 👍🏽 👎🏽
NoooOOOOooon mais qu'avons nous fait?!
Commentaire #118284 écrit par ROB le 14/11/2013 à 07h08 | 👍🏽 👎🏽
int check(function)
 {
 if (badcode == 0) {break;} else {pebkac = true;)
 }
Commentaire #118290 écrit par Aaargh!!! le 14/11/2013 à 07h56 | 👍🏽 👎🏽
Nous sommes démasqués ! Et sans masque, plus de nez.
Commentaire #118292 écrit par Pifenmoins et son frère le 14/11/2013 à 07h59 | 👍🏽 👎🏽
On y arrive.

Ne crois-tu pas que, si tu avais commencé à écrire en langue française, nous aurions plus vite compris ? Pour ma part, tu te prends un vote négatif rien que pour ce motif.
Commentaire #118293 écrit par Et le français bordel ! le 14/11/2013 à 08h06 | 👍🏽 👎🏽
J'ai trouvé comment avoir les médailles de votes négatifs sur les PEBKAC alors. Let's do this !
Commentaire #118303 écrit par iFrancois le 14/11/2013 à 08h58 | 👍🏽 👎🏽
En fait, si j'ai bien compris le PEBKAC, iFrançois critique un site développé avec Joomla, donc dont le code n'est pas généré "humainement" mais automatiquement ?
Donc, le PEBKAC serait que du code généré automatiquement n'est pas optimisé ?
Je sais pas, mais moi ça me donne plutôt envie de dire CTLP...
Si utiliser Joomla ne te convient pas, rien ne t'empêche de refaire le site "from scratch"... (on peut remplacer Joomla par Microsoft Publisher par exemple, ou tout autre chose qui permet de créer un site Web sans aucune connaissance en programmation Web).
Commentaire #118622 écrit par Araldwenn le 15/11/2013 à 17h58 | 👍🏽 👎🏽