Ganadores del IAMCP AWARD 2024 Microsoft Partner Pledge

Los IAMCP Spain Awards 2024 reconocen los logros como partner especialista de Microsoft en el sector tecnológico, y han sido entregados en el marco del XV Congreso Anual de la IAMCP Spain, celebrado en Sitges, Barcelona del 25 al 27 de septiembre. Estos reconocimientos no solo celebran la excelencia y el esfuerzo de los participantes, sino que también suponen una visibilidad y prestigio significativos.

Partner Pledge” es un compromiso suscrito por de varios partners de Microsoft, que se centra en cuatro objetivos fundamentales:

  • Habilidades Digitales: Ayudar a la economía y sociedad española a prepararse para los retos de la cuarta revolución industrial a través del programa de habilidades digitales de Microsoft
  • Diversidad e Inclusión: Es importante que nuestra industria refleje y apoye a la sociedad, y que sigamos trabajando para mejorar la diversidad de nuestra plantilla tecnológica
  • IA Responsable y Ética: arantizar que la inteligencia artificial se desarrolle e implemente de forma responsable y ética, tal y como exponemos en AI for Good y Future Computed
  • Sostenibilidad: Nuestro compromiso con el medio ambiente y la reducción de tu huella de carbon

 En el marco de la entrega de los IAMCP Spain Awards 2024 ilitia ha sido galardonada como “Partner con Mayor Implicación y Acciones con los Pilares del Partner Pledge”.

Este premio reconoce haber demostrado un compromiso excepcional con los valores y principios del Partner Pledge, marcando la diferencia a través de su dedicación y acciones impactantes.

Queremos agradecer a la IAMCP esta bonita iniciativa de los IAMCP AWARDS, así como a todos los partners asociados que nos han honrado con esta distinción de la que nos sentimos muy orgullosos.

Software Carbon Intensity. Cómo medir las emisiones de nuestros desarrollos

El SCI por sus siglas en inglés (Software Carbon Intensity) 

Es una medida creada por la GSF (Green software foundation) para poder comparar las emisiones de carbono generadas por nuestra aplicación. No se trata de un valor absoluto sino más bien un valor que nos permite comparar la eficiencia energética de nuestra aplicación según los cambios que vayamos realizando. Tampoco es una medida diseñada para comparar distintas aplicaciones sino para permitirnos ver las variaciones en la eficiencia energética de nuestra aplicación según los cambios que realicemos.  

Vamos a ver la fórmula usada para el cálculo de SCI y su significado: 

SCI = (E * I) + M per R 

 

Donde: 

E : Consumo de energía en kilovatios hora. 

I : Factor de emisión. Es un valor regional y que depende de mix energético de cada región. Se suelen usar valores anuales. Aunque idealmente se deberían usar los valores actuales (durante el cálculo del SCI) 

M : Emisiones generadas en la construcción / destrucción de los equipos. 

R : CO2e emitido por unidad funcional.  

 

Ninguno de estos valores es sencillo de obtener y sus valores dependerán mucho de los criterios que usemos para calcularlos. Veamos cada uno de ellos con un poco más de detalle. 

 E La forma más sencilla y directa de calcular este valor sería tener nuestra aplicación en un servidor y entre este y la toma de corriente un medidor de energia. Evidentemente este caso no suele ser el habitual así que normalmente tendremos que recurrir a estimaciones basadas en el uso de CPU, GPU memoria y almacenamiento.  

I Para el cálculo del factor de emisión podremos usar API´s de terceros (generalmente de pago) que nos ofrecen estos valores o bien usar los datos publicados por alguna entidades como: 

https://ourworldindata.org/grapher/carbon-intensity-electricity 

https://carbonintensity.org.uk 

https://www.ree.es/es/datos/generacion/no-renovables-detalle-emisiones-CO2 

M para el cálculo de las emisiones generadas por los equipos existen algunos fabricantes que publican estos datos como dell (https://www.dell.com/en-us/dt/corporate/social-impact/advancing-sustainability/climate-action/product-carbon-footprints.htm#tab0=0) o Apple (https://www.apple.com/environment/pdf/products/iphone/iPhone_14_PER_Sept2022.pdf).  

Para las máquinas en la nube de distintos proveedores podemos hacer uso de los datos publicados AQUÍ: https://docs.google.com/spreadsheets/d/1k-6JtneEu4E9pXQ9QMCXAfyntNJl8MnV2YzO4aKHh-0/edit#gid=0 Además para la obtención de este dato debemos tener en cuenta el tiempo de uso que hagamos de la máquina y si esta estará compartida por otras aplicaciones. 

R : La unidad funcional es un valor que debemos elegir y dependerá de nuestra aplicación, pueden ser por ejemplo el número de usuarios de nuestra aplicación por hora, el número de peticiones a nuestro api, el tiempo que tarda en ejecutarse un procedimiento determinado.. etc. 

 

En cualquier caso a la hora de calcular el SCI debemos especificar como  se ha calculado cada uno de estos valores. 

Existen algunas herramientas que nos permiten calcular o facilitan el calculo del SCI como Green Metrics Tool  https://docs.green-coding.berlin que nos permite calcular el SCI de aplicaciones contenerizadas. 

   

¿Cómo mejorar el valor de nuestro SCI?  

Se puede mejorar el valor del SCI mejorando cualquier de los valores de la fórmula.  Si nuestra aplicación esta diseñada para trabajar en la nube posiblemente la forma más sencilla sea moverla a una región donde el factor de emisión (I) sea menor.  

Otra forma podría ser mejorar los algoritmos usados para que usen menos tiempo y/o uso del procesador consumo de energía (E). En el caso de una aplicación web reduciendo el tamaño de las imágenes, haciendo uso de la cache del navegador evitaremos llamadas innecesarias y por lo tanto tiempo de procesamiento, uso de red .. etc lo que reducirá la energía consumida y seguramente el coste de la infraestructura.  En general cualquier optimización de la aplicación repercutirá positivamente en el valor del SCI ya que bajará el valor de E y de unidad funcional (R).  

Por último, aunque no tengamos control sobre el carbono emito al fabricar los equipos podriamos mover nuestra aplicación a máquinas con menor emisiones generadas (M), aun que este punto, sobre todo en instalaciones on-premise, suele ser complicado y normalmente una vez comprados los equipos no compensa cambiarlos ni económicamente ni por el impacto de la huella de carbono generada. 

 

Oscar Blanco
Senior Software Engineer at ilitia Technologies

Green Metrics Tool: Mide y Reduce tu Huella de Carbono Digital

En un mundo cada vez más consciente de la importancia de la sostenibilidad ambiental, la medición y reducción de la huella de carbono se ha convertido en una prioridad para muchas empresas y desarrolladores. Green Metrics Tool (GMT) es una herramienta de código abierto diseñada para medir la energía consumida y las emisiones de CO2eq generadas por aplicaciones software. En este artículo, exploraremos en detalle cómo GMT puede ayudarte a cuantificar y reducir el impacto ambiental de tus aplicaciones.

Green Metrics Tool es una primera aproximación práctica (desarrollada por el grupo de Green Coding Berlín) para llevar a la práctica la fórmula de Software Carbon Intensity de la Green Software Foundation

Contenarización con Docker Compose

Para empezar a utilizar GMT, debes contenerizar tu aplicación utilizando Docker Compose. GMT actualmente no es compatible con aplicaciones en Kubernetes. Una vez que hayas contenarizado tu aplicación, el siguiente paso es convertir tu archivo Docker Compose (compose.yml) en un archivo usage-scenario.yml. Este archivo es una extensión de la especificación de Docker Compose, aun que a su vez impone algunas restricciones.

Sin embargo, las claves que existen tanto en Docker Compose como en usage-scenario tienen el mismo significado en ambas especificaciones.

Estructura del archivo usage-scenario.yml

El archivo usage-scenario.yml se compone de cuatro bloques principales:

  1. Networks: Define las redes que se utilizarán.
  2. Services: Define los servicios de tu aplicación.
  3. Compose-file: Este bloque es opcional y te permite incluir archivos compose.yml existentes para reutilizar definiciones de servicios.
  4. Flow: Aquí es donde se definen los flujos de aplicación, que se medirán durante la fase de Runtime. Los flujos son esenciales para comprender cómo se consumen los recursos en una aplicación. Por ejemplo, en una aplicación web, puedes crear una imagen de Docker adicional que actúe como cliente y realice diversas interacciones con la aplicación para medir el consumo generado por un usuario.

Fases de Medición en GMT

La medición en GMT se realiza en seis fases distintas:

  1. Baseline: En esta fase, se mide el sistema (la infraestructura) sin tener la aplicación instalada. Esto proporciona una referencia del consumo de recursos sin la aplicación en funcionamiento.
  2. Installation: Se mide el sistema mientras se crean las imágenes de Docker necesarias para la aplicación.
  3. Boot: En esta fase, las imágenes y la aplicación se inician. Se mide el consumo durante el arranque.
  4. Idle: Se mide el consumo de la aplicación después del inicio, pero antes de que se ejecuten los flujos definidos en el archivo usage-scenario.yml. Esto refleja el consumo en estado de espera.
  5. Runtime: Aquí es donde se realiza la medición principal. Se registran los flujos definidos en el archivo usage-scenario.yml mientras se ejecutan. Esto proporciona información sobre el consumo real de recursos durante el funcionamiento normal de la aplicación.
  6. Remove: En la fase de Remove, se mide el consumo mientras el sistema se detiene y vuelve a la fase de Baseline. Esto permite evaluar el consumo cuando se detiene la aplicación.

Interfaz Web y Servicio en la Nube

GMT ofrece una interfaz web que te permite visualizar las mediciones realizadas, compararlas en diferentes momentos y obtener insignias por logros ambientales. Además, GMT proporciona un servicio en la nube donde puedes medir tu aplicación en la infraestructura que ofrecen. Sin embargo, ten en cuenta que para utilizar este servicio, el repositorio de tu aplicación debe ser público y solo se permite una solicitud por día, que se encolará para su ejecución.

En resumen, Green Metrics Tool te proporciona una forma estructurada de medir el consumo de recursos de tus aplicaciones. GMT te ayuda a tomar decisiones informadas para optimizar tus aplicaciones y reducir su impacto ambiental. Con GMT, estás un paso más cerca de contribuir a un mundo más sostenible y responsable ambientalmente.

 

Oscar Blanco
Senior Software Engineer at ilitia Technologies

Best Workplaces en Tecnología 2024. ¡Somos el #1!

Las empresas Best Workplaces son un reflejo de la experiencia que defiende Great Place To Work para cada empleado y empleada en cada compañía. Great Place To Work significa sentir tu trabajo como algo más que un trabajo, confiar en tus líderes y compañeros y compañeras de equipo, ponerte en la piel de otra persona, encontrar un lugar al que perteneces, ser tratado/a equitativamente… Great Place To Work quiere un gran lugar para trabajar para todas las personas.

El pasado martes 10 de junio tuvo lugar en la sede del grupo Vocento y ABC, la entrega de los premios del ranking Best Workplaces del sector tecnológico en 2024.

Y nos llena de orgullo haber conseguido… ¡la primera posicion de este prestigioso ranking! (categoría de hasta 50 empleados/a).

 

Queremos agradecer a GPTW la entrega de este premio y felicitar a todas las empresas del sector tecnológico que han sido reconocidas en este ranking.

Puedes consultar aquí todos los detalles del ranking Best Workplaces en Tecnología 2024.

Y referencias en prensa, como esta en ABC: Las firmas tecnológicas que llevan el cuidado del talento al siguiente nivel.

 

10 años en el Pacto Mundial de las Naciones Unidas

El Pacto Mundial de las Naciones Unidas es una iniciativa que promueve 17 Objetivos de Desarrollo Sostenible (ODS), que consisten en una serie de metas globales establecidas para abordar los desafíos mundiales más apremiantes. Estos objetivos buscan promover la prosperidad, proteger el planeta y garantizar la paz y la justicia para todos.

Y también se apoya en 10 Principios de las Naciones Unidas, que buscan transformar el mercado global fomentando un sector privado sostenible y responsable en áreas como derechos humanos, trabajo justo, medio ambiente y lucha contra la corrupción.

Tras presentar este 2024 nuestra carta de Communication on Progress (CoP), cumplimos ya 10 años, una década, desde que decidimos unirnos a este compromiso mundial, allá por el mes de marzo de 2014.

Aqui puedes ver nuestro perfil público en la web del Pacto Mundial de las Naciones Unidas.

 

 

Volvimos a ser patrocinadores de la Global Azure 2024 y la NetCoreconf 2024

El Global Azure es un evento anual centrado en la plataforma de nube Microsoft Azure. Reúne a entusiastas de todo el mundo para compartir conocimientos y experiencias sobre temas como inteligencia artificial, datos, infraestructura, desarrollo de aplicaciones y más. Durante el evento, se ofrecen sesiones en directo donde los asistentes pueden disfrutar de charlas de ponentes y sesiones de networking.

Por otra parte, la Netcoreconf es un evento tambien anual dedicado al desarrollo de software y las tecnologías Microsoft relacionadas. Reúne a profesionales de todo el mundo para conocer las últimas novedades en NetCore, Azure, Xamarin, IA y Big Data, donde además gracias al networking se crean vínculos entre expertos, empresas e instituciones.

Siguendo nuestra tradición desde hace varios años, hemos vuelto a ser sponsors de estos dos eventos clave de la comunidad de desarrolladores .Net y Azure cloud, respectivamente.

La Global Azure 2024 tuvo lugar en Barcelona el viernes 19 de abril 2024 y en Zaragoza y Madrid, simultáneamente el sábado, 20 de abril 2024.

La Netcoreconf 2024 se celebró en Barcelona el sábado 23 de abril 2024, y se realizará en Madrid el viernes 15 de Noviembre 2024. ¡Allí estaremos!

Caso de Éxito: Transformación Digital de SUANNUTRA con OneNutra

Presentamos este caso de éxito de Modernización de apps con .Net & Azure de un proyecto para una multinacional farmacéutica española, del que nos sentimos muy orgullosos. 😊

SUANNUTRA es un grupo internacional de soluciones para el mercado de ingredientes nutracéuticos que ofrece un portafolio único de ingredientes funcionals y branded en los principales mercados del suplemento nutricional (US, EU y Asia). SUANNUTRA ofrece ingredientes de marca innovadores respaldados por la ciencia, así como ingredientes funcionales de alta calidad a más de 1.500 clientes en 50 países, ofreciendo un catálogo de más de 1.000 productos.

SUANNUTRA necesitaba modernizar su plataforma de comercialización de ingredientes nutracéuticos, utilizada por varios departamentos (Comercial, Compras, Gestión y Calidad) para la preparación de propuestas y gestión de pedidos nutracéuticos para sus clientes.

Hemos transformado una app legacy que requería actualización tecnológica, mejoras de usabilidad y seguridad, en una app moderna con un interfaz visual intuitivo y ágil, que permite a la fuerza de ventas atender eficientemente las necesidades de los clientes, mostrando productos y condiciones, y finalizando el proceso en su ERP para su procesamiento logístico.

Esta solución software desarrollada con .NET (Core), Angular (Material UI), y Azure SQL está integrada con el ERP de la compañía, y desplegada en Azure.

Si quieres conocer más de este caso de éxito descárgate el PDF aquí: Transformación Digital con OneNutra.

¡Estamos orgullosos de ser una empresa certificada como Great Place to Work!

Great Place To Work® es un reconocimiento en el ámbito de la gestión de personas y estrategia de negocio más prestigioso en el ámbito nacional e internacional, que se otorga anualmente a los mejores empleadores del mundo.

¡Estamos muy orgullosos de ser una empresa certificada como Great Place to Work!

Y sobre todo de los datos de la evaluación realizada por Great Place To Work®:

  • 100% de las personas opina que este es un excelente lugar para trabajar
  • 100% de las personas afirma que puede ser él/ella mismo/a en su lugar de trabajo
  • 100% de las personas afirma que se celebran los acontecimientos especiales
  • 100% de las personas afirma que cuando te incorporas a la empresa, te sientes bien acogido/a

No podríamos estar más orgullosos de nuestro equipo: En ilitia damos la prioridad #1 a las personas.

Mira lo que dicen nuestros empleados que hace que trabajar aquí sea tan bueno en nuestro perfil de empresa como Great Place to Work Certified company.

Post técnico: Excel Processor

Autor: Francisco Refoyo, Ingeniero de desarrollo de software Senior. Ilitia Technologies.


En base a múltiples experiencias como desarrollador, surge la necesidad de disponer de una capa software que nos ayude a lectura y creación de archivos Excel .xlsx.

Para resolver este problema hay dos enfoques:

  • Adquirir un producto de terceros: En el mercado hay variedad de opciones pero todas pasan por una licencia de pago que no siempre se puede y/o desea afrontar
  • Utilizar el SDK de Open XML para Office: Sin conocer a fondo la API oficial de Microsoft esto es un camino complejo, muy sujeto a errores y de gran riesgo a la hora de realizar una estimación temporal para implementar las necesidades del proyecto

La solución propuesta se trata de un wrapper C# .NET sobre Open XML que ofrece de forma unificada y amigable las operaciones más comunes para la lectura y escritura de archivos xlsx, que nos permite abstraernos de Open XML y centrarnos en lo que realmente importa: La lógica de negocio.

En la edición/creación podemos:

  • Definir y utilizar estilos visuales
  • Insertar valores, fórmulas e imágenes
  • Fusionar filas y columnas
  • Establecer el alto de las filas

Con las operaciones de lectura además del conjunto de datos leídos se ofrece la posibilidad de obtener una lista unificada de errores con tres niveles de precisión: celda, fila y global.

En escenarios donde el archivo a leer sea muy grande se dispone de un modo de lectura por bloques en paralelo que reduce el tiempo de ejecución significativamente.

Para más detalles se remite al código accesible de manera abierta en GitHub.

Desarrollo de un código más eficiente. Posts para un Software Green V

Quinto y último post de nuestra serie dedicada al Green Software, en este caso orientado a cómo generar un código más eficiente.

Aprenda a optimizar y desconfíe de los robots

Como decíamos, cuanta menos memoria asigne nuestra aplicación y menos ciclos de computación conlleve la ejecución de nuestro código, menores emisiones de gases de efecto invernadero provocará nuestro software. Con esto en mente, decidimos idear una estrategia de optimización para uno de nuestros proyectos existentes.

La primera preguntar era obvia: ¿debíamos optimizar toda la aplicación? La respuesta es no. Cuando una aplicación lleva viva cierto tiempo, la cantidad de código que la compone puede ser considerable. Por eso, lo mejor es centrarse en los llamados hot spots: a menudo un conjunto muy pequeño de métodos son los que procesan la gran mayoría de las peticiones, y es en ellos donde deberíamos centrar nuestros esfuerzos.

La segunda pregunta era incómoda: ¿estás acostumbrado a optimizar código? Y la respuesta, en el caso de muchos programadores, también es no. Porque, no nos engañemos: hoy en día, la mayor parte de programadores somos en realidad consumidores de APIs, librerías y frameworks. Las estructuras de datos y los algoritmos no forman parte del día a día del programador medio, y hacer un código optimizado no es su prioridad: lo que debe hacer es sacar adelante historias de usuario utilizando el framework de moda.

Por tanto, si no estás acostumbrado a optimizar código, puedes empezar por echar un vistazo a recopilaciones de consejos de optimización como este, o puedes preguntar a ChatGPT. Sin embargo, ninguna de estas dos estrategias es infalible, por lo que, hagas lo que hagas, asegúrate de que de verdad estás mejorando el código haciendo mediciones con alguna herramienta de benchmarking.

En nuestras pruebas, usamos BenchmarkDotNet, una librería de código abierto para .NET que se encarga de todo el proceso de ejecución del benchmark, desde la ejecución del código hasta la presentación de los resultados, y proporciona diagnósticos detallados, como el tiempo de ejecución, el uso de memoria, las veces que se invoca el recolector de basura (GC), etc. Y no es un proyecto marginal: lo usa la propia Microsoft en sus desarrollos, .NET incluido.

Una de nuestras pruebas consistió en tomar código de una de nuestras aplicaciones, pedir a ChatGPT que nos ayudara a optimizarlo, y ejecutar la herramienta de benchmarking para comprobar si, efectivamente, la optimización era cierta. Sin entrar en detalles, estos fueron los primeros resultados:

Es decir, el método optimizado por ChatGPT era 6 veces más lento que el original, asignaba 464 B que no asignaba el original y, además, hacía una llamada al recolector de basura que no hacía el original.


Empleada de Ilitia al descubrir que ChatGPT también se equivoca

Aunque, tras varios prompts adicionales, conseguimos llegar a un método más optimizado, el fiasco anterior nos hizo más sabios, pues aprendimos que:

  • ChatGPT puede ayudarnos a optimizar código, pero…
  • ChatGPT no es la Panacea. A veces se equivoca, o no entiende el prompt que le hemos dado, y es necesario afinarlo.
  • No podemos confiar a pies juntillas en sugerencias de ChatGPT ni en recopilaciones hechas por “expertos”. Lo mejor es hacer pruebas con una herramienta de benchmarking como BenchmarkDotNet. Una prueba vale más que mil suposiciones.

 

Aplicaciones web y viejas-nuevas buenas prácticas

Si te dedicas al desarrollo web y, como yo, recuerdas el ruido que hacía un módem de 56k al conectarse a internet, se pueden asumir dos cosas sobre ti: deberías tomar yogures de los que bajan el colesterol y sabes lo que es optimizar una página web para que cargue rápido. Y, pese a la llegada de las conexiones rápidas y los anchos de banda de hoy en día, es algo que no hemos dejado de lado del todo: con la irrupción de los dispositivos móviles y sus limitadas conexiones de datos tuvimos que desempolvar aquellos conocimientos y adaptarlos al nuevo entorno tecnológico.


Ilitio viejoven tomando fresas voladoras mientras optimiza una web escrita en Klingon

El caso es que, si bien en la actualidad las conexiones rápidas abundan, no debemos dejar de lado la optimización, pues, cuanto más pesa una web, más consumo eléctrico requiere transmitirla desde el servidor hasta nuestros dispositivos (con las consiguientes emisiones de gases de efecto invernadero).

Por eso, y con el fin de reducir nuestras emisiones el máximo posible, en Ilitia nos hemos propuesto recuperar aquellas buenas prácticas (¿recuperar? nunca las perdimos, ejem) para que en nuestros desarrollos sólo viajen los datos estrictamente necesarios entre clientes y servidores. Así, siguiendo las recomendaciones de la Green Software Foundation más nuestra propia experiencia, estamos repasando nuestras aplicaciones para asegurarnos, entre otras cosas, de:

Usar versiones recientes de software y librerías. Los desarrolladores de frameworks y librerías front-end importantes como Angular o Vue.js trabajan constantemente en la optimización de sus productos. Con cada nueva versión, se implementan mejoras no solo en el rendimiento, la velocidad y la eficiencia del código, sino también en la reducción, en la medida de lo posible, del tamaño de dichos frameworks y librerías.

Utilizar imágenes del tamaño adecuado. A menudo se usan imágenes más grandes (en píxeles) de lo que después se muestra en pantalla. Por norma, una imagen mayor en píxeles tendrá mayor peso en bytes, por lo que se recomienda que las imágenes no excedan por mucho el tamaño (en píxeles) que se vaya a mostrar en la pantalla. Cuanto menor sea el tamaño de la información transmitida por la red, menos energía será necesaria para transmitirla (y, por tanto, menos emisiones se producirán). Sirva como ejemplo la mejora que obtuvimos al reducir el tamaño del logo de una de nuestras aplicaciones:

Usar formatos de imágenes modernos y algoritmos de compresión de imágenes eficientes. Si bien, en general se recomienda utilizar formatos modernos, como WebP y AVIF, que permiten mayor compresión sin pérdida de calidad, nosotros hemos obtenido resultados muy notorios sometiendo las imágenes a algoritmos de compresión más eficientes, pero sin cambiar el formato. Existen numerosos servicios gratuitos que ofrecen compresión de imágenes. En nuestras pruebas hemos utilizado TinyPNG, que es un proyecto consolidado y respaldado por importantes compañías del sector:

https://tinypng.com/

Los resultados (muy significativos) de la compresión de las imágenes de uno de nuestros proyectos son los que siguen:

Activar la compresión GZip en nuestros servidores web, ya sean clásicos (IIS on premise) o modernos (nginx sobre Kubernetes).

Cachear tanto contenido como sea posible, ya sea información que viaje entre el servidor y los dispositivos en que se consumen nuestras aplicaciones, o entre el servidor y sus fuentes de datos.

De este modo, lo que antes se hacía meramente para mejorar la experiencia del usuario (evitando que la carga de una página conllevara prolongados tiempos de espera) ahora lo hacemos para evitar emisiones de gases de efecto invernadero.

José Ángel Fernández
Full-Stack Senior Software Engineer at ilitia Technologies

Edición: Jon Burguera