• J'en chie au boulot en ce moment, donc ce poste va dans la categorie boulot (categorie dont tout le monde se fout), mais vraiment, ca me defoule...
    Je posterai sur des trucs plus concrets juste apres.
    Si vous vous appelez Xav, ne lisez pas la suite (Non Xav, la fonction de la derniere fois ne m'excite pas, elle me degoute plutot - si j'ai bien compris tu as eu la meme reaction- et je voulais juste faire partager mon malheur).

    *** mode java ***
    Juste quelques points que j'aimerais bien gueuler a la face des mes chefs (enfin ceux qui sont responsables du code source du programme principal, cad les criminels), si possible en les frappant avec un objet contandant de bonne taille (marteau, clavier, imprimante...)


    - declarer les variables "protected" :
    C'est un moyen d'acceder/modifier facilement des donnees chez une classe du meme package. On deroge un peu a la regle d'or de l'encapsulation totale dans le cas de classes fortement liees (meme package), car on estime qu'il est acceptable de laisser ces classes fortement correlees ET cette forte correlation permet de tabler sur le fait qu'on ne risque pas de rendre l'etat d'un objet incoherent en court-circuitant les chemins etablis.
    Ca n'est PAS (EN AUCUN CAS) un moyen de se foutre de l'encapsulation en foutant tout ce qu'on veut dans un package (GUI Swing, Classes gerant l'impression, Classes parsant du XML...), et en appelant tout ca quand on veut directos.
    Resultat : ca fait trois jours que je veux JUSTE imprimer un diagramme avec mon programme, ce devrait etre tres simple, MAIS comme dans ce bordel infame, les classes d'impression sont fortement correlees a l'affichage, je me gratte encore la tete pour les decoupler


    - les commentaires, c'est bien, mais en japonais c'est con... la doc aussi c'est bien, dommage que personne n'ait eu le courage de faire une javadoc.... Quand on a environ 150 classes pour un systeme de prod, des tests de regression aussi c'est bien (junit pour le riche client, cactus pour le code serveur J2EE)


    - la separation des contraintes : si tu as 10 EJBS qui vont acceder a la meme base, ce serait bien d'avoir une classe qui appelle une connection, plutot que d'avoir une fonction dans CHAQUE putain d'EJB pour ca...


    - le concept d'EJB :
    session : interface avec le client (avec ou sans session) - Note directement via RMI, ou appele par une servlet - , appelle les entity beans et contient le code "entreprise"
    entity : represente un objet (=tuple) de la base de donnees, c'est a dire une donnee persistante, resistante a la deconnexion.

    ET NON
    session : un genre de gros java bean qui attaque la base de donnees direct avec du gros SQL qui tache, et bourre les resultats directement a une servlet
    entity : tiens c'est quoi ca ???

    Resultat : code acrobatique et tres amateur (confondre EJB et java beans) avec en plus un cote serveur qui melange allegrement code "entreprise" et representation des donnees (essaye de changer tes tables que je me marre...)


    - le finally
    finally permet, par exemple, de fermer des streams dans le cas d'une fonction presente dans un try et qui declenche une erreur catch. C'est cool de ne pas avoir des streams encore ouverts en cas d'exception non critique
    Merde, pensez try-catch-finally plutot que try-catch des que vous risquez de devoir faire du menage pour chaque cas de figure (stream, connection bd, ...)


    Je pense qu'a part Pob, personne ne lira ca, mais ca fait du bien :)








    3 commentaires
  • **
    Je viens de creer un theme "Geek et travail" ou je vais un peu parler boulot, parfois ca n'aura pas beaucoup de sens pour les gens sains d'esprit, mais pour les autres, ce devrait etre assez comique
    **

    Je viens de tomber sur une des plus belles fonctions que j'ai jamais vues !!!
    Attention, la fonction drawPolyline() en provenance directe du Japon...

        private void drawPolyline (ImsObject obj)
        {
            double prev_x = 0.0,prev_y = 0.0;
            boolean first = true;
            Vector property = obj.getAssociation ("has_property_of");
           
            if ( property != null && property.size () > 0 )
            {
                for ( Enumeration e = property.elements (); e.hasMoreElements (); )
                {
                    AssociationInstance a = (AssociationInstance) e.nextElement ();
                    TypePair obj2 = (TypePair) a.elementAt (3);  //roleObject[2]
                    TypePair obj3 = (TypePair) a.elementAt (4);  //roleObject[3]

                    //for( int i = 2; i < a.size(); i++ )
                    {
                        if (obj2.item.equals ("width"))
                        {
                            pointwidth = obj3.toDouble ();
                        }
                        else if (obj2.item.equals ("colour"))
                        {
                            double refdir[] = new double[3];
                            refdir[0] = refdirx;
                            refdir[1] = refdiry;
                            refdir[2] = 0.0;
                            ImsSet v = (ImsSet) obj3.item;
                            Red = ( (TypePair)v.elementAt (0)).toDouble ();
                            Green = ( (TypePair)v.elementAt (1)).toDouble ();
                            Blue = ( (TypePair)v.elementAt (2)).toDouble ();
                            //this.addLine(x1,y1,x2,y2,width,new Color((int)R,(int)G,(int)B));
                            setColor (Red,Green,Blue);
                        }  // end else
                    } //end block
                }  //end for (Enumer...
            }
            //read points
            {
                Vector assembly = obj.getAssociation ("is_assembled_from");
               
                if ( assembly != null && assembly.size () > 0 )
                {
                    for ( Enumeration e = assembly.elements (); e.hasMoreElements (); )
                    {
                        AssociationInstance a = (AssociationInstance) e.nextElement ();
                        for ( int i = 2; i < a.size (); i++ )
                        {
                            TypePair tp = (TypePair) a.elementAt (i);
                            if ( tp.type == ImsObject.SET )
                            {
                                ImsSet v = (ImsSet) tp.item;
                                for ( int j = 0; j < v.size (); j++ )
                                {
                                    TypePair tp1 = (TypePair) v.elementAt (j);
                                    ImsObject setObject = getObjectByName ( (String) (tp1.item));
                                    {
                                        //drawing points
                                        Vector property1 = setObject.getAssociation (
                                        "has_property_of");
                                        if ( property1 != null && property1.size () > 0 )
                                        {
                                            for ( Enumeration e1 = property1.elements (); e1.hasMoreElements (); )
                                            {
                                               
                                                AssociationInstance a1 = (AssociationInstance) e1.nextElement ();
                                                TypePair obj2 = (TypePair) a1.elementAt (3);  //roleObject[2]
                                                TypePair obj3 = (TypePair) a1.elementAt (4);  //roleObject[3]
                                                //for( int i = 1; i < a1.size(); i++ )
                                                {
                                                    if (obj2.item.equals ("location"))
                                                    {
                                                        ImsSet v1 = (ImsSet) obj3.item;
                                                        x1 = ( (TypePair)v1.elementAt (0)).toDouble ();
                                                        y1 = ( (TypePair)v1.elementAt (1)).toDouble ();
                                                        CalculateMinMax (x1,y1);
                                                        if (first)
                                                        {
                                                            first = false;
                                                            prev_x = x1;
                                                            prev_y =y1;
                                                        }
                                                        else
                                                        {
                                                            addLine (obj.getName (), x1, y1, prev_x,
                                                             prev_y,pointwidth,new Color ( (float)Red,
                                                             (float)Green, (float)Blue));
                                                            prev_x = x1;
                                                            prev_y =y1;
                                                        }
                                                    }
                                                }
                                            }
                                        }

                                        //drawing points

                                    }
                                }
                            }
                            else

                            {
                                ImsObject roleObj = getObjectByName ( (String) (tp.item));

                                {
                                    //drawing points
                                    Vector property1 = roleObj.getAssociation (
                                    "has_property_of");

                                    if ( property1 != null && property1.size () > 0 )

                                    {
                                       
                                        for ( Enumeration e1 = property1.elements
                                         (); e1.hasMoreElements (); )

                                        {
                                            AssociationInstance a1 =
                                             (AssociationInstance) e1.nextElement ();
                                            TypePair obj2 = (TypePair) a1.elementAt (3);  //roleObject[2]
                                            TypePair obj3 = (TypePair) a1.elementAt (4);  //roleObject[3]

                                            //for( int i = 1; i < a1.size(); i++ )


                                            {
                                                if (obj2.item.equals ("location"))


                                                {
                                                    ImsSet v = (ImsSet) obj3.item;
                                                    x1 = ( (TypePair)v.elementAt (0)).toDouble ();
                                                    y1 = ( (TypePair)v.elementAt (1)).toDouble ();
                                                    CalculateMinMax (x1,y1);
                                                    if (first)
                                                    first = false;
                                                    else


                                                    {
                                                        addLine (obj.getName (), x1, y1, prev_x,
                                                         prev_y,pointwidth,new Color ( (float)Red,
                                                         (float)Green, (float)Blue));
                                                        prev_x = x1;
                                                        prev_y =y1;
                                                    }
                                                }
                                            }
                                        }
                                    }

                                    //drawing points
                                }
                            }
                        }
                    } //for (Enumeration...
                }
            }
        }

    La bonne nouvelle c'est que ce code ne m'interesse pas pour ce que j'ai a faire, mais je l'ai trouve en cherchant d'autres fonctions souterraines du programme. Ah au fait pour les petits malins (il y en a surement) qui vont me dire "OK, c'est moche, mais si la fonction eset bien documentee, ca passe", je vous rassure tout de suite, il n'y a meme pas une javadoc...
    Tiens, je donne toute mon estime a celui qui a le courage de lire ca et de me dire ce que ca fait (a part tracer une (poly?)ligne). Quand je vois un bout de code entoure par 4 boucle for et 2 if, je me dis que le monde est malade...




    1 commentaire


    Suivre le flux RSS des articles de cette rubrique
    Suivre le flux RSS des commentaires de cette rubrique