blog de betotto

Java safe null

Todos tenemos a nuestros maestros en temas de desarrollo, personas que seguimos, quienes siempre están buscando cambiar lo cotidiano, quienes tienen tienen una gran idea o quienes pueden compartir su pasión por algo en particular, por el momento estoy siguiendo al Profesor Frisby, en estas cosas de programación funcional y composición de funciones. Tiene un curso completo de este tema gratuito (como dice mi esposa del verbo “nel no pago”) para javascript, Esta es la liga: Professor Frisby Introduces Composable Functional JavaScript.

Porque como se darán cuenta no soy muy bueno para explicar, pero el si jejej, y si quieren tener mas detalles del porque los pequeños bloques de código que ultimamente he estado poniendo, en ese curso podran entenderlo mejor o confundirse mas, a saber de cada quien :P.

Java Magic Box

Y siempre si se pudo, me costo mas trabajo del que pensaba, pero pude escribir la version de la Caja que en Javascript me parece muy simple en Kotlin parece que estoy escribiendo marciano y en Java, pues ni se diga, la verdad es que no parece java :P, pero lo importante y tal vez me haga regresar a escribir java, es que el soporte funcional es bueno (obvio no es un lenguaje puramente funcional, si no, se me enojan los clojurianos).

Pero si puedo escribir codigo como este, para servicios REST y otras moneria ya me imagino las posibilidades, bueno les dejo el codigo:

import java.util.function.Function;

class Box<T>  {

    private T x;

    public Box(T x) {
        this.x = x;
    }

    <R> Box<R> map(Function<T, R> f) {
        return new Box(f.apply(this.x));
    }

    <R> R fold(Function<T, R> f) {
        return f.apply(this.x);
    }

    String inspect() {
        return "Box(".concat(this.x.toString()).concat(")");
    }

}

public class Main {

    public static void main(String... args) {

        Box<Integer> num = new Box<String>("  64  ")
                .map((String x) -> x.trim())

Kotlin Magic Box

Un monad es una tecnica que nos permite crear tipos propios, extender funcionalidades de una meanera limpia y hacer tranformaciones entre tipos. Me gusto mucho en kotlin porque elimina el estar escribiendo tantos tipos todo el tiempo que a veces me parecen inecesarios (esto opinion muy personal), en este caso vamos a escribir una clase Caja que nos permite aplicar funciones de una forma continua (encadenada), manteniendo un solo closure (parcialmente, en kotlin no he hecho pruebas de rendimiento para ver cuanta memoria usa, pero en javascript el incremento en memoria es minimo).

En el ejemplo podemos ver como cambiamos de un numero en String para despues limpiarlo y convertirlo a su equivalente en carácter, lo anterior de una manera limpia, sin hacer uso mas que de una sola variable.

En el archivo Main.kt colocamos lo siguiente:

class Box<T>(private val x: T) {

    fun <R> map(f: (x:T) -> R): Box<R> {
        return Box(f(x))
    }

    fun <R> fold(f: (x:T) -> R): R {
        return f(x)
    }

    fun inspect(): String {
        return "Box($x)"
    }

}

Kotlin con curry

Si no han probado el Curry, deberian, es una especie de mole Indio muy sabroso, y también en programación se usa, principalmente en programación funcional, es increíblemente util y ayuda a tener menos errores y simplificar por mucho el código.

Aqui solo presento un pequeno ejemplo de como usar esta técnica con kotlin y despues lo compararemos con javascript, la verdad con java ya no me gusto :P pero se que se puede.

Simplemente a una lista de precios le calcularemos el Iva del 16%. No se vera mucho la ventaja de porque usar currying pero si como usarlo.

Con kotlin

data class Total(val precio: Double, val iva: Double, val total: Double)

val getImpuesto = { t: Double -> { i: Double -> t * i } }

val getIva = getImpuesto(0.16)

val precios = listOf<Double>(10.2, 12.3, 10.0, 11.0)

val resultados = precios.map({i: Double ->
    val imp = getIva(i)
    Total(i, imp, i + imp)
})

println(resultados)

Eso solo se pega en la función main de Kotlin y la salida es:

 

Como andar de metiche con Camel

Introduccion

Este es el ultimo post de la serie :(.

Bueno aunque no a todos nos gusta que nos estén supervisando y que nos digan a cada instante que haces, como vas, que paso, etc. En las aplicaciones es todo lo contrario, monitorear una aplicación ya no es mas un addon o un extra en las aplicaciones modernas (solía serlo por ahi del 2007): sino que se debe tener como indispensable.

A veces es requerido trabajo extra para implementarlo, otras veces solo instalar una aplicacion y muchas otras un dolor de cabeza, porque nunca se pensó que se debía monitorear.

Bueno sea el caso que sea, ahora vamos a revisar como monitorear nuestra aplicación creo yo de una forma simple.

Prerequesitos

Hawtio

Kotlin, Undertow como proxy

Introduccion

Las tecnologias del front están creciendo como la espuma y bien sabemos que el front ya no es solamente hacer validaciones o hacer marquesinas, ahora se desarrollan aplicaciones enteras con el concepto de Single Page Applications, dejando a Java solo en el Middleware o en Android. Y después de Kotlin ya ni en Android :P. Seamos sinceros al comparar una aplicación hecha con React o con Angular contra una aplicación en JSF, se nota el porque casi todas las grandes compañías del mundo voltearon a ver a Nodejs (que es mucho muy bueno) y a tecnologías puramente de Front.

Dejando atrás las discusiones sobre si Tomcat o Spring Batch o EJB o Nodejs, que ademas de nunca acabar, no dejan de ser servidores que entregan archivos HTML, JS, CSS y otros (pdf, imagenes, txt, csv, xls, xml), que pueden estar hechos como tu quieras (React, Angular, Aurelia, Vue, Jquery). Por lo que un servidor http siempre esta involucrado; muchas soluciones actuales dejan totalmente el Front en Nodejs y los servicios en Java, otros combinan Nginx con Nodejs y Java; mientras otros solo Java o solo Nodejs.

Kotlin, Camel y MyBatis

Introducción

Ya con nuestro servicio en forma de mock, podemos empezar a extenderlo un poco mas e incluir mas endpoints. En ese sentido agregaremos consultas a una base de datos, usando MySQL; no sera una tabla muy grande, pero servirá para ejemplificar el proceso. El mapeador de objetos java a SQL sera MyBatis, voy a hacer enojar a muchos tal vez, pero considero que JPA es de los frameworks mas obscuros del mundo Java :D, no se enojen; a mi no me gusta, no significa que no sea util para alguien.

Vamos a obtener los datos de la base para las operaciones que ya creamos, getAll y getByID, asimismo agregaremos una operación mas para insertar Preguntas en la base.

Prerequisitos

Ahora si tenemos mas pre-requisitos:

  • MySQL instalado en donde sea pero que tengamos acceso a una base
  • El conector jdbc-mysql en el repo local de maven
  • El proyecto hasta el POST anterior

La Base de Datos

La base por ahora solo sera una tabla QUESTION, con la estructura siguiente:

CREATE TABLE IF NOT EXISTS `questions`.`QUESTION` (

Kotlin, Camel y CXF

Mock del primer servicio

Una vez que tenemos la base del proyecto, podemos agregar nuestro primer servicio REST usaremos la referencia JAX-RS 2 con la implementacion Apache CXF.

Nuestro primer servicio sera un endpoint de preguntas, con dos operaciones la primera consultar una lista de preguntas, de momento escritas en el mismo codigo, y la segunda de esa lista de preguntas obtener una en particular por su codigo.

Prerequisitos

De momento el unico requerimiento previo es tener nuestro proyecto como lo dejamos en el primer post.

Mensajes de Camel

Apache camel al igual que EJB estan basados en los principios de lo que ahora conocemos como microservicios antes de que incluso se llamaran asi, pequenias aplicaciones que al sumarse todas dan como resultado un proceso complejo, cada microservicio se comunica con otros para resolver la tarea en especifica que tiene asignada.

Hello World!!! Kotlin

Introduccion

Este es el inicio de una pequenia serie de posts donde tratare de mostrar una alternativa a Spring y a JEE para la creacion de Servicios, desde la perspectiva del middleware.

Para ello hare uso de una herramienta no tan conocida, pero que ha estado ahi desde hace mucho tiempo (gratuita tambien), facilitando la integracion de sistemas empresariales, esta herramienta es Apache Camel. Apache Camel es en resumen un framework que implementa los Patrones de Integracion Empresariales EIP por sus siglas en ingles, o sea pautas a seguir para facilitar la integracion de Sistemas.

Herramientas de desarrollo

Para poder realizar la primera practica estas son las herramientas que debemos tener instaladas en nuestra maquina:

  • Intellij Community Edition
  • Java SE 9 integrado en el PATH de nuestra maquina de desarrollo
  • Gradle integrado en el PATH de nuestra maquina de desarrollo

Crear el proyecto con Intellij

Primero abrimos IntelliJ y seleccionamos la opcion Create New Project

Distribuir contenido