Collejón enorme que me he ganado.
La semana pasada no hubo lacarrismos. El motivo fácil, sencillo y simple. Estaba muy muy muy liada. Y cuando no estaba liada, estaba desconectando del mundo mundial.
Ahora quiero plasmar alguna de las cosas que aprendí antes que se las lleve el cierzo. A destacar que vinieron la tribu de BeCode y que declaro ahora en vivo, en directo y por escrito mi amor puro y profundo hacia ellos.
Programming
Fin del programa de migración: El programa de migración llegó a su fin y como todo que termina, merece la pena hacer la vista atrás y sacar conclusiones. Este programa era heredado y la experiencia ha sido cuanto menos, curiosa.
El qué: Programa para migrar de ficheros .csv a bases de datos mysql. Los ficheros csv son obtenidos por otra empresa. Hay que tener en cuenta las claves foráneas y que los datos sean correctos para que no haya error.
El cómo: El programa lee unos ficheros .csv, comprueba mediante expresiones regulares que los datos correctos valiendo de unos ficheros .properties y realiza dinámicamente las instrucciones de inserción en la base de datos destino. Existe una clase de testeo por cada fichero csv de forma que genera los csv a medida y valida que detecta bien los errores, los datos buenos y realiza correctamente las inserciones.
Primeras observaciones
El programa se hizo genérico y no específico para una base de datos para que modificando los ficheros .properties, uno pudiese indicar las tablas y las columnas para la inserción. La realidad es que existían muchas restricciones que al final te hacían programar específicamente para la base de datos y eso no mola. Por ejemplo obtener el id de instalación a partir del código de instalación.
Por otro lado el programa lanzaba las instrucciones desde el programa algo que ralentizaba totalmente la ejecución.
Conclusiones:
El programa funciona y realiza importaciones completas. Pero! siempre hay peros.
¿Cómo lo haría ahora? No lo tengo nada claro. Hacerlo genérico siendo que al final está sujeto a más agentes, no es buena idea.
En este caso y dado el cero volumen de migraciones de otras plataformas/programas a la nuestros productos hubiera optado por una solución más simple haciendo llamadas a las propias tablas y columnas. En caso de programar el caso genérico buscaría la solución obteniendo directamente la información de los datos de la tabla de la base de datos (varchar, int, etc) y de inputs metidos por pantalla. Al menos no de un properties.
Utilizar un fichero properties ha sido un dolor. Un dolor horrible y feroz porque no es verboso ni compilable. Tienes a confundirte muy fácilmente. Por ejemplo. ¿Qué es mejor?
field.2.type=Integer
field.2.checkFunction=checkRegex
field.2.check=[1-7]
ó dentro del código
element.checkRegex( [1-7])
Más caña. Ejecutar las instrucciones desde el programa es inviable. Tardaba la friolera de 3 horas en importar una base de datos (los históricos eran auténticos monstruos, el total de csv era unos 25: suma y sigue). Lo mejor hubiera sido escribir sentencias sql en un fichero .sql y volcarlas en un fichero para pasarlo directamente por el servidor teniendo en cuenta la salida de error.
Sobre los test. Los test han hecho que el mundo sea un lugar mejor. Cada cambio en el core del programa suponía romper unos cuantos test que si no de ninguna de las formas y las maneras me hubiera dado cuenta. Esto da estabilidad, confianza y un programa robusto que permite cambios a última hora.
Y para terminar. Este programa no se le dedicó el suficiente tiempo en plantearlo, ni en estructurarlo. Pensar no es una pérdida de tiempo, es una inversión muy rentable a corto plazo y más a largo. No solo consiste en realizar una cosa sino desarrollar una solución en un cómputo en el que hay que tener en cuenta el volumen, la carga, las condiciones, la evolución y todo.
Y para rematar: esta actividad la hubiese subcontratado o pagado un programa específico para ello. ¿Por qué tienen miedo las empresas en subcontratar o gastarse dinero? Existen empresas que se dedican a ello y ya tienen las herramientas para llevarlo a cabo.
Eventunis
Ha habido mucha salsa y miga en estas semanas de los cuales me gustaría escribir un post de cada uno de ellos. Por ahora dejo un mini-resumen. Por orden de aparición:
VI Encuentro de Gestores de Negocios Digitales en Zaragoza:
David Francos y yo recibimos como organizadores del Betabeers una invitación por Emilio Marquez Espino para asistir a este evento. Sinceramente, me hizo mucha ilusión que contasen con nosotros. No pude faltar.
Mis conclusiones: era una forma diferente de hacer Networking. El jefe jefazo y crack de ceremonias, Emilio Marquez, conseguía que al final supieses a qué se dedica cada persona, qué opiniones o razonamientos tiene y si es medio competente.
Betabeers Zaragoza
Ponentes: Héctor Rodriguez con MindFulness, Fidel de la Hoya con InGym.
Mis conclusiones: el contenido de las charlas fue muy muy bueno. No se centraron en el producto sino en explicaron procesos en el desarrollo, buenas y malas prácticas, etc. Al final te quedas con la sensación de que has aprendido de sus experiencias.
La Zaragozana estuvo de 10. ¡Nada más y nada menos que el evento fue en la fábrica de Ambar! GRANDE.
La gente que hace Betabeers estuvo INCREÍBLE. Mis sensaciones son un buen rollo, una complejidad, una comunidad. ¡Qué grande! El post está en camino.
Los locos de la furgo Xavi Gost, Aitor Sanz y Luis (Luis) con la idea de carretera y manta hicieron parada obligatoria en Zaragoza. Fueron 3 días intensos, productivos y muy muy divertidos. ¡Pero qué majos majísimos que sois!
Design Patters: curso de Xavi. Repaso de aproximadamente 15 patrones de diseño con sus ejemplos, sus chascarrillos y toda la miga. 100% recomendado.
¿Cómo completar tu equipo si tu start-up te pide crecer? : taller by Luis y Aitor. Muy interesante utilizar Story Mapping para pensar y sacar conclusiones. Sí: sentarse, conversar y pensar en equipo. En concreto nos contaron la experiencia de utilizar Story Mapping en reestructurar una empresa + contratar + subcontratar.
Coding dojo: practicamos por parejas el mítico 3 en raya. Tuve el lujazo de estar con Xavi en la práctica. De esta forma aprendí: 1 – saber cómo hacer una kata, 2 – dar importancia a refactoring , 3 – toquitear con javascript. Si no sabes que es un Coding Dojo ni de qué estoy hablando, echa un vistazo al post del agile aragón.
Fiesta de la cerveza: gran noche para despedir estos mozos 🙂 Locurón!!
Geek Talks
Hubo tiempo para hacer las esperadas charlas de inglés mensuales. Apunta! el primer miércoles del mes! Join the meetup group!!
Estábamos al menos 10 personas para la dinámica. Esta vez nos juntamos en trios para hablar de eventos/conferencias que habíamos estado. Cada 10 minutos rotábamos con un algoritmo de la improvisación. El objetivo era escuchar y comprender las charlas de otros porque en la siguiente ronda te tocaba explicarlo a otro grupo.
La cena y la compañía de 10. Aquí os dejo una fotico de la Jamonería 😉 Gracias Félix!
Han sido un par de semanas muy grandes. Con muchas sorpresas, muchos cambios, mucho estrés, muchas visitas. No obstante, cada vez me doy más cuenta, que me gusta y disfruto lo que hago.
Llevo un tiempo pensando, meditando y reestructurando mi vida. Creo que por fin he encontrado mi camino.
Con esto y un bizcocho que tengáis una bonita y preciosa semana.
A ser felices y comer perdices!