+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="es">
+ <head>
+ <title>Informe Trabajo Práctico 1</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" >
+ </head>
+ <body>
+ <h1>Carátula</h1>
+ <p><strong>Introducción a Sistemas Distribuídos (75.43)</strong></p>
+ <p>Trabajo Práctico Número 1</p>
+ <h2>Grupo</h2>
+ <dl>
+ <dt>Número de grupo:</dt>
+ <dd><p>10</p></dd>
+ <dt>Nombre del host:</dt>
+ <dd><p>lb10</p></dd>
+ <dt>Nombre de usuario:</dt>
+ <dd><p>sisdis10</p></dd>
+ </dl>
+ <table border="1" summary="Integrantes">
+ <caption>Integrantes</caption>
+ <tr><th>Nombre</th><th>Padrón</th><th>Módulo desarrollado</th></tr>
+ <tr>
+ <td>Leandro Lucarella</td>
+ <td>77891</td>
+ <td>Actualización de socios y administración de créditos</td>
+ </tr>
+ <tr>
+ <td>Jonathan Schein</td>
+ <td>COMPLETAR</td>
+ <td>COMPLETAR</td>
+ </tr>
+ <tr>
+ <td>Sebastián Arena</td>
+ <td>COMPLETAR</td>
+ <td>COMPLETAR</td>
+ </tr>
+ </table>
+ <h1>Índice</h1>
+ <ol>
+ <li><a href="#disenio">Diseño de las páginas</a></li>
+ <li><a href="#desarrollo">Desarrollo</a></li>
+ <li><a href="#herramientas">Herramientas de desarrollo</a></li>
+ <li><a href="configuracion">Configuración del servidor</a></li>
+ <li><a href="instalación">Instalación</a></li>
+ <li><a href="uso">Modo de uso</a></li>
+ </ol>
+ <h1><a name="disenio">Diseño de las páginas</a></h1>
+ <h2><a name="index_php">index.php</a></h2>
+ <p>
+ Esta página es el punto de partida del sistema. Normalmente se
+ encarga de mostrar el <a href="#admin_login_php"><span
+ lang="en">login</span></a>, pero puede encargarse también de
+ resumir la sesión o de ir directo a la <a
+ href="#admin_asociarse_php">asociación</a> de administradores si
+ correspondiese (por ejemplo, si se cerró el navegador y se vuelve
+ a abrir en un corto período de tiempo; o si es la primera vez que
+ se usa el sistema y todavía no hay 2 administradores asignados;
+ respectivamente).
+ </p>
+ <h2><a name="admin_login_php">admin.login.php</a></h2>
+ <p>
+ Es la página que realmente se encarga de hacer el
+ <span lang="en">login</span>. Debe ingresarse el código de usuario
+ (sea socio o asesor) y el password.
+ Si el usuario no existe, o si está mal el password, etc, se muestra
+ el correspondiente mensaje de error.
+ </p>
+ <div align="center">
+ <img src="admin.login.jpg"
+ alt="Captura de pantalla de admin.login.php" />
+ </div>
+ <h2><a name="admin_logout_php">admin.logout.php</a></h2>
+ <p>
+ Esta página, al igual que <a href="#index_php">index.php</a>, no
+ tiene contenido propio, sino que se encarga de borrar todos los
+ datos de la sesión del usuario y luego muestra la pantalla de <a
+ href="#admin_login_php"><span lang="en">login</span></a>
+ ingresarse el código de usuario (sea socio o asesor) y el password.
+ Si el usuario no existe, o si está mal el password, etc, se muestra
+ el correspondiente mensaje de error.
+ </p>
+ <h2><a name="admin_asociarse_php">admin.asociarse.php</a></h2>
+ <p>
+ Esta página asocia a un integrante del grupo (presente en el archivo
+ int_2005.txt si es socio o ase_2005.txt si es asesor). Si el sistema
+ todavía no tiene 2 administradores asignados, los usuarios que se
+ asocien, serán administradores (el sistema lo advierte, si es el
+ caso). Una vez asignados 2 administradores, la única forma de
+ cambiarlos es a través de la <a href="#admin_admin_php">página para
+ ceder los permisos de administración</a> (accesible sólo por los
+ administradores).
+ </p>
+ <div align="center">
+ <img src="admin.asociarse.jpg"
+ alt="Captura de pantalla de admin.asociarse.php" />
+ </div>
+ <h2><a name="admin_log_php">admin.log.php</a></h2>
+ <p>
+ Esta página muestra el <span lang="en">log</span> de actividades del
+ usuario. Permite elegir la fecha desde la cual se quieren ver las
+ actividades.
+ </p>
+ <div align="center">
+ <img src="admin.log.jpg"
+ alt="Captura de pantalla de admin.log.php" />
+ </div>
+ <h2><a name="admin_creditos_php">admin.creditos.php</a></h2>
+ <p>
+ En esta página el administrador puede agregar créditos a los
+ usuarios. Para realizar esta tarea el administrador debe ingresar su
+ password para corroborar su identidad como un mecanismo de seguridad
+ extra (ya que de todas formas sólo un usuario con permisos de
+ administrador puede realizar esta tarea). De esta manera, si por
+ alguna razón un usuario se quedara sin créditos para preguntar,
+ podría solicitar al administrador que le asigne algunos créditos.
+ Las razones de aprobación y la cantidad de créditos otorgados, queda
+ enteramente a consideración del administrador.
+ </p>
+ <div align="center">
+ <img src="admin.creditos.jpg"
+ alt="Captura de pantalla de admin.creditos.php" />
+ </div>
+ <h2><a name="admin_admin_php">admin.admin.php</a></h2>
+ <p>
+ A través de esta página un administrador puede <em>ceder</em> sus
+ permisos de administración. Una vez cedidos, este usuario dejará de
+ ser administrador y comenzará a serlo el nuevo usuario asignado.
+ Al ser esta acción de un compromiso considerable, el administrador
+ debe volver a ingresar su password para confirmarlo (aunque ya esté
+ logueado y sólo los administradores puedan realizar esta acción).
+ </p>
+ <div align="center">
+ <img src="admin.admin.jpg"
+ alt="Captura de pantalla de admin.admin.php" />
+ </div>
+ <!--
+
+ COMPLETAR!!!!
+
+ Template:
+
+ <h2>.php</h2>
+ <p>
+ </p>
+ <div align="center">
+ <img src=".jpg"
+ alt="Captura de pantalla de .php" />
+ </div>
+
+ -->
+ <h1><a name="desarrollo">Desarrollo</a></h1>
+ AGREGAR DESCRIPCION DE LO HECHO!!!!
+ <h2><a name="desarrollo_archivos">Formato de Archivos</a></h2>
+ <p>
+ Todos los archivos del sistema se almacenan en el directorio data.
+ Varios archivos son creados en <em>tiempo de ejecución</em> por el
+ servidor web, por lo tanto este directorio debe tener permisos de
+ escritura para el usuario con el que corre dicho servidor.
+ Además las fotos de los usuarios se guardan en el directorio fotos y
+ también se crean en <em>tiempo de ejecución</em>, por lo tanto este
+ directorio también debe tener permisos de escritura para el servidor
+ web. El nombre del archivo de la foto de un usuario es su número de
+ registro (si es socio) o código (si es asesor).
+ </p>
+ <p>
+ A continuación se describe el formato de cada archivo.
+ </p>
+ <h3><a name="desarrollo_archivos_int_2005_txt">int_2005.txt</a></h3>
+ <p>
+ Este archivo tiene formato <acronym lang="en"
+ title="Comma Separated Values">CSV</acronym> y está cargado previo
+ a la ejecución del sistema con todos los integrantes que
+ potencialmente serán <em>socios</em> del sistema.
+ Los campos del archivo son:
+ </p>
+ <ol>
+ <li>Número de registro</li>
+ <li>Nombre del usuario</li>
+ <li>Apellido del usuario</li>
+ </ol>
+ <h3><a name="desarrollo_archivos_ase_2005_txt">ase_2005.txt</a></h3>
+ <p>
+ Este archivo tiene formato <acronym lang="en"
+ title="Comma Separated Values">CSV</acronym> y está cargado previo
+ a la ejecución del sistema con todos los integrantes que
+ potencialmente serán <em>asesores</em> del sistema.
+ Los campos del archivo son:
+ </p>
+ <ol>
+ <li>Código (formato A+año+número correlativo)</li>
+ <li>Nombre del usuario</li>
+ <li>Apellido del usuario</li>
+ </ol>
+ <h3><a name="desarrollo_archivos_users_csv">users.csv</a></h3>
+ <p>
+ Este archivo tiene formato <acronym lang="en"
+ title="Comma Separated Values">CSV</acronym> y se crea en
+ <em>tiempo de ejecución</em>. En él se almacenan los usuarios
+ registrados en el sistema.
+ Los campos del archivo son:
+ </p>
+ <ol>
+ <li>
+ Número de registro/Código (dependiendo de si es socio o
+ asesor)
+ </li>
+ <li>Contraseña del usuario</li>
+ <li>Dirección de correo electrónico del usuario</li>
+ </ol>
+ <h3><a name="desarrollo_archivos_admin_txt">admin.txt</a></h3>
+ <p>
+ Este archivo tiene formato de texto plano y almacena un número de
+ registro o código (según sea socio o asesor) por línea (aunque
+ también puede ser visto como un archivo <acronym lang="en"
+ title="Comma Separated Values">CSV</acronym> con un sólo campo).
+ Su función es almacenar los identificadores de los 2 administradores
+ del sistema y es creado en <em>tiempo de ejecución</em>.
+ </p>
+ <h3><a name="desarrollo_archivos_creditos_csv">creditos.*.csv</a></h3>
+ <p>
+ Este archivo tiene formato <acronym lang="en"
+ title="Comma Separated Values">CSV</acronym> modificado, ya que
+ incluye en los primeros 11 bytes un <em>índice</em> a la última
+ entrada. Es decir, en los primeros 11 bytes se almacena la posición
+ del archivo en la que se encuentra el último <em>registro</em> CSV.
+ Dicha posición, se almacena en codificación ASCII como un número de
+ 10 cifras (con ceros delante) y un caracter de fin de línea al
+ final. Como normalmente sólo importa el último registro del archivo,
+ esto acelera mucho, ya que no hay que recorrerlo completo para
+ obtener dicho registro. De esta manera el acceso es casi directo y
+ se conserva la historia de la variación de los créditos.
+ </p>
+ <p>
+ Este archivo se crea en <em>tiempo de ejecución</em>, uno por cada
+ socio, en el momento en que se registra en el sistema. El nombre
+ del archivo incluye el número de registro del socio
+ (creditos.[nro_registro].csv) y en él se almacena la
+ historia de créditos de dicho usuario.
+ Los campos del archivo son:
+ </p>
+ <ol>
+ <li>Timestamp con la fecha en la que se creó la entrada</li>
+ <li>Cantidad de créditos que tiene el socio</li>
+ <li>
+ Cantidad de respuestas con <span lang="en">ranking</span>
+ 2 o más que le falta para obtener los 5 créditos extra
+ </li>
+ <li>Cantidad de días que lleva sin preguntar</li>
+ </ol>
+ <p>
+ Este archivo se actualiza en etapas distintas. Cuando el usuario
+ ingresa al sistema, se recalculan los créditos para ver si se le
+ deben restar por cantidad de días sin preguntar. Se resta 1 crédito
+ por cada 30 días sin responder. El cálculo realizado es el
+ siguiente:
+ </p>
+ <p>
+ Llamaremos FECHA al campo 1 del registro del archivo leído, CREDITOS
+ al campo 2 y DIAS al campo 4. Llamaremos FECHA_ACTUAL a la fecha del
+ instante del login. Ambas fechas expresadas como timestamps. Para
+ calcular la diferencia en días entre 2 fechas, simplemente se restan
+ y se divide por 86400 (cantidad de segundos en un día). Entonces
+ para saber la cantidad de días que hace que no se pregunta en el
+ instante del login (DIAS_NUEVO), se realiza: <code>DIAS_NUEVO =
+ DIAS + (FECHA_ACTUAL - FECHA) / 86400</code>. Luego, si DIAS_NUEVO
+ es más que 30, se calculan los nuevos créditos (CREDITOS_NUEVO) como
+ <code>CREDITOS_NUEVO = CREDITOS - (DIAS_NUEVO / 30)</code> y la
+ nueva cantidad de días sin preguntar restantes (DIAS_RESTO) como
+ <code>DIAS_RESTO = DIAS_NUEVO % 30</code> (siendo % el resto de la
+ división entera), ya que estos días sin pregutnar <em>extra</em> que
+ todavía no llegan a sumar 30 como para restar créditos, deben ser
+ considerados para futuros cálculos. Finalmente en el archivo de
+ créditos se guarda un nuevo registro con los datos CREDITOS_NUEVO y
+ DIAS_RESTO en los campos 2 y 4 respectivamente. El resto de los
+ campos (exceptuando la fecha, que siempre se guarda con la fecha de
+ modificación del archivo) quedan intactos.
+ </p>
+ <p>
+ El otro caso en donde se actualiza este archivo (se actualizan los
+ créditos) es cuando un socio realiza una pregunta. En este caso,
+ solamente se resta un crédito (campo 2) y pone se resetean los días
+ sin preguntar (el campo 4 se pone en cero).
+ </p>
+ <p>
+ Finalmente, el último caso en donde se actualiza este archivo (se
+ recalculan los créditos) es cuando un usuario califica una respuesta
+ con un valor igual o superior a 2. En este caso se suma uno al campo
+ 3 y se verifica si es igual o superior a 5 (en realidad jamás será
+ superior a 5). Si lo es, se pone en cero y se agregan 5 créditos.
+ </p>
+ <h3><a name="desarrollo_archivos_log_csv">log.*.csv</a></h3>
+ <p>
+ Este archivo tiene formato <acronym lang="en"
+ title="Comma Separated Values">CSV</acronym>. y se crea en
+ <em>tiempo de ejecución</em>, uno por cada usuario, en el momento
+ en que se registra en el sistema. El nombre del archivo incluye el
+ número de registro del socio o código del asesor según el caso
+ (log.[nro_registro/codigo].csv) y en él se almacena la el log de
+ actividades (es decir, cada vez que el usuario realiza una acción en
+ el sistema, se agrega una entrada a este archivo que la describe).
+ Los campos del archivo son:
+ <ol>
+ <li>Timestamp con la fecha en la que se creó la entrada</li>
+ <li>Descripción de la acción realizada</li>
+ </ol>
+ <h1><a name="herramientas">Herramientas de desarrollo</a></h1>
+ <p>
+ Cada integrante eligió herramientas de desarrollo propias, más allá
+ de las herramientas obligatorias que había que usar
+ indefectiblemente para realizar el TP (como PHP y Apache).
+ A continuación se enumeran las herramientas utilizadas por cada
+ integrante.
+ </p>
+ <h2>Leandro Lucarella</h2>
+ <dl>
+ <dt>Navegador</dt>
+ <dd><p>Mozilla Firefox, w3m</p></dd>
+ <dt>Editor de texto</dt>
+ <dd><p>VIM</p></dd>
+ <dt>Validador</dt>
+ <dd><p>Herramientas de w3c: tidy y el servicio de validación
+ online (http://validator.w3.org/)</p></dd>
+ <dt>Herramientas de diseño de HTML</dt>
+ <dd><p>Ninguna</p></dd>
+ </dl>
+ <h2>Jonathan Schein</h2>
+ <dl>
+ <dt>Navegador</dt>
+ <dd><p></p></dd>
+ <dt>Editor de texto</dt>
+ <dd><p></p></dd>
+ <dt>Validador</dt>
+ <dd><p></p></dd>
+ <dt>Herramientas de diseño de HTML</dt>
+ <dd><p></p></dd>
+ </dl>
+ <h2>Sebastián Arena</h2>
+ <dl>
+ <dt>Navegador</dt>
+ <dd><p></p></dd>
+ <dt>Editor de texto</dt>
+ <dd><p></p></dd>
+ <dt>Validador</dt>
+ <dd><p></p></dd>
+ <dt>Herramientas de diseño de HTML</dt>
+ <dd><p></p></dd>
+ </dl>
+ <h1><a name="configuracion">Configuración del servidor</a></h1>
+ <p>
+ COMPLETAR!!! Por ahora nada, sólo que ande PHP.
+ </p>
+ <h1><a name="instalación">Instalación</a></h1>
+ <p>
+ COMPLETAR!!! Supongo que es suficiente con copiar los archivos de
+ src/ al public_html, ponerle permisos de lectura para el apache en
+ todo y permisos de escritura en el directorio data/ y fotos/.
+ </p>
+ <h1><a name="uso">Modo de uso</a></h1>
+ <p>
+ COMPLETAR!!! Mucho de esto por ahora está en la descripción del
+ diseño...
+ </p>
+ </body>
+</html>
+
+<!-- vim: set et sw=4 sts=4 : -->