lunes, 7 de diciembre de 2009

Inventos familiares

Desde hace poco tiempo llevo oyendo hablar de los nuevos neumáticos sin aire de la marca Michelin, la verdad es que puede parecer increíble pero pruebas de ello podemos encontrar en la red. Os pongo aquí un ejemplo de lo que os comentaba.


Como se puede ver en el vídeo, lo que la marca francesa ha inventado ha sido como poner unos pequeños muelles o tiras elásticas que sujetan la banda de rodadura a la llanta. Es un sistema ingenioso y que evitará el problema de los reventones.
Cuando esta información apareció por la red y empecé a enterarme realmente de lo que era el invento, pensé: "Esta gente de michelin sabe mucho!" y decidí comentarlo con mi padre. Y aquí llegó mi sorpresa, mi padre me comentó que la idea de realizar una banda de rodadura maciza y que lo que amortiguaba los golpes era la zona que va desde el eje a ella, no era un invento de ahora.
Antiguamente, los neumáticos eran macizos y la única amortiguación que existía era la de las ballestas que llevaban los coches en los ejes. No sé exactamente en de que año estamos hablando, aunque prometo averiguarlo, mi bisabuelo (que se dice pronto!) ya inventó un sistema similar al que hoy está probando la marca Francesa.

Él lo llamo la "rueda de muelles" y el invento se basaba en una llanta cuyos radios estaban formados por amortiguadores. Estos al igual que los ingenios elásticos de Michelin absorben los pequeños golpes evitando así tener problemas con los posibles reventones. Claro está, que el invento consta de 19XX, y no se tenían los mismos medios que hoy y que aún no existían los neumáticos como los conocemos actualmente rellenos de aire. Por otra parte, tanto los neumáticos con aire como los nuevos sin aire, permiten que la llanta tenga un ligero desplazamiento para evitar la fuerza centrifuga, mientras que el invento de mi bisabuelo no estaba preparado para ello. También tengo que decir en favor de Santos Rubio, que era como se llamaba mi antepasado, que en aquellos años los automóviles no alcanzaban grandes velocidades, así que la fuerza centrífuga era algo que no debería sufrirse. Es curioso saber que el invento de Santos no llegó a cuajar por la aparición del neumático con aire y que ahora la posible muerte del mismo sea a manos de un invento tan similar como la Tweeltire, que es una versión moderna de aquella que no llego a ver la luz.

En esta fotografía tomada para un periódico local llamado el Mercantil Valenciano, se puede ver a Santos con unos amigos luciendo su invento. Quizá un caballero como Él, en una época como la actual, hubiese sido uno de los ingenieros de Michelin o quizá alguien importante. Lo que realmente sorprende es que en aquella época pudiese un hombre idear cosas que a nosotros aún hoy, no se nos hubiesen ocurrido. Cada vez que indago más en mis antepasados reconozco que más sorpresas me llevo tanto buenas como malas, pero en este caso me he sentido orgulloso de mi bisabuelo, aunque no llegué a conocerlo.

sábado, 31 de octubre de 2009

Familia, mi árbol genealógico.

En ocasiones nos olvidamos de lo importante que es la familia, y siempre tenemos que tener presente que ellos son los únicos que están ahí pase lo que pase.
Bien, por razones personales me he visto obligado a volver a mis orígenes y realmente es apasionante saber de dónde viene uno. A todos nos ha gustado escarbar en los cajones de la abuela buscando aquellas fotos de antepasados y que te expliquen quienes son y en que destacaron en su tiempo. No hace falta tener un abuelo llamado Albert Einstein, Mi abuelo se llamaba Paco, pero para mi fue el mejor carpintero del mundo y con eso me basta.
Esto me ha llevado a interesarme por el pasado de mi familia, hasta el punto de recoger información, fotos, profesiones, fechas de nacimiento, defunciones, e incluso he visitado aquellos pueblos donde mis antepasados han estado viviendo.
Mi problema se creo cuando he llegado a tener un montón de papeles y no he sabido como administrarlos. Pues bien he aquí la razón de este post.
Mi idea como la de muchos de vosotros, supongo, fue hacer mi árbol genealógico. Así que busqué plantillas de word, de OpenOffice, excel... en fin que finalmente encontré un programa que te crea el árbol genealógico además almacena gran cantidad de datos sobre cada persona, el programa se llama Family Tree Builder un nombre bastante acertado, ¿verdad?
El soft lo podemos descargar gratuitamente de http://www.myheritage.es/
No sólo puedes crear tu árbol con el software sino que puedes compartir tu árbol con los demás, es como la red social de los árboles genealógicos.
Os lo dejo ahí como curiosidad.

jueves, 26 de marzo de 2009

Función recursiva en Javascript.


Hoy he estado en el trabajo rompiéndome los "cascos" haciendo un proceso web que consta de una tabla que muestra unos valores y que en cada una de las filas de la misma tiene un botón para eliminar la fila...
El caso es que por OBLIGACIÓN en el trabajo se usa ASP .NET, y aunque no soy un detractor radical del mismo, he de decir que me gustan más otros lenguajes web como PHP o Rails.
Bien, tengo que decir que soy novato en el mundo del .NET e intenté empezar con Ajax y tuve que instalar unas cosillas y más cosas... (Esto es otra historia).

En fin, que he empezado a introducir en el trabajo Scriptaculous con .NET y es sencillamente ESPECTACULAR! Así que la carencia de librerías Ajax para .NET en mi trabajo lo estoy supliendo con javascript y scriptaculous como os contaré en post posteriores...
Voy al grano, que me enrollo como una persiana, (lo primero es reconocerlo).

Total que después de generar una llamada Ajax para eliminar de la base de datos el valor seleccionado en la tabla y en ese preciso momento llegó mi problema, ¿cómo hago desaparecer la fila que acabo de borrar de la base de datos sin recargar la página?
La primera idea es utilizar el botón que pulso, pero con la llamada Ajax y las sucesivas funciones que utilizo, no podía pasar el valor, o al menos no sé como hacerlo. Aunque lo que si que podía llegarle a la función que borrase la fila es el valor seleccionado. Así pues debería conseguir coger el objeto tabla y recorrerlo hasta encontrar el valor que acabo de borrar y eliminar la línea.

Buscar en vez de crear...

Esto significa que hay que utilizar Document Object Model (DOM) y crear una función recursiva, así que por ahorrar trabajo y tiempo pensé: "Seguro que en internet alguien lo ha hecho con anterioridad".
Le pregunté al señor Google sobre las funciones recursivas y el resultado era siempre la misma función, cosa que confirma una de mis absurdas teorías que dice: "Una persona publica la función original y 200000000 de bloggers la copian". La función COPIADA es la siguiente...



function factorial(numero) {
   if (numero > 0) {
      return numero * (factorial(numero - 1));
   } else {
      return 1;
   }
}


La podemos encontrar en varios idiomas y colores, así que al final me la he tenido que currar y cuando ha funcionado he pensado... dejaré que se la copien 200000000 bloggers y que la usen otros tantos desarrolladores que lo necesiten, si es que alguien llega a leer este post.

Tanto lío para una función tan corta.

Al final la función no es gran cosa pero permite encontrar una fila, pasándole como parámetros el objeto tabla y el texto que debe encontrar.
El funcionamiento de la función es el siguiente, se le pasa la tabla y el texto en la variable orden y se llama recursivamente hasta encontrar el valor que buscamos.



function buscaLinea(tabla,orden){

    //iniciamos el valor que devolveremos a ""
    objeto = "";
    //recorremos los hijos del objeto que se le pasa a la función
    for (var i=0; i< tabla.childNodes.length; i++){

        //llamada recursiva donde pasamos el nodo hijo y el texto.
        var objeto = buscaLinea(tabla.childNodes[i],orden);

        //Comparamos el valor del hijo con el texto
        if (tabla.childNodes[i].nodeValue != orden){
            //No lo hemos encontrado :o(
            //Pero comprobamos que se haya encontrado con anterioridad
            //y si es así devolvemos el objeto encontrado.
            if (objeto!="")
            {
                return objeto;
            }
        }
        else
        {
            //EUREKA! lo hemos encontrado.
            //Ahora objeto valdrá el objeto #text que contiene el texto
            var objeto = tabla.childNodes[i];
            //y devolvemos el nodo <TR> (que es la fila de la tabla)
            return objeto.parentNode.parentNode;
        }
    }
    //Este return se realiza en el caso de que no hayamos encontrado el objeto y tampoco con anterioridad
    return "";
}


Esta función la he probado con Internet Explorer y Firefox y ha funcionado.
Espero que os sirva.