Entradas

Destacado

Comparando Strings con ==

Todos aprendimos que para comparar strings utilizamos equals, pero que sucede si ocupamos == ¿? caso 1: los literales son iguales (quedan en el pool de strings), pero al comparar con uno creado con new String() ya no es igual a menos que se use intern: String d = "d"; final String dd = "d"; String ddd = new String("d"); System.out.println("1 true: " + (d == dd)); System.out.println("2 true: " + ("d" == dd)); System.out.println("3 true: " + (""" d""" == d)); System.out.println("4 false: " + ("d" == ddd)); System.out.println("5 true: " + (d == ddd.intern())); caso 2: usando string concatenation, serán iguales si no se concatenan con variables: String ja = "ja"; String va = "va"; ...

Testcontainers + Localstack +AWS Java SDK 2.x

Al usar localstack en las pruebas y el sdk 2.x de AWS para Java no es tan simple como sacar el endpoint y el credential provider de localstack y pasarlo al cliente de aws, hay que constuir primeros los objetos del sdk 2 para pasarlos al cliente con datos que entrega localstack: private static LocalStackContainer ls = null; @BeforeAll public static void before() { ls = new LocalStackContainer(DockerImageName.parse("localstack/localstack")) .withServices(DYNAMODB); ls.start(); final var credentials = ls.getDefaultCredentialsProvider().getCredentials(); final var ddbc = DynamoDbClient.builder() .endpointOverride(ls.getEndpointOverride(DYNAMODB)) .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create( credentials.getAWSAccessKeyId(), credentials.getAWSSecretKey()))).build(); } ese el código para construir el cliente de dynamo usan...

Experimento concurrente

En esta entrada dejaré el resultado de un experimento que surgió por una difícil pregunta que me generó varias dudas... El experimento es revisar el comportamiento de un programa usando un Map en forma concurrente: Comenzamos creando la clase con el map, luego agregarle algunos datos y el main: public class Concurrido { private final Map<Integer, String> estado = new HashMap<y>(); { IntStream.rangeClosed(1, 1_000_000) .forEach(i -> estado.put(i, String.valueOf(1))); } public static void main(String[] args) throws InterruptedException { final var c = new Concurrido(); final var t1 = new Thread(() -> { c.m1(); System.out.println("m1 terminado"); }); final var t2 = new Thread(() -> { c.m2(); System.out.println("m2 terminado"); }); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println("fin"); } el main lanzará 2 hilos...

Stub con Jetty embebido en Test con JUnit 5

En esta entrada mostraré un pequeño ejemplo para utilizar al servidor Jetty embebido durante las pruebas (con JUnit 5 ) para cuando necesitemos un Stub de algún servicio fuera de nuestro alcance. 1. Las dependencias: <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>9.4.28.v20200408</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency> 2. La cl...

Codersrank - TOP DEVELOPERS IN JAVA [UPDATE]

Imagen
Ahora estoy en el puesto número 1 en  codersrank , así que dejaré las capturas para el recuerdo 👻: Chile + Java = 1 Chile + Santiago + Java = 1 ¿y cual será el motivo si mi puntaje no ha cambiado? 😀

GraalVM + Java 11 + AWS Lambda + PostgreSQL + DynamoDB + Docker

Imagen
En esta ocasión mostraré la travesía que fue conseguir compilar un jar con GraalVM y que luego corra en AWS Lambda . ¿Por qué hacerlo? En la actualidad, el cold start de lanzar un jar en un lambda es alto, varios segundos (en node puede ser medio segundo o menos), pero luego de eso cada invocación tiene un tiempo de respuesta bueno, son solo algunos milisegundos. Entonces mi motivación es hacer cada vez el cold start menor y si mejora el tiempo de respuesta de las siguientes invocaciones es aún mejor 😉. ¿Que se necesita? Java 11 Docker Maven Acceso a Lambdas en AWS ¿Cómo hacerlo? Esta es la parte entretenida, en un principio fue compleja pero luego de entenderla fue divertido. Para poder lanzar el jar compilado hay que utilizar AWS Lambdas con un custom runtime. El custom runtime tiene un comportamiento que debe ser seguido y se describe en este link y acá . En resumen: existe una URL para obtener un evento, otra para indicar si hay un error al iniciar, también una...

Codersrank - TOP DEVELOPERS IN JAVA

Imagen
Hoy solo quiero dejar las capturas de pantalla de Codersrank en las cuales tengo el agrado de aparecer 😊, no se por cuanto tiempo estaré en el ranking, así que las guardo de recuerdo 😊. Filtro: Chile + Santiago + Java = 1 Filtro: Chile + Java = 6 llegar al 1 en Chile será un poco dificil...