Lenguajes JVM

Otros lenguajes para la JVM (Groovy, Scala, Clojure, etc)

Un vistazo a Quarkus el Supersonic Subatomic Java

¿Qué es Quarkus?

Es básicamente:

Gpu

Cómo puedo utilizar la gpu o tarjeta gráfica para recorrer un archivo de texto grande

¿Cómo saber si un servicio SMTP funciona? Te dejo un script...

A veces he tenido la necesidad de saber si un servicio de envío de correos está funcionando, y siempre uso el mismo script, le hice un pequeño refactor y aquí te los dejo...

@Grapes([
  @Grab(group='javax.mail', module='mail', version='1.4.7'),
  @Grab(group='org.springframework', module='spring-context-support', version='5.1.5.RELEASE')
])

import org.springframework.mail.MailSendException
import org.springframework.mail.SimpleMailMessage
import org.springframework.mail.javamail.JavaMailSender
import org.springframework.mail.javamail.JavaMailSenderImpl

textMessage = """
  Este es un correo de prueba que nos ayuda a determinar la comunicación
  entre el servidor SMTP y los diferentes remitentes, sus dominios y el rastreo de recepción.

  No hay que contestarlo.

  Enviado a las ${new Date()}

  Saludos
"""

SimpleMailMessage message = new SimpleMailMessage().with {
  from = "info@makingdevs.com"
  to = "juan@makingdevs.com"
  cc = "juan@makingdevs.com"
  subject = "Hello world"
  text = textMessage
  delegate
}

JavaMailSender mailSender = new JavaMailSenderImpl().with {
  port = 587
  host = "email-smtp.us-east-1.amazonaws.com"

Instalando Concurnas, un nuevo lenguaje JVM

Concurnas es un "nuevo" lenguaje de programación dependiente de la JVM.

El sitio oficial dice que el lenguaje es:

Un lenguaje de programación JVM de código abierto diseñado para construir sistemas concurrentes, distribuidos y paralelos confiables, escalables y de alto rendimiento.

Concurnas es interoperable con Java (y otros lenguajes JVM): las organizaciones pueden aprovechar el software Java existente en un entorno concurrente.

En comparación con otros lenguajes, los desarrolladores de Concurnas necesitan escribir menos líneas de código. Ese código es más seguro y más fácil de probar, lo que aumenta la calidad y aumenta la productividad de los desarrolladores.

ejemplo.conc

class X{
   def hola(){
      System.out.println("Hola desde clase X")
   }
}
class Y{
   def hola(){
      System.out.println("Hola desde clase Y")
   }
}

def main(args String[]){
   new X().hola()
   new Y().hola()
}

A primera vista es muy parecido a Groovy, pero solo en apariencia.

Para instalar el lenguaje podemos usar SDKMAN!

 

¿Mock a EntiityManager es posible con Spring?

Hola buenas tardes a todos.

Hay una duda que tengo y es referente a la forma en que debo inyectar EntityManager dentro de una clase Test, para ello estoy utilizando JUnit y Mockito.

por ejemplo:
ClaseRepositoryImpl => Es la clase que quiero testear
EntityManager => Es lo que necesito falsear

public class ClaseRepositoryImplTest{
    @InjectMocks
    public ClaseRepositoryImpl cr;
   
    @Mock
    public EntityManager em;

    @Before
    public void setUp(){
        MockitoAnnotations.initMocks(this);
    }

        @Test
    public void getCatalogoEjemploTest() {
        List<Ejemplo> listado = this.getCatalogoEjemplo();  //Tengo un método private que me devuelve una Lista de Objetos de tipo Ejemplo
        String nameStoreProcedure = "SP_GET_CAT_EJEMPLO";
       
        Query query = entityManager.createStoredProcedureQuery(nameStoreProcedure, Ejemplo.class);
        Mockito.when(query.getResultList()).thenReturn(listado);
    }

}

Kotlin for Beginners


Koltin
es un lenguaje dependiente de la Máquina Virtual Java (JVM); empresas como Google han adoptado este lenguaje porque promete ofrecer compatibilidad e interoperabilidad con proyectos hechos con le lenguaje Java. Kotlin es muy similar a otros lenguajes de programación como Scala y Go (e incluso Typescript). Al igual que Java posee tipos clase (Byte, Short, Int, Float, Double, Boolean, Char). Además podemos importar librerías de Java sin ningún problema. Para declarar una variable modificable usamos var, para declarar una variable no modificable usamos val (similar a Scala).

Actualmente es muy popular para el desarrollo de aplicaciones móviles en Android.

Usando SDKMAN! podemos instalarlo.

$ sdk install kotlin

Mostramos la versión instalada.

$ kotlinc -version

Ya no habra nada mejor que React, VUE o Angular?

Ya ni he escrito nada de React, me ha gustado bastante los hooks y muchos desarrolladores Web piensan que efectivamente React es la cima del desarrollo web, que para mejorar habría incluso que optimizar los navegadores en si mismo, sin embargo, no dejemos de pensar y preguntarnos Virtual DOM es lo mejor, realmente el DOM es tan lento como nos lo venden, a final de cuentas React, VUE y Angular corren sobre el navegador.

Hooks mejora la forma en que distribuimos estado y nos mantiene seguros de la POO, pero le carga bastante fuerte la mano al Garbage Collector, crear y recrear funciones no es de a gratis. Yo en lo personal he estado buscando librerias que no sean tan "gordas" como React, VUE o Angular un hello world en react pesa 70Kb.

Realtime sin websockets

Cuando nos llega un requerimiento de aplicaciones en tiempo real y este requerimiento viene despues de Junio del 2018, la primera solucion que te vendra a la mente, sera usar websockets (creo) porque es una de las formas en las que podemos obtener actualizaciones de informacion desde el servidor, sin embargo, muchas empresas sobre todo las mas actualizadas (bancos, aseguradoras e instituciones financieras), debido a sus restricciones de red no siempre permiten usar protocolos tales como websockets y muchos desarrolladores piensan que la unica alternativa a websockets es polling o long-polling (hacer requests cada 5 o 3 segundos, o extender el request lo mas posible hasta recibir una respuesta) y usar una libreria como cometd para ayudar con eso (adivinas, tampoco me gusta cometd, de hecho soy uno de esos desarrolladores que no le gustan muchas cosas :P).

No se si soy yo

Otra vez se me duplico el post, este tiene el mismo contenido del de arriba

Rendering por todos lados

Si creaste el contador con Hooks que revisamos con anterioridad, te habras dado cuenta que el contador se incrementa cada segundo, pero no usamos un interval estamos usando setTimeout; esto sucede porque estamos inicializando el setTimeout cada vez que renderizamos el componente y en React esto sucede cada vez que actualizas el estado de un componente, pero si tienes mas de 100000 componentes hijos (tal vez con un poco menos), notaras que empiezas a tener performance issues, antes de hooks la unica forma de solucionarlo es usar uno de las funciones del ciclo de vida de React shouldComponentUpdate pero eso nos obliga a que ese componente sea una Clase (y no queremos clases con Hooks, de hecho no queremos clases del todo :P, OOP is evil).

Para solucionar este posible problema, desde la version 16.6 de React tenemos React.memo que nos ayuda a mostar una version memoizada del componente que queremos, reduciendo drasticamente el numero de repintados en los hijos.

Codigo

Ahora veremos un ejemplo de contador usando React.memo

import React, { useState } from 'react';
import ReactDOM from 'react-dom';

const Child = React.memo(props => {

Distribuir contenido