SlideShare una empresa de Scribd logo
1 de 45
2019
Netcoreconf
Aplicaciones de consola
fáciles? Más quisiéramos!
Eduard Tomàs i Avellana
Compulsive Developer @ Plain Concepts
@eiximenis
Aplicaciones de consola fáciles?
Más quisiéramos 
Sponsors
Quién soy yo?
• Desarrollador @ PlainConcepts
• Cervecero aficionado
• Padre orgulloso
• Speaker donde me dejen
• Empecé a programar en una
Odissey… ¡y hasta ahora!
• Microsoft MVP desde 2012
¿Por qué de esa charla?
¿Pero… eso todavía existe?
• Dwarf fortress - http://www.bay12games.com/dwarves/
• Actualmente en desarrollo (desde 2006)
• Jugadores estimados: ~150K
¿Qué vamos a ver?
• El terminal en el mundo *NIX
• El terminal en el mundo Windows
• Novedades de Windows 10
• Desarrollando en cross-platform con netstandard
El terminal en
*NIX
Terminales
• *NIX es compatible con gran cantidad de terminales
• Dispositivos terminal válidos van desde el teletipo
hasta un monitor 8K
Arquitectura del terminal
Arquitectura del terminal
En *NIX todo es un fichero
• No existe concepto de pantalla
• No existe concepto de cursor
• No existe concepto de colores
• No existe concepto de teclado
• Y por supuesto... No existe concepto de ratón
Solución: carácteres especiales
• ASCII: 7 bits
• 128 caracteres
• 95 caracteres
imprimibles
(letras,
números,
símbolos)
• 33 caracteres
especiales y de
control
Vienes usándolos toda tu vida
Secuencias de carácteres
• Los fabricantes de terminales introdujeron
secuencias de carácteres propias para realizar
ciertas tareas
• Sin ninguna estandarización
Termcap / Terminfo
• “BBDD” incluída en *NIX que contiene
• Una lista de terminales “conocidos”
• Capacidades de cada terminal
• Secuencia de control que debe mandarse para dicha
capacidad en cada terminal
Termcap / Terminfo vs ANSI
• En los 1976 se creó un estándard ANSI para poner orden
• Secuencias de escape ANSI
• A no ser que quieras soportar terminals MUY antiguos no
debes preocuparte de termcap/terminfo
• Adhiérete a los códigos ANSI y vas sobrado.
• MS-DOS: Soporta parcialmente códigos ANSI
• Atari ST: Soporta ANSI aunqué con extensions propias 
• AmigaOS: Soporta ANSI, tanto en pantalla como en
impresora
• Windows: ejem, ejem, ejem…
Entrada (teclado y ratón)
• Recuerda: solo puedes leer carácteres
• Ciertas combinaciones de carácteres indicarán
teclas pulsadas
• Algunas teclas son complicadas/imposibles de detectar
(ALT)
• No existen eventos tipo “OnKeyDown/OnKeyUp”
El terminal
en Windows
En Windows todo es un objeto
• API específica para pantalla
• API específica para cursor
• Soporte específico para colores
• Soporte específico para teclado
• Y sí: soporte de ratón (aunque lo veas poco)
Win32 Console API
• API de Consola nativa de Windows
• Sin apenas cambios desde Windows 2000
• La consola existe como concepto en Windows y la API
llega mucho más lejos de lo que llega la
contraparte *NIX
• Win32 también soporta ver el terminal como un
fichero, aunque eso está muy limitado.
Colores
Modos de color
• ANSI (8*2 colores)
• 256 colors (xterm-256)
• True color (16M).
• Win32: Soporte para 8*2 colores
Soporte de modos de color
• *NIX: Out of the box usando la secuencia correcta
• Win32: Limitado a 8*2 colores
• ¿Puedo soportar +16 colores en Windows?
• Respuesta corta: NO
• Respuesta larga: Depende…
Modos de color avanzados en Win32
• Windows 10 soporta secuencias de escape ANSI
• https://docs.microsoft.com/en-us/windows/console/console-
virtual-terminal-sequences
• Basta con usar secuencias de escape xterm-256 para
tener 256 colores en Windows
• Aunque para ello la consola debe tener el modo
ENABLE_VIRTUAL_TERMINAL_PROCESSING
• ¡La API de Consola NO LO SOPORTA!
Novedades de Windows 10
*NIX vs Win
• En *NIX el usuario lanza un terminal y desde el
terminal una app
• En Windows el usuario nunca lanza la consola
(conhost). La consola la crea la app
• Sí: cmd.exe no es una consola. Cmd.exe es una app
que lee desde conhost.exe y escribe a conhost.exe
*NIX vs Win
• Tanto en Win como en *NIX la app y la consola son
procesos separados 
• En *NIX se comunican vía texto. En Win via IOCTL
• En Windows la consola es siempre conhost.exe.
• Windows controla la creación de pipes mediante
los que se comunican la consola y la app
• De verdad, que cosas como ConEmu, Console2 y
similares funcionen en Windows es casi un milagro
del desarollo.
Windows 10 ConPTY
• Windows 10 introduce por primera vez una
arquitectura PTY
• PTY: Pseudo terminal. S/W que parece a un terminal
físico (tty) pero que en lugar de comunicarse con un
terminal físico real lo hace con otro programa
• Eso abre la puerta a multiplexar aplicaciones de
consola y a poder (¡por fin!) reemplazar conhost y
simplifica el remoting de apps Windows 10
Arquitectura consola Win10 - 1803
Windows 10 ConPTY
Windows 10 ConPTY
• El uso de PTY simplifica enormemente el remoting
de aplicaciones de línea de comandos
Remoting usando ConPTY
• El uso de PTY simplifica enormemente el remoting
de aplicaciones de línea de comandos
Aplicaciones cross-platform con netstandard
Consola en netstandard
• En consola netstandard soporta:
• 8*2 colores
• Lectura/escritura desde y a consola
• Abstrae parcialmente el teclado
• Cursor
• No soporta / abstrae
• Ratón
• Modos avanzados de color
• Teclado al 100%
System.
Console
Aplicaciones cross-platform: win
+16
colores?
Ratón?
Secuenci
as ANSI
Win32
Console
API
Win <
Win10?
NONO
SÍ SÍ
Win32
Console
API
System.
Console
Aplicaciones cross-platform: *NIX
+16
colores?
Ratón?
Secuenci
as ANSI
Terminfo
Terminal
es
antiguos
?
NONO
SÍ SÍ
Terminal
es
antiguos
?
Secuenci
as ANSI
TerminfoSÍ
Aplicaciones cross-platform
• Para usar Win32 Console API o terminfo necesitas
usar p/invoke
• El uso de terminfo directamente es muy pesado así
que en *NIX se desarrolló una librería que se ha
convertido es standard de facto
(n)curses
• ncurses es una librería que se encarga de gestionar
el terminal en *NIX
• Usa termcap/terminfo por lo que soporta cualquier
terminal
• Unifica el tratamiento de terminales, pero a cambio
viene con sus propias abstracciones (p. ej. Color
Pairs).
Una aproximación hoy en día
• Para realizar una app cross-platform con
netstandard hay que separar el modulo que
interacciona con el terminal y ofrecer varias
implementaciones:
• Ncurses: Para *NIX usando ncurses.
• Win32 API: Para Windows 7 y anteriores
• VT-ANSI + Win32 API: Para Windows 10
• System.Console: Para cualquier plataforma. Limitado
Librerías cross-platform
• Gui.cs (Miguel De Icaza)
• https://github.com/migueldeicaza/gui.cs
• Drivers de System.Console, Win32, ncurses
• Console framework
• http://elw00d.github.io/consoleframework/
• Drivers de Win32, ncurses
• TVision2 (mía, eso es puro autobombo xD)
• https://github.com/eiximenis/tvision2
• Drivers de System.Console, Win32, ncurses, VT-ANSI,
termcap
Sponsors
Más información:
info@netcoreconf.com
@Netcoreconf
Visítanos en:
2019.Netcoreconf.com

Más contenido relacionado

Similar a Aplicaciones de consola cruzadas con .NET Core

Presentacion Arduino PowerPoint
Presentacion Arduino PowerPointPresentacion Arduino PowerPoint
Presentacion Arduino PowerPointcristianperea
 
Diapositivas de informatica
Diapositivas de informaticaDiapositivas de informatica
Diapositivas de informaticaAlly04
 
Computadoras para Ingenieros - Conceptos Básicos 101
Computadoras para Ingenieros - Conceptos Básicos 101Computadoras para Ingenieros - Conceptos Básicos 101
Computadoras para Ingenieros - Conceptos Básicos 101iicomciapr
 
Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012
Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012
Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012Rodolfo Finochietti
 
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNIKinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNICarlos Toxtli
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosLuciaMart
 
Cuadro comparativo
 Cuadro comparativo Cuadro comparativo
Cuadro comparativogersons90
 

Similar a Aplicaciones de consola cruzadas con .NET Core (20)

Intro
IntroIntro
Intro
 
Presentacion Arduino PowerPoint
Presentacion Arduino PowerPointPresentacion Arduino PowerPoint
Presentacion Arduino PowerPoint
 
Presentacion
PresentacionPresentacion
Presentacion
 
Arduino PowerPoint
Arduino PowerPointArduino PowerPoint
Arduino PowerPoint
 
Diapositivas de informatica
Diapositivas de informaticaDiapositivas de informatica
Diapositivas de informatica
 
Sistemas operativos
Sistemas operativos Sistemas operativos
Sistemas operativos
 
Computadoras para Ingenieros - Conceptos Básicos 101
Computadoras para Ingenieros - Conceptos Básicos 101Computadoras para Ingenieros - Conceptos Básicos 101
Computadoras para Ingenieros - Conceptos Básicos 101
 
Editores de texto java
Editores de texto javaEditores de texto java
Editores de texto java
 
01 - Introducción al lenguaje C
01 - Introducción al lenguaje C01 - Introducción al lenguaje C
01 - Introducción al lenguaje C
 
Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012
Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012
Desarrollo de aplicaciones Windows 8 Modern UI con Visual Studio 2012
 
Tutorial de-c
Tutorial de-cTutorial de-c
Tutorial de-c
 
Tutorial de-c
Tutorial de-cTutorial de-c
Tutorial de-c
 
Informática
Informática Informática
Informática
 
Tutorial de- c. ++
Tutorial de- c. ++ Tutorial de- c. ++
Tutorial de- c. ++
 
Tutorial de-c ++
Tutorial de-c ++Tutorial de-c ++
Tutorial de-c ++
 
Tutorial de-c ++
Tutorial de-c ++Tutorial de-c ++
Tutorial de-c ++
 
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNIKinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
Kinect,Sensores 3D, NUI (Natural User Interfaces) y Open Source con OpenNI
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Cuadro comparativo
 Cuadro comparativo Cuadro comparativo
Cuadro comparativo
 
La evolucion de los sistemas operativos
La evolucion de los sistemas operativosLa evolucion de los sistemas operativos
La evolucion de los sistemas operativos
 

Más de Eduard Tomàs

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sEduard Tomàs
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAEduard Tomàs
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEduard Tomàs
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nuncaEduard Tomàs
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDAEduard Tomàs
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessEduard Tomàs
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y RendimientoEduard Tomàs
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Eduard Tomàs
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Eduard Tomàs
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Eduard Tomàs
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundoEduard Tomàs
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aksEduard Tomàs
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Eduard Tomàs
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbEduard Tomàs
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menosEduard Tomàs
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?Eduard Tomàs
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your deviceEduard Tomàs
 
JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)Eduard Tomàs
 

Más de Eduard Tomàs (20)

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why's
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nunca
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en Serverless
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundo
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aks
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDb
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
Azure functions
Azure functionsAzure functions
Azure functions
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your device
 
JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)
 

Último

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Último (16)

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Aplicaciones de consola cruzadas con .NET Core

  • 1. 2019 Netcoreconf Aplicaciones de consola fáciles? Más quisiéramos! Eduard Tomàs i Avellana Compulsive Developer @ Plain Concepts @eiximenis
  • 2. Aplicaciones de consola fáciles? Más quisiéramos 
  • 4. Quién soy yo? • Desarrollador @ PlainConcepts • Cervecero aficionado • Padre orgulloso • Speaker donde me dejen • Empecé a programar en una Odissey… ¡y hasta ahora! • Microsoft MVP desde 2012
  • 5. ¿Por qué de esa charla?
  • 6. ¿Pero… eso todavía existe? • Dwarf fortress - http://www.bay12games.com/dwarves/ • Actualmente en desarrollo (desde 2006) • Jugadores estimados: ~150K
  • 7. ¿Qué vamos a ver? • El terminal en el mundo *NIX • El terminal en el mundo Windows • Novedades de Windows 10 • Desarrollando en cross-platform con netstandard
  • 9. Terminales • *NIX es compatible con gran cantidad de terminales • Dispositivos terminal válidos van desde el teletipo hasta un monitor 8K
  • 12. En *NIX todo es un fichero • No existe concepto de pantalla • No existe concepto de cursor • No existe concepto de colores • No existe concepto de teclado • Y por supuesto... No existe concepto de ratón
  • 13.
  • 14. Solución: carácteres especiales • ASCII: 7 bits • 128 caracteres • 95 caracteres imprimibles (letras, números, símbolos) • 33 caracteres especiales y de control
  • 16. Secuencias de carácteres • Los fabricantes de terminales introdujeron secuencias de carácteres propias para realizar ciertas tareas • Sin ninguna estandarización
  • 17. Termcap / Terminfo • “BBDD” incluída en *NIX que contiene • Una lista de terminales “conocidos” • Capacidades de cada terminal • Secuencia de control que debe mandarse para dicha capacidad en cada terminal
  • 18. Termcap / Terminfo vs ANSI • En los 1976 se creó un estándard ANSI para poner orden • Secuencias de escape ANSI • A no ser que quieras soportar terminals MUY antiguos no debes preocuparte de termcap/terminfo • Adhiérete a los códigos ANSI y vas sobrado. • MS-DOS: Soporta parcialmente códigos ANSI • Atari ST: Soporta ANSI aunqué con extensions propias  • AmigaOS: Soporta ANSI, tanto en pantalla como en impresora • Windows: ejem, ejem, ejem…
  • 19. Entrada (teclado y ratón) • Recuerda: solo puedes leer carácteres • Ciertas combinaciones de carácteres indicarán teclas pulsadas • Algunas teclas son complicadas/imposibles de detectar (ALT) • No existen eventos tipo “OnKeyDown/OnKeyUp”
  • 21. En Windows todo es un objeto • API específica para pantalla • API específica para cursor • Soporte específico para colores • Soporte específico para teclado • Y sí: soporte de ratón (aunque lo veas poco)
  • 22.
  • 23. Win32 Console API • API de Consola nativa de Windows • Sin apenas cambios desde Windows 2000 • La consola existe como concepto en Windows y la API llega mucho más lejos de lo que llega la contraparte *NIX • Win32 también soporta ver el terminal como un fichero, aunque eso está muy limitado.
  • 25. Modos de color • ANSI (8*2 colores) • 256 colors (xterm-256) • True color (16M). • Win32: Soporte para 8*2 colores
  • 26. Soporte de modos de color • *NIX: Out of the box usando la secuencia correcta • Win32: Limitado a 8*2 colores • ¿Puedo soportar +16 colores en Windows? • Respuesta corta: NO • Respuesta larga: Depende…
  • 27. Modos de color avanzados en Win32 • Windows 10 soporta secuencias de escape ANSI • https://docs.microsoft.com/en-us/windows/console/console- virtual-terminal-sequences • Basta con usar secuencias de escape xterm-256 para tener 256 colores en Windows • Aunque para ello la consola debe tener el modo ENABLE_VIRTUAL_TERMINAL_PROCESSING • ¡La API de Consola NO LO SOPORTA!
  • 29. *NIX vs Win • En *NIX el usuario lanza un terminal y desde el terminal una app • En Windows el usuario nunca lanza la consola (conhost). La consola la crea la app • Sí: cmd.exe no es una consola. Cmd.exe es una app que lee desde conhost.exe y escribe a conhost.exe
  • 30. *NIX vs Win • Tanto en Win como en *NIX la app y la consola son procesos separados  • En *NIX se comunican vía texto. En Win via IOCTL • En Windows la consola es siempre conhost.exe. • Windows controla la creación de pipes mediante los que se comunican la consola y la app • De verdad, que cosas como ConEmu, Console2 y similares funcionen en Windows es casi un milagro del desarollo.
  • 31. Windows 10 ConPTY • Windows 10 introduce por primera vez una arquitectura PTY • PTY: Pseudo terminal. S/W que parece a un terminal físico (tty) pero que en lugar de comunicarse con un terminal físico real lo hace con otro programa • Eso abre la puerta a multiplexar aplicaciones de consola y a poder (¡por fin!) reemplazar conhost y simplifica el remoting de apps Windows 10
  • 34. Windows 10 ConPTY • El uso de PTY simplifica enormemente el remoting de aplicaciones de línea de comandos
  • 35. Remoting usando ConPTY • El uso de PTY simplifica enormemente el remoting de aplicaciones de línea de comandos
  • 37. Consola en netstandard • En consola netstandard soporta: • 8*2 colores • Lectura/escritura desde y a consola • Abstrae parcialmente el teclado • Cursor • No soporta / abstrae • Ratón • Modos avanzados de color • Teclado al 100%
  • 38. System. Console Aplicaciones cross-platform: win +16 colores? Ratón? Secuenci as ANSI Win32 Console API Win < Win10? NONO SÍ SÍ Win32 Console API
  • 39. System. Console Aplicaciones cross-platform: *NIX +16 colores? Ratón? Secuenci as ANSI Terminfo Terminal es antiguos ? NONO SÍ SÍ Terminal es antiguos ? Secuenci as ANSI TerminfoSÍ
  • 40. Aplicaciones cross-platform • Para usar Win32 Console API o terminfo necesitas usar p/invoke • El uso de terminfo directamente es muy pesado así que en *NIX se desarrolló una librería que se ha convertido es standard de facto
  • 41. (n)curses • ncurses es una librería que se encarga de gestionar el terminal en *NIX • Usa termcap/terminfo por lo que soporta cualquier terminal • Unifica el tratamiento de terminales, pero a cambio viene con sus propias abstracciones (p. ej. Color Pairs).
  • 42. Una aproximación hoy en día • Para realizar una app cross-platform con netstandard hay que separar el modulo que interacciona con el terminal y ofrecer varias implementaciones: • Ncurses: Para *NIX usando ncurses. • Win32 API: Para Windows 7 y anteriores • VT-ANSI + Win32 API: Para Windows 10 • System.Console: Para cualquier plataforma. Limitado
  • 43. Librerías cross-platform • Gui.cs (Miguel De Icaza) • https://github.com/migueldeicaza/gui.cs • Drivers de System.Console, Win32, ncurses • Console framework • http://elw00d.github.io/consoleframework/ • Drivers de Win32, ncurses • TVision2 (mía, eso es puro autobombo xD) • https://github.com/eiximenis/tvision2 • Drivers de System.Console, Win32, ncurses, VT-ANSI, termcap