Proyectos

13/10/2022

/ , , , , , ,

Gestión documental de plantas solares en la nube

Contexto

Trina Solar es una multinacional líder en el sector fotovoltaico con presencia en Asia, Europa y América y con más de 19.000 empleados. Fundada en 1.997, su rápido crecimiento le ha valido para estar entre las 100 empresas de la lista de Fortune con un crecimiento más rápido, y desde 2.006 aparece en la Bolsa de Nueva York (NYSE).

Esta rápida expansión requería de una gestión documental homogeneizada que permitiera la gestión de los proyectos a nivel multinacional, cubriendo todo el ciclo de vida de desarrollo de proyectos solares, desde su diseño hasta la operación y mantenimiento.

Retos

A la hora de implantar una solución adecuada había que tener en cuenta diversos factores muy importantes para la compañía. Por un lado, la gestión debía adaptarse por completo al ciclo de vida de los proyectos del sector, e incluir dentro del ciclo de vida de la gestión documental, no solo al personal de Trina Solar, sino también a los clientes y proveedores de cada proyecto.

Además, la herramienta debía adaptarse al idioma local de cada oficina, incluyendo idiomas como el chino o el árabe.

Por otro lado, el proyecto incluía el reto de migrar más de 1 TB de documentación correspondiente a proyectos en curso o ya ejecutados, y que se gestionaba a través de directorios compartidos, lo que dificultaba aún más el control de la seguridad de acceso por parte de IT.

La solución

Muchas de empresas apuestan por soluciones comerciales especializadas en el tipo de proyectos del sector que, si bien se adaptan al ciclo de vida de sus proyectos, conllevan un alto coste en licencias, parametrización y mantenimiento.

ITERIAM plantea una plataforma de gestión documental completamente adaptada a la gestión de proyectos del sector fotovoltaico basada en las herramientas de Microsoft 365 en la nube.

Esto permite un importante ahorro de costes, ya que se aprovechan las licencias de Microsoft 365 ya adquiridas por Trina Solar para toda la compañía, en lugar de la adquisición de otra herramienta de coste más elevado.

Esta plataforma permite aprovechar la potencia de Microsoft 365 en distintos ámbitos para la gestión documental:

  • Acceso global garantizado, y seguridad de acceso centralizada en Azure Active Directory, incluyendo la gestión de usuarios externos como clientes (proveedores y clientes).
  • Políticas de seguridad y cumplimiento en relación a la visualización y descarga de archivos.
  • Capacidad de almacenamiento disponible, gestión de backups y recuperación de datos.
  • Disponibilidad de las aplicaciones en todos los idiomas, en función de la localización del usuario.
  • Implementación de flujos automatizados y tareas pendientes sobre Power Automate.
  • Interfaz web sobre SharePoint, haciendo uso de Hubs, sitios de proyecto, taxonomías, y componentes SPFx.

ITERIAM desarrolla una solución parametrizable mediante ficheros de configuración que permiten la configuración de cada proyecto en función de sus particularidades: grupos de seguridad, anexo J, usuarios internos y externos, estructura documental, flujos de aprobación disponibles, matriz de aprobación por tipo documental y carpeta, etc.

Para evitar un mantenimiento continuo, se desarrolla una máquina de estados sobre Power Automate, que se encarga de la gestión de estados de los flujos de aprobación de los documentos, en función del flujo configurado para tipo documental y los grupos de usuarios que participan en cada una de las etapas de aprobación.

A partir de un flujo único de aprobación, y en función de la matriz de aprobación definida en el proyecto, se gestiona el ciclo de vida de todo documento, pudiendo configurar una aprobación solidaria o conjunta, el envío del Transmittal y la copia del documento final a una nueva ubicación al ser aprobado. Además, permite incluir a proveedores y clientes en cualquier etapa del flujo de aprobación.

Por último, se automatizan tareas como la creación de nuevos sitios de proyecto con la estructura y configuración adecuada, la carga de documentación ya existente, y la gestión y restauración de la seguridad a través de grupos, lo que permite devolver el control del sistema a IT.

Resultados

En primer lugar, Trina Solar dispone en poco tiempo de un sistema de gestión documental homogéneo, flexible a las particularidades de cada proyecto y adaptado a todos los idiomas de la compañía, sin ningún coste adicional de licencias y mantenimiento.

Además, simplifica la gestión por IT, no solo a nivel de seguridad y la automatización de procesos documentales, sino también en cuanto a gestión y mantenimiento de la infraestructura y hardware asociado.

Por último, la solución planteada no requiere de mantenimientos posteriores si se desean realizar posibles modificaciones en los flujos o estructura de proyectos, lo que permite a los gestores documentales adaptarse a las necesidades locales de cada país, sin necesidad de nuevos desarrollos ni la intervención de IT.

Proyectos

13/10/2022

/ , , , , , ,

Nueva arquitectura de microservicios e integración de sistemas

Contexto

La Universidad Nebrija es una universidad española privada e independiente que acoge a más de 12.000 alumnos internacionales, situada a la cabeza de las universidades españolas en el ámbito de la docencia.

Desde el punto de tecnologías de información, al igual que todas las empresas del sector, existen tanto sistemas corporativos como soluciones específicas de mercado para la gestión de su negocio, lo que dificulta consolidar la información entre los sistemas.

UNNE dispone de un conjunto de aplicaciones de escritorio que dan servicios de gestión de académica, matrículas de docencia, gestión de aprendizaje, campus virtuales, etc. Estos sistemas están obsoletos tecnológicamente, trabajan de forma independiente y sin conexión al resto de sistemas corporativos.

Retos

El objetivo es definir e implantar una arquitectura tecnológica que permita la integración de las diferentes soluciones de mercado implantadas, la unificación y sincronización de información, así como la migración de las aplicaciones a medida desarrolladas por UNNE.

Esta actualización tecnológica, no tanto por la tecnología en sí, tiene que hacer frente a retos muy importantes para UNNE:

  • Trabajar desde el minuto cero en el desarrollo de las integraciones para cumplir con los plazos específicos de docencia.
  • Implantar una nueva metodología de trabajo en las distintas áreas de IT.
  • Acompañar al personal técnico de UNNE en la adopción de las nuevas tecnologías a implantar, y vencer la resistencia al cambio.
  • Colaborar de forma ágil con los distintos proveedores de las soluciones de mercado ya implantadas.

La solución

Aunque inicialmente el proyecto debía ser una actualización tecnológica, desde ITERIAM se planteó un proyecto más amplio que incluyese la redefinición de procesos, nuevas metodologías de desarrollo y despliegue aprovechando la utilización de nuevas tecnologías.

Para llevar a cabo una modernización exitosa de estas aplicaciones debíamos hacer un acercamiento mixto. Por un lado, colaborar activamente con los responsables de IT para conocer la situación actual, los sistemas corporativos implantados, los posibles GAPs y limitaciones a la hora de implantar la nueva arquitectura. Por otro lado, recoger los requisitos de las integraciones más urgentes, conocer el alcance funcional y definir los procesos de integración entre los diferentes sistemas.

Las primeras integraciones a realizar correspondían al área financiera, con la integración económica de recibos de matrículas de docencia y la generación de la contabilidad correspondiente, y a la Docencia, con la integración de usuarios y la gestión de membresías de los campus virtuales impartidos por UNNE.

Para cumplir el exigente “time-to-market” trazado por el cliente, las integraciones se deben realizar en periodo estival y tienen que estar disponibles para el inicio del curso académico en septiembre, organizamos varios equipos ágiles de desarrollo, uno por cada área de integración, con un responsable técnico común en contacto directo con el equipo de IT del cliente, para definir la arquitectura, metodología de desarrollo, proponer e implantar las herramientas necesarias.

Siguiendo una arquitectura hexagonal que nos permita ir evolucionando de forma independiente conforme se vayan migrando e incorporando nuevos sistemas, se plantea una arquitectura orientada a microservicios y comunicaciones online asíncronas que permitan la integración de los sistemas mediante procesos desacoplados.

Tecnológicamente, las integraciones y aplicaciones web se realizan sobre entornos dockerizados, utilizando Vue.js para los nuevos frontales y Lavarel sobre PHP 7.3 – por requisitos del cliente – para los microservicios, sin uso de ORMs para no depender de frameworks. La comunicación se realiza a través de colas de mensajería de AWS y Mulesoft, las aplicaciones se despliegan sobre Azure integrando la seguridad con el ADFS de Microsoft 365, y gestionando el despliegue CI/CD con Azure DevOps y Jenkins.

Resultados

En un periodo aproximado de 3 meses, se aborda la integración del sistema académico y financiero, implantando la primera versión de la arquitectura que permitirá migrar de forma desacoplada las aplicaciones de escritorio obsoletas, y la sincronización de la información entre los distintos sistemas corporativos.

La involucración del área de IT desde el primer momento del proyecto permite la rápida implantación y adopción de las nuevas tecnologías en los ámbitos de desarrollo, infraestructura y sistemas.

Actualmente ITERIAM ofrece a UNNE un servicio para el desarrollo y migración del parque de aplicaciones.

Actualidad

08/07/2020

/ , , , , ,

Cuatro formas de automatizar con estilo usando PowerShell

PowerShell es la línea de comandos ubicua de Microsoft. Con los años, este lenguaje lanzado en 2006 se ha convertido en mi principal herramienta para moverme por el “Universo Microsoft”.

Todo lo puede, para todo sirve y siempre está a mano, como el destornillador del Doctor Who. Y aunque es cierto que en los últimos tiempos Microsoft ha abierto el abanico a otras líneas de comandos, como Azure CLI (AZ) para Azure o Bash para Azure y WSL, PowerShell aún sigue teniendo una posición muy sólida en el ecosistema, e incluso mejor desde el lanzamiento en 2016 de la versión multiplataforma (Mac OS, Linux): PowerShell Core.

Pero vayamos al grano. Puede que tu día a día sea una sucesión de scripts, probablemente rápidos, pero ¿qué pasa cuando son largos? ¿Qué haces si tienes que esperar a completar una o varias tareas que pueden llevar 10, 20 o 60 minutos?

Para estos casos, he depurado estrategias de notificación para ignorar el script hasta que algo relevante suceda. Esto es particularmente útil cuando tienes varios scripts pendientes, u otros proyectos, o una video llamada en curso. 😉

Las comparto en este artículo, sin un orden en particular, para que puedes aprovecharlas en tu día a día, por utilidad, o por mera diversión: 3 estrategias de notificación y 1 sorpresa.


8 bits

En PowerShell puedes implementar avisos sonoros como los de las videoconsolas de 8 bits de los años 80. Así identificas de oído si tu script ha llegado a alguna etapa importante.

Es como un Write-Host sónico. Además, la implementación es super sencilla:

[console]::beep(500,300)

El ejemplo muestra cómo reproducir un sonido de 500 hertzios y 300 milisegundos. Más hertzios, más agudo. Más milisegundos, más duración.

Fun Fact: ¿Sabías que 440 hertzios es la frecuencia que se emplea como sonido de referencia para afinar de instrumentos como el piano o el violín? ¡Puedes afinar tu guitarra o violín usando cualquier PC con Windows!

Por supuesto puedes jugar con las duraciones y frecuencias (aunque no del todo con el ritmo) para formar diferentes «códigos» o incluso melodías famosas. Por ejemplo:

Star Wars – Imperial March, de John Williams

[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(698,350)
[console]::beep(523,150)
[console]::beep(415,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)

Visto en: Music from the Command Line:Performed by Powershell

Los Vengadores – Assemble, de Alan Silvestri

[console]::beep(440,1800) [console]::beep(440,200) [console]::beep(440,600) [console]::beep(660,100) [console]::beep(580,1200) [console]::beep(520,800) [console]::beep(490,800) [console]::beep(440,1200)

[Nota: Melodía sacada de oído por mí]

Juegos de Guerra (1983)

Los veteranos del software como yo, recordareis la película «Juegos de Guerra» protagonizada por Matthew Broderick. En ella una IA llamada WOPR trataba de iniciar una guerra termonuclear por culpa de una red mal segmentada y un hacker. Hay muchas lecciones sobre ciberseguridad e IA en esa película.

Una de las cosas que recuerdo es la voz de la WOPR. Pero desde hace décadas, con el API de voz de Windows (si lo tienes configurado) puedes tener algo parecido en tus scripts usando estos comandos:

$text = "Extraño juego, la única manera de ganar es no jugar."
$object = New-Object -ComObject SAPI.SpVoice
$object.Speak($text) | Out-Null

[Referencia friki obligada: https://www.youtube.com/watch?v=FboBAFiLDbI]

Por supuesto puedes jugar con bastantes parámetros como la velocidad, otras voces e idiomas. Pero eso añade complejidad al script.

En resumen, puedes emitir información compleja y descriptiva de lo que va sucediendo durante la ejecución de tus scripts sin tener que prestarle atención. O leer archivos de texto de forma automática. O gastar bromas.

Este API tiene muchas posibilidades y PowerShell lo pone fácil. ¿Podrá integrarse con Alexa o Siri?


Alertas en Windows 10

En Windows 10 hay dos formas típicas de notificar algo al usuario: mediante un cuadro de diálogo y mediante el centro de notificaciones.

Para lanzar un molesto, pero efectivo cuadro de diálogo, no tenemos más que poner:

Add-Type -AssemblyName PresentationFramework #Ensamblado para la sesión.
[System.Windows.MessageBox]::Show('CPE1704TKS ?')

Esto nos permite explorar nuevas opciones de control de nuestros scripts, como por ejemplo recibir una notificación sobre si continuar una acción, o no, en lugar de solamente notificar algo.

Para ello tenemos una amplia gama de opciones de MessageBox como:

$msgBoxInput = [System.Windows.MessageBox]::Show('¿Una partidita de ajedrez?','WOPR','YesNoCancel','Error')
Write-host "Profesor Falken dijo:"$msgBoxInput

Pero también podemos emplear elementos de consola más avanzados como el Out-GridView con la opción -PassThru:

$myList = @("Tic, tac, toe","Chess","Global thermonuclear war")
$selection = $myList | Out-GridView -Title "Select a game" -PassThru
Write-host "Lets play:"$selection

Por último, en Windows tenemos algo más moderno y algo menos intrusivo como el centro de notificaciones, que funciona como el de un móvil y que no interrumpirá nuestro flujo de trabajo o reunión en curso. Aunque parece una buena opción, la generación de notificaciones es bastante más compleja y requiere de procesos adicionales para no acabar llenando de basura la barra de tareas.

Add-Type -AssemblyName System.Windows.Forms #Ensamblado para la sesión.

$global:balloon = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Info
$balloon.BalloonTipTitle = "General Kenobi says..."
$balloon.BalloonTipText = 'Hello there!'
$balloon.Visible = $true
$balloon.ShowBalloonTip(5000)

Resumiendo, Windows y PowerShell nos ofrecen muchas opciones para gestionar notificaciones nativas, con relativa facilidad.


Epílogo: Like a boss

Como hemos podido comprobar, los scripts largos no tienen por qué ser aburridos, ni consumir tu atención y tu valioso tiempo. Basta con echarle algo de imaginación y emplear la vasta lista de posibilidades que ofrece PowerShell para facilitar nuestro trabajo.

Por mucho hype que haya con C#, JavaScript o Go, a menudo PowerShell puede ser la solución más rápida, compatible y con mejor TCO, para resolver problemas o automatizar procesos.

Y hasta aquí este artículo. Me despido con un meme en PowerShellNever gonna give you up, de Rick Ashley.

Que por supuesto puedes incluir en tus scripts. Pero ojo con el volumen del audio al ejecutar esto:

iex (New-Object Net.WebClient).DownloadString("http://bit.ly/e0Mw9w")