Journal [mavie] Le javascript ca pue

Posté par  (site web personnel) .
Étiquettes :
0
28
sept.
2006
Très cher journal,

ce matin j'ai eu un fichier .js à debuguer. Il marchait très bien, j'ai fais quelques modifs à priori sans conséquence, et après voilà que sans raison mon navigateur ne trouvait plus les fonctions que j'appelais depuis les pages web...

Je me dis "tiens, j'ai p't'être cassé le chemin vers le fichier .js, mais non, il était bon le chemin...

J'me dis, qu'ai-je pu bien modifier pour que mon fichier js devienne subitement invisible aux yeux de firefox et aussi de IE (oui au taf je dois tester sur les 2...)

[D'ailleurs à ce propos, il est intéréssant de constater que si le chemin du fichier .js fourni dans la page html est faux, ni IE ni Firefox ne râle, ils trouvent pas les fonctions, c'est tout...]

Après quelques loooooooongues minutes de lutte acharnée, à chercher qu'est ce que j'ai pu modifier dans ces 2870 lignes de javascript (!) pour que subitement plus rien ne marche, et après comparaison des sources dans subversion, et j'isole enfin 1 ligne de code. C'est ELLE qui fout la merde ! Voici la bête :

filtre = /^[a-ZA-Z][a-zA-Z]{5,9}$/g;

Voilà, les connaisseurs l'auront remarqué peut-être du premier coup, moi j'suis repassé 10 fois devant sans rien voir : ce !*%@# de Z majuscule au lieu d'une minuscule ! L'ensemble devient incohérent, et du coup, le fichier complet et toutes ses fonctions sont ignoré !

C'est pas un langage de boulet ca ??! (le premier qui dit que c'est moi le boulet bah je réponds toi-même)

Bref, cette erreur de programmation vaut bien une patate d'argent (l'equivalent des chaussettes, mais pour les erreurs de merde en programmation, pas pour les journaux), la patate d'or étant toujours détenue par un merveilleux bout de code java:

if (macondition);
faireCa();


Qui m'a couté plusieurs heures de recherches et de mode debug avant de comprendre pourquoi l'application faisait n'importe quoi...

Voilà, fallait que ca sorte, merci de m'avoir lu

ps : le javascript ca pue
  • # c'est toi le boulet !

    Posté par  . Évalué à 3.

    sinon, je suis du meme avis que toi, il devrait y avoir un mode 'debug' pour le javascript où l'interpreteur ne devrait rien laisser passer.
    • [^] # Re: c'est toi le boulet !

      Posté par  (site web personnel, Mastodon) . Évalué à 10.

      il y a un mode debug dans firefox...

      Dans about:config :

      javascript.options.strict à true
      javascript.options.showInConsole à true
      browser.dom.window.dump.enabled à true
    • [^] # Re: c'est toi le boulet !

      Posté par  . Évalué à 6.

      ça existe :
      about:config => javascript.options.strict = true

      et toutes les erreurs sont loguées dans la console javascript

      mais firebug [https://addons.mozilla.org/firefox/1843/] est clairement ton ami, même si il y a quelques bugs (il fait planter les requete xmlhttprequest en mode asynchrone, a cause parait-il d'un bug de firefox)

      Dam
  • # Faux coupable

    Posté par  (site web personnel) . Évalué à 8.

    N'accuses pas le langage mais accuse l'interpréteur (IE, gecko, Opera,..) qui aurait dû te signaler l'erreur.

    L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

    • [^] # Re: Faux coupable

      Posté par  (site web personnel) . Évalué à 1.

      Disons qu'il pourrait un tout petit peu accuser le langage parce qu'il ne supporte pas la syntaxe /[a-Z]/ (à moins que ce ne soit le groupe /[a-ZA-Z]/ qui pose problème ?)

      Je le reconnais, c'est tiré par les cheveux :)
      • [^] # Re: Faux coupable

        Posté par  (site web personnel) . Évalué à 3.

        c'est le /[a-Z]/ qui ne passe pas.

        Mais ton message laisse t il supposé que certains langages connaissent cette syntaxe ? car personnellement, ce n'etait pas voulu de ma part, je voulais bien sûr écrire [a-z]

        Peut-être que perl ou python est plus souple, j'ai jamais essayé ce genre de raccourci
        • [^] # Re: Faux coupable

          Posté par  (site web personnel) . Évalué à 3.

          Je crois que c'est dans la syntaxe des expressions rationnelles Posix. J'utilise parfois cette notation avec grep.
          • [^] # Re: Faux coupable

            Posté par  (site web personnel) . Évalué à 4.

            Oui, mais dans [a-Z] avec un Z majuscule, la borne haute de la plage est inférieure à la borne basse, c'est donc une erreur. Et ça aurais dû sortir comme tel.

            Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

            • [^] # Re: Faux coupable

              Posté par  (site web personnel) . Évalué à 3.

              Justement, dans le cas de grep, ce n'est pas une erreur, c'est une extension (it's not a bug, it's a feature).

              Pour les expressions type Perl, c'est une erreur.
  • # Firebug

    Posté par  . Évalué à 2.

    Firebug est ton amis : http://www.joehewitt.com/software/firebug/ ^^
    • [^] # Re: Firebug

      Posté par  (site web personnel) . Évalué à 4.

      il ne m'apporte rien de nouveau à priori, car il ne voit pas non plus l'erreur sur la regexp. Il râle juste comme quoi les fonctions que j'appele dans la page web n'existent pas...
  • # C'est pareil pour les autres languages

    Posté par  (site web personnel) . Évalué à 8.

    Ton erreur n'est pas du tout dûe à JavaScript.
    Dans n'importe quel language, si tu te trompes dans ce que tu lui dis de faire, le programme fera ce qu'on lui dit de faire... Et pas ce que tu as pensé ;-)
    • [^] # Re: C'est pareil pour les autres languages

      Posté par  (site web personnel) . Évalué à 6.

      Sauf que dans n'importe quel langage, le parseur dit qu'il y a une erreur, il dit même la ligne (pas toujours exact mais on s'y retrouve avec l'experience).

      Dans le cas présent, et j'ai testé avec firebug qu'on m'a conseillé plus haut, le résultat est le même : aucune erreur. Juste que le .js n'est pas du tout parsé par le moteur javascript, du coup aucune fonction n'est trouvée par la page web.

      Et ca, c'est moche.
      • [^] # Re: C'est pareil pour les autres languages

        Posté par  (site web personnel) . Évalué à 3.

        Quitte à me répéter : ton code est VALIDE.
        Aucun compilateur ne te sortira d'erreur ni même de warning, car ton code est parfait.

        "filtre = /^[a-ZA-Z][a-zA-Z]{5,9}$/g" dit de "a" à "Z" incluant les caracteres ASCII non alphanumeriques entre ses deux valeurs.

        "if (macondition);" dit de ne rien faire si la condition est vraie (mais la condition est évaluée --> utile)

        Je me répéte donc : la machine fait ce que tu lui a dit de faire, dans une langue sans fautes, et tu te plains de ca...

        C'est comme si tu disais "Linux ça pue" alors que tu pensais "MS ça pue", grammaticalement les deux phrases sont exactes, et ton correspondant comprendra "Linux ça pue" quoique tu penses...
        • [^] # Re: C'est pareil pour les autres languages

          Posté par  (site web personnel) . Évalué à 4.

          tu t'égares là.

          Pour mon erreur de java, je n'ai pa dis que c'etait une erreur syntaxique. Au contraire la patate d'or récompense surtout les erreurs de boulet, et ca je l'assume.

          En revanche, il semble claire que pour javascript [a-Z] est une erreur syntaxique (et pour moi aussi d'ailleurs), donc le plus simple aurait été qu'il me le dise, plutot que d'ignorer tout le fichier silencieusement.
          • [^] # Re: C'est pareil pour les autres languages

            Posté par  (site web personnel) . Évalué à 0.

            Faut le répéter, c'est dur...
            Pourquoi a-Z ne serait pas valide?
            Il est valide, sauf qu'entre a et Z il n'y a rien :
            http://www.table-ascii.com/
            a = 0x61
            z = 0x5A
            entre 0x61 et 0x5A, ben... il y a pas grand chose, mais il y a des choses (les crochets etc...)

            TU as fait une erreur, tu as mal parlé à l'ordinateur, personne ne pourra t'aider, les erreurs viennent de toi.
            • [^] # Re: C'est pareil pour les autres languages

              Posté par  (site web personnel) . Évalué à 3.

              d'après syntaxe officielle des regexp perl, c'est invalide. c'est tout.
              pour celle de python (qui utilise aussi la syntaxe perl), idem (voir plus bas)

              Et ne me regarde pas comme ca, je n'y suis pour rien !
            • [^] # Re: C'est pareil pour les autres languages

              Posté par  (site web personnel) . Évalué à 4.

              sauf qu'entre "a" et "Z" il n'y a rien vue que "Z" est avant "a" et que la demande c'est tout ce qui est superieur ou egale a "a" et inferieur ou egal a "Z"
            • [^] # Re: C'est pareil pour les autres languages

              Posté par  (site web personnel) . Évalué à 4.

              t'es bouché ou quoi ? le problème c'est qu'à cause de cette erreur les fonctions ne sont tout simplement plus trouvées. c'est bien une erreur, ça fait tout merder son fichier ! pas juste la fonction dans laquelle il y a la ligne ! et le problème c'est que l'erreur est passée sous silence.
        • [^] # Re: C'est pareil pour les autres languages

          Posté par  (site web personnel) . Évalué à 2.

          Je viens de faire un petit test avec perl :
          $ echo "blabla"|perl -e '/[a-Z]/ && print "match\n" || print "dont match\n" ;'
          Invalid [] range "a-Z" in regex; marked by <-- HERE in m/[a-Z <-- HERE ]/ at -e line 1.
          
          Et manifestement, d'une part c'est une erreur pour perl, et d'autre part, perl est capable de trouver où est cette erreur, en plus il affiche clairement le problème.
  • # C'est toi le boulet

    Posté par  . Évalué à 3.

    Au boulot on fait beaucoup de javascript.
    Depuis qu'on a plus de fichier de 3000 lignes (on concatène au déploiement) et qu'on fait des tests unitaires, et bien bizarrement ça se passe mieux.

    Bref avec n'importe quel langage tu auras des problèmes si tu récupères 3000 lignes mal foutues. (si en plus tu n'as pas de gestion de version pour savoir ce que tu as modifié...)
  • # Cho7 c'est toi qui pue, pas le javascript

    Posté par  (site web personnel) . Évalué à 1.

    Tes 2 erreurs :

    filtre = /^[a-ZA-Z][a-zA-Z]{5,9}$/g;

    et

    if (macondition);
    faireCa();

    Tu les aurais eu dans pleins d'autres languages...
    • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

      Posté par  (site web personnel) . Évalué à 4.

      Pour l' "erreur" java on est d'accord, je n'ai jamais dit d'ailleurs que c'etait une erreur syntaxique, mais purement logique.

      En revanche pour la regexp, je suis désolé mais sous python si je fais

      filtre = re.compile("[a-Z]")

      J'obtient tout de suite :
      Traceback (most recent call last):
      File "C:/Documents and Settings/Administrator/Desktop/reg.py", line 3, in
      filtre = re.compile("[a-Z]")
      File "C:\Python25\lib\re.py", line 180, in compile
      return _compile(pattern, flags)
      File "C:\Python25\lib\re.py", line 233, in _compile
      raise error, v # invalid expression
      error: bad character range


      C'est *un peu* plus explicite...
      • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

        Posté par  . Évalué à 1.

        Sauf qu'un utilisateur final n'est pas censé voir cela, vu qu'il va cliquer pour lancer son script python, alors si tu affiche le message en popup dans firefox/ie/konqueror/... il va avoir peur. Et le rapport d'incident risque de passer par un supérieur qui va t'engeuler parce que l'utilisateur n'a pas à voir un message d'erreur qu'il ne comprend pas.
        • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

          Posté par  . Évalué à 2.

          Sauf qu'avant l'utilisateur final ne voie le résultat, on suppose que le développeur teste correctement son code. Il vaut donc bien mieux lui fournir des messages d'erreur explicites qui lui permettent de trouver et réparer ses défauts d'implémentation, au lieu de ce que tu décris : ça, c'est plutôt un excellent moyen de laisser des bugs dans la version que l'utilisateur utilisera...

          Et même pour l'utilisateur final, il vaut mieux un message d'erreur qu'il peut faire remonter, plutôt qu'une absence totale de réaction... Parce que là, il va encore se dire que ça vient de lui, et quand il réalisera que c'est pas le cas, il risque de s'énerver... Et de mettre ton produit à la poubelle, si c'est un client.
          • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

            Posté par  . Évalué à 1.

            Oui, et donc ?
            C'est à lui de gérer les messages d'erreur qu'il envoie à ses utilisateurs. L'utilisateur va aimer lire :
            "File "http://example.com/bla.js", line 3, in
            filtre = /"[a-Z]"/
            error: bad character range"

            Il utilise une application d'utilisateur pour tester son code. Si elle permet d'être personnalisée pour être le déboggage, il doit le faire. Si elle ne le permet pas, peut-être faut-il qu'il utilise un outil adapté. Mais faire apparaitre des messages d'erreur en klingon a un utilisateur (et firefox et ie sont des application d'utilisateurs, pas de développeurs, en tout cas, pas de base) c'est une mauvaise idée.

            Pourquoi pas un écran bleu qui te dit Fatal Error 124 0x1211234875 ? Pourquoi pas "souris non détectée, cliquez ici" ?
            • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

              Posté par  (site web personnel) . Évalué à 2.

              On parle de la console Javascript de Firefox, là. Quelque chose que seuls les développeurs ouvrent et qui sert déjà à loguer tout plein d'autres erreurs sans faire apparaître de messages à l'utilisateur.
            • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

              Posté par  . Évalué à 4.

              Mais faire apparaitre des messages d'erreur en klingon a un utilisateur (et firefox et ie sont des application d'utilisateurs, pas de développeurs, en tout cas, pas de base) c'est une mauvaise idée.

              Pour l'utilisateur final, il vaut mieux un message d'erreur explicite que rien du tout, c'est un comportement plus logique et plus sain. Au moins l'utilisateur sait à quoi s'en tenir : « ok y'a un bug ». S'il est motivé, il peut même faire un rapport de bug.
      • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

        Posté par  (site web personnel) . Évalué à 2.

        >> Pour l' "erreur" java on est d'accord, je n'ai jamais dit d'ailleurs que c'etait une erreur syntaxique, mais purement logique.

        Une explication siouplait pour le mec nul qui connait rien à Java ?
        • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

          Posté par  (site web personnel) . Évalué à 4.

          en fait il ne faut pas mettre de point virgule après la condition de if.

          Autrement ca revient à dire :

          if (macondition)
          neFaitRien();

          faitCa();


          Là tu constate que la fonction faitCa() est tout le temps appelée, et que le if ne sert donc à rien du tout.
          • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

            Posté par  . Évalué à 3.

            C'est aussi pour ça que je met toujours des accolade dans les if.
            Je suis peut-être maniaque, ms je crois que finalement c'est le genre d'habitude qui fait gagner du temps.


            if(condition){}


            Il devient évident que ça ne fait rien, et pas possible de se tromper ave un ; ca ferait vraiment bizarre visuellement
      • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

        Posté par  (site web personnel) . Évalué à 1.

        Python est trop gentil, il te surveille...
        Mouais, ca peut être bien, mais bon, après faut pas vouloir faire des trucs plus complexe que Python interdira! :)
    • [^] # Re: Cho7 c'est toi qui pue, pas le javascript

      Posté par  . Évalué à 5.

      En plus tu t'es loupé sur le titre du journal c'est [Ma vie] et non pas [mavie].

      Du coup c'est pas aligné avec les deux journaux précedents ...
  • # Le javascript ça pue

    Posté par  . Évalué à 10.

    Parmi tous les pourfendeurs du pôvre cho7, il n'y en a pas un pour reconnaître que le JavaScript souffre de nombreuses erreurs de conception (enfin, conception, disons plutôt ajouts successifs de fonctionnalités pendant la guerre des navigateurs IE/Navigator), et pas un pour conseiller EgmaScript ?
    • [^] # Re: Le javascript ça pue

      Posté par  (site web personnel) . Évalué à 3.

      EcmaScript ;)

      Sinon merci de me soutenir un peu ^^

      Je crois que c'est l'esprit de contradiction qui pousse tous ces gens à me tapper dessus, alors qu'eux même ont dû une fois au moins dans leur vie se prendre la tête avec JavaScript, que ce soit en le débuggant, ou en cherchant à le rendre compatible tout browser...

      Mais bon, j'm'en fiche un peu, je défend mes idées, je les assume, le javascript ca pue (et toc)
      • [^] # Re: Le javascript ça pue

        Posté par  . Évalué à 1.

        Si tu veux aborder tes développements javascript sans avoir l'impression d'en faire, tu peux tenter avec haxe.

        Un hello word avec haxe
        http://haxe.org/tutos/start/js

        Un exemple d'appli ajax
        http://haxe.org/tutos/ajax

        Moi j'aime bien.
      • [^] # Re: Le javascript ça pue

        Posté par  (site web personnel) . Évalué à 2.


        Je crois que c'est l'esprit de contradiction qui pousse tous ces gens à me tapper dessus, alors qu'eux même ont dû une fois au moins dans leur vie se prendre la tête avec JavaScript, que ce soit en le débuggant, ou en cherchant à le rendre compatible tout browser...


        Je suis arrivé trop tard pour te taper dessus sur le contenu de ton journal, d'autres l'ont très bien fait des les premières réponses, je me contenterais donc de ton commentaire: il existe des outils pour debugguer du js, et les problèmes de compatibilité entre les navigateurs ne sont nullement dus au langage en lui même. Bref, tu te trompes de cible.

        Le JavaScript, (ou EcmaScript si certains préferent, ca revient grosso modo au meme, le second étant regulierement synchro sur les avancées du premier), est loin de puer autant qu'on le dit (*). Par contre, ca nécessite de se doter des bons outils et d'avoir les bonnes compétences, comme avec tout le reste en fait. Le piège est de penser qu'on peut développer un truc complexe en js avec un éditeur de texte basique et sans bien connaitre le bousin.

        (*) J'accorde le fait que le "DOM0" pue completement. Mais bon, techniquement ca ne fait pas partie du langage.
        • [^] # Re: Le javascript ça pue

          Posté par  (site web personnel) . Évalué à 1.

          J'ai un copain chercheur, qui en passant est un des meilleurs spécialiste des compilateur objet, qui lors d'un TP de javascript s'est rendu compte que la seul façon de faire marcher correctement une boucle était d'initialiser pour rien un variable à 1.

          C'est limite quand même.

          Après, ça dépend de l'implémentation, etc...

          « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

  • # le Javascript, le language qui t'oblige a faire les choses comme il faut

    Posté par  . Évalué à 5.

    Experience perso, javascript souffre de plusieurs problemes:

    1. C un language trop permissif. Il n'y a pas de type de variable et donc tu peux faire la fete entre les strings et les nombres sans trop te poser de question.

    2.Concept objet un peu leger. Perso j'aime bcp programmer en oriente objet, je trouve que c plus propre et plus facile a maintenir mais la c pas gagner....

    3.Personne n'est foutu de suivre les standards. J'aimerais comprendre pkoi personne n'a eu la belle idee d'avoir un interpreteur javascript INDEPENDANT du navigateur et que donc une fonction dans firefox est la meme que dans IE et pas de trucs bizarres entre les deux.

    4.En effet c'est pas l'interpreteur le plus bavard que je connaisse. Trouver que ton fichier n'est plus du tout reconnu pour une petite connerie de ; ou de } c chiant, vramient chiant.


    Donc pour ca, il vaut mieux creer plusieurs fichiers, parce que bon avoir 3000 lignes dans un fichier c qmeme hardcore. Bon si tu n'as pas le choix....

    Bref bon courage avec le javascript. Le language qui est gentil avec toi seulement si tu es gentil avec lui :)
    • [^] # Re: le Javascript, le language qui t'oblige a faire les choses comme il

      Posté par  . Évalué à 2.

      En plus y'a des gars assez fou pour écrire des navigateurs et autre joyeusetés avec.

      3, 2, 1 .................Fire []
      • [^] # Re: le Javascript, le language qui t'oblige a faire les choses comme il

        Posté par  . Évalué à 1.

        A mon avis le probleme du javascript, c'est (c mieux comme ca? ;)) que l'on a voulu que ce language soit pris en main le plus rapidement possible et que donc ils ne demandent pas trop d'apprentissage. Donc on essaie de ne pas faire peur en mettant plein de messages d'erreurs partout, en laissant un code tout pourri et qui plante tourner. Le probleme de ce genre d'approche c'est que lorsque tu veux faire un truc propre, et bien ca devient tout de suite plus dur parce que le language n'a pas ete fait pour.

        Perso j'espere qu'on aura droit a des interpreteurs mieux foutu, surtout que maintenant le javascript revient a la mode avec AJAX.

        En passant, j'aimerais faire remarquer que le javascript a l'avantage qu'on peut faire avec des trucs assez jolis sans faire du flash qui n'est pas forcement le must.

        Et comme j'ai pu le lire dans un des commentaires, le javascript a souffert de la guerre IE/Netscape. Esperons qu'aujourd'hui, vu qu'aujourd'hui on a des gens qui standardisent tout ca, et bien on aura quelque chose de propre, quelque chose de pro meme, et pas un truc genre basic avec lequel c dur de faire du bien.
    • [^] # Re: le Javascript, le language qui t'oblige a faire les choses comme il

      Posté par  (site web personnel) . Évalué à 10.

      Evite d'abréger "C'est" en "C", surtout quand tu parles d'un langage de programmations s'il te plait, parce que sinon on va pas te suivre longtemps...
    • [^] # Re: le Javascript, le language qui t'oblige a faire les choses comme il

      Posté par  . Évalué à 5.

      Pour ton point 2, javascript ne propose pas de système de classe mais avec les prototypes et les closures tu peux faire plein de choses aussi. C'est différent mais intéressant quand même.

      Le seul gros problème du Javascript c'est que tout le monde recopie et doit maintenir plein de trucs écris à la va-vite.
    • [^] # Re: le Javascript, le language qui t'oblige a faire les choses comme il

      Posté par  . Évalué à 3.

      3.Personne n'est foutu de suivre les standards. J'aimerais comprendre pkoi personne n'a eu la belle idee d'avoir un interpreteur javascript INDEPENDANT du navigateur et que donc une fonction dans firefox est la meme que dans IE et pas de trucs bizarres entre les deux.

      Ça existe:
      http://xmelegance.org/kjsembed/
    • [^] # Re: le Javascript, le language qui t'oblige a faire les choses comme il

      Posté par  (site web personnel) . Évalué à 4.

      Notons que l'interpréteur en lui même est loin d'être ce qui pose le plus de problèmes en JavaScript. Celui des versions de développement de Safari et celui de Firefox sont les plus évolués, mais sinon chez les autres il n'y a pas de problème majeur, juste des trucs manquants, des memory leaks dans IE, et 2/3 noms de variables/méthodes réservées dans certains navigateurs.

      Au passage on peut utiliser l'interpréteur de firefox à part, et pareil pour celui de safari, et encore pareil pour celui de konqueror je crois. Firefox en mode strict, avec firebug ou meme sans, ca permet de tres facilement et très rapidement identifier les problèmes, et pourvu qu'on se tienne à l'écart des quelques pièges que je cite plus haut, ca va.
      J'en profite pour dire que si IE par défaut donne des messages d'erreurs completement inutiles en ne donnant meme pas la bonne ligne, on peut lui adjoindre un vrai debugger, Microsoft Script Editor, qui est chiant à utiliser mais au moins, il marche et donne la vraie ligne avec son contexte.

      Pour moi, debugguer le js n'est vraiment pas ce qui pose probleme. Ce qui pose problème, c'est l'implémentation du DOM, et ca, c'est casse gueule à tester :-)
  • # ma chuassette d'or de la journée

    Posté par  . Évalué à 0.

    voila, c'est ca :

    function text_width($text = null){
    if($text == null)
    $text = $this->text;
    (return) $this->font->string_width($text);
    }


    j'avais juste oublié le return :-)
    • [^] # Re: ma chuassette d'or de la journée

      Posté par  (site web personnel) . Évalué à 3.

      L'habitude de Ruby peut-être ? ;-)
    • [^] # Re: ma chaussette d'or de la journée

      Posté par  . Évalué à 3.

      Arf, deux jours à corriger ce p...n de bug :

      Je devais faire du traitement d'image bien bourrin sur des images à n plans (= n couleurs, avec 1 <= n <= 32). Pour aller vite je lançais m (= nombre de processeur) threads. Pour limiter la fragmentation, j'ai eu la (mauvaise) idée de ne faire qu'un gros malloc() au premier thread qui entrait dans la fonction.

      Là où ça devient gore, c'est que j'avais un table fixe à p élements (p = nombre supposé max de couleurs soit 32), et l'indice 0 pointait sur le début du bloc mémoire et j'initialisais les autres indices au fur et à mesure que les threads entraient dans la fonction, avec un truc du genre :

      table[canal] = table[0] + width * height * (id_thread % nb_plans)

      Le % est pour diminuer la quantité de mémoire à allouer, vu que tout était fait à la volée et stocké illico dans des fichiers. Donc à un instant t, il n'y avait besoin que de MIN(m, nb_plans) buffers (et avec des images de 60000x60000 pixels, ce n'est pas du luxe, même avec quelques Go de RAM). Donc, l'oeuil averti aura tout de suite vu mon erreur : si le thread 1 traitait le canal 0, l'instruction se transformait en :

      table[0] = table[0] + width * height

      Pouf, décalage du buffer, en fonction de l'ordonnancement des threads, écriture en zone mémoire non allouée, plantage aléatoire. Par chance, je suis tombé sur un fichier à 11 plans qui merdait quasi systématiquement.

      Rhâa, deux jours :-(
  • # java

    Posté par  (site web personnel) . Évalué à 1.

    tiens au passage mais tu le sais peut-etre deja : si tu avais utilisé un éditeur qui indente ton java (emacs, eclipse) tu aurais vu tout de suite le problème (sauf si tu utilises un niveau d'indentation de zéro auquel cas mes condoléances et au revoir).
  • # Petit test avec kjscmd (l'interpreteur JS de KDE)

    Posté par  . Évalué à 3.

    Non seulement il indique la ligne mais en plus il donne l'indication sur l'erreur :

    Uncaught SyntaxError exception at: 10
    Invalid regular expression


    Bref JevaScript n'est p-e pas le meilleur langage (perso quand je dois en faire c'est limite si je préférerais pas me pendre), mais avec un interpréteur pas muet c'est quand-même plus agréable !
  • # Moi, je dis :

    Posté par  . Évalué à 2.

    Ben déjà, si tu avais utilisé [a-zA-Z]{6,9] à la place de [a-zA-Z][a-zA-Z]{5,9], tu aurais peut-être passé un peu moins de temps :-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.