Cronograma de tareas

# Fecha Avance / Peso Peso

1

17-abr

server1_echo

30

2

01-may

server2_index

20

3

19-jul

ionix_app

10

4

29-jul

cms_homepage

10

server1_echo

Cree un servidor web que replica los mensajes de solicitud que recibe de los clientes. Adapte el código provisto (webserv) para que:

  1. Cree una clase base HttpServer en la carpeta http que represente al servidor web, la cual hereda de TcpServer.

  2. Permita que el usuario indique el puerto donde debe escuchar por argumento de línea de comandos. Haga al servidor web escuchar perennemente en el puerto indicado por el usuario (ver clase base TcpServer).

  3. Maneje conexiones TCP. Cada vez que un cliente se conecte cree un hilo de ejecución para que la atienda. Cree un objeto HttpConnectionHandler que se herede de Thread y se encargue de parsear las solicitudes HTTP del cliente. Por cada solicitud parseada crea un objeto HttpRequest y HttpResponse.

  4. Cree la jerarquía de objetos HttpMessage, HttpRequest, y HttpResponse.

  5. Mejore la concurrencia del servidor. En lugar de crear un hilo por cada conexión, cree de antemano una cantidad predefinida de hilos que el usuario puede modificar por argumentos de línea de comandos. Cada vez que recibe una solicitud de conexión, coloque la conexión en una cola de espera, que los hilos atenderán cuando estén ociosos (patrón productor-consumidor).

  6. Haga que el servidor web pueda conectarse (plugins) con varias aplicaciones web. Cree una clase base HttpApplication que represente estas aplicaciones. El servidor web tendrá un contenedor de punteros a estas aplicaciones, inicialmente vacío.

  7. Cree una aplicación web EchoApp que herede de HttpApplication. Cree una instancia en el main() y conéctela con el servidor web.

  8. Haga que la aplicación EchoApp enrute los URI de solicitud que inician con /echo/, y responda con una página web HTML que contiene el texto idéntico de la solicitud.

server2_index

Cree una segunda aplicación web llamada IndexApp que herede de HttpApplication, la cual se encargará de servir directorios y archivos del servidor web ubicados en la carpeta del sitio web y sus subcarpetas. La carpeta del sitio web es la carpeta de trabajo actual, es decir, donde se invoca el servidor web desde la línea de comandos.

Cada vez que IndexApp se le invoca el método handleHttpRequest, hará lo siguiente sólo si la solicitud es por el metodo GET.

  1. Si la ruta solicitada es una carpeta que existe dentro del sitio web, IndexApp:

    1. Buscará si existe un archivo con nombre index.html o index.xhtml. Si lo encuentra, responde con el contenido de este archivo usando el Content-Type correspondiente.

    2. Si el archivo index.html o index.xhtml no existe en la carpeta, IndexApp responderá con una página web XHTML creada con el listado de archivos NO ocultos de la carpeta. Es decir, IndexApp solicitará al sistema operativo la lista de archivos existentes en la carpeta (ej.: man readdir). Con esta lista creará una tabla XHTML que contiene en las columnas el nombre del archivo, su tamaño en bytes, y la fecha de modificación del mismo. El nombre del archivo será un enlace hacia el archivo mismo. Los nombres de las columnas aparecerán en el encabezado de la tabla. En el pie de tabla se presentará un resumen que indica la cantidad de archivos, la suma de los tamaños de los archivos, y un enlace para subir a la carpeta "padre". Esta página debe ser válida de acuerdo a los estándares web.

  2. Si la ruta solicitada es un archivo que existe dentro del sitio web, IndexApp, responderá con el contenido íntegro del archivo. La lectura del archivo deberá hacerse en binario incluso aunque su tipo sea de texto, para que coincida con el tamaño reportado por el sistema operativo (man 2 stat). IndexApp le dará un valor apropiado al encabezado Content-Type mapeando la extensión del archivo a su MIME type.

  3. Si la ruta solicitada no existe ni como directorio ni como archivo, IndexApp creará y responderá con una página de error y el código de estado 404 (NOT FOUND).

  4. Si el directorio o archivo existe pero no se puede leer, o su nombre inicia con ., o cualquiera de las carpetas ancestros inician con ., IndexApp creará y responderá con una página de error y el código de estado 403 (FORBIDDEN).

Instancie su IndexApp en el main() y encadénela a su servidor web, de tal forma que sea la segunda aplicación después de EchoApp. De esta forma, IndexApp sólo recibirá las solicitudes que no fueron atendidas por EchoApp.

ionix_app

Con el framework ionix agregar a su aplicación:

  1. Función "editar": agregar un botón en la pantalla de ver registro o una opción en el slider en el listado de registros (donde sale el borrar y la opción azul que dice otro), o ambos.

  2. Función "borrar" en el slider en el listado de registros, que borraría temporalmente del array de JavaScript.

  3. Agregar un menú flotante con las opciones de "Crear registro" y "Cerrar sesión". Ver ion-fab de ionix.

  4. Incorporar a elección propia un componente visual de ionic, de los UI components disponibles, como por ejemplo:

    • Cambiar el listado por un carrusel/slider.

    • Cambiar el sliding button del listado para que cuando se le dé clic a un elemento salga un Action Sheet con las opciones de "Ver, Borrar y Editar".

cms_homepage

Elabore su página personal con un sistema administrador de contenidos (CMS):

  1. Instale WordPress en su máquina virtual de la ECCI y configúrelo como se vio en clases.

  2. Aplique un tema no preinstalado. Es decir, escoja uno de los disponibles en el sitio de WordPress.org. Instálelo y actívelo.

  3. Personalice su tema. Recorra todas las opciones que su tema le ofrece y aplique los cambios que le parecen adecuados.

Páginas estáticas:

  1. Elabore su currículo como una página estática. Incluya secciones para datos personales, educación, experiencia laboral, e conocimientos técnicos e intereses.

  2. Escriba una página de Intereses y pasatiempos. Agregue una imagen y al menos un párrafo por cada interés o pasatiempo.

Entradas de blog:

  1. Cree una entrada para su Proyecto (adaptación del juego de búhos). Agregue una captura de la pantalla de juego que sea atractiva y un texto. Haga que la imagen sea un enlace hacia la aplicación (en su respectivo puerto). Use persuación en su texto para invitar a sus visitantes a entrar en la aplicación. Haga que esta entrada del blog sea fija (siempre aparece de primero).

  2. Actualizaciones de la aplicación web. Publique al menos cuatro actualizaciones (releases) de la aplicación. Un release consta de una versión (por ejemplo, v1.0.4), una captura de pantalla, y una lista de nuevas funcionalidades implementadas (what’s new).

  3. Permitir comentarios en las entradas de actualizaciones, pero no en la entrada fija.