lunes, 18 de abril de 2016

JSConf 2016


Fui a la JSConf con el equipo de MELI Frontend, compañeros del area de prevención de fraude  y algunos de las demás areas de IT.

Estuvo buena, ya había ido a la del año pasada, pero me dejo una sensación a poco debido a lo que esperaba:


  • Falto hablar de TypeScript
  • Falto hablar de Angular
  • Algunas charlas muy distinto de lo que hubiera esperado, como por ejemplo de como versionan node.




Igualmente, rescato haber conocido a varios de los que vinieron de Argentina de MELI, y también hubieron un par de charlas muy interesantes, que te muestran el poder que tiene JS hoy en día, charlas donde agarraban 3,4 APIS del browser, y hacían magia.



Lo que me llevo es que cada vez más el paradigma web esta orientado a MicroServicios, esto lleva varios desafios, de como construirlos correctamente, y además que estos sean eficientes.
La web de hoy en día tiene que ser rápida, flexible y que se adapte a lo que el usuario quiere ver.

Estoy convencido de cada conf más que voy, que lo importante es ir, para estar actualizado, no vas a cambiar a corto plazo con una de estas conferencias, pero como diria Steve Jobs en su charla de Stanford, hay que hacer las acciones, y esperar que en el futuro se conecten los puntos, es imposible hacerlo ahora!

jueves, 31 de marzo de 2016

Remplazar variables groovy dado un string dinámico y un modelo

Algo que es muy  util en groovy son los GString, que nos permiten rápidamente armar un string en base a variables.
Ej : "variable a vale :${a}" 

Algunas veces necesitamos dado un GString y un modelo obtener ese texto remplazado.
Esto se empieza a complicar cuando necesitamos que ese texto sea dinámico, ya que no podemos simplemente harcodearlo en el código, y este requerimiento muchas veces viene cuando necesitamos crear alguna especie de ABM, como un sistema de templates para alguna utilidad, mensajes predefinidos, etc.
Una de las formas de solucionar esto, es usando un SimpleTemplateEngine, que bindeandolo con el modelo podemos obtener el remplazo de las variables.

Por lo que un caso de uso interesante, es tener un ABM, permitir dinámicamente agregar/quitar variables, y luego al procesarlo solamente es obtener el string dinámico desde la base, y aplicarle nuestro modelo.


Dejo el Snippet de código:


1
2
3
4
5
def getGstring(subject, binding ){
        def engine = new SimpleTemplateEngine()
        def template = engine.createTemplate(subject).make(binding).toString()
        return template
    }

miércoles, 23 de marzo de 2016

Snippets de código a html

Buscando como poner los snippets de código en un formato "lindo" me encontre con la web
hilite.me

La web le pones el snippet como texto ,y te devuelve el html ya formateado, con los estilos inline, ideal para postearlo en un blog por ejemplo :p

Pasear fechas que no sabemos el formato

Muchas veces ocurre que necesitamos en base a un string pasear fechas.
Lo normal es escribir una regex para esa fecha en particular, pero cuando queremos darnos cuenta(si consumimos distintos servicios) nos encontramos que tenemos distintas regex distribuidas por todo el código.

La mejor forma que encontré de lidiar con esto, es tener las regex más comunes que usamos en la empresa, y un fallback genérico con el formato mínimo que suelen compartir, y realmente nos ha dado buenos resultados.
Dejo el snippet en groovy, la idea es pasarle el string, y que te devuelta la fecha parseada, haciendo el best-effort por parsearla lo más precisamente posible. Debemos hacer el chequeo de NULL ya que este método puede no devolvernos la fecha en caso que no pueda parsear el string. Además depende de el manejo de logs que tengamos, puede que si no tengamos cuidado contaminemos los logs importantes con esto(en los casos que falla)



    def parseDateTime(String date){
        def returnDate
        for(it in ["yyyy-MM-dd'T'HH:mm:sss'Z'", "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "yyyy-MM-dd"]){
            try{
                returnDate =  new Date().parse(it, date)
                break
            }catch (Exception e){
                log.info "${date} no pudo ser parseado con el dateFormat ${it}"
            }
        }
        return returnDate
    }