Visual Basic.NET • C# • Delphi • ASP.NET • ADO

Transcripción

Visual Basic.NET • C# • Delphi • ASP.NET • ADO
Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System
dotNetManía
www.dotnetmania.com
Dedicada a los profesionales de la plataforma .NET
nº5 junio 2004 • Precio: 6,00 € (España)
SQL Server Reporting Services
WebForm Templates •
Distribuir aplicaciones con
.Net Remoting • Cambios
sufridos por Object Pascal
en Delphi 8 .NET •
Configuración de varios
sitios Web en IIS 6.0 con una
misma dirección IP •
Particiones de Directorio
de Aplicaciones
Universidad
Final de la Imagine Cup en España.
Open Source
lphant, primer peer to peer bajo .NET
Comunidades
La XI convocatoria del Master Eidos
en Tecnologías Avanzadas para
el Desarrollo de Software
Un veterano a la última
dnm.editorial
Internet: medio y ámbito
<<
Está bien, habrá que explicarlo... He recibido muchas
opiniones que me han hecho pensar que la mayoría de
los visitantes al sitio en Internet de esta revista piensan, equivocadamente, que dotnetmania.com es la misma cosa que dotNetManía.
Cuando compramos, por ejemplo, un ejemplar de
una revista impresa a través de Internet, lo pagamos
con nuestra tarjeta de crédito, y más adelante llega el
cartero a nuestra casa con el sobre correspondiente,
habremos usado Internet como un medio más para
hacer una transacción. En este proceso se han empleado materiales tangibles como el papel y el sello, y han
intervenido personas como el cartero, o la persona que
preparó y envió la revista que pedimos.
Sin embargo, si entramos en Internet y compramos un ejemplar de una revista electrónica, lo pagamos con nuestra tarjeta de crédito y lo recibimos en
nuestra cuenta de correo electrónico y lo leemos obteniendo permisos desde un servidor DRM, también
en Internet, estoy usando a éste como un ámbito,
donde todo empieza y termina, no he necesitado de
materiales tangibles, ni medios convencionales en
ningún momento; de hecho en todo el proceso no
habrá intervenido posiblemente ningún ser humano
de forma directa.
Internet, puramente como ámbito nos trae grandes cosas, y es una gran revolución, no me cabe duda,
pero también pone en peligro a las revistas impresas
como ésta, y también a los libros tradicionales, e
incluso al software, la música, el cine, etc. Pero no
es éste el momento ni el lugar donde opinar sobre
estos asuntos.
Editor
Paco Marín
([email protected])
Administración
Pilar Pérez
([email protected])
Asesor Técnico/Coordinación
Marino Posadas
([email protected])
A cambio, Internet como medio le ofrece a esta
revista posibilidades que antes no tenían los medios
tradicionales. Tenemos la posibilidad de publicar tanto material de apoyo a cada artículo como queramos,
incluyendo bibliografía, el sonido original de una entrevista, vídeos, noticias, enlaces a otros artículos similares o páginas relacionadas y, por supuesto, el código
de ejemplo, proyectos, utilidades, etc. Un complemento
al papel impensable hasta la aparición de Internet.
Incluso el CD que acompañaba a las revistas puede
quedar en desuso, puesto que desde Internet puede
bajar todo lo que un CD contiene pero con la increíble ventaja de interactuar con artículos de otros números, actualizarse con el tiempo y corregir y ampliar
todo el material de apoyo tantas veces como se desee.
Ésta y no otra es la misión principal del sitio en
Internet de dotNetManía. Por supuesto, también sirve para mostrar cómo es la revista, y más teniendo en
cuenta que no distribuimos en quioscos, recoger pedidos e informar de cómo son las personas que escriben
aquí, etc. En breve, Internet ha de servir también para
enviar avisos a los lectores y que también puedan opinar y dejar su opinión sobre los artículos e incluso para
estar puntualmente informado, pues en las noticias el
papel de una revista mensual tiene la clara desventaja
del tiempo que transcurre entre que la noticia ocurre
y cuando realmente llega al lector.
En ningún caso dotnetmania.com es un portal o
una comunidad virtual, porque dotNetManía es una
revista impresa que usa Internet como medio para
complementarse y difundirse.
Francisco Charte, Fernando Guerrero,
Fernando Nogueras, Guillermo ‘guille’ Som, Iván González, Jesús López,
Jordi Rambla, Jorge Serrano, José
Manuel Alarcón, José Miguel Torres,
Juan Torres, Liborio López, Luis
Miguel Blanco, Marino Posadas,
Miguel Egea, Miguel Katrib, Pablo
Abbate, Pedro Gómez, Pedro Pozo,
Pepe Hevia, Salvador Ramos
Publicidad
Juan Manuel Urraca
([email protected])
Diseño y Maquetación
Éride Diseño Gráfico
Tel.: (34) 91 477 48 85
[email protected] • www.eride.net
Redactores y Colaboradores
Alejandro Mezcua, Angel Esteban,
Antonio Quirós, Antonio Rojo, Daniel
Mazzini, David Carmona, Eladio Rincón,
Edita
Netalia
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)
Tf. (34) 91 6667477
Fax (34) 91 4991364
Imprime
Gráficas Vallehermoso
www.graficasvallehermoso.com
Depósito Legal
M-3.075-2004
Suscripciones
[email protected]
Redaccion
[email protected]
Nuevos colaboradores
[email protected]
<<dotNetManía
<<
dnm.editorial
3
5
dnm.sumario
Final de la Imagine Cup en España
8-12
El proyecto VAMOS, de la universidad politécnica de Valencia, ganador del
campeonato universitario Imagine Cup España de Microsoft y por tanto, serán
nuestros representantes en la final internacional de Brasil.
WebForm Templates
13-15
Antes de que la Web llegara a nuestras vidas, nuestras aplicaciones tenían la
apariencia de una o varias ventanas en Windows, o para nosotros los más viejos,
una interfaz no gráfica. Sin embargo, era muy común ya desde esas épocas
reutilizar la funcionalidad de presentación de la información.
SQL Server Reporting Services
16-26
Al fin ante nosotros tenemos un servidor de informes totalmente desarrollado por
Microsoft, el SQL Server Reporting Services. Se trata de un servidor de informes
basado en Web Services y cuya característica más importante reside en su
'modularidad', que por un lado establece, asegura y actualiza el origen de datos al cual
está conectado, y por otro suministra el informe en una fase paralela e independiente.
Crear informes con SQL Server Reporting Services
27-33
dnm.sumario
Los Reporting Services vienen a completar la amplia oferta relacionada con SQLServer, a completar al motor relacional, que tiene amplias funcionalidades como la
replicación, servicios de alta disponibilidad, mecanismos de trasvase de registros,
servicios de transformación de datos, tareas programables, un avanzado
mecanismo de copias de seguridad.
Distribuir aplicaciones con .Net Remoting
34-39
Existe en .Net cuatro maneras de distribuir aplicaciones, a saber: Los servicios web,
.Net Remoting, Mensajería (MSMQ) y Componentes empresariales (COM+). Los
tres primeros métodos de distribución son controlados por el la plataforma .Net, por
lo que sólo explicarán estas tres primeras.
Cambios sufridos por Object Pascal en Delphi 8 .NET
40-43
Con el objetivo de poder generar código ajustado a la especificación común de
lenguaje (CLS) de la plataforma .NET, Borland ha tenido que introducir ciertos
cambios en el compilador de Object Pascal que incorpora la versión 8 de Delphi.
Configuración de varios sitios Web en IIS 6.0 con una misma dirección IP
44-45
En este artículo se va a comentar cómo configurar el servidor Web que nos ofrece
Windows Server 2003 para disponer de múltiples sitios Web con una misma
dirección IP. Esto nos va a suponer un ahorro considerable de direcciones IP. El
mecanismo que nos va a permitir reutilizar de esta manera las direcciones IP se
denomina encabezado de host, y es el concepto que explicamos en este artículo.
Particiones de Directorio de Aplicaciones
46-48
Active Directory en Windows 2003 permite la creación y configuración de una
nueva partición de directorio llamada Partición de Directorio de Aplicaciones.
Esta partición se replica sólo en los controladores de dominio determinados y
siempre que ejecuten Windows 2003.
dnm.opensource.net
50
lphant, primer peer to peer bajo .NET
dnm.comunidad.net
51-53
La XI convocatoria del Master Eidos en Tecnologías Avanzadas para el Desarrollo
de Software. Un veterano a la última
dnm.biblioteca.net
54
Moving to VB .NET: Strategies, Concepts, and Code
Code: The Hidden Language of Computer Hardware and Software
dnm.directo.entrevistas
55-56
Entrevista a Carlos Heras
dnm.desvan
58
dnm.noticias
6
noticias.noticias.noticias.noticias.noticias.noticias
<<dotNetManía
<<
dnm.noticias
Tech-Ed Europe 2004 en marcha
El evento europeo definitivo de Microsoft sobre
creación, implantación, protección y gestión
de soluciones conectadas
Ya está aquí la mayor
conferencia del año
para desarrolladores,
arquitectos de software y sistemas y
profesionales de las
TI europeos. Será
desde el 29 de junio
al 2 de julio y vuelve
a Ámsterdam, en Holanda, después de tres años de
celebrarse en Barcelona.
En este año habrá contenido adicional sobre movilidad ya que se aprovecha para celebrar conjuntamente
la Conferencia Microsoft Mobile Devcon (MDC).
Habrá seminarios pre-conferencia en los que te actualizarán rápidamente durante un día completo en las tecnologías más relevantes de desarrollo e infraestructura
antes de las conferencias en sí; más de 400 sesiones técnicas que te podrás organizar en tu agenda para completar un ciclo formativo intenso de cuatro días; podrás
profundizar en cada tema participando en las charlas presentadas por una lista de expertos de Microsoft y del sector y de los que el resto del año sólo oirás hablar.
Algunos de los ponentes serán:
Fernando Guerrero (único ponente
español del que podéis leer un artículo sobre Yukon en el número 1 de
dotNetManía), Don Box, David
Chappell, John Craddock, Jim Gray,
Rafal Lukawiecki, Steve Riley, Mark
Russinovich, Clemens Vasters, etc.
Marino Posadas, asesor técnico y
coordinador de dotNetManía, estará
allí y nos traerá jugosas entrevistas y un
completo reportaje del evento. Dadas
las fechas del evento, posiblemente
retrasemos la salida del siguiente número para publicar un avance del evento. Espero que
merezca la pena esperar al siguiente ejemplar unos
días más.
Si te interesa asistir puedes encontrar más
información en
microsoft.com/spanish/msdn/Spain/eventos/teched.asp
y en
microsoft.com/europe/teched/
Danysoft presenta el nuevo InstallShield X
La solución le ofrece todo lo que necesita para crear instalaciones
de Windows a Linux y de servidores a dispositivos móviles
InstallShield X combina el poder y flexibilidad de
InstallShield DevStudio con el soporte multiplataforma de InstallShield MultiPlatform, en una única
solución para todas las plataformas, sistemas operativos y dispositivos.
Sus características avanzadas le permitirán configurar servidores de bases de datos, instalar servicios
web, y crear instalaciones para dispositivos móviles.
InstallShield X está disponible en dos ediciones:
Professional y Premier, para que adquiera únicamente
las características que necesite, al precio más conveniente.
InstallShield X le ofrece la flexibilidad y potencia
para desarrollar todos los instaladores Windows (MSI),
InstallScript™, de plataforma cruzada (por ejemplo
Solaris, RedHat Linux, Mac OS X y OS/400), y para
dispositivos móviles desde una misma herramienta.
Sus herramientas automatizadas y asistentes facilitan la creación de todo tipo de instalaciones, por muy
complejas que éstas sean. Además sus funciones de
eliminación de conflictos aseguran que las instalaciones sean a prueba de fallos, para que usted ofrezca la
mejor imagen a su cliente desde el primer momento.
Permite suministrar actualizaciones de sus productos rápidamente notificando al usuario final la existencia de actualizaciones de producto. Esto permite
reducir significativamente el tiempo, coste y soporte
al mantener a sus clientes con las últimas versiones de
su producto.
En España puede obtener soporte técnico, servicios de formación y consultoría a través de los servicios profesionales Danysoft, empresa que lo representa en exclusiva. (Danysoft.com/installshield.htm)
WinHec 2004
A principios del mes de mayo se celebró en
Washington la versión Americana del Microsoft
WinHEC 2004 (Windows Hardware Engineering
Conference), donde cada año se explora el futuro para la plataforma Windows con la industria
del PC.
WinHEC es el evento donde ingenieros de
hardware, desarrolladores de drivers, y fabricantes se dan cita para obtener la información
técnica y estratégica para el desarrollo de sus productos y servicios alrededor de Windows.
Esta edición se ha centrado en los avances de
la tecnología para Windows XP, Windows 2003
Server y, cómo no, en el futuro de Longhorn a pesar
de faltarle al menos dos años para su estreno.
Microsoft distribuyó la primera versión alpha oficial de Longhorn, aunque en realidad ya
hubo una “pre-alpha” para los asistentes al PDC
del año pasado. No debemos esperar una versión
beta hasta el año que viene. También se distribuyó entre los asistentes algunas nuevas herramientas de desarrollo para Windows como el
Windows Longhorn Driver Kit, Windows Driver
Foundation, y el Driver Install Frameworks.
Más información en
http://www.microsoft.com/whdc/winhec/default.mspx
Canon v 1.0: Metodología convergente
de desarrollo software
Desde el segundo semestre de 2003 un Grupo de Metodologías, formado por
diferentes profesionales del Área de Soluciones de Negocio y Desarrollo de
Software han estado trabajando en el diseño una metodología propietaria para
gestionar los proyectos de desarrollo de software que se llevan a cabo en
Alhambra-Eidos. Producto del trabajo de dicho grupo es Canon en su versión 1.0.
Canon es la metodología interna para desarrollo de software creada por
Alhambra-Eidos con la finalidad de mejorar el nivel de madurez con el que
se abordan sus distintos proyectos y, por tanto, asegurar la calidad en el
resultado de los mismos.
Borland y SOFTENG sellan su alianza
como partners estratégicos para
potenciar el uso de sus productos
El acuerdo establece un marco de cooperación para incrementar
la productividad de los proyectos en ambas compañías
Borland y SOFTENG han anunciado su compromiso de trabajar de forma
conjunta para potenciar el uso de sus productos, a través de la organización
de eventos y seminarios de formación, realización de consultoría así como
de la introducción de mejoras en las prestaciones de los proyectos que desarrolla Softeng.
El “know how” en productos Borland, especialmente Delphi, ha llevado a SOFTENG a convertirse en una de las empresas más importantes dentro de su red de partners en España y el único en la actualidad que opera
en el área de Cataluña.
La mujer empresaria y el eLearning
La plataforma de formación virtual Almagesto, escogida por la
ASEM como medio formativo para sus afiliadas.
Bill Gates en la Keynote Seamless Computing: Hardware
Advances for a New Generation of Software
en el WinHEC 2004
La Asociación Empresa Mujer -ASEM-, ha puesto en marcha una iniciativa de apoyo al empleo femenino de alto nivel, en colaboración con la
Consejería de Trabajo del Principado de Asturias.
Como parte de esta iniciativa se presentó el pasado febrero la Primera
Feria Virtual ASEM con un doble objetivo, impulsar el área comercial, y
brindar una oportunidad de formación múltidisciplinar a través de Internet.
Para ello se ha contado con los servicios de Almagesto 4.0, la plataforma de
eLearning eLMS de Alhambra-Eidos.
CD Kit de recursos ASP.NET versión 2
En este número distribuimos conjuntamente con
la revista el CD Kit de recursos ASP.NET versión 2. Este Kit incluye una amplia colección de
documentación, ejemplos, guías de arquitectura
y catálogos de libros de las editoriales MSPress,
Anaya y A!Press.
También incluye muchos artículos técnicos
en español del sitio web MSDN Online así como
un extenso archivo de referencias técnicas, videos y presentaciones narradas, descargas del
.NET Framework y del Toolkit de Desarrollo
Móvil y un listado de enlaces a sitios de internet relacionados con ASP.NET y el desarrollo
en general.
Además se han añadido la herramienta de
desarrollo ASP.NET Web Matrix, y los
ASP.NET Starter Kits, cinco sitios web preconstruidos y fácilmente modificables, que le permitirán comenzar a trabajar de inmediato con la
tecnología ASP.NET.
Como novedades en esta versión 2 se han
incluido dentro del apartado "Descargas" una
serie de controles gratuitos ofrecidos por terceras compañías líderes en el sector (como
ComponentOne o Infragistics), así como versiones en español de los Starter Kits para Visual
Studio .NET dentro de su apartado específico,
y la nueva versión del Tour Guiado de
WebMatrix.
Esperamos que le sea útil.
dnm.noticias
empresas.empresas.empresas.empresas
<< dnm.noticias
Final de la Imagine Cup en España
El proyecto VAMOS, de la universidad politécnica de Valencia,
ganador del campeonato universitario
Imagine Cup España de Microsoft
<<dotNetManía
<< Imagine Cupes la competición in-
8
formática para estudiantes universitarios que organiza Microsoft a nivel
internacional, en la que deben presentarse proyectos en los que se utilicen dispositivos móviles, servicios web y componentes inteligentes que aprendan a lo
largo del tiempo.
La final a nivel mundial ya está en
su segunda edición y consistirá en un
evento de varios días de duración en la
primera semana de julio, en Sao Paulo,
Brasil. Todos los finalistas internaciones de cada país o región competirán
por las tres primeras plazas. Los primeros premios son de 25.000, 15.000
y 10.000 dólares para el primero,
segundo y tercero respectivamente. En
total se repartirán más de 85.000 dólares en premios en metálico para los
ganadores.
Cinco han sido los proyectos seleccionados para la final de la primera edición en España de Imagine Cup. Para su
selección se ha tenido en cuenta tanto su
innovación y creatividad como su utilidad y posibilidades de implementación.
Procedían de cinco universidades
de distintas regiones de la geografía
española: la Universidad Politécnica de
Catalunya, la Universidad de Deusto
del País Vasco, la Universidad Pontificia
de Comillas de Madrid, la Universidad
de Málaga y la Universidad Politécnica
de Valencia.
El ganador que nos representará el
próximo mes de julio en Sao Paolo ha
sido el proyecto VAMOS de la Universidad de Valencia. La propuesta ha
sido seleccionada por su innovación,
Occasional Sightseeing),
un proyecto que nos
acerca al museo del futuro, un espacio dinámico,
interactivo y cercano al
visitante.
Un museo que, para
los autores de VAMOS,
deberá cumplir nuevas
funciones como la conservación intelectual
(entendida como el estudio, interpretación, cataEl equipo ganador recogiendo sus diplomas junto a Rosa García,
logación y valoración de
consejera delegada de Microsoft Ibérica; Beatriz Ordoñez,
las obras de arte como
responsable de Imagine Cup España y el Ilustrísimo Sr. D. Ángel
Berna Quintana, director general de la Fundación Pablo VI – UPSA. objetos de carácter estético que constituyen las
huellas culturales de la
utilidad y originalidad, así como por
Humanidad) y la dinamización cultural,
las posibilidades de aplicación a la vida
dejando atrás su silencioso aposento para
real.
dialogar con el arte y con la sociedad,
interrogando constantemente, relacionándose y modificando el entorno.
1er Premio
Una revolucionaria visión que tiene
VAMOS: el museo del futuro
un gran aliado en las nuevas tecnologías. Así, los autores de VAMOS señalan
Museos interactivos, dinámicos, cercaque la arquitectura tecnológica adecuanos al visitante. Ese es el objetivo de
da a este nuevo modelo de museo debe
VAMOS, un proyecto que, gracias a la
cumplir al menos con las siguientes
tecnología de los Pocket PCs y las redes
características:
inalámbricas, nos acerca lo que serán los
• Ser compatible con la riqueza sensomuseos del futuro.
rial de las visitas físicas.
• Enriquecer las visitas con información
Acabar con la
de carácter virtual para facilitar la
noción de los museos
comprensión de las obras de arte
como meros “conteexpuestas.
nedores visuales” de
• No ser un mecanismo estático de proobras de arte es el
ducción de información sino tener un
punto de partida de
carácter dinámico que permita variar
VAMOS (Virtual
los contenidos.
Assistant for Museum
<< dnm.universidad
Universidad:
Facultad de Informática. Universidad Politécnica
de Valencia.
Autores:
Vicente Bosch, Kristian Eide, José Miguel Esteve y José Antonio Mocholí.
Tecnología:
.Net FrameWork
SQL Server
Aplicación:
Asistente móvil para la visita a museos, interactiva y personalizada.
• Ofrecer bajo un único punto de entrada diferentes servicios.
• Proveer información al visitante en
cualquier momento durante la realización de una visita.
• Personalizar los contenidos que se
muestran al visitante en función
de sus gustos, de forma transparente y automática.
• Facilitar que los visitantes puedan
disfrutar del mayor número posible de obras en caso de disponer de
poco tiempo para realizar la visita.
La respuesta a tan elevadas exigencias parece tener un nombre: VAMOS,
un sistema que, basándose en una infraestructura de redes inalámbricas y dispositivos móviles, convierte el museo en
un espacio interactivo y a la medida del
visitante.
Su “secreto”: la movilidad. VAMOS
es un sistema completamente móvil,
capaz de acompañar al visitante en todo
momento durante su recorrido por el
museo. Para buscar un ejemplo actual,
podría asimilarse a las tradicionales
audioguías que desde ya hace tiempo
encontramos en cualquier instalación
de estas características pero con una
importante diferencia: el sistema
VAMOS ofrecerá al visitante información multimedia, dinámica, conectividad a Internet y capacidad de navegación aumentando de esta forma la interactividad entre usuario y museo.
Comienza la visita
Por fin nos hallamos en el interior
del museo y, lamentablemente, con
menos tiempo del que nos gustaría y
sería necesario para poder visitarlo de
forma provechosa. Sin embargo, contamos con VAMOS, el sistema que, tras
alquilar un dispositivo de mano en el
propio museo, nos guiará en todo
momento en nuestra visita. Tras indicar
al sistema el tiempo del que disponemos, así como nuestras preferencias, éste
nos ofrece la ruta perfecta a nuestros
requerimientos. En tan sólo un par de
clicks nos encontramos visitando las salas
y exposiciones que más nos interesaban
y además, con toda la información que
necesitamos para disfrutar de las obras
de arte que en nuestro recorrido vamos
encontrando. De repente, nos sorprende una de esas obras. Nos detenemos
frente a ella para examinarla más pausadamente. En nuestro Pocket PC,
VAMOS nos ofrece todos los datos
sobre la misma: su autor, trabajos previos, inspiración, estilo, etc. Nuestro alto
en el camino ha merecido la pena pero,
claro, también ha retrasado el plan de
visita. No hay problema: sin que nos
percatemos siquiera, VAMOS ha rehecho nuestra visita al museo, adecuándola ahora al tiempo que nos queda.
2º Premio
Never2Late. Despertar
siempre a tiempo
Despertarse a tiempo siempre, sin miedo a posibles atascos, accidentes o lluvias
torrenciales. No hablamos de una película de ciencia-ficción sino de una realidad posible gracias al sistema Never2
Late, el despertador inteligente.
Ni un imprevisto más
Despertarse con
tiempo suficiente
pero además teniendo en cuenta aspectos tan decisivos
como el estado del
tráfico esa mañana,
y a esa hora en concreto, y la situación
meteorológica. El
objetivo: no llegar
tarde nunca más. Los beneficios: Hacer
más fácil la vida del usuario, aprovechando su tiempo al máximo, ya sea en el trabajo, en su domicilio o el camino entre
ambos.
Todo ello, de forma rápida y sencilla, tomando como punto de partida la
propia experiencia del usuario, sus horarios y tareas habituales, itinerarios, etc.
El funcionamiento de Never2Late
es sencillo: el primer paso para disfrutar de sus ventajas será el registro gratuito por parte del usuario en la web de
la aplicación. Una vez registrado, deberá introducir en el sistema la información de los pasos o tareas que debe realizar en cada ocasión para llegar a su destino, incluidos los posibles caminos que
puede utilizar para llegar a éste.
Una secuencia más o menos lógica
de lo que el usuario hace cada mañana
y que el sistema debe conocer, podría
ser:
1. Despertar y ducha
2. Desayuno
3. Entrada en el coche
4. Camino A
5. Camino B
6. Llegada a destino/trabajo
<<dotNetManía
Proyecto:
VAMOS (Virtual Assistant for Museum
Occasional Sightseeing).
Llegar a tiempo. La difícil y estresante
tarea a la que solemos enfrentarnos todos
cada mañana. El despertador que no suena, la ducha que esa mañana no quiere
darnos agua caliente y para colmo, cuando por fin conseguimos salir de casa, un
accidente y su consiguiente retención en
la carretera. Hagamos lo que hagamos,
de nuevo, llegaremos tarde.
Pues bien, esta habitual y cotidiana
situación tiene los días contados gracias
a Never2Late, un sistema móvil que a
modo de despertador le permitirá rentabilizar al máximo su tiempo.
9
<< dnm.universidad
para lograr su propósito, la experiencia
del usuario en su utilización es de lo más
sencilla y sólo necesita de un dispositivo móvil para disfrutar de ella.
3º Premio
Picassoft. El turista inteligente
Proyecto:
Never2Late.
<<dotNetManía
Universidad:
Escuela Técnica Superior de
Ingeniería
Universidad Pontificia de
Comillas.
Autores:
Mauricio Asuar García y Alejandro
Hernández de Madrid Díaz.
Tecnología:
.Net FrameWork
Web Services
Redes Neuronales
SQL Server 2000
Programación en C+,ASP.Net
Aplicación:
Despertador inteligente.
10
Una vez introducida esta información, el sistema Never2Late se sincroniza con el dispositivo móvil del usuario y pronostica, a partir de su propia
experiencia, el tiempo necesario para
que, al día siguiente, éste se despierte y
realice todas sus tareas habituales, llegando a tiempo a su destino.
Pronosticar de forma inteligente la
hora de despertar al usuario implica
valorar, además de la experiencia del
usuario, otros factores decisivos como
pueden ser la información del tráfico,
datos meteorológicos e incluso información del calendario (vacaciones,
puentes, días festivos, etc). Con toda esta
valiosa información, el sistema
Never2Late despertará al usuario a la
hora exacta y necesaria para que llegue
a su lugar de trabajo justo a tiempo.
Es decir, si por ejemplo, Never2Late
ve que existe un embotellamiento de tráfico esa mañana en el camino que el
usuario tiene que tomar para llegar a su
destino, hará que el despertador suene
antes para evitar que el usuario se retrase por ese motivo.
Pese a que Never2Late utiliza un
complejo entramado de redes neuronales, servicios web y técnicas heurísticas
Enormes mapas que no consigue nunca doblar adecuadamente; catedrales a
las que llega justo cuando están cerradas al público; monumentos que nunca
localiza; poco tiempo y demasiadas cosas
que ver. Esta escena tan habitual para el
turista podrá no repetirse más gracias a
Picassoft, un sistema que hace posible
un “turismo inteligente”.
Un simple Pocket
PC será a partir de
ahora su mejor guía
turístico. Gracias a
Picassoft, un programa diseñado por cuatro estudiantes de la Universidad de
Málaga, el turista podrá con su dispositivo móvil conocer en todo momento la
mejor ruta para visitar los rincones de una
ciudad, siempre adecuándose además a sus
gustos, tiempo disponible o preferencias.
Aprovechar el tiempo
El objetivo de Picassoft es claro:
permitir que cada turista saque el máximo provecho al tiempo del que disponga para visitar una ciudad y que, a la vez,
su experiencia sea lo más rica posible.
Para ello, Picassoft ofrece al usuario,
mediante un Pocket PC, un recorrido
inteligente por la ciudad y lo más importante, totalmente personalizado.
Tras ejecutar Picassoft en su dispositivo móvil y elegir el idioma
que prefiera, el usuario podrá conocer de forma rápida y sencilla su “perfecto” itinerario. Sus gustos, preferencias, tiempo del que dispone y momento en el que desea realizar la visita son
combinados por el sistema con la valoración que otros turistas han otorgado
anteriormente a monumentos y puntos
de interés para así obtener el recorrido
más satisfactorio. Una visita sin duda
para recordar siempre.
Pero además de ofrecer el mejor
recorrido por la ciudad, Picassoft hará
que el usuario disponga en la pantalla
de su Pocket PC de un mapa que en
todo momento le indique su situación
actual dentro de la ciudad y de la ruta
elegida, así como la ubicación de la próxima parada en la misma.
Sencillo, actualizado y personalizado, Picassoft permite además que el
usuario edite la ruta en cualquier
momento, eliminando y añadiendo
lugares de forma manual.
La más completa información
La ruta perfecta y a medida pero
además con toda la información necesaria para que disfrutar de ella al máximo sea una realidad. El sistema
Picassoft le acompaña en todo el recorrido ofreciéndole la información más
completa de cada uno de los lugares que
visita. Así, de forma automática y cada
vez que el usuario alcanza uno de sus
destinos, el sistema le ofrece en pantalla detallada información audiovisual de
carácter turístico
sobre el lugar dónde se encuentra:
año de construcción, estilos, historia,
aspectos más destacados, etc. Todo ello
junto a datos de gran utilidad como
horarios y días de visita, precios de
entradas y ofertas especiales para grupos, así como teléfonos de información.
Su opinión es importante
La absoluta actualización del sistema y, sobre todo, su permanente ampliación, hacen de Picassoft una importante
herramienta no sólo para el turista sino
también para los responsables turísticos
de cada una de esas ciudades.
Así, la aplicación establece que cuando el usuario ha visitado un lugar de la
ruta elegida, pueda emitir su valoración
sobre el mismo. Esta información pasa
a formar parte del sistema, que genera
así listas con los lugares mejor valorados por los usuarios y, de igual modo,
ofrece cada vez rutas más acordes a estas
valoraciones, priorizando los lugares,
rincones o monumentos de esa ciudad
que más votos positivos han conseguido por parte de las personas que las han
visitado.
Una valiosa información que no sólo
hará mucho más gratificante las próximas visitas de otros turistas, sino que
<< dnm.universidad
Universidad:
ETSI Informática. Universidad de Málaga.
Autores:
Curro Basagoiti, Iñaki Esteve,Antonio Molina
y Ana Reyna.
Tecnología:
Windows XP Professional, Office XP Professional, SQL Server 2000, .Net
FrameWork SDK 1.1,Web Matrix, GPS .Net...
Aplicación:
Servicio de rutas y recorridos turísticos en Pocket PC.
permitirá además a las autoridades responsables detectar posibles carencias en
las instalaciones o monumentos de su
ciudad y mejorar así la calidad de éstos.
Una aplicación de futuro que transformará el turismo actual, convirtiéndolo en una actividad enriquecedora,
mucho más gratificante, personalizada
y, sobre todo, inteligente.
Finalista
My Street Finder. Un mapa
en el bolsillo
Obtener un mapa de la ciudad, localizar puntos de interés e incluso saber
hacia dónde dirigir nuestros pasos para
llegar a ellos. Estos son sólo algunos
ejemplos de las numerosas aplicaciones
que tiene My Street Finder.
Transeúntes, turistas e incluso trabajadores en busca de la
ruta más corta hacia
su destino pueden,
con My Street Finder, obtener en cualquier momento y
lugar un mapa de la
ciudad en la que se
encuentran, al alcance de su mano. Un
mapa en el que localizar calles o puntos
de interés y, lo más importante, conocer de forma sencilla y rápida el camino para llegar a ellos.
Información a medida
Basado en una arquitectura clienteservidor, este proyecto permite al usua-
rio obtener en su Pocket PC mapas de
una ciudad o zona, completamente actualizados. Esto se consigue gracias a la tecnología utilizada por el autor y que consiste en que los mapas generados no se
almacenen en el servidor en formato fotografía sino que son datos en tablas que,
desde una base de datos, se convierten en
imágenes al ser enviados al usuario.
Esta característica permite que cada
usuario decida qué información del
mapa desea recibir: datos de edificios,
calles, carreteras, instalaciones eléctricas... el usuario decide el mapa que quiere recibir en su Pocket PC, a la medida
de sus necesidades.
Además, es necesario destacar la facilidad que ofrece este sistema a la hora
de actualizar la información de los
mapas ofrecidos.
A diferencia de otros sistemas, cuya
información está almacenada de forma
estática -por ejemplo en imágenes- que
no permiten una actualización rápida de
las mismas y en pocos años acaban resultando obsoletas, My Street Finder permite hacer cambios continuos en la
información sin que ello afecte a la aplicación.
La ciudad en movimiento
Saber dónde está la calle Leganitos
o, incluso, conocer dónde se encuentra
la estación de tren más cercana. El usuario puede conectarse al servidor y en
unos minutos recibir en su Pocket PC
el mapa de la zona de la ciudad en la
que se encuentra, aumentar o reducir
el tamaño del mismo y, de gran utilidad, “navegar” por la ciudad en su dispositivo.
Proyecto:
My Street
Finder.
Universidad:
Facultad de Ingeniería-ESIDE
Universidad de Deusto.
Autor:
David Sainz González.
Tecnología:
Plataforma .Net
Global Positioning System
Protocolo Estándar de los GPS
(NMEA 0183).
Cartografía y sistema de coordenadas UMT.
Aplicación:
Servicio de Mapas
<<dotNetManía
Proyecto:
Picassoft
Una ventaja que My Street Finder
proporciona permitiendo que el usuario reciba mapas de posiciones adyacentes a la que se encuentra en esos
momentos y, de esta forma, obtenga la
visión más completa de la zona.
Visitar la ciudad al completo pero
además, con un “guía” que le acompañe es otra de las posibilidades que el
usuario tiene gracias a My Street
Finder. Así, esta aplicación hace posible que el usuario active la función guía
en su Pocket PC para, además de recibir el mapa que precisa, un símbolo en
la pantalla le indique la posición exacta
de la calle o punto de interés que busca
y además, la dirección que deberá seguir
para encontrarlos.
Aunque a primera vista, My Street
Finder pueda parecer una aplicación
destinada a turistas o simplemente transeúntes, el entorno laboral y su mejor
productividad es otro de los escenarios
donde My Street Finder resulta especialmente útil.
Así por ejemplo, este sistema puede
facilitar a repartidores, comerciales, instaladores, etc., localizar el punto al que se
dirigen de forma más rápida, optimizando de este modo su tiempo de trabajo.
Pero además, My Street Finder permite que un usuario conozca en el mapa
que recibe la posición exacta en la que se
encuentra otro usuario del sistema. A través del mismo protocolo, el usuario puede recibir información sobre otros usuarios como es el nombre y la posición donde se encuentra en esos momentos.
11
<< dnm.universidad
Esta funcionalidad hace de My
Street Finder una herramienta muy útil
para los servicios de seguimientos de
flotas. De forma sencilla y en tiempo
real, camioneros, repartidores o taxistas pueden conocer el punto exacto donde se encuentra cada uno de sus compañeros de trabajo.
Calles, puntos turísticos, monumentos, estaciones de tren, My Street
Finder ofrece el mapa “a la carta” que
necesita.
Finalista.
RAMPA. El fin de las barreras
arquitectónicas
Rampas, escaleras, bordillos, obras.
Cada día, las personas con alguna deficiencia física o psíquica se encuentran
con múltiples barreras arquitectónicas
que pueden convertir un simple paseo
en una carrera de obstáculos. El proyecto RAMPA busca ayudarles a superar estas dificultades.
El cualquier momento y desde cualquier lugar, el usuario de RAMPA
podrá, a través de un dispositivo Pocket
PC, conocer el trayecto más adecuado
a sus deficiencias físicas o psíquicas. Tras
conocer las características específicas de
movilidad del usuario, RAMPA evalúa
las peculiaridades del entorno y así, ofrece un trayecto por el mismo adaptado
al usuario. Esta adecuación del recorrido a las características del usuario (y no
al contrario como suele ser habitual)
mejora enormemente la calidad de vida
del mismo.
ese camino, inclemencias meteorológicas que pudieran afectar al usuario en
su recorrido, eventos especiales que tengan lugar en el mismo, etc.
Del edificio a la ciudad
La propia definición y diseño del
programa RAMPA incluye desde su origen la absoluta escalabilidad del sistema. Así, RAMPA es capaz de ofrecer
información relativa tanto al entorno
físico de un edificio determinado como
de una ciudad o región. Escalable por
tanto y completamente personalizable,
el proyecto RAMPA permite múltiples
opciones de uso.
Así, por ejemplo, el sistema ofrece
su información de dos modos:
de forma pasiva para el usuario: el
usuario recibe información sin tener que
solicitarla. Para ello, es necesaria una
definición previa de la información que
le resulta interesante y un registro previo del usuario en el sistema.
de forma activa: el sistema recibe una
petición del usuario sobre una información concreta.
Tanto en un caso como en el otro,
RAMPA evalúa las características particulares del usuario para así ofrecerle
la información más adecuada a las mismas, de forma sencilla, amigable y actualizada en todo momento.
Todas las posibilidades
RAMPA ofrece al usuario el mejor
recorrido entre dos puntos. Para ello,
muchos son los factores que tiene en
cuenta. Por un lado, las propias carac-
terísticas físicas del usuario. El sistema
tiene en cuenta si el usuario va en silla
de ruedas, es invidente, etc. Y así elige
el recorrido más adecuado según estos
rasgos (para una persona que se mueve
con muletas por ejemplo, será mejor un
camino corto aunque en él haya una
escalera ya que se cansa mucho. Sin
embargo, ese camino nunca sería el indicado para alguien que se desplaza con
una silla de ruedas).
En segundo lugar, RAMPA evalúa
las características físicas del propio
entorno a la hora de elaborar el recorrido adecuado. Así, tiene en cuenta factores como dónde se encuentran rampas, aceras o escaleras, si existe algún
tramo en obras, las direcciones de las
calles, si hay posibilidad de transporte
público, etc. Y por último, el sistema
tendrá en cuenta también condiciones
como la celebración de eventos especiales o incluso, el clima para si, por
ejemplo, está lloviendo, elegir un recorrido que pase mayoritariamente por
lugares cubiertos.
Por otro lado, y en el caso de que el
usuario lo que solicite sea una ruta determinada para llegar a un punto de interés, RAMPA le ofrecerá, junto a la misma, información sobre acontecimientos
y/o las instalaciones principales que el
usuario va a encontrarse por el camino
y que pueden resultar de su interés.
Además, el diseño de RAMPA tiene en cuenta que la información debe
ser ofrecida de la forma más sencilla en
cada caso; así, por ejemplo, si el usuario es invidente, el sistema deberá presentarle una interfaz completamente
hablada.
<<dotNetManía
Encontrar un lugar
12
Además de facilitar el recorrido o
ruta más adecuada a las deficiencias físicas o psíquicas del usuario, RAMPA
puede también ayudarle localizando el
punto de interés o servicio que necesita. Una vez localizado, el sistema mostrará además el recorrido más adecuado para llegar al mismo.
La utilidad de esta herramienta se
completa aún más con la completa
actualización de la información que
RAMPA ofrece y que permitirá conocer en todo momento posibles obras en
Proyecto:
RAMPA
Universidad:
Facultad de Informática de Barcelona.
Universidad Politécnica de Catalunya.
Autores:
Sergio Edo, Oriol Mercadé y Vanesa Jiménez.
Tecnología:
Plataforma .Net
Servidor CVS de compartición de código fuente frente a Visual SourceSafe.
GPS Navigator Tom Tom.
Aplicación:
Servicio de información sobre trayectos adaptados a personas con deficiencias
físicas o psíquicas.
Pablo Abbate
MCDBA/MCAD/MCSD/MCT
Consultor independiente
WebForm Templates
Antes de que la Web llegara a nuestras vidas, nuestras aplicaciones tenían la
apariencia de una o varias ventanas en Windows, o para nosotros los más viejos, una interfaz no gráfica. Sin embargo, era muy común ya desde esas épocas
reutilizar la funcionalidad de presentación de la información.
sencillo reutilizar funcionalidades incorporadas dentro de los formularios, sólo es cuestión de modificar la apariencia en una clase base y todos los formularios, que de esta clase desciendan, tendrán la
misma apariencia por defecto.
Al enfocarnos en las aplicaciones Web en
ASP.NET descubrimos que el comportamiento de la
herencia no es exactamente el mismo que en su par,
el formulario Windows. Esto se debe a que en
ASP.NET tenemos dos elementos bien diferenciables: el formulario ASCX, cuyo contenido describe
los controles que conformarán la apariencia de la página web y, por otro lado, el archivo que contiene las
instrucciones en .NET que conforman la lógica que
regula el comportamiento del mismo formulario.
Esta característica permite distinguir el componente visual de la lógica dentro de la aplicación.
Pero, qué pasa si deseamos que la apariencia de un
formulario web modelo sea compartida por todos los
formularios que sean creados a partir de ese modelo. ¿Podríamos reutilizar la barra de navegación de
nuestro sitio en todas sus páginas? ¿Existe la posibilidad de reorganizar la distribución de una página modelo y que los cambios realizados se reflejen
en todas las páginas que fueron creadas a partir de
ese modelo? ¿Es posible configurar, por medio de
propiedades, los frames que deseamos mostrar dentro de una página?
La respuesta, en todos los casos, es sí.
Funcionamiento
de un formulario Web
Antes de empezar a trabajar, necesitamos conocer el funcionamiento de una página web:
En ASP.NET tenemos dos
elementos bien diferenciables:
el formulario ASCX, cuyo contenido
describe los controles que
conformarán la
apariencia de la página web
y el archivo que contiene las
instrucciones en .NET que
conforman la lógica que regula
el comportamiento
del formulario
• Una página web desciende de la clase Page del
namespace System.Web.UI.
• El contenido del archivo .ASCX asociado con
el archivo de lógica determinan el comportamiento del formulario web.
• No es posible heredar los elementos descriptos
en un archivo ASCX. La herencia solo funciona a nivel de código .NET, por lo tanto, si deseamos que una clase herede los controles descriptos en su padre deberemos escribirlos dentro del código.
• Si, utilizando el diseñador de formularios, pegamos un control en un Web Form padre, éste no
<<dotNetManía
<< Con .NET, en las aplicaciones Windows, resulta muy
13
<< dnm.asp.net
Pasos
aparecerá en un Web Form hijo. Este
comportamiento difiere del formulario de Windows.
El proyecto
La idea es desarrollar una página
modelo que nos permita reutilizar aquellos componentes comunes a todas las
páginas sin tener que insertarlos cada
vez que creamos un nuevo Web Form.
En este caso, haremos un diseño de
acuerdo al esquema de la figura 1.
Figura 3
Originalmente, nuestro formulario
web, responde a la jerarquía de clases
que vemos en la figura 2.
Después de realizar nuestros cambios, tendrá la siguiente la apariencia de
la figura 3.
Para los frames que rodean al área
de trabajo, utilizaremos user controls
que nos permitirán diseñar gráficamente
el contenido de estos frames.
Veamos como empezar…
En un proyecto de Visual Studio
2003 seleccionamos ASP.NET Web
Application y lo denominamos WebFormTemplate.
Siguiendo con nuestro diseño, necesitaremos cuatro controles de usuario
que servirán de frames para cada extremo del área de trabajo. Agregamos, al
proyecto, estos cuatro controles con los
siguientes nombres: frmEncabezado,
frmPie, frmIzquierdo, frmDerecho.
En cada user control agregaremos
todos los webform controls necesarios para
dar el aspecto que queremos a cada frame. Por ejemplo, nuestro frmencabezado podría tener un aspecto similar al de
la figura 4.
Ahora, agregamos un nuevo Web
Form denominado modelform. De este
formulario heredarán todos los otros
Web Forms de nuestra aplicación.
En la sección de code-behind deberemos modificar el comportamiento de
dos métodos:
Figura1
<<dotNetManía
El objetivo es que sólo se deba modificar el contenido del área de trabajo de
cada página, y el resto de los componentes sean heredados del modelo.
Para personalizar el comportamiento de todos los formularios web crearemos una clase modelo que derive de la
clase Page. Llamaremos a esta nueva clase: modelform
Todos los formularios de la aplicación deberán descender de modelform
para que posean su misma lógica.
14
Figura 2
Figura 4
Figura 5
<< dnm.asp.net
// Creamos una tabla para distribuir los frames
Table TablaPagina = new Table();
TableRow RowContenido = new TableRow();
TableCell CellFrmIzquierdo = new TableCell();
TableCell CellFrmContenido = new TableCell();
TableCell CellFrmDerecho = new TableCell();
// Creamos el Encabezado
Form.Controls.Add(LoadControl(“frmEncabezado.ascx”));
// Agregamos el contendio del frame Izquierdo
CellFrmIzquierdo.Controls.Add(LoadControl(“frmIzquierdo.ascx”));
// Agregamos el contenido de la página actual
Control Area = this.FindControl(“AreaTrabajo”);
if (Area != null)
CellFrmContenido.Controls.Add(Area);
// Agregamos el contenido del frame Derecho
CellFrmDerecho.Controls.Add(LoadControl(“frmDerecho.ascx”));
RowContenido.Cells.Add(CellFrmIzquierdo);
RowContenido.Cells.Add(CellFrmContenido);
RowContenido.Cells.Add(CellFrmDerecho);
TablaPagina.Controls.Add(RowContenido);
// Agregamos la tabla de contenido a la página
Form.Controls.Add( TablaPagina );
// Creamos el Pie
Form.Controls.Add(LoadControl(“frmPie.ascx”));
// Agregamos el Form
this.Controls.Add(Form);
base.CreateChildControls();
}
Fuente 1
protected override void Render(HtmlTextWriter writer)
{
// Rellenamos el inicio del código HTML
writer.Write(“<html><head><title>WebForm
Template</title><head><body>”);
// Rellenamos el contenido de la página.
base.Render(writer);
// Rellenamos el fin del documento HTML
writer.Write(“</body> </html>”) ;
Fuente 2
CreateChildControls(): Es implementado por la clase System.Web.UI.Control.
Este método es el responsable de la creación de todos los controles hijos en un
control contenedor tal como un Page.
Lo modificaremos para que agregue nuestros frames a la página actual.
Para ello debemos agregar el código
fuente 1 al code-behind de nuestro Web
Form.
Otro método que debe ser sobreescrito es Render, también de la clase
System.Web.UI.Control. La tarea que lleva a cabo este método es la de enviar
el contenido de un control de servidor
a un objeto HTMLTextWriter, el cual
escribe el contenido HTML en el
cliente.
Después de nuestra modificación, el
método definitivo tiene el aspecto del
fuente 2.
Agregamos un nuevo Web Form con
el nombre Main.aspx y lo colocamos
como formulario de inicio desde el
menú de Proyecto. Posteriormente accedemos al código HTML del formulario eliminando todo su contenido. Sólo
debe quedar la directiva <@Page …>
A continuación, regresando a la ventana de diseño, arrastramos un webform
control de tipo Panel sobre el Web Form.
Es importante, recordar que el nombre
del control agregado debe ser
AreaTrabajo. Modificamos las propiedades de tamaño para que abarque el
100% del alto y ancho de la página.
Por último, en el código .NET
debemos especificar que nuestra página (Main) no desciende directamente de
Page, sino que hereda de modelform
(nuestro formulario modelo).
Para ello deberemos modificar la
definición de la clase con el siguiente
fragmento de código:
public class Main :
WebFormTemplate.modelform
Bueno, ha llegado el momento de
ver cómo ha quedado nuestra primera
página terminada. Vea la figura 5.
Cada vez que agreguemos una nueva página, deberemos repetir los pasos
hechos con Main.ascx y así reutilizaremos todos los controles de usuario.
<<dotNetManía
protected override void CreateChildControls()
{
// Reemplazamos el formulario del archivo ascx por
// un formulario creado desde el código
HtmlForm Form = new HtmlForm();
15
Por José Miguel Torres
Técnico Superior en Desarrollo
de Aplicaciones Informáticas MRW
SQL Server Reporting Services
<< SQL ServerReporting Services no es un Add-In para Visual Studio ni
ninguna capa basada en .NET para
otros servidores de informes de terceros fabricantes. SQL Server Reporting
Services está totalmente desarrollado
bajo código administrado, en C# y
comporta una serie de herramientas
<<dotNetManía
Al fin ante nosotros
tenemos un servidor
de informes totalmente
desarrollado por
Microsoft, el SQL
Server Reporting
Services. Se trata de un
servidor de informes
basado en Web
Services y cuya característica más importante reside en su ‘modularidad’, que por un
lado establece, asegura
y actualiza el origen de
datos al cual está
conectado, y por otro
suministra el informe
en una fase paralela e
independiente.
16
para la administración, creación,
implantación, publicación y desarrollo
de informes no sólo para orígenes de
datos específicos de SQL Server y
Oracle, sino también genéricos,
pudiendo utilizarse sin ningún problema OLE DB y ODBC.
La plataforma
SQL Server Reporting Services está
formado por tres componentes básicos:
• Report Server
• Report Designer
• Report Server Data Base
Report Server es un servicio Web que
se hospeda en IIS y ASP .NET y que
atiende las peticiones a informes. La
razón de que Report Server sea un Web
Service stateless, sin estado, hace aumentar su escalabilidad teniendo la capacidad de servicio de unos 10 a 20 informes por procesador, aproximadamente. Actualmente el modelo de progra-
mación stateless es el que se viene utilizando en el desarrollo de arquitecturas
.NET con Enterprise Services, que
empezó ya con
MTS, y
que han
demostrado su
ventaja frente a aplicaciones stateful (con
estado) como son las aplicaciones cliente/servidor.
La ‘modularidad’ que ofrece la
arquitectura de Reporting Services hace
que, por una parte el administrador
disponga de unas herramientas específicas para el mantenimiento de informes y a su vez integradas en tareas de
administración como puede ser de sistema o de base de datos, y por otro
lado, el desarrollador tiene a su disposición una completa API y servicios,
integrados todos en Visual Studio
.NET, que le permite desarrollar funciones específicas para los informes,
independientemente de que el destino
del informe sea Web o Windows Form
u otro contexto, por ejemplo móvil.
De esta forma cualquier usuario autentificado puede ejecutar o ‘consumir’
informes desde Internet Explorer, o
bien desde una herramienta cliente que
consuma el informe a través de un servicio Web.
La diferencia fundamental con otros
diseñadores de informes es que, por
Fernando Bocigas, Product
ejemplo, Crystal Reports es una herraManager de SQL Server y SQL
mienta orientada al diseño de informes
Reporting Services de Microsoft
Ibérica
y, si bien es cierto que puede publicar
informes como Servicios Web e incluso
posee dos interfaces estandarizadas como
mercado. Diseño de informes tabulares, matriciales,
son SOAP y COM, dista de la idea de servidor de
ofrece SQL Server Reporting
con gráficos, con objetos OLE, etcétera, además introServices, con herramientas de
duce un concepto llamado ‘snaking columns’ que son
administración propias, polílas utilizadas en los periódicos. Permite la interacción
ticas de seguridad y más difey navegación por parte del usuario y los formatos de
rencias que iremos viendo
presentaciones más comunes (pdf, html, xls, csv,...), además adelante, un servidor de
más de agregaciones de datos, etcétera.
informes en toda regla.
El diseñador de informes está integrado con Visual
Studio .NET. El motor de diseño posibilita un asistente para la creación de informes y permite la importación desde informes Access, no
habiendo posibilidad, de momento,
de importación desde Crystal Reports
ni de cualquier otro fabricante.
Asimismo posee un generador de
consultas SQL y posibilidad de vista previa, entre otras características.
Desde el punto de vista de la
administración de informes, SQL
Server Reporting Services nos ofrece
una herramienta basada en Web
para tal fin. También tenemos la
posibilidad de utilizar el intérprete
de comandos para ejecutar utilidades e incluso herramientas de programación de secuencias de comandos. La seguridad está basada en funciones, con lo cual podremos controlar el acceso a carpetas, archivos,
Fig 1. Diagrama de la arquitectura
recursos en general. Dicha seguridad está basada en la autenticación
de Windows y/o SQL Server.
Otra
característica
a indicar es el historial de inforCaracterísticas
mes, el cual representa en forma estadística cual ha
sido la actividad de cada informe, lo que puede ayuA nivel de diseño de informes, con SQL Server
dar al administrador y/o arquitecto de un sistema para
Rerporting Services, podemos realizar todas las operaperfilar la escalabilidad de la arquitectura.
ciones que permiten actualmente los diseñadores del
<<dotNetManía
<<
“El potente entorno de desarrollo que pone a su
disposición Visual Studio .NET 2003 facilita la creación e implantación de soluciones de creación de
informes con la mayor capacidad de ampliación de
cara al crecimiento futuro. Microsoft SQL Server
Reporting Services también proporciona la flexibilidad añadida de la creación de informes junto a
una amplia variedad de fuentes de información,
entre las que se incluye SQL Server, OLE DB,
ODBC, Oracle y otros proveedores de datos de
la plataforma .NET. Entre los formatos de informe
se incluyen: formatos Web (HTML), de impresión
(PDF,TIFF) y de datos (Excel, XML, CSV)”
17
<< dnm.servidores.sql
<<dotNetManía
Los informes en SQL
Server Reporting Server se
definen mediante una
sintaxis propia llamada
(RDL) Reporting Definition
Language que permite,
basándose en XML,
definir un informe con un
schema publicado
18
Cada usuario (cliente) de una red
corporativa con cuenta autenticada de
Windows, por ejemplo, con acceso a
SQL Server Reporting Services, dispone
de un espacio Mis Informes en los que
tiene un espacio para administrar y
almacenar sus propios informes; asimismo también se pueden obtener suscripciones propias en un espacio similar llamado Mis Suscripciones. Dichas suscripciones se entienden como distribuidores de informes automáticos a
cliente y que pueden ser estándares o
controladas por datos, en la que se sirven según una consulta, por ejemplo.
La entrega puede ser mediante correo
electrónico y/o mediante Web Services o
servicios Windows, gracias a la arquitectura modular que están desarrollados los Reporting Services.
Los informes se procesan en grupos
de dos fases que separan el procesamiento
de datos de la representación final. Esto
permite representaciones de tipo de formato distintos, una mayor escalabilidad
y la posibilidad de programar algunos
componente mediante Visual Studio
.NET. Esta característica diferencia claramente, la representación de informes
de SQL Server Reporting Services con
Crystal Reports. Éste último procesa cada
informe desde la petición, pasando por
la captación de datos y publicación en el
visor, en una misma fase, con lo que varias
peticiones a un mismo informe implicará una mala administración de recursos
ya que hará tantos accesos al origen de
datos como peticiones, contrariamente
que SQL Server Reporting Services.
Los informes en SQL Server
Reporting Server se definen mediante una
sintaxis propia llamada (RDL) Reporting
Definition Language que permite, basándose en XML, definir un informe con
un schema publicado. Así que podemos
utilizar SOAP para publicar informes
desde una aplicación externa, ya sea en
Windows o desarrollando controles web
forms para renderizar informes publicados de manera transparente para un
usuario.
SQL Server Reporting Services tiene
compatibilidad con herramientas existentes de servicios de análisis pero no
será hasta la llegada de Yukon, dónde se
fusionarán y aumentará la potencia entre
ambos.
Requisitos
Existen varias versiones de SQL
Server Reporting Services:
• Standard Edition
• Enterprise Edition
• Developer Edition
• Evaluation Edition
Los requisitos de hardware no distan
mucho de las necesidades de cualquier
software de administración o desarrollo,
lógicamente, dependiendo del entorno de
desarrollo o de producción en el que se
utilice, el hardware tendrá una importancia relevante en la escalabilidad vertical.
En cuanto a requerimientos de
Software, SQL Server Reporting Services,
depende totalmente de un Sistema
Operativo servidor; en la tabla 1 podemos observar una relación de requisitos
por componentes.
Componente
Requisitos previos
Servidor de informes
• Servidor Web con ASP.NET y Servicios de
Internet Information Server (IIS) 5.0 o posterior.
• MDAC 2.6 o posterior.
• Conexión con una instancia de SQL Server
2000 SP3a.
• Sitio Web predeterminado accesible a través
de http://<nombreDeServidor>.
• Para Windows 2003, el equipo debe estar configurado como servidor de aplicaciones.
• Para que Windows 2003 utilice la cuenta del
servicio de red para ejecutar el servicio
Servidor de informes, necesita SQL Server
QFE 859. Para descargarlo, visite Soporte técnico de Microsoft.
Administrador de informes
• Servidor Web con ASP.NET.
• IIS 5.0 o posterior instalado y configurado.
• Sitio Web predeterminado accesible a través de
http://<nombreDeServidor>.
Base de datos del servidor
de informes
Servidor con SQL Server 2000 SP3a.
Diseñador de informes
Estación de trabajo cliente con Microsoft Visual
Studio® .NET 2003 y MDAC 2.6 o posterior.
Herramientas administrativas
y utilidades
Estación de trabajo cliente con acceso
a un servidor de informes.
Libros en pantalla de
Reporting Services
Estación de trabajo cliente, sin requisitos
previos.
Informes y aplicaciones de ejemplo,
y base de datos de ejemplo
Estación de trabajo cliente, sin requisitos
previos.
Tabla1. Relación de requisitos previos por componentes a nivel de software.
<< dnm.servidores.sql
Diseñar
El diseñador de informes forma parte de Visual
Studio y la creación de un informe implicará la creación de un proyecto en el mismo de tipo Business
Intelligence, mediante un asistente o simplemente un
informe vacío (fig. 2).
Figura 3. Esqueleto de un proyecto
Business Intelligence.
Figura 2. Dos plantillas disponibles para la creación de informes desde
Visual Studio .NET 2003
me a nuestra solución como un proyecto más, en definitiva, la utilización de SQL Server Reporting Services y
Visual Studio .NET es muy provechosa. También desde Visual Studio .NET, tenemos la posibilidad de
implementar y publicar el informe aunque es desde las
herramientas encomendadas para ello, donde encontraremos mayor funcionalidad al respecto.
Tenemos a nuestra disposición todo el potencial
de la interfaz de Visual Studio .NET para el diseño
de un informe, desde el generador de la consulta
SQL hasta los tipos de informes a utilizar
<<dotNetManía
En el explorador de soluciones vemos el proyecto
con dos carpetas, que refieren a las dos partes o módulos del informe, como muestra en la figura 3, el origen
de datos y el diseño del mismo.
En el origen de datos tenemos un asistente que
nos ayuda a la disposición del mismo. Por defecto,
SQL Server Reporting Services viene con una base de
datos que ayuda en los tutoriales ya que la mayoría
hacen referencia a ella, es lo que la Northwind al Visual
Studio, dicha base de datos, AdventureWorks2000, se
auto instala en el servidor SQL Server donde reside
Report Services.
La mayoría de herramientas de diseño del mercado tienen un asistente que facilita el proceso de creación inicial, y en este caso SQL Server Reporting Services
no es una excepción. En un tiempo breve creamos un
informe en el que quizás lo más complejo sea la construcción de la cadena de la consulta, tarea que se facilita gracias a la herramienta de creación de consultas
gráfica de Visual Studio .NET. En la figura 4 vemos
parte de un proceso de creación mediante el asistente.
Tenemos a nuestra disposición todo el potencial de
la interfaz de Visual Studio .NET para el diseño de un
informe, desde el generador de la consulta SQL hasta los tipos de informes a utilizar. Podemos ver una vista previa del informe, podemos modificar el diseño
cuando y como queramos. Podemos agregar el infor-
19
<< dnm.servidores.sql
Figura 4.Tres pasos distintos del asistente
de creación de informes.
La dos herramientas de administración las encontramos en primer lugar en http://localhost/Reports
(fig. 6), por defecto, la cual nos brinda operaciones de
administración, gestión e implantación y en segundo
lugar tenemos un explorador en el que podemos ver
los informes implantados. El sitio Web, por defecto,
es http://localhost/ReportServer (fig. 7) y si los permisos de autorización nos lo permiten podemos navegar por dicho espacio Web.
En el ejemplo que se muestra en estas líneas realizado anteriormente llamado Ejemplo, vemos que hay
dos ficheros. El primero hace referencia a la conexión
de datos que es compartida y que no es mas que un
archivo XML (fig. 8) y el segundo, rptEjemplo, es la
definición del informe en RDL y cuando accedemos,
<<dotNetManía
Implementar y administrar
20
Lo mas importante de la herramienta de administración es que está basada en Web, alojada bajo IIS
y ASP .NET y que por tanto deberá estar familiarizado con estos contextos. La seguridad, como viene
siendo tradicional entre productos de servidor de
Microsoft, puede estar integrada bajo autenticación
Windows y su implantación requiere de un estudio
detallado y una fase de implantación minuciosa. Es
importante la planificación para la implementación y
administración de los informes ya que no sólo depende de un origen de datos ( ya que éste puede ser compartido o propio de un informe) con unas premisas
de seguridad propias y un alcance local o remoto, sino
que además los clientes de estos informes pueden no
estar dentro de un dominio local y que por tanto la
operación de autorización y autenticación sean imprescindibles, a través de IIS y/o Windows y/o SQL
Server. Ver figura 5.
Figura 5. Esquema de implantación distribuida. e l
<< dnm.servidores.sql
Figura 6. La herramienta ReportServer
Figura 7. Explorador de Informes
Como herramientas no gráficas destaca rsconfig.exe para la administración de conexiones, rs.exe
para la ejecución de comandos automatizados,
rskeymgmt.exe para la administración de cifrado de
claves de los informes, rsactivate.exe para la activación instantánea de servidores de informes. La combinación del comando rs.exe junto a los demás permite secuenciar de manera programática operaciones de mantenimiento desde la consola del intérprete de comandos.
“Para los profesionales de TI, Reporting Services supone un
entorno de creación de informes escalable y seguro que
facilita la gestión, el acceso y la entrega de los datos empresariales al usuario final”.
Jason Carlson, Product Unit Manager de SQL Server
Reporting Services
de Microsoft Corp.
<<
<<dotNetManía
explorador renderiza el informe hasta su presentación
por defecto (fig. 9).
De manera transparente existe un componente
que se encarga de administrar la utilización de ésta
conexión, para que sea compartida por otros informes y para que no consuma más que los recursos necesarios, de ahí que el archivo de conexión sea XML, ya
que se trata de un componente basado en Web Service.
Toda la información que maneja SQL Server
Reporting Services se guarda en una base de datos del
servidor SQL Server llamada ReportServer. Es aquí
dónde se guarda información de usuarios, informes,
roles, eventos, suscripciones, etcétera, y la herramienta Web no hará más que representar la funcionalidades según el perfil del usuario conectado.
SQL Server Reporting Services soporta clúster de
balanceo de carga en red (Network Load Balanced
(NLB)). Al ser un Web Service stateless, sin estado, si
reside en un contexto de NLB éste se escalará hacia
fuera en caso de que algún servidor esté indispuesto.
Además, la base de datos de SQL Server Reporting
Services puede residir en un cluster junto a demás servidores SQL Server.
SQL Server Reporting Services puede utilizar el SQL
Agent para realizar programaciones de entrega. Éstas
se programan para que un determinado informe a una
determina fecha y hora se entreguen a unos determinados clientes. Todo el proceso es parametrizable lo
cual aporta una gran abanico de posibilidades pudiendo incluso seleccionar el medio de transmisión y el
formato de salida.
21
<< dnm.servidores.sql
Figura 8.Acceso al fichero AdventureWorks2000
desde el explorador web de SQL Server Reporting Services
Figura 9.Acceso al informe rptEjemplo desde el explorador web
de SQL Server Reporting Services
Pero las posibilidades de desarrollo
van más allá del desarrollo de los informes. SQL Server Reporting Services
cuenta con tres interfaces principales.
Por una parte WMI (Instrumental de
administración de Windows) cuya
misión es administrar el servidor de
informes; en segundo lugar, el acceso
URL que permite la integración en
modo de portal para los informes publicados y por último SOAP. SOAP permite la publicación, administración y
acceso a cualquier informe y es por ello
que empleando las API de SOAP podemos desarrollar una aplicación para
administrar un servidor de informes, e
incluso contando con servicios Web
propios y componentes escalables aprovechando los servicios que ofrece los
Enterprise Services a través de los
Serviced Components, las posibilidades
de desarrollo no se centran únicamente en un marco local limitado físicamente. Destacar que ninguna interfaz
está basada en COM+.
En la figura 11 vemos el ejemplo de
Web Service en el que encontramos algunos métodos que nos ofrece, y que utilizamos con la facilidad y comodidad
que brinda la utilización de los Web
Services desde Visual Studio .NET.
<<dotNetManía
Desarrollo
22
En cuanto a desarrollo se refiere, las
oportunidades son muy amplias.
Utilizando el .NET Framework 1.1,
podemos crear extensiones de representación, de entrega, aplicar directrices de seguridad a nivel de informes y
nos permite interactuar, no sólo con el
origen de datos, también con cualquier
aspecto del diseño del informe, todo ello
desde un proyecto en cualquier lenguaje .NET.
Ya que los informes están definidos
por XML bajo la sintaxis de RDL (fig.
10), también podemos perfilar o desarrollar funciones específicas bajo dicha
sintaxis y aplicarlas a la representación
de los informes, simplemente utilizando
las clases que nos ofrece .NET Framework
en el espacio de nombres System.XML,
particularmente la clase XmlTextWriter,
que puede ser utilizada para este fin.
Figura 10. Esquema RDL
<< dnm.servidores.sql
De la misma forma que SOAP
nos ofrece la posibilidad de administrar un servidor, URL nos permite personalizar un explorador y
WMI configurarlo, todo ello desde
Visual Studio .NET.
En el código de a continuación,
un ejemplo de aplicación consola en
C# que muestra el nombre y la descripción de un determinado informe
registrado, en este caso Ejemplo y el
resultado de la aplicación lo vemos
en la figura 12.
SQL Server Reporting Services cuenta con tres interfaces
principales. Por una parte WMI cuya misión es administrar el
servidor de informes; en segundo lugar, el acceso URL que
permite la integración en modo de portal para los informes
publicados, y por último SOAP que permite la publicación,
administración y acceso a cualquier informe
<<dotNetManía
Figura 11.Web Service subministrado por Reporting Services para el acceso
y representación a informes desde Visual Studio .NET
23
<< dnm.servidores.sql
using System;
using ConsumidorWS.WebReference;
namespace ConsumidorWS
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
ReportingService report = new ReportingService();
report.Credentials = System.Net.CredentialCache.
DefaultCredentials;
string informe = “/Ejemplo/rptEjemplo”;
Property nombre = new Property();
nombre.Name =”Name”;
Property descripcion = new Property();
descripcion.Name =”Description”;
Property[] propiedades = new Property[2];
propiedades[0] = nombre;
propiedades[1] = descripcion;
try
{
Property[] retPropiedades = report.GetProperties (informe,propiedades);
foreach (Property p in retPropiedades)
{
Console.WriteLine (p.Name + “: “ + p.Value );
}
}
catch (Exception e)
{
Console.WriteLine (e.Message);
}
Console.WriteLine(“Teclee Intro para finalizar...”);
Console.Read();
}
}
}
Código fuente 1
<<dotNetManía
No es sorprendente pues, pensar que un informe
puede llegar a ser diseñado, publicado e implantado
desde código.
24
Conclusión
SQL Server Reporting Services es un conjunto de
herramientas integradas cimentadas sobre pro-
ductos como SQL Server y Visual Studio .NET.
Su integración con demás tecnologías de servidor
IIS, ASP .NET, etc. lo hacen único, muy escalable
y flexible, lo que puede ser una buena solución para
el tráfico de grandes cantidades de documentos en
corporaciones cuya extensión del negocio abarca
varios países, y para pequeñas que enconaran en
SQL Server Reporting Services una herramienta de
<< dnm.servidores.sql
Figura 12. Resultado de la aplicación consola.
clasificación y desarrollo de informes fácil e integral.
Las API de SOAP que se ofrece para la parte de
desarrollo, hace prácticamente parametrizable todo
el proceso de utilización de informes así como la admi-
nistración, con unas herramientas sencillas y potentes, permite una total adaptabilidad funcional con tareas de mantenimiento de sistema, de sitios Web y de
base de datos entre otros.
bibliografía
Professional SQL Server Reporting Services
Paul Turley,Todd Bryant, James Counihan, George McKee, Dave DuVarney
Editorial: Wrox
Páginas: 800
Publicado: Mayo, 2004
ISBN: 0764568787
Microsoft SQL Server Reporting Services
Brian Larson
Editorial McGraw-Hill Osborne Media
Páginas: 704
Publicado: Mayo, 2004
ISBN: 0072232161
<<dotNetManía
Hitchhiker’s Guide to SQL Server 2000 Reporting Services
Peter Blackburn,William R.Vaughn
26
Editorial: Pearson Education
Págians: 400
Publicado: Previsto para Octubre 2004
ISBN: 0321268288
Por Miguel Egea
SQL Server MVP
portalsql.com
Crear informes con SQL Server
Reporting Services
Los Reporting Services son una nueva herramienta de servidor asociada a SQL Server.
Vienen a completar la amplia oferta relacionada con SQL-Server, a completar al motor
relacional, que tiene amplias funcionalidades como la replicación, servicios de alta disponibilidad, mecanismos de trasvase de registros, servicios de transformación de datos,
tareas programables, un avanzado mecanismo de copias de seguridad (como vimos en
un artículo anterior en esta misma publicación). Completan también a los Analisys
Services que ofrecen, servicios avanzados de DataWarehouse, situándose en una rama
media dentro del mercado del OLAP. De hecho Microsoft, al menos de nombre los
incluye dentro de lo que ha venido a llamar proyectos de Bussiness Intelligence.
vidor para la creación, desarrollo, administración y
despliegue de informes. Una herramienta extensible que nos dota de base sin embargo con un buen
número de funcionalidades muy interesantes, como
por ejemplo el data driven subscriptions, es decir, subscripciones que extraen las direcciones de envío, los
informes a enviar, los formatos en los que se envía
(entre otros).
Parte de estas funcionalidades las veremos con
ejemplos a lo largo de este artículo. Veremos entre
otras cosas, el asistente de creación de informes que
nos ofrecen los Reporting Services dentro del entorno de desarrollo de Visual Studio.NET, a través del
cual podremos crear de forma sencilla nuestros
informes de explotación de información.
Veremos también los elementos que podemos
colocar en nuestros informes, las fuentes de datos,
compartidas o no, la herramienta de diseño de
informes y el despliegue de informes con Visual
Studio.NET. Sin embargo quedará fuera del alcance de este documento la creación de informes sin
Visual Studio; poderse se puede, ya que los la definición de los informes (ficheros RDL –Report
Definition Language), es un fichero XML estándar
que cumple los requerimientos que marca un
esquema de datos XSD público. Es por tanto perfectamente viable crear informes sin Visual
Studio.NET, aunque bien es cierto que sería como
desarrollar aplicaciones fuera del entorno, algo
bastante tedioso.
¿Cómo empezamos?
Bueno, la respuesta obvia siempre es: por el principio, lo primero será instalar la parte de servidor.
Instalar los servicios de Reporting Services, es una
tarea bastante sencilla, tal y como nos tiene acostumbrados Microsoft, hay un asistente que repasa
la configuración de nuestro servidor y nos avisa de
los prerrequisitos que no cumplimos y nos invita a
instalarlos. Necesitamos tener un servidor IIS, en
él se desplegarán los informes, éste servidor debe
admitir ASP.NET, ya que al final Reporting Services
expone un servicio web que es una interfaz perfectamente válida para administrar el servidor. Después
nos solicitará rutas, servidor y un servidor SQL en
el que instalará varias bases de datos, en concreto
instalará
las
BBDDs
ReportServer,
ReportServerTempdb y añadirá una base de datos nue-
<<dotNetManía
<< Realmente son una potente herramienta cliente ser-
27
<< dnm.servidores.sql
va, que contiene un volumen bastante aceptable de
datos llamada AdventureWorks2000.
Si lo que deseamos es instalar las herramientas
necesarias para que un desarrollador construya informes, lanzaremos el mismo programa de instalación,
eligiendo eso sí, solamente las herramientas de cliente tal y como aparece en la figura 1.
plo utilizaremos algo muy sencillo, Select * from
SalesOrderheader. En este paso, el asistente comprueba que la consulta que estamos ejecutando es
correcta para SQL.
Figura 2
Figura1
[ [
Consejo
Un par de clics más y tendremos instalados los
Reporting Services listos para desarrollar informes
profesionales de forma sencilla. Veremos a continuación cómo crear informes primero siguiendo el asistente de creación de informes, después un poco más
en detalle con cada uno de los elementos de los que
disponemos en un informe.
<<dotNetManía
Creando nuestro primer informe
28
Manos a la obra, vamos a construir nuestro primer
informe, para eso abriremos el entorno de desarrollo
de Visual Studio .NET y elegiremos los proyectos de
Bussiness Intelligence, ahí elegiremos el asistente para la
creación de informes y cambiaremos a nuestro gusto
el nombre del informe. En cuanto seguimos, el asistente encontramos una de las características de los
Reporting Services, los orígenes de datos compartidos. Es muy común que buena parte de los informes
de una organización utilicen la misma conexión, es
decir se conecten a la misma base de datos con parámetros similares, más aún cuando esta conexión puede realizarse en el entorno de seguridad de Windows.
Aún así, podemos construir orígenes de datos específicos para cada informe si es que es ese nuestro deseo.
En la figura 2 podemos observar la pantalla del asistente a la que nos estamos refiriendo. A continuación
el asistente nos preguntará cual es la instrucción SQL
que vamos a usar para nuestro informe, para el ejem-
Si la BBDD es SQL SERVER no importa realmente para este paso si nuestra
sentencia devuelve millones de registros. Para comprobar que la sentencia
es correcta,Reporting Services no ejecutan la consulta para devolver registros sino que añade la sentencia SET
FMTONLY ON antes para devolver
sólo la estructura.
En la siguiente pestaña del asistente nos preguntará si deseamos hacer un informe tabular o un informe de matriz, los informes tabulares reflejan los listados tradicionales -ya sabéis, información en columnas más o menos llamativas- pero en columnas, cada
registro uno debajo de otro.
Elegid esta opción si estáis haciendo un listado
de clientes, proveedores, artículos,… Los informes
de matriz sirven para contrastar información, son
muy similares a los informes de referencias cruzadas
de Access por ejemplo, es decir, podemos poner en
columnas datos que pertenecen a filas. Son adecuados por ejemplo para mostrar información de diferentes ejercicios o meses.
Para nuestro ejemplo elegiremos Matriz, vamos a
contrastar la información de ventas por meses, aun-
<< dnm.servidores.sql
que para hacerlo tendremos que personalizar algo
nuestro informe al final.
Una vez elegido el formato de matriz, nos aparece una nueva pantalla en la que podemos decir qué
campos van a ir a página, columnas y filas, y qué campos vamos a mostrar en los detalles. En nuestro caso
elegiremos que la fecha (OrderDate) se sitúe en columnas, en filas; situaremos el código de cliente
(CustomerID) y en los detalles situaremos el peso y el
subtotal (Freight, subtotal).
to fecha (que pusimos en columnas) y modificaremos
los parámetros tal y como puede verse en la figura 3.
Añadiremos un grupo más, a un nivel superior,
será el grupo año. Para hacerlo pulsaremos botón derecho sobre la matriz, agregar grupo, y rellenaremos los
datos con los valores adecuados. Lo que tendremos
que hacer es añadir un nivel de agrupación por años,
y después añadir una propiedad al grupo mes que indique que el nivel mes puede mostrarse o no en función
del año. Para esto entraremos en la pestaña de visibi-
Necesitamos tener un servidor IIS, en él se desplegarán los informes,
este servidor debe admitir ASP.NET, ya que al final Reporting Services expone
un servicio web que es una interfaz perfectamente válida para administrar
el servidor
Figura 3
Figura 4
lidad y marcaremos la opción Otro elemento de informe puede alterar la visibilidad, eligiendo el elemento
que puede alterar esa visibilidad la caja de texto del
año, tal y como se observa en la figura 4.
Hay algunos detalles más de formato y alineación
que pueden darle un aspecto más profesional a nuestro informe, sin embargo, no me atreveré a hacer ninguna recomendación en este artículo, quizá un buen
diseñador gráfico ayude mucho más en esa tarea que
un informático.
Es importante el aspecto, yo me atrevería a decir
que dramáticamente importante, ya que, como dice
Anthony T.Mann en su guía sobre Reporting
Services, normalmente nuestro cliente será incapaz de
valorar la complejidad o sencillez de construir nuestro informe, su único patrón de medida, siempre es el resultado, y
muchas veces ese resultado depende más de la maquetación
<<dotNetManía
Por último el asistente nos muestra algunos formatos predefinidos que pueden ayudarnos a dar un
aspecto amigable a nuestro informe sin demasiado
esfuerzo. Podéis elegir el que más os guste —después
siempre puede cambiarse— además de esa forma
podéis ver cual es el que más os gusta.
Al final nos pregunta por el servidor de informes,
ahí se realizará la implementación del informe, situad
en esa casilla la URL para acceder a vuestro servidor
de Reporting Services.
Con esto hemos creado nuestro primer informe,
será necesario ahora personalizarlo y darle más sentido. Nuestro objetivo será construir un informe de ventas por años y meses, que tenga aspecto interactivo,
veamos qué pasos debemos dar para conseguirlo partiendo de la base del asistente.
Lo primero que haremos será cambiar la expresión de fecha por el mes de la fecha, ya que vamos a
hacer las agrupaciones por año y mes. Para esto simplemente accederemos a las propiedades del elemen-
29
<< dnm.servidores.sql
y el aspecto que de los datos en sí (que por supuesto tienen
que ser correctos).
[
Consejo
Cuando estamos desarrollando informes es bastante común querer tener un acceso ágil a los
datos; podemos usar en nuestra consulta bien
cláusulas WHERE que disminuyan el número
de registros, bien cláusulas TOP que consigan
el mismo objetivo. Esto hay que quitarlo justo
antes de desplegar el informe.
[
Para terminar nuestro informe vamos a darle un
poco de sentido, vamos a quitar todos los campos
que no usamos para de esta forma mejorar el rendimiento del informe. Nuestra sentencia la vamos a
dejar así:
SELECT customerid,orderdate,Freight,Subtotal
FROM SalesOrderheader
WHERE orderdate>=’20040101’
<<dotNetManía
El aspecto final del informe es el que podéis observar en la figura 5. Este tipo de informes (y todos en
realidad) puede exportarse a Excel, además de a PDF,
HTML con Office Web Componets, CSV, e incluso
XML con datos del informe. Es decir, tenemos un
buen número de formatos que pueden permitirnos
que nuestros informes, de forma predeterminada
expongan funcionalidades que serían muy complicadas de otra forma.
30
Figura 5
Agregando interactividad a los informes
No hay informe que no necesite parámetros, todos
de una forma u otra necesitan un conjunto de valores
por los que filtrar o algún mecanismo para reducir el
volumen de información exactamente al que necesitamos. Naturalmente Reporting Services tiene mecanismos para facilitar esta tarea. Siguiendo con nuestro ejemplo vamos a dotar a nuestro informe de la
posibilidad de seleccionar el año del que mostrar la
información. Veamos paso a paso como añadirle esta
lógica.
Lo primero que vamos a hacer es añadir un nuevo conjunto de datos a nuestro informe; este conjunto de datos contendrá una relación de los posibles
valores que va a tener nuestro informe. Para ello en
el diseñador de Visual Studio .NET seleccionaremos
la pestaña datos y a continuación seleccionaremos
Nuevo conjunto de datos, tal y como podemos ver en la
figura 6. A continuación incluiremos un nuevo conjunto de datos a partir de esta instrucción SQL
SELECT DISTINCT Year(orderdate) Año FROM
SalesOrderHeader . Este conjunto de datos lo usaremos como base para nuestros parámetros.
Como dice Anthony T.Mann en su
guía sobre Reporting Services,
normalmente nuestro cliente será
incapaz de valorar la complejidad o
sencillez de construir nuestro
informe, su único patrón de medida,
siempre es el resultado, y muchas
veces ese resultado depende más de
la maquetación y el aspecto que
de los datos en sí (que por supuesto
tienen que ser correctos)
Después volveremos a la pestaña de diseño, en la
esquina superior izquierda de cualquier report.
Pulsando con el botón derecho del ratón nos aparecerá un menú desplegable con varias opciones, entre
ellas las de crear un encabezado y pie de página (las
veremos al menos brevemente más adelante), también
encontrar las propiedades del informe, y además está
<< dnm.servidores.sql
Figura 7
Figura 6
SELECT customerid,orderdate,Freight,Subtotal
FROM SalesOrderheader
WHERE year(orderdate)=@año
Después entraremos en las opciones del dataset,
del conjunto de datos que hemos generado y añadiremos un parámetro (esta vez al dataset), que llamare-
[
mos @año y cuyo valor será =parameters!parAño.value,
consiguiendo así enlazar el informe con los parámetros que estamos solicitando.
Añadiendo gráficos a los informes
Una de las cuestiones que generalmente es necesaria, es añadir gráficos a este tipo de informes.
Pensemos por ejemplo en la factura de la compañía
telefónica, todas o casi todas tienen un gráfico de evolución del consumo en los últimos meses, sin embargo, no hay muchas facturas generadas por ERP’s más
tradicionales que tengan esta información. En el caso
del que estamos hablando, el origen de datos, no tiene nada que ver con la factura, son datos absolutamente
disjuntos. Vamos a ver también paso a paso como añadir un gráfico a nuestro informe, aprovecharemos para
crear nuestro conjunto a partir de un procedimiento
almacenado, ya que hasta ahora en los ejemplos siempre hemos venido usando sentencias directas.
Comenzaremos esta parte creando un procedimiento almacenado en la BBDD AdventureWorks2000,
el código del procedimiento almacenado será muy sencillo, podemos verlo a continuación:
Consejo
[
En general las sentencias SQL en que se hacen transformaciones o se usan funciones (como Year()
en nuestro ejemplo) no son demasiado óptimas, al hacer esta fórmula estamos impidiendo que SQL
Server use los índices que potencialmente podemos tener por el campo. Hay varias formas de mejorar
esto: Se puede crear un campo calculado en la tabla que sea el año y construir un índice por ese campo, o se pueden usar rangos de fechas para expresar lo mismo.
<<dotNetManía
la opción que estamos buscando: la opción de ver los
parámetros del report.
Seleccionaremos Agregar un nuevo parámetro, como
nombre elegiremos ParAño; en el mensaje elegiremos
Año del informe; como valores disponibles, elegiremos
de consulta, esto nos permitirá seleccionar como valor
el conjunto de datos que acabamos de crear. Con esto
acabaríamos de crear el parámetro al informe.
Está claro que aún no hemos usado el parámetro
para construir la sentencia que sirve para obtener los
datos y que por tanto afecte al conjunto de datos que
hemos usado de base para diseñar el informe de ejemplo. Para conseguir esto, bastará con cambiar la sentencia que nos ha servido de base para el informe, la
sentencia, finalmente quedará así:
31
<< dnm.servidores.sql
Create Proc EvolucionVentasPorMeses (@año smallint
)
as
begin
select month(orderdate) mes,sum(Subtotal) Subtotal
From SalesOrderheader
where year(orderdate)=@año
group by month(orderdate)
order by 1
end
go
A continuación añadiremos un nuevo conjunto de
datos. El conjunto de datos se basará en este procedimiento almacenado, es bastante sencillo invocar y no
vamos a entrar en más detalles, únicamente recordar
que añadiremos el enlace con el parámetro @año, de
la misma forma que hemos enlazado este parámetro
para el conjunto de datos base para la matriz de datos.
Si lo estimamos oportuno, podemos hacer más
grande ahora la superficie del informe, y bien en un
margen, o bien justo debajo, pincharemos y arrastraremos un nuevo grafico a nuestro informe. Después
arrastraremos los campos del nuevo conjunto de datos
a la superficie del gráfico, llevaremos el campo subtotal a valores y el campo mes a los campos de categoría. No llevaremos en este caso nada a serie, y además entraremos a personalizar el informe para que no
muestre la leyenda.
En la figura 8 puede verse el aspecto que tiene en
vista previa el informe que acabamos de generar y al
que le acabamos de añadir el gráfico.
[
Consejo
Algunos procedimientos almacenados (en
SQL Server) pueden devolver más de un
conjunto de registros. Sin embargo
Reporting Services solamente usará el primero de ellos, es conveniente tener cuidado con esto y asegurarse de usar SET
NOCOUNT ON cuando sea necesario.
[
ta con pulsar con el botón derecho en el cuadro
superior izquierdo de la ventana de diseño y obtendremos las dos opciones de menú que dan acceso a
encabezados y pies. Más allá de lo obvio, lo que tiene cierto interés es cómo usar esos encabezados y
pies de página para mostrar la información realmente relevante para todas las páginas. Generalmente es interesante conocer datos como la fecha y
la hora de generación del informe, y la página y el
total de páginas.
Para proporcionar esta información hay variables
globales que nos las ofrecen y que a través del editor
de expresiones podemos acceder.
Para insertar valores, añadiremos un par de cajas
de texto en el pie de página arrastrándolos desde el
cuadro de herramientas hasta la superficie del pie de
página, después desde las propiedades de la caja de
texto podemos acceder al editor de expresiones y poner
la expresión más adecuada.
Para poner la página en la que estamos y la fecha
y hora de ejecución hemos usado respectivamente
las variables globales Globals!ExecutionTime,
Globals!PageNumber y Globals!TotalPages.
Despliegue de los informes
<<dotNetManía
Figura 8
32
Añadir encabezados y pies de página
Añadir un encabezado o un pie de página es una
tarea muy sencilla en el diseñador de informes, bas-
Hasta esta parte del artículo sólo hemos hablado
sobre cómo desarrollar los informes, sin embargo, de
nada sirve un informe si no puede desplegarse, es decir
instalarse en algún lugar y ser visualizado. Para realizar esta tarea veremos las opciones que ofrece Visual
Studio .NET y veremos parte de las diferentes opciones de renderizado.
Una de las herramientas más potentes para desplegar informes es el propio Visual Studio .NET. La
herramienta es capaz de hablar con el Servidor de
Reporting Services (a través del servicio web que expone) y enviar la información necesaria para desplegar
el informe, tanto los orígenes compartidos de datos
como los propios informes.
Si lo pensamos tranquilamente, la tarea tampoco es especialmente complicada, no lo es debido a
que el resultado de toda nuestra tarea no deja de ser
<< dnm.servidores.sql
Visualización de informes
Una vez situado el informe en nuestro servidor de
informes necesitaremos que nuestras aplicaciones tengan la capacidad de usarlos, es decir de invocar a esos
informes para que muestren la información.
Nada más sencillo de conseguir, al fin y al cabo no
es más que navegar a una página web en la dirección
URL en la que hayamos desplegado nuestro informe,
En la figura 9 podemos ver el aspecto que tiene la pantalla una vez ejecutado el informe.
¿Y cómo integramos esta visualización dentro de
nuestras aplicaciones? Si las aplicaciones son Web nada
Figura 8
más sencillo, podemos poner hiperenlaces a las direcciones URL de los informes, bien con los parámetros
en la propia URL, bien sin ellos, y ya se encarga el
propio informe de solicitarlos.
Si por el contrario estamos desarrollando aplicaciones en ventanas tradiciones, en aplicaciones de escritorio tampoco es que sea mucho más complicado,
podemos usar una referencia web al Servicio Web que
exponen Reporting Services (http://NOMBRESERVER/ReportServer/ReporService.asmx), y usar los
métodos de RENDER para obtener la información de
renderizado (incluso en un Stream), o podemos hacerlo también mediante acceso URL, bastará con añadir
una referencia al navegador, esta referencia es realizada mediante COM Interop, a los Microsoft Internet
Controls. Una vez creada la referencia solamente hay
que ejecutar el método Navigate del control pasándole como parámetro la dirección URL en donde hayamos desplegado el informe.
¿Y hace algo más?
Pues la verdad es que sí, muchas cosas más, la parte de administración de informes no la hemos tocado
en este artículo y la dejamos pendiente para el futuro, de la misma forma, podrían tratarse las suscripciones, que existen de varios tipos, tanto programadas como gobernadas por los propios datos, además
de la seguridad y las ‘interioridades’ de los Reporting
Services
Conclusiones
Reporting Services, como herramienta cliente servidor puede ayudarnos a hacer informes profesionales
dentro del propio entorno de Visual Studio .NET, de
forma ágil y sencilla, definiéndose, a pesar de su juventud en el mercado, como una poderosísima herramienta
de generación de informes profesionales.
<<dotNetManía
un fichero XML con la definición del informe, un
fichero de extensión RDL que contiene en sí mismo toda la definición del informe de forma clara y
transparente.
Para conseguir el despliegue de los informes desde Visual Studio .NET tendremos que usar las propiedades del proyecto. Tres son los parámetros que
tendremos que configurar para que se haga el despliegue: OverwriteDataSources, cuyos valores pueden ser ‘True’ o ‘False’, y TargetFolder y TargetServerURL que indican respectivamente la ruta del
servidor y la ruta dentro del servidor en el que desplegaremos nuestros informes. Por último simplemente ejecutamos, como si de cualquier proyecto
se tratase y tendremos nuestro informe situado en
el servidor de informes.
El que exista la propiedad OverwriteDataSources es
realmente importante, tengan en cuenta que las cadenas de conexión no tienen por qué ser exactamente
iguales para acceder desde el entorno de desarrollo en
el que estamos suministrando las credenciales con las
que hemos entrado al sistema para visualizar la información, que desde el entorno de producción. Es bastante normal que el entorno de desarrollo acceda a
servidores de desarrollo y que el entorno productivo
a servidores de producción. Dentro de la seguridad
podemos programar que se haga impersonación, es decir
que el IIS deje pasar nuestras credenciales hasta el servidor (o servidores) desde donde se extraiga la información, pero también podemos decidir usar un nombre de usuario y una contraseña o un usuario de
Windows creado solamente para genera los informes.
Toda esta tarea de configuración y de administración de nuestro servidor de Reporting Services podría
quedar estropeada por que al desplegar un conjunto
de informes sobrescribiésemos los orígenes de datos.
Otro detalle interesante a mi juicio es que cada
una de las configuraciones admite estos parámetros,
es decir que podemos estar ejecutando en modo Debug
nuestros informes contra servidores de pre-producción o desarrollo y en el momento que estén terminados, simplemente cambiar el combo para decir que
desplegamos en productivo y ejecutar la aplicación.
33
Por Daniel Manzini
Arquitecto de Sistemas de Información
Ubica Solutions
Distribuir aplicaciones con .NET Remoting
Existe en .Net cuatro maneras de distribuir aplicaciones, a saber: Los servicios web, .Net
Remoting, Mensajería (MSMQ) y Componentes empresariales (COM+).
Los tres primeros métodos de distribución son controlados por el la plataforma .Net, por lo
que sólo explicaré estas tres primeras en los próximos párrafos.
<< ¿Cuando usar cada método
de distribución de aplicaciones?
<<dotNetManía
Esta variedad de elección tiene su
sentido, y radica en lo que quiere hacer
el cliente a fin de cuentas con el proyecto. Pueden variar mucho los requerimientos entre una aplicación de facturación y una de logística en tiempo
real, pero lo preguntas importantes que
debemos hacernos al inicio de estos
proyectos son:
• ¿Desarrollaré los dos puntos de la
aplicación (tanto el cliente como
el servidor)?
• ¿Qué grado de integración con
otras aplicaciones debo tener?
• ¿El usuario se conecta y se mantiene conectado, o consulta esporádicamente?
• ¿Puedo simular que sigue conectado cuando realmente lo desconecto?
• ¿El usuario recibe avisos desde el
servidor?
34
Se espera que se utilice un servicio
web cuando sea un dato externo, es decir
cuando no soy el dueño de la información. También utilizaré un servicio web
cuando no sé con exactitud qué plataforma tendrá el cliente o cuando desarrollo información que será solicitada
desde muchas aplicaciones diferentes
para facilitar la integración.
.Net remoting nos es útil cuando
deseamos distribuir una aplicación y
controlamos los puntos donde se va a
distribuir, esto significa por ejemplo que
el cliente nos dejará instalar .Net en sus
ordenadores clientes y servidor. Además
el modelo de remoting nos permite
tener distinta serialización (binaria, SOAP,
o extendida a partir de IFormatter), distintos canales de envío de mensajes
(TCP, HTTP, o extendido a partir de
IChannel), distintos modos de programación con los objetos (statefull or stateless) y compartir por valor o por referencia. Un servicio web es mucho más
restrictivo en estos últimos puntos.
Además .Net remoting puede enviar
mensajes desde el servidor hacia los
clientes.
Si podemos utilizar métodos en forma asíncrona (incluso un servicio web
nos crea los métodos BeginOperacion y
EndOperacion para utilizarlo asíncrono) ¿Porqué utilizar mensajería? Tanto
remoting como web service son tecnologías diseñadas para trabajar en forma
síncrona, mientras que la mensajería es
exactamente lo contrario, por lo tanto
viene con características difíciles de
implementar con los otros métodos.
Por ejemplo si un servidor se cae, los
mensajes se conservan en local hasta
que se restablece el servidor, momento en que se envían los mensajes automáticamente. Además es muy útil para
la integración de aplicaciones. El caso
de integración sería colocar un mensaje en una cola de mensajes que forma
parte de un flujo de trabajo de Biztalk,
o sin Biztalk, sería tener a un thread que
lea los mensajes que llegan y lo deserealice.
Como en el presente artículo no
tocaremos el tema de mensajería, vea
en la tabla 1 que puede ilustrar similitudes y diferencias entre .Net Remoting
y Web Service.
Pensando con el cliente
Aunque una aplicación se encuentre
dividida en n capas, se conoce generalmente como aplicaciones cliente servidor a aquellas aplicaciones donde un
cliente solicitaba información a un punto central por medio de una LAN. Con
tecnología DCOM muchas empresas
fueron creando productos distribuidos,
con la visualización en formularios, la
lógica en los objetos DCOM en otro
ordenador (servidor de aplicaciones) y
la base de datos en un servidor diferente (el servidor de datos). De este modo,
tenemos muchos aplicativos de gestión.
Cuando esta gestión no requiere un
tiempo vital en la respuesta (un control
de gasto, donde para pagar una factura
se tarda 60 días y se consulta su estado
una media de tres a cinco veces en esos
60 días) se puede distribuir por medio
<< dnm.plataforma.net
Remoting
Web Service
Reside en
Aplicación de consola
Windows Service.
ASP.NET
ASP.NET
Se comparte por
Valor o referencia
Valor
Modelo de estado
Con o sin estado
Con estado
Canales
TCP, HTTP, o propios
HTTP
Mensajes
Binario, SOAP, o propias
SOAP o HTTP con
query string
Cliente
Sólo .Net
Cualquiera
Sistema de tipos
CTS (de la plataforma)
XML Schema
primeros los llamaré en adelante
MBV(del inglés Marshal by Value) y a los
últimos MBR (del inglés Marshal by
Reference).
Por ejemplo tenemos el siguiente
método en la clase Empleado_ReglaNegocio
en remoto:
de servicios web, pero para aquellas aplicaciones donde el tiempo lo es todo
(aplicativos para control de ambulancias,
por ejemplo) hay que distribuirlo por
medio de .Net remoting.
Arquitectura de .NET
Remoting
Para entender la infraestructura de
remoting hay que saber tres conceptos:
proxies, canales y mensajes.
El proxy es un objeto que existe en
local que realmente impersona a uno que
existe en remoto; para poder realizar esta
tarea tiene que tener todos los miembros
iguales que el objeto remoto. Lo que hace
el proxy cuando se hace una petición en
local es delegar la petición por el canal
al objeto remoto. El canal representa,
entonces, la conexión entre la aplicación
local y la aplicación remota. La petición
que se realiza antes de llegar al canal se
serializa por medio de un formateador,
dando por resultado el mensaje que se
transmite; al llegar existe otro formatedor que deserealiza el mensaje y realiza
la petición en el entorno remoto. La figura 1 ilustra el proceso.
Distribución de proyectos
La finalidad es compartir objetos
que están mas allá de la frontera de la
aplicación. Éstos se pueden compartir
por valor o por referencia, y conceptualmente funciona igual que un parámetro por valor o por referencia. A los
Figura1
Con este ejemplo nos sacamos un
par de dudas sobre los valores de retorno en remoting, éstos pueden ser tipos
incluidos en la plataforma o clase propias.
Si la clase Empleado fuera MBV,
entonces obtendríamos en local una
copia del objeto remoto —hay que tener
en cuanta que este tipo de objeto se ejecutara en local—, mientras que si fuera
MBR tendríamos en local un puntero al
objeto remoto, que no es nada más ni
nada menos que el proxy. Viendo las
consideraciones de los objetos por referencia y por valor lo que puedo hacer es
tener las entidades de negocio (el empleado con su nombre, apellido, email y otros
datos) como MBV, mientras que las
reglas de negocio (BuscarUnEmpleado,
BuscarEmpleadoporMail, etc.) lo puedo
tener como MBR.
Cuando llegamos a este punto nos
damos cuenta que la clase Empleado debe
estar en los lados del remoting, es decir
en el cliente y en el servidor. Esto indica que por lo menos cuando trabaje con
remoting tendré tres proyectos: el cliente, el servidor y uno compartido donde
colocaré las clases que usa el cliente y
que solicita al servidor. Y para poder llegar a verlo trabajar tendré dos soluciones: la solución cliente con el proyecto
cliente y el proyecto compartido, y la
solución servidor con el proyecto servidor y el proyecto compartido.
En la vida real, es posible que la solución cliente se distribuya en 100 ordenadores. Ahora nos meteremos con el
proyecto compartido ¿es necesario poner
las clases? En otras palabras ¿es necesario poner la implementación en cada uno
de los 100 clientes? Bueno, ese es un
tema de seguridad y de mantenimiento. De seguridad porque .Net se puede
<<dotNetManía
Tabla 1
public Empleado ObtenerNuevoEmpleado()
{
return new Empleado();
}
35
<<dotNetManía
<< dnm.plataforma.net
36
descompilar si no tomamos los cuidados
necesarios, y de mantenimiento, porque
a la menor incidencia o cambio que tenga en una de las clases que esté en el proyecto compartido tendré que instalar los
100 clientes. Para ello, en el proyecto
compartido puedo usar clases abstractas
o interfases. Las clases abstractas pueden llegar a tener implementación, por
lo que es recomendable utilizar interfases que sólo se implementan en el servidor y como no tienen código de implementación, si alguien logra descompilarlas, pues no verá mucho. Es decir que
termino teniendo en la solución servidor tres proyectos, el servidor, el compartido que sólo son interfases, y un proyecto de transferencia que son las clases
que implementan las interfases del proyecto compartido, mientras que en la
solución cliente nos queda el proyecto
cliente y el proyecto compartido.
Las consideraciones sobre la distribución no acaban aquí. Los objetos
MBV se ejecutan en local, por lo tanto
necesitan en local el código para poder
funcionar. Como los objetos que voy a
compartir son entidades de negocio (a mi
me gusta decirles Objetos de Transferencia,
ya que en su momento los estudié como
parte del patrón Transfer Object 1) tendrá propiedades para acceder a los valores y cambiarlos si es necesario, y algún
método que puede responder usando los
valores internos del objeto, por ejemplo si estuviera hablando de la clase
Detalle de Factura, tendría el método
CalcularImporte que multiplicaría la propiedad Cantidad x PrecioUnitario.
¿Porqué no usar DataSet o DataSet
tipificados en lugar de objetos de transferencia? Es una buena pregunta. Como
ya vimos, cuando un objeto tiene que
pasar por un canal se serializa al partir
y se deserializa al llegar. Si tuviéramos
que distribuir una aplicación en una
LAN, usaría serialización binaria, pero
con el DataSet tengo un problema, por
más que le indique que es serialización
binaria se serializa como XML, siendo
de un tamaño 5 veces mayor. Eso me
trae problemas de tiempo y de carga de
red (acompaño un ejemplo con el nombre de serialización. Vea el material de
apoyo en dotnetmania.com).
A continuación voy a empezar a
dejar ejemplos de código, pero antes un
1
“Core J2EE Patterns” de Deepak Alur.
comentario sobre los ejemplos. El servidor puede implementarse de tres
maneras, una aplicación de consola (para
desarrollo viene muy bien), un servicio
de Windows, o en IIS. Por sencillez, los
distintos ejemplos servidores estarán hosteados por aplicaciones de consola.
Primer ejemplo de .NET
Remoting
Ya puesto en la distribución, pasamos a crear dos soluciones que puedan
ir demostrando algunas instrucciones
básicas para por el otro lado en el servidor abrir un puerto, con un determinado protocolo, para poder escuchar
las peticiones del cliente y por el lado
del cliente como abrir el canal (puerto
y protocolo) y obtener un objeto remoto. El código lo podrán encontrar bajo
el directorio EJEMPLO01.
Empecemos por el proyecto compartido, específicamente por las interfases:
mos una canal de comunicación, además le indicamos que usaremos el puerto 1234.
Luego usamos el método estático
RegisterChannel para registrar el canal.
Hay que tener presente que si fuera un
canal que ya se está usando puede dar
un error. Lo aconsejable es colocarlo
dentro de un try – catch o pedir con el
método GetChannel de la misma clase,
si retorno un nulo, registrarlo y sino elevar una excepción.
Con el canal registrado, ahora hay
que indicarle qué clases se pueden compartir. Tenemos que decirle el tipo de la
clase, un nombre del objeto (URI), y
por ultimo el tipo de objeto en remoting que es. En cuanto a los nombres,
por defecto cuando se comparte un
objeto que utiliza el transformador binario (el TCP si no le decimos lo contrario usa serialización binaria, mientras
que el HTTP usa serialización SOAP)
se coloca como nombre el nombre de
la clase seguido de un punto y la exten-
namespace ICompartido
{
public interface IAsignar
{
void AsignarNombre(string nombre);
string ObtenerNombre ();
}
}
Siguiendo con el ejemplo de
Empleado, cree una interfaz por la cual
le pueda asignar el nombre al Empleado.
Ahora pasa al proyecto que tiene la
implementación. Ver fuente 1.
La clase Empleado se compartirá por
referencia. Por tal motivo tiene que
heredar directa o indirectamente de
MarshalByRefObject. Ésta es otro motivo para recalcar el uso de las interfases
ya que .Net acepta tener una única clase base.
Para poder compartirse tiene que
haber una aplicación que lo lance, en
este caso será una aplicación de consola. Generalmente se usa este tipo de aplicación para pruebas y desarrollo, luego
lo ideal seria un servicio de Windows.
Ver fuente 2.
Ahora echemos un vistazo a lo que
escribimos para lanzar la aplicación.
Por medio de la clase TcpChannel, abri-
sión .REM, mientras que si es SOAP se
coloca la extensión .SOAP.
Para que el objeto pueda ser llamado la aplicación de consola debe estar
ejecutándose, por eso lo dejamos con el
ReadLine puesto.
Ahora que ya tenemos el servidor terminado, pasaremos al cliente. En este caso
también lo veremos por medio de una
aplicación de consola. Ver fuente 3.
En el cliente, llamamos al objeto
remoto, para ello, en este caso, usamos
el método Activator.GetObject que espera por lo menos dos parámetros: el primero, el tipo de objeto que se va a compartir, como en el cliente sólo tengo la
interfaz, coloca la interfaz que espero; y
el segundo, es la dirección donde está el
servidor, esta dirección está formada por
protocolo de comunición + dirección IP (o
nombre de maquina) + puerto que está esperando petición + nombre del objeto. Para ase-
<< dnm.plataforma.net
using System;
using System.Runtime.Remoting;
using ICompartido;
namespace Compartido
{
public class Empleado:MarshalByRefObject,IAsignar
{
string _nombre;
public Empleado()
{
Console.WriteLine(“Creando el objeto Empleado”);
}
#region IAsignar Members
public void AsignarNombre(string nombre)
{
Console.WriteLine(“Empleado.AsignarNombre * viejo valor = {0} * nuevo valor {1}”,_nombre,nombre);
_nombre=nombre;
}
public string ObtenerNombre()
{
Console.WriteLine(“Empleado.ObtenerNombre * retornando el valor {0}”,_nombre);
return _nombre;
}
#endregion
}
}
Fuente 1
using
using
using
using
System;
System.Runtime.Remoting;
System.Runtime.Remoting.Channels;
System.Runtime.Remoting.Channels.Tcp;
using Compartido;
namespace Servidor
{
class Servicio
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine(“Servicio.Main(): Se inicio el servicio”);
TcpChannel tcpch= new TcpChannel(1234);
ChannelServices.RegisterChannel(tcpch);
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Empleado),
“Empleado.rem”,
WellKnownObjectMode.Singleton);
Console.WriteLine(“Presione ENTER para terminar el servicio”);
Console.ReadLine();
}
}
Fuente 2
<<dotNetManía
}
37
<< dnm.plataforma.net
using
using
using
using
System;
System.Runtime.Remoting;
System.Runtime.Remoting.Channels;
System.Runtime.Remoting.Channels.Tcp;
using ICompartido;
namespace Cliente
{
class ClienteInicio
{
[STAThread]
static void Main(string[] args)
{
TcpChannel ch = new TcpChannel();
ChannelServices.RegisterChannel(ch);
IAsignar obj = (IAsignar) Activator.GetObject(
typeof(IAsignar),
“tcp://127.0.0.1:1234/Empleado.rem”);
Console.WriteLine(“Ya tengo el proxy creado”);
obj.AsignarNombre(“dotNetMania”);
string retorno = obj.ObtenerNombre();
}
}
}
Fuente 3
gurarme de que funcione en cualquier
ordenador puse 127.0.0.1 en lugar del
nombre de mi ordenador (también podía
haber puesto localhost).
¿Con ganas de probarlo? Compile
todo, ejecute el servidor, luego el cliente, y podrá ver como en el servidor solicitó el cliente.
Ahora vamos a poner un punto de
interrupción en el cliente donde decimos
que el proxy ya está creado. Paramos el
servidor si estuviera andando y volvemos
a lanzarlo, luego lanzamos el cliente hasta que llegue al punto de interrupción.
Según el código del cliente, el objeto ya
fue creado por el método GetObject, pero
si vemos en la consola del servidor, el
constructor aún no avisó que se creó el
objeto ¿Bug de .Net? ¿Llamo a mi psicólogo? No tranquilo, es así, ahora veremos el porqué.
<<dotNetManía
Tipos de objetos en .Net
Remoting
38
Los objetos MBR se pueden activar
de tres maneras: SingleCall, Singleton,
Activado desde el Cliente. Igualmente podemos decir que son dos divisiones genéricas: aquella donde el servidor administra
Nos cuestionaremos cada
decisión de diseño de
aplicaciones distribuidas y
veremos como podemos
resolverlas con .Net
Remoting aplicando las
mejores prácticas
la creación de un objeto (SingleCall y
Singleton), y aquella donde se administra
desde el cliente.
El SingleCall funciona igual que un
servicio web sin estado. Lo que sucede
es que cuando se hace la petición, se crea,
ejecuta el método y se destruye el objeto remoto. Esto hace que los objetos
SingleCall sean los más escalables de los
tres tipos. Generalmente se utilizan para
procesos largos. En contra, se puede decir
que no recuerda nada del usuario que está
utilizándolo.
Para ver un ejemplo, sólo cambiaremos en el ejemplo anterior, en el servi-
dor, el WellKnownObjectMode.Singleton a
WellKnownObjectMode.SingleCall. Al ejecutarlo, veremos que en el servidor se
construye dos veces el objeto Empleado;
esto es porque hay dos llamadas, una donde le asigno el nombre y una donde le
pido el nombre.
El Singleton es una sola instancia del
objeto remoto para todos los procesos
clientes que la llamen. Es muy útil para
compartir información entre clientes.
El tiempo de vida por defecto es de 5
minutos. Para ver cómo se comportan,
cambiaremos el servidor otra vez a
Singleton y ejecutaremos dos veces
seguidas el cliente. La primera vez que
ejecutamos el cliente, la variable nombre estaba vacía y le asignamos el nombre dotNetMania, la segunda vez le volvimos a asignar el mismo valor, sencillamente porque no se destruyó el objeto, mantenía el mismo valor y lo compartía con el nuevo proceso cliente. Los
pasos quedan reflejados en la consola
del servidor.
Por ultimo tenemos los objetos que
se pueden activar del lado del cliente. Al
activarse del lado del cliente puedo hacer
un new, lo cual se puede considerar una
ventaja porque el código queda mucho
mas fácil de leer, pero sólo podemos usar
el constructor por defecto, si quisiéramos otros constructores deberíamos
compartir la implementación. El problema más importante que tienen es la
escalabilidad, ya que como la activación
se maneja desde el cliente, varios clientes podrían crear instancias iguales; esto
con un tipo de objeto singleton sería una
sola instancia, y lógicamente consumiría
menos recursos del servidor.
En el caso que no quisiéramos compartir las interfases, podemos utilizar
una herramienta que se llama SoapSuds.
La herramienta SoapSuds no extrae la
información sobre distintos constructores, sólo el constructor por defecto.
Algo importante en torno al SoapSuds,
si tienes la versión 1.1 del Framework,
Microsoft te recomienda que esperes a
que exista un service pack para que funcione correctamente o que contactes a
un número de teléfono de soporte. Para
mas información ver (http://support.microsoft.com/default.aspx?scid=k
b;en-us;823445). Cabe aclarar que con
la versión 1.0 no tenía problemas.
<< dnm.plataforma.net
Una buena practica en .Net
Remoting
Para lograr todo esto, lo que deberíamos hacer es que la clase no se exponga
directamente, sino indirectamente como
respuesta a un método. Esto se conoce
como una factoría2, donde cada método
de la factoría mapea a un constructor.
Empezaremos por la interfaz:
public interface IFactoria
{
IAsignar CrearEmpleado();
IAsignar CrearEmpleado(string nombre)
}
Como se ve, sobrecargo el método
CrearEmpleado de igual manera que está
sobrecargado el constructor de la clase
Empleado, luego en el proyecto compartido agrego la clase Factoria e implemento la interfaz IFactoria. Ver fuente 4.
Como la factoría será llamada desde el cliente, necesitamos que herede de
MarshalByRefObject.
En la aplicación de consola que inicia el servidor, en lugar de exponer la cla2
3
namespace Compartido
{
public class Factoria:MarshalByRefObject, IFactoria
{
public Factoria()
{
}
#region Factoria Members
public IAsignar CrearEmpleado(string nombre)
{
return new Empleado(nombre);
}
public IAsignar CrearEmpleado()
{
return new Empleado();
}
#endregion
}
}
Fuente 4
se Empleado, ahora exponemos la clase
Factoria y lo dejamos Singleton porque
existirá una sola factoría para todos los
clientes. Esto lo hace escalable.
de en lugar de encapsular la creación
de un objeto, encapsulamos las llamadas del cliente al servidor. Pero eso será
tema de otro día al igual que otras pre-
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Factoria),
“Factoria.rem”,
WellKnownObjectMode.Singleton);
En el cliente, los cambios quedan de
la siguiente forma:
guntas. (¿Cómo hago para cambiar el
servidor de ordenador sin reinstalar
IFactoria factoria = (IFactoria) Activator.GetObject(
typeof(IFactoria),”tcp://127.0.0.1:1234/Factoria.rem”);
Console.WriteLine(“Ya tengo el proxy creado”);
IAsignar obj = factoria.CrearEmpleado(“dotNetMania”);
string retorno = obj.ObtenerNombre();
Como se verá, no puedo usar directamente el constructor específico de la
clase empleado, pero por medio de la
factoría obtengo los mismos resultados.
Esto constituye una buena práctica dentro de remoting, porque no
comparto la implementación, tengo la
posibilidad de usar constructores, y de
llamar indirectamente. La idea principal es que la interfaz no cambie, entonces el cliente se puede mantener. Bajo
esta misma buena práctica, también
podríamos usar el patrón Facade3, don-
“Design Patterns” de Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides
Idem II
todos los clientes? ¿Qué hago si en el
parque de ordenadores son todos
Windows Me o 98? ¿Dónde realizo el
host? ¿Y si quisiera usar esta misma
arquitectura en un solo puesto de trabajo, pero el día de mañana quiero
tener 5 ordenadores conectados a un
servidor? ¿Cómo hago para que un
objeto remoto permanezca siempre
activo? ¿Cómo se avisa el cliente desde el servidor? ¿Cómo puedo utilizar
Remoting con Multiservidores? ¿Cómo puedo aplicar seguridad?)
<<dotNetManía
Una ventaja que nos trae este tipo de
activación es la posibilidad de usar distintos constructores, como comparto
implementación, puedo hacerlo fácilmente. Encontrarán el ejemplo en el
directorio EJEMPLO02. En el cliente la
primera vez uso el constructor por defecto y luego otro constructor donde le asigno el nombre al empleado. En el servidor tuvimos que cambiar la manera de
publicar el objeto, ahora usamos dos llamadas a la clase RemotingConfiguration, la
primera a la propiedad ApplicationName,
para decirle el nombre, y por último al
método RegisterActivedServiceType y le
pasamos el tipo que queremos compartir
como parámetro. En el cliente, después
de registrar el canal, ejecutamos el método RegisterActivatedClientType y le pasamos el tipo de objeto y la dirección donde está el servidor como parámetros.
Pero, comparto implementación y
eso no me termina de convencer, no me
gusta mucho por principios de programación distribuida ¿qué puedo hacer
para tener la ventaja de constructores y
no tener que compartir implementación, y que sea escalable?
39
Por Francisco Charte
Torre de Babel
fcharte.com
Cambios sufridos por Object Pascal
en Delphi 8 .NET
Con el objetivo de poder generar código ajustado a la especificación común de lenguaje
(CLS) de la plataforma .NET, Borland ha tenido que introducir ciertos cambios en el compilador de Object Pascal que incorpora la versión 8 de Delphi.
<< Introducción
La primera versión de Delphi, a punto de ser liberada hace ahora casi una década, contaba con un evolucionado compilador de Pascal orientado a objetos,
conocido como Object Pascal, que generaba código
de 16 bits para el sistema operativo Windows. Con
Delphi 2 apareció el compilador que producía código de 32 bits para la plataforma Win32, nombre con
el que ha venido denominándose genéricamente a la
plataforma de ejecución que representan todas las versiones de Windows de 32 bits. Aunque con ciertas
<<dotNetManía
A diferencia de otros lenguajes .NET,
la actual versión de Object Pascal, en Delphi 8,
no contempla la posibilidad de crear alias
para los ámbitos con nombre
40
mejoras y extensiones a lo largo de los años, lo cierto es que ese compilador era, básicamente, el mismo
hasta la versión 7.
Delphi 8 es la primera versión de este producto
preparada para crear aplicaciones para la plataforma
.NET de Microsoft, lo cual ha obligado a construir
un compilador prácticamente nuevo que, en lugar de
código nativo, genera código IL. Éste debe ajustarse
a una especificación, conocida genéricamente como
CLS (Common Language Specification), que hace posible la reutilización del código entre distintos lengua-
jes, así como la interoperabilidad entre sus clases. Los
lenguajes .NET pueden contar con características que,
a pesar de estar presentes en el sistema común de tipos
o CTS, no formen parte de la CLS, que podríamos
ver como un subconjunto de aquél. El cumplimiento
con dicho subconjunto, sin embargo, es inevitable.
En la CLS se detallan ciertas construcciones que
deben ser contemplados en cualquier lenguaje, algunas de las cuales no existían en el lenguaje Object
Pascal como lo conocíamos hasta Delphi 7 o, de existir, no se comportaban exactamente como se indica
en dicha especificación. Por ello ha sido necesario
introducir algunos cambios, agregando nuevas palabras clave, eliminando ciertos tipos y alterando otros
para poner Object Pascal al mismo nivel, sino superior, que los demás lenguajes .NET.
La nueva sintaxis de Object Pascal, cuyos puntos
más destacables van a ser descritos en este artículo, no
están presentes actualmente en las versiones del compilador para Win32, pero Borland ha asegurado que
actualizará dicho compilador para guardar un paralelismo que facilite el mantenimiento de una misma base
de código entre proyectos Windows y proyectos .NET.
Módulos y ámbitos con nombre
En la plataforma .NET las definiciones de tipos se
almacenan jerárquicamente en ámbitos con nombre, o
namespaces, tales como System.Windows.Forms o
Microsoft.Windows. Las aplicaciones pueden definir
sus propios ámbitos con nombre, a fin de distribuir el
código, así como hacer referencia a otros para poder
usar los tipos definidos en ellos. El ámbito con nombre, sin embargo, es un concepto inexistente en Object
Pascal… hasta ahora.
<< dnm.lenguajes.net
program dotNetMania.Ejemplos.Programa1;
begin
…
En este caso la palabra program
indica que el código de este módulo se
introducirá en un ámbito denominado
dotNetMania.Ejemplos.Programa1.
El nombre físico del archivo coincidiría con el del ámbito, añadiéndose únicamente la extensión correspondiente.
El cuadro de diálogo de opciones
de proyecto, en Delphi 8, cuenta con
un apartado en el que puede indicarse un ámbito por defecto que se añadiría automáticamente como prefijo
al nombre de los módulos, no teniendo así que especificarlo en cada uno
de ellos. Los módulos de código fuente tendrían el nombre indicado tras
program o unit, pero los generados
por el compilador reflejarían el nombre completo incluyendo el ámbito
por defecto.
Figura 1. Podemos establecer un ámbito por
defecto en las opciones de proyecto
Para completar la posibilidad de trabajar con ámbitos con nombre, en esta
nueva versión la cláusula uses, utilizada para hacer referencia a módulos
externos, contempla la posibilidad de ir
acompañada de nombres completos de
ámbito. Por ejemplo:
amplia del concepto de privado. En la
CLS, sin embargo, un miembro private
debe ser visible exclusivamente para los
miembros de la clase de que forma parte,
pero nunca desde el exterior.
Con la visibilidad protegida ocurre
otro tanto. En Object Pascal un miem-
uses
System.Windows.Form, System.Drawing, System.Net,
dotNetMania.Ejemplos.Programa1;
A la hora de hacer referencia a un
determinado tipo, por ejemplo el nombre de una clase, una estructura o enumeración, pueden emplearse referencias completas, precediendo el identificador de tipo del nombre completo del
ámbito, o bien referencias simples siempre que éstas no entren en conflicto con
identificadores locales. Tras añadir la
anterior cláusula uses a un módulo, por
ejemplo, los identificadores Form y
System.Windows.Forms.Form serían equivalentes, haciendo referencia en
ambos casos a la clase Form del ámbito System.Windows.Forms.
Visibilidad de los miembros
de un tipo
Hasta la versión del compilador
incorporado en Delphi 7, Object
Pascal contemplaba la existencia en un
tipo, por ejemplo la definición de una
clase, de miembros privados, protegidos, públicos y publicados, utilizándose las palabras clave private, protected, public y published para especificar la visibilidad de un bloque de
declaraciones.
Todos los lenguajes .NET
pueden asignar a los miembros
de sus tipos una visibilidad entre
tres posibles: pública, protegida y privada. El problema estriba en cómo se entienden estos
términos, existiendo diferencias
entre los lenguajes .NET, para
ser más exactos la especificación
común, y Object Pascal.
En Object Pascal un miembro private es accesible desde la
propia clase y también desde cualquier punto del módulo en que se
ésta se haya definido. Podríamos
decir que es una interpretación
bro protected es visible desde la propia clase, las clases derivadas de ésta y
cualquier punto del módulo del que forme parte. En la plataforma .NET un
miembro protegido sólo puede ser visible en la clase donde se ha definido y las
clases derivadas a partir de ella, exclusivamente.
Las estructuras de datos
con métodos y propiedades
no deben ser vistas
como sustitutas de clases,
su aplicación se reduce
a tipos más o menos
simples aunque con alguna
funcionalidad
Cómo podría Object Pascal adecuarse a las exigencias de la CLS y, al
tiempo, evitar que el código existente dé
problemas a causa del cambio. Si Borland
hubiese optado simplemente por restringir la visibilidad de los miembros private y protected, evitando que sean
accesibles desde puntos del módulo externos a su clase, la conversión de proyectos de versiones previas sería más problemático. Por ello se eligió añadir dos
nuevos modificadores de visibilidad:
strict protected y strict private, que
serían funcionalmente equivalentes a los
protected y private de C# o Visual Basic.
Teniendo en cuenta estos nuevos
modificadores, ahora la definición de
<<dotNetManía
Los módulos Object Pascal, ya sean
módulos de programa, de paquete o
cualquier otro tipo, indican su nombre
tras palabras clave como program, unit,
library y package. Dicho nombre, además, establece indirectamente también
el nombre del archivo físico, algo habitual en Pascal.
La nueva versión del compilador de
Object Pascal contempla el uso de las
mismas palabras clave anteriores para
recoger no sólo el nombre del módulo,
sino la especificación de un ámbito completo. Podemos, por tanto, iniciar un
programa con una línea así:
41
<< dnm.lenguajes.net
una clase podría tener la estructura
siguiente:
tras que la segunda es un tipo por referencia, del que van creándose objetos
MiClase = class
strict private
MiembroPrivado: string;
strict protected
MiembroProtegido: string;
private
MiembroDeEnsamblado: string;
protected
MiembroProtegidoDeEnsamblado: string;
public
MiembroPublico: string;
end;
mediante asignación dinámica de
memoria. Además, las estructuras no
pueden contar con métodos virtuales ni
heredar unas de otras.
En Delphi .NET podríamos definir
una estructura de datos como la siguiente sin problemas, posibilidad inexistente en versiones previas del compilador
de Object Pascal.
Figura 2. El Explorador
de código contempla los nuevos
modificadores de visibilidad de
Object Pascal
<<dotNetManía
Estructuras de datos
más funcionales
42
En Object Pascal las estructuras de
datos, definidas como registros con la
palabra clave record, pueden contener
exclusivamente variables, campos de
datos que, además, son accesibles públicamente desde cualquier punto en el que
sea visible el tipo. En los lenguajes
.NET, por el contrario, las estructuras
de datos pueden contener miembros de
otros tipos, como puedan ser los métodos, las propiedades y los constructores, además de especificadores de visibilidad idénticos a los de las clases.
Incluso pueden implementarse interfaces en una estructura.
¿Cuál es, entonces, la diferencia
entre una estructura y una clase?
Básicamente que la primera es un tipo
por valor, que se aloja en la pila, mien-
TPunto = record
strict private
x, y: Integer;
public
constructor Create(FX, FY: Integer);
procedure Dibuja;
end;
A pesar de contar con un constructor, las variables de tipo TPunto se alojarían como valores en la pila, como un
número o un carácter, no como un objeto de una clase.
bilidad está ahora presente mediante la
nueva palabra clave final, cuyo uso se
muestra en el siguiente fragmento de
código:
ClaseBase = class
public
procedure Metodo: virtual;
end;
ClaseDerivada = class(ClaseBase)
public
// marcamos el método como de uso final
procedure Metodo; override; final;
end;
Este mismo concepto puede aplicarse también a la definición de una clase, convirtiéndola en clase de uso final,
es decir, una clase de la que no podrían
derivarse otras. Si, por ejemplo, definimos una clase especializada en una tarea
muy específica, no tendría sentido permitir la creación de otras a partir de ella.
En un caso así su cabecera incluiría la
palabra sealed. Ver figura 3.
ClaseEspecializada = class sealed
…
Figura 3. El compilador nos indica
que no podemos derivar de una
clase de uso final
Métodos y clases de uso final
El mecanismo de herencia de Object
Pascal, como el de cualquier otro lenguaje orientado a objetos, permite redefinir en una clase derivada miembros
declarados como virtuales en la clase
base. Esto hace posible la especialización de los métodos sin obstaculizar el
mecanismo de utilización genérica
conocido como polimorfismo. Lo que
no existía hasta el momento era la
opción de redefinir el método y, al tiempo, indicar que no podría redefinirse
más en clases derivadas. Dicho en otras
palabras: convertir un método heredado en un método de uso final. Esa posi-
Una clase de uso final es lo inverso
de una clase abstracta, pensada exclusivamente para servir como base de otras
y no para crear objetos a partir de ella.
Para que una clase fuese considerada
abstracta debía obligatoriamente contener al menos un método abstracto, sin
implementación, algo que también ha
cambiado en esta nueva versión. Ahora
podemos hacer abstracta cualquier clase simplemente añadiendo el modificador abstract en la definición:
ClaseAbstracta = class abstract
…
<< dnm.lenguajes.net
En la plataforma .NET cualquier
clase puede contar con miembros de clase, también conocidos como miembros
estáticos. Estos miembros, que pueden
ser variables, propiedades y métodos,
pertenecen a la clase en sí, no a los objetos que pudieran crearse de ella. Para
utilizarlos se dispone el nombre de la
clase y, a continuación, el nombre del
miembro. En la biblioteca de clases
.NET existen clases compuestas exclusivamente de miembros estáticos y que
son de uso final, ofreciendo servicios
para los cuales no es necesario crear
objetos previamente.
Object Pascal cuenta con la noción
de métodos de clase, pero su implementación al nivel del compilador es distinta de los miembros estáticos de una
clase .NET. No existía, hasta el momento, la posibilidad de definir variables y
propiedades de clase. En esta nueva versión los métodos de clase .NET se denominan métodos estáticos de clase, definiéndose mediante la adición de la palabra clave static al final. Las variables de
clase se definen en apartados class var,
equivalentes a var pero cuyos miembros
pertenecerán a la clase, y las propiedades de clase simplemente anteponiendo
la palabra class, como puede verse en el
siguiente fragmento de código.
Object Pascal es la posibilidad definir
unos tipos dentro de otros, es decir, tipos
anidados. Una clase, por ejemplo, podría
contener la definición de otra clase, que
sería o no accesible desde el exterior
dependiendo de la visibilidad que tenga.
La definición de un evento en
Delphi 8 contempla la necesidad de la
multidifusión, algo habitual en la plataforma .NET. Un mismo evento puede
estar vinculado a varios métodos, de tal
forma que todos ellos se ejecutarían en
el momento en que se genere dicho
evento. Para dar cabida a esta nueva
necesidad, la definición de un evento
// Clase TPunto con algunos operadores sobrecargados
TPunto = class
strict private
FX, FY: Integer;
public
// Operador +
class operator Add(A,B: TPunto): TPunto;
// Operador class operator Subtract(A,B: TPunto): TPunto;
// Operador string()
class operator Implicit(A: TPunto): string;
…
end;
// Implementación del operador de suma
class operator TPunto.Add(A,B: TPunto): TPunto;
begin
// Creamos un nuevo objeto con coordenadas
// suma de los dos puntos
result := TPunto.Create(A.X+B.X,A.Y+B.Y);
end;
MiClase = class sealed
private
class var
Variable: Integer; // una variable de clase
public
class procedure Metodo; static; // Método estático de clase
// Propiedad de clase
class property Propiedad: Integer read Variable write Variable;
end;
Esta clase, de uso final, tiene una variable de clase, un método estático de clase
y una propiedad de clase, de tal manera
que podría utilizarse completamente usando la sintaxis MiClase.Metodo o
MiClase.Propiedad, sin tener que crear
objeto alguno.
Otras novedades y cambios
Otra de las novedades que incorpora la nueva versión del compilador de
Un concepto novedoso introducido
en la plataforma .NET es la posibilidad
de asociar atributos a los tipos y sus
miembros, datos que se convierten en
meta-información que se almacena en
los ensamblados conjuntamente con el
código y puede recuperarse posteriormente con el mecanismo de reflexión. La
sintaxis con la que se usan los atributos
en Delphi 8 es prácticamente idéntica a
la de C#, situándose entre corchetes
delante del elemento al que se asociará.
Por último, también hay que mencionar los elementos del lenguaje que han
desaparecido por ser totalmente incom-
sustituye los apartados read y write, utilizados hasta ahora, por add y remove,
y la asignación directa de un método a
un evento por los procedimientos
Include y Exclude.
En una clase además de variables,
métodos, propiedades y eventos también
es posible ahora definir operadores. La
sobrecarga de operadores facilita la ejecución intuitiva de ciertas operaciones.
La sintaxis general queda resumida en el
siguiente fragmento de código:
patibles con la plataforma .NET, entre
los cuales destacaríamos el operador @,
la directiva absolute, los tipos Pointer
y PChar, el tipo Real48, los archivos tradicionales de Pascal file of tipo o los procedimientos de gestión de memoria
como GetMem y FreeMem. Todos
ellos tienen un tipo o mecanismo equivalente o similar en la plataforma .NET.
Como puede apreciarse, los cambios
sufridos por el lenguaje Object Pascal en
su adaptación al universo .NET han sido
muchos y, algunos de ellos, importantes.
Se han descrito los que el autor ha considerado de mayor relevancia pero sin
ánimo de ser exhaustivos. En la cartera
quedan otros temas, quizá de uso menos
habitual, como las clases que actúan complementando a otras (class helpers), alguna directiva nueva como $AUTOBOX
o el operador & para poder usar como
identificadores palabras que son reservadas en Object Pascal.
<<dotNetManía
Miembros de clase
43
Por Ángel Esteban
Software Architect
Alhambra-Eidos
Configuración de varios sitios Web
en IIS 6.0 con una misma dirección IP
En el presente artículo se va a comentar cómo configurar el servidor Web que nos ofrece
Windows Server 2003 para disponer de múltiples sitios Web con una misma dirección IP.
Esto nos va a suponer un ahorro considerable de direcciones IP. El mecanismo que nos va
a permitir reutilizar de esta manera las direcciones IP se denomina encabezado de host, y
es el concepto que pasamos a explicar a continuación.
<< Existe la posibilidad de utilizar la misma dirección IP
<<dotNetManía
entre diferentes sitios Web. Esta situación en la que
varios sitios Web comparten una misma dirección IP
se denomina multihosting (hospedaje múltiple o servidor multisitio).
Con un solo equipo y una instalación del servidor
Web IIS 6.0 (Internet Information Services) puede dar
la impresión de que disponemos de múltiples equipos, con un sitio Web distinto en cada máquina, cuando en realidad pueden estar en la misma.
Esta característica de servidor multisitio es bastante interesante para los proveedores de servicios de
Internet, ya que podrá ofrecer a cada cliente un nombre de dominio que tendrá asociado una dirección IP
distinta. Teóricamente se pueden crear un número ilimitado de sitios Web dentro de un mismo servidor.
En IIS 6.0 tenemos dos opciones a la hora hospedar diferentes sitios Web:
44
• Asignar varios nombres de dominio y direcciones IP a una tarjeta adaptadora de red, es decir,
una dirección IP distinta para cada sitio Web.
• Utilizar una única dirección IP en una tarjeta de
red y asignar varios nombres de dominio a la
misma dirección, cada nombre de dominio se
corresponderá con un sitio Web diferente. En
este caso a una misma dirección IP le corresponden varios sitios Web (multihosting).
• Un sitio Web va a distinguirse atendiendo a la
combinación de tres parámetros:
• Una dirección IP.
• Un número de puerto.
• Un encabezado de host.
Una vez que hemos utilizado
el encabezado de host dentro de IIS
ya no podemos utilizar la dirección
IP del servidor Web para acceder
al sitio Web predeterminado de
dicho servidor
El encabezado de host (host header name) es el nombre con el que los usuarios conocen el sitio Web, es
decir, se corresponde con el nombre de dominio asociado a un sitio Web, por ejemplo www.dotnetmania.com
es el encabezado de host del sitio Web de esta revista.
Cuando un cliente solicita una página a través del
navegador Web la cabecera de petición HTTP correspondiente contendrá, además de la dirección IP de la
máquina, el nombre de dominio que aparece en la
URL. Esa información es detectada por el servidor
Web e interpretada de forma conveniente para determinar qué sitio Web ha demandado el cliente, de esta
forma se podrá diferenciar los sitios Web que tienen
asignados una misma dirección IP.
Se debe recordar que para poder utilizar un nombre de dominio lo debemos registrar en el sistema de
<< dnm.servidores.iis
nombres de dominio (DNS, Domain
Name System) a través de un servidor de
nombres.
El encabezado de host es una característica ofrecida por el protocolo
HTTP 1.1, por lo tanto los navegadores que se conecten a nuestro servidor
también deben soportar esta característica, que nos permitirá distinguir entre
los diferentes sitios Web asociados a una
misma dirección IP. El encabezado de
host es soportado por los navegadores Internet Explorer y Netscape
Communicator a partir de sus versiones 4.0.
Los navegadores más antiguos no
soportan los encabezados de host, por
lo tanto, en el caso de que varios sitios
Web compartan la misma dirección IP,
el servidor Web no podrá determinar a
qué sitio Web quiere acceder el usuario, ya que no ha enviado la información que identifica el nombre del sitio
Web (nombre de dominio) al que se
quiere acceder. En estos casos lo recomendable es actualizar la versión del
navegador Web.
número de puerto y que se distingan por
el encabezado de host.
Configurando el sitio Web
La herramienta de configuración de
IIS 6.0, es decir, el Administrador de
Servicios de Internet (Administrador de
Internet Information Services) nos ofrece la posibilidad de realizar la configuración de los encabezados de host para
nuestro sitio Web. Esto nos lo permite
hacer a través de la hoja de propiedades
de sitio Web.
Al diálogo de identificación avanzada de sitio Web llegamos desde la hoja
de propiedades del sitio Web pulsando
el botón “Avanzadas”. En el diálogo que
aparece en la siguiente figura se nos permite configurar el encabezado de host,
así como la dirección IP y el número de
puerto del sitio Web.
Figura 2. Especificando el encabezado
de host
ción IP ni en el encabezado de host,
automáticamente el servidor Web mantendrá este sitio Web detenido hasta que
no se haya subsanado el error.
El encabezado de host también lo
podemos indicar a la hora de crear un
nuevo sitio Web. En el segundo paso
del asistente de creación del sitio Web
aparece una caja de texto en la que podemos especificar este dato, tal como se
puede apreciar en la figura. Por defecto el encabezado de host aparece en
blanco.
Utilidad del encabezado
de host
Figura1. Identificación avanzada
de sitio Web
Figura 3.Asistente para la creación
de un sitio Web
En este diálogo se ofrecen una serie
de botones, “Agregar”, “Quitar” y
“Modificar” que nos permiten cambiar
las diferentes configuraciones de identificación para el sitio Web, cuando pulsamos alguno de estos botones aparece
otro dialogo, como el de la siguiente
figura, que nos permite modificar o añadir las propiedades que van a identificar de forma única un sitio Web.
También es posible indicar el número
de puerto SSL en el caso que se utilicen
conexiones seguras.
Si se modifica la configuración de
un sitio Web y entra en conflicto con
otro existente, es decir no se diferencian
ni en el número de puerto ni en la direc-
Una vez que hemos utilizado el
encabezado de host dentro de IIS ya no
podemos utilizar la dirección IP del servidor Web para acceder al sitio Web
predeterminado de dicho servidor. Si
queremos hacer esto debemos asignar
la dirección IP del servidor a un sitio
Web determinado como si fuera un
encabezado de host, es decir, el encabezado de host sería la propia dirección
IP y no un nombre de dominio.
Con este apunte finaliza este artículo que espero sea de gran utilidad a la
hora de configurar servidores Web con
Internet Information Services.
<<dotNetManía
Ya sabemos que un sitio Web dentro de IIS 6.0 viene definido por la combinación de tres parámetros: dirección
IP, número de puerto y encabezado de
host. Para que un sitio Web se distinga
de otro debe diferenciarse en al menos
en uno de los parámetros citados anteriormente.
Los sitios Web pueden compartir
dos cualesquiera de sus tres componentes de identidad con otros sitios Web,
siempre y cuando se diferencien en el
tercero.
De esta forma dos sitios Web pueden tener el mismo encabezado de host
y la misma dirección IP pero distinto
número de puerto. Si asignamos a un
sitio Web un número de puerto distinto del estándar (el puerto 80), nuestros
clientes deberán escribir el número de
puerto en la URL.
De las múltiples combinaciones que
pueden surgir a la hora de albergar distintos sitios Web, la más interesante
puede ser la de sitios Web que compartan la misma dirección IP y el mismo
45
Por Pedro Gómez
Alhambra-Eidos
Particiones de Directorio de Aplicaciones
Active Directory en Windows 2003 permite la creación y configuración de una nueva partición de directorio llamada Partición de Directorio de Aplicaciones. Esta partición se replica
sólo en los controladores de dominio determinados y siempre que ejecuten Windows 2003.
<< Las aplicaciones y los servicios podrán utilizar esta par-
tición como base de datos y utilizar así las ventajas que
ofrece Active Directory. Los miembros del grupo de
administradores del Enterprise pueden crear y administrar dichas particiones.
Estas particiones tienen la ventaja de que sus datos
se replican con otros controladores de dominio del
bosque para proporcionar redundancia y tolerancia a
errores. ¡Sólo con los controladores de dominio especificados! Con lo cual, replicaremos en los controladores que nos resulten localmente más útiles.
Otra ventaja es que las aplicaciones y los servicios que utilizan LDAP podrán seguir utilizando
este protocolo para almacenar datos y acceder a los
mismos.
Al igual que una partición de dominio, la partición de aplicaciones forma parte del espacio de nombres del bosque y sigue la misma nomenclatura. Sus
tres posibles ubicaciones en un bosque serían:
<<dotNetManía
• Nuevo árbol de bosque
46
Estas particiones tienen la ventaja de que
sus datos se replican con otros controladores
de dominio del bosque para proporcionar
redundancia y tolerancia a errores
• Árbol secundario de una partición de directorio
de aplicaciones
• Árbol secundario de una partición de directorio
de dominio
KCC (Generador y Comprobador de Topología de
Réplica) mantiene automáticamente la topología de
replicación de todas las particiones y mantiene la misma programación de réplica que las particiones de
dominio.
También está la ventaja de que los objetos almacenados en una partición de directorio de aplicaciones no se replican al Catálogo Global. El motivo es evitar que las consultas LDAP a distintos Catálogos
Globales no devuelvan datos incoherentes.
Creación de una partición de Aplicación
1. Abrimos Símbolo de Sistema y ejecutamos ntdsutil
2. Escribimos domain management
3. Desde domain management, escribimos connection
4. Desde connection, escribimos connect to server nombreservidor
5. Desde connection, escribimos quit
6. Desde domain management, podemos hacer lo
siguiente:
• Para crear una partición escribimos:
create nc particióndirectorioaplicaciones controladordedominio
• Para eliminar una partición escribimos:
delete nc particióndirectorioaplicaciones
<< dnm.servidores.windows
nar la última réplica de una partición de
aplicaciones ya que podemos perder los
datos que estén en esa partición definitivamente.
Mostrar la información
sobre una Partición del
Directorio de
Aplicaciones
Figura 1. En el ejemplo, creamos una partición de directorio de aplicaciones llamada test y
que se va a ubicar en un dominio llamado exchange2003.aes. El parámetro null sirve para
especificar que queremos crear dicha partición en el controlador al cual estamos
conectados. Si no, tendremos que escribir el nombre DNS del controlador de dominio
1. Abrimos Símbolo del Sistema y escribimos ntdsutil
Otra ventaja es que las
aplicaciones y los servicios
que utilizan LDAP
podrán seguir utilizando
este protocolo para
almacenar datos y acceder
a los mismos.
Figura 2. En el ejemplo, añadimos una réplica de la partición test
a un controlador de dominio llamado exchange2.exchange2003.aes
Agregar o eliminar una
Réplica de una Partición de
Directorio de Aplicaciones
Una réplica es una instancia en otro
controlador de dominio.
Los pasos a seguir son los siguientes:
• Para agregar una réplica escribimos:
Add nc replica particióndirectorioaplicaciones controladordedominio
Figura 3
• Para eliminar una réplica escribimos:
Remove nc replica particióndirectorioaplicaciones
Para añadir o eliminar una réplica,
podemos utilizar también el comando
null. Debemos tener cuidado al elimi-
2. Escribimos domain management
3. Desde domain management, escribimos connection
4. Desde connection, escribimos connect
to server nombreservidor
5. Desde connection, escribimos quit
6. Desde domain mangement escribimos
list
<<dotNetManía
1. Abrimos Símbolo del Sistema y escribimos ntdsutil
2. Escribimos domain management
3. domain management, escribimos
connection
4. Desde connection, escribimos connect to server nombreservidor
5. Desde connection, escribimos quit
6. Desde domain mangement podemos hacer lo siguiente:
47
<< dnm.servidores.windows
También está la ventaja
de que los objetos almacenados
en una partición de directorio
de aplicaciones no se replican
al Catálogo Global
Al crear la zona nos aparecerá la opción de la
figura 5.
También, mediante la línea de comandos se puede implementar de la siguiente manera:
Figura 4
1. Abrimos Símbolo de Sistema
2. Escribimos: dnscmd nombreservidor /createbuiltindirectorypartitions /Domain/Forest/AllDomains
Figura 5
En el servidor DNS se habrá creado la zona correspondiente a la partición. De no ser así, se puede crear
manualmente desde la consola de DNS. Ver figura 4.
nombreservidor es el nombre DNS del Servidor
DNS y es obligatorio.
createbuiltindirectorypartitions Crea una partición
de directorio de aplicaciones predeterminada.
/Domain Crea una partición de directorio de aplicaciones DNS predeterminada para todo el dominio
donde se encuentra el servidor DNS especificado.
/Forest Crea una partición de directorio de aplicaciones DNS predeterminada para todo el bosque
donde se encuentra el servidor DNS especificado.
/AllDomains Crea una partición de directorio de
aplicaciones DNS predeterminada de todo el dominio en un servidor DNS de cada dominio del bosque.
El parámetro nombreservidor se omite para
/AllDomains ya que el equipo en el que se ejecute
este comando debe unirse a un dominio del bosque
en el que se desean crear todas las particiones de
directorio de aplicaciones predeterminadas de todo
el dominio.
Se libera la Beta 1.0
de SharpDevelop: Fidalgo
Se libera la Beta 1.0
del Proyecto Mono
SharpDevelop Fidalgo (beta 1 de SharpDevelop) ya está terminado y ya
está en el modo de sólo corregir bug. Cuenta con características como
integración con NUnit, Holding, Assambly Analyzer, C++.NET backend, panel mini visor de clases, conversor VB.NET a C#, mejora de
los File Templates y de la importación/exportación a Visual Studio .NET.
SharpDevelop o #develop es un IDE gratis para proyectos de VB.NET
y C# para la plataforma .NET. Es Open Source bajo licencia GPL
Tras la adquisición de Novell, Mono el proyecto del Miguel de Icaza, una implementación open source del framework .NET para Linux, Unix y Windows.
Mono pretende aportar un entorno de desarrollo para Linux con la mayor
productividad conocida, permitir a los desarrolladores escribir aplicaciones
del lado del servidor, aplicaciones cliente y servicios web y desplegarlos bajo
Linux, Solaris, MacOs X, Windows NT/XP y otros sistemas UNIX.
Esta es la primera beta de dos previstas antes de publicar la versión
definitiva.
http://www.go-mono.com/archive/beta1/beta1.html
Más información en: http://www.icsharpcode.net/OpenSource/SD/
noticias.noticias.noticias.noticias
<< dnm.opensource.net
por Juanjo Ariño
lphant, primer peer to peer bajo .NET
lphant es un proyecto de código abierto que implementa un cliente peer to peer (p2p)
para la red eDonkey/eMule. Está escrito en C# íntegramente y es compatible con eMule
y eDonkey (pudiendo incluso continuar descargas iniciadas con estos programas).
<<dotNetManía
proyecto lo hemos desarrollado un
<< Este grupo
de programadores que inicialmente
50
trabajábamos con C++ y que colaborábamos en el desarrollo de eMule. Las motivaciones iniciales fueron aprender C#, el
entorno .NET y comprobar la potencia de
.NET en una aplicación exigente en cuanto a comunicaciones, multihilo, CPU, estabilidad y manejo de memoria.
Una aplicación p2p para la red eDonkey maneja cientos de conexiones simultáneas, tanto
entrantes como salientes y no sólo se limita a
TCP sino que usa intensivamente UDP. Todas
estas conexiones tienen que sincronizarse para
acceder a ficheros o a listas, por lo que las capacidades multihilo hay que explotarlas. Además,
el programa debe de permanecer muchos días
sin reiniciarse por lo que se tiene que ser extremadamente cuidadoso con la estabilidad y el
consumo de memoria. El uso de la CPU también es importante ya que debe de funcionar
en background mientras el usuario hace un uso
habitual del resto de aplicaciones, sin notar un
descenso en su rendimiento (continuamente
mientras el ordenador se dedica a otras tareas
(por ejemplo reproducir video con buena calidad)). Por otro lado debe tener un interfaz de
usuario fácil de usar y un aspecto que no se
puede alcanzar con los controles estándar.
Antes de aparecer la plataforma .NET, para
desarrollar una aplicación con estos requerimientos la opción más lógica era C++.
Pero con la llegada de .NET nos pareció
buena idea comprobar si puede hacer sombra a C++ en su propio terreno. En el peor
de los casos aprenderíamos C# y sabríamos
cuales son sus puntos flacos.
Después de varios meses de desarrollo (al
ser GNU, en nuestros ratos libres), de sacar
más de 15 versiones, de contar con más de
3.000 usuarios simultáneos y 70.000 descargas del programa, hemos comprobado
que .NET es perfectamente válido para este
tipo de desarrollos. Incluso lphant supera en
algunos aspectos a programas escritos en
C++ más trabajados como el eMule.
Teniendo en cuenta que la gran mayoría de
usuarios de este tipo de aplicaciones no tiene instalado .NET Framework, este tipo de
proyectos supone una justificación para que
el .NET Framework se instale en una gran
cantidad de ordenadores domésticos. Por
nuestra experiencia, la necesidad de instalar
.NET Framework no está siendo un inconveniente serio una vez pasada una fase de reticencia inicial dónde tampoco se sabía cómo
funcionaba el programa.
A lo largo del proyecto hemos disfrutado de
las ventajas que supone emplear .NET.
Particularmente hemos comprobado como
no nos hemos tenido que preocupar de los
detalles de la implementación y nos hemos
podido centrar en la resolución del problema.
Otra de las virtudes a destacar ha sido el excelente control de excepciones que lleva .NET,
por lo que es bastante fácil resolver los bugs
que se van encontrando. Además cuando a
algún un usuario le salta una excepción nos
informa con el volcado de pila si necesidad de
compilar versiones de debug especiales.
Los principales problemas encontrados
durante el desarrollo de este proyecto han
sido los relacionados con el interfaz gráfico (donde, por falta de funciones de .NET
se ha tenido que usar la API de Windows)
y el manejo de memoria (donde pagamos
nuestra falta de experiencia para trabajar
con memoria manejada).
De cara a los desarrolladores interesados en
aprender .NET, el código fuente de lphant
puede ser muy didáctico ya que cubre
muchos e importantes aspectos de la programación en .NET:
Comunicaciones: lphant exprime al máximo la capacidad de comunicaciones de
.NET, soportando cientos de conexiones
simultáneas tanto TCP como UDP
Multithreading: lphant maneja una cantidad de threads muy alta que deben de ser
sincronizados para acceder a ficheros comunes o a listas (Hashtables, ArrayList,…).
Modularidad: lphant utiliza la facilidad que
proporciona .NET para hacer aplicaciones
modulares mediante namespaces y proyectos separados.
Servicios web. El núcleo de lphant es autónomo e independiente del interfaz, de esta
manera el interfaz puede funcionar de forma remota, ya que el núcleo expone sus
objetos como servicios web que el interfaz
consume.
Creación de controles y WinForms. Para
el interfaz gráfico de lphant se han creado
diversos controles, especialmente complejos por la interacción con la API WIN32
son los controles derivados de ListView creados. Por otro lado lphant dispone de un
motor de skins para los diversos controles.
XML: lphant demuestra cómo usar archivos XML ya que los usa para la mayoría de
archivos que necesita, sólo en aquellos casos
en los que necesita ser compatible con eMule
o eDonkey no usa XML.
Multilenguaje: lphant tiene un motor multilenguaje propio basado en XML
Portabilidad: El núcleo de lphant se compila perfectamente con MONO.
Lamentablemente al no estar totalmente
soportados los WinForms en MONO no
puede decirse lo mismo del interfaz.
lphant destaca por tener un núcleo al que se
accede tanto en local como por acceso
remoto mediante SOAP, completamente
separado del interfaz gráfico. El núcleo de
lphant es una librería que expone todas las
funcionalidades de la red eDonkey, por lo
que cualquiera puede integrar la red eDonkey
en sus aplicaciones con muy poco esfuerzo.
Invitamos a los desarrolladores interesados
en el proyecto a colaborar o a aprender con
un programa muy divertido de desarrollar.
En el foro de desarrollo de la página web
de lphant damos soporte a la gente interesada en el código y que desea saber cómo
funciona.
Para más información
http://www.lphant.com
dnm.comunidad.net
<<
dnm.comunidad.net
Un veterano a la última
La XI convocatoria del Master Eidos en Tecnologías Avanzadas
para el Desarrollo de Software
para
desarrolladores tienen tanta solera
como el Master Eidos en Desarrollo de
Software. En el curso 2004/2005 entra
en su undécima convocatoria. Son once
años formando a lo más granado de los
programadores de nuestro país y de
Latinoamérica. Fundamentalmente
centrado en las tecnologías de desarrollo de Microsoft, viene haciendo de la
programación en .Net su asunto troncal desde hace ya tres años, de hecho la
aparición de la novena edición (curso
2002/2003) prácticamente coincidió
con el lanzamiento al mercado de Visual
Studio .Net.
Para que nos hablen de la versión
prevista para el curso 2004/2005 nos
hemos reunido con algunas de las personas que en Alhambra-Eidos mantienen algún tipo de responsabilidad sobre
dicho curso, y que además son colaboradores habituales de este medio: Luis
Miguel Blanco: Coordinador y autor
de una buena parte de los contenidos
del Master, así como tutor de la versión
virtual. Pepe Hevia: Instructor de la
versión presencial y creador destacado
del material didáctico. Marino Posadas:
Coordinador de muchas de las once versiones realizadas hasta ahora, instructor
en ambas modalidades, autor de documentación y Microsoft MVP en 2003 y
2004 (.Net Framework y Visual C#, respectivamente). Y por último, Antonio
Quirós, que realizó el primer diseño del
Master allá por el año 93 y hoy continua ayudando en la adecuación programática que cada año se realiza.
dnm: Podríais hacernos una breve
reseña histórica de vuestro Master.
Antonio Quirós: Bueno, si no hay
más remedio nos remontaremos a la
prehistoria (risas). Allá por 1992 comenzó a cobrar vida el área de formación de
la entonces denominada Grupo EIDOS.
Nuestro ámbito de especialización,
cliente/servidor. Como una consecuencia
natural derivamos hacia Visual Basic y SQL
Server. Más tarde fue
la programación web,
luego XML y los servicios web. Este año en
Alhambra-Eidos nos
hemos decantado por
la programación para
dispositivos móviles.
En fin que cada convocatoria tiene su leit
motiv y a poco que
analicemos los temaAntonio Quirós, General Area Manager de Alhambra-Eidos
rios de las once convocatorias hasta ahora
realizadas caeremos en
como muchos recordarán, era Clipper.
que estamos analizando la historia tecImpartíamos seminarios, cursos, confenológica del desarrollo de software en
rencias, etc. En seguida nos planteamos
los últimos once años.
el diseño de un programa de más calaTodo esto, por supuesto, en cuanto
do que sirviera para reglamentar y proa lo tecnológico. Si nos centramos en
fundizar en el conocimiento de los prolos aspectos organizativos es de destagramadores que, por aquel entonces, aún
car también que el Master pasa por dos
mantenían una fuerte composición autoetapas claramente diferenciadas. Una
Tampoco podíamos permanecer ajenos a la aparición
de SQL Server Reporting Services. Consideramos
que esta es una de las más importantes noticias
para el mundo del desarrollo y, por tanto,
teníamos que darle cabida en nuestros programas
didacta en sus perfiles. Existía un enorme déficit en el conocimiento de la
orientación a objetos y, yo creo que desde entonces eso centraba nuestra propuesta formativa. Así surgió la primera
convocatoria. Luego vino Windows y el
primera es la que se produce desde 1993
a 1997 en que sólo se realizan versiones
presenciales y otra segunda que acaece
desde 1998 donde ponemos en circulación las primeras ediciones virtuales y
mixtas. En los primeros años los temas
<<dotNetManía
<< Pocos programas formativos
51
<< dnm.comunidad.net
<<dotNetManía
Marino Posadas, Software Architect
de Alhambra-Eidos
52
tecnológicos y académicos primaban
sobre los demás. Desde 1998 hay también una fuerte componente logística
en toda la labor previa al lanzamiento.
En este momento se alternan las tres
mecánicas de organización y podemos
decir con orgullo que todos los años
liberamos al mercado tanto titulados que
han hecho el Master en su versión presencias como en las virtual o mixta.
Respecto al alumnado también aparecen cambios históricos curiosos. Los
primeros asistentes procedían casi exclusivamente del mundo profesional. Su afán
era reciclarse tecnológicamente, estar a
la última, poder llegar a tecnologías que
sus empresas les demandaban. Más tarde
se realizó la incorporación del mundo universitario. Algunos alumnos venían a realizar el Master como un estudio de postgrado que les permitiera ganar puntos
curriculares, ya que nuestro producto
siempre ha gozado de un amplio prestigio empresarial. Por último, hay que reseñar que tras la adecuación realizada el año
pasado para adecuar los contenidos del
Master para que pudieran servir de base
en la obtención de la certificación
MCAD, el alumno que busca la obtención de dicha certificación se ha incorporado también a nuestra peculiar fauna.
dnm: ¿Qué asunto consideráis que en
este momento es el principal valor aportado a la colectividad de desarrolladores?
Marino Posadas: Creo que existen
varios valores añadidos. Por un lado, la
existencia de manuales on-line que permiten un primer acercamiento a una tecnología e incluso decidir si queremos o
no profundizar en un tipo de conocimientos. Por otro, los cursos tutorizados
suponen que no solo vas a seguir un
manual fijo y previsto para tu progreso,
sino que si -como muchas veces pasa- te
atascas, un profesor asociado a cada
módulo puede darte respuestas tanto en
línea como en diferido. Y, por supuesto,
no nos olvidemos de la revista
Algoritmo, donde se publican artículos
de calidad sobre novedades tecnológicas, que suponen una avanzadilla y una
nota de atención sobre posibles opciones a seguir en un futuro cercano. Son
casi 10 años de publicaciones desde que
Algoritmo estaba en papel, y todavía se
la sigue considerando un producto referente para miles y miles de desarrolladores y profesionales de las TIC.
Finalmente, si además queremos algún
manual a bajo precio para leer en el
metro, La Librería Digital completa perfectamente este panorama.
dnm: Fuisteis de los primeros en
abordar el formato eLearning de modo
serio para este tipo de programas for-
mativos. ¿Cómo valoráis estos años de
trabajo al respecto?
Luis Miguel Blanco: Ha resultado
en una experiencia francamente positiva.
Ser pionero te otorga una ventaja enorme si organizas una buena estructura formativa, marcando la pauta al resto que
todavía no ha empezado. De esa manera
te conviertes en el espejo en el que se
miran todos aquellos que se propongan
acometer un proyecto similar al tuyo.
Por supuesto que esta situación te
obliga a tener que trabajar más, ya que
para gran parte de los procesos a desarrollar, léase elaboración y organización
de los contenidos, sistemas de evaluación, establecimiento de relaciones con
el alumnado, etc., debes permanecer en
constante innovación, puesto que no hay
nadie todavía que haya realizado nada
similar. Sin embargo, y volviendo al
punto anterior, abonas el terreno para
los demás y eso supone un elemento
posicionador muy importante en el mercado de acciones formativas eLearning.
Centrándome ya en la parte de ele-
De izquierda a derecha: Marino Posadas, Luis Miguel Blanco y Pepe Hevia
En este momento se alternan las tres mecánicas
de organización y podemos decir con orgullo
que todos los años liberamos al mercado tanto titulados
que han hecho el Master en su versión presencial
como en la virtual o mixta
<< dnm.comunidad.net
Novedades de la versión para el curso 2004/2005
Un módulo específico de Introducción a la ingeniería de software
Un módulo específico de Programación de Dispositivos Móviles con Visual Studio
.Net
Ampliación del módulo de SQL Server 2000 para dar cabida a Reporting Services
Actualización de todos los módulos de Java para dar cabida a las novedades
de dicho mundo
como los foros, la cafetería, el Tablón
de Anuncios. Dichas áreas permiten
tener la sensación de que realmente existe un colectivo paralelo a donde dirigirse, existiendo un grupo de personas
con las mismas inquietudes y necesidades que nosotros.
dnm: ¿Qué te planteas cuando diseñas y confeccionas el material que luego formará cada uno de los módulos del
Master?
Pepe Hevia: Ante todo, la ilusión
de poder proporcionar al usuario del
módulo todos los conocimientos posibles, de cara a facilitar que la asimilación de todos los conceptos que se tratan en el curso le resulte una experiencia asequible y agradable. Para ello
se introducen también otro tipo de
nociones ajenas al master, pero que en
cierto modo puedan verse relacionadas
indirectamente con él -lo cuál implica
conocer, estudiar, investigar todos esos
elementos y saber relacionarlos-. De
esta manera el alumno puede entender
toda la temática, dentro del contexto
en que se va a aplicar y siempre desde
la perspectiva de “romper los mitos”.
Mi misión radica en hacerlo tan práctico y claro como sea posible -por
mucho trabajo que esto lleve- y tan
ameno como me gustaría que me contaran las cosas: con humor, ejemplos
de la vida real, etc. Todo ello sin perder de vista el rigor, la seriedad y la responsabilidad que todo este proyecto
conlleva, por supuesto.
dnm: Qué novedades aporta la versión para el curso 2004/2005
Antonio Quirós: Este año es un
poco curioso. En otras ocasiones hemos
actualizado en el sentido de quitar unas
cosas y poner otras. Sin embargo para
el curso 2004/2005 sólo hemos ampliado, es decir que estamos ante una ver-
sión, como se dice literariamente, corregida y aumentada. A nuestro programa
del año pasado, ya fuertemente actualizado y estructurado a través de la noción
de servicios web, le hemos añadido
varias cosas. En primer lugar, un módulo dedicado a introducir en el ámbito de
la ingeniería del software. El perfil del
desarrollador cada vez es más alto y, por
tanto, queremos huir de un programa
solo tecnológico. Tenemos que hablar
también de arquitectura, de metodologías, de gestión de proyectos, de aseguramiento de la calidad, etc. Asimismo,
hemos introducido un módulo de programación de dispositivos móviles con
Visual Studio .Net. Consideramos que
este es el entorno hacia el que hoy todos
los desarrolladores deben girar la vista,
ya que si aún no han tenido la oportunidad de hacer alguna aplicación al respecto, les faltan décimas de segundos
para que sus jefes les hagan caer el
correspondiente marrón. Así, pues, desde la óptica de siempre, es decir la arquitectura multicapa ahora cubrimos la
capa de interfaz con tres niveles diferentes: Windows, Web y dispositivos de
movilidad. Tampoco podíamos permanecer ajenos a la aparición de SQL
Server Reporting Services. Consideramos que esta es una de las más importantes noticias para el mundo del desarrollo y, por tanto, teníamos que darle
cabida en nuestros programas. Para
hacerlo hemos ampliado nuestro curso
de SQL Server 2000 a fin de introducir
dicha tecnología. Por último, y aunque
eso es menos interesante para los programadores que trabajan con herramientas Microsoft, hemos actualizado
también los contenidos de los módulos
de Java para dar cabida a las novedades
que en dicho mundo se han producido
en los últimos tiempos.
<<dotNetManía
mentos que componen la oferta formativa de Alhambra-Eidos, creo que hemos
conseguido combinar armoniosamente
todas las tecnologías a nuestra disposición para lograr una relación tutoralumno altamente cercana a la presencial. Uno de los más importantes recursos lo compone el uso de nuestros videoseminarios, no sólo porque ya esté
implantado, sino porque la evolución
que observamos en las herramientas disponibles para su desarrollo está progresando con un alto grado de calidad, lo
que permite comunicar más información al alumno a través de la combinación de elementos multimedia: audio,
video, diapositivas, texto, etc.
dnm: El año pasado se adecuó vuestro Master al temario necesario para preparar la certificación MCAD, tan valorada por los programadores. Esta puede realizarse a través de este plan formativo o a través de los cursos oficiales
de Microsoft. ¿Qué diferencia existe?
Antonio Quirós: En AlhambraEidos preparamos a los alumnos por
ambas técnicas. Hay que recordar que
en España somos el centro de referencia de Microsoft para formar a desarrolladores y el que más certificados
MCAD entrega cada año. Una y otra
son técnicas adecuadas y con las dos
logramos resultados válidos. La diferencia está en que el Master aporta más
valor añadido, es decir, tiene más cosas,
enseña más la vertiente práctica. Si además de aprobar el MCAD quieres profundizar en las técnicas de desarrollo y
en las buenas prácticas a seguir tu programa es el Master. Si lo que quieres es
certificarte y, además te corre prisa
hacerlo y no puedes dedicar un año académico, tu programa debe estar basado
en los cursos oficiales de Microsoft.
dnm: ¿Qué crees que es lo que más
valoran los alumnos de vuestro Master?
Marino Posadas: Quizá la organización de los cursos en una secuencia de
dificultad paulatina, que permite dar
pasos seguros en el proceso de aprendizaje. Éste se potencia mediante los autotests, garantizando que los pasos anteriores nos han conducido a donde nos
encontramos con conocimiento de causa suficiente. También, en las versiones
virtual y mixta, citaría lo que ahora se
llaman “espacios de colaboración”,
53
<< dnm.biblioteca.net
dnm.biblioteca.net
Moving to VB .NET: Strategies, Concepts, and Code
Daniel Appleman
Editorial: A!Press
Páginas: 560, Rústica
Publicado: Junio 2001
ISBN: 1893115976
Hoy nos centramos en dos autores bien conocidos por los programadores. Appleman,
antiguo miembro del equipo de desarrollo de Visual Basic 1.0, nos introdujo al API de
Windows hace varios años en una obra clásica. Ahora, vuelve a la carga con VB.NET
donde más que una revisión del producto, nos muestra su propia visión del mismo.
<<
Contrasta con la anterior versión, recomienda estrategias, anuncia posibilidades y enumera los cambios más importantes, en una obra que podríamos llamar “comparativa”,
de la que cabe destacar, además, el estudio en profundidad de los cambios debidos a la
presencia de Programación Orientada a Objetos, las capacidades Multiproceso, la interacción con COM+ y la forma en que .NET gestiona la memoria. Es una obra que se
lee mejor ahora que en el momento de su aparición, cuando ya se conoce el producto
y el lenguaje, y puede apreciarse mejor su perspicacia.
Code:The Hidden Language of Computer Hardware and Software
Charles Petzold
Editorial: Microsoft Press
Pag.: 393, Rústica
Año: Noviembre 1999
ISBN: 073560505X
<<dotNetManía
Una obra curiosa, cuanto menos. Analiza en términos sencillos muchos de los fundamentos de la informática (hardware y software), y va avanzando en complejidad desde
el código Morse a las interfaces de usuario visuales. Es la obra de 10 años de reflexión
—según sus propias palabras en el prefacio— que el autor de “Programación en Windows”,
y “Programación en Windows 95”, publicó hace 3 años para recoger toda una vida de
experiencia docente y divulgadora de estos mundos.
54
Recorre los inicios, incluso remontándose al siglo IXX, revisa los logros más importantes de los pioneros de la informática del siglo pasado, y revisa desde los fundamentos
conceptos archisabidos (Puertas lógicas, ASCII, Coma flotante), de los que siempre sabe
entresacar la visión clara y explicativa de quien ha conocido la informática en profundidad y se plantea ahora explicarla con palabras sencillas. Para nostálgicos, pero también
para novatos.
Por Marino Posadas
MVP Visual Developer C#
Alhambra-Eidos www.elavefenix.net
Entrevista a Carlos Heras
<< Borland lleva
ya una larga trayectoria desde Turbo Pascal, pasando por
Delphi y la serie de los Builder en la
actualidad. ¿Cómo definirías la estrategia de Borland en estos momentos?
Actualmente Borland no sólo ofrece herramientas de desarrollo, como
siempre ha hecho, sino que su estrategia actual se centra en ofrecer una solución completa de desarrollo de ciclo de
vida de las aplicaciones (ALM), tanto
para .NET como para J2EE. Esto quiere decir que el foco para Borland en estos
momentos es el equipo de desarrollo al
completo que necesitan herramientas de
gestión de requisitos, análisis y diseño,
codificación, pruebas, despliegue y gestión de cambios y configuración.
Enlazando con la pregunta anterior…y de acuerdo con las previsiones
–que sé que tenéis- sobre crecimiento,
¿pensáis que en España ese crecimiento va a materializarse en alguna iniciativa concreta?
En concreto en España ya se ha
materializado en varias compañías que
han adoptado la solución completa de
Borland, y como es lógico estamos trabajando para ampliar el numero de
compañías que lo adopten en los próximos meses.
¿Qué es eso sobre Borland y la
“Suiza del Software”?
Es un ejemplo
muy explicito que
usamos cuando queremos explicar la
neutralidad de Borland que ofrece soluciones en todas las
plataformas y lenguajes.
En la actualidad, parece claro
que existen dos plataformas de desarrollo que aglutinan a la mayor parte de los usuarios: J2EE y .NET. ¿Cómo
se ubica Borland y cuáles son sus planes
de soporte futuros?
Borland es consciente de ello y por
eso proporciona la misma solución para
ambas plataformas. Pero además, tenemos un producto, Borland Janeva, que
ofrece interoperabilidad entre .NET y
J2EE a través de RMI sobre IIOP. Con
este producto es posible conectar componentes .NET con servidores de aplicaciones J2EE sin necesidad de utilizar
Web Services, lo que en ciertos casos
supone un nivel mayor de seguridad.
Respecto a la construcción misma
de las aplicaciones, me consta que
Borland ha publicado herramientas que
pretenden cubrir el ciclo completo de
desarrollo. ¿Puedes hablarnos algo más
de esto? ¿Incluye eso la parte de instalación de aplicaciones?
Como he comentado anteriormente la estrategia de Borland es precisamente ofrecer una solución que cubra
el ciclo completo de desarrollo de aplicaciones, tanto para J2EE como para
.NET. Las dos características principales de la solución de Borland son la
integración y la modularidad.
Integración en cuanto que todas las
fases del ciclo deben estar integradas
para en cualquier momento poder volver atrás, modificar algo, y ver que consecuencias tendrán esas modificaciones en el desarrollo de la aplicación. Y
modularidad en el sentido de poder
<<dotNetManía
Carlos Heras es Alliances & Indirect Sales Manager de Borland Ibérica que junto a Néstor
Miranda, Director General lleva al frente de Borland en España desde sus inicios.
Aprovechando la celebración del Borland Days el pasado mes de mayo hemos querido
conversar con él especialmente para que los más viejos recordemos nuestros tiempos
de programadores en Turbo Pascal en DOS.
55
<<dotNetManía
<< dnm.directo.entrevistas
56
sustituir alguna herramienta de
Borland por otra de los principales
fabricantes que hay en el mercado, sin
que ello implique una perdida de integridad entre las distintas fases de desarrollo de la aplicación.
Dentro ya de la parte que nos interesa en esta revista (.NET), ¿Cómo
sitúas Delphi .NET dentro de el panorama de los lenguajes de la actualidad?
¿Y C# Builder? ¿Os decantáis más por
uno que por otro?
Delphi para Borland es uno de sus
productos estrella, afortunadamente
tenemos varios, y su evolución a .NET
creo que es un paso decisivo en la vida
de este producto. Para la comunidad de
desarrolladores de Delphi supone facilitarles la migración a la plataforma
.NET lo que significa encaminarse al
futuro sin abandonar el pasado. Borland
C# Builder es un claro ejemplo de la
intención de Borland de ofrecer una
solución para cualquier lenguaje.
Últimamente, Blake Stone,
Arquitecto Principal de JBuilder se ha
incorporado al equipo de desarrollo de
Visual Studio .NET. ¿Qué tal os tomáis
esas “deserciones”? ¿Crees que son
todavía secuelas de la marcha de Anders
Hejlsberg?
Bueno yo no hablaría de deserción
sino que simplemente Blake ha aprovechado la oportunidad que se le brindaba de mejorar su carrera profesional, y
eso es algo que cualquiera haría. Por
otra parte es una garantía para el futuro de cara a la buena integración entre
los productos de Microsoft y de
Borland, y además es un reconocimiento explicito del nivel de calidad de los
ingenieros de Borland. En cuanto a las
consecuencias
que su marcha
pueda ocasionar
hay que tener en
cuenta que en
Borland se trabaja por equipos y
que la salida de
una persona, por
muy valida que
sea, no tiene por
que suponer una
merma de la productividad del
equipo.
¿Cuantos desarrolladores de Delphi
estimáis que habrá actualmente en el
mundo?
Borland tiene más de dos millones
de usuarios de sus herramientas
Windows. Evidentemente, una parte
muy importante de esta cifra es de desarrolladores Delphi. También tenemos
más de un millón en herramientas Java,
y claro, la mayor parte de éstos son
usuarios JBuilder.
¿Cómo afrontáis la localización de
vuestros productos?
El proyecto de localización se lidera en USA para todo el mundo y luego
se trabaja con agencias locales. En el caso
de España se traduce únicamente para
España debido a las diferencias entre el
castellano que se habla aquí y el que se
habla en América Latina. En América
Latina se utiliza la versión inglesa.
Borland ibérica distribuye sus productos a través de mayoristas como
Ingram Micro y GTI, pero también de
minoristas como Danysoft que, sin
embargo, parecen tener una estrecha
relación con vosotros.
La gran diferencia es que Danysoft
da un gran valor añadido que nosotros
estimamos muchísimo y esto hace que,
efectivamente, nuestra relación con
ellos sea muy estrecha. En cualquier
caso mantenemos una estrecha relación de más de 15 años con Ingram
Micro y GTI. Pero claro, Danysoft da
servicios de formación, soporte, consultoría, etc. y esto es fundamental para
nosotros.
Y por último, trata de mirar por la
bola de cristal, y anticípanos cómo ves
el futuro inmediato de la construcción
de software…
Bueno resumiendo un poco creo
que el futuro del desarrollo de aplicaciones se va a centrar en dos plataformas, J2EE y .NET, y que cada vez se
va a industrializar más, en el sentido de
una mayor utilización de herramientas
especificas para cada una de las fases del
ciclo de vida del desarrollo de las aplicaciones, para construir un software de
mayor calidad y en el menor tiempo
posible.
Borland Day acoge durante su primera edición a más de 500 participantes
Borland celebró ante más de 500 asistentes la primera edición de su macro evento Borland
Day. Bajo el lema “Potencie su Desarrollo” dio a conocer a todos los profesionales involucrados
en el proceso de desarrollo de aplicaciones, su definición, diseño, desarrollo, test, despliegue y gestión de sus soluciones totalmente integradas así como sus nuevas actualizaciones. Junto a sus principales socios estratégicos en España, Borland pretender brindar la mejor solución en la creación
del software para la empresa.
Con más de 20 ponencias y workshops en tres salas en paralelo destacan las áreas más importantes en el proceso creativo del software: productividad, calidad y movilidad. Durante este encuentro Borland ha aprovechado para mostrar las distintas soluciones para plataformas J2EE,Microsoft.NET,
herramientas de definición y diseño, desarrollos sobre dispositivos móviles, soluciones CORBA,
novedades de sus IDEs, JBuilder, Delphi, C++, y sus servicios de consultoría, formación y soporte.
Borland incrementa la productividad de las empresas con el máximo rendimiento de las inversiones gracias a su estrategia ALM de gestión del ciclo de vida de las aplicaciones basada en tres cualidades primordiales: flexibilidad, rapidez y libertad de elección de la plataforma.
Como partners estratégicos Borland Day contó con los líderes más importantes del sector:
Accenture, Bea Systems, HP, Mercury Interactive, Microsoft, Oracle y Telefónica Móviles que mostrarán la integración de sus productos con la soluciones Borland.
“En esta jornada todos los profesionales de TI, directores, responsables de proyectos, analistas y desarrolladores, habrán podido ver la única solución de desarrollo independiente, basada en
estándares y totalmente integrado con los líderes del sector, con la que reducir sus costes y aumentar su productividad” aseguró Néstor Miranda, Director General de Borland Ibérica.
<<
Suscripción a dotNetManía
❑ Deseo suscribirme a dotNetManía por un año (11 ejemplares) y beneficiarme de la oferta del 10% de descuento por un
importe total de 60 € para España; o por 75 € para el resto de Europa; o por 90 € para el resto del mundo (IVA incluido).
❑ Deseo suscribirme a dotNetManía por un año (11 números) por un importe de 45 € por ser estudiante (IVA incluido).
Aporto fotocopia del carné de estudiante o sello del centro académico (IMPRESCINDIBLE). OFERTA VÁLIDA SÓLO
PARA ESTUDIANTES RESIDENTES EN ESPAÑA.
IMPORTES VÁLIDOS HASTA NUEVA OFERTA
DATOS DE FACTURACIÓN
CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .
Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATOS DE ENVÍO (sólo si son distintos de los datos de facturación)
CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .
Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FORMA DE PAGO
❑ Talón nominativo a nombre NETALIA, S.L.
❑ Giro postal a nombre NETALIA, S.L.
❑ Transferencia bancaria a nombre de NETALIA, S.L. a:
La Caixa
Número de cuenta 2100 4315 48 2200014696
(Indique su nombre en la transferencia)
Usted autoriza a la mecanización de estos datos. El responsable y destinatario de
éstos es Netalia, S.L. Usted
tiene derecho a acceder a sus
datos, modificarlos y cancelarlos cuando lo desee. Sus
datos no serán cedidos en ninguna de las formas posibles a
terceras partes y no se utilizarán más que para el buen funcionamiento de su suscripción
a la revista dotNetMania y
para informarle de las actividades comerciales que realice
la editorial Netalia, S.L. Si no
desea recibir información
comercial de esta empresa
marque la casilla siguiente ❑
❑ Domiciliación Bancaria
Indique su número de cuenta:
❑ Tarjeta de crédito
❑ VISA
❑ MASTERCARD
❑ AMERICAN EXPRESS
Número de su tarjeta:
Fecha de caducidad:
/
(Imprescindible)
Firma y sello (imprescindible)
a
❑ Nº1
❑ Nº2
❑ Nº3
Envíe este formulario por email a la dirección
[email protected], o al fax (34) 91 499 13 64
También puede enviarlo por correo postal
a la siguiente dirección:
de
de 20
❑ Nº4
C/ Robledal, 135
28529- Rivas Vaciamadrid
Madrid (España)
noticias.noticias.noticias.noticias.noticias
<< dnm.desvan
Longhorn
Los pasados días 24-26 de Mayo, se
celebraron en Barcelona las
Jornadas Académicas Microsoft
Research 2004, segunda edición de
los encuentros MicrosoftUniversidad que reunieron a más de 200 profesores universitarios y MVP’s de diferentes tecnologías. Durante 3 jornadas, algunos de los más sobresalientes investigadores y divulgadores de
tecnologías Microsoft plantearon el “estado del arte”, bajo el epígrafe “Docencia e investigación en un mundo de Aplicaciones
Orientadas a Servicios”, pudimos escuchar a: Rosa M. García,
Stephen Emmott, Rafal Luckawiecki (“A Subjective View of
Next Decade in IT”), Ivan Medvedev (“Security Framework on the
CLR, future developments and Security at Microsoft”), David
Carmona (“Nueva generación de aplicaciones orientadas a servicios Indigo, WS*”), Adam
Wiener (“Microsoft Data
Access current and future:
import/export data from
SQL Server as XML and
an
introduction
to
ObjectSpaces”), Fernando
Guerrero (“SQL Server
Yukon - nuevas necesidades
de los sistemas de información”), Hugo Zaragoza
(“Combinando Information Retrieval y Machine Learning en investigación”), Catherine Heller (“Nueva generación de herramientas
de desarrollo con Visual Studio .NET Whidbey”), Pablo Rodríguez
(“Distribución de contenidos en redes de datos móviles e inalámbricas”),
Damien Watkins (“Multilanguage programming teaching with
.NET”) , Michal Cierniak (“.NET Rotor as a research platform”)
y Don Syme (“The .NET Common Language Runtime and the
.NET Platform: What we’ve achieved and where we’re going”).
La mayor parte de ellos, trabaja en alguno de los centros
de investigación que Microsoft mantiene en Redmond, Beijing
(China) o Cambridge (Reino Unido), o son conocidos divulgadores de tecnologías.
Además de esta iniciativa, algunas noticias se hacen eco de
las novedades que la compañía quiere implantar de cara a las
búsquedas en Internet: posibilidad de búsquedas personalizadas y configurables de forma simple, epígrafes como “Cosas
que he buscado antes”, “Cosas que podrían ser interesantes”
(en función de preferencias del usuario), o extender el concepto de búsqueda a cualquier objeto contenedor (documento, correo, fichero, etc.).
No obstante si de un producto
puede decirse que aglutina un
conjunto de novedades fruto de la
investigación, ese es la nueva versión del S.Operativo (Windows
Longhorn, ya anunciado de forma oficial para 2006 y su versión de servidor para 2007), que no sólo se ha rehecho desde
cero, sino que no para de sorprendernos con nuevos apuntes
sobre su arquitectura. En este caso, se trata de su modularidad.
A diferencia de las versiones anteriores, en que el producto se
presentaba en diferentes versiones (Home/Professional para
XP y Web, Standard, Enterprise o Datacenter para el servidor), Longhorn podrá configurarse a gusto del usuario, incorporando aquellas partes que se necesiten, agrupadas por roles
de actividad, según anunciaba Jim Livingston en el pasado
Windows Hardware Engineering Conference (WinHEC)
en Seattle. Sin embargo, en la versión de cliente, será el vendedor el que podrá realizar la selección de módulos a incluir
en el sistema. Mark Myers, Senior Program Manager de
Longhorn, lo daba a conocer como los “bloques de construcción del sistema”, que permitirán un tiempo de instalación de
15 minutos y un montón de nuevas características en las instalaciones distribuidas y desatendidas.
Enlaces recomendados
<<dotNetManía
Jasoft
58
Marino Posadas
Microsoft se centra en la investigación
Sitio de José Manuel Alarcón, otro asiduo de congresos,
autor de varios libros y colaborador habitual de revistas
informáticas, mantiene este sitio, donde encontrarás
muchas de sus aportaciones personales
http://www.jasoft.org/
VSJ NET Home (inglés): http://www.vsj.co.uk/dotnet/
Más código abierto de productos Microsoft
Ahora le toca el turno a Windows Template Library, que al
igual que sucedió anteriormente con Windows Installer XML,
ha sido liberado bajo Common Public License (open-source)
y SourceForge Repository, como vehículos de publicación.
Nuevos lenguajes .NET: F#, Zonnon, Delphi .NET y
Fortran 95 .NET: La producción de compiladores para MSIL
no cesa. Los últimos incorporados a la ya larga lista (más de 30
miembros) son los citados. Para más información, ver:
http://www.vsj.co.uk/dotnet/display.asp?id=289
Mercado de fichajes
El hasta ahora CTO de Borland, y arquitecto
de JBuilder, Blake Stone, se incorpora a
Microsoft en el equipo de desarrollo de Visual
Studio .NET 2005 (Dpto. Visual Studio Core).
Para más datos, ver http://msdn.microsoft.com/
vstudio/team/bios/blakes . La sombra de
Hejlsberg sigue siendo alargada…
utilidades del mes
Gif Optimizer: comprime todos los GIF de un sitio
sin reducción de calidad apreciable (gratis):
http://chemware.co.nz/tgo.htm
FABER TOYS: Para usuarios que les gusta saber que
pasa en su ordenador (gratis): Ejecuta programas
Windows sin utilizar el Registro.
http://www.faberbox.com/fabertoys.asp

Documentos relacionados