68
Precio: 6 (España) (IVA incluido) AÑO XIII. 2.ª ÉPOCA Nº 145 UNA PUBLICACIÓN DE: REVISTAS PROFESIONALES S.L. GRATIS CD INCLUIDO LA PRIMERA REVISTA DE PROGRAMACIÓN EN CASTELLANO Noticias, javaHispano, Comunidad .NET, Libros, CD-ROM, Preguntas y Respuestas OPINIÓN Vista y no Vista MIDDLEWARE Primera aproximación a Windows Vista REDES Mecanismos de cache en ASP.NET 2.0 Programación JavaScript Orientada a Objetos Técnicas avanzadas de programación AJAX con ASP.NET DISEÑO Sistemas SCM para la Gestión de la Configuración del Software VÍDEO-TUTORIAL Desarrollo de una bolera virtual con Java y Eclipse CANAL PANDA Los mitos en la seguridad Mobile Web Controls Mobile Web Controls Crear un portal web para dispositivos móviles implica tener en cuenta la heterogeneidad de los mismos y sus variables: tamaño de la pantalla y de teclado, navegador web, lenguaje soportado… Los Mobile Web Controls de ASP.NET permiten crear páginas web visibles en todo tipo de dispositivos móviles, siendo transparente para el desarrolla- dor las peculiaridades de los mismos, y evitando de esta manera hacer una página para cada dispositivo.

Solo Programadores Nº 145

Embed Size (px)

DESCRIPTION

•Vista y no Vista •Mobile Web Controls de ASP.NET •Primera aproximación a Windows Vista •Mecanismos de cache en ASP.NET 2.0 (I) •JavaScript Orientado a Objetos (I) •Extensiones AJAX para ASP.NET (II) •Sistemas SCM para la Gestión de la Configuración del Software (I) •Bolera virtual

Citation preview

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

INTERIOR PORTADA.qxd 20/12/06 11:30 Página 66

Número 145

EEddiittaa:: RREEVVIISSTTAASS PPRROOFFEESSIIOONNAALLEESS SS..LL..

[email protected]

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 ([email protected]) 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 ([email protected]) 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&#243;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 [email protected]

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 [email protected]

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”,

[email protected]”]})’);

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”,

[email protected]”],

“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”>

[email protected]</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”:

[email protected]”}

]

}

¿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 - [email protected]

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>

&nbsp;<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 [email protected],

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

61 atii.qxd 20/12/06 15:20 Página 66

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: [email protected].

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:[email protected] - 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

Interior contra.qxd 20/6/06 08:29 Página 1

CONTRA.qxd 19/10/06 09:55 Página 1