Вы находитесь на странице: 1из 191

TRADUCIDO

Ingeniera del software para aplicaciones en internet


por Eve Andersson, Philip Greenspun, y Andrew Grumet
MIT Press 2006; ISBN 0262511916; adquiera una copia en papel de la versin original en ingls desde
amazon.com
Puede acceder con su navegador Web a la versin original en ingls de este libro.
Translation statistics
Prefacio
Agradecimientos
Captulos:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.

click en accesos a los captulos

Introduccin
Elementos bsicos
Planificacin
Estructura del software
Registracin y gestin de usuarios
Gestin de contenidos
Modularidad del software
Foros de discusin
Cmo agregar usuarios mviles a su comunidad
Tratamiento de voz (VoiceXML)
Crecimiento airoso
Bsqueda
Planificacin: segunda vuelta Planificacin Redux
Computacin distribuda con HTTP, XML, SOAP, y WSDL
Metadatos (programas que escriben programas)
Anlisis de la actividad de los usuarios
Ponerlo pblicamente por escrito

Captulos de referencia:
A. HTML
B. Gestin de compromisos por Cesar Brea
C. Estndares para la calificacin (de utilidad para estudiantes del MIT)
Glosario
Para el instructor
Ejemplo de contrato (entre el equipo de estudiantes y el cliente)
Sobre los autores
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Introduccin
parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y
Andrew Grumet
La preocupacin por el hombre y su destino debe siempre ser el inters principal de todo
esfuerzo tcnico. Nunca lo olvides entre tus diagramas y ecuaciones.
-- Albert Einstein
Con doce aos de edad y las herramientas que vienen de manera estndar en cualquier mquina Linux o
Windows se puede construir una bonita aplicacin Web. Por lo tanto, vale la pena preguntarse: dnde
est el desafo, qu es lo interesante, que nos inspira en las aplicaciones Web?
Existen algunos desafos relacionados con la tecnologa que son fciles de identificar. Por ejemplo, en
muchas situaciones sera ms conveniente interactuar con un sistema de informacin hablndole y
escuchando. Ests en una tina de bao leyendo el New Yorker. Quieres saber si hay alguna cita temprana
en tu calendario que podra impedir que sigas leyendo un artculo interesante sin salir de la tina. Te has
comprado un reproductor de DVD. Puedes leer el manual y dominar el uso del control remoto. Pero en
una habitacin a oscuras, no sera mucho ms fcil si le pudieras pedir a la casa o a la mquina:
retrocede 30 segundos? Vas conduciendo tu automvil y te asalta la curiosidad por saber cul es la
poblacin de Tailandia y el tamao relativo de ese pas comparado con el estado de California; la voz es tu
nica opcin.
Podemos identificar fcilmente algunas de las caractersticas ausentes en las aplicaciones web tpicas. Por
ejemplo, sesiones compartidas y portables. Puedes usar Internet para compartir tu msica o fotografas.
Puedes compartir tus documentos. Lo nico que generalmente no se puede compartir en Internet es tu
experiencia al usar Internet. Suponte que ests navegando por un sitio de viajes, planeando un recorrido
para t y tres amigos. No sera bueno si tus compaeros pudieran ver lo que ests mirando, pgina a
pgina, y enviar comentarios hablados en una sesin de voz compartida? Si todos tienen la misma marca
de computadora y el software especial, esto es bastante sencillo. Sin embargo, las sesiones compartibles
debieran ser caractersticas propias de los sitios y se deberan poder usar con cualquier navegador. La
misma infraestructura se podra utilizar para hacer que las sesiones sean portables. Entonces podras
comenzar a navegar en una computadora de escritorio con pantalla grande y terminar la sesin viajando en
un taxi y usando un telfono mvil.
Hablando de navegadores mviles, sus pequeas pantallas nos obligan a plantear las cuestiones de
interfaces multimodales y personalizacin. Desde que el General Packet Radio Service o GPRS se ha
esparcido por el mundo a finales de 2001, se hizo posible que un usuario mvil pueda hablar y escuchar
mediante una conexin de voz, mientras est usando a la vez pantallas de texto entregadas mediante una
conexin Web. Como ingeniero, te tocar decidir cundo tiene sentido hablar con el usuario, escucharlo,
desplegar una pantalla de opciones escritas y solicitarle que seleccione y haga clic para elegir una de ellas.
Por ejemplo, cuando se reserva un vuelo en una aerolnea resulta mucho ms conveniente decir a viva voz
las ciudades de partida y llegada, que elegir desde un men de miles de aeropuertos en todo el mundo.
Pero si hay diez opciones para hacer la conexin, no vas a querer esperar a que la computadora te lea las
opciones y menos an mantener en la cabeza las cuestiones relacionadas a esas diez opciones. Sera
mucho ms conveniente que el servicio de viajes te enve una pgina Web con las diez opciones escritas y
listas para elegir.
En el lado de la personalizacin, considera los sistemas de coparticipacin de conocimiento (knowledge

sharing) o gestin del conocimiento (knowledge management). Al principio, los trabajadores estn
contentos simplemente con tener uno de estos sistemas funcionando. Pero luego de unos aos el sistema
se llena de tantas cosas que resulta difcil encontrar algo relevante. Si consideramos una organizacin que
genera un millar de documentos por da, no sera interesante disponer de un sistema de informacin lo
bastante listo como para imaginarse cules son los tres que presumiblemente te resultarn ms
interesantes? Y mostrar los ttulos en tres lneas de la pantalla de tu telfono?
La pregunta Puede la computadora ayudarme a ser todo lo que puedo ser? presenta un reto ms
interesante. Los ingenieros con frecuencia construyen cosas que son fciles de lograr desde la ingeniera.
Cincuenta aos despus de la invencin de la televisin comenzamos a construir la televicin de alta
definicin (HDTV o high-definition television). Pueden los ingenieros construir un estndar de mayor
resolucin? Seguro. Le interesa a los clientes? Hasta ahora, no parece que le importe a muchos.
Vamos a ponerlo de este modo: si te dan a elegir entre ver Laverne and Shirley en HDTV y bajar diez
kilogramos de peso corporal, con cul te quedas?
Me lo imaginaba.
Si mides cuantos metros de estantes estn ocupados en tu librera local vas a descubrir un mundo de metas
humanas sin alcanzar. Muchas de esas metas son difciles de lograr porque carecemos de fuerza de
voluntad. Los atletas olmpicos flaquean a veces en su fuerza de voluntad. Pero ellos llegan a las
olimpadas y nosotros seguimos excedidos de peso. Porqu? Tal vez porque ellos tienen un entrenador y
nosotros no. Dnde estn los desafos ingenieriles en la construccin de un asesor personal de dieta
basado en red? Primero, echemos un vistazo a la interaccin propuesta con el sistema de informacin que
denominaremos Dra. Rachel:

09:00: ests de camino al trabajo; llamas a Dr. Rachel desde tu telfono mvil:
Dra. Rachel: Qu desayunaste esta maana? (ella sabe que es de maana en
tu zona horaria tpica; sabe tambin que noa has llamado antes en el da de
hoy)
T: Un vaso de jugo de naranjas. Dos huevos. Dos rebanadas de pan. Caf
con leche y azcar.
Dra. Rachel: El vaso de jugo de naranjas, era pequeo, mediano o grande?
T: Mediano
Dra. Rachel: Algo ms?
T: cortas la comunicacin.

10:45: tu compaero de oficina programador trae una caja de donuts; te comes una.
Como ests frente a tu computadora, vas al men favoritos y recuperas el
marcador de Dr. Rachel. Informas rpidamente de tu consumicin. Ella confirma la
donuts y muestra una pgina de resumen con tu peso estimado actual, lo que has
informado que comiste hasta ahora en el di de hoy, el total de caloras consumidas
hasta ahora y cuntas quedan en tu presupuesto. La pgina muestra una indicacin
de advertencia en rojo: No comas ms que un sandwich pequeo para el
almuerzo.
13:30: ests en el caf de la otra calle, almorzando un sandwich pequeo y una

Coca Diet. Es un ambiente ruidoso y no deseas perturbar a la gente de las mesas


vecinas. Te conectas mediante el navegador del telfono mvil a Dr. Rachel. Ella
sabe que es la hora del almuerzo y que an no le has informado sobre esta comida,
asi que los menes de almuerzo aparecen primero. T le informas la consumicin.
16:00: tu mquina de escritorio se ha colgado (otra vez). Afortunadamente la
compaa de software donde trabajas proporciona bocadillos y gaseosas. Te vas a la
cocina y atacas una bolsa de papas fritas y algunas Mountain Dew. Cuando vuelves
a tu escritorio, la pc an est fuera de servicio. Llamas a Dra. Rachel desde el
telfono fijo y le cuentas sobre el bocadillo y las gaseosas. Ella te amonesta para
que vayas al gimnasio esta noche.
19:00: mientras manejas hacia tu casa desde el gimnasio, llamas a Dra. Rachel
desde el auto y le cuentas que te ejercitaste durante 45 minutos.
20:30: Acabas de terminar la cena y te pesas. Usas el navegador Web de tu
computadora para informar el consumo de alimentos y el peso en la balanza. Dra.
Rachel responde con una pgina Web donde te comunica que el peso medido es
mayor al que ella predijo. Dra. Rachel ajustar sus presunciones sobre tus
estimaciones de las porciones, por ejemplo: en el futuro cuando t digas mediano
ella asumir grande

A partir de la interaccin de ejemplo, se puede inferir que Dra. Rachel debe incluir los siguientes
componentes: un modelo adaptativo del usuario; una base de datos de conteo de caloras para diferentes
alimentos; algn conocimiento sobre nutricin efectiva, por ejemplo, cuntas caloras pueden consumirse
por da si uno pretende alcanzar el peso X para la fecha Y; una interfaz de navegador Web; una interfaz de
navegador mvil; una interfaz de voz conversacional (aunque tal vez alcance con una interfaz simple
voiceXML).
Qu hacer si en dos meses todava ests excedido de peso? Debera llamarte Dra. Rachel en medio de
las comidoas para sugerirte que no limpies el plato? Dnde est la lnea entre efectivo y fastidioso?
Puede leer las expresiones de tu rostro para calcular cuando detenerse?
Cules son las metas humanas duraderas no alcanzadas? Conectarse con otras personas y aprender. El
correo electrnico y la biblioteca de referencia son las dos aplicaciones de la Internet universalmente
atractivas, de acuerdo con una encuesta de diciembre de 1999 llevada adelante por Norman Nie y Lutz
Erbring que fue informada en Internet and Society, un informe de enero del 2000 del Stanford Institute
for the Quantitative Study of Society
(http://www.stanford.edu/group/siqss/Press_Release/Preliminary_Report.pdf). Entretenimiento y comercio
electrnico de empresa a consumidor (business-to-consumer) estaban lejos abajo en la lista.
Consideremos la meta de conectarse con otras personas. Supongamos que las personas ya se conocen
una a otra. Pueden ser capaces de encontrarse cara a cara. Al menos, con seguridad pueden levantar el
telfono y llamarse utilizando un sistema que data del siglo XIX. Pueden intercambiar correo electrnico,
un sistema de la dcada de 1960. No parece haber ningn desafo para ingenieros del siglo XXI en esto.
Supongamos que las personas no se conocen todava. Puede ayudar la tecnologa? Primero debemos
preguntarnos: Debe ayudar la tecnologa? Porqu querras hablar con un puado de extraos en lugar
de tus amigos cercanos y tu familia? El problema con tus amigos y familia es que por lejos ellos (a)

conocen las mismas cosas que t conoces, y (b) conocen las mismas personas que t conoces. El clsico
estudio de 1973 de Mark Granovetter The Strength of Weak Ties (American Journal of Sociology
78:1360-80) mostr que la mayora de las personas obtiene sus trabajos a partir de personas que no
conocan muy bien. Amigos de amigos de amigos, tal vez. Existen ventajas sociales y econmicas
acumuladas en las redes de personas con gran cantidad de lazos dbiles. Estas redes permiten un flujo de
informacin mucho ms veloz que las redes en las cuales las personas se apegan a sus familias y aldeas. Si
ests explorando una nueva carrera o rea de inters, vas a desear contactos ms all de las personas que
conoces muy bien. Si est iniciando una nueva empresa, necesitars contratar gente con habilidades bien
diferentes de las tuyas. Qu mejor que Internet para encontrar esas personas? Es muy posible que no te
asocies tan fuertemente con ellos como con tus mejores amigos, pero te proporcionarn la ayuda que
necesitas.
Pero, cmo encontrars a las personas que te pueden ayudar? Deberas enviar un mail de difusin a la
totalidad de los 100 millones de usuarios de Internet? sta parece un estrategia popular, pero no queda
claro cun efectiva es en generar la buena voluntad que necesitas. Tal vez necesitamos un sistema de
informacin donde los individuos interesados en un tema en particular se puedan comunicar entre s, o
sea, una comunidad en lnea. sta es precisamente la clase de sistema de informacin que nos ocuparemos
en detalle en los siguientes captulos.
Qu podemos decir sobre la segunda meta importante (aprender)? Desde la dcada de 1960 se ha atacado
el tema de educacin con artillera tecnolgica pesada. La idea bsica siempre ha sido amplificar los
esfuerzos de nuestros ms grandes maestros actuales, lo cual usualmente se hace enlatndolos y
envindolos a los nuevos estudiantes. El mecanismo de envasado es casi siempre una cmada de vdeo. En
la dcada de 1960, las latas se entregaban mediante un circuito cerrado de televisin. En los 1970s los
chinos planearon el envo de sus mejores latas educacionales a lo largo y ancho de su tierra de 9 millones
de kilmetros cuadrados a travs de la televisin satelital. En la dcada de 1980, enviamos las latas en
cintas de vdeo VHS. En los 1990s las enviamos a travs de Internet en la forma de medios en torrentes
(streaming media). Hemos continuado esencialmente el mismo enfoque durante cuarenta aos. Si hubiera
funcionado, los resultados espectaculares estaran a la vista.
Qu tal si, en lugar de incrementar la cantidad de estudiantes por cada maestro, incrementamos la
cantidad de maestros? Existen abundantes oportunidades para que aprendas segn tu comodidad. Si son
las tres de la maana y quers aprender sobre mecnica cuntica, todo lo que necesitas hacer es sacar un
libro de tu estantera y encender la luz de lectura. Pero que pasa si quieres ensear a las tres de la
maana? Tus amigos no van a apreciar que los llames a las 3 de la madrugada y les digas Hola, acabo de
aprender que el experimento de Franck-Hertz en 1914 confirm la teora de que los electrones ocupan
nicamente estados de energa cuantizados discretos. Qu pasara si pudieras conectarte a un sistema de
informacin basado en un servidor y decir: mustrame un listado de todas las preguntas sin respuesta que
han publicado los otros usuarios? Luego puedes contestar unas cuantas, simplemente por la satisfaccin
de ayudar a otra persona y de sentirte como un experto. Cuando te canses, te vas a dormir. La enseanza
es divertida si no tienes que hacerlo cuarenta horas por semana durante treinta aos.
Imagina si cada fotgrafo que est aprendiendo tuviera un grupo de fotgrafos experimentados que
responde sus preguntas. sa es la comunidad en lnea photo.net, iniciada por uno de los autores como una
coleccin de artculos tutoriales y un foro de preguntas y respuestas en 1993, y que para agosto de 2005
hospeda a 426.000 usuarios registrados comprometidos en responder las preguntas de los dems y criticar
sus fotografas. Imagina si cada alumno actual del MIT tuviera su alumno mentor. Algunas personas de
MIT han estado trabajando en esto. Como estrategia, parece mucho ms efectivo si tratamos de obtener
algo de trabajo voluntario de los 90.000 alumnos, que exprimir ms de los 930 miembros del profesorado.
La mayora de los alumnos de MIT no viven en el rea de Boston. Los estudiantes se pueden beneficiar
del trabajo voluntario de un alumno si (1) la interaccin estudiante-profesorado se hace de manera

mediada a travs de un sistema de computadora, de tal manera que resulte visible a los mentores
autorizados, y (2) los mentores pueden usar el mismo sistema de informacin que los alumnos y el
profesorado para tener acceso a los impresos repartidos, a las tareas, y las notas de las clases expositivas.
Estamos coordinando a gente separada en el espacio y el tiempo, que comparte un propsito en comn. De
nuevo, so es una comunidad en lnea.
Las comunidades en lnea son desafiantes porque el aprendizaje es difcil y las personas son
idiosincrticas. Son desafiantes tambin porque el software que funciona para una comunidad de 200 no
va a andar para una comunidad de 2.000 20.000. Las comunidades en lnea son proyectos de ingeniera
estimulantes porque entregan a los usuarios dos de las cosas que ms quieren para sus vidas: conexiones y
educacin.
Si tu inters en este libro proviene del deseo de construir un simple sitio de comercio electrnico, no
desesperes. Sucede que los ms exitosos sitios de comercio electrnico y sitios de comercio colaborativo
son, en su interior, comunidades en lnea. Amazon es el ejemplo ms conocido. En 1995 haba docenas de
libreras con extensos catlogos en lnea. Amazon tena un catlogo tambin, pero gracias a la capacidad
que di a los lectores de agregar revisiones de los libros, Amazon les proporcion un mecanismo para que
sus usuarios se comuniquen entre s. De esa manera, los programadores en Amazon aplastaron su
competencia.
A medida que avances en este libro, vas a ir construyendo una comunidad de aprendizaje en lnea. En el
camino vers todos los importantes principios, habilidades y tecnologas para construir aplicaciones para
Web desde el escritorio, Web desde dispositivos mviles y de voz de todo tipo.

Ms
sobre GPRS: "Emerging Technology: Clear Signals for General Packet Radio Service" por Peter
Rysavy en la edicin de diciembre del 2000 de la Network Magazine, disponible en
http://www.rysavy.com/Articles/GPRS2/gprs2.html
sobre el estado del arte en aplicaciones de voz fciles de contruir: Captulo 10 sobre VoiceXML (se
puede entender en forma aislada razonablemente bien)
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Elementos bsicos
parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y Andrew
Grumet
En este captulo aprenders como evaluar entornos de desarrollo de aplicaciones para Internet. Luego escogers
uno. Y entonces aprenders cmo usarlo.
Tambin aprenders acerca del protocolo sin estado y annimo que hace que el desarrollo Web sea diferente del
desarrollo de las aplicaciones inter-computadora clsico. Aprenders porqu los sistemas de gestin de bases de
datos relacionales son clave para controlar el problema de la concurrencia que surge cuando hay mltiples
usuarios simultneos. Adems desarrollars software para leer y escribir en Extensible Markup Language
(XML).

Protocolos de comunicacin del viejo estilo


En un protocolo de comunicaciones tradicional, el programa de computadora A abre una conexin al programa
B. Ambos programas corren continamente mientras dura la comunicacin. De esta manera resulta sencillo para
el programa B recordar lo que el programa A le ha enviado. El programa B puede construir estado en su
memoria. La memoria puede contener, de hecho, un registro de todo lo que ha llegado por el cable desde el
programa A.

Figura 2.1: En un protocolo de comunicaciones tradicional con estado, dos programas que corren en dos
computadoras diferentes establecen una conexin y avanzan en el uso de dicha conexin por el tiempo que sea
necesario, tpicamente hasta que uno de los programas termina.

HTTP: Sin estado y annimo


El HyperText Transfer Protocol (HTTP) es el medio fundamental de intercambio de informacin y solicitud de
servicios en la Web. Tambin se usa HTTP cuando se desarrollan servicios de texto para usuarios en telfonos
mviles y, con VoiceXML, se usa para implementar aplicaciones controladas mediante la voz.
Lo ms importante que debemos saber sobre HTTP es que se trata de un protocolo sin estado (stateless). Si miras
diez pginas Web, tu navegador realiza diez solicitudes HTTP independientes hacia el servidor Web del
proveedor. En cualquier momento entre esas solicitudes, eres libre de reiniciar tu navegador. En cualquier
momento entre esas solicitudes, el proveedor es libre de reiniciar su programa servidor.
He aqu la anatoma tpica de una sesin HTTP:
el usuario escribe www.yahoo.com en el navegador
el navegador traduce www.yahoo.com en una direccin de IP y trata de abrir una conexin TCP al puerto

80 de esa direccin (TCP es Transmission Control Protocol y es el sistema fundamental a travs del cual
dos computadoras en Internet se envan flujos de bytes entre ellas.)
una vez que se establece la conexin, el navegador enva el siguiente flujo de bytes: GET / HTTP/1.0
(ms dos grupos retorno de carro - avance de lnea ). El GET quiere decir que el navegador est
solicitando un archivo. El / es el nombre del archivo, en este caso es simplemente la pgina de ndice. El
HTTP/1.0 dice que el navegador prefiere obtener los resultados adhiriendo al protocolo HTTP 1.0.
Yahoo responde con un conjunto de cabeceras que indican cul es el protocolo que en realidad se est
usando, si el archivo solicitado se encuentra o no, cuntos bytes contiene dicho archivo, y qu clase de
informacin est contenida en el mismo (el tipo MIME o Multipurpose Internet Mail Extensions)
el servidor de Yahoo enva una lnea en blanco, para indicar el fin de las cabeceras.
Yahoo enva el contenido de la pgina ndice
La conexin TCP se cierra cuando el navegador recibe el archivo
Puedes verlo por t mismo desde un intrprete de mandatos (shell) del sistema operativo:
bash-2.03$ telnet www.yahoo.com 80
Trying 216.32.74.53...
Connected to www.yahoo.akadns.net.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.0 200 OK
Content-Length: 18385
Content-Type: text/html
<html><head><title>Yahoo!</title><base href=http://www.yahoo.com/>...

En este caso hemos utilizado el mandato Unix telnet con un argumento opcional que especifica el nmero de
puerto de la mquina destino &emdash;todo lo que escribe el programador se indica en negritas. Escribimos la
lnea GET ... y luego apretamos la tecla Enter dos veces. La primer cabecera que devuelve Yahoo es
HTTP/1.0 200 OK. El odigo de estado HTTP 200 significa que el archivo se encontr (OK).
Puedes ver el estndar HTTP en http://www.w3.org/Protocols/ para obtener ms informacin sobre HTTP.
No te pierdas en los detalles del ejemplo HTTP. El punto es que cuando se termina la conexin, se termina. Si el
usuario sigue un hiperenlace desde la pgina frontal de Yahoo hacia Fotografa, por ejemplo, esto genera una
solicitud HTTP completamente nueva. Si Yahoo usa mltiples servidores para operar su sitio, la segunda
solicitud puede dirigirse hacia una mquina diferente. Esto suena bien para navegar por Yahoo. Pero supongamos
que ests comprando en un sitio de comercio electrnico como Amazon. Si agregas algo a tu carrito de compras
en una solicitud HTTP, vas a querer que est all dentro de diez clics. O suponte que registraste tu ingreso a
photo.net en el clic 23 y en el clic 45 ests respondiendo a una entrada en un foro de discusin. No querras que
el servidor de photo.net olvide tu identidad y te pida nuevamente tu nombre de cuenta y tu contrasea.
Esto implica un desafo para t, el ingeniero: crear una experienia de usuario con estado apoyada encima de un
protocolo fundamentalmente sin estado.
Dnde almacenars el estado entre una solicitud y otra? Tal vez en un archivo de bitcora (log) en el servidor
Web. El servidor escribira algo como Joe Smith quiere tres copias de Bus Nine to Paradise de Leo Buscaglia.
En cualquier solicitud posterior de Joe Smith, el script que corre en el servidor puede controlar simplemente en
el archivo de bitcora y desplegar los contenidos del carrito de compras. Un problema con esta idea, sin
embargo, es que el HTTP es annimo. El servidor Web no sabe que Joe Smith se est conectando. El servidor
solamente conoce la direccin IP de la computadora que hace la peticin. Algunas veces esto se traduce en un
nombre de host. Si es algo como joe-smiths-desktop.stanford.edu, tal vez se pueda identificar las peticiones
siguientes que vengan desde ese IP como provenientes de la misma persona. Pero, qu pasa si es cacherr02.proxy.aol.com, uno de los servidores intermediarios (proxy) que conectan a Internet a los 20 millones de
usuarios de America Online? Es muy probable que la siguiente solicitud del mismo usuario provenga de una

direccin IP distinta, o sea, de una computadora fsicamente diferente tomada entre los bastidores y ms
bastidores repletos de mquinas proxy de AOL. La siguiente solicitud que venga de cache-rr02.proxy.aol.com es
muy probable que se originada por otra persona, o sea, otro ser humano fsico entre los 20 millones de
suscriptores de AOL que comparten un conjunto comn de mquinas proxy.
De alguna manera debemos recordar cierta informacin de un usuario individual, que ser devuelta en la
siguiente peticin de ese usuario.
Si todas las pginas se generan mediante programas de computadora, en lugar de estar conformadas con archivos
estticos en HTML, una idea sera rescribir todos los hiperenlaces en las pginas que se entregan. En lugar de
enviar los mismos archivos a todo el mundo, con los mismos URL embebidos, se personaliza la salida de tal
manera que un usuario que sigue un enlace est enviando informacin extra al servidor. A continuacin se
muestra un ejemplo de cmo amazon.com incorpora claves de sesin en las URLs:
1. Supongamos que el comprador sigue un enlace a una pgina que muestra un nico libro para la venta, por
ejemplo, http://www.amazon.com/exec/obidos/ASIN/1588750019/. Note que 1588750019 es un
International Standard Book Number (ISBN) y que identifica completamente al producto presentado.
2. El servidor amazon.com redirige la solicitud a un URL que incluye el identificador (ID) de sesin a
continuacin de la ltima barra, por ejemplo,
"http://www.amazon.com/exec/obidos/ASIN/1588750019/103-9609966-7089404"
3. Si el comprador mueve el ratn sobre los hiperenlaces de la pgina obtenida, l o ella notar que todos los
hiperenlaces contienen al final el mismo ID de sesin.
Es de destacar que no la longitud de este ID de sesin no cambia, no importa cunto dure la sesin del
comprador ni cuntos elementos ponga en su carrito de compras. Este identificador de sesin se utiliza como
clave para encontrar el contenido del carrito de compras en una base de datos dentro de amazon.com. Una
implementacin alternativa sera codificar todo el contenido del carrito de compras en la URL, en lugar del ID de
sesin. Supongamos, por ejemplo, que Joe Shopper pone tres libros en su carrito de compras. El servidor de
Amazon podra agregar solamente los tres ISBN a cada uno de las URL que forman los hiperenlaces que el
usuario puede seguir, separados por barras. El URL quedara un poco largo, sin embargo, la siguiente cita de la
especificacin del HTTP puede alentar en ese sentido a los programadores en Amazon:
El protocolo HTTP no impone ningn lmite a priori en la longitud del URI. Los servidores DEBEN
ser capaces de manejar el URI de cualquier recurso que ellos proporcionen, y DEBIERAN ser
capaces de manejar URIs de longitud ilimitada si proporcionan formularios basados en GET que
puedan generar tales URIs. Un servidor DEBIERA retornar el estado 414 (URI Solicitada
Demasiado Larga) si una URI es ms larga de lo que el servidor puede manejar (vea la seccin
10.4.15).
No necesitamos preocuparnos por espantar a los mejores clientes de Amazon, aquellos con los carritos de
compras ms voluminosos, por culpa de un cdigo de retorno 414 Request-URI Too Long. O s deberamos
preocuparnos? Aqu tenemos un comentario acerca de la especificacin HTTP:
Nota: Los servidores deben ser cautelosos al depender de longitudes de URI ms largas que 255
bytes, porque puede que algunas implementaciones antiguas de clientes o proxies no trabajen
adecuadamente con dichas longitudes.
Tal vez ste es el motivo por el cual el amazon.com real en funciones almacena slo el ID de sesin en las URLs.
Cookies
En lugar de dar vueltas con la rescritura de los hiperenlaces en las pginas HTML podemos aprovechar una
extensin de HTTP denominada cookies. Hemos dicho que necesitamos una manera de escribir algo de
informacin para un usuario individual que le ser devuelta en la siguiente solicitud. El primer prrafo en la

"Cookies de HTTP de estado de cliente persistente Especificacin preliminar" ("Persistent Client State HTTP
Cookies Preliminary Specification"http://wp.netscape.com/newsref/std/cookie_spec.html) se lee:
Las cookies son un mecanismo general que las conexiones del lado de servidor pueden usar tanto
para almacenar como para recuperar informacin del lado cliente de la conexin. La adicin de
estado del lado del cliente simple y persistente extiende significativamente las capacidades de las
aplicaciones cliente/servidor basadas en Web.
Cmo funciona? Luego de que Joe Smith agrega un libro a su carrito de compras, el servidor escribe:
Set-Cookie: cart_contents=1588750019; path=/

Siempre y cuando Joe no cierre su navegador, en cada peticin subsecuente al servidor, el navegador agrega la
cabecera:
Cookie: cart_contents=1588750019

Los programas del lado del servidor pueden leer esta cabecera y extraer el contenido actual del carrito de
compras.
Parece la solucin perfecta? Lo es en ciertos sentidos. Si eres un intelectual de ciencias de la computacin te
puedes enorgullecer del hecho que esto forma un sistema de gestin de base de datos distribudo. En lugar de
mantener un enorme archivo de bitcora en tu servidor, ests manteniendo pedacitos de informacin en miles de
mquinas de usuario alrededor del mundo. PEro un problema con las cookies es que la especificacin limita lo
que podemos pedir al navegador que almacene por cuenta de nuestro servidor a no ms de 20 cookies y cada una
de esas cookies no debe tener ms de 4 kilobytes de tamao. Un problema menor es que la informacin de las
cookies se devuelve al servidor en cada carga de pgina. Si te has consentido almacenando 80 kilobytes de
informacin en 20 cookies y el usuario tiene accede mediante un modem, esto va a enlentecer la interaccin
Web.
Un problema ms profundo con las cookies es uqe no son portables para el usuario. Si Joe Smith inicia su
experiencia de compra desde su conputadora de escritorio en el trabajo y quiere continuar desde el telfono
mvil en el taxi o desde el navegador Web en su casa, no puede recuperar desde all el contenido de su carrito de
compras. El carrito reside en la memoria de su computadora del trabajo.
Un ltimo problema con las cookies es que un pequeo porcentaje de los usuarios las tienen deshabilitadas
debido a los problemas de privacidad ilustrados en la figura 2.2.

Figura 2.2: Las cookies unidas al comportamiento inocente de los navegadores de los 1990s significan el fin de
la privacidad en la Internet. Suponga que tres editores cooperan y se ponen de acuerdo para servir sus
propagandas desde http://noprivacy.com. Cuando Joe User visita search-engine.com y escribe "crema acn", la
pgina vuelve con una IMG referenciando a noprivacy.com. El navegador de Joe visitar automticamente a
noprivacy.com y solicitar el "the GIF for SE9734". Si esta es la primera vez que Joe est usando cualquiera de
esos tres servicios que cooperan entre s, noprivacy.com enviar una cabecera Set-Cookie al navegador de Joe.
Entre tanto, search-engine.com enva un mensaje a noprivacy.com diciendo que "SE9734 fue una solicitud por
pginas de crema para acn" La cadena "crema acn" se almacena en la base de datos de noprivacy.com junto
con "browser_id 7586". Cuando Joe visita bigmagazine.com lo fuerzan a registrarse y dar su nombre, direccin
de correo electrnico, direccin postal y nmero de tarjeta de crdito. No hay propagandas en bigmagazine.com.
Tienen demasiada integridad para ponerlas. Entonces incluyen en sus pginas un IMG que referencia un GIF en
blanco en noprivacy.com. El navegador de Joe solicita el GIF para BM17377" y, como est dialogando con
noprivacy.com, el sitio que envi la cabecera Set-Cookie, el navegador incluye una cabecera de cookie que dice:
"Soy el browser_id 7586". Cuando todo est terminado, la gente en noprivacy.com sabe el nombre de Joe User,
sus intereses, y el hecho de que ha descargado seis JPEG de nalgadas desde kiddieporn.com.
Un enfoque de ingeniera razonable al uso de las cookies es enviar un identificador nico para los datos, en vez
de los datos mismos, tal como en el caso de los "ID de sesin en el URL" del ejemplo de amazon.com descripto
previamente. La informacin relacionada con el contenido del carrito de compras se almacena en alguna clase de
bitcora en el servidor. De esta manera esa info se puede obtener desde otra ubicacin. Para ver cmo funciona
esto en la prctica, v a un intrprete de mandatos y solicita la pgina inicial de photo.net:
bash-2.03$ telnet www.eveandersson.com 80
Trying 64.94.245.206...
Connected to www.eveandersson.com.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.0 200 OK
Set-Cookie: ad_browser_id=3291092; Path=/; Expires=Fri, 01-Jan-2010 01:00:00 GMT
Set-Cookie: ad_session_id=3291093%2c0%2c6634C478EF46FC%2c10622158; Path=/; Max-Age=86400
Set-Cookie: last_visit=1071622158; path=/; expires=Fri, 01-Jan-2010 01:00:00 GMT
Content-Type: text/html; charset=iso-8859-1
MIME-Version: 1.0
Date: Thu, 03 Feb 2005 00:49:18 GMT
Server: AOLserver/3.3.1+ad13
Content-Length: 8289
Connection: close
<html>
<head>
...

Nota que se establecen dos cookies. La primera, ad_browser_id tiene una fecha de expiracin explcita en enero
de 2010. Esto indica al navegador que debe almacenar en el disco rgido el valor de la cookie, en este caso
"3291092". El valor de la cookie se enviar al servidor durante los siguientes cnco aos, incluso aunque el
usuario cierre y reinicie su navegador. Cul es el sentido de disponer de una cookie en el navegador? Si el
usuario dice "Prefiero las cosas en slo texto" o "Prefiero el idioma francs", esas son informaciones que vale la
pena almacenar en el navegador. La preferencia para slo texto puede estar relacionada con la conexin a
Internet lenta de esa computadora. Si la computadora est en una casa llena de francfonos, existe la posibilidad
de que todas las personas que comparten el navegador prefieran el francs.
La segunda cookie que se carga, ad_session_id se configura para expirar despus de una hora("MaxAge=3600"). Si no se configura explcitamente su momento de expiracin, entonces expirar cuando el usuario
cierre su navegador. Hay cosas que vale la pna asociar con el ID de sesin como el contenido del carrito de
compras en un sitio de comercio electrnico, aunque se debe notar que si photo.net fuera un sitio de compras no
sera buena idea que la cookie de sesin expire en una hora!. Resulta un fastidio que uno se tome el trabajo de
llenar un carrito de compras, te interrumpan y te saquen de la computadora unas horas y luego tener que hacer
todo de nuevo cuando regresas a lo que pensabas que era una pgina Web activa.
Si estuviramos registrados en photo.net, tendramos una tercer cookie, que identifica al usuario. Los idiomas y
preferencias de presentacin almacenados en el servidor para ese usuario tendran precedencia sobre las
preferencias correspondientes al ID del navegador.

Almacenamiento del lado del servidor


Hasta este momento hemos conseguido que la nformacin de ID viaje de ida y vuelta al navegador, sea a travs
de las extensiones de cookies o mediante la rescritura de las URLs. Lo que necesitamos ahora es idear una
manera de mantener en el servidor Web la informacin asociada.
Para ganar flexibilidad a la hora de presentar y analizar los datos proporcionados por los usuarios, probablemente
vas a desear que la informacin se mantenga en forma estructurada. Por ejemplo, sera bueno tener una tabla con
todos los artculos que los diferentes usuarios pusieron en sus carritos de compras. Y otra tabla para los pedidos.
Y otra tabla para las revisiones de producto que escribieron los usuarios. Y otra tabla para preguntas y respuestas.
Cul es una buena herramienta para almacenar tablas de informacin? Consideremos primero un programa de
planilla de clculos. Son baratos y fciles de utilizar. Uno nunca debe aplicar una tecnologa ms compleja de lo
necesario para resoolver un problema. Algo como Visicalc, Lotus 1-2-3, Microsoft Excel, o StarOffice Calc
podra servir apropiadamente.
El problema con una planilla de clculos es que est diseada para un usuario. El programa espera la entrada
desde el usuario desde dos fuentes: ratn y teclado. El programa informa los resultados en un solo lugar: la
pantalla. Cualquier fuente de persistencia en la Web debe lidiar potencialmente con miles de usuarios
simultneos que estn leyendo y escribiendo en la base de datos. ste es el problema que resuelven los Sistema
de gestin de base de datos (DBMS por su sigla en ingls).

Podemos pensar en un sistema de gestin de bases de datos relacional (RDBMS por sus siglas en ingls, el tipo
ms popular de DBMS) como si fuera un planilla de clculos encerrada en un armario oscuro. Si necesitas crear
una nueva tabla, le pasas un papelito por debajo de la puerta donde dice: CREATE TABLE .... Para agregar
una fila de datos a la tabla, le pasas otro papelito que dice INSERT .... Para cambiar algn dato dentro de la
tabla, escribes UPDATE ... en el papelito. Si quieres eliminar filas, escribes el papel con algo que comienza
con DELETE.
Puedes notar que de esta manera hemos resuelto el problema de la concurrencia. Suponte que slo te ha quedado
en inventario una copia de Bus Nine to Paradise y que 1000 usuarios consultan a la vez sobre las obras del Dr.
Buscaglia. Si los papelitos se acomodan en una fila, el programa en el armario puede tomar la decisin de
procesar un INSERT en la tabla de pedidos y rechazar los otros 999. Esto es mejor que 1000 personas peleando
por conseguir un teclado y un ratn.
Una vez que enviamos la informacin adentro del armario, cmo hacemos para conseguirla de vuelta? Podemos
escribir una solicitud de un informe en otro papelito, que comienza con la palabra SELECT y pasarlo por
debajo de la puerta. El DBMS dentro del oscuro armario preparar un informe y lo pasar por debajo de la
misma puerta para que lo tomemos.
Cmo evaluamos si el DBMS es lo suficientemente poderoso para nuestra aplicain? Comenzamos con la
prueba ACID que IBM propuso en los 1960s:
Atomicidad
Los resultados de la ejecucin de la transaccin se confirman todos juntos o se revierten
todos. O todos tienen efecto, o ninguno. Suponte que un usuario se est registrando y sube su
nombre, direccin, y retrato en formato JPEG, cada uno en una tabla diferente. Un script Web
le indica a la base de datos que debe realizar tres inserciones como parte de una transaccin.
Si el disco rgido se llena luego de insertar el nombre y la direccin, pero antes de almacenar
la fotografa, los cambios en las tablas de nombre y de direccin se revertirn.
Consistencia
La base de datos se transforma desde un estado vlido en otro estado vlido. Una transaccin
es legal solamente si obedece las restricciones de integridad definidas por el usuario. Las
transaccines ilcitas no se permiten y, si una transaccin no puede satisfacer las restricciones
de integridad, se la revierte. Por ejemplo, suponte que defines una regla que declara que los
mensajes en una tabla de foro de discusin se deben atribuir a un ID de usuario vlido. Luego
contratas a Joe Novicio para escribir algunas pginas de administracin. Joe escribe una
pgina para eliminar usuarios y no se preocupa por controlar si el borrado deja mensajes
hurfanos en los foros de discusin. Una DBMS que satisface la propiedad ACID lo
verificar, y abortar cualquier transaccin que pudiera resultar en mensajes existentes en los
foros que pertenezcan a un usuario eliminado.
Aislacin
El resultado de una transaccin es invisible a las otras transacciones hasta que se completa.
Por ejemplo, supongamos que tenemos una pgina que muestra los nuevos usuarios y sus
fotografas. Esta pgina se codifica de acuerdo a la directiva del publicador de que debe existir
un retrato para cada usuario y se mostrar una imagen quebrada si la foto no est. Jane
Newuser se registra en tu sitio al mismo tiempo que Bill Olduser revisa la pgina de usuarios
nuevos. El script que procesa la registracin de Jane ha completado la insercin de su nombre
y direccin en sus respectivas tablas. Pero no termin todava de almacenar la fotografa en
JPEG. Si la consulta de Bill se inicia antes que se complete la transaccin de Jane, Bill no va a
ver a Jane en su pgina de nuevos usuarios, an si las inserciones de Jane se complet en
algunas de las tablas.
Durabilidad
Una vez comprometida (completada), los resultados de una transaccin son permanentes y
sobreviven averas futuras tanto del sistema como del medio de almacenamiento. Supongamos
que tu sistema de comercio electrnico (e-commerce) inserta un pedido de un cliente en la

base de datos y luego instruye a CyberSource para que le debite $500. Un milisegundo ms
tarde, antes de que tu servidor haya obtenido la respuesta de CyberSource, alguien se tropieza
con el cable de alimentacin de la computadora. Un DBMS ACID no va a olvidar el pedido.
Ms an, si un programador vuelca caf sobre el disco rgido, podremos instalar un nuevo
disco rgido y recuperar las transacciones hasta el vuelco del caf, con lo cual veremos que se
intent cobrarle $500 a alguien y an no sabemos que pas con CyberSource. Se debe notar
que para lograr la D del ACID, la computadora debe disponer de ms de un disco rgido.

Porqu un sistema de gestin de bases de datos relacional?


Porqu los sistemas de gestin de bases de datos relacionales (RDBMS) la tecnologa dominante para la
persistencia detrs de los servidores Web? Tenemos tres factores principales.
El primer pilar de la popularidad de los RDBMS es el lenguaje declarativo denominado SQL. El estilo de
programacin ms comn no es declarativo; se llama imperativo o procedural. T le dices a la computadora
que debe hacer, paso a paso:
haz esto
haz esto
haz esto
SI es despus del 17 de marzo de 2023, ENTONCES haz esto, esto otro y luego esto ms; SINO haz
aquello
haz esto
...
Los programas escritos ene ste estilo tienen dos desventajas. Primero, rpidamente se vuelven complejos y
entonces se necesitan programadores profesionales para desarrollarlos y mantenerlos. Segundo, contienen
montones de errores. Por ejemplo, el programa esbozado ms arriba puede tener unos cuantos defectos. Hoy no
es despus del 17 de marzo del 2023, as que no podemos estar seguros si los pasos de la instruccin IF
especificados despus del ENTONCES estn libres de errores.
Un estilo de programacin alternativo es el declarativo. De esta forma, le decimos a la computadora qu es lo
que queremos, por ejemplo, un informe de los usuarios que se han registrados desde hace ms de un ao pero
que no han respondido ninguna consulta en el foro de discusin. No le decimos al RDBMS si tiene que leer
primero la tabla de usuarios y luego ver en la tabla de los foros o viceversa. Slo especificamos las
caractersticas deseadas del reporte y queda como trabajo para el RDBMS la tarea de prepararlo.
Busca a alguien en la calle. Elige alguien con ropa a la moda as puedes estar seguro que no es un programador o
programadora profesional. Pregunta a esa persona: "has programado alguna vez en un lenguaje de computadora
declarativo?" Luego hazle esta otra pregunta: "has utilizado una planilla de clculos?" Hay muchas
posibilidades de encuentres unas cuantas personas que te digan que nunca escribieron en ninguna clase de
lenguaje de programacin de computadoras, pero que s desarrollaron modelos bastante sofisticados mediante las
planillas de clculo. Porqu? El lenguaje de la planilla de clculos es declarativo: "Que esta celda sea la suma de
aquellas tres". El usuario no le indica al programa de la planilla cul es el orden para hacer los clculos, sino
solamente el resultado deseado.
El lenguaje declarativo de la planilla de clculos cre una explosin en la cantidad de personas capaces de
desarrollar programas de computadora que funcionaban. En la dcada de 1970, las organizaciones que trabajaban
con datos mantenan un staff de programadores. Si queras que se haga algn anlisis, llamabas a un
programador a tu oficina, le explicabas las presunciones y las frmulas que deba usar, y luego esperabas unos
das a que te llegue el informe. En 1979 Dan Bricklin (MIT EECS '73) y Bob Frankston (MIT EECS '70)
desarrollaron Visicalc y de repente la mayora de las personas que haban estado a los gritos buscando
programadores ahora eran capaces de construir sus propios modelos.

En el caso de una RDBMS, los papelitos que se pasan debajo de la puerta son programas declarativos en el
lenguaje SQL. (SQL for Web Nerds en http://philip.greenspun.com/sql/ es un tutorial de lenguaje SQL.)
El segundo pilar de la popularidad de las RDBMS es la separacin que produce entre los datos importantes y los
descuidos de los programadores. Con otras clases de sistemas de gestin de bases de datos, resulta posible que
un programa realice cambios arbitrarios en el conjunto de datos. Esto puede ser conveniente para aplicaciones
como los sistemas de diseo asistidos por computadora que trabajan con estructuras de datos muy complejas. Por
otro lado, si tu meta es preservar un conjunto de datos a lo largo de un perodo de veinticinco aos, entonces no
es una buena idea que puedan correr programas imperativos defectuosos y permitirles hacer cambios arbitrarios.
La RDBMS limita lo que los programadores pueden hacer a lo siguiente: dictar oraciones muy simples de la
forma INSERT, DELETE y UPDATE. Ms an, si no ests contento con el contenido de tu base de datos puedes
revisar todos los papelitos que se pasaron por debajo de la puerta. Cada papel contiene una oracin SQL y el
nombre del programador o del programa que la escribi. Esto hace fcil la tarea de corregir los errores y de
reformar a los infractores.
El tercer y ltimo pilar de la popularidad de las RDBMS es su buena performance con varios miles de usuarios
simultneos. Este atributo es ms una reflexin sobre el refinado estado del desarrollo comercial en sistemas
como IBM DB2, Oracle, Microsoft SQL Server, y la open source PostgreSQL, que una caracterstica inherente a
los RDBMS en s mismos.

Los pasos
Cuando construyas cualquier aplicacin para Internet vas a recorrer los siguientes pasos:
1. Desarrollar el modelo de datos. Cul es la informacin que vas a almacenar y cmo la vas a representar?
2. Desarrollar una coleccin de transacciones legales sobre ese modelo, por ejemplo, las inserciones y las
actualizaciones.
3. Disear el flujo de las pginas. Cmo va a interactuar el usuario con el sistema? Cules sern los pasos
que van a llevar hasta cada una de esas transacciones legales? (Note que la idea de flujo de pginas
abarca el diseo de interaccin en la Web, en navegadores mviles, y tambin va menes de voz
jerrquicos con VoiceXML pero no a los sistemas de voz conversacionales.)
4. Implementar las pginas individuales. Vas a tener que escribir los scripts que consultan informacin al
modelo de datos, envuelven esa informacin en una plantilla (en HTML para el caso de una aplicacin
Web), y retorna el resultado combinado al usuario.
Es muy poco probable que tengas muchas elecciones a la hora de escoger el almacenamiento persistente. Tendrs
que usar una RDBMS y no vas a realizar ninguna decisin tecnolgica fundamental en los Pasos 1 y 2. El diseo
del flujo de pginas es un ejercicio puramente abstracto. Existen algunos lmites impuestos por la tecnologa
sobre la interfaz pero en general derivan de estndares pblicos como HTML, XHTML Mobile Profile, y
VoiceXML. Entonces, en el Paso 3 tampoco tienes decisiones tecnolgicas que tomar.
El Paso 4 es carente de inters desde el punto de vista intelectual y tambin desde el punto de vista de la
ingeniera. Un servicio de Internet triunfa o fracasa por los pasos 1 al 3. Qu puede hacer el servicio por el
usuario? Resulta comprensible y utilizable el flujo de pginas? Las respuestas a esas preguntas estn
determinadas por los Pasos 1 al 3. Sin embargo, el Paso 4 es donde uno tiene un enorme rango de alternativas de
tecnologa y por lo tanto parece generar muchas discusiones. Este curso y este libro son neutrales acerca de cmo
trabajar en el Paso 4 pero se van a dar guas para realizar las elecciones.
Primero, demos un paso atrs y asegurmonos que todo el mundo sabe HTML.

HTML
Aqu se muestra un fragmento legal de HTML:
My Samoyed is really hairy.

se es un documento HTML perfectamente aceptable. Escrbelo mediante un editor de textos, gurdalo con el
nombre index.html y ubcalo en tu servidor Web. El servidor Web puede servirlo. El usuario con Netscape
Navigator puede verlo. Una mquina de bsquedas puede indexarlo.
Supongamos que queremos algo ms expresivo. Quieres que la frase really aparezca en letras cursivas:
My Samoyed is <I>really</I> hairy.

HTML viene de Hypertext Markup Language [Lenguaje de marcas de hipertexto] . EL <I> es una marca. Le
indica al navegador que empiece a mostrar las palabras en cursiva. El </I> cierra el elemento <I> y detiene las
cursivas. Si quieres hacer las cosas con buen gusto, puedes indicarle al navegador que enfatice la palabra really:
My Samoyed is <EM>really</EM> hairy.

La mayora de los navegadores utilizan cursivas para enfatizar, pero algunos usan negrita y los navegadores para
las antiguas terminales ASCII (ej. Lynx) tienen que ignorar esta etiqueta o inventarse un mtodo ingenioso para
interpretarlo en pantalla. Un usuario difcil con el programa navegador adecuado puede incluso personalizar
cmo se va a mostrar una etiqueta en particular.
Hay unas pocas docenas ms de etiquetas en HTML. Puedes aprender sobre ellas si utilizas la opcin Ver
cdigo fuente de la pgina de tu navegador Web cuando visites sitios cuyos formato admires. Puedes mirar el
captulo de referencia de HTML de este libro. Puedes aprenderlas empezando por el directorio de guas y
tutoriales de HTML en Yahoo,
http://dir.yahoo.com/Computers_and_Internet/Data_Formats/HTML/Guides_and_Tutorials/. O puedes adquirir
HTML & XHTML: The Definitive Guide (Musciano and Kennedy; O'Reilly, 2002).
Estructura del documento
Armado con una alta pila de etiquetas, puedes empezar a desparramarlas entre tus palabras ms o menos al azar.
Aunque los navegadores son extremadamente permisivos frente al marcado tcnicamente ilegal, resulta til saber
que un documento HTML consiste oficialmente de dos partes: la cabeza (head) y el cuerpo (body). La cabeza
contiene informacin acerca del documento como un todo, como por ejemplo el ttulo. El cuerpo contiene la
informacin que en navegador debe mostrar al usuario.
Otro tema relacionado con la estructura es que tienes que asegurarte de cerrar cada elemento que abras. Si tu
documento tiene una etiqueta <BODY> entonces debe tener una </BODY> al final. Si se inicia una tabla HTML
con <TABLE> y no existe el </TABLE>, el navegador puede que no muestre nada. Las etiquetas pueden
anidarse, pero debes cerrar la ms recientemente abierta antes de las otras, por ejemplo, para algo que debe estar
tanto en negritas como en cursivas:
My Samoyed is <B><I>really</I></B> hairy.

Una de las cosas que confunde a muchos usuarios nuevos es que el elemento <P> que se usa para rodear un
prrafo tiene una etiqueta opcional </P>. Los navegadores usan la convencin de que un elemento <P> se cierra
implcitamente en el siguiente elemento <P>. Esto lleva a muchos publicadores (incluso hasta a nosotros) a usar
los elementos <P> como separadores de prrafos.
Se muestra a continuacin el fuente HTML de un documento Web con formato simple:
<html>
<head>
<title>Nikon D1 Digital Camera Review</title>
</head>
<body bgcolor=white text=black>
<h2>Nikon D1</h2>
by <a href="http://philip.greenspun.com/">Philip Greenspun</a>
<hr>
Little black spots are appearing at the top of every ...

<h3>Basics</h3>
The Nikon D1 is a good digital camera for ...
<p>
The camera's 15.6x23.7mm CCD image sensor ...
<h3>User Interface</h3>
If you wanted a camera with lots of buttons, switches, and dials ...
<hr>
<address>
<a href="mailto:philg@mit.edu">philg@mit.edu</a>
</address>
</body>
</html>

Vamos a recorrer este documento parte por parte (puedes ir a


interpreta tu navegador).

para ver cmo se ve cuando lo

La etiqueta <HTML> arriba indica que Soy un documento HTML. Nota que esta etiqueta se cierra al final del
documento. Tambin es cierto que esta etiqueta es innecesaria. Cuando grabamos el documento lo hicimos con el
nombre simply-page.html. Cuando el usuario solicita este documento, el servidor Web ve la extensin .html
y agrega una cabecera MIME para indicarle al navegador del usuario que este documento es de tipo text/html.
La mayor utilidad del elemento HEAD es que nos permite poner un elemento TITLE con el cual podemos dar un
nombre a aeste documento. El texto que pongas entre <TITLE> y </TITLE> se va a mostrar en la parte superior
de la ventana del navegador del usuario, en los menes Go (Netscape) o Back (MSIE) y en el men de favoritos
o marcadores si el usuario pone un marcador en esta pgina. Luego de cerrar la cabeza con una etiqueta
</HEAD>, se abre el cuerpo del documento con la etiqueta <BODY>, a la cual se le puede agregar algunos
parmetros para configurar el color de fondo en blanco y el texto en negro. Algunos navegadores tienen un valor
predeterminado de fondo gris, y la falta de contraste que produce con el texto es tan molesta que los usuarios
terminan cambiando nlos colores en forma manual. Esto viola principios de diseo de interaz pues puede
incorporar inconsistencias en la experiencia de los usuarios con la Web. Sin embargo, lo hemos hecho en
photo.net sin sentirnos demasiado culpables porque (1) muchos navegadores usan el color blanco como fondo de
manera predeterminada, (2) buena cantidad de otros publicadores ponen en blanco sus fondos de pgina, as que
nuestras pginas no van a parecer inconsistentes, y (3) no afecta la interfaz de usuario esencial, a diferencia de lo
que pasara si usramos colores personalizados para los enlaces.
Justo debajo del cuerpo, tenemos una lnea de ttulos, de tamao 2, envuelta en una etiqueta <H2>. Esto se le va
a mostrar al usuario en la parte superior de la pgina. Probablemente deberamos haber usado una etiqueta <H1>,
pero los navegadores la muestran en un tamao de fuente que asusta. Debajo de la lnea de ttulo, la frase Philip
Greenspun es un ancla de hipertexto, razn por lo cual se la envuelve en un elemento A. El <A HREF= indica
que esto es un hiperenlace. Si el lector hace clic en cualquier lugar desde aqu hasta el </A> el navegador debe
solicitar http://philip.greenspun.com/.
Despus de la lnea de ttulos, autor y navegacin opcional, ponemos una etiqueta de lnea horizontal: <HR>.
Una de las cosas buenas que hemops aprendido del diseador Dave Siegel (mira en
http://philip.greenspun.com/wtr/getting-dates) es que no tenemos que usar de ms las lneas horizontales: los
diseadores grficos de verdad usan el espacio en blanco para las separaciones. Utilizamos cabeceras <H3> en el
texto para separar secciones y slo usamos <HR> en la parte inferior del documento.
Debajo del ltimo <HR> firmamos el documento con la direccin de correo electrnico del autor. De esta
manera el lector puede desplazarse hasta la parte inferior de la ventana del navegador y all encuentra quin es
responsable de lo que acaba de leer, y a dnde enviar correcciones. La etiqueta <ADDRESS> se muestra
usualmente utilizando letras cursivas. La direccin se envuelve con una etiqueta de ancla cuyo destino es un
mailto: en lugar http:. Si el usuario hace clic en el texto del ancla (la direccin de correo electrnico de
Phillip), el navegador abre una ventana para enviar correo a philg@mit.edu.

Cmo elegir un entorno de programacin


Ahora debers elegir un entorno de programacin para el resto del semestre. Si ya tienes experiencia en la

construccin de aplicaciones de Internet basadas en RDBMS puedes usar lo que ya conoces. El cambio de
herramientas rara vez es el camino a la gloria. Si no has programado esta clase de software con anterioridad,
sigue leyendo...
Cmo elegir una RDBMS
Probablemente existen tres alternativas razonables de RDBMS para este semestre: (1) Microsoft SQL Server, (2)
Oracle, and (3) PostgreSQL.
Para programadores experimentados en Microsoft, Microsoft SQL Server resulta fcil de instalar y de
administrar. Y si esperas pasar el resto de tu vida profesional en un entorno Microsoft, bien te viene aprenderla.
La concurrencia es el punto fuerte de Oracle comparado con sus competidores comerciales. En Oracle los
lectores nunca esperan a los escritores y los escritores nunca esperan a los lectores. Suponte que el publicador de
un sitio muy visitado inicia una consulta a las 12:00 PM para resumir el uso por usuario. Oracle puede pasar una
hora tamizando 200 GB de datos registrados. El disco rechina y se usa completamente una CPU hasta la 1:30
PM. Ms an, supongamos que el Usuario #356712 llega a las 12:30 PM y cambia su direccin de correo
electrnico, con lo cual se modifica una fila en la tabla users. Si la consulta sobre uso llega a esta fila a las 12:45
PM, Oracle se da cuenta que la fila fue modificada despus de que comenz la consulta. Debido a la I de
ACID, Oracle debe aislar al publicador de la modificacin realizada por el usuario. Oracle asegura esto al buscar
en el segmento de rollback y entregar los datos de la fila del usuario #356712 como estaban al momento de las
12: PM, cuando comenz la consulta. A continuacin se muestra el escenario en una tabla:
Hora

Publicador

Aplicacin Web pblica

12:00 Inicia una consulta de 90 minutos para resumir el uso a


PM lo largo de ao anterior year

--

12:30 el resumen de uso sigue zumbando mientras trabaja


PM

Usuario #356712 actualiza su


direccin de correo electrnico de
joe@foobar.com a
joe@yahoo.com

12:45 el resumen de uso llega hasta el Usuario #356712;


-PM Oracle busca en el segmento de rollback y saca
joe@foobar.com para el informe, pues se era el valor
a las 12:30 PM
1:30 el informe de uso termina
PM

--

Cmo hubiera funcionado esto en Microsoft SQL Server? Cuando est leyendo, pone candados de lectura en la
informacin que est por leer. Nadie puede escribir hasta que no liberas estos cerrojos. Cuando est escribiendo,
pone candados de escritura sobre la informacin que ests por actualizar. Nadie puede leer o escribir hasta que
no liberas esos candados. En el ejemplo precedente, el Usuario #356712 enva su solicitud de cambio a las 12:30
PM. El hilo con el servidor Web se bloquear a la espera de que se libere el candado de lectura. Cunto debe
esperar? Una hora completa viendo el cono rotando en la esquina superior derecha de su navegador, que le
indica: el navegador an est recibiendo informacin. Si eres solcito y previsor, puede programar alrededor de
esta arquitectura de candados en SQL Server, pero la mayora de los operadores de servicios de Internet prefieren
instalar Oracle, antes que entrenar a sus programadores para que sean ms cuidadosos a la hora de pensar en los
temas de concurrencia.
Para el purista de open source, la nica alternativa realista de RDBMS es PostgreSQL, disponible en
www.postgresql.org. De algunas maneras, PostgreSQL tiene caractersticas ms avanzadas que cualquier
RDBMS comercial, y dispone de un sistema de concurrencia multiversionado al estilo Oracle. PostgreSQL es
fcil de instalar y administrar pero no la usan los operadores de servicios muy grandes porque no hay manera de
construir una instalacin verdaderamente masiva de PostgreSQL o una que pueda tolerar fallas de hardware.

La mayora de los ejemplos de SQL en este libro usarn la sintaxis de Oracle. Esto es en parte porque Oracle es
la base de datos ms popular en el mundo, pero mayormente porque Oracle es lo que tenamos funcionando en
MIT cuando iniciamos el trabajo en esta rea all por 1994, y por lo tanto disponemos de sistemas de archivo
llenos de cdigo Oracle. Los suplementos de los conjuntos de problemas (mira al final del captulo) pueden
contener traducciones para bases de datos SQL ANSI como Microsoft SQL Server y PostgreSQL.
Cmo elegir un lenguaje procedimental
Como se mencion antes, la mayor parte de tu cdigo procedimental, tambin llamados scripts Web no va a
hacer ms trabajo que consultar la RDBMS y unir los resultados con una plantilla HTML, XHTML Mobile
Profile, o VoiceXML. Es as que tu productividad o el esfuerzo de mantenimiento del cdigo no van ser
afectados en demasa por la eleccin del lenguaje procedimental.
Dicho esto, vamos a decir algo amable sobre los lenguajes de scripting. Si necesitas escribir algunas
abstracciones complejas, siempre puedes ponerlas en Java corriendo dentro de Oracle, o en C# corriendo dentro
de Microsoft .NET. Pero para la capa de presentacin, o sea, las pginas individuales, que no se te escapen las
ventajas de usar un lenguaje ms simple y terso como Perl, Tcl y Visual Basic.
Cmo elegir un entorno de ejecucin
A continuacin se tratan ciertos temas que debes tener en cuenta al seleccionar servidores Web y sevidores de
aplicacin y Web.
una URL = un archivo

Lo primeroq eu debes mirar en un entorno de ejecucin es la propiedad de que una URL visible para el usuario
corresponde a un archivo en el sistema de archivos. Es mucho ms rpido depurar un sistema si , dada una queja
sobre http://photo.net/foobar puedes saber que vas a encontrar el programa de computadora responsable en
/web/photonet/www/foobar.algo. Algunos entornos de programacin donde esto es cierto son:
Perl CGI
Microsoft Active Server Pages
Java Server Pages
AOLserver ADP templates y scripts .tcl
Una notable excepcin de esta propiedad son los Java servlets. Un servlet tpicamente procesa varias URLs. Esto
se muestra incmodo en la prctica, porque te enlentece cuando tratas de reparar un defecto en el cdigo de otra
persona. Las ideas de modularidad y reutilizacin de cdigo son buenas, pero trata de pensar en cuntos archivos
tiene que revisar un programador hasta que encuentra el defecto. Uno, es magnfico. Dos, probablamente est
bien. N donde N no es conocido, eso no est bien.
filtros

Hemos dicho que la modularidad y la reutilizacin de cdigo pueden abandonarse en favor de preservar el
principio sagrado de un URL = un archivo. La forma de ganar nuevamente la modularidad y la reutilizacin
del cdigo es mediante filtros, la capacidad de instruir al servidor Web para decirle: corre este fragmento de
cdigo antes de servir cualquier URL que comience con /yow/. Esto es particularmente til para el cdigo que
realiza la tarea de control de accesos. Supongamos que tiene quince scripts que forman la experiencia de
administracin para un sistema de concursos. Quieres asegurarte que slo los administradores autorizados
pueden usar esas pginas. Para controlar los permisos de acceso administrativo se requiere una consulta SQL.
Puedes escribir un procedimiento denominado CheckForContestAdminAuthority y luego explicar a los autores
de los scripts que deben incluir una llamada a este procedimiento an cada uno de los quince scripts
administrativos. Igual tienes ahora quince copias del mismo cdigo: una sentencia IF, una llamada a

procedimiento y la llamada al procedimiento que muestra el mensaje de error si


CheckForContestAdminAuthority retorna unauthorized. Pero la consulta SQL ocurre slo en un lugar y se
puede actualizar de manera centralizada.
El problema principal de este enfoque no son las quince copias del IF y sus acompaantes. El problema es que
inevitablemente uno de los autores de scripts se va a olvidar de incluir la verificacin. Entonces tu sitio tendr un
agujero de seguridad. Puedes cerrar el agujero y eliminar catorce copias del IF si instalas el cdigo como un
filtro en el servidor. Ya habrs notado que para que esto funcione, el mecanismo de filtro debeincluir una API
para abortar el servicio de la pgina solicitada. El filtro debe ser capaz de decirle al servidor Web: no sigas
atendiendo a ese usuario con el script documento solicitado.
URLs abstractas

Como ingeniero, tu contribucin principal a un servicio de Internet ser el modelo de datos y el diseo de la
interaccin (Pasos 1 al 3). Cuando ests esbozando el flujo de pginas para un foro de discusin en una pizarra,
le das nombres a las pginas, como por ejemplo todos-los-temas, un-tema, un-hilo, pega-respuesta,
pega-confirmacion-respuesta, etc. Vamos a darles el nombre de URLs abstractas. Supongamos que eliges
implementar tu servicio en Java Server Pages. Tiene sentido que las URLs sean todos-los-temas.jsp, untema.jsp, un-hilo.jsp, etc.? Porqu deberan ver tus usuarios que utilizaste JSP? Les interesa? Y si cambias
de manera de pensar y te pasas a PErl, vas a cambiar las URL visibles para los usuarios a todos-los-temas.pl,
un-tema.pl, un-hilo.pl, etc.? Esto va a afectar los marcadores de todos los usuarios. An ms importante,
este cambio va a afectar todos los enlaces que hay en otros sitios y apuntan al tuyo. se es un precio muy alto a
pagar por un cambio en la implementacin que debera haber sido invisible a los usuarios finales.
Lo que necesitas es un entorno de programacin Web lo suficientemente poderoso como para que te permita
construir algo que llamaremos un procesador de solicitudes. Este programa lee la solicitud entrante como URL
abstracta, por ejemplo, un-tema y sigue la siguiente lgica:
existe un archivo .jsp en el sistema de archivos; si es as, entonces ejectalo
busca en las cabeceras para ver si solicitan XHTML Mobile Profile para un navegador de telfono mvil;
si es as y si adems hay un archivo .mobile en el sistema de archivos, servirlo, sino, continuar
busca un archivo .html
busca un archivo .jpg
busca un archivo .gif
(Seguramente vas a querer adecuar el ordend e las preferencias para tu servidor Web.)
bitcora centralizada de las consultas a la RDBMS

El trabajo principal de nuestros scripts Web ser formular las consultas y transacciones SQL. Si las cosas salen
mal, la informacin ms valiosa que puedas obtener es que le dijeron mis scripts Web a la RDBMS que haga y
en cul secuencia. Los mejores programas para servidores de aplicacin/Web tienen un nico archivo de
bitcora en el cual pueden opcionalmente escribir todas las consultas que se envan a la RDBMS.

Ejercicios
Luego de resolver estos problemas, vas a saber:
Cmo ingresar al servidor de desarrollo
Rudimentos del lenguaje de programacin que hayas elegido.
Cmo crear, ejecutar, comprobar y depurar una pgina Web dinmica
Cmo escribir una pgina Web que consulte a un servidor externo.
Rudimentos de SQL
Cmo consultar una RDBMS desde el shell

Cmo escribir una pgina Web que consulte a una RDBMS


Cmo personalizar las aplicaciones Web mediante la generacin y lectura de cookies
Cmo leer y escribir datos en XML
Cmo cargar un archivo plano de datos dentro de una tabla de la RDBMS
Si ests usando Microsoft .NET, vas a encontrar ejemplos de ayuda en
http://philip.greenspun.com/seia/examples-basics/dot-net-examples/.
Ejercicio 1: Encuentra tu lugar en el mundo
Encuentra el directorio raz de tu servidor Web, el directorio donde el servidor Web busca inicialmente los
archivos a servir. Copia all un archivo con nombre index.html y cuyo contenido sea un texto que identifique
tu servidor Web. Incluye un hiperenlace a tu direccin de correo electrnico en el pie de la pgina.
Conecta un navegador Web a tu servidor, usando slo el nombre del host. Para el resto del conjunto de
problemas, asumiremos que el nombre de tu servidor Web es yourhostname.com. Verifica que cuando solicitas
http://yourhostname.com se presenta tu pgina personalizada. Si lo que obtienes es un listado del directorio, es
probable que tu servidor Web no est configurado para buscar archivos index.html; vas a tener que
reconfigurar tu servidor Web. Ahora utiliza un validador de HTML para asegurarte de que tu HTML es legal
(mira en el directorio de validadores en Yahoo para buscar en una lista de programas y servicios:
http://dir.yahoo.com/Computers_and_Internet/Data_Formats/HTML/Validation_and_Checkers/ )
Hasta ahora has realizado al menos dos solicitudes a tu servidor Web. Estas solicitudes se han registrado en la
bitcora de accesos (log) del servidor Web. Encuentra las bitcoras en el sistema de archivos y verifica que los
momentos de tiempo de los accesos tengan sentido para t.
Ejercicio 2: Tu primer programa
Crea un subdirectorio de nombre basics al mismo nivel en el sistema de archivos que el archivo index.html
que creaste en el ejercicio anterior; o sea, basics debe estar un nivel por debajo del directorio raz del servidor
Web. Este directorio se debe poder acceder a travs de http://yourhostname.com/basics/
Pon un archivo en ese directorio que sea accesible mediante http://yourhostname.com/basics/mi-primerprograma (si no has aprendido como implementar URLs abstractas, puede ser que se llame mi-primerprograma.pl o mi-primer-programa.asp o similar).
Cuando visitamos http://yourhostname.com/basics/mi-primer-programa deberamos ver la fecha y hora actual en
el servidor, metida en medio de HTML legal y firmado al pie con tu direccin de correo electrnico.
Agrega el cdigo necesario para generar un error de divisin por cero en tu programa. Encuentra y visita la
bitcora de errores del servidor Web para ver cmo es que se te comunica este error. Algunos entornos de
ejecucin, muestran el mensaje de error y un desarrollo de la pila (stack backtrace) en una ventana del navegador
cuando ocurre un error. Si puedes configurar el servidor Web de esa manera, encontrars que la depuracin va
mucho ms rpido durante este semestre. Si no puedes, asegrate de saber cmo encontrar los ltimos errores
con rapidez. Enuna mquina Unix puedes usar el mandato tail -f error.log en una sesin de shell o M-x
revert-buffer en un editor Emacs que visita el archivo error.log.
Justo antes de la lnea de cdigo que genera el error de divisin por cero, agrega una lnea de cdigo para escribir
el siguiente mensaje en la bitcora de error: A punto de dividir por cero. Desde el navegador, solicita
nuevamente la pgina http://yourhostname.com/basics/mi-primer-programa y visita la bitcora de errores para
verificar que el mensaje A punto de dividir por cero precede al mensaje de error.
Ejercicio 3: Procesamiento de formularios

Visita http://philip.greenspun.com/seia/examples-basics/lens y revisa el calculador de longitud focal bajo el ttulo


Exactly how long a lens do you need?
Pon a funcionar este servicio en tu servidor. Debes notar que esto involucra: (1) aprender un poco de formularios
HTML; (2) seguir el enlace Source Code for this page en la pgina de resultados de photo.net y extraer la
frmula matemtica del programa que hay all; (3) subir un archivo .html esttico que contenga el formulario en
/basics/lens-calculator; y (4) poner un programa en /basics/lens-calculator-2 que procese el formulario.
(Note la convencin de nombres aqu. Cuando sea posible, en este semestre vamos a solicitar que adoptes la idea
de que un script que procesa un formulario para foobar se encuentre en foobar-2. Si hay una secuencia de
pasos que debe seguir el usuario, nos gustara verlos como foobar, foobar-2, foobar-3, etc.)
Ejercicio 3a: Agregar el enlace para ver el cdigo fuente
Gran parte de nuestro trabajo ene ste semestre es mirar el cdigo fuente de los dems. Vamos a hacer esto para
poder examinar enfoques alternativos al mismo problema. Puedes facilitar esta actividad mediante el agregado
de un enlace Ver cdigo fuente al final de la pgina que presentas. Cuando un usuario que hace clic en este
enlace, se le muestra un archivo que muestra todo el cdigo fuente que est detrs de la pgina en cuestin, pero
no incluye cdigo compartido por otras pginas del sitio.
Pistas: vas a mostrar el script y cualquier archivo de plantilla, si corresponde, con un tipo MIME text/plain. De
esta manera el navegador que recibe el archivo no va a tratar de interpretar el cdigo HTML. Algunos
navegadores son sper agresivos y tratan de interpretar cualqueir cosa que parezca HTML, an cuando venga
con un tipo MIME text/plain. Un enfoque alternativo que funciona en dichos navegadores es sustituir todo el
HTML reemplazando < con &lt;, > con &gt; y & with &amp;, y luego envolviendo el contenido en un par de
etiquetas <PRE> .
Servidores que consultan servidores externos
Algunas de las relaciones ms altas alcanzadas para logro/esfuerzo se dan cuando consolidamos informacin
proveniente de mltiples fuentes de datos. Considere, por ejemplo, el Reloj de riqueza personal de Bill Gates,
en http://philip.greenspun.com/WealthClock (Figura 2.3). Este programa consulta un servidor pblico de precios
de acciones (el primer servidor externo para encontrar el precio actual de las acciones de Microsoft
Corporation. El segundo servidor externo que se consulta es el reloj de poblacin de la oficina de censos de
E.E.U.U. para obtener una estimacin de la poblacin actual de E.E.U.U..

Figura 2.3: El reloj de riqueza personal de Bill Gates. Este programa consulta un servidor de precios de acciones
para encontrar el precio de las acciones de Microsoft y el servidor de la Oficina de Censos de E.E.U.U. para
obtener la poblacin actual, luego combina los nmeros en una pgina.
Hay varias cosas interesantes en este programa, que fue escrito por uno de los autores en 1995. Una es que fue
posible gracias a la existencia de un procedimiento includo en AOLserver que puede obtener una pgina
completa desde Internet: ns_httpget. Esto permiti que el proyecto completo se pueda hacer en una hora.
Ingeniera tiene que veer fundamentalmente con costos. Si para construir esta pequea aplicacin se requirieran
varios das de trabajo, probablemente no se hubiera hecho. Un segundo tema que vale la pena mencionar es que
el programa ha requerido una importante cantidad de trabajo de mantenimiento a lo largo de los aos, mucho
mayor a su costo inicial de desarrollo. El programa se basa en el uso de expresiones regulares para sacar datos de
las pginas HTML que fueron diseadas para ojos humanos. A medida que los publicadores de las fuentes de
datos originales cambian el formato HTML a lo largo de los aos, se hace necesario actualizar estas expresiones
regulares.
El tema final que vamos a mencionar sobre este programa es que parte de la hora de codificacin fue para

construir un sistema de propsito general para almacenar en forma intermedia (cach o memoizacin) los
resultados de la evaluacin de cualquier expresin en Tcl en una variable global. Porqu? Se ve como mala
netiqueta que escribamos un programa con el potencial de imponer una carga poco razonable sobre los
servidores de la oficina de censos y los que muestran precios de las acciones. Adems, si se da el caso que el
reloj de la riqueza se vuelve popular, estara realizando consultas a los mismos servidores varias veces por
segundo para obtener los mismos datos. Por ltimo, sera mejor si los usuarios no debieran esperar hasta que las
dos pginas se traigan si no necesitan los nmeros actualizados al ltimo momento. Con la pgina HTML
almacenada completa en una variable, queda disponible en el espacio de memoria virtual del AOLserver y se
puede acceder mucho ms rpido que incluso un archivo esttico. Los usuarios que desean una respuesta en
tiempo real pueden solicitar una mediante un clic adicional. Los clculos realizados para ellos, sirven entonces
para actualizar el cach de los usuarios casuales.
El mecanismo de cach puede parecer un exceso de ingeniera, pero de tanto en tanto el reloj de la riqueza puede
ser enlazado desde sitios de noticias extremadamente populares y recibira varias solicitudes por segundo. La
capacidad de manejar una carga razonablemente alta como esa, all por mediados de 1990 sin una enorme granja
de servidores era ms bien rara. Si todas esas solicitudes hubieran pasado directamente a travs de la oficina de
censos, por ejemplo, el servicio completo se hubiera arrastrado por la lentitud.
El cdigo fuente de este programa est disponible en http://philip.greenspun.com/seia/examples-basics/wealthclock.tcl.txt y puede resultar til al resolver el siguiente ejercicio.
Ejercicio 4: Adquisicin comparativa de libros
Inspirado en el Reloj de riqueza personal de Biil Gates y su cdigo fuente como modelo, construye una nueva
aplicacin Web que toma el ISBN de un libro en un formulario y consulta a su vez en diferentes libreras en lnea
para encontrar el precio y la informacin de disponibilidad. Los resultados se deben mostrar en una tabla HTML
(precio y cantidad disponible/no disponible de cada librera). Tu servicio debe estar disponible en /basics/books
(el formulario de entrada) y /basics/books-2 (la pgina de resultados).
Nuestra sugerencia es sondear en barnesandnoble.com y www.powells.com. Tu programa debe ser robusto frente
a demoras, errores en los sitios externos y problemas en la red. En otras palabras, bajo ninguna circunstancia tus
usuarios deben ver una pgina del estilo Server Error 500. Para asegurar esto, debes aprender sobre la gestin
de excepciones en tu lenguaje de programacin. En Java, por ejemplo, tendrs que usar try y catch..
Comprueba el funcionamiento de tu programa con los siguientes ISBN: 0590353403, 0140260404, 0679762906,
1588750019.
Prueba de agregar ms libreras, aunque puedes tener problemas para hacerlas funcionar. Por ejemplo,
amazon.com y wordsworth.com tienden a responder con un 302 redirect si el cliente no entrega el ID de sesin
en la consulta.
Crditos extra: Cul de los libros precedentes dice que The obvious mathematical breakthrough would be
development of an easy way to factor large prime numbers?
Recuerda que es un error comparar a Harry Potter con Shakespeare... Porque Harry Potter es un personaje de
ficcin y Shakespeare fue un autor. Lo que en realidad deberas hacer es comparar a J.K. Rowling con
Shakespeare -- Jin S. Choi.
Ejercicio 5: Hablemos con la base de datos
Ocurre que toma menos tiempo aprender lo bsico de SQL que lo que toma entender cmo enviar un mandato
SQL a la base de datos. Estas instrucciones son para Oracle. Debes buscar en tu suplemento si ests utilizando
otro RDBMS.
En Unix, la manera ms conveniente de manejar Oracle en general es desde Emacs, asumiendo que ya eres un

usuario de Emacs. Escribe M-x shell para obtener un shell de Unix. Escribe M-x rename-buffer para
cambiar el nombre del buffer a sql-shell, de esta manera puedes escribir nuevamente M-x shell para obtener
un nuevo shell del sistema operativo. En el sql-shell, escribe sqlplus para arrancar el SQL*Plus, el cliente de
caracteres de Oracle. Si ests usando MS Windows, busca el programa SQLPLUS.EXE o PLUS80.EXE.
SQL*Plus te va a solicitar un nombre de usuario y una contrasea. Si ests utilizando el servidor de desarrollo
provisto por la facultad, puedes obtener esa informacin consultando al docente de prcticas. Si configuraste el
RDBMS por t mismo, debers crear un nuevo tablespace y usuario antes de realizar este ejercicio.
Escribe lo siguiente en el prompt del SQL*Plus para crear una tabla con la cual registrar las clases que ests
tomando este semestre:
create table my_courses (
course_number
varchar(20)
);

Debes advertir que en SQL*Plus hay que terminar los mandatos SQL con un punto y coma final (;). Esos
punto y comas no son parte del lenguaje SQL y no debes usarlos cuando escribas SQL en tus scripts Web.
Inserta unas lneas, por ejemplo:
insert into my_courses (course_number) values ('6.171');

Mira lo que hiciste:


select * from my_courses;

Compromete tus cambios:


commit;

Advierte que hasta que no escribiste este COMMIT, otro usuario que est conectado a la misma base de datos no
es capaz de ver la fila que insertaste. Entre los usuarios conectados tambin inclumos al servidor Web. Ocurre
con frecuencia a los estudiantes que ingresan informacin con SQL*Plus y no se preocupan de hacer el
COMMIT. Esto causa consternacin pues la informacin nueva no aparece en ninguna de las pginas Web, y se
desesperan depurando los programas. Por supuesto, no hay nada malo en los scripts. Es que la garanta ACID de
la base de datos obliga a que el servidor Web obtenga una vista diferente de la base de datos que aquel usuario
que est en medio de una transaccin.
Tu vista de la tabla no debe cambiar luego del COMMIT, pero mejor controlar de nuevo:
select * from my_courses;

Uno de los principales beneficios de utilizar una RDBMS es la persistencia. Todo lo que creas se mantiene luego
de que te desconectas de la sesin. Normalmente, esto es bueno, pero en este caso probablemente vas a querer
dejar las cosas en limpio luego de tu experimento:
drop table my_courses;

Puedes salir de SQL*Plus con el mandato quit.


Interludio de lectura
ste es un buen momento para tomar un descanso y leer sobre SQL. Te sugerimos los captulos 1 al 9 de SQL for
Web Nerds en http://philip.greenspun.com/sql/.
Ejercicio 6: scripts Web que hablan con la RDBMS

Echa un vistazo al archivo http://philip.greenspun.com/seia/examples-basics/quotations-pseudo-code.txt, que es


el seudo cdigo para una pgina que muestra citas almacenadas en una base de datos Oracle.
Si tus instructores son amables, ya habrn traducido este seudocdigo en algo que funciona en la infraestructura
que ests usando en tu facultad. Sino, debers traducirlo por tu cuenta, junto con el modelo de
http://philip.greenspun.com/seia/examples-basics/quotation-add-pseudo-code.txt. Pon el programa resultante en
/basics/quotations (con la extensin en el nombre de archivo que corresponda a tu lenguaje de programacin, si
no puedes evitarla). Agrega un hiperenlace en tu pgina de ndice del sitio que apunte a este nuevo servicio.
Usa el formulario en la pgina Web para agregar algunas citas. Si no te sientes inspirado, a continuacin hay
algunas para ponerte en marcha:
"I feel like those Jewish people in Germany in 1942." Ted Turner (cuando le impidieron comprar otra
estacin de TV)
"If a man speaks in the forest and there is no woman there to hear him, is he still wrong?" Unknown
Heroine
"Men are like a fine wine. They all start out like grapes, and it's our job to stomp on them and keep them in
the dark where they will mature into something you'd want to have dinner with." Unknown Heroine
"A woman needs four animals in her life. A mink in the closet. A jaguar in the garage. A tiger in bed. And
an ass to pay for it all." Anne Slater
"An editor should have a pimp for a brother, so he'd have someone to look up to." Gene Fowler
"The newest computer can merely compound, at speed, the oldest problem in the relations between human
beings, and in the end the communicator will be confronted with the old problem, of what to say and how
to say it." Edward R Murrow
"Egotism is the anesthetic that dulls the pain of stupidity." Frank Leahy
"Some for renown, on scraps of learning dote, And think they grow immortal as they quote." Edward
Young
Regresemos a nuestro cliente de caracteres del RDBMS (por ejemplo, SQL*Plus en el caso de Oracle) y
hagamos un select * from la tabla para comprobar que las citas que ingresaste en el formulario Web estn
insertadas en la tabla.
En el cliente de caracteres del RDBMS, inserta una cita mediante un mandato ingresado a mano en SQL. Para
ver el cdigo del mandato INSERT de SQL que debes usar, examina el cdigo de la pgina quotation-add. Luego
de crear este nuevo registro en la tabla, haz un select * de nuevo y deberas ver dos registros.
Pista: no te olvides que las cadenas de caracteres se ponen como literales encerrndolos en apstrofos (comillas
simples), y no entre comillas dobles.
Ahora recarga el URL de las citas desde tu navegador. Si no ves la nueva cita desde all, es porque no hiciste el
COMMIT; en el SQL*Plus y la base de datos protege al servidor Web para que no vea la transaccin sin
completar.
Ejercicio 6a: Cmo eliminar la tabla de candados por medio de una secuencia
Lee sobre el objeto secuencia en la base de datos Oracle, en los captulos Data Modeling y Transactions de
SQL for Web Nerds en http://philip.greenspun.com/sql/data-modeling y
http://philip.greenspun.com/sql/transactions. Mediante la creacin de una secuencia, podrs editar el script de
quotation-add para:
eliminar la necesidad de una tabla de candados (lock table)
eliminar la maquinaria de transacciones (pues ya no ests juntando varios mandatos SQL para su
ejecucin)
generar una clave nica para la nueva cita dentro del propio mandato INSERT

Ejercicio 7: Mejoremos la interfaz de usuario para la captura de datos


Vuelve a la pgina principal de las citas, y modifcala de tal manera que la entrada de datos de las categoras se
haga mediante una lista de seleccin de las categoras existentes (vas a tener que usar un mandato SQL
SELECT DISTINCT). Para las nuevas categoras, debes proporcionar una caja de entrada de texto con la
etiqueta Nueva categora. Asegrate de modificar quotation-add de manera de que se entere cuando se define
una nueva categora.
Ejercicio 8: Bsquedas
Agrega un pequeo formulario en la esquina superior de /basics/quotations para que el usuario ingrese una nica
palabra de consulta. Escribe un programa que atienda ese formulario y que retorne todas las citas que contienen
la palabra especificada. LA bsqueda debe ignorar diferencias de maysculas y minsculas, y tambin debe
buscar en la columna de autores. Pistas: like '%foo%' y las funciones UPPER y LOWER.
Ejercicio 9: Personalizacin del servicio mediante cookies
Ahora implementars una personalizacin para cada navegador de la base de datos de citas. El objetivo global
debera ser:
Un usuario puede eliminar una cita y nunca ms debera verla en la pgina principal ni en la pgina de
bsquedas.
La eliminacin de una cita es persistente y debe mantenerse aunque se cierre el navegador
Las citas eliminadas por un usuario no tienen ningn efecto en lo que ven los dems usuarios.
Los usuarios pueden borrar sus personalizaciones y ver la base de datos de citas completa si hacen clic en
en link borra mi personalizacin en la pgina principal. Este enlace slo debe aparecer si el usuario ha
personalizado la base de datos de citas.
Para implementar esto usars cookies. Con lo que leas en tu suplemento de tecnologa, aprenders cmo leer la
solicitud HTTP entrante y luego explorar la cabecera del cookie, o tal vez tengas una API que te facilite la tarea
de obtener el valor de una cookie en particular. Debes advertir que puedes hacer que la cookie expire si la
reemites con una fecha de expiracin en el pasado.
Pista 1: Es posible construir este sistema usando una cookie de ID para el navegador y mantener el conjunto de
citas eliminadas en el RDBMS. Sin embargo, Si no vas a permitir que los usuarios se identifiquen al ingreso y
tengan su propio perfil, la verdad es que no vale mucho la pena mantener los datos en el servidor.
Pista 2: No es estrictamente aceptable para la especificacin de las cookies, pero los navegadores aceptan valores
con espacios. De esta manera, si te gusta puedes almacenar las cits eliminadas como una lista separada por
espacios.
Pista 3: No filtres las citas en tu script Web. En general es una seal de incompetencia en la programacin
cuando pides ms datos al RDBMS de los que vas a mostrar al usuario final. SQL es un lenguaje de consulta
muy poderoso. Puedes usar la caracterstica NOT IN para excluir una lista de citas.
Ejercicio 10: Datos publicados en XML
Como ya te ha tocado aprender cuando consultaste las libreras, los datos en la Web tradicionalmente no estn
formateados como para que los usen los programas de computadora. En teora, la gente que desea intercambiar
datos a travs de la Web puede usar XML, un estndar de 1998 del Consorcio Web (http://www.w3.org/XML/).
En la prctica, sucede en la actualidad (2005) que vas a tener una dura lucha para conseguir algo de cooperacin
XML del sitio promedio. Eres un afortunado entonces, al completar este conjunto de problemas, pues vas a
cooperar con tus compaeros estudiantes: el objetivo global es hacer que las citas de tu base de datos sea

exportable en un formato estructurado, de tal manera que puedan ser ledas por la aplicacin de los otros
estudiantes.
Lo que necesitas para cooperar es:
ponernos de acuerdo en un URL que exista en el servidor de cada grupo, donde se podrn obtener las citas:
/basics/quotations-xml
un formato acordado para las citas
(De hecho, podramos evitar la necesidad del acuerdo previo si configuramos adecuadamente la infraestructura
para el descubrimiento de servicios, y si empleamos tcnicas de datos autodescriptivos las cuales trataremos
ms adelante en el semestre pero vamos a mantener sencillas las cosas por ahora.)
Vamos a dar formato a las citas mediante XML, una notacin convencional para describir datos estructurados.
Las estructuras XML consisten en cadenas de caracteres encerrados en etiquetas del estilo HTML, como <foo> y
</foo>, que describen la clase de cosa que es el dato.
A continuacin se muestra un ejemplo informal, en el cual se muestra la estructura que vamos a usar en nuestras
citas:
<quotations>
<onequote>
<quotation_id>1</quotation_id>
<insertion_date>2004-01-26</insertion_date>
<author_name>Britney Spears</author_name>
<category>Pop Musician Leisure Activities</category>
<quote>I shop, go to movies, soak up the sun when possible and go out to eat.</quote>
</onequote>
<onequote>
.. another row from the quotations table ...
</onequote>
... some more rows
</quotations>

Ya has advertido que hay una etiqueta para cada columna de nuestro modelo de datos en SQL:
<quotation_id>
<insertion_date>
<author_name>
<category>
<quote>

Tambin hay una etiqueta que envuelve cada registro en una estructura <onequote>, y otra que envuelve la
secuencia de estructuras <onequote> como un documento <quotations>.
Construccin de una DTD
Podemos dar una descripcin formal de nuestra estructura XML, en lugar de un ejemplo informal, mediante una
definicin de tipo de documento [Document Type Definition] (DTD).
Nuestra DTD se inicia con una definicin de la etiqueta quotations:
<!ELEMENT quotations (onequote)+>

Esto dice que el elemento quotations debe contener al menos una ocurrencia de onequote pero puede tener ms
de una. Ahora debemos indicar qu es lo que constituye un elemento onequote legal:
<!ELEMENT onequote (quotation_id,insertion_date,author_name,category,quote)>

Aqu se describe que los subelementos, tales como quotation_id, deben aparecer exactamente una vez y en el
orden especificado. Ahora debemos definir un elemento XML que contiene otra cosa que no sean otros
elementos XML:

<!ELEMENT quotation_id (#PCDATA)>

Eso indica que lo que sea que haya entre <quotation_id> y </quotation_id> se debe interpretar como
caracteres sin procesar (en crudo); entre ellos no habr otras etiquetas (PCDATA viene de parsed character
data)
A continuacin se muestra nuestra DTD completa:
<!-- quotations.dtd -->
<!ELEMENT quotations (onequote)+>
<!ELEMENT onequote (quotation_id,insertion_date,author_name,category,quote)>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT

quotation_id (#PCDATA)>
insertion_date (#PCDATA)>
author_name (#PCDATA)>
category (#PCDATA)>
quote (#PCDATA)>

Vas a ver que esto es muy til Hey, en verdad, esta DTD no te va a servir para completar esta parte del
conjunto de problemas. La nica situacin en la cual la DTD resulta til es cuando procesamos documentos
mediante un parser XML, porque el parse puede automticamente dividir en smbolos (tokens) cada documento
XML. Para implementar la pgina quotations-xml slo necesitars mirar el ejemplo informal.
El nudo de este ejercicio: escribe un script que consulta la tabla de citas (quotations), produce un documento
XML con el formato que se discuti anteriormente, y lo retorna al cliente con un tipo MIME de
application/xml. Ubica el script dentro del sistema de archivos para encontrarlo en /basics/quotations-xml, de
tal manera que los otros usuarios puedan recuperar los datos al visitar un URL elegido de comn acuerdo.
Ejercicio 11: Importar XML
Escribe un programa para importar las citas a partir de la pgina de XML de otros estudiantes. Tu programa
debe:
Obtener el /basics/quotations-xml desde el server de otro estudiante.
Transformar la estructura XML resultante en registros y luego transformar los registros en campos.
Si una cita del servidor externo tiene idntico autor y contenido que una de tu propia base de citas,
ignrala; sino, insrtala en tu base de datos con un nuevo quotation_id. (No querrs usar claves de
identificacin del servidor externo que entren en conflicto con las que ya hay en tu base de datos.)
Pista: Puedes crear una tabla temporaria mediante create table quotations_temp as select * from
quotations y luego de corregir el script la eliminas, de tal manera de no romper nada con tu propia base de
citas.
No se espera que escribas un parser XML como parte de este ejercicio. Puedes usar un parser de XML de
propsito general, o tu profesor de prcticas te dar un programa simple que sea slo capaz de explorar este
formato particular. Si tu profesor de prcticas no te ayuda y ests usando Oracle, recuerda que la RDBMS Oracle
tiene ya incorporado un completo soporte para el procesamiento de XML. Lee la documentacin de Oracle, en
particular la Oracle XML DB Developer's Guide Oracle XML DB. Si usas Java o Perl, hay un montn de
parsers open source disponibles. La Microsoft .NET Framework Class Library contiene clases que proveen un
conjunto completo de herramientas para trabajar con XML.
Ejercicio 12: Toma tu merecido crdito
Ahora debes recorrer todos los programas fuente que escribiste. Asegrate de que haya una cabecer en la parte
superior que explique (1) quin escribi el cdigo, (2) cul es la fecha en que se escribi, (3) cul es el problema
que trata de resolver. Recorre todas las pginas Web. Asegrate que al pie de cada una exsite un enlace mailto:
que apunta a tu direccin permanente de email.

Es tu obligacin profesional hacia los otros programadores que te hagas responsable por tu cdigo fuente. Es tu
obligacin profesional hacia los usuarios finales que te hagas responsable por su experiencia con tu programa.

Ejercicios con base de datos


Ahora vamos a cambiar el rumbo y nos vamos a dirigir a una porcin del conjunto de problemas diseados para
ensearte ms sobre el RDBMS y SQL. Busca en tu suplemento si ests usando un RDBMS diferente de Oracle.
Para facilitar la entrega de tu conjunto de resultados, puedes mantener una transcripcin de las partes relevantes
de tu sesin con la base de datos en http://yourhostname.com/basics/db-exercises.txt.
DB Ejercicio 1: SQL*Loader
Utiliza un editor estndar de textos para crear un archivo de texto plano que contiene 5 lneas, cada lnea
contiene tu smbolo de Bolsa de la empresa que ms te guste, un nmero entero que es la cantidad de
aciones adquiridas y la fecha de adquisicin (en formato MM/DD/YYYY). Separa los campos dentro de
cada lnea con tabuladores.
crea una tabla en Oracle para alojar esos datos:
create table my_stocks
symbol
n_shares
date_acquired
);

(
varchar(20) not null,
integer not null,
date not null

usa el mandato de shell sqlldr en Unix para llamar al SQL*Loader para que se trague tu archivo dentro
de la tabla my_stocks
Dependiendo de cmo seas de gil para hojear la documentacin, este ejercicio puede tomarte entre 15 minutos y
toda la vida. El libro Oracle: The Complete Reference que se nombr en la seccin FIXME More del captulo
Basics resulta de mucha ayuda. Puedes leer acerca de SQL*Loader en la documentacin oficial de Oracle, que
est enlazada desde http://www.oracle.com/, tpicamente en el libro de Utilities. Para encontrar la documentacin
en lnea de Oracle se necesita un poco de persistencia y a veces un proceso de registro (gratuito). Busca enlaces
que digan view library [ver biblioteca] y solapas que digan books [libros].
DB Ejercicio 2: Copiar datos de una tabla a otra
Este ejercicio existe porque nos hemos encontrado que, cuando se enfrentan con la tarea de mover datos de una
tabla a otra, los programadores arrastran los datos desde SQL*Net de Oracle hacia su servidor Web, los
manipulan en un script Web y los meten nuevamente en Oracle a travs de SQL*Net. sa no es la manera de
hacerlo! SQL es un lenguaje muy poderoso y no es necesario traer otras herramientas si lo que se necesita es
mover datos dentro del RDBMS.
usando slo una oracin en SQL, crea una tabla denminada stock_prices con tres columnas: symbol,
quote_date, price. Dentro de esa misma oracin, llena la tabla que has creado con una fila por cada
smbolo de la Bolsa en my_stocks. Las columnas de fecha y precio se deben completar con la fecha actual
y un precio nominal. Pista: select symbol, sysdate as quote_date, 31.415 as price from
my_stocks;
crea una nueva tabla:
create table newly_acquired_stocks (
symbol
varchar(20) not null,
n_shares
integer not null,
date_acquired
date not null
);

mediante una nica oracin insert into ... select ... * (con una clusula WHERE apropiada para

tus datos de ejemplo), copia aproximadamente la mitad de los registros de my_stocks hacia la tabla
newly_acquired_stocks.
DB Ejercicio 3: JOIN
Con una nica oracin SQL que une (con JOIN) las tablas my_stocks y stock_prices debes generar un informe
que muestre el smbolo de Bolsa, la cantidad de acciones, el precio por cada accin, y el valor actual.
DB Ejercicio 4: OUTER JOIN
Inserta un registro en my_stocks. Vuelve a correr la consulta del ejercicio anterior. Nota que tu nueva accin no
aparece en el informe. Esto es as porque las uniste con JOIN con la restriccin de que el smbolo aparezca en
ambas tablas.
Modifica tu mandato SQL para que use un OUTER JOIN en lugar del JOIN de manera de obtener el informe
completo de tus acciones, pero sin la informacin del precio si no estaba disponible.
DB Ejercicio 5: PL/SQL
Inspirados por los mtodos que usa Wall Street para valuar a las compaas en Internet, hemos desarrollado
nuestro propio mtodo de evaluacin para este conjunto de problemas: una accin est valuada con la suma de
los caracteres ASCII que forman el smbolo. (Nota que los estudiantes que utilizarton caracteres en minsculas
para representar los smbolos tendrn portafolios de mayor valor que aquellos que utilizaron maysculas;
IBM vale $216 mientras que ibm vale $312!)
define una funcin PL/SQL que toma un smbolo de Bolsa como argumento y retorna su valor en la Bolsa.
Pista: la funcin ASCII que viene incorporada en Oracle te va a ser de ayuda.
con una oracin nica de UPDATE, actualiza stock_prices para que el valor de Bolsa sea lo que
devuelva este procedimiento PL/SQL
define una funcin PL/SQL que no toma argumentos y retorna el valor agregado del portafolio (n_shares
* price para cada accin). Vas a necesitar definir tu JOIN parecido al del ejercicio 3 como un cursor y
luego podrs usar la facilidad FOR LOOP de los cursores en PL/SQL. Pista: cuando todo est
funcionando, podrs ejecutar este procedimiento desde SQL*Plus mediante select portfolio_value()
from dual;.
Ayuda para SQL*Plus: aunque no es parte del lenguaje SQL, te va a resultar de gran ayuda si escribes /
despus de tus definiciones de PL/SQL cuando las ingresas a travs de la aplicacin SQL*Plus. A menos que
escribas cdigo perfecto, tambin te va a interesar el mandato show errors. Para exponerte a todo el espectro
de esta clase de oscurantismo lee la SQL*Plus User's Guide and Reference, uno de los libros includos en la
documentacin de la base de datos Oracle.
DB Ejercicio 6: Compra ms de los ganadores
En lugar de extraer tus ganancias de los ganadores, compra ms de ellos!
utiliza SELECT AVG() para calcular el precio promedio de tu participacin
utiliza un nico INSERT con SELECT para duplicar tus participaciones en todas las acciones cuyo precio
es mayor que el promedio (con date_acquired puesta en sysdate.
Corre nuevamente tu consulta del DB Ejercicio 4. Nota que en algunos casos tendrs dos filas para el mismo
smbolo. Si tu inters es cmo est tu posicin actual, el informe debera tener como mucho una fila por cada
smbolo.
usa un consulta select ... group by ... de la tabla my_stocks para producir un informe de los

smbolos y del total de acciones en la participacin.


usa un consulta select ... group by ... que haga un JOIN con stock_prices para producir un
informe de los smbolos y del valor total que corresponde a la participacin de cada smbolo
usa un consulta select ... group by ... having ... para producir un informe de los smbolos, el
total de acciones en la participacin y del valor total que corresponde a la participacin de cada smbolo,
restringido a los smbolos de los cuales tenemos al menos dos bloques de acciones (o sea, los
ganadores).
DB Ejercicio 7: Encapsula tus consultas en una vista
Utilizando la consulta del ltimo ejercicio, crea una vista denominada stocks_i_like que encapsule la consulta
final.

Recursos adicionales
sobre HTTP: El estndar cannico de The Web Consortium est en http://www.w3.org/Protocols/
sobre HTML: el captulo de referencia sobre HTML en este libro
sobre ASP.NET: el libro ASP.NET Unleashed (Sams 2003) de Stephen Walther
sobre la RDBMS Oracle: un libro muy til en papel es Oracle XX: The Complete Reference de Oracle
Press, del autor Kevin Loney donde XX es el nmero de la ltima versin de Oracle. Al momento de
salir a imprenta era: Oracle 10g: The Complete Reference (2004). Toda la documentacin de Oracle est
disponible en lnea en www.oracle.com, pero puede resultar abrumadora para los principiantes.

Suplementos para el conjunto de problemas


para la gente que use Microsoft .NET: http://philip.greenspun.com/seia/examples-basics/dot-net-examples/
para los que usen Java: http://philip.greenspun.com/seia/examples-basics/java-examples/
vuelve peridicamente a la versin en lnea de este captulo para encontrar nuevos suplementos:
http://philip.greenspun.com/seia/basics

Tiempo y movimiento
Los estudiantes con ms suerte pasarn slo un par de horas para configurar la RDBMS y el entorno de
desarrollo. Un estudiante promedio que escoge alternativas tecnolgicas razonables, puede pasar uno o dos das
hasta conectar las cosas de manera apropiada. Algunos estudiantes que tiene mala suerte con la administracin
de sistemas y el hardware, o que no son hbiles para obtener ayuda en persona y desde recursos de Internet se
pueden pasar varios das sin terminar de tener un entorno de trabajo que funcione. En MIT los estudiantes inician
la tarea de sysadmin/dbadmin al menos tres semanas antes de la primer clase.
Cuando el entorno de desarrollo est operativo, los ejercicios de este captulo toman entre seis y doce horas para
los estudiantes de MIT que trabajan en un laboratorio donde hay disponibles docentes de prcticas, y les lleva
hasta veinte horas a los que trabajan por su cuenta.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Planificacin
parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y
Andrew Grumet
Si ests leyendo este captulo, podemos asumir que has completado los problemas enunciados en
Elementos bsicos y te mantendrs en el curso por el resto del semestre. Bienvenido. Ahora es el
momento de planificar tu trabajo para la parte central del curso.
Todos en este curso van a construir una comunidad de aprendizaje en lnea, un lugar donde los usuarios se
ensean unos a otros. El trabajo se har solo o en grupos de dos o tres estudiantes. Idealmente, t o tus
instructores encontrarn un cliente real para t, alguien que desea publicar y administrar la comunidad de
manera que siga funcionando en el futuro. Un buen cliente puede ser una organizacin sin fines de lucro
que desea instruir a la gente acerca de su misin. Otro bueno podra ser una empresa de tamao medio que
quiere un sistema de coparticipacin de conocimiento para los empleados. Otro puede ser un grupo de
estudiantes de tu universidad. Si no puedes encontrar un cliente, elige un tema que te apasione, Puede ser
la arquitectura islmica. Podran ser los peces cclidos africanos (una familia de peces de agua dulce, que
viven mayormente en los lagos del Rift en frica oriental; mira en www.cichlid.org). Puedes elegir
criptografa. Elige un tema en el cual te parece que puedas conseguir o generar contenido magntico,
algunos tutoriales que atraern usuarios a tu servicio.
Vas a construir el mismo tipo de proyecto que los dems en la clase. Por lo tanto, ser fcil comparar los
enfoques usados, por ejemplo, para registracin de usuarios o gestin de contenidos.
Antes de empezar a escribir cdigo, sin embargo, nos gustara que hagas un poco de planificacin y de
anlisis competitivo. Fundamentalmente, necesitas responder las preguntas Quin va a ensear qu a
quienes? y Cules son las otras alternativas disponibles en la actualidad para esta clase de
aprendizaje?

Clases de usuarios
Comienza por dividir tus usuarios en clases. Dos usuarios deben caer en la misma clase si esperas que
ellos quieran sustancialmente la misma eperiencia con tu servicio. A medida que vas dividiendo a tus
usuarios en clases, resulta til pensar a la vez cules niveles de privilegios administrativos se necesitarn.
Casi nunca resulta til pensar en trminos de maestros versus alumnos; el punto central de una comunidad
en lnea es que cada usuario aprende en algunos momentos y ensea en otros.
Descomposicin en clases de usuarios: el ejemplo de photo.net
Para darte una idea de cmo sera una descomposicin en clases de usuarios, iremos paso a paso por la del
servicio photo.net.
Primero, consideremos el objetivo general de photo.net: Un lugar donde una persona puede ir y obtener la
respuesta a cualquier pregunta sobre fotografa.
Segundo, considere los niveles de privilegios de administracin. Existen los administradores del sitio,
que tienen libertad para editar o borrar cualquier contenido del sitio. Estos admnistradores tambin tienen
el poder de ajustar la autoridad de los otros usuarios. Tenemos tambin los moderadores que tienen
autoridad para aprobar o eliminar entradas (posts) en determinados foros de discusin. Finalmente estn

los usuarios regulares que pueden leer y publicar entradas, y editar sus propias contribuciones. Un
servicio que sea menos popular puede funcionar con slo dos niveles de privilegios de administracin.
Otra manera diferente de dividir a los usuarios es mediante su prosito al visitar el sitio:
aspirante a apunta-y-dispara desea un consejo rpido sobre cul cmara comprar de tipo
apunta-y-dispara y dnde adquirirla; quiere invertir el mnimo tiempo, esfuerzo y dinero en
fotografa
fotgrafo novicio de compras quiere empezar a tomar fotos como expresin artstica, pero no
tiene una cmara con controles flexible en este momento
fotgrafo novicio aprendiendo dispone del equipamiento correcto, pero quiere ideas sobre
dnde, cundo y cmo usarlo; desea crticas para los trabajs terminados
fotgrafo experto quiere nuevas ideas, ver qu hay de nuevo en el mundo del hardware, quiere
compartir su experiencia, quiere comunidad
aspirante a fotgrafo comercial puede ser un estudiante de secundaria o de universidad curioso
sobre su futuro o una persona mayor que est pensando en cambiar de carrera; quiere saber si es
factible vivir de la fotografa, y si la respuesta es afirmativa, cmo iniciarse.
expositor quiere subir fotos en el sistema de participacin y desarrollar una audiencia entre los
lectores de photo.net
viajero desea conocer ubicaciones en todo el mundo para aprovechar de fotografiar como parte
de un viaje ya planeado o quiere ideas sobre a dnde viajar para obtener inspiracin fotogrfica
lector le gustan las historias de viajes como las de Travels with Samantha y mirar las fotografas
pero no desea tomar l mismo las fotos.
Una ltima manera de dividir a los usuarios que pude resultar til es de acuerdo a cmo se conectan. En el
caso de photo.net, es fcil concebir el usuario con navegador Web. Este usuario sube y se descarga
fotos, participa en las discusiones, lee los tutoriales, compra equipamiento, etc. La misma persona puede
conectarse con un telfono mvil, en cuyo caso se convierte en un usuario mvil. Si el usuario mvil est
en medio de un proyecto fotogrfico, queremos proporcionarle informacin sobre tiendas de fotografa
cercanas, laboratorios de procesamiento, tiendas de reparacin, hora de la puesta de sol, buenas
ubicaciones y otros datos tiles. Si el usuario mvil se conecta con propsitos sociales, necesitamos
pensar en formas prcticas mediante las cuales una persona con un telfono mvil puede participar en una
comunidad en lnea. El mismo desafo de ingeniera nos espera con el usuario telefnico.

Escenarios de uso
Para cada clase de usuario, debes escribir una idea aproximada de qu es lo que obtiene de tu nuevo
servicio una persona de esa clase. Puedes dar indicios del flujo de pginas.
Ejemplo: fotgrafo novicio de compras en photo.net
El novicio debe empezar leyendo un puado de artculos cuidadosamente escritos sobre asesoramiento
para adquisicin de cmaras y luego las evaluaciones de cmaras especficas. Muchos de los mejores
consejos de adquisicin estn contenidos en los intercambios de preguntas/respuestas dentro de los foros,
y por ello los editores necesitan una manera de seleccionar y apuntar a las mejores discusiones en los
archivos de los foros. Luego de que nuestro usuario ha ledo todo este material, sera ideal que se lo
redirija a un foro de preguntas y respuestas (Q&A) donde sean bienvenidas las preguntas del estilo esto
es lo que he decidido comprar, qu piensan?. Esto puede implementarse en la forma de un sistema
explcito de compras social con una columna para las respuestas de los otros lectores y una columna
adyacente con ofertas de negocios de venta de cmaras.

Ejemplo: administrador a nivel de sitio en photo.net


Al conectarse, el administrador a nivel de sitio debe poder ver una pgina que le muestre el pulso de la
comunidad con estadsticas de la cantidad de nuevos usuarios registrados, la cantidad de fotografas que se
incorporaron en el sistema de fotos compartidas, la actividad en los foros de discusin, los esfuerzos
relativos de los moderadores (voluntarios de la comunidad). Si hay usuarios no suspendidos que han sido
responsables de una gran cantidad de trabajo de moderacin para eliminar postings fuera de foco, etc., se
deberan mostrar con un resumen de las actividades problemticas y una opcin para suspenderlos.

Ejercicio 1a
Responde las siguientes preguntas:
Cul ser el tema sobre el cual se va a aprender en la comunidad que ests construyendo?
Qu quieres que diga la gente acerca de tu servicio luego de visitarlo?
Cules son las diferentes clases de usuario relevantes?
Qu debera poder hacer un usuario con un telfono mvil? Es productivo mezclar la interaccin
de voz y texto? (Revisa lo que hay en el consorcio Web bajo el ttulo Multimodal Requirements for
Voice Markup Languages en http://www.w3.org/TR/multimodal-reqs para ver algunas pistas de lo
que puede ser posible.)
Asegrate que tus respuestas a estos y los siguientes ejercicios son accesibles a travs de la Web. Ser una
buena idea adoptar la disciplina de asegurarse que todos los documentos relevantes a tu proyecto estn
disponibles en el servidor mismo del proyecto, tal vez en el directorio /doc/.

Ejercicios 1b: Construye las pginas de perfil de usuario


Cuando uno construye una aplicacin sera ideal si pudisemos contar con los usuarios potenciales en la
misma habitacin que nosotros todo el tiempo. Sus necesidades seran entonces manifiestas y concretas.
Esto no es muy prctico, sin embargo, y por lo tanto a los fines de hacer ms concretas a las personas para
las cuales ests contruyendo la aplicacin, deberas escribir dos o tres pginas de perfiles. Una pgina de
perfil contiene la siguiente informacin: (a) una foto del usuario, (b) el nombre, edad, ocupacin, estado
civil, situacin de vivienda, e ingreso, (c) las metas de corto y largo plazo del usuario relevantes a la
comunidad en lnea que ests construyendo, (d) las preguntas inmediatas que este usuario va a traer al
sitio, (e) la clase de computadora y conexin en la casa de esta persona, y (f) otras informaciones que
ayuden a humanizar esta persona de ficcin.
Para asistirte en esta tarea hemos creado un par de ejemplos para una comunidad de aprendizaje en lnea
sobre el area de aviacin general:
Rachel Lipschitz (http://philip.greenspun.com/seia/examples-planning/user-profile-1)
Melvin Cohen (http://philip.greenspun.com/seia/examples-planning/user-profile-2)
Mindy Silverblatt (http://philip.greenspun.com/seia/examples-planning/user-profile-3)
Si no tienes una buena biblioteca de fotografa, puedes obtener tus fotos (dando el crdito) desde photo.net
y otras fuentes en lnea.
No ocupes ms de una hora en este ejercicio; se ha escrito mucho software verdaderamente detestable con
adornados perfiles de usuario en la mesa de trabajo de los programadores. No hay comparacin con lanzar
el servicio a usuarios reales y luego vigilar atentamente su comportamiento.

Ejercicio 1c
Para cada clase de usuario identificao en el Ejercicio 1a, escribe un escenario de uso textual o dibuja uno
grfico sobre cmo experimenta el usuario tu servicio.

Evaluacin de alternativas: Offline


Cada vez que Nick Gittes (19022000; abuelo de uno de los autores) vea
una propaganda de computadora por televisin, deca Una computadora
para la casa. Para qu querra alguien una cosa como esa?
La explosin de los dotcom es cosa del pasado. Debes tener una buena
razn para construir un sistema de informacin. Si un cabezadura
cascarrabias quiere saber porqu necesitas todas esas vistosas
computadoras en lugar de un libro, un poco de tiza y lpiz y papel, sera
bueno tener una respuesta convincente.
Hay buenas razones para mirar los mejores elementos de los sistemas y recursos offline. A lo largo de
varios milenios, muchos de esos sistemas se han refinado exquisitamente y son extremadamente efectivos.
La comunidad online y el entorno de aprendizaje asistido por computadora que ests construyendo se
puede mejorar mucho gracias al cuidadoso estudio de las mejores alternativas offline.
Ejemplo: la revista Popular Photography
La publicacin offline de mayor circulacin en el mundo de la fotografa de E.E.U.U. es la sexagenaria
revista Popular Photography. Resulta extremadamente efectiva para responder las siguientes consultas:
Cul es el precio de de un lente Nikon 50/1.4? Cules son las ltimas cmaras disponibles? Cmo se
porta en el banco de pruebas el nuevo cuerpo de la Canon Elan 7?
La revista no es efectiva para aprender temas de principio a fin. Para Popular Photography es imposible
vender suficientes anuncios como para incorporar un artculo de corte tutorial de veinte pginas, mucho
menos an para un libro de texto sobre fotografa para principiantes. Tampoco sirve para encontrar el
precio promedio de un elemento usado o poco conocido. (Shutterbug es donde uno encuentra anuncios de
vendedores de cmaras clsicas y usadas.)
La revista tampoco es efectiva como mecanismo para obtener respuestas a preguntas arbitrarias. Existe
una seccin Too Hot to Handle en cada edicin que promete: Respuestas honestas y terminantes para
tus ms penetrantes interrogantes. Desafortunadamente, slo se responden cuatro preguntas en cada
edicin. Las mismas se enviaron presumiblemente al menos un par de meses antes. Y las respuestas
provienen slo de los editores de la revista; no se aprovechan de las reservas de conocimiento que existen
sumando los cientos de miles de suscriptores.
La revista es inefectiva como medio de exhibir los trabajos de los lectores. La columna Your Best Shot
muestra en cada edicin cinco o seis fotos entre las que los lectores envan, pero la seleccin es un
proceso lento e incierto.
Ejemplo: curso presencial
La principal ventaja de un curso en persona sobre fotografa es que se garantiza la relacin mentorprotegido. El instructor se mantiene al tanto del progreso y las preguntas que hace cada estudiante. Otra

ventaja de los cursos presenciales es la disponibilidad de observaciones crticas de parte de los otros
estudiantes y del instructor.
Los cursos presenciales requieren ms viajes, tiempo, esfuerzo y compromiso de lo que muchas personas
estn dispuestas a aportar. Una vez que el curso termina, el estudiante no se puede valer de la ayuda del
mentor y de las crticas del instructor o de los otros estudiantes.

Ejercicio 2
Escriba las mejores caractersticas de las alternativas offline de aprendizaje sobre el tema determinado
para el servicio que estars construyendo. Indica aquellas caractersticas que piensas que se traducirn en
una comunidad online, y cmo se lograr. Escribe una justificacin tres oraciones explicando porqu tu
comunidad online va a ser una mejora sobre las alternativas offline al menos para algn grupo de
personas.

Evaluacin de alternativas: Online


Cuando realices tu anlisis de los competidores online debes revisar cualquier servicio o recurso de
aprendizaje en tu rea temtica. Debes prestar especial atencin a las comunidades de aprendizaje online.
Antes de ponerte a navegar, puede serte til considerar los siguientes elementos de una comunidad online
sustentable:
1.
2.
3.
4.
5.

contenido atractivo escrito por expertos


medios de colaboracin
facilidades poderosas para navegar y buscar entre el contenido atractivo y el contenido contribudo
medios para delegar la moderacin
medios de identificar miembros que estn imponiendo una carga desproporcionada sobre la
comunidad y formas de cambiar su comportamiento y/o excluirlos de la comunidad sin que se den
cuenta.
6. medios para que los mismos miembros de la comunidad puedan extender el software
Cuando visites un sitio debes preguntarte: Son ellos los autores o licenciaron una parte sustancial del
cuerpo de contenido tutorial? Revisa la relacin entre el contenido de autora del publicador y el que es
de autora de los usuarios. Si ms de la mitad del contenido es producido por los usuarios, el sitio se est
alejando de la publicacin y se est dirigiendo hacia la comunidad. Preste atencin a las diferentes
maneras en las cuales un usuario puede publicar informacin que luego est disponible para los otros
usuarios (medios de colaboracin). Verifica si la utilidad de bsqueda predefinida en el sitio retorna
resultados a partir de cosas como las contribuciones en los foros de discusin. Trabajando como usuario
sin privilegios, no va a serte fcil determinar si el sitio dispone de provisiones para distribuir la carga de
moderacin del contenido o de modos de excluir usuarios problemticos. Sin embargo, a veces puedes
inferir el elemento 6, si el software permite que usuarios regulares y administradores de la comunidad
pueden extenderlo, sin necesidad de ser expertos programadores. Si el sitio es comercial, mira en las listas
de oportunidades de trabajo abiertas para determinar cules son las habilidades requeridas. Si el sitio no
adopt la religin de URLs abstractas (ver el captulo Elementos bsicos) las extensiones de los
nombres de archivo pueden darte las pistas necesarias sobre la tecnologa de implementacin. Si hay un
.pl, .asp, .php, .adp, o .tcl indica el uso de un lenguaje de scripting lo cual lo hace apropiado
para que un novato lo programe. Si hay un .jsp o el trmino servlet in el URL indica el uso de Java,
un lenguaje destinado slo para programadores profesionales.

Ejercicio 3

Busca las mejores comunidades online que existen en tu rea temtica. Controla cunto satisfacen los seis
elementos de sustentabilidad que se enumeraron ms arriba. Escribe cualquier cosa particularmente buana
o mala sobre el proceso de registracin y los mecanismos de colaboracin, por ejemplo, in los foros de
discusin, comentarios de los artculos y salas de chat. Busca interfaces para dispositivos mviles y de
voz. Si estn disponibles, prubalas. (El captulo Cmo agregar usuarios mviles a su comunidad
proporciona una lista de emuladores de telfonos mviles basados en navegador de tal manera que no
debers usar tu propio ntelfono mvil; como alternativa, escribe WAP emulator o Mobile browser
emulator en una mquina pblica de bsqueda.) Trata de encontrar evidencia de personalizacin y
controles directos de las preferencias.

Necesita el mundo ms de una comunidad online?


Suponte que al hacer el Ejercicio 3 encuentras 100 comunidades online en tu rea temtica. Deberas
sentirte desalentado? La bsqueda de aquarium en amazon.com produce 679 libros sobre el tema de
cmo mantener peces en casa. El Centro Nacional para Estadsticas Educacionales [The National
Center for Educational Statistics] (nces.ed.gov) encontr que hay 3913 colegios universitarios y
universidades en los Estados Unidos de Amrica en 1998. El mundo de la computacin histricamente
tiende hacia la concentracin. Slo hay espacio para una o dos interfaces de usuario de escritorio, uno o
dos procesadores de textos, una o dos planillas de clculos, un puado de sistemas de contabilidad
corporativos, etc. Existen dos factores que previenen una concentracin similar en el mundo de las
comunidades online de aprendizaje. Uno es la idiosincracia de la paternidad literaria. Una persona puede
creer que Anna Karenina es la mejor novela escrita y a la vez estar interesada en leer Youth in Revolt de C.
D. Payne. Un aficionado al cine puede creer que nunca se aventajar a Gone with the Wind y an as
invertir dos horas en Charade. El rango idiosincrtico es menor en los trabajos explcitamente tutoriales.
No obstante, uno puede admitir el imponente resultado de Basic Photographic Materials and Processes de
Stroebel y an as obtener provecho de trabajar con Mastering Black-And-White Photography (Bernhard
Seuss 1995).
La segunda fuerza que previene la concentracin en el mundo de las comunidades online de aprendizaje
es la naturaleza de la comunidad en s misma. Christopher Alexander, Sara Ishikawa, y Murray Silverstein
argumentan en A Pattern Language (Oxford University Press 1977) en contra de pases de ms de unos
pocos millones de personas:
No es difcil ver porqu el gobierno de una regin se pone menos y menos manejable con el
mayor tamao. En una poblacin de N personas, hacen falta en el orden de N^2 enlaces
persona a persona para mantener abiertos los canales de comunicacin. Naturalmente, cuando
N pasa cierto lmite, los canales de comunicacin necesarios para la democracia, justicia e
informacin estn demasiado atascados, y son demasiado complejos; la burocracia abruma el
proceso humano. ...
Nosotros creemos que los lmites se alcanzan cuando la poblacin de una regin llega a
entre 2 y 10 millones. Ms all de este tamap, la gente queda lejana del proceso de gobierno
a gran escala. Nuestra estimacin puede parecer extraordinaria a la luz de la historia moderna:
las naciones-estado han crecido fuertemente y sus gobiernos mantienen el poder sobre
decenas de millones, alguna veces sobre centenas de millones de personas. Pero estas
enormes potencias no pueden sostener que poseen un tamao natural. No pueden sostener que
han encontrado el balance entre las necesidades de pueblos y comunidades, y las necesidades
de la comunidad mundial como un todo. En realidad, sus tendencias han sido de invalidar las
necesidades locales y reprimir las culturas locales, y al mismo tiempo agrandarse a s mismas
hasta el punto de quedar fuera de alcance, el ciudadano promedio apenas concibe su poder.

Si fuera posible para cada uno amontonarse en una nica comunidad y obtener una magnfica experiencia
de aprendizaje, America Online hace rato que hubiera absorbido todas las comunidades ms pequeas de
la Internet. Uno de los ltimos captulos de este libro se dedica al tema de hacer crecer con gracia una
comunidad online. Pero, por ahora, puedes quedarte tranquilo pues es un problema difcil que nadie ha
resuelto. Dado suficiente contenido atractivo de calidad y un grupo inicial de personas dedicadas a la
enseanza, siempre habr espacio para una nueva comunidad de aprendizaje.

Ejercicio 4
Identifica los recursos de contenido atractivo para tu comunidad este semestre. Si parte de este contenido
va a provenir de otras personas, escrbeles y solicita su permiso. Asn si slo vas a usar su trabajo
experimentalmente, un autor o publicador puede preocuparse si tu sitio va a ser indexado por las mquinas
de bsqueda y los lectores sean dirigidos a tu sitio en lugar del de ellos. En la prctica esto no es problema
si tu servidor no es accesible desde la Internet pblica o si incluyes un archivo robots.txt que le indicar
a las mquinas de bsqueda que deben excluir cierto contenido. Puedes obtener una respuesta ms
amigable de los derechohabientes del copyright si aceptas proporcionar el crdito por el material en la
forma de hiperenlaces y si te aseguras que su contenido no ser indexado mltples veces.
Si dispones de un cliente que proporciona todo el contenido atractivo, escribe un resmen de lo que estar
disponible y cundo. Al lado de cada clase de documentos anota la persona que ser responsable de
ensamblar y entregarlos. Como ingeniero, no es tu trabajo ensamblar y desarrollar contenido, pero s es tu
trabajo identificar riesgos para el proyecto, tales como no hay suficiente contenido atractivo o nadie
pens en el tema del contenido atractivo.

Domain Name System


El Domain Name System (DNS) traduce nombres de computadoras legibles para seres humanos, por
ejemplo, www.google.com, en direcciones IP legiles por las computadoras y enrutables a travs de la red,
por ejemplo, 216.239.57.100. El DNS es una aplicacin distribuda en el sentido que no existe una nica
computadora que mantiene las traducciones de todos los nombres posibles. Un registrador de dominios,
por ejemplo register.com, registra que los servidores de dominio para el dominio google.com estn en una
particular direccin IP. El servidor de nombres local de un usuario consultar a los servidores de nombre
de google.com para encontrar la traduccin del nombre de mquina www.google.com. Fjate que no hay
nada de mgico en el www; es simplemente un nombre convencional para una computadora que tiene
corriendo un servidor Web. El procedimiento de traduccin de un nombre de computadora tal como
froogle.google.com es el mismo que se aplica a la traduccin de www..

Ejercicio 5: Decidirse por un nombre de computadora


En conjunto con tu cliente, elige un nombre de computadora para la aplicacin que estars construyendo
este semestre. Si lo vas a construir dentro del MI_T, por ejemplo, probablemente querrs elegir
algo.mit.edu. Junto a tu cliente debers navegar a travs de la burocracia de IT para registrar ese nombre
de computadora y mapearlo a la direccin IP de tu servidor. Si vas a construir un servicio para un cliente
que no tiene un dominio de Internet, incentvalo para que seleccione un buen nombre y lo registre. Los
autores han tenido buenas experiencias con register.com, un servicio que incluye el uso de sus servidores
de DNS; el dueo del dominio puede editar las traducciones de nombre de mquina a direccin IP con una
interfaz de navegador Web.

Ejercicio 6: Negociar los derechos de propiedad intelectual

Una de las cosas que distingue a un ingeniero de software profesional es el xito en negociar los derechos
de propiedad intelectual. Si entregas todos los derechos sobre todo lo que produces como trabajo por
contrato, no tendrs un bagaje personal de software que puedas reusar en nuevos proyectos. Si no
entregas ningn derecho, nadie ser capaz de usar tu software, lo cual quiere decir que no vas a poder
resolver problemas sociales u organizacionales. Un buen negociador entrega cosas que son valiosas para
el otro lado, pero que no son valiosas de su propio lado.
A lo largo de este curso, por ejemplo, tu querrs idealmente mantener la propiedad de todo el software que
produzcas. De esa manera sers libre de reutilizar el cdigo de cualquier forma o manera. El cliente, sin
embargo, va a poner de su parte un montn de tiempo y esfuerzo trabajando contigo durante un perodo de
meses y por lo tanto tiene derecho a algn beneficio. Lo que puedes hacer t es otorgar al cliente una
licencia para usar tu software. Estro obviamente beneficia al cliente pero tambin te beneficia a t. Cuanto
ms gente haya por all feliz de usar tu software, mejor se ver tu resum profesional.
Deberas tratar de limitar lo que el cliente puede hacer con tu software? Generalmente no vale la pena.
Cualquier organizacin que venga a t para obtener asistencia en la programacin del sitio probablemente
no es una organizacin que quiera descolgarse con ofertas de desarrollo de software para otros. Si ellos
deciden que de hecho tiene sentido adaptar tu software para otra aplicacin dentro de la compaa, es muy
probable que te llamarn a t primero para ofrecerte unos honorarios por consultoria a cambio de tu
asistencia.
Y sobre el tema de limitar tus responsabilides legales? Con mucha frecuencia se solicita a los ingenieros
de software que escriban programas cuyos fallos tienen resultados catastrficos. Suponte que te ofrecen
$100.000 para escribir un programa de negocios para un banco de inversiones. Esto suena como un buen
trato, hasta que el banco te enjuicia por $100 millones, alegando que un defecto en tu programa les cost
$100 millones en ganancias perdidas. En el campo biomdico, un defecto de programacin puede ser
mucho mas serio. Est el famoso caso de la mquina de tratamiento de mediante radiacin Therac-25,
cuyos bugs en el software de control costaron vidas (mira en http://sunnyday.mit.edu/therac-25.html).
Delimitar la responsabilidad legal es dificultoso, an para abogados entrenados, y por ello es mejor dejarlo
a los profesionales. Casi todas las licencias de software comercial incluye una renuncia de garantas. A
continuacin se muestra un fragmento del Acuerdo de Licencia para el Usuario Final (EULA: End User
License Agreement) de Microsoft:
19. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT PERMITTED
BY APPLICABLE LAW, MICROSOFT AND ITS SUPPLIERS PROVIDE THE
SOFTWARE AND SUPPORT SERVICES (IF ANY) AS IS AND WITH ALL FAULTS,
AND HEREBY DISCLAIM ALL OTHER WARRANTIES AND CONDITIONS,
WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
LIMITED TO, ANY (IF ANY) IMPLIED WARRANTIES, DUTIES OR CONDITIONS
OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF
RELIABILITY OR AVAILABILITY, OF ACCURACY OR COMPLETENESS OF
RESPONSES, OF RESULTS, OF WORKMANLIKE EFFORT, OF LACK OF
VIRUSES, AND OF LACK OF NEGLIGENCE, ALL WITH REGARD TO THE
SOFTWARE, AND THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT
OR OTHER SERVICES, INFORMATION, SOFTWARE, AND RELATED CONTENT
THROUGH THE SOFTWARE OR OTHERWISE ARISING OUT OF THE USE OF
THE SOFTWARE. ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE,
QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO
DESCRIPTION, OR NON-INFRINGEMENT WITH REGARD TO THE SOFTWARE.

20. EXCLUSION OF INCIDENTAL, CONSEQUENTIAL, AND CERTAIN OTHER


DAMAGES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW,
IN NO EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY
SPECIAL, INCIDENTAL, PUNITIVE, INDIRECT, OR CONSEQUENTIAL
DAMAGES WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES
FOR LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR
BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF PRIVACY,
FOR FAILURE TO MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF
REASONABLE CARE, FOR NEGLIGENCE, AND FOR ANY OTHER PECUNIARY
OR OTHER LOSS WHATSOEVER) ARISING OUT OF OR IN ANY WAY RELATED
TO THE USE OF OR INABILITY TO USE THE SOFTWARE, THE PROVISION OF
OR FAILURE TO PROVIDE SUPPORT OR OTHER SERVICES, INFORMATION,
SOFTWARE, AND RELATED CONTENT THROUGH THE SOFTWARE OR
OTHERWISE ARISING OUT OF THE USE OF THE SOFTWARE, OR OTHERWISE
UNDER OR IN CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IN
THE EVENT OF THE FAULT, TORT (INCLUDING NEGLIGENCE),
MISREPRESENTATION, STRICT LIABILITY, BREACH OF CONTRACT, OR
BREACH OF WARRANTY OF MICROSOFT OR ANY SUPPLIER, AND EVEN IF
MICROSOFT OR ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
21. LIMITATION OF LIABILITY AND REMEDIES. NOTWITHSTANDING ANY
DAMAGES THAT YOU MIGHT INCUR FOR ANY REASON WHATSOEVER
(INCLUDING, WITHOUT LIMITATION, ALL DAMAGES REFERENCED HEREIN
AND ALL DIRECT OR GENERAL DAMAGES IN CONTRACT OR ANYTHING
ELSE), THE ENTIRE LIABILITY OF MICROSOFT AND ANY OF ITS SUPPLIERS
UNDER ANY PROVISION OF THIS EULA AND YOUR EXCLUSIVE REMEDY
HEREUNDER (EXCEPT FOR ANY REMEDY OF REPAIR OR REPLACEMENT
ELECTED BY MICROSOFT WITH RESPECT TO ANY BREACH OF THE
LIMITED WARRANTY) SHALL BE LIMITED TO THE GREATER OF THE
ACTUAL DAMAGES YOU INCUR IN REASONABLE RELIANCE ON THE
SOFTWARE UP TO THE AMOUNT ACTUALLY PAID BY YOU FOR THE
SOFTWARE OR U.S.$5.00. THE FOREGOING LIMITATIONS, EXCLUSIONS, AND
DISCLAIMERS SHALL APPLY TO THE MAXIMUM EXTENT PERMITTED BY
APPLICABLE LAW, EVEN IF ANY REMEDY FAILS ITS ESSENTIAL PURPOSE.
Esto es tan importante para Microsoft, que es la nica parte de un documento de doce pginas que est
impresa en negritas y es la nica parte que se presenta traducida al francs para los clientes canadienses.
Si no quieres cortar y pegar la verbosidad de Microsoft, lo cual te puede exponer a un juicio iniciado
desde Redmond por infringir derechos de copia, considera utilizar una licencia estndar de software libre
o de programas open source, de las cuales la GNU General Public License es el ejemplo ms conocido.
Debes advertir que al usar una licencia de software libre no quiere decir que tu software es entonces libre
para todo el mundo. Puedes haber licenciado un cliente bajo la GNU GPL pero si en adelante decides
ofrecer una licencia a algn otro es una decisin para el futuro.
Si quieres, puedes utilizar el contrato de ejemplo que aparece al final de este libro como un punto de
partida para negociar los derechos con tu cliente. Y recuerda ese viejo dicho del mundo de los negocios:
No obtienes lo que te mereces; lo que obtienes es lo que negocias.

Ms
"The case for on-line communities", McKinsey Quarterly, Shona Brown et al, 2002, Number 1,
http://www.mckinseyquarterly.com/article_abstract.asp?ar=1143

Para el instructor
Resulta til que para el segundo encuentro de la clase se traiga a los clientes al campus para dar una
presentacin de tres minutos para destacar sus proyectos. A continuacin se sugiere el esquema para la
presentacin del cliente:
1. introducir al presentador y la organizacin que representa (15 seconds)
2. explicar cules sern los usuarios y porqu necesitan interactuar mediante una aplicacin Internet, o
sea, cul es el problema que va a resolver esta comunidad online. (1.5 minutes)
3. describir cmo se atraern a los usuarios al sitio inicialmente, o sea, existe una coleccin de
contenido atractivo que estas personas necesitan y que no est disponible en ningn otro lugar? (30
seconds)
4. luego que el sitio est funcionando por unos meses, cmo ser la tipica interaccin para un nuevo
usuario? (30 seconds)
5. Qu pasar cuando termine el semestre? cmo se sostendr y de dnde obtendr fondos el
sistema? (15 seconds)
El cliente debe estr preparado para responder preguntas durante un minuto o dos despus de la
presentacin.

Tiempo y movimiento
Este conjunto de problemas involucra una reunin de dos horas con el cliente, tal vez dos horas de
discusin y navegacin por la Web entre los estudiantes, una hora para construir las pginas de perfiles de
usuario, dos horas para escribir. Esto da siete horas en total, la mayora de las cuales requieren que el
equipo completo trabaje en conjunto.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Estructura del software


parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y Andrew Grumet;
revisado en febrero de 2005
Antes de embarcarnos en un proyecto de desarrollo es una buena idea esbozar la estructura general del sistema que vamos a
contruir.

Anatoma macroscpica
Toda comunidad de aprendizaje online va a tener aproximadamente la misma estructura esencial:
1.
2.
3.
4.

base de datos de usuarios


base de datos de contenidos
relacin usuario/contenido
relacin usuario/usuario

Base de datos en la lista precedente se usa como trmino abstracto. La base de usuarios, por ejemplo, se puede implementar
como un conjunto de tablas SQL dentro de un sistema de gestin de bases de datos relacional. Las tablas para la base de datos
de usuarios no necesitan estar separadas de las tablas que implementan los otros mdulos, o sea, todas sern propiedad del
mismo usuario, y residirn en el mismo tablespace. Por otro lado, puede ser tambin que la base de datos de usuarios se
almacene en forma externa a la comunidad de aprendizaje online. El caso cmn en el cual la base de usuarios es externa se da
en los sistemas de gestin de conocimiento de las corporaciones, donde los empleados se autentican mediante un servidor
central de LDAP.
En el mundo de los servicios Web (Web services) tenemos un ejemplo moderno en cuanto a cmo esas bases de datos esenciales
se particionan. Por ejemplo, Microsoft Hailstorm ofrece la provisin de servicios de bases de datos de usuarios a toda la
Internet. Una nuiversidad puede poner en funcionamiento comunidades complementarias, una para estudiantes de la escuela
secundaria y otra para colegas de otras escuelas, ambas ancladas por la misma base de datos de contenido genmico. La base de
datos de contenido genmico puede estar funcionando en una computadora fsicamente diferente de la que corre las
comunidades online y anunciar sus servicios va WSDL y proporcionar esos servicios mediante SOAP.

Base de datos de usuarios


Como mnimo la base de datos de usuarios debe registrar en nombre real y la direccin de correo electrnico (email) del
usuario. Recuerda que cuanto ms identificada, autenticada y ms responsable se la puede hacer, hay ms oportunidad de
formar una comunidad a partir del agregado. Un ambiente donde usuarios annimos se gritan entre s detrs de nombres de
fantasa no vale la pena es esfuerzo de programacin y admnistracin de sistemas. La base de usuarios debe disponer de una
facilidad para registrar la confiabilidad de un nombre de usuario y direccin de email, pues el nombre ser probablemente ms
conocido con confiabilidad a lo largo del tiempo y el email lo ser con menos probabilidad.
La base de usuarios debe permitir que los usuarios almacenen un URL personal para contribuir a crear un entorno ms
responsable e identificado. Si el URL es un sitio que da a una pgina de Yahoo! Geocities eso no va a contribuir mucho a la
responsabilidad e identificacin. Por otro lado, si la URL tiene un prefijo como http://research.hp.com/personal/ entonces los
otros usuarios van a tener ms confianza en su identidad. Como una de las tristes caractersticas de la Web tal como est
estructurada en 1990 es que las URL se corrompen, la base de usuarios necesita alojar un campo extra de datos para registrar
que pas cuando el robot intent acceder a la URL almacenada. Si no se puede acceder a la URL en diferentes ocasiones a lo
largo de un perodo de una semana, entonces es razonablemente seguro que un programa de computadora suponga que la URL
est desactualizada y por lo tanto quedeje de mostrala pblicamente.
La base de usuarios debe almacenar informacin de privacidad y de preferencias. Desea Jane User mostrar al pblico su
direccin de email? Y a otros usuarios registrados? Permite Joe User que le mandes spam con noticias del sitio?

Base de datos de contenidos


El contenido de una comunidad de aprendizaje online siempre incluye preguntas y respuestas en un foro de discusin. El
programador puede empezar por construir una tabla para los mensajes ***postings*** en los foros de discusin. De los seis
elementos requeridos para una comunidad online, el contenido atractivo aparece en primer lugar. La mayora de las
comunidades de aprendizaje online ofrecen artculos publicados que se distinguen de las contribuciones de los usuarios. Un

programador podra crear entonces una tabla para contener dichos artculos. Todo sitio bien armado que publica artculos,
tambin tiene la posibilidad de aceptar comentarios de los usuarios sobre esos artculos. Esos comentarios irn a otra tabla
separada.
Podemos detectar un patrn aqu? Hemos distinguido una pregunta en una tabla de un foro de discusin porque es un tem de
contenido que no es una respuesta a ningn mensaje del foro de discusin. A los artculos los hemos distinguido de los
comentarios porque un artculo es un tem de contenido que no es respuesta a a ningn otro tem de contenido. Tal vez la
representacin de artculos, preguntas, respuestas, etc. se debera unificar todo lo que se pueda. Cada uno de ellos es un tem de
contenido. Cada uno tiene uno o ms autores. Cada uno opcionalmente puede ser la respuesta a otro tem de contenido.
A continuacin hay algunos servicios que sera interesante centralizar en un nico repositorio de contenido dentro de la base de
datos de contenidos:
versionado del contenido
el hecho de si un tem de conteniso es una respuesta, comentario o adjunto a algn otro tem.
el hecho de que un tem de contenido ha sido aprobado o rechazado por alguno de los moderadores del sitio.
a quin debe mostrarse el contenido? Es slo para miembros de un grupo, para un usuario particular, para le grand
public (como dicen en Francia)
Quin tiene permiso para editar el contenido?
quin tiene permiso para cambiar quines tienen permisos para ver o editar?
quin tiene permiso para comentar sobre un tem? Quin debe revisar los comentarios que se han realizado antes de
que vayan a publicarse en vivo?
ritmo del contenido: cundo debe aparecer en vivo? cundo expira?
calidad o importancia del contenido: debe resaltarse frente a los usuarios? Se debera retener hasta que se grade desde
el estado de borrador?
indexado completo de todo el texto del contenido
resmenes, descripciones y palabras clave del contenido
una taxonoma consistente a nivel de sitio
ms algunas cosas que realmente pertenecen a la relacin ususrio/contenido que se indican ms abajo
quin es el autor o el que contribuy en un tem dado, y una distincin entre las cosas producidas por el publicador, las
que produce un autor y las que produce un usuario
a quin se debe notificar por medio de emial cuando se escribe un comentario o respuesta a un tem de contenido?
el hecho de que un tem de contenido ha sido clasificado como0 de mucho inters para un usuario, o por el contrario de
bajo/nulo inters; dadas esas estadsticas, esto implica la habilidad para seleccionar nuevo contenido que es muy
probable que sea de inters para el Usuario #17 (esto depende de que el software de procesamiento de texto pueda
computar similaridad entre documentos)

Relacin usuario/contenido
Una comunidad de aprendizaje online generalmente necesita registrar los siguientes sucesos:
El Usuario #21 contribuy el Comentario #37 sobre el Artculo #529
El Usuario #192 realiz la Pregunta #512
El Usuario #451 public la Respuesta #3 a la Pregunta #924
El Usuario #1392 ha leido el Artculo #456
El Usuario #8923 est interesado en que le avisen cuando se haga un cambio en el Artculo #223
El Usuario #8923 est interesado en que le avisen si alguien publica una respuesta a la Pregunta #9213
Seremos cuidadosos al registrar la autora, porque todo contenido atribudo a su autor contribuye a mejorar nuestras
posibilidades de construir una comunidad de verdad. Para ofrecer a los usuarios el servicio de notificacones por email cuando
alguien responde a una pregunta o comenta sobre un artculo, resulta necesario uqe registremos la autora.
Porqu deberamos registrar el hecho que un determinado usuario ha leido, o al menos, se ha descargado determinado
documento? Considere la comunidad de aprendizaje online de profesores y estudiantes en una universidad. Vamos a tener que
registrar los actos de lectura si queremos escribir un robot que enve mensajes como el siguiente:
Para: Juan Estudiante
De: Robot de regao comunitario
Fecha: Viernes, 16:30 hs
Asunto: tu indolente actitud

Juan,
He notado que tienes fecha de entrega para el lunes de cuatro
asignaciones y que ni siquiera has mirado dos de ellos. Espero que no
ests planeando ir a la fiesta estudiantil esta noche en lugar de
estudiar.
Tu seguro servidor,
Un programa en SQL

Una vez que una comunidad de aprendizaje online registra los actos de lectura, resulta natural que consideremos el registro de
si la lectura vali la pena. En general, el filtrado colaborativo es el ltimo refugio de aquellos demasiado cobardes como para
editar. Sin embargo, si registramos que al Usuario #7241 realmente le gust el Artculo #2451 abre la puerta a interesantes
oportunidades para la personalizacin.
Considera un sistema de gestin de conocimiento corporativo. Al principio, la base de datos est vaca y hay slo unos pocos
usuarios. La tarea de pasearse por los ttulos del contenido contribudo por los usuarios slo oma unos minutos. Luego de cinco
aos, sin embargo, la base de datos contiene 100.000 documentos y los 10.000 usuarios activos contribuyen varios cientos de
documentos por da (recuerda que una pregunta o una respuesta en un foro de discusin son documentos a los fines de
estadiscusin). Si Jane User quiere ver en qu anduvieron sus compaeros de trabajo en las ltimas 24 horas, le puede tomar 30
minutos repasar los ttulos del nuevo contenido. Lo ms probable es que Jane User abandone la comunidad de aprendizaje
online que, cuando era ms pequea, le resultaba muy util.
Suponte que la base de datos contiene 100 entradas de la forma A Jane le gust este artculo y 100 entradas de la forma A
Jane no le gust este artculo. Antes de que Jane llegue al trabajo, una tarea por lotes puede comparar cada artculo nuevo en el
sistema con los 100 artculos que le gustaron y con los 100 que Jane dijo que no le gustaron. Esta comparacin se puede hacer
utilizando la mayora de los programas de bsqueda en texto completo, los cuales toman dos documentos y los califican de
acuerdo a su similaridad en base a las palabras que utilizan. A cada nuevo documento se le da un puntaje de la forma:
avg(similarity(:nuevo_doc, todos_docs_marcados_le_gusto_al_usuario(:user_id)))
avg(similarity(:nuevo_doc, todos_docs_marcados_no_le_gusto_al_usuario(:user_id)))

Los nuevos documentos se presentan a Jane categorizados en orden descendiende del puntaje. Si eres accionista de Intel, te va a
gustar cuando consideres las implicaciones computacionales de este esquema de personalizacin. Cada nuevo documento debe
compararse con cada documento que cada usuario marc con anterioridad.Tal vez son unas 200 comparaciones. Si hay 10.000
usuarios, este clculo de puntaje se debe repetir 10.000 veces. O sea, hay 2.000.000 de comparaciones por da por cada nuevo
documento en el sistema. Las comparaciones de texto completo en general son bastante lentas pues dependen de revisar cada
palabra en un documento para luego buscar su frecuencia de ocurrencia en ingls escrito estndar. La comparacin entre dos
documentos puede tomar 1/10 de segundo de tiempo de CPU. O sea que necesitamos unos 200.000 segundos de CPU por cada
nuevo documento que se agrega al sistema, ms la insercin de 10.000 nuevas filas a la base de datos, en cada una de las cuales
se registra el puntaje de personalizacin de ese documento para ese usuario particular. Hay 86.400 segundos en un da. AS que
lo que estamos considerando es una tarea que puede mantener ocupada una mquina de tres procesadores durante todo el da.
Y si se agregaran 500 documentos por da? Necesitaramos 1500 CPUs para calcular los puntajes de personalizacin.

Relacin usuario/usuario
A medida que las comunidades crecen, las relaciones entre los usuarios se vuelven cada vez ms importantes. ALguien que est
en un foro de discusin con otras 100 personas puede decir: Me siendo ofendido por la perspectiva del Ususario #45; quiero
que el sistema evite mostrarme sus contribuciones cuando yo mire las pginas o en las alertas que se me enven por email. El
trmino tcnico para esto es filtrado de insufribles (bozo filtration) y data al menos desde la poca de USENET las Netnews,
el sistema de foros de discusin distribudo a principios de los 1980s. Una persona que est en medio de un foro de 100.000
puede querer indicarle al sistema: Estoy abrumado; no quiero volver a saber nada de este foro, a menos que el Usuario #67329
contribuya a un hilo de discusin.
La operacin fundamental dentro de la base de usuario/usuario es la agrupacin. En un sistema de registros mdicos
colaborativos, vas a necesitar poder decir: Todos estos usuarios trabajan en el mismo hospital y pueden tener acceso a los
registros mdicos de los pacientes de ese hospital. En un sistema de conocimiento colaborativo de una corporacin, debes
poder decir: Todos estos usuarios trabajan en el mismo departamento y por lo tanto deben tener acceso a los documentos
privados del departamento, al foro de discusin dedicado a temas departamentales y debe recibir notificaciones por email de los
eventos departamentales.
Salgamos del modelo de datos esencial y veamos algunos consejos para el software que pronto estars construyendo encima de

la base de datos...

Enviar SQL, no datos, al parser SQL de la base de datos


En el captulo Elementos bsicos debes haber escrito scripts que tomaban la entrada del usuario combinada con unos
fragmentos de SQL y luego enviaban el mandato en forma de cadena de caracteres hacia el sistema de gestin de base de datos
relacional (RDBMS).
A continuacin se muestra un ejemplo en C# robado de uno de nuestros estudiantes:
string cmd = "Insert into quotations(author_name, category, quote)
values ('" + txtAuthor.Text.Replace("'", "''") + "',
'" + ctg.Replace("'", "''") + "',
'" + txtQuotation.Text.Replace("'", "''") + "')";
UpdateDB(cmd);

// enviar esa enorme cadena al SQL Server

Hay unas cuantas cosas menores que estn mal con este enfoque, que mezcla SQL y cadenas literales que se obtienen del
usuario:
el programador debe recordar que tiene que escapar cualquier carcter apstrofo (single quote) que vaya en cadena que
va a enviar, reemplazando los ' con '' [stos son dos caracteres apstrofos y no na comilla doble]
la sentencia puede quedar demasiado larga para algunos parsers de SQL y/o los literales de caena pueden exceder ciertos
lmites (Oracle 9.x impone un lmite de 4000 caracteres sobre los literales de cadena de caracteres) si el usuario est
***waxing expansive at the browser***
las repetidas nvocaciones de este script van a resultar en que la base de datos recibe versiones de un mandato SQL que
son morfolgicamente iguales pero difieren en el texto que se enva; dependiendo de cmo est implementado el
RDBMS esto puede impedir que se reuse el plan de la consulta.
En un orden de cosas mucho ms serias, est la posibilidad de que un usuario malicioso se le ocurra como conformar el
fomulario de tal manera que resulte en la destruccin de datos o la violacin de privacidad. Por ejemplo, considere el siguiente
cdigo:
string EventQuery = "select *
from events
where event_id = " + EventIDfromBrowser;

Si se espera un ID de evento numrico y se sabe que los nmeros no necesitan encerrarse en apstrofos como sucede con los
literales de cadenas de caracteres, el programador no realiza ningn procesamiento previo a EventIDfromBrowser, que es una
variable leda desde la Internet.
Supongamos que una persona de mente malvada enva un formulario que asigna a EventIDfromBrowser el valor "42; select
* from user_passwords". El punto y coma cerca del principio de la cadena de caracteres tiene la posibilidad de terminar el
primer SELECT y entonces puede ejecutar la consulta no autorizada select * from user_passwords. Si la consulta no
autorizada est bien armada, la informacion resultante se presentar en el ventana del navegador. Otra construccin que mete
miedo podra ser: "42; delete from customers".
Puedes resolver todos estos problemas si separas el cdigo SQL y los datos variables. A continuacin se muestra un ejemplo en
seudocdigo que muestra cmo se hace con las bibliotecas estndar desde finales de los 1970s:
// asocia el nombre "event_query" con una cadena de SQL
PrepareStatement("event_query","select * from events where event_id = :event_id");
// asocia la variable de ligadura :event_id con el valor particular para esta pgina
BindVar("event_query",":event_id",3722);
// pide al RDBMS que ejecute la consulta completada
ExecuteStatement("event_query");
... obtener lo resultados ...

Note que la estructura del SQL que ve el RDBMS est fija como "select * from events where event_id = :event_id",
sin importar cales sean los valores que se reciben como entrada por el formulario Web. Lo nico que cambia es el valor de
:event_id.
Este es un ejemplo de uso de variables de ligadura (binding variables), que es una prctica estndar en la mayora del software
capaz de dialogar con una RDBMS.

Variables de ligadura en C#
using
using
using
using

System;
System.Configuration;
System.Data;
System.Data.SqlClient;

namespace ExecuteScalar
{
///
/// Ejemplo de cmo usar parmetros con nombre en ADO.NET.
///
class Class1
{
///
/// El punto de entrada principal de la aplicacin
///
[STAThread]
static void Main(string[] args)
{
object objResult = null;
string strResult = null;
string strEmployeeID = "PMA42628M";
//Inicializa la conexin a la base de datos, los objetos mandato y parmetros
SqlConnection conn = new SqlConnection(
ConfigurationSettings.AppSettings["connStr"]
);
SqlCommand cmd = new SqlCommand(
"select fname from employee where emp_id = @emp_id"
);
SqlParameter param = new SqlParameter("@emp_id",strEmployeeID);
//Asocia la conexion con el mandato
cmd.Connection = conn;
//Liga el valor del parmetro con el mandato
cmd.Parameters.Add(param);
//Conecta a la base de datos y ejecuta el mandato
try
{
conn.Open();
objResult = cmd.ExecuteScalar();
}
catch (Exception e)
{
Console.WriteLine("Error en la base de datos: {0}", e.ToString());
}
finally
{
//Clean up.
if (!conn.State.Equals(ConnectionState.Closed))
{
conn.Close();
}
}
//Convierte el resultado de la consulta a una cadena de caracteres
if (objResult == null)
{
strResult = "[NULL]";
}
else
{
strResult = objResult.ToString();
}
Console.WriteLine("Empleado #{0} su nombre de pila es: '{1}'", strEmployeeID, strResult);
Console.ReadLine();
}
}
}

No hay mucho para comentar en el cdigo precedente, excepto que a Microsoft parece gustarle @emp_id en lugar del :emp_id
que usa Oracle, o sea, utilizan un smbolo arroba en lugar de un dos puntos para indicar que algo es una variable de ligadura.

Variables de ligadura en Java


A continuacin se muestra un fragmento de cdigo que muestra cmo se usan las variables de ligadura en Java:
PreparedStatement updateSales = con.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate():

Fuente: The Java Tutorial at http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html.


Puedes advertir que JDBC, la biblioteca de conectividad para base de datos de Java, utiliza el ? como variable de ligadura. Es
responsabilidad del programador contar la ensima ocurrencia del ? en una cadena de SQL y ligar un valor al mismo. Como te
puedes imaginar, eso es un proceso propenso a error si la oracin SQL contiene quince o ms variables, una situacin muy
comn en aplicaciones reales. Tambin puedes imaginar las posibilidades de introducir errores insidiosos si se cambia la
consulta SQL y no se actualiza apropiadamente la secuencia de nmeros asignada a las variables de ligadura.
Segn cabe suponer, esta situacin se ha mejorado en JDBC 3.0, pero este ejemplo de inferioridad de Java frente a interfaces C
con ms de veinte aos de antigedad deben prepararte para que seas escptico cuando escuches las pretensiones de los
vendedores acerca de las ventajas de los nuevos lenguajes y herramientas de desarrollo.

Enlaces configurables para mostrar el cdigo fuente


En el captulo Elementos bsicos tuviste que agregar un enlace a cada pgina que construiste con el rtulo Ver cdigo
fuente. Para el resto del curso, es importante tu cdigo fuente sea accesible para tus colegas. Por otro lado, cuando la
aplicacin se lance al pblico, no necesariamente vas a querer que todo el mundo vea tus trapitos sucios. Vas a necesitar un
interruptor, en algn lugar del servidor, con el cual puedas activar u ocultar todos los enlaces Ver cdigo fuente del sitio a la
vez. Pensndolo a largo plazo, este procedimiento puede decidir en base a la direccin IP o el ID del usuario si debe o no
mostrar los enlaces al cdigo fuente.

Saca de los scripts de pginas el nombre de usuario y la contrasea de la base de datos


Supongamos que tienes el siguiente cdigo en los scripts de tus pginas:
dbconn = OpenDBConn("sysid=local,username=joestest,password=joerocks");

Hay varios problemas con este enfoque cuando se usa para conectarnos a una RDBMS:
1. Una persona maliciosa que lee este cdigo fuente puede conectarse al la RDBMS que corre en tu servidor y eliminar
todas tus tablas.
2. Si se desea correr el cdigo contra una base de pruebas, la cual necesariamente va a tener diferente nombre de usuario en
la base de datos, significa que debers editar cada unop de los scripts de pgina.
3. El reuso de cdigo para otro proyecto requerir el cambio del nombre de usuario de la base de datos y la contrasea.
odo buen entorno de desarrollo Web dispone de un mecanismo de recursos comunes (pool) de conexin a la base de datos
desde los scripts de las pginas, de tal manera que el servidor Web no necesita reconectarse y reautenticarse frente a la base da
datos millones de veces por da. Generalmente, la idea es que el servidor Web va a abrir un puado de conexiones al RDBMS y
las va a mantener abiertas. Cuando el script de una pgina necesita realizar una consulta, obtiene una de las conexiones del pool
y la usa hasta que se completa el servicio de la pgina. Luego se retorna la conexin al pool. Este esquema se denomina
connection pooling.
La utilizacin del sistema de connection pooling a la base de datos que provee el servidor Web con frecuencia resulta en una
buena manera de sacar el nombre de usuario y la contrasea de la base de datos.

Tiempo y movimiento
Los equipos deben utilizar al menos una hora juntos dibujando con papel y lpiz un boceto que identifique y ubique la
informacin bsica que va a procesar el sistema. No es necesario un modelo de datos detallado, pues el mismo se tratar en los
siguientes dos captulos.
El trabajo de hacer funcionar las variables de ligadura, ocultar la contrasea de la base de datos y generalizar el link para ver el
cdigo fuente se puede dividir entre los miembros del equipo. Esto se debera poder hacer en un rango de seis a ocho horas-

programador.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Registro y gestin de usuarios


parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y Andrew Grumet;
revisado en abril de 2003
As noted in the "Software Structure" chapter, the more identified, authenticated, and accountable people are, the better the
opportunity for building a community out of an aggregate. Thus the user database should record as much information as
possible that might help Person A assess Person B's credibility.
As you will see in the chapter on scaling, it may become important to facilitate occasional face-to-face meetings among
subgroups of users. Thus it will be helpful to record their country of residence and postal code (what Americans call
"Zoning Improvement Plan code" or "ZIP code").

Fat versus Skinny: the Ideas


Suppose that the system specifications start off with very simple requirements for the user database, one that can be
handled by the following single table:
create table users (
user_id
first_names
last_name
email
-- we encrypt passwords
password
registration_date
);

integer primary key,


varchar(50),
varchar(50) not null,
varchar(100) not null unique,
using operating system crypt function
varchar(30) not null,
timestamp(0)

Notice that the comment about password encryption is placed above, rather than below, the column name and that the
primary key constraint is clearly visible to other programmers. It is good to get into the habit of writing data model files in
a text editor and including comments and examples of the queries that you expect to support. If you use a desktop
application with a graphical user interface to create tables you're losing a lot of important design information. Remember
that the data model is the most critical part of your application. You need to think about how you're going to communicate
your design decisions to other programmers.
After a few weeks online, someone says, "wouldn't it be nice to see the user's picture and hyperlink through to his or her
home page?"
create table users (
user_id
integer primary key,
first_names
varchar(50),
last_name
varchar(50) not null,
email
varchar(100) not null unique,
password
varchar(30) not null,
-- user's personal homepage elsewhere on the Internet
url
varchar(200),
registration_date
timestamp(0),
-- an optional photo; if Oracle Intermedia Image is installed
-- use the image datatype instead of BLOB
portrait
blob
);

After a few more months ...


create table users (
user_id
integer primary key,
first_names
varchar(50),
last_name
varchar(50) not null,
email
varchar(100) not null unique,
password
varchar(30) not null,
-- user's personal homepage elsewhere on the Internet
url
varchar(200),
registration_date
timestamp(0)
-- an optional photo; if Oracle Intermedia Image is installed
-- use the image datatype instead of BLOB
portrait
blob,
-- with a 4 GB maximum, we're all set for Life of Johnson
biography
clob,
birthdate
date,

-- current politically correct column name would be "gender"


-- but data models often outlive linguistic fashion so
-- we stick with more established usage
sex
char(1) check (sex in ('m','f')),
country_code
char(2) references country_codes(iso),
postal_code
varchar(80),
home_phone
varchar(100),
work_phone
varchar(100),
mobile_phone
varchar(100),
pager
varchar(100),
fax
varchar(100),
aim_screen_name
varchar(50),
icq_number
varchar(50)
);

The table just keeps getting fatter. As the table gets fatter, more and more columns are likely to be NULL for any given
user. With Oracle 9i you're unlikely to run up against the hard database limit of 1000 columns per table. Nor is there a
storage efficiency problem. Nearly every database management system is able to record a NULL value with a single bit,
even if the column is defined char(500) or whatever. Still, something seems unclean about having to add more and more
columns to deal with the possibility of a user having more and more phone numbers.
Medical informaticians have dealt with this problem for many years. The example above is referred to as a "fat data
model." In the hospital world you'll very likely find something like this for storing patient demographic and insurance
coverage data. But for laboratory tests, the fat approach begins to get ugly. There are thousands of possible tests that a
hospital could perform on a patient. New tests are done every day that a patient is in the hospital. Some hospitals have
experimented with a "skinny" data model for lab tests. The table looks something like the following:
create table labs (
lab_id
patient_id
test_date
test_name
test_units
test_value
note
);

integer primary key,


integer not null references patients,
timestamp(0),
varchar(100) not null,
varchar(100) not null,
number not null,
varchar(4000)

-- make it fast to query for "all labs for patient #4527"


-- or "all labs for patient #4527, ordered by recency"
create index labs_by_patient_and_date on labs(patient_id, test_date);
-- make it fast to query for "complete history for patient #4527 insulin levels"
create index labs_by_patient_and_test on labs(patient_id, test_name);

Note that this table doesn't have a lot of integrity constraints. If you were to specify patient_id as unique that would limit
each hospital patient to having only one test done. Nor does it work to specify the combination of patient_id and
test_date as unique because there are fancy machines that can do multiple tests at the same time on a single blood
sample, for example.
We can apply this idea to user registration:
create table users (
user_id
first_names
last_name
email
password
registration_date
);

integer primary key,


varchar(50),
varchar(50) not null,
varchar(100) not null unique,
varchar(30) not null,
timestamp(0)

create table users_extra_info (


user_info_id
integer primary key,
user_id
not null references users,
field_name
varchar(100) not null,
field_type
varchar(100) not null,
-- one of the three columns below will be non-NULL
varchar_value
varchar(4000),
blob_value
blob,
date_value
timestamp(0),
check ( not (varchar_value is null and
blob_value is null and
date_value is null))
-- in a real system, you'd probably have additional columns
-- to store when each row was inserted and by whom

);
-- make it fast to get all extra fields for a particular user
create index users_extra_info_by_user on users_extra_info(user_id);

Here is a example of how such a data model might be filled:


users

table

user_id first_names last_name


1

Wile E.

Coyote

email

password

supergenius@yahoo.com IFUx42bQzgMjE

users_extra_info

user_info_id user_id

field_name

table

field_type varchar_value
--

date_value

birthdate

date

biography

blob_text --

aim_screen_name string

iq207

--

--

annual_income

35000

--

--

number

--

blob_value

1949-09-17

Created by Chuck Jones... --

Figure 5.1: Example user record that is split between a skinny table and a second table.
Note that numbers are stored in a column of type VARCHAR. Won't this preclude queries If you're using a fancy commercial
and wish to make queries like
such as "Find the average income of a registered user"? Not if you're using Oracle. Oracle is RDBMS
this really fast, check out bitmap
smart about automatically casting between character strings and numbers. It will work just indices, often documented under
"Data Warehousing". These are
fine to
select average(varchar_value)
from users_extra_info
where field_name = 'annual_income'

intended for columns of low


cardinality, i.e., not too many distinct
values compared to the number of
rows in the table. You'd build a
bitmap index on the field_name
column.

One complication of this kind of data model is that it is tough to use simple built-in integrity
constraints to enforce uniqueness if you're also going to use the users_extra_info for many-to-one relations.

For example, it doesn't make sense to have two rows in the info table, both for the same user ID and both with a field name
of "birthdate". A user can only have one birthday. Maybe we should
create unique index users_extra_info_user_id_field_idx on users_extra_info (user_id, field_name);

(Note that this will make it really fast to fetch a particular field for a particular user as well as enforcing the unique
constraint.)
But what about "home_phone"? Nothing should prevent a user from getting two home phone numbers and listing them
both. If we try to insert two rows with the "home_phone" value in the field_name column and 451 in the user_id column,
the RDBMS will abort the transactions due to violation of the unique constraint defined above.
How to deal with this apparent problem? One way is to decide that the users_extra_info table will be used only for
single-valued properties. Another approach would be to abandon the idea of using the RDBMS to enforce integrity
constraints and put logic into the application code to make sure that a user can have only one birthdate. A complex but
complete approach is to define RDBMS triggers that run a short procedural program inside the RDBMSin Oracle this
would be a program in the PL/SQL or Java programming languages. This program can check that uniqueness is preserved
for fields that indeed must be unique.

Fat versus Skinny: the Decision


Deciding between fat-style and skinny-style is an engineering judgement call. You can certainly build a working system
using either approach, but how much guidance does that give you? You know that you can build a computer program in
any Turing-complete computer language, but that doesn't make Assembler as practical as Basic, C#, Eiffel, Java, Lisp, or
ML.

One argument in favor of fat-style is maintainability and self-documentation. Fat is the convention in the database world.
A SQL programmer who takes over your work will expect fat. He or she will sit down and start to understand your system
by querying the data dictionary, the RDBMS's internal representation of what tables are defined. Here's how it looks with
Oracle:
select table_name from user_tables;
describe users
*** SQL*Plus lists the column names ***
describe other_table_name
*** SQL*Plus lists the column names ***
describe other_table_name_2
*** SQL*Plus lists the column names ***
...

Suppose that you were storing all of your application data in a single table:
create table my_data (
key_id
field_name
field_type
field_value
);

integer,
varchar,
varchar,
varchar

This is an adequate data model in the same sense that raw instructions for a Turing machine is an adequate programming
language. Querying the data dictionary would be of no help toward understanding the purpose of the application. One
would have to sample the contents of the rows of my_data to see what was being stored. Suppose, by contrast, you were
poking around in an unfamiliar database and encountered this table definition:
create table address_book (
address_book_id integer primary key,
user_id
not null references users,
first_names
varchar(30),
last_name
varchar(30),
email
varchar(100),
email2
varchar(100),
line1
varchar(100),
line2
varchar(100),
city
varchar(100),
state_province varchar(20),
postal_code
varchar(20),
country_code
char(2) references country_codes(iso),
phone_home
varchar(30),
phone_work
varchar(30),
phone_cell
varchar(30),
phone_other
varchar(30),
birthdate
date,
days_in_advance_to_remind
integer,
date_last_reminded
date,
notes
varchar(4000)
);

The author's source code comments have been stripped out, yet it is reasonably clear that
this table exists to support an online address book. Moreover the purpose of each column
can be inferred from its name. Quite a few columns will be NULL for each address book
entry, but not so many that the table will be absurdly sparse. Because NULL columns take
up so little space in the database, you shouldn't decide between skinny and fat based on
presumed data storage efficiency.
Skinny is good when you are storing wildly disparate data on each user, such that you'd
expect more than 75 percent of columns to be NULL in a fat data model. Skinny can result
in strange-looking SQL queries and data dictionary opacity.

Note the use of ISO country codes,


constrained by reference to a table of
valid codes, to represent country in
the table above. You don't want
records with "United States", "US",
"us", "USA", "Umited Stares", etc.
These are maintained by the ISO
3166 Maintenance agency, from
which you can download the most
current data in text format. See
http://www.iso.ch/iso/en/prodsservices/iso3166ma/index.html.

User Groups
One of the most powerful constructs in an online community is a user group. A group of users might want to collaborate
on publishing some content. A group of users might want a private discussion forum. A group of users might be the only
people authorized to perform certain actions or view certain files. The bottom line is that you'll want to be able to refer to
groups of users from other objects in your database.

When building user groups you might want to think about on-the-fly groups. You definitely want to have a user group
where each member is represented by a row in a table: "user #37 is part of user group #421". With this kind of data model
people can explicitly join and separate from user groups. It is also useful, however, to have groups generated on-the-fly
from queried properties. For example, it might be nice to be able to say "this discussion forum is limited to those users
who live in France" without having to install database triggers to insert rows in a user group map table every time someone
registers a French address. Rather than denormalizing the data, it will be much cleaner to query for "users who live in
France" every time group membership is needed.
A typical data model will include a USERS table and a USER_GROUPS table. This leads to a bit of ugliness in that many
of the other tables in the system must include two columns, one for user_id and one for user_group_id. If the user_id
column is not NULL, the row belongs to a user. If the user_group_id is not NULL, the row references a user group.
Integrity constraints ensure that only one of the columns will be non-NULL.

Representing Membership in a Group (First Normal Form)


Suppose that you have a USERS table and a USER_GROUPS table. How do you represent the fact that User 234 is a
member of Groups 17 and 18? It might seem that the simplest way to do this is with a data structure stored in a column
within the USERS table:
create table users (
user_id
integer primary key,
...
-- a space-separated list of group IDs
group_memberships
varchar(4000),
...
);

In this case, we'd store the string "17 18" in the group_memberships column. This is known as a repeating group or a
multivalued column and it has the following problems:
you might not have enough space if the number of values in the column grows larger than anticipated
the combination of table name, column name, and key value no longer specifies a datum
the basic INSERT, UPDATE, and SELECT operations are not sufficient to manipulate multivalued columns
programmers' brains will have to adapt simultaneously to unordered data in table rows and ordered data inside a
multivalued column
design opacity: If you use multivalued columns even once, people will never know what to expect when they look
under the hood of your design; did you use multiple tables to express a many-to-one relation or multivalued
columns?
To get the data model into First Normal Form, in which there are no multivalued columns, you'd create a mapping table:
create table user_group_map (
user_id
not null references users;
user_group_id
not null references user_groups;
unique(user_id, user_group_id)
);
Note that in Oracle the unique constraint results in the creation of an index. Here it will be a concatenated index starting with the user_id
column. This index will make it fast to ask the question "To which groups does User 37 belong?" but will be of no use in answering the
question "Which users belong to Group 22?"

A good general rule is that representing a many-to-one relation requires two tables: Things A and Things B, where many Bs
can be associated with one A. Another general rule is that representing a many-to-many relation requires three tables:
Things A, Things B, and a mapping table to associate arbitrary numbers of As with arbitrary numbers of Bs.

Derivable Data
Storing users and groups in three tables seems as though it might be inefficient and ugly. To answer the question "To which
groups does Norman Horowitz belong" we must JOIN the following tables: users, user_groups, user_group_map:
select user_groups.group_name
from users, user_groups, user_group_map
where users.first_names = 'Norman' and users.last_name = 'Horowitz'
and users.user_id = user_group_map.user_id
and user_groups.user_group_id = user_group_map.user_group_id;

To answer the question "Is Norman Horowitz part of the Tanganyikan Ciclid interest group and therefore entitled to their
private page" we must execute a query like the following:
select count(*)
from user_group_map
where user_id = (select user_id
from users
where first_names = 'Norman'
and last_name = 'Horowitz')
and user_group_id = (select user_group_id
from user_groups
where group_name = 'Tanganyikans')
Note the use of the _p suffix to
If this is a popular group, there is a temptation among new database programmers to
denote a boolean column. Oracle
denormalize the data model by adding a column to the users table, e.g.,
does not support a boolean data type
tanganyikan_group_member_p. This column will be set to "t" when a user is added to the and therefore we simulate it with a
CHAR(1) that is restricted to "t" and
Tanganyikans group and reset to "f" when a user unsubscribes from the group. This feels
"f". The "p" in the suffix stands for
like progress. We can answer our questions by querying one table instead of three.
"predicate" and is a naming
convention that dates back to Lisp
Historically, however, RDBMS programmers have been bitten badly any time that they
programmers circa 1960.
stored derivable data, i.e., information in one table that can be derived by querying other,
more fundamental, tables. Inevitably a programmer comes along who is not aware of the unusual data model and writes
application code that updates the information in one place but not another.

What if you really need to simplify queries? Use a view:


create view tanganyikan_group_members
as
select * from users
where exists (select 1
from user_group_map, user_groups
where user_group_map.user_id = users.user_id
and user_group_map.user_group_id = user_groups.user_group_id
and group_name = 'Tanganyikans');

What if you know that you're going to need this information almost every time that you query the USERS table?
create view users_augmented
as
select
users.*,
(select count(*)
from user_group_map ugm, user_groups ug
where users.user_id = ugm.user_id
and ugm.user_group_id = ug.user_group_id
and ug.group_name = 'Tanganyikans') as tanganyikan_group_membership
from users
where exists (select 1
from user_group_map, user_groups
where user_group_map.user_id = users.user_id
and user_group_map.user_group_id = user_groups.user_group_id
and group_name = 'Tanganyikans');

This results in a virtual table containing all the columns of users plus an additional column called
tanganyikan_group_membership that is 1 for users who are members of the group in question and 0 for users who aren't.
In Oracle, if you want the column to bear the standard ANSI boolean data type values, you can wrap the DECODE
function around the query in the select list:
decode(select count(*) ..., 1, 't', 0, 'f') as tanganyikan_group_membership_p

Notice that we've added an "_p" suffix to the column name, harking back to the Lisp programming language in which
functions that could return only boolean values conventionally had names ending in "p".
Keep in mind that data model complexity can always be tamed with views. Note, however, that views are purely syntactic.
If a query is running slowly when fed directly to the RDBMS, it won't run any faster simply by having been renamed into
a view. Were you to have 10,000 members of a group, each of whom was requesting one page per second from the group's
private area on your Web site, doing three-way JOINs on every page load would become a substantial burden on your
RDBMS server. Should you fix this by denormalizing, thus speeding up queries by perhaps 5X over a join of indexed
tables? No. Speed it up by 1000X by caching the results of authorization queries in the virtual memory of the HTTP server
process.

Clean up ugly queries with views. Clean up ugly performance problems with indices. If you're facing Yahoo! or Amazon
levels of usage, look into unloading the RDBMS altogether with application-level caching.

Access Control and Approval


Suppose that you are building a corporate knowledge-sharing site. You might decide to place the server on the public
Internet to facilitate employee access while at home or traveling. Perhaps some close collaborators within other
organizations will be allowed access. However, you won't want random people registering at the site and getting
immediate access. Each new user should probably have to be approved by an administrator.
Or perhaps you're building a public online learning community. You want users to be identified and accountable at the very
least to their Internet Service Provider. So you'll want to limit access to only those registrants who've verified receipt of an
email message at the address that they supplied upon registering. You may also want to reject registration from users
whose only email address is at hotmail.com or a similar anonymous provider.
A community may need to change its policies as the membership grows.
One powerful way to manage user access is by modeling user registration as a finite-state machine, such as the one shown
in figure 5.1.
Not a user
|
V
Need Email Verification
Rejected (via any
Need Admin Approval
pre-authorization state)
|
|
Need admin approval<--------- ------------->Need email verification
|
|
|
|
--------------------->Authorized<--------------------|
|
Banned------------><-------- ------><---------------Deleted

Figure 5.2: A finite-state machine approach to user registration. A reader starts in the "not a user" state. After filling out a
registration form, he progresses to the "Need Email Verification/Need Admin Approval" state. After responding to an
email message from the server he is moved into the "Need Admin Approval" state. Suppose that on this site we have a rule
that anyone whose email ends in "mit.edu" is automatically approved. In that case the reader is moved to the "Authorized"
state, which is where he will stay unless he decides to leave the service ("Deleted") or is deemed to be an unreasonable
burden on moderators ("Banned").
Rather than checking columns admin_approved_p, email_verified_p, banned_p, deleted_p in the users table on
every page load, this approach allows application code to examine only a single user_state column.
The authors built a number of online communities with this same finite-state machine and for each one made a decision
with the publisher as to whether or not any of these state transitions could be made automatically. The Siemens Sharenet
knowledge sharing system, despite being inaccessible from the public Internet, elected to require administrator approval
for every new user. By contrast, on photo.net users would go immediately from "Not a user" to "Authorized".

Exercise 1: Data Model


Define an SQL data model to represent users and user groups. Before proceeding to Exercise 2, discuss this data model
with your teaching assistant.
Questions: Do you store users' passwords in the database encrypted or non-encrypted? What are the advantages and
disadvantages of encryption? What columns in your tables will enable your system to handle the query "Find me users
who live within 50 kilometers of User #37"?
Make sure that your data model and answers are Web-accessible and easy to find from your main documentation directory,
perhaps at the URL /doc/.

Multi-Page Design and Flow

This book defers discussion of individual page design until the "Content Management" chapter, but we need to think about
page flow design right now. Why? The bad design of a single page will offend a user; the bad design of the page-to-page
flow of a site will defeat a user.
One of the things that users love about the Web is the way in which computation is discretized. A desktop application is
generally a complex miasma in which the state of the project is only partially visible. Despite software vendors having
added multiple-level Undo commands to many popular desktop programs, the state of those programs remains opaque to
users.
The first general principle of multi-page design is therefore Don't break the browser's Back button. Users should be
able to go forward and back at any time in their session with a site. For example, consider the following flow of pages on a
shopping site:
choose a book
enter shipping address
enter credit card number
confirm
thank-you
A user who notices a typo in the shipping address on the confirm page should be able to return to the shipping address
entry form with the Back button or the "click right" menu attached to the Back button, correct the address and proceed
from there. See the "Choosing between GET and POST" section later in this chapter.
A second general principle is Have users pick the object first and then the verb. For example, consider the customer
service area of an e-commerce site. Assume that Jane Consumer has already identified herself to the server. The merchant
can show Jane a list of all the items that she has ever purchased. Jane clicks on an item (picking the object) and gets a
page with a list of choices, e.g., "return for refund" or "exchange". Jane clicks on "exchange" (picking the verb) and gets
a page with instructions on how to schedule a pickup of the unwanted item and pages offering replacement goods.
How original is this principle? It is lifted straight from the Apple Macintosh circa 1984 and is explicated clearly in
Macintosh Human Interface Guidelines (Apple Computer, Inc.; Addison-Wesley, 1993; full text available online at
http://developer.apple.com/documentation/mac/HIGuidelines/HIGuidelines-2.html). In a Macintosh word processor, for
example, you select one word from the document with a double-click (object). Then from the pull-down menus you select
an action to apply to this word, e.g., "put it into italics" (verb). Originality is valorized in contemporary creative culture,
but it was not a value for medieval authors and it does not help users. The Macintosh was enormously popular to begin
with, and its user interface was copied by the developers of Microsoft Windows, which spread the object-then-verb idea to
tens of millions of people. Web publishers can be sure that the vast majority of their users will be intimately familiar with
the "pick the object then the verb" style of interface. Sticking with a familiar user interface cuts down on user time and
confusion at a site.
These principles are especially easy to apply to user administration pages, for example. The administrator looks at a list of
users and clicks on one to select it. The server produces a new page with a list of possible actions to apply to that user.

Exercise 2: Page Flow


Start by sketching the page flow for user registration and administration. There should be one circle or box for every URL
in the system and one arc for every possible transition from URL A to URL B. If you have a lot of URLs that are form
targets and perform database updates, but redirect to other pages in the system for display, you may want to distinguish
those URLs with a light or dashed outline.
Ideally this drawing should be scanned and made available in your online documentation.
Figure 5.2 is an example of the kind of drawing we're looking for.

Figure 5.3: Page flow documentation for a standalone birthday reminder service. Email reminders are sent out either the
day of, the day before, or one week before the date each year. For more info on this application, see chapter 15 of Philip
and Alex's Guide to Web Publishing at http://philip.greenspun.com/panda/. Drawing by Mina Reimer.

Choosing between GET and POST


Following an ordinary hyperlink on an HTML page results in a GET request to the server under the HTTP protocol. When
programming a page with an HTML form, you have a choice between using METHOD=GET and METHOD=POST. A heavy
reliance on POST will result in a site that breaks the browser Back button. An attempt to go back to a page that was the
result of a POST will generally bring up a "Page Expired" error message and possibly a dialog box asking whether the user
wishes to resubmit information by using the "Refresh" button.
Some of our students asked for further guidance on how to choose between GET and POST and here's the response from
Ben Adida, part of the course's teaching staff in fall 2003:
Most of you may be wondering, why GET vs. POST in submitting forms?
Oftentimes, one will use POST just to keep pretty URLs (without
?var=val&var=val). But that's the wrong way to think about it.
A GET implies that you are getting information. You can resubmit a GET
any number of times: you are just querying information, not performing
any actions on the back-end.
A POST implies that you are performing some action with side-effect:
inserting a row, updating a row, launching a missile, etc... That's
why when you try to reload a POST page, your browser warns you: are
you sure you want to launch another missile?
In general, you should strive to respect the above principles. Here are
two key examples:
- searching users or content. That should be a GET.
- Inserting a user or updating a profile. That should be a POST.
Of course, HTML and HTTP have some restrictions that complicate things:
a) GET forms are limited in length by how much your browser can send

in a URL field. This can be a problem for very complicated search


forms, though probably not an issue at this stage. If you do hit
that limit though, then it's okay to use a POST.
b) POST forms can only be performed by having an HTML button, or by
using JavaScript to submit a form. JavaScript is not ideal. Thus,
sometimes you want to have a link that is effectively an action
with side-effect (e.g. "ban user"), but you make it a GET.
You can use redirects (HTTP return code 302) to make your life easier.
The nice thing about correct 302's is that the URL that issues a 302 is
never kept in a browser's history, so it is never queried twice unless
the user does something really conscious (like click back and actively
resubmit the form). Specifically:
1) when you POST data for an insert or update, have your script
process the POST, then redirect to a thank-you page. That way,
if the user clicks "reload", they are simply reloading the
thank-you page, which is just a GET and won't cause side-effects
or warnings. You can also redirect to something more meaningful,
perhaps the list of recently registered users once you've edited
one.
2) when you use a GET link to actually perform an action with
side-effect, you can also have that target script perform its
action then immediately redirect to a script with no side
effects. This will prevent the accidental repetition of an
action.
Scripts that have side effects should not be reachable at URLs that
may enter the cache and be randomly re-requested by the browser. The
one exception is if the POST causes some kind of error: it's mostly
okay for the script that processes the POST to display the error
instead of redirecting to some kind of error-displaying page (which
would be clunky to build anyways).
.NET folks: when you use ASP.NET and postback, you have no choice of
method: it's always POST. Remember to follow the above rule for POST:
you can have your handler method perform the side-effects but it
should then redirect somewhere else instead of returning content.
I hope this helps in making your sites more usable. Let me know if
you have any questions.
-Ben
PS: None of the above solves the "double-click" problem which is what
happens if a user double-submits a form quickly (especially those
users who don't know the difference between single and double
clicking). We'll talk about double-click protection later.

Exercise 3
Build the basic user registration and login pages. Use HTTP cookies to make the rest of the semester's work easier.
Questions: Can someone sniffing packets learn your user's password? Gain access to the site under your user's credentials?
What happens to a user who forgets his or her password?

Exercise 4
Build the site administrator's pages for working with users. The site administrator should be able to (1) see recently
registered users, (2) look up a particular user, (3) exclude a user from the site, and (4) see current and historical statistics
on user registration.
Questions: How can the administrator control who is permitted to register and use the site? What email notification options
does the site administrator have that relate to user registration?

Exercise 5
Look at your tables again for referential integrity constraints and query performance. How long will it take to look up a
user by email address? What if this email address is capitalized differently from what you've stored in the database? Is it
possible to have two users with the same email address? (Note that by Internet standards a lowercase email address or
hostname is the same as an uppercase email address or hostname.)

Many Web applications contain content that can be viewed only by members of a specific user group. With your data
model, how many table rows will the RDBMS have to examine to answer the question "Is User #541 a member of Group
#90"? If the answer is "every row in a big table", i.e., a sequential scan, what kind of index could you add to speed up the
query?

More
SQL for Web Nerds, data modeling chapter, at http://philip.greenspun.com/sql/data-modeling
for a discussion of indices, see SQL for Web Nerds, tuning chapter, at http://philip.greenspun.com/sql/tuning
Normal forms: chapter 4 of Steve Roman's Access Database Design & Programming (O'Reilly 1999), available
online at http://www.oreilly.com/catalog/accessdata2/chapter/ch04.html and Chapter 1 of Transact-SQL
Programming, available online at http://www.oreilly.com/catalog/wintrnssql/chapter/ch01.html
"Reverse Engineering a Data Model" by Eve Andersson at http://eveandersson.com/writing/data-model-reverseengineering is useful for understanding how to work with the Oracle Data Dictionary.

Time and Motion


The data modeling, page flow sketching, and questions about query performance will probably be done by the team as a
group and require approximately three hours. Implementing the page scripts could be divided up among team members,
but in any case should be doable in ten programmer-hours.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Gestin de contenido
parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet
Hay dos elementos fundamentales para la gestin de contenidos: (1) el almacenamiento de cosas en un
repositorio de contenido, y (2) que soporta el flujo de trabajo de un grupo de personas dedicadas a poner
cosas en ese repositorio. En este captulo se tratar el problema de almacenamiento primero y luego el
problema de soporte de flujo de trabajo. Tambin veremos en el control de versiones de contenido y
software, al verse y sentirse diseo para pginas individuales, y al diseo de la navegacin y la
arquitectura de la informacin.
Parte del arte de la gestin de contenidos para una comunidad de aprendizaje en lnea es reducir el nmero
de tipos de contenido. Por ejemplo, considere una comunidad donde el editor dice "Quiero artculos
[contenido] imn, los comentarios de los usuarios sobre los artculos, noticias de la editorial, comentarios
sobre noticias de los usuarios, las preguntas de los usuarios, y respuestas a las preguntas." Una aplicacin
ingenua de estas especificaciones se traducira en la creacin de seis tablas de bases de datos: articles,
comments_on_articles, news, comments_on_news, questions, answers . Desde la perspectiva del
RDBMS, no hay nada abrumadora sobre seis mesas. Pero considera que cada nueva tabla definida en el
RDBMS implica aproximadamente veinte guiones Web. Diez de estos scripts constituir una experiencia
de usuario: ver un directorio de contenido en la Tabla A, vista de una categora, la vista de un artculo, ver los ms nuevos artculos, tomar un
formulario para insertar un elemento, confirmar la insercin, solicitar una alerta de correo electrnico de los comentarios en un elemento. Diez de
estos scripts constituirn la experiencia del administrador: ver un directorio de contenido en la Tabla A, vista de una categora, la vista de un artculo,
ver los artculos ms recientes, aprobar un elemento, desaprobar un elemento, eliminar un elemento, confirmar la eliminacin de un elemento, etc.
Ser un poco difcil de codificar estos veinte guiones de una manera general, porque las sentencias SQL diferirn en al menos los nombres de las
tablas utilizadas.
Considere adems que para ofrecer un ndice completo del contenido del sitio, usted tendr que escribir un programa que extrae el texto de al menos
seis mesas en un solo ndice.
Cun diferentes son estos seis tipos de contenido, realmente? Veremos en las mesas que tenemos que definir para el almacenamiento de artculos, a
continuacin, proceder a los otros tipos de contenido.

Un modelo de datos simple para los artculos


He aqu un modelo de datos muy bsico para almacenar artculos:
crear artculos de mesa (
article_id clave principal entero,
- Que contribuyeron esto y cuando
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
- Qu lenguaje es esto?
- Visitar http://www.w3.org/International/O-charset-lang
- Para ver los cdigos de 2 caracteres permitidos (es decir Ingls, ja es japons)
Char lengua (2) referencias language_codes,
- Podra ser text / html o text / plain o algn tipo de documento XML
varchar mime_type (100) no es nulo,
- Celebrar el ttulo en la mayora de los casos
varchar one_line_summary (200) no es nulo,
- El artculo completo; Lmite de 4 GB
clob cuerpo
);

Deberan todos los artculos de la base de datos se mostrarn a todos los usuarios? Tal vez sera bueno tener la capacidad de almacenar un artculo y
mantenerla durante el examen de redaccin:
crear artculos de mesa (
article_id clave principal entero,
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
Char lengua (2) referencias language_codes,
varchar mime_type (100) no es nulo,
varchar one_line_summary (200) no es nulo,
clob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))
);

Confas en todos los programadores en su organizacin para acordarse de incluir una where editorial_status = 'approved' clusula en cada
secuencia de comandos en el sitio? Si no es as, tal vez sera mejor cambiar el nombre de la tabla en conjunto y construir una visin para su uso por
los programadores de aplicaciones:
crear artculos de mesa _raw (
article_id clave principal entero,
...
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))

comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))


);
create view articles_approved
como
select *
desde articles_raw
donde editorial_status = 'aprobado';

Si cambia de opinin acerca de cmo representar el estado de aprobacin, usted no tendr que actualizar decenas de secuencias de comandos Web;
slo es necesario cambiar la definicin de la articles_approved vista. (Ver el captulo vistas de SQL para los empollones Web en
http://philip.greenspun.com/sql/views para saber ms sobre esta idea de utilizar vistas SQL como un medio de la abstraccin de programacin.)

Comentarios sobre los artculos


Recordemos los seis elementos necesarios de la comunidad en lnea:
contenido imn escrito por expertos
los medios de colaboracin
poderosas instalaciones para la navegacin y la bsqueda tanto de contenido imn y contribuyeron contenido
los medios de delegacin de la moderacin
los medios de identificacin de los miembros que estn imponiendo una carga excesiva a la comunidad y maneras de cambiar su
comportamiento y / o excluirlos de la comunidad sin ellos darse cuenta
6. los medios de extensin de software por los propios miembros de la comunidad
1.
2.
3.
4.
5.

Una instalacin que permite una entrada del usuario una perspectiva alternativa a un artculo publicado es un medio de colaboracin que distingue a
un sitio de publicacin de un solo sentido de una comunidad en lnea. Ms interesante, la instalacin de ascensores la aplicacin de Internet fuera de
los lmites de la cultura letrada en el que la cultura occidental ha operado desde que Gutenberg (1452). Una cultura letrada produce obras como la
Gua Verde Michelin a Italia: "Extender debajo de la ciudad es el parque del siglo 16 Villa Orsini (Parco dei Mostri), que es una creacin manierista
con una serie de esculturas en forma fantstica." Compare esa descripcin a estas fotos que muestran slo una pequea porcin de la Parco dei Mostri
("Parque de los Monstruos"):
Parco dei Mostri. Bomarzo, Italia.

Parco dei Mostri. Bomarzo, Italia.

Si un amigo tuyo de regresar de este lugar y mostr estas diapositivas, lo que espera or algo mucho ms rico y ms interesante que condena la Gua
Michelin. Una cultura letrada opera con el supuesto implcito de que el conocimiento est cerrado, que el turismo italiano puede caber en un libro. Tal
vez las 350 pginas de la Gua Verde no son suficientes, pero una cierta cantidad de escritores y pginas bastaran para encapsular todo lo que vale la
pena conocer Italia.
Las culturas orales no comparten esta creencia. El conocimiento es de composicin abierta. Las personas pueden Los comentarios son a menudo el material
ms interesante en un sitio. Aqu est uno de
tener opiniones diferentes, sin una persona a equivocarse. No hay necesariamente una verdad; puede haber
http://philip.greenspun.com/humor/bill-gates
muchas verdades. A pesar de que no creci en una cultura oral, Shakespeare saba. Ver Troilo y Crsida y sus
:
cinco puntos de vista sobre la naturaleza del amor de una mujer y tratar de averiguar qu perspectiva
Shakespeare cree que es correcto.
"Debo decir, que todos los que no reconocen
Las feministas, chovinistas, belicistas, los pacifistas, antisemitas, inclusivistas, personas prudentes, personas
negligentes, avaros, mdicos, abogados de negligencia mdica, ateos, y los piadosos son todos capaces de citar a
Shakespeare en apoyo de sus creencias. Esto se debe a Shakespeare utiliza los mltiples personajes en cada una
de sus obras para mostrar mltiples verdades de su cultura.

el genio absoluto de Bill Gates son estpidos.


Usted dice que Bill Gates robaron este sistema
operativo. Hmm .. Me parece interesante. Si
l lo rob de steve jobs, por qu hasn 't Jobs
implacablemente lo demand y tal. Porque el
Sr. Jobs tiene ninguna base para apoyar esto.
Macintosh opera nada como Windows 3.1 o
Windows 95 / NT / 98. Ahora, para el mac
dissing. Mac'S estn bien para 1 cosa.
Grficos . Eso es todo. Todo lo dems es una
mierda en un mac. Te ves en todas las
escuelas primarias de amrica .. Usted no
ver un PC. Youll ver un Mac. Por qu?
Porque Mac slo son utilizados por las

En los 400 aos desde que Shakespeare nos hemos vuelto mucho ms alfabetizada. Por lo general hay una
verdad dominante. A veces esto se debe a que realmente hemos descubierto algo. Es difcil argumentar que un
libro de texto de fsica de la mecnica de Newton debe ser un debate de composicin abierta (aunque una
instalacin comentario usuario todava podra ser muy til para proporcionar explicaciones aclaratorias para las
secciones confusas). Sin embargo, incluso en las ciencias naturales, se pueden encontrar muchos ejemplos en los personas con cerebros no desarrollados. "
que la cultura de la alfabetizacin distorsiona el discurso.
- Allen (chuggie@geocities.com), 10 de
agosto 1998

Revistas acadmicas de la botnica taxonmica revelan el desacuerdo sobre si Espcimen 947 obtenida de un
campo en particular en Montana es un miembro de la especie X o Y. especies Pero las revistas implican acuerdo sobre la taxonoma, es decir, sobre
cmo construir un rbol de clasificacin para las diferentes especies . Si se va a espiar a un cctel en el departamento de una universidad de la
botnica, usted descubrir que incluso este acuerdo es ilusoria. Hay desacuerdo generalizado sobre lo que constituye la taxonoma correcta. Casi nadie
cree que la taxonoma utilizada en revistas es correcto, pero los botnicos tienen que aferrarse a l para su publicacin debido a artculos de revistas

cree que la taxonoma utilizada en revistas es correcto, pero los botnicos tienen que aferrarse a l para su publicacin debido a artculos de revistas
de otro modo ms viejos quedaran incomprensibles. Botnica taxonmica basada en una cultura oral o un sistema informtico capaz de mostrar
mltiples vistas se vera completamente diferente.
El Internet y los ordenadores, que se utiliza de manera competente y creativa, hacen que sea mucho ms fcil y ms barato para recoger y presentar
mltiples verdades que en el viejo mundo de la impresin, telfono y correo postal. Los sitios web de mltiples verdad son mucho ms interesantes
que los sitios Web de una sola verdad y, por unidad de esfuerzo y dinero invertido, mucho ms eficaz en la educacin de los usuarios.

Implementar Comentarios
Comentarios sobre los artculos estarn representados en una tabla separada:
create table comments_on_articles_raw (
clave comment_id entero primaria,
- En lo que este artculo es un comentario?
refers_to no nulas referencias artculos,
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
Char lengua (2) referencias language_codes,
varchar mime_type (100) no es nulo,
varchar one_line_summary (200) no es nulo,
clob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))
);
create view comments_on_articles_approved
como
select *
desde comments_on_articles_raw
donde editorial_status = 'aprobado';

Esta tabla difiere de la articles de mesa slo en una sola columna: refers_to . Qu tal la combinacin de las dos:
create table content_raw (
clave content_id entero primaria,
- Si no es NULL, esta fila representa un comentario
referencias refers_to content_raw,
- Que contribuyeron esto y cuando
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
- Qu lenguaje es esto?
- Visitar http://www.w3.org/International/O-charset-lang
- Para ver los cdigos de 2 caracteres permitidos (es decir Ingls, ja es japons)
Char lengua (2) referencias language_codes,
- Podra ser text / html o text / plain o algn tipo de documento XML
varchar mime_type (100) no es nulo,
varchar one_line_summary (200) no es nulo,
- El artculo completo; Lmite de 4 GB
clob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))
);
- Si queremos ser capaces de escribir algunos guiones sin tener que pensar
- Por el hecho de que los diferentes tipos de contenido se fusionan
create view articles_approved
como
select *
desde content_raw
donde refers_to es nulo
y editorial_status = 'aprobado';
create view comments_on_articles_approved
como
select *
desde content_raw
donde refers_to no es nulo
y editorial_status = 'aprobado';
- Vamos a construir un ndice de texto completo en ambos artculos y comentarios
- Utilizando Oracle Intermedia Texto (antes conocido como "Contexto")
crear content_ctx ndice en content_raw (cuerpo)
INDEXTYPE es ctxsys.context;

Lo que es diferente acerca de Noticias?


Qu es tan diferente acerca de la noticia de que tenemos que tener una tabla separada? A menudo noticia tiene una fecha de caducidad, despus de lo
cual ya no es interesante y debe ser empujado en un archivo. "Empujar a un archivo" no significa necesariamente que el artculo debe ser movido en
una tabla diferente. Puede ser que sea suficiente para programar los scripts de presentacin para que las noticias no vencidos estn en la primera
pgina y elementos caducados estn disponibles haciendo clic en "archivos".
A menudo, el comunicado de prensa de la empresa sern marcados "para la liberacin Lunes, abril 17." Si un editor quiere seguir recibiendo los
comunicados de prensa de esta empresa, que respetar estas fechas. Esto implica la necesidad de un release_time columna en el modelo de datos de
noticias.
Aparte de estas dos columnas ( expiration_time y release_time ), parecera que una noticia necesita ms o menos las mismas columnas como
artculos: un lugar para un resumen de una lnea, un lugar para el cuerpo de la noticia, una manera de indicar autora, una manera de indicar su

artculos: un lugar para un resumen de una lnea, un lugar para el cuerpo de la noticia, una manera de indicar autora, una manera de indicar su
aprobacin dentro del flujo de trabajo editorial.
Tras una reflexin ms profunda, sin embargo, tal vez estas columnas podran ser tiles para todo el contenido del sitio. Un artculo sobre la
actualizacin de Windows 2000 a Windows XP, probablemente se debe a punto de expirar en 2006. Si un grupo de autores y editores estn trabajando
en una actualizacin de sitio principal, tal vez sera bueno para sincronizar el lanzamiento de los nuevos contenidos para el martes a las medianoche.
Volvamos a content_raw :
create table content_raw (
clave content_id entero primaria,
referencias refers_to content_raw,
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
fecha release_time, - significa NULL "inmediata"
fecha expiration_time, - NULL significa "nunca caduca"
Char lengua (2) referencias language_codes,
varchar mime_type (100) no es nulo,
varchar one_line_summary (200) no es nulo,
clob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))
);

Cmo encontramos noticias entre todas las filas de contenido? Lo que distingue a una noticia con un tiempo de lanzamiento prevista y la fecha de
caducidad de un artculo sobre el sistema operativo Windows 2003 con un tiempo de liberacin programada y fecha de vencimiento? Necesitaremos
una columna ms:
create table content_raw (
clave content_id entero primaria,
varchar content_type (100) no es nulo,
referencias refers_to contenido,
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
fecha release_time,
fecha expiration_time,
Char lengua (2) referencias language_codes,
varchar mime_type (100) no es nulo,
varchar one_line_summary (200) no es nulo,
clob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))
);
create view news_current_and_approved
como
select *
desde content_raw
donde content_type = "noticias"
y (release_time es nulo o sysdate> = release_time)
y (expiration_time es nulo o sysdate <= expiration_time)
y editorial_status = 'aprobado';

Observe los controles explcitos para NULL en la definicin de la vista anterior. Se podra pensar que algo ms simple como
y SYSDATE entre release_time y expiration_time

trabajara. El problema aqu es lgica trivalente de SQL. Para el RDBMS para devolver una fila, toda la E clusulas deben devolver true. NULL no es
cierto. Cualquier expresin o el clculo incluyendo un NULL evala a NULL. As
donde sysdate> = release_time

excluir ninguna fila donde release_time es NULL.

Lo que es diferente acerca de debate?


Parece que nos las hemos arreglado para tratar cuatro de los seis tipos de contenido requeridas con una tabla. Lo que es ms, lo hemos hecho sin tener
una larga lista de columnas anula para un elemento tpico. Para un artculo, refers_to ser NULL. Para el contenido que no es temporal, los tiempos
de liberacin y de vencimiento ser NULL. De lo contrario, la mayora de las columnas se llenar la mayora del tiempo.
Qu pasa con las preguntas y respuestas en un foro de discusin? Si slo hay un foro en el sitio, podemos simplemente aadir filas a la content_raw
mesa con un content_type de "forum_posting" y consulta para las preguntas marcando refers_to is null . En un sitio con mltiples foros,
tendramos que aadir un parent_id columna para indicar bajo qu tema una pregunta determinada entra. Dentro de un foro con muchos mensajes
archivados, tambin necesitaremos alguna forma de almacenar categorizacin, por ejemplo, "esta es una pregunta Darkroom". Ver
http://www.photo.net/bboard/ para un ejemplo de funcionamiento de un sistema multi-foro en el que se clasifican las contabilizaciones mayores. El
"Debate" captulo de este libro trata este tema con ms detalle.

Por qu no utilizar el sistema de archivos?


Vamos a dar un paso atrs por un momento y preguntmonos por qu no estamos haciendo un mayor uso del sistema de archivos jerrquico en nuestro
servidor. Cul sera malo en tener artculos almacenados como archivos .html en directorios? Esta es la forma que la mayora de los sitios Web
fueron construidos en la dcada de 1990 y sin duda es imposible discutir con el rendimiento y la fiabilidad de este enfoque.
Una buena cosa sobre el sistema de archivos es que hay una gran cantidad de herramientas para los usuarios con diferentes niveles de habilidad de
agregar, actualizar, eliminar y renombrar archivos. Los programadores pueden utilizar editores de texto. Los diseadores pueden utilizar las
herramientas de diseo Web y FTP a los resultados. Autores de pginas pueden utilizar editores de HTML, como Microsoft Front Page.

Uno malo de dar muchas personas el acceso al sistema de archivos es el potencial para el caos. Un diseador se supone que debe cargar una plantilla,
pero termina por quitar un guin de error. Ahora los usuarios no pueden iniciar sesin en el sitio ms. Los sistemas de archivos estndar de Windows
y Unix no estn versionadas. No es posible volver atrs y preguntar "Qu hizo este archivo se parece a hace seis meses?" El sistema de archivos no
por s misma admite cualquier flujo de trabajo (vase ms adelante). Usted autoriza a alguien para modificar un archivo o no. No se puede decir
"Usuario 37 es autorizado a modificar este artculo sobre filtros de acuario, pero los miembros no debe ver que la actualizacin que haya sido
aprobada por un editor."
El problema ms profundo con el uso del sistema de archivos como piedra angular de su sistema de gestin de contenidos es que los archivos se
encuentran fuera de la base de datos. Usted tendr que almacenar una gran cantidad de referencias a los contenidos en la base de datos, por ejemplo,
"Usuario 960 es el autor del artculo 231", "Comentario 912 es un comentario sobre el artculo 529", etc. Es muy difcil mantener un conjunto de
referencias constantes a las cosas fuera del RDBMS. Supongamos que sus tablas RDBMS se refieren a presentar los archivos del sistema por nombre
de archivo. Alguien cambia el nombre de un archivo. La base de datos no lo sabe. Mecanismos de restriccin de integridad referencial de la base de
datos no se pueden invocar para proteger contra esta circunstancia. Es mucho ms fcil mantener un conjunto de estructuras de datos consistentes si
estn todos dentro del RDBMS.
.html Estticos tambin tienen el problema de ser, as, esttica. Supongamos que desea un encabezado y pie de pgina estndar en cada pgina. Usted
puede cortar y pegar stos en cada archivo .html en el sistema. Pero lo que si desea cambiar "Copyright 2003" para "Copyright 2006" en el pie de
pgina en todo el sitio? Puede que tenga que actualizar miles de archivos. Suponga que desea que el encabezado para incluir un enlace "Login" si la
solicitud llega con ninguna cookie autorizacin del usuario y un enlace "Salir" si la peticin viene de un usuario registrado.
Algunos de los problemas con el mantenimiento editor de archivos .html estticas se pueden resolver por escrito peridicamente y ejecutar scripts de
Perl inteligentes. Problemas ms profundos con la experiencia del usuario se mantienen, sin embargo. En primer lugar est el hecho de que con un
archivo .html esttica cada persona que ve la pgina piensa que l o ella podra ser la nica persona que jams haya visto la pgina. Esto hace que para
una experiencia de Internet muy solo y, en general, no muy rentable para el editor.
Un negocio en lnea sostenible suelen ofrecer algn tipo de interaccin con la comunidad en lnea anclada por su contenido y ofrecer una experiencia
de usuario consistente personalizada. Estos requisitos implican algn tipo de programa de ordenador se ejecuta en cada carga de pgina. As que
tambin podra llevar esto a su conclusin lgica y la fabricacin de cada URL en su aplicacin de la misma manera: de la escritura en el sistema de
archivos se ejecuta y tira de contenido desde el RDBMS.

Ejercicio 1
Desarrolla la ONU modelo de Datos para el contenido qu vas a Almacenar en tu sitio. Como Mnimo, tu repositorio de contenido Dbe Ser Capaz de
Manejar Foros de Discusin pues es Lo Que Vamos a Construir en Captulo Prximo ONU.
De Cuando Ests definiendo el modelo Preciso de las tablas SQL, van a aparecer preguntas Que Slo Puede del respondedor el cliente. Te vas a dar
Cuenta Que las Anteriores Discusiones con el cliente were Demasiado vagas en ALGUNAS reas. Esto Es Una Consecuencia naturales de contruir
ONU modelo de Datos SQL. Levanta El Telfono y llama un cliente Para Tu aclarar las Cosas. Email un Envale con Varios Escenarios Alternativos
en concreto. Acostumbra a tu cliente una estafa respondedor RAPIDEZ a las Consultas.
Muestra el BORRADOR del modelo de Datos a tu docente de Prcticas y Discute con Otros Estudiantes los antes de avanzar.

Cmo el problema de flujo de trabajo Surge


Es fcil de construir y mantener un sitio Web si
una persona es editor, escritor y programador
el sitio comprende slo unas pocas pginas
a nadie le importa si estas pocas pginas tienen un formato consistente
nadie se preocupa por recuperar versiones antiguas o averiguar cmo una versin lleg a ser la forma en que es
Afortunadamente para las empresas y programadores que esperan hacer una vida agradable de proporcionar gestin de contenidos "soluciones", las
condiciones anteriores rara vez obtienen en sitios Web mejor financiados. Lo que es ms tpico son las siguientes condiciones:
el trabajo se divide entre los editores, diseadores de informacin, diseadores grficos, autores y programadores
el sitio contiene miles de pginas
pginas deben ser coherentes dentro de las secciones y las secciones deben tener un tema unificador
control de versiones es crtica
El editor decide cules son las principales secciones de contenido disponible, cuando una seccin de contenido va en vivo, y la prominencia relativa
que se asignar a cada seccin de contenido.
El diseador decide qu informacin estn disponibles en todos los documentos en la pgina, la forma de presentar las secciones de contenido
disponibles enlaces de navegacin, y se requieren qu elementos de diseo grfico.
El diseador grfico contribuye dibujos, logotipos y otras obras de arte en el servicio de los objetivos del diseo de la informacin. El diseador
grfico tambin produce plantillas maqueta (archivos HTML estticas) en la que se utilizan estos elementos de las ilustraciones.
El programador construye plantillas de produccin y los programas de ordenador que reflejan las instrucciones del editor, diseador de informacin, y
diseador grfico.
Editores aprueban contenido y decidir cundo pginas especficas ir a vivir. Editores asignan importancia relativa entre las pginas de secciones.
En consonancia con su compensacin econmica relativa, consideramos las necesidades y contribuciones de autores segundo para durar. Autores
rellenan fragmentos de HTML, texto plano, fotografas, msica y sonido, en la base de datos. Estas entidades escritos sern vistos por los usuarios

En consonancia con su compensacin econmica relativa, consideramos las necesidades y contribuciones de autores segundo para durar. Autores
rellenan fragmentos de HTML, texto plano, fotografas, msica y sonido, en la base de datos. Estas entidades escritos sern vistos por los usuarios
nicamente a travs de las plantillas desarrolladas por los programadores.
A continuacin se muestra un flujo de trabajo de ejemplo que hemos utilizado para asignar a los estudiantes en el MIT:
Su "proyecto de prctica" ser un sistema de gestin de contenido para apoyar una gua a Boston, en la lnea de la Gua
de AOL City en http://home.digitalcity.com/boston/ . Usted tendr que producir un documento de diseo y una
implementacin prototipo. El prototipo de aplicacin debe ser capaz de soportar la situacin siguiente:
1.
2.
3.
4.
5.
6.

7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

inicie la sesin como editor y visitar / admin / content-secciones /


construir una seccin llamada "pelculas" en las pelculas /
construir una seccin llamada "comedor" en / comedor
construir una seccin llamada "noticias" en / noticias
cerrar sesin
inicie la sesin como diseador de informacin y visita / cm y especificar navegacin. Desde cualquier parte del
comedor, los lectores deben ser capaces de llegar al cine. De las pelculas, los lectores deben ser capaces de
llegar al comedor o las noticias.
cerrar sesin
inicie la sesin como programador y visitar / cm
hacer dos plantillas para la seccin de cine, uno llamado movie_review y uno llamado actor_profile; hacer una
plantilla para la seccin de comedor llamado Restaurant_Review
cerrar sesin
inicie la sesin como autor y visitar / cm
aadir dos reseas de pelculas y dos perfiles de actores a la seccin de pelculas y una revisin de su restaurante
favorito a la seccin de comedor
cerrar sesin
inicie la sesin como editor y visitar / cm
aprobar dos de las crticas de cine, uno de los perfiles de actores y la crtica del restaurante
cerrar sesin
sin necesidad de acceder (es decir, slo eres un internauta pblico regular ahora), visite la seccin de pelculas /
e, idealmente, debera ver que el contenido aprobado ha ido en directo
seguir un hiperenlace desde una resea de la pelcula a la seccin de comedor y tenga en cuenta que usted puede
encontrar su crtica del restaurante
inicie la sesin como autor y visitar / cm
editar la crtica del restaurante para reflejar un nuevo y emocionante postre
cerrar sesin
visite la seccin / comedor y tenga en cuenta que la versin antigua (aprobado) de la revisin restaurante es an
viven
inicie la sesin como editor y visitar / cm y aprobar el examen restaurante editado
cerrar sesin
visite la seccin / comedor y comprobar que se est sirviendo la nueva versin (con postre) de la revisin del
restaurante

Un problema de flujo de trabajo sin ningn trabajo


La seccin anterior trat el problema de apoyar al mundo editorial estndar. Usted sabe todos los autores. Ellos saben lo que tienen que escribir. En
una comunidad de aprendizaje en lnea, especialmente uno no comercial, el problema del flujo de trabajo se plantea antes de cualquier trabajo que se
ha hecho o asignado. Por ejemplo, supongamos que los editores detrs de la comunidad photo.net deciden que quieren los siguientes artculos:
Blanco y negro bsico cuarto oscuro fotografa
Cuarto oscuro Color bsico (de color negativo)
Hacer copias Ilfochrome
Hardcore grabado en blanco y negro
Grabados Platinum
Entre las 300.000 personas que visitan photo.net cada mes, seguro que hay gente capaz de escribir cada uno de los artculos anteriores. Queremos un
sistema en el que
1. Joe usuario puede firmar transaccionalmente para escribir "imprime Platinum", marcando as el artculo "la asignacin solicitada pendiente de
aprobacin editorial", el suministro de una breve resea y comprometerse a completar un proyecto antes del 1 de julio.
2. Jane Editor puede aprobar el esquema y el calendario, lo que genera un mensaje de alerta de nuevo a Joe.
3. Joe usuario recibe recordatorios por correo electrnico peridicos de lo que l ha firmado para hacer y para cundo.
4. Jane Editor es alertado cuando el primer borrador de Joe se present el 17 de julio (Joe es poco probable que sea el primer autor en la historia
del mundo a enviar el trabajo a tiempo).
5. Joe usuario recibe una alerta de correo electrnico para pedirle que revise la versin de Jane corregido y firmar su aprobacin.
6. El artculo de impresin de platino aparece en la parte superior de la pgina del rea de trabajo de Jane Editor como "firmado por el autor" y
hace clic para empujarlo en vivo.
Fjese en las complejidades del flujo de trabajo y tambin las idiosincrasias. The New York Times y el Boston Globe sacaron productos muy similares
a futuro. Son propiedad de la misma corporacin. Qu te parece lo ms probable es que el software que soporta el flujo de trabajo de un peridico
ser suficiente para apoyar los otros de?

Ejercicio 2
Dibuja el Flujo de Trabajo Para Cada tem de contenido prr Que Ser visible los Usuarios de Tu Comunidad de Aprendizaje en lnea. Cada Par paso
del Flujo de Trabajo Debes especificar: (1) Quin Tiene Que dar la aprobacion, (2) Cuales correos electrnicos de alerta Generar Que Hay, (3) Qu
Pasa Si Se da la aprobacion, y (4) Qu Pasa Si Se Deniega la aprobacion.
Ayuda: te recomendamos Que modeles el Flujo de Trabajo Como una Mquina de estados Finitos, en la cual sea Cada tem de contenido Florerias
Estar Solo En un estado en dado Momento un, Y Que ESE estado te diga Todo Lo Que Debes Saber Acerca del artculo. En otras Palabras, Tu
PUEDE software de Acciones a Tomar pecan Necesidad de Revisar Cuales were los estados por los Cuales Paso El article.

Control de versiones (por contenido)


Cualquier persona involucrada en la administracin y edicin de una comunidad de aprendizaje en lnea debe ser capaz para traer una versin antigua
de un elemento de contenido. Si un autor se queja de que se cay de un prrafo, los editores deben ser capaces de recuperar el primer borrador del
artculo del sistema de gestin de contenidos. Las versiones antiguas a veces son tiles para los usuarios pblicos tambin. Por ejemplo, en photo.net a
mediados de la dcada de 1990, tuvimos un montn de anuncios cuyas lneas sujetos eran de la forma "Reducido a $ 395!" Un cheque a travs de los
registros del servidor revel que el anuncio haba sido publicado ese mismo da con un precio de $ 400, a continuacin, editado unas horas ms tarde.
As que, tcnicamente, el asunto era cierto, pero era engaoso. En lugar de contratar administradores adicionales para notar este tipo de problemas,
hemos cambiado el software para almacenar todas las versiones anteriores de un anuncio clasificado. En la presentacin de un anuncio que haba sido
editado, los nuevos guiones ofrecieron un enlace para ver las versiones antiguas de su anuncio. La prctica de gritos "rebajado!" detenido.
El control de versiones se convierte en fundamental para la prevencin de la prdida de actualizaciones cuando las personas estn trabajando juntos.
As es como una actualizacin perdido puede suceder:
Ira agarra Versin A de un documento a las 9:00 am desde el sitio Web con el fin de corregir un error tipogrfico. l arregla a las 9:01 am, pero
se olvida de escribir el documento de nuevo al sitio Web.
Shoshana agarra Versin A a las 10:00 am y pasa seis horas la adicin de un captulo del texto, escrito de nuevo a las 4:00 pm (llamar a esta
versin B).
Ira da cuenta de que se olvid de escribir su correccin errata de vuelta al servidor y lo hace a las 5:00 pm (llamar a esta versin C).
Por desgracia, la versin C (la correccin errata) es lo que los futuros usuarios vern; todo el trabajo de Shoshana se desperdicia.
Los programadores y escritores tcnicos en grandes empresas estn familiarizados con el problema de cambios perdidos cuando varias personas estn
editando el mismo documento. Sistemas de control de versiones basadas en el sistema de archivos se han desarrollado para ayudar a coordinar
mltiples contribuyentes. Estos sistemas incluyen sistema original de Walter Tichy Revisin de Control (RCS; principios de 1980) Sistema de Brian
Berliner Concurrent Versions (CVS; 1986), Dick Grune y, y el Sistema de Control de Marc Rochkind Cdigo fuente (CCSC; 1972). Estos sistemas
requieren ms entrenamiento que es prctico para los usuarios ocasionales. Por ejemplo, los mandatos RCS explcita check-out y check-in. Mientras
que un archivo est desprotegido por el usuario A est bloqueado y nadie ms que el usuario A puede comprobar de nuevo en. Supongamos que un
usuario va a comer, pero hay una noticia importante que absolutamente se debe poner en el sitio. Qu pasa si el usuario A se va para unas vacaciones
de dos semanas y se olvida de revisar un montn de archivos de nuevo en? Estos problemas se pueden resolver en torno manualmente, pero se
convierte en un desafo cuando los colaboradores se encuentran en lados opuestos del planeta y no pueden ver "Oh, capa de Schlomo todava est en
el respaldo de la silla para que l an no ha dejado para el da."
Para autora distribuida de contenido web por los usuarios conectados casualmente distribuidos geogrficamente, el sistema ms prctico resulta ser
aquella en la que se permite el registro de entrada en cualquier momento por cualquier persona autorizada. Sin embargo, todas las versiones de todos
los documentos se guardan en la base de datos de manera que siempre se puede volver a una versin anterior o tirar de una seccin de una versin
anterior. Esto implica que el sistema de gestin de contenidos tendr una pista de auditora: un registro de valores pasados en poder de las
intersecciones fila-columna en una tabla de base de datos, que era responsable de los cambios en los valores, y cuando se cambian los valores.
Hay dos maneras clsicas para implementar una pista de auditora en un RDBMS. La primera es la creacin de tablas de auditora independientes, uno
para cada tabla de produccin. Cada vez que se realiza una actualizacin a una tabla de la produccin, la fila de edad se escribe en una tabla de
auditora, con una marca de tiempo. Esto se puede lograr de forma transparente a travs de RDBMS activa, que se describen en el captulo
"disparadores" de SQL para los empollones Web en http://philip.greenspun.com/sql/triggers y demostr en la prctica en un paquete de seguimiento
de auditora de cdigo abierto documentado en http://philip.greenspun.com/seia/examples-content-management/audit-acs-doc . El segundo enfoque
clsico es mantener informacin actual y archivada en la misma tabla. Esto es ms costoso en trminos de recursos informticos necesarios porque la
informacin que desea para el sitio en vivo se entremezcla con la informacin archivada rara vez recuperado. Pero es ms fcil si usted desea
programar en la capacidad de mostrar el sitio, ya que era un da en particular. Sus plantillas no tendrn que consultar una tabla diferente, simplemente
se necesita un diferente clusula WHERE.
Michael Stonebraker, profesor de la Universidad de California en Berkeley, analiz este problema alrededor de 1990 y decidi construir un RDBMS,
entre otras caractersticas avanzadas, soporte nativo para el control de versiones. Esto se convirti en el RDBMS de cdigo abierto PostgreSQL. El
PostgreSQL original tena un "no-sobrescritura arquitectura" en el que un cambio en una fila como resultado una nueva versin completa de esa fila se
escriben en el disco. As, la unidad de disco duro contena todas las versiones anteriores de cada fila de la tabla. Un programador podra select *
from content_table['epoch','1995-01-01'] ... para obtener todas las versiones desde el principio del tiempo ("poca") hasta el 1 de enero de
1995. Esta innovacin hecha para algunos artculos agradables en revistas acadmicas, pero el rendimiento de procesamiento de transacciones
execrable. El moderno PostgreSQL desech esta idea en favor del estilo de Oracle de escritura anticipada registro en el que slo las actualizaciones se
escriben en el disco duro (consulte la "escritura anticipada registro" captulo de la documentacin de PostgreSQL en http://www.postgresql.org
/docs/current/static/wal.html ).

Segunda Forma Normal


Supongamos que usted decide mantener varias versiones en una sola tabla repositorio de contenido:

create table content_raw (


clave content_id entero primaria,
varchar content_type (100) no es nulo,
referencias refers_to content_raw,
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
fecha release_time,
fecha expiration_time,
- Algunos de nuestro contenido es geogrficamente especfica
varchar zip_code (5),
- Muchos de nuestros lectores apreciarn versiones en espaol
Char lengua (2) referencias language_codes,
varchar mime_type (100) no es nulo,
varchar one_line_summary (200) no es nulo,
- Vamos a utilizar BLOB en caso de que este es un documento de Microsoft Word o JPEG
- Un BLOB tambin puede contener HTML o texto sin formato
blob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))
);

Si esta mesa eran para contener siete versiones de un artculo con un ID de contenido de 5.657 que violara la restriccin de clave primaria en la
content_id columna. Y si eliminamos la restriccin de clave primaria? En Oracle esto nos impide establecer restricciones de integridad referencial
que apuntan a esta identificacin. Sin restricciones de integridad, que va a correr el riesgo, por ejemplo, que nuestra base de datos contendr
comentarios sobre los elementos de contenido que se han eliminado. Con mltiples filas para cada elemento de contenido, nuestros punteros vuelven
ambiguos. La declaracin "Usuario 739 ha ledo el artculo 5.657" puntos de una fila especfica en el users tabla en un conjunto de filas de la
content_raw . Hay que tratar de ser ms especfico? Queremos un comentario en un artculo para referirse a una versin especfica de este artculo?
Queremos saber que un lector ha ledo una versin especfica de un artculo? Queremos saber que un editor ha aprobado una versin especfica de
un artculo? Eso depende.Para algunos propsitos, es probable que s queremos apuntar a una versin, por ejemplo, para su aprobacin, y en otras
ocasiones queremos sealar que el artculo en el resumen. Si aadimos un version_number columna, esto se convierte en relativamente sencillo.
create table content_raw (
- La combinacin de estos dos es la clave
entero content_id,
version_number nmero entero,
...
clave primaria (content_id, version_number)
);

Recuperacin de informacin para una versin especfica es fcil. Recuperacin de informacin que es el mismo a travs de mltiples versiones de un
elemento de contenido se convierte en torpe y requiere un GROUP BY, ya que queremos colapsar informacin de varias filas en un informe de una
fila:
- Tenga en cuenta el uso de MAX en la columna VARCHAR;

esto funciona muy bien

seleccione content_id, max (zip_code)


desde content_raw
donde content_id = 5657
grupo por content_id

No estamos realmente interesados en el cdigo postal ms grande para una versin de elemento de contenido particular. De hecho, a menos que se ha
producido algn tipo de error en nuestro cdigo de la aplicacin, se supone que todos los cdigos postales para mltiples versiones del mismo
elemento de contenido son los mismos. Sin embargo, GROUP BY es un mecanismo de colapso de informacin de mltiples filas. La lista SELECT
puede contener nombres de columna slo para aquellas columnas que estn siendo agrupados por. Cualquier otra cosa en la lista SELECT debe ser el
resultado de la agregacin de los mltiples valores para las columnas que no estn agrupados. Las opciones con la mayora de RDBMSes son bastante
limitadas: MAX, MIN, PROMEDIO, SUM. No hay ninguna funcin "elegir cualquier". As que usamos MAX.
Las actualizaciones son igualmente problemtico. El Servicio Postal de Estados Unidos vuelve a dibujar peridicamente los mapas de cdigo postal.
Actualizacin de una pieza de informacin, por ejemplo, "20016" a "20816", se toca ms de una fila por cada elemento de contenido.
Este modelo de datos est en Primera Forma Normal. Cada valor est disponible en la interseccin de un nombre de tabla, nombre de la columna, y la
clave (la clave principal compuesta de content_id y version_number ). Sin embargo, no est en Segunda forma normal, por lo que nuestras
consultas y actualizaciones aparecen extrao.
En Segunda forma normal, todas las columnas dependen funcionalmente de toda la clave. Menos formalmente, una segunda mesa de forma normal es
el que est en Primera Forma Normal con una clave que determina todos los valores de columna no clave. An menos formalmente, una mesa
Segunda forma normal contiene declaraciones acerca de un solo tipo de cosas.
Nuestro actual content_raw tabla contiene cierta informacin que depende de toda la clave del content_id y version_number , por ejemplo, el
cuerpo y el cdigo de idioma. Pero gran parte de la informacin depende slo de la content_id parte de la clave: autor, el tiempo de creacin, tiempo
de liberacin, cdigo postal.
Cuando necesitamos para almacenar declaraciones acerca de dos diferentes tipos de cosas, tiene sentido crear dos tablas diferentes, es decir, utilizar
Segunda Forma Formal:
- Cosas sobre un artculo que no cambia de una versin a
create table content_raw (
clave content_id entero primaria,
varchar content_type (100) no es nulo,
referencias refers_to content_raw,
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
fecha release_time,
fecha expiration_time,
varchar mime_type (100) no es nulo,
varchar zip_code (5)

varchar zip_code (5)


);
- Cosas acerca de una versin de un tema
crear content_versions mesa (
version_id clave entero primaria,
content_id no referencias nulas content_raw,
fecha version_date no nulo,
Char lengua (2) referencias language_codes,
varchar one_line_summary (200) no es nulo,
blob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado')),
- Auditar la persona que hizo el ltimo cambio de estado de editorial
usuarios referencias editor_id,
fecha editorial_status_date
);

Cmo una consulta en la tabla de versiones y encontrar la ltima versin? Un primer intento podra ser algo como lo siguiente:
select *
desde content_versions
donde content_id = 5657
y editorial_status = 'aprobado'
y version_date = (select max (version_date)
desde content_versions
donde content_id = 5657
y editorial_status = 'aprobado')

Esto garantiza que volver slo una fila? No!No hay ninguna restriccin nica en content_id, version_date . En teora, los dos editores o autores
podran presentar nuevas versiones de un artculo en el mismo segundo. Recuerde que la fecha de tipo de datos en Oracle es precisa slo para dentro
de un segundo. An ms probable es que un editor hace una revisin podra clic en un formulario de edicin botn de enviar dos veces con el ratn o
tal vez utilizar el comando Actualizar impaciencia. Aqu hay una leve mejora:
select *
desde content_versions
donde content_id = 5657
y editorial_status = 'aprobado'
y version_id = (select max (version_id)
desde content_versions
donde content_id = 5657
y editorial_status = 'aprobado')

El version_id columna est restringido nica, pero estamos confiando en el conocimiento tcito de nuestro cdigo de la aplicacin, es decir, que
version_id ser mayor para las versiones posteriores.
Algunas implementaciones RDBMS han extendido el lenguaje SQL para que pueda pedir la primera fila devuelta por una consulta. Un breve vistazo
al manual de Oracle llevara a tratar
select *
desde content_versions
donde content_id = 5657
y editorial_status = 'aprobado'
y rownum = 1
ordenado por desc version_date

pero una lectura ms profunda del manual revelara que el rownum pseudo-columna se establece antes de que se procese la clusula ORDER BY. Una
forma aceptada de hacer esto en una consulta es la SELECT anidado:
select *
desde (select *
desde content_versions
donde content_id = 5657
y editorial_status = 'aprobado'
ordenado por desc version_date)
donde rownum = 1;

Otro estilo comn de programacin en SQL que puede parecer sorprendente es tomar los siguientes pasos:
1. abrir un cursor para la instruccin SQL
select *
desde content_versions
donde content_id = 5657
y editorial_status = 'aprobado'
ordenado por desc version_date

2. se ha podido recuperar una fila desde el cursor (este ser el que tiene el valor mximo en version_date )
3. cerrar el cursor

Tercera Forma Normal


Un programador de eficiencia de mente podra mirar las consultas anteriores y observar que una versin contenido se actualiza a lo sumo diez veces
por ao, mientras que las pginas pblicas pueden ser la consulta y la entrega de la ltima versin de diez veces por segundo. No tendra ms sentido
para calcular y etiquetar la versin ms reciente aprobada en la insercin de tiempo / actualizacin?
crear content_versions mesa (
version_id clave entero primaria,
content_id no referencias nulas content_raw,
fecha version_date no nulo,
...
varchar editorial_status (30)

varchar editorial_status (30)


comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado')),
Char current_version_p (1) cheque (current_version_p en ('t', 'f')),
...
);

El nuevo current_version_p columna se puede mantener a travs de un disparador que se ejecuta despus de insercin o actualizacin y examina las
version_date y editorial_status columnas.
Consulta de pginas de usuario se puede simplificar con el siguiente punto de vista:
create view live_versions
como
select *
desde content_versions
donde current_version_p = 't';

Moderno implementaciones RDBMS comerciales ofrecen una funcin a travs de las filas de una tabla pueden propagarse a travs de diferentes
espacios de tablas, cada una de las cuales se encuentran en una unidad de disco separadas fsicamente. En Oracle, esto se conoce como particin :
crear content_versions mesa (
version_id clave entero primaria,
content_id no referencias nulas content_raw,
fecha version_date no nulo,
...
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado')),
Char current_version_p (1) cheque (current_version_p en ('t', 'f')),
...
)
particin por rango
(Current_version_p)
(Particin old_crud valores menores que 's'
slow_extra_disk_tablespace tablas
live_site particin valora menos (maxvalue)
fast_new_disk_tablespace espacio de tabla)
;

Todas las filas para el sitio en vivo se mantendrn juntos en bloques relativamente compactos. Aunque la relacin de las versiones antiguas de vivir
contenido es 99: 1 no afectar el rendimiento o la cantidad de RAM consumida para cachear bloques de base de datos desde el disco. Tan pronto
como Oracle ve una "DONDE CURRENT_VERSION_P =" clusula de que sabe que puede ignorar todo un espacio de tabla y no molestar a marcar
cualquiera de los bloques irrelevantes.
Hemos alcanzado el Nirvana? No de acuerdo con los cabezas de huevo de base de datos relacional, cuyo clculo frmulas no abrazar a factores tales
como la cantidad de datos se distribuyen entre las unidades de disco fsicas. El terico de base de datos tendra en cuenta que nuestro modelo de datos
est en Segunda forma normal, pero no en Tercera Forma Normal. En una tabla que forma parte de un modelo de datos Tercera Forma Normal, todas
las columnas dependen directamente de toda la clave. La columna current_version_p no es dependiente de la clave de la tabla, sino ms bien en
otras dos columnas sin clave ( editorial_status y version_date ). Programadores de SQL se refieren a este tipo de almacenamiento para mejorar
el rendimiento de derivable de datos como "desnormalizacin".
Si desea servir a diez millones de solicitudes por da directamente de un RDBMS se ejecuta en un servidor de la capacidad modesta, puede que tenga
que romper algunas reglas. Sin embargo, los modelos de datos de produccin ms mantenibles generalmente resultan de comenzar con Tercera Forma
Normal y aadiendo un puado de denormalizations modestos y prudentes que estn documentadas y justificadas.
Tenga en cuenta que cualquier modelo de datos en Tercera Forma Normal tambin est en Segunda Forma Normal. Un modelo de datos en la Segunda Forma Normal est en
Primera Forma Normal.

Control de versiones (para programas de ordenador)


Tenga en cuenta que una solucin al problema de control de versiones para el contenido del sitio (cosas en la base de datos) todava le deja, como
ingeniero, con el problema de control de versiones de los programas informticos que implementan el sitio. Estos son muy probablemente en el
sistema de archivos del sistema operativo y se editan por un puado de desarrolladores de software profesionales. Durante esta clase puede decidir
que no vale la pena el esfuerzo para configurar y utilizar el control de versiones, en cuyo caso el de facto del sistema de control de versiones se
convierte en cintas de respaldo, as que asegrate de que tienes copias de seguridad diarias. Sin embargo, en el largo plazo que necesita para aprender
acerca de enfoques para el control de versiones para el desarrollo de aplicaciones de Internet.
A lo largo de esta seccin, tenga en cuenta que un proyecto con un objetivo muy claro la publicacin, las especificaciones que nunca cambian, y un
desarrollador muy inteligente, no necesita el control de versiones. Un proyecto con objetivos cambiantes, el cambio de las especificaciones y las
mltiples contribuyentes necesita control de versiones.
Solucin clsica: una zona de desarrollo por desarrollador
Clsicamente, el control de versiones es utilizado por los desarrolladores de C con cada programador C trabajando desde su propio directorio. Esto
tiene sentido porque no hay persistencia en el mundo C. Cdigo se compila. A binarios carreras que construye estructuras de datos en la memoria
RAM. Cuando el programa termina, no deja nada atrs. El "rbol" de todo el software est desprotegido de un repositorio de control de versiones en el
sistema de archivos del equipo de desarrollo. Archivos modificados se comprueban de nuevo en el repositorio cuando el programador est satisfecho.
Una objecin superficial a este mtodo de desarrollo en el mundo de las aplicaciones de Internet, respaldado por la base de datos es que se vuelve
muy tedioso hacer un pequeo cambio. El programador controla el rbol en un servidor de desarrollo. El programador instala un RDBMS, a
continuacin, crea un usuario de RDBMS y un espacio de tabla. El programador exporta el RDBMS del lugar de produccin en un archivo de
volcado, las transferencias que vierten archivo a travs de la red a la mquina de desarrollo, y las importaciones en la instalacin de RDBMS en el

volcado, las transferencias que vierten archivo a travs de la red a la mquina de desarrollo, y las importaciones en la instalacin de RDBMS en el
servidor de desarrollo. Tenga en cuenta que para muchas aplicaciones de Internet la base de datos puede acercarse a un terabyte de tamao, por lo que
podra tardar horas o das para transferir e importar el archivo de volcado. Por ltimo, el programador se encuentra una direccin IP libre o puerto y
configura un servidor HTTP con raz en el rbol de desarrollo. Listo para codificar!
Una objecin ms profunda para la aplicacin de este mtodo de desarrollo en nuestro mundo es que es un obstculo para la colaboracin. En el
negocio de aplicaciones de Internet, los desarrolladores trabajan siempre con el editor y los usuarios. Esos colaboradores necesitan saber, en todo
momento, donde encontrar la versin ms reciente de funcionamiento del software para que puedan ofrecer crticas y consejos. Si hay diez
desarrolladores de software en un servicio que no es razonable pedir a los editores y los usuarios comprobar diez sitios de desarrollo diferentes.
Una solucin para Nuestros Tiempos
1. tres servidores HTTP (que pueden estar en un equipo fsico)
2. dos o tres usuarios RDBMS / tablespaces (que puede ser en un caso RDBMS)
3. repositorio de control de una de las versiones
Vamos a ir a travs de estos tem por tem.
Tema 1: Tres servidores HTTP
Supongamos que el objetivo general de un editor es servir una aplicacin de Internet accesible en "foobar.com". Esto requiere un servidor de
produccin, enraizada en el sistema de archivos en / web / foobar / ( Server 1 ). Es demasiado arriesgado tener programadores realizar cambios en el
sitio de produccin en vivo. Esto requiere un servidor de desarrollo, arraigado en / web / foobar-dev / ( Servidor 2 ). Tal vez esto es suficiente.
Cuando todo el mundo est contento con la forma en que el servidor dev est funcionando, declarar una congelacin de cdigo, probar un poco, a
continuacin, copie el cdigo dev hacia el directorio de produccin y reiniciar.
Qu pasa con el plan de dos servidores? Nada si los equipos de desarrollo y de prueba son el mismo, en cuyo caso no hay posibilidad de desarrollo y
prueba simultnea. Para un sitio complejo, sin embargo, el editor puede desear para pasar una semana de pruebas antes de lanzar una revisin. No es
aceptable a ralent autores y desarrolladores mientras que un puado de probadores golpea lejos en el servidor de desarrollo. La adicin de un servidor
de ensayo, con raz en / web / foobar-estadificacin / ( Server 3 ) permite el desarrollo de proceder mientras que los probadores estn preparando para
el lanzamiento pblico de una nueva versin.
He aqu cmo se utilizan los tres servidores:
1. desarrolladores trabajan continuamente en / web / foobar-dev /
2. cuando el editor es sobre todo contento con el sitio de desarrollo, se crea una versin o rama llamada e instalados en / web / foobar-puesta en
escena /
3. los probadores golpean lejos en el directorio / web / foobar-estadificacin / servidor, comprobando correcciones de nuevo en el repositorio de
control de versiones, pero slo en la rama de ensayo
4. cuando los probadores y editores firmar en el rendimiento del servidor de ensayo, el sitio se libera a / web / foobar / (produccin)
5. las correcciones hechas a la rama puesta en escena del cdigo que ya no se han fijado por el equipo de desarrollo se fusionan de nuevo en la
rama de desarrollo en el repositorio de control de versiones
Tema 2: Dos o tres usuarios RDBMS / Tablespaces
Supongamos que el editor tiene un centro de produccin de trabajo que ejecuta la versin 1.0 del software. Se podra conectar el servidor de
desarrollo enraizado en / web / foobar-dev / a la base de datos de produccin. Despus de todo, la razn de ser de la RDBMS es el control de
concurrencia. Ser feliz de manejar ocho conexiones simultneas desde un servidor Web de produccin, adems de dos o tres de un servidor de
desarrollo. La mosca en este ungento es que uno de los desarrolladores podran conseguir descuidado y escribir un programa que enva a los
usuarios de la tabla de la gota en lugar de caer mesa users_experimental_extra_table a la base de datos. O, menos dramtica, un
desarrollador junior, podra dejar de lado una clusula WHERE en una sentencia SQL y solicitar inadvertidamente un conjunto de resultados de 10 9
filas, lo que ralentiza el lugar de produccin.
As que parece que este editor necesitar al menos una nueva base de datos. Estos son los pasos:
1. crear un nuevo usuario de base de datos y tablas; si esto es en un equipo fsico separado de su produccin servidor RDBMS va a proteger el
rendimiento de su servidor de produccin de los ataques inadvertidos de denegacin de servicio por las sentencias SQL de desarrollo
descuidado
2. exportar la base de datos de produccin en un archivo del sistema de archivos, lo cual es una buena prctica peridica, en cualquier caso, ya que
verificar la integridad de la base de datos
3. importar la exportacin de base de datos en la nueva base de datos de desarrollo
4. cada vez que un desarrollador altera una tabla, aade una tabla, o rellena una tabla nueva, registrar la operacin en un archivo "patches.sql"
5. cuando est listo para mover el cdigo de puesta en escena de la produccin, aplicar apresuradamente todas las modificaciones de modelos de
datos de patches.sql a la produccin RDBMS
Debera haber tres bases de datos, es decir, uno para dev, uno para puesta en escena, y otra para la produccin? No necesariamente.A menos que uno
espera radical la evolucin del modelo de datos puede ser aceptable el uso de la misma base de datos para el desarrollo y puesta en escena. Tenga en
cuenta que la adicin de una columna a una tabla de base de datos relacional rara vez rompe consultas viejos. Este fue uno de los objetivos
establecidos por EF Codd en 1970 en "un modelo relacional de datos para grandes bancos de datos compartidos" (
http://www.acm.org/classics/nov95/toc.html ) e implementaciones duda modernas de el modelo relacional haber cumplido con las esperanzas de Codd
en este sentido.
Tema 3: Un Control Repository Versin

La funcin del repositorio de control de versin es


recuerde lo que todas las versiones anteriores controladas en un archivo de contenidos
mostrar la diferencia entre lo que est en un rbol desprotegido y lo que est en el repositorio
ayudar a fusionar cambios realizados simultneamente por varios autores que podran haber estado al tanto del trabajo de cada uno
grupo de una instantnea de versiones controladas en la actualidad de archivos como "Release 2.1" o "JuneIssue"
Un ejemplo de un sistema que cumpla con los requisitos anteriores es concurrente Versions System (CVS), que es gratuito y de cdigo abierto. CVS
utiliza un directorio nico sistema de archivos como su repositorio o "raz CVS". CVS puede ejecutar a travs de Internet para que el repositorio est
en el equipo A y el dev, puesta en escena, y los servidores prod son en equipos B, C y D. Como alternativa, puede ejecutar todo en los directorios del
sistema de archivos en un equipo fsico.
Cosas buenas sobre esta solucin
Vamos a resumir las cosas buenas sobre el control de versiones (para los programas de ordenador) solucin propuesta aqu:
si algo est chiflado con el servidor de produccin, se puede volver fcilmente a una versin ms conocida y probada del software
los programadores pueden proteger y comentar sus cambios marcando explcitamente archivos despus de cambios significativos
equipos de programadores y probadores pueden trabajar indepently
Ms informacin: Desarrollo de Cdigo Abierto con CVS (Fogel y Bar 2001; Coriolis), una parte del cual se encuentra disponible en lnea en
http://cvsbook.red-bean.com/cvsbook.html .

Ejercicio 3: Control de Versiones


ESCRIBE las respuestas a las preguntas Siguientes:
Cual es tu Sistema Para El Control De Versiones?
Cul es tu Sistema prrafo GESTIONAR las Versiones del software Que esta Detrs de tu Aplicacin, incluyendo El Modelo de Datos y los
guiones de pginas?
Qu tipo de Respuesta Puede del Producir tu system a la consulta: ? Quin es responsable por el contenido de this page visible al usuario
Debes Notar Que en general, la Mayora de los equipos van a Escribir Ms cdigo SQL prrafo Completar this exercise, Aumentando el modelo de
Datos Que construyeron en el Ejercicio 1.

Ejercicio 4: Implementacin esqueltica


Pon un funcionar las Pginas suficientes Como prr Que Un grupo de Usuarios Pueda COOPERAR prrafo Poner Unas Porciones de contenido en
vivo Sobre tu Servidor. Enfoca tus Esfuerzos en los Principales Tipos de contenido Generado por el publicador, los Contenidos Que esperas Que Haya
en tu comunidad de Aprendizaje en lnea. Para la Mayora de los Proyectos, this contenido consistir de Artculos y Las Pginas de navegacin Que
Llevan un OEN Artculos.
Despues Que Haya UNOS Cuantos Artculos Cargados, distancia toma y Responde las Siguientes preguntas:
Anda El Modelo de Datos?
Para Poner contenido en vivo, Toma UNA CANTIDAD RAZONABLE de clics?
La Gente que Necesita Aprobar el nuevo contenido, Tiene Alguna Manera sencilla de ver Qu es Lo Que Necesita APROBACION Y Que Es
Lo Que ya ha Sido Aprobado o rechazado? Esos Editores, Deben Regresar al sitio Cada Pocas horas y Revisar las novedades, o reciben alertas
por email de CUANDO contenido Aparece Que Requiere revisin?
Una Implementacin del esqueleto URLs Tener Dbe Estables Consistentes Y, EJEMPLO, por la page casa Dbe constar Slo del nombre del
anfitrin, y los Nombres de archivo Deben Ser Consistentes. Si no tiene Tenido La Oportunidad de Hacer funcionar las URLs Abstractas (mira en el
Captulo Elementos Bsicos), este es Un momento buen prrafo Hacerlo. Cada Dbe page ONU Tener ttulo descriptivo, Asi Funcionan
correctamente El Botn Atrs y los Marcadores (favoritos) del Navegador. Cada Dbe page Tener do ENLACE Ver Codigo Fuente en La
instancia de parte inferior Y UNA Manera de contactar a las Personas Responsables por el contenido y FUNCIONAMIENTO de la Misma. Se Dbe
Instalar ALGN Sistema consistente de navegacin (ver ms abajo tambin). La Apariencia y Comportamiento ( look and feel ) de la
Implementacin esqueltica Ser muy llana, Pero No Necesita Ser fea o inconsistente. Busca inspiracin en Cmo lo Hace Google, no en las Pginas
Personales de tus compaeros de la universidad.

Mira y siente
En este punto usted tiene algn contenido en su servidor. Por tanto, es posible comenzar a experimentar con el aspecto y la sensacin de las pginas
HTML. Un buen lugar para comenzar es con los siguientes temas:
espacio
hora
palabras
color
Espacio de la pantalla
En la dcada de 1960 un usuario de la computadora podra aprovechar un 1 / accin nmero 100 de un ordenador con 1 MB de memoria y capaz de
ejecutar milln de instrucciones por segundo, la visualizacin de los resultados en un monitor de 19 pulgadas. En 2005, un usuario de la computadora

ejecutar milln de instrucciones por segundo, la visualizacin de los resultados en un monitor de 19 pulgadas. En 2005, un usuario de la computadora
obtiene una parte completa de una computadora con 2000 MB de memoria (2 GB) y capaz de ejecutar 4000000000 instrucciones por segundo. Esto es
ms o menos una mejora de 400.000 veces en la capacidad de computacin disponible. Cmo ve nuestro moderno usuario de la computadora los
resultados de sus clculos? En un monitor de 19 pulgadas.
Los programadores de la mayora de las aplicaciones ya no necesitan preocuparse demasiado con el procesador y la memoria de eficiencia, que eran
obsesiones en la dcada de 1960. CPU y la RAM estn disponibles en abundancia. Pero el espacio en pantalla es tan preciosa como siempre. Mire sus
diseos de pgina. Es la informacin ms importante disponible sin necesidad de desplazarse? (En el negocio de los peridicos, el trmino para esto
es "por encima del pliegue".) Usted est haciendo el mejor uso del espacio de la pantalla que usted tiene? Existen grandes extensiones de espacio
vaco en la pgina? Podra ser el uso de tablas HTML para presentar dos o tres columnas de informacin al mismo tiempo?
Uno de residuos particularmente atroz de espacio en la pantalla es el uso de iconos. Por lo general, los usuarios no pueden entender lo que significan
los iconos por lo que necesitan ser complementados con la anotacin lenguaje sencillo. En general, la mejor poltica es dejar que la informacin sea
la interfaz , por ejemplo, mostrar una lista de categoras de artculos (la informacin), donde al hacer clic en una categora es la manera de navegar a
una pgina que muestra artculos dentro de esa categora.
Hora
La mayora de la gente prefiere rpido a lento. La mayora de la gente prefiere el tiempo de servicio consistente en cuando el servicio inconsistente.
Estos dos preferencias contribuyen sustancialmente a la popularidad de los restaurantes McDonald de todo el mundo. Cuando las personas se hacen
con su almuerzo traen esas mismas preferencias a las aplicaciones informticas: rpido es mejor que lento; tiempo de respuesta debe ser consistente
de una sesin a otra.
Velocidades de ordenador y de la red va a cambiar con los aos, pero los seres humanos van a evolucionar mucho ms lentamente. Por lo tanto
debemos empezar por considerar los lmites derivados de la humanidad de nuestros usuarios. Los psiclogos experimentales nos dirn que la memoria
a corto plazo es bueno para recordar slo unos siete cosas a la vez ("El nmero mgico siete, ms o menos dos: algunos lmites en nuestra capacidad
de procesamiento de informacin", George A. Miller, The Psychological Revisin de 1956, 63: 81-97; http://www.well.com/user/smalin/miller.html )
y que esta memoria es bueno para unos veinte segundos. Por tanto, es aconsejable construir cualquier aplicacin informtica en la que los usuarios
deben recordar demasiado de una pgina a otra. Tambin es prudente construir cualquier aplicacin informtica, donde la demora Interpage es ms de
veinte segundos. La gente podra olvidar lo que la tarea que estaban tratando de lograr!
IBM Corporation llev a cabo algunos estudios en torno a 1970 y descubri los siguientes tiempos de respuesta requeridos ordenador:
0,1 segundos para la manipulacin directa, por ejemplo, los objetos en movimiento alrededor en una pantalla con un puntero
1 segundo para obtener la mxima productividad en sistemas clic de pantalla pantalla, como tenan en el terminal IBM 3270 en 1970 y tenemos
en la Web en 2005
menos de 10 segundos para mantener la atencin de un usuario; cuando los tiempos de respuesta a extenderse ms all de 10 segundos los
usuarios podran tratar de involucrarse en otra tarea, como la lectura de una revista, y al mismo tiempo el uso de la aplicacin informtica
Una meta razonable para esforzarse en una aplicacin de Internet es inferior al segundo tiempo de respuesta. Este objetivo se basa en parte en la
investigacin de IBM, en parte por la incapacidad de lograr (en 2005) la marca de 0,1 segundos en el que la manipulacin directa se hace posible, y en
parte de lo que est siendo alcanzada por los mejores profesionales. Sus usuarios han utilizado Amazon y Yahoo! y eBay. Cualquier servicio que es
ms lenta que esto va a sonar las alarmas en la mente del usuario: puede que este sitio va a fracasar por completo? Tal vez debera tratar de encontrar
un sitio competitivo que hace el mismo trabajo, pero es ms rpido?
Un factor que afecta el tiempo de carga de la pgina es el ancho de banda de extremo a extremo entre el servidor y el usuario. No se puede hacer
mucho sobre esto, excepto la medida y media. Algunos servidores Web pueden configurarse o reprogramados para registrar el tiempo total empleado
que sirve una pgina. Al mirar a los tiempos pasados que sirve grandes fotografas, por ejemplo, se puede inferir ancho de banda promedio disponible
entre el servidor y los usuarios. Si los usuarios dcimo percentil estn recibiendo 50 Kbits por segundo, usted sabe que, incluso si su servidor fuera
infinitamente rpido de preparar pginas, usted debe tratar de asegurarse de que sus pginas, con grficos, son o no mayor de 50 Kbits de tamao o
que el HTML est diseado de tal manera que la pgina se rinden de forma incremental. (Una pgina que es una mesa grande es malo; una pgina en
la que las imgenes tienen anchura y etiquetas ALTURA es bueno porque el texto se rindi inmediatamente con espacios en blanco que se llenarn
gradualmente de que las imgenes se cargan.)
Puede verificar sus decisiones sobre el diseo de pgina y pesadez grficos comparando sus pginas a las de los operadores de servicios de Internet
ms exitosos como eBay, Yahoo !, y Amazon.
Recuerde que en el mundo del libro y la revista cada pgina se carga de diseo a la misma velocidad, lo que significa que el diseo de la pgina es
sobre todo una cuestin de esttica. En el mundo de Internet diseo de la pgina y la velocidad de aplicacin estn inextricablemente vinculados, lo
que hace que el diseo de pginas un problema de ingeniera.
Palabras
Como programador, hay dos tipos de texto que se va a guardar en los servicios que usted construye: instrucciones y mensajes de error.
Para obtener instrucciones, puede elegir la voz activa o pasiva y primera, segunda o tercera persona. Las instrucciones deben ser segundo imperativo
persona. Dejar de lado los pronombres, por ejemplo, "Enter fecha de salida" en lugar de "Enter su fecha de salida".
A menudo se puede construir un sistema de tal manera que los mensajes de error son innecesarios. Los mejores interfaces de usuario son aquellos en
los que el usuario no puede cometer un error. Por ejemplo, supongamos que una aplicacin necesita para solicitar una cita. Se podra hacer esto con un
cuadro de entrada de texto en blanco y ninguna pista, esperando que el usuario escriba DD / MM / AAAA, por ejemplo, 09/28/1963 para 28 de
septiembre de 1963. Si la entrada del usuario no coincide con este patrn o la fecha no exista, por ejemplo, 02/30/2002, la aplicacin devuelve una
pgina que explica los requisitos. Una pequea mejora sera aadir una nota al lado del cuadro: "MM / DD / AAAA". Si los registros de aplicacin
mostraron que el nmero de pginas de error servido fue reducido, pero no eliminado, tal vez el impago del cuadro de entrada de texto a la fecha de

mostraron que el nmero de pginas de error servido fue reducido, pero no eliminado, tal vez el impago del cuadro de entrada de texto a la fecha de
hoy en el formato / DD / AAAA MM sera mejor. Surf a su sitio de viajes favorita, sin embargo, y usted probablemente encontrar que han elegido
"ninguna de las anteriores". Se les pide a los usuarios a elegir una fecha de un widget de calendario JavaScript o tirar hacia abajo el mes y el da de los
mens HTML.
Malo

Fecha:

Mejor

Fecha (DD / MM / AAAA) :

Mejor

Fecha:

Enero

01

2005

Figura 6.1: Diferentes formas de preguntar al usuario especificar una fecha. Generalmente lo mejor es preguntar de tal manera que el usuario no
puede cometer un error y requerir el cumplimiento de una pgina de error de lectura "la fecha no formateado correctamente", "fecha no vlida", o "la
fecha en el pasado".
Lamentablemente, usted no ser capaz de eliminar la necesidad de que todos los mensajes de error. As que tendrs que hacer una eleccin entre
cortante o verbosa y entre flojo o energtico. Un sistema perezoso responder "error de sintaxis" a cualquier entrada de usuario que no va a funcionar.
Un sistema energtico tratar de Autocorreccin entrada del usuario o al menos entender lo que es probable que sea mal.
Los estudios han demostrado que vale la pena desarrollar pginas de control de errores sofisticados, por ejemplo, los que corrigen la entrada del
usuario y sirven a una pgina de confirmacin. Por lo menos, vale la pena correr algunas expresiones regulares contra la entrada infractor del usuario
para ver si sus defectos caen en un patrn comn que se puede explicar en una pgina de error. Lo mejor es evitar el antropomorfismo, el equipo no
debe decir "Yo no entenda lo que ha escrito".
Color
"El mundo natural es demasiado verde y mal
El texto es ms legible cuando est negro sobre un fondo blanco o blanquecino. Lo mejor es evitar el uso del
iluminado"
color como parte de su interfaz con la excepcin de la pervivencia de convenciones como "texto azul =
- Francois Boucher, pintor del siglo 18
hipervnculo; texto prpura = hipervnculo visitado". Si limita su creatividad para <body bgcolor = texto
blanco negro => , el navegador tratar sus usuarios amablemente con familiares colores de enlace. Por este uso moderado de color en su interfaz que
tendr la mayor parte del espectro de colores disponibles para la presentacin de informacin: cuadros, grficos, fotos. Comparar
www.britneyspears.com y http://britneyspears.ac/physics/basics/basics.htm , por ejemplo, para ver estos principios en el trabajo.

S un poco cuidadoso con tonos grises medianas en la parte superior de las pginas Web. Muchos navegadores web utilizan varios tonos de gris para
los fondos de las barras de mens y botones en la parte superior de las ventanas. Si una pgina Web tiene un rea gris slido en la parte superior, un
usuario puede tener problemas para distinguir en el software del navegador termina y comienza el contenido de la pgina. Tenga en cuenta que las
pginas de Yahoo! y Amazon incluyen un poco de espacio en blanco adicional en la parte superior para separar su contenido de la pgina desde la
ubicacin del navegador y barras de mens.
Cualquiera que sea plan que elija, mantenerlo sitio en todo consistente. En 1876 el MIT acord cardenal y gris para los colores de la escuela. Vea
cmo el acuerdo se mantiene visitando www.mit.edu , haga clic en "Administracin" y luego ver las subsedes de cuatro departamentos: ES, mdica,
Arte, Servicio de Discapacidad.
Para una excelente discusin sobre el uso del color, consulte Macintosh Human Interface Guidelines , disponible en lnea en
http://developer.apple.com/documentation/mac/HIGuidelines/HIGuidelines-2.html . Bsicamente los mensajes son los siguientes: (1) utilizar el color
con moderacin, (2) asegurarse de que una persona daltnica puede hacer pleno uso de la aplicacin, y (3) evitar el rojo debido a su asociacin con las
alertas y peligro.

Navegacin
Al igual que con el diseo de pginas, la mejor estrategia para la navegacin es copiar las aplicaciones de Internet de mayor xito y, por tanto
familiares a-sus usuarios. Las mejores prcticas para una casa de pginas web alrededor del ao 2005 parece reducirse a los siguientes elementos:
1.
2.
3.
4.

un directorio de navegacin para el resto del sitio


noticias y eventos
un solo cuadro de entrada de texto para bsqueda en todo el sitio
una forma rpida dirigido el servicio ms solicitado con frecuencia en el sitio, por ejemplo, en un sitio de la aerolnea, un rpido buscador de
tarifas / horario con entradas de formulario para las ciudades y fechas

En la construccin de la gua de navegacin, mira www.yahoo.com . Tenga en cuenta que Yahoo! no utiliza iconos para la categora de navegacin.
Para llegar a la categora de fotografa, debajo de Artes y Humanidades, hace clic en la palabra "fotografa". La informacin es la interfaz. Este
principio se articula en clsicos de Edward Tufte Explicaciones Visuales (Graphics Press, 1997). Tufte seala que si usted tuviera iconos tambin
necesitara una explicacin de texto debajo. Por qu no dejar que el texto solo sea la interfaz? Tufte tambin argumenta a favor de la presentacin
amplia y plana de la informacin; un usuario no debera tener que hacer clic a travs de ocho pantallas, cada una con slo un puado de opciones.
En las pginas interiores, es importante responder a las siguientes preguntas:
Dnde estoy?
Dnde he estado?
Donde puedo ir?
Para responder a "Dnde estoy?" en relacin con otros sitios en la Internet, puede incluir un logotipo o grfico distinguido font-nombre del sitio en la
esquina superior izquierda de cada pgina, hipervnculos a la home-page sitio. Ver las pginas interiores en amazon.com para cmo funciona esto.
Para responder a "Dnde estoy?" con relacin a otras pginas en el mismo sitio, puede incluir un mapa del sitio con la pgina actual resaltado. En un

Para responder a "Dnde estoy?" con relacin a otras pginas en el mismo sitio, puede incluir un mapa del sitio con la pgina actual resaltado. En un
sitio complejo, esto no va a escalar muy bien: mejor utilizar la barra de navegacin al estilo de Yahoo, tambin conocido como "camino jerrquico" o
"migas de pan". Por ejemplo, http://dir.yahoo.com/Arts/Visual_Arts/Photography/Panoramic/ contiene la siguiente barra de navegacin:
Inicio> Artes> Artes visuales> Fotografa> Panormica
Tenga en cuenta que este bar crece en tamao como O [log N] donde N es el nmero de pginas en el sitio. Mostrando un mapa del sitio completo o
pestaas superiores resultados en el crecimiento lineal.
Para responder a "Dnde he estado?", Empezar por no dar instrucciones al navegador para cambiar los colores de enlace estndar. El usuario por lo
tanto ser desencadenado por el navegador de los enlaces que ya han sido visitados. Si usted tiene cuidado con su programacin y en consonancia con
sus ttulos de pgina, el usuario podr hacer clic derecho sobre el botn Atrs y opcionalmente volver a ningn lugar anterior en su servicio. Nota
adems que la barra de navegacin de estilo Yahoo es eficaz en responder "Dnde he estado?" para los usuarios que se han hecho clic desde la
pgina principal.
Para responder a "Dnde puedo ir?" que necesita ... enlaces! Deje que el navegador por defecto de colores estndar para que los usuarios percibirn
los enlaces como enlaces. Por lo general es una mala idea usar vuelcos, seleccione cajas o grficos. Estos controles no funcionan de la misma a partir
de un sitio a otro y por lo tanto los usuarios pueden no entender cmo usarlos. Estos controles no tienen la propiedad de que visitaron enlaces dan
vuelta a un color diferente; por lo general, no pueden o no aprovechar base de datos de la historia del navegador. Por ltimo, estos controles no son
efectivos para mostrar al usuario dnde l o ella puede ir porque muchas de las opciones se ocultan.

Ejercicio 5: Revisin Crtica


Fecha Una vuelta por los OTROS PROYECTOS Que tus compaeros de Otros Grupos estan Construyendo en la clase. Para Cada Proyecto,
Asegrate de familiarizarte con los Objetivos hgenerales del servicio y el modelo de Datos. LUEGO regstrate Como usuario y ESCRIBE article un.
(S se trabas en Alguno de Ests Pasos, contacta a Los Miembros del Equipo Desarrollador por telefono o correo electrnico y pdeles Que agreguen
enlaces o Pistas un Servidor Do.)
En conjunto con los Miembros de tu equipo, ESCRIBE Una Crtica en texto plano de Cada Proyecto Que revisa. Busca El caso de Situaciones Donde
los Requerimientos del cliente, Tal Como Aparecen expresados en las soluciones de los Ejercicios de Planificacin, no pueden satisfacerse Mediante
el modelo de Datos que ves. Busca Oportunidades prr dar Criticas constructivas. Recuerda compaeros Tus Que de ninguna clase NECESITAN
impulso prr ONU su autoestima, Lo Que NECESITAN es el beneficio de tus Habilidades de ingeniera.
A Continuacin se muestran ciertas reas Donde Ser Ms Fcil Encontrar Mejoras prrafo sugerir:
Flujo de pginas en la Registracin de Usuarios y en la escritura de artculos- Se Puede Reducir la Cantidad de clics Necesarios prrafo
Completar la Tarea?
Apariencia, Comportamiento y Navegacin, referidas a los standards esbozados con anterioridad
Control de Versiones y traza de auditora
Dnde se ubican / Dnde deberian ubicarse los Archivos adjuntos ( attachments ), por EJEMPLO, Hay Un Lugar Donde Almacenar Una
fotografa en formato JPEG adosada una dobre comentario article un un?
Pistas De categorizacin y Presentacin - Se Puede PRESENTAR el contenido Dentro De Una clara arquitectura de la Informacin?
Existe Un lugar para Almacenar las key words ?, por EJEMPLO, las Colecciones de palabras elegidas a mano Que se asocian con la ONU
tem de contenido (Para Ayudar en la bsqueda textual)
Se Puede Almacenar en el Repositorio Un tipo de dato arbitrario ?, por Ejemplo, video Un, segmento de la ONU de audio, o Una fotografa.
Firma la Crtica con el nombre de tu equipo de proyecto y tambin con el nombre de Cada Miembro del Equipo.
Enva por correo electrnico tu Critica a Los Desarrolladores Cuyo Trabajo revisaste. Archiva AEE Criticas En un archivo y hazla pblica en http:
//yourservername/doc/critiques/cm-sent.txt. Consulta tu bandeja de entrada to read las Criticas de tu Proyecto Que Vienen del resto de la clase.
Ensambla las Criticas Que recibas En un nico archivo y hazlo available in La Direccin http: //yourservername/doc/critiques/cm-received.txt

Arquitectura de la informacin: implcita o explcita?


Supongamos que hay 1.000 elementos de contenido en un sitio. La manera de organizar, el etiquetado y la presentacin de estas 1.000 artculos a un
usuario se le conoce como la arquitectura de la informacin del sitio. En aras de la simplicidad, vamos a empezar por el supuesto de que estaremos
presentando todos los 1.000 artculos en una sola pgina. En aras de la concrecin, vamos a suponer que todo el contenido est relacionado con la
fotografa. Incluso esta degenerada experiencia del usuario de una pgina requiere algunas decisiones de arquitectura de la informacin. Aqu hay
algunas posibilidades:
Ordenar del ms reciente al ms antiguo (bueno para los usuarios con experiencia)
especie de mayor calidad con la calidad ms baja (podra ser bueno para los usuarios de primera vez)
clasificar por lo que est delante de la cmara y presentar los elementos separados por subheadlines, por ejemplo, "retratos", "Arquitectura",
"boda", "Familia", "Animales"
clasificar por tipo de cmara utilizada y los elementos presentes separadas por subheadlines como "punto digital y disparar", "Digital SLR",
"punto de 35mm y disparar", "35mm SLR", "Format Media", "gran formato"
Decisiones de arquitectura de informacin tienen un fuerte efecto sobre el porcentaje de usuarios que dicen "Tengo mi cuestionado respond." La
mayora de los estudios de los sitios Web corporativos, todos los cuales deben su forma probada a cientos de miles de dlares en el trabajo de diseo,
encontrar que los usuarios tienen menos de un 50 por ciento de encontrar la respuesta a preguntas que son, de hecho, responsables de los documentos
presentes en el sitio. Rehicimos la arquitectura de la informacin en el sitio photo.net, un cambio que toc slo seis pginas de nivel superior, y el
nmero de nuevos usuarios se registran cada da duplicado.
Una de las razones que la arquitectura de la informacin en un sitio tpico es tan inadecuada para el usuario es que la arquitectura est implcita en
scripts y pginas HTML. Para probar una alternativa implicara caros mano manipulacin de programas de ordenador y el formato HTML. Ofrecer un

scripts y pginas HTML. Para probar una alternativa implicara caros mano manipulacin de programas de ordenador y el formato HTML. Ofrecer un
usuario individual o clase de usuario una arquitectura de la informacin personalizada sera imposible.
Qu pasa si representamos arquitectura de la informacin de forma explcita en las tablas de base de datos? Estas tablas se mantenga la siguiente
informacin:
informacin sobre arquitecturas de informacin: que los hicieron, cundo, cules son actuales y para quin
si los elementos debajo de una categora o subcategora, dentro de una arquitectura de la informacin dada (IA), debe presentarse en lnea en
una pgina o simplemente se resume con enlaces a pginas separadas para cada elemento
donde un elemento de contenido cabe en un IA dado: lo subcategora (categora se puede deducir de la subcategora), qu orden ("especie
clave") presentacin en comparacin con otros elementos del mismo nivel
cmo se deben describir un elemento de contenido o categora
Con una gran parte de la experiencia del usuario impulsada a partir de tablas de bases de datos, poniendo a prueba una alternativa es tan fcil como
insertar algunas filas en la base de datos de las pginas de administracin de la arquitectura de la informacin. Si durante la gente de
conceptualizacin de un sitio no pueden ponerse de acuerdo sobre la mejor categorizacin de contenido, es posible poner en marcha con dos
alternativas. La mitad de los usuarios ven IA 1 y media del mar IA 2. Si los usuarios que han experimentado IA 1 tienen ms probabilidades de dar de
alta y regresar, podemos suponer que IA 1 es superior, al menos para los usuarios de primera vez.
Para la aplicacin que se genera en este curso, es aceptable tomar el camino expediente de golpear a cabo secuencias de comandos con una
arquitectura de la informacin implcita. Sin embargo, nos gustara que usted sea consciente de la energa para el desarrollo y las pruebas que se
pueden obtener a partir de una arquitectura de la informacin explcita.

Ejercicio 6: La Sensacin de estar es la USO


El prototipo esqueltico TIENE UNA gran limitante: es esqueleto ONU. Mejora la gestin de contenidos, incorporando la realimentacin de tus
compaeros de clase (del Ejercicio 5) y de los Instructores, ya la Vez, instila Suficiente contenido de Como prrafo que tu application del tenga Una
Sensacin de estar es la USO. Esto! Asegurar que tu system es lo suficientemente Poderoso Como prr Manejar las Necesidades Bsicas de los
Usuarios.
Si tu cliente Dispone de Un Sitio existente, salo Como fuente de contenido y Requerimientos Mnimos. Tambin Puedes ONU par de sitios Que
Tengan Organizaciones estafadores Misiones Y TAMAOS comparables mirar. EJEMPLO Por, si Ests Construyendo algo ONU para grupo
Acadmico, mirar PUEDES el sitio Web del departamento de Biologa Molecular y Celular de la Universidad de Harvard en
http://www.mcb.harvard.edu/ . Este sitio Ilustra los Requerimientos Bsicos de la ONU prrafo sitio Web De Una Organizacin de Tamao medio. La
section visin general describir las Metas y La historia del departamento. La section noticias Ofrece las gacetillas de prensa. La section
facultad Explica Quin Trabaja Alli y Cuales especialidades hijo sus. : Adems del heno Secciones Estudiantes prr prospectivos de grado y
Graduados, o mar, los Clientes potenciales of this organization. Si Ests Construyendo Tu Proyecto UNA ORGANIZACION prrafo Pequea multas
pecado de Lucro, mira el sitio web de Cosecha sustentable (Cosecha Sostenible www.sustainableharvest.org ) y la Asociacin Surea de
Rescate de Animales (Asociacin de Rescate de Animales del Sur www.sarasanctuary.org ). Si Ests Trabajando Para Una Pequea Compaa
fabril, mira www.cirrusdesign.com , el Web site de Cirrus Design Corporation Una fbrica de Pequeas Aeronaves de Duluth, Minnesota.
Que hacer si no te encuentras una Tarea Tiempo con tu Completar cliente prr tu? Que hacer si No Puedes Obtener contenido de tu cliente? EE.UU.
contenido de su sitio ya existente o de Un Sitio operado Por Una organization similar. Asegrate Que Como Mnimo heno Una Sensacin de estar es
la USO PARA UN Que lector Llega Y mira en las Secciones Acerca de, Novedades, y Contctenos. Durante el resto del Curso Vas A Tener La
Oportunidad de reemplazar el contenido inventado con contenido proveniente de tu cliente.
Florerias Que los antes de embarcarte en this Ejercicio quieras leer al Menos la section de Como Separar los Diseadores de los Programadores
Que habla de Plantillas en el Captulo Modularidad del software .

Ejercicio 7: aprobacion del cliente


Pide a tu cliente Que se registre Como usuario y pruebe el sitio en vivo. La Mayora de las Personas Tiene Dificultad prrafo Disear la de la estafa
page in blanco. Vas a Obtener Nuevos y Diferentes puntos de vista CUANDO Ahora les muestres El Sitio parcialmente Terminado, Comparado con
Los Que Tenia al comienzo del Proyecto.
Registra las respuestas de tu cliente a las Siguientes preguntas:
1. Qu Cambios te gustaria ver en el Plan, Ahora Que ha probado El prototipo?
2. Rpido Cul Ser el Modo Ms Rpido prr llenar this sitiop con contenido real?
3. La Cantidad de informacin Que se recolecta Cuando Se Registra el usuario, es correcta del?

PRESENTAR COMO TU Trabajo


Si Ests Anotado En un Curso Que EE.UU. this libro de texto, a te van altura this un Solicitar Que des Una Presentacin de cuatro minutes Sobre tu
Trabajo en el Sistema de Gestin de Contenidos y la Implementacin esqueltica del sitio.
Minutos Cuatro no es mucho, As qu vas a necesitar ensayar y Cada Miembro del Equipo Dbe sable exactamente Lo Que le toca Hacer. Como regla
general la Persona que habla Dbe dirigirse a la audiencia, no escribendo Estar en la Computadora. El Miembro del Equipo A habla, el Miembro B
Maneja. Tal Vez En algn punto de la Presentacin pueden intercambiarse, but Nadie Est Hablando ya la Vez Manejando la Computadora.
Abre la Presentacin con Una descripcion de ascensor, o mar, la clase de Explicacin de treinta Segundos Que le Darias un Durante alguien Un
viaje en el ascensor. La Descripcin Dbe explicar rpido Cul Problema Ests Resolviendo y porqu tu Sistema Ser Mejor Que los Mecanismos del
ya existentes Disponibles Para Las Personas.
Crea uno o mas Usuarios de antemano, Asi no need Mostrar las Pginas de Registracin. Todo El Mundo Que ha USADO hijo Como conoce a

Crea uno o mas Usuarios de antemano, Asi no need Mostrar las Pginas de Registracin. Todo El Mundo Que ha USADO hijo Como conoce a
Internet las Pginas de Registracin. Todos suponen Que ha Copiado las Mejores Prcticas de amazon.com y Otros este sitios populares. Si las
copiaste, la audiencia se aburrir. Si no las copiaste, se horrorizarn por tu dejadez. En CUALQUIERA de los Casos, es mejor ingresar Usando
usuario ONU ya Registrado. De Hecho, ALGUNAS Veces PUEDES Arreglar DOS Las cosas Para Que Haya Navegadores, EJEMPLO por Mozilla y
MSIE, en Uno De Los Cuales ya tiene ingresado Como un usuario nuevo del sitio y en El Otro Como administrador del sitio u Otro rol Que quieras
demostrar.
Es Mejor Que no te refieras a los Usuarios Durante la charla. Estados Unidos Los Nombres de los roles Lo. Si, por EJEMPLO, Ests armando
ONU servicio Sobre los Flights, PUEDES Decir Un estudiante de piloto ingresa [tu compaero ingresa], ONU ENCUENTRA article Sobre escuelas
de vuelo en San francisco [tu compaero Navega Hasta ESE article], y ESCRIBE ONU comentario Sobre lo Mucho Que le gust this instructor en
concreto . LUEGO Tal Vez pueden intercambiar Posiciones y tu compero se Adelanta y dados El editor del sitio [te cambias de Navegador al Que
usaste prrafo ingresar Como administrador], haga clic en la page Hace de nuevo contenido [haces click], he contenido Que Hay de Nuevo pendiente
de aprobacion, heces this del estudiante de piloto y lo haces click Aprueba [] . Retornas al Navegador Que Muestra La page pblica Donde Se Puede
ver Que El comentario Aparece en el site in vivo.
Cierra la Presentacin estacionando el Navegador en Una Pagina Que muestre Toda La Estructura Posible generales del sitio. No te desesperes si no
pudiste Mostrar TODAS LAS Caractersticas Que construiste. Las Aplicaciones de computadora estan definidas por las Tareas Que Nos permiten
Realizar. Si lograste que tu audiencia crea Que Ser Fcil Realizar Unas Pocas Tareas claramente Importantes, les habrs infundido confianza.

Ejercicio 8 (prr el instructor)


Llama A Cada cliente de los equipos y con PREGUNTA Cuanto nfasis estan de Acuerdo en las Siguientes frases:
1. Yo Creo Que Mi Equipo de Estudiantes Comprende Mi Problema.
2. Comprendo Lo Que mi equipo de Estudiantes this Planeando y lograr v prr CUNDO lo va a Tener listo, En Cada Caso hasta el final de Este
Curso.
3. Mi equipo de Estudiantes Viene busque Preparado una Nuestras Reuniones.
4. Mi Equipo de Estudiantes da respuestas prontas.
5. Yo creo Que El Sistema de Gestin de Contenidos Que ha construdo mi equipo de Estudiantes Ser ADECUADO prrafo admitir los Tipos de
Documentos en mi sitio y el Flujo de Trabajo Que se Requiere prrafo Publicar organismos europeos de normalizacin en documentos.
6. Yo que creo Fcil Resultados de la Bsqueda Registrarse prr ONU usuario en mi sitio, Recuperar su Contrasea Si La perdio, y Que se les
Solicita Toda La Informacin Requerida personal.
7. Me gustan las paginas de Administracin de Usuarios Que construy Mi Equipo de Estudiantes.
8. Mi equipo de Estudiantes ha Hecho que me resulte Fcil verificar su progreso en el Desarrollo por mi mismo.
9. Mi equipo de Estudiantes yo Mantiene bien Informado de progreso Do.
10. Estoy impresionado por la claridad y completitud de la Documentacin Que se ha Preparado Hasta el Momento.
El puntaje of this Ejercicio se Calcula acumulando los puntos de Cada PREGUNTA: 0 prrafo no estoy de acuerdo o Acuerdos livianos (los
Clientes sin Quieren Decir Cosas malas Sobre Jvenes Voluntarios), 1 prrafo estoy de acuerdo, prrafo 2 estoy muy de Acuerdo .

Tiempo y Movimiento
Los ejercicios de control de modelado de datos, flujo de trabajo, y la versin estn destinados a ser realizado por todo el equipo de trabajo conjunto.
Deben tomar unas tres horas. Muchos proyectos tendrn que hacer poco ms que adaptar los modelos de datos y polticas de este captulo y los puso
en el directorio / doc de su propio servidor.
La implementacin del esqueleto puede ser un reto en funcin de lo ambicioso de los objetivos del sistema de gestin de contenidos son, sino tal vez
de 10 a 20 horas de programador de trabajo.
Trabajos que critican otros equipos debe tomar unos 15 minutos por proyecto criticado o cerca de dos horas en total en una clase con 8 a 10 proyectos.
Esto se podra hacer como grupo o dividida y conquistada.
Lograr una mirada vivido en vertiendo en el contenido real no debera tomar ms de dos horas y debe ser divisible entre los miembros del equipo.
Hablando con el cliente probablemente tomar aproximadamente una hora.
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Modularidad del Software


parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y Andrew Grumet
En este punto del curso has escrito suficiente software como para que las cosas se empiecen a salir de control. Cmo va
a ser la vida de aquellos que tengan que mantener tu cdigo? Se van a poder dar cuenta de cules son los mdulos que
escribiste? Van a poder encontrar la documentacin que pusiste? Va a ser una tarea simple si hay que producir
pequeos cambios en toda la extensin del sitio?
Este captulo va a tocar maneras de agrupar todo el cdigo de un mdulo, de registrar la existencia de documentacin
para ese mdulo, de publicar APIs para las otras partes del sistema, y de mtodos para almacenar los parmetros de
configuracin.

Cmo agrupar el cdigo


Cada mdulo en tu sistema va a contener las siguientes clases de software:
definicin de tablas de la RDBMS
procedimientos almacenados que corren en la base de datos (en el caso de Oracle, stos sern programas en
PL/SQL o Java)
procedimientos que corren dentro del servidor Web o el programa servidor de aplicaciones y que estn
compartidos por ms de una pgina Web (los denominaremos procedimientos compartidos)
scripts que generan las pginas individuales
(posiblemente) plantillas (templates) que trabajan en conjunto con los scrips de pgina
documentacin que explica los objetivos del mdulo
A continuacin se listan algunos ejemplos de los mdulos que puede haber detrs de una comunidad en lnea de gran
tamao:
registracin de usuarios
artculos y comentarios
foros de discusin (comparte las mismas tablas que los artculos, pero tiene un flujo de trabajo radicalmente
diferente para la moderacin y tambin tiene diferentes scripts de presentacin)
chat (tablas separadas del otro contenido, optimizadas para consultas extremadamente rpidas, software especial
en Javascript para el cliente)
adserver para vender, ubicar y registrar el uso de pancartas (banner)de publicidad
calendario (personal, de grupo, y para eventos a nivel de todo el sitio)
anuncios clasificados y subastas
comercio electrnico (e-commerce) (catlogo de productos, tabla de rdenes, presentacin de pginas de
productos con opiniones de los miembros de la comunidad, facturacin y contabilidad)
email, basado en servidor (como Hotmail) para los miembros de la comunidad
encuestas (sondeos de opinin y otras clases de encuestas entre los miembros)
weblog, blogs privados para cada miembro de la comunidad que desee uno, tal vez se puede compartir tablas con
los artculos pero con un flujo de trabajo diferente para la edicin y aprobacin, adems diferente interfaz de
presentacin ms feeds de RSS, trackback, y el resto de las interfaces mquina a mquina que se esperan en el
mundo de los blogs.
seguimiento de tickets (de problemas) para seguir la pista de defectos y solicitudes de caractersticas
Un buen desarrollador de software puede no compartir esta divisin en mdulos. Por ejemplo, en lugar de crear un
mdulo separado para los avisos clasificados, otra persona puede decidir que los avisos y las discusiones son tan
parecidos que es preferible agregar columnas para price y bid a la tabla de contenidos existente antes que agregar
nuevas tablas, y que es mejor agregar un montn de sentencias IF a los scripts que muestran las preguntas y respuestas
de las discusiones antes que escribir nuevos scripts.
Si la comunidad online se usa para asistir a un grupo de estudiantes y docentes universitarios, se pueden agregar
mdulos especializados, por ejemplo para registrar cules son los cursos que se estan enseando, quines y cundo los

dictan, quines son los alumnos que asisten, cules guas de problemas y de ayuda se asocian con cada clase, cundo son
las fechas e entregas de los trabajos, cul nota le corresponde y quin fue el docente que la puso.
Debes tener en mente que el software detrs de un servicio de Internet se actaualiza con frecuencia a medida que crece
la comunidad y se desarrollan nuevas ideas. El software que se actualiza frecuentemente, es software que va a tener
defectos, lo que significa que el sistema con frecuencia va a requerir de tareas de depuracin, a veces a las dos de la
madrugada y en general ser una tarea que lleva adelante un programador diferente del que escribi el software. Por ello
es importante publicar y observar ciertas convenciones que faciliten al nuevo programador la tarea de encontrar dnde
est el cdigo fuente relevante. Puede tomar slo quince minutos encontrar y arreglar un problema en el sistema. Pero si
toma tres horas encontrar los archivos que hay que revisar, entonces arreglar un defecto insignificante se transforma en
un proyecto de medio da.
Iremos paso a paso a travs de un ejemplo de cmo est organizado el servicio photo.net. El servidor est configurado
para operar mltiples servicios de Internet. Cada uno se aloja en /web/service-name/ lo que implica que todos los
directorios asociados a photo.net estn debajo de /web/photonet/. El directorio raz del sitio es /web/photonet/www/.
El servidor Web est configurado para buscar los procedimientos de biblioteca (compartidos por mltiples pginas)
en /web/photonet/tcl/, un nombre que deriva del hecho que photo.net corre sobre AOLserver, cuyo lenguaje de
exstensin predeterminado es Tcl.
Las definiciones de tablas, ndices y procedimientos almacenados de la RDBMS para un mdulo dado se guardan en un
nico archivo en el directorio /doc/sql/ (los nombres de directorio en este captulo son relativos al directorio raz del
servidor Web, a menos que se especifiquen como rutas absolutas). El nombre de este archivo es el nombre del mdulo
seguido por la extensin .sql, por ejemplo, chat.sql para el mdulo de chat. Los procedimientos almacenados para
todos los mdulos se almacenan en un nico directorio de biblioteca /web/photonet/tcl/, y cada archivo tiene nombre
de la forma modulename-defs.tcl, por ejemplo: chat-defs.tcl.
Los scripts que generan las pginas se alojan en los siguientes directorios: /module-name/ para las pginas de usuario;
/module-name/admin/ para las pginas de moderador, por ejemplo, a donde va un usuario con privilegios de moderador
cuando quiere eliminar un comentario; /admin/module-name/ para las pginas del administrador del sitio, por ejemplo,
a donde recurre el operador del servicio para activar o desactivar el servicio, delegar autoridad de moderacin a otro
usuario, et.
En /doc/module-name.html se guarda un documento que explica cada mdulo con un alto nivel de abstraccin. Hay un
enlace que lo referencia desde la pgina de ndice en /doc/. Este documento es el punto de partida para los
programadores que estn considerando usar el mdulo o extender sus caractersticas. El documento tiene la siguiente
estructura:
1. Dnde se encuentra todo el software asociado con este mdulo (las convenciones vlidas en todo el sitio son
buenas, pero no hace dao ser explcitos).
2. Informacin a vuelo de pjaro: Porqu se escribi este mdulo? Porqu las alternativas existentes no eran
adecuadas para resolver el problema? Cules son las caractersticas de alto nivel, tanto buenas como malas, de
este mdulo? Cules fueron las elecciones que se hicieron al desarrollar el modelo de datos?
3. Informacin de configuracin: Qu se puede cambiar de manera sencilla mediante la edicin de los parmetros?
4. Informacin de uso y mantenimiento.
Si deseas ver un ejemplo de esta clase de documentos, mira en http://philip.greenspun.com/seia/examples-softwaremodularity/chat.

Procedimientos compartidos versus procedimientos almacenados


An en los entornos de desarrollo Web ms simples hay dos lugares donde se pueden realizar abstraciones de
procedimientos, o sea, fragmentos de programas que son compartidos por varias pginas. Los sistemas modernos de
gestin de bases de datos relacionales pueden interpretar lenguajes Turing-completos como C#, Java y PL/SQL. Por lo
tanto en principio, se pueden realizar cualquier computacin (que sea computable) dentro de una RDBMS como
Microsoft SQL Server, Oracle, o PostgreSQL. Dicho de otro modo, no necesitas un servidor Web o ninguna otra
herramienta, sino que puedes implementar los scripts de pginas y el servidor HTTP dentro del sistema de gestin de
bases de datos en la forma de procedimientos almacenados.

Como se ver en el captulo "Scaling Gracefully" FIXME, existen ciertas ventajas de performance si separamos la capa
de presentacin y la ubicamos en un conjunto separado fsicamente de computadoras. Por lo tanto, casi con seguridad
debemos dejar nuestros scripts fuera de la RDBMS. Esto nos da la oportunidad de escribir software adicional que va a
corren en el servidor Web o en sus cercanas, tpicamente en el mismo lenguaje de programacin que se usa para scripts
de pginas, en la forma de procedimientos compartidos. En el caso de un script en PHP, por ejemplo, el procedimiento
compartido podra ser un archivo includo (mediante la directiva include). En el caso de un sitio donde las pginas se
programan en Java o C#, el procedimiento compartido puede estar formado por ciertas clases y mtodos que son
utilizados por diferentes pginas.
Cmo elegir entre procedimientos compartidos y procedimientos almacenados? Puedes comenzar pensando en las
mltiples aplicaciones que pueden conectarse a la misma base de datos. Por ejemplo, puede haber un servidor Web
pblico, un programa que todas las noches extrae la nueva informacn para su anlisis, una herramienta de
mantenimiento para administradores construda encima de Microsoft Excel o Access, etc.
Si piensas que una parte del cdigo fuente va a resultar til para aquellos otros sistemas que se conectan al mismo
modelo de datos, gurdalo en la base de datos como procedimiento almacenado. Si ests seguro que otra parte de cdigo
slo va a ser utilizada por la aplicacin Web en particular que ests escribiendo, gurdala en el servidor Web como
procedimiento compartido.

Documentacin
Al ingresar al siglo 21 nos encontramos que la puntera con rifle se ha perdido en gran parte en los crculos
militares establecidos del mundo. La nocin de que la tecnologa puede suplantar la incompetencia
prevalece sobre nosotros en toda clase de esfuerzo, includo el del tiro.
-- Jeff Cooper in The Art of the Rifle (1997; Paladin Press)
Enfrentado a un sistema con 1000 procedimientos y nada de documentacin, el gerente tpico emitir una orden a los
programadores: deben escribir una cadena de documentacin [doc string en ingls] para cada procedimiento que
indique cules entradas acepta, cules salidas genera, y cmo transforma esas entradas en salidas. Virtualmente todo
entorno de programacin desde los 1960s admite esta forma de pensamiento. Los sistemas ms creativos de
documentacin basados en esas cadenas incluso pueden navegar en directorios de cdigo fuente, extraen las cadenas de
documentacin y generan un manual atractivo con las mismas.
Qu tan tiles son las cadenas de documentacin? tiles, pero no lo suficiente. El nuevo programador que se allega a
un sistema no tiene idea de cules de las 1000 cadenas son las ms importantes. El nuevo programador no tiene idea de
las causas por las cuales se construyeron esos procedimientos, cul es el problema que resuelven, ni tampoco si todo el
sistema ha quedado obsoleto a favor de un nuevo software que proviene de otra fuente. Con seguridad, las 1000 cadenas
de documentacin no van a convencer a ningn programador para que adopte un cierto software. Es mucho ms
importante presentar una prosa clara en castellano que demuestre la calidad de tu pensamiento y tu trabajo de diseo al
atacar un problema real. Esta prosa no necesita tener una extensin superior a unas pocas pginas, pero se la debe
componer con mucho cuidado.

Cmo separar los diseadores de los programadores


La cantidad de crticas y de solicitudes de cambios vendr en proporcin a la cantidad de gente que puede comprender
la parte del sistema que est siendo objeto de la crtica. Muy pocas personas son capaces de realizar un modelado de
datos o un diseo de interaccin. An cuando stas son las partes del sistema que ms profundamente afectan la
experiencia de usuario o la utilidad de un sistema de informacin para sus operadores, raramente te van a ocupar con
sugerencias en estas reas. Slo una persona con aos de experiencia relevante puede llegar a proponer que agregues
una columna a una tabla, o que cinco tablas se reemplacen con tres tablas. Una cantidad mucho mayor de personas
puede escribir scripts Web. Es posible entonces que algunas veces te ridiculicen por la eleccin del entorno de
programacin, al margen de qu tan moderno se supone que era al momento que lo elegiste. Prcticamente todo ser
humano en el planeta, por otro lado, entiende que el malva se ve diferente que el fucsia, y que Helvtica es diferente de
Times Roman. Por ello, la mayor cantidad de sugerencias de cambios en una aplicacin Web van a estar relacionados
con el diseo. Uno quiere agregar un nuevo logo a cada pgina del sitio. Otro quiere cambiar el color de fondo en la
seccin del foro de discusin. Otro ms quiere agregar un poco de espacio en blanco por aqu y por all.

Supongamos que elegiste la manera ms simple y directa para construir tu aplicacin Web. A cada URL corresponde un
script, que contiene las sentencias SQL, algo de cdigo procedural en el lenguaje de scripting (sentencias IF,
bsicamente), y cadenas estticas de HTML que se van a combinar con los valores que se extraigan de la base de datos
para formar la pgina completa. Las partes que componen un programa en Visual Basic Active Server Pages o uno en
Java Server Pages o un script CGI en Perl, siempre vas a encontrar esos tres elementos: SQL, sentencias IF, HTML.
Resulta sencillo el desarrollo de las aplicaciones con este estilo de programacin. Se puede ver todo el cdigo relevante
a una pgina en un nico buffer del editor de texto. Adems el mantenimiento es fcil. Si un usuario enva un informe
aobre un error del tipo Hay un error de ortografa en http://www.yourcommunity.org/foo/bar sabes que slo debes
buscar en un nico archivo en todo el sistema (/foo/bar.asp o /foo/bar.jsp o /foo/bar.pl o lo que sea) y tienes garantizado
que vas a encontrar la fuente del problema del usuario. Esto es cierto tanto para los errores tanto de SQL como de la
programacin procedural.
Qu hars si la gente quiere cambios a nivel de todo el sitio en las fuentes de letras, colores, encabezados y pies? Esto
puede resultar fcil o difcil, dependiendo de cmo hayas ensamblado tu sistema. Supongamos que los colores
predeterminados se leen de un sistema de parmetros de configuracin, y que los encabezados, pies, y las ayudas de
navegacin de cada pgina se generan en el script de la pgina mediante el llamado a procedimientos compartidos. En
esta feliz situacin, puede llevar slo unos minutos que realices cambios a nivel de todo el sitio.
Que hars si la gente quiere cambiar las palabras en la expresin de una anotacin en el HTML esttico de cierta
pgina? O desea agrandar la lnea de encabezado de una pgina en particular? Y si quiere agregar un poquito ms de
espacio en blanco en una pgina? Esto va a requerir de la intervencin de un programador pues las cadenas de HTML
esttico asociadas con esa pgina forman parte de un archivo que contiene SQL y cdigo en el lenguaje procedural. No
es aceptable que alguien tire abajo una seccin del servicio por culpa de un intento fallido de corregir un error de
escritura o por agregar una indicacin.
EL martillo pequeo
La manera ms simple de separar a los programadores de los diseadores consiste en crear dos archivos para cada URL.
El Archivo 1 contiene las sentencias SQL y algo de cdigo procedural que rellena las variables locales o una estructura
de datos con la informacin que se extrajo de la base de datos. La ltima sentencia en el Archivo 1 es una llamada a un
procedimiento que lee el Archivo 2, un archivo plantilla que se ve como HTML estndar con referencias sencillas a los
datos preparados en el Archivo 1.
Supongamos que el Archivo 1 se denomina index.pl y es un script Perl. Por convencin, el Archivo 2 se denominar
index.template. Durante la preparacin de la plantilla, el diseador necesita saber (a) los nombres de las variables a las
cuales se asignan valores en index.pl, (b) que las referencias a las variables contienen el signo dlar, por ejemplo,
$standard_navbar, y (c) que para enviar al usuario un signo dlar o una arroba propiamente, se los debe escapar con
una contrabarra. La unin de la plantilla y las variables locales asignadas en index.pl se puede realizar con una nica
llamada al procedimiento eval, que es una primitiva de Perl cuya funcin es realizar la interpolacin de cadenas de
caracteres, en este caso por ejemplo reemplazar $foo con el valor de la variable foo.
El martillo mediano
Si el script SQL/procedural y la plantilla HTML estn en archivos separados del mismo directorio, existe siempre el
riesgo de que un diseador descuidado pueda eliminar, renombrar o modificar un programa. Tiene mucho ms sentido
que se dedique un directorio separado y que se d a los diseadores slo autorizacin sobre ese rbol paralelo. Por
ejemplo, en photo.net puede tener los scripts de pgina en /web/photonet/www/ y las plantillas bajo
/web/photonet/templates/. Cuando el script en /e-commerce/checkout.tcl termina, llama al procedimiento
compartido return_template. Este procedimiento primero invoca la API del servidor Web para conocer cul es la URI
que se est sirviendo. En un parmetro de configuracin se especifica el inicio del rbol de plantillas. return_template
usa el URL junto con la raz del rbol de plantillas para ver si existe una plantilla en el sistema de archivos para evaluar.
Si se la encuentra, se evala la plantilla, que estar en formato ADP de AOLserver (la misma sintaxis que Microsoft
ASP), y dicha evaluacin ocurre en el contexto de la rutina que llam return_template, lo que significa que las
variables locales que se asignaron en el script van a estar disponibles para el archivo ADP.
El enfoque del "martillo mediano" mantiene programadores y diseadores completamente separados desde el punto de

vista de los permisos del sistema de archivos. Tambin tiene la ventaja de que el procedimiento compartido que se
invoca al final de cada script puede husmear algunas cosas. Se trata de un usuario que prefiere pginas con texto
solamente? Si es el caso, existe una plantilla que tenga slo texto? Se trata de un usuario que prefiere un idioma
diferente al predeterminado del sitio? Si es as, hay una plantilla disponible en la cual las anotaciones estn en el
idioma preferido del usuario?
El martillo SQL
Si el sistema ya incluye muchas capacidades apoyadas en la RDBMS para permitir el control de versiones y las
autorizaciones, puede resultar natural que almacenemos las plantillas en una tabla de la base de datos. Estas plantillas se
pueden editar desde un navegador, y los cambios en las mismas se pueden gestionar como parte del flujo de trabajo de
publicacin del sitio. Si la arquitectura de informacin de un sitio se representa explcitamente en tablas de la RDBMS
(ver el captulo de Gestin de contenidos), las plantillas y fragmentos de plantillas van a guardarse naturalmente en la
base de datos, junto a los tipos de contenidos, categoras y subcategoras.
El martillo de demolicin
Alla por 1999, Karl Goldstein era el nico programador mientras construa el sistema de informacin completo para una
comunidad comercial online. Los gerentes de la comunidad cambiaron de pareceres al menos unas quince veces sobre
cmo debera verse el sitio. Cada pgina debe tener una barra de navegacin horizontal. En realidad, tal vez sera mejor
si fuera vertical. Pero cambia la barra de navegacin en todas las pginas, en lugar de ponerla a la izquierda, muvela a
la derecha. Luego de dos o tres cambios masivos de direccin como sos,, Goldstein desarroll un sistema elegante y
eficiente:
cada script de pgina tendr su correspondiente plantilla, por ejemplo, register.tcl va a buscar a
register.template

casi todas las plantillas incluirn una etiqueta "master", la cual indica que la plantilla slo se dise para proyectar
una porcin de la pgina
el servidor buscar un archivo master.template en el mismo directorio del script; si lo encuentra, el contenido
proyectado por el script de pgina y su correspondiente plantilla se sustituir donde aparece la etiqueta <slave>
en la plantilla master y se retornar al usuasio el resultado de la evaluacin de la plantilla master.
cuando no se encuentra una plantilla master en el mismo directorio del script, el servidor buscar en niveles de
directorio sucesivamente ms altos dentro del sistema de archivos hasta que se encuentre una plantilla master,
entonces aplicar la as encontrada
A continuacin en el ejemplo se muestra cmo se divide lo que ve el usuario, de acuerdo a las plantillas master y slave:

Logo

Pancarta de
propagandas
Barra de Navegacin/Contexto

Enlaces
de secciones

AREA DE
CONTENIDOS

Pie

El contenido en gris se deriva de la plantilla master. Se hace notar que esto no significa que es un contenido esttico, o
que no es especfico para la pgina particular. Si una plantilla se hace con un script ASP o JSP, entonces se puede
ejecutar un programa arbitrariamente complejo a los fines de generar lo que se va a mostrar en esa porcin de la pgina.
El contenido en color aqua proviene de la plantilla especfica de la pgina.
Todo esto suena ineficiente cuando pensamos en la gran cantidad de lecturas que deben hacerse sobre el sistema de
archivos. Sin embargo, una vez que el sistema est en produccin es tarea sencilla que el servidor Web guarde un cach
de los resultados de la investigacin sobreel sistema de archivos, para cada URL. De hecho, el servidor Web podra
almacenar todas las plantillas en su memoria virtual, para lograr la mxima velocidad. Existe una razn por la cual uno
no hace esto durante el desarrollo: la depuracin de los defectos es ms dificultosa. Cada vez que alteras una plantilla,
para ver los resultados del cambio se hace necesario reiniciar el servidor Web.

APIs Intermdulo
En el captulo Registracin y gestin de usuarios mencionamos que queremos lograr que las personas sean
responsabilizadas por sus acciones dentro de la comunidad online. Una manera para mejorar la responsabilidad pasa por
ofrecer una pgina de contribuciones de usuario en la cual se muestran todas las contribuciones de un usuario
particular. En cualquier lugar de la aplicacin donde aparezca el nombre de una persona, se lo transformar en un
hiperenlace a su pgina de contribuciones de usuario.
Como todo el contenido del sitio se almacena en tablas de la base de datos relacional, la manera ms obvia de empezar a
escribir el script para la pgina de contribuciones de usuario es mirar los modelos de datos SQL de cada mdulo
individual. Luego podemos escribir un programa que haga consultas en unas docenas de tablas para encontrar todas las
contribuciones de un usuario en particular.
La desventaja de este enfoque es que ahora nos hemos quedado con cdigo que puede dejar de funcionar si cambiamos
el modelo de datos de un mdulo, y se trata de cdigo que no est ubicado en el subdirectorio correspondiente al
mdulo; adems es probable que el autor de este cdigo sea diferente del programador que mantiene el mdulo
individual.
Vamos a considerar una aplicacin diferente: alertas por email. Supongamos que tu comunidad ofrece un foro de
discusin y un sistema de avisos clasificados, codificados como mdulos separados. Algunos usuarios quieren recibir
resmenes diarios de las actividades en ambas reas. Cada mdulo podra tener su propio mecanismo de alertas. Sin
embargo, esto quiere decir que el usuario recibir dos mensajes cada noche cuando lo que esperaba es un nico mensaje
combinado. Si construimos un sistema de alertas por email, por otro lado, tenemos el mismo problema que con la pgina
de contribuciones de usuario: cdigo compartido que depende de los modelos de datos de los mdulos individuales.
Por ltimo, demos un vistazo a la tarea del administrador del sitio. El administrador del sitio ser con toda probabilidad
un voluntario ocupado. No desea perder veinte clics de ratn para revisar el contenido nuevo de hoy. El administrador
del sitio debe ser capaz de revisar el contenido contribudo recientemente de todos los mdulos desde una nica pgina.
Qu quiere decir esto? Otro script que depende de todas las definiciones de tablas en todos los mdulos?
Aqu va una pista de la solucin. En el sitio photo.net cada mdulo define un procedimiento cosas nuevas, que toma
los siguientes argumentos:
la fecha del contenido ms antiguo en el cual estamos interesados
only_from_new_users_p un valor booleano que indica si queremos limitar el informe a las contribuciones de
los nuevos usuarios (til para administradores de sitio porque los nuevos usuarios son los que no entienden los
estndares y normas de la comunidad)
purpose "admin", "email_summary", o "user"; esto controla la entrega del contenido no aprobado, la inclusin
de enlaces a opciones de administracin como aprobar/rechazar, y el formato del informe
since_when

La salida de tal procedimiento puede ser simple: HTML para una pgina Web o texto plano para un mensaje de correo
electrnico. La salida tambin puede ser una estructura de datos. Puede ser un documento XML que se va a interpretar

mediante una hoja de estilos XSL. Lo importante es que las pginas interesadas en cosas nuevas que sucedieron en
todo el sitio no necesitan conocimiento de los modelos de datos de los mdulos individuales, slo necesita saber el
nombre del procedimiento cosas nuevas que le corresponde a cada mdulo. Esta ltima tarea se facilita en photo.net:
a medida que el servidor Web carga cada mdulo se registra su procedimiento cosas nuevas en una lista a nivel del
sitio. Si una pgina desea presentar contenido nuevo a nivel de todo el sitio, lo que hace es recorrer esta lista y llama a
cada procedimiento en ella.

Parmetros de configuracin
It is possible, although not very tasteful, to build a working Internet application with the following items hard-coded
into each individual page: Podemos construir una aplicacin para Internet con los siguientes elementos de datos
literalmente escritos en cada pgina individual:
nombre y contrasea de la cuenta de acceso a la RDBMS
la direccin de correo electrnico del administrador del sitio a quien se deben enviar notificaciones de los eventos,
como por ejemplo de las registraciones de los usuarios y de la publicacin de nuevo contenido
la direccin de correo electrnico del sysadmin a notificar si el servidor Web no se puede conectar a la RDBMS o
en caso de otros errores
direcciones de IP de usuarios que no queremos
URLs histricas y las nuevas URLs a las cuales redirigir el contenido si se solicitan las viejas
el nombre del sitio
los nombres de los editores y publicadores
el tamao mximo de un archivo adjunto que estamos dispuestos a aceptar (puede que no quieras que un usuario
se suba imgenes en formato TIFF de 800 Mbytes como adjuntos a un comentario del foro)
si hay que ofrecer o no el enlace para mstrar el cdigo fuente detrs de la pgina page
Es posible escribir nuestros programas as, aunque sea de mal gusto. En antiguo trmino para este enfoque de la
construccin del software es poner nmeros mgicos en el cdigo. Si hay nmeros mgicos en el cdigo resulta difcil
tomar unos scripts de un servicio y utilizarlos en otra aplicacin. Los nmeros mgicos en el cdigo dificultan la tarea
de saber cuntos programas hay que examinar y modificar luego de un cambio en el personal. Si hay nmeros mgicos
en el cdigo no es fcil saber si las reglas se han respetado de manera consistente a lo largo del sitio.
Dnde deberas almacenar parmetros como los mencionados? Con la excepcin del nombre y contrasea de la base de
datos, una respuesta obvia parece ser en la base de datos. Hay un montn de claves (los nombres de los parmetros) y
un montn de valores (los parmetros). ste es justamente el problema para el cual un sistema de gestin de bases de
datos es ideal.
-- usamos el generador de claves nicas de Oracle
create sequence config_param_seq start with 1;
create table config_param_keys (
config_param_key_id
integer primary key,
key_name
varchar(4000) not null,
param_comment
varchar(4000)
);
-- almacenamos los valores en una tabla diferente porque
-- puede haber ms de un valor para una dada clave
create table config_param_values (
config_param_key_id
not null references config_param_keys,
value_index
integer default 1 not null,
param_value
varchar(4000) not null
);
-- usamos el operador nextval de Oracle para obtener
-- el siguiente valor del generador de secuencia
insert into config_param_keys
values
(config_param_seq.nextval, 'view_source_link_p', 'damn 6.171 instructor is making me do this');
-- usamos el operador currval de Oracle para obtener
-- el ltimo valor del generador de secuencia (as las filas --- insertadas en esta transaccin tendrn el mismo ID)
insert into config_param_values
values

(config_param_seq.currval, 1, 't');
commit;
insert into config_param_keys
values
(config_param_seq.nextval, 'redirect', 'dropping the /wtr/ directory');
insert into config_param_values
values
(config_param_seq.currval, 1, '/wtr/thebook/');
insert into config_param_values
values
(config_param_seq.currval, 2, '/panda/');
commit;

Al final de cada script de pgina podemos consultar esas tablas:


select cpv.param_value
from config_param_keys cpk, config_param_values cpv
where cpk.config_param_key_id = cpv.config_param_key_id
and key_name = 'view_source_link_p'

Si el script obtiene una fila con una t, incluye el enlace Ver cdigo fuente al pie de la pgina. Si no, no hay enlace.
Para almacenar una redireccin se requiere que guardemos dos filas en la tabla config_param_values, uno para el URL
desde y otro para el URL hacia. Cuando viene una solicitud, el servidor Web necesita realizar una consulta para
determinar si hay una redureccin:
select cpk.config_param_key_id
from config_param_keys cpk, config_param_values cpv
where cpk.config_param_key_id = cpv.config_param_key_id
and key_name = 'redirect'
and value_index = 1
and param_value = :requested_url

donde :requested_url es una variable de ligadura que contiene el URL solicitado por el cliente Web conectado. Nota
que esta consulta nos indica si hay o no redireccin, no nos dice hacia cul URL hay que reditigirlo, pues esa
informacin se almacena en una fila diferente de config_param_values. Aunque no lo creas, lo que se hace en estos
casos es un join de tres vas, y que incluye un auto-join de config_param_values:
select cpv2.param_value
from
config_param_keys cpk,
config_param_values cpv1,
config_param_values cpv2
where cpk.config_param_key_id = cpv1.config_param_key_id
and cpk.config_param_key_id = cpv2.config_param_key_id
and cpk.key_name = 'redirect'
and cpv1.value_index = 1
and cpv1.param_value = :requested_url
and cpv2.value_index = 2
-- eso quef bastante feo; tal vez lo podemos encapsular en una vista
create view redirects
as
select cpv1.param_value as from_url, cpv2.param_value as to_url
from
config_param_keys cpk,
config_param_values cpv1,
config_param_values cpv2
where cpk.config_param_key_id = cpv1.config_param_key_id
and cpk.config_param_key_id = cpv2.config_param_key_id
and cpk.key_name = 'redirect'
and cpv1.value_index = 1
and cpv2.value_index = 2
-- un par de mandatos de formato de Oracle SQL*Plus
column from_url format a25
column to_url format a30
-- veamos cmo qued ahora muestra tabla virtual
select * from redirects;

FROM_URL
TO_URL
------------------------- -----------------------------/wtr/thebook/
/panda/

Al mrgen de los N-joins, cunto tiene de buen gusto este enfoque de almacenar parmetros? La respuesta superficial
es extremadamente de buen gusto. Toda nuestra informacin est en el RDBMS que es donde pertenece. No hay
nmeros mgicos en el cdigo. Los parmetros se pueden editar desde las pginas de administracin, que tienen la
misma forma que todas las otras pginas del sitio: consultas y actualizaciones SQL. Cuando se pasa un poco ms ed
tiempo con este problema, uno se pregunta: porqu estamos consultando la base de datos un milln de veces al da para
conseguir informacin que cambia una vez al ao?
Dejando a un lado las cuestiones de buen o mal gusto, si tenemos que realizar entre cinco a diez consultas adicionales al
RDBMS por cada solicitud, eso se vuelve una carga significativa sobre el servidor de base de datos, que es la parte del
la aplicain de Internet ms difcil de distribuir entre mltiples computadoras fsicas (mira esto en el captulo de
Escalabilidad FIXME titulo) y por lo tanto es la capa ms onerosa a la hora de expandir sus capacidades.
Una buena regla de trabajo es que cada script Web nunca debe consultar la base de datos para sabeer qu hacer, sino
slo para conseguir contenido y datos de usuario.
busca en la documentacin de la API del servidor y mira si encuentras un mecanismo para decir: corre esta
porcin de cdigo cuando el servidor arranque
construye una tabla hash en memoria, donde las claves de la tabla son las claves de los parmetros
en la tabla hash carga los valores de un parmetro, en la forma de una lista, asociados con su clave
documenta una API contra la tabla hash, que tome una clave como entrada y retorne un valor o una lista de
valores como resultado
La tabla hash es lo mejor porque ofrece un acceso del orden O(1) a los datos, o sea, el tiempo que toma para responder a
la consulta cul es el valor asociado con la clave 'foobar' no crece a medida que aumenta la cantidad de claves dentro
del hash. En algunos lenguajes de programacin para aficionados, las tablas hash que vienen incorporadas al lenguaje
pueden denominarse arreglos asociativos.
Si prevees que va a haber muchos parmetros de configuracin, puede ser mejor que agregues una columna section a
la tabla config_param_keys y que las consultas las hagas por seccin y clave. De esta manera, por ejemplo, puedes
tener un parmetro denominado bug_report_email tanto en la seccin discussion como en la user_registration.
La clave dentro de la tabla hash entonces ser la composicin del nombre de seccin y el nombre de la clave del
parmetro.
Con Microsoft .NET
Los parmetros de configuracin se agregan en las aplicaciones IIS/ASP.NET dentro del archivo Web.config para la
aplicacin.
Por ejemplo, si escribes lo siguiente en c:\Inetpub\wwwroot\Web.config (asuminos una instalacin IIS
predeterminada)
<configuration>
<appSettings>
<add key="publisherEmail"
value="marketing@mycompany.com" />
</appSettings>
</configuration>

vas a poder acceder a publisherEmail en una pgina .aspx en VB de la siguiente manera:


<%
Dim publisherEmail as String
publisherEmail = ConfigurationSettings.AppSettings( "publisherEmail" )
%>
<html>

<html>
<body>
...
For further information please contact us at <%= publisherEmail %>
...
</body>
</html>

De manera predeterminada, las asignaciones de configuracin se aplican a un directorio y a todos sus subdirectorios.
Tambin de manera predeterminada, estas asignaciones pueden ser sobrescritas por asignaciones en los archivos
Web.config de los subdirectorios. Se pueden establecer reglas ms elaboradas para el alcance y el comportamiento de
sobrescritura de asignaciones, mediante la etiqueta <location>.
Ms informacin en:
ASP.NET Configuration en el .NET Framework Developer's Guide en
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaspnetconfiguration.asp
(notars que los muchachos en MSDN no ha podido darse cuenta cmo hacer el tema de las URLs abstractas y
que tampoco se han convertido a .aspx todava!)
Con Java Server Pages
Lo que sigue es la recomendacin de Jin S. Choi para almacenar y acceder a los parmetros de configuracin cuando se
usan Java Server Pages.
Debes especificar las etiquetas Parameter dentro de la especificacin de Context para tu aplicacin en el archivo
conf/server.xml. Ejemplo:
<Context path="/myapp" docBase="myapp" debug="0"
reloadable="true" crossContext="true">
<Parameter name="companyName" value="My Company, Inc."
override="false"/>
</Context>

Tambin puedes especificar el parmetro en el archivo WEB-INF/web.xml de tu aplicacin:


<context-param>
<param-name>companyName</param-name>
<param-value>My Company, Inc.</param-value>
</context-param>

El atributo override en el primer ejemplo especifica que no quieres que este valor sea sobrescrito por una etiqueta
context-param en el archivo web.xml. El valor predeterminado es true (permitir las sobrescrituras).
Para recuperar los parmetros desde un servlet o JSP, puedes llamar a:
getServletContext().getInitParameter("companyName");

Ms informacin en:
documentacin para Context: http://jakarta.apache.org/tomcat/tomcat-4.0-doc/config/context.html
javadoc para ServletContext: http://jakarta.apache.org/tomcat/tomcat-4.0doc/servletapi/javax/servlet/ServletContext.html

Ejercicio 1
Crea un directorio /doc/ en el servidor de tu equipo. Crea una pgina de ndice en dicho directorio que enlace a un
documento de estndares de desarrollo (/doc/development-standards sera un URL razonable pero puedes usar el que
ms te guste, mientras est claramente enlazado desde /doc/).

En este documento de estndares de desarrollo, debes cubrir al menos los siguientes temas:
1. denominacin de las URLs: abstractas versus no abstractas (ajjj), guiones versus subrayado (difciles de leer para
muchos usuarios), palabras completas o abreviadas.
2. denominacin de las URLs que se usan en los formularios y el procesamiento de los mismos estarn en la
misma URL o el usuario cuando pasa por una secuencia de formularios pasa tambin por /foo/bar, /foo/bar1, /foo/bar-2, etc.
3. RDBMS que se va a usar
4. lenguaje de programacin que se va a usar para los scripts Web y el cdigo procedural dentro de la base de datos.
5. mecanismos para conectarse a la abse de datos (bibliotecas, variables de ligadura, etc.)
6. convenciones para la denominacin de las variables
7. cmo se debe documentar un mdulo
8. cmo se debe documentar un procedimiento compartido
9. cmo se debe documentar un script Web (autor, entradas aceptables)
10. cmo se validan las entradas de los formularios Web en los scripts
11. cul es la estrategias de plantillas seleccionada (si se usa alguna)
12. cmo se agrega una variable de configuracin y cmo se le debe asignar un nombre, de tal manera que al menos
todos los parmetros asociados con un mdulo en particular se pueden identificar fcilmente.
Toma distancia del documento que acabas de crear antes de pasar al siguiente ejercicio. Pregntate: Si una nueva
programadora se uniera maana a este proyecto, y le pidiera que haga un mdulo de encuestas de opinin, sera capaz
de ser una desarrolladora efectiva consistentemente dentro de este entorno sin necesidad de que hable conmigo?
Recuerda que un mdulo de encuestas requiere de una extensa interfaz administrativa para la creacin de encuestas,
preguntas y posibles respuestas, una interfaz de usuario y de admin para ver los resultados y una interfaz de usuarios
para contestr las encuestas. Si la respuesta a esta pregunta es Guau, esta nueva programadora me va a tener que hacer
un montn de preguntas, regresa y haz que tu documento de estndares de desarrollo sea ms explcito y agrega ms
ejemplos.

Ejercicio 2
Documenta la API intermdulos de tu equipo dentro del directorio /doc/, tal vez en /doc/intermodule-API, enlazado
desde la pgina de ndices de la documentacin. La estrategia que usen debe ser capaz de manejar al menos los
siguientes casos:
produccin de una pgina de administrador de sitio que contenga todo el contenido hasta una cantidad
seleccionable de das atrs, con enlaces de admnistracin al lado de cada tem sin que el script de pgina tenga
ninguna dependencia del modelo de datos de ningn mdulo
produccin de una pgina de usuario que muestra el contenido nuevo a nivel de todo el sitio.
un sistema centralizado de alertas por mail mediante el cual un usuario recibe un resumen nocturno que combina
el nuevo contenido de mltiples mdulos.

Cmo proteger a un usuario del HTML del otro


Fundamentalmente, el trabajo del servidor que hay detrs de una comunidad online es tomar texto que escribe el
Usuario A y mostrrselo al Usuario B. Desafortunadamente, existe un riesgo de seguridad inherente en esta actividad.
Supongamos que el Usuario A es malicioso y que incluye etiquetas como <SCRIPT> en el cuerpo de un comentario.
Cuando el Usuario B visita la pgina que contiene ese comentario, de repente, el JavaScript se va a estar ejecutando en
su mquina, y descargando imgenes objetables de diferentes lugares de Internet, tocando msica, abriendo nuevas
ventanas, y por ltimo, forzando al navegador del usuario a visitar la pgina que el Usuario A haba elegido.
La solucin ms obvia podra ser que deshabilitemos las etiquetas HTML. Cualquier texto que se suba se explora en
busca de los caracteres < y > y, si se los encuentra, se recaza la publicacin explicacin mediante. Esto no va a funcionar
en un sitio para matemticos! Tal vez ellos necesiten usar los signos mayor y menor en sus comentarios.
El comienzo de una solucin que funcione es un procedimiento, tal vez con un nombre del estilo quoteHTML que toma
una cadena de texto que subi el usuario y realiza las siguientes conversiones:

los caracteres < por &lt;.


los caracteres > por &gt;.
los caracteres & por &amp;.
Si tus scripts de pgina invocan a este procedimiento cada vez que envan a un navegador el contenido que subi un
usuario, nunca un navegador va a interpretar los datos subidos por usuario como si fueran etiquetas HTML.
Esta solucin funciona muy bien para campos como first_names, last_name, street_address, lneas de resumen de
temas, etc., en los cuales no vale de nada tener una etiqueta HTML. Sin embargo, en el caso de otros documentos largos
que escriben los usuarios, puede ser interesante que se les permita utilizar cierto conjunto restringido de las etiquetas
HTML, como B, I, EM, P, BR, UL, LI, etc. Si vas a almacenar HTML en la base de datos una vez y servirlo miles de
veces al da, es mejor que se controlen las etiquetas legales al momento de subir los documentos. El problema con la
verificacin de las etiquetas prohibidas como SCRIPT, DIV y FONT es que el HTML est en continua expansin, tanto
de jure como de facto. A menos que quieras en tus manos la responsabilidad de mantenerte al da con todas las maneras
que las etiquetas pueden influir en los navegadores, lo mejor ser que verifiques que las etiquetas del documento son
slo las aprobadas. En cualqueira de los casos, vas a querer que la lista de etiquetas aprobadas o prohibidas se mantenga
en un archivo de configuracin fcil de modificar. Ms an, es posible que quieras hacer validaciones adicionales con
respecto al uso de etiquetas como B o I. Si un usuario comete un error y olvida cerrar una de estas etiquetas, puede
alterar el estilo de fuentes de los siguientes 100 comentarios.

Ejercicio 3
Documenta el enfoque de tu equipo que se usar para prevenir que un usuario ataque a los otros mediante HTML
malicioso. Tu documentacin de esta infraestructura debe incluir nombres de procedimiento y ejemplos de cmo se van
a usar los mismos.

Tiempo y movimiento
Todos los ejercicios en este captulo estn pensados para que el equipo los trabaje en conjunto. Un equipo que toma la
tarea en serio debera pasar unas 3 horas juntos para ponerse de acuerdo en los estndares y documentarlos. Luego
pueden decidir que necesitan rehacer parte del viejo cdigo para que se conforme a esos estndares, lo que puede tomar
de 5 10 horas de programador. El segundo paso es opcional, aunque para el final del curso se espera que todos los
proyectos sean internamente consistentes.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Foros de discusin
parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y
Andrew Grumet
El foro de discusin es unas de las herramientas ms bsicas para la cooperacin mediada por
computadoras entre seres humanos. El Usuario A puede poner una pregunta. El Usuario B puede poner
una respuesta. El Usuario C ve la pregunta y la respuesta, y aprende del intercambio. En un foro con hilos
de conversacin (threaded), el Usuario D tiene la posibilidad de poner una respuesta a la pregunta del
Usuario A o a la respuesta del usuario B. En un foro en formato preguntas y respuestas, los Usuarios D, E,
y F pueden poner respuestas a la pregunta del Usuario A, y las respuestas se van a presentar simplemente
en el orden en que fueron enviadas. Con retoques menores en la capa de presentacin, un sistema de foros
de discusin puede funcionar como weblog personal que admite comentarios.
En este captulo vas a construir el prototipo de un foro de discusin, vas a conducir un test de usabilidad, y
luego vas a refinar tu sistema en base a lo que aprendas a partir de la observacin de los usuarios.

El foro de discusin como comunidad?


Un foro de discusin bien diseado puede por s mismo satisfacer todos lo requerimientos de una
comunidad de aprendizaje online sustentable. Recuerda que esos elementos son los siguientes:
1.
2.
3.
4.
5.

contenido atractivo escrito por expertos


medios de colaboracin
facilidades poderosas para navegar y buscar entre el contenido atractivo y el contenido contribudo
medios para delegar la moderacin
medios de identificar miembros que estn imponiendo una carga desproporcionada sobre la
comunidad y formas de cambiar su comportamiento y/o excluirlos de la comunidad sin que se den
cuenta.
6. medios para que los mismos miembros de la comunidad puedan extender el software
Un temprano ejemplo de la idea de foro como comunidad es USENET, que se
inici en 1979 y que es conocida por los de la vieja poca como NetNews y
para los jvenes como Grupos de Google. Cada grupo de noticias es una
comunidad ms o menos autocontenida de gente interesada en un tema
particular, que colabora mediante un foro de discusin con hilos de
conversacin. Un buen ejemplo es rec.aviation.soaring, donde la gente
discute el vuelo en aeroplanos sin motor.

La aviacin en s misma no es
inherentemente peligrosa. Pero,
en un grado mayor que el mar,
es terriblemente implacable con
cualquier descuido, falta de
habilidad o negligencia.
-- Capitn A. G. Lamplugh,
1930s

En un grupo de USENET el contenido atractivo puede ser cualquier mensaje ms o menos largo que
publica algn experto reconocido. Hay que tener en cuenta que la cantidad de personas que usan un grupo
como rec.aviation.soaring es relativamente pequeola mayora de la gente se pone nerviosa en
aviones pequeos y an ms nerviosa en un pequeo avin que no tiene motor. En un anlisis de la
actividad durante octubre de 2004 realizado por el servicio Netscan de Marc Smith
(netscan.research.microsoft.com) muestra que el grupo tiene slo 174 habitus. Por ello, esos usuarios
nucleares pueden reconocerse entre ellos de manera bastante sencilla, mediante sus nombres o direcciones
de correo electrnico. La FAQ (frequently asked questions) o preguntas frecuentes con sus respuestas es
uno de los contenidos atractivos tpicos de un grupo de noticias. En la FAQ se indica para cada pregunta,
la respuesta que los expertos han acordado para ella.

El medio de colaboracin en un grupo de USENET es la capacidad de cualquier Si el motor se detiene por


cualquier motivo, te vas a
miembro de iniciar un nuevo hilo de conversacin o responder a un mensaje
desplomar, y eso es todo!
dentro de un hilo existente. En los primeros das de USENET, los mecanismos Clyde Cessna
para hojear y buscar eran razonablemente buenos para mensajes recientes, pero
terribles o inexistentes para aprender a partir de los viejos intercambios. A partir de mediados de 1990s,
las mquinas de bsqueda basadas en Web, como DejaNews, proporcionaron un acceso rpido y sencillo a
los mensajes antiguos.
Tradicionalmente, la debilidad de USENET ha sido el cuarto elemento requerido (medios para delegar la
moderacin). No haba suficientes voluntarios para la tarea de la moderacin, no exista software para
dividir el esfuerzo de la moderacin de un foro entre mltiples moderadores, y el protocolo de News tena
agujeros de seguridad que permitan pasar a los mensajes comerciales de spam incluso dentro de grupos
moderados. Si deseas dar un vistazo al estado del arte alrededor del 2001, lee en
http://www.landfield.com/usenet/moderators/handbook/. Puedes leer una discusin del spam en la historia
en Origin of the term 'spam' to mean net abuse por Brad Templeton en
http://www.templetons.com/brad/spamterm.html, un sitio que contiene muchos otros artculos interesantes
acerca de la historia de Internet.
En lo que USENET se ha quedado trgicamente corta es con respecto al
elemento 5: medios para excluir miembros gravosos. La mayora de los
clientes de USENET incluyen los filtros de bozo que permiten a un usuario
individual filtrar los mensajes de otros que sean persistentemente
problemticos. Pero un grupo no tiene una forma colectiva de excluir a una
persona que consistentemente inicia hilos de conversacin irrelevantes, enva
spam al grupo, abusa de otros, o se vuelve molesto de alguna manera,

El vuelo es inherentemente
peligroso. Nos agrada encubrir
eso con una retrica astuta y
con estadsticas reconfortantes,
pero estos hechos permanecen:
la gravedad es constante y
poderosa, y la velocidad mata.
Combinadas, son
particularmente destructivas.
Dan Manningham

Con respecto al elemento 6, medios para que los mismos miembros de la comunidad puedan extender el
software, USENET ha funcionado extraordinariamente bien. Los servidores y clientes de USENET
tienden a ser programas C monolticos, donde pequeas modificaciones pueden tener consecuencias
catastrficas. Por otro lado, el usuario promedio de Internet en sus comienzos era un hbil desarrollador
de software. As que si bien no todo usuario de USENET era un programador de herramientas para
USENET, al menos es seguro afirmar que todo programador de herramientas USENET era un usuario de
USENET.

Ms all de USENET
Si la comunidad de aprendizaje online que ests construyendo slo es tan buena como USENET, puedes
felicitarte. El archivo de USENET en Google contiene 700 millones de mensajes a lo largo de veinte aos.
Cientos de miles de personas encontraron las respuestas a sus consultas, como se muestra en la Figura 8.1.

.
Figura 8.1: Intercambio en USENET del 25 de diciembre de 2001, en el grupo rec.aviation.soaring
con respecto al montaje de una cmara en el ala de un planeador. Nota que la primer respuesta aparece a
menos de dos horas de publicada la pregunta.
Cuando construimos nuestro propio sistema de foro de discusin apoyado en base de datos, podemos
agregar algunas mejoras sencillas a la forma de trabajar tradicional de USENET:
un campo opcional para enviarme mail cuando se publique una respuesta
resmenes o alertas instantneas por email
indizado de texto completo con actualizacin inmediata (asumiendo que lo permite tu RDBMS)
transmisin segura de datos desde y hacia el foro mediante SSL
moderacin colaborativa a travs de pginas de administracin para eliminar mensajes ya pasados
de tiempo / repugnantes / o con cualquier otro problema.
mensajes antiguos navegables por categora
Las mejoras ms dramticas pueden darse con respecto al elemento 5: medios para excluir miembros
gravosos. Tu software puede hacer una consulta SQL del estilo mustrame los usuarios que enviaron
consultas que fueron borradas por un moderador por considerarlas redundantes y luego cuando el sistema
recibe a esos usuarios en el foro les incluye una pgina intersticial que explique cmo buscar y navegar
por los hilos de conversacin archivados. Si la comunidad online anda corta de tiempo de moderacin, se
puede hacer una consulta para encontrar cules son los usuarios cuyas publicaciones terminaron en
intervencin de los moderadores. Si ocurre que el 0.1 % de los usuarios consumen el 50% del tiempo de
moderacin, tal vez es mejor suspender a esos pocos usuarios y de esa manera se puede duplicar los
recursos de moderacin disponibles para la comunidad.
A medida que avanza el semestre, vas a descubrir otra ventaja de escribir tu propio foro de discusin, que
es el hecho de que se vuelve una parte integral de tu servicio. Todas las contribuciones de los usuarios en
las diferentes reas, includos los foros de discusin, se pueden consultar desde una nica base de datos y
se pueden visualizar en una nica pgina.

Ejercicio 1
Visita cinco sitios pblicos en Internet con foros de discusin, uno de los cuales puede ser el foro
Medium Format Digest en photo.net (http://www.photo.net/bboard/q-and-a?topic_id=35). Para cada
sitio, recoge las siguientes estadsticas:
dado un usuario ya registrado, la cantidad de clics requeridos para subir un mensaje
la cantidad de clics requeridos para ir desde la pgina de nivel ms alto del foro hasta un hilo de
discusin
si hay 20 comentarios dentro de un hilo, la cantidad de clics requeridos para ver todo el texto de
todos los comentarios
la cantidad de clics requeridos para ver las lneas de asunto de todos los mensajes archivados en una
categora particular
Enumera las caractersticas de la interfaz de usuario y de servicio al cliente que piensas que son las
mejores de esos cinco sitios y da una breve explicacin de porqu es buena cada una de esas
caractersticas.

Uno o ms de un foro?
********************* How many forums should a site have? Let's consider Ciertamente no tengo ningn
sentdo para la armona, y
a site for music lovers. Would one forum be enough? Maybe not. Will the
Schoenberg pens que tal cosa
classical music lovers be interested in a discussion of Pat Boone's cover of AC- me iba a hacer imposible
DC's "It's a Long Way to the Top (If You Wanna Rock 'N' Roll)"? So it will be a escribir msica. Dijo: Vas a
llegar a una pared que no
good idea to split the discussion into at least two forums: Classical and Pop.
podrs atravesar. Entonces yo
dije: Voy a dar con mi cabeza
Let's say that a Pat Boone fan comes into the Pop forum one day and
contra esa pared.
encounters a discussion of the lyrics from Ice Cube's Death Certificate or an
John Cage
MP3 from Prodigy's Fat of the Land? We'll clearly need to split up the Pop
forum into Christian Pop, Techno, and Rap. We're expecting a lot of Beatles fans as well. Which of these
forums would they gravitate toward? Maybe we need a '60s Rock forum. On the classical side there are a
lot of grand opera nuts who won't want to be distracted by discussions about authentic instrument
performances of Baroque music. Sophisticated modern music fans discussing John Cage's "Four Minutes,
Thirty-three Seconds" won't want to waste time discussing the fossils of the 18th and 19th Centuries. And
If something is boring after two
if we turn our attention to the many styles of Jazz ...
minutes, try it for four. If still
boring, then eight. Then
sixteen. Then thirty-two.
Eventually one discovers that it
is not boring at all.
John Cage

It would be easy to justify the creation of 100 separate forums on our music
site. And indeed USENET contains more than 50 rec.music.* groups, including
rec.music.beatles.moderated, for example. That turns out to be the tip of
the iceberg, for the alternative hierarchy sports more than 700 alt.music.*
groups , including alt.music.celine-dion and alt.music.j-s-bach. If USENET can support nearly
1000 discussion forums, surely a popular comprehensive music site ought to have at least 100.
Maybe not.

She had a voice like the New


When discussion is fragmented, it is hard for a community to get off the
Jersey State Anthem played on
ground. If there are 50 users and 100 forums, how will those users find each
an electric razor.
other? The average visit will result in a user concluding that the community
Bright Lights, Big City by Jay
McInerney
isn't active. Such a user is unlikely to return or refer a friend to the site. Even
when a community is large enough to support numerous forums, presenting discussion in a fragmented
manner leads to extra work for the user whose interests are diverse. Suppose that a music scholar comes to
USENET looking to see if there has been any recent discussion of Bach's "Schubler Chorales" and their
influence on later composers. That's as simple as visiting alt.music.j-s-bach. If that scholar wants to
check up on recent postings concerning Celine Dion's "My Heart Will Go On", he or she will have to scan
alt.music.celine-dion separately.

A good example of a thriving community with a single discussion forum is slashdot.org. It is very easy to
find the topics being actively discussed on slashdot: look at the front page.
It is possible to take the "one forum" and "many forum" approaches on the same site at the same time. For
example, look at http://www.photo.net/bboard/ (static copy at http://philip.greenspun.com/seia/imagesdiscussion/photonet-bboard-original.htm ). There are separate Medium Format, Nature Photography, and
Photo Critique forums. For a user to browse the new postings in these three forums will require seven
mouse clicks: down into this page, down into Medium Format, back, down into Nature, back, down into
Critique. With a different SQL query, however, postings from all these very same forums can be combined
on one page, as in http://www.photo.net/bboard/unified/ (static copy at
http://philip.greenspun.com/seia/images-discussion/photonet-bboard-unified.htm). Postings from
particular forum topics may be distinguished with a special publisher-chosen color or icon. Suppose that
the user finds the Photo Critique forum overwhelming and uninteresting. These postings can be excluded
from his or her personalized unified view via clicking on the "Customize forums" link at the top (static

copy at http://philip.greenspun.com/seia/images-discussion/unified-forum-personalization.htm) and


unchecking those forums that are no longer of interest.

Ejercicio 2: Disea la experiencia del usuario


Determina si tu servicio debe tener un nico foro; un foro con categoras; mltiples foros; mltiples foros
cada uno con categoras; o alguna otra manera de funcionar. Documenta el flujo de pginas de tus usuarios
(recuerda el ejemplo de diagrama de flujo de pgina del captulo Registracin de usuarios).

Ejercicio 3: Documenta el modelo de datos


Documenta cmo pretendes distribuir los datos de foros de discusin dentro de las tablas del repositorio
que habas definido en el captulo Gestin de contenidos.

Ejercicio 4: Escribe las pginas de usuario


Implementa la experiencia de usuario que diseaste en el Ejercicio 2.

Ejercicio 5: Escribe las pginas de administracin


Disea un conjunto de pginas de administracin. En este caso, en general es mejor si empiezas por la
lista de tareas que deben poder realizarse. Luego, trata de construir un flujo de pginas de tal manera que
le permita al administrador realizar esas tareas con las menor cantidad de clics posible.
Recuerda que en el captulo Registracin de usuarios vimos un importante principio de las interfaces de
usuario: resulta ms natural para la mayora de los usuarios de computadora que se seleccione primero el
sustantivo y despus el verbo. Por ejemplo, el moderador del foro puede hacer clic primero en el asunto de
un mensaje para seleccionarlo y luego, en una pgina siguiente seleccionar la accin que va a realizar
sobre ese mensaje: eliminar, aprobar, puntuar, categorizar, etc. Es factible desde el punto de vista tcnico
que hagamos un sistema en el cual se le pregunta primero al moderador Querras borrar algunos
mensajes? y que a continuacin se le muestren los mensajes para que elija cuales eliminar. Sin embargo,
sta no es la manera en la cual se dise la Apple Macintosh, y por lo tanto, cualquiera que haya usado
una Apple Macintosh o sus derivados, por ejemplo Microsoft Windows, estar acstumbrado al orden
sustentivo-verbo.
Esta es tu comunidad y esos son tus usuarios. As que a largo plazo, slo t sabrs cules acciones
administrativas son las ms necesarias. Como mnimo, sin embargo, tu sistema debe permitir hacer lo
siguiente:
encontrar las personas que contribuyen ms activamente
seleccionar un contribuidor para transformarlo en co-moderador (presumiblemente obtenindolo de
la lista anterior)
aprobar y rechazar un comentario en un hilo (esto se puede manejar en pginas ms generales del
sistema de gestin de contenidos, aunque debes tener en cuenta que la moderacin de un foro de
discusin debe ser un proceso muy afinado); fjate que estas funciones se pueden trabajar dentro de
las pginas de los usuarios, y slo se habilitan para los usuarios conectados que tienen privilegios de
moderador.

In-Class Presentations

At this point we recommend that teams present their functioning discussion forum implementations. So
that the audience can evaluate the workability of the interface, the forums should be preloaded with
questions and answers of realistic length, with material copied from Google Groups if necessary.
A suggested outline for the presentation is the following:
explain the kinds of people who are expected to use the discussion subsystem, e.g., it might be only
the site administrators (30 seconds)
without logging in or logged in as a casual visitor, demonstrate the pages that show all the forums
(if more than one), questions within a forum, and questions and answers within a single thread (1
minute)
demonstrate responding to an existing question/adding to an existing thread (30 seconds)
demonstrate asking a new question/starting a new thread (30 seconds)
log in as a forum moderator or site administrator (15 seconds)
demonstrate disapproving or moderating down a posting (30 seconds)
demonstrate viewing statistics on forum usage and participation level by user (1 minute)
show the source code for the page that shows a single thread (one question, many answers), with the
SQL query (or queries) highlighted (1 minute)
show the execution plan for that query or those queries, i.e., the output of whatever SQL
performance-tracing tool is available in the RDBMS chosen for this project (1 minute)
The presentation should be accompanied by a handout that shows (a) the data model that supports
discussion, (b) any SQL code invoked by the URL that displays one thread of discussion (pulled out of
whatever imperative language scripts it is imbedded in), and (c) the results of the query trace.

Usability
At this point your discussion forum should work. Users can register. Users can ask questions. Users can
post answers. Is it usable? Well, consider that most computer programs were considered perfect at one
time by their creator(s). It is only in encounters with real users that most problems become evident.

These encounters between freshly minted Internet applications and first users have become increasingly
startling for all parties. One reason is the large and growing user experience gap. In 1994 the average Web
user was a researcher with a Unix machine on his or her desk. Very likely the user knew how to write at
least simple computer programs. The average Web page was straight HTML 2.0 with no scripts or other
active components. All Web pages worked the same: you read the black text, you clicked on the blue text,
you were reminded by the purple text that you'd already visited a link. Once you learned how to use your
first Web site you knew how to use all subsequently visited sites.
The user experience gap has grown larger because the users are less sophisticated while the applications
have grown more complex. In 2005 the average Web user is a first-time computer user and the Web

browser may be the only application that he or she knows how to use. Despite the manifest inability of
these users to cope with a complex user interface, Web sites have been tarted up with JavaScript, ActiveX,
Java, Flash, to the point where they are as hard to use and different from each other as old Unix
applications. Users unable or unwilling to deal with the horrors of custom user interfaces have voted with
their mice. They buy at Amazon. They search at Google. They get their information from Yahoo! and
nytimes.com.

Figure 8.2: As the Internet gets older, applications become more complex and difficult to use while the
average user becomes less and less experienced. Source: Mark Hurst, www.goodexperience.com.

Idiosyncratic ideas make sense for magazine and television advertisements. Different is good when it
takes the user the same 30 seconds to absorb the message. But different is bad if it means the user needs
extra time or extra clicks to get to the desired task. Some studies show that on each extra click there is a
50 percent chance that a user will abandon the site altogether.
In mid-2000, Webvan purchased HomeGrocer, a competing grocery delivery
company, and converted the old HomeGrocer users to the new Webvan user
interface. Orders fell by more than half. The HomeGrocer business went from
breaking even to losing lots of cash simply because of the inferior usability of
the Webvan software. Ultimately Webvan went bankrupt, taking with it $1.2
billion of invested cash.

As an aid to deciding whether to


spend your future as an
engineer or go on to business
school, note that Webvan CEO
George Shaheen ran the
company into the ground, then
resigned shortly before the
bankruptcy filing, collecting a
$375,000-per-year for life
retirement package.

How is it possible that people follow what they imagine to be their own good
taste instead of either copying the successful Internet services (e.g., Yahoo!, Amazon, Google) or listening
to the users? And that people continue to believe in the value of their own ideas even as the red ink starts
to dominate their financial reports? Justin Kruger and David Dunning, experimental psychologists at

Cornell University, wondered the same thing and wrote up their findings in "Unskilled and Unaware of It:
How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments" (Journal of
Personality and Social Psychology; Vol 77, No. 6, pp 1121-1134; http://www.phule.net/mirrors/unskilledand-unaware.html). Kruger and Dunning found that people in the 12th percentile of skill estimated
themselves to be in the 62nd. Furthermore, these incompetent people failed to recalibrate themselves
when shown the range of performance by their peer group. The authors concluded that "those with limited
knowledge in a domain suffer a dual burden: Not only do they reach mistaken conclusions and make
regrettable errors, but their incompetence robs them of the ability to realize it."

Figure 8.3: Source: "Why You Only Need to Test With 5 Users" by Jakob Nielsen;
http://www.useit.com/alertbox/20000319.html

Ejercicio 6: La prueba de usabilidad


Una prueba de usabilidad ideal involucra los siguientes elementos:
1. un sujeto de experimentacin cuya experiencia con computadoras y la
Internet es comparable con lo que esperas de tu usuario promedio
2. un conjunto de tareas que quieres que conplete el sujeto
3. un ambiente tranquilo y confortable para el sujeto de experimentacin
4. ausencia de asistencia de parte de los desarrolladores del producto

Un cientfico es alguien que


mide sus resultados
comparndolos con la
Naturaleza. Un ingeniero es
alguien que mide sus resultados
comparndolos con las
necesidades humanas. Un
especialista en computacin es
alguien que no mide sus
resultados.

5. observacin del sujeto de experimentacion a travs de un vidrio espejado


6. grabacin en vdeo de la experiencia del sujeto para estudios posteriores

resultados.
nosotros

Conduce una prueba de usabilidad sobre el software de foros de discusin, incorporando los elementos 1
al 4 de la lista anterior. Puedes encontrar tus sujetos de experimentacin al menos entre tus amigosno
elijas a nadie que est tomando este curso (tus compaeros de curso van a tener demasiadas expectativas
subconcientes). Ejecuta tus pruebas de usabilidad en series, una despus de la otra, con todo el equipo de
desarrollo observando y escribiendo lo que sucede. Pide a tus sujetos que vayan diciendo en voz alta lo
que piensan. Cunto tiempo toma para que el sujeto complete la tarea? Se traba en alguno de los pasos?
En algn momento se confunde el sujeto sobre cul es el siguiente paso a dar?
Usa el siguiente guin de tareas (corta y pega esto en un documento separado e imprmelo luego de llenar
las secciones entre corchetes) sin agregar ninguna ayuda adicional: FIXME cballard: sube el guion que
uses en formato pdf en /doc/blabla
1. te conectas como un usuario no registrado a la pgina inicial del sitio, encuentra el rea donde uno
puede hacer preguntas a los otros usuarios (si no puedes completar esta tarea, o cualquier otra tarea
de este listado dentro de los 3 minutos, abandona y contina con la siguiente.)
2. lee entre las preguntas y respuestas existentes para determinar si [alguna pregunta que ya ha sido
formulada] ya ha sido formulada y respondida; si no, publica una pregunta sobre ese tema
(registrndote si eso es necesario)
3. lee entre las preguntas y respuestas existentes para determinar si [alguna pregunta que an no ha
sido formulada] ya ha sido formulada y respondida; si no, publica una pregunta sobre ese tema
4. termina tu sesin
5. te conectas con la cuenta existente de [usuario / contrasea] y tratas de encontrar todas las
preguntas sin respesta en el foro de dscusin
6. responde las preguntas que has publicado unos momentos antes, pretendiendo que eres otro usuario
7. termina tu sesin
8. te conectas con la cuenta existente de [nombre de usuario de admin / contrasea] y encuentra las
pginas de administracin
9. elimina los hilos de discusin que creaste anteriormente
10. termina tu sesin
En el tiempo entre diferentes sujetos de prueba, elimina cualquier registro que puedan haber dejado en la
base de datos. Si tu primer sujeto tiene una experiencia desastrosa, considera tomarte unas horas para
arreglar el software, agregar enlaces y anotaciones, etc., antes de proceder con el segundo sujeto.
Debes mantenerte tan lejos como sea posible del sujeto sin dejar de ver la pantalla de la computadora que
usa y los comentarios verbales que realiza. Oblgate a permanecer en completo silencio. Si el sujeto est
completamente confundido y hace clics al azar, djalo que contine hasta que se de cuenta cmo hacer las
cosas. Registra la cantidad de segundos que cada sujeto necesita para completar cada tarea.
Escrbe un informe en el servidor de tu equipo en /doc/testing/discussion-usability. Este informe
debe contener un resumen de lo que aprendiste de este ejercicio con tiempos promedio de tarea y tiempo
promedio total (podemos usar esas cifras para comparar la eficiencia de las soluciones de los diferentes
equipos). El informe debe tener hiperenlaces a subpginas que contengan las transcripciones de las
sesiones individuales de los usuarios, lo que dijo cada usuario y lo que sucedi. Enlaza tu informe desde la
pgina principal de la documentacin.

Discussion for Education

Recall from the introduction that our goal in working through this text is to build an online learning
community. An active discussion forum might be evidence of a tremendous amount of member-tomember education or it could merely be a place where loudmouths enjoy seeing their name in print.
Moderation is the first line of defense against postings that aren't responsive to the original question or
helpful to the would-be learners.
Building more structure into a discussion forum is an option worth considering, especially if your
discussion forum is supporting an organized class. The Berkman Center at Harvard Law School (HLS)
was a pioneer in this area. The teachers at HLS weren't happy with the bias in favor of early responders
inherent in a standard discussion forum system. The first response to a question gets the most readers
because it is near the top of the page, so it might be more ego-gratifying to be first than to spend more
time crafting a thoughtful response. This shortcoming was addressed by writing what they call a semisynchronous discussion forum. Responses are collected for a period of time, but not made public until the
deadline for responses is reached. The system is called the Rotisserie.
An additional capability of the Rotisserie is the ability to randomly assign participants to respond to
postings. For example, every student in a class will be required to post an essay in response to a question.
After a deadline lapses, those essays are made public. The Rotisserie then assigns to each participant the
task of responding to a particular essay. Every student must write an essay. Every essay gets a response. A
particularly good or controversial essay might get additional responses. A particularly loudmouthed
participant might elect to respond to many essays.
See http://h2o.law.harvard.edu for more information about the Rotisserie, to try it out, or to download the
software.
Suppose that your online learning community is more open and fluid. You can't insist that particular
people respond at all or that people respond on any kind of schedule. Is there anything that can be done
with software to help ensure that all questions get answered appropriately? Yes! Build server-mediated
mentoring.
Server-mediated mentoring requires, at a minimum, two things: (1) a mechanism for novice members
(mentees) to be connected with more experienced members (mentors), and (2) asking people who post
questions whether or not their question has been adequately answered. To make the service as effective as
possible, you'll probably want to add at least the following: (3) automated reminders from the server to
mentors who have left mentees hanging, and (4) rewards, rankings, and distinguishing typography to
recognize community members who are answering a lot of questions and mentoring a lot of novices.
Imagine the following interaction:
Joe Novice, never having kept an aquarium before, visits a local pet store and finds himself
attracted to the intelligent colorful fish in the African Cichlid tank.
Joe Novice, after a Google search, visits world-o-cichlids.org, reads the articles on fish that live in
Lake Malawi, and finds that it raises additional questions, which he posts in the discussion forum.
Lured by email notifications of replies to his questions, Joe returns to world-o-cichlids.org to sift
through them. As soon as Joe logs in, his "workspace" page shows all of the questions that he has
asked, all of which are initially marked "open". Having some difficulty sorting out conflicting
responses, Joe clicks on the "get a mentor page," explaining that he is a complete beginner with the
goal of keeping African Cichlids.
Jane Experienced visits the "be a mentor page" and browsing through the requests sees that most
people asking for help want to keep South American cichlids, with which she has no experience.
However, Jane has had an African tank for five years and feels confident that she can help Joe. She

agrees to mentor Joe.


Jane's "workspace" page now contains a subsection relating to her mentoring of Joe and lists his
currently open questions. Jane clicks on a question title and, seeing that none of the current
responses are truly adequate, posts her own authoritative answer.
A week later Joe returns to world-o-cichlids.org and finds that his list of "open" questions has gotten
quite long and that in fact many of these questions are no longer relevant for him. He clicks on the
"close" button next to a question, and the server asks him "Which of the responses actually
answered the question for you." Joe clicks on a response from Ned Malawinut, and the database
records (1) that the question has been adequately answered and should no longer appear in a
mentor's workspace, and (2) that Ned Malawinut has contributed an answer that was seen as useful
by another member.
Joe has a question that he thinks might be ridiculous and is afraid to try it out on the community at
large. When posting he checks the "initially show only to my mentor" option, and the question gets
sent via email to Jane and appears in her workspace.
Jane returns to the server and decides that Joe's question is not so easy to answer. She marks it for
release to the general membership.
Two weeks later Jane gets an email from the world-o-cichlids.org server. A summary of some
discussion threads that she has been following constitutes the bulk of her email, but right at the top
is a note "You haven't logged in for more than a week and Joe, whom you're supposed to be
mentoring, has accumulated three questions that haven't been adequately answered after five days."
(This prodding mechanism addresses the issue revealed when a large management consulting firm
surveyed its employees asking "Whom are you mentoring?" and "Who is mentoring you?" When
matching the responses, there was surprisingly little overlap!)
How can you estimate the effort required in building the full user experience example? Start by looking at
the number of new tables and columns that you'd be adding to the system and the number of new URLs to
which the server would be responding. Then try to find a subsystem that you've already built for this
project with a similar number of tables and page scripts. The implementation effort should be comparable.
Let's start with the data model first. To support requests for and assignment of mentors, you'll need at least
one table, mentor_mentee_map with the following columns: mentee, mentor (NULL, if not assigned),
date_of_request, date_of_assignment, mentee_goal. To support the query "who is the currently
connected member mentoring" and build the workspace subsection page for Jane, you'll want to add an
index on the mentor column. To support the query "are there any mentors who should be notified about a
message posted by a member", you would add an index on the mentee column. If you were to make this a
concatenated index on mentee, mentor, it would help the database identify outstanding requests for
mentors (mentor is NULL) efficiently for the "be a mentor page".
Attempting to support the open/closed question status display and the query "Which members have
answered a lot of questions well?" might make you regret some of the data model decisions that you made
in the preceding exercises and/or in the "Content Management" chapter exercises. In the "Content
Management" chapter we have a headline asking "What is Different about Discussion?" above the
suggestion that the content_raw table can be used to support forum questions and answers. If you went
down that route and were implementing the mentoring user experience, this is where discussion would
diverge a bit from the rest of the content on the site. You need a way to represent in the database
management system whether a discussion forum question is open or closed. If you add a
discussion_forum_question_status column to the content_raw table you'll have a NULL column
value whenever the content item is not a discussion forum question. That's not very clean. You may also
be adding a closed_question_p boolean column to indicate that a forum posting had been identified by
the original questioner as having answered the question. This will be NULL for more than 99 percent of

content items. That's not a storage efficiency problem, but it is sort of ugly.
An alternative to adding columns is to build some sort of bag-on-the-side table recording which questions
are open and closed and which answers closed them. To decide whether or not this is a reasonable
approach, it is worth starting by asking "In what percentage of queries will the helper table need to be
JOINed in?" When presenting articles and comments, you wouldn't need the table. When presenting the
discussion forum to a public user, i.e., someone who wasn't logged in, the discussion forum page scripts
wouldn't need the table data. You might need these data only when serving workspace pages to members
and when serving an individual discussion forum thread to a logged-in member. It might be worth
considering a table of the following form:
-- content_id is the primary key here; it is possible to have at most
-- one row in this table for a row in the content_raw table
create table discussion_question_status (
content_id
not null primary key references content_raw,
status
varchar(10) check (status in ('open', 'closed')),
-- if the question is closed the next column will contain
-- the content_id of the posting that closed it
closed_by
references content_raw
);
-- make it fast to figure out whether a posting closed a question
create index discussion_question_status_by_closed_by on
discussion_question_status(closed_by);

As the community gains experience with this system, it will probably eventually want to give greater
prominence to responses from members with a history of writing good answers. In a fully normalized data
model, for each answer displayed, the server would have to count up the number of old answers from the
author and query the discussion_question_status table to figure out what percentage of those were
marked as closing the question. In practice, you'd probably want to maintain a denormalized metric as an
extra column or columns in the users table, perhaps columns for n_answers_posted and
n_answers_closing, counts maintained by nightly batch updates or database triggers.
Supporting the "initially show only to my mentor" option for new content would require the addition of a
show_only_to_mentor column to the content_raw table, where it could be used for discussion forum
postings, comments on articles, and any other content item. Rather than changing all of the pages that use
the content tables it would be easier to update the SQL views that those tables use, e.g.,
articles_approved, so as to exclude content that should be shown only to a mentor.
Some new page scripts would be required, at least the following:
/workspace a page or sidebar providing a logged-in member with links to previously asked
questions and possibly other information as well, e.g., new content since last visit, recent content by
members previously marked as interesting, etc. A mentor viewing this page would also be offered
links to content marked "show only to my mentor" by the author.
/mentoring/request-form a page whereby a member can sign up to request a mentor
/mentoring/request-confirm a script that processes the preceding form and adds a row to the
mentor_mentee_map table
/mentoring/sign-up a page that shows members who are requesting mentors, with at least the first
200 characters of their request underneath
/mentoring/request-detail a click-down page showing more details of a member's request for a
mentor
/mentoring/sign-up-confirm a script that accepts a member's agreement to serve as a mentor,
updating a row in the mentor_mentee_map table

/mentoring/admin/ a page showing summary statistics for the service


Modifications would likely be required to the following pages:
buttons would be added to the page that shows a discussion forum question-and-answer exchange to
"mark this answer as closing the thread", to be displayed only to the user who asked the question
and only when the question has not previously been marked as closed
the page that displays a community member's profile would be augmented with information as to
the number of members mentored and the number of question-closing responses submitted
For the purposes of this course, you need not implement all of these grand ideas, and indeed some of them
don't make sense when a community is just getting started because the number of members is so small. If,
however, some of these ideas strike you as interesting consider adding them to your project
implementation plan.

Ejercicio 7: Plan de refinacin


Prepara un plan que describa cmo vas a mejorar tu sistema de foros de discusin, incluyendo cualquier
cambio en el modelo de datos, flujo de pginas, enlaces de navegacin, disposicin de pgina, anotaciones
(textos de ayuda), etc. Ubica este plan en el servidor de tu equipo en /doc/planning/YYYYMMDDdiscussion. (Si usas nombres con ao, mes, da al principio, se ordenan por fecha de creacin.)

Ejercicio 8: Aprobacin del cliente


Pide a tu cliente que visite las pginas de usuario y de administrador del foro de discusin. Pide a tu
cliente que revea los resultados de tus pruebas de usabilidad y el plan de refinacin. sta es una buena
oportunidad para impresionar a tu cliente con la solidez de tu metodologa. Si tu cliente responde va
email, haz que ese email sea la respuesta a este ejercicio. Si tu cliente responde oralmente, toma notas de
la conversacin y que esas notas sean la respuesta.

Ejercicio 9: Ejecuta
Luego de consultar con tus docentes de prcticas, ejecuta tus mejoras planeadas.

Time and Motion


One programmer who has mastered the basics of Web/db scripting can usually whip out a basic questionand-answer forum in 8 hours. The team together will need to spend about one hour preparing a good inclass presentation. The team together will generally require 3 hours to conduct and write up the user test.
Talking to the client and refining the forum will generally take at least as long as the initial development
effort.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Cmo agregar usuarios mviles a su comunidad


parte de Ingeniera del software para aplicaciones en internet por Eve Andersson, Philip Greenspun, y Andrew Grumet
Entre los principios que rigen a las comunidades online sustentables vistos en el captulo Planificacin de este libro, no
se mencionaron los siguientes:
7. medios para esperar que arranquen las computadoras
8. medios para encadenar a los usuarios a sus escritorios
9. medios para producir ***strain injury***
Aunque las alternativas varan en popularidad de pas a pas, al momento de escrbir este captulo (febrero 2005), no hay
razones para suponer que los programas de escritorio como Mozilla Firefox y Microsoft Internet Explorer proporcionan
las mejores formas de participar en comunidades online.
En este captulo aprenders cmo abrar tu comunidad a los usuarios que se conectan mediante pequeos dispositivos
mviles.

Ponte en el lugar del usuario


Si puedes cerrar tus ojos y visualizar una persona que participa en tu comunidad, cmo sera esa participacin? Los
usuarios que consideraste hasta ahora probablemente se sentaban en sus escritorios, con sus manos tecleando sesenta
palabras por minuto y sus miradas puestas en una pantalla de 20 pulgadas. Por el contrario, un usuario mvil puede ir
caminando por una concurrida calle o mirando desde la cima de una montaa. Las pantallas sern de unas pocas
pulgadas, y pueden escribir cinco a diez palabras por minuto. Qu clases de contenidos y medios de participacin sern
los ms apropiados para esta clase de usuarios?

Ejercicio 1
Mediante tu telfono o uno de los emuladores que se discuten ms adelante en este captulo, usa la Internet mvil para:
encontrar el pronstico del tiempo en tu ciudad
obtener el precio de las acciones de IBM
buscar ineluctable en el diccionario
comprar un libro en amazon.com (al menos hasta la ltima pantalla de confirmacin)
visitar www.photo.net y encontrar la ltima pregunta que se realiz
Para cada tarea, escribe cunto tiempo te toma completarla. Luego repite las tareas con un navegador de HTML de
escritorio y escribe esta vez tambin tus tiempos.

Ejercicio 2
Prepara una lista de dos o tres servicios de tu comunidad de aprendizaje online que sern valiosos para los usuarios
mviles. Las siguientes guas te van a ser de utilidad:
Oportunidad. La participacin activa de sus miembros es lo que sostiene a la comunidad. An cuando los
miembros estn separados en el tiempo, cualquiera que haya participado en un debate candente en una BBS, una
subasta online o una sesin de chatt puede apreciar el valor de la interaccin oportuna. Los navegadores mviles
estn particularmente bien adaptados a este tipo de interaccin porque permiten que el usuario se mantenga
conectado en una amplia variedad de escenarios.
Brevedad. Los usuarios con pequeas pantallas van a tener dificultades para recibir, leer y entrar grandes
cantidades de contenido.
Aplicaciones nativas. Es usual que los celulares vengan con navegadores ya instalados. Hasta que las compaas
de telfono proporcionen General Packet Radio Service (GPRS) en la regin de tus usuarios, va a ser imposible
ofrecer una aplicacin que use de manera simultnea voz e hipertexto. Sin embargo, es posible producir un
documento de hipertexto que proporcione el marcado mediante un solo clic de un nmero de telfono que
especifique el publicador.

Estndares
An cuando los bits se transporten mediante un red propietaria, cualquiera puede servir contenido a dispositivos mviles
mediante un servidor Web estndar (figura 9.1).

Figura 9.1: El contenido que va a los dispositivos mviles se dirige desde un servidor HTTP en la Internet pblica a
travs de TCP/IP y en algunos casos se transforma a los formatos y protocolos propietarios que funcionan dentro de la red
inalmbrica de la compaa de telfonos antes de alcanzar el aparato de destino.
Como se ilustr ms arriba, el telfono celular se conecta a tu servidor a travs de la red inalambrica del proveedor de
servicios. Dependiendo de los telfonos y de la red, la nube marcada como Red inalmbrica puede contener
enrutamiento estndar con Internet Protocol (IP), un proxy estndar de HTTP o una pasarela WAP. En el ltimo caso, la
pasarela y el telfono se comunican mediante un conjunto especial de protocolos que, entre otras cosas, comprimen los
datos antes de la transmisin sobre la red inalmbrica. El efecto neto es que el navegador del telfono (algunas veces
denominado micronavegador [microbrowser] busca un servidor HTTP pblico de la misma manera que un navegador
Web estndar enva solicitudes HTTP GET y POST.
El contenido se entrega en formato XHTML Mobile Profile, que es un subconjunto
estricto de XHTML, el cal a su vez es una versin de HTML que puede escribirse en
XML. A continuacin se nuestra una sesin de shell cuyo resultado se devuelve en la
forma de un documento XHTML-MP lo suficientemente breve como para imprimirlo en
forma completa.
Documento ejemplo en XHTML-MP
% telnet philip.greenspun.com 80
Trying 216.127.244.134...
Connected to philip.greenspun.com.
Escape character is '^]'.
GET /seia/mobile/ex1.html HTTP/1.0
HTTP/1.0 200 OK
MIME-Version: 1.0
Content-Type: text/html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>
XHTML-MP Example
</title>
</head>
<body>
<p>We're not in the 1970s anymore.</p>
</body>
</html>
Connection closed by foreign host.

La industria mvil consume


lenguajes de marcas a una rpida
velocidad. La progresin nos lleva
desde Handheld Device Markup
Language (HDML; 1997) al Wireless
Markup Language (WML; 1998) y
hasta la recomendacin actual,
Mobile Profile (XHTML-MP; 2001).
Podemos sentirnos tranquilos por el
hecho de que XHTML-MP deriva de
XHTML, la recomendacin del World
Wide Web Consortion para los
navegadores estndar. Ya son
historia las pocas en las cuales el
desarrollador tena que aprender un
nuevo lenguaje y se tenan que
configurar los servidores para que
enven una nueva cabecera
Content-Type para entregar
contenido s los dispositivos mviles.
Por estas razones tenemos la
expectativa de que XHTML-MP ser
ampliamente adoptado y gozar de
una mayor estabilidad que sus
predecesores.

El texto en negrita (ms arriba) es lo que escribe el programador, simulando una solicitud del micronavegador. El
intercambio se parece mucho a lo que ya hemos visto para un navegador HTML convencional. Las principales
diferencias son la inclusin de la declaracin XML y la definicin del tipo de documento en las dos primeras lneas y el
uso del atributo de namespace llamado xmlns, en la apertura de la etiqueta html.
Si un servidor desea distinguir entre usuarios de escritorio y mviles, entonces podra buscar en los contenidos de la
cabecera HTTP Accept si est la cadena de caracteres application/xhtml+xml;
profile="http://www.wapforum.org/xhtml", la cual supuestamente es requisito de la especificacin de XHTML
Mobile Profile (http://www.openmobilealliance.org/tech/affiliates/wap/wap-277-xhtmlmp-20011029-a.pdf). Por el
contrario, si un navegador de escritorio indica que acepta XML, en general no se va a referir al perfil mvil. A
continucin se muestra el resultado que proporciona Microsoft Internet Explorer 6.0 como cabecera Accept:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*

Mozilla 1.4a (el Netscape Navigator open source) promete aceptar XHTML:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/xmng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Puedes advertir que Mozilla hace uso en toda su extensin de la concepcin original de la Web, en la cual el servidor y el cliente negocian
para proveer al usuario el mejor archivo posible en respuesta a una solicitud para un URL abstracto. El orden de los tipos MIME en la
cabecera Accept es irrelevante. El navegador indica su preferencia con valores de calidad (la q de quality), por ejemplo en el valor
text/html;q=0.9, Mozilla indica que HTML plano y simple es menos preferible que los tres tipos XML precedentes, que tienen el valor
predeterminado 1.0 de calidad. Para parender ms sobre este sistema, debes ver la seccin sobre Quality Values en la especificacin
del HTTP 1.1, en http://www.w3.org/Protocols/rfc2616/rfc2616.html

Un segundo mtodo para distinguir entre escritorio sy micronavegadores pasa por examinar la cabecera HTTP UserAgent. Considere las siguientes dos sesiones de shell, en las cuales las entradas que escribe el usuario se resaltan en
negrita:
Sin cabeceras extras

Dice que es una Palm

% telnet www.google.com 80
Trying 216.239.57.99...
Connected to www.google.com.
Escape character is '^]'.
GET / HTTP/1.1

% telnet www.google.com 80
Trying 216.239.57.99...
Connected to www.google.com.
Escape character is '^]'.
GET / HTTP/1.1
User-Agent: UPG1 UP/4.0 (compatible; Blazer 1.0)

HTTP/1.1 200 OK
Date: Tue, 22 Apr 2003 01:20:53 GMT
Cache-control: private
Content-Type: text/html
Server: GWS/2.0
Content-length: 2691

HTTP/1.1 302 Found


Date: Tue, 22 Apr 2003 01:37:18 GMT
Location: http://www.google.com/palm
Content-Type: text/html
Server: GWS/2.0
Content-length: 156

<html><head>
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1">
<title>Google</title><style>...</style>...
</head><body>...</body></html>

<HTML><HEAD><TITLE>302 Moved</TITLE></HEAD>
<BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com/palm">here</A>.
</BODY></HTML>

Connection closed by foreign host.


Connection closed by foreign host.

Aunque ninguna de las solicitudes indica cul es el tipo de medio preferido, el servidor de Google reconoce el navegador
Blazer que se entrega con los dispositivos de palma Handspring y redirige el navegador , mediante las lneas de
respuesta HTTP/1.1 302 Found y Location: http://www.google.com/palm. Es una lstima que no haya un registro de
los agentes de usuario, mantenido en forma centralizada, y por lo tanto el nivel de xito de este mtodo depende en gran
parte de la diligencia del programador.

Ejercicio 3
Resumen. Pega el cdigo anterior del ejemplo XHTML-MP, desde la declaracin <?xml ...> hasta la etiqueta de cierre
</html>, en un archivo de nombre ex1.html en tu servidor Web y carga el ejemplo en diferentes clases de navegadores.
Te recomendamos que ubiques ese archivo en el subdirectorio /mbl/ de la pgina raz del servidor Web.

Paso 1 navegador mvil. Carga la pgina en un navegador mvil y admira el trabajo de tus
manos. Si no tienes acceso a un telfono con capacidad de navegacin Web, instala o ubica un
emulador por software o una herramienta basada en Web. Busca en los enlaces al final del captulos
las sugerencias. Supn por un momento que has puesto el documento en /mbl/softwareengineering-for-internet-applications/examples/example1.html. Afectar ello la cantidad
de tiempo requerida para completar este ejercicio?

Figure 9.2:
Paso 2 navegador de escritorio. Ahora carga la pgina en tu navegador favoito de escritorio. Maravllate frente a la
compatibilidad cruzada de nevegadores de tu documento. Compara tu experiencia subjetiva en cada caso y luego
responde la siguiente pregunta: En un mundo donde los navegadores de escritorio y los mviles pueden explorar la
misma sintaxis de marcado, necesitamos distinguir entre ambos?, o podemos servir el mismo documento a todas las
clases de usuarios?

Hiperenlaces de teclado
Echemos un vistazo a una pgina con hiperenlaces:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>
Student
</title>
</head>
<body>
<ol>
<li><a
<li><a
<li><a
<li><a
<li><a
</ol>
</body>

Life

href="calendar" accesskey="1">Calendar</a></li>
href="/academics/grades" accesskey="2">Grades</a></li>
href="urgent-messages" accesskey="3">Urgent Messages</a></li>
href="events/frat-parties" accesskey="4">Fraternity Parties</a></li>
Figure 9.3:
href="http://news.google.com/" accesskey="5">News</a></li>

</html>

Se presenta una lista enumerada de opciones, y cada opcin es un hiperlenlace al destino correspondiente. Aprovechamos
el atributo accesskey de la etiqueta de ancla, para mejorar la usabilidad: el usuario puede seguir cualquier enlace
apretando una nica tecla.

Ejercicio 4
El procesamiento del lado del servidor y los formularios funcionan de la misma manera para los navegadores mviles que
para los navegadores de escritorio. Escribe un documento XHTML-MP que solicite a la entrada una direccin de correo

electrnico (o un alias, si decidiste ignorar los cnosejos de los socilogos acerca de la anonimato) y contrasea, luego
debes hacer un POST hacia el servidor con esos datos. La respuesta del servidor debe mostrar la direccin ingresada y el
primer carcter de la contrasea, seguido de un punto por cada carcter que siga en la contrasea. Te recomendamos qu
pongas tu cdigo de tal manera que sea accesible mediante URIs con el prefijo /mbl/.

Ejercicio 5: Autenticacin via cookies


Los telfonos y pasarelas de los E.E.U.U. que hemos probado admiten cookies HTTP, includas las cookies persistentes,
de la misma manera que los navegadores Web estndares, con una excepcin: si hay una coma en una cookie, todo deja
de funcionar. (Debes tener en cuenta que las comas no son aceptables en la especificacin HTTP estricta, sino que los
navegadores de escritorio han sido en general permisivos.)
Para utilizar la autenticacin mediante cookies, necesitas volver a revisar el Ejercicio 4 de construccin de formularios, y
escribir el script que generauna cabecera Set-Cookie con el elemento (token) de autenticacin. Nuestra recomendacin
es que hagas a este cookie persistente, porque es muy engorroso escribir la direccin de email en un teclado numrico.
Puedes aprovecharte en la intranet de una organizacin para autocompletar la porcin @foobar.com or @yow.org de
la direccin de correo electrnico para la mayora de los usuarios.

Ejercicio 6: Enlaces a nmeros de telfono


Mira en http://www.wapforum.org/what/technical.htm y en http://developer.openwave.com (requiere una registracin
gratuita) para ver informacin sobre el Wireless Telephony Application Interface (WTAI). Escribe una pgina denominada
mom.html que entrega un enlace con el texto ancla Aqu tienes una moneda; Llama a tu madre y dile que tienes serias
dudas sobre si vas a poder ser un abogado. Cuando se sigue ese enlace, el telfono debe discar el nmero de telfono de
tu madre. Pedimos disculpas por la inapropiado de la longitud del mensaje del hiperenlace, pero si se da el caso que te
toca caer en una organizacin que valora ms la autoestima que los logros, hemos pensado que sera bueno recordarla a
cada uno cmo se siente la vida en la Harvard Law School.
Trasfondo: The Paper Chase (1973, dir. James Bridges).

Ejercicio 7: Escribe una pgina para tomar el pulso


Mientras ests paseando te encuentras con alguien que expresa su excepticismo acerca de la vala de tu comunidad de
aprendizaje online. Sacas tu telfono mvil y vas a la pgina pulso de tu servidor. Ella retorna, en XHTML-MP, la
siguiente informacin:
la cantidad de usuarios registrados en las ltimas 24 horas y 7 das
la cantidad de nuevos mensajes en los foros de discusin en las ltimas 24 horas y 7 das
cualquier otra estadstica que t, como dueo del sitio, encuentres interesante

Ejercicio 8: Disea y construye la interfaz mvil para tu comunidad


Ahora que dominas los fundamentos, disea y construye la interfaz mvil de tu comunidad. Debes tener presente que:
Telfonos y emuladores se comportan de manera diferente.
Los micronavegadores no son ni de cerca tan indulgentes como los navegadores de escritorio, como por ejemplo el
Internet Explorer; se requiere una sintaxis 100 % correcta.
Los telfonos reales puede que no sean capaces de cargar pginas desde servidores que corren en puertos no
estndares.
La interfaz mvil debera ser accesible al usuario mvil que escribe nicamente el nombre de host de tu sitio, o sea, el
usuario no debera tener que escribir el subdirectorio /mbl/. Esto se logra en general mediante una sentencia IF en el
script de primer nivel de la pgina raz en tu servidor Web.
Esta es una buena oportunidad para ser creativo. La navegacin desde un telfono puede ser lenta, costosa y dolorosa.
Cada lnea de informacin debe ser crticamente importante para el usuario. Para darte un empujn inicial, aqu tienes
algunas ideas:

alguien que hizo una pregunta en una comunidad online estar muy interesado en saber si hay nuevas respuestas
para su consulta
en una pequea comunidad, lo que puede resultar muy til es una lista de los usuarios y sus nmeros de telfono,
de tal manera de por discarlos con una nica tecla

Ejercicio 9: Aprobacin del cliente


Las interfaces mviles son como muy extravagantes para muchos clientes, y por ello no les puedes pedir ideas sin antes
moestrarles algo que funcione y que sea relevante para sus usuarios. Muestra tu interfaz mvil a tu cliente, idealmente en
una entrevista personal donde uses un telfono de verdad. Si no puedes arreglar as las cosas, trata de tener una entrevista
personal donde uses un emulador. Si esto no resulta prctico, intenta trabajar con la interfaz durante una llamada en
conferencia, en la cual el cliente usa un telfono o un emulador.
Escribe las respuestas del cliente a las siguientes preguntas:
Cul es la utilidad de la interfaz mvil que acaba de ver?
Cul es la informacin adicional que se debe poner a disposicin de los usuarios mviles?
Cules son las tareas ms importantes que los usuarios deben poder realizar desde sus telfonos?

Busca oportunidades para Ofrecer (push)


Hasta ahora hemos considerado el modelo sincrnico solicitud/respuestas, que llega al mundo de los dispositivos mviles
desde el mundo de la naegacin Web de escritorio. En otra forma usual de comunicacin, el usuario recibe informacin
de manera asincrnica desde un servidor robot o desde un compaero de la comunidad. Los usuarios de escritorio
reconocern como aplicaciones de esta modalidad a las alertas de email y la mensajera instantnea. Los dos
requerimientos para la comunicacin asincrnica, ligada al usuario, son (a) el usuario debe tener una direccin, o sea,
mediante una direccin de correo electrnico o un alias, y (b) el usuario debe correr un software que escucha a su favor,
por ejemplo, un servidor de correo o un cliente de mensajera instantnea. Estas capacidades se conocen colectivamente
como push en la industria inalmbrica.
Dependiendo del proveedor de servicio inalmbrico del usuario, puede haber oportunidades para entregar mensajes de
texto o multimedia a tus usuarios a medida que suceden eventos interesantes dentro de tu comunidad. Muchos telfonos
mviles, por ejemplo, pueden recibir breves mensajes de texto a travs del sistema de correo electrnico. La direccin
de email del telfono se forma concatenando el dominio especfico del proveedor con el nmero de telfono. As, si el
nmero de telfono 617-555-1212 de Verizon Wireless pertenece a John, podemos enviarle alertas mediante email a
6175551212@vtext.com.

El futuro
En la mayora de los paises, la Internet mvil no ha estado a la altura del enorme xito que se esperaba. La notable
excepcin es el sistema i-mode, que se ha transformado en el medio dominante de acceso a Internet en Japn. Pensamos
que hay dos razones que explican el xito relatico del i-mode: la conectividad simpre online y las oportunidades de rentas
para los publicadores.
Los sistemas occidentales de Internet mvil tpicamente involucra una demora de discado y de autenticacin que puede
ser tanto como dos minutos para la primer pgina; con el sistema i-mode que siempre est online, el usuario obtiene una
performance consistente y un resultado relativamente rpido para las solicitudes iniciales. Los primeros sistemas mviles
occidentales cobraban por cada minuto de conexin, lo cual era doloroso para los usuarios que escriban texto lentamente
sobre teclados numricos y reciban texto a 9600 baudios. Los sistemas siempre online como el i-mode tienden a cobrar
por byte transferido o una tarifa plana mensual por el acceso, lo cual en general reduce la posibilidad de una factura
desproporcionadamente grande a fin de mes.
En la mayor parte de los sistemas de Internet mvil, la compaa telefnica decide cules sitios van a ser de inters para
los usuarios y los ubica en un conjunto de marcadores favoritos predeterminados. La compaa telefnica con frecuencia
cobra al publicador del sitio por promocionarlos a sus clientes. Cul es el resultado? Todos los primeros sistemas en
E.E.U.U. hacan fcil conectarse a amazon.com para comprar libros, la cual se demostr que luego que no era una
actividad popular. DoCoMo, la compaia japonesa que maneja el servicio i-mode, eligi un enfoque diferente. DoCoMo
determin que ellos no era lo suficientemente creativos como para darse cuenta qu es lo que sus usuarios iban a querer

de la Internet mxil. Por ello, crearon un sistema en el cual los proveedores de contenido estn disponibles ms o menos
en forma pareja. Los proveedores de contenido puede obtener rditos econmicos a travs de imgenes de propagandas o
cobrando por contenido premium. Cuando un proveedor quiere cobrar, DoCoMo maneja el pago y toma una comisin del
5-9 %.
*************************** La combinacin de simpre online y ausencia de inanicin para los proveedores de
contenido cre una explosin de creatividad de parte de los publicadores. Los servicios ms populares parecen ser
aquellos que conectan personas con otras personas, en lugar de los sitios de comercio electrnico de business-toconsumer al estilo amazon.com.
Hay alguna esperanza de que la Internet mvil eventualmente se transforme en algo tan popular como lo es i-mode en
Japn? El primer rayo de esperanza lo puso el General Packet Radio Service (GPRS). GPRS toma ventaja de los
momentos de silencio en el trfico de voz dentro de una celda para entregar un mximo terico de 160kbits/s mediante la
utilizacin de frecuencias sin usar en un momento particular. El GPRS requiere nuevos aparatos de telefona que estn
equipados para escuchar simultneamente tanto en la conexin de cinmutacin de circuitos dedicada en uso para la
llamada de voz y tambin en las frecuencias GPRS para captar paquetes entrantes. En la prctica, GPRS puede
proporcionar nicamente tres a cuatro veces la velocidad de los sistemas WAP existentes. Ms importante es el hecho que
GPRS puede dar, en teora, la experiencia siempre online similar a la de i-mode o de las computadoras cableadas de
escritorio.
Como se indic ms arriba, con GPRS la Internet inalmbrica puede transformarse en el lugar que admita la interaccin
simultnea de voz y texto. Por ejemplo, se puede dar el siguiente escenario:
El Usuario disca el telfono de la empresa de aerolneas
Aerolnea: Por favor, diga el nombre de la ciudad de partida
Usuario: Londres
Aerolnea: Por favor, diga el nombre de la ciudad de destino
Usuario: Pars
Aerolnea: enva un documento WAP va GPRS al telfono del usuario, enlistando vuelos alternativos
Usuario: hojea el documento WAP, revisando con la vista los horarios y precios de los vuelos, y elige el vuelo
deseado con el teclado numrico del telfono
...
Se puede ver que los mensajes de voz y el reconocimiento de voz resultan convenientes cuando el usuario debe
seleccionar entre cientos de alternativas, por ejemplo, la lista de los aeropuestos del mundo. Sin embargo, la voz se
vuelve una interfaz agnica si el usuario debe escuchar una larga lista de opciones detalladasel despliegue de las
opciones en forma de texto puede ser mucho mejor cuando hay ms de dos o tres opciones disponibles, especialmente si
cada opcin requiere una especificacin elaborada. Ten presente: "The Magical Number Seven, Plus or Minus Two:
Some Limits on Our Capacity for Processing Information" por George A. Miller (The Psychological Review, 1956, vol.
63, pp. 81-97; http://www.well.com/user/smalin/miller.html).
No existe evidencia de que las compaas telefnicas fuera de Japn van a despertar y ver el poder de compartir los
ingresos. Sin embargo, con la introduccin de GPRS la Internet inalmbrica se va a transformar en algo ms que una
novedad. Si quieres leer algo ms sobre el tema de GPRS, mira el artculo de Peter Rysavy: Emerging Technology:
Clear Signals for General Packet Radio Service en Network Magazine, Diciembre 2000
(http://www.rysavy.com/Articles/GPRS2/gprs2.html). There is no evidence that the phone companies outside Japan will
wise up to the power of revenue sharing. However, with the introduction of GPRS the wireless Internet will become
something better than a novelty. For more on the subject of GPRS see Peter Rysavy's "Emerging Technology: Clear
Signals for General Packet Radio Service" in Network Magazine, December 2000
(http://www.rysavy.com/Articles/GPRS2/gprs2.html).

Ms informacin en:
Informacin sobre estndares:
http://www.openmobilealliance.org Open Mobile Alliance, el cuerpo que determina los estndares para
computacin mvil
http://www.wapforum.org/what/technical.htm Sitio histrico del WAP Forum, un predecesor de la Open Mobile

Alliance. Gran parte de la documentacin tcnica WAP, que incluye a XHTML-MP, WTAI, y las especificaciones
de arquitectura WAP residen aqu.
http://www.w3.org/TR/css-mobile Especificacin CSS Mobile Profile 1.0, para controlar el estilo de despliegue
de los documentos XHTML-MP
Paquetes de desarrollo de software (software development kits SDK) y navegadores capaces de WAP estn disponibles
en:
http://developer.openwave.com/ Openwave Developer Website (requiere una registracin gratuita)
http://www.forum.nokia.com/main.html Nokia Website, en el rea del WAP Developer Forum (requiere una
registracin gratuita)
http://www.ericsson.com/mobilityworld/sub/open/index.html Ericcson Developer's Zone (requiere una
registracin gratuita)
http://www.gelon.net/ Gelon WAPalizer, puede correr a travs de tu navegador.
General Packet Radio Service (GPRS):
http://www.rysavy.com/Articles/GPRS2/gprs2.html
El viejo estndar WML:
la versin anterior de este captulo en http://philip.greenspun.com/seia/mobile/index-old

Tiempo y movimiento
Cada miembro del equipo deve pasar por los ejercicios bsicos, del 1-6, individualmente y puede ocupar all
aproximadamente unas cinco horas.
El equipo debe planificar una a dos horas juntos diseando la interfaz mvil, pero puede dividir el trabajo de haceer el
prototipo y refinar la interfaz mvil. Un alcance razonables es de ocho a doce horas-programador.
El tiempo erquerido para la aprobacin del cliente va a variar dependiendo del nivel de inters del cliente y de su
familiaridad con la Web mvil. Planifica al menos treinta minutos para esta tarea.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Voz (VoiceXML)
parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet ; Revisado en febrero 2005
En cada era de la computacin, los programadores se han encargado de escribir la lgica de la aplicacin fundamental. Durante la era de aplicacin de
escritorio (1980), la atencin prestada a esta lgica fue eclipsada en general por la que figura en la interfaz de usuario, gestin de eventos, y el cdigo
de grficos que un equipo de programacin necesitaba escribir para obtener un programa de ordenador en las manos de los usuarios. Resultado: muy
poca innovacin a nivel individual; ms ampliamente los programas de ordenador utilizados fueron escritos por grandes empresas.
Durante la era de la Web (1990), la interfaz de usuario y los grficos fueron prestados por el navegador Web, por ejemplo, Netscape Navigator o
Microsoft Internet Explorer. Los programadores eran capaces de ofrecer un sistema completo para los usuarios finales despus de escribir solamente
la lgica de aplicacin y algo de HTML sencillo especificar el comportamiento de la interfaz de usuario. Resultado: una revolucin en la innovacin,
con la mayora de las aplicaciones web escritas en unos meses por un puado de personas.
Supongamos que se haba observado que los telfonos son mucho ms comunes y fciles de transportar que los ordenadores personales y los
navegadores web. Adems, usted ha notado que los telfonos son capaces de ser utilizado por casi todo el mundo, mientras que muchos consumidores
tienen poca paciencia para las complejidades de la PC. Por lo tanto, usted quiere que su sistema de informacin accesible para un usuario con un solo
telfono. Cmo lo has hecho? En la dcada de 1980, que le alquila una lnea telefnica, compra una caja grande especializada para reconocer
expresiones, comprar otra caja especializada para hablar con el usuario, y el parque de esas cajas justo al lado del servidor principal para su
aplicacin. En la dcada de 1990, habras tenido que alquilar una lnea telefnica, comprar software especializado, y aparcar un ordenador estndar en
ejecucin que el software al lado del servidor que ejecuta la aplicacin. Resultado en los dos decenios: muy poca innovacin, con slo las ms
grandes organizaciones que ofrecen interfaces de voz / telfono a sus sistemas de informacin.
Con la llegada de los navegadores de voz de hoy, los prximos aos prometen ser un perodo de gran innovacin en el desarrollo de aplicaciones de
Internet de telfono accesible. Con una aplicacin web, usted opera el servidor HTTP y ejecuta el cdigo de la aplicacin; otra persona corre el
navegador. La idea de que el navegador de voz es el mismo. Usted opera un servidor y la aplicacin. Alguien, tal vez la compaa de telfonos,
ejecuta las lneas telefnicas y el navegador de voz.
En pocas palabras: los navegadores de voz le permiten construir aplicaciones de voz telefnica con nada ms que un servidor HTTP. A partir de esto,
gran innovacin se dejar ver.

Ilustracin
Supongamos Tracy, vicepresidente de una firma con sede en Boston, acaba de volado a Los ngeles. Ella quiere saber el nmero de telfono y
direccin de la oficina de Los ngeles de su empresa, as como el nmero directo de uno de los empleados. Desde su intranet de la compaa
telefnica no es accesible, tiene que llamar a su asistente y le invito a abrir un navegador Web para buscar la informacin en la intranet.
Con VoiceXML, puede tomar tan poco como un par de horas para un desarrollador a tomar prcticamente cualquier informacin disponible en la web
y hacer que est disponible por telfono - no slo para las personas que llaman con telfonos mviles de alta tecnologa, sino a cualquier persona con
cualquier tipo de telfono. Tracy sera capaz de marcar un nmero y decir qu oficina o empleado que est buscando. Despus de buscar a travs de
alguna de las tablas de base de datos de la intranet, la aplicacin VoiceXML puede leer en voz alta los nmeros de telfono y direcciones que quiere.
Y la prxima vez Tracy llega confundido en una ciudad extranjera, ella no tendr que depender de su asistente de estar en su escritorio.

Cul es VoiceXML?
VoiceXML o VXML, es un lenguaje de marcado como HTML. La diferencia: HTML es interpretado por el navegador web para dar formato a los
contenidos y facilidad de entrada formas; VoiceXML se representa mediante un navegador de voz. Su aplicacin puede hablar con el usuario a travs
de un sintetizador de voz o archivos de audio pregrabados. Su software puede recibir la entrada del usuario a travs del habla o por los tonos desde el
teclado del telfono. Si alguna vez has construido una aplicacin Web, usted est listo para empezar a utilizar la aplicacin de telfono.

Cmo hacer que su contenido telefnica accesible


Como en los viejos tiempos, todava se puede alquilar una lnea telefnica y ejecutar el software de reconocimiento de voz y comercial (TTS)
software de conversin de texto a voz. Sin embargo, el aspecto ms interesante de la revolucin VoiceXML es que usted no necesita en realidad lo
haga. Hay pasarelas VoiceXML gratuitas, tales como Tellme ( http://www.tellme.com ), BeVocal ( http://www.bevocal.com ) y VoiceGenie (
http://www.voicegenie.com ). stos toman pginas VoiceXML de su servidor Web y leer a su usuario. Si su aplicacin necesita la entrada del usuario,
la puerta de entrada interpretar la respuesta entrante y pasar esa respuesta a su servidor de forma que su software puede entender.

Figura 10.1: HTML: Editorial posee el servidor HTTP, que utiliza HTML para especificar una experiencia de usuario que se representa en la
computadora de escritorio del lector. VoiceXML: Editores posee el servidor HTTP, que utiliza VoiceXML para especificar una experiencia de usuario
que se representa en un sistema de puerta de enlace de tercero-partido y entregado como de audio para el telfono del usuario.
Se utiliza un formulario Web para configurar la puerta de enlace con la URL de su aplicacin, y ser asociar un nmero de telfono con l. En el caso
de Tellme, los usuarios llaman 1-800-555-Tell, marque su extensin de 5 dgitos, y ahora que estn hablando con su aplicacin.

Ejercicio 1
Utilice Tellme (1-800-555-Tell) a
obtener direcciones de conduccin entre dos bastiones de la educacin superior: Caltech (California 1201 Oriental Boulevard, Pasadena, CA) y
Pasadena City College (1570 East Colorado Boulevard, Pasadena, CA)
encontrar el ltimo precio de una participacin en acciones de Oracle Corporation
escuchar su horscopo
escuchar las principales noticias de hoy
Registrar la cantidad de tiempo requerido para completar las tres primeras tareas.

Ejercicio 2
Vamos con una lista de dos o tres servicios de su comunidad de aprendizaje que sern valiosos para los usuarios de telfonos. Usted puede encontrar
las siguientes pautas tiles:
Es difcil que los usuarios inician sesin. Con las aplicaciones de voz, entrando en un nombre de usuario es Un desarrollo positivo en esta rea es que
nmero de puertas de enlace de voz (por
an ms tedioso y propenso a errores que con las aplicaciones mviles. Es posible que desee restringir sus un
ejemplo, VoiceGenie, www.voicegenie.com )
servicios de voz a los que se puede acceder por toda la comunidad y no slo a los usuarios registrados. Una ahora se han asociado con los proveedores
alternativa a la autenticacin de nombre de usuario / contrasea estndar es asignar un user_id numrico y de software de autenticacin biomtrica de
voz como VoiceTrust ( www.voicepin para cada usuario registrado, pero eso lo hace ms complicado de hacer los servicios Web / Mobile /
trust.com/ ) y Vocent ( www.vocent.com ).
Phone todos en uno.
Es fcil dar informacin al usuario, pero es difcil para ellos dar informacin a su servicio. Por lo general es prctico para ellos para recoger
opciones de un men, pero poco prctico para que proporcionen cualquier informacin no estructurada significativas.

Fundamentos VoiceXML
El formato de un documento VoiceXML es simple. Aqu es cmo decir "Hola, mundo" para que aparezca:
<? Xml version = "1.0"?>
<Versin vxml = "2.0">
<Form>
<Block>
<Audio> Hola Mundo </ audio>
</ Block>
</ Form>
</ Vxml>

La primera etiqueta, <?xml version="1.0"?> , especifica que el documento que sigue se ajusta al estndar XML 1.0. Todos los documentos
VoiceXML siguen este estndar.
Al igual que en cualquier documento XML, cada etiqueta de apertura (por ejemplo, <vxml> ) tiene que ser cerrado, ya sea con una etiqueta de cierre,
como </vxml>, o con una barra ( / ) al final de la etiqueta, como en el <else/> etiqueta en el siguiente ejemplo. La otra regla importante a recordar
es que todos los valores de los atributos deben ir entre comillas, como en version="2.0" . XML es mucho ms estricto que HTML en estos dos
aspectos.
El <vxml version="2.0"> etiqueta especifica que se trata de un documento VoiceXML 2.0. Dentro de ese es un <form>, que puede ser o bien un
elemento interactivo - solicitando la entrada del usuario - o informativo. Puede tener tantas formas como desee dentro de un documento VoiceXML.
Un <block> es un contenedor para sus ejecutables, lo que significa que todas las etiquetas que hacen que su aplicacin hacer algo, como <audio> ,
<goto> , y una variedad de otros, pueden ser agrupados juntos dentro de un bloque. <audio>text</audio> leer el texto con un convertidor de TTS,
mientras que <audio src="wav_file_URL"/> jugarn un archivo de audio .wav pregrabado.

Ejercicio 3
Regstrese para obtener una cuenta de desarrollador en una de las pasarelas de VoiceXML (ver la lista al final de este captulo). Todas las puertas de
enlace tienen cuentas de desarrolladores libres y muchos servicios tiles para los desarrolladores. Preferimos BeVocal por su extensa documentacin y
la gran cantidad de herramientas que ofrece, incluyendo: un corrector de sintaxis; un emulador basado en la Web para que usted pueda hacer algunas
de sus pruebas en su PC sin usar un telfono; un depurador en lnea; un registro de las llamadas, incluyendo mensajes de error, los valores de
variables, e incluso grabaciones de las declaraciones reales de los usuarios; una biblioteca de gramticas y el cdigo que puede utilizar; y ms. Sin
embargo, todas las puertas de enlace tienen sus propias fortalezas y debilidades, para utilizar el que ms te guste; no hay una eleccin equivocada.
La puerta de enlace le asignar un nmero de telfono o extensin que se puede apuntar a su servidor Web. Apunte a un archivo llamado helloworld.vxml que contiene el ejemplo VoiceXML arriba. Este ejemplo debera funcionar con la mayora de las puertas de enlace, pero cada gateway
emplea ligeramente diferente sintaxis VoiceXML, as mirada sobre la documentacin en lnea proporcionada por la puerta de entrada a elegir.

Ms VoiceXML
He aqu un ejemplo que acepte la entrada de usuario y se comporta de forma diferente dependiendo de lo que dice el usuario:
<? Xml version = "1.0"?>
<Versin vxml = "2.0">
<Form id = "animal_questionnaire">
<Nombre del campo = "favorite_animal">
<Prompt>
<Audio> Qu te gusta ms, los perros o los gatos? </ Audio>
</ Prompt>
<Gramtica>
<! [CDATA [
[
[Perro perros] {<opcin "perros">}
[Gato gatos] {<option "gatos">}
]
]]>
</ Gramtica>
<! - Si el usuario dio una respuesta vlida, el bloque de llenado
se ejecuta. ->
<Llenado>
<Si cond = "== favorite_animal 'perros'">
<! - Esto podra llevar al usuario a un formulario llamado
popular_dog_facts dentro de la misma VoiceXML
Documento ->
<Ver la siguiente = "# popular_dog_facts" />
<Else />
<! - Esta expresin es una EMCAScript (JavaScript)
expresin, compuesto de una cadena concatenada
y variables; esto llevar al usuario a la
URI psychological_evaluation.cgi? Afliccin = gatos
->
<Ir a expr = "'psychological_evaluation.cgi? Afliccin ='
+ Favorite_animal "/>
</ If>
</ Llenado>
<! - Si el usuario respondi pero no coincide con el
la gramtica, el bloque NoMatch se ejecuta ->
<NoMatch>
Lo siento, no entend lo que dijiste.
<Nueva solicitud />
</ NoMatch>
<! - Si no hay respuesta por unos pocos segundos, la
bloque noinput se ejecuta ->
<Noinput>
Lo siento, no te oigo.
<Nueva solicitud />
</ Noinput>
</ Field>
</ Form>
<! - Formularios adicionales pueden ir aqu ->
</ Vxml>

En este ejemplo, nosotros:


pedir a la persona que llama si prefieren los perros o los gatos
escuchar una respuesta
redirigir la persona que llama a otra ubicacin sobre la base de la respuesta
La estructura del cdigo VoiceXML en este ejemplo es bsicamente idntica a la del ejemplo de "Hello, World", con algunos elementos adicionales.
Las dos primeras lneas estn presentes en todos los documentos VoiceXML 2.0. A continuacin, tenemos una forma; esta vez el formulario se
denomina, como debemos hacer si queremos tener ms de una forma en un documento.
Creamos una variable llamada favorite_animal utilizando la <field> etiqueta.
Despus de que hemos llevado a los usuarios una respuesta, tenemos que especificar lo
que el usuario est autorizado a responder mediante la definicin de una gramtica.
Usted encontrar que varias pasarelas tienden a utilizar diferentes formatos de
gramtica. La gramtica en este ejemplo es en el formato de GSL (de Nuance
Especificacin de la Gramtica Language), que es utilizado por Tellme y BeVocal, entre
otros. La gramtica anterior especifica que si el usuario dice "perro" o "perros", el valor
de favorite_animal convierte en "perros." Si responden "gato" o "gatos",
favorite_animal se establecer en "gatos".

Nota sobre las gramticas

En VoiceXML 1.0, el W3C no especific el formato de la


gramtica, permitiendo que cada plataforma VoiceXML para
implementar las gramticas que eligieron. En VoiceXML
2.0, se requiere que cada plataforma para implementar el
formato XML de reconocimiento de voz Gramtica Formato
del W3C (SRGF), el ltimo borrador de la cual est
disponible desde http://www.w3.org/TR/grammar-spec/ .

En la implementacin de un proveedor, la siguiente


Eso es todo lo que hay que conseguir la entrada del usuario. Ahora podemos usar el
valor de su respuesta en nuestro programa. En este ejemplo, si su respuesta es "perros", gramtica SRGF se puede utilizar en lugar de la gramtica
en el ejemplo:
sern enviados a un formulario denominado "popular_dog_facts" dentro del mismo
documento VoiceXML. Si responden "gatos", que se enviarn a un diferente URL,
<Xml gramtica: lang = "es-ES"
type = "/ SRGS + xml aplicacin" version = "1.0">
psychological_evaluation.cgi?affliction=cats. Nota cmo se utiliz una
<Rule id = alcance "animal" = "pblico">
expresin de JavaScript en el goto etiqueta con el fin de utilizar el valor de la
<One-of>
favorite_animal variable.
<Item>
Estos dos ejemplos son suficientes para darle la esencia de VoiceXML y es de esperar
una apreciacin por la simplicidad de desarrollo de aplicaciones de voz utilizando
VoiceXML.
Excelente tutorial y material de referencia se pueden encontrar en los sitios de

<one-of tag = "perros">


<Item> perro </ item>
<Item> perros </ item>
</ One-of>
</ Item>
<Item>
<one-of tag = "gatos">
<Item> gato </ item>

Excelente tutorial y material de referencia se pueden encontrar en los sitios de


desarrolladores en Tellme ( http://studio.tellme.com/ ) y BeVocal (
http://cafe.bevocal.com/ ).

Ejercicio 4: Gramtica Precisin


Crear una pgina simple que pide al usuario el nombre de una ciudad en Canad.
Comience con una pequea gramtica, por ejemplo:
[Vancouver toronto halifax] {<option "valid_city">}

<Item> gato </ item>


<Item> gatos </ item>
</ One-of>
</ Item>
</ One-of>
</ Rule>
</ Gramtica>

Sin embargo, otros fabricantes han implementado el SRGF


ligeramente diferente. Como la especificacin SRGF grada
de una "recomendacin candidato", las implementaciones de
SRGF proveedores deben converger.

Su aplicacin debe responder al usuario con algo como "S, eso es una ciudad canadiense" o "Nunca he odo hablar de esa ciudad."
Pruebe su aplicacin. Nombre algunas ciudades que no estn en la lista y ver si se piensa errneamente que son ciudades vlidos. Ahora aadir
algunos ms ciudades a la lista (por ejemplo, Calgary, Winnipeg, Victoria, Saskatoon). Como usted hace su lista de ms y ms, usted tiende a
comenzar a conseguir unos pocos falsos positivos.
Decidir sobre una regla de oro para el nmero de elementos es razonable tener en una gramtica.
Ejemplos de las aplicaciones que tienen miles de elementos en una gramtica. Sin embargo, se han ido por lo general a travs de un proceso de sintona gramtica utilizando
probabilidades representativos para los partidos de la gramtica. Para este ejercicio, simplemente extender la gramtica estndar por encima.

Ejercicio 5: Novedades y Usuarios nuevos


Aadir voz accesible "lo nuevo" y "quin es" caractersticas nuevas a su comunidad. Un usuario debe ser capaz de llamar y escuchar los ltimos cinco
contribuciones de otros miembros de la comunidad y los nombres de los ltimos cinco personas que se inscribieron.
Considere que si usted est autenticacin de usuarios a travs del telfono de las contribuciones que podran ser ms interesantes son las nuevas
respuestas a las preguntas formuladas por dicho usuario.

Ejercicio 6: Contenido Aprobacin / Rechazo por Telfono


Muchos sitios web tienen contenido creado por el usuario que debe ser aprobado por un administrador o moderador antes de que sea en vivo en el
sitio. Ejemplos de ello son las opiniones de productos en amazon.com, el artculo presentaciones en slashdot.org y publicaciones de BBS en un foro
moderado.
Tpicamente que le abra su navegador web, inicie sesin, y va a una pgina de administracin desde donde se puede aprobar, rechazar o editar
presentaciones.
Pero seguro que sera bueno para aprobar y rechazar presentaciones con su telfono mvil cuando ests fuera a pasear al perro. (La edicin es ms
difcil de hacer por telfono, pero es menos comn de todos modos, por lo que puede esperar hasta que ests de vuelta en su escritorio.)
Crear algunas pginas de administracin de voz accesible simples. Dado que la autenticacin tpico nombre de usuario / contrasea es tan tedioso, es
posible que desee hacerlas accesibles con slo un pin numrico. Tenga en cuenta que no es lo ideal, en general, para proteger un conjunto de pginas
con un solo pasador porque eso hace que sea ms difcil delegar / revocar privilegios de administrador despus, pero lo har para este ejercicio.

Ejercicio 7: Implementar Algunos Servicios Bienes


Dependiendo de la complejidad de los servicios que se le ocurri en el Ejercicio 2, implementar uno o dos o tres de ellos. Si implementa ms de uno,
es posible que desee crear un men de servicio de voz como punto de entrada para todos sus usuarios de voz.

Ejercicio 8: Signoff Cliente


Al igual que con las interfaces de navegador mvil, una interfaz de voz es difcil para la mayora de la gente piense acerca hasta que realmente han
utilizado uno. Trate de sentarse con el cliente cara a cara y observarlos pasar por todos los rincones de su interfaz de VoiceXML. Si eso no es prctico,
por correo electrnico sus clientes instrucciones explcitas y luego un seguimiento con una llamada telefnica.
Anote las respuestas del cliente a las siguientes preguntas:
Qu tan til cree usted que la interfaz de voz que acaba de intentar ser?
Qu informacin adicional debe que poner a disposicin a travs de la voz?
Cules son las tareas ms importantes que los usuarios le gustara ser capaz de lograr desde un telfono estndar usando slo los tonos al tacto
y la voz?

Mobile frente Aplicaciones de Voz


Navegadores de texto mviles y VoiceXML cada uno tiene puntos fuertes y dbiles y por lo tanto son apropiados para diferentes aplicaciones - o para
diferentes partes de la misma aplicacin.
Navegador Mvil

VoiceXML

requiere telfonos navegador mejorado

se puede utilizar con cualquier telfono

facilidad de entrada con teclados incmodos

entrada de voz o el teclado

funciona bien en ambientes ruidosos

difcil de usar en ambientes ruidosos

funciona bien en ambientes ruidosos

difcil de usar en ambientes ruidosos

es necesario desarrollar versiones de su software para una variedad de


pasarelas mviles

slo es necesario para desarrollar una versin de su


software

funciona bien para la visualizacin de una larga lista de informacin

funciona mal para dar al usuario una larga lista de


informacin

usuario puede introducir informacin arbitraria

usuario slo puede decir frases predefinidas


Figura 10.2:

Una forma de aprovechar lo mejor de interfaces mviles de voz y ser el desarrollo de aplicaciones multimodales como el sistema de reserva de
vuelos GPRS en el ltimo captulo. Varios grupos estn desarrollando activamente especificaciones para aplicaciones multi-modales, incluyendo el
discurso de la aplicacin Idioma Etiquetas (SAL) Foro ( http://www.saltforum.org/ ).

Ms all de VoiceXML: Habla Conversacional


Todas las aplicaciones de voz ser aplicaciones VoiceXML? La sintaxis actual de VoiceXML est orientado a producir una experiencia de usuario de
navegacin por los mens jerrquicos. Estado actual de la tcnica de investigacin se est moviendo ms all de esta hacia sistemas de conversacin
en la que cualquier expresin tiene sentido en cualquier momento y donde el contexto se realiza desde Exchange a Exchange. Por ejemplo, usted
puede llamar al Laboratorio del MIT para el servidor de Ciencias de la Computacin en el 1-888-573-8255:
Usted: Llover maana en Boston?
JUPITER: Que yo sepa, el pronstico es de ninguna lluvia maana en Boston.
Usted: Qu hay de Detroit?
JUPITER: Que yo sepa, el pronstico es de ninguna lluvia maana en Detroit.
Usted: Hay inundaciones en los Estados Unidos?
JUPITER: advertencias de inundaciones se han emitido para Louisiana y Mississippi.
Usted: Ser soleado en Phoenix?
...
Observe cmo el sistema, se describe ms detalladamente en http://groups.csail.mit.edu/sls/applications/jupiter.shtml , supone que todava estabas
interesado en la lluvia cuando le preguntamos sobre Detroit, el contexto prorrogados de la cuestin de Boston.
En el largo plazo, ya que estas tecnologas de conversacin ms natural se perfeccionan, la sintaxis de VoiceXML tendr que crecer para dar cabida a
todo el poder de los intrpretes del habla o ser eclipsada por otra norma.

Ms
Gateways VoiceXML:
Tellme ( http://studio.tellme.com/ )
VoiceGenie ( http://developer.voicegenie.com/ )
Voxeo ( http://www.voxeo.com/ )
BeVocal Cafe ( http://cafe.bevocal.com/ )
HeyAnita FreeSpeech ( http://freespeech.heyanita.com/ )
Enlaces relacionados:
VoiceXML Forum ( http://www.voicexml.org/ )
Artculos de voz en developer.com ( http://www.developer.com/voice/ )
Especificaciones y noticias de la Web Consortium, http://www.w3.org/Voice/ . Cabe destacar que las caractersticas interesantes de esta edicin
incluyen
Voz Extensible Markup Language (VoiceXML) Specification Version 2.0 ( http://www.w3.org/TR/voicexml20/ )
Reconocimiento de voz Gramtica Specification Version 1.0 ( http://www.w3.org/TR/grammar-spec/ )
cdigo fuente y estudios de casos desde una versin anterior de este artculo, "VoiceXML: Dejar que la gente habla a su Servidor HTTP a travs
del Telfono", disponible en http://eveandersson.com/arsdigita/asj/vxml

Tiempo y Movimiento
Cada miembro del equipo debe trabajar a travs de los conceptos bsicos, los ejercicios 1-4, de forma individual y esperar pasar dos o tres horas.
El equipo debe planear para pasar una o dos horas juntos el diseo de la interfaz de voz, pero puede dividir el trabajo de creacin de prototipos y el
perfeccionamiento de la interfaz de voz, ms ejercicios 5 y 6. Una alcance razonable es de ocho a doce horas de programador.
El tiempo requerido para visto bueno del cliente puede variar dependiendo del nivel de inters del cliente. Tenemos pensado pasar al menos treinta
minutos en el visto bueno.
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Translate

From:

English

To:

Spanish

View:

Translation

Original

Escala con Gracia


parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet
Veamos de nuevo en el paso de un lenguaje de patrones , citado en el captulo "Planificacin":
"No es difcil ver por qu el gobierno de una regin cada vez menos manejable con el tamao. En una poblacin de N personas, hay del
orden de N 2 enlaces de persona a persona necesarios para mantener canales de comunicacin abiertos. Naturalmente, cuando N va ms
all de un cierto lmite, los canales de comunicacin necesarios para la democracia y la justicia y la informacin son simplemente
demasiado obstruidas, y demasiado compleja; burocracia abruma proceso humano ....
"Creemos que los lmites se alcanzan cuando la poblacin de una regin alcanza algunos 2-10000000 Ms all de este tamao, la gente se
vuelve distante de los procesos a gran escala del gobierno Nuestra estimacin puede parecer extraordinaria a la luz de la historia
moderna:.. La nacin -Estados han crecido poderosamente y sus gobiernos tienen el poder lo largo de decenas de millones, a veces
cientos de millones, de personas. Pero estas enormes poderes no pueden pretender tener un tamao natural. No pueden decir que han
conseguido el equilibrio entre las necesidades de los pueblos y comunidades y las necesidades de la comunidad mundial en su conjunto.
De hecho, su tendencia ha sido la de anular las necesidades locales y reprimir la cultura local, y al mismo tiempo engrandecerse a s
mismos hasta el punto en que estn fuera de su alcance, su poder apenas concebible para el ciudadano medio ".
Tambin vamos a recordar la evidencia emprica de que enormes comunidades en lnea no pueden satisfacer todas las necesidades. America Online no
ha subsumido todas las comunidades ms pequeas en Internet. La gente darse de baja de las listas de correo cuando el nivel de trfico es demasiado
alta. Los primeros usuarios de los grupos de discusin de USENET (llamados "Netnews" o "grupos de noticias" de nuevo en las dcadas de 1970 y
"Grupos de Google" para la mayora de personas en 2005) dej de participar porque encontraron la utilidad de los grupos disminuye cuando el tamao
de la comunidad creci ms all de cierto punto .
As que la buena noticia es que, no importa cmo los competidores de uno grande, siempre habr espacio para una nueva comunidad en lnea. La
mala noticia es que los resultados de crecimiento en retos de ingeniera significativos. Algunos de los retos que se reducen a la ingeniera de
rendimiento simple: Cmo se puede dividir la carga de soportar una aplicacin de Internet entre varias CPU y unidades de disco? Estos normalmente
se pueden resolver con el dinero, incluso en ausencia de cualquier inteligencia. Los desafos ms profundos no pueden ser resueltos con el dinero y el
hardware. Considere, por ejemplo, las siguientes preguntas:
Cmo pueden las 100.000 personas mantener una conversacin?
Cmo puede un apoyo de la comunidad de aprendizaje en lnea 50 000 personas con 50 mil diferentes niveles de pasin por el tema y de
participacin?
Cul es el analgico electrnico de mantenerse en contacto con los vecinos? Con uno de los amigos?
En este captulo vamos a considerar en primer lugar los problemas de hardware y de software sencillos, a continuacin, pasar a los retos ms sutiles
que crecen cada vez ms difcil, ya que la comunidad de usuarios se expande.

Tareas en la sala de mquinas


Estas son las tareas fundamentales que se estn produciendo en los servidores de prcticamente todas las aplicaciones interactivas de Internet:
cifrado de capa de transporte (SSL si el sitio tiene pginas HTTPS seguras)
Servicio HTTP
capa de presentacin (composicin de pgina, la ejecucin del script)
prestacin abstraccin (a veces llamada "lgica de negocio"; cualquier capa de cdigo en la parte superior de la base de datos en bruto en cada
procedimiento es utilizado por ms de una pgina)
persistencia
En un sitio modestamente visitado, sera posible tener una CPU de realizar todas estas tareas. De hecho, para facilitar el mantenimiento y la fiabilidad
que lo mejor es tener el menor nmero y, como simples servidores como sea posible. Considere la posibilidad de su PC de escritorio, por ejemplo.
Cunto tiempo ha pasado desde que el hardware no? Si nos fijamos en una sala con 50 ordenadores simples o estaciones de trabajo de una placa,
con qu frecuencia usted ve uno que no est disponible debido a un fallo de hardware? Supongamos, sin embargo, que se combinan las
computadoras para apoyar su aplicacin. Si una mquina es 99 por ciento confiable, un sitio que depende de 10 tales mquinas ser solamente 0,99 10
fiable o 90 por ciento. El anlisis de probabilidad aqu es el mismo que mover de un tirn monedas, pero con un fuerte sesgo hacia 0.99 cabezas.
Usted necesita obtener 10 cabezas en una fila con el fin de tener un servicio de trabajo. Qu pasa si usted necesit 100 mquinas a estar en
funcionamiento? Eso slo va a suceder 0,99 centsima parte del tiempo, o aproximadamente el 37 por ciento.
No es difcil de tirar de hardware en un problema de rendimiento. Lo que es difcil es la creacin de ese hardware para que el servicio est
funcionando, si alguno de los componentes estn en funcionamiento en lugar de slo si todos los componentes estn en funcionamiento.

Examinaremos cada capa individualmente.


Capa de Persistencia
Para la mayora de las aplicaciones web interactivas, la capa de persistencia es un sistema de gestin de bases de datos relacionales (RDBMS). El
programa servidor RDBMS es analizar las consultas SQL, escribiendo las transacciones en el disco, hurgando en el disco (s) para los datos de poco
uso, pegando los datos en la memoria RAM, y devolverla al programa cliente RDBMS. Punto de vista del ingeniero promedio ms alto de la cabeza
es que el rendimiento RDBMS est limitada por la velocidad del disco (s). Los programadores de Oracle no estn de acuerdo: "Un servidor Oracle
configurado correctamente se ejecutar CPU unido."
Supongamos que tenemos una aplicacin popular y necesitamos 16 CPUs para apoyar todas las consultas de bases de datos. Y supongamos tambin
que hemos decidido que el RDBMS se ejecutar por s mismo en uno o ms equipos fsicos. Hay que comprar 16 computadoras pequeas, cada una
con una CPU, o un gran equipo con 16 CPUs en el interior? La tienda de equipo local vende PCs 1 CPU por alrededor de $ 500, lo que implica un
costo total de $ 8000 para 16 CPU. Si nos visita el sitio Web de Sun Microsystems ( www.sun.com ) nos encontramos con que el precio de un 16-CPU
Sunfire 6800 es demasiado alto, incluso a la lista, pero si el pasado sirve de gua que no se salga por menos de $ 200.000. Vamos a pagar 25 veces
ms para conseguir 16 CPUs de la misma potencia, pero todos dentro de un equipo fsico.
Por qu alguien hara esto?
Vamos a considerar las peculiaridades de la aplicacin RDBMS. Las conversaciones de servidor RDBMS a varios clientes al mismo tiempo. Si el
cliente A actualiza un registro en la base de datos y, una fraccin de segundo ms tarde, las solicitudes de cliente B ese registro, se requiere que el
RDBMS para entregar la informacin actualizada al Cliente B. Si furamos a difundir el programa servidor RDBMS en varios equipos fsicos, es
posible que el cliente A se sirve de Informtica I y Client B se sirve de Informtica II. Una transaccin de base de datos no puede ser cometido a
menos que se ha escrito a la unidad de disco duro. Por lo tanto todo lo que estos equipos necesitan hacer es comprobar el disco para actualizaciones
antes de devolver ningn resultado a unidades de cliente B. disco son 100.000 veces ms lenta que la RAM. Un nico equipo con un RDBMS
mantiene una versin actualizada de las partes utilizadas de la base de datos en la memoria RAM. As que nuestro servidor RDBMS multi-equipo que
garantiza la coherencia de la base de datos a travs de los procesadores a travs de la referencia al disco duro comenzar a cabo 100.000 veces ms
lento que un servidor RDBMS de un solo equipo.
Productos RDBMS comerciales tpicos, como Oracle Parallel Server, el trabajo a travs de todos los equipos de mantenimiento de las copias de la
base de datos en la memoria RAM e informar a la otra de cambios a travs de redes de comunicaciones de alta velocidad. La comunicacin de
mquina a mquina puede ser tan simple como un enlace Ethernet de alta velocidad o tan complejo como tableros y cables que alcanzan velocidades
de bus de memoria de circuitos especializados.
No tenemos el mismo problema de sincronizacin entre la CPU con un servidor de caja nica multi-CPU? Absolutamente. CPU I est sirviendo
Cliente A. CPU II est sirviendo Cliente B. Las dos CPUs tienen que informar a la otra de las actualizaciones de la base. Lo hacen mediante la
escritura en la RAM compartida de la mquina multiprocesador. Resulta que el ancho de banda de la CPU-CPU disponibles en servidores de gama
alta tpicas alrededor del ao 2002 es de 100 Gbits / segundo, que es 100 veces ms rpido que el ms rpido disponible Gigabit Ethernet, FireWire, y
otras tecnologas de bajo costo de interconexin de mquina a mquina.
En pocas palabras: si usted necesita ms de una CPU para ejecutar el RDBMS, por lo general tiene ms sentido para comprar toda la CPU en una caja
fsica.
Capa de abstraccin
Supongamos que usted tiene un clculo complejo que debe ser realizada en varios lugares diferentes dentro de un programa de ordenador. Lo ms
probable es que te encapsular ese clculo en un procedimiento y luego llama a este procedimiento de todas las partes del programa en el que se
requiere el clculo. Los beneficios de la abstraccin de procedimiento son que es suficiente con escribir y depurar el cdigo de clculo de una vez
que, si cambian las reglas, usted puede estar seguro de que al actualizar el procedimiento nico que has actualizado toda su aplicacin.
La capa de abstraccin se refiere a veces como "lgica de negocio". Algo que es complejo y fundamental para el negocio debe ser separado de modo
que puede ser utilizado en mltiples lugares consistente y actualizado en un lugar si es necesario. A continuacin se muestra un ejemplo de un sistema
de comercio electrnico que escribi Eva Andersson. Este sistema ofrece prcticamente todas las caractersticas de amazon.com circa 1999. Eva
espera que una gran cantidad de programadores torpes que adopt a su creacin de cdigo abierto estara actualizando los guiones de la pgina con el
fin de dar a su sitio una apariencia nica. Eve espera que las leyes y los procedimientos de contabilidad en relacin con el impuesto de ventas
cambiaran. As que se encapsula la mira de impuesto sobre las ventas por estado, el averiguar si el impuesto cargos estatales en el envo, y la
multiplicacin de la tasa de impuesto por precio en una funcin de Oracle PL / SQL:
crear o sustituir la funcin ec_tax
(V_price en nmero, v_shipping en nmero, v_order_id EN entero)
nmero de devolucin
ES
impuestos ec_sales_tax_by_state% ROWTYPE;
tax_exempt_p ec_orders.tax_exempt_p% TIPO;
COMENZAR
Tax_exempt_p SELECT INTO tax_exempt_p
DESDE ec_orders
DONDE order_id = v_order_id;
SI tax_exempt_p = 't' ENTONCES
return 0;
TERMINARA SI;
T SELECT. * En impuestos
DESDE ec_orders o, ec_addresses un ec_sales_tax_by_state t
DONDE o.shipping_address = a.address_id
Y a.usps_abbrev = t.usps_abbrev (+)
Y o.order_id = v_order_id;

SI NVL (taxes.shipping_p, 'f') = 'f' ENTONCES


volver NVL (taxes.tax_rate, 0) * v_price;
ELSE
volver NVL (taxes.tax_rate, 0) * (+ v_price v_shipping);
TERMINARA SI;
FIN;

La secuencia de comandos Web u otro procedimiento PL / SQL que llama a esta funcin slo necesitan saber el costo propuesto de un elemento, el
coste de envo propuesto, y el orden de ID a los que se podra aadir este artculo (estos son los tres argumentos para ec_tax ). Eso impuestos de
ventas para cada estado se almacenan en la ec_sales_tax_by_state mesa, por ejemplo, est escondido del resto de la aplicacin. Si una
organizacin que adopt este software decidi pasar a utilizar software de terceros para el clculo del impuesto, que la organizacin tendra que
cambiar slo esta funcin en lugar de vadear a travs de cientos de secuencias de comandos Web en busca de cdigo relacionado con impuestos.
Si la capa de abstraccin de ejecutar en su propio equipo fsico? Para la mayora de las aplicaciones, la respuesta es "no". Estos procedimientos no son
suficientemente intensivo de la CPU para dividir a retirarse en un equipo independiente que vale la pena en trminos de esfuerzo la administracin del
sistema y el aumento de la vulnerabilidad a la falla de hardware. Lo que es ms, estos procedimientos a menudo ni siquiera justifican un nuevo
entorno de ejecucin. La mayora de los procedimientos en la capa de abstraccin de un servicio de Internet requieren acceso ntimo a las tablas de
bases de datos relacionales. Que el acceso es ms rpido cuando los procedimientos se estn ejecutando dentro del propio RDBMS. Todos RDBMSes
modernas prevn la ejecucin de las lenguas de procedimiento estndar en el servidor de base de datos. Esta tendencia fue iniciada por Oracle con PL
/ SQL y Java. Con la ms reciente de Microsoft SQL Server que supuestamente puede ejecutar cualquier lenguaje de programacin .NET soportado
dentro de la base de datos.
Cundo se debe considerar un entorno separado ("aplicacin de servidor" proceso) para la capa de abstraccin? Supongamos que un gran banco, el
resultado de varias fusiones, tiene un mainframe de IBM para administrar las cuentas de cheques, un RDBMS de Oracle para la gestin de las cuentas
de crdito, y un sistema de atencin al cliente basado en SQL Server. Si Jane telfonos de clientes hasta el banco y le pide que pagar su factura de
tarjeta de crdito de su cuenta de cheques, un programa de computadora necesita para llevar a cabo una transaccin en el mainframe (comprobacin
de dbito), una transaccin en el sistema Oracle (tarjeta Visa de crdito), y un transaccin en la base de datos de SQL Server (pago manejado durante
una llamada telefnica con el Agente # 451). Tcnicamente es posible, por ejemplo, un programa de Java que se ejecuta dentro del Oracle RDBMS se
conecte a estos otros sistemas de gestin de base de datos pero tradicionalmente este tipo de problemas ha sido atacado por un "servidor de
aplicaciones" independiente, por lo general un programa personalizado-autor de C . El trmino "servidor de aplicaciones" posteriormente se ha
acostumbrado a describir los equipos fsicos en los que tal programa podra correr y, a finales de 1990, los entornos de ejecucin de Java o C
programas que sirvieron alguna funcin en un sitio Web que no sea la pgina de presentacin o persistencia .
Otro ejemplo de un servidor de aplicaciones donde fsico independiente podra ser deseable es donde debe realizarse el clculo sustancial. En la
mayora de los sitios para compartir fotos, cada vez que una foto se carga el servidor debe crear versiones escaladas en tamaos estndar. El reto de
rendimiento en el orbitz.com web de viajes es an ms grave. Cada peticin de usuario resultados en la ejecucin de un programa Lisp escrito por ex
alumnos del MIT Laboratorio de Inteligencia Artificial en itasoftware.com . Este programa Lisp busca a travs de una base de datos de dos mil
millones de vuelos y tarifas. Las mquinas de bases de datos que estn realizando transacciones como reservas de billetes colapsaran si tuvieran que
soportar estas bsquedas tambin.
Si CPUs fsicas separadas se van a emplear en la capa de abstraccin, en caso de que todos vienen de la misma caja o va a trabajar igual de bien a rack
y apilar mquinas 1-CPU baratos? Eso ms bien depende de donde se mantiene el estado. Recuerde que HTTP es un protocolo sin estado. En algn
lugar del servidor tiene que recordar las cosas tales como "Usuario Registrado 137 quiere ver las pginas en el idioma francs", "usuario no registrado
que inici sesin 6.781.205 ha colocado a la edicin de tapa dura de Los Peces cclidos en su carrito de compras. " En una granja de servidores de
varios equipos multi-proceso, es imposible garantizar que un determinado usuario siempre ser devuelto al mismo programa de ordenador en
ejecucin, si no por otra razn que desea que la experiencia de usuario sea robusta al fracaso de un individuo equipo fsico. Si el estado de sesin se
mantiene en cualquier lugar que no sea en una cookie o la capa de persistencia (RDBMS), sus programas de servidor de aplicaciones tendrn que
comunicarse entre s constantemente para asegurarse de que su base de datos ad hoc es coherente. En ese caso, podra tener sentido para conseguir
una costosa mquina multi-CPU para soportar el servidor de aplicaciones. Sin embargo, si todas las capas son sin estado a excepcin de la capa de
persistencia, la capa de servidor de aplicaciones puede ser manejado por varias mquinas de una sola CPU baratos. En orbitz.com, por ejemplo,
bastidores de computadoras baratas estn cargados de copias locales idnticas de la base de datos de tarifas y horario. Cada vez que un usuario hace
clic para ver las opciones para viajar de Nueva York a Londres, una de esas mquinas de servidor de aplicaciones se ha seleccionado al azar para la
accin.
Capa de presentacin
Los programas de ordenador en la capa de presentacin tiran de la informacin de la capa de persistencia (RDBMS) y se fusionan esos resultados con
una plantilla adecuada a las preferencias del usuario y software de cliente. En una aplicacin web de estos programas informticos estn haciendo una
consulta SQL y combinar los resultados con una plantilla HTML para su entrega al navegador del usuario. Dicho programa es tan simple que se
refiere a menudo como un "guin". Usted puede pensar en la capa de presentacin como "donde los scripts se ejecutan".
El lugar ms comn para la ejecucin del script se encuentra dentro del proceso del sistema operativo ocupada por el servidor Web. En otras palabras,
el intrprete de lenguaje de secuencia de comandos est integrado en el servidor Web. Los ejemplos de esta arquitectura son Microsoft Internet
Information Server (IIS) y pginas Active Server, servidor AOL y su intrprete incorporado en Tcl, Apache y mod_perl complemento. Si usted ha
elegido para utilizar uno de estos estilos populares de desarrollo Web, que ha elegido para combinar la capa de presentacin con la capa de servicio
HTTP, y repartir la carga entre mltiples CPUs para una capa de forma automtica se extendi por el otro.
La caja de multi-CPU contra la toma de separada de la caja mltiple aqu de nuevo debe basarse en si es o no la capa de presentacin tiene estado. Si
no hay ningn estado de sesin est en manos de los scripts de presentacin en ejecucin, es ms econmico para agregar CPUs dentro de equipos
fsicos separados.
Servicio HTTP
Servicio HTTP per se es tan simple que casi no merece su propia capa, a menos que ests entrega de archivos de audio y vdeo a un pblico masivo.

Un programa de alto rendimiento HTTP pura servidor como Zeus Web Server (ver www.zeus.com ) puede manejar ms de 6.000 solicitudes por
segundo y saturar un enlace de red de 100 Mbps en un solo 500 MHz de procesador Intel Celeron (ese enlace 100 Mbps costara unos 50.000 dlares
al ao a partir de febrero de 2005, por cierto). Por qu entonces alguien alguna vez tenga que implementar varias CPUs para apoyar el servicio HTTP
de pginas HTML bsicas con imgenes incrustadas?
La razn principal de que la gente se quede sin capacidad en un nico servidor front-end web es que los programas de servidor HTTP suelen ser
empaquetados con software para soportar capas computacionalmente ms costosas. Por ejemplo, el servidor de Oracle RDBMS, capaz de soportar la
capa de persistencia y la capa de abstraccin, tambin incluye el software necesario para interpretar Java Server Pages y la realizacin de servicio
HTTP. Si se ejecuta un popular servicio directamente desde Oracle usted probablemente necesita ms de una CPU. Los ejemplos ms comunes son
los servidores Web como IIS y AOLserver que son capaces de manejar las capas de presentacin y servicio HTTP desde el mismo proceso del sistema
operativo. Si sus scripts implican una gran cantidad de plantilla de anlisis, es fcil sobrecargar una sola CPU con las exigencias de la intrprete Web
del servidor / script.
Si ningn estado se almacena en la capa de servicio HTTP es ms barata para agregar CPUs en cajas fsicas separadas. HTTP es aptrida y la
interaccin del usuario es totalmente mediada por el RDBMS. Por lo tanto no hay razn para que una CPU que sirve una pgina a usuario A a querer
comunicar con una CPU que sirve una pgina a usuario B.
Transporte-Layer Encryption
Siempre que se sirve una pgina Web, dos programas de aplicacin en equipos independientes han comunicado entre s. Como se discuti en el
captulo "Conceptos bsicos" , el cliente abre un Protocolo de Control de Transmisin (TCP) conexin con el servidor, especifica la pgina deseada, y
recibe los datos de nuevo sobre esa conexin. TCP es una capa desde el Protocolo de Internet no fiables bsico (IP). Lo que agrega TCP es la
fiabilidad: si no se reconoce un paquete de datos, ser retransmitido. Ni TCP ni la IP de la dcada de 1990, IPv4, proporciona ningn tipo de cifrado
de los datos que se transmiten. Por lo tanto cualquier persona capaz de controlar los paquetes de la red de rea local del servidor o cliente o en los
routers troncales puede ser capaz de aprender, por ejemplo, las pginas particulares solicitadas por un usuario en particular. Si se ejecuta una
comunidad en lnea acerca de una enfermedad degenerativa, esto podra causar una de sus usuarios a perder su puesto de trabajo.
Hay dos maneras de proteger la privacidad de los usuarios de analizadores de paquetes. La primera es mediante el uso de una nueva versin del
protocolo de Internet, IPv6, que proporciona seguridad de datos nativo, as como autenticacin. En el mundo IPv6 gloriosa, podemos estar seguros del
origen de un paquete, si se trata de un usuario legtimo o un atacante de denegacin de servicio. En el mundo IPv6 gloriosa, podemos estar seguros de
que va a ser poco prctico para olfatear nmeros de tarjetas de crdito u otros datos confidenciales de los usuarios del trfico Web. A partir de la
primavera de 2005, sin embargo, no es posible registrarse para obtener una conexin IPv6 casa. Por lo tanto nos vemos obligados a recurrir al enfoque
de 1990 de estilo de aadir una capa entre HTTP y TCP. Esta fue iniciada por Netscape Communications como Secure Sockets Layer (SSL) y ahora
est siendo estandarizado como TLS 1.0 (ver http://www.ietf.org/html.charters/tls-charter.html ).
Sin embargo, se lleva a cabo, el cifrado es intensivo del procesador. En el lado del cliente, eso no es un gran problema. La mquina cliente
probablemente tiene un procesador de 2 GHz que es el 98 por ciento de inactividad. Sin embargo, en el extremo del servidor cifrado realizar puede
atar a toda una CPU por usuario durante la duracin de una solicitud.
Si has quedado sin poder de procesamiento el nico que puede hacer es ... aade la potencia de procesamiento. La pregunta es qu tipo y dnde.
Adicin de procesadores de propsito general a un equipo multi-CPU es muy caro como se mencion anteriormente. Adicin de servidores
adicionales front-end de una sola CPU para una granja de servidores de dos niveles podra no ser una mala estrategia sobre todo porque, si ya est
ejecutando un conjunto de servidores de dos niveles, que no requiere nuevas habilidades de pensamiento o de administracin del sistema. Es posible,
sin embargo, que el hardware de propsito especial ser ms rentable o ms fcil de administrar. En particular, es posible hacer el cifrado en el router
para IPv6. El cifrado SSL para las conexiones HTTP se puede hacer con tableros enchufables, un ejemplo de que es el Compaq AXL300, tarjeta PCI,
disponible en 2005 por 1.400 dlares con un rendimiento reclamado de manejar 330 conexiones SSL por segundo. Finalmente es posible interponer
una mquina de cifrado de hardware entre el servidor Web, que se comunica a travs de HTTP ordinario, y el cliente, lo que hace peticiones a travs
de HTTPS. Esta caracterstica es, por ejemplo, una opcin en los routers de equilibrio de carga de F5 Networks ( www.f5.com ).

Tiene suficientes CPUs?


Despus de leer las secciones anteriores, te has ido y conseguido un poco de hardware del ordenador. Cmo saber si es o no ser suficiente para
soportar el volumen previsto de solicitudes? Una buena regla general es que usted no puede manejar ms de 10 solicitudes de pginas dinmicas por
segundo por la CPU. Una pgina "dinmica" es aquella que implica la ejecucin de cualquier programa informtico en el lado del servidor que no sea
el servicio HTTP simple, es decir, que no sea el envo de un archivo JPEG o HTML nada. La figura 10-por-segundo asume que las pginas, o bien no
estn codificadas o que el cifrado se realiza por hardware adicional en frente del servidor HTTP. Por ejemplo, si usted tiene un servidor RDBMS 4CPU manejo de la persistencia y la abstraccin y 4 mquinas frontales 1 CPU manejo de presentacin y el servicio HTTP no debe esperar para
entregar ms de 80 pginas dinmicas por segundo.
Usted podra preguntarse qu velocidad de la CPU es este 10 hits por segundo por nmero de CPU basado sobre? El nmero es independiente de la
velocidad de la CPU! A mediados de la dcada de 1990, tuvimos CPU 200 MHz. Guiones Web consultar la base de datos y se fusionaron los
resultados con cadenas incrustadas en el guin. Todo transcurri en un equipo fsico as que no haba de cabeza de la copia de datos alrededor. Slo
las pginas de procesamiento de tarjetas de crdito finales se cifran. Hemos tenido problemas para manejar 10 golpes por segundo. A finales de 1990
tenamos CPU 400 MHz. Guiones Web consultar la base de datos y se fusionaron los resultados con las plantillas que tuvieron que ser analizada. Los
datos fueron conectados en red desde el servidor RDBMS al servidor web antes de dirigirse al usuario. Conseguimos ms pginas en respuesta a
preocupaciones sobre la privacidad. Hemos tenido problemas para manejar 10 golpes por segundo. En 2000 tenamos 1 GHz CPU. Guiones Web
consultan el encabezado rbitro para determinar si la solicitud proviene de un cliente de uno de nuestros socios de marca. La secuencia de comandos a
continuacin, seleccione la plantilla adecuada. Nos habamos fletado el servidor con Java Server Pages y Enterprise Java Beans. Hemos tenido
problemas para manejar 10 golpes por segundo. En 2002 tenamos 2 GHz CPU. Los programadores han decidido seguir la moda XML / XSLT.
Hemos tenido problemas para manejar 10 hits por segundo ....
Parece razonable esperar que los ingenieros de hardware continuar para ofrecer mejoras sustanciales de desempeo y que las modas en el desarrollo
de software y la complejidad del negocio seguirn usuarios roban de cualquier disfrute de esas mejoras. As que se adhieren a 10 solicitudes por

de software y la complejidad del negocio seguirn usuarios roban de cualquier disfrute de esas mejoras. As que se adhieren a 10 solicitudes por
segundo por la CPU hasta que haya logrado sus propios puntos de referencia especficos de la aplicacin que demuestran lo contrario.

Balanceo de carga
Como se ha sealado anteriormente en este captulo, un servicio de Internet con 100 CPUs difundir entre 15 equipos fsicos no va a ser muy fiable si
todas las CPUs 100 deben estar trabajando para el servicio en general para funcionar. Necesitamos desarrollar una estrategia para equilibrar la carga
de manera que (1) las solicitudes de usuario se dividen ms o menos equitativamente entre las CPUs disponibles, (2) cuando una pieza de hardware
falla, no da lugar a muchos errores devueltos a los usuarios, y (3) se puede volver a configurar el hardware y la red sin romper favoritos y enlaces de
los usuarios de otros sitios.
Vamos a empezar por plantear un conjunto de servidores de dos niveles con una sola mquina multi-CPU ejecuta el RDBMS y varias mquinas de
front-end de una sola CPU, cada uno de los cuales se ejecuta el programa de servidor Web, interpreta los scripts de pgina, realiza el cifrado SSL, y en
general no cualquier clculo no se realiza dentro del RDBMS.
**** Inserte dibujo de nuestro ejemplo de granja de servidores ****
Figura 11.1: Una configuracin tpica para un servidor de aplicaciones de Internet de mediano a alto volumen. Un potente servidor multi-CPU
soporta el sistema de gestin de base de datos relacional. Varias pequeas mquinas 1-CPU ejecute el programa servidor HTTP.
Equilibrio de carga en la capa de Persistencia
Nuestra capa de persistencia es la computadora multi-CPU ejecuta el RDBMS. El RDBMS en s es tpicamente un multi-proceso o aplicacin multihilo. Para cada cliente de base de datos, el RDBMS genera un proceso separado o hilo. En este caso, cada mquina front-end se presenta a los
RDBMS como clientes una o varias bases de datos. Si asumimos que la carga de peticiones de los usuarios se distribuyen entre las mquinas de frontend, la carga de trabajo de la base de datos se extender entre las varias CPU del servidor RDBMS por el proceso del sistema operativo o planificador
hilo.
Equilibrio de carga entre las mquinas Front-End
Circa 1995 una estrategia popular para los sitios Web de alto volumen fue DNS round-robin. Cada mquina front-end se le asigna una direccin IP
enrutable pblicamente nico. El servidor del Sistema de nombres de dominio (DNS) para el sitio Web fue programado para dar diferentes respuestas
cuando se le pregunt por una traduccin del nombre de host del servidor Web. Por ejemplo, www.cnn.com estaba usando DNS round-robin. Tenan
un servidor de archivos NFS central que contiene el contenido del sitio y un rack de pequeas mquinas de front-end, cada uno de los cuales era un
servidor web y un cliente NFS. Esta arquitectura activar CNN para actualizar su sitio constantemente tocando slo una mquina, es decir, el servidor
central NFS.
Cmo fue el sistema de CNN experimentado por los usuarios? Cuando un estudiante del MIT solicit http://www.cnn.com/TECH/ , su mquina de
escritorio pedira el servidor de nombres local para una traduccin del nombre de host www.cnn.com en una direccin IP de 32 bits. (Recuerde que
todas las comunicaciones de Internet es de mquina a mquina y requiere direcciones IP numricas, nombres de host alfanumricos como
"www.amazon.com" o "web.mit.edu" slo se utilizan para la interfaz de usuario.) El servidor de nombres MIT hara pngase en contacto con el
registro InterNIC para aprender las direcciones IP de los servidores de nombres para el dominio cnn.com. El servidor de nombres MIT entonces
ponerse en contacto con los servidores de nombres de CNN y aprender que "www.cnn.com" estaba disponible en la direccin IP 207.25.71.5.
Usuarios posteriores dentro de la misma subred en el MIT seran, por un perodo de tiempo designado por la CNN, obtener la misma respuesta de
207.25.71.5 sin el servidor de nombres del MIT que se remonta a los servidores de nombres de la CNN.
Dnde est equilibrando la carga en este sistema? Supongamos que una de las principales de Biologa en la Universidad de Harvard solicit
http://www.cnn.com/HEALTH/ . Servidor de nombres de Harvard tambin pondra en contacto con los servidores de nombres de CNN para aprender
la traduccin de "www.cnn.com". Esta vez, sin embargo, el servidor CNN dara una respuesta diferente: 207.25.71.20, lo que lleva ese usuario, y los
usuarios posteriores en la red de la Universidad de Harvard, en un servidor de aplicaciones para usuario diferente a la mquina que proporciona
pginas a los usuarios en el MIT.
DNS Round-robin no es un mtodo de balanceo de carga muy popular hoy en da. Por un lado, no es muy equilibrado. Supongamos que el servidor de
nombres de CNN dice servidor de nombres de America Online que www.cnn.com es accesible a 207.25.71.29. AOL es perfectamente libre para
disponer que la traduccin de la totalidad de sus ms de 20 millones de clientes. Otro problema con el DNS round-robin es el impacto en los usuarios
cuando una mquina de front-end muere. Si el cuadro al 207.25.71.29 fallara, ninguno de los clientes de AOL sera capaz de llegar hasta
www.cnn.com haba el tiempo de caducidad en la traduccin transcurrido-sitio sera en funcionamiento y proporcionar pginas a cientos de miles de
usuarios en todo el mundo, pero no a aquellos usuarios que haban recibido una traduccin al DNS de mala suerte a la mquina fallecidas. Para un
dominio tpico, este perodo de tiempo podra estar en cualquier lugar a partir de 6 horas a 1 semana. CNN, consciente de este problema, podra
acortar el vencimiento y "time-to-live mnimo" en cnn.com pero si stos fueron talados a, digamos, 30 segundos, la carga en los servidores de
nombres de CNN podra empezar a acercarse a la intensidad de la cargar en sus servidores Web. Casi cada solicitud de pgina de usuario sera
precedido por una solicitud de traduccin DNS. (De hecho, CNN estableci su tiempo a vivir mnima para 15 minutos.)
Un ltimo problema con el DNS round-robin es que no proporciona la abstraccin. Supongamos que la CNN, cuyos servidores primaria eran todas las
mquinas Unix, deseaba ejecutar algunos programas foro de discusin que slo estaba disponible para Windows. Las direcciones IP de todos sus
servidores estn expuestos pblicamente. La nica manera de dirigir a los usuarios a una mquina diferente para una parte particular del servicio sera
de vincularlos a un nombre de host diferente, por lo tanto, lo que podra traducirse en una direccin IP distinta. Por ejemplo, CNN vinculara a los
usuarios "http://forums.cnn.com". Los usuarios que disfrutaron de estos foros hara marcador de la URL, y otros sitios en Internet seran insertar
hipervnculos a esta direccin URL. Despus de un ao, suponen que los servidores Windows estaban muriendo y la gente que saba cmo mantener
los haban trasladado a otros puestos de trabajo. Mientras tanto, el software de foro de discusin se ha convertido en disponible para Unix tambin.
CNN le gustara tirar del servicio de la discusin de nuevo en su granja de servidores principal, a una URL de http://www.cnn.com/discuss/. Por qu
los usuarios estar al tanto de esta reorganizacin de hardware?
**** Inserte dibujo de conjunto de servidores (nube), equilibrador de carga, Internet (la nube) ****

**** Inserte dibujo de conjunto de servidores (nube), equilibrador de carga, Internet (la nube) ****
Figura 11.2: Para preservar la libertad de la reordenacin de los componentes dentro de la granja de servidores, por lo general los usuarios en Internet
pblico slo hablar con un router de balanceo de carga, que es la "cara pblica" del servicio y cuya direccin IP es lo www.popularservice.com se
traduce a.
El enfoque moderno de equilibrio de carga es el router de balanceo de carga. Esta mquina, normalmente construido con hardware estndar de PC que
ejecuta un sistema operativo Unix libre y una fina capa de software a la medida, es la nica mquina que es visible desde la Internet pblica. Todo el
hardware de servidor est detrs del equilibrador de carga y tiene las direcciones IP que no son enrutables desde el resto de Internet. Si un usuario
solicita www.photo.net, por ejemplo, esto se traduce a 216.127.244.133, que es la direccin IP del equilibrador de carga de photo.net. El equilibrador
de carga acepta la conexin TCP en el puerto 80 y espera a que el cliente Web para proporcionar una lnea de peticin, por ejemplo, "GET / HTTP /
1.0". Slo despus de que se haya recibido dicha solicitud hace el intento de equilibrador de carga para ponerse en contacto con un servidor Web en la
red privada detrs de l.
Observe primero que este tipo de router proporciona cierta seguridad inherente. El servidor de los servidores web y RDBMS no puede ser contactado
directamente por las galletas en la Internet pblica. Las nicas formas en son a travs de un ataque con xito en el equilibrador de carga, un ataque
contra el programa de servidor Web (Microsoft Internet Information Server sufri de muchas vulnerabilidades de desbordamiento buffer), o un ataque
a la pgina del editor-autor de guiones. El router tambin proporciona cierta proteccin contra los ataques de denegacin de servicio. Si un servidor
Web est configurado para generar un mximo de 100 hilos simultneos, un usuario malintencionado puede cerrar con eficacia por la web con slo
abrir 100 conexiones TCP al servidor y luego nunca el envo de una lnea de peticin. Los balanceadores de carga son inteligentes acerca de cosechar
tales conexiones inactivas y en todo caso tienen muy largas colas.
El equilibrador de carga puede ejecutar algoritmos arbitrariamente complejas para decidir cmo encaminar una peticin del usuario. Se puede enviar
la solicitud a un conjunto de servidores front-end en un round-robin, teniendo un servidor fuera de la rotacin si no responde. El equilibrador de carga
puede tirar peridicamente la carga y la informacin de salud de los servidores front-end y enviar cada solicitud entrante al servidor menos ocupado.
El equilibrador de carga puede inspeccionar la URI solicitada y el camino a un servidor en particular, por ejemplo, el envo de cualquier solicitud que
comienza con "/ discutir /" a la mquina de Windows que se ejecuta el software de foro de discusin. El equilibrador de carga puede mantener una
tabla de donde se encaminan las peticiones anteriores y tratar de ruta solicitudes sucesivas de un usuario en particular a la misma mquina front-end
(til en los casos en que estado se construye en una capa distinta del RDBMS).
Sea cual sea el algoritmo del equilibrador de carga est utilizando, un fallo de hardware en una de las mquinas de front-end generalmente resultar en
el fracaso de slo un puado de peticiones de los usuarios, es decir, los que estn en proceso en la mquina que no en realidad.
Cmo se balanceadores de carga construidos realmente? Parece que necesitamos un programa informtico que espera una solicitud Web, toma un
poco de accin, entonces devuelve un resultado al usuario. No es esto lo que hacen los programas de servidor Web? Por qu no aadir un poco de
cdigo para un programa estndar del servidor Web, ejecute la combinacin de su propio ordenador, y llamar a que nuestro equilibrador de carga? Ese
es precisamente el enfoque adoptado por el equilibrador de carga Zeus ( http://www.zeus.com/products/zlb/ ) y mod_backhand (
http://www.backhand.org/mod_backhand/ ), un mdulo de equilibrador de carga para el Apache Servidor web. Una alternativa es ejemplificado por
F5 Networks , una empresa que vende fuera de la caja de balanceadores de carga construidos sobre hardware de PC, el sistema operativo NetBSD
Unix, y el software de la magia no especificado.
Conmutacin por error
Acurdate tambin de nuestros objetivos estratgicos: (1) las solicitudes de usuario se dividen ms o menos equitativamente entre las CPUs
disponibles; (2) cuando una pieza de hardware falla, no da lugar a demasiados errores devueltos a los usuarios; (3) podemos volver a configurar el
hardware y la red sin romper favoritos y enlaces de los usuarios de otros sitios.
Parece como si el equilibrio de carga del router en el frente y de equilibrio de carga del sistema operativo en el servidor RDBMS en la espalda nos han
permitido alcanzar los objetivos 1 y 3. Y si el fallo de hardware se produce en un front-end de la mquina de un solo CPU, nos 've alcanzado la meta 2
tambin. Pero lo que si falla el servidor RDBMS multi-CPU? O qu si la propia equilibrador de carga falla?
Conmutacin por error de un equilibrador de carga roto para un funcionamiento uno es esencialmente un desafo configuracin de la red, ms all del
alcance de este libro de texto. Bsicamente lo que se requiere son dos balanceadores de carga idnticos y la cooperacin con el siguiente vnculo de
enrutamiento en la cadena que conecta a la comunidad de servidores a la Internet pblica. Estos routers upstream deben saber cmo las peticiones de
la misma direccin IP a uno u otro equilibrador de carga dependiendo de la ruta que est en marcha. Lo que mantiene esta se convierta en una espiral
sin fin de balanceo de carga es que los routers upstream no estn realmente buscando en los paquetes TCP para encontrar la peticin GET. Estn
haciendo el trabajo mucho ms simple de enrutamiento IP.
Garantizar la conmutacin por error de un servidor RDBMS roto es un desafo ms difcil y donde una gran variedad de ideas ha sido juzgado y
hallado falto. La primera idea es asegurarse de que el servidor RDBMS nunca falla. La mquina tendr tres fuentes de alimentacin, slo dos de los
cuales se requieren. Cada unidad de disco se reflejar. Si una tarjeta CPU falla, el sistema operativo con gracia fallar de nuevo a correr en las CPUs
restantes. Habr varias tarjetas de red. Habr dos rutas de acceso a cada unidad de disco. Teniendo en cuenta el nmero de piezas mviles en el
interior, los grandes servidores complejas son muy fiables, pero no son 100 por ciento confiable.
Teniendo en cuenta que un solo gran servidor no es lo suficientemente confiable, podemos comprar un montn de ellos y conecte a todos en el mismo
subsistema de disco, a continuacin, ejecutar algo como Oracle Parallel Server. Clientes de bases de datos se conectan a cualquier mquina servidor
fsico est disponible. Si no pueden obtener una respuesta de un servidor en particular, el cliente vuelve a intentar despus de unos segundos a otro
servidor fsico. As, un equipo servidor RDBMS que no hace que el retorno de los errores a cualquier en proceso solicitudes de los usuarios siendo
manejados por esa mquina y quizs unos pocos segundos de servicio interrumpido o lento para los usuarios que han sido dirigidos a los clientes de
esa mquina hacia abajo, pero hace que ya no indisponibilidad sitio plazo.
Como se discuti en la seccin "capa de persistencia" de este captulo, este enfoque implica una gran cantidad de desperdicio de tiempo de CPU y
ancho de banda que las mquinas fsicas mantenerse mutuamente informados de las actualizaciones de base de datos. Una solucin de compromiso
presentada por Oracle en 2000 fue para configurar un servidor paralelo de dos nodos. La primera mquina podra procesar transacciones en lnea. La

presentada por Oracle en 2000 fue para configurar un servidor paralelo de dos nodos. La primera mquina podra procesar transacciones en lnea. La
segunda mquina se le permitira quedarse tanto como, por ejemplo, a diez minutos detrs de la primera en cuanto a actualizaciones. Si queras un
informe intensivo de la CPU consultar la actividad del usuario del mes pasado, que te habla con la mquina de copia de seguridad. Si la mquina # 1
fall, sin embargo, la mquina # 2 se dara cuenta casi de inmediato y empezar a rodar su propio estado hacia adelante desde el registro de
transacciones en el disco duro. Una vez que la mquina # 2 estaba al da con la ltima transaccin confirmada, sera comenzar a ofrecer el servicio
como servidor de base de datos principal. Oracle orgullosamente declar que, para los clientes que estn dispuestos a gastar el doble por el hardware
del servidor RDBMS, la configuracin de conmutacin por error de dos nodos "slo un poco ms lento" que una sola mquina.

Ejercicios de escalado de hardware


Ejercicio 1: basada en servidor de equilibrador de carga Web
Cmo puede funcionar un producto como el equilibrador de carga de Zeus? Estbamos preocupados acerca de nuestro programa de servidor Web
sentirse abrumado por lo que hemos aadido nueve mquinas adicionales que ejecutan nueve copias adicionales del programa. Puede ser una buena
idea aadir el cuello de botella de exigir a todos nuestros usuarios que pasar por un programa de servidor Web en ejecucin en una mquina, que era
probablemente la forma en que habamos creado en el primer lugar?
Ejercicio 2: New York Times
Considere el sitio Web bsico New York Times. Ignore cualquier caracterstica de la comunidad bolsa-on-the-side como el chat o foros de discusin.
Concntrese en el problema de la entrega de los artculos bsicos y la publicidad. Cada usuario ver los mismos artculos pero con potencialmente
diferentes anuncios. Disear un hardware de servidor y la infraestructura de software que (1) dejar que la actualizacin del personal del New York
Times el sitio utilizando formularios Web con la experiencia del usuario quedando esas actualizaciones en no ms de un minuto, y (2) dan como
resultado un costo mnimo de hardware y administracion del sistema.
Sea explcito acerca de la cantidad de equipos empleado, el nmero de CPU dentro de cada equipo y las conexiones entre los equipos.
Su respuesta a este ejercicio no debe tener ms de la mitad de una pgina de texto.
Ejercicio 3: eBay
Visita www.ebay.com y familiarizarse con sus servicios bsicos de licitacin de la subasta y de usuario clasificaciones. Suponga que usted necesita
para apoyar a 100 millones de usuarios registrados, 800 millones de pginas vistas al da, 10 millones de licitaciones por da, 10 millones de
bsquedas al da, y 0,5 millones de nuevas clasificaciones de usuarios por da. Disear un hardware de servidor y la infraestructura de software que
representar un compromiso razonable entre la fiabilidad (incluyendo degradacin elegante), el costo inicial, y el costo de la administracin.
Sea explcito acerca de la cantidad de equipos empleado, el nmero de CPU dentro de cada equipo y las conexiones entre los equipos.Si eres curioso
acerca de los nmeros reales, recuerde que eBay es una corporacin pblica y publica informes anuales, que estn disponibles en
http://investor.ebay.com/ .
Su respuesta a este ejercicio no debe tener ms de una pgina.
Ejercicio 4: eBay Proxy pujas
eBay ofrece un servicio denominado "puja automtica" o "ofertas automticas" en el que se especifica una cantidad mxima que est dispuesto a
pagar y el propio servidor se presenten ofertas para usted en incrementos que dependen de la oferta alta actual. Cmo implementar una oferta proxy
en la infraestructura que se dise para los ejercicios precedentes? Rough cabo ninguna declaracin SQL o disparadores que usted necesita. Sea
explcito acerca de donde el cdigo de puja automtica ejecutara: en qu servidor? en el que el entorno de ejecucin?
Ejercicio 5: Uber-eBay
Supongamos que eBay subi a mil millones de ofertas por da. Cmo cambiara su diseo, en todo caso?
Ejercicio 6: Hotmail
Supongamos que Hotmail eran un servicio de Internet RDBMS respaldados con 200 millones de usuarios activos. Cul sera la configuracin de
hardware mnimo costo que todava proporciona fiabilidad y facilidad de mantenimiento razonable? Cul es la diferencia fundamental entre Hotmail
y eBay?
Nota: http://philip.greenspun.com/ancient-history/webmail/ describe un sistema de correo Web respaldado por Oracle construido por Jin S. Choi.
Ejercicio 7: Cuadro de Mando
Proporcionar un diseo de un prrafo para la infraestructura de servidores detrs www.scorecard.org , justificando sus decisiones.

Pasando al Hard Stuff


Podemos construir un gran servidor. Podemos apoyar una gran cantidad de usuarios. A medida que la comunidad crece en tamao, sin embargo, los
usuarios pueden seguir interactuando en el propsito de manera necesaria para nuestro servicio de ser una comunidad de aprendizaje en lnea? Cmo
podemos evitar que la discusin y el aprendizaje de delegar en el caos y chatear?
Tal vez podemos tomar algunas ideas del mundo tradicional cara a cara. Echemos un vistazo a algunas de las cosas que hacen por buenas las

comunidades fuera de lnea y cmo podemos traducir al mundo en lnea.

Traduciendo los elementos de una buena Comunidades de la conexin a la OnlineWorld


Una comunidad cara a cara es casi siempre uno en el que se identifican las personas, autenticados, y responsable. Supongamos que usted es un,, 250
chico libra 6 pies de altura 50 aos de edad, conocido por todos en el pueblo como "Fred Jones". Puedes caminar hasta los doce aos de edad, hija de
uno de sus vecinos y presentarse como una nia de trece aos de edad? Probablemente no con mucho xito. Suponga que usted vuela una bandera
nazi en el frente de su casa. Puedes expresar una opinin en la prxima reunin de la ciudad sin que la gente se acuerda de que usted era "el tipo
bandera nazi"? Parece poco probable.
Cmo traducimos las caractersticas de identificabilidad, la autenticacin y la rendicin de cuentas en el mundo en lnea? En las comunidades
privadas, como los sistemas de gestin del conocimiento corporativo o servicios de coordinacin de la universidad, es fcil. No dejamos que nadie use
el sistema a menos que sean un empleado o un estudiante registrado y, en el entorno en lnea, identificamos a los usuarios por sus nombres completos.
Tal autenticacin de peso pesado est en desacuerdo con los aspectos prcticos de la ejecucin de una comunidad pblica en lnea. Por ejemplo, sera
prctico para programar reuniones cara a cara con cada posible solicitante de registro de photo.net, donde el nuevo usuario mostrara una
identificacin? Por otro lado, como se discute en el "Registro de Usuario y Gestin" captulo, podemos tomar una pualada en la autenticacin en una
comunidad pblica en lnea, al exigir la verificacin de correo electrnico y al exigir la autenticacin alternativa para las personas con cuentas de
correo electrnico de tipo Hotmail. En ambas comunidades pblicas y privadas, podemos mejorar la rendicin de cuentas, simplemente haciendo el
nombre de cada usuario un hipervnculo al registro completo de sus contribuciones al sitio.
En el mundo cara a cara, un hablante tiene la oportunidad de medir la reaccin del pblico cuando l o ella est hablando. Supongamos que usted es
un poltico hablar con una organizacin de mujeres, la WAGC ("Mujeres contra el control de armas", www.wagc.com ). Su horario es tan pesado que
no puede recordar lo que sus ayudantes le ha hablado de esta organizacin, por lo que tiene previsto sacar a relucir su discurso estndar sobre cmo
siempre se ha trabajado para garantizar mayores impuestos, ms la intervencin del gobierno en la vida de los individuos, y , sobre todo, para que sea
ms difcil para los estadounidenses a poseer armas. Mucho antes de que usted tom crdito por su contribucin a la prohibicin de rifle de asalto,
usted probablemente ha notado que el pblico no pareca muy receptivo a la marca de su paternalismo y modificado su discurso planeado. Sistemas
de comunicacin mediada por ordenador tpicos hacen que sea fcil para transmitir sus ideas a todos los dems en el servicio, pero sin la oportunidad
de obtener informacin til sobre cmo se recibe el mensaje. Puede enviar el correo electrnico a la larga lista de correo grande. Tendrs tu primer
indicio de si la gente le gust o no despus de los primeros 500 tienen en su bandeja de entrada. Puedes publicar tu respuesta a un problema cargado
de emociones en un foro de discusin, pero no se va a ninguna ayuda de otros miembros de la comunidad, por lo menos no a travs del mismo
software, antes de finalizar dicha respuesta.
Tal vez usted puede crear su software de modo que un usuario puede exponer una respuesta a una audiencia de prueba de 1 por ciento de la audiencia
final, obtener una reaccin de vuelta de los destinatarios de la muestra, y refinar el mensaje antes de autorizar que para la entrega de todo el grupo.
Cuando los grupos demasiado grandes para la discusin efectiva se renen en el mundo fuera de lnea, a menudo existe una disposicin para romper
en grupos ms pequeos y luego volver a montar. Por ejemplo, conferencias acadmicas generalmente son alrededor de la mitad "uno a muy muchos"
conferencias y escapadas de media y comidas durante el cual se llevan a cabo numerosas "puado a puado" discusiones. Supongamos que un foro de
discusin archivado es utilizado por 10.000 personas. Eres bastante seguro de que usted sabe la respuesta a una pregunta, pero no est seguro de que
su idea es suficientemente pulido para la exposicin a 10.000 personas y la consagracin permanente en la base de datos. No sera agradable a gritar
la respuesta propuesta a aquellos usuarios que pasan a estar conectado en este momento e intentar la idea de salir con ellos primero? El equivalente
electrnico de gritar a una sala llena de gente est escribiendo en una sala de chat. Experimentamos en photo.net comparando una sala de chat en
HTML y ejecucin basado en JavaScript en nuestro propio servidor a un simple hipervnculo a una sala de chat designada en la infraestructura de
AOL Instant Messenger:
<a href="aim:gochat?RoomName=photonet"> photo.net </a> sala de chat

Esto provoca un navegador configurado correctamente para iniciar el cliente de AIM ( probarlo ) . Aunque el chat basado en AIM ofrece
interactividad superior, no fue tan exitosa debido a (1) algunos usuarios no tienen el software AIM en sus equipos, (2) algunos usuarios estar detrs de
los cortafuegos que les impedan el uso de AIM, pero sobre todo porque ( 3) usuarios photo.net se conocan por sus nombres reales y no podan
reconocer a sus amigos por su nombre de pantalla de AIM. Parece que la provisin de una ruptura y volver a montar la sala de chat es til, pero que
necesita ser estrechamente integrado con el resto de la comunidad online y que, en particular, la identidad del usuario debe ser preservado en todos los
servicios dentro de una comunidad.
La gente le gusta las computadoras y la Internet, ya que son rpidos. Si desea una respuesta a una pregunta, usted da vuelta al motor de bsqueda que
responde ms rpido y con los resultados ms relevantes. En el mundo real, la gente en general desean velocidad. Un Big Mac entregado en treinta
segundos es mejor que un Big Mac entregado en diez minutos. Sin embargo, cuando las emociones y las apuestas son altas, nosotros como sociedad
menudo elegimos demora. Podramos elegir a un presidente en dos semanas, pero en vez elegimos campaas presidenciales que duran casi dos aos.
Podramos haber juzgado y condenado Thomas Junta inmediatamente despus del 5 de julio de 2000, cuando derrot a Michael Costin, padre de otro
de diez aos de edad, jugador de hockey, a la muerte en una pista de hielo del rea de Boston. Despus de todo, el crimen fue presenciado por decenas
de personas y haba pocas dudas sobre la culpabilidad de la Junta. Pero no fue hasta enero de 2002 que la Junta fue llevado a juicio, condenado y
sentenciado a seis a diez aos de prisin. La mensajera instantnea, salas de chat y foros de discusin basados en la Web no siempre se prestan al
discurso reflexivo, en particular cuando el tema es emocional.
Para algunas comunidades, puede ser apropiado considerar la adicin de un retardo artificial en su publicacin. "A medida que una discusin en lnea se hace
ms larga, la probabilidad de una
Supongamos que usted responda al mensaje de Joe Ranter al compararlo con Adolf Hilter. Veinticuatro horas
comparacin que implica nazis o Hitler se
ms tarde obtiene un mensaje de correo electrnico desde el servidor: "El mensaje abajo verdaderamente
aproxima a 1" - Ley (Mike) de Godwin
representar a su mejor pensamiento Elije una opcin, haga clic en una de las direcciones URL siguientes:?
Confirme | edicin | descarte." Has tenido algn tiempo para enfriarse y pensar. Es Joe Ranter un pintor de aceite talentosos? Fue Joe Ranter jams
TIEMPO designado Revista Hombre del Ao ( Hitler hizo en 1938 )? Pensndolo bien, la comparacin con Hitler era inepto y usted decide modificar
el mensaje antes de que sea pblica.
Qu tan difcil es en el mundo real de encontrar personas interesadas en los temas que son importantes para nosotros? Si usted cree que la caridad
empieza en casa y toda la poltica es local, la bsqueda de personas que comparten sus preocupaciones es tan simple como caminar por el vecindario.

empieza en casa y toda la poltica es local, la bsqueda de personas que comparten sus preocupaciones es tan simple como caminar por el vecindario.
Una manera de traducir eso al mundo en lnea sera construir comunidades separadas para cada regin geogrfica. Si usted quera saber sobre el
medio ambiente en su estado, que iras a massachusetts.envrionmentaldefense.org. Pero lo que si sus intereses eran un poco ms amplio? Si estaban
interesados en el medio ambiente a travs de Nueva Inglaterra, en caso de que tenga que visitar cinco o seis servidores independientes con el fin de
encontrar los temas de actualidad? O supongamos que sus intereses eran ms estrecho. En caso de tener que vadear a travs de un montn de
discusiones con respecto a la porcin oriental densamente poblada de Massachusetts si usted vive justo en contra de la frontera del Estado de Nueva
York y est preocupado acerca de una planta qumica en particular?
El foro de discusin geospatialized , desarrollado por Bill Pease y Jin S. Choi para la scorecard.org servicio, es una interesante solucin a este
problema. Pruebe las siguientes pginas:
discusiones acerca de problemas en un montn de Occidental states: http://www.scorecard.org/bboard/usgeospatial-2.tcl?
topic=Pollution%20in%20Your%20Community&epa_region=9
el mismo foro, pero se redujo a las discusiones sobre California: http://www.scorecard.org/bboard/usgeospatial-one-state.tcl?
topic=Pollution%20in%20Your%20Community&usps_abbrev=CA
el mismo foro, pero se redujo a las discusiones sobre Santa Clara County: http://www.scorecard.org/bboard/usgeospatial-one-county.tcl?
topic=Pollution%20in%20Your%20Community&fips_county_code=06085
mismo foro, pero se redujo a las discusiones alrededor de un factory: http://www.scorecard.org/bboard/usgeospatial-one-facility.tcl?
topic=Pollution%20in%20Your%20Community&tri_id=95050WNSCR960CE
Un usuario puede marcar cualquiera de estas pginas y entrar peridicamente el sitio para participar en la ms amplia discusin como intereses
dictada.
Otra manera de mirar geospatialization es de los propios usuarios. Consideremos, por ejemplo, una comunidad de aprendizaje en lnea centra en la
cra de cclidos africanos. La mayora de los artculos y la discusin sera de inters para todos los usuarios de todo el mundo. Sin embargo, sera
bueno para ayudar a los miembros que estaban geogrficamente prximos encontrarse unos a otros. Grumos geogrficas de los usuarios pueden
compartir informacin sobre las mejores tiendas de acuarios y puede organizar para reunirse los fines de semana para intercambiar peces jvenes.
Para facilitar geospatialization de los usuarios, el software debera solicitar pas de residencia y el cdigo postal de cada nuevo usuario durante el
registro. Casi siempre es posible encontrar una base de datos de los centroides de latitud y longitud para cada cdigo postal en un pas. En los Estados
Unidos, por ejemplo, usted debe buscar los archivos "Diccionario geogrfico" en www.census.gov , en particular los de tabulacin del cdigo postal
reas (ZCTAs).
A pesar de la aplicacin de los trucos anteriores, siempre es posible que el crecimiento de una comunidad a superar la capacidad de un viejo de
usuario para hacer frente a todos los nuevos usuarios y sus contribuciones. Cada sistema de colaboracin de Internet que se remonta a la dcada de
1970 ha provocado quejas de la forma "A m me gustaba este [lista de correo | newsgroup | MUD | comunidad Web] cuando era ms pequeo, pero
ahora es grande y lleno de llamas perdedores; la interesante el material reflexivo est enterrado bajo una gruesa capa de escoria ". La solucin
tecnolgica ms antigua de esta queja fue el filtro bozo . Si no te guste lo que alguien tena que decir, que los agreg a su lista de bozo y el software le
ocultar sus contribuciones de su punto de vista de la comunidad.
A mediados de 2001 hemos aadido un "filtro de bozo inversa" facilidad para la comunidad photo.net. Si usted encuentra una obra de gran creatividad
en el sistema de intercambio de fotos o una respuesta reflexiva en un foro de discusin puede marcar el autor como "interesante". En los inicios de
sesin posteriores se encuentra una seccin de "sus amigos" en su espacio de trabajo personal en el sitio. La gente que ha marcado como interesante se
enumeran en el orden de su contribucin ms reciente al sitio. Seis meses despus se aadi la caracterstica de 5.000 usuarios haban establecido
25.000 "Creo que otro usuario se encuentra interesantes" las relaciones.

Ejercicios de escala Humanos


Ejercicio 8: Comunidad en lnea del peridico
Elija un servidor de foro de debate operado por un peridico en lnea con un pblico nacional o internacional, por ejemplo, www.nytimes.com , etc.
Seleccione un rea de discusin que es de inters para usted. Con qu eficacia hace esta funcin como una comunidad de aprendizaje en lnea?
Cules son las caractersticas que son tiles? Qu caractersticas le agrega si esto fuera su servicio?
Qu hay en un peridico que hace que sea especialmente difcil para esa organizacin para actuar como el editor de una comunidad en lnea?
Ejercicio 9: amazon.com
Enumerar las caractersticas de amazon.com que pareceran llevar a escala ms elegante de su comunidad en lnea. Explique cmo cada caracterstica
ayuda.
Ejercicio 10: Escalado Planifique Para Su Comunidad
Crear un documento en el resumen URL / doc / planificacin / AAAAMMDD-escalamiento en su servidor y empezar a escribir un plan de escala
para su comunidad. Este plan debe enumerar las caractersticas que usted espera modificar o como el sitio crece. Las caractersticas deben ser
agrupadas por fases.
Aadir un enlace a su nuevo plan de / doc / o una pgina de planificacin subndice.
Ejercicio 11: Implementar la Fase 1
Implementar la Fase 1 de su plan de escalamiento. Esto podra ser tan simple como asegurarse de que cada vez que el nombre o direccin de correo
electrnico de un usuario aparece en su servicio, el texto es un ancla a una pgina que muestra todas las contribuciones de esa persona a la comunidad
(rendicin de cuentas). O podra ser tan complejo como geospatialization completa. Realmente depende de lo grande que una comunidad que su

(rendicin de cuentas). O podra ser tan complejo como geospatialization completa. Realmente depende de lo grande que una comunidad que su
cliente espera para servir en los prximos meses.

Spam-correccin Pblicas Comunidades en lnea


Una comunidad pblica en lnea es uno en el que se acepta la inscripcin de cualquier direccin IP en la Internet pblica y uno que sirve contenido
nuevo a la Internet pblica. En una comunidad privada en lnea, por ejemplo, un sistema de intercambio de conocimientos corporativa que est detrs
de un firewall de la empresa y que solo acepta miembros que son empleados, usted no tiene que preocuparse demasiado acerca de correo no deseado,
donde el spam en este caso se define como "Cualquier contenido que es fuera de tema, viola los trminos de uso, est publicado varias veces en varios
lugares, o de lo contrario es poco til a otros miembros de la comunidad que tratan de aprender."
Echemos un vistazo a algunos escenarios concretos. Supongamos que tenemos una comunidad pblica en la que el contenido aportado por los
usuarios va vivir de inmediato, sin tener que ser aprobado por un moderador. El problema del spam se reduce considerablemente en cualquier
comunidad donde el contenido debe ser pre-aprobado antes de aparecer a otros miembros, pero tales comunidades requiere un personal ms grande de
moderadores si la discusin es a fluir libremente.
Escenario 1: Sarah Moneylover ha registrado como usuario # 7812 y publicado 50 comentarios de artculos y mensajes en el foro de discusin con
enlaces a su pgina "natural Viagra" ventas. Sarah hizo clic en torno a mano y pegado en una cadena de texto desde un procesador de texto abierto en
su escritorio, con una inversin de unos 20 minutos en su actividad de spam. La herramienta adecuada para hacer frente a Sarah es un conjunto de
pginas de administracin eficientes. As es como la de clics procedera:
1. administrador del sitio visita un "todo el contenido publicado en el ltimos 30 das" de enlace, lo que resulta en una pgina tras otra de cosas
2. administrador del sitio hace clic en un control en la parte superior para limitar la visualizacin de slo el contenido de los usuarios recin
registrados que son tradicionalmente los ms problemticos, y que se traduce en una lista 5 de pantalla manejable
3. administrador del sitio revisa los elementos de contenido, cada uno presentado con un titular resumen en la parte superior y las primeras 200
palabras del cuerpo con un "ms" hipervnculo para ver el artculo completo y el nombre de un autor con hipervnculos al final
4. administrador del sitio hace clic en el nombre de "Sarah Moneylover" debajo de una publicacin que est claramente fuera de tema y el spam
comercial; esto nos lleva a una pgina que resume la inscripcin de Sarah en el servidor y todo su contenido contribuido
5. administrador del sitio hace clic en el enlace "Nuke este usuario" de Sarah Moneylover y se presenta con un "Realmente quiere eliminar Sarah
Moneylover, Usuario # 7812, y todo su contenido aportado?"
6. administrador del sitio confirma la nuking y una transaccin SQL grande se ejecuta en la que se eliminan todas las filas relacionadas con Sarah
Moneylover del RDBMS. Tenga en cuenta que esto es diferente de un moderador marcar contenidos como "no aprobado" y tener que el
contenido permanecer en la base de datos pero no se muestra en las pginas. El supuesto es que el spam comercial tiene ningn valor y que
Sarah no se va a convertir en un miembro productivo de la comunidad. De hecho, la fila de la usuarios tabla asociada con el Usuario # 7812
debe ser borrado tambin.
El administrador del sitio, suponiendo que l o ella ya estaba revisando todo el contenido nuevo en el sitio, pas menos de 30 segundos eliminacin de
contenido que tom el spammer 20 minutos para publicar, una proporcin de 40: 1. Mientras que es mucho ms fcil para eliminar el spam que a
publicarlo la comunidad es relativamente correo no deseado a prueba. Tenga en cuenta que Sarah no habra sido capaz de desfigurar la comunidad si
se estableci una poltica de pre-aprobacin para el contenido aportado por los usuarios de nueva matriculacin.
Escenario 2: Ira Angrywicz, Usuario # 3571, ha desarrollado un resentimiento contra Herschel Mellowman, Usuario # 4189. En cada hilo del foro de
discusin donde Herschel ha publicado, Ira ha publicado un ataque personal contra Herschel justo debajo. El procedimiento seguido para hacer frente
a Sarah Moneylover no es apropiado aqu porque Ira, antes de enojarse con Herschel, registr 600 til foro de debate responde que seramos reacios a
eliminar. La herramienta adecuada para hacer frente a este problema es una pgina de administracin que muestra todos los contenidos aportados por
Usuario # 3571, ordenados por fecha. Debajo de ttulo de cada elemento de contenido son las primeras 200 palabras del cuerpo de modo que el
administrador puede evaluar sin hacer clic abajo si el mensaje es spam anti-Herschel. Al lado de cada elemento de contenido es una casilla de
verificacin y en el fondo de todo el contenido es un botn marcado "desaprueba todos los artculos comprobado." Por cada respuesta furiosa de que
Ira tena que escribir, el administrador tena que hacer clic en el ratn una sola vez en una casilla de verificacin, tal vez una proporcin de 100: 1
entre el esfuerzo spammer y esfuerzo de administracin.
Escenario 3: Un programador profesional contratado para impulsar el rango de motores de bsqueda de una empresa escribe guiones para insertar
contenido en todo el Internet con hipervnculos a la pgina web de su cliente. Los programas son lo suficientemente sofisticados como para trabajar a
travs de las nuevas pginas de registro de usuario en su comunidad, registrando 100 nuevas cuentas cada uno con un nombre nico y direccin de
correo electrnico. El programador tambin ha creado robots para responder a mensajes de correo electrnico de verificacin de direcciones enviado
por su software. Ahora tienes 100 nuevos (falsas) a los usuarios de cada uno de los cuales ha publicado dos mensajes. Si el programador ha sido un
poco descuidada, es concebible que todos los registros de usuarios y contenidos fueron publicadas desde la misma direccin IP, en cuyo caso usted
podra defenderse contra este tipo de ataque mediante la adicin de un originating_ip_address columna a sus mesas de gestin de contenidos y la
construccin una pgina de administracin que le permite ver y potencialmente elimina todo el contenido de una direccin IP determinada. El
descubrimiento de este problema despus de los hechos, es posible tratar con l escribiendo una pgina de administracin que resumir los nuevos
registros de usuarios y contribuciones con una capacidad de mayor arma nuclear casilla para quitar esos usuarios y la totalidad de su contenido.
Despus de limpiar el correo no deseado que probablemente agrega una "comprobar que usted es un ser humano" paso en el proceso de registro de
usuario en el que, por ejemplo, una palabra difcil de leer fue oscurecido una imagen de mapa de bits con dibujos y el would- interior ser titular tuvo
que reconocer la palabra en medio del ruido y escrbalo en. Esto evitara que un robot de establecer 100 cuentas falsas.
No importa cun cuidadosamente e inteligentemente programado una comunidad pblica en lnea es, para empezar, con el tiempo ser presa de una
nueva forma inteligente de spam. La planificacin de lo contrario es como ser un americano circa 1950 cuando los antibiticos, las vacunas, y el DDT
fueron eliminando una terrible enfermedad tras otra. Los nuevos habitantes de los suburbios optimistas nunca imaginaron que los virus podran llegar
a ser ms inteligentes que los seres humanos. Presupuesto por lo menos un par de das programador cada seis meses para escribir nuevas pginas de
administracin u otras protecciones contra las nuevas ideas en el mundo de spam.

Ms
"Cara a Cara y mediada por ordenador Comunidades, un anlisis comparativo" de Amitai Etzioni y Oren Etzioni, desde la Sociedad de la

"Cara a Cara y mediada por ordenador Comunidades, un anlisis comparativo" de Amitai Etzioni y Oren Etzioni, desde la Sociedad de la
Informacin Vol. 15, No. 4, (octubre-diciembre de 1999), p. 241-248 o http://www.gwu.edu/~ccps/etzioni/E31.html .
El servidor virtual de Linux, un equilibrador de carga muy simple basado puramente en la reescritura de paquetes; www.linuxvirtualserver.org

Tiempo y Movimiento
Los ejercicios de escalamiento de hardware deben tomar la mitad de una hora cada uno. Los estudiantes que no estn familiarizados con eBay deben
planear pasar una media hora extra familiarizarse con l. Los ejercicios de escala humanos pueden tomar de una a dos horas. El tiempo requerido para
la Fase I depender de sus datos.
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Translate

From:

Detect language

To:

Spanish

View:

Translation

Original

Buscar
parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet ; Revisado en febrero 2005
Recuerde que en la "Planificacin" captulo nuestros principios de la comunidad en lnea sostenible:
1.
2.
3.
4.
5.

contenido imn escrito por expertos


los medios de colaboracin
poderosas instalaciones para la navegacin y la bsqueda tanto de contenido imn y contribuyeron contenido
los medios de delegacin de la moderacin
los medios de identificacin de los miembros que estn imponiendo una carga excesiva a la comunidad y maneras de cambiar su
comportamiento y / o excluirlos de la comunidad sin ellos darse cuenta
6. los medios de extensin de software por los propios miembros de la comunidad
Una comunidad en lnea sostenible es el que puede dar cabida a los nuevos usuarios. Si Joe principiante, a travs de la navegacin y la bsqueda, no
puede encontrar existente contenido relevante a sus necesidades, que le har preguntas que molestar a otros miembros de la comunidad: "No buscar
en los archivos?" "No habis ledo la AYUDA?" Miembros de la comunidad a largo plazo, en lugar de ser estimulado por la discusin de temas
nuevos e interesantes, encuentran su membresa en una carga pesado de dirigir nuevos usuarios a las pginas que ellos "deben" han sido capaces de
encontrar por su cuenta.
Primera lnea de una comunidad de defensa es la arquitectura de informacin de alta calidad y la navegacin, como se explica al final del captulo
"Gestin de contenidos" . Los usuarios son mejores en la navegacin de la formulacin de consultas de bsqueda. Segunda lnea de una comunidad en
la defensa, sin embargo, es una instalacin magnfica bsqueda de texto completo. La base de datos de bsqueda debe incluir tanto editor-autor y el
contenido aportado por los usuarios. Estas son algunas de las categoras ejemplo de consulta:
pregunta de respuesta: por ejemplo, la planificacin de un viaje a la isla de Sanibel (Florida) para tomar imgenes de las aves y con ganas de
saber que durante mucho tiempo teleobjetivo para alquilar, el usuario escribe "mejor lente de Sanibel"
la navegacin: el usuario sabe que existe un documento en el servidor, pero no puede recordar dnde est, por ejemplo, recordando que existe
un tutorial sobre cmo tomar fotos en los jardines, el usuario escribe "jardn de la fotografa"
cumplimiento de tareas: el usuario quiere encontrar la pgina de carga de la foto, no encontrar discusiones de compartir fotos cuando l o ella
los tipos de "compartir fotos"
servicio de limpieza: el usuario quiere encontrar la poltica de privacidad del sitio, no un debate sobre las polticas de privacidad, despus de
escribir "poltica de privacidad"
En un sitio grande que un usuario podra querer restringir la bsqueda de alguna manera. Si la bsqueda es en la parte superior de un documento que
es un captulo de un libro en lnea, podra tener sentido para ofrecer "todo el sitio" y "dentro de los captulos de este libro" opciones. Si el editor o los
dems usuarios no han tomado la molestia de los contenidos de calificacin, la bsqueda por defecto podra limitar los resultados a los documentos
que han sido calificados de alta calidad. Si hay varios foros de discusin en el sitio, cada uno de los cuales es esencialmente una subcomunidad
autnomo, los cuadros de bsqueda en esas pginas pueden ofrecer una opcin de "restringir la bsqueda a las publicaciones en este foro". Si un
usuario no ha visitado el sitio durante un mes y quiere ver si hay algo nuevo y relevante, el sitio tal vez debe ofrecer una "restringir la bsqueda a
contenido aadido dentro de los ltimos 30 das" opcin.

Qu est mal con SQL (Bsqueda calidad)


El sistema de gestin de bases de datos relacionales (RDBMS) suena como la herramienta perfecta para este trabajo. Tenemos una gran cantidad de
datos y queremos ofrecer una gran flexibilidad en la consulta. Supongamos que una persona llega a un sitio para los atletas y los tipos de "correr" en
el buscador. El sitio enva la siguiente consulta SQL para la base de datos:
select *
de contenido
donde el cuerpo como '%' ||: USER_QUERY || '%'

que, por el tiempo de la variable bind :user_query est sustituido, se convierte en


select *
de contenido
donde el cuerpo como '% corriendo%'

En Oracle esto no va a recoger una fila cuyo mensaje contiene la misma palabra pero con una capitalizacin diferente. En cambio lo hacemos
select *
de contenido
donde superior (cuerpo) como superior ('% corriendo%')

Qu pasa si el usuario escribi varias palabras? La consulta

select *
de contenido
donde superior (cuerpo) como superiores ('% zapatos para correr%')

no recoger un mensaje que contena la frase "los zapatos para correr". En su lugar vamos a necesitar mltiples donde clusulas:
select *
de contenido
donde superior (cuerpo) como superior ('% corriendo%')
y superior (cuerpo) como superiores ('% zapatos%')

Esta clusula Y no es del todo correcto. Si hay un montn de documentos que contienen "correr" y "zapatos", estos son los que nos gustara ver. Sin
embargo, si no hay filas con todos los trminos de la consulta, probablemente deberamos ofrecemos las filas de usuario que contienen algunos de los
trminos de la consulta. Es posible que necesitemos utilizar O, una funcin de puntuacin, y un ORDER BY para que las filas que contienen ambos
trminos de la consulta se devuelven primero. Si insistimos en la clusula AND, hemos creado una situacin en la que la mayor parte del usuario nos
habla de sus intereses de los menos documentos volveremos en respuesta a una bsqueda, el tiempo de regresar "0 resultados" si sigue aadiendo
palabras . (Tenga en cuenta que los motores de bsqueda pblicos alrededor del ao 2005, como Google, Yahoo, A9, y MSN, no utilizar
implcitamente AND y hacerlo regresar 0 resultados si un usuario sigue agregando palabras para una consulta y no hay ningn documento en la base
de datos que contienen todas y cada una de esas palabras).
Hay algunos problemas ms profundos con el enfoque Caveperson SQL Programmer para bsqueda de texto completo. Supongamos que un mensaje
contiene la frase "Mi hermano-en-ley Billy Bob corri 20 millas ayer" pero no la palabra "correr". O un mensaje contiene la frase "Mi primo Gertrude
corre 15 millas cada da". Estos deben ser devueltos como relevantes para la consulta "corriendo", pero la clusula LIKE no van a hacer el trabajo. Lo
que se necesita es un sistema para detener tanto a los trminos de la consulta y los trminos indexados: "correr", "carreras", y "corri" sera todo ser
golpeado hasta la palabra madre "correr" para la indexacin y recuperacin.
Qu pasa con un mensaje que dice "Yo asist a los 100 aos del maratn de Boston "? La consulta LIKE no recoger eso. Lo que se necesita es un
sistema para la expansin de consultas a travs de un tesauro suficientemente potente como para hacer la conexin entre "correr" y "maratn".

Qu est mal con SQL (Performance)


Volvamos a la ms simple posible consulta como:
select *
de contenido
donde el cuerpo como '% corriendo%'

El RDBMS debe examinar cada fila en el content la tabla de responder a esta pregunta, es decir, debe realizar una (tiempo O [N], donde N es el
nmero de filas en la tabla) exploracin de tabla secuencial. Supongamos que un ndice estndar RDBMS se define en el body de la columna. Los
valores del body se utilizarn como claves para un rbol B y pudimos realizar
select *
de contenido
donde el cuerpo = 'activo'

y tal vez, dependiendo de la implementacin,


select *
de contenido
donde el cuerpo como '% corriendo'

en O [logN] tiempo. Pero el inters del usuario no se limita a los documentos cuya nica palabra est "funcionando" o documentos que comienzan
con la palabra "correr". El usuario quiere documentos en los que la palabra "marcha" puede ser enterrado. Un solo ndice de rbol B no va a ayudar.

Abandonando el RDBMS
Podemos resolver tanto los de rendimiento y calidad de bsqueda problemas de vertido todos nuestros datos en un sistema de bsqueda de texto
completo. Como su nombre lo indica, estos sistemas ndice de cada palabra en un documento, no slo las primeras palabras como con el RDBMS
rbol B estndar. Un ndice de texto completo puede responder a la pregunta "Encuntrame los documentos que contienen la palabra 'activo'" en el
tiempo que se acerca a O [1], es decir, una cantidad de tiempo que no vara con el tamao del corpus indexado. Si hay 10 millones de documentos en
el corpus, una bsqueda a travs de esos 10 millones de documentos no tomar mucho ms tiempo que una bsqueda a travs de un corpus de 1.000
documentos. (Acercarse a la constante de tiempo en esta situacin requerira que la coleccin de 10 millones de documentos no hizo uso de un
vocabulario ms grande que la coleccin 1000-documento y que no era el caso de que, por ejemplo, el 90 por ciento de los documentos contiene la
palabra "corriendo".)
Como funciona? Como cualquier otra estrategia de indexacin: trabajo extra a la hora de insercin se negocia por menos trabajo en el momento de la
consulta. Considere la posibilidad de la construccin de una gran mesa de cada palabra en el idioma Ingls junto a las teclas de bases de datos de los
documentos que contienen la palabra:
Palabra

Documento IDs

absquatulate 612
engalanar

36, 9211

criptognica 9
dactylioglyph 7214
exheredate

57, 812, 4010

folletn

87, 349, 1203

folletn

87, 349, 1203

genetotrophic 5000
hartebeest

710

inspissate

549, 21, 3987

...
samoyedo

17, 91, 1000, 3492

sesquipedal

723

el

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, ...

uberous

6, 800

velutinous

45, 2307

widdershins

7300

xenial

3611

ypsiliform

5607

zibeline

4782

Si construimos esto como una tabla hash, tenemos O [1] el acceso a una fila en la tabla. Si simplemente seguimos las filas en forma ordenada,
tenemos O [log W] el acceso a cualquier fila de la tabla, donde W es el nmero de palabras en nuestro vocabulario. Rendimiento no vara con el
nmero de documentos de la coleccin ... o no? Casi todos los documentos Ingls contendr la palabra "the" y por lo tanto simplemente devolver el
valor de la document_ids columna para la palabra "el" tiempo tomar O [N], donde N es el nmero de documentos en el corpus. Esta fila no es til de
todas formas, ya que no es selectiva, es decir, que podra obtener la misma informacin casi tan rpido con una exploracin secuencial de la tabla de
documentos, la recopilacin de todos los ID de documento. Mientras que la indexacin de un documento, un sistema de bsqueda de texto completo
se referir a una lista de palabras vacas, palabras que son demasiado comunes para ser digno de indexacin. Por norma Ingls, la lista de palabras de
parada incluye palabras como "a", "y", "como", "a", "para", "o", "la", etc.
Insercin de un nuevo documento en la coleccin ser lenta. Vamos a tener que pasar por el documento, palabra por palabra, y actualizar tantas filas
en el ndice, ya que hay palabras distintas en el documento. Pero ese trabajo extra a la hora de insercin vale la pena en una reduccin en el tiempo de
consulta de O [N] a O [1].
Dada una estructura de datos de la forma anterior, podemos encontrar rpidamente todos los documentos que contengan la palabra "correr". Tambin
podemos encontrar rpidamente todos los documentos que contengan la palabra "zapatos". Podemos cruzan estos conjuntos de resultados de forma
rpida, dndonos los documentos que contienen tanto "correr" y "zapatos". Con algunas estructuras de datos de indexacin ms elegantes podemos
restringir nuestra bsqueda a los documentos que contienen la frase contigua "zapatillas", en contraposicin a los documentos donde aparecen esas
palabras por separado. Pero supongamos que hay 1.000 documentos de la coleccin que contengan esas dos palabras. Cules son los ms relevantes
para la consulta del usuario de "zapatillas de deporte"?
Necesitamos una nueva estructura de datos: el histograma palabra-frecuencia. Esto nos que ocurren palabras en un documento y la frecuencia con
que se producen de una manera que se ajusta fcilmente a la longitud total de un documento lo dir.
He aqu una palabra histograma de frecuencias para la primera frase de la de Tolstoi Ana Karenina :
Palabra Contar Frecuencia
todos
1
1/16
otro
1
1/16
pero
1
1/16
cada
1
1/16
familias
1
1/16
familia
1
1/16
contento
1
1/16
en
1
1/16
es
1
1/16
su
1
1/16
uno
1
1/16
propio
1
1/16
parecerse
1
1/16
infeliz
2
2/16
camino
1
1/16
Uno podra argumentar que esta frase hace mejor literatura como "Todas las familias felices se parecen entre s, pero cada familia infeliz es infeliz a
su manera", pero el software de bsqueda de texto completo le resulta ms til en este formulario.
Despus de que se hizo el histograma de crudo, se ajusta tpicamente para la prevalencia de las palabras en Ingls estndar. As, por ejemplo, la
aparicin de "parecerse" es ms interesante que "feliz" porque "asemejarse" se produce con menos frecuencia en la norma Ingls. Palabras vacas
como "es" se tiran por completo. Partiendo es otro refinamiento til. En el ndice y en las consultas convertimos todas las palabras de sus tallos. La
palabra madre para "familias", por ejemplo, es "familia". Con derivada, una consulta para "familias" se correspondera con un documento que
contiene la "familia", y viceversa.

Dado un conjunto de histogramas es posible responder a las consultas como "Mustrame los documentos que son similares a ste" o "Mustrame
documentos cuyo histograma es ms parecido a una cadena introducida por el usuario." La consulta similitud entre el documento se puede manejar
mediante la comparacin de histogramas ya almacenados en la base de datos de texto. La cadena de bsqueda "minas de platino en Nueva Zelanda"
podra ser procesada primero por tirar las palabras vacas "en" y "nuevo". Mediante el uso de la comparacin de histograma, el software entregara
artculos que que tienen el mayor nmero de apariciones de "platino", "minas", y "Zelanda". Supongamos que "Zelanda" es una palabra ms rara que
"platino". A continuacin un documento con una ocurrencia de "Zelanda" se ve favorecida por una con una ocurrencia de "platino". Un documento
con una ocurrencia de cada palabra se prefiere a un artculo en el que slo una de esas palabras muestra arriba. Un documento que contiene slo las
palabras "las minas de platino Zelanda" es un partido mejor que un documento que contiene 100.000 palabras, tres de los cuales se producen para que
coincida con los trminos de la consulta.
El poder de este tipo de sistema es tentadora y plantea la pregunta "Podemos correr nuestra aplicacin Web completo de un sistema especializado de
base de datos de bsqueda de texto completo?" De hecho, por qu no tirar los RDBMS en total?
No Chuck RDBMS porque lo ponemos en manejar el problema de la concurrencia: dos usuarios intentan actualizar con el mismo tema de forma
simultnea. Una mejor herramienta de consulta es agradable, pero no podemos adoptarlo como nuestro sistema de gestin de base de datos principal,
a menos que se ocupa del problema de concurrencia, as como el RDBMS.
Un enfoque pragmtico que parece empezar por mantener todos los documentos en el RDBMS: artculos, comentarios de usuarios, mensajes en los
foros de discusin, etc. Cualquiera de una vez por noche o cada vez que se agrega un nuevo documento, actualizar la coleccin de un sistema de
bsqueda de texto completo. Pginas que forman parte de la experiencia de usuario estndar y flujo de trabajo operan desde el RDBMS. El cuadro de
bsqueda en la esquina superior derecha de cada pgina, sin embargo, consultas en el sistema de bsqueda de texto completo. Vamos a llamar a esto
un diseo split-system.
**** Figura inserto *****
Figura 12.1: Un enfoque de sistema split a brindar bsqueda de texto completo. El contenido de la aplicacin se almacenan en un sistema de gestin
de base de datos relacional. Scripts mantienen peridicamente una segunda copia de una base de datos de texto especializado. El programa de servidor
Web realiza consultas, inserciones y actualizaciones en el RDBMS. Cuando un usuario solicita una bsqueda de texto completo, sin embargo, la
consulta se enva a la base de datos de texto.
Uno de los argumentos en contra del enfoque de sistema split es que dos ejemplares de la coleccin de documentos se mantienen. En una era de $ 200
unidades de disco de absurdamente alta capacidad, esto no es un argumento poderoso. Es casi imposible de llenar una unidad de disco moderno, con
palabras escritas por los seres humanos. Uno puede llenar una unidad de disco con el vdeo o secuencias de audio, pero no texto. Y en cualquier caso,
algunos sistemas de bsqueda de texto completo se puede construir un ndice para una coleccin de documentos sin que ellos mismos mantener el
documento original en todo, es decir, usted, de hecho, tener slo una copia del documento en el RDBMS.
Un segundo argumento contra el uso de RDBMS y los sistemas de bsqueda de texto completo simultnea es que las colecciones tendrn fuera de
sincrona. Si el servidor Web se estrella en medio de una transaccin de RDBMS, todo el trabajo se deshace. Si el servidor Web se insertando al
mismo tiempo un documento en un sistema de bsqueda de texto completo, es posible que la base de datos de texto completo contendr un
documento que no es, de hecho, disponible en las pginas principales del sitio: el sitio que se est generado a partir de la RDBMS. Alternativamente,
el inserto RDBMS podra tener xito mientras que la insercin de texto completo falla, lo que lleva a un documento que est disponible en el sitio,
pero no investigable. Este argumento, tambin, en ltima instancia, carece de poder. Es cierto que el RDBMS es un medio conveniente y casi infalible
de la gestin de transacciones y concurrencia. Sin embargo, no es la nica manera. Si uno tuviera que contratar a programadores suficientemente
cuidadosas y sistema suficientemente dedicado y administradores de bases de datos, sera posible mantener dos bases de datos sincronizados.
Un tercer argumento en contra del sistema de divisin es la disparidad de las interfaces. Supongamos que nuestro RDBMS es Oracle. Los
desarrolladores web saben cmo hablar con Oracle a travs de Active Server Pages. Los programadores de escritorio saben cmo hablar con Oracle a
travs de la API C. La gente de marketing saben cmo hablar con Oracle a travs de diversas herramientas de informes. Algunos usuarios individuales
han descubierto que hablar con Oracle desde programas de escritorio estndar, como Microsoft Excel y Microsoft Access. El costo de traer a un nuevo
programador crece si tiene que ensear a esa persona no slo acerca de un RDBMS, sino tambin acerca de las herramientas especializadas, cada una
con su propia biblioteca de interfaces.
Sin embargo, el mejor argumento contra el uso tanto un RDBMS y un sistema de bsqueda de texto completo "bolsa-on-the-side" es que el sistema de
divisin no soporta naturalmente el tipo de consultas que sean necesarias:
mostrarme documentos que corresponden a las "mejores restaurantes", escrito por los usuarios cuyas registrada direccin de la calle es a 10
millas de cdigo postal 02138
mustreme los documentos que coinciden con "la fotografa de estudio", escrito por los usuarios cuyas contribuciones han sido valorados por
encima del promedio de otros usuarios (dicho contenido calificaciones artculo se almacenan en tablas RDBMS)
mostrarme documentos que corresponden a las "mejores trucos publicitarios", escrito por los usuarios cuya reciente de anuncios clasificados
han atrado a ms de 5 ofertas cada

Aumentar el RDBMS
Considere un sistema de indexacin de texto completo. Se necesita una forma de escribir cosas abajo (las estructuras de datos de ndice) y por lo
general opta por el sistema de archivos del sistema operativo. Se necesita una forma de realizar el cmputo en un lenguaje de programacin de
procedimiento, normalmente C alrededor del ao 2004.
Considere un sistema de gestin de base de datos relacional moderna. Ofrece una forma de escribir cosas abajo: CREATE TABLE y INSERT. Ofrece
una forma de ejecutar el software escrito en un lenguaje de procedimientos: C, Java, o PL / SQL en el caso de Oracle; cualquier lenguaje de
programacin .NET soportado en el caso de Microsoft SQL Server.
Por qu no puede uno construir una bsqueda indexador de texto completo dentro del RDBMS? Eso es exactamente lo que algunos de los
vendedores de RDBMS comerciales han hecho. Oracle fue un pionero en esta rea y el producto de referencia Oracle se llama "texto de Oracle".

vendedores de RDBMS comerciales han hecho. Oracle fue un pionero en esta rea y el producto de referencia Oracle se llama "texto de Oracle".
crear contenido mesa (
clave content_id entero primaria,
referencias refers_to content_raw,
- Que contribuyeron esto y cuando
creation_user no usuarios de referencias nulas,
creation_date fecha no nulo,
modified_date fecha no nulo,
varchar mime_type (100) no es nulo,
varchar one_line_summary (200) no es nulo,
clob cuerpo,
varchar editorial_status (30)
comprobar (editorial_status en ('presentado', 'rechazada', 'aprobado', 'caducado'))
);
- Crear un ndice de texto de Oracle (el producto se llamaba
- Contexto de Oracle, por lo tanto, los prefijos CTX en muchos procedimientos)
crear content_text ndice
en el contenido (el cuerpo)
INDEXTYPE es ctxsys.context;
- Echemos un vistazo a las opiniones sobre la ejecucin de los zapatos de
- Los usuarios que se registraron en los ltimos 30 das, la clasificacin
- resultados en orden decreciente de pertinencia
seleccionar
anotar (1),
content.content_id,
content.one_line_summary,
users.first_names,
users.last_name
del contenido, los usuarios
donde contiene (cuerpo, 'zapatillas de correr', 1)> 0
y users.registration_date> CURRENT_TIMESTAMP - intervalo de '30' das
y content.creation_us
er = users.user_id
ordenado por puntuacin (1) desc;

En el ejemplo anterior, Oracle Text construye su propio ndice en el body de la columna de content tabla. Cuando un ndice de texto se define en una
mesa se hace posible utilizar la contains operador en una clusula WHERE. El procesador de consultas SQL de Oracle RDBMS es lo
suficientemente inteligente como para saber cmo utilizar el ndice de texto para responder a esta pregunta sin hacer un recorrido de tabla secuencial.
Es posible tener ms de una llamada a la contains en la misma consulta. As, el ltimo argumento de los contains es un nmero entero que
identifica la consulta, en este caso "1". Es posible obtener una puntuacin de relevancia en la lista de seleccin o en una clusula ORDER BY con la
funcin de score y un argumento identificacin de la que contains llamar la puntuacin debe tirar.
Oracle Text es uno de los productos ms difciles y complejos de Oracle RDBMS a utilizar. Por ejemplo, si usted quiere ser capaz de buscar una frase
que se produce tanto en el one_line_summary o body y combinar la relevancia calificar, es necesario construir un ndice de varias columnas:
ctx_ddl.create_preference ('content_multi', 'MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute ('content_multi', 'COLUMNAS', 'one_line_summary, cuerpo');
crear content_text ndice
en el contenido (modified_date)
INDEXTYPE es ctxsys.context
parmetros ('content_multi almacn de datos');

Tenga en cuenta que el propio ndice se basa en la columna modified_date , que no est a su vez indexados. La llamada a ctx_ddl.set_attribute
en el que las COLUMNAS atributo se establece es lo que determina qu columnas indexacin.
Para un ejemplo de un sistema que aborda el reto de texto indexacin de tablas de Oracle dispares, consulte http://philip.greenspun.com/seia/examples-search/site-widesearch

Oracle Text tambin tiene la propiedad de que su modo de bsqueda por defecto es la concordancia exacta frase. Un usuario que tipos "zippy cabeza
de alfiler" en un buscador se esperara encontrar documentos que contienen la frase "Zippy la Pinhead". Esto no suceder si su guin pasa la consulta
por el usuario sin derecho a travs de la Contains operador. Ms problemtica es lo que sucede cuando un usuario escribe una cadena de consulta que
contiene caracteres que Oracle Text trata a especial. Esto puede resultar en un error que se levant por la consulta SQL y un "Error de servidor 500"
devuelto al usuario si no se captura el error en el script de procedimiento. Sera bueno si Oracle Text tena un procedimiento integrado llamado
"ProcessRawQueryFromWebForm" o algo as. Pero no, al menos hemos podido encontrar una en la documentacin de Oracle versin 10g. La
segunda mejor opcin es un procedimiento llamado pavtranslate , disponible from
http://technet.oracle.com/sample_code/products/text/htdocs/query_syntax_translators/query_syntax_translators.html .
Oracle Text, a travs de la opcin "filtros INSO", tiene la capacidad de indexar una notable variedad de documentos en una columna BLOB. Por
ejemplo, el software puede reconocer a una hoja de clculo Microsoft Excel, tire el texto y aadirlo al ndice. Al mismo tiempo, es lo suficientemente
inteligente como para saber cundo hay que ignorar un documento en su totalidad, por ejemplo, si la columna BLOB se llenaron de una fotografa
JPEG.

Ejercicio 1: esperadas Consultas


PREGUNTA a tu cliente Qu clases de Consultas espera Que sean las mas usuales en tu comunidad. Por Ejemplo, en Un Sitio Acadmico Puede Ser
muy Importante Que Si se ESCRIBE el nombre de una persona se obtengan Todas las publicaciones de su autora. En un sitio de Compradores, Puede
del mar Que Esencial La Consulta por nombre de marca y Obtener las REVISIONES de producto. Solo Tu cliente Puede del determinarlo con
authority.

Ejercicio 2: Documenta tu diseo

Ejercicio 2: Documenta tu diseo


Pon es / doc / bsquedas documento de la ONU en el cual sea describe el plan de de tu equipo prrafo proveer v bsqueda textual Sobre Todo el
contenido de tu sitio. Si el Sistema de Gestin de Contenidos Que Tienes Te dejo con Una Mezcla de Cosas en el Sistema de archvos y Cosas en la
RDBMS, Explica como vas a Hacer prrafo Sincronizar y unificar organismos europeos de normalizacin en documentos En un nico ndice
completo. S se NECESITAN guiones Nocturnos Para El mantenimiento, documntalos here.
Incluye las respuestas de tu cliente al Ejercicio 1 en this document.

Ejercicio 3: ESCRIBE el mdulo bsico de bsquedas


Construye ONU Modulo Bsico de bsquedas Que proporcione las Siguientes Funciones:
el usuario Hace Consultas desde el URI /search/ , y da la salida en /search/results
el administrador Tiene Formas de ver Estadsticas Sobre el Tamao y Estructura del corpus (Cuantos en documentos de Cada tipo, Tamao
totales de la Coleccin)
el administrador Tiene La Capacidad de ELIMINAR y Reconstruir el ndice textual. Esto Es tristemente Necesario Cierta con periodicidad Para
La Mayora de las Herramientas Y sin VAS una cola querer el publicador se See Obligado un USAR oscuros Mandatos de concha. En Una
Solucin ideales Navegador Web el es lo unico Que Hace Falta Manejar prrafo mantenerla.

Ejercicio 4: Hermano alcalde


En general, los Usuarios Prefieren Navegar, Antes que buscar. Si los Usuarios estan Usando bsquedas prrafo Obtener respuestas Tpicas o Realizar
Tareas Comunes, then hay algo mal con la navegacin del sitio o la arquitectura de informacin. Si los Usuarios estan Usando las bsquedas
Textuales y No hay resultados obtienen, ENTONCES need Agrandar el ndice o Aumentar el contenido de tu sitio.
Registra las cadenas de bsqueda de los Usuarios del una tabla de la RDBMS y permite Que los Administradores hijo Vean Cuales las bsquedas Ms
populares (por da, semana o mes). Asegrate de resaltar las bsquedas Que Dieron Como resultado m Una Pagina Que decia ningn documento
Concuerda con su bsqueda. Pregntate si seria tico permitir Que los Administradores puedan ver ONU Informe Donde se muestre las cadenas de
bsqueda y los Usuarios Que las escribieron.
Actualiza tu archivo /doc/search prrafo reflejar la Adicion of this capacity.

Ejercicio 5: Enlaces
ENCUENTRA los Lugares Lgicos Dentro de las Pginas de tu comunidad Donde s Dbe Poner enlaces a la Capacidad de bsqueda. Por Ejemplo,
en este sitios Muchos Ser Florerias interesante Que Haya Una ventana de squeda Bsqueda rpida en la esquina superior de Derecha de Cada page
Que se Muestra. En MUCHOS este sitios, se ve bien Haya Que Un enlace en la Pgina de Resultados Que apunte de vuelta a pagina de bsqueda con
Una ventana buscar de nuevo previamente Completada en forma automtica con la consulta inicial.
Asegrate Que la Pgina principal de la Documentacin Enlaza a la Informacin of this nuevo mdulo.

Trabajar con los motores de bsqueda Pblica


Si su comunidad en lnea es en la Internet pblica es probable que le gustara ver a su contenido indexado por los motores de bsqueda pblicos como
Google ( www.google.com ). En primer lugar, Google tiene que saber acerca de su servidor. Esto ocurre ya sea cuando alguien ya en los enlaces del
ndice de Google a su sitio web o cuando se agrega manualmente la URL de un formulario de la pgina google.com casa. En segundo lugar, Google
tiene que ser capaz de leer el texto en su servidor. Por lo menos a partir de 2005 ninguno de los motores de bsqueda pblicos implementados de
reconocimiento ptico de caracteres (OCR). Esto significa que el texto incrustado en un archivo GIF, animacin Flash, o un applet de Java no ser
indexado. Puede ser que sea legible por un usuario humano con visin perfecta, pero no va a ser ledo por los programas informticos que rastrean la
Web para construir bases de datos para los motores de bsqueda pblicos. En tercer lugar, Google tiene que ser capaz de entrar en todas las pginas de
su servidor. Si usted ha estado exija el registro para ver las discusiones, por ejemplo, esas discusiones no sern indexados por Google a menos que su
software es lo suficientemente inteligente como para reconocer que se trata de Google detrs de la peticin y hacer una excepcin. Cmo reconocer a
Google? He aqu un fragmento de una lnea del registro de acceso philip.greenspun.com (saltos de lnea insertados para facilitar la lectura):
66.249.71.53 - - [10 / Feb / 2005: 02: 13: 15 -0500]
"GET /sql/triggers.html HTTP / 1.0 200" 0 ""
"Googlebot / 2.1 (+ http: //www.google.com/bot.html)"

Observe el encabezado de agente de usuario al final: Googlebot / 2.1, con su propuesta incluida que los editores Web Check
http://www.google.com/bot.html para ms informacin. Debido a que algunos motores de bsqueda en el archivo de lo que el ndice, que no quieres
para proporcionar acceso en el registro gratuito a contenido que es verdaderamente privado a los miembros. En teora, un <META NAME="ROBOTS"
CONTENT="NOARCHIVE"> coloca en la cabeza de los documentos HTML impediran motores de bsqueda de archivo de la pgina, pero los robots no
estn garantizados a seguir estas directivas.
Algunos motores de bsqueda le permiten ofrecer consejos y sugerencias de indexacin para la presentacin una vez que un usuario est viendo una
pgina de resultados de bsqueda. Por ejemplo, en la tabla de contenidos de este libro, tenemos las siguientes etiquetas META en la cabeza:
<Meta name = "keywords" content = "desarrollo web
comunidades en lnea del MIT 6.171 libros de texto ">
<Meta name = "description" content = "Este es el libro de texto para el MIT
Enginering curso Software para Aplicaciones de Internet ">

El "palabras clave" tag aade algunas palabras que son relevantes para el documento, pero no est presente en el texto visible. Esto ayudara a alguien
que decidi buscar "MIT 6.171 libros de texto", por ejemplo. La "descripcin" etiqueta puede ser utilizado por un motor de bsqueda al resumir una
pgina. Si no est presente, un motor de bsqueda puede mostrar las primeras 20 palabras en la pgina o seguir algunas heursticas para construir un

pgina. Si no est presente, un motor de bsqueda puede mostrar las primeras 20 palabras en la pgina o seguir algunas heursticas para construir un
resumen razonable. Estas etiquetas se han abusado rutinariamente. Un editor puede aadir trminos de bsqueda ms populares, tales como "sexo" a
un sitio que no est relacionada con esos trminos, con la esperanza de captar ms lectores. Una empresa puede aadir los nombres de sus
competidores como palabras clave. Los usuarios no veran estos trucos sucios a menos que tomaron la molestia de utilizar el comando Ver cdigo
fuente en su navegador. Debido a esta historia de abuso, muchos motores de bsqueda pblicos ignoran estas etiquetas.
Ver http://searchenginewatch.com/resources/metasuits.html para las cuentas de varias demandas judiciales que se han luchado sobre el contenido de las etiquetas meta.

Una prctica es particularmente destructivo "encubrimiento", en el que un servidor Web est programado para enviar completamente diferentes
pginas a los motores de bsqueda y los usuarios humanos (identificados por tener "Mozilla" o "MSIE" en sus cabeceras de agente de usuario). Un
editor sin escrpulos sera averiguar cules son los trminos de bsqueda ms populares actuales en los motores de bsqueda pblicos (
http://searchenginewatch.com/facts/searches.html ofrece una lista de las ventanas en varios servicios de bsqueda), cadena de esos trminos juntos, y
servir una mezcolanza de aquellos a los motores de bsqueda. Mientras tanto, cuando un usuario regular lleg al sitio de la pgina se presenta sera un
lanzamiento de producto banal. Google amenaza con prohibir de su ndice de cualquier sitio que se dedica a esta prctica.
El Archivo /robots.txt
Suponga que usted no quiere que los motores de bsqueda pblicos indexacin nada debajo de la /staging/ directorio de su servidor. Este contenido
no es exactamente secreto, pero tampoco lo quieres liberado antes de tiempo. Ni qu quieres dos copias del mismo contenido en el ndice de Google,
una copia en el rea de preparacin y una copia en su posicin final en el sitio.
Usted necesita leer el Estndar de Exclusin Web, un protocolo para la comunicacin entre editores web y los rastreadores web, disponible en
http://www.robotstxt.org/wc/norobots.html . Usted el editor pone un archivo en su sitio, accesible en /robots.txt , con instrucciones para los robots.
He aqu un ejemplo que excluye el directorio temporal:
Agente de usuario: *
# Vamos a mantener a los robots fuera de nuestras cosas a medias
Disallow: / puesta en escena

El User-agent lnea especifica para que los robots los mandatos estn destinados. Cada Disallow pide un robot no mirar en un directorio en
particular. Nada requiere un robot para observar estos mandamientos, pero el estndar parece haber sido adoptada por todos los principales ndices, no
obstante.
Visita http://www.ibm.com/robots.txt para conseguir un poco de conocimiento de cmo un sitio puede evolucionar con el tiempo.

Ejercicio 6: robots.txt
Crear otro archivo /robots.txt en tu Servidor Que excluya a los robots de Las Porciones Que determinaste de tu sitio. ESCRIBE ALGUNOS
comentarios en la parte superior, del archivo prr explicar Quin lo creo, Cuando FUE CREADO, y Los razonamientos Detrs de las exclusiones.
Si ESTAS Construyendo ONU Sistema de Gestin de Contenidos 100 porciento BASADO En Una BASE DE DATOS, Tienes la Posibilidad de Poner el contenido del archivo
robots.txt en la RDBMS, siempre Y Cuando Que El Mismo se entregue Cuando Se Solicite la URI /robots.txt .

Ejercicio 7: aprobacion del cliente


Revisa la Capacidad de bsquedas, del tanto las Pginas de usuario Como las de administrador, en conjunto conb tu cliente. ESCRIBE las Reacciones
de tu cliente un nuevo mdulo this, y presta Atencin en particular, una idea nueva CUALQUIER Que El Pueda cliente Sobre Tener Lo Que Serian
Consultas Tpicas en el sitio.

El futuro
Como una comunidad en lnea crece y ms grande se vuelve cada vez ms probable que un usuario ser abrumado con "100.000 documentos
coincidentes tu consulta". Cuando una comunidad es nuevo y pequeo, es posible buscar una respuesta simplemente leyendo los ttulos de todo en el
sitio, es decir, por la navegacin. Como comunidad crece, por lo tanto, mayor ser la importancia de las herramientas de recuperacin de informacin.
Los ejercicios de este captulo se centran en responder a la pregunta de un usuario mediante la presentacin de los enlaces a los documentos
pertinentes. Supongamos que construimos una herramienta de bsqueda que siempre devuelve el documento muy ms relevante en el corpus. Eso es
una solucin ptima? Slo si usted cree que los usuarios les gusta leer.
Supongamos que Joe usuario visita photo.net y tipos "A qu velocidad de obturacin es un trpode requiere?" en el cuadro de bsqueda. Es
razonable asumir que Joe quiere leer un documento de 10.000 palabras que contiene la respuesta a esta pregunta? O ms bien Joe conseguir ... la
respuesta a su pregunta. La respuesta "a velocidades de obturacin de 1 / lente de distancia focal" es mucho ms pequeo y ms rpido de leer que un
documento que contiene esta informacin.
To get a feel for how a question answering system can be built on top of a full-text indexer, read "Scaling Question Answering to the Web" (Cody
Kwok, Oren Etzioni, Dan Weld; WWW10 conference, May 2001; http://www.www10.org/cdrom/papers/pdf/p120.pdf ), which describes a system
built at the University of Washington. This system includes all of the expected linguistic gymnastics plus code to sort out the Internet-specific
problem of noise . Traditional information retrieval systems are designed to work with authoritative documents, eg, the Encyclopedia Britannica , a
binder of corporate policies, or the design notes for a jetliner. The documents in the corpus are presumed to be authoritative. There won't be four
different answers, three of them flat wrong, to questions such as "In what year was Gioacchino Rossini born?", "How many signatures are required for
a purchase of $57,300?", or "How wide is the wingspan of the airplane?" With user-authored content in an online community, however, it seems safe
to assume that while the average answer is likely to be correct, for every 100 correct answers there will be at least three or four incorrect ones. Even
when the data require no interpretation, there will be typos. For example, a Google search for "rossini 1792-1868" returned 50,900 documents in
February 2005; a search for "rossini 1792- 1869 " returned 43 documents. A question-answering system built on top of lightly moderated userauthored content will have to exercise the same sort of judgment as do humans: How many documents contain Answer A versus Answer B? What is
the relative authority of conflicting documents? Which of two conflicting documents is more recent?

Dispositivos mviles de Internet ponen un mayor nfasis en la recuperacin de informacin. Las velocidades de conexin son ms lentos. Pantallas
son ms pequeas. No es prctico para un usuario para perforar hacia abajo en 20 documentos devueltos por un motor de bsqueda como
posiblemente relevantes para una consulta, sobre todo si el usuario est conduciendo un coche y utilizar un navegador de voz.
Si quiere emerger como un hroe del polvo de la siguiente colapso Internet, trabajar en la recuperacin de informacin.

Ms
http://www.oracle.com/technology/products/text/ , technical overviews for Oracle Text
http://trec.nist.gov , for the proceedings of the Text REtrieval Conferences (TREC)

Tiempo y Movimiento
Las dos entrevistas de clientes, al comienzo de los ejercicios y de nuevo al final, deben tomar cada menos de una hora.
El diseo de bsqueda y documentacin debe ser un esfuerzo de equipo, y tomar una o dos horas.
Los equipos ms afortunados podrn tener en sus sistemas de bsqueda en marcha y funcionando en una hora. Equipos desafortunados utilizando
difciles de instalar sistemas de bsqueda pueden requerir la mejor parte de un da. Los equipos con una sola tabla de contenido y no hay pginas
HTML estticas deben ser capaces de construir las secuencias de comandos bsicos de pgina en una a dos horas. Se requerir tiempo adicional para
diseos que gestionan contenidos a travs de mltiples tablas y el sistema de archivos.
Los ejercicios restantes deben ser factible en 2 a 4 programador-hora.
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Translate

From:

English

To:

Spanish

View:

Translation

Original

Planificacin Redux
parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet
Mucho ha cambiado desde el captulo "Planificacin" . Usted tiene una mejor comprensin del problema, lo que puede haber provocado nuevas ideas
de servicio en su mente. Sus clientes han tenido la oportunidad de ver un prototipo del ltimo servicio, que puede haber provocado nuevas ideas en
sus mentes. Sus clientes deben tener un mayor respeto por sus habilidades y por lo tanto una mayor disposicin a dedicar el pensamiento y la atencin
a este proyecto. Considere que la mayora de los programadores de computadoras sufren de profundos dficits en las siguientes reas:
pensar crticamente acerca de lo que es una aplicacin informtica debe hacer
anotando un diseo
escribir un plan de implementacin
documentar caractersticas importantes o decisiones de diseo
diseo modular limpia
el ejercicio de buen juicio (por ejemplo, no se trata de construir algo completo y complejo cuando slo tiene una o dos semanas)
comunicar el estado del proyecto
En la medida en que has demostrado que eres un corte por encima de los desarrolladores de software con los que sus clientes han funcionado en el
pasado, usted encontrar que su confianza en que se ha incrementado desde el comienzo de la clase.

Por qu usted est hablando con el cliente


Recuerda lo mucho que aprendi en la realizacin de la prueba de usabilidad en el captulo de "Discusin" . Libros de texto informticos y manuales
RDBMS le puede ensear cmo manejar la concurrencia, pero slo observaciones de e interacciones con los usuarios pueden ensearle cmo
construir una mejor experiencia de usuario. Su cliente tiene las llaves del reino: (1) el contenido para atraer a la gente; (2) la autoridad para poner en
marcha el servicio; (3) el poder editorial sobre los sitios Web existentes que pueden vincular al nuevo servicio; (4) direcciones de correo electrnico y
nmeros de telfono de las personas que estaran propensos a encontrar el nuevo servicio til.
Si usted puede iniciar su comunidad de aprendizaje en lnea antes del final del curso tendrs la oportunidad de aprender de los primeros usuarios y, al
hacer cambios menores, termina con una aplicacin muy mejorado en el ltimo da de la clase.

Limpiar el Cdigo
Antes de comenzar el proceso de planificacin para el resto del curso, vale la pena ir a travs de lo que has hecho ya con el fin de (a) limpiarlo un
poco, y (b) familiarizarse con las cosas que necesitarn reescrituras significativos. Trabajar a travs de cada guin pgina, archivo de modelo de datos
y la pgina de documentacin y preguntarse las siguientes preguntas:
Se firma cada guin y fechado? Explica el encabezado lo que hace el guin? Es esa descripcin exacta todava?
Son todas las consultas SQL en guiones legible y adecuadamente sangra? (Ver http://philip.greenspun.com/sql/style para algunos consejos)
Los archivos de modelos de datos contienen comentarios apropiados?
Son el archivo y nombres de variable consistente?
Es la estructura consistente con los estndares que se establece en los ejercicios captulo "Software Modularidad"?
Si utiliza algn tipo de plantillas o un sistema de cdigo subyacente, lo ests usando en cada pgina?
Est la documentacin de todo firmado, fechado y debidamente vinculado?
Es la documentacin consistente con los estndares que se establece en los ejercicios captulo "Software Modularidad"?
Fijar las pequeas discrepancias y registrar los grandes para su inclusin en el plan de implementacin resto de curso (ver ms abajo).

Limpie la experiencia del usuario


Con varios programadores trabajando en un sistema, es fcil para las pequeas inconsistencias que se meten en los diseos de varias pginas. Vamos
con un conjunto de tareas representativas que son importantes para los usuarios para llevar a cabo dentro de su aplicacin y documentar estas tareas
en /doc/testing/representative-tasks . Trabajar a travs de las tareas como un equipo para ver si es que hay pequeas cosas que deben ser
limpiados en trminos de lo que ve el usuario.
Al mismo tiempo buscar problemas ms grandes. Pregntese cmo cumplimiento de tareas consistentes en la aplicacin que se ha construido es con el
diseo de la pgina y el flujo en aplicaciones de Internet pblicos populares, como Amazon, eBay y Google. Recuerde que es un contenido nico que
debe distinguir a un sitio Web de otro, no la interfaz nica.
Est burbujeando informacin hasta el nivel ms alto posible? Por ejemplo, en una pgina que muestra las categoras de las cosas desde una tabla de
base de qu aparece en su aplicacin un recuento junto a cada categora de cuntos elementos se encuentran dentro de esa categora? O es necesario
que el usuario haga clic abajo un nivel ms para averiguar cuntos elementos hay en una categora (entonces una copia de seguridad y haga clic abajo

que el usuario haga clic abajo un nivel ms para averiguar cuntos elementos hay en una categora (entonces una copia de seguridad y haga clic abajo
para otro, entonces una copia de seguridad y haga clic abajo a otro, ...)?
Ests permitiendo que la informacin sea la interfaz? Por ejemplo, en el ejemplo anterior de la lista de categoras, no al usuario a navegar hacia abajo
haciendo clic en el nombre de la categora ("la informacin") o debe ella hacer clic en una cadena "haga clic aqu para ms informacin" de texto o
icono?
Qu parte del espacio de la pantalla est ocupada por la burocracia sitio frente a la cantidad est disponible para la visualizacin de la informacin?
Burocracia sitio incluye cosas tales como logotipos que identifican, enlaces de navegacin y los iconos, mini formularios de bsqueda, y las notas de
derechos de autor y de poltica. Podra algo de esa burocracia ser eliminados, o por lo menos ser empujado a la parte inferior de la pgina?

Ejercicio 1: Usabilidad Prueba Lite


Entre la prueba de usuario del foro de discusin y los artculos de limpieza en este captulo, que haya limpiado los problemas obvios con la interfaz de
usuario. Este es un buen momento para hacer otra prueba de usabilidad, esta vez un poco menos estructurado que el anterior.
Encuentre a alguien que nunca ha visto su proyecto antes y pedirles que trabajen a travs de las tareas en /doc/testing/representative-tasks con
todo su equipo de observacin. Escriba un breve informe de cmo ha ido a /doc/testing/planning-redux-usability .

Ejercicio 2: Caracterstica de cuadrcula


Por telfono o en una reunin cara a cara, trabajar con su cliente para determinar lo que el trabajo que se debe hacer antes de que su comunidad de
aprendizaje en lnea puede ser lanzado. El lanzamiento puede ser privada (limitado a los invitados), suave (pblico, pero no lo anuncian), o del
pblico. Lo importante es que la aplicacin es tratado como completa y presentada a por lo menos un par de docenas de usuarios.
Tenga cuidado con la tendencia de la persona comn para tratar de meter en tantas caractersticas como l o ella puede concebir. Cuando un sitio es
joven, que debe ser simple y tienen pocas reas de colaboracin. Si hay 30 foros de discusin separados y reas de comentario, cmo son los
primeros 15 usuarios que van a encontrar unos a otros? Recurdele a su cliente que www.slashdot.org , "noticias para los nerds", ha operado desde
1997 como un foro nico sin categora y en 2005 fue sirviendo aproximadamente 250 millones de pginas al mes a 10 millones de lectores.
Tiene un sitio competitivo tiene un montn de campanas y silbidos? Eso no es una razn para retrasar el lanzamiento hasta una interfaz de usuario de
forma equivalente complejo ha sido construido. Son los usuarios del sitio competitiva realidad utilizando todas esas caractersticas? O la mayora de
ellos congregan en un par de lugares?
Las personas nuevas en el mundo de las comunidades en lnea tienden a ver el da de lanzamiento como el da ms importante en la vida de una
aplicacin de Internet. De hecho, muchos ms usuarios llegarn a un sitio en su mes nmero 36 de la existencia en comparacin con su primer mes. El
nico riesgo es el lanzamiento de algo tan terrible que un usuario de prueba ser alienado y nunca regres. En un mundo de 6 mil millones de
personas, esto podra no parecer un problema grave, pero si los usuarios potenciales son, por ejemplo, los empleados de las empresas invitadas a
probar una nueva intranet, puede ser esencial para hacer una buena primera impresin. stos son algunos de los requisitos mnimos para hacer una
buena primera impresin:
contenido de alta calidad, disponible en otros lugares en Internet y relevante para las tareas actuales de los usuarios
interfaz de usuario fcil y rpido (sin 30 segundos descargas Flash o callejones sin salida confusas)
Si un cliente propone una caracterstica que no es necesario para el cumplimiento de estos requisitos, la pregunta "Por qu esto nos impide lanzar?"
Todos los das no se pone en marcha el servicio es un da que no ests aprendiendo de los usuarios. Todos los das no se pone en marcha el servicio es
un da en que la organizacin del cliente no es aprender a operar el servicio.
En colaboracin con su cliente, desarrollar una rejilla caracterstica dividiendo las caractersticas deseadas en las siguientes categoras:
1. Caracterstica launchable Conjunto Mnimo, es decir, las cosas que son necesarias para la puesta en marcha
2. Versin 1.0 (tratar de terminar a finales de este curso)
3. Versin 2.0 (escribir de modo que un seguimiento sobre la aplicacin planificada se puede lograr)
La mayora de las pginas de administracin pueden ser excluidos de la funcin launchable Conjunto Mnimo. Hasta que no haya usuarios, no habr
ninguna actividad del usuario y, por tanto, poca necesidad de estadsticas o la moderacin y la organizacin de los contenidos. Las cosas que son
valiosas para los usuarios y clientes y razonablemente fcil de implementar debe estar en la versin 1.0. Cualquier cosa que requiera esfuerzo de
programacin graves o que no pueden ser completamente especificada en este momento debe ser empujado hacia fuera a la Versin 2.0.
Coloque su rejilla caracterstica en /doc/planning/YYYYMMDD-feature-grid .

Ejercicio 3: Plan de Implementacin


Ahora que ha descubierto lo que vas a hacer, es el momento de escribir cmo vas a hacerlo. Escribir un plan de aplicacin que cubre toda la actividad
de los miembros del equipo y el cliente hasta el ltimo da de este curso. El plan de implementacin debe incluir fechas de congelacin de cdigo,
pruebas de aceptacin, de lanzamiento, y cualquier relanzamientos. El plan de implementacin debe ser explcita y especfica sobre la que el miembro
del equipo que va a hacer qu y, lo ms importante, cules son las responsabilidades del cliente son. "Joe cliente entregar el contenido del sitio
adicional a principios de mayo" es demasiado vago. Mejor: "Joe Cliente entregar copia para el / sobre-nosotros, / privacidad / pginas derechos de
autor y / contacto de 2 de mayo"
Tenga en cuenta que su objetivo es poner en marcha el servicio lo antes posible para que todos puedan aprender de la interaccin con los usuarios
reales en vivo.
Cmo se puede calcular el nmero de horas que sern necesarios para ejecutar las tareas en el plan? Despus de todo, usted nunca ha hecho las cosas
en el plan de implementacin antes o que no sera en el "plan para implementadas-ser". La mejor herramienta para la estimacin de un nuevo proyecto

en el plan de implementacin antes o que no sera en el "plan para implementadas-ser". La mejor herramienta para la estimacin de un nuevo proyecto
es un registro de cunto tiempo le llev a hacer un montn de viejos proyectos. Para lo que es el nuevo proyecto ms similar? Supongamos que le
tom tres das para construir un sistema de foros de discusin, por ejemplo, y se le pide que construir un sistema de anuncio clasificado. Ambos
sistemas tienen un nmero comparable de tablas de bases de datos. Ambos sistemas aceptan el contenido de los usuarios y requieren algn tipo de
aprobacin del administrador. Si se construye en el mismo servidor que se est ejecutando actualmente el foro de discusin, el sistema de anuncio no
requiere ningn nuevo software, subsistemas, u otras herramientas que an no lo ha instalado y utilizado. As que probablemente sera seguro para
estimar el sistema de anuncio clasificado como un proyecto de tres das.
Coloca el plan completo en /doc/planning/YYYYMMDD-implementation y el correo electrnico de su cliente (s) y los instructores notificndoles que
el plan est listo para su revisin final.

Es esto necesario?
Supongamos que su equipo est a slo dos personas y su cliente es la madre de un miembro del equipo, dueo de una tienda de buceo local. Es
necesario realizar un proceso tan formal? No sera posible obtener un resultado exitoso por sentarse en una habitacin y la piratera fuera de cdigo,
peridicamente llamar a mam para mirar lo que se ha hecho?
Absolutamente.
Por qu el nfasis en el proceso de continuacin, cuando los equipos son tan pequeos? Es un buen hbito para todos los desarrolladores de software
para entrar en, sobre todo porque los proyectos de software modernas tienden a extenderse a travs de las fronteras corporativas e internacionales.
Considere la posibilidad de un proyecto de software desde la perspectiva de una Jane de toma decisiones. Jane no sabe lo suficiente para distinguir
entre el bien y el mal cdigo cdigo. Tampoco puede mirar a un proyecto sobre todo acabado y averiguar cunto se requiere ms de codificacin para
hacer que funcione. Jane Decisin-Maker no va a ser consolada por un equipo de programadores con un historial de tirar todo junto con un ltimo
minuto milagro. Cmo sabe que el milagro ocurrir de nuevo en su proyecto?
Lo que Jane se consol es proceso y programadores que parece funcionar de una manera que es predecible para ellos y su cliente. Cuanto ms
detallada de los planes en lenguaje sencillo, ms reconfortada Jane ser, especialmente si el trabajo ha sido subcontratado a una empresa
independiente.
En resumen, los equipos ms grandes requieren ms proceso, los proyectos ms largos requieren ms proceso, y el trabajo que se propaga a travs de
las empresas y / o fronteras internacionales requiere ms proceso. Su proyecto de esta clase que se est haciendo por un pequeo equipo en un horario
condensada y, a ser posible, dentro de la misma ciudad que el cliente. Qu beneficio hay para que utilice un proceso que no es absolutamente
necesario?
Uno de los beneficios del uso de un proceso ms profundo es que usted tiende a impresionar a la gente mucho ms en las presentaciones de su trabajo.
Las personas que llevan a cabo las entrevistas de trabajo programadores han visto un montn de monos del cdigo, pero no se han visto muchos que
aparece con las impresiones de sus planes y programas claros y entonces se puede hablar de cmo se conocieron los planes y programas.
Un beneficio ms profundo es que obtendr buenos en el proceso y se convertir en menos de un esfuerzo en tener xito proyectos.
El beneficio ms profundo es que se trabaja con un plan escrito se convertir en un hbito inconsciente. Los pilotos estn entrenados para seguir listas
de verificacin y procedimientos extremadamente cuidadosa y sistemticamente. El avin no caer del cielo si las cosas no se hacen en el mismo
orden o misma manera en todos los vuelos, y un montn de las cosas no importa si usted est volando en un da soleado en un bien avin mantenido.
A menos que las listas de verificacin y procedimientos se han convertido en un hbito, sin embargo, el piloto que se encuentra con mal tiempo o
problemas mecnicos tiene una buena oportunidad de morir. Las personas dicen a s mismos "estoy siendo descuidado hoy, porque este es un vuelo
sin reto, pero voy a tener cuidado cuando tengo que ser", pero en realidad las habilidades de cuidado no son muy tiles a menos que sean habituales.

Ejercicio 4 (Para el instructor)


Llame a los clientes de cada equipo de estudiantes y piden la fuerza con que estn de acuerdo con las siguientes afirmaciones:
1. Considero que el trabajo que mi equipo de estudiantes ha hecho para ser comparable en calidad a los servicios que visito todos los das en la
Internet pblica.
2. El servicio que mi equipo de estudiantes ha construido es una solucin completa a los desafos que planteados al inicio del semestre.
3. El servicio que mi equipo de estudiantes ha construido est bien organizado y fcil de usar.
4. Estoy impresionado con la informacin y la utilidad disponible para m en las pginas de administracin.
5. Entiendo lo que el trabajo que se ha hecho, lo que va a hacer al final del curso, y lo que queda para una versin 2.0.
6. Mi equipo de estudiantes ha hecho fcil para m para comprobar sus progresos a m mismo.
7. Mi equipo de estudiantes me ha mantenido informado de su progreso.
8. Mi equipo estudiante me ha implicado adecuadamente en las decisiones de diseo y de la caracterstica.
9. Me qued impresionado por la minuciosidad de la pruebas de usuario realizado por mi equipo de estudiantes.
10. Estoy impresionado por la claridad y rigurosidad de la documentacin.
11. Creo que sera fcil para un nuevo programador debe tomar este proyecto a lo largo en el caso de que mi equipo de estudiantes desapareci.
12. Estoy impresionado por la interfaz de telfono mvil a mi servicio.
13. Estoy impresionado por la interfaz de VoiceXML a mi servicio.
14. Mi equipo de estudiantes es el mejor grupo de ingenieros que he trabajado.
15. Mi equipo de estudiantes se compone de personas que me gustara mucho trabajar con otra vez.
Puntua este ejercicio mediante la adicin de las puntuaciones de cada pregunta: 0 para el "desacuerdo" o acuerdo inspida (clientes no querrn decir
cosas malas sobre los jvenes voluntarios), 1 para "estn de acuerdo", 2 para "muy de acuerdo".

Tiempo y Movimiento

Todo el equipo que trabaja en conjunto debe ser capaz de hacer el cdigo y la experiencia del usuario limpiezas en un da de trabajo o de 6 a 8 horas.
El test de usabilidad debera requerir ms de una hora. Para un equipo que ha mantenido sus documentos de planificacin, calendario, y reuniones con
clientes hasta a la fecha, la red de caractersticas y plan de implementacin deben tomar menos de una hora ya que esta informacin ya est escrito y
en su servidor. Para un equipo que tiene dejar que la planificacin y documentacin de deslizamiento, que podra ser de cinco horas para restablecer la
moneda.
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Translate

From:

English

To:

Spanish

View:

Translation

Original

Computacin Distribuida con HTTP, XML, SOAP y WSDL


parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet
"Creo que hay un mercado mundial para unos cinco ordenadores." - Thomas Watson, presidente de IBM, 1943
Quizs Watson estaba apagado por cuatro.
A principios de 1990, pocas personas haban odo hablar de Tim Berners-Lee World Wide Web, y, de los que haba, muchos menos apreciado su
importancia. Despus de todo, las computadoras se han conectado a Internet desde 1970, y la transferencia de datos entre ordenadores era un lugar
comn. Sin embargo, la Web trajo algo realmente nuevo: la perspectiva de ver toda la Internet como un espacio nico de informacin, donde los
usuarios acceden a datos podan moverse sin problemas y de forma transparente de mquina a mquina siguientes enlaces.
Un cambio similar en perspectiva est actualmente en marcha, esta vez con los programas de aplicacin. Aunque la computacin distribuida ha sido
de alrededor durante el tiempo que ha habido redes informticas, es slo recientemente que las aplicaciones que se basan en muchas mquinas
interconectadas como un medio de computacin vasta se estn desplegando a gran escala. Qu est haciendo esto posible son nuevos protocolos para
la computacin distribuida construida sobre HTTP, y que estn diseados para los programas que interactan con los programas, en lugar de para las
personas que practican surf con los navegadores.
Hay varios tipos de protocolos:
1. El intercambio de datos: Algo mejor que el raspado de texto de las pginas web destinadas a los seres humanos para leer. Como se vio en el
captulo "Conceptos bsicos", puede utilizar XML aqu.
2. Invocacin del programa: Algunos manera de hacer invocacin de mtodos remotos, es decir, para los programas para llamar a programas que
se ejecutan en otros equipos y para responder a dichas invocaciones. El estndar emergente aqu, presentado a la Web Consortium en mayo de
2000 se llama de SOAP (Simple Object Access Protocol).
3. Auto-Descripcin: Una forma legible por mquina para programas para describir la forma en que se supone que se llama, por ejemplo, con
Web Services Description Language (WSDL).
4. Descubrimiento: Una forma de programas para aprender de forma automtica sobre otros programas, por ejemplo, con Universal Description
Discovery and Integration (UDDI), normalizados por www.uddi.org .
Actualmente estamos pasando de un entorno donde las aplicaciones se despliegan en mquinas individuales y servidores web, a un mundo donde las
aplicaciones se componen de piezas - llamados servicios en la jerga actual - que se extiende por muchas mquinas diferentes, y donde los servicios
interactuar sin problemas y de forma transparente para producir un efecto general. Si bien las consecuencias de este cambio podra ser menor de edad,
tambin es posible que pudieran ser tan profunda como la introduccin de la Web. En cualquier caso, las empresas estn introduciendo nuevos marcos
de servicios web que se aprovechan de la nueva infraestructura. .NET De Microsoft es un tal marco.
En este captulo, podrs crear aplicaciones que consumen servicios Web para combinar los datos de de su comunidad de aprendizaje en lnea con los
datos remotos en Google y Amazon . As, la construccin de clientes SOAP a estos servicios pblicos. En los ejercicios finales, que va a crear su
propio servicio que proporciona informacin sobre el contenido de reciente aparicin en su comunidad. Usted va a hacer este servicio disponible tanto
en la norma de jure del SOAP y el estndar de facto de RSS, una ruptura del mundo de los weblogs.
**** Figura inserto *****
Figura 14.1: Una interaccin de servicios web. Usuarios Humanos hablan con servidores A y B a travs del protocolo HTTP recibir resultados en las
pginas HTML. Cuando el servidor A tiene que invocar un procedimiento en el servidor B primero intenta averiguar lo que los nombres de las
funciones son y sus argumentos. Esta informacin viene de vuelta en un Web Services Description Language (WSDL). El uso de la informacin
contenida en ese documento WSDL, el servidor A es capaz de formular un (SOAP) Solicitud Simple Object Access Protocol legal y procesar los
resultados.

JABN en el alambre
Dependiendo de qu herramientas est utilizando puede que nunca necesitamos saber qu JABN solicitudes y respuestas en realidad ser similar. No
obstante, vamos a empezar con un detrs de las escenas de ver los mensajes SOAP, que se envan normalmente a travs de la red integrada en POST
HTTP.
Aqu hay un par de peticin / respuesta SOAP prima para un hipottico "quin est en lnea" servicio que devuelve informacin acerca de los usuarios
que han estado activos en los ltimos N segundos:
Solicitud (ms espacios en blanco para facilitar la lectura)

Solicitud (ms espacios en blanco para facilitar la lectura)


POSTE /services/WhosOnline.asmx HTTP / 1.1
Anfitrin: somehost
Content-Type: text / xml; charset = UTF-8
Content-Length: longitud
SOAPAction: "http://jpfo.org/WhosOnline"
<? Xml version = "1.0" encoding = "UTF-8"?>
<Soap: Envelope
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns: xsd = "http://www.w3.org/2001/XMLSchema"
xmlns: jabn = "http://schemas.xmlsoap.org/soap/envelope/">
<Soap: Body>
<WhosOnline xmlns = "http://jpfo.org/">
<N_seconds> 600 </ n_seconds>
</ WhosOnline>
</ Soap: Body>
</ Soap: Envelope>

Respuesta (ms espacios en blanco para facilitar la lectura)


HTTP / 1.1 200 OK
Content-Type: text / xml;
Content-Length: longitud

charset = UTF-8

<? Xml version = "1.0" encoding = "UTF-8"?>


<Soap: Envelope
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns: xsd = "http://www.w3.org/2001/XMLSchema"
xmlns: jabn = "http://schemas.xmlsoap.org/soap/envelope/">
<Soap: Body>
<WhosOnlineResponse xmlns = "http://jpfo.org/">
<WhosOnlineResult>
<Usuario>
<First_names> Eve </ first_names>
<Last_name> Andersson </ last_name>
<Email> eve@eveandersson.com </ email>
</ User>
<Usuario>
<First_names> Philip </ first_names>
<Last_name> Greenspun </ last_name>
<Email> philg@mit.edu </ email>
</ User>
<Usuario>
<First_names> Andrew </ first_names>
<Last_name> Grumet </ last_name>
<Email> aegrumet@alum.mit.edu </ email>
</ User>
</ WhosOnlineResult>
</ WhosOnlineResponse>
</ Soap: Body>
</ Soap: Envelope>

Ejercicio 1: Comunidad de lectura, Modelo de Datos y Amazon API


Su objetivo en este ejercicio es proporcionar una instalacin para sus miembros de la comunidad para desarrollar una lista de lectura compartida, un
conjunto de libros que los miembros nuevos o noveles podran serle de utilidad. Vamos a usar la interfaz SOAP que es parte de Amazon Web Services
( http://www.amazon.com/webservices/ ) para recuperar informacin sobre los productos directamente de los servidores de Amazon que luego se
muestran en las pginas HTML de su servidor.
Comience escribiendo un documento de diseo que establece el modelo de datos SQL y cmo vas a utilizar la API de Amazon (que funciona a
llamar? Qu valores para procesar?). Su recommended_books mesa probablemente debera tecle el Nmero Internacional Normalizado para Libros
(ISBN). Para la mayor parte de su carrera como modelador de datos, lo mejor es utilizar claves generadas. Sin embargo, en este caso hay toda una
infraestructura para garantizar la singularidad de la ISBN (ver www.isbn.org ) y por lo tanto es seguro para su uso como una clave principal.
Para cada libro, el modelo de datos debe ser capaz de registrar al menos lo siguiente:
ttulo
autores (ya sea mushed juntos en una columna, una violacin horrible de Primera Forma Normal, o estallado si usted tiene la energa)
descripcin
URL de una foto de la portada y la anchura y altura en pxeles de la imagen, si usted puede conseguir fcilmente
cuando se recomend este libro
quien recomend el libro
un comentario de la persona que recomienda el libro de por qu es particularmente relevante para esta comunidad
Es posible que desee comenzar su exploracin de la API SOAP de Amazon localizando el archivo Web Services Description Language (WSDL) para
el servicio. El archivo WSDL es una descripcin formal de las funciones exigibles, nombres de argumentos y tipos, y el tipo de valor de retorno. La
mayora de los entornos de desarrollo de aplicaciones de Internet proporcionan un conjunto de herramientas SOAP que transforma el archivo WSDL
en un conjunto de clases de proxy o bibliotecas de funciones que se pueden llamar como si el servicio se implementa en el tiempo de ejecucin local.
En Microsoft Visual Studio .NET, esta operacin se conoce como "Adicin de una referencia Web". Si usted no es un Microsoft Triunfador es posible
encontrar los "Implementaciones JABN" enlaces al final del captulo til.

Ejercicio 2: Comunidad de lectura, construccin de las Pginas

Ejercicio 2: Comunidad de lectura, construccin de las Pginas


Se sugiere la creacin de un subdirectorio en /reading-list/ para los scripts de pginas que compondrn su nuevo mdulo. Se aconseja la
aplicacin de las siguientes URL:
una pgina de ndice, una lista de los libros en la lista de lectura por ttulo, autor, y con una portada muestra, y tal vez las primeras 100 palabras
de la descripcin
un /reading-list/one-book pgina, que mostrar la descripcin completa, que recomend el libro y por qu
un /reading-list/search de pgina, el objetivo de un cuadro de entrada de texto en la pgina de ndice, que devuelve una lista de los libros
de la API de Amazon que coincidan con una cadena de consulta; los libros que ya estn en la lista de lectura se debe mostrar, pero en gris y de
alguna manera marcan como que ya estn en la lista (y no deben ser un botn para agregar de nuevo!). Los libros que no estn en la lista deben
ser hipervnculos a una URL "add-book". (Puede tomar el ttulo del libro sea el ancla hipervnculo, recuerda siempre dejar que la informacin
sea la interfaz.)
un /reading-list/add-book pgina, que solicita un comentario por parte del usuario que sugiere por qu este libro en particular es bueno para
otros miembros de la comunidad
Una buena regla general es que cada mesa que aadir a su modelo de datos implica aproximadamente 5 URLs accesibles para el usuario y 5
direcciones URL administrativas. Hasta ahora estamos hasta 4 pginas de usuario y si se va a poner en marcha esta funcin que haba necesidad de
construir algunas pginas de administracin.

Ejercicio 3: Alentar la bsqueda antes Preguntar y las API de Google


Un reto importante que amenaza las comunidades en lnea es el desorden de las preguntas recurrentes y el esfuerzo de sealar aquellos que las piden a
la FAQ o el motor de bsqueda. Un elemento de contenido existente en el servidor o en otro lugar en Internet podra no dar una respuesta completa a
la pregunta de Joe Novato, pero la lectura que quiz le hara enfocar su bsqueda en una direccin diferente.
En este ejercicio, crear un proceso de confirmacin posterior alternativa que implicara escribir dos nuevos guiones Web, las capacidades de
bsqueda que usted desarroll en la "bsqueda" del captulo , y el servicio de Web APIs de Google ( http://www.google. com / apis / ). El objetivo es
poner algunos enlaces internos y externos frente a Joe Novato y animarlo a mirarlos antes de finalizar su pregunta para su presentacin a la
comunidad entera.
Su proceso de confirmacin de mensaje nuevo debe ser invocado slo para preguntas que empiezan un hilo de discusin, no de respuestas a una
pregunta. Nuestra experiencia con las comunidades en lnea es que es ms importante para moderar las preguntas que determinan lo que se discutir
en lugar de respuestas individuales.
Si su pgina de confirmacin puesto actual est en /forum/confirm , sugerimos agregando una -query sufijo para su nuevo guin, por ejemplo,
/forum/confirm-query . Esta pgina debera tener la siguiente forma:
1. en la parte superior, la pregunta del usuario tal y como aparecer en el foro, con los botones "Editar" debajo de "Confirmar" y
2. los principales partidos entre 5-10 artculos de la web y los mensajes en los foros de discusin existentes que responden a la pregunta del
usuario en una bsqueda de texto completo (alimentan el resumen de una lnea o tal vez toda la cuestin a su motor de bsqueda local)
3. el 10.5 cima partidos en la base de datos de Google para la pregunta del usuario, utilizando de nuevo la pregunta del usuario como la cadena de
consulta Google
En este punto usted tiene algo de un desafo. Suponga que desea que el usuario navegar hacia abajo en algunos de los enlaces internos y externos
antes de la publicacin. Vamos a suponer que, de hecho, la pregunta es nueva. Usted no quiere forzar Joe Novato que retroceder para encontrar la
pgina de confirmacin (y que realmente no desea que el navegador para que diga "Pgina caducado" y obligar a Joe volver a presentar). Idealmente,
Joe puede ir hacia adelante en los enlaces y an as tener esos Confirmar y editar botones delante de l en todo momento.
Hay algunas maneras de lograr esto. Una de ellas es hacer que todos los enlaces se dirigen a una ventana separada usando el cdigo HTML target=
sintaxis para el anclaje ( <a ) la etiqueta. Los usuarios novatos pueden confundirse, sin embargo, ya que la ventana extra aparece en su pantalla y que
podra no saber cmo utilizar el navegador o sistema operativo para volver a la pgina Confirmar / Modificar. Una JavaScript emergente en un tamao
pequeo podra reducir la magnitud de este problema. Otra opcin es utilizar la funcin de marcos temida de HTML, poniendo la pgina Confirmar /
Modificar en una trama y las otras cosas en otro marco. Cuando Joe finalmente decide Confirmar / Modificar, la sintaxis Marcos proporciona un
mecanismo para el servidor para decirle al navegador "volver a una sola ventana de ahora". Una tercera opcin es hacer un "marco del lado del
servidor" en la que se construye pginas del formulario /forum/confirm-follow-link en el que la publicacin completa con Confirmar / Editar
botones se realiza a travs y el contenido de la externa o interna enlace se presenta dentro de una sola pgina.
Para el propsito de este ejercicio, usted es libre de elegir cualquiera de estos mtodos o una que no hemos pensado. Tenga en cuenta que este
ejercicio no debera requerir la modificacin de cualquiera de las tablas de bases de datos o scripts existentes a excepcin de un enlace desde la pgina
de "hacer una nueva pregunta".

Ejercicio 4: Libros relacionados a un hilo (Amazon Again)


En este ejercicio que voy a poner una lista de libros relacionados algn lugar junto a la presentacin de un hilo del foro de discusin. Esto es til por
las siguientes razones: (a) un lector podra encontrar muy til para aprender que hay un libro relevante sobre el tema que se discute, y (b) el programa
Amazon Associates proporciona editores web con una tasa de remisin ("retroceso ") cada vez que un miembro de la comunidad sigue un enlace
codificado a Amazon y compra algo.
Cmo puede el servidor de decirle qu libros estn relacionados con un intercambio de preguntas y respuestas? Comience por la construccin de un
procedimiento que ir a travs de la pregunta y todas las respuestas a construir una lista de palabras que se producen con frecuencia. Su procedimiento
debe excluir esas palabras que estn en una lista de palabras vacas de palabras en ingls muy comunes como "la", "y", "o", etc. Cualquiera que sea la
herramienta de bsqueda de texto completo que utiliz en "Buscar" captulo probablemente contiene dicha lista en algn lugar de un archivo de
sistema de archivos o una tabla de base de datos. Puede utilizar las pocas palabras principales en esta lista para consultar Amazon para obtener una

lista de los ttulos correspondientes.


Para el propsito de este ejercicio, se puede recuperar sus datos de Amazon en cada carga de pgina. En la prctica, en un centro de produccin que
sera malo para los usuarios debido a la latencia adicional y malo para su relacin con Amazon porque usted podra estar llevando a cabo la misma
consulta en contra de sus servicios varias veces por segundo. Usted probablemente decide guardar los libros relacionados en su base de datos local,
junto con un sello de "ltimo mensaje" y reconstruir peridicamente si hay nuevas respuestas a un hilo.
Cada libro relacionado debe tener un enlace a la pgina del producto en Amazon.com, opcionalmente introducido con un ID de Amazon Associates.
He aqu un ejemplo de referencia:
<a href="http://www.amazon.com/exec/obidos/ASIN/0240804058/pgreenspun-20"> <cite> Bsico
Materiales fotogrficos y Procesos </ cite> </a>

El ISBN va tras la "ASIN", y el ID de Asociados en este ejemplo es "pgreenspun-20".

Ejercicio 5: Novedades Page


Si usted no tiene ya uno, crear una pgina HTML que enumera los diez aadidas ms recientemente elementos de contenido en su comunidad. Para
cada elemento de contenido mostrar lo siguiente:
ttulo o de una sola lnea de resumen
Un resumen de texto de los contenidos o, en su caso, el contenido en s
El nombre de la persona que cre el tema, con hipervnculos a la pgina de perfil de usuario de la persona
El momento en que el artculo fue creado (formato RFC 822, precisa al segundo, por ejemplo, Wed, 29 Oct 2003 00:09:19 GMT )
Hacer esta pgina disponible en new-content en un directorio de su eleccin. Tenga en cuenta que debe ser fcil de construir esta pgina utilizando
una funcin de dibujo en la API intermdulos que ha definido como parte de su trabajo en el captulo Software Modularidad ejercicios.

Ejercicio 6: Qu hay de nuevo servicio Web


Exponga su procedimiento para el resto del mundo para que otras aplicaciones pueden aprovechar a travs de la invocacin de mtodos remotos.
Instale un controlador de SOAP que logra lo siguiente:
maneja las peticiones HTTP a /services/new-content y comprueba la sintaxis de SOAP correcta
tira los n_items parmetro de la peticin, si est presente
ejecuta la llamada a procedimiento y obtiene los resultados
entrega los resultados como una respuesta SOAP vlido que contiene cero o ms registros "item", con los campos que figuran en el
Ejercicio 5 para cada artculo
Su plataforma de desarrollo puede proporcionar herramientas que, una vez que se ha trazado el servicio Web externo a la llamada de procedimiento
interno, se encargan de la mecnica HTTP y SOAP de forma transparente. Si no, tendr que hojear los ejemplos en la especificacin SOAP y leer los
artculos introductorios relacionados a continuacin.

Ejercicio 7: Auto-Descripcin
Escribir un contrato WSDL que describe las entradas y salidas para su new-content servicio. Tenga en cuenta que si est utilizando Microsoft .NET,
estos contratos WSDL se generarn de forma automtica en la mayora de los casos. Slo es necesario exponerlos.
Su WSDL debe estar disponible ya sea mediante la adicin de un ?WSDL a la URL del servicio en s (conveniente para los usuarios de Microsoft .NET)
o disponibles agregando un .wsdl extensin a la direccin URL del servicio en s.
Validar su contrato WSDL y mtodos de SOAP invitando a otro equipo para poner a prueba su servicio. Haga lo mismo para ellos. Alternativamente,
buscar y emplear herramientas de validacin por la red.

La Marcha del Progreso


Los estndares Web iniciales, alrededor de 1990, eran simples. HTTP es bastante simple que cualquier programador competente puede escribir un
servidor bsico en un da o dos. HTML es bastante simple que los programadores fueron capaces de construir su primera pgina en treinta minutos y
no programadores no se quedaron atrs. De hecho, los estndares Web iniciales eran tan simples que los informticos acadmicos predijeron que el
sistema no funcionara.
En una dcada, sin embargo, la Web Consortium fue centrando sus esfuerzos en la "Web Semntica" y Resource Description Framework (ver
http://www.w3.org/RDF ). Cuando las normas integrantes del comit vez hablaban de si o no para facilitar la adicin de un ttulo a una fotografa,
ahora escucha palabras como "ontologa" lanzado alrededor. As el desarrollo web se ha convertido en tan difcil como descifrar el problema de la
Inteligencia Artificial.
Dnde SOAP y WSDL sentarse en este continuo de la simplicidad de HTML para el problema AI-completo de una web semntica? Al parecer, estn
ms cerca de RDF que con HTML, ya que se est llevando muchos aos para SOAP y WSDL a hacerse popular en oposicin a la propagacin de
incendios forestales, al igual que de la Web legible.
El dinmico mundo de los weblogs se ha asentado en un estndar que se ha extendido con gran rapidez y ha permitido la construccin de algunos
programas informticos bastante que agregan informacin de mltiples weblogs. Esta norma, impulsado principalmente por la Userland Dave Winer,
se le conoce como sindicacin RSS o Really Simple y est documentado en http://blogs.law.harvard.edu/tech/rss .

Ejercicio 8: Novedades Sindicacin RSS

Ejercicio 8: Novedades Sindicacin RSS


Como un favor a los miles de personas que dirigen agregadores weblog de escritorio, crear un feed RSS de tu sitio en /services/new-contentrss.xml . La alimentacin debe contener slo el ttulo, la descripcin, y un identificador nico global (GUID) para cada elemento. Se le anima a
utilizar la direccin URL completa para el artculo como su GUID, si tiene uno.
Valide su alimentacin mediante un lector RSS o el validador en http://rss.scripting.com .
Modelo
<? Xml version = "1.0"?>
<Versin rss = "2.0">
<Canal>
<Title> {nombre del sitio} </ title>
<Link> {url web} </ link>
<Description> {descripcin del sitio} </ description>
<Idioma> es-</ idioma>
<Copyright> Derechos de Autor {fechas} </ copyright>
<LastBuildDate> {fecha rfc822} </ lastBuildDate>
<ManagingEditor> {dir su email} </ managingEditor>
<PubDate> {fecha rfc822} </ pubDate>
<Item>
<Title> {title item1} </ title>
<Description> {descripcin de item1} </ description>
<Guid> {GUID para item1} </ guid>
<PubDate> {fecha rfc822 para cuando se fue directo item1} </ pubDate>
</ Item>
<Item>
<Title> {title item2} </ title>
<Description> {descripcin de item2} </ description>
<Guid> {GUID para item2} </ guid>
<PubDate> {fecha rfc822 para cuando se fue directo item2} </ pubDate>
</ Item>
</ Channel>
</ Rss>

Recuerde que debe escapar de cualquier margen de beneficio en sus ttulos y descripciones, por lo que, por ejemplo, <em>Whoa!</em> se convierte en
&lt;em&gt;Whoa!&lt;/em&gt; .

Ms
http://www.soapware.org/bdg - Gua de un desarrollador Ocupado para JABN
http://www-106.ibm.com/developerworks/library/ws-soap/?dwzone=components#2 - Uso WSDL en Aplicaciones de SOAP (Una introduccin
a WSDL para programadores de SOAP)
http://www.w3.org/TR/wsdl.html - Web Service Description Language (WSDL)
http://www.sun.com/software/sunone/wp-arch - dom Abierto Net Environment (Sun One) Libros Blancos
http://www.xmlrpc.com - XML-RPC
http://dmoz.org/Computers/Programming/Internet/Web_Services/SOAP/Implementations - Un directorio de las implementaciones de SOAP
http://www.jabber.org - un cliente de mensajera instantnea ms plataforma abierta para la mensajera XML y la informacin de presencia que
interacta con AOL Instant Messenger, MSN Messenger, Yahoo Messenger, ICQ e IRC.
http://www.ietf.org/rfc/rfc0822.txt?number=822 - norma RFC822 para el formato de los mensajes de texto Internet.
http://blogs.law.harvard.edu/tech/directory/5/aggregators - un directorio de lectores RSS
http://rss.scripting.com - RSS validador

Tiempo y Movimiento
Los equipos que utilizan un conjunto de herramientas de SOAP debera ser capaz de completar las tres secciones de la API que consume (Amazon,
Google, Amazon de nuevo) en dos a cuatro horas cada una. Si se trabaja en modo de divide y vencers, podra tener sentido para tener los mismos
miembros del equipo hacen ambas secciones del Amazonas. Los ejercicios restantes (5 a 8) deben tomar cada una hora o menos.
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Metadatos (y Generacin Automtica de Cdigo)


parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip
Greenspun , y Andrew Grumet
En esta seccin podrs construir una representacin legible por mquina de los requisitos de una
aplicacin y luego construir un programa de ordenador para generar los programas informticos
que implementan esa aplicacin. Nos tratamos este material en el contexto de la construccin de
un sistema de gestin del conocimiento, uno de los tipos ms comunes de las comunidades en
lnea, y tratamos de presentarles a la terminologa utilizada por la gente de negocios en esta rea.
Las organizaciones tienen requisitos complejos para sus sistemas de informacin. Un perodo de
rpido crecimiento econmico puede resultar en horarios demenciales y demandas que un nuevo
sistema de informacin estar listo en cuestin de semanas. Por ltimo, las organizaciones son
volubles y no tienen ningn reparo en cambiar los requisitos de mitad de camino.
Los tcnicos se han reunido tradicionalmente estos retos ... por discutir sobre las herramientas de
programacin. El modelo de datos no puede representar a la informacin que los usuarios
necesitan, la aplicacin no hace lo que lo que los usuarios necesitan que haga, y en vez de
escribir cdigo, los "ingenieros" estn discutiendo sobre Java frente Lisp frente ML frente a C #
frente Perl frente VB. Si quieres saber por qu los programadores de computadoras se les paga
menos de los mdicos, considere la situacin de los dos cirujanos de trauma que llegan a la
escena del accidente. El paciente est sangrando profusamente. Si los cirujanos eran como
programadores, que dejaran al paciente a sangrar a cabo con el fin de tener un argumento muy
satisfactorio sobre los mritos de dos tipos diferentes de torniquete.
War Story
Se pidi a los autores para ayudar a Siemens y Boston Consulting Group (BCG) se dan cuenta de
un sistema de intercambio de conocimientos para el interruptor de telfono 17 000 vendedores se
extendi entre 84 pases. Esto fue en la dcada de 1990, cuando (a) las compaas telefnicas se
estaban expandiendo la capacidad, y (b) Las empresas invierten en sistemas de informacin como
una manera de vencer a los competidores.
Siemens haba pasado 6 meses trabajando con un contratista de desarrollo Web que era experto
en la construccin de pginas HTML, pero tuvo problemas de programacin SQL. Haban
prometido poner en marcha el sistema elaboradamente especificado 6 semanas desde nuestra
primera reunin. Llegamos a la conclusin de que muchas de las caractersticas que queran
podran adaptarse a partir del cdigo fuente detrs de la comunidad en lnea photo.net pero que
aadir el "repositorio de conocimiento" requerira 4 programadores trabajando a tiempo completo
durante 6 semanas. Lo que es peor, en el estudio de las caractersticas que decidimos que el
sistema dado cuenta sera unusably compleja, especialmente para los ocupados vendedores.
En lugar de arranque ciegamente el cdigo, asignamos un solo programador para el proyecto,
nuestro amigo Tracy Adams. Gir los cuadernos de diseo legibles en tablas de metadatos de
base de datos legibles por mquina. Tracy procedi a construir una-el-programa-programa de
escritura sin resultados visibles. Siemens y BCG estaban nerviosos hasta la Semana 4, cuando el
sistema completo estaba disponible para la prueba.
"Como te gusta?" preguntamos. "Este es el peor sistema de informacin que hemos utilizado
nunca", le respondieron. "Cmo se compara con sus especificaciones?" preguntamos.
"Hmmm ... tal vez deberamos simplificar la especificacin", respondieron.
Despus de dos ms iteraciones el sistema, bautizado como "El CIE Sharenet" se puso en
marcha a tiempo y fue rpidamente adoptado, acreditado por Siemens con US $ 122 millones en
ventas adicionales durante su primer ao de funcionamiento.

Si est programando una pgina Web a la vez, se puede cambiar a la lengua du jour en busca de
una mayor productividad. Pero no vas a lograr ganancias significativas a menos que usted
abandona la escritura de cdigo para una pgina a la vez. Piense en maneras de anotar una
descripcin legible por la mquina de la aplicacin y la experiencia del usuario, y luego dejar que
el ordenador genera la aplicacin automticamente.
Una cosa que esperamos que has aprendido durante este curso es el valor de las pruebas con los
usuarios y la mejora iterativa de una aplicacin. Si una aplicacin es generada por la mquina,
puede probar con los usuarios, editar la especificacin basada en sus comentarios, y regenerar la
aplicacin en cuestin de minutos, listo para una nueva prueba.
Vamos a explorar los metadatos (datos sobre el modelo de datos) y la generacin automtica de
cdigo en el dominio del problema de la gestin del conocimiento.
Qu es la "Gestin del Conocimiento"?
Un sistema de gestin del conocimiento o el intercambio de conocimientos es un sistema de
informacin multi-usuario permite a los usuarios compartir conocimiento sobre un dominio
compartido de experiencia o investigacin. Qu es el "conocimiento"? Una forma de responder a
esta pregunta es que pasar diez aos, en el grupo epistemologa una universidad del
departamento de filosofa. Desde la perspectiva de un sistema de gestin de base de datos
relacional, sin embargo, puede ser ms fcil de definir el conocimiento como "texto, escrito por un
usuario de la comunidad, a la que el usuario puede adjuntar un documento, una fotografa, u hoja
de clculo". Otros usuarios pueden comentar en el conocimiento, la presentacin de texto y
archivos adjuntos opcionales propios. A partir de esta definicin, parecera que el foro de discusin
que construy a principios sera satisfacer las necesidades de los usuarios. De hecho, es cierto
que un foro de preguntas y respuestas indexados archivado y puede servir muchas de las
necesidades de una comunidad de prctica, un grupo de personas que tratan de resolver
problemas similares que pueden aprender de las experiencias de los dems. Sin embargo, hay
algunas caractersticas ms all de un foro de discusin que una organizacin puede solicitar, por
ejemplo, lo siguiente:
vnculos entre "objetos" de conocimiento (este es el trmino utilizado por los MBA en el campo)
instalaciones ms estructurados para la navegacin y la bsqueda de lo previsto por un foro de
discusin en bruto, posiblemente incluyendo un enlace a un conjunto de datos estructurados
existentes (por ejemplo, en el ejemplo 2 a continuacin, la lista de todos los aeropuertos de los
Estados Unidos)
seguimiento y gratificante de las contribuciones y reutilizacin
Por qu quieren Organizaciones de Gestin del Conocimiento?
En cualquier empresa, las habilidades y la experiencia de un grupo de trabajadores o estudiantes
tendrn una distribucin aproximadamente Gaussiana: un puado de personas que saben casi
nada (principiantes, incompetentes, huesos perezosos), un puado de magos que saben casi todo
(Old- temporizadores, genios, rutinas), y una gran joroba en la mitad de las personas que estn
moderadamente bien informado. Los directivos de la empresa se preguntan "cunto ms
podramos lograr si todos los habitantes de esta empresa eran tan bien informado como los
magos?" Tpicamente, la suposicin inicial es que el conocimiento es finito y esto se traduce en la
construccin de un sistema para contener un cuerpo principalmente esttica del conocimiento,
para ser extrado de los cerebros de los expertos y codificada en una serie de archivos de base de
datos o filas. Usuarios rpidamente descubre, sin embargo, que las situaciones que se enfrentan
no son bastante anloga a las situaciones descritas en el "sistema de gestin del conocimiento"
"base de conocimientos" y viene a ser visto ms bien como un "depsito de cadveres del
conocimiento".
Segundo intento de una organizacin en un sistema de informacin destinado a ayudar a los
principiantes y los trabajadores promedio con la experiencia de los ms capaces se suele
apodado el intercambio de conocimientos. En un sistema de intercambio de conocimientos, el

usuario A tiene la capacidad de poner una pregunta frente a la comunidad para que los usuarios
B, C y D pueden escribir nuevo material y / o el punto A a los artculos previamente creados.
Por lo menos, un sistema de intercambio de conocimientos proporciona un medio para que los
empleados en los nodos de una jerarqua de conversar entre ellos. Considere la organizacin
representada en la figura 15.1. Supongamos que un trabajador en Singapur tiene una pregunta
que pueda ser respondida por un trabajador en Des Moines. El acto de encontrar el compaero de
trabajo y conseguir la asistencia requiere ir todo el camino hasta la jerarqua para el jefe del
Ejecutivo en Londres y luego de vuelta por un camino diferente a travs de la jerarqua a Des
Moines. Este cuello de botella podra ser eliminada mediante la eliminacin de la jerarqua. Sin
embargo, la mayora de las organizaciones no quieren eliminar sus jerarquas. Es la jerarqua que
permite a la empresa para reducir la complejidad de gestin mediante el establecimiento de la
responsabilidad de ganancias y prdidas en los niveles intermedios. Mejor para complementar la
jerarqua con un mecanismo informal por el cual el trabajador con sede en Singapur puede pedir
ayuda y el trabajador con sede en Des Moines puede ofrecer, es decir, un sistema de intercambio
de conocimientos.
**** Inserte dibujo de jerarqua corporativa ****
Figura 15.1: Las empresas multinacionales se organizan alrededor de una jerarqua de mando y
control. Esto es bueno para la asignacin de la responsabilidad de ganancias y prdidas, sino que
crea cuellos de botella de flujo de informacin. La construccin de un sistema de intercambio de
conocimientos es una forma de facilitar el flujo de informacin entre las hojas del rbol.
Ejercicio 1: Desarrollar una ontologa
El American Heritage Dictionary define la ontologa como "La rama de la metafsica que trata de la
naturaleza del ser." Investigadores Informtica hablan de "una ontologa" como una estructura de
representacin del conocimiento, es decir, la ontologa limita los tipos de informacin que
podemos grabar (seris perdonados si usted confunde este avanzado concepto de Ciencias de la
Computacin con el modelado de meros datos).
Su ontologa consistir en definiciones de clases y, debido a una base de datos relacional es la
fuente de la persistencia detrs de su comunidad en lnea, su puesta en prctica de esta ontologa
consistir en definiciones de tabla SQL, una tabla para cada clase. Para ayudarle en el desarrollo
de una ontologa til para su comunidad, aqu hay un par de ejemplos.
Ejemplo Ontologa 1: Ciencias de la Computacin
Corporaciones todos tienen sistemas de gestin del conocimiento a pesar de que en general
puede que no tengan ningn conocimiento. Universidades afirman tener conocimiento, y sin
embargo, ninguno tiene los sistemas de gestin del conocimiento. Cmo sera un sistema de
gestin del conocimiento para un departamento de informtica universitaria parece?
Vamos a suponer que vamos a tener, al menos, los siguientes tipos en nuestra ontologa:
persona
publicacin
estructura de datos
sistema
algoritmo
problema
idioma
Para cada uno de estos tipos, definiremos una mesa y llamar a una fila en una de esas mesas de
un "objeto". Decir que "John McCarthy desarrolla el lenguaje de programacin Lisp", el autor
podra crear dos objetos: uno de tipo language y una de tipo person . Por qu no vincular a la

users tabla en su lugar? John McCarthy podra no ser un usuario registrado del sistema. Algunas
de las personas que va a hacer referencia a, por ejemplo, John von Neumann, estn muertos.
Cada objeto consta de un conjunto de elementos. Un elemento se almacena en una columna. Por
cada objeto en el sistema, queremos grabar los siguientes elementos:
Nombre (una breve descripcin de la cosa)
resumen (una descripcin ms larga)
quien cre este objeto
cuando se crearon
que modific por ltima vez
cuando se modificaron
que tiene el derecho de modificarlo
que tiene el derecho para poder verla
Qu se necesita la aprobacin?
ha sido aprobado?
si es as, por quin y cundo?
si es as, bajo qu seccin?
Adems de estos elementos de limpieza, vamos a definir los elementos especficos del tipo:
para la person tipo
Fecha_Nacimiento, ttulo
para el language tipo
syntax_example, garbage_collection_p (si el lenguaje tiene la asignacin de almacenamiento
automtico como Lisp o prdidas de memoria como C), strongly_typed_p, type_inferencing_p,
lexical_scoping_p, date_first_used
para la publication de tipo
esto es para almacenar referencias a libros y artculos de revistas por lo que desea todos los
campos que usted esperaba ver al hacer referencia a algo; Incluir tambin un campo abstracto
para la data structure tipo
complexity_for_insertion, complexity_for_retrieval (varchars con "O (1)", "O (N)", etc.)
para el system tipo
ejemplos de sistemas son "Multics", "Xerox Alto", "TCP / IP", "MIT Lisp Machine", "Apple
Macintosh", "Unix", "World Wide Web". Incluye campos para date_of_conception,
Fecha_Nacimiento, Organization_Name, open_source_p. No hay necesidad de incluir campos
para los nombres de los desarrolladores, ya que en vez podemos utilizar enlaces a objetos de tipo
person para representar a los desarrolladores principales o promotores.
para el problem tipo
ejemplos de problemas se "vendedor ambulante", "comer filsofos", "tipo", "consulta para su
inclusin en lista ordenada". Nos queremos elementos para el almacenamiento de las condiciones
iniciales y los criterios de solucin. En general, los objetos de tipo problem estarn vinculados a
los objetos de tipo algorithm (algoritmos que resuelvan el problema), publication (documentos que
establecen el problema) y person (personas que estuvieron involucradas en afirmar o resolver el
problema)
para el algorithm tipo
ejemplos incluyen elementos "bsqueda binaria" para pseudo_code y high_level_explanation
"ordenacin rpida" y. En general, los objetos de tipo algorithm estarn vinculados a los objetos de
tipo problem (lo que necesitan las direcciones de algoritmo), publication (documentos que
describen el algoritmo o implementaciones de la misma), y la person (personas que estuvieron
involucradas en el desarrollo del algoritmo)

Para un ejemplo de lo que es un sistema completo de esta naturaleza podra ser similar, visite
Diccionario de Algoritmos, Estructuras de datos, y Problemas de Pablo Negro en http://
www.nist.gov/dads/ .
Ejemplo Ontologa 2: Flying
Queremos un sistema que permitir a los pilotos a prestarse asistencia mutua, relacionando la
experiencia, por ejemplo, "El piloto automtico en el N123 no es de fiar", "Evite los nachos en la
cafetera del aeropuerto en Hopedale", con los comentarios anclados por el gobierno oficial de
EE.UU. informacin con respecto a los aeropuertos, pistas de aterrizaje, y radiofaros para la
navegacin.
Los tipos de objetos son:
persona
publicacin
diseo del aeroplano
avin
aeropuerto
pista
ayuda para la navegacin ("radioayuda")
restaurante
hotel
escuela de vuelo
instructor de vuelo
Adems de los elementos de limpieza definidos en el Ejemplo 1, definimos elementos especficos
del tipo:
para el airplane design tipo
Para cada tipo de avin que volaba, hay una entrada en esta tabla. Un ejemplo podra ser
"Cessna 172" o "Boeing 747". Necesitamos elementos para especificar el rendimiento como
stall_speed (lo lento que se puede ir antes de caer del cielo), approach_speech (la rapidez con
que debe ir al aproximarse a la pista a la tierra), y cruise_speed. Queremos elementos como
date_certified, manufacturer_name y manufacturer_address para describir el diseo.
para el airplane tipo
Una entrada en esta tabla es un avin especfico, es muy probable una mquina de alquiler
perteneciente a una escuela de vuelo. Queremos elementos como date_manufactured,
ifr_capable_p (legal para volar en las nubes?), Y optional_equipment.
para el airport Tipo
Queremos saber donde est el aeropuerto: lat_long; elevacin; relation_to_city (distancia y
direccin desde un pueblo llamado). Queremos saber si el aeropuerto es de slo militar, privada o
pblica. Queremos saber si el aeropuerto tiene un giratorios verdes / faro blanco y pista luces.
Queremos almacenar las frecuencias para la informacin del tiempo, ponerse en contacto con
otros pilotos (si no torres) o la torre de control (si se alzaba), y el control del trfico areo para las
autorizaciones de vuelo por instrumentos. Tenemos que grabar longitudes y condiciones de la
pista. Un aeropuerto puede tener varias pistas de aterrizaje, sin embargo, lo que dara lugar a una
relacin muchos-a-uno, por lo que modelamos pistas por separado y vincularlos a los aeropuertos.
para la runway de tipo
nmero (e.g., "09/27"), longitud, condicin. Tenga en cuenta que el nmero de pista implica la
orientacin magntica: 09 implica un rumbo de 090 o el aterrizaje magntica mirando hacia el
este; si el viento a favor de un aterrizaje en la misma franja de asfalto en la direccin contraria,
ests en 27, lo que implica un rumbo de 270 o al oeste (36 caras norte; 18 caras sur).

para la navigation aid tipo


La Administracin Federal de Aviacin de Estados Unidos mantiene una red nacional de Muy Alta
Frecuencia Omni Ranging balizas (VOR). Estos transmiten dos seales, una de las cuales es
constante en fase independientemente de cojinete de un avin a la VOR. La segunda seal vara
en fase como uno crculos un VOR. As, un receptor VOR en el avin puede comparar la fase de
las dos seales y determinar que un avin es, por ejemplo, en el radial 123 grados desde el VOR.
Si usted no tiene un receptor de sistema de posicionamiento global en su avin, te determinar su
posicin en la tabla por el trazado de radiales desde dos VOR. Para obtener una ayuda a la
navegacin, necesitamos almacenar su tipo (que podra ser un viejo faro no direccional, que
simplemente pone a cabo una emisin de estilo de radio AM), frecuencia, posicin y Morse cdigo
de identificacin (que desea escuchar a la de puntos y rayas patrn para asegurarse de que usted
est recibiendo la ayuda a la navegacin propiamente dicha).
para el restaurant tipo
menu_excerpt, hora, distance_from_airport, phone_number, url, direccin de correo electrnico,
street_address
para el hotel tipo
precio, distance_from_airport, phone_number, url, direccin de correo electrnico, street_address
Para un ejemplo de un sistema en funcionamiento a lo largo de estas lneas, visite http://
www.airnav.com/airports/ y escriba el nombre o cdigo del aeropuerto para su favorito.
Volver a su Ontologa ...
Siguiendo la estructura que has diseado en el captulo "Software Modularidad", crear un mdulo
llamado "km" (de "gestin del conocimiento") e inicie el documento de alto nivel para este mdulo
con (a) una declaracin de propsitos para el subsistema, y (b) una lista de los tipos de objetos,
elementos de limpieza compartidos entre los tipos y elementos especficos del tipo.
Para facilitar la evaluacin y la interaccin con sus compaeros de clase, se sugiere la colocacin
de las pginas de usuario en http: // yourservername / km /.
Ejercicio 2: Disear un modelo de metadatos de datos
El documento que usted escribi en el ejercicio precedente, es una buena base para el debate
entre los miembros de su equipo, el cliente, y auxiliares docentes. Sin embargo, no es legible por
mquina. En teora, nada podra estar mal con el desarrollo de un repositorio de metadatos
legibles por mquina en un archivo del sistema de archivos separados por tabuladores, para ser
editado con un editor de texto. En la prctica, sin embargo, los sistemas son ms limpios cuando
hay menos mecanismos debajo. Hasta el momento su principal fuente de persistencia ha sido el
sistema de gestin de base de datos relacional, por lo que tambin podra utilizar eso para su
repositorio de metadatos tambin. Por lo menos, la base de datos es donde un programador
nuevo en el proyecto se espera encontrar los metadatos.
He aqu un modelo de datos de ejemplo de SQL para un repositorio de metadatos:
- Sealar que este est diseado para los / RDBMS Oracle 9i 8i - tendremos una fila de esta tabla para cada tipo de
objeto - y por lo tanto para cada nueva tabla de SQL que obtiene definido; un - tipo de objeto y su nombre de la tabla de
base de datos son los mismos; - Objetos lmites Oracle esquema a 30 caracteres y por lo tanto - que limitar una
nombre_tabla 21 caracteres para que podamos - tienen cierta libertad para crear objetos de esquema cuyos nombres llevan el prefijo con un tipo de objeto - un "bonito nombre" es un sinnimo utilizado en la presentacin de pginas - a los
usuarios; la hermosura podra ser tan simple como la sustitucin - subraya con espacios o deletrear abreviaturas; - Por
ejemplo,
-- note that this is designed for the Oracle 8i/9i RDBMS
-- we'll have one row in this table for every object type

-- and thus for every new SQL table that gets defined; an
-- object type and its database table name are the same;
-- Oracle limits schema objects to 30 characters and thus
-- we limit a table_name to 21 characters so that we can
-- have some freedom to create schema objects whose names
-- are prefixed with an object type
-- a "pretty name" is a synonym used when presenting pages
-- to users; the prettiness could be as simple as replacing
-- underscores with spaces or spelling out abbreviations;
-- e.g., for an object type of "airplane_design", the pretty
-- form might be "airplane design", and pretty_plural
-- "airplane designs"
create table km_metadata_object_types (
table_name
varchar(21) primary key,
pretty_name
varchar(100) not null,
pretty_plural
varchar(100)
);
-- here is the table for elements that are unique to an object type
-- (the housekeeping elements can be defined implicitly in the source
-- code for the application generator); there will be one row in
-- the metadata table per element
create table km_metadata_elements (
metadata_id
integer primary key,
table_name
not null references km_metadata_object_types,
column_name
varchar(30) not null,
pretty_name
varchar(100) not null,
abstract_data_type
varchar(30) not null, -- ie. "text" or "shorttext" "boolean" "user"
-- this one is not null except when abstract_data_type is "user"
oracle_data_type
varchar(30), -- "varchar(4000)"
-- e.g., "not null" or "check foobar in ('christof', 'patrick')"
extra_sql
varchar(4000),
-- values are 'text', 'textarea', 'select', 'radio',
-- 'selectmultiple', 'checkbox', 'checkboxmultiple', 'selectsql'
presentation_type
varchar(100) not null,
-- e.g., for textarea, this would be "rows=6 cols=60", for select, Tcl list,
-- for selectsql, an SQL query that returns N district values
-- for email addresses mailto:
presentation_options varchar(4000),
-- pretty_name is going to be the short prompt,
-- e.g., for an update page, but we also need something
-- longer if we have to walk the user through a long form
entry_explanation
varchar(4000),
-- if they click for yet more help
help_text
varchar(4000),
-- note that this does NOT translate into a "not null" constraint in Oracle
-- if we did this, it would preclude an interface in which users create rows incrementally
mandatory_p
char(1) check (mandatory_p in ('t','f')),
-- ordering in Oracle table creation, 0 would be on top, 1 underneath, etc.
sort_key
integer,
-- ordering within a form, lower number = higher on page
form_sort_key
integer,
-- if there are N forms, starting with 0, to define this object,
-- on which does this go? (relevant for very complex objects where
-- you need more than one page to submit)
form_number
integer,
-- for full text index

include_in_ctx_index_p char(1) check (include_in_ctx_index_p in ('t','f')),


-- add forms should be prefilled with the default value
default_value
varchar(200),
check ((abstract_data_type not in ('user') and oracle_data_type is not null)
or
(abstract_data_type in ('user'))),
unique(table_name,column_name)
);

Ejercicio 3: Escribir un programa para generar declaraciones DDL


Comience una interfaz de administracin a su mdulo km, comenzando con una pgina cuyo URL
termina en "ddl-generar". Este debe ser un script que generar CREATE TABLE (lenguaje de
definicin de datos) las declaraciones de las tablas de metadatos. Usted querr tener una mirada
en el SQL antes de drsela a la RDBMS, y por lo tanto es posible que desee escribir su guin para
que simplemente se da salida a las sentencias DDL para el navegador Web con un tipo MIME text/
plain . Puede guardar esto a su sistema de archivos local como km-generated.sql y alimentar a su
cliente de SQL cuando ests satisfecho.
Adems de los elementos de limpieza que ha definido para la aplicacin, cada tabla objeto debe
tener un object_id columna. El valor de esta columna debe ser nico a travs de todas las tablas
en el mdulo km, lo que es fcil de hacer en Oracle si utiliza una nica secuencia para generar
todas las claves. Teniendo en cuenta los ID de objetos nicos de todo tipo, si tuviera que aadir un
km_object_registry mesa, usted sera capaz de publicar las direcciones URL ms limpias que
pasan alrededor nica identificaciones de objeto en lugar de ID de objeto y tipos.
Adems de las definiciones de tabla de objeto de metadatos impulsada, la secuencia de
comandos debe definir una tabla de asignacin generalizada para apoyar los vnculos entre
objetos de conocimiento. He aqu un ejemplo de Oracle-sintaxis:
create table km_object_object_map (
object_id_a
integer not null,
object_id_b
integer not null,
-- the objects are uniquely identified above but let's save ourselves
-- hassle by recording in which tables to find them
table_name_a
not null references km_metadata_object_types,
table_name_b
not null references km_metadata_object_types,
-- User-entered reason for relating two objects, e.g.
-- to distinguish between John McCarthy the developer of
-- Lisp and Gerry Sussman and Guy Steele, who added lexical scoping
-- in the Scheme dialect
map_comment
varchar(4000),
creation_user
not null references users,
creation_date
date default sysdate not null,
primary key (object_id_a, object_id_b)
);

Ntese que esta tabla permite a los usuarios asignar un objeto a cualquier otro objeto en el
sistema, independientemente del tipo.
Para simplificar, se supone que las asociaciones son bidireccionales. Supongamos que un autor
conocimiento asocia el algoritmo de codificacin Huffman (utilizado en prcticamente todos los
esquema de compresin, incluyendo JPEG) con la persona David A. Huffman (1925-1999, un
estudiante graduado del MIT en el momento de su invencin, que se present como un trmino
papel). Tambin debemos interpretar que significa que la persona David A. Huffman se asocia con
el algoritmo para la codificacin de Huffman. Esta es la razn por las columnas de
km_object_object_map tienen nombres como "object_id_a" en lugar de "from_object".

En una base de datos Oracle, la restriccin de clave primaria anterior tiene el efecto secundario de
la creacin de un ndice que hace que sea rpido para hacer la pregunta "Qu objetos estn
relacionados con objetos 17, donde Objeto 17 pasa a aparecer en la ranura A?" Para una mayor
eficiencia en la consulta "Qu objetos estn relacionados con objetos 17, donde Objeto 17 pasa
a aparecer en la ranura B?", Crear un ndice concatenado en las columnas en el orden inverso al
de la restriccin de clave primaria.
El "rboles" captulo de SQL para los empollones Web, en http://philip.greenspun.com/sql/trees , da algunos ejemplos de
ndices concatenados. Si utiliza Oracle es posible que desee leer la seccin de ndices compuestos de la Gua de
rendimiento y el manual de referencia (en lnea y en la documentacin del producto) y la seccin del manual de
referencia de SQL en "Crear ndice".

Ejercicio 4: Escribir un programa para generar un "Caiga todas las tablas" Guin
Escribir un guin en el mismo directorio admin como ddl-generate , llamados drop-tablesgenerate . Esto debera generar TABLE DROP de las tablas de metadatos. Es probable que no
obtenga su modelo de datos bien la primera vez, por lo que tambin podra estar listo para limpiar
el RDBMS y empezar de nuevo.
Alimentar el sistema de gestin de base de datos de los resultados de la creacin de modelos de
datos y scripts de limpieza hasta que deja de recibir mensajes de error.

Controles dimensionales
Cuando se muestra una larga lista de informacin en una pgina, considere agregar controles
dimensionales a la cima. Supongamos por ejemplo que usted desea ayudar a un administrador
navega entre los usuarios registrados de un sitio. Tienes la sensacin de que la comunidad de
usuarios crecer demasiado grande para la lista completa para ser til. Por lo tanto, agrega una
pgina intermedia con las siguientes opciones:
Mostrar usuarios que han registrado en los ltimos 30 das
mostrar a los usuarios de la misma rea geogrfica como yo (dueos de este sitio tiende a
dividirse por regin)
Mostrar usuarios que han contribuido ms de 5 artculos
mostrar usuarios cuyo contenido ha sido calificado por debajo de "C" (en busca de personas que
aportan una gran cantidad de porquera a la base de datos)
Una pgina bien diseada de esta forma tendr una pequea cantidad discreta al lado de cada
opcin, que muestra el nmero de usuarios que se mostrarn si se selecciona esa opcin. Una
pgina mal diseada simplemente dejar el administrador de adivinar cuanto a la cantidad de
informacin se mostrar despus de seleccionar una opcin.
Este enfoque tradicional tiene algunos inconvenientes. En primer lugar, aade un clic del ratn
antes de que el administrador puede ver los nombres de usuario. Lo ideal es que todas las
pginas de una aplicacin para mostrar la informacin y / o acciones potenciales en lugar de la
burocracia pura y la navegacin. En segundo lugar, y ms en serio, este enfoque no escala muy
bien. Cuando un administrador dice "Tengo que ver los usuarios que han registrado en los ltimos
30 das, que han contribuido con ms de 4 reseas de productos, y que he comprado al menos $
100 de cosas para que yo pueda de spam con un cupn, "otra opcin debe ser aadido a la lista.
Finalmente, la pgina de navegacin gime con opciones.
Imagnese en cambio, que el primer clic del ratn toma el administrador de una pgina que
muestra todos los usuarios que han registrado en los ltimos 30 das, de una larga lista grande.
En la parte superior son deslizantes. Cada deslizador controla una dimensin, cada uno de los
cuales puede restringir o ampliar el nmero de elementos de la lista. Estas son algunas de las
dimensiones de ejemplo para un sitio de comercio electrnico de la comunidad tales como
amazon.com:
lo reciente de la inscripcin, de hace 1 da (restrictivo) hasta el comienzo de los tiempos (suelto)

proximidad geogrfica, de mismo cdigo postal (restrictiva) para una misma ciudad al mismo
estado a cualquier parte del mundo (suelto)
las compras totales, de por lo menos $ 10.000 (restrictiva) a por lo menos $ 500 a $ 0 o ms
(suelto)
actividad de revisin, del Top 100 Crtico (restrictiva) Arriba 1000 Crtico a 0 o ms comentarios
(suelto)
la calidad del contenido, del promedio de los comentarios nominal 4,5 estrellas o mejor (restrictiva)
a cualquier medio
Si la pgina por defecto muestra demasiados nombres, el administrador ajustar un deslizador o
dos para ser ms restrictivas. Si el administrador quiere ver ms nombres, l o ella se ajustar un
control deslizante hacia el extremo suelto de esa dimensin.
Cmo implementar controles dimensionales? Lamentablemente, no hay ninguna etiqueta HTML
que va a generar un poco deslizante continuo. Puede simular un control deslizante, ofreciendo,
para cada dimensin, un conjunto de puntos discretos a lo largo de la dimensin, cada uno de los
cuales es un simple anclaje de hipervnculo de texto. Por ejemplo, para la calidad del contenido
que usted puede ser que ofrezca "4 o mejor", "3 o mejor", "2 o mejor", "todos".
Ejercicio 5: Construir las pginas de captura de conocimiento
Aqu est una lista de URLs que creemos que te quiere crear, llamado con una convencin
"sustantivo y verbo":
ndice
oponerse a crear
objeto de visualizacin
a objetos resumir
objeto-edit-elemento
link-add
un tipo navegar
Comience por crear una pgina de ndice en su /km/ directorio. Por lo menos, la pgina de ndice
debe mostrar una lista desordenada de tipos de objetos y, al lado de cada tipo, las opciones para
"navegar" o "crear". Usted no tiene ninguna informacin en la base de datos, por lo que debe crear
un script llamado object-create en primer lugar. Esta pgina ser consultar las tablas de metadatos
para construir un formulario de entrada de datos para crear un nico objeto de un tipo particular.
Cuando su tubera creacin de objetos se realiza la insercin de la fila en la base de datos, debe
redirigir el navegador del autor a una pgina donde se muestra el objeto (nombre de la secuencia
de comandos object-display , si usted no tiene una idea mejor). Es de suponer que el autor original
tiene autoridad para editar este objeto y, por tanto, esta pgina debe mostrar pequeas
hipervnculos para editar campos individuales. Todos estos enlaces puede apuntar a la URL
object-edit-element con diferentes argumentos. La pgina de visualizacin objeto tambin debe
resumir todos los objetos actualmente vinculados y tienen un hipervnculo "agregar link", cuyo
objetivo es link-add .
La pgina devuelta por link-add se ver prcticamente idntica a la pgina de ndice, es decir, una
lista de los tipos de objetos. Cada tipo de objeto puede ser un hipervnculo a una secuencia de
comandos de usos mltiples en one-type-browse . Cuando llamada con slo una table_name
argumento, esta pgina mostrar una tabla de nombres de objeto con controles dimensionales en
la parte superior. Las dimensiones deben ser "mo | todo el mundo de" y "fecha de creacin". El
usuario debe ser capaz de hacer clic en un encabezado de la tabla y ordenar por esa columna.
Cuando se llama con argumentos extra, one-type-browse pasar esos argumentos a travs de
object-summarize , un guin muy similar al object-display , pero slo muestra informacin
suficiente para que el autor pueda identificar positivamente el objeto y con la capacidad adicional

para aceptar argumentos a favor de una posible relacin, por ejemplo, table_name_a y
object_id_a .
Las zanahorias y palos; Pollo y huevo
La mayora de los trabajadores se ven recompensados por trabajo; por qu quieren sacar tiempo
al autor de conocimientos y responder a las preguntas en un sistema en lnea? La gente toma el
tiempo para hacer preguntas en los lugares donde pueden esperar respuestas. Si nadie responde,
nadie va a preguntar, lo que conduce a un problema de la gallina y el huevo.
Es importante crear un sistema de incentivos que premia a los usuarios para la exposicin de la
conducta deseada. En amazon.com, por ejemplo, los propietarios del sitio quieren los usuarios
escribir una gran cantidad de comentarios de los lectores. Al mismo tiempo, al parecer no quieren
pagar a la gente para escribir comentarios. La solucin alrededor del ao 2003 es reconocer los
contribuyentes con un "rango crtico". Si una gran cantidad de otros usuarios de Amazon han
hecho clic decir que encontraron sus opiniones tiles, puede elevarse por encima de 1.000 y un
icono de "Top 1000 Crtico" aparece junto a su nombre. Desde la pgina principal de Amazon,
vaya a "Amigos y Favoritos" (bajo "Caractersticas especiales"). Luego, debajo de "Explorar", haga
clic en "Top revisores". Observe que algunos de los 10 principales crticos han escrito ms de
5.000 comentarios, todos de forma gratuita a Amazon!
Lo que tiene sentido para recompensar en una comunidad en lnea? Podramos empezar con un
par de actividades obvias: la creacin de contenidos y la pregunta de respuesta. Cada noche,
nuestro sistema podra consultar las tablas de contenido y filas de actualizacin de usuarios de
acuerdo a la cantidad de artculos y respuestas que se haban publicado en la base de datos. Es
realmente una buena idea para recompensar a los usuarios nicamente sobre la base del
volumen? No deberamos dar ms peso al contenido que ha ayudado realmente a la gente? Por
ejemplo, supongamos que hay diez respuestas a una pregunta foro de discusin. Tiene sentido
para dar la recompensa mxima al autor de la respuesta que la persona que hace la pregunta
senta era ms valioso. Si una pregunta se puede marcar "urgente" por el autor de la pregunta,
que probablemente tiene sentido para dar mayores recompensas a las personas que responden a
preguntas urgentes que las no urgentes. Un artculo es agradable, pero un artculo que le pide a
otro usuario para decir "reutiliza esta idea en mi rea de la organizacin" es mucho ms agradable
y debe fomentarse con una mayor recompensa.
Ejercicio 6: Rena Estadsticas
En lugar de hacer una ciruga en el sistema de foros de discusin en este momento, vamos a
empezar por la adicin de un sistema de contabilidad a nuestro nuevo modelo de datos de la
gestin del conocimiento. Comience por crear una mesa para celebrar vistas de objetos. He aqu
un ejemplo:

create sequence km_object_view_id;


create table km_object_views (
object_view_id
integer primary key,
-- which user
user_id
not null references users,
-- two columns to specify which object
object_id
integer not null,
table_name varchar(21) not null,
view_time
timestamp(0) not null,
reuse_p
char(1) default 'f' check(reuse_p in ('t','f'))
);

Modificar objeto-vista-uno para que se inserte una fila en la km_object_views mesa si y slo si no
hay ya una fila de registro para este par usuario / objeto dentro de las veinticuatro horas. Usted
puede hacer esto con el siguiente procedimiento:
1.abrir una transaccin
2.bloquear la tabla
3.contar el nmero de filas coincidentes en las ltimas 24 horas
4.comparar el resultado a 0 e inserte si es necesario
5.cerrar la transaccin
Este parece ser un muy gran martillo para un problema aparentemente simple. Es posible hacer
esto en una declaracin?
Vamos a comenzar con Oracle. He aqu un ejemplo de una instruccin INSERT que slo tiene
efecto si no hay ya una fila en la tabla:
insert into km_object_views (object_view_id, user_id, object_id, table_name, view_time)
select km_object_view_id.nextval, 227, 891, 'algorithm', current_timestamp(0)
from dual
where 0 = (select count(*)
from km_object_views
where user_id = 227
and object_id = 891
and view_time > current_timestamp - interval '1' day);
La estructura de esta declaracin es "insertar en KM_OBJECT_VIEWS el resultado de la consulta
de la tabla de sistema 1-fila DUAL". No estamos tirando los datos de la tabla DUAL, solamente
incluyendo constantes en la lista SELECT. Tampoco es la clusula WHERE restringir los
resultados en base a informacin de la tabla DUAL; que est consultando KM_OBJECT_VIEWS.
Esta es una manera aparentemente perversa utilizar SQL, pero en realidad es bastante
convencional porque no hay IF declaraciones en SQL estndar.
Supongamos, sin embargo, que dos copias de este INSERT comienzan simultneamente.
Recordemos que un sistema de procesamiento de transacciones ofrece las garantas ACID:
atomicidad, coherencia, aislamiento y durabilidad. La implementacin de Oracle de aislamiento ",
los resultados de una transaccin son invisibles para otras transacciones hasta que la transaccin
se ha completado", trabaja dando a cada usuario una versin virtual de la base de datos como lo
fue cuando comenz la transaccin.
Sesin A
Enva INSERT para Oracle en el nmero de cambio de sistema ("SCN", un tiempo de pseudo
interna para Oracle) 30561. Oracle cuenta las filas en km_object_views y encuentra a 0. Oracle
inserta una fila en km_object_views al SCN 30567 (tom un tiempo para el recuento ( *) para
completar, mientras tanto otros usuarios han sido la insercin y actualiza filas de otras tablas).
Sesin B
Los envos INSERT a Oracle en el cambio de sistema nmero 30.562, una garrapata despus
Sesin A inici su operacin sino varias garrapatas antes Sesin A logra su insercin. Oracle,
ocupado con otros usuarios, no empezar a contar las filas de km_object_views hasta SCN 30568,
despus de la insercin de la Sesin A. La base de datos, sin embargo, volver 0 bloques porque
es presentar Sesin B con una vista de la base de datos como lo fue en SCN 30562, cuando se
inici la operacin. Despus de haber encontrado 0 filas en el conteo, los ingresos INSERT para
insertar una fila, creando as una entrada de registro duplicado.

Figura 15.2:

Ms: Vea la "concurrencia y consistencia de datos" captulo de Oracle9i Database Conceptos ,


uno de los libros incluidos en la documentacin de Oracle.
Ahora considere la misma consulta se ejecuta en SQL Server:
insertar en km_object_views (user_id, object_id, nombre_tabla, view_time)
seleccione 227, 891, 'algoritmo', CURRENT_TIMESTAMP
donde 0 = (select count (*)
desde km_object_views
donde user_id = 227
y object_id = 891
y datediff (hora, view_time, CURRENT_TIMESTAMP) <24)
Hay diferencias sintctico de menor importancia de la declaracin Oracle anteriormente, pero la
estructura es la misma. Una nueva fila se inserta slo si no se encuentran dentro de las filas
coincidentes ltimas veinticuatro horas.
SQL Server alcanza el mismo nivel de aislamiento como Oracle ("Read Committed"), pero de una
manera diferente. En lugar de crear versiones virtuales de la base de datos, SQL Server mantiene
bloqueos exclusivos durante las operaciones de modificacin de datos. En el ejemplo anterior,
INSERT de Sesin B no puede comenzar hasta INSERT de Sesin A ha completado. Una vez que
se permite para comenzar, Sesin B ver el resultado de la insercin de Sesin A, y por lo tanto
no va a insertar una fila duplicado.
Ms: Vea el "Entendimiento de bloqueo en SQL Server" captulo de SQL Server Books Online , la
documentacin de Microsoft SQL Server.
Cada vez que va a realizar el registro, es considerado con hacerlo en el tiempo del servidor, no el
usuario de. En muchos entornos de desarrollo Web, puede hacerlo llamando a un procedimiento
de API que se cierre la conexin TCP con el usuario, que se detiene en el icono de la esquina
superior derecha del navegador de girar / agitar. Mientras tanto el hilo (IIS, AOLserver, Apache 2) o
proceso (Apache 1.x) sigue vivo en el servidor y se puede ejecutar cualquier cdigo es necesario
para llevar a cabo el registro. Muchos servidores web permiten definir filtros que se ejecutan
despus de la entrega de una pgina para el usuario.
Ayuda con la fecha / hora de la aritmtica: ver el "fechas" captulo de SQL para los empollones
Web en http://philip.greenspun.com/sql/dates .
Ejercicio 7: Reunir Ms Estadsticas
Modificar objeto-vista-uno para agregar un botn "Me reutilic este conocimiento". Esto debera
enlazar a oponerse a precios de reutilizado , una pgina que se actualiza la reuse_p bandera de la
fila relevante ms reciente en km_object_views . La pgina debe generar un error si no se puede
encontrar una fila para actualizar.
Ejercicio 8: Explique el problema de concurrencia en el Ejercicio 7
Dada una implementacin de objeto-vista-uno que hace su registro en el tiempo del servidor,
explicar el problema de concurrencia que se plantea en el ejercicio 7 y hablar de maneras de
abordarlo.
Escriba sus soluciones a estos ejercicios no codificantes, ya sea en su documento Descripcin del
mdulo km o en un archivo llamado metadatos-ejercicios en el mismo directorio.
Ejercicio 9: Haga una afinacin poco Rendimiento
Crear un ndice en km_object_views que harn que el cdigo en Ejercicios 6 y 7 de ir rpido.

Ejercicio 10: Mostrar Estadsticas


Construir una pgina de resumen, por ejemplo, en / km / admin / estadsticas para mostrar, por
da, el nmero de objetos vistos y reutilizados. Este informe debe desglosarse por tipo de objeto y
todas las estadsticas debe ser enlaces a pginas "drill-down", donde se exponen los datos
subyacentes, por ejemplo, que los usuarios reales vieron o reutilizados conocimiento y cundo.
Ejercicio 11: Piense completa texto de indexacin
Escribe una estrategia para la adicin de los objetos creados en este sistema para el ndice de
texto completo en todo el sitio.
Ejercicio 12: Piense en unificacin con sus tablas de contenido
Escribe una estrategia para unificar sus tablas de contenido pre-existentes con el sistema que
gener en este captulo. Discuta los pros y los contras del uso de las nuevas tablas para el mdulo
de gestin del conocimiento o la ampliacin de los antiguos.
Sintase libre de editar a mano
Supongamos que una aplicacin autogenerado es ms o menos completa y funcional, pero se
puede ver un poco de espacio para la mejora. Es una prctica aceptable para sacar algo del
cdigo generado en un editor de texto y cambiar a mano? Por supuesto! El punto de usar
metadatos es abordar requisitos extremos y obtener un prototipo delante de usuarios reales lo
ms rpido posible. No se sienta como un fracaso porque no ha resuelto los cincuenta aos de
edad, problema de la investigacin de la automatizacin de la programacin por completo.
Tiempo y Movimiento
El equipo debe trabajar en conjunto con el cliente para desarrollar la ontologa. Estos debates y la
documentacin inicial deben requerir dos o tres horas. Disear el modelo de datos de metadatos
puede ser una simple operacin de copiar / pegar para los equipos de construccin con Oracle,
pero en cualquier caso no debera requerir ms de una hora. Generacin del DDL declaraciones y
mesas gota script debera tomar alrededor de dos horas de trabajo de un programador. La
construccin de las pginas del sistema, Ejercicio 5 a 10, debe requerir de ocho a doce horas de
programador. Esta parte se puede dividir hasta cierto punto, pero es probablemente la mejor
manera de limitar la programacin para dos personas que trabajan en estrecha colaboracin ya
que los ejercicios se acumulan unos sobre otros. Por ltimo, los los relatos al final deben tomar
una o dos horas total.
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Translate

From:

English

To:

Spanish

View:

Translation

Original

Anlisis de la actividad del usuario


parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet

Este captulo examina las maneras que usted puede supervisar la actividad del usuario dentro de su comunidad y cmo esa informacin se puede utilizar para personalizar la e

Paso 1: Hacer las preguntas correctas


Antes de considerar lo que es tcnicamente posible, lo mejor es comenzar con una lista de deseos de las preguntas sobre la actividad del usuario que tienen relevancia para la

Cules son las URLs que estn produciendo errores de servidor? (Respuesta conduce a la accin: fijar cdigo roto)
Cuntos usuarios solicitaron archivos inexistentes, y dnde sacaron los malos URL? (Respuesta conduce a la accin: corregir malos enlaces)
Son al menos 50 por ciento de los usuarios que visitan /foobar/ , nuestra seccin ms nueva y ms importante? (Respuesta conduce a la accin: tal vez aadir ms pun
Cmo populares son la voz y las interfaces inalmbricas para la aplicacin? (Respuesta conduce a la accin: invertir ms esfuerzo en las interfaces populares)
Qu pginas estn causando a los usuarios obtener atascado y abandonan a sus sesiones? Es decir, cules son las ltimas pginas tpicas vieron antes de que un usuari
Supongamos que operamos un sitio de comercio electrnico y de que hemos comprado anuncios en Google y www.nytimes.com. Qu posibilidades hay visitantes de e
que enva a los usuarios de alta rentabilidad)

Paso 2: Mira Lo que es fcilmente disponible

Cada programa servidor HTTP se puede configurar para registrar sus acciones. Normalmente, el servidor escribir dos registros: (1) el "registro de acceso", que contiene una
peticiones que resultaron en el programa errores. Un "archivo no encontrado" se traducir en una entrada de registro de acceso, pero no una entrada de registro de error porqu
lugar a la vez un registro de acceso y una entrada de registro de error.

A continuacin se muestra un fragmento del archivo http://philip.greenspun.com/seia/examples-user-activity-analysis/2003-03-06.log.gz , que registra de un da de actividad e


resultar en lexicogrfica sucesin de clasificacin y, por tanto, al visualizar los archivos de una lista de directorios, vers una progresin continua del ms antiguo al ms rec

193.2.79.250 - - [06 / Mar / 2003: 09: 11: 59 -0500] "GET / perros / george HTTP / 1.1" 200 0 "http://www.photo.net/" "Mozilla / 4.0 (com
193.2.79.250 - - [06 / Mar / 2003: 09: 11: 59 -0500] "GET /dogs/sky-and-philip.jpg HTTP / 1.1" 200 9596 "http://philip.greenspun.com/dogs
193.2.79.250 - - [06 / Mar / 2003: 09: 11: 59 -0500] "GET /dogs/george-28.jpg HTTP / 1.1" 200 10154 "http://philip.greenspun.com/dogs/geo
193.2.79.250 - - [06 / Mar / 2003: 09: 11: 59 -0500] "GET /dogs/nika-36.jpg HTTP / 1.1" 200 8627 "http://philip.greenspun.com/dogs/george
193.2.79.250 - - [06 / Mar / 2003: 09: 11: 59 -0500] "GET /dogs/george-nika-provoke.jpg HTTP / 1.1" 200 11949 "http://philip.greenspun.co
152.31.2.221 - - [06 / Mar / 2003: 09: 11: 59 -0500] "GET /comments/attachment/36106/bmwz81.jpg HTTP / 1.1" 200 38751 "http://philip.gree
193.2.79.250 - - [06 / Mar / 2003: 09: 12: 00 -0500] "GET /dogs/george-nika-grapple.jpg HTTP / 1.1" 200 7887 "http://philip.greenspun.com
193.2.79.250 - - [06 / Mar / 2003: 09: 12: 00 -0500] "GET /dogs/george-nika-bite.jpg HTTP / 1.1" 200 10977 "http://philip.greenspun.com/d
193.2.79.250 - - [06 / Mar / 2003: 09: 12: 00 -0500] "GET /dogs/george-29.jpg HTTP / 1.1" 200 10763 "http://philip.greenspun.com/dogs/geo
193.2.79.250 - - [06 / Mar / 2003: 09: 12: 00 -0500] "GET /dogs/philip-and-george-sm.jpg HTTP / 1.1" 200 9574 "http://philip.greenspun.co
152.31.2.221 - - [06 / Mar / 2003: 09: 12: 00 -0500] "GET /comments/attachment/44949/FriendsProjectCar.jpg HTTP / 1.1" 200 36340 "http://
193.2.79.250 - - [06 / Mar / 2003: 09: 12: 00 -0500] "GET /comments/attachment/35069/muffin.jpg HTTP / 1.1" 200 15017 "http://philip.gree
152.31.2.221 - - [06 / Mar / 2003: 09: 12: 01 -0500] "GET /comments/attachment/77819/z06.jpg HTTP / 1.1" 200 46996 "http://philip.greensp
151.199.192.112 - - [06 / Mar / 2003: 09: 12: 01 -0500] "GET /comments/attachment/137758/GT%20NSX%202.jpg HTTP / 1.1" 200 12656 "http: //
152.31.2.221 - - [06 / Mar / 2003: 09: 12: 02 -0500] "GET /comments/attachment/171519/photo_002.jpg HTTP / 1.1" 200 45618 "http://philip.
151.199.192.112 - - [06 / Mar / 2003: 09: 12: 27 -0500] "GET /comments/attachment/143336/Veil%20Side%20Skyline%20GTR2.jpg HTTP / 1.1" 200
147.102.16.28 - - [06 / Mar / 2003: 09: 12: 29 -0500] "GET /photo/pcd1253/canal-street-43.1.jpg HTTP / 1.1" 302 336 "http://philip.greens
147.102.16.28 - - [06 / Mar / 2003: 09: 12: 29 -0500] "GET /photo/pcd2388/john-harvard-statue-7.1.jpg HTTP / 1.1" 302 342 "http: //philip
147.102.16.28 - - [06 / Mar / 2003: 09: 12: 31 -0500] "GET /wtr/application-servers.html HTTP / 1.1" 200 0 "http://www.google.com/search?

La primera lnea puede ser decodificada como sigue:

Un usuario en un equipo en la direccin IP 193.2.79.250, que no nos est diciendo su nombre de inicio de sesin en ese equipo ni suministrar un nombre de inicio de se
horaria 5 horas detrs del Meridiano de Greenwich (06 / Mar / 2003: 09: 11: 59 -0500), solicit el archivo / perros / george utilizando el mtodo GET del protocolo
mal que no dio la informacin del servidor acerca de cmo se escribieron muchos bytes, de ah el 0 despus de que el cdigo de estado. Este usuario seguido un enlace
(Mozilla 4.0), pero luego explica que en realidad es simplemente compatible con Netscape y es realmente Microsoft Internet Explorer 5.0 en Windows NT
stargate.fs.uni-lj.si en lugar de la direccin IP, en cuyo caso nos habramos sido capaces de echar un vistazo a el registro y ver que se trataba de alguien en una un

Esa es una gran cantidad de informacin en una sola lnea, pero consideran que lo que falta. Si este usuario registrado previamente en y present un user_id galleta, no podem
de una lnea que muestra una solicitud exitosa para una URL "completo con opcin de compra". Sin embargo, no veremos la cantidad en dlares de esa compra, y seguramen

Paso 3: averiguar qu informacin adicional que necesita para grabar


Si el cliente no est contento con el tipo de informacin disponible en los registros estndar, hay tres alternativas bsicas:

configurar el programa servidor HTTP para agregar contenidos de cabecera de galletas en el registro de acceso estndar
aumentar su software para registrar la actividad del usuario adicional en el RDBMS y construir hoc pginas de anuncios de consulta en el rea de administracin del sit
la construccin de un almacn de datos dimensional completa de la actividad del usuario
Si todo lo que necesitas es el ID de usuario para cada solicitud, a menudo es un asunto sencillo para configurar el programa servidor HTTP, por ejemplo, Apache o Microsoft

Cuando eso no es suficiente, se puede empezar a aadir columnas a las tablas de bases de datos. En cierto sentido ya has empezado este proceso. Es probable que tenga un
mostrar un "miembro desde 2001" anotacin como parte de su perfil de usuario, que tiene ms sentido para mantenerla en el RDBMS. Si desea ofrecer a los miembros una p
cuenta que usted necesita second_to_last_login porque tan pronto como usuario # 345 vuelve al sitio de su software se actualizar last_login . Cuando l o ella hace clic
ser ms probable esperar es nuevo contenido desde el lunes anterior, su anterior perodo de sesiones con el servicio.

Supongamos que el departamento de marketing se pone en marcha campaas publicitarias en diez sitios diferentes con el objetivo de atraer nuevos miembros. Querrn un info
codificada en su servidor. Esto sentara un cookie de sesin diciendo "= fuente NYTimes" ("Yo vena de un anuncio en el sitio web del New York Times"). Si esa persona con
una pgina de administracin consultar la base de datos y la visualizacin de un histograma de la inscripcin por da, por mes, por fuente, etc.

El camino de agregar columnas a las tablas de procesamiento de transacciones y la construccin de consultas SQL ad hoc para responder a las preguntas es un largo y tortuoso
dimensional, discutido con cierto detalle en el captulo de almacenamiento de datos de SQL para los empollones Web en http://philip.greenspun.com/sql/data -warehousing
para facilitar las consultas en lugar de actualizaciones.
Los ejercicios de este captulo le guiar a travs de estas tres alternativas, cada una de las cuales tiene su lugar.

Ejercicio 1: vea cmo vive la otra mitad

La mayora de los editores web tienen presupuestos limitados y, por tanto, el acceso limitado a los programadores. En consecuencia se basan en programas de anlisis de regis
ejemplo, el programa analgico referencia al final de este captulo, y preparar un informe de toda la actividad del usuario registrado en el ltimo mes.

Una solucin aceptable para este ejercicio supondr que une el ltimo informe de las pginas de administracin del sitio para que el editor pueda visualizarla. Una mejor solu
demanda y mostrar el informe. Una solucin (agotar?) Exhaustiva consistir en un proceso programado ("trabajo cron" en la jerga Unix, "a la orden" o "tarea programada" en
informar, todos los cuales son accesibles desde las pginas de administracin del sitio.

Asegrese de que el informe muestra claramente "404 Not Found" solicitudes (cualquier analizador de registro estndar se pueden configurar para mostrar estos) y que se mu

Riesgos para la seguridad de programas en ejecucin en respuesta a una solicitud Web

Ejecutar el analizador de registro en respuesta a la peticin de un administrador suena inocente, pero cualquier sistema en el que un programa servidor HTTP puede poner en
la que el servidor Web tiene todo el poder de una sesin iniciada en la tipificacin de usuario a la lnea de comandos. Esta es una capacidad poderosa y til, pero un usuario m

En el mundo Unix la solucin ms eficaz a este reto es chroot , abreviatura de cambio de raz. Este comando cambia la raz del sistema de archivos del servidor Web, y cualq
/usr/local/bin/ no puede ser ejecutado por el servidor Web chroot porque el servidor Web no puede ni siquiera describir un archivo a menos que su camino se inicia con
programa en el directorio /usr/local/bin/ no se puede. La solucin es tomar todas las utilidades, analizadores de registro del servidor, y otros programas necesarios y move

Lamentablemente, no parece ser una de Windows equivalente a chroot , aunque hay otras maneras de bloquear un servidor web en Windows, por lo que su proceso no puede

Ejercicio 2: comedia de los errores


La ltima cosa que cualquier editor quiere es que un usuario que se enfrenta a un "Error de servidor" en respuesta a una solicitud. Por desgracia, lo ms probable es que si un
ms probable es que ningn programador est viendo el registro de errores en un momento dado.

Primero asegrese de que su servidor est configurado para registrar el mximo de informacin posible sobre cada error. Por lo menos que necesita el servidor para registrar l
de pila.

En segundo lugar, proporcionar un hiperenlace desde las pginas de administracin de todo el sitio a una pgina que muestra los ms recientes 500 lneas del registro de error

En tercer lugar, escribir un procedimiento que ejecuta peridicamente, ya sea como un proceso separado o como parte del programa de servidor de HTTP en s, y escanea el r
procedimiento les correos electrnicos a los programadores de mantenimiento del sitio. Es posible que desee comenzar con un intervalo de una hora.

Notificaciones de error en tiempo real

El sistema que gener en el ejercicio 2 garantiza que un programador se enterar de un error dentro de aproximadamente una hora. En un sitio de alto perfil que esto podra no
a un notify_the_maintainers procedimiento que enva correo electrnico. Esto podra valer la pena, incluyendo, por ejemplo, en una instalacin centralizada que permite a
administradores de sistemas, dbadmins y programadores debe ser notificado de inmediato para que puedan averiguar lo que sali mal y traer el sistema de copia de seguridad.

Supongamos que un fallo de RDBMS se combinaron con una aplicacin ingenua de notify_the_maintainers en un sitio que recibe 10 solicitudes por segundo. Supongamo
encontrar 60x60x10 = 36.000 mensajes de correo electrnico idnticas en su bandeja de entrada.

Para evitar este tipo de desastre, es probable que sea mejor tener notify_the_maintainers grabar un last_notification_sent marca de tiempo en la memoria del servidor
hiptesis razonable es que un programador, una vez alertado, visitar el servidor y empezar a buscar en los registros de error completo. As notify_the_maintainers

Ejercicio 3: Hable con su cliente

El uso de los informes de registro del servidor Web estandarizadas que obtuvo en un ejercicio anterior como punto de partida, hable con su cliente acerca de qu tipo de anlis
discusin es ms concreto y porque el pensamiento del cliente es probable que sea impulsado por mirando por encima de los informes de un analizador de registro y darse cue
Anote las preguntas que su cliente dice que son los ms importantes.

Ejercicio 4: Diseo de un Data Warehouse

Escribe un modelo de datos SQL para un almacn de datos dimensional de la actividad del usuario. Mira los ejemplos al por menor en http://philip.greenspun.com/sql/data-w

La decisin de diseo ms grande que te enfrentars durante este ejercicio es la granularidad de la tabla de hechos. Si usted est interesado en cmo los usuarios reciben de un
www.donotcall.gov , lanzada en 2003, se esperara una persona para visitar una sola vez. Por tanto, el almacn de datos de la actividad del usuario puede almacenar slo una f
muchos servicios, una granularidad intermedio de "una sesin" ser apropiado.

Con una "sesin" granularidad y dimensiones apropiadas es posible hacer preguntas tales como "Qu porcentaje de las sesiones se inici en respuesta a un anuncio en Googl
sesiones con el servicio?" (Campo ensima sesin aade a la tabla de hechos) "Comparar el valor de las compras realizadas en las sesiones por extranjeros contra los clientes

Ms
www.analog.cx - descargar el registro del servidor web analizador analgico
http://www.microsoft.com/technet/scriptcenter/tools/logparser/ - Microsoft Log Parser

http://www.microsoft.com/technet/scriptcenter/tools/logparser/ - Microsoft Log Parser


www.cygwin.com - herramientas estndar de Unix para Windows

Tiempo y Movimiento

Generando el primer informe de registro de acceso podra tardar desde unos pocos minutos a una hora dependiendo de la calidad de la herramienta de anlisis de registros.
probablemente tomar aproximadamente una hora. Disear el almacn de datos deben tomar de una a dos horas, dependiendo de la familiaridad del estudiante con el almacen
Regresar a la Tabla de contenidos
eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Ponerlo publicamente por escrito


parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet
Si yo no soy para m mismo, que es para m?
Cuando estoy por m, qu soy?
Si no es ahora, cuando?
- Hillel (circa 70 aC - 10 dC)

Si No mis document Resultados, Quien lo Har?


Si La Importancia de mi trabajo no se comunica una los demas, soy qu?
Si no lo hago Ahora, CUANDO?
- Philg
Crees Que El Mundo te Dbe Atencin? Si no es asi, porqu Piensas Que alguien va un Perderse treinta minutes navegando por la comunidad Que
construiste prrafo Encontrar las Caractersticas Ms interesantes? In any Caso, si gran parte de tu xito en la ingeniera del Sistema this Incorporado
en las Pginas de Administracin, como podria apreciarlo alguien pecado Privilegios de Administracin?
En las REVISIONES de cdigo al comienzo de Clases, estafa encontramos Frecuencia Estudiantes Que Escriben Codigo Fuente atribuciones pecado
(yo se quien lo escribio) y Pginas Web sin firma (nadie va un USAR eso). El comentario de Maimnides a la cita de Hillel nos dados Que una
persona Adquiere el hbito de Hacer el Bien o El Mal-Virtudes y vicios-MIENTRAS Jvenes hijo; los Jvenes Deben Hacer obras buenas Ahora y
No Que Esperar Hasta sean Adultos. O mar, Si no te tomas el Trabajo de Ayudar a Otros Usuarios y Programadores MIENTRAS ERES UN
estudiante universitario, no reason heno Creer Para Que Vas A desarrollar Hbitos de virtue LUEGO de la Graduacin. Una forma alternativa de
Pensar Sobre Ests: temas es la siguiente: como te sientes cuando te trabas MIENTRAS intentas USAR Una Pagina Web y ningn heno Una Manera
Clara de enviar comentarios Sobre La Misma o No Hay Manera de Obtener ayuda? Que tan divertido Puede Ser la Lectura Del Codigo Fuente De
Una Aplicacin SI no sabes quien lo escribio, porqu, oa Quin Hacerle Consultas? Continuando con el tema de talmdico del Captulo, Recuerda La
Respuesta de Hillel una Interesado gentil ONU en el Judasmo: Lo Que es odioso para t, no lo hagas a tu prjimo. ESA es la Tor completa; el resto
es comentario. V y estdialo.
Un comentario cabecera en la parte superior, de Todos los Archivos de cdigo fuente y de Una Direccin de Correo electrnico al pie de pgina Toda
Web. ESE ES UN Buen Comienzo prrafo Construir Una buena reputacin profesional. Pero no es Suficiente. Por Cada Aplicacin de computadora
Que construyes, Debes PreparAR ONU Resumen general de documento de. El Puede del Mismo Ser Una sueltas page HTML Que Contiene texto
lineal dispuesto prr leerse page por page; o mar, el tor de ninguna Necesita Seguir Ninguna clase de hiperenlace prrafo Comprender tus Logros.
Resultados de la Bsqueda Razonable Que Puedas mantener La atencin de la persona Promedio Durante cuatro o cnco Pantallas de texto e
ILUSTRACIONES. Qu se Dbe INCLUIR EN LAS ILUSTRACIONES del Resumen general? Imgenes de las Pantallas de los Navegadores Web
o Mviles Que muestren las Capacidades de la Aplicacin. Si la Aplicacin admite ONU Flujo Complejo de Trabajo, Tal Vez ONU grfico Donde s
Vean todos los estados y Transiciones.
A Continuacin se listan ALGUNOS EJEMPLOS: hechos por personalidades tu como:
CUALQUIERA de los Informes en la Galera de Proyectos de 6.171 en http://philip.greenspun.com/seia/gallery/spring2002/ y
http://philip.greenspun.com/seia/gallery/fall2003/
De Una versin anterior de Este Curso
http://philip.greenspun.com/seia/gallery/spring1999/arfdigita/
http://philip.greenspun.com/seia/gallery/spring2000/poa/
http://philip.greenspun.com/seia/gallery/fall2000/wap/ (una aplicacin WAP solamente)
http://philip.greenspun.com/seia/gallery/fall2000/eaa/
En Caso de Que Ests buscando inspiracin, Recuerda Que Si los Productos de Microsoft, Oracle, Red Hat o Sun, funcionaran simplemente o
cimplemente funcionaran, La Mitad de la Gente que vive de la industria de la Tecnologa de informacin se quedaria Trabajo pecado. Also Debes
Tener en Cuenta Que por Cada personaje Que esta leyendo this Captulo, Hay Un pobre habitante de pueblito de la ONU en la India Que esta
aprendiendoSQL y Java. El salario abultad Se Puede evaporar rapidamente. Entre marzo de 2001 y abril de 2004 se eliminaron approximately UNOS
400.000 Trabajos de Tecnologa de informacin en EEUU Muchos de Los Que codificaban Java en la oscuridad terminaron Como choferes de taxis o
recepcionistas en Walmart. La reputacin profesional personal, en contraste, Es Un Poco Ms Difcil de Construir Que gran salario un, but it tambin
Un Poco Ms Difcil de perder. Si no inviertes algo de Tiempo en Escribir (prosa, sin cdigo), Nunca tendras Ninguna reputacin Fuera de tu crculo
Inmediato de Colegas, Los Cuales tambin pueden Terminar Trabajando en McDonald Y Que seran incapaces de ayudarte un Obtener Un trabajo en
ingeniera Durante Una recesion .

Ejercicio 1
Prepara ONU Resumen general de documento de la Aplicacin prr Que tiene construdo this semestre. Ubica ESE document in /doc/overview
Dentro de tu Servidor.
Asegrate que tu audiencia Florerias Detener la lectura en CUALQUIER punto y An As Quedarse con el panorama completo. ENTONCES, Los

Asegrate que tu audiencia Florerias Detener la lectura en CUALQUIER punto y An As Quedarse con el panorama completo. ENTONCES, Los
Primeros uno o dos prrafos Deben explicar Lo Que construiste y porqu es Importante prrafo this grupo de Usuarios. This Introduccin Dbe Decir
Algo sobre la comunidad Para La Cual se construy la Aplicacin y Dbe Indicar porqu Ellos no pueden simplemente REUNIRSE todos en La
Misma habitacin al Mismo Tiempo.
Probablemente vale la pena concentraese en las Capturas de Pantalla Que ilustren las Caractersticas nicas y sorprendentes de tu application. Cosas
Como Foros de Discusin autnomos, o Pginas de bsqueda textual se pueden describir Mediante Una Lista de artculos O En Una frase, y el tor de
Se Puede Imaginar facilmente CMO hijo.
Si te das Cuenta Que ALGUNAS de las Capturas de Pantalla no muy alentadoras hijo y Que es Necesario USAR 5 6 Capturas para Contar Una
historia, CONSIDERA redisear ALGUNAS de tus Pginas! Si Tiene SENTIDO Que se Presente TODAS LAS Caractersticas y LA
INFORMACIN Ms Importantes En Una Pantalla de tu documento de Resumen general then it muy probable tambin Que SENTIDO del tenga
prrafo el usuario cotidiano del sitio desde el lugar de La Misma Manera Pueda ver todo En Una Pantalla.
Basicamente Tienes dos OPCIONES Para La Estructura del documento. Si es mas o menos obvia la Manera En que los Usuarios van un USAR EL
sericio, te las PUEDES Arreglar con la Estructura de Lista de Compras: empadronadores las Caractersticas de la Aplicacin, ilustradas con Capturas
de Pantalla. Sin embargo, en general, la Estructura Un Da en la Vida es Con Toda probability Ms atractiva y comprensible. De this Manera, te
paseas un Travs de la ONU Escenario Que Muestra CMO Diferentes Usuarios se acercan a la Aplicacin y completan SUS Tareas. Por Ejemplo, en
Un Sitio de Citica fotogrfica PUEDES Mostrar siguiente lo:
1. Schlomo Mendelssohn sube la ltima Fotografa Que Tomo un su perro (Captura de la Pgina de Subidas)
2. Winston Wu mira Una Pagina con las fotos recientemente Subidas y Elige la de Schlomo de
3. Winston Sube un comentario Sobre la foto De Schlomo, y Adjunta Una versin editada de La Misma (Captura de la page "no adjuntar un
archivo comentario tu")
4. Schlomo comprueba desde el Navegador de su Telefono Movil to see Quin ha criticado su foto
5. Winona Horowitz llama desde el Telfono de la ONU amigo y gracias a la Interfaz de VoiceXML se ENTERA Que Hay Un monton de nuevo
contenido subido en las ultimas 24 horas
6. Winona Llega un Su Casa y Mediante navegador web de la ONU visita la page de Administracin, Mediante la cual sea borra los comentarios
Duplicados y Tres comentarios Fuera de foco (Captura de Pantalla de "todo el contenido subido recientemente")
7. ...
PUEDES demostrar Todas las Caractersticas Importantes del Sitio Mediante Ests Escenarios ya la Vez Darle al lector Una idea hijo de Como AEE
Caractersticas Relevantes prr las Metas del usuario y del administrador.
Mira cmo El Ejemplo anterior Resultados de la Bsqueda til prr Mostrar las interfaces de Mviles y de VoiceXML. Todos los lectores de han
USADO este sitios web, Pero he aqu Mvil Y VoiceXML Novedosos hijo relatively.

Qu Queremos Decir con "Profesional"?


Qu SIGNIFICA "profesional"? Tiene ALGN SENTIDO en el contexto de la ingeniera del software? Las profesiones Estndar (Leyes y
medicina) requieren ONU grado de Educacin Especfico y Una Certificacin Que proviene de Otros Profesionales. Por Otro Lado, Una gran
Cantidad de Personas Que Nunca tomaron ONU Curso de ciencia de la computacin estan codificando un distra y siniestra en Java, En Este Momento
Mismo. Su Trabajo TAMPOCO ha Sido certificado por Otros Programadores. En teora, si tu incompetencia mata suficientes Pacientes, tus pares
Mdicos pueden Hacer Que No vuelvas un practice la medicina Nunca Ms. Si robas Demasiado de tus Clientes, tus pares abogados Poder Tienen
delegado por el Estado prrafo impedirte Trabajar.
Si no TENEMOS UN educacional Programa de Como Requisito, Ni Sanciones impuestas por El Estado A Quien entra al campo de Trabajo, rpido
Cul Ser Florerias el SIGNIFICADO de Ser ONU "programador profesional"? Tomemos Un poco de distancia y revisemos los grados Que se
alcanzan profesionalmente en El caso de la medicina. CONSIDERA Tres doctores:
Cirujano 1 Realiza La Misma Operacin Una y otra vez del una clnica de Beverly Hills y Hace Un monton de dinero
Cirujano 2 es Competente en TODAS LAS Operaciones Estndar, but: Adems ha developed Innovador Procedimiento ONU, y, a causa del
tiempo Dedicado a la Innovacin, Hace Menos dinero Que El Cirujano 1.
Cirujano 3 ha developed ONU Innovador Procedimiento y lo practica regularmente, Pero tambin se Hace Tiempo prr Un viaje ocasional a
Francia, China, Japn y Argentina para Ensear a Otros doctores CMO practice la Innovacin.
La Mayora de Sus Pars Mdicos van a concordar En que el Cirujano 3 es el mdico "Mas profesional" del grupo. El Cirujano 3 practica el estado del
arte, Mejora el estado del arte, y un Ensea Otros CMO Mejorar SUS Habilidades. Existe Una Manera Para Que Pueda el programador Ser
excelente A lo largo de los AEE Dimensiones?

Profesionalismo en la industria del software (circa 1985)


A Medida Que La Industria del Software Empaquetado alcanzaba su Edad madura Alrededor de 1985, la ONU era Difcil Que programador Hacer
Pudiera ONU Impacto individual. El software Tenia Que comercializarse un Travs de Medios Tradicionales, grabado En un medio fsico, envuelto
En un paquete bonito y remitido un minorista un. En Consecuencia, hacian Falta al Menos Cincuenta Personas Para Que CUALQUIER pedazo de
cdigo Llegue hasta el final usuario. Para la ONU ingeniero en software Hubiera Sido muy duro aspirar un Los Mismos Niveles de profesionalismo
Que Pone un Cirujano 3 Sobre los demas. Como podria Asegurar el ingeniero en software Que Do Innovacin Alguna Vez iba un Alcanzar al
usuario final de si sacarla por la puerta Requiere de Otras Cincuenta Personas a Las Cuales Hay Que Pagar en forma permanente? Como un
ingeniero de software de Florerias Ensear una practice la Innovacin una Otros Programadores si el cdigo fuente del software es un secreto y los
Acuerdos de Empleo de la Organizacin Para La Cual Trabaja obligan a mantener el secreto?
El programador Alrededor industrial de 1985 era empleado de la ONU Fbrica, puro y simple. Puede del Haber aspirado una Alcanzar altos standards
de artesana, but never profesionalismo.

Cuales Eran las OPCIONES programador de la ONU, ENTONCES, si la artesana demostraba Ser Una meta poco satisfactoria prr la carrera? El
Unico de escape de las Restricciones del cdigo cerrado y del secreto era la universidad. Un programador podia UniRSE una ONU laboratorio de
Investigacin del una universidad Donde Con Toda probability le permitiran Ensear a Otros Mediante publicaciones, liberaciones de cdigo fuente y
la instruccin Cara a Cara de los Estudiantes. Sin embargo, Por Estar en la universidad, Donde el equipo Requerido de Cincuenta Nunca se formara
prrafo: entregar el Producto de software al mercado, el programador abandonaba La Oportunidad de Trabajar en el estado del arte a la Vez Que
innovar y Ensear.

Profesionalismo en la industria del software (circa 2000)


Existe Cierta Evidencia Que los standards se estan desplazando. Richard Stallman y Linus Torvalds arrastran multitudes de Admiradores en Todo El
Mundo. Ests pioneros del movimiento del software de cdigo abierto Comienzan a exhibir ALGUNOS de los Elementos del Cirujano 3 de Ms
arriba:
practican el estado del arte, Escriben Programas de computadora Usados por Millones de Personas en Todo El Mundo (el conjunto de
Herramientas de Unix de GNU y el ncleo de Linux)
innovan; Stallman Desarrollo el editor de Textos Emacs (uno de los Primeros editores multiventana) y Torvalds Desarrollo Un Nuevo Mtodo
para Coordinar el Desarrollo de un Mundial level
ensean a Otros Como practice SUS Innovaciones al diseminar su Trabajo en la forma de software de cdigo abierto y Mediante la
Documentacin Escrita.
La que FACILITA internet ONU programador individuo Un programador distrbuir Puede del individuo Do Trabajo un Una gran audiencia Mediante
la facilitacin provista por la Internet, y de Este Modo se FACILITA la Prctica del estado del arte. El movimiento de cdigo abierto permite De Una
Manera sencilla Que Un programador encuentre individuo Un trabajo Donde Ser prctico Distribuir SUS CREACIONES una Otros Programadores
Que un su Vez construirn Sobre la base de la ESA.
Ahora la Tarea de Mejorar su practical Como profesional de la ingeniera de software this al Alcance del programador, Donde la definition de
profesional es smilar a la Utilizada en El caso de medicina.

La nueva definition Propuesta


Suponfgamos Que definimos el profesionalismo en la ingeniera de software con los Siguientes Objetivos:
1. ONU profesional programador ONU Selecciona Que Problema valga la pena atacar; ingenieros Somo, no hay Cientficos, y por lo del
tanto DEBEMOS Intentar Soluciones Que resuelvan Problemas Reales de los Usuarios.
2. ONU profesional programador Tiene Un dedicacin a la Experiencia delusuario final; la Mayora de las Aplicaciones de computadora
Que se Construyen en Ests Das hijo Aplicaciones de Internet escritas por equpos pequeos y por lo Tanto Es Posible Que Un programador
individuales s asegure Que los Usuarios Individuales no estan Confundidos o Frustrados (en El caso de Que El programador Est Trabajando
En Una Herramienta Que usarn Otros Programadores, la meta se definir Como dedicacin a la facilidfad de la USO por el programador del
la del que recibir con).
3. ONU programador profesional Realiza Trabajo de Alta Calidad; preservamos la dedicacin al buen diseo de Sistemas, mantenibilidad,
Documentacin y, constituye Que el orgullo del artesano.
4. ONU innova profesional programador; los Sistemas de nformacin no son son lo suficientemente buenos, los Usuarios Tienen derecho a
Sistemas Mejores y es nuestro de Trabajo Construir Mejores Sistemas.
5. ONU programador profesional Ensea Mediante el EJEMPLO; EL sourcees abiertas el unico verdadero camino Para El ingeniero de
software Profesional.
6. ONU programador profesional Ensea Mediante la Documentacin; Escribir es dificil, Pero la mejor Documentacin de siempre software
Escrita Fue Por los Programadores Que were CAPACES de Hacer El Esfuerzo extra.
7. ONU Ensea profesional programador Cara a Cara; no hay HEMOS Encontrado ONU ustituto Para La Interaccin Cara a Cara, y por la
ONU Ello profesional de Ingeniera de Software Dbe Ensear una SUS comperos de Trabajo Mediante REVISIONES de cdigo, dictar
Conferencias Donde s de la vision de conjunto un audiencias mayores, y Ayudar a Ensear en cursos Que abarquen Varias Semanas.
Se Puede Crear Una organization Donde los Programadores sean Excelentes En Cada ua de los AEE Dimensiones? En Una Vida anterior, los
Autores hicieron exactamente ESTO! Creamos ONU kit de Herramientas de cdigo abierto Construir prr Aplicaciones de Internet, o mar, algo prr
Evitar en los Clientes la agona de Hacer Que Lo tiene Hecho a lo largo del semestre (Construir Una application from cero). A Continuacin
MUESTRA SE de Como Trabajamos prr lograr v los Objetivos Antes mencionados:
1. nos comprometimos a atacar los Problemas Ms Difciles ONU prrafo Amplio Rango de Usuarios de computadoras; los Productos de
software prr hijo nichos faciles y lucrativos Pero la Mayora de los Programadores de organismos europeos de normalizacin Productos Estan
Trabajando en la Caracterstica Nmero 10.000. Nuestra Compaa ataco simultaneamente los Problemas de las Comunidades Pblicas en
lnea, el comercio electrnico B2B y B2C el, El Trabajo cooperativo Dentro De Una organization, El Trabajo cooperativo Entre Organizaciones,
Hacer funcionar Una universidad, contabilidad y gestin de personal (RRHH) Compaa Una prr de Servicios, etc. Esto! Di por Dems
espacio de una growth Nuestros Programadores.
2. nos mantuvimos livianos del Lado de los Especialistas en ventas, gerencia de cuentas, Interfaz de usuario y Experiencia de Usuarios;
ONU Equipo De Programadores ESTABA EN CONTACTO DIRECTO Con El Operador del Servicio de Internet y con Frecuencia Con Los
Usuarios Finales. Nuestros Programadores tenian la ONU el control Enorme y Responsabilidad Sobre la Experiencia de los Usuarios Finales.
3. contratamos buena gente y les pagamos bien; Slo Es Posible Construir ONU Sistema de Alta Calidad si contamos con Colegas de Alta
Calidad. A Pesar de la ONU duro Mercado de reclutamiento a los finales de 1990, nos restringimos un copntratar gente con probada Habilidad
de Producir cdigo de Calidad PARA UN tro de conjuntos de Problemas (Que originalmente se Desarrollo para el predecesor de Este Curso en
el MIT).
4. TENEMOS poco respeto por nuestro de viejo cdigo y no nos preocupamos por la COMPATIBILIDAD con Demasiados Sistemas de
sustrato; permitimos Que Nuestros Programadores construyan su reputacin profesional en la Innovacin, en Lugar de embrollarnos con el
pensamiento de si Las Nuevas Cosas van a dar Problemas a los Usuarios Anteriores (TENEMOS Contratos de Soporte para Ellos) o CMO
nos vamos a Asegurar Que El cdigo nuevo Funciona con Cada marca de RDBMS.

nos vamos a Asegurar Que El cdigo nuevo Funciona con Cada marca de RDBMS.
5. TENEMOS Una Estricta Poltica de cdigo abierto de software de; el cdigo reutilizable se Documenta y se distribuy con la esperanza
QUE SEA de Ayuda para Otros Programadores en Todo El Mundo.
6. arrastramos una las Personas una retiros de Escrib; la Mayora de los Programadores Dicen que no pueden Escribir, Pero La Experiencia
Que Muestra las Habilidades de escritura de las personalidades se MEJORAN dramticamente Mediante la Prctica. TENEMOS Una Casa en
la playa Cerca de Nuestras oficinas centrales y arrastramos a las multas de Durante personajes de semana alrgos Para Que finalicen SUS
Escritos con la ayuda de Otros Programadores Que Estaban completando SUS Propios Proyectos de escritura.
7. establecimos Nuestra Propia universidad, Realizando Tareas docentes de Prcticas en Universidades existentes y Haciendo de Mentores
en Nuestras oficinas; Un monton de Cientficos en computacin hijo renuentes a Dejar la academia Porque van a perder La Oportunidad de
Ensear. Per Nosotros Iniciamos nuestro de propio Programa de Enseanza de ao la ONU despus de bachillerato Enseando la currcula
normal, de estudiante, y nos da gusto pagarle una ONU Desarrollador Para Que Gaste mes ONU Enseando la ONU Curso Alli. Incentivamos a
Nuestros Desarrolladores Para Que sean docentes de Prcticas o de teora Voluntarios en Universidades Cerca de Nuestras oficinas. Insistimos
En que los Desarrolladores internamente revisen alto el Cdigo de los Desarrolladores junior.
Como funciono ESTO? Al adherirnos un Principios organismos europeos de normalizacin, Construimos ONU Negocio lucrativo con income
Anuales de Veinte Millones de Dlares. Como ramos ingenieros y hay gente de negocios, pensamos Que seriamos Ms astutos si entregbamos La
Compaa una Gerentes Profesionales y Firmas de Capital de Riesgo bien establecidas. En su bsqueda de mayores: beneficios, Ellos abandonaron
Nuestros Principios y en Menos de dos aos transformaron las Ganancias mensuales en Prdidas, Quemando 50 Millones de Dlares en Efectivo. La
Compaa, Que en ESE Momento ya convencional Completamente poca, se hundi.
En Resumen, CUANDO AN EL EXPERIMENTO Tuvo penoso final de un, proporcion Evidencia De que organismos europeos de normalizacin
siete Principios pueden redituar xitos y Ganancias excepcionalmente Elevados.

Ejercicio 2
Escribe tu Propia definition de profesionalismo en la ingeniera de software. Explica Como la pondras en Prctica y como vas a Construir Una
organization sustentable Que respalde ESA definition.

Definitiva Presentacin
In any Curso Que EE.UU. this libro de texto, sugerimos Que se asigne 20 minutos de Tiempo de clase Al final del Curso, Proyecto Cada prrafo, prr
Que se Haga Presentacin ONU un panel de la ONU de las Personas Independientes. Cada equipo Tiene en ESE Momento La Oportunidad de pulir
SUS Habilidades de Presentacin Frente a Una Audiencia de tomadores de Decisiones, una Diferencia de las Oportunidades Anteriores en las Cuales
la Audiencia ESTABA Formada Por Sus Pars Tcnicos Que ya habian atendido las Presentaciones en clase Anteriores.
Los Jvenes ingenieros NECESITAN practical prrafo sable Convencer a la gente con dinero una cola Escriba los comprueba Que van a proveer v
Fondos prrafo Do Trabajo. En Consecuencia, Los Mejores panelistas hijo las Personas Que En sus Vidas Cotidianas ESCUCHAN las Propuestas de
los Tcnicos Y deciden si va a ESCRIBIR OEN cheques. ALGUNOS EJEMPLOS de cuentos Personas Ser pueden Los Ejecutivos en Grandes
Compaas y los capitalistas de Riesgo.
Sugerimos el siguiente Esquema prr Cada Presentacin:
1. charla de ascensor, Una Explicacin de 30 Segundos Sobre rpido Cul Problema se resolvi y el porqu de El Sistema es Mejor Que los
Mecanismos existentes Disponibles Para La Gente
2. demostracin del Sistema completo (ver el Captulo de Gestin de contenidos Donde Hay ALGUNAS Pistas Sobre Como hacer
demostraciones interesantes de Aplicaciones multiusuario) (5 minutes; Aclara si El Sistema se lanzo al pblico o no)
3. Una diapositiva Que muestre la arquitectura del Sistema y Componentes Cuales se usaron prrafo Construir El Sistema (1 minuto)
4. Discusin de los Desafos Ms Difciles Que se encontraron Durante El Proyecto Y Como se atacaron (2 Minutos, Posiblemente con
Diapositivas ADICIONALES)
5. Paseo por la Documentacin (2 minutes) - lo Que Quieres es Convencer a la Audiencia Que Hay Suficiente prr el mantenimiento de un largo
Plazo
6. El Futuro (1 minuto) - Cuales hijo los Siguientes hitos? Quin Quedara un cargamento del trabajo?
Tiempo Total: 12 Minutos Mximo.
Debes advertir la del que question tcnica this al final. A nadie le importa la Tecnologa Hasta Que no ven rpido Cul Es El Problema Que se ha
Resuelto.

Lecciones aprendidas en el MIT


Al OBSERVAR la Interaccin Entre Nuestros Estudiantes y panelistas en el MIT, Emergen consistentemente Ciertos Temas.
Los panelistas aman la Documentacin. Todos han visto monos codificadores (monos de cdigo) y todos han visto Programas FUNCIONANDO.
Muy Pocas Veces En sus vidas han visto Documentacin clara y completa. HEMOS visto saltarles Las Lgrimas de un Ejecutivos de alto nivel de
Microsoft Corporation al mirar la Documentacin de la ONU mdulo de Foro de Discusin. El para en s Mismo Gener rostros del tipo ya lo v los
antes, Pero Los Ejecutivos se reanimaron CUANDO Vieron Que Un documento contenia Una vista de un vielo de pjaro de tres prrafos, el modelo
de Datos SQL, diagrama de la ONU del Flujo de pginas, La Lista de Todos los guiones, ALGUNOS EJEMPLOS de Consultas SQL, y La Lista de
Todas las Funciones auxiliares.
Los panelistas NECESITAN Que se les Yes S busque from El Principio rpido Cul es Razn prrafo fundamental la application. Si no se Hace asi,
la Demostracin es aburrida. Practica Los Primeros Minutos Delante de las Personas Que Nunca Hayan visto tu Proyecto, y pregntales LUEGO
rpido Cul es el Problema Que resolviste y porqu.
A los tomadores de Decisiones Que: Adems hijo buenos tecnlogos les gusta cuntificar la escala del Desafo. El jefe de Sistemas (CEO: director de

A los tomadores de Decisiones Que: Adems hijo buenos tecnlogos les gusta cuntificar la escala del Desafo. El jefe de Sistemas (CEO: director de
informacin) De Una versin grande queria sable Cuantas horas se utilizaron en el Desarrollo de la Aplicacin Que viendo estab, Cuantas Y tablas
Tenia el modelo de Datos. En su Propia carrera ESTABA Ms all del punto de Tener que Escribir el SQL, but Sabia Que Cada tabla adicional
implicaciones tipicamente adicional Coste para el Desarrollo y el mantenimiento prr.
Es Importante Que diferncies a tu Aplicacin del software de Empaquetado y Otros Sistemas Que los panelistas Tienen la expectativa de enajenante
facilmente. EJEMPLO Por, no te Pases Cinco Minutos Mostrando CMO Funciona El Foro de Discusin. Todos los panelistas ya han visto Foros.
Muestra Una Pagina del foro, indica Que se Trata de foro de la ONU, Que Hay Varios Niveles de moderacin y privacidad, y LUEGO pasa una Algo
que mar nico y propio de tu sitio. Al final de Presentacin de una, uno de los panelistas DIJO: Todo lo me Que tiene Mostrado Ya Viene Dentro de
Microsoft Sharepoint. Un inversor de Riesgo en el panel de Expreso Que: Si En algn Momento Durante la Presentacin, indica Alguien que Hay
Un Producto Que Resuelve de Microsoft El Mismo Problema, La Reunin se Terminales.
Al Mismo Tiempo, un Menos Que Hayas Sido Totalmente innovativo, PUEDES Encontrar Un Buen Comienzo si enmarcas tus Logros en Trminos
de algo ya familiar a la audiencia, por EJEMPLO, Yahoo! Grupos o kits de construccin de Comunidades en lnea y LUEGO PUEDES Hablar de lo
Que T tiene made diferente. No Quieres Que la persona que toma las Decisiones de Piense: ya Hey, me parece Que l visto ESTO los antes en
Microsoft Sharepoint Y Que Quede Sin ESE pensamiento atenderse en su cabeza TODO EL TIEMPO de la Presentacin.
Los tomadores de Decisiones con Frecuencia Vienen acompaados de Sus ingenieros Presentaciones superiores a estas, los AEE Y Personas pueden
quedar atrapadas En sus historias Personales. SUPON Que Jos Panelista Elige Construir su ltimo Proyecto me diante la Generacin de XML de
base Una from de Datos y LUEGO la conversin de un HTML Mediante ALGN middleware costoso y en boga en la industria Ms XSLT, el MAS
Un Monton Beans de Java y Enterprise Java. Este Enfoque probablemente consumir 100 pginas Veces Ms Recursos del Servidor Que USAR
bsico en Active Server de Microsoft Visual o script en Perl ONU de 1993, Pero Se Puede argumenta Que es mas claro y Ms moderno. LUEGO De
Una Presentacin de 12 Minutos, ninguno de los expectadores Florerias aprendido Haber lo Suficiente Como prr Decir si el Proyecto se podria
Haber beneficiado con el Enfoque XML / XSLT, but Ah Viene El Con su Desafo. PUEDES tratarlo de cabeza de alcornoque Porque No lo SABE
Suficiente de tu cliente y de las Metas originales, por EJEMPLO, sin Tener que comprar Una granja de 100 Servidores prrafo Manejar Una Pequea
comunidad. PUEDES demostrar Que Es Un cabeza de alcornoque al indicarle Aplicaciones Enormes y exitosas Que utilizan Una arquitectura
parecida a la de Que escogiste. Ahora bien, Como ingeniero joven, probablemente no sean Ests Los Mejores Modos de TRATAR con el criticismo
injusto o incorrecto Que Viene de la ONU ingeniero senior en Una reunin, especielmente si ESA persona FUE traida Por un tomador de Decisiones.
Es Mucho Mejor si lo adulas pidindole Una Reunin de 30 Minutos en la cual sea Puedas discutor con Propiedad el asunto f. LUEGO PUEDES
USAR organismos europeos de normalizacin 30 minutes prrafo mostrarle porqu diseas As Las cosas inicalmente. PUEDES Convencer al
ingeniero con alto tu Explicacin. En El Peor de los Casos, al Menos no terminaas argumentando frente al que toma las Decisiones, o sonando
arrogante o Demasiado Seguro.

Consejos Para Los panelistas


Imagina Que Cada estudiante del Equipo FUE contratado por su predecesor. Ests Tratando de entendre Qu hicieron, si vas a dar los Fondos para la
siguiente versin, y, en ESE Caso, si este es el equipo ADECUADO prrafo Construir y Lanzar ESA nueva versin.
A Medida del la del que avanza Presentacin, puntajes ESCRIBE Numricos (1-10) prr evaluar v Qu tan bien el equipo se ha portado con
RESPECTO un siguiente lo:
Este equipo ha Comunicado claramente rpido Cul es Resuelto el Problema Que han.
La demostracin me proporcion Una buena impresin de Como Funciona El Sistema.
Este equipo ha Realizado Un trabajo Impresionante al atacar los Desafos de Ingeniera.
Este equipo ha documentado su Sistema de maera clara y completa.
Realmente, me gustaria Contratar Estas personalidades organization para mi Propia.
Al final de de la Presentacin de 12 Minutos del equipo, dgales Qu es Lo Que pudieron Haber Hecho mejor.
No se prive de interrumpir con preguntas Cortas Durante la Presentacin del equipo. Si la Presentacin Fuera de uno de Sus Subordinados o De Una
Compaa nueva Que Pide del Fondos, y Usted los interrumpira, ENTONCES interrumpa a Nuestros Estudiantes.

Palabras Finales
Trabaja en algo Que Lo mar suficientemente excitante Como Para Que trabajes las 24 horas del da, los 7 dias de la semana. Hazte ONU experto en
modelado de Datos y en Flujo de pginas. Construye ALGUNOS este sitios Excelentes para t Mismo y Enlaza SUS Documentos de Resumen from
general de tu curriculum vitae - s Capaz de Decir: Yo constru X o Susan y yo Construimos X, en Lugar de Yo contru Una parte de X, poca
CUANDO Miembro de la ONU Enorme equipo .

Ms
Galera de Proyectos 6,171, Verano del 2002 en http://philip.greenspun.com/seia/gallery/spring2002/
Galera de Proyectos 6.171, otoo del 2003 en http://philip.greenspun.com/seia/gallery/fall2003/

Tiempo y movimiento
La escritura definitiva Dbe tomarte Entre cuatro y Seis horas y Tal Vez Se Puede dividir Entre los Miembros del qeuipo. Una divisin del trabajo
Efectiva Puede Ser: Tcnico de Capturas de Pantalla, escritor y corrector. Pensar y Escribir Una Definicin de profesionalista te puede Tomar Entre
Una y dos horas. La Presentacin va Ms Rpido si el equipo mantuvo Actualizada la Documentacin, Pero No deberia Tomar Ms De Unas Pocas
horas en su Preparacin, Una Hora Ms prr practice Unas Cuantas Veces.
Regresar a la Tabla de contenidos

eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

HTML
un captulo de referencia en Ingeniera del software para aplicaciones en internet; revisado en mayo 2003
Hypertext Markup Language, or HTML, is the language used to specify how a browser should display a Web page. HTML is a markup
language, as opposed to a programming language, meaning that it contains codes that say how a page should be formatted, but does not
contain procedural code.
Let's take a look at a simple example:
Code Example

Typical Rendering

<p>
Don't look at your instruments and adjust
the flight controls to, for example,
keep the altimeter steady. The instruments
have a tendency to <b>lag behind reality</b>
and therefore you're overcorrecting and
oscillating.
</p>

Don't look at your instruments and adjust the flight controls to,
for example, keep the altimeter steady. The instruments have a
tendency to lag behind reality and therefore you're
overcorrecting and oscillating.

HTML consists of tags, such as <p>, interspersed with plain text. The <p> tag begins a paragraph; </p> ends the paragraph. Similarly, <b>
starts text emboldening and </b> ends it.

Basics
In HTML, almost every opening tag has a closing tag, as in the example above. There are a few exceptions, which we will encounter
shortly, but the overwhelming majority of tags must be closed.
Some tags have attributes, such as the face attribute of the <font> tag. Example:
<font face=arial>

If an attribute value contains a space, it is necessary to enclose it in quotation marks:


<font face="arial narrow">

Logical Markup
HTML has two kinds of markup: logical markup and physical markup. Physical markup, such as the bold (<b>) tag specifies how the
browser is supposed to render text. In contrast, logical markup, or semantic tags, specifies something about the meaning of what is being
marked up; the browser is free to choose a rendering that is sensible for the user's hardware, e.g., italics might be a good choice on a
desktop PC, but reverse video might work better on a low-resolution mobile phone.
Here are a few examples of semantic tags:
Tag
Emphasis
<em>

Strong
<strong>

Code
<code>

Headline
Level 1

Code Example

Typical Rendering

You can fly all day <em>in mid-air</em>


without using the airplane's rudder.

You can fly all day in mid-air without using the


airplane's rudder.

On short final, press relatively hard


on <strong>both</strong> rudder pedals.

On short final, press relatively hard on both rudder


pedals.

Alaska and Hawaii's airports are


identified starting with a
<code>PA</code> for "Pacific".

<h1>Flight Plan</h1>

<h1>

Headline
Level 2
<h2>

<h2>Flight Plan</h2>

Alaska and Hawaii's airports are identified starting with


a PA for "Pacific".

Flight Plan
Flight Plan

Headline
Level 3

Flight Plan

<h3>Flight Plan</h3>

<h3>

Headline
Level 4

<h4>Flight Plan</h4>

Flight Plan

<h4>

Headline
Level 5

<h5>Flight Plan</h5>

Flight Plan

<h5>

Headline
Level 6

<h6>Flight Plan</h6>

Flight Plan

<h6>

Physical Markup
Here are some common physical markup tags and attributes:
Tag

Code Example
Bold
<b>

Italics
<i>

Underline
<u>

Use the flight controls


to keep the nose of the airplane
at <b>a constant attitude</b>
relative to the horizon.

Have you read <i>Stick and


Rudder</i>?

Flying in the clouds on a summer


afternoon, you run the risk of
entering an <u>embedded
thunderstorm</u>.

Typical Rendering
Use the flight controls to keep the nose of the airplane at a
constant attitude relative to the horizon.

Have you read Stick and Rudder?

Flying in the clouds on a summer afternoon, you run the risk of


entering an embedded thunderstorm.

Note: Generally it's best to avoid the <u> tag; underlining should be reserved for hyperlinks.

Superscript
<sup>

Subscript
<sub>

Font Size
<font
size=...>

Font Color
<font
color=...>

Avogadro's number is
approximately equal to 6.022
x 10<sup>23</sup>

log<sub>e</sub>x

I want a <font size=+2>huge


</font> house, a
<font size=+1>big</font>
dog, and a <font size=-1>
small</font> waist.

An airplane's navigation lights


are <font color=green>green</font>
on the right wing and
<font color="#ff0000">red</font>
on the left.

Avogadro's number is approximately equal to 6.022 x 1023

logex
I want a huge house, a big dog, and a small waist.

An airplane's navigation lights are green on the right wing and


red on the left.

Note: A table of colors and their hexadecimal equivalents is available from http://falco.elte.hu/COMP/HTML/colors.html

Font Face
<font
face=...>

Typewriter
Text
<tt>

The <font face="arial narrow,


arial, helvetica">NASA Aviation
Safety Program</font> is the only
source of innovation.

The terminal forecast called


for winds <tt>02015G25KT</tt>,
which means from the northeast at
15 knots, gusting to 25 knots.

Preformatted Winds aloft for Buffalo, Boston,

The NASA Aviation Safety Program is the only source of


innovation.

The terminal forecast called for winds 02015G25KT, which


means from the northeast at 15 knots, gusting to 25 knots.

Winds aloft for Buffalo, Boston, and Nantucket, at 3000, 6000,

Text
<pre>

Blockquote
<blockquote>

and Nantucket, at 3000, 6000, and


9000':
<pre>
3000
6000
9000
BUF 0517 0215+01 3306-01
BOS 2218 2325+08 2321+03
ACK 2118 2012+08 1917+03
</pre>

Aviation safety quote:


<blockquote>
All life is the management of
risk, not its elimination.
<br>
&mdash; Walter Wriston,
former Chairman of Citibank
</blockquote>

and 9000':
3000
6000
9000
BUF 0517 0215+01 3306-01
BOS 2218 2325+08 2321+03
ACK 2118 2012+08 1917+03

Aviation safety quote:


All life is the management of risk, not its
elimination.
Walter Wriston, former Chairman of Citibank

It's generally considered more tasteful to use logical markup instead of physical markup. It has become especially important now that
there is such a wide variety of devices on which to browse Web sites, e.g., mobile phones and handheld devices. A phone might ignore
<font size> tags, but it will probably try to make headlines (<h1>) stand out.

Hyperlinks
Hyperlinks, often just called links, allow the user to jump to a new page or a new location within the same page. Hyperlinks are generally
represented by blue, underlined text. Although it is possible to change how hyperlinks appear to the user, we recommended against it;
users expect a consistent user interface for Web pages.
An absolute link is a hyperlink that specifies the full URL of the destination. Example:
<a href="http://aviationweather.gov/">aviationweather.gov</a>

Relative links are hyperlinks to documents in relation to the location of the current document. You do not need to specify the server name
in the URL. Example:
<a href="glossary">Glossary</a>

embedded in a file in the directory /seia/ will take a user to the glossary file in the same directory. If you're reading this book online,
try it out right here: Glossary.
You can make a Web page open up in a new browser window by specifying a target window:
<a href="glossary" target="glossary_window">Glossary</a>

If there is no browser window named glossary_window, a new window will pop up. However, you should use this feature sparingly
because the appearance of new windows can be confusing to users. Furthermore, a number of users have pop-up ad blockers installed;
these ad blockers will also prevent legitimate windows from popping up. If you're reading this book online, try it out right here: Glossary.
You can also link to specific locations within a document so that your user doesn't have to scroll down to find a particular item on the
page. To accomplish this, first you have to mark the location in the document to which you need to link. For example,
<a name="DNS">DNS</a>

Then you can link to that location within the file with:
see the <a href="glossary#DNS">glossary entry for DNS</a>

If you're reading this book online, try it out right here: see the glossary entry for DNS. Note that if you want to link to another location
within the same file you can omit the file name, e.g., <a href="#DNS">DNS</a>.
You will often see a question mark followed by form variables at the end of a URL; this is called the query string. For example,
<a href="http://groups.google.com/groups?hl=fr&group=rec.aviation.student">rec.aviation.student newsgroup</a>

The variables in this query string are hl (headline language?) and group. Most Web programming APIs provide convenient facilities for
reading the values of query string variables. If you're reading this online, try out the link above with its French-language headers.

Breaks
All whitespace is treated equally in HTML, meaning that spaces, tabs, and linebreaks are all rendered as single spaces. To force a
newline to occur, you need to use a tag.
Here are some common breaks:

Tag
Paragraph
<p>

Line Break
<br>

Horizontal Rule
<hr>

Code Example

Typical Rendering

<p>
"I'll be seeing you,"
he said.
</p>
<p>
Then he walked away.
</p>

"I'll be seeing you," he said.


Then he walked away.

Carson's Plumbing
123 Main St.
Seattle, WA 98101

Carson's Plumbing<br>
123 Main St.<br>
Seattle, WA 98101

And they lived happily ever after.

And they lived happily


ever after.
<hr>
The End

The End

Notice that <br> and <hr> have no closing tags. Additionally, the </p> tag is optional; the browser assumes that, when it encounters a
new <p> tag, the old paragraph has ended.

Lists
The most common types of lists are ordered lists, in which the browser places a number before each list item, and unordered lists, which
appear as a series of bulleted items. You can also create definition lists, useful for online dictionaries or glossaries.
Tag

Code Example

Ordered List
<ol>

Alaska summer survival gear:


<ol>
<li>rations for each occupant
<li>one axe or hatchet
<li>one first aid kit
</ol>
Common training airplanes:
<ol type=A>
<li>Cessna 172
<li>Diamond DA20
<li>Piper Tomahawk
</ol>
Class B VFR Weather Minimums:
<ol type=i>
<li>3 statute miles visibility
<li>clear of clouds
</ol>

Unordered
List
<ul>

Definition
List
<dl>

Images

Checklist for Mexican Flying:


<ul>
<li>proof of airplane ownership
<li>proof of liability insurance
<li>pilot's license and medical
<li>seldom asked-for documents:
<ul>
<li>radio station license
<li>radio operator's license
</ul>
<li>border-crossing flight plan
</ul>

<dl>
<dt>IFR
<dd>Instrument Flight Rules
<dt>VFR
<dd>Visual Flight Rules
<dt>VOR
<dd>Very High Frequency Omni Ranging
radio navigation beacon
</dl>

Typical Rendering
Alaska summer survival gear:
1. rations for each occupant
2. one axe or hatchet
3. one first aid kit
Common training airplanes:
A. Cessna 172
B. Diamond DA20
C. Piper Tomahawk
Class B VFR Weather Minimums:
i. 3 statute miles visibility
ii. clear of clouds
Checklist for Mexican Flying:
proof of airplane ownership
proof of liability insurance
pilot's license and medical
seldom asked-for documents:
radio station license
radio operator's license
border-crossing flight plan

IFR
Instrument Flight Rules
VFR
Visual Flight Rules
VOR
Very High Frequency Omni Ranging radio navigation
beacon

Images are stored as separate files, not part of the HTML page. An image can be included in a page as follows:
<img src="http://www.eveandersson.com/alex.jpg">

This tag instructs the user's browser to make a new request, possibly to a different server than the one from which the HTML document
was obtained, for the image.
There are many optional attributes for images. The most important are the width and height attributes; by telling the browser the size of
the image, it can render the entire Web page, leaving space for the image, before it has downloaded the image file itself.

Attribute

Code Example
Dimensions

width/ height

Border

Typical Rendering

<img width=100 height=100


src="http://www.eveandersson.com/alex.jpg">

<img width=100 height=100 border=2


src="http://www.eveandersson.com/alex.jpg">

border

Alignment

<img align=right
width=100 height=100
src="http://www.eveandersson.com/alex.jpg">
Canine-American

align

Alignment

Canine-American

<img align=left
width=100 height=100
src="http://www.eveandersson.com/alex.jpg">
Canine-American

align

Horizontal Space (on both


sides)
hspace

<img hspace=10
align=left width=100 height=100
src="http://www.eveandersson.com/alex.jpg">
Canine-American

Canine-American

CanineAmerican

Vertical Space (top and bottom) <img vspace=10


vspace

width=100 height=100
src="http://www.eveandersson.com/alex.jpg">

Tables
Here are the tags used when creating HTML tables:
<table>, </table>

start and end a table

<tr>, </tr>
<td>, </td>

table row
table cell

<th>, </th>

table heading; like a table cell except that the text is bold and centered

Many of these tags can have attributes, e.g. to specify alignment, borders, cell spacing and padding, and background colors. Examples:
Code Example
<table border=2
cellspacing=5
cellpadding=5>
<tr>
<th>Year</th>
<th>Revenue</th>

Typical Rendering
Year

Revenue

Expenditures

Profits

1999

$58,295

$73,688

$(15,393)

2000

$902,995

$145,400

$757,595

<th>Expenditures</th>
<th>Profits</th>
</tr>
<tr>
<td>1999</td>
<td>$58,295</td>
<td>$73,688</td>
<td>$(15,393)</td>
</tr>
<tr>
<td>2000</td>
<td>$902,995</td>
<td>$145,400</td>
<td>$757,595</td>
</tr>
</table>

<!-- reduce
cellspacing
right-align
text in the

the
and
the
cells -->

Year Revenue Expenditures


1999

$58,295

$73,688 $(15,393)

<table border=2
cellspacing=2
cellpadding=5>
<tr>
<th>Year</th>
<th>Revenue</th>
<th>Expenditures</th>
<th>Profits</th>
</tr>
<tr>
<td>1999</td>
<td align=right>
$58,295</td>
<td align=right>
$73,688</td>
<td align=right>
$(15,393)</td>
</tr>
<tr>
<td>2000</td>
<td align=right>
$902,995</td>
<td align=right>
$145,400</td>
<td align=right>
$757,595</td>
</tr>
</table>

2000 $902,995

<!-- remove the


border -->

Year Revenue Expenditures

<table border=0
cellspacing=2
cellpadding=5>
<tr>
<th>Year</th>
<th>Revenue</th>
<th>Expenditures</th>
<th>Profits</th>
</tr>
<tr>
<td>1999</td>
<td>$58,295</td>
<td>$73,688</td>
<td>$(15,393)</td>
</tr>
<tr>
<td>2000</td>
<td>$902,995</td>
<td>$145,400</td>
<td>$757,595</td>
</tr>
</table>

<!-- shade every


other row -->
<table border=0
cellspacing=2
cellpadding=5>
<tr bgcolor="#cecece">
<th>Year</th>
<th>Revenue</th>
<th>Expenditures</th>
<th>Profits</th>

1999 $58,295

$145,400

$73,688

2000 $902,995 $145,400

Year Revenue Expenditures


1999 $58,295

Profits

$73,688

2000 $902,995 $145,400

$757,595

Profits
$(15,393)
$757,595

Profits
$(15,393)
$757,595

</tr>
<tr bgcolor=white>
<td>1999</td>
<td>$58,295</td>
<td>$73,688</td>
<td>$(15,393)</td>
</tr>
<tr bgcolor="#cecece">
<td>2000</td>
<td>$902,995</td>
<td>$145,400</td>
<td>$757,595</td>
</tr>
</table>

Forms
To collect data from users, use the form tag:
<form method=POST action=/register/new>

The action is the URL to which the form is submitted, which may correspond to a computer program in the server file system, e.g., a
Java Server Page, a PHP or Perl script, etc.
The form's method can be either GET or POST. The only difference is that, with method=GET, the variables that the user submits are
presented in the query string of the following page's URL. This is useful if you want the user to be able to bookmark the resulting page.
However, if the user is expected to enter long strings of data, method=POST is more appropriate because some old browsers only handle
query strings containing fewer than 256 characters (newer browsers can handle a few thousand). Note further that if you use the GET
method, the form variable values will appear in the server access log and could create a security or privacy risk.

Code Example
<form method=POST action=/survey/demographic>
<input type=hidden name=user_id value=2205>
Age: <input type=text size=2><br>
Sex: <input type=radio name=sex value=m>male
<input type=radio name=sex value=f>female<br>
What are you interested in (check all that apply)?
<input type=checkbox name=interest value="aerobatics">Aerobatics
<input type=checkbox name=interest value="helicopters">Helicopters
<input type=checkbox name=interest value="IFR">IFR
<input type=checkbox name=interest value="seaplanes">Seaplanes
<br>
Where do you live?
<select name=continent_live>
<option value=north_america>North America
<option value=south_america>South America
<option value=africa>Africa
<option value=europe>Europe
<option value=asia>Asia
<option value=australia>Australia
</select>
<br>
Which continents have you visited?<br>
<select multiple size=3 name=continent_visited>
<option value=north_america>North America
<option value=south_america>South America
<option value=africa>Africa
<option value=europe>Europe
<option value=asia>Asia
<option value=australia>Australia
</select>
<br>
Describe your favorite airplane trip:<br>
<textarea name=favorite_trip_story rows=5 cols=50></textarea>
<p>
<input type=submit value="Continue">
</form>

Typical Rendering
Age:
Sex: male female
What are you interested in (check all that apply)?
Where do you live? North America
Which continents have you visited?

Aerobatics

Helicopters

IFR

Seaplanes

0 tems

Describe your favorite airplane trip:

Continue

Special Characters
A wide variety of non-alphanumeric characters can be specified in HTML. Here is a small sampling:
Entity

Code Example
n, tilde
&ntilde;

e, acute accent
&eacute;

inverted question mark


&iquest;

non-breaking space
&nbsp;

greater-than
&gt;

less-than
&lt;

copyright
&copy;

pound sterling
&pound;

pi&ntilde;ata

caf&eacute;

&iquest;Qu&eacute; pasa?

a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b

4 &gt; 3

5 &lt; 6

&copy; 2004

&pound;50

Typical Rendering
piata
caf
Qu pasa?
a

4>3
5<6
2004
50

A more complete special character reference can be found at http://webmonkey.wired.com/webmonkey/reference/special_characters/.

HTML Document Structure


Up to this point, we have looked at individual tags within an HTML document. But what is the overall structure of an HTML document?
HTML documents are broken into two main sections: the head and the body. The head contains information pertaining to the entire
document (most importantly, the document's title). The body contains the content of the page that appears within the browser window.
Here is a basic HTML document:
<html>
<head>
<title>This is the Title</title>
</head>
<body>
... This is the content of the page. ...
</body>
</html>

News pages often include instructions that the browser refetch the page. Here's a tag, located in the head, from news.google.com:
<meta

HTTP-EQUIV="refresh" CONTENT="900">

If you load this page into a browser and step back from the computer, you should notice it updating itself every 900 seconds (15
minutes).
Also within the head, you can specify keywords and a description of the page. These tags were originally intended to help search engines
index pages, but now they are often ignored due to abuse such as page authors using incorrect keywords to get more hits.
<META NAME="description" CONTENT="An owner's review of the Diamond Star DA40">
<META NAME="keywords" CONTENT="Diamond Star DA40 review Cirrus SR20 SR22">

You can modify properties of the Web page by using <body> tag attributes. For example:
<body bgcolor=white text=black link=blue vlink=purple alink=red>

However, you should use this sparingly; users are accustomed to the standard text colors and may become frustrated if they can't tell
what's a link and what isn't.

Cascading Style Sheets


Ever since the development of the Web there has been a tension between people who focus on content and those who are more interested
in presentation. The content people want to get relevant information on every page, possibly marking up a phrase with the H3 tag to say
"this is a headline". The presentation folks say things like "move this two pixels to the right", "stick this in 18-point Helvetica Bold and
make it red", and "stick this in 14-point Times Italic". They use tricks such as blank images for spacing and tags such as font and color.
Here are some of the problems with filling up site content and scripts with tags like font and color:
Older browsers will ignore them; the latest and greatest tags tend to have been introduced with the latest and greatest browsers; H3
and EM, however, are understood by browsers going back to the early 1990s.
Newer browsers will ignore them; mobile phones, palmtops, and hiptops often have very basic browsers that understand only the
basic tags.
When your service hires a new graphic designer, the programmers will have to edit 10,000 HTML documents and thousands of
scripts.
A site-wide cascading style sheet addresses all of these issues. Here's part of the cascading style sheet for the online version of this book
(http://philip.greenspun.com/seia/style-sheet.css):
body {margin-left: 10% ; margin-right: 10%}
P { margin-top: 0.3em;

text-indent : 2em }

P.stb { margin-top: 12pt }


P.mtb { margin-top: 24pt; text-indent : 0in}
P.ltb { margin-top: 36pt; text-indent : 0in}
p.marginnote { background: #E0E0E0;
text-indent: 0in ; padding-left: 5%; padding-right: 5%; padding-top: 3pt;
font-size: 75%}
p.bodynote { background-color: #E0E0E0 }
...

Each line of the style sheet gives formatting instructions for one HTML element and/or a subclass of an HTML element. The body tag is
augmented so that all of the pages will have extra left and right whitespace margins. The next directive, for the P tag, tells browsers not to
separate paragraphs with a full blank line but rather to indent the first line of a new paragraph by "2em" and add only a smidgen of blank
vertical space ("margin-top: 0.3em"). Now paragraphs will be mushed together like those in a printed book or magazine. Books and
magazines do sometimes use whitespace, however, mostly to show thematic breaks in the text. We therefore define three classes of
thematic breaks and tell browsers how to render them. The first, "stb" (for "small thematic break") will insert 12 points of white space. A
paragraph of class "stb" will inherit the 2em first-line indent of the regular P element. For medium and large thematic breaks, more
whitespace is specified, as well as an override for the first-line indent.
How does one use a style sheet? Park it somewhere on the server in a file with the extension ".css". This extension will tell the Web
server program to MIME-type it "text/css". Inside each document that uses the cascading style sheet, put the following link element
inside the document head:
<LINK REL=STYLESHEET HREF="/seia/style-sheet.css" TYPE="text/css">

The first time the user's browser sees a page that references this style sheet, it will come back and request
"http://philip.greenspun.com/seia/style-sheet.css" before rendering any of the page. Note that this will slow down page viewing a bit,
although if all of my pages refer to the same site-wide style sheet, users' browsers should be smart enough to cache it. If you read ten
chapters from this book online, for example, the browser should request the common style sheet only once.
Okay, now the browser knows where to get the style sheet and that a small thematic break should be rendered with an extra bit of
whitespace. How do we tell the browser that a particular paragraph is "of class stb"? Instead of "<P>", we use
<P CLASS="stb">

An excellent CSS reference can be found at http://www.w3schools.com/css/default.asp.

Frames
Frames consist of independent windows within a single Web page. Usually each window can be scrolled separately. Often, when you
click a link, only one frame is updated with a new URL; the rest of the page content stays the same.

Frames sounded like a good idea at the time (mid-1990s), but have proven to be painful for both users and developers for the following
reasons:
Frames waste screen space. Often frames have their own scrollbars, which take up valuable space within the browser window.
Furthermore, if you are only interested in one frame and you scroll down within that frame, the other frames remain in place,
leaving less space for the content you want.
Frames make it difficult to bookmark pages. When the user follows links that only update one frame, the URL of the page does not
change. Suppose Joe User visits a travel site, follows five links within frames to get to a page about a tour of Mexico's Copper
Canyon, and then bookmarks that page; the bookmark will point to the front page of the travel site, not the Copper Canyon page.
Frames make it difficult to share pages. Suppose Joe User wants to see if his friend is interested in going on the Copper Canyon
tour. While looking at the tour advertisement, he cuts and pastes the URL from the browser's Address field into an email message.
Joe's friend clicks on the URL and gets the travel site home page, not the interior page about the Copper Canyon tour.
Frames make it difficult to report errors. Consider a frame-using site with 200 scripts. A user isn't happy with the way a page
works. You ask her "What's the URL of the broken script?" She looks in her browser's Address field and gives you the URL of the
site's front page.
Frames make scrolling more difficult. Experienced users know that you don't have to use a mouse to scroll through a Web page;
you can use the space bar or arrow keys. However, if the page uses frames, the user must first click on the frame in which they
wish to scroll.
Frames break the Reload button. In our hypothetical travel site, if Joe User pushes Reload when looking at the Copper Canyon
page, the browser will often show the travel site home page, because the URL has not been updated.
Frames break the Back button. In some browsers, frames break the Back button; if a user visits a frame-based site and clicks 100
times on interior links, a click on the Back button may take the user back 101 steps rather than 1.
Search engines send users to subpages. Suppose your site uses two frames: one for navigation and one for content. Since each
frame is defined by a separate HTML document at a separate URL, a public search engine such as Google is most likely to send
the user to the HTML document containing content only. That user will never see the navigation frame and therefore won't be able
to find the other parts of your site.

HTML Considered Harmful?


Vanilla HTML imposes limits on how you can display and collect information. Users can't drag and drop objects. There are no sliders, no
paintbrushes, no real-time direct manipulation of screen objects. You can get around these limitations with a Java applet, Flash, or code
targeted at another browser plugin, but it might not be a good idea.
Part of the genius of HTML and the Web is that all sites using HTML markup and forms work the same. A user who has learned to use
amazon.com can apply his or her experience to using Google. Users visit a Web site because they are looking for unique content and
services, not a unique interface.
Administration pages may constitute an exception to the "custom interface is bad" rule. Suppose you hire and train customer service
agents who will be using the administration pages on a daily basis. If a Macintosh/Windows-like drag-and-drop interface saves them a lot
of time (and you money), it is perfectly reasonable to write custom code that will run in their browsers. You may have to spend fifteen
minutes training each agent, an unacceptably long time for a casual user, but the long-run productivity dividends make it worthwhile.

The Future
In the practical world, HTML is king. In the conference rooms of standards committees, however, it has been superseded by Extensible
Hypertext Markup Language (XHTML). Should you wish to keep up with events in this area, visit http://www.w3.org/MarkUp/.

More
visit your favorite Web page and use the browser command "View Source"
HTML tag reference: http://www.w3schools.com/html/html_reference.asp (Web) and HTML & XHTML: The Definitive Guide by
Musciano and Kennedy (O'Reilly, 2002; print)
Colors and their hexadecimal equivalents: http://falco.elte.hu/COMP/HTML/colors.html
Special characters: http://webmonkey.wired.com/webmonkey/reference/special_characters/
Cascading Style Sheets: http://www.w3schools.com/css/default.asp
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Gestin de compromisos
captulo de referencia de Ingeniera del software para aplicaciones en internet; revisado en Noviembre
2003
Esta seccin fue escrita principalmente por Cesar Brea.
La mayor parte de este libro trata sobre cmo construir una estupenda experiencia para los usuarios. En
paralelo, no obstante, resulta importante asegurarse que ests creando tambin una magnfica experiencia
para tu cliente y sus patrocinadores mientras dura el compromiso de tu equipo con ese cliente. Esas son las
personas que pagan las cuentas y te cantan alabanzas.
Si te van a cantar alabanzas o no, depende fundamentalmente de que la aplicacin que construyas entregue
los beneficios que tu cliente espera. Por ello es importante que en todo momento tengas presente la
respuesta a la pregunta: Qu espera mi cliente? Un factor reconfortante es que tienes mucho control
sobre las expectativas de tu cliente. Has preparado documentos de planificacin, escribes el calendario, y
llevas las agendas cuando te reunes con los clientes.
Este captulo presenta una hoja de trabajo para gestin de compromisos, una herramienta liviana para
gestionar tus relaciones con el cliente.
Definiciones:
Organizacin la compaa o corporacin sin fines de lucro para la cual vas a construir la
aplicacin; si trabajas para una empresa enorme, por ejemplo una universidad o una compaa de
las Fortune 500, es mejor anotar el departamento particular o la divisin como organizacin.
Patrocinador la persona cuyo presupuesto va a pagar por esto; o quin es responsable por los
resultados comerciales que la aplicacin va a apuntalar; en algunos casos, si trabajas directamente
para el gerente mximo de una organizacin pequea, el patrocinador ser la junta directiva.
Cliente el gerente, en general un subordinado del patrocinador, que es tu contacto cotidiano.
La hoja de trabajo tiene cinco secciones:
Con referencia a la Organizacin
Con referencia a la Aplicacin
Con referencia al Proyecto
Aprobaciones
Activos desarrollados
Te recomendamos que procedas formalmente de esta manera con tu equipo al menos una vez a la semana.
Puedes utilizarlo tambin para estructurar las reuniones introductorias y de puesta al da con tu cliente,
aunque la hoja de trabajo es fundamentalmente para tu equipo.

Con referencia a la Organizacin


Para contribuir a las discusiones sobre el alcance y cules caractersticas son crticas, necesitars
comprender lo que hace la organizacin del cliente como un todo. Resulta de ayuda conocer no slo el
propsito de la organizacin sino tambin su tamao, recursos y sus tendencias ***and trends in the its
fortunes.***

Tambin ayuda si conocemos al cliente personalmente, y si comprendemos su lugar e influencia dentro de


la organizacin. Cunto puede conseguirse por su intermedio? Qu debe probarse para que la aplicacin
obtenga apoyo de los gerentes superiores?
Nombre de la organizacin
Propsito de la organizacin
(qu hace? para quin?)
Tamao de la organizacin
(cantidad personas?
presupuesto anual?)
Performance organizacional
(ingresos/ ganancia/ tendencia
del presupuesto, actual vs.
planificado)
Nombre del Patrocinador, Ttulo
y Rol / Nivel organizacional
(persona cuyo presupuesto est
pagando por esto, o que es
responsable/culpable de los
resultados de negocio que provee
la aplicacin)
Nombre del Cliente, Ttulo y Rol /
Nivel organizacional (persona
responsable de lo que se entrega)
Metas de negocio a las cuales
sirve la aplicacin (qu es lo que
hace exactamente de manera
mejor, ms, ms rpido, ms
barato, cuantificacin: cunto
mejor?)
Nivel de influencia del Cliente
(lder, tiene voto, es un
seguidor?)
Antigedad del Cliente en el
trabajo (nuevo, tiempo medio,
retirndose)
Conocimiento tcnico del Cliente
(ninguno, algo, mucho)

Sobre la aplicacin
Necesitas documenta a un nivel abstracto lo que el cliente quiere, lo que piensas que el cliente debe querer
(si son diferentes), y si hay diferencias, cul es el plan para persuadir al cliente de seguir tus consejos.
Algunos de estos temas son confusos y se explican ms abajo.
Tema

Qu quiere el Cliente

Qu pensamos
nosotros

Plan de persuasin*

Capacidades para el
administrador a nivel
sitio

Primero, Luego, Lindo

Capacidades para un
miembro registrado de la Primero, Luego, Lindo
comunidad
Capacidades para un
visitante casual no
registrado

Primero, Luego, Lindo

Capacidades para la
Clase de usuario N

Primero, Luego, Lindo

Preferencias de diseo
Requerimientos de
performance

Tiempo de carga de pginas

Restricciones sobre la
infraestructura tcnica
Planes / Recursos para
mantenimiento de la
aplicacin
Presupuesto para el
primer ao
Fechas tope

lanzamiento suave, inauguracin


completa, primer beneficio de
negocio

Capacidades para el administrador a nivel sitio. Para esta y para las otras clases de usuario, enumere
aquellas caractersticas que se necesitan primero (se deben tener para lanzar el servicio en cualquiera de
sus formas), luego (qu haras si tuvieras un poco ms de tiempo y esfuerzo disponible), y lindo para
tener. Un ejemplo para el administrador a nivel sitio es el siguiente:
Primero = publicar / gestionar contenido
Luego = avisar a los miembros de noticias y ofertas
Lindo = seguir la pista de la actividad a nivel de usuario registrado individual

Preferencias de diseo. Si su organizacin tiene una o varias sedes Web ya en funciones, probablemente
vas a inferir su estilo de diseo. Si sugieren Flash, frames, un montn de JavaScript vas a tener un
problema potencial y deberas sealarles que Google, Amazon, eBay y otras aplicaciones exitosas en
Internet se apegan a un diseo fcil de entender, llano y rpido para cargar.
Requerimientos / expectativas de performance. Inicialmente sugiere tus propios estndares para los
tiempos de carga de pgina de la pgina ndice y de las ms complejas en el sitio. Permite que el cliente
reaccione a esas sugestiones. Si todo el mundo est de acuerdo con tiempos de menos de un segundo,
entonces ser ms fcil patear las peores ideas de interfaz de usuario, como las introducciones en Flash.
Restricciones sobre la infraestructura tcnica. En una organizacin de tamao pequeo o mediano
generalmente hay conocimiento y personal apropiado para mantener una clase de servidor. Si no

construyes el proyecto sobre ese servidor, implcitamente ests obligando a esa organizacin a gastar
$100.000 por ao para contratar nuevo personal de mantenimiento o pagar por el servicio a una
organizacin de hosting. Es mejor dejar las cosas en claro desde el principio sobre lo que va a suceder
cuando llegue el momento de pasar el sistema a produccin.
Planes / Recursos para mantenimiento de la aplicacin. Quin va a ocuparse de mantener el sistema
funcionando despus que hagas la entrega? Cunta experiencia tiene esa persona?
Presupuesto. Cul es el presupuesto total para hardware, software, integracin, lanzamiento (incluir la
carga inicial del contenido), entrenamiento, y mantenimiento?
Fechas tope. Probablementes uses otras herramientas para mantener un calendario detallado. Utiliza esta
planilla para seguir la pista a ciertas metas de alto nivel por las cuales ests trabajando en conjunto con el
cliente. Resiste la tentacin que sufren las personas tcnicas estereotipadas de pensar en trminos de sus
propios requerimientos y tareas. A tu cliente y tu patrocinador no les importa el SQL. Lo que les importa
es la fecha en la cual van a obtener el beneficio completo de negocio (BCN) de parte de la aplicacin, o
sea, cundo es que el sistema suma a las ganancias o contribuye de otras maneras a las metas
organizacionales. Si cuentas hacia atrs desde esa fecha y reconoces que se necesiten tal vez uno o dos
lanzamientos de versiones para alcanzar el BCN, entonces puedes establecer una fecha de lanzamiento
pblico. Contando hacia atrs desde la fecha de lanzamiento pblico, se puede establecer una fecha de
lanzamiento suave o fecha de pruebas de usuario completas. Contando hacia atrs desde esa fecha, debes
establecer cundo suceder el evento de completadas las caractersticas, a partir de ese momento los
programadores solamente van a realizar comprobaciones y reparar defectos, en lugar de agregar nuevas
caractersticas.
Plan de persuasin. Para cada tem de esta seccin, si surgen diferencias de opinin durante las reuniones
iniciales, documenta un plan de persuasin. A continuacin se muestran algunos elementos del plan que se
deben bosquejar en esta planilla:
vale la pena pelear la batalla?
objetivo: victoria total? cul es un compromiso aceptable?
el acuerdo est dirigido por hechos / lgica? emociones / relaciones?
quin ms debera estar involucrado? (por ejemplo, personal de la asignatura o alumnos de
ingeniera experimentados)

Sobre el proyecto
Vas a tener documentos de gestin del proyecto ms detallados que esta seccin de la planilla. Considera
esto como un resumen de altoo nivel sobre cmo estan yendo las cosas. Intenta reunirte en persona tantas
veces como sea posible, y suplementa la comunicacin con llamadas telefnicas y correo electrnico,
siempre fijando la discusin con documentos y cronogramas escritos. Como mnimo, trata de tener una
entrevista personal cada tres semanas y una llamada telefnica semanal. Esta seccin de la planilla debe
actualziarse cada dos semanas y servir para llamar la atencin a todo problema importante.
Resulta tentador no seguir este consejo, pero los proyectos necesitan administrarse cara a cara (al menos
ocasionalmente) y por escrito. Esta disciplina te obliga a t y a tu cliente a ser honestos y realistas con el
otro. No es necesario sobrecargarse con reuniones interminables y gruesos informes. Una reunin al
inicio, en la mitad y al final sern suficientes, suplementadas con llamadas telefnicas semanales. Y la
tabla que se muestra ms abajo ser ms que suficiente para alertar sobre los problemas importantes.
Revsala al menos una vez cada dos semanas.

Fecha de la reunin en persona ms reciente con el Cliente


Fecha de la reunin telefnica ms reciente con el Cliente
Fecha de la reunin en persona ms reciente con el Patrocinador
Fecha de la reunin telefnica ms reciente con el Patrocinador
Se tiene la carta de compromiso (ver ms abajo) firmada por el Cliente y el
Patrocinador?
Estn firmadas por el Cliente y el Patrocinador las especificaciones
actuales?
Se tienen firmadas por el Cliente las minutas de las reuniones semanales de
actualizacin? (incluyen los cambipos solicitados / acordados / en discusin)
Fecha estimada de entrega vs. fecha de entrega comprometida
Presupuesto estimado vs. presupuesto comprometido
nimo del Cliente (infeliz a feliz)
nimo del Equipo
nimo del usuario promedio que ha probado la aplicacin

Una buena carta de compromiso trata al menos los siguientes temas:


descripcin general de la situacin del cliente y sus necesidades
resumen de la aplicacin que se debe construir
fechas tope
presupuestos
obligaciones mutuas
otros trminos

Puntos de control y aceptacin (Sign-Offs)


Intenta poner en calendario las revisiones profundas del proyecto ms o menos cada tres semanas,
idealmente en persona. Las notas y decisiones de esas revisiones deben firmarse por ambas partes (el
equipo o lder del equipo y el cliente). El requerimiento de la firma es una manera de obligar el cierre de
las cuestiones.

Activos desarrollados
Cuando construimos un negocio rentable o una reputacin profesional es importante aprender y construir
a partir de la experiencia. Se indican a continuacin algunas de las cosas que puedes llevarte de un
proyecto:
experiencia en el dominio del problema y conocimiento sobre cmo resolver un problema similar en
el futuro
lecciones sobre cmo lidiar con esta organizacin en particular
lecciones sobre cmo trabajar con este equipo en partcular
lecciones generales sobre el trabajo en equipo y el trabajo en organizaciones de un tamao
particular
modelos de datos, procedimientos almacenados y tal vez algunos scripts de pginas para reusar en

la prxima aplicacin Internet que hagas


una buena referencia de parte del Cliente
artculos en revistas o diarios que describen la aplicacin
un libro blanco que describe el logro de tu equipo a una audiencia tcnica
alguna clase de resumen escrito que describe los logros de tu equipo a una audiencia de negocios
A mediados del proyecto, escribe los que esperas obtener de la experiencia. Al final, escribe lo que en
realidad obtuviste.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Estndares para la calificacin


captulo de referencia de Ingeniera del software para aplicaciones en internet revisado en setiembre de
2003
Estos son los estndares de calificacin que usan los autores en la asignatura 6.171 en MIT. Si eres un
estudiante de 6.171, ten esas cosas en cuenta a lo largo del semestre. Si eres un instructor en otra facultad,
puedes usarlas como modelo.
La meta general de 6.171 es producir ingenieros en software profesionalmente competentes. Si para el
final del semestre tienes las habilidades de un programador profesional tu calificacin ser una A.
Un programador profesional debe ser capaz de elegir problemas que valga la pena atacar. LA ingeniera es
el arte de construir soluciones bajo un costo efectivo a los problemas que la sociedad considera como
importantes. Una persona que ciegamente hace lo que le dicen, sin plantearse en forma independiente el
contexto y la importancia del problema, no est haciendo ingeniera. Un programador profesional necesita
ser capaz de sentarse a dialogar con las personas que toman decisiones, preparado con un conocimiento
sustancial acerca del dominio del problema y realizar contribuciones significativas a la discusin. Al
evaluar tu performance en 6.171, vemos (i) cmo te has desempeado al dirigir al cliente para resolver
prmero los problemas ms importantes para los usuarios, (ii) lo que has contribudo durante las
discusiones en clase de proyectos potenciales, y (iii) si has realizado sugerencias tiles a los otros equipos
en el mbito de diseo del servicio.
Un programador profesional debe ser habilidoso en la realizacin de diseos a partir nada previo: (i) debe
tomar vagas aspiraciones organizacionales y transformarlas en especificaciones concretas, (ii) debe
seleccionar las herramientas adecuadas para el sustrato, (iii) debe saber construir y comprobar el
prototipo, (iv) debe saber usar ese prototipo para obtener realimentacin de los usuarios y de la
organizacin patrocinadora, (v) debe implementar y lanzar la Entrega 1.0, (vi) debe saber refinar las
especificaciones de la Entrega 2.0 basado en la experienca de la 1.0 Al evaluar tu performance para 6.171,
observaremos si pudiste lanzar el servicio para atender a usuarios reales y cun exitoso fue tu proyecto en
alcanzar las metas tcnicas y organizacionales. El examen a mitad del semestre tambin tiene como
objetivo darnos cuenta si puedes ver una experiencia de usuario deseada y realizar los ms crticos
aspectos del diseo de sistemas, como el modelado de datos.
Puedes advertir que un elemento crtico del proceso de realizacin seleccin de las herramientas
adecuadas, requiere que el programador mantenga una red de colegas profesionales. La seleccin de las
herramientas basados en lo que dicen los vendedores resulta extremadamente riesgosa. El 99 % de lo que
dicen ha demostrado ser, uh, optimista. El programador que puede apoyarse en un grupo de amigos para
obtener informacin no sesgada sobre cules herramientas son confiables es mucho ms efectivo que el
programador que trabaja aislado, leyendo nicamente informes de prensa y propagandas. Obtendrs
puntos extra en 6.171 si puedes decir: Realmente me gust la caracterstica X del proyecto del equipo Y,
as que les pregunt cmo la hicieron y adapt sus ideas y cdigo a nuestro proyecto.
El programador profesional necesita una dedicacin especial en la atencin de la calidad de la experiencia
del usuario final. Un coder, listo para el outsourcing hacia el Tercer Mundo, puede implementar sin pensar
cualquier diseo de sistema que venga de los caprichos de directivos y diseadores grficos. Un ingeniero,
por otro lado, se asegura que lo que l o ella est produciendo resulta en un uso efectivo del tiempo del
usuario final, en parte mediante referencias a principios establecidos de diseo de interfaz de usuario y en
parte mediante la conduccin de pruebas en el prototipo con una cantidad reducida de usuarios

potenciales. Al evaluar tu performance en 6.171, vamos a ver si has usado efectivamente las pruebas de
usuario, idealmente ms all de lo requerido en los ejercicios.
El programador profesional es un hbil comunicador. Esto se ve en la documentacin escrita que permitir
a otro programador seguir con el proyecto. La comunicacin tambin est relacionada con escribir libros
blancos que expliquen la importancia del problema, cmo se lo atac y cules fueron los resultados. Un
programador tambin debe ser bueno en dar cortas presentaciones orales que comuniquen los puntos
principales de un proyecto tanto a audiencias tcnicas como no tcnicas. Por ltimo, un programador debe
saber como aprovechar las interacciones cara a cara con clientes y usuarios. Al evaluar tu performance a
lo largo de 6.171 vamos a preguntar: podemos comprender toda esta estructura y cdigo fuente slo
mediante la lectura de lo que est en el directorio /doc? Tambin revisaremos (i) si tus presentaciones
frente a la clase han sido claras e irresistibles., (ii) si tu cliente sinti que era mantenido al tanto del estado
del proyecto, y (iii) la calidad del documento que explica la visin global al final del proyecto.
El programador profesional no le tiene miedo a los desafos. Un graduado de MIT ciertamente nunca debe
temer los desafos. Obtendrs puntos extras en 6.171 por seleccionar problemas difciles y resolverlos de
manera elegante e ingeniosa.
Hablando de desafos... la mayora de los proyectos de software son demasiado difciles para que los
enfrente una persona sola. En consecuencia, un programador profesional ser hbil en el trabajo en
equipo, la gestin de riesgos, el establecimiento de hitos y en alcanzar las fechas tope. Al evaluar tu
performance en 6.171, vamos a considerar si has sido de ayuda para que tu compaeros de proyecto
funcionen como un equipo y si has cumplido con las responsabilidades que te tocaban en tu rol dentro del
equipo.
Para que un ingeniero de software tenga una carrera exitosa, l o ella deben disponer de una carpeta de
proyectos que ha puesto en produccin y de clientes satisfechos que puedan decir Realmente me gustara
trabajar de nuevo con este ingeniero. Vamos a revisar si hiciste ese doloroso ltimo 5 porciento de
trabajo que es necesario para impulsar tu proyecto hacia las manos de los usuarios reales y cmo se siente
tu cliente con respecto a la experiencia en general de trabajar contigo.
Regresar a la Tabla de contenidos
eve@eveandersson.com, philg@mit.edu, aegrumet@mit.edu

Glosario
parte de Ingeniera del Software para Aplicaciones en internet por Eve Andersson , Philip Greenspun , y Andrew Grumet
Resumen URL
Una URL abstracto es una sin una extensin de archivo, por ejemplo, http://foobar.com/contact-info lugar de
http://foobar.com/contact-info.html o http://foobar.com/contact-info.aspx . Si publica slo URLs abstractas, usted tiene la libertad
de cambiar su tecnologa de aplicacin sin romper favoritos y enlaces de los usuarios de otros sitios.
Examen de ingreso
Una prueba realizada por un propietario del usuario final o del sistema para verificar que las funciones del software entregados correctamente y
cumple con los requisitos.
Prueba del cido
Una prueba propuesta por IBM en la dcada de 1960 para sistemas de gestin de bases de datos de transacciones: atomicidad, coherencia,
aislamiento, durabilidad. Una base de datos compatible con ACID como Oracle o SQL Server puede garantizar que dos actualizaciones se harn
juntos (atomicidad), que las reglas de integridad se pueden establecer y hacer cumplir (consistencia), que los usuarios concurrentes no podrn
ver cada otros a medio terminar trabajo (aislamiento), que la informacin no se perder incluso si un disco duro muere (durabilidad). Ver los
"Fundamentos" captulo y SQL para los empollones Web en http://philip.greenspun.com/sql/ por ms.
Servidor de aplicaciones
ver "Middleware"
AOLserver
Lanzado a principios de 1995 como "NaviServer", AOLserver sigue siendo uno de los ms poderosos programas de servidor Web en el
mercado y que es gratuito y de cdigo abierto. Es un servidor multi-hilo que proporciona un gran apoyo para la conexin a los sistemas de
gestin de bases de datos relacionales. AOLserver se documenta en www.aolserver.com .
Apache
Compite con Microsoft Internet Information Server para el ttulo de "servidor web ms popular del mundo". Apache nunca fue muy avanzado
tcnicamente, pero fue el mejor de los servidores web libre y de fuente abierta por un tiempo y creci a la dominacin. Ms:
http://philip.greenspun.com/panda/server .
API
Interfaz de programacin de aplicaciones. Una barrera de abstraccin entre la costumbre de cdigo / extensin y un ncleo, por lo general
comercial, programa. El objetivo de una API es dejar de escribir programas que no rompa cuando se actualiza el sistema subyacente. Los
autores del programa bsico estn diciendo, "Aqu hay un montn de ganchos en nuestro cdigo. Garantizamos y el documento que van a
trabajar de una determinada manera. Nos reservamos el derecho de cambiar el programa bsico, pero vamos a tratar de conservar el
comportamiento de la llamada a la API. Si no podemos, entonces vamos a decirle en el comunicado seala que rompimos una llamada a la API
de edad ".
ASP
Active Server Pages, introducidas por Microsoft a mediados de la dcada de 1990. Este es el sistema de programacin estndar para
aplicaciones de Internet alojados en servidores Windows. Se incluye con Internet Information Server (IIS) cuando usted compra de Windows.
La idea fundamental es que usted escribe pginas HTML con pequeos trozos incrustados de Visual Basic, C # o en otros idiomas, que son
interpretados por el servidor.
Pista de auditora
Un registro de la actividad pasada. Por ejemplo, un registro de todos los valores pasados en manos de las columnas en una fila de base de datos.
O una secuencia de todas las transacciones de la caja registradora en los ltimos tres meses. O una impresin de todas las interacciones de
servicio al cliente relacionados con un orden dado, independientemente de si la comunicacin se realiza por telfono, correo electrnico o chat
en vivo con un representante.
Blog
Un diario en lnea, publicado con frecuencia (frecuencia diaria). Los lectores pueden enviar comentarios sobre cada entrada de diario. Algunos
blogs obtienen un amplio nmero de lectores, como este: http://blogs.law.harvard.edu/philg/ . El trmino blog es un acortamiento del weblog.
Bozo Filtro
Una peticin del usuario individual que filtrar el servidor contribuciones de algn otro miembro de la comunidad en particular.
Mdem de cable
Un mdem de cable es una conexin a Internet proporcionado por un operador de TV por cable, por lo general con un mnimo de 1,5 Mbits por
segundo de ancho de banda de descarga (50 a 100 veces ms rpido que los mdems que funcionan a travs de lneas telefnicas analgicas).
Cache
Los sistemas informticos suelen incorporar dispositivos de almacenamiento de gran capacidad que son (por ejemplo, unidades de disco) lentas
y dispositivos de almacenamiento ms pequeas que son rpidas (por ejemplo, chips de memoria, que son 100.000 veces ms rpido que el
disco). Los sistemas de archivos y sistemas de gestin de bases de datos siguen utilizados recientemente la informacin de los dispositivos
lentos en una memoria cach en el dispositivo rpido.
CGI
Common Gateway Interface. Esta es una norma que permite a los programadores escribir guiones web sin depender de los detalles del
programa de servidor Web que se utiliza. As, por ejemplo, un servicio de Internet implementado en CGI podra ser trasladado de un sitio
corriendo AOLserver a un sitio que ejecuta Apache . Scripts CGI, que se ejecutan los procesos del sistema operativo como lanzados por
separado, suelen ser muy lento en comparacin con las secuencias de comandos que se ejecutan dentro de un programa de servidor Web.
Servidor de cliente
En la dcada de 1960, las computadoras eran tan caros que cada empresa podra tener slo una. "El equipo" corri un programa a la vez, por lo
general la lectura de instrucciones y datos de tarjetas perforadas. Este fue el procesamiento por lotes. En la dcada de 1970, ese equipo era

general la lectura de instrucciones y datos de tarjetas perforadas. Este fue el procesamiento por lotes. En la dcada de 1970, ese equipo era
capaz de ejecutar varios programas al mismo tiempo, en respuesta a los usuarios en las terminales interactivos. Esto fue tiempo compartido (que
sera bueno si la modestia impidi uno de los autores de sealar que esta fue desarrollado por su laboratorio en el MIT alrededor de 1960). En la
dcada de 1980, las empresas podan permitirse un montn de ordenadores. Los grandes equipos se designaron los servidores y esperaran a las
solicitudes que vengan desde una red de equipos cliente. El equipo cliente puede sentarse en el escritorio de un usuario y producir un grfico
informativo de la informacin recuperada desde el servidor. La arquitectura general se conoce como cliente / servidor. Debido al alto costo de
disear, desarrollar y mantener los programas que se ejecutan en los equipos cliente, la Amrica Corporativa est descartando rpidamente esta
arquitectura en favor de Intranet: mquinas cliente corren un simple navegador Web y servidores de hacer ms del trabajo requerido para
presentar la informacin.
Cdigo Freeze
El punto en el que todas las paradas de codificacin, por lo general para permitir pruebas de software sin la introduccin de nuevos errores.
Filtrado colaborativo
Si usted puede convencer a un grupo de personas para evaluar las pelculas en una escala 1-10, por ejemplo, se hace posible identificar a las
personas cuyos gustos son similares. Dada una nueva pelcula que slo unas pocas personas han visto y evaluado, un filtro de colaboracin
puede identificar otros en la comunidad que podran gustarle. Algunos sitios de comercio electrnico ofrecen este servicio, teniendo en cuenta,
por ejemplo, que "los clientes que compraron el producto que est buscando en estos momentos tambin tendan a comprar estos otros tres
cosas". Filtrado colaborativo es fcil de programar, pero en ltima instancia es un pobre sustituto de los colaboradores humanos y editores.
Comunidad Sitio
Existe un sitio de la comunidad para apoyar la interaccin de una comunidad en lnea de los usuarios. Estos usuarios suelen venir juntos debido
a un inters comn y son ms vibrante cuando hay una dimensin educativa, es decir, cuando los usuarios ms experimentados ayudan a los
novatos a mejorar sus habilidades.
Compresin
Al almacenar la informacin en forma digital, a menudo es posible reducir la cantidad de espacio requerido por la explotacin de patrones
regulares en los datos. Por ejemplo, documentos escritos en Ingls con frecuencia contienen "la". Un sistema de compresin puede notar este
hecho y representar la palabra completa "los" (24 bits) con un cdigo corto. Un cuadro que contiene la cara de su amigo adems de un montn
de cielo azul podra ser comprimido si la regin superior se describieron como "un montn de cielo azul". Toda imagen Web populares,
formatos de vdeo y de sonido incorporan compresin.
Content Repository
En lugar de tener una tabla de SQL para cada tipo diferente de contenido en un sitio, por ejemplo, articles, comments, news, questions,
answers , es posible definir una nica tabla de depsito de contenido que es lo suficientemente flexible para almacenar todo esto en un solo
lugar . Este enfoque de modelado de datos hace que sea ms sencillo para realizar consultas como "mustrame todas las cosas nuevas desde
ayer" o "me muestran todo el contenido aportado por Usuario # 37". Con un repositorio de contenido, tambin es ms fcil de programar y
hacer cumplir las polticas de todo el sitio consistentes respecto a la aprobacin, edicin y administracin de contenido.
Galleta
El protocolo de cookies permite a una aplicacin web para mantener convenientemente una "sesin" con un usuario en particular. El servidor
Web enva al cliente una "cookie mgica" (pieza de informacin) que se requiere el cliente para volver sobre las solicitudes posteriores. La
especificacin original est en http://home.netscape.com/newsref/std/cookie_spec.html .
Modelo de datos
Un modelo de datos es la estructura en la que un programa de ordenador almacena informacin persistente. En una base de datos relacional ,
modelos de datos se construyen a partir de tablas. Dentro de una tabla, la informacin se almacena en columnas homogneas, por ejemplo, una
columna denominada registration_date contendra informacin solamente de tipo date . Un modelo de datos es interesante porque muestra
lo que una aplicacin informtica pueden procesar tipos de informacin. Por ejemplo, si no hay un lugar en el modelo de datos para el programa
para almacenar la direccin IP desde la que se public, el contenido, el editor nunca ser capaz de eliminar automticamente todo el contenido
que procede de la direccin IP de un spammer.
DNS
El sistema de nombres de dominio se traduce nombres de host legibles, por ejemplo, www.google.com , en direcciones IP legibles por mquina
y la red enrutables, por ejemplo, 216.239.57.100 . DNS es una aplicacin distribuida en que no hay una sola computadora que mantiene
traducciones para todos los nombres de host posibles. Un registrador de dominios, por ejemplo, www.register.com , registra que los servidores
de dominio para el dominio google.com estn en direcciones IP especficas. Servidor de nombre local de un usuario va a consultar los
servidores de nombres de google.com para encontrar la traduccin para el nombre de host www.google.com . Tenga en cuenta que no hay nada
mgico en "www"; no es ms que un nombre convencional para un equipo que ejecuta el servidor Web. El procedimiento para la traduccin de
un nombre de host como froogle.google.com es el mismo que el aplicado a www DNS Round Robin fue una tcnica de equilibrio de carga
temprana en la que se han configurado varios equipos en diferentes direcciones IP para servir una aplicacin.; navegadores que piden los
servidores DNS para traducir el nombre de host del sitio obtendran diferentes respuestas dependiendo de cuando le preguntaron, difundiendo
as los usuarios entre los varios equipos de hosting de la aplicacin.
DTD
Document Type Definition. La especificacin del esquema de un documento XML, incluidos sus elementos, atributos y estructura de datos.
DTD se utilizan para validar que est bien formado un documento XML. Tambin puede compartir una DTD con sus colaboradores con el fin
de ponerse de acuerdo sobre la estructura de los documentos XML que se intercambia.
Dynamic Site
Un sitio dinmico es uno que es capaz de recoger informacin de usuario A, servir de nuevo a los usuarios B y C de inmediato, y esconderlo de
usuario D ya que el servidor sabe que el Usuario D no est interesado en este tipo de contenido. Sitios dinmicos suelen ser construidas en la
parte superior de los sistemas de gestin de bases de datos relacionales , ya que estos programas hacen que sea fcil de organizar el contenido
presentado por cientos de usuarios concurrentes. Un ejemplo de un sitio dinmico simple sera un sistema de anuncio clasificado.
Emacs
Editor de texto ms potente del mundo, escrito por Richard Stallman (RMS) en 1976 para el sistema de tiempo compartido Incompatible (ITS)
en el PDP-10 en el MIT. Emacs ha sido posteriormente portado a prcticamente todo tipo de hardware y sistema operativo entre 1976 y el
presente (incluyendo el Macintosh, Windows 95 / NT y todos los sabores de Unix). Los buenos programadores tienden a pasar toda su vida
laboral en Emacs, que es capaz de funcionar como un lector electrnico, lector de noticias USENET, navegador Web, cscara, calendario,
calculadora, y Lisp evaluador. Emacs es infinitamente personalizable ya que los usuarios pueden escribir sus propios comandos en Lisp. Puede
encontrar ms informacin sobre Emacs en ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-519A.pdf (1979 informe del MIT AI Lab de
Stallman), en www.gnu.org (donde se puede descargar el cdigo fuente de forma gratuita), o mediante la lectura de Aprendizaje Emacs
(Cameron et al 1996; O'Reilly). Si desea programar Emacs y entonces usted querr Escritura Gnu Emacs Extensiones (Bob Glickstein 1997;

(Cameron et al 1996; O'Reilly). Si desea programar Emacs y entonces usted querr Escritura Gnu Emacs Extensiones (Bob Glickstein 1997;
O'Reilly).
Filtro
Los mejores servidores Web API permiten al programador dice "ejecutar este pequeo pedazo de cdigo antes de [o despus de] servicio de
archivos que coinciden con un patrn de URL en particular." Los filtros que se ejecutan despus de un archivo que se sirve son tiles si desea
agregar el registro adicional para una aplicacin. Los filtros que se ejecutan antes de que se sirve de un archivo o una secuencia de comandos se
ejecuta son tiles para la implementacin de una poltica de seguridad de una manera coherente, en lugar de depender de los autores de guiones
individuales para insertar una comprobacin de autenticacin.
Firewall
Un equipo que se encuentra entre la red interna de una empresa de computadoras y la Internet pblica. El trabajo del servidor de seguridad es
asegurarse de que los usuarios internos pueden salir a disfrutar de los beneficios de Internet, mientras que las galletas externos no son capaces
de hacer conexiones a las mquinas detrs del firewall.
Archivo plano
Una base de datos de archivo plano mantiene la informacin organizada de forma estructurada, por lo general en un archivo grande. Una
aplicacin de hoja de clculo de escritorio es un ejemplo de un sistema de gestin de base de datos de archivo plano. Estos son tiles para los
editores web preparar el contenido debido a una gran cantidad de informacin puede ser montado y luego se distribuye en un formato
coherente. Bases de datos de archivo plano normalmente carecen de apoyo para el procesamiento de transacciones (inserciones y
actualizaciones) de usuarios concurrentes. Por lo tanto, de colaboracin o de comercio electrnico sitios Web generalmente se basan en un
sistema de gestin de base de datos relacional como un back-end.
GIF
Formato grfico de intercambio. Desarrollado en 1987 por CompuServe, esta es una manera de almacenar imgenes comprimidas con hasta 256
colores. Se hizo popular en la Web, ya que era el nico formato que pueda ser representada en lnea por la primera multiplataforma navegador
Web (NCSA Mosaic). Los JPEG Formato de archivo de imagen como resultado un mejor imgenes con archivos de tamao mucho ms
pequeo.
HTML
Hyper Text Markup Language. Desarrollado por Tim Berners-Lee, especifica un formato para el tipo ms popular de documento distribuido a
travs de Internet (a travs de HTTP). Documentado someramente en este libro, documentado mal en http://www.w3.org y documentado bien
en HTML: The Definitive Guide (Musciano y Kennedy 2002; O'Reilly).
HTTP
Protocolo de Transferencia de Hipertexto. Desarrollado por Tim Berners-Lee, especifica cmo un navegador Web solicita un documento desde
un servidor Web. Pregunta como "cmo un servidor de decirle al navegador que el documento se ha movido?" o "cmo un navegador
preguntar el tiempo que un documento fue modificada por ltima vez?" pueden ser respondidas por referencia a este protocolo, que se
documenta mal en http://www.w3.org y documentado bien en varios libros como HTTP: The Definitive Guide (David Gourley, Brian Totty;
O'Reilly 2002).
IIS
Internet Information Server. Un programa de roscado servidor Web que se incluye con Microsoft al comprar el sistema operativo Windows.
Java
Java es un lenguaje de programacin primero, desarrollado por Sun Microsystems alrededor de 1992, destinados a ser utilizados en los
diminutos ordenadores dentro de los telfonos celulares y otros dispositivos similares. Java es segundo a un intrprete, la mquina virtual de
Java, anteriormente compilado en navegadores web populares (espalda cuando Netscape Navigator fue popular y antes Sun demand a
Microsoft). Java es tercero un sistema de seguridad que pretende garantizar que un programa descargado de una fuente no confiable en Internet
puede ejecutar de forma segura dentro de la intrprete. Java es la nica manera realista de un editor web para aprovechar la potencia de clculo
disponible en el escritorio de un usuario. Java es un lenguaje general engorroso para el desarrollo de software de servidor. Para mayor
informacin sobre el idioma, consulte el captulo "Java" de la base de datos Sitios Web Backed en http://philip.greenspun.com/wtr/deadtrees/53008.htm .
JPEG
Joint Photographic Experts Group. Un montn de gente que se sent y se dise un estndar para la compresin de imgenes,
convenientemente titulado "IS 10918-1 (UIT-T T.81)". Esta norma funciona especialmente bien para fotografas en color de 24 bits. C-Cube
Microsystems ocurri la norma JFIF para codificar imgenes en color en un archivo. Este tipo de archivo es lo que la gente comnmente se
refieren como "JPEG" y por lo general termina en ".jpg" o ".jpeg". El principal problema con los archivos JFIF es que graban slo 8 bits por
color, una gama mucho ms pequea de las intensidades que est presente en el mundo natural y significativamente menor que las seales de 12
y 14 bits por color que salen de la mejores escneres y cmaras digitales. Este defecto y ms se remedia en el estndar JPEG 2000. Ver
www.jpeg.org para ms informacin sobre la norma.
LDAP
Lightweight Directory Access Protocol. Un servidor LDAP tpica es una base de datos accesible desde la red simple donde una organizacin
almacena informacin sobre sus usuarios autorizados y lo que cada usuario tiene privilegios. Por lo tanto, en lugar de crear una nueva cuenta de
empleado en 50 equipos diferentes, el nuevo empleado se introduce en LDAP y derechos a esos 50 sistemas concedida. Si el empleado se va,
revocar todos los privilegios es tan simple como la eliminacin de una entrada en el directorio LDAP. LDAP es un poco confuso porque las
implementaciones originales se presentaron como alternativas a la web y el sistema de gestin de base de datos relacional. Hoy en da muchos
servidores LDAP se implementan utilizando RDBMSes estndar por debajo, y hablan con el resto del mundo a travs de los documentos XML
servido a travs de HTTP.
Linux
Una versin libre del sistema operativo Unix, compuesto principalmente de herramientas desarrolladas durante un perodo de 15 aos por
Richard Stallman y el Proyecto GNU. Sin embargo, la final espectacular empuje fue proporcionada por Linus Torvalds, quien escribi un kernel
(terminado en 1994), organiz un grupo de programadores de Internet en todo, y gestionado lanzamientos.
Ceceo
Lisp es el ms poderoso y tambin el lenguaje de programacin ms fcil de usar que se haya desarrollado. Inventado por John McCarthy en el
MIT a finales del decenio de 1950, Lisp es hoy utilizado por los programadores ms sofisticados que empujan los lmites de las computadoras
en la fsica matemtica, ingeniera asistida por ordenador, y la gentica asistidas por ordenador. Lisp tambin es utilizado por miles de personas
que no piensan en s mismos como los programadores en absoluto, slo las personas que quieren definir accesos directos en AutoCAD o el
editor de texto Emacs. La mejor introduccin a Lisp es tambin la mejor introduccin a la informtica: Estructura e Interpretacin de
Programas Informticos (Abelson y Sussman 1996; Prensa MIT).

Programas Informticos (Abelson y Sussman 1996; Prensa MIT).


Log Analyzer
Un programa que lee el archivo de registro de acceso de un servidor web (una lnea por cada solicitud servido) y produce un informe
comprensible con estadsticas de resumen, por ejemplo, "Usted sirvi 234.812 solicitudes ayer a 2.039 equipos diferentes, el archivo ms
popular fue /samoyed-faces.html ".
Imn contenido
El material escrito por un editor, con la esperanza de establecer una comunidad en lnea. En el largo plazo, la mayora del contenido en un sitio
de la comunidad exitosa ser fcil fue autor.
Middleware
Un trmino vago que, cuando se usa en el contexto de las aplicaciones de Internet, significa "el software vendido a las personas que no saben
cmo programar por personas que no saben cmo programar." En teora, el middleware se encuentra entre su sistema de gestin de base de
datos relacional y el programa de aplicacin y hace que todo el sistema funcione de manera ms fiable, al igual que la adicin de un montn de
piezas mviles extra para su coche hara ms confiable.
MIME
Multipropsito Internet Mail Extensions. Desarrollado en 1991 por Nathan Borenstein de Bellcore para que las personas podran incluir
imgenes y otros documentos en texto sin formato no en mensajes de correo electrnico. MIME es un estndar fundamental para la World Wide
Web, ya que un servidor HTTP responder a una solicitud siempre incluye el tipo MIME del documento servido. Por ejemplo, si un navegador
solicita "foobar.jpg", el servidor devolver un tipo MIME de "image / jpeg". El navegador Web decidir, sobre la base de este tipo, ya sea o no
para tratar de hacer que el documento. Una imagen JPEG se puede representar por todos los navegadores web modernos. Si, por ejemplo, un
navegador Web ve a un tipo MIME "application / x-piloto" (para los archivos .prc que PalmPilots emplean), el navegador invitar al usuario
guardar el documento en el disco o seleccione una aplicacin adecuada de lanzamiento para este tipo de documento.
Multi-modal
Una interfaz de usuario multi-modal le permite interactuar con una pieza de software en una variedad de medios simultneamente. Por ejemplo,
usted puede ser capaz de comunicarse con un teclado o el lpiz, o con tu voz, o incluso con la mano o la cara gestos. Estos son todos los
"modos" de comunicacin. El advenimiento de GPRS posibilita la comunicacin de voz / teclado simultnea posible en los telfonos celulares.
Sistema Operativo (OS)
Un programa de computadora grande complicada que permite a mltiples simultneamente ejecutar grandes programas informticos
complicados coexisten pacficamente en un equipo fsico. El sistema operativo tambin es responsable de ocultar los detalles del hardware de
los programadores de aplicaciones, por ejemplo, permitir que un programador dice "Quiero escribir ABC en un archivo denominado XYZ" sin
que el programador tiene que saber que impulsa muchas disco el equipo tiene o qu empresa fabrica esas unidades. Ejemplos de sistemas
operativos son Unix y Windows XP. Los ejemplos de las cosas que tratan de ser los sistemas operativos, pero en su mayora no cumplen la
condicin de "coexistir pacficamente", son Windows 98 y el sistema operativo Macintosh.
Orculo
Oracle es el sistema de gestin de base de datos relacional ms popular (RDBMS). Fue desarrollado por Larry Ellison de Oracle Corporation en
la dcada de 1970.
Perl
Perl es un lenguaje de programacin desarrollado por Larry Wall en 1986 para hacer su trabajo sysadmin Unix un poco ms fcil. Unifica un
montn de capacidades de diferentes herramientas mayores de Unix. Al igual que Unix, Perl es quizs mejor descrito como "feo pero rpido y
til". Perl es gratis, tiene particularmente poderosos operadores de procesamiento de cadenas, y desarrollado rpidamente un gran nmero de
seguidores y, por tanto, una gran biblioteca de secuencias de comandos CGI. Para obtener ms informacin, consulte www.perl.com o
www.perl.org .
Nota histrica: los programadores Lisp forzados a mirar el cdigo Perl lo general dicen "si hubiera justicia en este mundo, los chicos que
escribi esto ira a la crcel." En un raro caso de los programadores Lisp conseguir su deseo, en 1995 Intel Corporation persuadi autoridades
locales para enviar Randal Schwartz, autor de Aprendizaje Perl (O'Reilly 2001), a la Casa Grande durante 90 das (ms 5 aos de libertad
condicional, 480 horas de servicio a la comunidad, y 68.000 dlares de "restitucin" de Intel). Tristemente, sin embargo, parece que la
delincuencia oficial de Schwartz no estaba corrompiendo las mentes jvenes con Perl sintaxis y la semntica. La mayora de los
administradores de sistemas Unix ejecutar peridicamente un programa llamado "crack" que trata de adivinar las contraseas de usuario.
Cuando la grieta tiene xito, los administradores de sistemas envan correo electrnico diciendo "su contrasea se ha resquebrajado; por favor
cambie a algo ms difcil de adivinar." Obviamente que no necesitan las contraseas, ya que tienen acceso a la raz de todas las cajas y pueden
leer cualquiera de los datos contenidos en ellos. En una universidad, le pagan alrededor de $ 50.000 / ao para hacer esto. En Oregon si usted
hace esto para una compaa de miles de millones de dlares que ha donado recientemente 100.000 dlares a las autoridades locales de
aplicacin de la ley, que ha cometido un crimen. Ver http://www.lightlink.com/spacenka/fors/ para ms informacin sobre Estado de Oregon v.
Randal Schwartz.
Persistencia
La persistencia de datos. Un mecanismo de persistencia es algo que proporciona almacenamiento de datos a largo plazo, incluso cuando la
aplicacin que cre los datos ya no est en funcionamiento. Los ejemplos incluyen RDBMS es, documentos XML y bases de datos de archivo
plano.
RDBMS
Sistema de gestin de bases de datos relacionales. Un programa de computadora que le permite almacenar, indexar y recuperar tablas de datos.
La forma ms sencilla de ver un RDBMS es como una hoja de clculo que varios usuarios pueden actualizar. La cosa ms importante que un
RDBMS hace es proporcionar las transacciones .
Solicitud Procesador
Parte de un programa de servidor Web que decide cmo manejar una solicitud entrante. Un procesador de solicitud bien diseado permite a un
editor para exponer slo URLs abstractas , por ejemplo, "Glosario" en lugar de "glossary.html". El trabajo del procesador de solicitud es cavar
alrededor en el sistema de archivos y encontrar un documento para entregar o una secuencia de comandos para ejecutar.
RMS
Richard M. Stallman. En 1976, desarroll Emacs , editor de texto mejor y ms ampliamente utilizado en el mundo. l pas a desarrollar gcc, el
compilador ms utilizado para el lenguaje de programacin C, y gan una beca MacArthur $ 240.000 en 1990. Stallman es el fundador del
movimiento de software libre (ver www.fsf.org ), y el Proyecto GNU, que dio lugar a Linux .
Robot
En la parte tecnolgicamente optimista del siglo 20, los robots eran mquinas antropomorfas inteligentes que entienden el lenguaje humano,

En la parte tecnolgicamente optimista del siglo 20, los robots eran mquinas antropomorfas inteligentes que entienden el lenguaje humano,
interpretan escenas visuales y objetos manipulados en el mundo real. En el tecnolgicamente realista del siglo 21, los robots son programas
absurdamente primitivas que hacen cosas como "ir a buscar este ttulo del libro en tres libreras en lnea diferentes y ver quin tiene el precio
ms bajo; fallan por completo si cualquiera de las libreras en lnea ha aadido una coma para su pgina HTML ". Tambin conocido como
agentes inteligentes (un trmino intelectualmente vacua pero til para obtener la tenencia si usted es un profesor universitario). Algunos
ejemplos simples, pero muy tiles de los robots son las araas o rastreadores web que llenan la base de datos de contenido en los sitios de
motores de bsqueda pblicos tales como AltaVista.
Escalable
Un trmino de marketing utilizado para vender software defectuoso a los ejecutivos de las grandes empresas. Aplicaciones de Internet son
fundamentalmente preocupado por el procesamiento de actualizaciones de miles de usuarios simultneos. Esto es lo que los sistemas de gestin
de bases de datos fueron construidas para. Ingenieros inteligentes construyen aplicaciones Web de manera que si la base de datos est en
funcionamiento, el sitio web se marcha y funcionando. Periodo. Agregar ms usuarios al sitio requerir inevitablemente aadir capacidad al
sistema de gestin de base de datos, sin importar lo que otros programas se emplea. El ingeniero reflexivo se dar cuenta de que un sitio
demostrablemente escalable es aquella que se basa en ningn otro software adems del sistema de gestin de base de datos y el ms delgado de
capas de software en la parte superior, como Apache, servidor AOL o Microsoft IIS.
Tag Semntica
El lenguaje de marcado Web ms popular es el HTML, que prev etiquetas de formato, por ejemplo, "se trata de un titular" o "esto debe
traducirse en cursiva." Esto es til para los seres humanos la lectura de las pginas Web. Lo que sera ms til para los programas informticos
que tratan de leer pginas Web es una etiqueta semntica, por ejemplo, "los siguientes nmeros representan el precio del producto en dlares", o
"los siguientes caracteres representan la fecha de este documento fue escrito inicialmente". Ms: http://www.w3.org/RDF/ .
JABN
Simple Object Access Protocol. Un camino para un servidor Web para llamar a un procedimiento en otro, fsicamente servidor Web
independiente, y volver a consecuencia de lectura mecnica en un formato XML estandarizado. til para la construccin de una pgina web que
combina informacin dinmica sacado de varios sitios extranjeros. Tambin es til para la construccin de un nico formulario Web que se
pueden realizar varias acciones en los sitios extranjeros en nombre de un usuario. Ver http://msdn.microsoft.com/soap/ y
http://www.w3.org/TR/SOAP/ .
SGML
Standard Generalized Markup Language, estandarizado en 1980. Un lenguaje de marcado de documentos para que puedan ser analizados por
los programas de ordenador. Cada comunidad de personas que desea crear y analizar documentos deben ponerse de acuerdo sobre una
definicin de tipo de documento ( DTD ), que es en s mismo una descripcin de la mquina parsable de lo Etiquetas Una documento marcado
en marcha debe o puede tener. HTML es un ejemplo de una DTD SGML. XML es un descendiente simplificada de SGML.
Lanzamiento suave
La colocacin de un servidor en la Internet pblica, pero slo decirle a un puado de gente sobre esto da a los desarrolladores la oportunidad de
ver lo real que los usuarios interactan con el sistema, corregir errores, y ver cmo los servidores manejan una carga gradualmente creciente.
Un lanzamiento suave como este es mucho ms seguro que un lanzamiento de Big-Bang, estilo en el que el servidor se hace pblico al igual
que una campaa de publicidad masiva se transmite.
Araa
Una araa o web crawler es un programa que se encuentre navegando de forma exhaustiva todos los enlaces de una pgina y los devuelve a otro
programa para su procesamiento. Por ejemplo, todos los sitios de motores de bsqueda de Internet dependen de robots araa para descubrir
nuevos sitios Web y agregarlos a su ndice. Otro uso tpico de una araa es por un editor en contra de su propio sitio. El programa de araa se
asegura de que todos los enlaces funcionan correctamente e informa enlaces muertos.
SQL
Lenguaje de consulta estructurado. Desarrollado por IBM a mediados de la dcada de 1970 como una forma de obtener la informacin dentro y
fuera de los sistemas de gestin de bases de datos relacionales . Una diferencia fundamental entre SQL y lenguajes de programacin estndar es
que SQL es declarativa. Se especifica el tipo de datos que desea de la base de datos; el RDBMS es responsable de encontrar la manera de
recuperarlo. Un tutorial completo en SQL est disponible en http://philip.greenspun.com/sql/ .
Sitio esttico
Un sitio Web esttico comprende el contenido que no cambia en funcin de la identidad del usuario, la hora del da, o lo que otros usuarios
pudieran haber contribuido recientemente. Un sitio Web esttico se construye tpicamente usando documentos estticos en formato HTML con
grficos en formato GIF y las imgenes en formato JPEG. Colectivamente, estos se denominan archivos como estticas. Contraste con un sitio
dinmico, en el que el contenido puede ser recogida automticamente a partir de los usuarios, personalizado para el espectador, o se cambia
como una funcin de la hora del da.
TCP / IP
Transmission Control Protocol y el protocolo de Internet. Estas son las normas que rigen la transmisin de datos entre sistemas informticos.
Ellos son la base de Internet. IP es una manera de decir "enviar estos prximos 1.000 bits de Informtica de A a equipo B". TCP es una manera
de decir "enviar esta corriente de datos de forma fiable entre el equipo A y el equipo B" (que se construye en la parte superior de IP). TCP / IP
es un hermoso logro de la ingeniera, documentado muy bien en TCP / IP Illustrated, volumen 1 (W. Richard Stevens 1994; Addison-Wesley).
Transaccin
Una transaccin es un conjunto de operaciones para las que es importante que todos tienen xito o fracasan todos. En un sitio de comercio
electrnico, cuando un cliente confirma una compra, usted le gustara enviar una orden al departamento de envos y Bill simultneamente la
tarjeta de crdito del cliente. Si la tarjeta de crdito no puede ser facturado, usted quiere asegurarse de que la orden no consigue enviado. Si la
base de datos de envo no puede aceptar el pedido, quiere asegurarse de que la tarjeta de crdito no consigue facturar. RDBMSes como Oracle
proporcionan un importante apoyo para la implementacin de las transacciones.
UDDI
Universal Description, Discovery y la Integracin. Like a todo el mundo Paginas Amarillas, este es un registro basado en XML donde las
empresas pueden enumerar los servicios web que proporcionan. Ms: uddi.org .
Unix
Un sistema operativo desarrollado por Ken Thompson y Dennis Ritchie en los Laboratorios Bell en 1969, inspirado vagamente por el sistema
MULTICS avanzada construida por el MIT. Unix realmente despeg despus de 1979, cuando Bill Joy en la Universidad de Berkeley lanz una
versin para minicomputadora VAX de Digital. Unix fragmentado en una desconcertante variedad de versiones incompatibles entre s, lo que
permite que Microsoft Windows para hacerse cargo de la mayor parte del mercado de los servidores. Las variantes nica supervivientes de Unix
son Solaris de Sun y Linux .

son Solaris de Sun y Linux .


URL
Uniform Resource Locator, tambin Uniform Resource Identifier (URI). Una forma de especificar la ubicacin de algo en Internet, por ejemplo,
"http://philip.greenspun.com/seia/glossary" es la direccin URL de este glosario. La parte antes de los dos puntos especifica el protocolo (
HTTP ). Alternativas legales incluyen protocolos como HTTPS y protocolos heredados como FTP, noticias, Gopher, etc. La parte que sigue al
"//" es el nombre del servidor ("philip.greenspun.com") codificadas. La parte despus de la prxima "/" es el nombre del archivo en el servidor
remoto. Vea tambin "Resumen URL". Ms: http://www.w3.org/Addressing/ .
USENET
Un sistema de discusin roscada que hoy conecta a millones de usuarios de todo el Internet en los grupos de noticias como
rec.photo.equipment.35mm. El sistema original fue construido a finales de 1970 y corri en una de las redes de ordenadores de rea amplia ms
adelante subsumidas en el Internet.
Sistema de Control de Versiones
Un sistema para hacer el seguimiento de mltiples versiones de un archivo, por lo general el cdigo fuente.Sistemas de control de versiones son
ms tiles cuando muchos desarrolladores estn trabajando juntos en un proyecto, para ayudar a prevenir un desarrollador de sobrescribir los
cambios de otro desarrollador, y para hacer ms fcil para volver a una versin anterior de un archivo. Un excelente sistema de control de
versiones de cdigo abierto es CVS, Concurrent Versions System: www.cvshome.org .
VoiceXML
Un lenguaje de marcas utilizado para el desarrollo de aplicaciones de voz. Utilizando slo una infraestructura Web tradicional, puede crear
aplicaciones que son accesibles a travs del telfono. Con VoiceXML, puede especificar el flujo de llamadas, reconocimiento de voz y
conversin de texto a voz. Ver el captulo "voz" para ms.
W3C
El World Wide Web Consortium. El W3C es un consorcio de la industria independiente del proveedor que promueve estndares para la World
Wide Web. Estndares del W3C populares incluyen HTML , HTTP , URL , XML , JABN , VoiceXML , y muchos ms: www.w3.org .
WAP
Wireless Application Protocol. Un conjunto de protocolos de comunicacin estndar para los dispositivos inalmbricos. Ver el captulo "mvil"
para ms.
Servicio web
En estos das, el trmino servicio web normalmente se refiere a una aplicacin modular que se puede invocar a travs de Internet. Los
consumidores de servicios Web son otras aplicaciones informticas que se comunican, por lo general a travs de HTTP, utilizando estndares
XML, incluyendo JABN , WSDL y UDDI . A veces el servicio Web todava se usa en el sentido ms antiguo de la palabra, como una
aplicacin orientada al usuario como amazon.com o photo.net.
Weblog
Ver Blog .
Windows NT / 2000 / XP
Un verdadero sistema operativo que puede ejecutar los mismos programas con ms o menos la misma interfaz de usuario como el popular
sistema de Windows 95/98. Windows NT fue desarrollado desde cero por un equipo de programacin de Microsoft que era en su mayora no
contaminado por la gente que trajo la miseria al mundo en forma de Windows 3.1 / 95. Las ltimas versiones de Windows funcionan
sorprendentemente bien.
WML
Wireless Markup Language. Un lenguaje de marcado fuera de fecha para el desarrollo de aplicaciones de navegador mvil. Sustituido por
XHTML-MP .
Flujo de trabajo
La gestin de los pasos en un procesos de negocio. Un flujo de trabajo especifica lo que hay que hacer, en qu orden (a veces de forma lineal, a
veces en paralelo) tareas y quin tiene permiso para realizar cada tarea. La mayora de las tareas son realizadas por los seres humanos, pero
tambin pueden ser procesos automatizados.
WSDL
WSDL. Un camino para un servidor Web para responder, en un formato legible por mquina, la pregunta "Qu servicios ofrecen?" con dicho
servicio en ltima instancia, que debe proporcionar jabn . Ver http://www.w3.org/TR/wsdl .
WYSIWYG
Lo que ves, es lo que tienes. Un procesador de textos WYSIWYG, por ejemplo, permite a un usuario ver un documento en pantalla tal y como
aparecer en la pgina impresa, por ejemplo, con el texto en cursiva que aparece en pantalla en cursiva. Este enfoque de software fue iniciado
por Xerox Palo Alto Research Center, en la dcada de 1970 y ampliamente copiado desde entonces, sobre todo por el Apple Macintosh.
WYSIWYG es extremadamente eficaz para documentos estructuralmente simples que se imprimen una vez y nunca trabajaron en nuevo.
WYSIWYG es muy ineficaz para la produccin de documentos complejos y los documentos que deben ser mantenidos y actualizados al da
durante muchos aos. As Quark Xpress y Adobe FrameMaker facilitaron un tremendo auge en la autoedicin, mientras que Microsoft
FrontPage y herramientas WYSIWYG similares para la pgina Web de la construccin, probablemente, han obstaculizado el desarrollo de
aplicaciones web interesantes.
XHTML
La prxima generacin de HTML, compatible con los estndares XML. Aunque es muy similar a la del HTML actual, se sigue un conjunto de
reglas ms estrictas, permitiendo as una mejor validacin de cdigo automtico. Esta estructura tambin permite incrustar otros lenguajes
basados en XML como MathML (para ecuaciones) y SMIL (para multimedia) en el interior de las pginas XHTML. Ms:
www.wdvl.com/Authoring/Languages/XML/XHTML/
XHTML-MP
XHTML Mobile Profile. Un subconjunto estricto de XHTML, usado como un lenguaje de marcas para el desarrollo de aplicaciones
inalmbricas. Ver el captulo "mvil" para ms.
XML
Extensible Markup Language, una versin simplificada de SGML con caractersticas mejoradas para la definicin de los hipervnculos. Al igual
que con SGML, que resuelve el problema trivial de definir una sintaxis para el intercambio de informacin estructurada, pero no hace ninguna
de la ardua labor de conseguir que los usuarios llegar a un acuerdo sobre la estructura semntica.
Regresar a la Tabla de contenidos

eve@eveandersson.com , philg@mit.edu , aegrumet@mit.edu

Вам также может понравиться