Академический Документы
Профессиональный Документы
Культура Документы
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
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).
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.
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.
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.
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>
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.
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
--
--
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
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
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');
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;
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:
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.
(
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
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.
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.
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/.
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.
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.
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.
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.
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.
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
Anatoma macroscpica
Toda comunidad de aprendizaje online va a tener aproximadamente la misma estructura esencial:
1.
2.
3.
4.
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.
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...
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.
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
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
);
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
);
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
);
);
-- 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);
table
Wile E.
Coyote
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
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'
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.
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.
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.
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 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.
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".
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.
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.
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.
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.
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'))
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.)
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.
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.
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;
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
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.
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.
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.
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;
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)
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
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.
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
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
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.
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.
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.
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.
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
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.
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.
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;
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>
<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>
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.
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.
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 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.
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
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.
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
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.
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
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
Ejercicio 9: Ejecuta
Luego de consultar con tus docentes de prcticas, ejecuta tus mejoras planeadas.
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.
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
% 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
<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>
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:
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/.
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
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.
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>
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.
VoiceXML
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
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
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 ).
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.
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.
(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.
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.
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%')
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".
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'
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
folletn
folletn
genetotrophic 5000
hartebeest
710
inspissate
...
samoyedo
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 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.
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 .
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.
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).
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?
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.
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
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)
charset = UTF-8
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.
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
<em>Whoa!</em> .
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
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).
-- 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
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:
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:
Translate
From:
English
To:
Spanish
View:
Translation
Original
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
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)
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.
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?
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
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.
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
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
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.
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
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.
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
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
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.
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.
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.
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.
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
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>
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
<h1>Flight Plan</h1>
<h1>
Headline
Level 2
<h2>
<h2>Flight Plan</h2>
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>
Typical Rendering
Use the flight controls to keep the nose of the airplane at a
constant attitude relative to the horizon.
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
logex
I want a huge house, a big dog, and a small waist.
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>
Text
<pre>
Blockquote
<blockquote>
and 9000':
3000
6000
9000
BUF 0517 0215+01 3306-01
BOS 2218 2325+08 2321+03
ACK 2118 2012+08 1917+03
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>
Carson's Plumbing
123 Main St.
Seattle, WA 98101
Carson's Plumbing<br>
123 Main St.<br>
Seattle, WA 98101
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>
Unordered
List
<ul>
Definition
List
<dl>
Images
<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
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
<img hspace=10
align=left width=100 height=100
src="http://www.eveandersson.com/alex.jpg">
Canine-American
Canine-American
CanineAmerican
width=100 height=100
src="http://www.eveandersson.com/alex.jpg">
Tables
Here are the tags used when creating HTML tables:
<table>, </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 -->
$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
<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>
1999 $58,295
$145,400
$73,688
Profits
$73,688
$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
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
ñ
e, acute accent
é
non-breaking space
greater-than
>
less-than
<
copyright
©
pound sterling
£
piñata
café
¿Qué pasa?
a b
4 > 3
5 < 6
© 2004
£50
Typical Rendering
piata
caf
Qu pasa?
a
4>3
5<6
2004
50
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.
text-indent : 2em }
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">
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.
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.
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
Capacidades para un
miembro registrado de la Primero, Luego, Lindo
comunidad
Capacidades para un
visitante casual no
registrado
Capacidades para la
Clase de usuario N
Preferencias de diseo
Requerimientos de
performance
Restricciones sobre la
infraestructura tcnica
Planes / Recursos para
mantenimiento de la
aplicacin
Presupuesto para el
primer ao
Fechas tope
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.
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
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).
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 .