Cronograma de tareas
# | Fecha | Avance / Peso | Peso |
---|---|---|---|
1 |
17-abr |
30 |
|
2 |
01-may |
20 |
|
3 |
19-jul |
10 |
|
4 |
29-jul |
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:
-
Cree una clase base
HttpServer
en la carpetahttp
que represente al servidor web, la cual hereda deTcpServer
. -
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
). -
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 deThread
y se encargue de parsear las solicitudes HTTP del cliente. Por cada solicitud parseada crea un objetoHttpRequest
yHttpResponse
. -
Cree la jerarquía de objetos
HttpMessage
,HttpRequest
, yHttpResponse
. -
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).
-
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. -
Cree una aplicación web
EchoApp
que herede deHttpApplication
. Cree una instancia en elmain()
y conéctela con el servidor web. -
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
.
-
Si la ruta solicitada es una carpeta que existe dentro del sitio web,
IndexApp
:-
Buscará si existe un archivo con nombre
index.html
oindex.xhtml
. Si lo encuentra, responde con el contenido de este archivo usando elContent-Type
correspondiente. -
Si el archivo
index.html
oindex.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.
-
-
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 encabezadoContent-Type
mapeando la extensión del archivo a su MIME type. -
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
). -
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:
-
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.
-
Función "borrar" en el slider en el listado de registros, que borraría temporalmente del array de JavaScript.
-
Agregar un menú flotante con las opciones de "Crear registro" y "Cerrar sesión". Ver ion-fab de ionix.
-
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):
-
Instale WordPress en su máquina virtual de la ECCI y configúrelo como se vio en clases.
-
Aplique un tema no preinstalado. Es decir, escoja uno de los disponibles en el sitio de WordPress.org. Instálelo y actívelo.
-
Personalice su tema. Recorra todas las opciones que su tema le ofrece y aplique los cambios que le parecen adecuados.
Páginas estáticas:
-
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.
-
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:
-
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).
-
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).
-
Permitir comentarios en las entradas de actualizaciones, pero no en la entrada fija.