ELO-330: Programación de Sistemas

Tarea 2: Formulación y Selección de Preguntas en Foro

Objetivos

- Diseñar una arquitectura para comunicar, vía memoria compartida, procesos no relacionados entre sí dentro de una máquina
- Aplicar semáforos para el acceso exclusivo a datos compartidos en la memoria de una máquina
- Ejercitar el uso de GIT
- Preparar documentación de un sistema de software
- Conocer un mecanismo para ejecutar aplicaciones a través de la WEB usando PHP.

Contexto

    En las comunidades con democracia representativa es común organizar elecciones donde la comunidad elige a quienes la representarán en consejos, centros, o quienes las dirigirán. En estos procesos de elección es necesario informar a la comunidad los proyectos o visiones de cada miembro que aspira a ocupar un cargo de representación. Para tal propósito se suelen organizar foros o debates donde la comunidad tiene la opción de formular preguntas a los candidatos. Para organizar tal proceso, suele haber un moderador que recibe las preguntas y generalmente al azar las selecciona para ser respondidas por los candidatos.

    Inspirada en la situación previa, en esta tarea se desarrollarán tres programas: uno para ingresar una pregunta, otro para seleccionar una pregunta al azar, y un tercero para poner en marcha y concluir el proceso de preguntas. Los tres programas corren en una misma máquina. Con la ayuda de una pequeña aplicación escrita en PHP se permite que el programa seleccionar de preguntas pueda ejecutarse a través de la web y así mostrar cada pregunta en formato html a través de un browser. Se busca principalmente diseñar un sistema básico y aplicar conceptos de programación listados en los objetivo. No se busca un sistema a toda prueba; por ejemplo, aspectos de seguridad para restringir el acceso a ciertos usuarios no son considerados.

Programas a Desarrollar

Desarrolle los siguientes programas: foro_setup, foro_qsu, foro_qse.

foro_setup : Foro setup - programa configurador del inicio y poner término al foro.
Sintaxis:    foro_setup  ( b N | e t ) Nombre_de_zona_compartida
Descripción: foro_setup crea una zona de memoria compartida y los recursos necesarios para su acceso exclusivo por parte de otros procesos. Usted puede imaginar que se crea un buzón para almacenar preguntas. Este programa usa la biblioteca POSIX. La zona de memoria compartida almacena un arreglo de N entradas y otros datos para implementar una lista circular con una estructura de datos arreglo. Cada entrada del arreglo puede tener la siguiente estructura:

struct Question {
   char name[MAX_NAME_LENGTH];
   char text[MAX_QUESTION_LENGTH];
};

La lista circular de preguntas puede tener la siguiente estructura:

struct Circular_List {
   int head;   /* first list element index */
   int tail;      /* last list element index */
   struct Question questions[N];
}

El parámetro b indica que se desea dar inicio (begin) al foro en cuyo caso debe ingresarse además el parámetro N, número máximo de preguntas de la lista. El parámetro e pone término (end) al foro y libera los recursos compartidos creados con la opción b.  En ambos casos se debe especificar al final un nombre elegido por el coordinador del foro para identificar de manera única en el sistema un foro particular. Este string es usado por los programas para identificar los recursos compartidos dentro del sistema (memorias, semáforos, etc). El programador elige post-fijos de este nombre para identificar de manera única: la memoria compartida, los semáforos, u otros recursos compartidos.

foro_qsu: Foro question submission  - programa para ingresar una pregunta al foro.
Sintaxis: foro_qsu N Nombre_de_zona_compartida
Descripción: foro_qsu solicita al usuario su nombre completo y luego la pregunta. Luego de su ingreso, almacena ambos textos en la lista de preguntas y termina. El único parámetro indicado, Nombre_de_zona_compartida, permite identificar en forma única el foro al cual ingresar la pregunta. Si la lista de preguntas estuviera llena, foro_qsu se bloquea hasta ingresar su pregunta en la lista.

foro_qse: Foro question selection - programa para seleccionar una pregunta del foro.
Sintaxis: foro_qse N Nombre_de_zona_compartida
Descripción: foro_qse selecciona y remueve desde la lista circular una pregunta y envía a su salida estándar el nombre de su autor y la pregunta en cuestión. Para su mejor visualización en un navegador (tamaño, color, font, etc) el nombre del autor y su pregunta son enviados a la salida en formato HTML. El único parámetro indicado, Nombre_de_zona_compartida, permite identificar en forma única el foro del cual extraer la pregunta. Una vez seleccionada la pregunta ésta es removida de la lista de preguntas dando así la opción a que una nueva pregunta sea ingresada.

Mientras foro_setup y foro_qsu son ejecutados desde la línea de comandos, foro_qse es ejecutado a través de una aplicación PHP invocada desde un browser. Así el browser interpreta el lenguaje html y se logra un mejor despliegue de la pregunta.

Como parte de lo solicitado en las instrucciones para tareas en C (o C++), usted debe incluir la página web con el código PHP que permite ejecutar foro_qse.

Ayuda

* Aquí usted puede ver una página PHP básica para ejecutar una aplicación simple. La página PHP contiene:

<?php
system("./exe");
?>
Usted puede dar mayor formato a la página incorporando más rótulos HTML según desee.

* Aquí usted encuentra una aplicación simple que imprime en su salida estándar un texto formateado en html. Ésta es la aplicación que se ejecuta en la página PHP previa.

* Revise estos ejemplos y estos ejercicios.

* En clases o en horario de atención a estudiantes, el profesor atenderá con gusto cualquier consulta.
* Más ayuda puede ser incluida en la medida que surjan vuestras preguntas.
* Haga su tarea de a poco y con tiempo.