Cursos disponibles

Algoritmos Distribuidos Postgrado

El propósito de esta materia es proporcionar al estudiante conocimientos teórico-prácticos que le permitan comprender los componentes fundamentales de los sistemas distribuidos.

El curso tendrá un carácter teórico-práctico a fin de familiarizar al estudiante con herramientas básicas de programación sobre plataformas distribuidas.

El contenido de este curso está organizado en siete temas: Generalidades de los sistemas distribuidos, comunicación, procesos, nominación, consistencia y duplicación, tolerancia a fallas y seguridad. Simultáneamente se estudian herramientas básicas de programación distribuida, tales como los sockets y librerías de comunicación.

Al finalizar el curso, el estudiante será capaz de identificar los componentes principales de un sistema distribuido y habrá adquirido conocimientos necesarios para analizar, diseñar y evaluar soluciones para ambientes de computación distribuida. Así mismo se habrá familiarizado con alguna herramienta básica de programación de aplicaciones distribuidas.

Sistema distribuido

Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El programador accede a los componentes de software (objetos) remotos, de la misma manera en que accedería a componentes locales, en un grupo de computadoras que usan un middleware entre los que destacan (RPC) y SOAP para conseguir un objetivo.

Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo. Esto se denomina tolerancia a fallos.

El tamaño de un sistema distribuido puede ser muy variado, ya sean decenas de hosts (red de área local), centenas de hosts (red de área metropolitana), o miles, o millones de hosts (Internet); esto se denomina escalabilidad. 1​

Las aplicaciones web desempeñan un papel vital en todas las organizaciones modernas. Pero, si una organización no prueba y asegura adecuadamente sus aplicaciones web, los adversarios pueden comprometer estas aplicaciones, dañar la funcionalidad de la empresa y robar datos. Las aplicaciones web son actualmente la fuente predominante de vulnerabilidades de software explotadas en ataques en línea en todo el mundo. La mayoría de estos ataques explotan clases simples y fácilmente reparables de vulnerabilidades de seguridad. Desafortunadamente, muchas organizaciones operan bajo la impresión errónea de que un escáner de seguridad de aplicaciones web descubrirá de manera confiable fallas en sus sistemas. Existe una necesidad clara y muy insatisfecha de que todos los programadores web tengan conocimientos de seguridad. También hay una gran escasez mundial de profesionales de la seguridad capaces de evaluar la seguridad de las aplicaciones web.

Este curso proporciona una introducción a la rama de la seguridad de la información denominada Seguridad de Aplicaciones Web que trata específicamente con la seguridad de los sitios web, las aplicaciones web y los servicios web. Se cubren los principales tipos de vulnerabilidades en las aplicaciones web y se introducen las mejores prácticas profesionales actuales en codificación y testing, proporcionando el conocimiento y habilidades primordiales necesarias para desarrollar y evaluar aplicaciones web de manera satisfactoria.

El abordaje de este tema se hace principalmente a través del conocimiento de las principales técnicas que emplean los atacantes para vulnerar los sistemas de las organizaciones. Parte del principio de que para poder realizar una buena defensa, es necesario conocer las amenazas. Este enfoque permite que los estudiantes puedan adentrarse en este campo, y que además de emplear soluciones de escaneo de vulnerabilidades, puedan realizar penetration testing de aplicaciones web.


     La ciencia de la computación es una disciplina que se basa en un elemento tecnológico: el computador. Existe una relación fundamental entre el hardware y diversos aspectos de programación, por ende, para poder escribir software de forma adecuada es muy importante comprender el sistema de computación como un todo. Debido a esto se requiere un dominio de los aspectos teóricos y de los fundamentos tecnológicos involucrados en todo sistema de cómputo. El curso es de carácter teórico-práctico, involucrando a su vez el desarrollo de proyectos y laboratorios que permiten poner en práctica los conocimientos impartidos.

El objetivo de este curso es ayudar a los estudiantes a comprender esta profunda transformación que está causando Cloud Computing y tecnologías emergentes relacionadas, como la Inteligencia Artificial. Este curso revisará las tecnologías de Cloud Computing que darán forma a nuestro futuro cercano, así como también intentará visualizar en qué dirección nos llevará esta tecnología.