Post on 19-Mar-2016
description
Precio: 6 € (España) (IVA incluido) • AÑO XIII. 2.ª ÉPOCA • Nº 145 • UNA PUBLICACIÓN DE: REVISTAS PROFESIONALES S.L.
GRATIS
CD INCLU
IDO LA PRIMERA REVISTA DE PROGRAMACIÓN EN CASTELLANO
Noticias, javaHispano, Comunidad .NET, Libros, CD-ROM, Preguntas y Respuestas
OPINIÓNVista y no Vista
MIDDLEWAREPrimera aproximación a Windows Vista
REDESMecanismos de cache en ASP.NET 2.0
Programación JavaScript Orientada a Objetos
Técnicas avanzadas de programaciónAJAX con ASP.NET
DISEÑOSistemas SCM para la Gestión de la Configuración del Software
VÍDEO-TUTORIALDesarrollo de una bolera virtual con Java y Eclipse
CANAL PANDA Los mitos en la seguridad
Mobile WebControlsMobile WebControlsCrear un portal web para dispositivosmóviles implica tener en cuenta laheterogeneidad de los mismos y susvariables: tamaño de la pantalla yde teclado, navegador web, lenguajesoportado…
Los Mobile Web Controls de ASP.NETpermiten crear páginas web visiblesen todo tipo de dispositivos móviles,siendo transparente para el desarrolla-dor las peculiaridades de los mismos, yevitando de esta manera hacer unapágina para cada dispositivo.
Portada SoloP 145 19/12/06 08:45 Página 1
Número 145
EEddiittaa:: RREEVVIISSTTAASS PPRROOFFEESSIIOONNAALLEESS SS..LL..
solop@revistasprofesionales.com
C/ Valentin Beato 42, 3ª. 28037 - Madrid.
http://www.revistasprofesionales.com
http://digital.revistasprofesionales.com
EEddiittoorr
Agustín Buelta
••••••••••••••••••••••••••••••••••
CCoooorrddiinnaacciióónn TTééccnniiccaa--RReeddaacccciióónn
Carlos Laparra
••••••••••••••••••••••••••••••••••
MMaaqquueettaacciióónn
Alfonso Sabán Mejías
••••••••••••••••••••••••••••••••••
AAsseessoorrííaa ddee PPuubblliicciiddaadd
Felipe Ribagorda
Tel.: 91 304 87 64
DDeelleeggaacciióónn eenn BBaarrcceelloonnaa
C/ Rocafort, 241/243, 5º 1ª
Mariano Sánchez
Tel.: 93 322 12 38
••••••••••••••••••••••••••••••••••
SSuussccrriippcciioonneess
Tel: 91 304 87 64
Fax: 91 327 13 03
•••••••••••••••••••••••••••••••••••
IImmpprreessiióónn
L.M.S. Solución Gráfica
•••••••••••••••••••••••••••••••••••
DDiissttrriibbuucciióónn
Motorpress Ibérica
DDIISSTTRRIIBBUUCCIIOONN EENN MMEEXXIICCOO
DIMSA - C/ Mariano Escobedo, 218
Col. Anáhuac. 11320 México, D.F.
DDIISSTTRRIIBBUUCCIIOONN EENN AARRGGEENNTTIINNAA
Capital Federal: Distrimachisa
Interior:York Agencysa - Tlf: (5411) 433 150 51
••••••••••••••••••••••••••••••••••Quedan expresamente prohibidas la reproducción, la dis-tribución y la comunicación pública de todo o parte de lostextos contenidos en esta publicación, por cualquier medioy en cualquier soporte, y para cualquier fin, incluyendo la
realización de resúmenes de prensa comerciales, sin la au-torización expresa de esta Editorial, conforme a lo dispues-to en la vigente Ley de Propiedad Intelectual. La infracción
de la presente prohibición será perseguida penalmente.
Depósito legal: M-26827-1994
PPRRIINNTTEEDD IINN SSPPAAIINN
COPYRIGHT 30-06-2005
P.V.P. 6,00 Euros
Precio en Canarias, Ceuta y Melilla:
6,15 Euros
OPINIÓN1122 Vista y no Vista
DISPOSITIVOS MÓVILES1144 Mobile Web Controls de ASP.NET
MIDDLEWARE2222 Primera aproximación a Windows Vista
REDES3322 Mecanismos de cache en ASP.NET 2.0 (I)4400 JavaScript Orientado a Objetos (I)4466 Extensiones AJAX para ASP.NET (II)
DISEÑO5544 Sistemas SCM para la Gestión de la Configuración del Software (I)
VÍDEO-TUTORIAL6644 Bolera virtual
Y ADEMÁS. . .0044 Noticias0066 javaHispano: Virtual Ant, ICEfaces, Borland y más0088 Canal Panda: Los mitos en la seguridad1100 Comunidad .NET: ¿Preparados para un nuevo día?6600 Libros. Búsqueda de libros en Google Books6622 Preguntas y Respuestas6666 CD-ROM.
Asociación Española de Editorialesde Publicaciones Periódicas
EE DD II TT OO RR II AA LL
SS UU MM AA RR II OO
¿LE IMPORTA QUE LE HAGA UNAS PREGUNTAS?Solo Programadores quiere agradecer a todos los lectores que,
pacientemente, responden a las encuestas que se van planteando en la
zona privada. En el momento de escribir estas líneas, el 89% de las
respuestas están de acuerdo en que concentrar varios artículos de
temática similar es una buena idea. Por eso, empezamos el año 2007
dedicando bastantes páginas de Solo Programadores a ASP.NET. Para
bien o para mal, la historia de Internet y su imparable dinamismo exigen
al programador de aplicaciones web una serie de conocimientos y
habilidades que no tienen mucho que ver con la programación de
aplicaciones que se estudia en las facultades de informática. En la web,
lo “normal” es programar de modo desordenado, sin disponer ni siquiera
de tipos, empleando una gran cantidad de código para desempeñar
tareas sencillas... y sin poder aislar completamente el contenido de la
presentación, y mucho menos de la funcionalidad. ASP.NET es la
propuesta de Microsoft para ordenar este caótico (a la vez que
encantador) mundo de la programación web que, paradójicamente y pese
a todos sus inconvenientes, no hace más que crecer.
03 Editorial 145.qxd 20/12/06 11:11 Página 3
NOTICIAS
IPSOFACTO
El uso de la tecnología Voz sobre IP
Según un estudio realizado por Ipsofacto (www.ipsofacto-research.com),empresa del grupo Elogia especializada en investigación online, sólo el 24%de los internautas conoce la tecnología de telefonía Voz sobre IP, y Skype esla herramienta más empleada por los españoles.La investigación, también centrada en el uso de mensajes instantáneos, se haobtenido realizando entrevistas a una muestra de 600 individuos, representa-tiva de la población española que tiene acceso a Internet, a través de la meto-dología CAWI (Computer Assisted Web Interviewing).El objetivo de la investigación era observar el cambio que está teniendo lugaren las formas de comunicación a distancia entre individuos, gracias a la rápi-da difusión de las nuevas tecnologías en los hogares españoles.Según los resultados obtenidos, la penetración de Voz sobre IP en España, ycon ella la posibilidad de llamar por teléfono a costes muy baratos o inclusogratis, es todavía baja. Probablemente la causa sea la frecuente inclusión delcoste de las llamadas telefónicas en las cuotas mensuales de acceso a Internet,
ya sea ADSL, cable u otros. La investiga-ción, sin embargo, aún no ha llegado a sufin, y en este momento está intentandocomprender cuál es el perfil sociodemográfico y de hábitos de consumo delos usuarios de tecnologías VOIP, ya que éstos pertenecen a la categoría de los“innovadores”, un grupo siempre muy interesante para los responsables demarketing.Con respecto al software de mensajería instantánea, Microsoft Messengerdomina el mercado, pues el 89% de encuestados lo eligen como el más utili-zado. El horario en el que más se chatea está comprendido entre las 20h y las24h. Otro aspecto a destacar son las ubicaciones geográficas de las personas quechatean. El 62% de los encuestados afirma chatear con otra persona del esta-do español, el 43% suele intercambiar mensajes instantáneos con alguien desu misma ciudad y el 22% lo hace con individuos que se encuentran fuera deEspaña. De este modo, a través de las nuevas tecnologías, que cada vez noscondicionan menos en tiempo y espacio, se descubren nuevos nichos de mer-cado. Asimismo, se hace imprescindible que las empresas líderes se alimentende este tipo de estudios para descubrir las nuevas necesidades, derivadas delos nuevos espacios sociales.
http://digital.revistasprofesionales.comSOLO PROGRAMADORES nº 145 4
ICROSOFT
El lanzamiento de productos más importante de su historia
La disponibilidad para empresas de Windows Vista, 2007 Microsoft Officesystem y Exchange Server 2007 es el lanzamiento más importante en toda lahistoria de Microsoft. Diseñados para ayudar a las empresas a prosperar enun mundo caracterizado por la comunicación inmediata, el crecimiento delvolumen de información y su constante cambio, estos nuevos productosproporcionan una plataforma que, según la compañía, mejorar el modo enque las personas convierten la información en nuevas oportunidades denegocio.Estos tres productos juntos se centran en cuatro áreas críticas:� Simplificar la forma en que la gente trabaja en equipo: Desde las nue-
vas funcionalidades de Windows diseñadas para los trabajadores móvi-les y la mensajería unificada facilitada por Exchange Server 2007, hastalas herramientas de colaboración y gestión documental incluidas enMicrosoft Office SharePoint Server 2007, los nuevos productos cambia-rán la forma en que la gente trabaja en equipo, en cualquier lugar ymomento.
� Localizar la información y mejorar la perspectiva del negocio: La com-pleta integración con la plataforma y la disponibilidad de las nuevas tec-nologías de búsqueda y las herramientas de inteligencia del negocio,más potentes y fáciles de utilizar, ayudarán a los empleados a localizary utilizar la información de una manera más sencilla, agilizando el cami-no que va desde la creación de una idea hasta su ejecución.
� Ayudar a proteger y gestionar el contenido: Las herramientas de gestiónavanzada del contenido y de retención de documentos combinadas conlas funcionalidades para mejorar la protección de la confidencialidad delos datos, convierten al proceso de autorización al contenido en el puntode partida para los procesos de negocio automatizados y el cumpli-miento con las nuevas medidas regulatorias.
� Incrementar la seguridad y ayudar a reducir los costes de TI: Con unaseguridad mejorada por defecto y por diseño, las nuevas versiones deWindows, 2007 Office system y Exchange Server 2007 ofrecen un granavance en materia de seguridad, agilizando la instalación y gestión, ayu-dando a reducir los costes y permitiendo a los departamentos de TI cen-trarse en facilitar nuevas capacidades que proporcionarán una granventaja estratégica.
El impacto económico de Windows VistaSegún un informe realizado por la consultora IDC, para Microsoft este lan-
zamiento es un acontecimiento impor-tante, ya que el sistema operativoWindows para equipos cliente represen-ta el 30% de los ingresos de Microsoft yel 60% de los ingresos operativos. Pero elimpacto de Windows Vista en el merca-do va a ir mucho más allá de Microsoft,ya que también va a impulsar los ingre-sos y el crecimiento de muchas compa-ñías de TI de todo el mundo que vendenhardware, desarrollan software, propor-cionan servicios para TI o actúan comocanales de distribución.Este informe indica que:� En su primer año de distribución, IDC espera que Windows Vista se
encuentre instalado en más de 100 millones de ordenadores en todo elmundo, y que más de 30 millones de ordenadores en la región queforma parte del estudio, funcionen con Windows Vista.
� En los seis países estudiados, el empleo relacionado con Windows Vistava a alcanzar más del 20% de los trabajos en TI en su primer año de dis-tribución.
� Aunque una gran parte de este empleo cambiará con respecto al rela-cionado con Windows XP, más del 50% del aumento en el número depuestos de trabajo en TI se va a ver impulsado por Windows Vista.
� Por cada euro de ingresos que Microsoft obtenga de Windows Vista enel año 2007 en los seis países estudiados, el ecosistema más allá deMicrosoft va a recoger casi 14 euros en ingresos. En el año 2007 esteecosistema debería obtener más de 32.000 millones de euros (40.000millones de dólares) en venta de productos y servicios relacionados conWindows Vista.
� En esta región formada por seis países, más de 150.000 compañías deTI que producen o distribuyen productos o servicios que funcionan conWindows Vista van a emplear más de 400.000 personas en el año 2007,y otras 650.000 van a ser contratadas en empresas que utilizan TI.
Aunque el estudio se ha centrado en seis países europeos (Dinamarca,Francia, Alemania, Polonia, España y Reino Unido), esta región representamás del 65% del gasto en TI en la zona económica de la UE (es decir, la UEmás Croacia, Noruega, y Suiza). La adopción rápida y generalizada deWindows Vista significa que su lanzamiento no sólo va a afectar aMicrosoft, sino que también va a tener un impacto positivo en las econo-mías locales de Europa.Más información en http://www.microsoft.com/spain.
Kevin Johnson, co-presidentede la División de Serviciosy Plataformas de MicrosoftCorporation y Rosa Mª García,presidenta de Microsoft Ibérica,en la rueda de prensa celebradaen Madrid.
04-5 Noticias.qxd 20/12/06 11:16 Página 4
SUN MICROSYSTEMS
Java Platform Standard Edition 6 y NetBeans 5.5
Sun Microsystems ha anunciado la disponibilidad de Java Platform StandardEdition 6 (Java SE 6). Este lanzamiento es el resultado de dos años de trabajo dedesarrollo, que han implicado un proceso de revisión abierto a la comunidad yuna estrecha colaboración entre los ingenieros de Sun y más de 330 desarrolla-dores externos . El software Java SE 6 es compatible con las versiones previas dela plataforma Java, lo que garantiza que los desarrolladores puedan aprovecharlos conocimientos adquiridos sobre otras versiones, y protege las inversionesanteriormente realizadas en tecnologías Java. La potente combinación de la nueva versión de Java SE y el entorno de desarrollointegrado (IDE) NetBeans 5.5, que soporta las nuevas características de Java SE6, proporciona a los desarrolladores un marco de trabajo fiable, abierto y com-patible para crear y suministrar aplicaciones basadas en Java, más rápida y fácil-mente que nunca. NetBeans 5.5 es el primer y único IDE disponible de forma gratuita que ofreceun soporte completo a Java EE 5. NetBeans 5.5 contiene nuevas características,tales como un API Java Persistence, herramientas de productividad JAX WS 2.0y mejoras en el NetBeans GUI Builder (antes conocido como Proyecto Matisse). Además, Sun ha lanzado simultáneamente cinco paquetes de valor añadidopara NetBeans 5.5:
� NetBeans Enterprise Pack: añade al IDE todas lasherramientas necesarias para escribir, probar, securizary depurar aplicaciones SOA empleando XML, BPEL yServicios Web Java.
� NetBeans Mobility Pack: soporte para JSR-226 quepermite a los desarrolladores utilizar gráficos vectoriales escalables en susaplicaciones Java ME.
� NetBeans Profiler 5.5: soporte para diversos Runtime Environments y facili-dades en la tarea de crear perfiles Enterprise Java Beans.
� NetBeans Visual Web Pack (preliminar): desarrollo visual de aplicaciones webbasadas en estándares y JavaServer Faces compatibles con AJAX.
� NetBeans C/CC++ Pack (beta): aplicaciones C/CC++. Los desarrolladoresC/CC++ pueden usar el IDE NetBeans junto a sus propias herramientas ycompiladores.
Sun ofrece soporte para NetBeans a través de su programa de servicios SunDeveloper Expert Assistance. Más información y descargas sobre Java SE 6 en http://java.sun.com/javase/6.El IDE NetBeans se puede descargar junto a Java SE 6 enhttp://java.sun.com/javase/downloads o, de forma separada, en http://www.netbeans.org.Los desarrolladores que quieran unirse, sin coste alguno, al programa SunDeveloper Network, pueden registrarse online en la dirección http://developers.sun.com/register.
NOTICIAS
http://digital.revistasprofesionales.com SOLO PROGRAMADORES nº 1455
BSA
10 consejos para una experiencia on line segura
Existe un alto riesgo de que el software a la venta en sitios web de subastas seailegal, a pesar de los continuados intentos, tanto de los proveedores de softwa-re como de los propios sitios web, de atajar el problema. Un estudio publicadopor IDC, titulado “Los riesgos de obtener y utilizar software pirateado: 2006”,revela que, del software a la venta en un conocido sitio web de subastas, sólo el49% era original, el 39% era fraudulento y el 12% restante venía con compo-nentes que eran fraudulentos o se trataba de software original que había sidomanipulado. También existe un serio riesgo legal, dado que la piratería de soft-ware va contra la ley. Y, sobre todo, los usuarios no podrán tener derecho a reci-bir actualizaciones del producto, soporte técnico, manuales ni documentación.No tendrán ninguna garantía de calidad o fiabilidad del software y, además, losconsumidores dejarán su red expuesta a virus y fallos de seguridad.Ante esta situación, BSA propone diez consejos prácticos a los consumidores:11.. Confía en tu instinto. Comprueba el precio fijado por el vendedor on line con
respecto al valor estimado del software en las tiendas. Tanto si es vendidocomo nuevo o usado, si el precio del producto parece “demasiado baratopara ser verdad”, puede tratarse de un producto fraudulento.
22.. Asegúrate de que es auténtico. Desconfía de productos de software que noincluyen pruebas de autenticidad, como discos originales, manuales, licen-cia, políticas de servicio o garantías.
33.. Lee la etiqueta. Ten cuidado con productos que no parecen originales, comopor ejemplo los que lleven etiquetas escritas a mano.
44.. Cuidado con los Back-ups. Ten especial cuidado con evitar a los vendedoresque te ofrecen hacer copias de back-up. Es un claro indicio de que el soft-ware es ilegal. También asegúrate de comprobar la versión del software.Mucha gente se ha quejado de haber recibido versiones promocionales oeducativas cuando creían haber comprado el producto de software com-pleto o estándar.
55.. Duda de las compilaciones. Ten cuidado con las compilaciones de títulos desoftware de diferentes fabricantes en un mismo CD. Cuando compras másde un programa de software, asegúrate de que cada programa va en undisco separado. El hecho de recibir un solo CD cuando se han adquirido doso más programas diferentes, es una señal segura de que han sidopirateados.
66.. Consigue la dirección del vendedor, si es posible. Recuerda que si no puedescontactar con el vendedor después de hacer la compra, puedes no tenerrecurso si el producto resulta ser pirata. BSA recibe numerosos reportesacerca de vendedores que son inaccesibles desde el momento en que hancobrado la venta. Por lo tanto, procura obtener los datos de contacto delvendedor.
77.. Guarda los recibos. Guarda toda la información que te sea posible acerca dela transacción y del vendedor. Imprime una copia de tu orden de compra yconfirmación de la venta y archívalas. Se trata de un paso importante quete puede ayudar a protegerte hasta que hayas verificado que el softwareadquirido es legítimo. Esta información te ayudará para argumentar tu casosi el producto es pirata y necesitas emprender alguna acción con respectoal sitio web de subastas, el sitio facilitador del pago o el desarrollador delsoftware.
88.. Ten cuidado al cruzar la frontera. Toma precauciones cuando trates con ven-dedores de software de otros países. La distancia física, las diferencias en lossistemas legales y otros factores podrían complicar las cosas si hay proble-mas con la transacción.
99.. Busca una marca de confianza. Busca una marca de confianza de unaorganización reconocida para asegurarte de que el vendedor on line es fia-ble y tiene una probada trayectoria de clientes satisfechos. En caso de duda,busca información en la web acerca del sitio en cuestión para determinarsu legitimidad.
1100.. Haz tus deberes. Antes de hacer una compra, investiga todo lo que pue-das acerca del vendedor o fabricante. Comprueba la clasificación y el pres-tigio del vendedor o los comentarios de la gente cuanto estés en un sitiode subastas. Los vendedores más legítimos tendrán gran número de res-puestas de otros usuarios, y si son bien reputados y fiables, casi todas seránpositivas. Es una buena señal de lo que puedes esperar de tu transacción.
Los efectos de utilizar software pirata pueden ser muy serios. Si creesque has sido víctima de la piratería de software, por favor, compartetu experiencia con BSA para ayudar a otros consumidores a proteger-se y tener una experiencia segura cuando compran on line.Los testimonios pueden ser enviados a www.bsacybersafety.com/fraud.Para más información acerca de cómo protegerse y disfrutarde todos los beneficios de comprar on line, puedes visitar el sitio deciber seguridad de BSA en www.bsacybersafety.com
04-5 Noticias.qxd 20/12/06 11:16 Página 5
SOLO PROGRAMADORES nº 145 6 http://digital.revistasprofesionales.com
JAVAHISPANO
Actualidad Java de la manode javaHispanoActualidad Java de la manode javaHispano
Virtual Ant permite construir scripts para la popular herramientaAnt de Apache sin necesidad de escribir ni una sola línea de XMLo aprender a emplear asistentes. Virtual Ant crea un sistema deficheros virtual, que replica el sistema de ficheros de la máquinaen la cual se ejecuta, para el cual proporciona una interfaz simi-lar al explorador de Windows. En ese sistema virtual el progra-mador mueve ficheros, copia, crea archivos .jar mediante unmenú contextual, etc., sin que todas estas acciones afecten alsistema real.Virtual Ant graba en una macro todas las acciones. Una vez elprogramador ha terminado de interactuar con el sistema de ficheros la herramienta genera un script de Ant que reproduce todaslas acciones realizadas. También es posible cargar scripts Ant en la herramienta y ejecutarlos sobre el sistema de ficheros virtual,sin modificar el sistema de ficheros real, para ver sus efectos.En el momento de escribir estas líneas la herramienta se encuentra en versión alfa. Cuando esté terminada, Placidsystems, la com-pañía que ha desarrollado la herramienta, la pondrá a la venta a un precio que probablemente ronde los 20 $ por usuario.
Virtual Ant, la forma más simple de crear tareas de Ant
Finalmente Borland no ha encontrado un compradorque le satisfaga para la división de los IDE de la com-pañía y ha decidido crear a partir de ella una nuevacompañía, CodeGear. Esta compañía será lo más inde-pendiente posible de la matriz ya que, según fuentesBorland, los IDE no guardan relación con la línea denegocio que pretende seguir la matriz.CodeGear ya ha anunciado el producto JBuilder 2007, la primera versión del entorno de desarrolloque no está basada en la plataforma desarrollada por Borland sino en Eclipse. Está por ver el éxitode este producto ya que, si bien JBuilder siempre ha sido una herramienta excelente y todavía cuen-ta con muchos leales seguidores, el entorno tendrá que producir un incremento considerable en laproductividad para justificar el gasto de varios miles de dólares frente al uso de alternativas gratui-tas como Eclipse o Netbeans.
Borland escinde una rama de la compañía que se hará cargo de la división de los IDE
ICEfaces es una librería de componentes JSFque hace un uso exhaustivo de técnicas Ajaxpara mejorar la experiencia del usuario. Seintegra con prácticamente todos los IDE consoporte para JSF (Eclipse, Java Studio Creator,JDeveloper, Rational Developer y WorkshopStudio) y, para muchos, se trata de la mejorlibrería de componentes JSF del mercado.
Hasta hace poco ICEsoft distribuía dos versiones de la librería. Una gratuita, ICEFaces CommunityEdition, y otra de pago que incluía mejoras orientadas a aplicaciones con una gran carga de traba-jo, así como herramientas de administración. Recientemente toda la funcionalidad de la versión depago se ha liberado bajo licencia Mozilla e IceSoft sigue vendiendo servicios de consultoría, sopor-te y formación en torno a esta librería.
ICEsoft libera ICEfaces bajo licencia Mozilla
06-7 Javahispano.qxd 20/12/06 11:21 Página 6
SOLO PROGRAMADORES nº 1457http://digital.revistasprofesionales.com
JAVAHISPANOActualidad Java de la mano de javaHispano
Sobre el autor
Abraham Otero (abraham.otero@javahispano.org) es responsable de calidad y miembro de la junta de javaHispano.
OPINIÓN
Ant y/o Maven 2.x
Sí, habéis leído bien. En el título pone "y/o", enlugar de “versus”, y a continuación explicaréporqué. Ant se ha convertido en un herramien-ta de facto para la construcción de proyectosJava. Ant ha cumplido, y cumple muy bien, lafinalidad para que fue concebida. Con Antpodemos definir nuestro proceso de compila-ción, empaquetado, distribución y otras labo-res típicas asociadas al ciclo de vida de undesarrollo de software. Sin embargo Maven,partiendo de una serie de conceptos que lacaracterizan, como por ejemplo su modeloconceptual para proyectos (P.O.M.) o la pro-puesta para organizar el código fuentemediante una estructura de directorios, nosayudará a mantener y organizar nuestros pro-yectos.Sería injusto comparar Ant y Maven porqueestas herramientas nos ayudan a gestionarnuestros proyectos a niveles distintos aunque,si únicamente necesitamos una herramientade construcción, ambas son herramientas quehan sabido resolver perfectamente las necesi-dades de estos procesos. Si, además, necesita-mos una gestión del proyecto a más alto niveldonde definir recursos, dependencias, perfiles,o generar un sitio web con toda la informaciónaportada, Maven es nuestra opción.Para los proyectos que ya están empleandoAnt, cabe resaltar que pueden ser migradoscon cierta comodidad, porque desde Maven sepuede usar Ant gracias a uno de sus plugins.Para los proyectos que estén comenzando creoque es una buena oportunidad para definirloscon Maven.
MMaannuueell JJ .. RReecceennaa SSoottoo ((rreecceennaa@@eeii ii ..uuss..eess ,,
wwwwww..mmaannuueellrreecceennaa..ccoomm[[//bblloogg]])) ..
Recientemente se ha liberadola versión 3.0 de Jlgui, elreproductor de música imple-mentado en Java más popular.Este clon de WinAmp soportauna gran cantidad de forma-tos de audio (WAV, AU, AIFF,MP3, OGG VORBIS, FLAC,MONKEY's AUDIO y SPEEX)gracias al uso de la libreríaJLayer. También permiteimportar listas de reproduc-ción en los formatos M3U yPLS, y puede emplear losskins compatibles con WinAmp 2.0. Entre las novedades de la ver-sión 3.0 se encuentran mejo-ras en el aspecto visual,soporte de nuevos formatos
de audio, más menús contextuales y la capacidad de realizar búsquedasen la lista de canciones. El reproductor, al igual que la librería que per-mite reproducir los distintos formatos de audio, se distribuye bajolicencia LGPL.
Versión 3.0 del reproductor de música Jlgui
MobileZoo (http://mobilezoo.biz) esun portal que pre-tende convertirseen un "zoológico"que contenga to-dos los teléfonosmóviles Java MEdel planeta, enten-diendo por zooló-gico un lugar alcual uno puede ira contemplar to-das las "especies"y aprender sobreellas. Los creadores del portal han diseñado una aplicación Java ME que se des-carga gratuitamente y que, al ejecutarse en un terminal, lanza una serie de prue-bas de todo tipo sobre él, recolecta los resultados y los envía a la base de datosdel "zoológico".Entre estas pruebas están la capacidad de proceso y la memoria disponible en elterminal, el soporte de las diferentes API, información sobre la conectividad, etcé-tera. El portal también recolecta datos estadísticos, como por ejemplo el porcen-taje de terminales que soportan una determinada API o funcionalidad, la cota demercado de cada fabricante de terminales o los modelos que vende cada com-pañía. Ambos tipos de información pueden resultar extremadamente valiosospara decidir a qué sector del mercado enfocamos nuestras aplicaciones.
MobileZoo, un zoológico de teléfonos móviles Java ME
06-7 Javahispano.qxd 20/12/06 11:21 Página 7
SOLO PROGRAMADORES nº 145 8
CANAL PANDA
Los mitos en la seguridadLos mitos en la seguridad
http://digital.revistasprofesionales.com
Y, dentro del mundo de la seguridad informá-
tica, existen también esos extraños mitos.
Uno de ellos, con un fundamento real, está
cada vez más desvirtuado: los creadores de
códigos maliciosos son buenos programado-
res.
Hace tiempo, cuando los virus estaban en su
prehistoria, este mito podía ser cierto. Para
que un programa pudiera multiplicarse auto-
máticamente sin que un usuario se diera
cuenta y sin que los también prehistóricos
programas de seguridad lo detectaran, debía
haber sido creado por un buen programador.
Era necesario un gran conocimiento de los
sistemas, de las posibilidades que brindaban,
además de poseer una gran capacidad de
innovación.
Sin embargo, hoy en día estos programadores
han dejado de ser esas “estrellas” de la codi-
ficación informática. Los códigos maliciosos
son cada vez más burdos, con menos innova-
ción y más “chapuceros”.
El caso de Gaobot.AAF
La afirmación de que los creadores de código
malicioso son malos programadores (o por lo
menos mucho menos buenos de lo que se
piensa) no es gratuita, ya que existen méto-
dos para analizar los programas y ver cómo
han sido construidos. Uno de ellos, muy utili-
zado por su resultado visual, es la represen-
tación de los distintos elementos de un pro-
grama mediante grafos. Estos grafos son
líneas que relacionan cada subrutina del
código, de manera que un programa sencillo
y bien construido tendría un grafo simple y
claro, mientras que un programa sin organi-
zación interna y sin una adecuada sistema-
tización ofrecerá un grafo muy complejo y
desordenado.
Además, dos programas similares ofrecerán
grafos también similares, lo que ha llevado a
PandaLabs, el laboratorio de detección de
malware de Panda Software, a utilizarlos para
establecer similitudes entre distintas varian-
tes de un mismo código malicioso, ya que las
llamadas a una misma función dentro de dis-
tintos programas se muestran gráficamente
en los grafos.
Cuando PandaLabs hizo el análisis de un “bot”
(Gaobot.AAF), se sorprendieron con su grafo:
no solo por su espectacularidad (le llamaron
“La Estrella de la Muerte”, por su parecido a la
de “La Guerra de las Galaxias”) sino por su
extraña complejidad.
¿Por qué se obtiene este extraño y complejo
dibujo? Sencillamente, porque el código
fuente original de la familia de bots Gaobot
fue puesto a disposición de los creadores de
El mundo de la informática estálleno de mitos y de leyendasdifundidas por correo electrónico osimplemente comentadas boca aboca. Estas leyendas no son solo losfamosos hoaxes o las cartas encadena, sino que se dan por hechouna serie de cosas que no suelen serciertas, pero son tan difíciles deprobar que se dan por ciertas sincomprobación ninguna.
FERNANDO DE LA CUADRA
Figura 1. Análisis del bot Gaobot.AAF,denominado “La Estrella de la Muerte” porPandaLabs.
08-9 Panda.qxd 20/12/06 11:23 Página 8
SOLO PROGRAMADORES nº 1459
CANAL PANDA
http://digital.revistasprofesionales.com
Los mitos en la seguridad
Sobre el autorFernando de la Cuadra (Fdelacuadra@pandasoftware.com) es editor técnico internacional de Panda Software (http://www.pandasoftware.com).
código malicioso, y cada uno de ellos
hizo nuevas variantes. Pero esas varian-
tes no estaban optimizadas, por lo que la
complejidad iba creciendo en cada
variante.
En lugar de demostrar su capacidad
como buenos programadores, los crea-
dores de variantes de Gaobot únicamen-
te demuestran que, efectivamente, el
mito del gran conocimiento que tienen,
son únicamente aprendices de ladrón
mediante copias de código ajeno.
Los virus “indetectables”
Otro mito muy difundido, y alimentado
por numerosos correos electrónicos fal-
sos es que existen virus (o gusanos, o
troyanos, etc.) que no pueden ser
detectados por ninguna solución de
seguridad. Y desgraciadamente, aunque
sea mentira, en ocasiones se airea este
mito.
Hace poco apareció la noticia de que un
estudiante había creado un troyano con
el cual grababa imágenes de las webcam
de compañeros de instituto y luego les
chantajeaba con el material grabado. Se
decía que el troyano creado era “indetec-
table”.
La afirmación de que un troyano es inde-
tectable contradice esa información,
según la cual las autoridades crearon un
sistema para detectar y eliminar ese
código. ¿Es indetectable o no?
El problema radica en la dificultad para
detectar un ejemplar determinado de
troyano. La mayoría de los fabricantes de
soluciones antivirus dependen de las
muestras de los códigos maliciosos para
poder elaborar una rutina de detección y
eliminación, por lo que es necesario que
se den dos circunstancias:
11 .. El código malicioso debe despertar
sospechas en un usuario. Si no se
muestra un mensaje, o si no se lleva a
cabo alguna acción especial en el
ordenador que haga al usuario darse
cuenta de que algo extraño pasa, el
sistema permanecerá infectado ya
que no podrá mandarse una muestra
a los laboratorios para su análisis.
22 .. El código malicioso debe tener una
cierta propagación. De esta manera
aumenta la probabilidad de que algu-
no de los usuarios afectados notifi-
que a los laboratorios la aparición del
código.
En el caso de este troyano no se dieron
ninguna de las dos, ya que el troyano no
mostraba absolutamente ningún mensa-
je ni daba pistas que pudieran delatarle,
prácticamente tal y como hacen todos
los caballos de Troya. Y al estar distribui-
do en muy pocos sistemas (únicamente
los de los compañeros de clase del autor
de troyano), tampoco se pudo sospechar
de él.
Por lo tanto, nos encontramos frente a
una muestra de la situación del malware
hoy en día: ejemplares reducidos y
escondidos. Así las empresas antivirus no
los detectarán, tal y como reza la noticia.
Sin embargo, esa afirmación no es com-
pleta: no los detectarán hasta que no se
conozcan.
A pesar de todo, este problema surge
únicamente con los sistemas antiguos de
detección de códigos maliciosos. Estos
sistemas confían ciegamente en los
datos almacenados sobre programas
maliciosos, sin tener otros sistemas de
detección. Así, todo aquello que no esté
en su base de datos de firmas de progra-
mas, será considerado adecuado.
La tecnología más moderna contra códi-
gos maliciosos evita estos problemas, ya
que en lugar de ceñirse exclusivamente
en el conocimiento previo de los códigos
maliciosos, los busca en función de su
comportamiento. Así, un programa que
quiera llevar a cabo alguna acción mali-
ciosa en un ordenador, será detenido no
porque se le conozca, sino por las accio-
nes que iba a llevar a cabo.
Mientras que los usuarios sigan confian-
do en soluciones parciales y anticuadas
para la detección de virus y otros pro-
gramas malignos, no podrán protegerse
adecuadamente ya que para ellos segui-
rán existiendo “códigos indetectables”,
en lugar de simplemente “programas
peligrosos no conocidos hasta el
momento”.
Gran crecimiento del número de troyanos
PandaLabs, laboratorio de detección de virus de
Panda Software, ha detectado un crecimiento
en el número de troyanos a finales del 2006.
Los troyanos son códigos maliciosos que per-
manecen en un sistema llevando a cabo diver-
sas tareas sin que el usuario se dé cuenta de
ello, por lo que su peligro es muy elevado. En la
actualidad, y debido a la nueva dinámica que
los autores de malware han iniciado, estos tro-
yanos tienen como objetivo en su inmensa
mayoría, el robo de las contraseñas utilizadas
por los usuarios para los servicios financieros.
Los siguientes códigos maliciosos más detecta-
dos por PandaLabs son los Bots (de la palabra
"robot") y Backdoors, sistemas que también
permiten el uso fraudulento de un sistema. El
número de estos dos últimos tipos de malwa-
re, aunque también elevado, es muy inferior al
de los troyanos, y su frecuencia de aparición
disminuye o se mantiene durante el año 2006.
Según Luis Corrons, Director de PandaLabs,
este aumento de troyanos "pone en evidencia
a los autores de malware, que lejos de intentar
conseguir elementos que les den fama, buscan
únicamente enriquecerse con los datos de los
usuarios". Los sistemas de detección de códigos
maliciosos de Panda Software también pueden
detectar troyanos, "incluso sin conocerlos pre-
viamente, ya que las tecnologías TruPreventTM
de Panda Software están preparadas para pro-
teger contra cualquier código, sean virus, gusa-
nos o, como este caso, los muchos troyanos
que venimos encontrando".
Además, los troyanos no sólo siguen siendo los
primeros, sino que continúan aumentando su
ventaja con respecto al resto de tipos de mal-
ware, sobre todo frente a categorías en declive,
como los virus clásicos, programas potencial-
mente no deseados, herramientas de hacking,
etc.
En el otro extremo de la tabla, encontramos en
claro retroceso a los dialers. Estos programas
alteran los números telefónicos de conexiones
por módem y tienden a desaparecer. Tanto el
aumento de conexiones de banda ancha como
la proliferación de redes Wi-Fi hacen que las
conexiones por módem sean cada vez menos
utilizadas y por tanto los dialers pierdan su
campo de acción.
08-9 Panda.qxd 20/12/06 11:23 Página 9
SOLO PROGRAMADORES nº 145 10 http://digital.revistasprofesionales.com
¿Preparados para un nuevo Día?¿Preparados para un nuevo Día?
COMUNIDAD .NET
Sin duda alguna “estamos en un Universo que
se está expandiendo” y, paradójicamente,
podríamos definir dicha expansión como la
fuerza que empuja a los objetos de un medio
a desplazase por su espacio en una dirección
y a una velocidad marcada por el impulso
aplicado inicialmente. No es casual entender
que muchas de las observaciones que efec-
tuamos a simple vista reflejan nuestras reali-
dades más cotidianas. Así pues, podríamos
deducir que la anterior es una definición de
objetivo, a partir de un origen, donde el acon-
tecimiento de un hecho predetermina el des-
tino temporal en un espacio futuro.
La Escalera del Universo Estático
Muchos de nosotros nos quejamos constan-
temente del frenético ritmo que nos impo-
nen los avances tecnológicos, porque quizás
preferimos un modelo estático que pertene-
ce a una época en la que después de una
dilatada carrera, subida peldaño a peldaño,
terminábamos acomodándonos a una situa-
ción donde los conocimientos previos adqui-
ridos nos ayudaban a desarrollar una muy
larga y tranquila vida profesional, siendo
considerada por algunos como el estadio
ideal para llegar sin complicaciones a una
buena jubilación.
Con la Teoría de las Cuerdas ¡el conocimien-
to es Dinámico! Los más dedicados y con
espíritu más vocacional, y en función de
ciertas condiciones, consiguen llegar a un
segundo estadio. Este nivel no es que permi-
ta grandes desahogos económicos ni mayo-
res reconocimientos sociales, pero marca
realmente la diferencia entre los que suben
peldaños de escaleras y los que forman parte
de una entropía cuya curva de aprendizaje se
dilata logarítmicamente respecto al
espacio/tiempo.
Dicho esto…
Visto y no visto llega el Vista y con él la
apuesta por los sistemas operativos x64, su
HyperTheading, su Multi Core con paralelis-
mos de ejecución o la brutal irrupción de
aplicaciones para dispositivos móviles, la
unificación de criterios y la integración
para realizar todo ello desde un único
entorno de programación… ¡Ya no nos
queda la menor duda! Somos testigos de
una gran explosión tecnológica cuya ener-
gía guiará nuestra expansión desplazándo-
nos en una dirección y a una velocidad ver-
tiginosa. Pero, al margen de productos,
multinacionales, intereses comerciales,
estrategias y políticas, estamos aquí para
visionar un nuevo espacio donde todo ese
conjunto de acciones se convierte en la
tecnología que nos empuja a expandir
nuestro conocimiento mas allá de los lími-
tes digitales. No debemos esperar a maña-
na para trepar por la cuerda; en nuestro
oficio, el mañana es llegar tarde. Quizás
nos dé pereza empezar, pero os puedo ase-
gurar que agarrarnos a esa cuerda nos va a
impulsar y permitir conocer nuevos univer-
sos de conocimiento inexplorados, cual
enorme burbuja que asoma, asombra y
cautiva pero que sin duda termina apasio-
nándonos. O sea, que bienvenidos a la cuer-
da y no tardéis en uniros a ella si
queréis evitar que la burbuja termine aplas-
tándonos!
Justo después de saborear lasdulces mieles del Framework 2.0,nos empiezan a llegar ondas de loque esta por venir… Una vezmás, el gran compromiso yesfuerzo de Microsoft en aras deconseguir afianzar una plataformamadura y establela abre ladisyuntiva. ¿Qué hago?, ¿empiezoo me espero?
PEP LLUIS BAÑO (Presidente de SpainNet, miembro del comité de INETA-Latam y Microsoft MVP Visual Developer)
10-11 Spain net 20/12/06 11:26 Página 10
SOLO PROGRAMADORES nº 14511http://digital.revistasprofesionales.com
COMUNIDAD .NET¿Preparados para un nuevo Día?
Universo 2007
Papá Noel y los Reyes nos dejarán este
año una larga lista de tecnologías.
Quizás no todas verán la luz de una
manera inmediata, pero vale la pena
empezar a indagar y hablar sobre ellas o
de sus nombres. Por supuesto, vamos a
tener Windows Vista con su recién
estrenado Office 2007 System, respal-
dado con productos de gran calibre
como Exchange Server 2007, Sharepoint
Server 2007 y una renovada apuesta en
la infraestructura de protección. Con
nuevos conceptos como la “UC”
Unificación de Comunicaciones con
Office Communications Server 2007 así
como la potenciación de herramientas
de visualización de datos tales como el
Visio 2007, sin olvidarnos de la nueva
moda del BI “Bussines Intelligence”,
cuyos objetivos para las empresas se
concentran en permitir el control, acce-
so, visualización e interacción en gene-
ral sobre toda la información de su
negocio, totalmente centralizada desde
un punto único.
Nuestra faceta más desarrolladora se
completará con un buen avance y un
importante cambio de mentalidad en la
que el objetivo primordial es mejorar la
experiencia del usuario. Para ello, Vista
nos trae nuevas formas de conectar la
información con los usuarios, con bús-
quedas integradas y mejores interfaces.
En ese sentido, Vista y 2007 Office
System van a trabajar juntos al servicio
de los desarrolladores, modernizando el
UI con 2D, 3D, enlace a datos, anima-
ción, texto, contenidos media, etc., con
un nuevo lenguaje de definición XAML
que básicamente aportara flexibilidad,
simplicidad y prestaciones desconocidas
hasta ahora en nuestros diseños.
¡Bienvenido también a la nueva era del
diseño!
Por lo tanto, resumiendo y en líneas
generales, disponemos de cuatro nuevos
pilares que conforman el Framework 3
incluido en Vista. La construcción,
mejora y diferenciación en la experien-
cia del interfaz de usuario en Windows
Vista estará fundamentada en:
� WWPPFF,, Windows Presentation Fundation.
La construcción de “aplicaciones conecta-
das” (para el Desarrollo de aplicaciones dis-
tribuidas) irá a cargo de:
� WWCCFF,, Windows Communitacion Fundation.
Para el modelado declarativo en procesos
de negocio tenemos:
� WWWWFF,, Windows WorkFlow Fundation.
Finalmente, en cuanto a seguridad, se
incorpora un nuevo espacio para gestión de
Entidades llamado:
� CCaarrddSSppaaccee.
Estas cuatro pinceladas tienen que ser una
buena pista para adecuar la velocidad y
dirección que marca esta ola de expansión,
sin miedos ni complejos. Después del pasa-
do TechEd en Barcelona, estoy convencido
que nuestra comunidad de desarrolladores
(y por extensión la Latinoamericana) debe
despertar de su largo letargo y abrirse
camino no solo en estas nuevas tecnologí-
as, sino anticipándose a las futuras y llegar
así a conseguir presencia con luz propia
que le corresponde.
Por si fuera poco, y con todos estos cas-
cabeles sonando, ahora más que nunca
disponemos de una increíble comunidad
de desarrolladores y usuarios, unidos en
pro de compartir todo ese conocimiento
que se expresa como energía en forma de
movimiento. Estos son realmente los
exponentes de esta nueva fuerza, y en
ellos podemos encontrar los ingredientes
necesarios que nos ayuden a trepar. No
olvidemos que podéis beneficiaros de
todas las actividades de lanzamiento que
estas comunidades ponen a vuestra dis-
posición a través de sus charlas y eventos
en Alicante, Murcia, Barcelona, Madrid,
Castilla y la Mancha, Galicia, Navarra,
Málaga, Cantabria, Huelva, La Coruña
entre otros.
Podréis conocer más sobre ellos en
http://www.microsoft.com/spanish/msdn/
community/g_usuarios_esp.mspx o en
http://europe.ineta.org/Countries/Spain/
Home/tabid/235/Default.aspx.
Por lo que respecta a Latinoamérica,
podréis encontrar un huracán de grupos
dispuestos a liderar estas reuniones y acti-
vidades en http://www.inetalatam.org/
default.aspx.
Para terminar, os recomiendo estar al día
sobre la convergencia entre .NET y Mono, a
la vista de los acuerdos alcanzados entre
Novell y Microsoft. Podéis leer sobre ella en
http://www.novell.com/linux/microsoft/
press-conference_transcript.html y en
http://www.microsoft.com/presspass/press/
2006/nov06/11-02MSNovellPR.mspx.
No deja de ser interesante y un buen
augurio, al menos hasta el 2011, para
algunos de los que solo somos programa-
dores.
Mis mejores deseos para todos los lectores
en este 2007. ¡Feliz año!
La propia escalera del conocimiento ayuda a subir peldaños.
10-11 Spain net 20/12/06 11:26 Página 11
SOLO PROGRAMADORES nº 145
Parece que al final, y salvo catástrofe, la espera del
nuevo Windows Vista ha llegado a su fin. Todas las
agencias de comunicaciones se han hecho eco de
que Microsoft tiene previsto lanzar las seis versio-
nes definitivas (¡seis!) de su nuevo y revoluciona-
rio sistema operativo para finales de enero del
2007, si bien ya está disponible en sus versiones
para empresas (para los que posean licencias cor-
porativas) o para los que estén dispuestos a com-
prar más de cinco copias en algunas tiendas espe-
cializadas.
Aunque, como es lógico, existen muchos “Vista-
escépticos”, se dice en los mentideros de la red que
puede suponer una revolución como lo fuera en
su momento la aparición de Windows 95. Prueba
de ello es que la compañía de Bill Gates ha hecho
un gran esfuerzo mejorando la seguridad de su
nuevo sistema operativo destacando las actuali-
zaciones de la biblioteca de Windows, las medidas
antispyware o sus nuevas y llamativas caracterís-
ticas gráficas (basadas en transparencias o el esti-
lo llamado “aero”) y un poderoso motor de bús-
queda. Pero a esto habrá que sumar la encripta-
ción del disco duro, el nuevo y rediseñado Internet
Explorer 7, el potente buscador de escritorio, el
control parental, mejores políticas de backups
para facilitar los procesos a los usuarios o los sis-
temas colaborativos P2P.
Todo ello, eso sí, con varios años de retraso (ten-
dría que haber sido lanzado en 2005) y con toda
una serie de opciones eliminadas con respecto a la
propuesta que se hiciera en su momento (atrás
quedaron características muy ambiciosas, como
por ejemplo un nuevo sistema de escritura binaria
que permitía una nueva compleja organización,
búsqueda e intercambio de información), lo que
no evita que emane cierto halo de que puede ser
algo especial. Si Microsoft tira la casa por la ven-
tana por algo será, ¿no?
Lo interesante en este caso es evaluar todas las
implicaciones que puede llegar a tener la implan-
tación (paulatina) de este sistema operativo por-
que ya son muchas las voces que se han alzado
cuestionando los motivos reales que puede haber
detrás de lanzar un nuevo sistema y lo que esto
pueda suponer para nosotros, los mortales. Para
empezar, se teme que los requerimientos para eje-
cutar Vista puedan suponer un nuevo revulsivo en
lo relativo a la inversión económica del hardware
aunque, a priori, Microsoft ha tranquilizado al
“pueblo” dibujando un panorama más tranquiliza-
dor y anunciando que la configuración mínima
demandará sólo un PC a 800 Mhz, 512 Mb de
memoria, tarjeta gráfica con soporte de DirectX 9
y 15 GB de espacio libre en disco duro. Todo sea
dicho, bastante normal para los tiempos que
corren.
Pero uno de los aspectos que tiene visos de con-
vertirse en determinante para el futuro de Vista (y
de nuestra concepción del sistema operativo)
tiene que ver con su sistema de protección de
licencias. Es indudable que, hoy por hoy, una de las
causas de que el sistema esté instalado en el 90%
de los ordenadores de todo el mundo (unos 900
millones) reside en la “facilidad” de conseguir e
instalar copias piratas de Windows. Y es que, para-
dójicamente, Microsoft le debe mucho a los pira-
tas, aunque parece ser que (ya obtenida la cuota
de mercado) con Vista será otro cantar. A partir de
ahora los piratas se las van a ver y desear, aunque
cualquiera sabe ya que hacker y desafío son tér-
minos inseparables.
Por lo pronto, la fiebre Vista ya ha hecho que este
sistema operativo corra por las redes P2P y que
hasta algunos se atrevan con los supuestos cracks
que prometen activarlo, pese a que también se ha
informado de que uno de los más difundidos
(denominado "Windows Vista All Versions
Activation 21.11.06") incorpora el troyano llamado
“Trojan-PSW.Win32.LdPinch” dedicado a recolec-
tar contraseñas y enviarlas por correo a su crea-
dor. Pero este no el único aviso que se ha hecho
sobre vulnerabilidades ya que, según la empresa
de seguridad informática Sophos (luego corrobo-
rada por la propia Microsoft), Vista es afectado por
el 40% de todos los programas maliciosos que cir-
culan actualmente por Internet, aunque todavía
no se hayan creados virus específicamente para
Vista.
Por lo pronto, la compañía de Redmond espera
tenerlo instalado en más de 100 millones de orde-
nadores en su primer año, aunque también son
realistas y ya cuentan con que la implantación de
Vista será lenta… pero segura. Lo apoyan los ana-
listas que predicen que, a finales de 2007, un 5%
de los PC operativos en todo el mundo funciona-
rá con alguna de las versiones empresariales de
Vista (frente a un 47% que probablemente corre-
rá bajo Windows XP Professional, y casi un 10% lo
hará todavía con Windows 2000 Professional).
Para predicar con el ejemplo la propia Microsoft
ha instalado Vista en más de 60.000 PC de la com-
pañía, animando a sus clientes empresariales a
seguir su ejemplo. Qué menos.
Lo que está claro es que Windows Vista va a crear
muchos puestos de trabajo (se espera que unos
20.000 en el sector de las Tecnologías de la
Información y la Comunicación en España duran-
te el año 2007) lo que es un buen principio. La
creación de puestos de trabajo siempre lo es. Sólo
esperamos de cara al usuario que la nueva versión
sea tan estable como predica Bill Gates. Desde
luego, desde que apareciera Windows 3.1 han
tenido tiempo para ir depurándola, ¿no?
12
¿Quién no ha oído hablar a estasalturas de Windows Vista, el nuevosistema operativo de Microsoft?Mucho se ha dicho y teorizadosobre las bondades de este sistemaque llega para jubilar a WindowsXP, aunque ahora que parece quepor fin es cierto que llega a lastiendas es el momento de analizarqué implicaciones puede suponerpara todos nosotros.
NICOLÁS VELÁSQUEZ ESPINEL
http://digital.revistasprofesionales.com
OPINIÓN
Vista y no VistaVista y no Vista
Bill Gates anunciando Windows Vista
La interfaz de Windows Vista.
12 OPINION 20/12/06 11:31 Página 12
MANDRIVA LINUX 2007 FREEMANDRIVA LINUX 2007 FREEMandriva Linux 2007 incorporaversiones de última generaciónde los principales proyectos decódigo abierto, tales como:kernel 2.6.17, KDE 3.5.4,GNOME 2.16, y muchos otros.
• Nuevo soporte de escritorios 3D (tantoAIGLX como XGL) y una nueva utilidadpara configurarlos (drak3d)
• Mejoras en rpmdrake - Herramientapara la instalación de aplicaciones
• La Ora - Nuevo tema de escritorio yprotectores de pantalla
• Mejoras en la interfaz deconfiguración de redes consoporte a acceso del tipoinalámbrico y 3G/GPRS
• Soporte para XDG - un sistemade menú estándar defreedesktop.org
• Nueva infraestructura "Web2.0", similar a Ruby on Rails,Django y Catalyst
• Nuevo cortafuegos paraconfigurar un firewallredundante conucarp(invictus-firewall)
13 Linux.qxd 20/12/06 11:32 Página 66
SOLO PROGRAMADORES nº 145 14
DISPOSITIVOS MÓVILES
http://digital.revistasprofesionales.com
Introducción
La llegada de ASP.NET y su evolución ASP.NET 2.0
ha traído varios cambios al mundo de la progra-
mación de páginas web. Estos cambios han sido
en todos los sentidos, pero hay uno especial-
mente innovador el cual permite crear páginas
web que sirvan para multitud de dispositivos a la
vez. Estos nuevos elementos toman el nombre de
Mobile Web Controls. Con ellos, será posible pro-
gramar webs que sean accesibles desde teléfo-
nos móviles sin tener que utilizar lenguajes espe-
cíficos. Todo esto programando de igual forma a
la utilizada para crear páginas normales ASP.NET.
Cuando programamos para dispositivos móviles
nos damos cuenta de la verdadera heterogenei-
dad de éstos. Cada uno utiliza un lenguaje dife-
rente para representar las páginas: unos utilizan
HTML de una forma similar a un PC de sobreme-
sa, otros usan WML, otros cHTML (una versión
reducida de HTML), etc. Este es el primer incon-
veniente que nos encontrábamos a la hora de
programar: o bien se elige un lenguaje y se des-
echa la posibilidad de hacer páginas para el resto
de dispositivos, o bien se hace una página por
lenguaje, lo que multiplica el trabajo.
Además de esto, cada dispositivo tiene unas
características físicas muy diferentes: diferentes
tipos y tamaños de pantalla, teclados completos,
teclados táctiles o teclados reducidos (teléfono
móvil). Todo ese conjunto de elementos tan dis-
tintos hacen muy difícil la creación de páginas
uniformes para todos. Además de todo esto,
cada hardware tiene sus propias capacidades;
unos tienen una potencia de proceso considera-
ble mientras que otros aún hoy se quedan atrás.
El creador de páginas web muchas veces tiene
que enfrentarse a toda esta heterogeneidad.
Bajo toda esta diversidad, las páginas web para
móviles sólo tenían la posibilidad de programar-
se bajo un solo perfil de dispositivo, que solía ser
una media entre todos. Esto resultaba en que los
aparatos más potentes no demostraban su
En este artículo veremos cómohacer páginas web que puedanmostrarse en móviles, de unaforma sencilla y cómoda,utilizando ASP.NET.
DAVID SAINZ y AITOR ALMEIDA (Investigadores de la Cátedra de Telefónica Móviles en laUniversidad de Deusto)
Mobile Web Controls de ASP.NETMobile Web Controls de ASP.NET
Figura 1. Los dispositivos móviles tienen diversos interfaces y capacidades. Las webs no se ven de lamisma forma en ninguno de ellos.
14-20 Móviles .qxd 20/12/06 11:45 Página 14
SOLO PROGRAMADORES nº 14515
DISPOSITIVOS MÓVILES
http://digital.revistasprofesionales.com
Mobile Web Controls de ASP.NET
potencia y mostraban páginas pobres, y los
menos potentes muchas veces no podían
procesar partes de las páginas. La alternati-
va era programar una página distinta para
cada tipo de dispositivo, pero eso se con-
vertía en un caos a la hora de actualizar y
mantener los contenidos, además de un
esfuerzo enorme a la hora de crear lo que
debería ser una sola página.
Por esta razón se han creado los Mobile
Web Controls: controles que se adaptan a
cada tipo de dispositivo móvil.
¿Qué son los Mobile Web Controls?
Los Mobile Web Controls son controles de
formulario web similares en su manejo a los
clásicos de ASP.NET. La peculiaridad de los
mismos es que son capaces de mostrarse en
pantalla de forma diferente dependiendo del
dispositivo que los esté visualizando. De esta
manera, el programador se olvida de que
existen varias clases de hardware y trabaja
bajo una capa única, sabiendo que estos con-
troles se encargarán de adaptarse.
La forma de adaptación puede llegar a ser
muy precisa ya que pueden llegar a adaptar-
se incluso no sólo a un tipo de hardware, sino
a un modelo concreto con unas capacidades
específicas. La forma de conseguirlo interna-
mente no es demasiado complicada. El pro-
pio servidor (normalmente IIS) es el que
detecta el dispositivo y manda adaptarse a
los controles de la página. En el propio servi-
dor se instalan los llamados adaptadores de
dispositivo, que son los encargados reales de
hacer las conversiones necesarias. El funcio-
namiento es el siguiente:
11 .. Se analiza el dispositivo que ha pedido la
página.
22 .. Se elige el adaptador de dispositivo ade-
cuado de entre los existentes.
33 .. El adaptador analiza las capacidades del
dispositivo.
44 .. Según lo que el dispositivo soporte y el
lenguaje que utilice, el adaptador tradu-
cirá el Mobile Web Control de la forma
más apropiada y se lo enviará.
55 .. El dispositivo una vez recibida la página
adaptada para su perfil, puede mostrar
los controles sin problemas.
Es importante notar que el dispositivo
destino no recibe el Mobile Web Control,
sino que recibe código HTML, WML o deri-
vado. El control no viaja por la red y se
adapta una vez llegado al dispositivo, sino
que en el propio servidor se convierte en
código que el destino es capaz de
interpretar.
Esta arquitectura es extensible de forma
que pueden agregarse nuevos adaptadores
en el momento en que sea necesario tener
en cuenta nuevos perfiles. Por ejemplo
cuando salgan al mercado móviles con
grandes pantallas y amplios teclados,
puede crearse un nuevo perfil y utilizar un
adaptador concreto para ellos. Por defecto
estos adaptadores están incorporados en la
instalación del framework .NET.
Programando los controlesEstos controles se programan de una forma
muy similar a la utilizada en los controles
normales de ASP.NET. Se representan en
forma de etiquetas y siempre que es posible
tienen el mismo nombre que sus corres-
pondientes en ASP.NET. La diferencia es que
el prefijo de la etiqueta deja de ser “asp”
para pasar a ser “mobile”. Eso servirá para
diferenciar unos controles de otros.
En HTML, para insertar una caja de texto se
utiliza la siguiente etiqueta:
<input name=“TextNombre”/>
En ASP.NET y utilizando controles normales
la etiqueta es:
<asp:TextBox ID=”TextBox1”
runat =”server”></asp:TextBox>
En ASP.NET utilizando Mobile Web Controls
la etiqueta es:
<mobile:TextBox ID=”TextBox1”
runat=”server”> </mobile:TextBox>
Las etiquetas pueden teclearse a mano o
crearse a través de un IDE adecuado.
Utilizando Visual Studio 2005 es sencillo
crear los controles, ya que pinchando y
arrastrando se logran hacer los formularios,
de forma exactamente igual a como se
haría con los controles normales.
Para hacer esto hay que crear un nuevo
sitio web o utilizar uno existente, ya que
Visual Studio 2005 no requiere que el sitio
web entero sea para móviles, es posible
insertar páginas para móviles dentro de
una sede para PCs de sobremesa. Existe sin
embargo una restricción: las páginas nor-
males no pueden albergar Mobile Web
Controls, por tanto debemos separar las
páginas que se visitarán por PCs o similares
de las que se visitarán a través de móviles y
crear entonces páginas especiales para ello.
En el explorador de soluciones se puede
añadir una nueva página que en lugar de
ser una de las normales (Web Form) será
una página de controles móviles (Mobile
Web Form). Una vez añadida esta página,
en el Tool Box aparecerá una nueva sección
llamada “Mobile Web Forms” en la que
estarán los controles. No obstante, así
como una página web no puede albergar
un control móvil, una página para móviles
no puede contener controles normales.
Ambos mundos permanecerán separados
en la mayor parte de los casos. Sin embar-
go, esto no debería ser un problema ya que
Figura 2. Creando un formulario web móvil con Visual Studio 2005.
Figura 3. A la izquierda, la propiedad“BreakAfter” está a “false” en las etiquetasy el botón “Mandar”. A la derecha, lapropiedad está siempre a “true”.
14-20 Móviles .qxd 20/12/06 11:45 Página 15
SOLO PROGRAMADORES nº 145 16
DISPOSITIVOS MÓVILES
http://digital.revistasprofesionales.com
puede crearse una página móvil muy com-
pleta y gracias a las propiedades de los
controles, un PC de sobremesa también
será capaz de ver una página de este tipo
de forma normal.
Como se puede observar en la figura 2, al
crear un formulario web móvil el aspecto
gráfico es un tanto distinto, y es que los
controles no pueden colocarse en cualquier
lugar. Estos formularios tienen una disposi-
ción de controles en pantalla llamada
“FlowLayout”. Esta forma de colocar los con-
troles es la predeterminada y se basa en
colocar cada control en una línea diferente,
pudiendo controlarse la alineación horizon-
tal a izquierda, derecha y centrado. Esta limi-
tación resulta a veces muy estricta, pero hay
un mecanismo para hacerla algo más flexi-
ble: cada control tiene una propiedad llama-
da “BreakAfter”, que si está a “true”, signifi-
ca que el siguiente control se presentará en
la siguiente línea, y si está a “false” significa
que el siguiente control aparecerá justo al
lado. Esto es típico cuando se utilizan cajas
de texto y etiquetas. Para lograr que una eti-
queta y su correspondiente caja de texto
aparezcan en la misma línea, se coloca la
propiedad “BreakAfter” de la etiqueta a
“false”. Aún así, este “FlowLayout” resulta
muy poco flexible en ocasiones aunque
ayuda a mantener un diseño uniforme.
Recordemos que estamos trabajando en
páginas que se van a mostrar en muchos
tipos de pantallas, grandes y pequeñas. Este
tipo de colocación de controles ayudará a
mostrar los controles de forma parecida en
diferentes dispositivos. De esta manera,
crear un formulario gráficamente produce el
siguiente código del listado 1.
Hemos visto que para programar los contro-
les para móviles de manera gráfica se proce-
de exactamente igual que para los controles
web normales. Pues de igual modo sucede
con la programación de sus propiedades y
eventos, ya que la manera de proceder es
también similar, puesto que desde la página
de código también se accede a los controles
para manejar sus propiedades y métodos.
Los controles existentes
Los controles que se pueden colocar en una
página móvil son variados y, aunque no son
excesivamente sofisticados, cumplen con
las funciones básicas necesarias en este
tipo de páginas. A continuación analizamos
cada uno de estos controles.
FormEs el contenedor del resto de controles y el
formulario típico de cualquier página. Sin
embargo, tiene una peculiaridad, y es que
dentro de la misma página puede haber
varios formularios. Sólo uno es visible cada
vez pero todos están dentro, de forma que
pasar de un formulario a otro no implica
cambiar de página. Es típico encontrarse con
un formulario de envío de datos y otro for-
mulario de “Datos Enviados”, todo ello en una
sola página. Hay 2 propiedades especialmen-
te útiles:
� AAcctt iivveeFFoorrmm:: Esta propiedad no es del
propio formulario, sino de la página (se
accede directamente con “this.Active
Form”). Es un “String” que tiene el nom-
bre del formulario activo cada vez. Pasar
de un formulario a otro dentro de una
misma página es en realidad cambiar
esta propiedad.
� PPaaggiinnaattee:: Esta propiedad del formula-
rio sirve para dispositivos con pantallas
pequeñas. Si el formulario es grande y
contiene varios controles, este booleano
se pone a “true” para que se pagine
automáticamente. De esta manera un
formulario ocupa varias páginas por las
que se puede ir navegando.
<mobile:Form id=“F1” runat=“server”/>
PanelUn panel es otro contenedor de controles.
Se puede colocar dentro de un formulario y
a su vez él mismo contener más controles.
Esto se suele utilizar mucho en aquellos
momentos en los que es necesario añadir
controles dinámicamente en tiempo de eje-
cución. Si esto se hace con un formulario,
los controles aparecerían al final, y muchas
veces lo que se desea es que aparezcan en
un lugar concreto, por ejemplo hacia la
mitad, antes de unos controles y después de
otros. Es común colocar el panel en aquél
lugar donde se quieren colocar los controles
dinámicamente y después añadir los con-
troles directamente al mismo. Este panel
gracias al “FlowLayout” del que se ha habla-
do, es capaz de expandirse según se vayan
añadiendo controles de forma que ni siquie-
ra es necesario especificar un tamaño con-
creto, los controles van ocupando su espa-
cio. La propiedad interesante del panel es:
� CCoonnttrroollss :: Es en realidad una lista de
controles, se van añadiendo a ella los
Mobile Web Controls que se desea que
aparezcan en el panel.
<mobile:Panel id=“P1” runat
=“server”>
[Controles]
</mobile:Panel>
TextViewEste control sirve para colocar grandes can-
tidades de texto. Para mostrar contenidos de
mensajes o noticias, es común utilizar con-
troles como este. Es un control que se com-
bina con el atributo de paginación del for-
mulario y se parte automáticamente en tro-
zos, dejando por pantalla unas cuantas líne-
as y dando la posibilidad de navegar hacia el
siguiente trozo de mensaje o el anterior. La
propiedad más interesante es:
� TTeexxtt:: En este ”String” se deja el mensaje
entero a mostrar. Es el propio control el
encargado de partirlo en trozos si es nece-
sario paginarlo. A través de las característi-
cas del dispositivo que pide la página se
averigua cómo paginar el texto (si es que
hay que paginarlo).
LISTADO 1 Código de un formulario con Mobile Web Controls
<html xmlns=”http://www.w3.org/1999/xhtml” ><body>
<mobile:Form ID=”Form1” Runat=”server” Title=”Opiniones”><mobile:Label ID=”Label2” Runat=”server” BreakAfter=”False”>Nombre:</mobile:Label><mobile:TextBox ID=”TextBox1” Runat=”server”>David</mobile:TextBox><mobile:Label ID=”Label3” Runat=”server” BreakAfter=”False”>Opinión:</mobile:Label><mobile:TextBox ID=”TextBox2” Runat=”server”>Muy Buena</mobile:TextBox><mobile:Command ID=”Command1” Runat=”server” BreakAfter=”False”>Mandar</mobile:Command><mobile:Command ID=”Command2” Runat=”server”>Cancelar</mobile:Command>
</mobile:Form></body></html>
14-20 Móviles .qxd 20/12/06 11:45 Página 16
SOLO PROGRAMADORES nº 145
LinkEl control “Link” sirve para insertar un
hipervínculo dentro de la página. Este
hipervínculo puede apuntar a una web para
móviles o a otro recurso, por lo que habrá
que tener cuidado de no redirigir a una
página que el propio dispositivo no sea
capaz de soportar. Por lo demás, es una eti-
queta link normal, con la peculiaridad de
poder adaptarse al formulario y su
“FlowLayout”, además de adaptarse al dis-
positivo destino. Las propiedades principa-
les para manejarla son:
� TTeexxtt :: Se trata del texto que se desea
que el usuario lea cuando visite la
página.
� NNaavv iiggaatteeUUrr ll :: Es la dirección a donde
se redirige la página una vez el
usuario ha hecho clic sobre el hiper-
vínculo.
PhoneCallEste control es parecido a un link en su
aspecto, pero su función es distinta. Dado
que muchas de estas páginas son vistas por
teléfonos móviles o elementos con capaci-
dad de realizar llamadas telefónicas, este
control da la posibilidad de llamar a un
número de teléfono determinado cuando
se hace clic sobre él. Es decir, sin que el
usuario tenga que marcar dicho número, el
17
Mobile Web Controls de ASP.NETDISPOSITIVOS MÓVILES
http://digital.revistasprofesionales.com
LISTADO 2 Código para manejar un ObjectList
public partial class FormMovil : System.Web.UI.MobileControls.MobilePage{
private class Persona{
private string nombre;
public string Nombre{
get { return nombre; }set { nombre = value; }
}private string apellidos;
public string Apellidos{
get { return apellidos; }set { apellidos = value; }
}
private string dni;
public string Dni{
get { return dni; }set { dni = value; }
}private string oficio;
public string Oficio{
get { return oficio; }set { oficio = value; }
}
public Persona(string dni, string nombre, string apellidos, string oficio){
this.dni = dni;this.nombre = nombre;this.apellidos = apellidos;this.oficio = oficio;
}}
protected void Form1_Activate(object sender, EventArgs e){
//Creamos 4 personasPersona[] personas = new Persona[4];personas[0] = new Persona(“123456”, “David”, “Sainz González”, “Investigador”);personas[1] = new Persona(“456987”, “Aitor”, “Almeida escondrillas”, “Investigador”);personas[2] = new Persona(“325897”, “Ana”, “García Sánchez”, “Arquitecto”);personas[3] = new Persona(“852695”, “Ángel”, “Ibañez Ruiz”, “Analista”);//Asignamos las personas al ObjectList (Data Binding)this.ObjectList1.DataSource = personas;//El campo principal será el DNIthis.ObjectList1.LabelField = “Dni”;//Cambiamos el texto del botón ‘Back’this.ObjectList1.BackCommandText = “Volver”;//Realizamos el Data Bindthis.ObjectList1.DataBind();
}}
14-20 Móviles .qxd 20/12/06 11:45 Página 17
SOLO PROGRAMADORES nº 145
dispositivo hace la llamada directamente.
Es muy común en los formularios del tipo
“Contacte con Nosotros”, sustituyendo al
típico “mailto”, permitiendo una llamada
directa en lugar de enviar un mail. Las pro-
piedades principales del control son:
� TTeexxtt :: El texto que el usuario verá en el
formulario.
� PPhhoonneeNNuummbbeerr :: El número de teléfo-
no que se marcará automáticamente
en cuanto se haga clic sobre el
control.
<mobile:PhoneCall id=“call1
” runat=“server”
PhoneNumber=“23458961”> Texto
</mobile:PhoneCall>
CalendarEste control es uno de los que más mues-
tran la potencia de los Mobile Web
Controls. Su forma puede variar mucho
dependiendo del dispositivo destino, mos-
trándose como un calendario normal de
ASP.NET en un navegador de un PC, o una
caja de texto donde escribir la fecha en un
teléfono móvil de display reducido.
También puede adquirir más formas depen-
diendo de la potencia de visualización,
como por ejemplo una lista desde donde
seleccionar los meses y los días.
ObjectListEs un control interesante para visualizar
elementos con varios campos. Debido a que
las reducidas pantallas en pocas ocasiones
dejan mostrar tablas con comodidad, este
control permite mostrar todos estos ele-
mentos de una forma mucho más organi-
zada. Primero, se muestra una lista con
todos los objetos que contiene, sólo mos-
trando el campo principal. De esta forma el
control es parecido a una lista normal. La
salvedad es que cada campo es un hiper-
vínculo que nos lleva a ver todos los deta-
lles del elemento, es decir, nos lleva a ver el
resto de campos. Esta lista también se
adapta mucho a las capacidades de dispo-
sitivo y es el sustituto ideal del elemento
“Table” de ASP.NET normal. Este control
está programado de forma que no haya
que introducir una sola línea de código
para manejar el funcionamiento ni la
visualización de cada elemento. Al hacer
clic sobre cada objeto en la lista automáti-
camente aparecerá una pantalla que des-
plegará todos los detalles. Lo único que hay
que hacer es rellenar los datos del control
(normalmente a través de Data Binding) y
especificar cuál será el campo principal. Si,
como se ve en el listado 2, creamos un
array de clases “Persona” con “DNI”, “nom-
bre”, “apellidos” y demás, podemos dar esos
datos al “ObjectList” y especificar que el
campo principal sea el “DNI”. Lo que hará
entonces este control es sacar una lista con
todos los “DNI” que contiene. Al pinchar
sobre cada uno de ellos nos llevará a otra
página automáticamente donde nos mos-
trará los detalles de la “Persona”. Esto se
puede ver en la figura 4. Las propiedades
interesantes del control son:
� LLaabbeellFFiieelldd:: Es un ”String” donde se
especifica el nombre del campo princi-
pal del “ObjectList”.
� BBaacckkCCoommmmaannddTTeexxtt:: Cuando se va a
la página donde se visualizan los deta-
lles, automáticamente se coloca un
botón para navegar hacia atrás, de
nuevo hacia la “ObjectList”. Este ”String”
marca el texto que debe aparecer en ese
botón.
Pero hay más…Además de todos estos controles están las
típicas etiquetas, cuadros de texto, botones
y demás controles tan comunes en un for-
mulario. Los listados anteriormente son
mencionados por ser especiales para móvi-
les o tener alguna característica especial-
mente interesante.
Personalizando controles según el dispositivo
Todos los controles vistos, como se ha
dicho anteriormente, son capaces de adap-
tarse automáticamente, pero existen ade-
18
DISPOSITIVOS MÓVILES
http://digital.revistasprofesionales.com
Figura 4. Arriba, el control “ObjectList” mostrando todos los elementos que contiene.Abajo, el mismo control mostrando los detalles del elemento seleccionado.
Figura 5. Formulario donde crear filtros de dispositivo.
14-20 Móviles .qxd 20/12/06 11:45 Página 18
SOLO PROGRAMADORES nº 145
más formas de hacer que la adaptación sea
mucho más personalizada, siendo nosotros
como programadores los que controlemos
cómo se va a mostrar cada elemento del
formulario dependiendo de quién lo visua-
lice.
Para hacer esto, primero necesitamos saber,
desde nuestra propia página, qué dispositi-
vo está accediendo, y dependiendo de ello
poder realizar una acción u otra. Para ello
se utilizan los “filtros de dispositivo”.
¿Qué son los filtros de dispositivo?Los filtros son los elementos dedicados a
ayudarnos a diferenciar un dispositivo de
otro, o unas capacidades de dispositivo de
otras. Por ejemplo, para diferenciar si el dis-
positivo entiende lenguaje HTML o WML se
utiliza uno de estos filtros. En realidad nos-
otros vamos a verlo como un gran “if” en el
que, por ejemplo, si el dispositivo acepta
HTML haremos unas cosas y si no, otras. La
forma de crear estos filtros es muy sencilla,
ya que Visual Studio tiene herramientas
para ayudarnos.
Para empezar hemos de crear primero los fil-
tros de dispositivo que deseemos, por ejem-
plo, filtrar según soporten HTML (PCs norma-
les y Pocket PCs) o WML (teléfonos móviles).
Para ello en Visual Studio pinchamos sobre
cualquier control y en sus propiedades vere-
mos una llamada “Applied Device Filters”.
Pinchando en ella nos aparece un cuadro de
diálogo. En él debemos pinchar en el botón
“Edit…”. Esto nos abrirá otro formulario
donde podremos crear filtros de dispositivo.
Dentro de este formulario pulsamos el
botón de “Add Device Filter” para crear un
nuevo filtro y le damos un nombre: HTML.
En la lista de propiedades a comparar selec-
cionamos “PreferredRenderingType” y en el
cuadro de texto de argumento tecleamos
“html32”. Con esto estamos especificando
que seleccionamos los dispositivos que pre-
fieren mostrar el texto en HTML. Podemos
crear otro filtro exactamente igual pero lla-
mado “WML” y cuyo argumento contenga
“wml11”. Así se pueden tener dos filtros
creados.
La lista de elementos a comparar es muy
extensa y abarca desde tamaño de pantalla
al modelo del dispositivo, con lo cual se
pueden llegar a crear filtros muy precisos.
Los creados servirán para diferenciar teléfo-
nos móviles que aceptan WML, de PCs con
navegadores normales que aceptan HTML.
Al pulsar “OK” en este formulario pasamos
al formulario anterior, donde ya podemos
añadir a una lista los filtros creados, para
poderlos utilizar.
Property OverridesUna vez tenemos los filtros de dispositivo
que deseemos, una manera de personalizar
los controles según los mismos es el llama-
do “Property Overrides”, es decir, modificar
las propiedades de un control según las
cualidades de un dispositivo. Esto se hace
también de manera gráfica utilizando
Visual Studio, lo que convierte a estos
“Property Overrides” en algo potente y fácil
de manejar. Tan fácil como seleccionar un
control y hacer clic sobre su propiedad
“PropertyOverrides”, donde aparecerá un
formulario nuevo, con una lista de selec-
ción y un cuadro de propiedades. En la lista
de selección aparecerán los filtros de dispo-
sitivo aceptados. Si está vacía se repite el
paso de añadir filtros, visto en el apartado
anterior. Seleccionando un filtro de esa
lista, aparecerá el cuadro de propiedades
para el control. De tal forma que podemos,
por ejemplo, colocar la propiedad “Visible” a
“false” en el filtro WML y a “true” en el fil-
tro HTML. Esto ocasionará que un navega-
dor que acepte HTML vea el control mien-
tras que el que acepte WML no lo vea.
El cuadro de propiedades que pueden cam-
biarse es muy amplio y abarca muchos ele-
mentos normalmente ligados a la forma de
presentación del control. Este abanico de
propiedades que pueden modificarse puede
servirnos para mejorar la adaptación auto-
mática que ya viene dada por defecto en los
controles.
Device SpecificAdemás de todo lo visto existe otro meca-
nismo de personalización de páginas, unos
controles especiales llamados “Device
Specific”. Estos controles se colocan dentro
de cualquier formulario o panel, pero si no
se hace nada más con ellos no aparecerán
en las páginas, porque no son controles en
sí mismos. Estos controles sirven para colo-
car código dentro de ellos. Los
“DeviceSpecific” se utilizan para colocar en
la página código especial en cuanto se
detecta un dispositivo concreto. Es posible
detectar una cierta gama de teléfonos
móviles e insertar código WML literal, espe-
19
Mobile Web Controls de ASP.NETDISPOSITIVOS MÓVILES
http://digital.revistasprofesionales.com
Figura 6. Formulario para cambiar las propiedades de un control usando PropertyOverrides.
LISTADO 3 Detectando el tipo de cliente
<mobile:DeviceSpecific ID=”DeviceSpecific1” Runat=”server”><Choice Filter=”WML” Xmlns=”http://schemas.microsoft.com/mobile/html32template”></Choice><Choice Filter=”HTML” Xmlns=”http://schemas.microsoft.com/mobile/html32template”></Choice>
</mobile:DeviceSpecific>
14-20 Móviles .qxd 20/12/06 11:45 Página 19
SOLO PROGRAMADORES nº 145
cialmente para ellos. Los “DeviceSpecific”
trabajan también con filtros de dispositivo
para averiguar quién ha pedido la página.
Sin embargo a diferencia del Property
Overrides, que cambia las propiedades de
un control, este mecanismo coloca código
directamente en la página, ya sea HTML,
WML, controles ASP normales, etc.
Desde Visual Studio se pueden colocar
estos controles especiales, que tienen tam-
bién una propiedad “AppliedDeviceFilters”
para ir añadiendo los filtros de dispositivo
deseados. Una vez se hace esto, se puede
mirar directamente en el código de etique-
tas de la página. Si se aplican los filtros cre-
ados en apartados anteriores queda una
estructura como esta:
Podemos apreciar unas etiquetas llamadas
“Choice”, que son las que van a actuar como
un gran “if”. Se detecta el tipo de dispositivo
que pide la página y dependiendo de sus
características se activa un “Choice” u otro.
Dentro de cada elemento “Choice” se escribe
directamente el código que se desea. Se
puede detectar, por ejemplo, si se trata de un
PC que utiliza un navegador normal y colo-
car entonces controles ASP normales, o
detectar un teléfono móvil e insertar código
WML con funciones específicas. Un ejemplo
de código de utilización del ”DeviceSpecific”
está en el listado 4. En ese código se coloca
un panel y dentro de él un control
“DeviceSpecific”, con los filtros para HTML y
WML. Si el dispositivo sólo soporta WML se
coloca un Mobile Web Control tipo “label” y
si soporta HTML se coloca código HTML
directamente para escribir una tabla.
Junto con el artículo se adjuntan una serie de
ejemplos que muestran el funcionamiento
tanto del Device Specific como del Property
Overrides y, en general, el funcionamiento de
los Mobile Web Controls. Pueden abrirse
directamente con Visual Studio 2005 y eje-
cutarse para ver cómo trabajan. La forma
normal de verlo en un PC es con un navega-
dor convencional, pero si se navega con un
teléfono móvil o se utiliza un emulador,
puede notarse el gran cambio y la adapta-
ción. Es posible bajarse una versión de eva-
luación de 30 días de un emulador de nave-
gador para móviles. Funciona bajo Windows
y se puede descargar desde aquí:
http://download.winwap.org.
Conclusiones
En este artículo se ha visto cómo progra-
mar páginas para dispositivos móviles uti-
lizando unos controles especiales de
ASP.NET, llamados Mobile Web Controls.
Se ha hablado de su potente capacidad de
adaptación al hardware de quien pide las
páginas y se ha visto cómo personalizarlos
aún más utilizando mecanismos como
Property Overrides o Device Specific.
Crear este tipo de páginas es muy sencillo
y el hecho de que puedan agregarse a
sitios web de ASP.NET que no sean especí-
ficos para móviles puede dar mucha
potencia, programando una web de la
manera habitual pero a la vez creando
secciones dentro de ella preparadas para
cualquier tipo de dispositivo. En un
mundo en el que los teléfonos móviles
están a la orden del día y donde el acceso
a Internet a través de ellos es cada vez
más frecuente, crear secciones dedicadas
a estos teléfonos en los portales web es
una opción a considerar tanto desde el
punto de vista de su utilidad como de la
imagen de empresa.
20
DISPOSITIVOS MÓVILES
http://digital.revistasprofesionales.com
Figura 7. Un “DeviceSpecific” dentro de un formulario.
LISTADO 4 Ejemplo de Device Specific
<mobile:Panel id=”Panel1” runat=”server”><mobile:DeviceSpecific id=”DeviceSpecific1” runat=”server”><Choice Filter=”isWML11” Xmlns=”http://schemas.microsoft.com/mobile/html32template”><ContentTemplate><mobile:Label ID=”l1” Runat=”server”>Discos</mobile:Label>
</ContentTemplate></Choice><Choice Filter=”isHTML32” Xmlns=”http://schemas.microsoft.com/mobile/html32template”><ContentTemplate><table cellpadding=”0” cellspacing=”0”><tr><td colspan=”2”><img src=”barraH.jpg” /></td>
</tr><tr><td valign=”top”><img src=”barra.jpg” /></td><td valign=”top”></td>
</ContentTemplate></Choice>
</mobile:DeviceSpecific></mobile:Panel>
Figura 8. Diferentes vistas de un control “Calendar” según el dispositivo que lo estévisualizando.
14-20 Móviles .qxd 20/12/06 11:45 Página 20
Suscripción a Sólo ProgramadoresSUSCRIPCIÓN PARA ESPAÑA�Opción A: Suscripción anual con 25% descuento:
54 euros* (3 revistas gratis, 18 euros de ahorro)�Opción B: Suscripción anual con 15% descuento:
61,20 euros* (tapas de regalo, 10,80 euros de ahorro)*10 euros de gastos de envío para la opción contrareembolso
SUSCRIPCIÓN PARA EXTRANJERO�Opción C: Suscripción anual con 25% descuento
90 euros (gastos de envío incluidos)FORMA DE PAGO EXTRANJERO:� Tarjeta de crédito + fecha de caducidad
FORMAS DE PAGO PARA ESPAÑA� Contrareembolso (10 euros gastos de envío)� Giro Postal a Revistas Profesionales, S.L.� Transferencia al Banco Popular:
c.c:0075/1040/43/0600047439� Talón Bancario a nombre de Revistas Profesionales� Domiciliación Bancaria� Tarjeta de Crédito + fecha de caducidad
Solicitud de suscripciones y más información en el teléfono 91 304 87 64, en el fax 91 327 13 07y en rpsuscripciones@revistasprofesionales.com
Suscripcion Solop2005 21/12/06 15:04 Página 1
SOLO PROGRAMADORES nº 145 22
MIDDLEWARE
http://digital.revistasprofesionales.com
Introducción
Windows Vista, la última y por lo tanto más
reciente evolución del sistema operativo de
Microsoft, está ya entre nosotros. Seguro que
el lector habrá oído ya mucho acerca de esta
nueva edición de Windows, pues la maquinaria
de comunicación de Microsoft empezó el lan-
zamiento del producto hace ya muchos meses.
Sin embargo, es posible que aún no tengamos
claro qué de nuevo nos aporta Windows Vista.
Todos hemos oído que, obviamente, será una
revolución, puesto que aporta mejoras en
cuanto a la usabilidad, la conectividad, etc.
pero desde Sólo Programadores creemos nece-
sario hacer un exhaustivo análisis de las tecno-
logías incorporadas a esta nueva versión con
objeto de mostrarlas a los lectores de una
manera estructurada y organizada. Esperemos
que este artículo sirva para concretar y aclarar
las ideas del lector acerca de “todo lo nuevo”
que trae consigo Windows Vista, y convertir
esta “nebulosa de novedades” en una lista de
funcionalidades concretas.
Bibliografía y fuentes de informaciónEl contenido de este artículo es fruto de la sínte-
sis y resumen de distintas fuentes de informa-
ción, entre las cuales destaca por un lado el
extenso documento “Windows Vista Product
Guide” y, por otro, el conocimiento y la informa-
ción adquirida por un servidor como consecuen-
cia de mi asistencia a la mayoría de eventos y
conferencias organizadas por Microsoft acerca
de este tema, como pueda ser el Tech-Ed o la
presentación de Windows Vista.
Ediciones de Windows Vista
Antes de abordar las nuevas funcionalidades que
nos aporta Windows Vista, creemos necesario
hacer un breve repaso a las ediciones disponibles
del producto. Como consecuencia de la gran varie-
dad de ediciones, este suele ser uno de los puntos
más turbios y que ofrece mayor confusión.
Como previo a la descripción de funcionalidades
presente en cada edición, vale la pena comprar el
cambio de estrategia de Microsoft con respecto a
Windows XP. Con Windows XP, existían 6 edicio-
nes: Home Edition, Media Center Edition,
Professional Edition, Tablet PC Edition, Professional
x64 Edition y, para mercados emergentes, Starter
Edition. Mientras que Windows XP Home Edition y
Windows XP Professional Edition iban dirigidas a
un perfil específico de usuarios, las otras 4 edicio-
nes estaban orientadas a determinadas configura-
ciones de hardware.
Ahora, Microsoft ha reorientado su estrategia de
ediciones, ofreciendo varias SKU (ediciones
comerciales para usuario final) dirigidas siempre
a perfiles de usuario, anteponiendo siempre el
destinatario de la tecnología al hardware, con la
idea de ajustar la oferta a la demanda. Con esta
La mayoría de los lectores sabrán quela nueva versión del sistemaoperativo Windows ya está lista parallegar al gran público. Sin embargo,es posible que la misma mayoría delectores se formulen preguntas deltipo… ¿Qué ediciones habrá delproducto? ¿Qué diferencias existenentre ellas? ¿Hay novedades encuanto a la interfaz de usuario? ¿Y encuanto a la accesibilidad? ¿Y encuanto al rendimiento? ¿Han incluidomejoras relativas a la conectividad? Ysobre todo… ¿Nos afecta todo esto anosotros, los desarrolladores?
PABLO OLMOS
Primera aproximación a Windows VistaPrimera aproximación a Windows Vista
22-31 Middleware.qxd 20/12/06 12:22 Página 22
SOLO PROGRAMADORES nº 14523
MIDDLEWARE
http://digital.revistasprofesionales.com
filosofía, Microsoft pone a disposición del
público las siguientes ediciones de
Windows Vista.
Windows Vista Home Basic
Edición básica para consumidores de mer-
cados desarrollados, en la que podremos
encontrar las siguientes características:
� Mejoras en seguridad y fiabilidad.
� Control parental.
� Interfaz de usuario Windows Vista Basic.
� Innovaciones en las funciones de bús-
queda y organización.
� Funciones de red mejoradas.
Windows Vista Home Premium
Edición principal de Windows Vista, orien-
tada a los consumidores que disponen
tanto de equipos de sobremesa como equi-
pos portátiles. Incluye todas las caracterís-
ticas de la edición Home Basic y añade:
� Interfaz de usuario Windows Aero.
� La funcionalidad de Windows Media
Center.
� Creación y grabación de DVDs.
� La función Windows Tablet PC.
� Sincronización de equipo a equipo.
Windows Vista Ultimate
Edición más profesional que las dos anteriores,
va orientada a personas que utilizan el mismo
equipo (de sobremesa o portátil) tanto para
trabajar como para otras tareas lúdicas. Esta
edición incluye las funcionalidades de Home
Premium y añade las funcionalidades de la
edición Enterprise (véase más adelante).
Windows Vista Business
Edición orientada íntegramente a su uso
profesional, dirigida a trabajadores de
pequeñas, medianas o grandes empresas
que tengan equipos de sobremesa o portá-
tiles. Incluye todas las funcionalidades de la
edición Home Basic y añade:
� Interfaz de usuario Windows Aero.
� La función Windows Tablet PC.
� Sincronización de equipo a equipo.
� Características empresariales importan-
tes, como unirse a un dominio, compa-
tibilidad con las directivas de grupo y
sistema de archivos de cifrado.
� Características específicas para peque-
ñas empresas, como fax y escáner.
Windows Vista Enterprise
Máxima edición de Windows Vista, tanto para
equipos de sobremesa como equipos portátiles,
orientada sólo a aquellos usuarios que tengan
sus equipos cubiertos por un contrato Microsoft
Software Assurance. Incluye todas las caracte-
rísticas de la edición Business y añade:
� Cifrado de unidad de BitLocker de
Windows.
� Todos los idiomas del mundo para la
interfaz.
� Virtual PC Express.
� Subsystem for UNIX-based Applications
(SUA).
Windows Vista Starter
Edición más limitada de Windows Vista,
orientada a las familias y a nuevos usuarios
de determinados mercados emergentes.
Destacamos de esta edición las siguientes
funcionalidades:
� Mejoras en la seguridad y fiabilidad.
� Innovaciones en las funciones de bús-
queda y organización.
� Interfaz de usuario de Windows Vista
Basic.
� Sistema operativo de 32 bits diseñado espe-
cíficamente para equipos económicos.
Interfaz de usuario
La interfaz de usuario de un sistema opera-
tivo es, quizás, el punto que más heteroge-
neidad de opiniones despierta entre la
comunidad de informáticos y también de
usuarios convencionales. Por un lado, hay
quien defiende que no necesita un escrito-
rio en 3D y a todo color para administrar
sus archivos, ejecutar sus aplicaciones y, en
general, gobernar su PC. A favor de esta
postura, básicamente está el consumo
excesivo de recursos de una interfaz gráfi-
ca sobrecargada. En el otro extremo, están
quienes acogen con buenos ojos todas
aquellas mejoras relativas a la interfaz,
entendiendo que una interfaz gráfica
potente y bien diseñada tiene una clara
repercusión (en clave positiva) en la pro-
ductividad. Y es precisamente en esta línea
en la que se sitúa Microsoft, ya que
muchas de las novedades de Windows Vista
tienen que ver con su “aspecto”.
Cuatro niveles gráficos de experiencia deusuarioWindows Vista ofrece 4 niveles de expe-
riencia de usuario que se basan en las fun-
cionalidades gráficas del sistema. Entre
ellas, la más destacada es, a su vez, la más
sofisticada, que recibe el nombre de Aero.
Sin embargo, vamos a repasar uno por uno
cuáles son estos 4 niveles:
� EExxppeerr ii eenncc ii aa WWiinnddoowwss BBááss ii ccoo ::
Ofrece el entorno gráfico más sencillo,
muy simplificado en relación a lo que
conocemos de versiones anteriores de
Windows. Básico puede correr en cual-
quier edición de Windows Vista, y no
tiene requerimientos específicos en
cuanto al hardware.
� EExxppeerr ii eenncc ii aa WWiinnddoowwss CC llááss ii ccoo ::
Ofrece las mismas funcionalidades que
Básico, pero con la apariencia de
Windows 2000. Clásico también está
disponible en todas las ediciones y tam-
Primera aproximación a Windows Vista
Figura 1. Oferta segmentada por usuarios,según sean “Customers” (Basic, Premium,Ultimate), “Small Business” (Business, Ulti-mate) o “Medium and Large Businesses”(Business, Enterprise).
22-31 Middleware.qxd 20/12/06 12:22 Página 23
SOLO PROGRAMADORES nº 145
poco tiene requerimientos específicos
de hardware.
� EExxppeerr iieenncciiaa WWiinnddoowwss EEssttáánnddaarr::
Ofrece un aspecto más sofisticado, aña-
diendo confiabilidad y rendimiento
mejorado en cuanto a la usabilidad del
sistema. Esta experiencia, basada en la
avanzada tecnología de gráficos de
Vista, ofrece un mejor control de las
ventanas y una mayor definición. La
experiencia Estándar va orientada a
equipos con mayores capacidades grá-
ficas, que dispongan hardware gráfico
compatible con el nuevo Modelo de
Controladores de Pantalla de Windows
(WDDM).
� EExxppeerriieenncciiaa WWiinnddoowwss AAeerroo:: Ofrece
la experiencia gráfica más avanzada, dis-
ponible para los clientes del Programa de
Ventajas de Windows Original de
Microsoft que tengan equipos con hard-
ware gráfico compatible con WDDM. En
los últimos eventos organizados por
Microsoft, las demostraciones de las
capacidades de Windows Aero han sido
de las más llamativas. Lo más destacable
de esta tecnología son los efectos de cris-
tal y reflexiones presentes en las venta-
nas, que permiten crear un marco suave y
agradable, gracias al cual podemos con-
centrarnos en el contenido de la ventana
(véase la figura 2). Hay otras dos nuevas y
atractivas características de Aero: Flip y
Flip 3D, pensadas para optimizar la admi-
nistración de ventanas. Flip es una actua-
lización del clásico “Alt+Tab” para cambiar
la ventana activa. Ahora, en lugar de mos-
trar los iconos de las ventanas, Aero nos
mostrará una miniatura de las ventanas,
tal como puede verse en la figura 3. Por su
parte, Flip 3D ofrece una nueva manera
de encontrar la ventana que se desea. En
este caso, al presionar las teclas
“Inicio+Tab” Aero nos muestra una vista
ampliada y en 3D de todas las ventanas
activas, como puede verse en la figura 4.
Funciones de búsqueda y organizaciónDespués de la espectacular interfaz gráfica
proporcionada por Aero, otra de las gran-
des novedades presentadas en los más
recientes eventos organizados por
Microsoft es la función de búsqueda y
organización de la información. Windows
Vista pone a nuestra disposición, tanto en
el menú de “Inicio” como en las ventanas
del Explorador de Windows, una caja de
texto con la que podremos realizar búsque-
das rápidas tanto de programas como de
ficheros.
El funcionamiento es muy sencillo, basta
con escribir el texto de aquello que quere-
mos encontrar y Vista nos irá mostrando y
modificando, a medida que vayamos escri-
biendo, la lista con los resultados. Por
ejemplo, si escribimos “Excel”, Vista nos
mostrará los documentos Excel de nuestro
equipo pero también el enlace para lanzar
Microsoft Excel. Si lo que queremos es bus-
car un documento cuyo autor es “Pablo”,
será suficiente con escribir “Pablo”.
Realmente, las posibilidades de búsqueda
son bastante potentes y su facilidad de uso
es, quizás, lo más llamativo. La figura 5
muestra el comportamiento de la funcio-
nalidad de búsqueda en el menú de inicio.
El explorador de Windows VistaEl Explorador de Windows es un clásico
entre los usuarios de este sistema operati-
vo. Es la aplicación más utilizada, ya que
nos permite acceder y organizar todo tipo
de información, desde fotografías hasta
documentos, pasando por ficheros de
audio, vídeo, etc., es decir: todo. Por lo
tanto, es lógico y normal que Microsoft
haya puesto especial atención en mejorar
la funcionalidad de esta parte del sistema.
Como puede apreciarse en la figura 6, el
nuevo explorador de Windows ofrece:
� BBúússqquueeddaa iinnssttaannttáánneeaa:: Siempre
disponible, permite encontrar archivos
y aplicaciones tal como se ha descrito
en el punto anterior (véase la figura 7).
24
MIDDLEWARE
http://digital.revistasprofesionales.com
Figura 2. La experiencia gráfica Aeroincluye ventanas con efectos traslúcidosque pueden ser configurados por elusuario.
Figura 3. Flip en acción (“Alt+Tab”) paraseleccionar la ventana activa.
Figura 5. Tan solo escribiendo la letra “c”,Vista nos muestra los programas queempiezan por dicha letra (“Calculator”,“Chess”, “Control Panel”, etc.) así como losficheros y directorios que tambiénempiezan por “c”.
Figura 6. El aspecto y las funcionalidadesofrecidas por el Explorador de Windowshan sufrido importantes cambios.
Figura 4. Flip 3D en acción(“Inicio+Tab”) para seleccionar laventana activa.
22-31 Middleware.qxd 20/12/06 12:22 Página 24
SOLO PROGRAMADORES nº 145
� BBaarrrraa ddee ccoommaannddooss:: Muestra las
funcionalidades adecuadas en base a
los archivos que están siendo mostra-
dos por el explorador (véase la figura 8).
� IIccoonnooss aacctt iivvooss: Muestran una minia-
tura del contenido real de cada archivo.
� PPaanneell ddee vviissttaa pprreevviiaa: Ofrece infor-
mación detallada acerca del fichero
seleccionado (véase la figura 9).
� PPaanneell ddee lleeccttuurraa: Permite tener una
vista previa del contenido de aquellos
archivos que tiene esta función habili-
tada.
Tecnología ClearTypeClearType será nuestro último punto de
análisis por lo que respecta a las noveda-
des de la parte gráfica del nuevo
Windows Vista. Pero… ¿qué es ClearType?
ClearType es una tecnología patentada
por Microsoft que tiene por objetivo
mejorar la legibilidad del texto en panta-
lla, influyendo positivamente también en
la comprensión y la velocidad de lectura
(véase la figura 10). ClearType ya estaba
presente en algunas ediciones de
Windows XP, aunque no estaba activo
por defecto, ya que ClearType es una tec-
nología especialmente diseñada para las
pantallas de última generación, muy
poco frecuentes hace unos años. Sin
embargo, ahora el escenario es comple-
tamente distinto: recientemente, las
pantallas de Tubo de Rayos Catódicos
(CRT) han dejado paso a las pantallas
planas, basadas en la tecnología Pantalla
de Cristal Líquido (LCD), empleadas ya
tanto en los equipos de sobremesa como
en el salón de los hogares.
Por esta razón, y en vista de este nuevo
panorama, ClearType se presenta como
una importante funcionalidad pensada,
sobre todo, para aquellos usuarios que
pasamos horas frente a la pantalla.
Los gadgets, un nuevo concepto de aplicación en Windows
Los gadgets de Windows Vista nacen
con el objetivo de resolver un problema
“de concepto”, presente en muchos sis-
temas operativos: Para utilizar una apli-
cación, lo primero es ejecutarla. El pro-
blema ocurre cuando tenemos la necesi-
dad de acceder a varias fuentes de infor-
mación de manera reiterativa en varios
momentos del día. Es decir, imaginemos
que, a lo largo del día, tenemos que uti-
lizar en repetidas ocasiones recursos
como la calculadora, la página web que
nos ofrece noticias meteorológicas, la
página web que nos ofrece noticias
deportivas, la página web que nos ofre-
ce noticias internacionales, nuestro pla-
nificador de tareas y el calendario. Para
todo esto, Windows XP nos ofrecía dos
opciones: Una de ellas era lanzar la apli-
cación deseada en cada momento: abrir
la calculadora, abrir el calendario, abrir
nuestro planificador de tareas y el
explorador de Internet. La segunda
opción era mantener todas estas aplica-
ciones activas, minimizadas en la barra
del escritorio, para poder usarlas cuando
fuera necesario sin tener que ejecutarlas
de nuevo. En ambos casos, se producía
una sobrecarga de rendimiento en el sis-
tema.
En este sentido, los gadgets de Vista
pretenden facilitar las tareas más repeti-
tivas del usuario que tienen que ver con
el acceso a la información. Veamos algo
más sobre los nuevos Microsoft gadgets.
SidebarWindows Sidebar es el panel que encon-
tramos a la izquierda de la pantalla, en el
escritorio (véase la figura 11). La función
de este panel es la de albergar a los gad-
gets del usuario, situándolos así en un
punto de acceso rápido. Windows
Sidebar puede configurarse para perma-
necer siempre visible o bien descansar
bajo la ventana activa.
GadgetsLos gadgets
pueden definirse
como miniapli-
caciones de na-
turaleza muy di-
versa. Tal como
se explica desde
Microsoft, desde
un gadget pode-
mos conectar-
nos a un servicio
web para obte-
ner cualquier ti-
po de informa-
ción (meteoroló-
gica, tráfico, ma-
pas , etc.), así co-
mo a cualquier
aplicación del
sistema (véase la
figura 12). Es
decir, un gadget
puede tener cual-
quier fin, por lo
que será nuestro
ingenio, el de los
desarrolladores,
quien pueda ex -
plotar todas las
capacidades de
este nuevo tipo
de aplicaciones. En futuras ediciones de
Sólo Programadores, esperamos poder
ofrecer las nociones necesarias para el
desarrollo de este tipo de programas
para Windows Vista. Mientras tanto, solo
comentar que Vista incorpora, por defec-
to, un buen número de gadgets, aunque
Microsoft ofrece, en el sitio http://
microsoftgadgets.com, muchos otros
para que puedan ser descargados e
instalados.
25
MIDDLEWAREPrimera aproximación a Windows Vista
http://digital.revistasprofesionales.com
Figura 7. Funciones de búsquedainstantánea del Explorador de Windows.
Figura 10. ClearType es una tecnologíapatentada por Microsoft.
Figura 11. WindowsSidebar, el panel donde sealojan nuestros gadgets.
Figura 8. Funciones de barra decomandos del Explorador de Windows.
Figura 9. Funciones de vista previa delExplorador de Windows.
22-31 Middleware.qxd 20/12/06 12:22 Página 25
SOLO PROGRAMADORES nº 145
Rendimiento
Estas líneas van especialmente dirigidas
a los usuarios de sistemas Windows:
seguro que todos hemos vivido inconsis-
tencias en el rendimiento de nuestros
sistemas. Es decir, un día las aplicaciones
se inician de manera rápida y funcionan
bien, sin embargo, por causas desconoci-
das, el paso del tiempo hace que nuestro
sistema cada vez sea más lento y que las
aplicaciones tarden más en iniciarse.
Además, los programas van mucho más
rápidos por la mañana que a última hora
de la tarde, cuando estos llevan todo el
día en marcha. ¿Por qué ocurre esto?
¿Será capaz Windows Vista de acabar
con esta inconsistencia de rendimiento?
En este sentido, la nueva versión de
Windows incorpora una serie de tecnolo-
gías orientadas, precisamente, a ofrecer
un alto rendimiento.
SuperFetchNueva tecnología de administración de
memoria disponible en Windows Vista,
que permite ofrecer una experiencia de
rendimiento consistente. Los algoritmos
de gestión de memoria anteriores a
SuperFetch únicamente cambian el con-
tenido de la memoria RAM cuando una
nueva aplicación debe ejecutarse. Es
entonces cuando actúan para buscar
sitio en la memoria RAM del equipo. Con
algoritmos de este tipo, el problema
surge cuando el usuario abandona su
puesto de trabajo durante unas horas.
Esto provoca que aquellas tareas que se
ejecutan en segundo plano (escaneo de
virus, indexación, etc.) pasen a ocupar
buena parte de la memoria para realizar
sus tareas. El problema surge cuando el
usuario regresa a su puesto de trabajo y
quiere utilizar las aplicaciones que esta-
ba utilizando antes de ausentarse. En
este momento, el sistema debe de res-
taurar la memoria RAM para dejarla tal
como estaba, con la consiguiente pérdi-
da de rendimiento. Es en este momento
cuando el usuario tiene la sensación de
que su equipo funcionaba mejor antes de
abandonar su puesto de trabajo.
SuperFetch administra la memoria
mediante un algoritmo que da prioridad
a las aplicaciones de usuario sobre las
tareas en segundo plano. Con
SuperFetch, las tareas en segundo plano
se siguen ejecutando en aquellos
momentos en los que el equipo está
inactivo. Sin embargo, cuando finalizan
SuperFetch las elimina de la RAM para
ubicar nuevamente las aplicaciones del
usuario.
E/S de baja prioridadAunque la tecnología SuperFetch va a
influir positivamente en el rendimiento
del sistema, otro de los aspectos claves
en la capacidad de respuesta del sistema
son las operaciones de Entrada/Salida
(E/S). En Windows XP todas las aplicacio-
nes tenían la misma prioridad a la hora
de acceder a un dispositivo, como por
ejemplo el disco duro. Ahora, Windows
Vista introduce el concepto de E/S de
baja prioridad, lo cual permite escribir
aplicaciones que tendrán menos priori-
dad a la hora de acceder a los dispositi-
vos externos.
ReadyBoostTodos sabemos que una de las maneras
de mejorar el rendimiento de nuestro
equipo es aumentar la memoria RAM.
Esta solución, obviamente, sigue siendo
válida para Windows Vista, aunque es
algo costosa. La tecnología ReadyBoost
permite extender la memoria del equipo,
enchufando una unidad flash USB, por
ejemplo, que actuará como una memoria
caché adicional y que ofrecerá un tiem-
po de acceso mucho menor a al del disco
duro. Combinar las tecnologías Ready
Boost con SuperFetch puede aportarnos
una mejor capacidad de respuesta por
parte del sistema operativo.
26
MIDDLEWARE
http://digital.revistasprofesionales.com
Figura 12. Gadgets en el escritorio de Windows Vista.
Figura 13. Página web de Microsoft dedicada a los gadgets de Windows Vista(http://microsoftgadgets.com).
22-31 Middleware.qxd 20/12/06 12:22 Página 26
Sólo Programadoresen FormatoDigital
Por menos dineroLlegará antes a su ordenador que a los quioscos
Entra en http://digital.revistasprofesionales.comSuscripción anual a Sólo Programadores (12 números) por sólo 27 eurosSuscripción anual a Sólo Programadores (12 números) y a Mundo Linux(6 números) por sólo 30 euros
Regalo de un CD-ROM con el archivo de los 12 ejemplaresde la temporada 2004-05
22-31 Middleware.qxd 20/12/06 12:22 Página 27
SOLO PROGRAMADORES nº 145
Utilizar la tecnología ReadyBoost es muy
sencillo, algo que los usuarios sin duda
agradecerán: basta con enchufar el disco
externo USB. En este momento, Windows
Vista comprobará la velocidad de acceso
y, en caso de que sea un dispositivo apto
para la tecnología ReadyBoost, el siste-
ma nos mostrará una ventana de diálogo
en la que nos preguntará si queremos
utilizar este dispositivo para extender la
memoria de nuestro equipo. Así de sim-
ple.
ReadyDriveTecnología que tiene por objeto ofrecer
un inicio, hibernación y reanudación más
rápido. La utilización de esta tecnología
tiene como requisito el disponer de un
disco duro híbrido (integra la memoria
flash no volátil en la unidad de disco).
ReadyDrive está pensado para equipos
móviles, ya que permite que estos pue-
dan prescindir, en ocasiones, del disco
duro mecánico, con el consiguiente
ahorro de energía.
Redes
Windows Vista aglutina todas las funcio-
nes relativas a la conexión del equipo en
el Centro de Redes, puesto de control
que permite al usuario comprobar el
estado de su conexión, ver gráficamente
la topología de la red y los equipos
conectados, así como solucionar proble-
mas de conexión. Sin embargo, en nues-
tra opinión la mejora más destacable es
el concepto Connect Now de Windows
Vista. Gracias a Connect Now, es posible
guardar la configuración de la red en
una unidad de almacenamiento flash
USB, que nos permitirá simplificar el
proceso de agregar a la red equipos o
dispositivos adicionales. Para ello, tan
solo será necesario insertar el disco USB
al dispositivo en cuestión para que éste
obtenga todos los datos de configura-
ción de la red, quedando así conectado
de manera casi instantánea.
La idea que hay tras Connect Now es,
como puede suponerse, facilitar al usua-
rio las tareas de conexión entre disposi-
tivos heterogéneos, como puedan ser
varios equipos, impresoras, reproducto-
res de música, sistemas de juego, etc.
Tablet PC
Esta sección va dedicada a los usuarios
de sistemas Tablet PC. Las novedades que
expondremos en este punto serán bien-
venidas por los usuarios de este tipo de
dispositivos, que a menudo han experi-
mentado un sentimiento de frustración
al realizar acciones como seleccionar
varios elementos, uso de la pantalla tác-
til sin el lápiz, escritura a mano, borrado
de caracteres, etc.
Lápiz mejoradoEl uso del lápiz en Windows XP Tablet PC
Edition presentaba, básicamente, dos
problemas. Por un lado, falta de preci-
sión, ya que en ocasiones podía resultar
algo difícil apuntar a un elemento
pequeño, como por ejemplo una barra de
desplazamiento. Por otro lado, falta de
“feedback” por parte del sistema cuando
el usuario punteaba con el lápiz. Esto
último provocaba que el usuario no
supiera si era debido a que no había
punteado con suficiente fuerza o bien a
que el sistema era lento.
Ambos problemas han sido solucionados
con la presente edición de Windows
Vista para Tablet PC. Por un lado, el lápiz
ofrece mayor precisión, y por otro, ofre-
ce comentarios visuales cuando puntea-
mos, gracias a los cuales podremos saber
de qué manera el sistema ha percibido la
presión que hemos hecho sobre la pan-
talla (véase la figura 15).
Además, Windows Vista añade el con-
cepto de “Movimientos rápidos del
lápiz”, una nueva funcionalidad que nos
permitirá realizar acciones de manera
ágil aumentando así nuestra productivi-
dad. Por ejemplo, desplazando con velo-
cidad el lápiz en sentido descendente
conseguiremos el mismo efecto que si
punteamos sobre la barra de desplaza-
miento y arrastramos hacia abajo (véase
la figura 16). También es posible realizar
acciones de edición, como copiar, cortar
y pegar. Además, los movimientos rápi-
dos del lápiz pueden ser personalizados.
Pantalla táctil compatibleEn caso de que la entrada táctil del dis-
positivo esté disponible, podrán realizar-
se las acciones sobre ella con el lápiz,
pero también con los dedos. Obviamente,
con el dedo se pierde precisión, sin
embargo Windows Vista nos mostrará un
“área de acción”, similar al puntero del
ratón, que se desplazará debajo de nues-
tro dedo y que nos asistirá en las tareas
donde se requiera mayor precisión.
Mejor reconocimiento en la escritura amanoEl reconocimiento de la escritura a mano
es un tema complejo, pues cada persona
28
MIDDLEWARE
http://digital.revistasprofesionales.com
Figura 14. La interconexión de dispositivos es más fácil con Connect Now.
Figura 15. Comentarios visuales mostrados por Windows Vista al puntear con el lápizsobre nuestro Tablet PC.
22-31 Middleware.qxd 20/12/06 12:22 Página 28
SOLO PROGRAMADORES nº 145
tiene su caligrafía particular. Es muy pro-
bable que el lector haya intentado escri-
bir alguna palabra con un dispositivo
dotado de reconocimiento de escritura y
se haya sentido frustrado por la baja tasa
de éxito en el reconocimiento. La solu-
ción que se ha adoptado referente a este
tema en Windows Vista es el entrena-
miento del sistema. De esta manera, el
usuario no tendrá que cambiar su mane-
ra de escribir, sino que será el reconoce-
dor de escritura quien adaptará su com-
portamiento en función del estilo de
escritura del usuario, después de un
periodo de entrenamiento, claro está.
Mejores opciones de borradoEn Windows XP Tablet PC Edition el
borrado de palabras o caracteres se hacía
mediante el dibujo del símbolo Z.
Windows Vista se muestra más tolerante
en este sentido, ya que ofrece más varie-
dad de dibujos para la acción de borrado,
como por ejemplo M o W. Además, si el
lápiz del Tablet PC incorpora borrador,
éste también puede ser usado para hacer
correcciones en la escritura.
Windows SideShow
Windows SideShow es una nueva plata-
forma orientada a funcionar en disposi-
tivos con pantallas secundarias, ya sean
teléfonos móviles, ordenadores portáti-
les, etc. La idea que hay tras Windows
SideShow es ofrecer al usuario la posibi-
lidad de realizar acciones rápidas de
manera ágil sin la necesidad de abrir el
portátil, tal sólo interactuando con la
pantalla auxiliar (véase la figura 17).
Estas acciones pueden ser, por ejemplo,
revisar si hay nuevos correos electróni-
cos en la bandeja de entrada o bien che-
quear la agenda del día.
Reconocimiento de voz
Windows Vista es un sistema sensibiliza-
do con la accesibilidad, y prueba de ello
son las numerosas aportaciones que
hace en este campo. Sin embargo, la más
espectacular de ellas es la que tiene que
ver con el reconocimiento de voz.
Podemos dar fe de que las demostracio-
nes de reconocimiento de voz realizadas
por el personal de Microsoft en los dis-
tintos eventos celebrados en los últimos
meses, han sido realmente espectacula-
res. Es importante destacar que el reco-
nocimiento de voz no se limita a ciertos
comandos, sino que permite al usuario
dictar un texto, reconociendo así el len-
guaje natural.
En efecto, el reconocimiento de voz de
Windows Vista permite a los usuarios
prescindir del ratón y del teclado para
muchas de las acciones más habituales,
como puedan ser la redacción de un
documento de texto o un correo electró-
nico (ahora bastará con dictarlo, no será
necesario escribirlo), ejecutar un progra-
ma como Microsoft Excel, minimizar una
ventana, etc.
29
MIDDLEWAREPrimera aproximación a Windows Vista
http://digital.revistasprofesionales.com
Figura 16. Usando los movimientos rápidos el lápiz para leer un documento de variaspáginas.
Figura 17. Los dispositivos con pantalla auxiliar podrán explotar las características deWindows SideShow.
22-31 Middleware.qxd 20/12/06 12:22 Página 29
SOLO PROGRAMADORES nº 145
El inconveniente que presenta, y que es
inherente a las tecnologías de reconoci-
miento del lenguaje natural, es que el
sistema requiere de un entrenamiento
para ofrecer tasas de reconocimiento
aceptables. En este sentido, después de un
entrenamiento guiado por un asistente
(proceso que puede llevarnos entre una
hora y dos horas), el sistema empezará a
reconocer nuestra voz. Sin embargo, sí es
posible afirmar que el sistema funcionará
cada vez mejor, puesto que en cada sesión
de interacción mediante voz el sistema
aprenderá de nuestra forma de hablar,
consiguiendo así mejores resultados cada
vez que usemos el reconocedor.
Además, Windows Vista también incorpora
un sistema de síntesis de voz, por lo que el
sistema no solo está preparado para escu-
char, sino que también podrá hablar.
WinFX
WinFX es el nombre que recibe el nuevo
modelo de programación en el que se
basarán las nuevas aplicaciones creadas
para funcionar sobre Windows Vista.
WinFX incluye a la plataforma .NET y, ade-
más, incorpora Cuatro módulos cuya fun-
cionalidad se detallará a continuación. Sin
embargo, aquí va un avance:
� WWiinnddoowwss PP rreesseennttaa tt ii oonn FFoouunn
ddaatt iioonn ((WWPPFF)) :: Proporciona las clases
necesarias para la capa de presenta-
ción de las aplicaciones. Más allá de los
clásicos formularios de introducción y
presentación de datos, WPF permitirá
interfaces de usuario avanzadas basa-
das en documentos y multimedia.
� TTeeccnnoollooggííaa ““ IInnffooCCaarrdd”” ddee MMiiccrroo
ssooff tt :: Orientado al acceso de la infor-
mación online más sensible, añade
seguridad en este tipo de acciones
comprometidas.
� WWiinnddoowwss CCoommmmuunniiccaatt iioonn FFoouunn
ddaa tt ii oonn ((WWCCFF )) :: Proporciona los
recursos necesarios para crear apli-
caciones orientadas a servicios del
tipo “bajo demanda” y/o “tiempo
real”.
� WWiinnddoowwss WWoorrkk ff ll ooww FFoouunnddaatt ii oonn
(( WW FF )) :: Propone un modelo de
programación, así como un conjunto
de herramientas, que facilitará el
modelado de procesos empresariales,
así como el desarrollo de aplicacio-
nes basados en ellos.
El objetivo de WinFX es ofrecer un marco
de desarrollo coherente, que permita
crear aplicaciones que ofrezcan experien-
cias de usuario gratificantes y que pue-
dan explotar al máximo las virtudes del
sistema operativo Windows Vista.
Según se afirma desde Microsoft, las nue-
vas características de WinFX permitirán
abrir la puerta a nuevos tipos de aplica-
ciones, muy difíciles de concebir e imple-
mentar en las versiones anteriores de
Windows.
Windows Presentation FoundationWPF es el subsistema encargado de todo
lo relativo a la presentación en Windows
Vista. Como programadores, nos interesa-
rá usar WPF en nuestros desarrollos, ya
que nos permitirá crear interfaces de
usuario nunca vistas hasta ahora, que
podrán combinar 2D con 3D, incluir docu-
mentos, gráficos vectoriales, vídeo, audio
y, como gran novedad, voz.
XAML es la piedra angular de este subsis-
tema, ya que permite separar de forma
definitiva los elementos de interfaz de
usuario de la lógica de la aplicación.
Gracias a esto, la interfaz de usuario
podrá ser desarrollada de manera íntegra
por un equipo de diseñadores, siendo
mínima la colaboración necesaria entre
estos y los programadores. Sólo
Programadores ya dedicó en su día una
extensa serie de artículos a esta tecnolo-
gía. Sin embargo, prometemos profundi-
zar más en ella, por lo que esperamos
poder ofrecer, en breve, más artículos en
esta línea.
InfoCardConscientes de los peligros existentes en
la Red, sobre todo en lo relativo a la
suplantación de la identidad (phishing),
Microsoft ha desarrollado una tecnología
que vendrá incluida en WinFX, cuyo nom-
bre en clave es “InfoCard”, gracias a la
cual, entre otras cosas, podremos prescin-
dir del sistema de identificación de usua-
rio por excelencia: usuario/contraseña.
“InfoCard” basa su funcionamiento en
tarjetas de identidad (credenciales) que el
usuario final podrá adquirir en centros de
confianza (bancos, empresas, institucio-
nes públicas, etc.) para luego usar en sus
transacciones. El objetivo no es otro que
proporcionar experiencias de usuario más
seguras y cómodas.
Windows Communication FoundationWindows Communication Foundation es
uno de los pilares de WinFX. Es la infraes-
tructura de comunicaciones que nos per-
mitirá, a nosotros los desarrolladores,
programar aplicaciones distribuidas
seguras, estables y orientadas a servicios
(SOA). Windows Communication Foun
dation se apoya en tecnologías ya cono-
cidas y probadas como Enterprise
Services, System Messaging, .NET
Remoting, ASMX y WSE, y añade a todo
ello la compatibilidad con REST, RSS y los
protocolos de servicios web WS-* entre
muchos otros.
Windows Workflow FoundationEn el subsistema Windows Workflow
Foundation encontraremos tanto las
herramientas, como el motor, como el
modelo de programación necesario para
crear soluciones basadas en los procesos
de negocio particulares de cada momento.
El objetivo de un subsistema como este no
es otro que el permitir a las empresas y a
los fabricantes de software (ISV) diseñar
con más facilidad software capaz de
modelar negocios que están en constante
evolución.
Y también .NETComo se ha visto, WinFX incorpora una
serie de funcionalidades orientadas exclu-
sivamente a programadores, y repartidas
en los cuatro subsistemas vistos anterior-
mente. Sin embargo, además, WinFX tam-
bién incluye .NET framework, quedando
así un entorno tecnológico absolutamen-
te completo.
Conclusiones
Con este artículo hemos pretendido dar
una visión global del nuevo sistema ope-
rativo de Microsoft: Windows Vista.
Como se ha dicho, las novedades son
muchas, y van orientadas tanto a los
usuarios finales, como a los desarrolla-
dores de software. Como profesionales
de este sector, y teniendo en cuenta la
cuota de mercado que acaparan los pro-
ductos de Microsoft, estamos obligados
a conocer, como mínimo, todas y cada
una de las prestaciones de esta
nueva plataforma. Esperemos que este
artículo haya servido como punto de
partida.
30
MIDDLEWARE
http://digital.revistasprofesionales.com
22-31 Middleware.qxd 20/12/06 12:22 Página 30
Suscripción a Mundo Linux y Sólo ProgramadoresSUSCRIPCIÓN PARA ESPAÑA�Opción A: Suscripción anual con 35% descuento:
69,90 euros* (9 revistas gratis, 50,19 euros de ahorro)�Opción B: Suscripción anual con 15% descuento:
91,42 euros* (1 tapa de regalo de cada revista, 21,61 euros de ahorro)*10 euros de gastos de envío para la opción contrareembolso
SUSCRIPCIÓN PARA EXTRANJERO�Opción C: Suscripción anual con 35% descuento
96,91 euros (gastos de envío incluidos)FORMA DE PAGO EXTRANJERO:� VISA + fecha de caducidad
FORMAS DE PAGO PARA ESPAÑA� Contrareembolso (10 euros gastos de envío)� Giro Postal a Revistas Profesionales, S.L.� Transferencia al Banco Popular:
c.c:0075/1040/43/0600047439� Talón Bancario a nombre de Revistas Profesionales� Domiciliación Bancaria� VISA + fecha de caducidad
REGALO DE 2 CD-ROMs CON LOS ARCHIVOSDE LOS 12 EJEMPLARES
DE LA TEMPORADA 2004-05 DE MUNDO LINUX Y SOLO PROGRAMADORES
Solicitud de suscripciones y más información en el teléfono 91 304 87 64, en el fax 91 327 13 07y en rpsuscripciones@revistasprofesionales.com
22-31 Middleware.qxd 20/12/06 12:22 Página 31
SOLO PROGRAMADORES nº 145 32
REDES
http://digital.revistasprofesionales.com
Mecanismos de cache en ASP.NET 2.0 (I)
Introducción
Antes de la llegada de ASP.NET, si queríamos
cachear contenidos para optimizar el rendimien-
to de nuestras aplicaciones no teníamos más
alternativa que “currarnos” nuestro propio siste-
ma de cache, usando lo que teníamos más a
mano. Bien usando variables de sesión, de apli-
cación o incluso guardando contenidos en el
disco la primera vez que eran generados. Por
supuesto, no contábamos con más ayuda, así
que toda la lógica de control sobre los conteni-
dos cacheados también recaía sobre nosotros. Si
necesitábamos que estos expirasen pasado un
tiempo o ante una determinada condición, tení-
amos que añadir código adicional a nuestros
desarrollos.
Afortunadamente, llegó ASP.NET y, con él, un
nuevo mecanismo para cachear contenidos
completamente integrado en el framework. Por
fin cachear contenidos iba a ser fácil y producti-
vo. Además con todas las facilidades del mundo:
� Cache de páginas web completas, o sólo de
algunas partes.
� Cache de objetos (¡cualquier clase de
objeto!).
� Caches que se pueden anular por si solas
pasado un tiempo, cuando cambien deter-
minados datos, e incluso ante cambios en la
base de datos (novedad en .NET 2.0).
Y por si todo esto no nos basta, siempre pode-
mos ampliar el mecanismo de cache de ASP.NET
con otros desarrollados por terceros.
¿Cuándo debemos cachear?
La respuesta no es sencilla. Por supuesto habrá
escenarios donde no sea posible cachear conteni-
dos, pero lo normal es que sí podamos. ¿Candidatas
perfectas? Páginas de acceso frecuente, en las que
su contenido no necesite estar actualizado al
segundo, donde la generación de la página lleve
cierto tiempo y recursos, y donde el contenido de la
página sea válido para multitud de usuarios. Esto
es importante: el contenido guardado en cache, a
diferencia del que se almacena en la sesión de
usuario, es válido para todos y cada uno de los
usuarios del sistema. Por tanto, ¡prohibido guardar
en cache una página que contenga datos de un
usuario en particular!
Un ejemplo de página perfecta para ser cacheada:
la página principal del diario El Mundo
(www.elmundo.es). Es una página bastante pesada
(en torno a 700kb), donde seguramente haya dece-
nas o cientos de accesos a la base de datos por
cada petición, y que sin dudarlo debe de ser una de
las páginas más accedidas de España. Su conteni-
do no necesita estar actualizado al segundo. No
pasa nada si una noticia se publica y tarda 10, 15,
o 30 minutos en aparecer. Bastaría con cachear la
página principal durante 30 minutos para reducir
los accesos a la base de datos en miles de veces. Y
si surge una noticia de máxima urgencia, siempre
se puede vaciar la cache manualmente. O incluso
reducir el tiempo de expiración de la misma a 5
minutos. Aún con tan poco tiempo, los resultados
serán más que apreciables, incrementando por
tanto la capacidad de nuestro servidor web para
servir páginas (ver figura 1).
También hay ocasiones donde es no es convenien-
te cachear. Por ejemplo, páginas con pocos accesos,
páginas muy dinámicas cuyos contenidos varíen en
función del usuario, páginas que no accedan a la
base de datos, o aquellas donde sea imprescindible
que la información este siempre actualizada.
Lo cierto es que incluso en estos escenarios “adver-
sos” siempre hay algo que se puede cachear. Por
ejemplo, en una página específica para un usuario
puede que algunas secciones sean comunes a
todos (las últimas noticias, la lista de noticias más
leídas, etc.). En este caso bastaría con aplicar el
JUAN LUIS CEADA RAMOS
Mecanismos de cache enASP.NET 2.0 (I)
Con este artículo iniciamos unaserie en la que abordaremos uno delos aspectos más potentes deASP.NET 2.0: la cache. Gracias alos mecanismos de cache ofrecidospor el framework .NET, podremosmejorar el rendimiento de nuestrasaplicaciones web de una manerarápida y sencilla.
30-36 Redes cache 20/12/06 14:51 Página 32
SOLO PROGRAMADORES nº 14533
REDES
http://digital.revistasprofesionales.com
Mecanismos de cache en ASP.NET 2.0 (I)
cacheo parcial de páginas. O si el contenido
de una página debe de estar permanente-
mente actualizado, siempre podemos recurrir
al microcaching, estableciendo tiempos de
expiración de 60 segundos o menos.
Una vez dejado claro cuáles son los conteni-
dos más propensos a ser cacheados, veamos
cómo hacerlo.
Cache de páginas completas
Hacer que una página se guarde en cache la
primera vez que se solicite es sorprenden-
temente fácil. Basta con añadir la directiva
“OutputCache” en la cabecera de la página.
Por ejemplo:
<% OutputCache Duration=”3600”
VaryByParam=”none” %>
Esta sentencia hace que la página se cachee
durante 3600 segundos (1 hora).
Por supuesto la directiva “OutputCache” tiene
algunos parámetros adicionales. La sintaxis
completa es la mostrada en el listado 1.
El atributo “Duration” tiene un propósito
claro. Controla la duración en segundos de la
página en cache. El atributo “Location” sirve
para especificar dónde se debe cachear el
contenido de la página. Los posibles valores
son “Any” (valor por defecto, el contenido
cacheado puede almacenarse en cualquier
punto por donde pasen los datos, ya sea el
servidor, el cliente, o algún proxy intermedio),
“Client” (el contenido se cachea en el cliente),
“Downstream” (el contenido se cachea en los
servidores proxy intermedios o en el cliente),
“Server” (el contenido se cachea en el servi-
dor), “ServerAndClient” (sin comentarios) y
“None” (el contenido no se cachea, equivale
por tanto a desactivar la cache). Con respecto
al valor “None” debéis saber que desactiva la
cache a nivel de página, pero no la cache de
los controles de usuarios que la tengan acti-
vada (partial caching).
¿Cuándo usar una u otra localización? Lo
normal es dejar el valor por defecto, “Any”,
para que el contenido se cachee en cual-
quier punto de la cadena de ejecución
(cliente, proxy intermedio, servidor). Si el
navegador cliente tiene la cache activada,
la página le aparecerá en pantalla sin que la
petición haya tenido que llegar al servidor,
reduciéndose por tanto el tráfico que este
soporta. Si el cliente tiene la cache desacti-
vada, al menos nos quedará la esperanza de
que algún proxy intermedio haya cacheado
la página. Si tampoco ha ocurrido esto,
entonces nuestro último cartucho es nues-
tro servidor, que servirá la página de la
cache en vez de tener que generarla de
nuevo.
Sólo en algunos casos puede ser interesan-
te usar los otros valores. Por ejemplo, el
valor “Client” puede usarse para cachear
páginas directamente en la máquina clien-
te. De esta forma podríamos conseguir que
páginas específicas para un usuario (cuyo
contenido requiera autorización o se gene-
re en función del login) también se puedan
LISTADO 1 Sintaxis de OutputCache
<%@ OutputCache Duration=”#ofseconds”Location=”Any | Client | Downstream | Server | None | ServerAndClient “Shared=”True | False” VaryByControl=”controlname”VaryByCustom=”browser | customstring” VaryByHeader=”headers”VaryByParam=”parametername” CacheProfile=”cache profile name | ‘’”NoStore=”true | false”SqlDependency=”database/table name pair | CommandNotification”
%>
Figura 1. Incluso con caches de 1 segundo de duración se obtienen mejoras en lacapacidad de respuesta del servidor web. Fuente: http://aspalliance.com/251.
Figura 2. Una página que es perfecta para cachear: www.elmundo.es.
30-36 Redes cache 20/12/06 14:51 Página 33
SOLO PROGRAMADORES nº 145 34
REDES
http://digital.revistasprofesionales.com
beneficiar de la cache, puesto que la página
cacheada sólo sería visible para el usuario en
cuestión (es lo que se conoce como cache pri-
vada). Por supuesto, al delegar el almacena-
miento en la máquina del usuario no podemos
garantizar que se vayan a cachear los datos,
porque en la mayoría de los navegadores se
puede desactivar el uso de páginas cacheadas.
Sobre el atributo “DiskCacheable” no hay
mucho que decir, salvo que lo encontraréis en
multitud de documentación pero en realidad
no funciona. Se “cayó” de ASP.NET con el cam-
bio de la versión Beta 2 a la versión final. Según
la propia Microsoft “esta característica no
satisfacía nuestros objetivos de rendimiento”.
Con respecto los atributos “Vary*”, nos ser-
virán para indicar cuándo se deben cachear
múltiples versiones de una página.
Supongamos que tenemos una página a la
que hay que llamar con la siguiente URL:
http://server/mipagina.aspx?categoria=1
En dicha página, además tenemos esta
directiva:
<% OutputCache Duration=”3600”
VaryByParam=”none” %>
que hace que la página se cachee durante
1 hora. ¿Qué pasará cuando el usuario
solicite otra categoría? Pues que se le ser-
virá la página que está en cache, y por
tanto, vería datos relativos a la categoría
1, independientemente de la categoría que
esté solicitando. ¿Cómo evitamos este
comportamiento? Usando el atributo
“VaryByParam”.
Este atributo nos permite indicar al siste-
ma de cache que debe basarse en determi-
nados parámetros de la página a la hora
de cachearla. Con el valor “none”, como
hemos visto, se almacenaría en cache
una única versión de la página. Con lo
siguiente:
VaryByParam=”categoria”
se cachearía una página distinta por cada
categoría que se solicitase. Con esto:
VaryByParam=”categoria;producto”
se almacenaría separadamente en cache
cada página que se solicite con una combi-
nación de los parámetros categoría y pro-
ductos distinta. Y con esto:
VaryByParam=”*”
se tendría en cuenta cualquier parámetro a
la hora de cachear la página.
Hay que tener cuidado con el uso que hace-
mos de este atributo. Tened en cuenta que
cachear contenidos consume memoria en
el servidor. Si existiesen 10 categorías, con
una media de 20 productos en cada cate-
goría, un VaryByParam=”categoria;produc-
to” significaría que se podrían llegar a
guardar en cache hasta 20*10 = 200 pági-
nas. Si cada una de ellas pesase unos
100KB, ¡podríamos ocupar hasta 20 MB de
memoria! Y ni os cuento el peligro que
puede suponer usar el “*”.
El atributo VaryByHeader es similar al ante-
rior. Almacena en cache separadamente
cada página en función de las cabeceras
HTTP. Por ejemplo, con:
VaryByHeader=”Accept-Language”
la cache contendría una versión distinta de
la página solicitada para cada lenguaje
existente. Este atributo además se puede
combinar con el anterior (y cuidado porque
de nuevo se pueden generar más entradas
en cache de las deseadas).
Por último, “VaryByCustom”. Básicamente
nos permite indicar un criterio propio para
que se guarden diferentes versiones de la
LISTADO 2 Creando un perfil de cache
<caching><outputCacheSettings>
<outputCacheProfiles><add name=”cache1horasinparams” duration=”3600” varyByParam=”none” /><add name=”cache30minporlenguaje” duration=”1800” VaryByHeader=”Accept-Language” />
</outputCacheProfiles></outputCacheSettings>
</caching>
Figura 3. Ejemplo de cache de páginas, con un tiempo de expiración de 10 segundos.
Figura 4. Ejemplo de cache de páginas, con sustitución post cache.
30-36 Redes cache 20/12/06 14:51 Página 34
SOLO PROGRAMADORES nº 145
misma página en cache. Por falta de espa-
cio no nos podemos parar mucho más con
este atributo, pero os dejo un enlace a un
artículo donde podréis aprender mucho
más sobre él: http://msdn2.microsoft.com/
en-us/library/ms550239.aspx.
Lo cierto es que pocas veces he usado estos
dos últimos atributos. Normalmente, con
“VaryByParam” he tenido (y tendréis) más
que suficiente, pero es importante que los
conozcáis. Una cosa más: el atributo
“VaryByParam” es obligatorio, así que ten-
dréis que incluirlo en la directiva
“OuputCache” si o si, aunque sea de esta
manera:
VaryByParam=”none”
Sobre el atributo “SqlDependency”, habla-
remos en la próxima entrega, cuando vea-
mos las dependencias.
Perfiles¿No pensáis que andar colocando en cada
una de vuestras páginas (o en alguna de
ellas) directivas “OutputCache” a la larga
puede dificultaros el mantenimiento?
Imaginad que se os ocurre cambiar el tiempo
de expiración. ¿Tendréis que ir página a pági-
na cambiando el atributo “Duration”? Se
puede, desde luego. Pero es mucho más sen-
cillo definir un perfil.
Para crear un perfil de cache basta con que
añadáis algo como lo que contiene el listado
2 a la sección “system.web” del “web.config”.
En este caso hemos creado dos perfiles. Uno
que cachea durante una hora, sin hacer múl-
tiples versiones de la página, y otro que
cachea durante media hora y que genera
múltiples versiones en función del idioma del
navegador. Para hacer uso de ellos, bastará
con hacer:
<%@ OutputCache CacheProfile
=”nombredelperfil” %>
Un cambio en el perfil afectaría inmediata-
mente a cualquier directiva “OutputCache”
que lo use.
Sustitución post-cacheSeguro que alguno está pensando: “tengo
una página que es candidata perfecta para
ser cacheada, pero no puedo hacerlo porque
tengo que mostrar en la cabecera un mensa-
je personalizado en función del usuario”.
Buenas noticias, también han pensado en
esto los chicos de Microsoft.
Si queréis cachear una página, pero necesi-
táis que una parte de ella se mantenga diná-
mica (sin tener que recurrir al partial
caching), entonces tendréis que usar el con-
trol “<asp:Substitution>”. Este control actúa
como un contenedor, donde podremos situar
cualquier cadena que deseemos. La cadena
puede ser un simple mensaje de texto plano,
o un texto de cientos de líneas en formato
HTML. Sea lo que sea, tampoco conviene que
sea algo excesivamente largo o que lleve
tiempo generar, porque entonces estaríamos
desaprovechando parte del aumento de ren-
dimiento que nos permite el uso de la cache.
El funcionamiento es el siguiente: insertare-
mos un control “<asp:Substitution>” en la
página. En su propiedad “MethodName” indi-
caremos el nombre del método que devolve-
rá la cadena a mostrar. Dicho método lo
codificaremos en el code behind de la página
.aspx donde hayamos insertado el control, y
debe tener el siguiente interfaz:
public static string
NombreDelMetodo(HttpContext context) {
//hacer cosas
return cualquiercadena;
}
Cada vez que solicitemos la página en cues-
tión, esta se extraerá de la cache, pero antes
de devolver el contenido al cliente se realiza-
rá la “substitución”, llamando al método que
hayamos definido, que retornará la cadena
que queramos. Existe una alternativa por
35
REDESMecanismos de cache en ASP.NET 2.0 (I)
http://digital.revistasprofesionales.com
TABLA 1. Algunos ejemplos de cacheo en tiempo de diseño y su alternativa en tiempo de ejecuciónTTiieemmppoo ddee ddiisseeññoo
<% OutputCache Duration=”100” Location=”Any” VaryByParam=”none” %>
<% OutputCache Duration=”100” Location=”Client” VaryByParam=”none” %>
<% OutputCache Duration=”100” Location=”None” VaryByParam=”none” %>
<%@ OutputCache Duration="60" Location="Downstream" VaryByParam="None" %>
<% OutputCache Duration=”100” Location=”Any” VaryByParam=”categoria” %>
TTiieemmppoo ddee eejjeeccuucciióónn
Response.Cache.SetExpires(DateTime.Now.AddSeconds(100));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(100));Response.Cache.SetCacheability(HttpCacheability.Private);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(100));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetNoServerCaching();
Response.Cache.SetExpires(DateTime.Now.AddSeconds(100));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.VaryByParams["categoria"] = true;
Figura 5. Ejemplo de cache de objetos.
30-36 Redes cache 20/12/06 14:51 Página 35
SOLO PROGRAMADORES nº 145 36
REDES
http://digital.revistasprofesionales.com
código para el control “asp:substitution”:
el método “Response.WriteSubstitution
(NombreDelMetodo)”. Como podéis ver, en
este caso también hacemos uso de un méto-
do callback para escribir la cadena “sustitu-
ta”. Gracias a este método podremos aprove-
charnos de las sustituciones sin necesidad
de tener que insertar un control en la pági-
na, y con la ventaja de que el método call-
back puede estar en cualquier clase, y no
sólo en el code behind de la página.
Una cosa más: cuando se usa la sustitución
automáticamente se modifica la localización
de la cache (atributo “Location” de la directi-
va “OutputCache”), pasando a ser “server
only”. Es la única forma de garantizar que el
contenido de la cache va a ser “sustituido”
en todas las peticiones, ya que si se cachea-
se en el cliente a partir de la segunda peti-
ción ya no habría sustitución posible.
Partial caching
Hasta ahora hemos hablado de cachear pági-
nas completas. Pero a veces resulta más inte-
resante cachear sólo partes de estas.
Supongamos una página donde el usuario
puede hacer login. No podemos cachear la
página completa porque si no cuando el usua-
rio haga login seguirá viendo la página tal y
como estaba la primera vez, ¡incluyendo los
controles donde se le solicita que haga login!
Sin embargo, el resto de la página sí es suscep-
tible de ser cacheado. En este caso, tendríamos
que hacer partial caching.
Para hacer partial caching necesitamos dividir
nuestra página en partes. Cada una de estas
partes se implementaría como un control de
usuario. Así, podríamos tener un control de
usuario con el menú, otro con los enlaces más
comunes, otro con las noticias, etc. Para hacer
que cada uno de estos controles cachee su
contenido bastaría con añadir una directiva
“OutputCache” en la cabecera de cada página
.ascx del control. Por ejemplo:
<%@ OutputCache Duration = “1800”
VaryByParam=”idcategoria”
Shared=”true” %>
Como podéis ver, es muy similar al cache de
páginas completas. Tan sólo aparece un nuevo
atributo, “Shared”. Este nos permite indicar si el
contenido del control será el mismo en todas y
cada una de las páginas donde este se use. Esto
nos permitirá, por ejemplo, insertar el control en
una master page garantizándonos que cuando
el contenido del control se cachee se hará una
única vez, y dicha entrada de cache será usada
en cada una de las páginas donde aparezca el
control. En caso de que “Shared” tome por valor
”false”, habrá tantas versiones del control en
cache como páginas haya donde este aparezca.
Otro atributo específico para la cache de contro-
les de usuarios es “VaryByControl”. Es similar a
“VaryByParam”, pero en este caso las múltiples
versiones en cache del control de usuario se
generarían en función de algún componente
que esté dentro de él. Por ejemplo, con la
directiva:
<%@ OutputCache Duration = “1800”
VaryByParam=”none”
VaryByControl=”cbCategoria”
Shared=”true” %>
se generaría una entrada en cache por cada
variación del control “cbCategoria” (un
combo con la lista de categorías). Si dicho
control contuviese 10 elementos, podría
haber hasta diez versiones distintas en
cache del control de usuario.
Una advertencia: cuidado a la hora de
acceder en tiempo de ejecución a los con-
troles cacheados. Puesto que ahora es solo
una parte de la página la que se cachea, los
eventos típicos de la página (Page_Load,
Page_Init) se van a ejecutar con cada peti-
ción de la página. Si en alguno de ellos, por
ejemplo en el “Page_Load”, hacemos refe-
rencia a cualquier control de usuario que se
esté cacheando, podemos encontrarnos
con una excepción. Esto es así porque el
control sólo existirá en la primera petición,
pero en posteriores peticiones el control se
generará a partir de la cache y por tanto no
existirá realmente.
Así que para evitar errores lo mejor es
tomar precauciones en nuestro código.
Antes de intentar acceder a cualquier con-
trol de usuario con la cache activa tendre-
mos que verificar que dicho control existe:
protected void Page_Load() {
if (ControlDeUsuarioCacheado != null) {
//Acceder a las propiedades del control
}
}
Cuando el contenido del control se extraiga
de la cache, su referencia será nula, y por
tanto, no deberemos interactuar con él.
Kernel mode cache
Cuando se utiliza IIS 6.0 en combinación con
ASP.NET, podemos disfrutar, de forma totalmen-
te transparente para nosotros, del kernel mode
cache. Cuando se den determinadas circunstan-
cias, nuestras páginas cacheadas se almacena-
rán en el kernel cache de IIS. Próximas peticio-
nes de la página ni siquiera llegaran al motor de
ASP.NET. Serán resueltas directamente por el
núcleo de IIS, extrayendo los datos de la cache y
devolviéndolo al usuario. ¿Qué ventaja nos
aporta este mecanismo frente al “normal”? Pues
básicamente rendimiento, ya que al no implicar
a ASP.NET, los resultados se devuelven mucho
más rápido. Y como encima no tenemos que
hacer nada para usarlo, mucho mejor.
¿En qué circunstancias entra en juego la cache
en modo kernel? Sólo cuando la directiva
“OutputCache” de la página cacheada contiene
únicamente el valor ”None” para “VaryByParam”.
Además, la página no debe tener restricciones
de seguridad (debe ser visible en conexiones
anónimas). En cualquier otra circunstancia, el
cache del kernel no entrará en juego, sólo el
cache “normal” proporcionado por ASP.NET.
Este cache tiene un pequeño bug que podría
daros algún dolor de cabeza. Hace poco tuve
conocimiento del problema a raíz de un post
Figura 6. Ejemplo de partial caching.
30-36 Redes cache 20/12/06 14:51 Página 36
SOLO PROGRAMADORES nº 145
en el blog de José Manuel Alarcón. Puesto
que el lo explica excelentemente, os dejo el
enlace al post en cuestión: http://
www.jasoft.org/blog/PermaLink,guid,52842e
30-6c1f-470c-9835-41667452b24d.aspx.
Cacheando en tiempo de ejecución
Hasta ahora todo lo que hemos visto acer-
ca de la cache de páginas y controles sólo
nos sirve para trabajar en tiempo de diseño.
Pero, ¿qué pasa si queremos decidir si
cachear o no en tiempo de ejecución? Pues
que tendremos que recurrir al API, y en
concreto a la clase “HttpCachePolicy”, a la
que accederemos a través del objeto
“Response.Cache”. Este objeto nos propor-
cionará acceso a los diferentes métodos de
la clase, y gracias a él podremos modificar
la duración de la cache, la visibilidad de la
misma (publica o privada), etc. El uso de
este objeto es extremadamente sencillo, os
bastará con ver algunos ejemplos para que
captéis su funcionamiento. En la tabla 1
podéis ver algunos de los ejemplos anterio-
res junto con su equivalencia en tiempo de
ejecución.
Cómo podéis ver, el funcionamiento básico
es sencillo. Se establece la expiración de la
cache, y a continuación se indica dónde se
va a cachear la página: en el cliente (cache
privada, es exclusiva para un usuario), en el
servidor (cache pública, es la misma para
múltiples usuarios), en los servidores proxy
intermedios (se considera cache publica de
nuevo), etc.
Si queréis ampliar información sobre la
cache “HttpCacheability”, os recomiendo
que acudáis a la MSDN (por ejemplo
h t t p : / / m s d n 2 . m i c r o s o f t . c o m / e n -
us/library/system.web.httpcachepolicy.aspx
), aunque creo que normalmente no traba-
jaréis con esta clase. Lo normal será que
trabajéis con la directiva “<%Output
Cache%>” en tiempo de diseño, aunque
algunas veces trabajar en tiempo de
ejecución sea la única alternativa (véase
este caso: http://blogs.snapsis.com/Perma
Link,guid,46c9ab35-9bb7-4ff9-a8e9-
63ff3497c7f0.aspx).
Creando nuestro propio sistema de cache de páginas
Como comenté al principio del artículo, es
posible complementar el mecanismo de
cache de ASP.NET con otros desarrollados
por terceros. Puesto que por motivos de
espacio no es posible explicaros cómo
hacerlo en este artículo, os dejo una web
donde podréis descargar y estudiar un sis-
tema de cache, que a diferencia del que
proporciona .NET, guarda las páginas
cacheadas en disco, reduciendo por tanto el
consumo de memoria del servidor. Está dis-
ponible en http://blogs.msdn.com/dmitryr/
archive/2005/12/13/503411.aspx.
Básicamente, lo que hace el autor del códi-
go es crear un módulo HTTP (HttpModule)
que se suscribirá a determinados eventos
del ciclo de vida de una petición ASP.NET.
En concreto a los eventos “Resolve
RequestCache” y “UpdateRequestCache”. Es
ahí donde el módulo se encargará de
cachear los contenidos (Update Request
Cache) y de recuperar contenidos de la
cache (ResolveRequestCache). Para más
información acerca de estos eventos podéis
consultar el número 142 de Sólo
Programadores. Para almacenar el conteni-
do en disco, el módulo hace uso de un fil-
tro HTTP, algo que aprenderemos a usar en
un próximo artículo.
Cache de objetos
Hasta ahora hemos hablado de cachear a
nivel de página e incluso de controles de
usuarios. Básicamente hemos cacheado
textos. En concreto, la salida HTML de la
página. Pero a veces puede convenirnos
cachear objetos de cualquier tipo. Por
ejemplo un “RecordSet” con datos muy
comunes cuyo coste de extracción sea alto,
una “DataSet”, una cadena XML, una lista
de datos, una colección de objetos, etc. Para
ello nos valdremos de la propiedad “Cache”
de la clase “Page”, que no es más que un
objeto de tipo “System.Web.Caching.Cache”.
Gracias a este objeto, añadir cualquier con-
tenido a la cache es tan simple como hacer:
Cache[“clave”] = objeto
Para extraerlo, basta con hacer:
objeto = Cache[“clave”]
Como podéis ver, bastante sencillo. El obje-
to cache internamente almacena una lista
de pares nombre-valor. Por eso podemos
trabajar con él como si de una colección se
tratase. Podemos acceder a sus elementos
mediante claves de tipo cadena
(Cache[“clave”]). Para asignar nuevos ele-
mentos se procedería como con cualquier
otra colección, ya que existen los métodos
“Insert”, “Add”, además del socorrido
“Cache[“clave”]=objeto”.
En el antiguo ASP, para hacer algo similar a
esto teníamos que recurrir al objeto
“Application”. Una de las ventajas del obje-
to “Cache” sobre aquel es que este tiene
internal locking, es decir, se bloquea solo
cuando modificamos los datos, evitándo-
nos tener que hacer lock y unlock. Además
podemos, al igual que en el cacheo de pági-
nas, establecer duraciones máximas de la
cache, cosa que con el objeto “Application”
no podíamos hacer. Y por si fuera poco, al
estar gestionado por ASP.NET, el uso de la
memoria es más racional, vaciando si es
necesario entradas de la cache para que la
memoria que ocupan pueda ser usada por
el servidor.
Esto último tiene un efecto colateral bas-
tante importante, y que tendréis que tener
muy en cuenta. Puesto que un objeto situa-
do en la cache puede ser liberado sin previo
aviso, nunca jamas debéis confiar en que
un objeto introducido en la cache vaya a
estar siempre ahí. Por tanto, vuestros códi-
gos deberían parecerse a este:
37
REDESMecanismos de cache en ASP.NET 2.0 (I)
http://digital.revistasprofesionales.com
LISTADO 3 Ejemplo del método Add
private void AvisameCuandoBorres(string key, Object obj, CacheItemRemovedReason r){
System.Cache.Add(key, “Cache regenerada”, null, DateTime.Now.AddSeconds(5),Cache.NoSlidingExpiration, CacheItemPriority.High, null);
}
protected void Page_Load(object sender, EventArgs e){
if (!IsPostBack){
CacheItemRemovedCallback onRemove =new CacheItemRemovedCallback(AvisameCuandoBorres);
Page.Cache.Add(“misdatos”, “12354”, null, DateTime.Now.AddSeconds(5),Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);
}Response.Write(Cache[“misdatos”]);
}
30-36 Redes cache 20/12/06 14:51 Página 37
SOLO PROGRAMADORES nº 145
if (Cache[“clave”]==null){
Cache[“clave”] = generarcontenido();
}
MiTipoDeDatos miobjeto =
(MiTipoDeDatos)Cache[“clave”];
//hacer otras cosas
Insertando elementos en la cacheComo hemos dicho, asignar un objeto a la
cache es tan simple como hacer
“Cache[“clave”]=objeto”. Sin embargo, de
esta forma no estaremos aprovechando la
potencia de este objeto. Para ello tendre-
mos que recurrir a los métodos “Add” e
“Insert”. Aunque por el nombre pudiera
parecer que su cometido es el mismo, lo
cierto es que hay una sutil diferencia.
Mientras que el método “Add” sólo inserta
nuevos elementos en la cache, el método
“Insert” es capaz de insertar nuevos ele-
mentos, así como modificar los ya existen-
tes. Por tanto este código:
Cache.Add(“clave”, “prueba”);
Cache.Add(“clave”, “otra prueba”);
Response.Write((string)Cache[“clave”]);
devolvería como resultado la cadena “prue-
ba”, mientras que este otro:
Cache.Add(“clave”, “prueba”);
Cache.Add(“clave”, “otra prueba”);
Response.Write((string)Cache[“clave”]);
devolverá la cadena “otra prueba”.
El método “Add” tiene una única sobrecar-
ga, cuyos parámetros coinciden con una de
las sobrecargas más completas del método
“Insert”. Tiene el siguiente interfaz:
public Object Add (
string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback
onRemoveCallback
)
El parámetro key nos permitirá especificar
una clave para los datos que vamos a intro-
ducir en la cache. Esta clave nos permitirá
acceder al contenido cacheado en cual-
quier momento, y debe ser única. El pará-
metro “value” es de tipo “Object”, y en él
pasaremos el objeto que queramos cachear.
Puesto que es de tipo “Object” admitirá que
le asignemos cualquier cosa que se nos
ocurra.
El parámetro “dependencies” nos permite
asociar una o más dependencias entre el ele-
mento insertado y uno o varios elementos
externos, de tal forma que cuando dichos
elementos “externos” cambien, la cache se
invalidará. Veremos más sobre dependencias
en una próxima entrega.
El parámetro “absoluteExpiration” nos permi-
tirá indicar un tiempo de caducidad para la
entrada en cache. Tiene que ser un tiempo
absoluto. Por ejemplo, dentro de 10 segun-
dos (DateTime.Now.AddSeconds(10)) o
dentro de 2 horas (DateTime.Now.
AddSeconds(7200)). A diferencia de este, el
parámetro “slidingExpiration” nos permitirá
indicar un tiempo de expiración relativo. Si
indicamos 60 segundos, la cache expirará 60
segundos después del último acceso. Así que
si hubiese un acceso cada 30 segundos (por
ejemplo) la cache nunca expiraría. Estos dos
parámetros no se pueden usar a la vez. Por
tanto, si usamos “absoluteExpiration”, el otro
parámetro deberá tener el valor
“Cache.NoSlidingExpiration”. Si usamos
“slidingExpiration”, el otro deberá tener como
valor “Cache.NoAbsoluteExpiration”. Nota:
para poder hacer uso de estos y otros enu-
merados relacionados con el objeto cache
tendréis que incluir la sentencia:
using System.Web.Caching;
en vuestras páginas. El parámetro “priority”
nos permite indicar qué prioridad tendrá el
elemento cacheado. La prioridad se utiliza
para decidir qué objetos se liberan en pri-
mer lugar en caso de que el servidor ande
bajo de recursos y tenga que liberar memo-
ria. A mayor prioridad, más tiempo perma-
necerá el contenido en cache. El rango de
prioridades lo marca la enumeración
“CacheItemPriority”, y va desde “Low” hasta
“NotRemovable”.
Y por último, el parámetro “onRemove
Callback” nos permite indicar un delegado
opcional, de tal forma que si un objeto se
elimina de la cache (voluntaria o involunta-
riamente) se llamará a la función delegada
para notificarnos dicho evento. La función
tiene que ser de tipo “CacheItem
RemovedCallback”, y por tanto tendrá este
interfaz:
public delegate void
CacheItemRemovedCallback (
string key,
Object value,
CacheItemRemovedReason reason
)
Un ejemplo de uso del método “Add” (y por
analogía del “Insert”) podría ser el que se
muestra en el listado 3.
En este caso, cuando la cache expire pasa-
dos 5 segundos, esta se volverá a regenerar,
pero puesto que no volvemos a indicar fun-
ción callback, la regeneración sólo se lleva-
rá a cabo una vez.
Borrando elementos de la cachePara borrar un elemento de la cache basta-
rá con hacer:
Cache.Remove[“clave”]
Esto sería un borrado explícito. Habría un
borrado implícito si el servidor necesita
liberar memoria o si expira la entrada de
cache. Ya hemos visto cómo estar prepara-
dos para esta eventualidad: o bien regene-
ramos la cache ayudándonos de funciones
callback, o antes de extraer un elemento de
la cache comprobamos que este no es nulo.
Conclusiones
Aprender a manejar la cache conveniente-
mente puede suponer grandes mejoras en
el rendimiento de nuestras aplicaciones
web. En la próxima entrega veremos cómo
manejar aún más eficientemente los datos
en cache gracias a las dependencias, que
nos permitirán establecer relaciones entre
la cache y ciertos elementos, de tal forma
que la cache expirará automáticamente
ante determinados eventos.
38
REDES
http://digital.revistasprofesionales.com
Figura 7. Tabla comparativa de ladiferencia de rendimiento entre el uso delcache de ASP.NET y el Kernel Mode Cache.
30-36 Redes cache 20/12/06 14:51 Página 38
● Mobile Web Controls de ASP.NET● Un OCR para el reconocimiento de dígitos decimales● Web Semántica● Programando Mash-ups Web 2.0 con Google y Yahoo APIs (I)● Aplicaciones de voz con C#● Aplicaciones web 100% Java con Google Web Toolkit ● Web Parts en ASP.NET 2.0● Aplicaciones J2EE con JSF● Indigo, una plataforma orientada a servicios
39 publicidad foro 19/12/06 12:15 Página 1
SOLO PROGRAMADORES nº 145 40
REDES
http://digital.revistasprofesionales.com
JavaScript Orientado a Objetos (I)
Introducción
A la hora de crear sites y servicios web, cada día
es mayor el uso de AJAX así como de interfaces
avanzadas y modernas, que sacan el mayor par-
tido posible al DOM, JavaScript, CSS, etc. En con-
creto, el lenguaje JavaScript ha dejado de ser
algo “menor” para convertirse en el centro y la
herramienta con la que desarrollar aplicaciones
web complejas como las que ofrecen GMail o
Flickr, por citar dos ejemplos. En la presente serie
de artículos se expondrán los fundamentos de
una programación JavaScript realmente moder-
na y Orientada a Objetos. El objetivo es dejar
atrás las prácticas que se podrían denominar del
tipo “document.write” para dar paso a otras
mucho más potentes y avanzadas, con creación
de objetos, interfaces, manejo de eventos, etc.
Para el desarrollo de los ejemplos se utilizará
Eclipse (www.eclipse.org). Además, existe un
plug-in gratuito para Eclipse con el que se pue-
den programar scripts de JavaScript con algunas
de las ventajas típicas de cuando se desarrolla en
Java: función de autocompletar, sintaxis de colo-
res, etc. El plug-in se denomina JSEclipse y puede
descargarse gratuitamente de www.interaktonli
ne.com/Products/Eclipse/JSEclipse. La instalación
es bastante sencilla siguiendo las instrucciones
que aparecen el site.
Objetos en JavaScript
En JavaScript, la palabra reservada “function” se
usa para crear un objeto además de para crear
funciones, como es lógico:
function Cookie(sName, sValue, sPath,
sDomain, dExpires)
{
...
}
Teniendo en cuenta la definición anterior, los
objetos se crean tal y como se muestra seguida-
mente:
ADOLFO ALADRO GARCÍA
JavaScript Orientado a Objetos (I)
Con el movimiento denominadoWeb 2.0 comienza a extenderse másque nunca el concepto de aplicaciónWeb frente a la visión tradicional depáginas que llevan a páginas que...En el centro de este cambio estánlas tecnologías como AJAX.JavaScript juega un papelprotagonista también. Pero ya no sehabla de aquel viejo JavaScript de“document.write”, sino de métodos,propiedades, prototipos, etc., esdecir, de un verdadero lenguaje deprogramación moderno.
Sitio web del plug-in para Eclipse llamado JSEditor.
30-34 Redes JS 20/12/06 15:01 Página 40
SOLO PROGRAMADORES nº 14541
REDES
http://digital.revistasprofesionales.com
JavaScript Orientado a Objetos (I)
var oCookie = new Cookie(“test”, “1”, null,
“.spp.com”, new Date());
En términos de programación Orientada
a Objetos, se diría que la función o el
procedimiento anterior es el constructor
del objeto. Los parámetros de la función
son los parámetros del constructor. La
palabra reservada “new” crea una nueva
instancia y la asigna a la variable
“oCookie”. En JavaScript las variables no
tienen tipo a priori. La palabra reservada
“var” permite definir la variable. A este
respecto es preciso observar que usar
“var” no es estrictamente necesario. En
muchos scripts, especialmente los anti-
guos, “var” no se usa con frecuencia.
Cuando esto ocurre, afecta principal-
mente al ámbito de la variable, que pasa
a ser una variable global. Por esta razón
es siempre conveniente usar la palabra
“var” cuando se quiere crear una varia-
ble, fijando claramente de entrada el
ámbito de la variable.
El cuerpo del constructor sirve funda-
mentalmente para dos cosas. La primera
es lo que tradicionalmente se hace en los
constructores: inicializar los atributos
del objeto. La segunda es definir el obje-
to. A continuación se muestra cómo:
this.sName = sName;
this.sValue = sPath;
this.sDomain = sDomain;
this.dExpires = dExpires;
this.toString = function()
{
...
}
Atributos de los objetosLa palabra reservada “this” se emplea para
fijar el ámbito. Cuando en el cuerpo de
“function Cookie() {...}” se utiliza “this”,
significa que se está haciendo referencia
a un atributo de esa función, o más pro-
piamente se diría que de ese objeto. Así
por ejemplo, el uso de “this.sName” indica
que el objeto tendrá un atributo “sName”.
En realidad “this.sName = sName” lo que
hace es crear el atributo “sName” y des-
pués asignarle el valor del parámetro
“sName”. Si un atributo no existe, y se
hace algo del tipo “this.xxx = 3”, en ese
momento se crea el atributo “xxx” con un
valor igual a “3”. Es decir, lo atributos pue-
den crearse, y no sólo asignarse, durante
todo el ciclo de vida de un objeto.
MétodosEn el cuerpo de “function Cookie() {...}”
también se crea un método del objeto. Se
hace de una forma muy parecida a la crea-
ción, y asignación, de los atributos.
this.toString = function()
{
...
}
El nombre del método, “toString” en este
caso, acompaña a la palabra reservada
“this”. En realidad es como si se definiera un
atributo con la salvedad de que el valor que
le es asignado es en realidad una función,
declarada mediante el uso de la palabra
reservada “function”.
De lo anterior se deduce que después de
crear una instancia del objeto se puede
hacer en cualquier momento:
alert(oCookie.toString());
Si el método tuviera que recibir parámetros,
estos aparecerían en la definición:
this.toString = function(sCharEcoding)
{
...
}
El inconveniente principal que presenta
este método de creación de objetos es que
cada vez que se ejecuta una sentencia del
tipo “var oCookie = new Cookie()”, en el
caso de los métodos en realidad se están
creando funciones nuevas “toString”.
Ello da pie a otra forma de crear objetos en
el lenguaje JavaScript y que consiste
en el empleo de la palabra reservada
“prototype”.
Definición de objetos con prototype
La palabra reservada “prototype” permite escri-
bir, y en algunos caso reescribir, la definición
misma de un objeto en JavaScript. Usándola en
la implementación del objeto “Cookie” queda-
ría tal y como se muestra a continuación:
function Cookie(sName, sValue, sPath,
sDomain, dExpires)
{
...
Cookie.prototype.toString
= function()
{
...
}
}
Sin embargo, lo anterior no resuelve el hecho de
que cada vez que se crea una nueva instancia
del objeto “Cookie” se está creando y asignan-
do una nueva función. Una de las formas más
sencillas de evitar lo anterior es la siguiente:
function Cookie(sName, sValue, sPath,
sDomain, dExpires)
{
...
if (Cookie._initialized == undefined) {
Cookie.prototype.toString = function()
{
...
}
}
Cookie._initialized = true;
}
Especificación del lenguaje ECMA-262, que es la base del lenguaje JavaScript.
30-34 Redes JS 20/12/06 15:01 Página 41
SOLO PROGRAMADORES nº 145 42
REDES
http://digital.revistasprofesionales.com
La primera vez que se ejecute el constructor (la
función “Cookie”) el atributo “_initialized” ni
siquiera estará definido. Entonces se crean los
métodos del objeto que, una vez definidos no es
necesario redefinir, y que son compartidos por
todas las instancias de la “clase”. Al finalizar la
tarea anterior se asigna al atributo “_initialized”
el valor “true”, de forma que más adelante
nunca más se vuelven a crear y asignar los
métodos. El caso anterior muestra una de las
formas mejores y más optimizadas para definir
y crear objetos en JavaScript.
Prototype y la redefición de objetosestándarAlgunos navegadores, como Firefox, permi-
ten acceder a la propiedad “prototype” de
los objetos estándar. Normalmente muchas
de las propiedades y métodos de estos
objetos no pueden modificarse por razones
de seguridad. En cambio sí que es posible
extender la funcionalidad de estos objetos,
tarea que con frecuencia hay que realizar
cuando se desarrollan aplicaciones web que
deben funcionar en varios navegadores dis-
tintos.
Por ejemplo, Internet Explorer implementa el
método “insertAdjacentElement” para los
elementos de una página web. Dado un ele-
mento de la página, este método permite
insertar otro elemento en distintas posicio-
nes. El navegador Firefox no implementa este
método, pero utilizando la propiedad “pro-
totype” resulta fácil emularlo.
El primer paso consiste en detectar si el
navegador reconoce el elemento
“HTMLElement”, que es el tipo base de todos
los elementos de una página. Para ello se
emplea el operador “typeof” de JavaScript.
if(typeof HTMLElement!=”undefined” && !
HTMLElement.prototype.insertAdjacent
Element) {
...
}
El segundo paso consiste en verificar la
existencia del método “insertAdjacent
Element” en el prototipo del objeto. Si la
condición primera se cumple, así como esta
segunda, entonces ese script está ejecután-
dose en un navegador que no implementa
el método “insertAdjacentElement” pero
que al mismo tiempo permite acceder a la
propiedad “prototype” de los elementos
estándar.
El bloque dentro de la sentencia “if” ante-
rior comienza con la creación y asignación
del método “insertAdjacentElement”,
siguiendo el mismo proceso que el descrito
en el ejemplo anterior con el objeto
“Cookie”, es decir, accediendo a la propie-
dad “prototype”:
HTMLElement.prototype.insertAdjacent
Element = function (where,parsedNode)
{
...
}
El método recibe dos parámetros. El prime-
ro es una cadena de texto indicando la
posición con respecto al elemento donde va
a insertarse el nuevo elemento. El segundo
parámetro es el elemento a insertar. El
código fuente del método se muestra en el
listado 1.
El propósito de este método es emular
fielmente la funcionalidad que imple-
menta Internet Explorer, y que podemos
ver en la documentación que se encuen-
tra en msdn.microsoft.com/workshop/
author/dhtml/reference/methods/inser-
tadjacentelement.asp. El parámetro
“where” indica dónde va a insertarse el
nuevo elemento con respecto al elemen-
to cuyo método se ejecuta:
� bb ee ff oo rr ee BB ee gg ii nn: El nuevo elemento
se inserta antes de que el otro
comience. En términos de HTML, lo
anterior es lo mismo que decir, por
ejemplo, que dado elemento repre-
sentado por “<div>... </div>” el
nuevo elemento se situará justo
antes del código “<div>”.
LISTADO 1 Código del método insertAdjacentElement
switch (where) {case ‘beforeBegin’:
this.parentNode.insertBefore(parsedNode,this)break;
case ‘afterBegin’:this.insertBefore(parsedNode,this.firstChild);break;
case ‘beforeEnd’:this.appendChild(parsedNode);break;
case ‘afterEnd’:if (this.nextSibling)
this.parentNode.insertBefore(parsedNode,this.nextSibling);else this.parentNode.appendChild(parsedNode);break;
}
Centro de desarrollo para JavaScript de Mozilla.
30-34 Redes JS 20/12/06 15:01 Página 42
SOLO PROGRAMADORES nº 145
� aafftteerrBBeeggiinn: El nuevo elemento se
inserta justo después de que el otro
comience. Siguiendo con el paralelismo
anterior, el nuevo elemento se situaría
justo después del código “<div>”.
� bbeeffoorreeEEnndd: El nuevo elemento se
sitúa antes de que el otro acabe. En el
ejemplo que se viene aplicando, se
situaría justo antes del código “</div>”.
� aafftteerrEEnndd: El nuevo elemento se sitúa
justo después de que el otro acabe. En
el ejemplo, se situaría justo después del
código “</div>”.
La implementación emplea métodos están-
dar propios del DOM, como son “insert
Before” o “appendChild”, así como atributos
también estándar del DOM, como por ejem-
plo “parentNode” o “nextSibling”.
Este ejemplo pretende únicamente ilustrar
el uso de “prototype” alterando la defini-
ción de los objetos estándar del navegador.
En sucesivas entregas se verán más aspec-
tos de la programación JavaScript en el
contexto del DOM, es decir, interactuando
con los elementos de la página que son
accesibles desde los scripts.
Definición de objetos con JSON
JSON (JavaScript Object Notation) es una
de las alternativas más utilizadas hoy en día
para la creación y definición de objetos.
Representa una sintaxis simple y ligera (en
el sentido de ocupa pocos KB). En realidad,
cuando se usa JSON más que definir obje-
tos lo que se hace es definir datos, aunque
más adelante también se verá cómo combi-
nar JSON con las técnicas anteriores hasta
llegar a una forma mucho más depurada de
programar en Javascript con Orientación a
Objetos. Es decir, un objeto definido con las
sintaxis JSON se parece bastante a un
documento de datos en formato XML. A
continuación se muestra un ejemplo senci-
llo de objeto:
({“id”:1234,”name”:”madonna”})
La cadena anterior representa un objeto con
dos propiedades. La primera se llama “id” y la
segunda “name”. En esta sintaxis las propie-
dades del objeto quedan separadas por
comas. Las dos propiedades tienen valores,
que son en el primer caso “1234”, un valor
numérico, y en el segundo una cadena de
texto, “madonna”. Obsérvese que los nom-
bres de las propiedades se escriben entre
comillas dobles. No ocurre lo mismo con los
valores, que sólo emplean las comillas cuan-
do se trata de cadenas de caracteres.
La expresión que acaba de mostrarse puede
evaluarse con JavaScript haciendo:
var oUser
= eval(‘({“id”:1234,”name”:
”madonna”})’);
Después de ejecutar la expresión anterior
pueden emplearse las expresiones “oUser.id”
o “oUser.name”, de forma que la variable
“oUser” hace referencia a un objeto.
No sólo pueden utilizarse valores numéri-
cos y cadenas de texto. También pueden
emplearse arrays:
var oUser
= eval(‘({“id”:1234,”name”:
”madonna”,”email”:[“madonna@com”,
”madonna@gmail.com”]})’);
En el ejemplo modificado existe una terce-
ra propiedad, “email”, que en realidad tiene
un array. En JavaScript los array pueden
crearse de dos formas. La primera consiste
en emplear el constructor. Por ejemplo:
var oData = new Array();
oData[0] = “lunes”;
oData[1] = “martes”;
...
La segunda forma se emplea para crear e
inicializar array, todo en una sola expre-
sión lo más compacta posible. Por
ejemplo:
var oData = [“lunes”, “martes”, ...];
La propiedad llamada “email” representa la
lista de direcciones de correo electrónico de
ese usuario, de forma que después de ejecu-
tarse la expresión anterior podrá hacerse,
por ejemplo, “oUser.email[1]” para acceder a
la segunda de las direcciones de correo elec-
trónico de ese usuario.
Con JSON también es posible definir obje-
tos como valores de las propiedades de
otros objetos. Siguiendo con el ejemplo
anterior, se puede hacer:
{
“id”: 1234,
“name”: “madonna”,
“email”: [“madonna@com”,
”madonna@gmail.com”],
“phone”: {“normal”:1111111111,
“mobile”:2222222222}
}
La propiedad “phone” de objeto es a su vez
otro objeto, que cuenta con las propiedades
llamadas “normal” y “mobile”. De lo anterior
se deduce que se pueden usar expresiones
del tipo “oUser.phone.normal” para acceder
al número de teléfono normal del individuo
representado por el objeto.
43
REDESJavaScript Orientado a Objetos (I)
http://digital.revistasprofesionales.com
Centro de desarrollo para JavaScript de Microsoft.
30-34 Redes JS 20/12/06 15:01 Página 43
SOLO PROGRAMADORES nº 145 44
REDES
http://digital.revistasprofesionales.com
JSON y AJAX: JSON vs XMLEl siguiente ejemplo muestra un documen-
to XML estándar:
<user>
<name>Madonna</name>
<addrs>
<addr type=”home”>
madonna@com</addr>
<addr type=”work”>
madonna@warner.com</addr>
</addrs>
</user>
El documento anterior puede escribirse en
forma de objeto JSON tal y como se mues-
tra seguidamente:
{
“name”: “Madonna”,
“addrs”:
[
{“type”: “home”, “value”:
“madonna@com”},
{“type”: “work”, “value”:
“madonna@warner.com”}
]
}
¿Qué ventajas presenta una representa-
ción frente a otra? La ventaja principal de
JSON está en el rendimiento. Interpretar
una expresión JSON y obtener con ello un
objeto JavaScript es en general una tarea
más rápida y ligera. Interpretar XML es
pesado, y su tratamiento tampoco se
caracteriza precisamente por el alto rendi-
miento. Por otra parte, los documentos
XML ofrecen una alternativa “más están-
dar”. Su uso no está vinculado a ningún
lenguaje de programación mientas que
JSON es algo propio de JavaScript.
Cuando se crean aplicaciones web con
AJAX se pueden emplear ambas opciones.
De hecho el objeto “XmlHttpRequest”, en
cualquiera de las implementaciones que
hacen los distintos navegadores, cuenta
con dos propiedades, “responseText” y
“responseXML”. Con la primera se accede
directamente al texto devuelto por la lla-
mada HTTP mientras que la segunda
devuelve el objeto DOM correspondiente
al XML, ya correctamente interpretado.
Si la aplicación trabaja con JSON lo
más habitual es usar expresiones del
tipo:
eval(oXmlHttpReq.responseText);
En cambio, si la aplicación trabaja con XML,
la propiedad “responseXML” permite acce-
der directamente al objeto.
Métodos con JSONCon JSON también se pueden definir méto-
dos. Siguiendo con el ejemplo del objeto
para leer y escribir cookies, con JSON
puede hacerse como se muestra a conti-
nuación:
var cookie =
{
sName: null,
sValue: null,
sDomain: null,
dExpires: null,
toString: function()
{
var sCookieStr = ‘’;
...
return sCookieStr;
}
};
Obsérvese que esta notación es distinta a
la empleada hasta el momento. Es otra
posibilidad. El nombre de las propiedades
del objeto no está entrecomillado. Las
propiedades (nombre:valor) siguen
separándose por comas. El método
“toString” se define de forma equivalen-
te a como se hace con las propiedades.
Dicho de otra forma, los métodos son
propiedades del tipo “function”. Cuando
dentro de una de esas “funciones” se
emplea la palabra reservada “this” se
está haciendo referencia al propio obje-
to. Por ejemplo, si dentro del método
“toString” se utiliza la propiedad
“sDomain” del objeto, se utilizará la
expresión “this.sDomain”.
Combinación de técnicas para crear mejores objetos
En el ejemplo anterior hemos visto que
desaparece el papel de constructor. A
veces emplear JSON es mejor, y en otras
ocasiones es mejor emplear la propiedad
“prototype”. También existen formas de
combinar varias técnicas, como por
ejemplo:
function Cookie(sName, sValue, sPath,
sDomain, dExpires)
{ ... }
Cookie.prototype =
{
toString: function()
{ ... }
};
var oCookie = new Cookie(...);
En el primer bloque se emplea la palabra
reservada “function” para definir el
constructor del objeto. Posteriormente,
con la ayuda de la propiedad “prototype”
y empleando la otra notación, se definen
métodos, etc. Finalmente la creación del
objeto sigue las mismas pautas de
siempre.
Conclusiones
Se han dado los primeros pasos en la pro-
gramación Orientada a Objetos con
JavaScript. Esto no tiene nada que ver con
“document.write(...)” y otros clásicos de los
primeros scripts que se hacían en las pági-
nas web hace años. Utilizar JavaScript no es
sinónimo de que no se pueda elaborar una
programación estructurada y moderna,
como se irá viendo a lo largo de esta
serie.
Código fuente del objeto Cookie mostrador por el editor JSEditor.
30-34 Redes JS 20/12/06 15:01 Página 44
NÚMEROS ANTERIORES
BOLETÍN DE PEDIDORellene o fotocopie el cupón y envielo a REVISTAS PROFESIONALES, S.L.
(Revista SÓLO PROGRAMADORES) C/ Valentín Beato, 42 - 3ª Planta - 28037 MADRIDTel.: 91 304 87 64 - Fax: 91 327 13 03 - www.revistasprofesionales.com - rpsuscripciones@revistasprofesionales.com
Deseo me envíen los número/s: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .NOMBRE Y APELLIDOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .EDAD . . . . . . . . TELÉFONO . . . . . . . . . . . . . . . .DOMICILIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .C.P.: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CIUDAD . . . . . . . . . . . . . . . . . .PROVINCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FORMAS DE PAGO� Giro Postal a nombre de REVISTAS PROFESIONALES, S.L. � Talon Bancario a nombre de REVISTAS PROFESIONALES S.L. � Domiciliación Bancaria � Contra Reembolso (5€ de gastos de envio por paquete)
Banco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Domicilio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Firma:Numero de cuenta: _ _ _ _/ _ _ _ _/ _ _ / _ _ _ _ _ _ _ _ _ _ _ _Titular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
� Tarjeta de crédito _ _ _ _/ _ _ _ _/ _ _ _ _/ _ _ _ _/ Fecha de caducidad: Extranjero: Gastos de envio 5€ por paquete. Unica forma de pago tarjeta de crédito (VISA, Mastercard, American Express,...)
144 - Diciembre 2006Google compra YouTube, creación de
un Mash-up combinando datos de
Google Maps, Yahoo! Weather RSS y
Google Translation, técnicas avanzadas
de manipulación y almacenado de imá-
genes con Java 2D, programación el
patrón modelo-vista-controlador desde
Java EE, localización geoespacial con
Google Maps, técnicas profesionales
para la personalización del asistente de
instalación de nuestra aplicación, algo-
ritmo Mínimax, la Web Semántica y
mucho más. 1 CD-ROM incluido.
143 - Noviembre 2006
142 - Octubre 2006Desarrollo de aplicaciones de escritorio
.NET que pueden ser gobernadas por el
usuario mediante comandos de voz,
introducción al API Java 2D, despliegue
de aplicaciones ASP.NET en Linux en 10
minutos, primera entrega del curso
centrado en la programación Java EE
desde cero, metodologías de desarrollo
(tradicionales vs. ágiles), estrategias
avanzadas en Robocode y mucho más.
1 CD-ROM incluido.
141 - Septiembre 2006
Introducción a la programación de robots
con Robocode, programación de aplica-
ciones móviles con Bluetooth, análisis
profundo del nuevo framework Google
Web Toolkit para la programación de
aplicaciones web 100% Java, Concurrent
Verson Control, 8 trucos de ASP.NET para
lucirse en la empresa, desarrollo de Web
Parts propios y la tercera entrega de
nuestro coleccionable dedicado a Visual
Studio. 1 CD-ROM incluido.
140 - Agosto 2006Si te falta algún número de la
temporada, ahora tienes laoportunidad de conseguirlo
Precio Oferta descuentoPrecio por ejemplar: 6€
1 a 10 = 10% dto. / 11 a 20 = 20% dto.21 a 30 = 30% dto. / 31 a 40 = 40% dto.
+40 = 50%
Programando Mash-ups Web 2.0 para
crear aplicaciones que integran datos de
Google y de Yahoo!, filtrado de imágenes
con la API Java 2D, cómo ampliar la fun-
cionalidad de nuestro servidor web IIS,
interfaces de usuario basadas en la
JavaServer Pages Standard Tag Library
(JSTL), qué aportan las metodologías de
desarrollo, generando un empaquetado
del tipo "setup.exe" para distribuir nues-
tras aplicaciones a los usuarios finales y
mucho más. 2 CD-ROM incluidos.
Zune, la gran apuesta de Microsoft, Java
Goes Open Source, SIMO 2006,
Microsoft Tech Ed: Developer 2006,
interoperatividad entre Java, Mono y
.NET, programando Mash-ups Web 2.0
con Google y Yahoo! APIs (y III), progra-
mando Java EE esde cero (y IV), exten-
siones AJAX para ASP.NET (I), la Web
Semántica (y II), un OCR para el recono-
cimiento de dígitos decimales y mucho
más. 1 CD-ROM incluido.
45 atrasados.qxd 19/12/06 12:27 Página 1
SOLO PROGRAMADORES nº 145 46
REDES
http://digital.revistasprofesionales.com
Introducción
En el artículo anterior te mostré cómo surgió,
además de cómo se instala y funcionan las
extensiones de AJAX para Microsoft ASP.NET. En
esta segunda parte realizaremos un viaje de
mucho más bajo nivel, ya que cubriré los dife-
rentes controles y técnicas indispensables para
que puedas construir aplicaciones del nuevo
paradigma. Si la entrega pasada fue la base del
funcionamiento, esta será el comienzo de tu vida
y obra en lo que a Microsoft AJAX respecta.
Analizaremos el detalle de la instalación así
como la utilización de las propiedades del lado
del servidor y los eventos en el explorador (clien-
te). Dejaré para la tercera y última parte la crea-
ción de un componente personalizado AJAX, esto
es, tu propio control, así como el uso de XML-
Script y servicios web. Pero no deseo marearte,
por lo que vamos a comenzar por el principio, o
al menos, el principio de este artículo, en donde
me explayaré sobre los distintos paquetes dispo-
nibles para las extensiones.
Paquetes de AJAX... una de las partes más confusas
Si leíste la entrega anterior sabrás que las exten-
siones de Microsoft AJAX son un conjunto de
tecnologías que se integran con ASP.NET y que
permiten ejecutar código que resida en el servi-
dor sin necesidad de refrescar los elementos de
la interfaz gráfica, más allá de los datos en sí
(uffhh! esta definición suena demasiado larga,
pero bueno... no te preocupes, veremos cómo es
todo este asunto a lo largo del artículo). A su vez,
se hace uso extensivo de JavaScript y hojas de
estilo para brindar una interfaz gráfica mucho
más interactiva (arrastrar y soltar, estirar contro-
les, IntelliSense basada en un servicio web, etc.).
Como característica adicional, se agrega un
nuevo tipo de proyecto a Visual Studio 2005, el
que ofrece los flamantes componentes en la
barra de herramientas.
Sin embargo si vas a la página oficial de
Microsoft AJAX (ajax.asp.net) verás que existen
varias instalaciones disponibles, lo que puede
resultar un poco confuso. Es por ello que la tabla
1 muestra las distintas opciones y su aplicación.
Es importante que la leas atentamente antes de
continuar, ya que esto te ahorrará más de una
futura confusión.
Trabajando con lo esencial
La infraestructura provee el bloque fundamental
para todo proyecto ASP.NET que desee contar
con características AJAX, por lo que deberás
bajar e instalar el paquete si quieres implemen-
tar los ejemplos aquí incluidos. La instalación es
muy sencilla, ya que solamente requiere ejecutar
el binario y aceptar todos los pasos allí propues-
tos (ve al siguiente hipervínculo para obtener el
paquete):
http://go.microsoft.com/fwlink/
?LinkID=77296
Una vez hecho esto, puedes verificar si todo ha
ido bien abriendo Visual Studio 2005. Allí nota-
ERICH BÜHLER
En esta segunda entrega nossumergiremos de lleno en el mundoAJAX, y aprenderemos losparadigmas de programación quedeben seguirse, así como loscontroles proporcionados por lasextensiones AJAX para ASP.NET.
Extensiones AJAX para ASP.NET (II)Extensiones AJAX para ASP.NET (II)
Figura 1. Proyecto AJAX en Visual Studio.
Figura 2. Controles para AJAX en Visual Studio.
46-52 Redes ajax 20/12/06 15:10 Página 46
SOLO PROGRAMADORES nº 14547
REDES
http://digital.revistasprofesionales.com
Extensiones AJAX para ASP.NET (II)
rás una nueva plantilla de proyecto llama-
da ASP.NET AJAX-Enabled (ver figura 1).
Basta entonces con hacer doble clic en
esta para que tu travesía al nuevo mundo
comience.
A simple vista la solución web luce similar
a cualquier otra con la que te hayas cruza-
do anteriormente, pero sin embargo, exis-
ten 2 diferencias importantes. La primera
es que se adiciona una referencia a la
biblioteca “Microsoft.Web.Extensions”.
Como podrás imaginar, ella no es más que
el núcleo de funcionalidades AJAX. La
segunda (y quizá más notoria) es que se
inserta una nueva ficha llamada “AJAX
Extensions” dentro de la barra de herra-
mientas. Podrás encontrar allí 5 nuevos
controles, similares a los que se exhiben en
la figura 2.
Si abres el formulario web predeterminado
observarás que un nuevo componente lla-
mado “ScriptManager” es inyectado en la
parte superior. Obvia este elemento por
unos instantes, ya que lo veremos de aquí
a unas líneas de distancia...
Si bien todos los nuevos integrantes de la
barra de herramientas exhiben el gráfico
de engranaje, estos se emplean para dife-
rentes tareas, las que están lógicamente
relacionadas a potenciar las característi-
cas de la interfaz gráfica o su funcionali-
dad. No existen más diferencias, por lo que
si ejecutas la aplicación, deberías obtener
un comportamiento normal, esto es, una
página en blanco.
Te mencioné anteriormente que el núcleo
de AJAX se llama “Microsoft.Web.
Extensions”. Como información sana de
saber, es bueno que conozcas dónde se
encuentra. Esto te permitirá agregar AJAX a
un proyecto estándar de ASP.NET:
C:\Archivos de Programa\Microsoft
ASP.NET\ASP.NET 2.0 AJAX
Extensions\<versión>
Si tienes un segundo, navega a la carpeta y
observa el contenido de la misma. Por ejem-
plo, la referencia a “Microsoft. Web.
Extensions” apunta a un archivo de igual
nombre, el que es una biblioteca (ensambla-
do) de la plataforma .NET. Ella es la que se
inserta dentro de la barra de herramientas;
puedes como práctica inicial eliminar la ficha
creada por AJAX y agregar una nueva, arras-
trando y soltando este archivo. El resultado
final debería devolverte los 5 controles.
Ha llegado el momento de que hagamos un
breve recorrido por los distintos elementos
de la nueva ficha (tabla 2). A lo largo de este
artículo me encargaré de desvelarte el miste-
rio de cada uno en forma más extensa.
Donde todo comienza...ScriptManager
Debes adicionar un control de este tipo en
toda página donde quieras utilizar los com-
ponentes o características AJAX. Si no lo
haces, entonces será un formulario web
estándar en vez de uno mejorado:
<asp:ScriptManager
ID=”ScriptManager1” runat=”server” />
Como su nombre lo indica, “ScriptManager”
administra el código script que será necesario
inyectar en la página para que ella ofrezca las
características de la nueva infraestructura.
Por el sólo hecho de dibujar el control estarás
ganando las siguientes funcionalidades:
11 .. Infraestructura AJAX en el explorador
para que funcionen los restantes com-
ponentes de las extensiones.
22 .. Que una página pueda refrescar la
información de los controles sin necesi-
dad de actualizar el formulario web en
su totalidad.
33 .. Adicionar cualquier script que tú hayas
escrito para que sea enviado al explora-
dor cada vez que se acceda al formula-
rio (ver la propiedad “Scripts” en la tabla
3).
44 .. Clases proxy que simplifican la invoca-
ción de servicios web desde código
Script escrito en el explorador.
55 .. Posibilidad de autenticar un usuario
antes de invocar a un servicio web, así
como también utilizar la información de
perfil referente al mismo.
De más está decirte que si tienes la
intención de hacer uso de alguno de los
restantes 4 controles, el primer paso será
entonces el soltar este elemento en la
página; de no hacerlo obtendrás un
error en tiempo de ejecución. La tabla
3 contiene alguna de las propiedades
de “ScriptManager”, que pueden
TABLA 1. Paquetes de AJAX para ASP.NETPPaaqquueettee
ASP.NET AJAX
ASP.NET AJAX CTP
AJAX Control Toolkit
AJAX Control Extender
Microsoft AJAX Library
DDeessccrr iippcciióónn
Esta es la infraestructura en sí, deberás instalarla para tener acceso al resto.
CTP es un agregado para Microsoft AJAX que adiciona algunos controles (WebParts, WebProfile,
etc.) y que se enmarca dentro de la iniciativa de Software abierto de Microsoft.
Ofrece alrededor de 25 controles que se enmarcan dentro de la iniciativa de Software abierto de
Microsoft.
Agrega un nuevo tipo de proyecto a Visual Studio para crear controles AJAX personalizados.
La parte cliente de la infraestructura, solamente de utilidad si empleas un servidor distinto a
Internet Information Services.
TABLA 2. Controles AJAX para ASP.NETCCoonnttrrooll
ScriptManager
ScriptManagerProxy
Timer
UpdatePanel
UpdateProgress
DDeessccrr iippcciióónn
Inyecta el código JavaScript necesario en la página para que ella ofrezca las características de AJAX.
Se emplea cuando estás trabajando con páginas maestras (veremos un ejemplo más abajo).
Hace posible ejecutar una petición asíncrona al servidor cada un período determinado de tiempo.
Permite indicar las secciones de la página que emplearán el modelo de llamadas asíncronas AJAX.
Exhibe un contenido personalizado cuando se realiza una llamada asíncrona AJAX.
46-52 Redes ajax 20/12/06 15:10 Página 47
SOLO PROGRAMADORES nº 145 48
REDES
http://digital.revistasprofesionales.com
también ser evaluadas/configuradas des-
de código.
En realidad, en la mayor parte de los
casos te remitirás a dibujar este elemen-
to para luego olvidarte del mismo. El pró-
ximo paso lógico es siempre diseñar la
interfaz gráfica empleando los otros con-
troles AJAX. Cabe destacar que solamen-
te puedes tener un objeto “Script
Manager” por página y que la primera vez
que accedas la misma se bajaran los
fuentes script para que AJAX funcione, lo
que puede requerir algunos segundos
adicionales (luego se dejan disponibles en
la caché de Internet Explorer o Firefox).
El panel de actualización: UpdatePanel
El paso siguiente a adicionar “Script
Manager” es definir las secciones de la
página que deseas se actualicen, recuerda
que de esto se trata AJAX. Esta funcionali-
dad se podría traducir en algo así como
“oye, trae el resultado del servidor para
estos textbox pero no toques el resto de la
interfaz”.
Es aquí donde entra en juego el elemento
“UpdatePanel”; como nos dice su nombre,
es un panel de actualización. Cualquier
control que se encuentre allí y que produz-
ca una ida al servidor, acarreará tan solo el
refresco de los datos de los miembros con-
tenidos (listado 1).
El resto de la página se mantendrá intacta
y la invocación será realizada de modo
asíncrono, por lo que el usuario podrá con-
tinuar realizando otro tipo de tareas con la
interfaz (veremos esto más adelante).
Ahora, presta atención a la figura 3.
Cada vez que se haga clic en el botón
“Confirmar”, se irá en forma asíncrona al
servidor (pero sin generar una nueva pági-
na), se traerán los datos, y se modificarán
los miembros involucrados. Si se tiene un
componente fuera del panel de actualiza-
ción y en esta petición al servidor se inten-
ta modificar su contenido, entonces el
resultado será descartado y se dejará
el valor original, tal como si fuese de
lectura.
Secuencia de eventos en llamadasasíncronas
El ejemplo anterior es sencillo pero nos ser-
virá para aclarar algunas características de
la infraestructura. Cuando se accede a la
página por primera vez, el evento inicial-
mente ejecutado es “Page_Load”. Esto suena
bastante lógico ya que la misma está sien-
do creada. Sin embargo el panorama no es
tan claro cuando se trata de AJAX. Si se
hace clic en el botón “Confirmar” de la figu-
ra 3, entonces se irá por el evento clic al
servidor en forma asíncrona, para luego
volver con los valores y actualizar los
miembros en cuestión. La pregunta del
millón es... ¿Cuál será la secuencia de even-
tos en este caso?
Se podría pensar inicialmente que si se hace
clic en un botón solamente se ejecutará ese
evento. Sin embargo, esto es erróneo, ya
que la página tiene que ser generada cada
vez. Es por ello que no importa si es el pri-
mer acceso o la consecuencia de un evento
asíncrono, el procedimiento “Page_Load”
será siempre ejecutado (figura 4).
He construido una pequeña aplicación que
lista en un “Listbox” los diferentes eventos
iniciados. Cuando se hace clic en
“Confirmar”, primero se lanza “Page_Load”
y luego el procedimiento asociado al botón.
Esto es así ya que pese a que en el navega-
dor no se refresca la totalidad de la página,
es necesario en el servidor generar la
misma en su totalidad. Por último comen-
tarte que no es posible realizar dos llama-
das al servidor al mismo tiempo, si una
nueva se inicia, entonces anulará a la ante-
rior (mediante script es posible indicar prio-
ridades sobre ellas).
TABLA 3. Propiedades de ScriptManagerDDeessccrriippcciióónn
Establece o retorna el texto a ser exhibido en caso de que se produzca un error en el servidor o la llamada.
Tiempo máximo que se tendrá que esperar para una llamada asíncrona.
Si se desean o no las características de AJAX (actualizar solamente los valores de los controles en vez del
modelo estándar de refrescar toda la página), El valor predeterminado es “True".
Consultar en el servidor si la llamada se debió a que se refrescó la página o a una invocación asíncrona del
modelo AJAX.
Tiempo máximo para cargar los fuentes script en el navegador.
Archivos con fuentes de script que deseas se envíen al explorador. Estas podrían contener tus propias
funciones JavaScript o VBScript.
Lista de servicios web a los que quieres que los fuentes de script en el explorador tengan acceso.
LISTADO 1 Usando UpdatePanel
<asp:UpdatePanel ID=”UpdatePanel1” runat=”server”><ContentTemplate>
<!—Los controles son insertados aquí —></ContentTemplate>
</asp:UpdatePanel>
Figura 3. Controles dentro de un panel deactualización.
Figura 4. Evento “Page_Load” ejecutadoen una llamada asíncrona.
PPrrooppiieeddaadd
AsyncPostBackErrorMessage
AsyncPostBackTimeout
EnablePartialRendering
IsInAsyncPostBack
ScriptLoadTimeout
Scripts
Services
46-52 Redes ajax 20/12/06 15:10 Página 48
SOLO PROGRAMADORES nº 145
Panel de actualización y disparadores(Triggers)
En algunas ocasiones querrás que la acción
de un control fuera de todo panel actualice
a uno o más elementos “UpdatePanel”. La
idea para este ejemplo es que el usuario
tenga la posibilidad de marcar en el botón
de verificación si come o no zanahorias
(podrían ser también manzanas, pero... ¿has
visto antes alguna vez que incluya este tipo
de preguntas?). Deseo que esta acción
refresque el panel de “Login”. Por desgracia
dicho control está fuera de todo
“UpdatePanel”, lo que acarreará que se vaya
al servidor por una nueva página y se rege-
nere toda la interfaz (esto es verdadero
para el caso que el control
“comeZanahorias” tenga la propiedad
“AutoPostback” configurada a verdadero).
Afortunadamente los paneles de actualiza-
ción ofrecen los llamados disparadores
(Triggers), los que permiten condicionar
que se refresque un determinado
“UpdatePanel” al inicio de uno o más even-
tos de controles. Para ello, tienes que selec-
cionar las propiedades del mismo y luego ir
a “Triggers”, lo que abrirá una nueva venta-
na donde se especifican los posibles ele-
mentos y eventos (figura 5).
Ahora tienes que agregar “come
Zanahorias” y el evento “CheckedChanged”.
El último paso es verificar que la propiedad
“AutoPostback” del componente en cues-
tión esté configurado a verdadero; en caso
contrario, nada de esto funcionará.
¡Esto es todo! Ahora, el inicio del control
externo al panel forzará a que el mismo se
regenere. Para el caso de que te encuentres
dentro de los que les gusta ver el código
ASP.NET generado por el diseñador, fíjate
en el listado 2 y verás el que configura al
disparador.
Actualización condicional
Otra característica destacable es la posibili-
dad de refrescar un panel en forma condi-
cional. Esto quiere decir que puedes indicar
desde código cuándo y cómo deseas que
esto se lleve adelante. Observa la interfaz
gráfica de la figura 6. Como ves, he agrega-
do un nuevo panel llamado “updError”, que
contendrá una lista de los diferentes pro-
blemas encontrados durante la ejecución.
La idea es que solamente se actualice si
efectivamente ha habido algún error, de lo
contrario debería permanecer constante.
Como puedes apreciar en el listado 3, cada
vez que se hace clic en el botón “Confirmar”
se refrescará “updError” si ha existido algún
problema. Esto se lleva adelante invocando
al método “Update” del panel.
Una cosa más que debes configurar es la
propiedad “UpdateMode” de “updError”,
estableciéndola a “Conditional” (el valor por
defecto es “Always”, lo que significa siem-
pre). El código resultante debería verse
similar al listado 4.
De ahora en adelante, se mostrarán el error
para el caso que no se ingrese un valor en
alguna de las cajas de texto.
Paneles anidados y visibilidad
Una característica muy útil es la posibilidad
de insertar uno o más paneles dentro de
otro. Esto te permite refrescar ciertas zonas
dentro del mismo elemento, o la totalidad
para el caso que el control pertenezca al
componente superior. A la hora de diseñar
tu interfaz gráfica es sano tener en cuenta
la interacción de las diferentes partes y su
repercusión, así como aquellos elementos
que deseas asociar mediante disparadores
(Triggers) o los que quieres actualizar
manualmente usando el método “Update”.
49
REDESExtensiones AJAX para ASP.NET (II)
http://digital.revistasprofesionales.com
LISTADO 2 Código generado por Visual Studio
<asp:ScriptManager ID=”ScriptManager1” runat=”server” /><div>
<asp:UpdatePanel ID=”UpdatePanel1” runat=”server”>
<ContentTemplate>....
</ContentTemplate><Triggers>
<asp:AsyncPostBackTrigger ControlID=”comeZanahorias”EventName=”CheckedChanged” />
</Triggers></asp:UpdatePanel>
LISTADO 3 Código del evento clic para el botón Confirmar
Protected Sub Confirmar_Click(ByVal sender As Object, ByVal e AsSystem.EventArgs)
If Me.Email.Text = “” Or Me.Contraseña.Text = “” ThenlstErrores.Items.Add(“Mail o contraseña no válidas”)updError.Update()
End IfEnd Sub
LISTADO 4 Configuración del control updError
<asp:UpdatePanel ID=”updError” runat=”server” UpdateMode=”Conditional”><ContentTemplate>
<asp:Label ID=”Label1” runat=”server” Font-Bold=”True” ForeColor=”Red”Text=”Error:”></asp:Label>
<br /><asp:ListBox ID=”Errores” runat=”server” Width=”320px”
BackColor=”#FFC0C0”></asp:ListBox></ContentTemplate>
</asp:UpdatePanel>
Figura 5. Disparadores del panel deactualización.
Figura 6. Panel “updError”.
46-52 Redes ajax 20/12/06 15:10 Página 49
SOLO PROGRAMADORES nº 145 50
REDES
http://digital.revistasprofesionales.com
Esto no tiene mayores dificultades, y te lo
dejo como práctica adicional, sin embargo,
existe un tema más que es realmente inte-
resante, con el que me he topado cuando
estaba realizando el desarrollo para un
cliente. En muchas ocasiones querrás ocul-
tar o mostrar un determinado panel en
base a una condición, sin necesidad de
actualizar la página completa.
Si prestas atención a la figura 7, te darás
cuenta que solamente debería mostrarse el
bloque conteniendo los errores para el caso
de que exista alguno. Lo primero que se me
ocurrió fue hacer algo tan simple como lo
que se detallo en el listado 5. Sin embargo,
obtuve un error en tiempo de ejecución. El
motivo es que cualquier parte de la interfaz
gráfica que quiera ser actualizada dinámi-
camente mediante AJAX debe estar dentro
de un “UpdatePanel”, esto también incluye
a otro elemento de este tipo. Por lo tanto, la
solución es mover el panel de error dentro
del principal, tal como exhibe la figura 7.
Ejecuciones asíncronas en el servidor
En muchas ocasiones desearás condicionar
ciertas partes de tu código a que se eje-
cuten solamente como resultado de una
llamada asíncrona AJAX, en lugar de ejecu-
tarse en la generación completa de la pági-
na. Esto es útil cuando se está dentro del
evento “Page_Load”. Fíjate en el listado 6.
Como ves, en este caso consultamos
“IsInAsyncPostBack” para saber si efectiva-
mente se trata de una llamada asíncrona
AJAX (pertenece a “ScriptManager” y no al
panel en sí).
Páginas maestras y ScriptManagerProxy
Las páginas maestras fueron introducidas
en ASP.NET 2.0 y permiten resolver el pro-
blema de no tener un conjunto de elemen-
tos de interfaz gráfica común para todo el
proyecto (como por ejemplo un encabeza-
do, menús, pie de página, etc.). Cuando se
trabaja con AJAX es una buena idea el
situar al control “ScriptManager” en la
página maestra, ya que esto ofrece las
siguientes ventajas:
� El componente se tiene en un solo
lugar, por lo que las propiedades serán
las mismas para todas las páginas.
� Si adicionas un script personalizado
mediante la propiedad “Scripts”, enton-
ces estará visible para la aplicación en
su totalidad.
� El script de AJAX será cargado una
única vez.
Pese a los notables beneficios, trae consigo
dos problemas: el primero radica en la
forma de acceder desde la página secunda-
ria al control “ScriptManager”, la siguiente
línea que usamos anteriormente fallaría en
este contexto:
‘El elemento ya no se encuentra en
esta página sino en la Maestra.
If ScriptManager1.IsInAsyncPostBack
Then
Para resolver esto, debe obtenerse primero
una referencia a la página maestra para
luego acceder al control y guardar la refer-
encia, observa el listado 7.
Ya que ahora tienes un “ScriptManager”
general para toda la aplicación, entonces
siempre se cargarán los mismos scripts,
incluso si no van a ser empleados por el
formulario web. Para solucionar esto, que
es el segundo problema, se encuentra
un elemento adicional llamado “Script
LISTADO 5 Gestionando la visibilidad de un panel
If Me.Email.Text = “” Or Me.Contraseña.Text = “” ThenupdError.Visible = TrueErrores.Items.Add(“Mail o contraseña no válidas”)updError.Update()
End If
LISTADO 6 Ejecución en caso de llamada asíncrona
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) HandlesMe.Load
If Me.ScriptManager1.IsInAsyncPostBack Then‘El código aquí escrito se ejecutará solamente si la página fue solicitada‘por el inicio de un evento asíncrono AJAX
End IfEnd Sub
Figura 7. Visibilidad de un panel. Figura 8. Control "ScriptManager" en lapágina maestra.
Figura 9. El control “UpdateProgress” enacción.
TABLA 4. Nuevos eventos AJAXNNoommbbrree ddeell eevveennttoo
PageLoaded
beginRequest
endRequest
DDeessccrr iippcciióónn
Se inicia cuando la página ha sido cargada.
El código aquí escrito se ejecutará antes de realizar una llamada asíncrona Ajax.
Este evento se inicia cuando se tiene la respuesta de una petición asíncrona Ajax.
46-52 Redes ajax 20/12/06 15:10 Página 50
SOLO PROGRAMADORES nº 145
ManagerProxy”, que hace posible que
configures archivos de script específicos
para cada página en particular.
El control UpdateProgress
En las aplicaciones Windows cada vez que
se está realizando un proceso, es posible
mostrar una barra de progreso, la que
indica que hay un trabajo que se está lle-
vando adelante (y alternativamente cuán-
to falta para que finalice). En Microsoft
AJAX encontramos algo similar, lo que se
obtiene a través del componente “Update
Progress” (ver listado 8). “Progress
Template” debe contener el valor a exhibir,
lo que será mágicamente mostrado cuan-
do se lanza una llamada asíncrona al ser-
vidor. Puedes adicionalmente indicar el
nombre de un panel en la propiedad
“Associated UpdatePanelID” para el caso
que solamente esté visible cuando sea este
el que lo inicia.
Utilizando eventos del navegador
Es una tarea bastante común la de escri-
bir código JavaScript en el evento load de
la página, el que tenga a cargo realizar
algún proceso tan pronto como se vuelve
del servidor. Sin embargo, esto funciona
bien en el modelo tradicional pero no
cuando se emplea AJAX, ya que los miem-
bros del formulario web podrían estar
siendo modificados sin necesidad de
recargar el mismo.
Es por ello que AJAX ofrece ahora nuevos
eventos, los que hacen posible detectar
los diferentes escenarios. La tabla 4 deta-
lla alguno de los mismos.
Si nos fijamos en el listado 9, veremos
que en el encabezado del bloque se aso-
cian los eventos con las funciones, utili-
zando el método “add_<evento>” más el
nombre del procedimiento a vincular.
Estos objetos pertenecen a la biblioteca
cliente de AJAX, la que es cargada por
“ScriptManager” en la página. Una vez
indicados los mismos, basta que escribas
la implementación en los respectivos blo-
ques.
Mejorando la interfaz de usuario conASP.NET AJAX Control Toolkit
Uno puede pensar que los controles más
interesantes están dentro del paquete que
contiene la plataforma AJAX de Microsoft,
sin embargo esta no adiciona más que
unos pocos elementos y la infraestructu-
ra en si. Es aquí donde Control Toolkit
entra en juego para ofrecer alrededor de
25 componentes que extienden las capa-
cidades de la interfaz gráfica. Los elemen-
tos son parte de un proyecto de ejemplos
provistos por la iniciativa de código abier-
to de Microsoft (www.codeplex.com), por
lo que puedes bajar los fuentes y modifi-
carlos a tu gusto. Antes de hacer nada
deberás instalar el paquete de la siguien-
te dirección (es un archivo ZIP a descom-
primir):
http://www.codeplex.com/Release/
ProjectReleases.aspx?ProjectName
=AtlasControlToolkit
51
REDESExtensiones AJAX para ASP.NET (II)
http://digital.revistasprofesionales.com
LISTADO 7 Acceso a ScriptManager desde página secundaria
Dim SM As Microsoft.Web.UI.ScriptManagerDim miMaestra = Me.Master
SM = miMaestra.getScriptManager()If SM.IsInAsyncPostBack = True Then
‘Hacemos algo realmente interesante...End If
LISTADO 8 Usando UpdateProgress
<asp:UpdateProgress ID=”UpdateProgress1” runat=”server”AssociatedUpdatePanelID=”UpdatePanel1”>
<ProgressTemplate><p style=”background:red;”>Por favor espere...</p>
</ProgressTemplate></asp:UpdateProgress>
LISTADO 9 Nuevos eventos AJAX
<script type=”text/javascript” language=”Javascript”>//Registra los eventos para la página.Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded);
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
//Procedimientos de evento.function beginRequest(sender, args){ }
function PageLoaded(sender, args){ }
function endRequestHandler(sender, args){ }
</script>
TABLA 5. Carpetas creadas en la instalación de AJAX Control ToolkitNNoommbbrree ddee llaa ccaarrppeettaa
AjaxControlToolkit
SampleWebSite
DDeessccrriippcciióónn
Contiene la implementación de los diferentes controles AJAX, los fuentes de cada componente se
encuentran dentro de una carpeta diferente con su nombre. Puedes abrir AjaxControlToolkit utilizando
Visual Studio 2005. Visto que es un proyecto de biblioteca, no podrás ejecutarlo a no ser que hagas uso
de la solución de ejemplo.
Ejemplo con componentes del proyecto anterior que usa la biblioteca generada por AjaxControlToolkit.
46-52 Redes ajax 20/12/06 15:10 Página 51
SOLO PROGRAMADORES nº 145
Se habrá creado entonces el nombre de
la carpeta que tú indicaste, almacenando
allí los recursos necesarios. La tabla 5
ofrece el detalle de las carpetas instala-
das a las que tendrás que prestar aten-
ción. Puedes abrir “SampleWebSite” con
Visual Studio 2005 si quieres probar el
comportamiento de los distintos contro-
les. Esto te servirá para decidir cuáles
quieres emplear y la forma de hacerlo.
Cada página a su vez brinda las diferen-
tes sus propiedades y un ejemplo.
Me imagino que también querrás hacer
uso de los mismos en tu solución. Para
ello lo primero que tienes que hacer es
adicionar una ficha en la barra de herra-
mientas. Posteriormente tienes que indi-
car la opción de seleccionar elementos y
agregar el siguiente ensamblado DLL:
<carpeta deinstalación>/
AjaxControlToolkit/
bin/Debug/AjaxControlToolkit.dll
Esto inyectará automáticamente los
controles, y los dejará listos para ser
usados. Sin embargo, los componentes
en sí extienden a los ya existentes, por lo
que te recomiendo que sigas leyendo
para ver cómo funciona este concepto.
Extensiones de controles
Para no romper compatibilidad con los
controles web ASP.NET existentes,
Microsoft ha diseñado los llamados
extensores AJAX. Ellos, básicamente se
heredan de una clase llamada
“AjaxControlExtender” y sirven para
potenciar a un control estándar web
(agregarle más propiedades), de la
misma forma que la espinaca lo hace con
Popeye.
Primero se dibuja el extensor, luego se
indica cuál es el control a mejorar, y por
último se tendrá el elemento Web
ASP.NET con una propiedad del nombre
del extensor (ver figura 10) y categoriza-
da bajo “Extenders”. Pero como siempre,
no hay mejor explicación que un buen
ejemplo: vayamos a ello...
Voy a utilizar el extensor “Resizable
ControlExtender”, que habilita a un panel
el poder ser cambiado de tamaño, sim-
plemente arrastrando sus bordes con el
puntero del ratón. Antes que nada, es
necesario adicionar este elemento a la
página, ya sea escribiendo su definición
o dibujándola en el formulario (listado
10).
La propiedad “TargetControlId” es común
a todos los extensores y es donde se
configura el nombre del elemento a
extender. Aquí se trata de un panel con
una caja de texto contenida. Para el caso
que hagas uso de “UpdatePanel”, es obli-
gatorio que el extensor y el elemento a
mejorar se encuentren dentro del mismo
contenedor. Ahora tendrás que crear una
hoja de estilo, la que se aplicará a
“Panel1”. Mira el listado 11.
El estilo exhibirá un pequeño cuadrado
rojo al momento de arrastrar el borde del
control. El resultado será que ahora el
tamaño de “Textbox1” podrá ser perso-
nalizado (te recomiendo no obstante que
le eches un vistazo a las siguientes pro-
piedades, que por sus nombres hablan
casi por si solas: “OnClientResize”,
“MinimumWidth”, “MinimumHeight”,
“MaximumWidth” y “MaximumHeight”).
Por último, un extensor más a ver, el que
hace posible que un panel sea arrastrado
por la pantalla como si fuese una venta-
na de Windows. Te dejo con el código
fuente y la figura 11, que exhibe la fun-
cionalidad:
<asp:DragOverlayExtender
ID=”DragOverlayExtender1” runat=
”server”
TargetControlID=”WebPartZone1” />
Conclusiones
Como siempre, me he quedado sin espacio,
ya que pensaba mostrarte algunos ejem-
plos de AJAX CTP, sin embargo he incluido
los mismos en el archivo del material
adjunto. En la próxima y última entrega me
explayaré sobre cómo crear un control
desde cero, así como algunas alternativas
para el caso que estés utilizando .NET 1.1.
Hasta pronto y te deseo lo mejor para este
año...
52
REDES
http://digital.revistasprofesionales.com
LISTADO 10 Control ResizableControlExtender en nuestra página
<cc1:ResizableControlExtender ID=”ResizableControlExtender1” runat=”server”TargetControlID=”Panel1”HandleCssClass=”tp” HandleOffsetX=”10” HandleOffsetY=”10” MinimumWidth=”20” />
<asp:Panel ID=”Panel1” runat=”server” Width=”100” Height=”20”><asp:TextBox ID=”TextBox1” runat=”server” Style=”width: 100%; height: 100%;” />
</asp:Panel>
LISTADO 11 Hoja de estilo
<style type=”text/css”>.tp {
width: 10px;height: 10px;background-color: red;}
</style>
Figura 10. Propiedades del panel.
Figura 11. Moviendo los cuadros comoventanas de Windows.
46-52 Redes ajax 20/12/06 15:10 Página 52
Consigue por sólo 3 euros un archivador de revistas valorado en 5,41 euros
y un archivador de cd’s valorado en 4,20 euros.
Haz tu pedido llamando al teléfono 91 304 87 64, por fax al 91 327 13 03
o por correo electrónico a rpsuscripciones@revistasprofesionales.com,
indicando tus datos personales y la forma de pago (giro postal, domiciliación bancaria,
tarjeta de crédito o contrareembolso*).
REVISTAS PROFESIONALES - C/ Valentín Beato, 42 - 3ª plta. - 28037 Madrid*en opción contrareembolso se cobrará un suplemento de 5 euros por gastos de envíoEn opción domiciliación bancaria, se ruega aporten los datos completos de la entidad bancaria (nombre, dirección y número de cuenta completo)
Archivador de revistas + archivador de cd´s
por solo
3€
59 archivadores sp 20/12/06 15:12 Página 1
SOLO PROGRAMADORES nº 145 54 http://digital.revistasprofesionales.com
DISEÑO
Introducción
En este primer artículo se explicará qué son
estas herramientas y para qué sirven, introdu-
ciéndose los distintos elementos que las com-
ponen. Se mostrarán las ventajas del uso de
este tipo de herramientas, así como algunas de
las malas prácticas que permiten evitar, tratan-
do de guiar al usuario para que pueda comen-
zar a trabajar con una.
¿Qué es un SCM?
Es un sistema de gestión de la configuración de
software. El término SCM es el acrónimo del
nombre inglés Software Configuration
Management.
Pero, ¿qué es un sistema de gestión de la con-
figuración de software, y para qué sirve?.
Un SCM permite gestionar ficheros y directo-
rios mediante un almacenamiento controlado,
manteniendo su evolución a lo largo del tiem-
po.
Un SCM sirve para almacenar ficheros y direc-
torios de forma centralizada. Permite a una o
más personas trabajar simultáneamente sobre
los mismos, sin tener que preocuparse de si
alguien más está trabajando sobre ellos, ni de
cómo, pues es él el encargado de controlar
todo eso.
Mantiene el control sobre todos los cambios
sufridos por cada uno de los ficheros o direc-
torios que se encuentren controlados, identifi-
cando para cada uno de ellos, cuándo se cam-
bió, qué se cambió, quién lo hizo… En definiti-
va, permite tener una historia sobre todos
ellos, pudiéndose obtener información sobre la
misma o recuperar cualquiera de sus estados.
Elementos de un SCM
RepositorioEs un almacén de datos. Se encarga de almace-
nar la historia de todos los ítems controlados,
guardando las diferentes versiones de los mis-
mos, así como información complementaria
para facilitar su manejo y control por parte del
usuario.
Espacio de trabajo Muestra una vista local del repositorio, sobre la
cual el usuario puede trabajar. Un espacio de
trabajo se ubica en una ruta física del disco, en
la cual se encuentra la copia local de los ítems
controlados. Es sobre esta copia, sobre la cual
el usuario introducirá los cambios.
Los elementos que se muestran en el espacio
de trabajo vienen determinados por el usuario
mediante una serie de reglas. A través de estas
reglas el usuario dice al sistema qué versión
concreta desea ver para cada uno de los ítems.
Estas reglas pueden especificarse de forma
más o menos precisa dependiendo del sistema
empleado.
Ítem Es cualquier fichero o directorio controlado por
el SCM. Es importante distinguir que, el ítem,
es la representación única del elemento en el
sistema, mediante la cual podemos acceder a
él. Pero el ítem no contiene los datos del
mismo. Para guardar los datos contenidos por
el elemento en cada momento se emplean las
revisiones.
Cuando un fichero o directorio es añadido al
control de versiones, se le asocia a un ítem.
Mientras que el fichero o el directorio cambia-
rán a lo largo del tiempo, pudiendo cambiar de
nombre, de ubicación (ruta), de contenido o
incluso borrarse, siempre estarán identificados
A lo largo de esta serie de artículosse pretende introducir al lector en lasherramientas de control de versiones(SCM), muy extendidas en losentornos de programación, dandouna idea de su funcionamiento, asícomo una guía y consejos sobrecómo usarlas.
BORJA RUIZ ARROYO (Ingeniero Software en CódiceSoftware) y FRANCISCO JOSÉ GARCÍA PEÑALVO (ProfesorTitular de la Universidad de Salamanca)
Sistemas SCM para la Gestión dela Configuración del Software (I)Sistemas SCM para la Gestión dela Configuración del Software (I)
42-47 diseño.qxd 20/12/06 15:18 Página 54
SOLO PROGRAMADORES nº 14555
DISEÑO
http://digital.revistasprofesionales.com
Sistemas SCM para la Gestión de la Configuración del Software (I)
por el mismo ítem, el cual permanecerá
inmutable a lo largo del tiempo.
Revisión o versiónEl contenido de un ítem va cambiando a
lo largo del tiempo. Para almacenar cada
uno de estos estados se emplean las revi-
siones. Una revisión contendrá el conteni-
do del ítem en un momento dado. En
cualquier momento se puede recuperar
cualquiera de estas versiones, permitien-
do ver el ítem tal y como estaba en el ins-
tante en el que la versión fue creada.
Una revisión puede tener dos estados:
protegida o desprotegida. Cuando se crea
mantiene un estado de desprotegida
(checkout). Mientras está en este estado
puede ser modificada por parte del usua-
rio. Cuando el usuario confirma los cam-
bios en el ítem, éste pasa a guardarse en
el sistema, pasando la revisión al estado
de protegida (checkin). Una vez que una
revisión está en este estado no puede
alterarse. Para modificarla será necesario
desprotegerla creando una nueva revisión
con el estado de desprotegida. Algunos
sistemas son capaces de almacenar tam-
bién las revisiones mientras están despro-
tegidas, conservando estos datos en el
repositorio y no sólo localmente.
RamaEs uno de los conceptos más complejos
dentro de un SCM, pero también es uno
de los que les confiere una mayor poten-
cia. Una rama es una línea temporal en la
cual han ido evolucionando uno o más
ítems. Esta línea temporal normalmente
se denomina “línea de trabajo”.
Un ítem va cambiando a lo largo del
tiempo. Cada vez que lo modificamos
partimos de un contenido inicial, que es
la revisión que estamos viendo (revisión
padre). Para crear una nueva revisión con
el contenido modificado. Estos cambios
que se van haciendo a lo largo del tiem-
po crean una línea temporal, en la que
cada revisión viene seguida por una y
precedida por otra. Todas estas revisio-
nes, que representan cómo ha ido evolu-
cionando un elemento a lo largo del
tiempo, se encuentran contenidas dentro
de una rama, tal y como puede verse en
la figura 1.
Si un ítem va a ser modificado de más de
una manera simultáneamente (e inde-
pendientemente), el elemento pasará de
tener una línea temporal, a tener tantas
como de formas distintas vaya a ser
modificado. Para poder hacer esto se
crearán tantas ramas como evoluciones
vaya a tener el ítem, manteniendo en
cada rama una línea temporal de los
cambios del ítem, como se muestra en la
figura 2. Al crear distintas ramas, el ítem
puede ir evolucionando de formas dife-
rentes, sin que la forma en la que se cam-
bia su contenido en una rama afecte a las
demás.
Aunque la información contenida en una
rama es independiente a la que está con-
tenida en las demás, en ocasiones quere-
mos propagar los cambios sufridos por
uno o más ítems en una rama hacia otra.
Para propagar los cambios entre las
ramas se emplean los rebases y las inte-
graciones, que se realizan a través de la
operación de merge. Dada la complejidad
de estas acciones se explicarán detenida-
mente en un próximo artículo.
Una rama almacenará un conjunto de
revisiones para uno o más ítems. Todas
las revisiones de un mismo ítem dentro
de la rama, tienen una relación lineal.
Cada revisión mantiene un estado del
ítem, que da lugar al siguiente estado del
ítem después de que un usuario lo modi-
fique y así sucesivamente. De ahí que la
rama contenga una línea temporal en la
que ha evolucionado uno o más ítems. Es
importante aclarar que toda revisión se
encuentra necesariamente en una rama,
y sólo en una.
EtiquetaUna etiqueta permite marcar una revisión
concreta de uno o más ítems para poder
referirnos a ella con mayor facilidad en
cualquier momento. A todos los efectos,
lo que hace es asociar un nombre con el
que referirse a esa revisión concreta de
cada ítem. Pero una etiqueta no puede ser
aplicada a más de una revisión de un
mismo ítem, de manera que permite recu-
perar fácilmente un estado para todos los
ítems marcados por ella.
El caso habitual es etiquetar todos los
ítems del espacio de trabajo. De esta
manera la etiqueta nos permitiría recupe-
rar una configuración concreta de todo
sistema. Normalmente, en entornos de
desarrollo, se aplica una etiqueta a todo el
sistema siempre que se realiza una relea-
se (una nueva versión del sistema que se
está desarrollando).
LinkUn link permite relacionar dos objetos del
repositorio. Los links pueden ser creados
por el usuario y en algunos casos por el
propio sistema.
Un usuario creará un link de cierto tipo
(creando un tipo de relación), que luego
usará para relacionar un par de objetos
contenidos en el repositorio. Hay que
entender que un link puede estar creado
sin que ningún par de objetos estén rela-
cionados por el mismo. Pero obligatoria-
mente para relacionar un par de objetos,
es necesario haber creado un link que
represente ese tipo de relación.
Por ejemplo, podría crearse un link
“implementa requisito”, mediante el cual
se relacionarán las especificaciones de
requisitos, con los ficheros de código que
las implementan, para luego aplicar ese
link a cada documento de requisitos con
todos ficheros de código necesarios para
implementarle.
De los links creados por el sistema, el más
importante es el de merge. Un link de
merge relaciona dos revisiones del siste-
ma. Indicando que una es el resultado de
mezclar el contenido de su revisión
padre, con el contenido de la del
Figura 1. Evolución de un ítem en unarama.
Figura 2. Evolución de un ítem en variasramas simultáneamente.
42-47 diseño.qxd 20/12/06 15:18 Página 55
http://digital.revistasprofesionales.com
DISEÑO
origen del merge. Estos links se crean
automáticamente en la operación de
merge, indicando qué revisiones han sido
mezcladas en el mismo. Hablaremos de la
utilidad de los mismos en un próximo
artículo.
AtributoUn atributo es una característica particular
de algunos SCM. Permite asociar informa-
ción adicional a los objetos del repositorio.
Para ello, se definiría previamente un atribu-
to, que sería la información o dato que se
desea poder asociar a los objetos del reposi-
torio. Al asociarlo con cada objeto se le da un
valor concreto.
Por ejemplo podemos crear un atributo que
sea “error corregido”. Cuando corrijamos un
error, podemos asociar a todos los ficheros
involucrados en la corrección este atributo,
dando como valor el identificador del error
que corrigen. De forma que en cualquier
momento, por medio de una búsqueda,
podamos encontrar fácilmente cuáles fue-
ron los ficheros que corrigieron ese error.
Ventajas del uso de un SCM
El uso de un SCM aporta gran cantidad de
ventajas. Un SCM es útil para almacenar
aquellos documentos que son modificados
con frecuencia, como guiones, traducciones,
novelas, código fuente... Pero cuando resulta
imprescindible, es en el momento que es
necesario coordinar el trabajo de muchas
personas sobre los mismos elementos.
� Por un lado se almacenan múltiples ver-
siones de los elementos y no sólo sobre la
que se está trabajando, pudiéndose recu-
perar una versión antigua en caso nece-
sario (sin necesidad de guardar cada ver-
sión de forma independiente renombrán-
dola). De esta manera, si algo se rompe o
queda mal, se puede volver a una revisión
anterior para seguir trabajando a partir
de ésta. Incluso si alguien borra todo,
sigue siendo posible recuperar los datos,
al estar almacenados en el repositorio,
pudiendo volver atrás y recuperar su con-
tenido.
� Además, mientras se está trabajando pue-
den hacerse diferentes pruebas, pudiéndo-
las descartar o, sencillamente, no incluirlas
en la versión final, sin preocuparse de des-
hacer todos los cambios incluidos en las
mismas. Todo esto otorga una mayor
comodidad y seguridad, a la hora de traba-
jar con los distintos elementos.
� Se puede saber quién introdujo cada
cambio para cada elemento, lo cual con-
fiere la trazabilidad necesaria para temas
de calidad. También gracias a los links y
los atributos, puede asociarse el código a
los requisitos que implementan y a los
errores que corrigen, algo necesario para
certificaciones de calidad.
� Permite que varias personas trabajen
sobre los mismos elementos sin necesi-
dad de que sean ellos los que tengan que
coordinarse, sin que los cambios que uno
introduzca pisen los del otro, eliminándo-
los o alterándolos. Incluso pueden traba-
jar de forma paralela sobre el mismo ele-
mento sin problemas, dado que será el
sistema el encargado de combinar sus
cambios.
� Cada persona trabaja con una revisión
local del elemento para modificarla.
Mientras el usuario la modifica, la revi-
sión pasa a estar desprotegida, y todos
los cambios que realiza sobre ella sólo
son visibles para él, sin pasar a formar
parte del sistema hasta que los confirma
protegiendo la revisión. En caso de que
quiera descartar esos cambios, no tiene
más que deshacer la desprotección, vol-
viendo a la versión existente del elemen-
to antes de que empezase a modificarla.
� Un SCM se encarga de actualizar los ele-
mentos modificados, comparando la ver-
sión local con la última existente. De
manera que no es el usuario el que tiene
que preocuparse de ir comprobando
todos los elementos, para ver cuáles son
los que han cambiado y así sustituirlos
por la versión correcta.
� Se puede aislar cada nueva tarea que
haya que hacer sobre el sistema, pudien-
do decidirse más tarde si ésta se incorpo-
ra o se tiene que descartar. Centralizando
todos los cambios introducidos por esa
tarea en una rama, luego pueden incor-
porarse al sistema mediante un merge de
la rama, en el momento necesario. Esto
da un mayor control sobre el sistema,
pudiendo crear distintas versiones del
mismo para probarlo, simplemente incor-
porando unos cambios u otros sobre las
mismas.
� Si hay que hacer cambios en un sistema
que puedan llegar a romperlo, se pueden
hacer de forma aislada mientras los
demás continúan trabajando sin que les
afecte, mediante el uso de ramas. En el
momento que estos cambios estén aca-
bados y probados, pueden incorporarse al
sistema sin haber tenido que interrumpir
el trabajo de los demás.
� Se puede recuperar el estado que tenía
todo un sistema en cualquier momento
mediante las etiquetas, en caso de que
fuera necesario para realizar pruebas,
algún arreglo o sacar una nueva copia del
mismo.
� Todos los datos se guardan de forma cen-
tralizada, facilitando la tarea de realizar
copias de seguridad, al no tener que ir
buscando cada uno de los ficheros nece-
sarios.
� Proporciona un acceso remoto a todos
los elementos. Ya no es necesario tener
una copia del sistema en todo momento,
pues basta con conectarse al servidor
para poder bajarse una versión actualiza-
da desde cualquier parte, y luego seguir
trabajando con ésta normalmente.
Errores y malas prácticas que podemosevitar con un SCM
El no disponer de un sistema SCM no signi-
fica que no necesitemos sus prestaciones. En
realidad, de manera inconsciente, en ausen-
cia de un SCM intentamos “emular” sus fun-
cionalidades de manera “manual”, lo cual
nos conduce a prácticas poco aconsejables.
� Es una mala costumbre dejar partes de
código comentadas por si luego van a ser
usadas. Hacen crecer, de forma irreal, el
proyecto, alterando las medidas que
sobre él se toman. Puede llegar a olvidar-
se por qué se comento ese código, y
dudar si es necesario volver a incluirlo o
no. Un control de versiones permite, al
guardar un historial del archivo, borrar
todo este código comentando, al poder
recuperarlo volviendo a la versión que lo
tenía.
� Es usual ir guardando copias del código
con distintas versiones del mismo. Estas
copias se suelen ir dejando por todo el
disco (bien en distintas carpetas o en
ficheros comprimidos). Cuando más ade-
lante se trata de buscar un cambio, una
corrección o una nueva funcionalidad
que hemos añadido, no sabemos en cuál
de todas las copias se encuentra. Puede
llegar a darse el caso que se sabe que se
ha escrito un código, pero ser incapaces
de encontrarlo.
� No se sabe cuándo se hizo un cambio, ni
SOLO PROGRAMADORES nº 145 56
42-47 diseño.qxd 20/12/06 15:18 Página 56
SOLO PROGRAMADORES nº 145
por qué. Esto dificulta encontrarlo, o
incluso saber por qué un cambio está ahí.
� Cuando se encuentra un error, no sabe-
mos en qué versión está. Incluso no sabe-
mos si en la versión actual continúa
estando ese error o ya ha sido corregido
por alguien en algún momento.
� Si dos desarrolladores hacen un cambio
sobre el mismo fichero, pueden pisarse el
cambio mutuamente al sustituir cada
uno el fichero con su versión, sin saber
que el otro también lo ha modificado y
sustituido.
� Si a lo largo del desarrollo se llega a una
versión que funciona peor o que gusta
menos, no es fácil volver atrás.
Cómo comenzar a trabajar con un SCM
Aunque todos lo sistemas de SCM poseen
un comportamiento similar en la mayoría
de los aspectos, al profundizar en ellos, se
encuentran muchas diferencias, tanto en
su funcionalidad como en la manera de
realizar las operaciones.
La forma de empezar a trabajar con todos
los sistemas SCM es parecida (una vez
instalados); por ello aunque los pasos a
seguir que se describirán son genéricos
para todos ellos, los ejemplos se harán
con una versión demo de Plastic SCM,
que puede ser descargada de
http://www.codicesoftware.com/opdown
loads.aspx. Plastic SCM es un nuevo sis-
tema de control de versiones desarrolla-
do por la empresa española Códice
Software (http://www.codicesoftware.
com/opfront.aspx).
Para montar un sistema SCM, es necesa-
rio instalar un servidor y tantos clientes
como personas quieran trabajar con él.
Para ello usaremos el instalador de
Plastic SCM; para la mayoría de los siste-
mas las opciones marcadas por defecto
serán las más apropiadas, una vez que el
usuario haya elegido el idioma.
En el último punto de la instalación, se
lanzarán los asistentes que se encargarán
de guiar al usuario en la configuración
del cliente y del servidor.
El asistente del servidor, tras una pantalla
de bienvenida y de haber definido el
idioma, nos llevará a la pantalla de la
figura 3, para configurar el modo de tra-
bajo con usuarios. Junto a cada uno de
los modos aparece una pequeña explica-
ción del mismo. Para el ejemplo elegire-
mos los usuarios locales. En esta configu-
ración, es necesario que en la máquina
del servidor existan usuarios con los
nombres de cada usuario que va a usar la
herramienta (la parte del cliente).
Como último paso, aparecerá la pantalla
de la figura 4. Nos pedirán introducir la
dirección del servidor: por defecto se
dejará la que aparece.
En el caso del cliente es muy parecido.
En primer lugar aparecerá la pantalla
de bienvenida, seguida de la de selección
de idioma. Después, se solicita el modo de
trabajo con usuarios, figura 5. Tendremos
que elegir el mismo que se eligió en el
servidor. Como último paso, figura 6,
se solicita la dirección del servidor (la
misma que aparecía en el asistente del
servidor).
Llegados a este punto ya tenemos la
herramienta instalada y lista para
comenzar a trabajar.
El primer paso cuando se instala un SCM
es crear un repositorio. En nuestro caso
no es necesario, dado que se crea un
repositorio por defecto a lo largo del
proceso de instalación. Aun así existe
la posibilidad de crear nuevos reposito-
rios si se considera oportuno, por
ejemplo:
57
DISEÑOSistemas SCM para la Gestión
de la Configuración del Software (I)
http://digital.revistasprofesionales.com
Figura 3. Asistente del servidor, pantallade configuración del modo de trabajo conusuarios.
Figura 4. Asistente del servidor, pantallade configuración de la dirección delservidor.
Figura 7. Plastic GUI, permisos delelemento raíz del espacio de trabajo.
Figura 8. Plastic GUI, pantalla para laselección de un espacio de trabajo y lacreación de uno nuevo.
Figura 5. Asistente del cliente, pantalla deconfiguración del modo de trabajo conusuarios.
Figura 6. Asistente del cliente, pantalla deconfiguración de la dirección del servidor.
42-47 diseño.qxd 20/12/06 15:18 Página 57
SOLO PROGRAMADORES nº 145
� Permitiendo mantener aislados los ele-
mentos controlados que no tienen rela-
ción entre sí (un repositorio por proyecto
de desarrollo, uno para documenta-
ción…).
� Para distribuir la carga de trabajo y el
almacenamiento.
� Por políticas de empresa.
Nada más instalarlo y antes de empezar
a trabajar con el sistema, es el momento
apropiado para aplicar las directivas de
seguridad. Casi todos los SCM tienen un
sistema de seguridad incorporado que
permite definir ciertos permisos sobre
sus elementos.
En el caso de Plastic se emplea un siste-
ma de ACLs (Access Control List – Listas
de Control de Acceso). Este sistema es el
mismo que se emplea en otras herra-
mientas y en sistemas operativos como
Windows. Mediante este sistema se pue-
den especificar los permisos que tiene
cada usuario (o grupo) en cada objeto
del sistema, pudiendo definir los permi-
sos para cada una de las operaciones
disponibles en Plastic SCM de manera
independiente para cada grupo o usua-
rio, como puede verse en la figura 7.
Todo objeto hereda sus permisos de su
padre según una jerarquía de herencia, al
igual que en un sistema operativo un
fichero hereda los permisos del directo-
rio que lo contiene. A cada objeto se le
pueden aplicar nuevos permisos (que se
añadirán a los heredados), romper su
herencia, cambiar su esquema de heren-
cia… Mediante este sistema, la política
de seguridad puede llegar a complicarse
tanto como haga falta, soportando cual-
quier necesidad, pero en general suele
mantenerse una política bastante simple.
El caso más común es dejar un sistema
completamente abierto, tal y como se
crea por defecto, o completamente
cerrado. En el primer caso, todo el
mundo puede realizar cualquier opera-
ción, denegando ciertas operaciones
cuando sea necesario. En el segundo
caso, nadie puede hacer nada salvo que
se le haya otorgado expresamente el per-
miso para hacerlo.
En la mayor parte de los entornos, se
puede mantener el sistema con la políti-
ca de seguridad por defecto.
Una vez que se ha instalado el sistema y
definida la política de seguridad para
que un usuario pueda empezar a traba-
jar, es necesario que cree un espacio de
trabajo. Un espacio de trabajo se crea en
una ruta del disco y con un nombre con
el que se le referencia, pudiendo a partir
de ese momento mantener bajo control
cualquier elemento contenido en esa
ruta. En el caso de Plastic SCM, nada más
arrancar la interfaz gráfica se pide elegir
un espacio de trabajo. Si se hubiese pul-
sado el botón “obtener” nos mostraría
todos los disponibles para que se selec-
cione uno; como aun no hay ninguno,
se crea uno nuevo como se ve en la
figura 8.
El directorio en el que se crea el espacio
de trabajo pasa a ser un elemento espe-
cial del repositorio, el elemento raíz.
Sobre él podremos ir añadiendo nuevos
elementos. Es importante entender que
aunque un elemento se encuentre física-
mente contenido en el espacio de traba-
jo, no estará controlado salvo que
alguien lo haya añadido. Mientras tanto
será un elemento privado que puede ser
manejado normalmente de forma local,
como podemos ver en la figura 9.
Para que un elemento pase a estar con-
trolado, es necesario desproteger el
directorio donde se encuentra y añadir el
elemento al control de versiones. La ope-
ración de “añadir” deja al elemento
desprotegido, para que pueda ser modi-
ficado.
Siguiendo con el ejemplo, añadiremos
todos los elementos privados que tene-
mos en el espacio de trabajo para que
pasen a estar controlados. Para ello se
desprotegerá el elemento raíz, con el
botón derecho en este elemento y pul-
sando la opción desproteger (figura 10).
Al desproteger un elemento, se pide el
comentario que se asociará a la revisión
desprotegida que se crea.
Una vez tenemos la raíz desprotegida,
añadiremos todos los elementos de
forma recursiva. Para ello se seleccionan
todos los que están en el directorio raíz y
con el botón derecho, “añadir recursiva-
mente” (figura 11). Marcando la opción
“Ver COs”, se pueden ver todos los ele-
mentos desprotegidos en ese espacio de
trabajo, que en este caso son todos ellos
(figura 12). Seleccionaremos todos los
elementos desprotegidos y confirmare-
mos la acción de añadir todos ellos al
control de versiones, protegiéndoles
(figura 13). También en este caso se
58
DISEÑO
http://digital.revistasprofesionales.com
Figura 9. Plastic GUI, vista del contenidode los elementos privados contenidos en elespacio de trabajo.
Figura 10. Plastic GUI, desprotección delelemento raíz.
Figura 11. Plastic GUI, se añaden todos loselementos privados al control de versiones.
Figura 12. Plastic GUI, vista “Ver COs”mostrando todos los elementos reciénañadidos.
Figura 13. Plastic GUI, protección de todoslos elementos desprotegidos desde la vista“Ver COs”.
42-47 diseño.qxd 20/12/06 15:18 Página 58
SOLO PROGRAMADORES nº 145
pedirá el comentario para la revisión
protegida.
Generalmente, una persona es la encar-
gada de añadir inicialmente todos los
elementos que van a estar controlados,
como puede ser el proyecto sobre el que
se va a trabajar. Aunque luego será cada
usuario el que vaya añadiendo los ele-
mentos que sean necesarios.
Como cualquier otro elemento, para
modificar un directorio es necesario que
se encuentre desprotegido. Mientras el
directorio está desprotegido, podremos
alterar su contenido añadiendo nuevos
elementos, renombrándolos o borrándo-
los. Todos estos cambios permanecen
locales mientras el directorio siga des-
protegido. En el momento en el que el
directorio se proteja, los cambios pasa-
rán a ser globales estando almacenados
en el control de versiones. Si por el con-
trario queremos cancelarlos, lo único
que hay que hacer es deshacer la des-
protección y de esa manera recuperar el
estado inicial del elemento.
En el caso de Plastic SCM, si modifica-
mos un directorio, por ejemplo renom-
brando un fichero, y este directorio no
está desprotegido, se preguntará si se
desea desproteger el directorio (figura
14). Es importante entender que al
modificar el nombre de un elemento, no
es el elemento el que estamos cambian-
do sino el directorio, pues son las entra-
das del directorio las que contienen el
nombre de los elementos (figura 15).
En el caso de los ficheros sucede lo
mismo: antes de realizar algún cambio
es necesario desprotegerlo (esta opera-
ción puede hacerse automáticamente si
el editor está integrado con el “control
de código fuente”). Una vez tenemos el
fichero desprotegido, se puede modifi-
car localmente, para luego confirmar
sus cambios protegiéndolo, o descartar-
los desprotegiéndolo.
Se puede ver cómo se ha ido modificando
un elemento a lo largo del tiempo,
mediante el historial de revisiones (figura
16) o el árbol de revisiones (figura 17),
ambas operaciones disponibles en el
menú contextual del ítem. Se puede acce-
der a los datos de cualquiera de ellas
fácilmente, simplemente pulsando en la
opción abrir (figura 18).
Pero un usuario no verá de forma auto-
mática los cambios de los demás, cuando
éstos los protejan. Para que pueda verlos
es necesario que se actualice. Mientras
un usuario no se actualice, trabajará
sobre su versión local sin que ésta se vea
afectada. Cada usuario puede decidir qué
parte del sistema desea cargar localmen-
te. Esto se define mediante una serie de
reglas. Cada regla se define para un
directorio, fichero, o patrón (*.cs). En el
caso de un directorio puede definirse sólo
a ese nivel o de forma recursiva para ese
nivel y todo su contenido. Una regla
especifica desde dónde se desean cargar
esos elementos y dónde se desean dejar
al modificase (al desprotegerlos). Por
defecto, al crear un espacio de trabajo se
le fija un selector, que trae la última revi-
sión para todos los elementos contenidos
en la rama principal del repositorio por
defecto. Siempre que se crea un espacio
de trabajo, se debe actualizar su conteni-
do para obtener la última versión de los
elementos que se encuentren en el servi-
dor en ese momento.
Conclusiones
A lo largo de este artículo se han introdu-
cido las herramientas de SCM, explicando
sus principales elementos. Se han
expuesto algunas de las razones por las
que su uso es aconsejado o incluso nece-
sario en algunas circunstancias (como
para conseguir algunos certificados de
calidad). Tal y como se ha visto, propor-
cionan una importante seguridad a la
hora de trabajar, gracias a tener una his-
toria concreta sobre todos los elementos
sobre la que poder buscar y recuperar
cualquier información. Pero más impor-
tante aún es que permiten coordinar el
trabajo de múltiples usuarios, evitando
que puedan dañar el sistema o entorpe-
cerse unos a otros.
También se ha guiado al usuario para que
pueda empezar a trabajar con una herra-
mienta de SCM como es Plastic SCM.
No obstante, éste era un primer artículo
de una serie introductoria a las herra-
mientas de SCM. En próximos artículos,
se darán algunas pautas sobre el uso
más eficiente de estas herramientas y
algunos consejos prácticos. Además, se
profundizará en su manejo, detallando
algunas de las operaciones que poseen
una mayor complejidad, como son los
merges.
59
DISEÑOSistemas SCM para la Gestión
de la Configuración del Software (I)
http://digital.revistasprofesionales.com
Figura 14. Plastic GUI, solicitud dedesprotección para el directorio quecontiene el elemento a renombrar.
Figura 15. Plastic GUI, directoriodesprotegido después de renombrar unelemento.
Figura 16. Plastic GUI, historial de“fichero.txt”.
Figura 17.Plastic GUI,árbol derevisiones de“fichero.txt”.
Figura 18. Plastic GUI, abrir una versiónde “fichero.txt” desde el historial.
42-47 diseño.qxd 20/12/06 15:18 Página 59
LIBROS
http://digital.revistasprofesionales.comSOLO PROGRAMADORES nº 145 60
Si hasta no hace mucho Google se había “con-formado” con indexar toda la web, ahora lacompañía ha iniciado una nueva estrategia alpretender incluir en sus índices contenidos que,en prinicpio, no están en Internet. Tal es el casode Google Books, disponible en español enbooks.google.es.Salta a la vista que la funcionalidad de GoogleBooks consiste en realizar búsquedas en libros.Teniendo su importancia, como todo lo quehace Google, esto no sería de gran trascenden-cia salvo si reparamos en el significado de lahumilde preposición “en”. Efectivamente, laimportante novedad consiste en que si bien hayservicios de búsqueda “sobre” libros, GoogleBooks es el primero de búsqueda “en” libros. O,dicho, de otra manera, no es lo mismo buscarinformación en los metadados que describenun libro (título, autor, editorial...) que hacer bús-quedas en su contenido.Por poner un ejemplo, estamos acostumbradosa que una búsqueda sobre “don quijote de lamancha” devuelva referencias a libros cuyotítulo incluye estas palabras. Pero al realizar estamisma búsqueda en Google Books lo quevamos a obtener son libros en cuyo contenidotienen relevancia estas palabras, es decir,encontraremos libros que hablen sobre estaobra de Cervantes.
De dónde
¿De dónde puede Google obtener el contenidode los libros? Google Books obtiene los libros a
partir de dos programas: uno dedicado a biblio-tecas y otro dedicado a editoriales. En el caso de las editoriales, estas deben firmarun contrato con Google y suministrarles unejemplar de cada una de las obras a indexar. Sesobreentiende que las editoriales ofrecen obrassobre las que tienen derechos y, en función deestos derechos, deciden si Google Books va aofrecer una vista de fragmentos de libro, unavista previa restringida, una vista completa oningún tipo de vista.Por su parte, las bibliotecas pueden hacer lopropio, en este caso con obras de su fondo paralas que hayan caducado los derechos de autor.Si bien la oportunidad para las editoriles es máso menos discutible, la decisión de las bibliotecasciertamente está siendo muy discutida. A favorestán los argumentos de ofrecer accesibilidad abienes culturales que son de dominio público.En contra está el hecho de que esos bienes ten-gan que salir no solo de la biblioteca sino tam-bién de España, pues Google digitaliza los librosen EE UU. Este traslado puede acarrear deterio-ros o pérdidas en obras valiosas cuya conserva-ción es responsabilidad de la biblioteca que lascustodia, por ejemplo por el simple hecho detener que desencuadernarlas para el escaneo.Además, también en contra, está el hecho deque todo este patrimonio quede en manos deuna compañía privada, que en un futuro puederestringir el acceso, hacerlo de pago, etc. Poreso, son pocas las bibliotecas españolas que vencon buenos ojos esta oportunidad, a pesar delas presiones de los usuarios para que sus fon-dos sean accesibles on line sin restricciones.¿No debería ser, un servicio de accesibilidad a lacultura como este, gestionado por instanciaspúblicas? El caso es que la de la UniversidadComplutente de Madrid es la pimera bibliotecano anglosajona, y la única en España, que hafirmado con Google un acuerdo de noexclusividad para la indexación de obras dedominio público (más información en http://www.ucm.es/BUCM/biblioteca/11979.php).
Cómo
Dejando al margen este debate, que centrómucho interés en el reciente simposio“Bibliotecas y Objetos Digitales” (www.bibliote-casdigitales.es), celebrado en Madrid el pasadootoño, mencionar que una vez Google hanegociado el derecho a acceder al contenido de
un libro, bien sea a través de una biblioteca o deuna editorial, el libro se escanea, se convierte atexto y se indexan sus palabras clave. Pero, ade-más, el libro va a tener asociados una serie deservicios, en función de la localización de usua-rio, tales como las bibliotecas cercanas endonde el libro está en consula o préstamo, o laslibrerías que lo venden por el modo tradicionalo por comercio electrónico.Además, una vez hemos realizado una consul-ta en Google Books y hemos llegado a un libro,podemos realizar nuevas consultas en el conte-nido de ese mismo libro. Y, por supuesto, tam-bién pueden realizarse las clásicas consultas porautor, título, editorial...
Pros y contras
Google argumenta que su negocio está en lapublicidad, y que de ninguna manera se plan-tea ni se planteará restringir el acceso aGoogle Books ni hacerlo de pago, pues lo quele interesa es máxima visibilidad para mayoresingresos en publicidad. No se puede menos-preciar la democratización que supone elhecho de que Google se interese por conteni-dos que no están en web (artículos, libros...) ylos incluya en sus buscadores, pero tampocohay que obviar las consecuencias que en unfuturo puede tener el hecho de que estademocratización de la información esté enmanos de una empresa privada, aunque estaempresa siga las prácticas de la Web 2.0.Incluso aunque el servicio sea gratuito, ¿seprimarán más unas ediciones que otras?¿Tendrá Google un control sobre los perfilesde sus usuarios?... Son estas incertidumbreslas que están frenando la expansión de GoogleBooks que, a pesar de ello, es una iniciativaque no tiene parangón, ni en lo público ni enlo privado.
Búsqueda de librosen Google BooksBúsqueda de librosen Google Books
El interés de Google porindexar contenidos que noestán en web supone un saltoen la estrategia de lacompañía, y un paso más en laaccesibilidad a los bienesculturales. Al mismo tiempo,el hecho de que estaaccesibilidad dependa de unaempresa privada, suscitanumerosas reticencias.
DABNE
Sobre Dabne
Dabne Tecnologías de la información(www.dabne.net) ofrece su experiencia en eldiseño e implementación de archivos ybibliotecas digitales, análisis de los docu-mentos, digitalización del material y crea-ción de la estructura, de los procedimientosde gestión y de las interfaces de acceso.
60 Libros.qxd 19/12/06 12:09 Página 60
SOLO PROGRAMADORES nº 145 62
DUDAS
http://digital.revistasprofesionales.com
Estoy desarrollando una aplicación queemplea XML en Java. La aplicación a vecesfalla y creo que se debe en algunos casos aque los datos no están bien. Me gustaríapoder sacar el XML por el “System.err” o porel “System.out”, pero no tengo claro cómohacerlo. De hecho hasta el momento la apli-cación lo único que hace es leer los ficherosXML, usando el método “parse” de la clase“DocumentBuilder”, pero no tengo nadaclaro cómo escribir ficheros XML (en la clase“DocumentBuilder” no hay ningún método).Supongo que ambas cosas son el mismo pro-blema.La clase “DocumentBuilder” se utiliza principal-
mente para obtener objetos “Document”, que
representan a un documento XML, a partir de un
fichero o construyéndolos desde cero emplean-
do los típicos métodos “createElement”,
“appendChild”, etc. Por el contrario,
“DocumentBuilder” no implementa la funcionali-
dad que permite salvar un objeto “Document” en
un fichero XML. Para ello la alternativa más sen-
cilla es emplear las clases del paquete estándar
“javax.xml.transform”.
En primer lugar debes obtener una instancia de
la clase “TransformerFactory” empleando el
método estático “newInstance”:
TransformerFactory transFactory =
TransformerFactory.newInstance();
El siguiente paso consiste en obtener un objeto
de la clase “Transformer”. En realidad este tipo de
objetos se utilizan normalmente cuando se quie-
re aplicar una hoja XSL a una fuente de datos
XML con el fin de obtener una página HTML u
otro XML, por ejemplo. En otras palabras, se
emplean para transformar, como su propio nom-
bre indica, orígenes de datos XML “en otra cosa”.
Convertir un documento XML almacenado en
forma de objeto “Document” en una cadena de
caracteres, para salvarla en un fichero o para
mostrarla por el “System.err”, es precisamente
eso: transformar un origen de datos XML.
Transformer transPlainText =
transFactory.newTransformer();
Al emplear el método “newTransformer” sin
parámetros, se crea un “transformador” que
transforma el documento XML convirtiéndolo en
una cadena de caracteres. El proceso es el que se
describe seguidamente.
Se crea un “StringWriter” para almacenar la
cadena de caracteres correspondiente al docu-
mento XML representado por un objeto de la
clase “Document”. El objeto de tipo
“StringWriter” se pasa al constructor de la clase
“StreamResult”:
StringWriter sw = new StringWriter();
StreamResult streamResult
= new StreamResult(sw);
Con lo anterior ya se tiene preparada la salida
del transformador. A continuación se prepara
la entrada, y para ello se crea una instancia
de “DOMSource” a partir del objeto
“Document”.
DOMSource domSource = new DOMSource(doc);
Finalmente, el método “transform” de la clase“Transformer” se encarga de realizar la transfor-mación:
transPlainText.transform(domSource,
streamResult);
La cadena de caracteres correspondiente al
documento XML se obtiene después de la llama-
da anterior haciendo “sw.toString()”.
Hay algunos parámetros de configuración del
objeto “Transformer” que pueden modificarse si
se requiere. Por ejemplo:
transPlainText.setOutputProperty(OutputKey
s.ENCODING, “iso-8859-1”);
En la documentación de la clase “OutputKeys” se
pueden ver todos ellos.
Obsérvese que con el método anterior la trans-
formación del documento XML en una cadena de
caracteres se hace empleando el transformador
por defecto que proporciona la clase
“Transformer”. En algunos casos este transforma-
dor no es suficiente, o simplemente puede ser
más interesante transformar los documentos
XML de forma personalizada. En esos casos el
transformador puede construirse a partir de una
hoja XSL:
BufferedReader br = new BufferedReader
(new FileReader(new File
(“C:/transformer.xsl”)));
StreamSource streamSrc =
new StreamSource(br);
Preguntas y respuestasPreguntas y respuestasADOLFO ALADRO GARCÍA
64-66 Dudas.qxd 20/12/06 15:22 Página 62
El fichero “transformer.xsl” es el responsa-
ble de hacer la transformación y se utiliza
para obtener una nueva instancia de la
clase “Transformer” mediante la clase
“StreamSource”. El transformador se obtie-
ne ahora:
transPlainText =
transFactory.newTransformer(streamSrc);
El resto del proceso es similar. El código del
listado 1 ilustra un ejemplo de una hoja XSL
que transforma un documento XML en una
copia de sí mismo teniendo en cuenta las
secciones CDATA.
Controlando el método de salida, esa copia
de sí mismo podría venir dada en forma de
cadena de caracteres.
Está a punto de salir Internet Explo-rer 7. He probado algunas versionespreliminares y he comprobado que seproducen varios errores en mis páginasWeb. ¿Cuál es la mejor forma de detec-tar con un script que el navegador esIE7? ¿Y si esa detección quiero hacerlaen el servidor?
Según han ido apareciendo versión beta y
release candidate de Internet Explorer 7
(IE7), han ido apareciendo distintos méto-
dos para detectar el navegador con scripts
de JavaScript.
Una de las formas de hacerlo es compro-
bando si el navegador soporta el objeto
“XMLHttpRequest” (el objeto por excelencia
de la tecnología AJAX) de forma nativa. Las
versiones anteriores de IE7 no lo soportan
(es necesario crear un objeto ActiveX)
mientras que IE7 sí, con lo que se puede
hacer:
if (window.XMLHttpRequest) {
// IE 7
} else {
// IE6
}
El script anterior también sirve para dife-
renciar Mozilla, Firefox y Opera 9 de IE6, ya
que los primeros soportan también de
forma nativa el objeto “XMLHttpRequest”.
Otro método consiste en emplear código
condicional:
<script type=”text/javascript”
>var bIsIE7 = false;</script>
<!–[if IE 7]>
<script type=”text/javascript”>bIsIE7
= true;</script>
<![endif]–>
Este código sólo es interpretado por
Internet Explorer y con la condición
empleada en el ejemplo anterior, sólo se
establecería la variable “bIsIE7” a “true” en
el caso de tratarse de IE7.
También se puede comprobar la propiedad
“maxHeight” del objeto “style”. Los navegado-
res modernos, IE7 entre ellos, sí la soportan:
if (typeof document.body.style.maxHeight
!= “undefined”) {
// IE 7
} else {
// IE6
}
Por último, también se puede explorar la
cabecera http llamada User-Agent. En el
servidor es la única opción. Los navega-
dores mandan esta cabecera, entre otras
muchas, en cada llamada que realizan al
servidor.
Ahora bien, la detección no es tan senci-
lla como parece. Hay tantos valores de la
cabecera User-Agent como distintos
navegadores, sistemas operativos y ver-
siones de los mismos. En el site de
Microsoft existen dos buenos artículos al
respecto que podrán ayudarte a mejorar
tus desarrollos:� Detecting Internet Explorer More Effectively:
msdn.microsoft.com/workshop/author/dhtml/overview/browserdetection.asp
� Understanding User-Agent Strings:msdn.microsoft.com/workshop/author/dhtml/overview/aboutuseragent.asp
SOLO PROGRAMADORES nº 14563
DUDASPreguntas y Respuestas
http://digital.revistasprofesionales.com
LISTADO 1 Hoja XSL para la transformación de XML
<?xml version=”1.0” encoding=”iso-8859-1”?><xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
<xsl:template match=”node() | @*”><xsl:copy>
<xsl:apply-templates select=”@* | node()”/></xsl:copy>
</xsl:template><xsl:template match=”node()[name()=’#cdata-section’]”>
<xsl:call-template name=”cdata-start”/><xsl:value-of select=”.” disable-output-escaping=”yes”/><xsl:call-template name=”cdata-end”/>
</xsl:template><xsl:template name=”cdata-start”>
<xsl:text disable-output-escaping=”yes”><![CDATA[<]]></xsl:text><xsl:text disable-output-escaping=”yes”><![CDATA[![CDATA[]]></xsl:text>
</xsl:template><xsl:template name=”cdata-end”>
<xsl:text disable-output-escaping=”yes”><![CDATA[]]]]></xsl:text><xsl:text disable-output-escaping=”yes”><![CDATA[>]]></xsl:text>
</xsl:template></xsl:stylesheet>
Hoja XSL que transforma un documentoXML en una copia de sí mismo.
Site de Microsoft dedicado a InternetExplorer 7.
64-66 Dudas.qxd 20/12/06 15:22 Página 63
SOLO PROGRAMADORES nº 145 64
VIDEO-TUTORIAL
http://digital.revistasprofesionales.com
Una de bolos
En esta edición, tocamos nuevamente laprogramación gráfica con Java, esta vez para recrear una bolera virtual. En este
vídeo-tutorial, de aproximadamente 45minutos de duración, aprenderemos las téc-nicas más clásicas en este tipo de programa-ción, como puedan ser el doble buffer o ladetección de colisiones, así como el mante-ner dos vistas sincronizadas, una con la“proyección 2D” otra con la “proyección 3D”.Sin duda, un lujo que puede considerarse unauténtico regalo de reyes.
¿Cómo obtener el vídeo-tutorial?
El material que conforma este vídeo-tuto-rial consiste en un archivo de vídeo y elcódigo fuente del proyecto. Tanto los lecto-res de la edición en papel como los lectoresde la edición digital podrán descargar elvídeo de la página web de SóloProgramadores, haciendo clic en el enlace“Fuentes” correspondiente que aparece enla página principal del número 145 (no esnecesario entrar en la Zona Privada paradescargar el material). El formato del vídeoes WMV y el tamaño de la descarga es de46 MB aproximadamente.
Si te gusta jugar a los bolos, y tegusta la programación en Java,estás de enhorabuena. Con elvídeo-tutorial de este mesaprenderemos a programar unabolera con la tecnología Java y elentorno de desarrollo Eclipse.
Bolera virtualBolera virtual
¿Tienes sugerencias para el próximovídeo-tutorial?
Nos interesa saber cómo podemos mejorarlos vídeos y sus contenidos, de modo que sitenéis cualquier sugerencia para futurosvídeos, no dudéis en transmitirla aJorge Rubira, el autor: encuestavideos@gmail.com.
JORGE RUBIRA
65 Video.qxd 20/12/06 15:23 Página 64
¿AÚN NO LOS TIENES?
Si no lo encuentras o está agotado, solicítalo en el teléfono 91 304 87 64 - Fax 91 327 13 03E-mail:rpsuscripciones@revistasprofesionales.com - www.revistasprofesionales.com
Revistas Profesionales S.L. - C/ Valentín Beato, 42 - 3ª. 28037 Madrid
PÍDELOS YA…
27 Anuncio CD-UTIL 20/12/06 15:26 Página 65
SOLO PROGRAMADORES nº 145 66
CD-ROM
http://digital.revistasprofesionales.com
Fuentes
Mobile Web Controls de ASP.NET Gracias a los Mobile Web Controls de
ASP.NET podemos crear páginas web
accesibles desde multitud de dispositi-
vos móviles, sin que tenga que impor-
tarnos la naturaleza y diversidad de
los mismos. Como material comple-
mentario a este artículo, los autores
han preparado una serie de ejemplos
que ilustrarán con extrema claridad
todo lo expuesto en las páginas del
artículo.
Mecanismos de cache en ASP.NET2.0 (I) El framework .NET ofrece avanzados
mecanismos para la gestión de memo-
rias cache. En los ejemplos que acom-
pañan a este artículo, el lector descu-
brirá cómo sacar el máximo partido a
estas funcionalidades ofrecidas por la
propia plataforma de desarrollo.
JavaScript Orientado a Objetos (I)El código que acompaña a esta prime-
ra entrega es muy sencillo.
Simplemente consta del código nece-
sario para declarar un objeto "Cookie"
mediante la palabra reservada "func-
tion". En las próximas entregas pro-
fundizaremos en los conceptos relati-
vos a la programación profesional con
JavaScript.
Extensiones AJAX para ASP.NET (II) El lector encontrará, en este punto,
una espectacular batería de ejemplos
relativos al uso de AJAX desde Visual
Studio y mediante la tecnología
ASP.NET. En la próxima y última entre-
ga analizaremos aún con más profun-
didad este nuevo paradigma de pro-
gramación web; sin embargo, el mate-
rial ofrecido aquí es más que suficien-
te hasta el mes que viene.
Programación
Tecnologías JavaAprovechando el proceso de "libera-
ción" experimentado por la plataforma
Java (en el número anterior de Sólo
Programadores ya se matizaron las
implicaciones de esta "liberación"),
hemos querido ofrecer aquí todos los
recursos necesarios para desarrollar
aplicaciones y servicios con esta tec-
nología. Por un lado, hemos incluido el
SDK de la plataforma, que incluye
todas las herramientas necesarias por
línea de comando. Por otro lado,
hemos incluido el código del SDK. Y,
por último, las principales ediciones
del entorno de desarrollo netBeans. A
continuación exponemos una relación
de los paquetes incluidos:
� jj dd kk -- 66 -- ww ii nn dd oo ww ss -- ii 55 88 66 .. ee xx ee ::
Versión 6 del JDK de Java para pla-
taformas de 32 bits.
� jj dd kk -- 66 -- ww ii nn dd oo ww ss -- aa mm dd 66 44 .. ee xx ee ::
Versión 6 del JDK de Java para pla-
taformas de 64 bits.
� jj dd kk -- 66 -- rr cc -- ss rr cc -- bb 11 00 44 -- jj rr ll --
00 11 __ nn oo vv __ 22 00 00 66 .. jj aa rr ::
Códigofuente del JDK de Java, ver-
sión 6.
� nn ee tt bb ee aa nn ss -- 55 __ 55 -- ww ii nn dd oo ww ss .. ee xx ee ::
Plataforma de desarrollo netBeans
en su versión 5.5.
� nn ee tt bb ee aa nn ss -- ee nn tt __ pp aa cc kk -- 55 __ 55 --
ww ii nn dd oo ww ss .. ee xx ee :: Extensión de
netBeans para la programación
de aplicaciones empresariales
SOA.
� nn ee tt bb ee aa nn ss -- mm oo bb ii ll ii tt yy -- 55 __ 55 --
ww ii nn .. ee xx ee :: Extensión de netBeans
para la programación de aplicacio-
nes para dispositivos móviles.
� nn ee tt bb ee aa nn ss -- vv ii ss uu aa ll ww ee bb -- 55 __ 55 --
ww ii nn dd oo ww ss .. ee xx ee :: Extensión de
netBeans para la programación de
aplicaciones web.
Contenido del CD-ROMContenido del CD-ROM
62 cd.qxd 20/12/06 15:25 Página 66