Saltar al pie de página
Iron Academy Logo
Aplicación C#
Aplicación C#

Otras categorías

Modificación de datos en directo en pantalla - Spectre Console Series

Tim Corey
9m 17s

Spectre.Console es una biblioteca .NET que permite crear hermosas aplicaciones de consola mucho más allá de la simple línea de comandos en blanco y negro. En su vídeo "Modifying Data Live On-Screen - Spectre Console Series", Tim Corey demuestra la función de visualización en vivo de Spectre Console. Esta función permite mostrar en pantalla datos de progreso y actualización en tiempo real dentro de las aplicaciones de consola.

En este artículo veremos paso a paso el vídeo de Tim, mostrando dónde hace cada cosa y cómo la explica.

Introducción a Live Display

Tim comienza explicando Spectre.Console y cómo hace que tus aplicaciones de consola sean visualmente atractivas. En esta serie, cada lección es un breve ejemplo, y el código fuente está enlazado en la descripción.

Explica que esta lección se centra en cómo utilizar la función de visualización en vivo para modificar los datos existentes en la pantalla y actualizarlos en tiempo real. Tim también anima a los espectadores a suscribirse y visitar iamtimcorey.com para obtener más recursos de formación.

Creación de una nueva tabla de datos

Tim muestra que ya ha creado una nueva tabla con las columnas de título, lecciones y horas. Esta tabla se utilizará para presentar información sobre cursos extraída de una API.

También introduce un tipo de registro llamado CourseInfo con propiedades fuertemente tipadas para el nombre del curso, el número de lecciones y la duración del curso en horas. Esto refleja la estructura de la API y le permite dar salida fácilmente al texto de una forma fuertemente tipada.

La tabla tiene activados los pies de página para poder mostrar los totales más adelante. Tim señala que este diseño es uno de los muchos widgets arbitrarios que Spectre admite para aplicaciones de consola hermosas.

Inicio de la visualización en directo

Tim utiliza el método AnsiConsole.Live(table).StartAsync(...) para iniciar la visualización en directo. Señala que también hay una función Start() no asíncrona si no necesitas esperar a que se ejecuten tareas largas.

Envuelve su código en un contexto asíncrono para que la consola pueda actualizarse a medida que llegan nuevas filas. Esto demuestra las capacidades del terminal actual para redibujar la salida sin borrar la pantalla.

Obtención de datos y visualización del progreso

Dentro del contexto en vivo, Tim escribe un bucle for utilizando un índice int de 1 a 31 porque la API de muestra enumera 31 cursos. Para cada índice, llama a un método de la clase helpers para obtener los datos de la API.

Este ayudante convierte la cadena JSON sin procesar en un objeto CourseInfo de tipado fuerte. Tim llama intencionadamente a la API curso a curso en lugar de en bloque para mostrar cómo se produce el progreso de la visualización en directo: un gran ejemplo de simulación de tareas de larga duración en un entorno de consola.

Señala que si hubiera querido una sola petición, podría haber eliminado el /i en la URL, pero está haciendo varias llamadas "para mostrar las cosas que llegan con el tiempo"

Añadir filas y actualizar resultados

Con cada instancia CourseInfo devuelta, Tim llama a table.AddRow(...) para crear una nueva fila con el título del curso, el número de lecciones y la duración en horas. Utiliza la interpolación de cadenas con el formato $ y llama a .ToString() cuando sea necesario para convertir valores que no sean cadenas.

Esto representa la tabla con nuevas filas en cada pasada, mostrando cómo Spectre puede actualizar filas dinámicamente. También demuestra cómo detectar posibles problemas, como desajustes de tipo, siendo explícito sobre las conversiones.

Pies de página y totales personalizados

A continuación, Tim muestra cómo añadir pies de página personalizados a las columnas. Establece table.Columns[0].Footer para mostrar el recuento de cursos descargados hasta el momento. Repite esta operación para la segunda y la tercera columna, pero esta vez suma el número de lecciones y el total de horas de todos los cursos.

De este modo, el usuario puede ver de un vistazo cuántas lecciones y cuántas horas ha acumulado. Este es un ejemplo real del uso de los controles de Spectre para mostrar totales de valores junto con datos en directo.

Tim ha "descolgado" brevemente la ventana para que puedas ver el diseño completo a medida que crecen los números. Explica que los pies de página forman parte de los estilos integrados que ofrece Spectre, al igual que los bordes, las marcas y los temas.

Refrescar el contexto después de cada acción

Tim hace hincapié en la "cosa crítica" sobre las visualizaciones en vivo: llamar siempre a context.Refresh() después de hacer cambios. Esto garantiza que el terminal realmente redibuje su salida con los nuevos datos. Sin esto, sus filas, pies de página o incluso colores diferentes no aparecerían hasta que finalice la sesión en directo.

Depuración y manejo de excepciones

La primera vez que ejecuta el código, Tim se encuentra con una excepción de índice fuera de rango. Repasa su error -contar mal los índices de las columnas (son 0,1,2 y no 0,2,3)- y lo corrige.

Se trata de un amable recordatorio de que, incluso en Spectre.Console, debes detectar errores y asegurarte de que tus índices y args son correctos.

Spectre Console Modifying Data Live 1 related to Depuración y manejo de excepciones

Ver la pantalla en directo

Tim ejecuta el código corregido y muestra la visualización en vivo: filas que se añaden, totales que se actualizan y el pie de página que muestra los valores combinados.

Puedes ver "1.652 lecciones", "403,5 horas" y "31 cursos en total" a medida que llegan los datos. Este es exactamente el tipo de acción que hace que la visualización en vivo de Spectre Console se sienta como un tablero dentro de su terminal actual.

Spectre Console Modifying Data Live 2 related to Ver la pantalla en directo

Centrarse solo en los pies de página

Para que los cambios sean más visibles, Tim comenta el código de adición de filas para que sólo se actualicen los pies de página. Esto muestra cómo, incluso sin desplazar los datos, se pueden seguir los totales en directo.

También señala que Spectre ajusta automáticamente la anchura de las columnas cuando los números crecen (por ejemplo, de 9 a 10). Este es un pequeño pero potente ejemplo de la detección automática de anchos y formatos de la biblioteca.

Spectre Console Modifying Data Live 3 related to Centrarse solo en los pies de página

Más allá de las tablas - Widgets y temas arbitrarios

Tim explica que la visualización en directo no se limita a tablas. Puede aplicarse a widgets arbitrarios como paneles, entradas de usuario o incluso un gráfico de barras. Puede actualizar el texto, resaltar diferentes colores, aplicar temas personalizados con códigos de color o añadir spinners.

Menciona que se pueden cambiar estilos como el azul, el verde o el gris para adaptarlos a los temas, e incluso se puede trabajar con diseños anidados o widgets. Esta flexibilidad es lo que hace que Spectre esté "fuertemente inspirado" en herramientas de consola enriquecidas de otros ecosistemas (algunas incluso escritas en Python), pero adaptadas for .NET.

Inicio de visualización en vivo de Async vs. Sync

Tim aclara por qué utilizó la versión asíncrona: porque estaba esperando llamadas a la API. Si tus actualizaciones no son asíncronas, puedes simplemente llamar a Start() sin await.

Esta opción le ayudará a crear aplicaciones de consola atractivas que mantengan su capacidad de respuesta incluso con tareas de larga duración.

Conclusión

En su vídeo, Tim acaba de mostrar cómo construir una visualización en vivo de la Consola Spectre que puede actualizar, sumar y refrescar datos directamente dentro de la consola.

Se trata de una base ideal para solicitar información al usuario, añadir widgets o crear cuadros de mando con diferentes colores y temas personalizados codificados por colores. Combinado con la capacidad de Spectre para generar texto fácilmente, utilizar marcas y crear controles como paneles o árboles, puedes crear aplicaciones .NET dinámicas directamente en tu terminal.

La demostración de Tim muestra que con Spectre.Console no sólo se pueden crear cuadros de mando, sino también tablas de actualización en directo, spinners y otros widgets. Es un ejemplo práctico de cómo convertir una simple consola en una herramienta interactiva en tiempo real, y una buena forma de decir "feliz programación" a tus usuarios.

Hero Worlddot related to Modificación de datos en directo en pantalla - Spectre Console Series
Hero Affiliate related to Modificación de datos en directo en pantalla - Spectre Console Series

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame