Finalmente

Thursday July 29th 2004, 10:16 pm
Filed under: General

Finalmente entré a Globant. Estoy con bastantes buenas expectativas con este trabajo. Un proyecto que empieza de cero, con gente nueva y aparentemente bien capacitada, ya que el proceso de selección fue bastante exigente. Además es una empresa que aparentemente dá bastantes beneficios a sus empleados, de movida estar en relación de dependencia ya es algo importante.



Qué tienen en la cabeza?

Saturday July 17th 2004, 9:24 pm
Filed under: Java

Resulta que conseguí un trabajito en RentACoder para arreglar unos bugs a un sistema, y estoy viendo como esta hecho.
Por ética no voy a dar nombres, pero aparentemente es un sistema comercial, desarrollado como portal vertical para una industria determinada.
Para empezar, ponen: “It is an object-oriented database implemented in a relational system”. No, no quiere decir que implementaron su propio OR mapping (lo que ya sería bastante estúpido), sino que cada tabla mapea exactamente a una clase, cada registro tiene un OID, y hay una tabla Link, que mapea OIDs de una clase con OIDs de otra, individualmente, o sea que hay una fila por cada OID que se relaciona con otro. O sea, para qué preocuparse por primary keys, foreing keys, constraints, etc, etc, si todo el mundo sabe que no sirven para nada?
Esto por supuesto hace que cualquier query que involucre un join sea imposible de hacer, y lleve a hacer asquerosidades como lo siguiente:


               Vector v = roleTable.findMembersByRole(stateObject.role);
                stateObject.list = new Vector();
                for(int i=0; i<v .size(); i++) {
                    Member member = (Member) v.get(i);
                    if (!"".equals(stateObject.email)) {
                        String email$ = member.getEmail().toLowerCase();
                        if (email$.startsWith(stateObject.email)) stateObject.list.add(member);
                    } else {
                        String lastname = member.getLastname().toLowerCase();
                        if (lastname.startsWith(stateObject.pattern)) stateObject.list.add(member);
                    }
                }

Como verán, al no poder hacer un join con la tabla de usuarios, tienen que recorrer todos los resultados de roles y filtrarlos en el código, haciendo otro query por cada uno (el famoso n+1) . No importa que haya 30 años de experiencia en desarrollo de base de datos, este programador creé saber mas que todos y que esta solución que implementó es eficiente.

Y vean esto:


public class RoleTable extends Table {
    public static Vector /* of Members */ findMembersByRole(String _role) {
        Vector results = new Vector();
        try {
            RoleTable roleTable = new RoleTable();
            MemberTable memberTable = new MemberTable();
            Vector v = roleTable.find(Role.ROLE+"='"+_role+"'", Role.USERNAME);
            for(int i=0; i<v .size(); i++) {
                Role role = (Role) v.get(i);
                Vector x = memberTable.find(Member.EMAIL+"='"+role.getUsername()+"'", null);
                if (x.size() > 0) {
                    results.addAll(x);
                }
            }
        } catch (Exception ex) {
            Debug.error(ex);
        }
}

Estando en un método de RoleTable, el tipo instancia otro RoleTable para llamar a find(), en vez de hacer this.find(). Sin duda muy eficiente, si.

Esta es la verdadera razón de porque hay tantas fallas y tantos proyectos de software fracasan, porque esta lleno de programadores que son unos inútiles e ignorantes, se ponen a laburar de algo apenas con una vaga noción. Imaginen si hubiera médicos ejerciendo con este nivel de capacitación?? Se atenderian con ellos? Entonces porque les dan trabajo a esta clase de programadores?


| show comment »

De JBoss, nada.

Thursday July 15th 2004, 9:41 pm
Filed under: General

Al final tuve la entrevista con el inglés. Creo que me fue bastante bien, ya que de los 45′ que duró, el tipo no paró de preguntarme, desde Java básico, hasta metodologías., y sólo no supe contestar 3 preguntas.
JBoss lo nombró al final solo para decirme que lo usaban, y solo hubo algunas preguntas conceptuales de EJB.
Las preguntas que no supe contestar fueron:

    Cuál es la diferencia entre Reader/Writer e InputStream/OutputStream?
    Para que sirve el keyword volatile ?
    Cómo haría para escribir un archivo en BIG-5?

El tipo estuvo bastante macanudo, y por lo que me dijeron después, quedó bastante conforme con el nivel de las entrevistas. Veremos que pasa.



Inglés o castellano?

Friday July 09th 2004, 10:27 am
Filed under: General, Java

Estoy pensando si escribir esto en inglés o en castellano.
Estaría bueno que sea bilingüe, pero es mucho trabajo :) y este software no lo soporta (creo).
Creo que me voy a inclinar por el inglés, cualquier geek que se precie tiene que poder leer en inglés, haya nacido en Buenos Aires, China o Madagascar.
Después voy a publicar un breve ensayo sobre el inglés.



Nuevo blog! (y JBoss)

Friday July 09th 2004, 10:16 am
Filed under: General, Java

Hoy es feriado, y tengo que pasar gran parte del fin de semana estudiando JBoss y EJB en general, para la entrevista que voy a tener el miércoles que viene con Dan Leuck en Globant, un british que viene exclusivamente para las entrevistas. Según me dijeron, el tipo hace mucho énfasis en patterns y todo lo que signifique “hacer las cosas bien”. Veremos que tal me va.

Es raro, los últimos meses ma la pasé leyendo por muchos lados que JBoss es una porquería, muy lento y que todos sus developers son una manga de engreídos soberbios. Parece que finalmente voy a tener la oportunidad de verificar la veracidad de todo esto (tampoco hay que creer todo lo que se lee en los blogs).


| show comment »