Archives

*Por Juan Bello, Business Head LatAm de GlobalLogic

La banca digital se colocó en el centro del escenario durante 2020 sin pedir permiso: las restricciones a la movilidad en diferentes países obligaron a millones de personas en Latinoamérica a volcarse a medios digitales de pago para poder adquirir productos a través de plataformas de comercio electrónico o para evitar manipular dinero en efectivo.

En una sociedad históricamente muy poco bancarizada -datos del Banco Mundial estimaban que apenas el 49% de la población tenía una cuenta en la prepandemia- el cambio fue notable. El informe The acceleration of financial inclusion during the COVID-19 pandemic, elaborado por MasterCard señala que los planes sociales relacionados con el coronavirus, que se efectivizaron a través de cuentas bancarias, habrían reducido esa cifra en un 25%, con un pico notable en Brasil, donde la disminución de la población no bancarizada alcanzó un 73%.

Las empresas de banca digital y las fintech que busquen posicionarse y picar en punta en esta nueva realidad deben combinar una visión clara del negocio con una capacidad de ejecución ágil. Tener en mente un producto financiero innovador y que resuelva las necesidades de un mercado específico carece de sentido si no se cuenta con una buena relación de time-to-market.

Las principales oportunidades se presentan a lo largo de dos carriles que transitan en paralelo. Por un lado, la disponibilización de activos informáticos ya existentes de forma tal que puedan ser utilizados para la creación de nuevos productos. Así, el sistema tradicional de pagos o el de préstamos, por citar apenas dos ejemplos, pueden recibir por encima una capa sobre la que se puedan exponer API o interfaces que habiliten la incorporación de estos procesos en nuevos flujos. Estándares como Open Banking ya están maduros como para que las empresas del sector expongan información y transacciones de forma tal que puedan ser empleadas por otros sistemas, generando así nuevos servicios.

El segundo carril consiste en pensar nuevos productos como negocios en sí mismos. Los players tradicionales suelen mantener una concepción monolítica, en la cual se ve un “banco” como un todo. Así, una entidad que tiene un amplísimo expertise en la financiación de viviendas mantiene estructura y recursos para competir además en otros segmentos donde sus resultados no son óptimos. El negocio cambió, los competidores son de naturaleza disruptiva y el consumidor demostró que no es cliente “del banco”, sino que elige las opciones que le resultan más flexibles en cada instancia de su relación con las empresas comerciales. Los bancos incumbentes necesitan modificar con urgencia su ADN para sumarse a los tiempos que corren.

No tiene sentido, por ejemplo, seguir pensando en “canales”. Lo importante no es la vía por la cual se lleva el producto al cliente, sino el producto en sí mismo, que es lo que cristaliza la propuesta de valor. Todo lo que hay detrás debería ser invisible para el cliente, de la misma forma que cuando una persona presiona un botón y se enciende una lámpara: nadie piensa en toda la infraestructura que se esconde detrás de las paredes para que eso sea posible.

El negocio arrastra una deuda cultural y tecnológica. Supongamos una app que, ante la necesidad de comprar una casa, permite señalar en Google Maps la zona de nuestro interés, indicar cuánto estamos dispuestos a gastar y agregar características esenciales (tamaño de la propiedad, cantidad de dormitorios, si tenemos familia con hijos y de qué edades). En base a eso, devuelve fotos con realidad aumentada de las propiedades que se ajustan a la solicitud. Cuando se toca una imagen en particular se coordina una entrevista en el Calendario y se habilitan, a través de Open Banking, cotizaciones de créditos hipotecarios de diferentes instituciones, preaprobadas debido a que el sistema ya conoce nuestros movimientos y nivel de riesgo. El día que exista una solución con estas características, difícilmente una persona decida pasar horas frente a un escritorio llenando papeles hasta que le aprueben la solicitud.

Un ejemplo entre incontables que irán delineando el futuro de la industria financiera: el gran desafío del sector es, precisamente, madurar la oferta, centrarla en la experiencia del cliente y explorar las necesidades que existen tanto en los segmentos corporativos como entre las poblaciones no bancarizadas.

La presencia de un socio tecnológico que acompañe desde la concepción de un producto hasta su salida al mercado resulta esencial: es que en todos los casos se requiere de una combinación del aprovechamiento de los datos existentes, una fuerte impronta de experiencia del usuario y el empleo de arquitecturas modernas, basadas en nube y montadas sobre microservicios, con interfaces móviles, web o, incluso, conversacionales basadas en inteligencia artificial. La experiencia de usuario debe ser impecable y la arquitectura de construcción y de datos deben soportarla a la perfección. ¿Cuánto estropea nuestro estado de ánimo ese instante en el que queremos abonar en una app y debemos atravesar una espera de hasta 50 segundos hasta que en la pantalla los diferentes medios de pago?

Lejos de estancarse en esta etapa en la que el salto cuántico se debió a cuestiones contextuales, el mercado de las finanzas apoyadas en alta tecnología tiende a seguir multiplicándose en los próximos años. Las empresas del sector tienen que entender que las esperas interminables en las sucursales o las colas infinitas frente a un cajero son especies en extinción. Aquellas que no se abran al cambio verán cómo las tarjetas de débito que emitieron en estos años terminan en el mismo cajón que los diskettes, los VHS y los rollos fotográficos.

*Por Juan Bello, Business Head LatAm de GlobalLogic

Una de las palabras que más escuchamos durante 2020 fue “aceleración”. La pandemia puso en el centro del escenario conceptos tecnológicos que llevaban años de maduración. Asistimos a fenómenos impensados apenas días antes de la pandemia: el crecimiento exponencial del teletrabajo, una adopción de la nube prácticamente generalizada y un interés por la inteligencia artificial que se traduce en un número de proyectos cada vez mayor.

La innovación no parece que vaya a detener su marcha en 2021. IDC predice que la infraestructura en la nube crecerá 26,7% en Latinoamérica el próximo año. La motivación que produjo esa aceleración fue la supervivencia: las empresas necesitaron apostar a sostener la continuidad de sus negocios. Hoy estamos en una etapa superadora: la de entender en profundidad qué oportunidades nos aportan estas nuevas tecnologías y usarlas a nuestro favor para competir y ganar de cara al futuro. Volviendo al mencionado informe de IDC, 48% de las organizaciones de la región indicaron que se ubican en la segunda etapa del ciclo de recuperación de la pandemia, enfocándose en el manejo eficiente del ROI. Mientras un 13% afirma seguir en la instancia de crisis, un 22% asegura haber pasado a la tercera fase (la resiliencia operacional), un 8% considera estar en la etapa de aceleración, con incorporación de soluciones direccionadas a mejorar el negocio y un 10% considera que está en una etapa de innovación.

Los marcos tecnológicos más destacados pueden resumirse en arquitecturas serverless, por un lado, y una combinación de inteligencia artificial y machine learning por el otro. Con esta base, es posible avanzar sobre los principales conceptos que se están trabajando en la actualidad: desde automatización de procesos hasta conocimiento profundo del cliente, desde propuestas incrementales de realidad virtual y realidad aumentada hasta aplicaciones prácticamente infinitas de internet de las cosas y desde inteligencia comercial hasta el modelo de sistemas adaptativos, es decir, aquellos que son capaces de aprender de sus interacciones y generar cambios a partir de eso. Datos de Statista estiman que la inversión regional en inteligencia artificial alcanzará este año nada menos que US$1.340 millones, muy por encima de los US$860 millones de 2020.

La digitalización casi forzosa a la que nos motivó la pandemia no necesariamente refleja una verdadera transformación cultural. En muchos casos, las empresas continúan viendo la tecnología como una mera herramienta y generando por lo tanto soluciones que resultan complejas o poco prácticas para los usuarios. Así, un cliente de una aplicación bancaria descubre que necesita varios pasos para completar la misma transferencia que realiza todos los meses cuando debería resolverlo en apenas un par de clics. ¿Qué ocurriría si aparece otra aplicación de otra institución y le ofrece ese nivel de experiencia? En el segmento particular del ejemplo -y en muchas otras industrias también- el cliente ya no paga por un banco, sino por lo que puede hacer con él -o con la empresa de la que se trate-. En este sentido, la transformación cultural es también necesaria para la supervivencia, es el paso clave para construir los productos del activos sobre los que se sostendrá el futuro del negocio.

No se trata de “programar software” ni de incorporar los nuevos conceptos tecnológicos sin ton ni son, con el objetivo de subirse a una ola o de participar de las tendencias del momento, sino de definir una visión clara del negocio y avanzar hacia el producto atravesando desde el diseño estratégico hasta la puesta en marcha con el foco centrado en el diseño. Históricamente se entendió la programación de un producto informático de manera desacoplada del ciclo de creación o de inserción. Así es como acumulamos a lo largo de los años numerosos casos fallidos, no tanto relacionados con que el software no fuera capaz de completar su misión o con que no se ajustara a los requisitos, sino más bien por problemas de diseño, tanto en términos de la experiencia del usuario como del concepto del producto o de la arquitectura. La deuda cultural es tan grande como la deuda tecnológica. Pensemos en la electricidad: cualquier persona que necesita iluminar una habitación sabe que basta presionar un botón para lograr el objetivo. Cómo está implementado el sistema subyacente para que eso ocurra es irrelevante, y las experiencias digitales deben seguir este patrón de sencillez y transparencia.

En ese sentido, el concepto de serverless ofrece algunas primeras pautas. Su propuesta, como el nombre lo indica, es una arquitectura pensada para implementar aplicaciones con total independencia del servidor, de los procesos que deben ejecutarse para que funcione o de cualquier actividad de aprovisionamiento, administración o escalamiento de hardware.
“Aceleración” es una palabra engañosa, que puede significar que estamos yendo hacia algo mejor a toda velocidad, pero también que nos estamos apresurando para chocar contra un paredón. Cuando pensemos en nuestro próximo producto digital, levantemos la mirada hacia el largo plazo y cerciorémonos de que lo que tenemos por delante es el futuro de nuestro negocio.

Autor: Juan Alfredo Rella

Introducción a Serverless

El término "Serverless" produce algún grado de confusión debido a que en la implementación y puesta en marcha de toda aplicación se complementan hardware de servidor y procesos ejecutándose en algún lugar. La diferencia en comparación con los enfoques normales es que la organización que crea y da soporte a una aplicación "Serverless" no se ocupa de ese hardware o esos procesos. 

Una empresa externa se encarga del duro trabajo de aprovisionar, administrar y escalar servidores. Al implementar una arquitectura Serverless, no se administra ni aprovisiona nada.

La arquitectura serverless a menudo incorpora dos componentes:

  • Function as a Service (FaaS)
  • Backend as a Service (BaaS) 

Function as a Service

Functions-as-a-Service (FaaS) es un modelo relativamente nuevo de computación en la nube. El modelo se basa en tecnologías y arquitecturas informáticas sin servidor que permiten a los desarrolladores de software implementar fácilmente aplicaciones en la nube sin tener que administrar servidores.

 

Backend as a Service

Backend-as-a-Service (BaaS) es un modelo de servicio en la nube en el que los desarrolladores subcontratan todos los aspectos detrás de escena de una aplicación web o móvil para que solo tengan que escribir y mantener la interfaz. Los proveedores de BaaS proporcionan software prescrito para actividades que tienen lugar en servidores, como autenticación de usuarios, administración de bases de datos, actualización remota y notificaciones push (para aplicaciones móviles), así como almacenamiento y alojamiento en la nube.

 

¿Qué es una función?

Una función es una tarea u operación dentro de una aplicación que puede escribirse como un fragmento de código y ejecutarse de forma independiente.

 

¿Qué son las funciones Lambda?

Las funciones Lambda son pequeñas operaciones del negocio estructuradas en forma de funciones que son disparadas por eventos (event driven). Estas funciones efímeras y altamente escalables pueden ser desarrolladas en varios lenguajes como Python, Javascript, Java, Go, etc.  

Se pueden utilizar especialmente para:

  • Procesamiento de datos.
  • Procesamiento de archivos en tiempo real.
  • Extracción, transformación y carga.
  • Back-ends:
    • IoT.
    • Aplicaciones móviles. 
    • Aplicaciones web.  
    • Integración de aplicaciones (APIs). 

Beneficios

  • No es necesario administrar servidores
  • El escalamiento es flexible
  • Alta disponibilidad
  • No se paga por capacidad latente 

Limitaciones

  • Los entornos de programación (lenguajes, librerías, etc.) están límitados por el proveedor
  • Son servicios sin estado, cualquier operación que requiera “recordar” entre ejecuciones ha de apoyarse en otros servicios
  • Al cobrarse por tiempo de ejecución, y en algunos proveedores limitarse, se penaliza un consumo prologando en el tiempo. 

Implementación de funciones en AWS Lambda

AWS Lambda es un servicio informático donde se puede cargar el código, crear funciones independientes y vincularlas a eventos específicos en la infraestructura de la nube. 

AWS administra toda la infraestructura en la que se ejecutan nuestras funciones y realiza toda la administración de los recursos informáticos, incluido el mantenimiento del servidor y del sistema operativo, el aprovisionamiento de capacidad y el escalado automático, la supervisión de código y el registro. Cuando la función tiene una gran demanda, AWS aumenta automáticamente el recuento de máquinas subyacentes para garantizar que la función funcione con el mismo rendimiento. 

Es posible escribir funciones en AWS Lambda en uno de los lenguajes admitidos de forma nativa.

Algunos lenguajes de programación son ampliamente compatibles con todas las principales plataformas serverless y también se adaptan bien al paradigma impulsado por eventos de la arquitectura serverless.

Los más usados son Node.js y Python; también hay soporte para Java y .NET en todos estos entornos en este momento.

Por otro lado existe un patrón común en este tipo de arquitectura  que incluye los siguientes conceptos básicos:

  • Handler: Handler es un método que el tiempo de ejecución de Lambda llama cada vez que se invoca su función. 
  • Contexto: también se pasa un objeto de contexto especial al método del controlador. Con este objeto, puede acceder a algunos valores de tiempo de ejecución de AWS Lambda, como el ID de solicitud, el tiempo de ejecución restante antes de que AWS Lambda finalice su función de Lambda, etc.
  • Evento: los eventos son cargas útiles JSON que el tiempo de ejecución de Lambda inyecta en su función de Lambda durante la ejecución. 

La estructura del documento de evento es diferente para cada tipo de evento y contiene datos sobre el recurso o solicitud que activó la función. Los tiempos de ejecución de Lambda convierten el evento en un objeto y lo pasan a su función.

  • Registro: dentro de su función Lambda, puede iniciar sesión en CloudWatch.  Amazon CloudWatch es un servicio de monitorización y observación creado para ingenieros de DevOps, desarrolladores y administradores de TI. CloudWatch recopila datos de monitorización y operaciones en formato de registros, métricas y eventos, y permite su visualización mediante paneles automatizados para obtener una vista unificada de los recursos, las aplicaciones y los servicios de AWS que se ejecutan en servidores locales y de AWS. Estas métricas y registros se pueden correlacionar para comprender mejor el estado y el rendimiento de los recursos o llevar un trace de la ejecución de las funciones y descubrir el origen de posibles errores.

Las funciones de AWS Lambda se pueden invocar manualmente o respondiendo a diferentes eventos.

Después de implementar una función serverless, la función en sí debe tener una forma de ser invocada. Hay tres formas principales de invocar una de estas funciones:

  • A través de un endpoint HTTP
  • A través de aws-sdk (muchas veces desde otra función)
  • Desde un evento en la nube (S3 al cargar la imagen, cuando se crea un elemento en su base de datos, etc.)

Se invoca la función interactuando con ella a través de un endpoint HTTP.

Layers

Muchos proyectos comparten bibliotecas comunes en torno a diferentes funciones.

La gestión de dependencias es importante en cualquier proyecto, ya que necesita tener dependencias consistentes en todas sus funciones.

Una Layer Lambda es un archivo ZIP que contiene las bibliotecas. Las capas son muy útiles si tiene varias funciones de Lambda que utilizan las mismas dependencias, ya que las dependencias se importarán a la función de Lambda en tiempo de ejecución.

 

Infrastructure as code

Un punto muy importante en la implementación de estas funciones es la posibilidad de manejar configuraciones de ambientes, versionado de código, deploy y pruebas de ejecución locales. Para estos fines existen herramientas como SAM y Terraform que permiten gestionar estas operaciones de una forma más prolija y eficiente.

Resumen

Como resumen aplica correctamente lo especificado en la página de AWS:
"AWS Lambda le permite ejecutar código sin aprovisionar ni administrar servidores. Paga solo por el tiempo de cómputo que consume.

Con Lambda, puede ejecutar código para casi cualquier tipo de aplicación o servicio backend sin tener que realizar tareas de administración. Solo tiene que cargar el código y Lambda se encargará de todo lo necesario para ejecutar y escalar el código con alta disponibilidad"


Links de interés

https://martinfowler.com/articles/serverless.html

https://www.serverless.com/

https://www.zdnet.com/article/writing-serverless-code-the-programming-languages-and-what-else-you-need-to-know/

https://docs.aws.amazon.com/es_es/lambda/?id=docs_gateway

https://aws.amazon.com/es/serverless/developer-tools/

https://read.acloud.guru/serverless-functions-in-depth-507439b4be88

https://www.serverless.com/learn/comparisons/

Artículo desarrollado por Alejandro Perez.

Java 8 nos acompaña desde Marzo de 2014, y ya va siendo hora de que vayamos despidiendola para dar a lugar a las nuevas características de las recientes versiones Java 13 y Java 14.
¿Y las versiones entre medio? Bien, también enriquecieron al lenguaje y a la plataforma, pero ninguna fue tan disruptiva como lo fue Java 8.
En este artículo haremos un breve repaso de por qué esta versión es considerada un punto de quiebre en lo que es el lenguaje, y la forma de pensar el código al escribir en Java. 

Java decide apostar fuerte

Situándonos en el 2014, el estado del arte nos presentaban muchas opciones al momento de elegir un lenguaje de programación con el cual desarrollar.

Los cambios más notables de este año fueron un incremento del 300% en la popularidad de Objective-C, un aumento del 100% en C#, así como un aumento del 33% de Javascript; mientras PHP perdió un 55%, Perl cayó un 16% y Java se redujo un 14%. https://web.archive.org/web/20140224142555/http://blog.codeeval.com/2014 

En este contexto, los arquitectos responsables se dieron cuenta que el rumbo se encaminaba a la adopción de características de programación funcional, y que los desarrolladores (y con ellos la industria) estaba demandando cambios en la forma de entender el lenguaje. 

Para dar el puntapié inicial, decidieron incluir las siguientes (en ese entonces nuevas) características a Java: 

  • Clase Optional
  • Funciones Lambda
  • Streams

Clase Optional

Todo objeto en Java puede contener un valor o no, ciertamente esto no es una novedad. Antes de Java 8, no teníamos una "entidad" que nos represente este comportamiento por lo que por defecto tenemos el valor especial null para denotar la ausencia de un valor dentro de un objeto. 

Esta posibilidad de que un objeto sea potencialmente null nos llevaba (y nos sigue llevando) a caer en la famosa y odiada excepción NullPointerException. 

Para evitar esta situación, Java 8 agrega la nueva clase Optional que no es otra cosa que un contenedor diseñado para contener un valor o encontrarse "vacío". Este enfoque puede parecer simple, pero nos facilita de sobremanera el chequeo de valores nulos en nuestro código. 

// Without optionals 
Computer myCommodore = retroStore.getCommodore(); 
if (myCommodore != null) { 
System.out.println(myCommodore) 
} else { 
System.out.println("Sorry, Commodore machines are out of stock!") 
} 
// With optionals 
Computer myCommodore = retroStore.getCommodore(); 
Optional<Computer> optionalComputer = Optional.ofNullable(myCommodore);

if (optionalComputer.isPresent()) { 
System.out.println(optionalComputer.get()) 
} else { 
System.out.println("Sorry, Commodore machines are out of stock!") 
}

Funciones Lambda

Las funciones Lambda no eran algo nuevo al momento de la creación de Java 8, pero esta fue la primera versión que las incorpora al lenguaje con nuevas estructuras y sintaxis. 

Básicamente, una función Lambda es una función anónima que no necesita una firma formal o definida dentro de una clase. La creamos al vuelo, sujeta al contexto donde es creada. 

Para crear funciones Lambda, Java 8 incorpora al lenguaje el operador "flecha" (->) que se usa así: 

(PARAMS) -> { FUNCTION_BODY }

Donde: 

  • Podemos tener 0, 1 o 2 parámetros. Si usamos 0 o 2 parámetros debemos usar paréntesis, si usamos uno solo los paréntesis son opcionales. 
  • En el cuerpo de la función, podemos omitir el uso de llaves en caso de tener solo una línea, en caso contrario debe llevar llaves y la palabra clave return si es que necesitamos retornar un valor. 

Otra forma de "pseudo" Lambda es la invocación de métodos directos, por medio del operador "::". Esto genera una referencia al método, que en algunos casos puede directamente sustituir una función lambda en operaciones simples. 

ReferenceClass::ReferredMethod 

Dependiendo del origen del método que necesitamos usar, podemos clasificar estas referencias en tres categorías:

●  Acceso a métodos estáticos

(String msg) -> System.out.println(msg) 
// is the same that 
System.out::println 

●  Acceso a métodos de instancia

(Catalog catalog, int itemKey) -> 
catalog.getProduct(itemKey) // is the same that 
Catalog::getProduct 

 ● Acceso a métodos de instancia de un objeto existente

Catalog catalog -> catalog.getBestProduct() 
// is the same that 
this::getBestProduct 

Streams

Sin el agregado de este concepto al lenguaje, no hubiéramos podido aprovechar todo el potencial que nos ofrece el uso de los objetos Optional y las funciones Lambda. 

Básicamente un Stream es una secuencia de elementos que soporta operaciones secuenciales y en paralelo. Un Stream no almacena datos, trabaja sobre la estructura de datos origen (Collections, arreglos por ejemplo) y produce datos canalizados que pueden ser procesados luego. 

Comparemos una iteración clásica sobre una Collection, sin uso de Streams:

private static int sumIterator(List<Integer> list) { 
Iterator<Integer> it = list.iterator(); 
int sum = 0; 
while (it.hasNext()) { 
int num = it.next(); 
if (num % 10 == 0) { 
sum += num; 
} 
} 
return sum; 
} 

Tenemos un enfoque clásico que crea un Iterator desde nuestra lista y trabaja con ella mientras exista un elemento por procesar en el Iterator. (método hasNext()

  • Como desarrolladores, solo queremos obtener la suma de los números, pero en este caso necesitamos proveer detalles de cómo iterar los elementos. Esto recibe el nombre de "iteración externa" porque el desarrollador es quien controla el algoritmo de iteración. Esto incluye el uso de estructuras como for, foreach, while por ejemplo. 
  • El algoritmo es secuencial por naturaleza, no tenemos una forma fácil de paralelizar. 
  • Es bastante código en contraste con lo que queremos hacer, ¿no? 

Los arquitectos de Oracle tomaron nota de estas situaciones, he incluyeron en la API de los Streams métodos con la habilidad de iterar a través de los elementos, sin la necesidad de proveer detalles de cómo debería hacerse esa iteración. Además, la API provee nuevas formas de acceso a los elementos. 

Podemos reescribir el ejemplo anterior de la siguiente forma: 

private static int sumStream(List<Integer> list) { 
return list.stream() 
.filter(i -> (i % 10 == 0)) 
.mapToInt(i -> i) 
.sum(); 
} 

Donde: 

  • stream(): Crea un Stream a partir de una lista de enteros. 
  • Stream<T> filter( Predicate<T> p ): Retorna un Stream con elementos que aplican al predicado "p". 
  • IntStream mapToInt( function_lambda ):Toma uno a uno los elementos del Stream y los procesa con la funcion Lambda. Este retorna un Stream con enteros de la clase IntStream
  • sum(): Suma cada elemento del Stream y retorna un resultado.

Se ve mucho más simple, ¿verdad? No solo eso, los Streams son una vía con la cual iterar elementos que ya están alojados en memoria, sin un consumo extra de memoria notable en contraste con la cantidad de elementos que iteramos. 

Esto le permite generar cantidades infinitas de elementos, cuya creación puede ser controlada por el desarrollador. También nos permite procesar archivos de gran tamaño con un impacto mínimo, permitiéndonos centrarnos en la lógica a implementar y no en la iteración de los datos. 

Conclusiones

Los Streams y su API fueron diseñados con el concepto de funciones Lambda y Optional en mente desde el inicio. Estos a su vez fueron pensados para cubrir una necesidad creciente de herramientas que nos ofrecen aspectos de programación funcional y programación dinámica. 

Java 8 ha sido un punto de quiebre que ha evolucionado el lenguaje, permitiendo crear muchas técnicas de programación avanzadas que fueron incluidas posteriormente. Con el conocimiento de estas características podemos entender por qué son importantes, y cómo nos ha ayudado a codear de una manera más eficiente y clara. 

Este artículo ha tomado solo una pequeña parte de los cambios introducidos por Java 8, ya que esta versión ha marcado un antes y un después no solo para el lenguaje, sino para todas las aplicaciones, sistemas y tecnologías basadas en Java. 

Gracias por todo Java 8, ya puedes descansar, es hora de seguir adelante. Tu legado sigue vigente y activo al día de hoy, incluso en Java 14.

Links útiles

Para profundizar en estos temas, les recomiendo las siguientes páginas:

  • [Oracle] What's New in JDK 8
  • [Oracle] Processing Data with Java SE 8 Streams, Part 1
  • [Oracle] Part 2: Processing Data with Java SE 8 Streams
  • [Oracle] Stream (Java Platform SE 8 )
  • [Oracle] Lambda Expressions
  • [Oracle] Lambdas and Streams in JDK 8
  • [journaldev.com] Java 8 Features with Examples
  • [softwaretestinghelp.com] Prominent Java 8 Features With Code Examples
  • [Baeldung] https://www.baeldung.com/java-optional
  • [Stackify] https://stackify.com/optional-java/

NEWS AMERICA DIGITAL - 13 de Agosto 2020

En el contexto actual la introducción del software en los procesos de negocios representa un factor clave que permite a las compañías de diversas industrias reinventarse y mantenerse competitivas.

En la era digital en la que vivimos las compañías de software como servicio están desempeñando un rol relevante en la economía mundial y mercados financieros. Dichas compañías son las encargadas de desarrollar productos de tecnologías de la información aplicadas a los procesos productivos, ayudando de esta manera a las organizaciones a emprender el camino hacia la transformación digital.

La industria de servicios financieros es una de las que está atravesando cambios dramáticos como consecuencia del nuevo comportamiento de los clientes. El aumento de la demanda de servicios digitales, la omnicanalidad, la disrupción en métodos de pago y la adopción de nuevas tecnologías representan los mayores desafíos que enfrenta el sector.

Para profundizar en este tema conversamos Juan Bello, Business Head de GlobalLogic Latam, quien comparte su experiencia para entender cómo la digitalización de las empresas del sector financiero no se trata sólo de migrar a plataformas digitales, sino que representa un cambio de mentalidad en la industria, que permita a las organizaciones ofrecer experiencias de usuario de una manera más eficiente y oportuna, superando las expectativas de los clientes que cada vez exigen mejores servicios.

Juan explica cómo la revolución del software está cambiando los paradigmas de muchas industrias y ha hecho que otras se vuelvan obsoletas, resaltando casos de éxito en la transformación digital de la banca que ya ha comenzado en Latinoamérica, donde ya podemos ver algunos cambios como la banca en línea 24/7 y las transacciones instantáneas en bancos 100% digitales.

“Claramente hay un nuevo terreno de competencia. Las empresas más Ágiles en innovación están creciendo. La llegada de las fintech forzó a las empresas y bancos tradicionales a pensar su negocio de forma diferente", comenta el experto de GlobalLogic.

“Las arquitecturas y sistemas que opera una empresa tienen que estar al servicio de generar buenas experiencias e innovación de cara al cliente

Bello resalta además, que tecnologías cómo la Inteligencia Artificial y Big Data están ayudando a las empresas a comprender mejor las necesidades de los clientes, proporcionando la información necesaria para desarrollar soluciones innovadoras a corto plazo.

Con más de 25 años de experiencia, Juan Bello se ha convertido en un líder de opinión clave en la industria del software y la transformación digital en América Latina. A lo largo de su carrera, ha impulsado proyectos para empresas internacionales líderes en industrias como la banca, los seguros, el comercio minorista y las comunicaciones.

También podes leer la nota ACÁ.

Buenos Aires, julio 2020. En un contexto donde la pandemia invita a que diversos sectores e industrias logren adaptarse y se reinventen en busca de una nueva normalidad, el sector bancario se enfrenta a su mayor desafío: digitalizarse por completo. El desarrollo de nuevas tecnologías generó una transformación en el universo financiero y llevó a que los bancos tengan que modificar sus servicios y procesos para asistir a clientes cada vez más exigentes. El mundo demanda cada vez más simplicidad y rapidez en casi todos los aspectos de la vida diaria. Pero la pregunta del millón es ¿cómo será la atención bancaria en un mundo post pandemia? 

Diez años atrás, los usuarios todavía tenían que hacer largas filas en los bancos para realizar diferentes transacciones, hoy el panorama cambió completamente. El avance del mundo techie ha redefinido la forma de relacionarse con estas entidades. Los usuarios de apps y plataformas, utilizan los canales digitales para realizar operaciones de cuentas online y sacar el máximo provecho a la era digital. “Los bancos necesitan entender que la constante evolución de sus sistemas es absolutamente central para seguir siendo competitivos, ya que son parte de una industria que se está transformando día a día a un ritmo acelerado, mientras los clientes demandan más de ellos. La existencia de decenas de Apps que proponen nuevas formas de interacción, nuevos productos y nuevas experiencias de uso genera inmediatamente una demanda por parte de los usuarios hacia su banco: esperan que su banco sea igual de bueno que las otras Apps. Para enfrentar ese desafío, tienen que considerarse tres aspectos: cultural, tecnológico y metodológico, cada uno con sus respectivas particularidades” comenta Juan Bello, Business Head de GlobalLogic Latam.

Este año saltamos, debido a la pandemia de COVID-19, de un 40% de los argentinos operando su dinero en forma digital, a un escenario en donde la casi totalidad de las personas que tienen una tarjeta de débito operan en forma totalmente digital

Recientemente Google y Millward Brown realizaron un estudio llamado “¿Qué esperan los argentinos de una banca digital?”, el cual reveló que un 78% de los encuestados interactúa con su banco desde Internet: por cada operación que tiene lugar en una sucursal bancaria, se producen 4 interacciones digitales. Esta tendencia se vé reforzada por la aparición de Bancos Digitales, algunos ofreciendo un modelo básico de bancarización, hasta bancos universales que lanzan sus operaciones sin oficinas físicas. 

“El desafío hoy no es sólo poder operar en forma 100% digital sino lograr la generación de valor agregado y una experiencia de usuario competitiva además de lograr la rentabilidad en un escenario con cada vez más competidores, tradicionales y “challengers”. Los bancos pueden generar valor y ser competitivos en forma digital pero para ser líderes necesitan no sólo una Experiencia de Usuario impecable sino la ayuda de tecnologías de Inteligencia Artificial y Deep Learning para generar una oferta de valor adecuada no ya a un segmento sino a cada individuo, en función de sus necesidades, hábitos, preferencias, riesgo crediticio y comportamiento online” agregó Juan Bello.

El nuevo entorno digital dará lugar a la innovación en uno de los puntos débiles del banco tradicional. La experiencia de usuario pasará de ser masiva y despersonalizada a ser una interacción personalizada, informativa y de calidad. Esto permitirá transferir valor a los clientes mediante procesos y tecnologías que habilitan intercambios más eficientes y sencillos. El uso de plataformas de Inteligencia Artificial que permitan inferir situaciones de negocio a partir del comportamiento de las personas, y su combinación con asistentes voice-based potenciará las relaciones con los clientes y haciendo más efectiva la plataforma comercial. Otros beneficios de esta transformación digital, son:

  • Transacciones más seguras: la banca digital provee seguridad y protección de los datos en las operaciones financieras, ya que los canales virtuales están muy bien protegidos contra amenazas de fraude o robo que no sólo afectan al usuario que realiza la transacción, sino también al banco. También implica una mayor seguridad para los usuarios, evitando delitos que se podrían sufrir con las operaciones físicas.
  • Productos más accesibles: la digitalización de la banca impacta positivamente en el acceso de las personas a los servicios financieros y amplía la cobertura del sistema, ya que los canales digitales han facilitado los procedimientos para solicitar y adquirir nuevos productos sin moverse del hogar.
  • Más información sobre los productos: gracias a la agilidad de los usuarios en internet, dentro de los canales virtuales del banco encuentran más fácilmente información sobre medios de pago, valores de las transacciones, créditos hasta tasas de interés.
  • Ahorro de tiempo: la posibilidad de realizar todas las transacciones financieras a través de una computadora, teléfono o Tablet evita que los usuarios tengan que ir al banco físicamente.

En línea con esto, es de vital importancia capacitar a los equipos internos de los bancos que deciden transformarse hacia la digitalización para ayudar y guiar a los usuarios que no están acostumbrados a la tecnología. La transición de lo físico a lo digital debe ser lo más armonioso posible, sin olvidar la importancia del contacto humano. La banca digital debe pasar a formar parte de la cultura de la organización. 

Con las nuevas tecnologías, el constante cambio del mercado y las nuevas demandas de los usuarios, la transformación del sector financiero debe asegurar una misión sólida para diferenciarse en la excelencia de servicio con la mirada enfocada en las necesidades del cliente. Por eso, la banca digital llegó para quedarse, para resolver diferentes necesidades de los usuarios de manera rápida, cómoda y segura. 

Por Diego Chulak, Solution Architect de GlobalLogic LatAm.

El perfil de un arquitecto siempre suele ser un tanto difuso, en consecuencia, puede traer dolores de cabeza a los buscadores de talentos. ¿Por qué sucede esto?

Hay muchas razones, pero una de las más importantes es el hecho de que el rol del arquitecto y las prácticas de arquitectura son bastante nuevas. Sin embargo, son muy necesarias.

Los roles funcionales, de infraestructura y de desarrollo tienen prácticamente la antigüedad de la informática con algunas excepciones. La arquitectura nació de la necesidad de integrar soluciones y plataformas, combinándola con complejidades tecnológicas, requerimientos no funcionales infinitos y la necesidad de que todo escale y perdure en el tiempo. Las arquitecturas no son solamente fotos sino más bien películas, evolucionan en el tiempo.

Es importante destacar que la arquitectura tiene múltiples vistas. De despliegue, funcional, de infraestructura, de datos etc. Lo cual hace muchísimo más ardua aún la tarea de definir un perfil y consecuentemente encontrarlo dentro del mercado laboral.

Sin embargo, considero que existen unas 10 habilidades que todo arquitecto debería tener:

Capacidad de entender el dominio de un problema y el modelado del mismo. Es imposible resolver o entender un problema si no comprendemos su lógica y naturaleza o si no entendemos cómo se estructuran sus datos y ciclo de vida, transformación y flujo de los mismos.

Entendimiento de Frameworks y estándares de mercado. Generalmente se tratan de templates o guías y son una excelente práctica para poder conocer dentro de los proyectos, marcan un norte y una tendencia. Es fundamental entenderlos y conocerlos para poder sacar provecho de las mejores prácticas y disciplinas que cada uno de ellos ofrece y saber en qué escenarios conviene aplicarlos. (1)

Entender fronteras y alcances. Uno de los principales desafíos de un arquitecto es entender el límite y alcance del dominio de la solución y sobre todo no involucrarse en temáticas que estén fuera de nuestro control.

Habilidad en el uso de herramientas de modelado. Es necesario tener la habilidad de generar, mantener e interpretar gráficas y diagramas que estén relacionados o bien con el contexto de la problemática a resolver, o bien con la solución al mismo. Este lenguaje debe ser universal y entendible por todos los interesados y la audiencia del proyecto.

Conocimientos de UML. Este es el lenguaje más universal y difundido del modelado que existe hoy por hoy dentro del mercado. Ofrece tipos de diagramas y propone vistas para todo el universo de cosas que queramos o necesitemos expresar en gráficos.

Requirement analysis & Management. Esta práctica si bien no siempre es asociada con el rol del arquitecto es crítica para poder entender y acompañar la problemática que envuelve un proyecto, y por lo tanto acompañar las diferentes tareas y decisiones que son necesarias dentro del mismo. 

Visualizar issues complejos. Esta habilidad consiste en poder “decodificar” la temática, o requerimiento y sus dependencias, que tenemos frente a nuestros ojos por más compleja que esta sea.

Poder comunicarse a través de las comunidades. Es muy relevante esta habilidad para poder interpretar, consensuar y comunicar entre los diferentes grupos, roles o personas interesadas en una solución para lograr que sea aceptada y satisfactoria para todos.

Resolución analítica y creativa de problemas. Estos dos ítems van juntos, y son el principal conocimiento que debe tener un arquitecto, ya que debemos ser rigurosos y específicos en la resolución de una solución, pero a la vez creativos e innovadores a la hora de tener que empezar a desarrollarla. ¿Cómo se genera este conocimiento? Básicamente intentar y no cerrarse en esquemas probados y/o conocidos todo el tiempo dándose la libertad de explorar y dejar volar un poco la imaginación.

Por otro lado, es clave entender la diferencia entre un arquitecto y un diseñador. El diseño es lo que todo ingeniero quiere crear o generar. Es el lugar en que todas las reglas de la creatividad, lo requerimientos de los participantes y las necesidades del negocio, más las consideraciones técnicas, se unen para formular una solución. Es lo que nos permite modelar la solución que se quiere construir/obtener. Es aquí donde se establecen y tienen en cuenta las pautas y estándares del modelo a diseñar. Podemos representar estas diferencias en los siguientes aspectos:

Aspecto Arquitectura

Diseño

Nivel de abstracción 

Alto nivel

Bajo nivel haciendo foco específico en detalles técnicos.

Entregables

Mapas de arquitectura, subsistemas, integraciones, vistas de infraestructura. Despliegue tecnológico.

Diseño detallado de componentes. Pautas de codificación,etc

Areas de enfoque

Selección de tecnologías, soluciones y plataformas.

Análisis de riesgo

Requerimientos funcionales.

De esta manera, podemos afirmar que con los conocimientos y habilidades mencionados anteriormente, ya nos podríamos definir como verdaderos arquitectos preparados para crear las mejores soluciones dentro de nuestros proyectos, y manteniendo un scope de trabajo claro

Nota

(1) Existen también frameworks y estándares que son específicos de una industria en particular, como puede ser financiera, logística, industrial, etc. Por ejemplo, dentro de la industria de banking existe el framework llamado BIAN, HL7 que pertenece a health care y eTOM que es de la industria de las telecomunicaciones.

What is protractor?

Protractor is an end-to-end test framework for Angular and AngularJS applications. Protractor runs tests against your application running in a real browser, using Selenium.

We can say in other words that Protractor is a tool that helps us to test Angular Apps using Selenium.

And in case you are wondering, is ONLY for Angular App. If you are app is not Angular better start looking another tool to test it.

Why choose protractor?

One of the best things of Protractor is that is open source, and how it was created and for is very interesting too (you can see here the presentation made by Julia, alias the creator, Video).

Protractor was made so anybody can test UI in a way that is simple and fast. And when I say anybody, I mean not only QA Engineers.

Another main reason to choose Protractor is as usual: community. Since a lot of people is using it, you can find several articles ( here on Medium and also on other pages), and for sure lot of resolved issues on StackOverflow.

 

What other tools are available on the field?

Well…. you know you have a lot of fishes in the sea. So you also have other options regarding testing Angular App.

I will mention some of them and you can take a look whenever you want:

Mocha
Chai
Jest
Let’s start!

The first step first, you will need to get node.js and npm on your local. Here I would strongly recommend you to use the console all the time to perform this. Please if you are using Windows look for a console that is similar to Linux. This is written thinking on Mac mainly very similar is on Linux.

1)To get node.js → https://nodejs.org/en/

verify version executing :

node -v

2)To get npm → https://www.npmjs.com/get-npm

* or simply execute:

apt-get install npm

verify version executing :

npm version

3) To get protractor from npm →https://www.protractortest.org/#/

* just execute:

npm install -g protractor

verify version executing :

protractor --version

Running your first test

In order to run your first test with protractor you will need to :

1 ) get update webdriver-manager

2 ) write the test ( daaa, is obvious that, right?)

3 ) set the configuration to run the test

4 ) run it!

Ok, now you know what is need to be done, let’s go for it.

The first step is pretty easy, just execute:

webdriver-manager update

webdriver-manager start

Note: If you are wondering what you need to do this. Is simply because you are providing protractor with the selenium manager to execute your test. What is going to happen once you have your webdriver-manager up and running you will have the selenium server on http://localhost:4444/wd/hub.

The second step, write the test. Here I want to mention that protractor by default use Jasmine, with BDD makes really easy to write the test. ( You can use other instead Jasmine, but I’m not going to talk about those) . Instead of writing you can simply copy the following and name it helloWorld.js

describe('Angularjs homepage Hello World', function() {
it ('Say hello world',function() {
browser.get('https://angularjs.org');
element(by.model('yourName')).sendKeys('World'); var welcomeMessage = element.all(by.tagName('h1'));
expect(welcomeMessage.get(1).getText()).toEqual('Hello World!');
});
});

Follow step is to configure, use this and name it as conf.js

exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['helloWold.js']
}

Last step ( are you waiting for this??)

Now you are ready and can execute:

protractor conf.js

This will finally ( yes, FINALLY) execute your test using protractor!

Hoy en día solemos escuchar a usuarios comunes hablar sobre aquello de “rootear” el teléfono con Android, o hacerle un “jailbreak” al iPhone. En pocas palabras, estas acciones implican el control total del teléfono por medio del acceso como usuario administrador, y en definitiva lo que permiten es un acceso a funciones que de otra manera se encuentran deshabilitadas, como la instalación de software no validado por el fabricante, quien se reserva la capacidad de hacerlo a través las tiendas oficiales. Esto ya una tendencia en crecimiento entre los usuarios más avezados, que no están conformes con los límites que el software le impone a su hardware y con las restricciones que se incluyen de fábrica en el sistema operativo.

Los usuarios eligen aplicar esta técnica a sus equipos por ventajas concretas y bien claras. Por ejemplo, un smartphone rooteado puede instalar cualquier sistema operativo (y actualizar la versión de Android), instalar aplicaciones que requieren permisos de root, o deshacerse de funciones preinstaladas por los fabricantes (bloatware). En algunos casos estas técnicas logran aumentar el rendimiento del equipo mediante ajustes muy finos en el comportamiento del sistema, como puede ser el overclocking del procesador, aunque los resultados son variados debido a la heterogeneidad del hardware portátil.

Peligros y preocupaciones
No todas son buenas noticias: al tomar un control total nos obligamos a transformarnos en los responsables de la seguridad del equipo. El rooteo es capaz de exponer a los usuarios al malware portátil, ya que se sacrifica seguridad por un mayor acceso a funciones de software: los sistemas pueden sufrir ataques o volverse inestables, en tanto aplicaciones que no pasaron por los controles de los markets se integran al sistema. Finalmente, el peligro más grande es que el procedimiento de rooteo o jailbreak fracase, dejando al dispositivo sin un sistema con el cual sostenerse.

Uno de los puntos que suelen analizarse al hablar de este tipo de técnicas es el aspecto legal. Las modificaciones como el rooteo o el jailbreak suelen ser permitidas en muchos países, incluyendo Estados Unidos, que no se caracteriza por ser justamente flexible. En la enorme mayoría de los casos, la situación es que los fabricantes no pueden prohibir las modificaciones el sistema operativo del teléfono, pero sí pueden anular la garantía.

Todo lo anterior es cierto para smartphones teléfonos inteligentes, pero no para tablets, al menos en EE.UU.: bajo la ley DMCA (Digital Millenium Copyright Act), desde el 26 de enero de 2013, es ilegal aplicar jailbreak o un root a este tipo de dispositivos, ya que estas técnicas supuestamente pueden utilizarse para vulnerar derechos de autor.

El razonamiento de los legisladores norteamericanos es que cada vez más productos pueden entrar en la categoría de “tablet”, en tanto los límites del género se quiebran con dispositivos híbridos, que combinan pantallas táctiles y teclados ocultos. Los smartphones están por ahora a salvo de esta legislación, aunque las ventanas para la manipulación del software por parte de los usuarios parecen estar cerrándose.

Hololens es un dispositivo de realidad mixta desarrollado por Microsoft, especialmente apuntado al ámbito de la industria y empresarial.
Consiste en unas gafas que le dan la posibilidad al usuario de interactuar, a través de  hologramas 3D, con el mundo real y ser manejados con gestos del usuario.

Las gafas cuentan con diversas cámaras en su circunferencia para detectar el ambiente donde está funcionando, mapear y "entender"  el espacio que rodea al usuario así como detectar los gestos, y permitir a los hologramas interactuar y alinearse con el mundo real.

Utilizando esta tecnología, desde GlobalLogic LatAm desarrollamos una PoC relacionada con la industria automotriz.La misma le permite al usuario ver un modelo holográfico de su vehículo detallando sus partes, superpuestas sobre un auto real y mostrando información en tiempo real del mismo, como presión de las ruedas o estado de la batería.

Desde dicha PoC el usuario puede rápidamente identificar partes que deban ser reparadas o reemplazadas, ordenar repuestos integrándose con servicios web de venta de autopartes e incluso ver instrucciones paso a paso para su reparación o reemplazo en su campo de vista y superpuestas con la pieza real.

Además la POC permite que usuarios remotos, utilizando Hololens, puedan compartir la información con el usuario original viendo un modelo a escala del vehículo, pero con la misma información, permitiendo la colaboración a distancia o el entrenamiento de nuevos operarios de campo en reparaciones, sin la necesidad de estar en la misma ubicación física.

Nuestros equipos siguen continuamente buscando nuevas tecnologías para investigar e implementar, y en las versiones siguientes de la PoC nos encontramos en fase de análisis para integrar reconocimiento de imágenes desde el Hololens, permitiendo que la PoC identifique cada parte del vehículo sin la necesidad de input por parte del usuario.

  • URL copied!