|
Por
Jackeline Aguilar y Lucio Torrico
Pagina Nº 1
INTRODUCCIÓN
Bajo
el marco de la filosofía de software libre se ha implementado
una aplicación haciendo uso de diversas herramientas, conceptos
y técnicas.
Se
trata de ofrecer calificaciones a los estudiantes de ciertas
materias a través de la red Internet, agregando utilidades de
bases de datos y criptografía.
Además
de utilizar -básicamente- herramientas bajo linux, se ha
combinado -en algunos casos- con herramientas de otra plataforma
con el propósito de mostrar la interacción e integración que posibilita
linux.
DESARROLLO
Esquemáticamente
ocurre lo siguiente:
Un
usuario -estudiante para el caso- desde una terminal cliente con
acceso
a Internet accesa a la página web http://www.servidor.edu/docente/materia
(No en servicio), dicha página incluye datos de la materia
además
de la
opción de recurrir a otra página para consultar sus notas.
Utilizando
esta opción el estudiante se encuentra en una de dos
posibilidades, dependiendo si es de una u otra asignatura:
En
el primer caso -ya en el servidor- se obtiene el dato digitado y
a través de
un script en perl se accesa a una clase (tabla) bajo postgres -mediante
una
consulta embebida en el script- que accesa al registro correspondiente.
El script devuelve como salida una nueva página con los datos encontrados
o -si es el caso- indicando que dicho registro no existe.
En
el segundo caso -también en el servidor- se obtiene el dato digitado
y a
través de un script en perl se accesa a un archivo que contiene
los
registros respectivos ya encriptados, con ayuda de otro archivo
de apoyo
se desencripta el registro y -el script- devuelve los datos encontrados,
o bien se indica que tal registro no existe.
Se
ha manejado archivos en un caso y bases de datos en el otro para
graficar la variedad de alternativas que ofrece linux.
Más
técnicamente:
Las
páginas web se han escrito en un editor de texto que bien podría
ser el 'vi'.
El URL
específico es http://www.umsanet.edu.bo/docentes/torrico
(No en servicio)
La página
de calificaciones se denomina notas.htm en un caso, y notaslf en
el otro.
A continuación
se muestra el contenido de dichas páginas en html.
Para
notas.htm:
<html>
<head>
<title>CALIFICACIONES</title>
<SCRIPT
Language="JavaScript">
<!--
//Esta
función controla que se haya digitado sólo
números, al introducir el //carnet
//'cid'
es la variable tipo 'input' de tamaño 9
y largo máxima 8 que recibe el //carnet digitado
function
verifica(form)
{
if (form.cid.value.length
< 1)
//si la longitud es cero emite una alerta
{
alert("Digite
su carnet!!");
form.cid.focus();
//reestablece el foco al campo cid
return (false);
}
var simbolosOK = "0123456789";
//son los símbolos validos
var
carnet = form.cid.value;
var todoOK = true;
for
(i = 0; i < carnet.length;
i++)
//se revisan uno a uno los símbolos
//de
carnet
{
//para ver si son símbolos válidos
digito
= carnet.charAt(i);
for (j = 0; j
< simbolosOK.length;
j++)
if
(digito == simbolosOK.charAt(j))
break;
if (j == simbolosOK.length)
{
todoOK
= false;
//hay un símbolo que no es válido
break;
}
}
if (!todoOK)
{
alert("Escriba sólo dígitos!");
//emite una alerta pues hay un
//símbolo
no valido
form.cid.value
= "";
//en el carnet digitado
form.cid.focus();
//devuelve el foco al campo cid
return
(false);
//y concluye
}
form.submit();
//si el carnet contiene sólo dígitos se envía el dato
return(true);
}
//-->
</SCRIPT>
</head>
<body
background="imagenes/fondo.jpg" bgproperties="fixed">
<p
align="center">
<font
color="#FFFFFF" size="4">
<strong>CALIFICACIONES</strong></font></p>
</font> </p>
<p
align="left">
<font color="#FFFFFF" size="1">DIGITE SU
CARNET DE IDENTIDAD</font></p>
<!--
El formulario incluye
un campo para digitar
el carnet y un botón para enviar el dato-->
<form
method="POST" action="/cgi-bin/notaspg.pl">
<p><font
color="#FFFFFF"><input type="text" size="9" maxlength="8"
name="cid">
<input
type="button" name="B1" value="consultar" onClick="verifica(this.form)">
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<input
type="password" size="0" maxlength="0" name="P1">
</font></p></form>
</body>
</html>
Para notaslf.htm.
en este caso no se incluyen comentarios pues la página es muy semejante
a la anterior excepto por la inclusión -además del campo 'ci' que
recibe el carnet- de un campo adicional de tipo password denominado
'cl', para el cual también se controla que tenga únicamente símbolos
válidos, letras mayúsculas y números en este caso.
<html>
<head>
<title>CALIFICACIONES</title>
<SCRIPT
Language="JavaScript">
<!--
function
verifica(form)
{
if (form.ci.value.length <
1)
{
alert("Digite
su carnet!");
form.ci.focus();
return (false);
}
if (form.cl.value.length <
1)
{
alert("Digite
su clave!");
form.cl.focus();
return (false);
}
var simbolosOK = "0123456789";
var carnet = form.ci.value;
var todoOK = true;
for (i = 0; i < carnet.length; i++)
{
car = carnet.charAt(i);
for (j = 0; j
< simbolosOK.length;
j++)
if (car == simbolosOK.charAt(j))
break;
if (j == simbolosOK.length)
{
todoOK
= false;
break;
}
}
if (!todoOK)
{
alert("Escriba
sólo dígitos en su carnet!");
form.ci.value
= "";
form.ci.focus();
return (false);
}
var
simbolosOK = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÑ";
var clave = form.cl.value;
var todoOK = true;
for (i = 0; i < clave.length; i++)
{
car = clave.charAt(i);
for (j = 0; j
< simbolosOK.length;
j++)
if
(car == simbolosOK.charAt(j))
break;
if (j == simbolosOK.length)
{
todoOK
= false;
break;
}
}
if (!todoOK)
{
alert("Escriba
bien su clave!");
form.cl.value
= "";
form.cl.focus();
return (false);
}
form.submit();
return(true);
}
//-->
</SCRIPT>
</head>
<body
background="imagenes/fondo.jpg" bgproperties="fixed">
<p
align="center">
<font
color="#FFFFFF" size="4">
<strong>CALIFICACIONES</strong></font></p>
<p
align="center"><font color="#FFFFFF"></font> </p>
<p
align="left"><font color="#FFFFFF" size="1">DIGITE
SU CARNET DE IDENTIDAD Y SU CLAVE</font></p>
<form
method="POST" action="/cgi-bin/Simetrico2">
<p><font
color="#FFFFFF">
<input
type="text" size="9" maxlength="8" name="ci">
<input
type="password" size="11" maxlength="10" name="cl">
<input
type="button" name="B1" value="consultar" onClick="verifica(this.form)">
</font></p></form>
<p
align="left"><font color="#FFFFFF"></font> </p>
<p
align="left"> </p>
</body>
</html>
Los
compañeros que tienen a su cargo el servidor han utilizado para
su unidad también herramientas y plataforma linux. A saber, sistema
operativo de la distribución Red Hat 6.0 con el kernel 2.2.5-15,
el
servidor Apache/1.3.12, perl 5.003, para mencionar lo principal.
También
se ha instalado -con rpm- postgresql 6.5.3 que es donde se
ha creado la base de datos "notas" con la clase "inf154" cuya
estructura -simple- es como sigue:
Atributo
1: ci
//por carnet de identidad
Atributo
2: nombre
//incluye Nombre y Apellido
Atributo
3: npp
//por nota
Dicha
clase se utiliza en la averiguación de notas a través de bases
de datos. Es claro que para la creación de esta base de datos ha
sido
necesario crear usuarios postgres a partir del superusuario postgres:
en particular el usuario “www” a quien el propietario de la base
de
datos “notas” le ha dado acceso de consultas a su tabla “inf154”
con
la orden “grant select on inf154 to www” en el monitor interactivo
que
despierta la orden “psql notas”.
El
script en perl que toma el carnet digitado y devuelve una página
es
el siguiente (notaspg.pl):
#!/usr/bin/perl
-w
use
Pg;
#el módulo que conecta perl con postgres
require
"cgi-lib.pl";
#el módulo que permite recuperar los datos
&ReadParse(*input);
#enviados por el formulario de la página web
$carnet
= $input{'cid'};
#recupera el carnet digitado
print
"Content-type:text/html\n\n";
#aquí se empieza a desplegar
print
"<HTML><HEAD>";
#la página de respuesta
print
"</HEAD>";
print
"<BODY bgcolor='#FAF7BD'>";
print
"Carnet digitado: "."$carnet<BR>";
#incluyendo el carnet digitado
$conn
= Pg::connectdb("dbname=notas");
#conexión a la base de datos
$query
= "select * from inf154 where ci="."$carnet";
#prepara el query
$result
= $conn->exec($query);
#ejecuta el query
$nt
= $result->ntuples;
#obtiene el número de tuples
#en
la respuesta al query
if ($nt == 1) {
@row = $result->fetchrow;
#el registro en el arreglo row
$nombre = $row[1];
#separar el Atributo 2, y el 3
$notapp = $row[2];
# e imprimir los datos
print "<br>"."$nombre"." su nota del primer parcial
es ";
print
"$notapp"." sobre 100";
}
#en
otro caso hay cero tuples
#no
hay registros con tal ci
else {
print "<br>Dicho carnet no
está registrado
en la asignatura.";
};
print "</BODY></HTML>";
#fin del script
|