Programación de servicios y procesos en Kotlin y Python

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

Conceptos

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

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

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

Conceptos

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

Proyecto de conexión remota


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

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

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

Generar un resumen HMAC-MD5 utilizando Kotlin

Cálculo de Hash SHA-512 en Kotlin con una semilla

Cálculo de Hash SHA-512 en Python con una semilla

Cifrado y descifrado simple de palabras en Kotlin

Cifrado simétrico TDEA (Triple Data Encryption Algorithm) en Kotlin utilizando la biblioteca Java de javax.crypto

Cifrado simétrico TDEA (Triple Data Encryption Algorithm) en Python

Cifrado simétrico AES (Advanced Encryption Standard) en Kotlin, utilizaremos la clase Cipher proporcionada por el paquete javax.crypto

Cifrado simétrico AES (Advanced Encryption Standard) en Python

Almacenar claves privadas y públicas

Cifrar y descifrar utilizando clave pública

Cifrar y descifrar con clave secreta que se ha transmitido mediante cifrado asimétrico

Socket SSL en Kotlin