Contenidos
Programación multiproceso:
- Ejecutables. Procesos. Servicios.
- Estados de un proceso.
- Hilos.
- Programación concurrente.
- Programación paralela y distribuida.
- Comunicación entre procesos.
- Gestión de procesos.
- Sincronización entre procesos.
- Programación de aplicaciones multiproceso.
Teoría de procesos
- https://www.jesusninoc.com/12/14/programacion-multiproceso-programacion-de-servicios-y-procesos/
- https://www.jesusninoc.com/07/31/programacion-de-servicios-y-procesos-en-python/#1_Programas_y_procesos
Conceptos
- Función básica https://www.jesusninoc.com/07/05/crear-una-funcion-de-saludo-en-kotlin/
- Función main() https://www.jesusninoc.com/07/05/pasar-parametros-a-la-funcion-main-en-kotlin/
- Módulos en Python https://www.jesusninoc.com/09/02/modulos-en-python/
- Conceptos generales en Kotlin https://www.jesusninoc.com/07/02/conceptos-importantes-en-kotlin-relacionados-con-procesos-hilos-red-y-seguridad-son/
- Conceptos generales en Python https://www.jesusninoc.com/05/27/conceptos-importantes-en-python-relacionados-con-procesos-hilos-red-y-seguridad/
- Repaso de conceptos para manejar las shells (instalar Ubuntu Server)
- SSH, conexión de red que permita acceder
- Rutas
- Path y Classpath https://docs.oracle.com/javase/tutorial/essential/environment/paths.html
- Pasar parámetros en scripts (PowerShell) https://www.jesusninoc.com/02/17/pasar-parametros-en-scripts-de-powershell/
- Pasar parámetros en scripts (Bash) https://www.jesusninoc.com/02/17/pasar-parametros-en-scripts-de-bash/
- Compilar y ejecutar
- Procesos en Linux https://github.com/jesusninoc/ClasesPSP/blob/master/2022-10-03.md#procesos-en-linux-1
- Ejecutar dos comandos
- Almacenar la ejecución de un comando
- Multiproceso
- BCP
- Process status
- Estados de un proceso
- System
- Funciones
- Creación y ejecución de procesos
- Padre crear hijo
- Comunicación entre procesos: para capturar y leer la salida generada por el comando ping, debemos acceder al flujo de entrada (inputStream) del proceso. Esto puede parecer confuso, pero en este caso, el flujo de entrada (inputStream) del proceso se utiliza para leer los datos que provienen de la salida generada por el comando.
- Descriptores https://www.jesusninoc.com/02/27/crear-y-utilizar-una-tuberia-sin-nombre-en-linux/
- Pipes sin nombre https://www.jesusninoc.com/03/02/comunicar-dos-procesos-usando-pipes-sin-nombre-en-python/
- Pipes con nombre https://www.jesusninoc.com/03/03/comunicar-dos-procesos-usando-pipes-con-nombre-en-python/
- Sincronizar procesos
- Señales
- Creación procesos
- Programación concurrente
- Programación paralela
- Memorias compartidas
- https://www.jesusninoc.com/06/14/conocer-el-tamano-expresado-en-bytes-de-un-tipo-no-administrado-mediante-la-clase-marshal-en-powershell/
- https://www.jesusninoc.com/06/29/obtener-el-valor-de-una-variable-utilizando-otra-variable-mediante-la-direccion-del-primer-caracter-de-la-cadena-no-administrada-en-powershell-utilizando-la-clase-marshal/
- https://www.jesusninoc.com/06/29/obtener-valores-de-la-memoria-en-powershell-utilizando-la-clase-marshal/
- https://www.jesusninoc.com/06/30/copia-datos-de-una-matriz-de-caracteres-administrada-a-un-puntero-de-memoria-no-administrada-desde-powershell-utilizando-la-clase-marshal-funcionamiento-inseguro/
- https://www.jesusninoc.com/06/14/ver-credenciales-almacenados-mediante-la-clase-marshal-en-una-variable-con-get-credential-desde-powershell/
- Memorias compartidas en Linux https://github.com/jesusninoc/ClasesPSP/blob/master/2022-10-17.md#memorias-compartidas
- Memorias compartidas en Python https://www.jesusninoc.com/05/27/memoria-compartida-en-python-programa-que-crea-la-memoria-compartida-y-escribe-en-ella-y-otro-programa-para-leer-de-esa-memoria/
- Señales https://github.com/jesusninoc/ClasesPSP/blob/master/2022-10-17.md#se%C3%B1ales
- Semáforos
- Programación distribuida
Ejercicios
Programación multiproceso en Python
Lanzar un programa en Kotlin
Lanzar un comando en Python con Flask
Ejecutar un comando de Windows y almacenar la salida en un archivo en Kotlin
Ejercicio: llamar desde Kotlin a un proceso en Linux con un script en Bash
Ejecutar un script desde PowerShell
Lanzar programa que ejecute el comando ping en Python con Flask
Lanzar programa que ejecute un ping dos veces en Kotlin
Obtener información del proceso padre e hijo en Python con Flask
Crear un proceso en Kotlin con la clase ProcessBuilder
Uso de waitFor() en procesos en Kotlin: espera a que un proceso finalice
Crear un proceso en Kotlin con la clase Runtime
Comunicar dos procesos
Comunicar dos procesos en Python
Realizar una comunicación entre dos procesos
Realizar una comunicación entre dos procesos en Python
Simulación de un ataque Man-in-the-Middle (MitM) en Python
Generador y ejecutor de código Python creado con la inteligencia artificial Gemini
Programación multihilo:
- Recursos compartidos por los hilos.
- Estados de un hilo. Cambios de estado.
- Elementos relacionados con la programación de hilos. Librerías y clases.
- Gestión de hilos.
- Sincronización de hilos.
- Compartición de información entre hilos.
- Programación de aplicaciones multihilo.
Teoría de hilos
- https://www.jesusninoc.com/12/15/programacion-multihilo-programacion-de-servicios-y-procesos/
- https://www.jesusninoc.com/07/31/programacion-de-servicios-y-procesos-en-python/#2_Programacion_de_hilos_en_Python
Conceptos
- Hilos
- Estado
- Interrupción
- Coroutines
- Sincronización
Ejercicios
Crear un hilo en Python con Flask
Predicción concurrente de objetos en imágenes usando YOLO y hilos en Python
Formas de crear hilos en Kotlin
Crear un hilo y esperar a que se ejecute completamente el hilo
Carrera de tortuga y liebre
Carrera de tortuga y liebre (creando clases)
Crear un reloj sencillo en Kotlin mediante hilos
Ejecución concurrente
Estados y prioridades de los hilos en Kotlin
Interrumpir un hilo en Kotlin
Uso de coroutines
Ejecución de tareas con y sin hilos en Python
Sincronización
Tablas de multiplicar con hilos
Tablas de multiplicar utilizando coroutines en Kotlin
Hilos en Python (con y sin sincronización)
Aplicación de recordatorio en Kotlin con Timer
Crear y administrar tareas concurrentes utilizando hilos en Kotlin
- https://www.jesusninoc.com/08/04/crear-y-administrar-tareas-concurrentes-utilizando-hilos-en-kotlin/
Productor-consumidor: Sincronización con colas en Kotlin
Productor-consumidor: Sincronización con colas en Python
Productor-Consumidor en Kotlin utilizando java.util.concurrent
Simulación de acceso concurrente seguro a un archivo de registro
Programación de comunicaciones en red:
- Comunicación entre aplicaciones.
- Roles cliente y servidor.
- Elementos de programación de aplicaciones en red. Librerías.
- Sockets.
- Creación de sockets.
- Enlazado y establecimiento de conexiones.
- Utilización de sockets para la transmisión y recepción de información.
- Programación de aplicaciones cliente y servidor.
- Utilización de hilos en la programación de aplicaciones en red.
Teoría de redes
- https://www.jesusninoc.com/12/16/programacion-de-comunicaciones-en-red-programacion-de-servicios-y-procesos/
- https://www.jesusninoc.com/07/31/programacion-de-servicios-y-procesos-en-python/#3_Comunicacion_en_Red_en_Python
Conceptos
- Peticiones a servidores (GET, POST, fuerza bruta)
- URL
- URL (GET y POST)
- Servicios (bombillas)
- Scraping
- Fuerza bruta https://github.com/jesusninoc/Seguridad/tree/master/GetPost
- Conexión TCP/IP entre distintos sistemas
- Proyecto de conexión remota
- Sockets TCP y UDP
- Serializar https://www.jesusninoc.com/07/05/serializar-y-deserializar-un-objeto-almacenado-en-un-fichero-en-kotlin/
- Serializar JSON https://www.jesusninoc.com/07/05/serializar-y-deserializar-ficheros-json-con-gson-en-kotlin/
Ejercicios
Programación de red en Python
Conectar con una URL en Kotlin
Cómo conectar con una URL y cambiar el User-Agent
Realizar una petición HTTP POST en Kotlin
Comprobar si un puerto TCP está abierto en Kotlin
Servidor y cliente TCP básicos en Kotlin
Servidor y Cliente TCP en Kotlin utilizando clases distintas
Servidor y cliente UDP básicos en Kotlin
Enviar un mensaje UDP a un ordenador desde Python
Cliente y servidor para enviar objeto serializado por TCP en Kotlin (utilizando hilos)
Enviar una imagen entre un cliente y un servidor utilizando sockets TCP en Kotlin
MulticastSocket en Kotlin
Realizar una comunicación multicast entre un código en Android Studio y otro en IntelliJ IDEA
Enviar un mensaje TCP con Kotlin desde una aplicación en Android Studio a un servidor en IntelliJ IDEA
Enviar la posición del cursor mediante TCP con Kotlin desde una aplicación en Android Studio a un servidor en IntelliJ IDEA
Mover el ratón remotamente mediante TCP con Kotlin desde una aplicación en Android Studio a un servidor en IntelliJ IDEA
Crear un API muy simple con Kotlin
Crear un API muy simple con Kotlin que devuelve un contenido en formato JSON
Crear API en Python
- https://www.jesusninoc.com/07/30/crear-un-api-en-python-con-flask-desde-project-idx-que-inserte-y-lea-valores-en-firebase/
- https://www.jesusninoc.com/07/30/crear-un-api-en-python-con-flask-desde-project-idx-que-inserte-y-lea-valores-en-firebase-despues-crear-un-repositorio-con-la-aplicacion-y-desplegarla-en-vercel/
- https://www.jesusninoc.com/07/30/crear-un-api-en-python-con-flask-que-inserte-y-lea-valores-en-firebase-y-desplegarlo-en-vercel/
- https://www.jesusninoc.com/07/30/crear-una-aplicacion-en-swift-para-iphone-que-inserte-un-valor-en-firebase-mediante-una-peticion-post-a-un-api/
Proyecto de conexión remota
- https://www.jesusninoc.com/12/26/convertir-la-entrada-de-microfono-a-texto/
- https://www.jesusninoc.com/10/30/transmitir-una-captura-de-pantalla-entre-un-servidor-y-un-cliente-desde-powershell-sockets-tcp/
- https://www.jesusninoc.com/10/30/transmitir-una-captura-de-pantalla-entre-un-servidor-y-un-cliente-y-mostrarla-en-un-formulario-desde-powershell-sockets-tcp/
- https://www.jesusninoc.com/10/30/transmitir-una-captura-de-pantalla-entre-un-servidor-y-un-cliente-y-mostrarla-cada-dos-segundos-en-un-formulario-desde-powershell-sockets-tcp/
- https://www.jesusninoc.com/10/30/realizar-una-comunicacion-bidireccional-entre-un-cliente-y-un-servidor-mediante-tcp-desde-powershell-en-windows/
- https://www.jesusninoc.com/02/01/automatizar-tareas/
- https://www.jesusninoc.com/03/01/mover-el-raton-a-las-posiciones-que-estan-guardadas-en-un-fichero/
- https://www.jesusninoc.com/11/19/hacer-clic-en-una-posicion-de-la-pantalla-con-powershell/
- https://www.jesusninoc.com/02/02/realizar-captura-de-pantalla-y-dividir-en-partes-la-captura/
- https://www.jesusninoc.com/07/06/send-the-cursors-position-between-client-and-server-sockets-udp/
- https://www.jesusninoc.com/07/10/transfer-image-between-server-and-client-sockets-tcp/
- https://www.jesusninoc.com/11/07/transfer-images-between-server-and-client-sockets-tcp/
Generación de servicios en red:
- Protocolos estándar de comunicación en red a nivel de aplicación (telnet, ftp, http, pop3, smtp, entre otros).
- Librerías de clases y componentes.
- Utilización de objetos predefinidos.
- Establecimiento y finalización de conexiones.
- Transmisión de información.
- Programación de aplicaciones cliente.
- Programación de servidores.
- Implementación de comunicaciones simultáneas.
Teoría de servicios en red
- https://www.jesusninoc.com/12/17/generacion-de-servicios-en-red-programacion-de-servicios-y-procesos/
- https://www.jesusninoc.com/07/31/programacion-de-servicios-y-procesos-en-python/#4_Comunicacion_en_Red_en_Python
Conceptos
- FTP
- SSH
- RMI
Ejercicios
Conexión a un servidor FTP con Kotlin
Descargar archivos FTP desde Kotlin
Subir un archivo a un FTP desde Kotlin
Realizar un resumen en SHA512 de un documento descargado por FTP en Kotlin
Enviar correos electrónicos utilizando la biblioteca JavaMail desde Kotlin
Conectarse a un servidor SSH en Kotlin
Realizar en Kotlin una suma mediante una interfaz que contiene los métodos que se ejecutarán de forma remota (RMI)
Envío de formulario entre un cliente y un servidor mediante RMI en Kotlin
Envío de datos de un formulario entre cliente y servidor mediante RMI en JavaFX con Kotlin
Leyendo y analizando un Archivo JSON en línea desde Kotlin
Utilización de técnicas de programación segura:
- Prácticas de programación segura.
- Criptografía de clave pública y clave privada.
- Principales aplicaciones de la criptografía.
- Protocolos criptográficos.
- Política de seguridad.
- Programación de mecanismos de control de acceso.
- Encriptación de información.
- Protocolos seguros de comunicaciones.
- Programación de aplicaciones con comunicaciones seguras.
Teoría de programación segura
- https://www.jesusninoc.com/12/18/utilizacion-de-tecnicas-de-programacion-segura-programacion-de-servicios-y-procesos/
- https://www.jesusninoc.com/07/31/programacion-de-servicios-y-procesos-en-python/#5_Seguridad_en_Comunicaciones_y_Criptografia_en_Python
Conceptos
- Criptografía
- Simetría
- Asimetría
Ejercicios
Utilización de técnicas de programación segura
Combinaciones de la primera fila del teclado en Kotlin
Mostrar propiedades (java.class.path», «java.home», «java.vendor», «java.version», «os.name», «os.version», «user.dir», «user.home», «user.name») utilizando y sin utilizar el gestor de seguridad en Kotlin
Codificación y Decodificación en Base 64 en Java
Obtención de listado de algoritmos hash disponibles en Kotlin
Hash SHA-512 en Kotlin
- https://www.jesusninoc.com/07/04/hash-sha-512-en-kotlin-utilizando-java-security/
- https://www.jesusninoc.com/07/07/generacion-de-resumenes-sha-512-en-kotlin/