You are on page 1of 60

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

NET Framework Windows Server System

dotNetMana
www.dotnetmania.com

Dedicada a los profesionales de la plataforma .NET

n2 marzo 2004 Precio: 6,00 (Espaa)

Entrevista con Jason Vokes


PLSM Borland EMEA
X-Omega o cmo combinar SQL y XML con C#
Microsoft SQL Server 2000 Reporting Services
JLDA versin 3 en fase Beta
Laboratorio
Acceso a base de datos en Delphi 8.
Los Borland Data Providers
Open Source
dotNetNuke
Comunidades
Lexico

Acceso DAV a Microsoft Exchange Server Equivalencia de instrucciones de


C# y VB .NET (II) Autenticacin ASP.NET a travs de formulario y Active Directory
Compilacin de cdigo al vuelo en .NET Cmo reducir el log de transacciones
de una base de datos de SQL Server Las legiones de Csar (MSF)
opinin
El mercado informtico necesita excelentes profesionales, no corporativismo y titulitos

dnm.editorial

Resaca
<<

Este nmero es nmero de resaca. La resaca que queda despus del primer nmero de
cualquier publicacin, de las difciles decisiones que marcarn el estilo de la revista,
desde la eleccin del equipo de colaboradores, la bsqueda de patrocinadores, la maquetacin, el nmero de pginas, la orientacin
que tendrn las noticias, de las secciones, de
cmo enfocar los artculos tcnicos, de a
quien se va a dirigir, de qu va a aportar la
pgina Web a la lectura y de los nervios
del da de su presentacin. Uff! Y lo que se
me olvida, y lo que no cuento. Hasta que llega el primer suscriptor ha habido meses de
trabajo y cuando esto ocurre nos da la sensacin de haber terminado cuando en realidad, no hemos hecho sino empezar.
Bienvenido al nmero dos de
dotNetMana! En este nmero nos hemos
esforzado por aportar una serie de artculos
tcnicos diversificados; le ofrecemos artculos de lenguajes, de ASP.NET, de .Net
Framework, de SQL Server, de Exchange
Server, de arquitectura, tres nuevas secciones: dnm.directo para cubrir eventos, realizar
entrevistas, etc.; dnm.opensource que usaremos para dar un repaso al mundo del open

Editor
Paco Marn
(paco.marin@dotnetmania.com)
Administracin
Pilar Prez
(pilar.perez@dotnetmania.com)
Asesor Tcnico/Coordinacin
Marino Posadas
(marino.posadas@dotnetmania.com)
Redactores y Colaboradores
Alejandro Mezcua, Angel Esteban,
Antonio Quirs, Antonio Rojo, David
Carmona, Eladio Rincn, Francisco
Charte, Fernando Guerrero, Fernando
Nogueras, Guillermo guille Som, Ivn
Gonzlez, Jess Lpez, Jordi Rambla,

source para .NET; y dnm.opinin donde


publicaremos artculos de los que aligeran
un poco a una revista tan tcnica cmo esta.
Ni stas, ni ninguna de las dems son secciones fijas. Cada mes es como una cosecha
que cada ao sale distinta. No queremos
encorsetarnos a unas secciones y contenidos
fijos, preferimos la improvisacin, bien
entendida. Dentro de un orden, usaremos
todas las secciones para hacer una fotografa de la actualidad, de los productos y proyectos que van apareciendo o cambiando.
En el apartado de noticias no va a encontrar noticias Best Seller, por ejemplo, en este
nmero ni hablamos sobre la filtracin del
cdigo fuente de Windows del que tan
machaconamente hemos sido informados.
El motivo es porque el espacio del papel es
limitado y preferimos publicar noticias ms
interesantes en relacin a su contenido, y
ms centradas en la tecnologa, incluso aunque no sean noticias de ltima hora. Hay que
tener en cuenta que una revista impresa, las
noticias llevan un retraso de entre medio
mes, como mnimo, hasta dos meses dependiendo de cuando se produzca la noticia y
cuando llegue el ejemplar a sus manos.

Jorge Serrano, Jos Manuel Alarcn,


Juan Torres, Liborio Lpez, Luis Miguel
Blanco, Marino Posadas, Miguel Egea,
Miguel Katrib, Pablo Abbate, Pedro
Gmez, Pedro Pozo, Pepe Hevia,
Salvador Ramos

Imprime
Campillo Nevado
www.campillonevado.com

Diseo y Maquetacin
ride Diseo Grfico
Tel.: (34) 91 477 48 85
eride@eride.net www.eride.net

Suscripciones/Administracin
suscripciones@dotnetmania.com

Edita
netalia, s.l.
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)
Tf. (34) 91 6667477
Fax (34) 91 4991364

Depsito Legal
M-3.075-2004

Redaccion
redaccion@dotnetmania.com
Publicidad
marketing@dotnetmania.com
Nuevos colaboradores
colaboradores@dotnetmania.com

<<dotNetMana

<<

dnm.editorial

dnm.sumario
El mercado informtico necesita excelentes profesionales,
no corporativismo y titulitos

8-10

Una reflexin de Fernando Guerrero sobre la creciente exigencia de titulaciones


como marchamo de calidad en los profesionales. Cree que es imprescindible una
titulacin universitaria para ejercer nuestra profesin? Deberamos colegiarnos
como en otras profesiones?

Entrevista con Jason Vokes

11-14

Con motivo de la presentacin de Delphi 8 para .NET, entrevistamos a Jason


Vokes, Developer Tools Product Manager para EMEA, responsable de todas las
herramientas de desarrollo para entornos Windows 32 y Microsoft .NET.

Autenticacin ASP.NET a travs de formulario y Active Directory

15-19

En este artculo trataremos la autenticacin en ASP.NET, y explicaremos con un


ejemplo prctico como autenticarse mediante formulario con Active Directory.

Equivalencia de instrucciones de C# y VB .NET (II)

20-24

Segunda entrega de esta serie de artculos que pretende explicarle cmo hacer las
mismas cosas (o casi) tanto en C# como en Visual Basic .NET.

dnm.sumario

Compilacin de cdigo al vuelo en .NET

26-31

En este artculo veremos la forma de compilar bajo demanda cdigo creado al


vuelo o residente en archivos externos a nuestra propia aplicacin. Como ejemplo
prctico construiremos un evaluador de expresiones.

Acceso DAV a Microsoft Exchange Server

32-37

Microsoft Exchange Server, a partir de su versin 2000, pone a disposicin del


usuario todo su contenido mediante WebDAV. En este artculo se ver qu es
WebDAV y cmo usarlo para manipular informacin de Microsoft Exchange
Server y usarla en nuestras propias aplicaciones.

Cmo reducir el log de transacciones de una base de datos de SQL Server

38-41

Explicamos qu es el Transaction Log, qu ocasiona su crecimiento y qu medidas


hay para evitar que crezca desmesuradamente. Proponemos diversas soluciones al
problema.

Laboratorio

42-45

Los Borland Data Providers (BDPs). Adems de poder utilizar los proveedores
ADO.NET integrados en la biblioteca de clases .NET, el nuevo Delphi 8 .NET
nos ofrece otras alternativas entre las que se encuentra el flexible BDP.

Las legiones de Csar

46-50

Una introduccin a la arquitectura MSF, Microsoft Solutions Framework, la


metodologa de gestin de proyectos de desarrollo de software que usa el gigante de
Redmon y que, desde hace unos pocos aos, sistematiza y recomienda para que
quienes van a desarrollar software con herramientas Microsoft la use.

Biblioteca

52

Gua Prctica para usuarios JavaScript. De Jos Manuel Alarcn


ASP.NET Al descubierto. De Stephen Walther

Comunidades

53-54

Lexico

Open Source

56

dotNetNuke

Desvn

58

yo

en
bt

s
dr

e
irt
ib s
r
7 l inscrama
te
es
a g
ga
to pro
n
rt e
ue o s
En
sc st r
d e nue
de a
cu

n
p

50

dnm.noticias

<<

dnm.noticias

DevDays 2004

<<dotNetMana

Ms de 1.100 personas asistieron el pasado 22


de enero al DevDays 2004, en el Auditorio Norte
de IFEMA en el Parque Ferial Juan Carlos I de
Madrid. Parece que, despus de la expectacin
levantada por el PDC en Estados Unidos, haba
inters por oir lo que algunos de los mejores
conferenciantes de nuestro pas tenan que decir
sobre las nuevas tecnologas que Microsoft est
preparando.
Microsoft Ibrica refuerza su compromiso con los desarrolladores espaoles mediante

la celebracin del Developer Days 2004, y les


muestra el camino que va a seguir la compaa
en los prximos aos con el lanzamiento de
productos tan esperados como Longhorn,
Yukon o Whidbey, coment Mauricio Ulargui,
director de la divisin Developers de Microsoft
Ibrica, quien aade que nuestro objetivo es
crear en Espaa una comunidad de desarrolla-

dores que puedan aprovecharse de todas las


posibilidades que les ofrecer la plataforma
Windows en los prximos aos.

Se celebraron las siguientes conferencias.


En camino hacia SOA
Soluciones para el desarrollo de aplicaciones.
Coge ventaja sobre la nueva versin de Visual
Studio Whidbey.
La nueva generacin de aplicaciones con
Yukon
Desarrollo en dispositivos mviles Smartphone
2003.
Desarrollo de aplicaciones seguras con .NET.
Desarrollo de Webparts para SharePoint 2003.
Avances en Windows Longhorn.
Este ao fue el da de la presentacin oficial de dotNetMana por lo que desde la redaccin de la revista le guardaremos un especial
cario.

<< dnm.noticias
Disponibilidad de la beta
de la versin 3 de JLDA que automatiza la
conversin de J2EE a .NET
JLCA (Java Language Conversin Assistant) es una herramienta diseada para convertir el
cdigo existente escrito en lenguaje Java en programas para Microsoft Visual C# y .NET
Framework, o sea, especialmente dedicada a atraer a los desarrolladores de Java a la plataforma .NET.
Segn dijo Brian Keller, Product Manager para Visual Studio .NET, esta versin soportar la conversin de J2EE 1.3 y libreras JDK 1.3 as como EJB, JAAS, JCE, JMS, JNDI, y RMI.
Cada versin de JLCA convierte un mayor porcentaje de cdigo que no requiere retoques,
si bien ninguna herramienta de conversin elimina la necesidad de retoques posteriores.
Asimismo, Brian Keller ha dicho que estamos intentando ser interesantes para cualquiera que est trabajando con Java hoy y quiera cambiar sus aplicaciones para tener todas
las ventajas de .NET Framework.
Las aplicaciones convertidas con JLCA pueden extenderse para utilizar la plataforma
de desarrollo .NET incluyendo ASP.NET, ADO.NET y Windows Forms. El gran avance de la versin 3.0 es el soporte para la conversin de aplicaciones J2EE 1.3, incluyendo
Java Server Pages (JSPs) y Enterprise JavaBeans (EJBs). Otras tecnologas de Java que pueden ser traducidas incluyendo Java Authentication y Authorization Service (JAAS), Java
Cryptography Extensin (JCE), Java Message Service (JMS), Java Naming y Directory
Interface (JNDI) y Remote Method Interface (RMI).
La beta de JLCA 3.0 est disponible gratuitamente para los desarrolladores con una
licencia de Visual Studio.NET. Puede descargar una versin de evaluacin de 60 das gratuitamente, si no la tiene.
JLCA 3.0 ser parte de Whidbey, la prxima versin de Visual Studio .NET.
Para ms informacin visite:
http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30beta/

III Jornadas de desarrolladores .NET


Las III Jornadas de desarrolladores de la plataforma .NET se celebrarn el 29, 30
y 31 en las nuevas instalaciones de Microsoft Ibrica y son totalmente gratuitas.
Durante los tres das habr talleres que se impartirn en paralelo en distintas aulas
segn niveles y es una excelente oportunidad para adquirir nuevos conocimientos
sin ningn coste!. El horario ser de 9:30 a 13:30 cada da. Al cierre de este nmero, la agenda an no estaba terminada pero hemos tenido acceso a un borrador de
la misma:
Da 29
Apertura,
Taller 1: Seguridad y optimizacin de SQL Server para programadores.
Taller 2: ASP .NET con acceso a datos mediante ADO .NET
Da 30
Taller 1: Programacin para Office 2003 mediante Visual Studio Tools for
Office.
Taller 2: Programacin para dispositivos mviles con Compact Framework.
Da 31
Taller 1: Seguridad en el cdigo.
Para ms informacin consulte la pgina web de eventos de Microsoft ibrica
en: http://www.microsoft.com/spain/eventos

Presentacin de
Delphi 8 para .NET

Antonio Gmez, Marketing & Sales Manager


de Borland Ibrica

Ms de 100 personas se dieron cita en el evento de presentacin de Delphi 8 a la comunidad


de desarrolladores de Delphi de Espaa. Se
celebr en el centro de convenciones
Winterthur en Madrid, organizado por Borland
Ibrica con la colaboracin de Danysoft.
Tuvimos la suerte contar con la asistencia
de Jason Vokes, Developer Tools Product
Manager para EMEA con el que tuvimos la
oportunidad de charlar.
Las conferencias que pudimos escuchar
fueron:
Introduccin Delphi 8, por Jason
Vokes
El nuevo entorno de desarrollo para
.NET, por Pablo Reyes
Caractersticas de Delphi 8 para el desarrollo de aplicaciones basadas en el framework .NET, por Octavio Hernndez

Por Fernando Guerrero


SQL Server MVP
Solid Quality Learning

El mercado informtico necesita excelentes


profesionales, no corporativismo y titulitos

unos das, un compaero ar<< Hace


gentino del grupo de noticias de SQL
Server (news:// msnews.microsoft.com
/microsoft.public.es.sqlserver)

<<dotNetMana

coment horrorizado los planes del


gobierno argentino de exigir una titulacin universitaria en informtica a
todos aquellos que quisieran ejercer
cualquier actividad legalmente en este
campo.
Resulta que hace algunos meses le
en El Pas algunos comentarios de un

miembro del colegio de Ingenieros y


Licenciados de Informtica sobre
intrusismo profesional aplicados a
aquellos que en Espaa ejercen actividades de informtica sin la titulacin
adecuada. Y la verdad es que buscando
en Internet encuentro muchos artculos sobre la necesidad de atajar el intrusismo profesional que aqueja esta profesin.
La verdad es que estos comentarios
me suenan a corporativismo rancio y sin

Las universidades tienen la obligacin de crear,


desarrollar e impartir conocimiento,
proporcionando a la sociedad la oportunidad
de mantener el nivel tecnolgico que este competitivo
mercado requiere

sentido, ajenos a cualquier consideracin sobre la realidad del mercado en el


que vivimos.
Las universidades tienen la obligacin de crear, desarrollar e impartir
conocimiento, proporcionando a la
sociedad la oportunidad de mantener el
nivel tecnolgico que este competitivo
mercado requiere. Sin embargo, no es
cometido de la universidad garantizar
trabajo a sus titulados, o imponer trabas al desarrollo del libre mercado.
Yo he sido estudiante universitario,
aunque he de reconocer que no de los
mejores, y hasta he impartido clases en la
universidad durante algunos aos (pero
eso fue durante el siglo pasado). Y de verdad creo firmemente en el valor de la universidad, en cuanto a la transmisin de
conocimiento, y la habilidad para formar
en los estudiantes una mentalidad curiosa, crtica e inquisitiva, a la vez que ordenada, para desarrollar un trabajo tcnico
y cientfico al ms alto nivel.
Sin embargo, me espanta la idea de
que alguien se crea que por obtener una
titulacin acadmica, esto le lleve directamente a ocupar un puesto en el
Olimpo.

<< dnm.opinion

Sin embargo, no es cometido


de la universidad garantizar trabajo
a sus titulados,
o imponer trabas al desarrollo
del libre mercado

Por ejemplo, para abrir una tienda de alimentacin se necesita un permiso administrativo, y las personas que atienden han tenido que pasar unas pruebas de manipulacin de alimentos, pero no se exige
que el dueo sea doctor en medicina y nutricin ;-)
El hecho de que un profesional de informtica haya
tenido que obtener una licencia para ejercer esta actividad, simplemente tendra que significar que el
gobierno tendra informacin suficiente y precisa acerca de dnde se realiza esta actividad, qu tcnicos componen el equipo directivo, y quin sera legalmente
responsable si algo va mal, pero es el mercado el que
tiene que determinar si los estudios acadmicos y/o la
experiencia de dichos tcnicos merecen su confianza
para encargar los trabajos necesarios.
Por cierto, en otros pases, como por ejemplo los
EEUU, un licenciado en Fsicas puede perfectamente dedicarse a disear puentes de autopistas (y s de
algunos casos concretos). En esos casos, los clientes
han confiado plenamente en la capacidad tcnica de
dicho profesional, independientemente de su titulacin. Las restricciones en atribuciones profesionales
se aplican exclusivamente a algunos pocos casos muy
concretos: Medicina, Abogaca y Arquitectura, por
motivos de alta responsabilidad.
Esto de las competencias profesionales es un
tema muy arraigado en la cultura espaola y supongo que de ah se ha trasladado a Latino Amrica. Los
colegios profesionales intentan por todos los medios
limitar lo que otros colectivos pueden hacer, pero
se ocupan muy poco, salvando honrosas excepciones, de que sus colegiados dispongan de la formacin ms adecuada y actualizada para desempear
las actividades que el mercado les exige. La formacin de un tcnico debera estar orientada a la capacitacin de dicho tcnico para resolver problemas
tcnicos, no su habilidad para pasar exmenes que

<<dotNetMana

Titulacin acadmica o experiencia profesional? Colegios profesionales que den oportunidades de formacin y capacitacin a sus colegiados, o
Colegios profesionales que intenten por todos los
medios limitar las atribuciones profesionales de los
no colegiados?
La titulitis es una enfermedad muy arraigada en
el mundo hispano. Y es curioso observar qu poco
arraigo tiene esta prctica en el mundo anglosajn. En
otros pases nadie dira que es un abogado simplemente por tener un ttulo de la carrera de derecho, o
mdico por tener una licenciatura de medicina. En la
mayora de los pases seras abogado si practicas la abogaca y tienes licencia para ello, y seras mdico si practicas la medicina y tienes licencia para ello.
Un buen amigo mo, Ron Talmage, SQL Server
MVP y profesional muy respetado en este mundo de
SQL Server, me dio una sorpresa hace algn tiempo.
Me ense un viejo libro que atesora en su biblioteca y me lo present como uno de los libros ms importantes en su vida: era su tesis doctoral. Lo que me dej
perplejo es que l nunca ha dicho en ningn sitio que
tuviera un doctorado. Y ha subido hasta los peldaos
ms altos de esta profesin sin mostrar esta credencial. Ron, amigo: Chapeau!
Se le debera exigir una licenciatura en literatura a un poeta o novelista?, o un doctorado en arte
dramtico a un actor?, o estudios universitarios a un
pintor o escultor?, o estudios de periodismo a un
periodista?
Si lo que hacen estas personas es arte, la verdad es
que el trabajo que desempea un buen tcnico de
informtica entra muchas veces en el campo del arte,
lo cual no le excusa para evitar seguir las buenas prcticas establecidas en la industria.
Lo que nadie aguanta es un mal poeta, o un mal
actor, periodista o escultor, con estudios o sin ellos. Como
nadie aguanta un mal mdico, ingeniero, o profesor.
Habra que diferenciar entre capacitacin tcnica
y capacidad legal para contratar trabajos y hacerse responsable de los mismos.
Capacitacin tcnica se consigue mediante muchos
diversos sistemas, y es muy difcil determinar el nivel
de capacidad para desempear un determinado trabajo fijndose exclusivamente en el nivel de titulacin
universitaria o no-universitaria, que el tcnico haya
adquirido.
Es obvio que hay excelentes tcnicos cuyos estudios no se corresponden con la actividad que llevan a
cabo. Otra cosa es la capacidad legal para contratar
trabajos, y en esto s creo que los gobiernos deben
regular qu datos se deben obtener de los profesionales liberales para asegurar que los clientes puedan
exigir responsabilidades. Sin embargo esto no debera tener nada que ver con el currculo acadmico de
los tcnicos que van a realizar el trabajo, sino con la
responsabilidad profesional que deba exigrseles.

<< dnm.opinion
en muchos casos son absurdos en su planteamiento
y calificacin.
Sin embargo muchas universidades estn ms interesadas en proporcionar formacin cientfica exclusivamente, lo cual es maravilloso (a m me ha servido
enormemente este tipo de formacin), pero no tiene
mucho que ver con la capacitacin tcnica para resolver los problemas del da a da. Y esta capacitacin
tcnica se puede proporcionar mediante muchos otros
sistemas que cuestan menos recursos a la sociedad que
formar miles de cientficos cada ao que nunca van a
realizar ninguna actividad cientfica.

<<dotNetMana

Un espritu inquieto que busque permanentemente


cualquier oportunidad para mantenerse
aprendiendo es siempre ms importante
a la larga que unos estudios iniciales
en la mejor universidad del mundo

10

No me malinterpretis. Yo soy un firme convencido de que es esta formacin eminentemente cientfica la que hace de los ingenieros espaoles (e hispanos en general) ms verstiles que sus homlogos de
otros pases. Lo que digo es que posiblemente el producto obtenido se haya conseguido mediante una utilizacin desmesurada de recursos del estado (y el estado lo pagamos todos). No hay ms que echar un vistazo a las estadsticas de fracaso universitario en carreras de ingeniera en Espaa para observar que estudiantes de carreras tcnicas emplean normalmente
seis aos para obtener titulaciones que se disearon
alrededor de carreras de tres aos, y de ocho a diez
aos para carreras de seis aos.
En otros pases con mayor xito que el nuestro
en estos campos, se forma un ingeniero en cuatro
aos, y si desea avanzar en sus estudios, puede alcanzar un Master of Sciences (MSc) en dos aos ms. Y
estoy hablando de aos, no de cursos, y en muchos
casos simultaneando trabajo para poderse pagar los
estudios, adems de otras actividades culturales y ldicas. Son ellos ms inteligentes que nosotros? Por
supuesto que no, pero tienen planes de estudios que
permiten obtener ttulos totalmente reconocidos con
la adecuada economa de medios requeridos para su
obtencin.
La experiencia profesional puede llevar a personas sin estudios, o sin estudios universitarios completos, a ofrecer servicios del ms alto nivel tcnico.

Y esto es especialmente de admirar, ya que la falta de


formacin acadmica supone en la mayora de los casos
un trabajo extra por parte del tcnico para poder alcanzar y mantener este nivel. Yo nunca entender cmo
alguien se puede atrever a menospreciar a tcnicos sin
estudios, en aquellos casos en los que su capacidad
tcnica est fuera de toda duda.
Dnde se exige en esta legislacin que el tcnico
se mantenga al da en sus conocimientos tcnicos? Un
espritu inquieto que busque permanentemente cualquier oportunidad para mantenerse aprendiendo es
siempre ms importante a la larga que unos estudios
iniciales en la mejor universidad del mundo (aunque
esto supondra por supuesto un excelente comienzo).
Sin embargo, so seamos maniqueos, estamos comparando aqu siempre dos colectivos muy limitados:
El del titulado sin ninguna experiencia ni ganas
por mantenerse al da.
El del no titulado con mucha experiencia con
muchas ganas de mantener su nivel de conocimientos.
Como todo el mundo puede imaginar, existe todo
un abanico de posibilidades distintas, como por ejemplo (yendo de nuevo a otros dos extremos):
El titulado con uno o varios doctorados y muchos
aos de experiencia y reconocido prestigio.
El no-titulado que alardea de saber lo que no
sabe, y que slo le importa ganar algn dinero
embaucando a algunos clientes.
Y por supuesto, cualquier combinacin de los
siguientes elementos:
Titulacin a diferentes niveles.
Experiencia profesional en diferentes grados.
Honradez profesional, a diferentes niveles tambin, que no todo es blanco o negro, sino diferentes tonalidades de gris, en este mundo.
As que hay tantas combinaciones como personas,
y las empresas y gobiernos deberan interesarse ms
en conseguir las personas adecuadas al trabajo que
deben desempear, de acuerdo a su capacidad profesional, que intentar imponer trabas administrativas
que slo frenan el avance tecnolgico de nuestra an
retrasada sociedad.
Como dice Tom Peters: Hire for attitude, train
for skills, o lo que quiere decir en algunas palabras
ms: contrata tus colaboradores basndote en su actitud, entonces dales la formacin que necesiten para
hacer su trabajo. Qu ttulo universitario certifica
disponer de una actitud curiosa?
http://www.tompeters.com/toms_world/observations.asp?id=24&date=1/1/200

Por Paco Marn


dotNetMana
dotnetmania.com

Entrevista a Jason Vokes


Jason Vokes es Developer Tools Product Manager para EMEA, responsable de todas las herramientas de desarrollo para entornos Windows 32 y Microsoft .NET (C# Builder, Delphi, C++
Builder y Kylix).Tambin es el responsable de las herramientas de desarrollo de Borland para
dispositivos mviles JBuilder y C++ Builder Mobile y Enterprise Studio for Mobile.
Visit Espaa con ocasin de la presentacin oficial de Delphi 8 que organiz Borland Ibrica
en Madrid el pasado 5 de febrero.Aprovech para ofrecernos su conferencia Introduccin a
Delphi 8 y charlar con todos los medios que le requerimos y tambin para hacerse unas
fotos con nosotros (es muy presumido).

<< Para m la pregunta fundamental

Algn desarrollador de Delphi me


comentaba el otro da que Borland
pareca estar ms interesado en la
modularidad de sus productos que
en los lenguajes en s (especialmente en el caso de Delphi) Es cierto
que Borland lo tiene como una bata-

Jason Vokes, PLSM Boland EMEA.

lla perdida con respecto a los lenguajes de Microsoft?


Si se mira a Borland hoy en da, hay
muchos ms ingenieros trabajando ahora de lo que haba hasta hace dos aos.
Todava hay en Borland un grupo dedicado cien por cien a la produccin de
herramientas de desarrollo. Y por supuesto, tenemos grupos de ingenieros
especializados en otras tecnologas, como

anlisis de requisitos y tecnologas distribuidas. Tenemos una de las mejores tecnologas Java del mundo y tambin ofrecemos una de las mejores posibilidades
en lo que respecta al mundo Windows.
Con respecto al personal que tenemos en las tecnologas Together, yo no
soy un experto en el tema de diseo,
pero tengo otros colegas que s lo son
y cada uno tenemos nuestro trabajo,

<<dotNetMana

que quera que Jason nos respondiera


era qu es lo que Delphi 8 poda aportar a los desarrolladores de la plataforma .NET o qu tenan los desarrolladores de Delphi en sus manos que los
dems desarrolladores de otros lenguajes pudieran envidiar. No se trata de
hacer la competencia a nadie, como se
encargaron de dejar claro tanto l como
Carlos Heras, Alliances & Indirect Sales
Manager de Borland Ibrica, sino simplemente de conocer lo que Delphi 8
puede aportar. Como podris ver en esta
entrevista, cost sacarle algunas palabras al respecto.
A la entrevista asistieron, aparte del
propio Jason Vokes y el mencionado
Carlos Heras, Octavio Hernndez
Leal, Director de servicios profesionales de
Danysoft y Paco Marn editor de
dotNetMana.

11

<< dnm.directo.entrevistas

<<dotNetMana

Jason Vokes con Octavio Hernndez, director de servicios profesionales de Danysoft en un


momento de la entrevista.

12

pero lo realmente excitante es que entre


todos formamos un equipo que puede
ayudar a eliminar alguno de los mayores riesgos que involucra el desarrollo
de software hoy en da, garantizando
que cuando se entrega un producto de
software satisface al cien por cien las
especificaciones iniciales para las que
fue creado.
Llevamos ahora en paralelo muchas
reas diferentes y tenemos equipos muy
fuertes en todas esas reas. Para m no
hay ningn cambio de foco.
El equipo en el que yo trabajo est
centrado en ofrecer los entornos de
desarrollo mejores y ms potentes del
mundo, y por supuesto siempre podemos ser mejores, mejores y mejores.
Cuantas personas han estado
involucradas en el desarrollo de
Delphi 8?
Nosotros no damos detalles especficos de la cantidad de personas que
compone cada grupo, pero puedo decirle que son centenas las personas que
estn involucradas en sacar adelante un
proyecto de esta envergadura.
Supongo que esta pregunta se la
habrn hecho cientos de veces, pero
an as se la har. Va a haber una
versin de Delphi 8 para Win32?
Con Delphi 7, esencialmente an
estamos ofreciendo un entorno Win32.
Cuando yo hablo con desarrolladores
Win32 no es como si hubiese un rea
amplia del producto que faltara. Las

peticiones que recibimos de los clientes


son de poner un poquito por aqu, un
poquito por all. No obstante, yo no veo
que hayamos terminado de entregar
herramientas de desarrollo para Win32
todava. Yo estara personalmente a favor
de que a esa tecnologa se le diese todava un paso ms adelante. Por supuesto, es necesario todava ofrecer cosas
nuevas para que los desarrolladores
Win32 puedan seguir incorporando
novedades en las aplicaciones que tienen que desarrollar. Pero, tal y como
estn las cosas, en los meses que se apro-

ximan, ser programador de Windows


implica ser un programador de .NET.
La plataforma .NET tiene mucho
que ofrecerle a los desarrolladores y los
desarrolladores de Delphi que estn
liderando la comunidad de desarrolladores, si se quiere ver as, estoy seguro
de que estarn ansiosos de moverse hacia
adelante tambin.
Estoy seguro de que aportaremos las
posibilidades cuando se nos planteen las
necesidades.
El programador de Delphi tendr
que hacer un esfuerzo de aprendizaje de la plataforma .NET Framework.
Por las caractersticas de ste, es fcil
cambiar de lenguaje. Teme que programadores actuales de Delphi 7
aprovechen para pasarse a alguno de
los lenguajes de Microsoft Visual
Studio?
Esta no es de las cosas que me mantienen despierto por la noche. Tenemos
varios millones de desarrolladores RAD
por todo el mundo y nosotros respondemos a las necesidades de estos desarrolladores. Uno de los cometidos principales de Delphi 8 es ofrecer una transicin suave al trabajo de muchos aos
de muchos desarrolladores para permitirles pasar fcilmente a la plataforma
.NET. Mismo lenguaje de programacin, mismas libreras, y un entorno de
programacin distinto pero muy similar al anterior.

Tenemos una de las mejores tecnologas Java del mundo


y tambin ofrecemos una de las mejores posibilidades
en lo que respecta al mundo Windows

<< dnm.directo.entrevistas

Carlos Heras,Alliances & Indirect Sales Manager


de Borland Ibrica.

Tal y como estn las cosas,


en los meses que se aproximan,
ser programador de Windows
implica ser un programador
de .NET.

Jason, qu dices t?
Uhm Rapidez, flexibilidad y productividad (en perfecto ingls) J
Bueno, hombre, no pretenda que se contradijesen. Slo quera que me diese una visin ms
tcnica y ms extensa.
Hay muchas caractersticas que estamos ofreciendo para hacer ms fcil la vida al desarrollador y para
poner ms potencia bajo su control.
Existen tres reas clave de las que podramos hablar
desde el punto de vista de la tecnologa:
Estamos obteniendo muchas opiniones favorables sobre nuestra manera de implementar
ASP.NET para el desarrollo Web, por ejemplo,
en relacin con el diseador Web que incorpora el producto y algunos componentes para el
desarrollo de aplicaciones con ASP.NET y acceso a base de datos que los desarrolladores podrn
aprovechar y mejorar as su productividad con
respecto a lo que pueden encontrar en Visual
Studio.
El siguiente rea importante es el acceso a base
de datos donde aportamos los BDPs (Borland
Data Providers). stos ofrecen posibilidades para
acceder eficientemente a distintos motores de
bases de datos como Oracle, SQL Server e
Interbase de una manera uniforme. Y que permite, con una gran flexibilidad, sin cambiar prcticamente el cdigo, hacer una aplicacin que
pueda funcionar contra diferentes bases de datos.
La tecnologa ECO, con la que ofrecemos la posibilidad de crear aplicaciones model driven. Si se
mira desde un punto de vista del negocio, como
parte de su estrategia puede estar la necesidad de
ofrecer de una manera rpida varias aplicaciones a
diferentes clientes. Usted puede definir un modelo UML que represente la solucin, o puede tener
un modelo estndar que puede haber sido obtenido de alguien, o haberlo diseado yo mismo, o puede ser incluso refactorizado a partir de cdigo

<<dotNetMana

Y al revs? Es decir, puede Delphi aprovecharse de la facilidad que un desarrollador de la


plataforma .NET tiene para trabajar en uno u otro
lenguaje, para captar programadores de los lenguajes de Microsoft Visual Studio?
Nuestra responsabilidad son nuestros clientes.
Actualmente ya ofrecemos la posibilidad del entorno
de trabajo de ECO para los programadores de C#
Builder, por ejemplo, pero mi responsabilidad nmero uno es que las personas que estn hoy aqu en este
evento, puedan seguir aprovechando sus inversiones,
sus desarrollos de muchos aos, de la forma ms suave posible.
En lo que respecta al tema de la productividad de
los desarrolladores, sabemos que cuando incorporemos novedades a nuestra plataforma y nuestros entornos de desarrollo, otros la vern y dirn mira esto
est muy bien e intentarn hacer algo similar.
Tampoco estamos en contra de esto porque esto ayuda a avanzar a la tecnologa.
Carlos Heras que estaba presente en la entrevista, apostill:
Ahondando un poco ms, no se trata de hacer la
competencia a nadie, sino que se trata de ofrecer al
desarrollador toda la serie de posibilidades que Borland
ya est ofreciendo. Pero no se trata de ir a quitarle
programadores a nadie.
Vale, vale, no van a hacer la competencia a
nadie, me queda claro. Quiz plante mal la pregunta. Permtame que insista. Qu aporta
Delphi 8 a la plataforma .NET?
Fundamentalmente lo que ofrece la tecnologa de
Borland: Rapidez, flexibilidad y productividad, dijo Carlos
adelantndose a Jason.

13

<< dnm.directo.entrevistas

<<dotNetMana

Jason Vokes con Octavio Hernndez en la charla inicial de la presentacin de Delphi 8 celebrada el 5 de febrero.

14

que se ha escrito en otros lenguajes.


Entonces podemos darle a ECO ese
modelo para que lo ejecute como
una aplicacin para .NET sin tenerse que preocupar por todo el cdigo, toda la fontanera propia de un
desarrollo de estas caractersticas:
transacciones, persistencia de objetos, etc. Por supuesto, se podr aadir ms cdigo a la aplicacin, pero
luego, puede que al cabo de unos
meses, el mercado cambie, y pueda
ser necesario cambiar la aplicacin.
En este caso se puede modificar el
modelo y aplicar esos cambios en el
modelo sobre el software que est
en funcionamiento, lo que hace muy
adaptable esta tecnologa.
En qu estn trabajando los programadores del equipo de Delphi en
relacin a una nueva versin de
Delphi para .NET?
Siempre hay muchas reas en las que
se est trabajando. Cada vez que sale una
nueva versin siempre hay que esperar
a ver qu es lo que dicen los usuarios

sobre ella, ver qu sugerencias hacen y


qu cosa nueva necesitan. En principio,
estamos viendo las cosas que estarn
soportadas para la siguiente versin de
.NET Framework. Otro elemento clave es hacer avanzar la experiencia del
programador en lo que respecta a su
productividad.
Cules son las principales ventajas de los BDPs (Borland Data
Providers?
La principal causa que hace necesaria la existencia de los BDPs es el
hecho de que Microsoft dispone de una
pila de software que consiste en el sistema operativo, bases de datos, aplicaciones finales, etc. Y por supuesto, ellos
dan soporte a sta muy bien y tienen
gran tecnologa para ese tipo de cosas.
Pero tambin hay inversiones muy
importantes de corporaciones muy
grandes alrededor del mundo en otras
tecnologas que no son de Microsoft,
como por ejemplo en el rea de bases
de datos. Esencialmente los BDPs permiten separar la lgica de negocio de

los objetos concretos que establecen la


conexin a la base de datos que las aplicaciones van a utilizar. Cuando uno utiliza los recursos predefinidos que ofrece .NET, en el momento que est
comenzando a desarrollar la aplicacin
ya tienes que definirte por si vas a utilizar los componentes de conexin de
Oracle, de SQL Server, de ODBC o de
OLEDB. A partir de este momento,
sin tener en cuenta las posibles diferencias entre los dialectos SQL, la aplicacin puede ser la misma independiente de la base de datos que se utilice. Si se trata de una casa que fabrica
software que ofrece soporte genrico
para diferentes base de datos, los BDPs
son un recurso ideal por que te permiten crear tus componentes sin atarte a
la base de datos concreta que va a estar
debajo del software que t ests desarrollando.
Y, por supuesto, los BDPs son una
capa de software por encima de
ADO.NET y, por tanto, son puro
.NET.

Por Pedro Pozo


Clikear
clikear.com

Autenticacin ASP.NET
a travs de formulario y Active Directory
En este artculo trataremos la autenticacin en ASP.NET, y explicaremos con
un ejemplo prctico como autenticarse mediante formulario con Active
Directory.

si el usuario existe en Active Directory y que compruebe a qu grupos pertenece. Tambin crearemos una sencilla pgina Web en la que comprobaremos cmo funciona la autenticacin mediante formulario.
Hay tres tipos de autenticacin en ASP.NET,
que son:
Formulario: Es el propio programador el que
se encarga de definir el proceso para identificar al usuario. Una vez identificado se crear un token que servir para identificar al
usuario.
Windows: Es el sistema operativo el que se
encarga de identificar al usuario y puede realizarse sin labores de programacin.
Passport: Es un Web Service el que se encarga
de identificar al usuario, en concreto se debe
utilizar Passport SDK para utilizar este tipo de
autenticacin.
El tipo de autenticacin Windows requiere
menos labores de programacin pero puede aumentar las labores de mantenimiento ya que se debe
controlar la creacin de usuarios a travs de
Windows.
El tipo de autenticacin Passport en realidad no
es realizado por nuestro sistema, la identificacin
se realiza de forma remota a travs de un Web Service.
Este sistema que ha sido desarrollado por Microsoft

ha recibido tanto crticas como elogios. Por una


parte los crticos muestran desconfianza en dejar la
identificacin de los usuarios de su Web a un tercero; por otra, los elogios vienen por la utilidad de
tener una nica forma de identificacin de usuarios
para Internet, de forma que una vez que ha creado
una cuenta Passport sirve para identificarse en cualquier Web que utilice este sistema, sin necesidad de
repetir el tedioso proceso de registro y evitando los
inconvenientes de mantener numerosos usuarios y
passwords para cada uno de los Webs a los que accedemos.
Cada tipo de autenticacin tiene sus ventajas pero
la ms usada es la autenticacin mediante formulario ya que nos permite controlar todo el proceso y
resulta sencilla de implementar. La autenticacin
mediante formulario consiste en un proceso definido en el propio cdigo de la aplicacin que se encarga de comprobar si el usuario tiene o no acceso.
Adems deberemos realizar dos modificaciones
en el fichero web.config para que la aplicacin
ASP.NET entienda que se debe realizar la autenticacin por formulario.
La primera consiste en poner el modo de autenticacin como FORMS, y que tiene los siguientes
parmetros:
name, es el nombre de la cookie que usaremos para los usuarios autenticados.
loginUrl, es la pgina Web en la que se debe
realizar la autenticacin del usuario, y a la

<<dotNetMana

<< Crearemos una clase que se encargue de comprobar

15

<< dnm.asp.net
cual redireccionar la aplicacin
en el caso de que se trate de acceder a otra pgina sin haberse
autenticado previamente.
timeout, es el tiempo en minutos
en el cual expira la cookie de
autenticacin del usuario.
protection, es el mtodo que se utiliza para proteger la cookie y puede ser:
None, no realiza ninguna proteccin de la cookie.
Encryption, utiliza mtodos de
encriptacin para que los datos
de la cookie no sean visibles.
Validation, no encripta los datos
de la cookie pero comprueba
que estos datos no han sido alterados al enviarlos por Internet.
All, utiliza Validation y
Encryptation para proteger la
cookie.

mamos AutenticacionLdap. En
esta clase creamos un constructor al que
le pasamos como parmetros el path de
conexin a Active Directory y el dominio del mismo.

private string pPath;


private string pDominioLdap;
public AutenticacionLdap(string path,string dominioLdap)
{
pPath = path;
pDominioLdap = dominioLdap;
}

Active Directory es un servicio de


directorio, es decir, un conjunto de elementos (como por ejemplo PCs, usuarios, grupos, impresoras, etc.) que
representan todo lo que hay en una red.
Cada uno de estos objetos que forman

<authentication mode=Forms>
<forms name=.ASPXUSERDEMO loginUrl=login.aspx protection=All

time-

out=60 />
</authentication>

La segunda modificacin en el
web.config consiste en poner el modo de
autorizacin deny users=? as no se permite el acceso a ninguna pgina de la
aplicacin sin haberse autenticado previamente.

<<dotNetMana

<authorization>
<deny users=? />
</authorization>

16

En la sintaxis utilizada para la autorizacin el carcter ? indica usuario


annimo y el carcter * indica todos
los usuarios. Por otra parte, tendremos
la palabra deny que no permite el acceso y la palabra allow que indica que s
tiene acceso.
Quiz el proceso ms utilizado para
la autenticacin mediante formulario
sea realizar una consulta a una base de
datos para comprobar si el usuario existe, pero en este caso vamos a trabajar
con Active Directory para validar la existencia del usuario.
Para llevar a cabo este proceso
implementamos una clase a la que lla-

A ese conjunto de tipos de objetos y


sus propiedades es lo que se llama
Esquema de Directorio Activo.
Existen varias formas de referirse a
un elemento de Active Directory, algunos de estos estndares son:

Active Directory tiene sus propias propiedades a las que se les puede aadir
las que considere conveniente el administrador.
Adems, los elementos del Active
Directory se pueden organizar en
Unidades Organizativas (OU), pudiendo
delegar labores de administracin en
cada una de ellas.

RFC 822
LDAP (Ligthweight Directory
Access Protocol)
UNC (Universal Naming
Convention)
En este caso utilizaremos LDAP,
cuyas siglas podran traducirse como
Protocolo Ligero de Acceso a Directorios.
LDAP es una versin simplificada del
protocolo X.500, que fue desarrollado para facilitar el acceso a Active
Directory.
Cuando queremos acceder a un elemento de Active Directory tenemos que
crear una conexin a LDAP Debemos
tener en cuenta que en LDAP debemos
poner primero los elementos hijo del
esquema de directorio y despus los elementos padre.
Un ejemplo de conexin es el
siguiente:

Cada tipo de autenticacin tiene sus ventajas


pero la ms usada es la autenticacin mediante formulario
ya que nos permite controlar todo el proceso
y resulta sencilla de implementa

<< dnm.asp.net

LDAP://miServidor/OU=miUnidadOrganizativa,DC=dotnetmaniacos,DC=com

Donde lo primero que se debe poner es ldap://


para as indicar el protocolo utilizado, seguido debe
ir el servidor en el cual se encuentra Active Directory,
despus pondremos OU= y la unidad organizativa a la
que vamos a acceder.
En el caso de tener ms unidades organizativas
dentro de otra, podramos acceder a ellas escribiendo
el camino a seguir hasta la que queremos acceder y
separando con coma cada una de las unidades organizativas. Como por ejemplo, para la siguiente estructura de Active Directory:

Debe tener en cuenta que ste es slo un ejemplo de conexin LDAP y deber modificarlo poniendo el nombre de su dominio as como los nombres
correspondientes a los elementos de su Active
Directory.
La clase AutenticacionLdap tendr el mtodo Existe
al que pasamos como parmetros el usuario y la password y comprueba si existe en Active Directory.
Crearemos una entrada a Active Directory con el usuario y password que estamos comprobando si existe y
posteriormente se buscar ese usuario por la propie-

OU=DepartProgramacion,OU=DepartInformatica,OU=DepartInvestigacion

Por ltimo, ponemos DC seguido del nombre de


los componentes del Dominio.
En este ejemplo, hemos puesto en variables de configuracin dentro de web.config la conexin LDAP y
el dominio en el cual se encuentra Active Directory.
Lo ponemos como una variable de configuracin de
la aplicacin para que sea sencilla su modificacin sin
afectar al cdigo.

dad SAMAccountName que es una propiedad cuyos


valores son nicos dentro de un mismo rbol de Active
Directory. Ver fuente 1.
Tambin crearemos en la clase AutenticacionLdap
un mtodo sobrecargado, al que llamaremos Pertenece
y que nos indica si el usuario est incluido en un grupo de Active Directory. Puede darse el caso que el
usuario que estamos comprobando no tenga permi-

<add key=pathLdap value=LDAP://miServidor/OU=miOU,DC=miDominio,DC=com/>


<add key=dominioLdap value=DC=miDominio,DC=com/>

if(resultado == null)
return false;
else
return true;
}
catch (Exception ex)
{
pError=ex.Message;
return false;
}
}
Fuente 1

<<dotNetMana

public bool Existe(string usuario, string pwd)


{
DirectoryEntry entrada;
DirectorySearcher buscador;
SearchResult resultado;
try
{
entrada = new DirectoryEntry( pPath, pDominioLdap + @\ + usuario, pwd);
buscador = new DirectorySearcher(entrada);
buscador.Filter = (SAMAccountName= + usuario + );
buscador.PropertiesToLoad.Add(cn);
resultado = buscador.FindOne();

17

<< dnm.asp.net
sos en Active Directory para consultar
los grupos a los que pertenece, por tanto se sobrecarga este mtodo pudiendo
introducir adems otros dos parmetros
con el usuario y password de alguien que
s tenga permisos para consultar Active
Directory.
Para este mtodo buscaremos el
usuario a travs de la propiedad
SAMAccountName y una vez encontrado
el usuario recorremos la propiedad
memberOf que es un array con todos los
grupos a los que pertenece. Ver fuente 2.
Debemos fijarnos que en este caso
el usuario que crea la entrada a Active
Directory no es el mismo usuario que
estamos comprobando si pertenece al
grupo, sino que se trata de otro usuario
con permisos para consultar Active
Directory.

El otro mtodo Pertenece que estar


sobrecargado ser igual que el que acabamos de ver pero no llevar los par-

public bool Pertenece(string grupoLdap,string usuario, string pwd,string


usuarioLdap,string pwdLdap)
{
string pathGrupo;
string GrupoUsuario;
DirectoryEntry entrada;
DirectorySearcher buscador;
SearchResult resultado;
try
{
entrada = new DirectoryEntry(pPath,usuarioLdap,pwdLdap);
buscador = new DirectorySearcher(entrada);
buscador.Filter = (SAMAccountName= + usuario + );
buscador.PropertiesToLoad.Add(memberOf);
resultado = buscador.FindOne();
for(
int
contador
=
0;
contador
<
resultado.Properties[memberOf].Count;
contador++)
{
grupoLdap=grupoLdap.ToUpper() + ,;
pathGrupo = (String)resultado.Properties[memberOf][contador];
GrupoUsuario = pathGrupo.ToUpper().Substring(3,grupoLdap.Length);

<<dotNetMana

if (GrupoUsuario==grupoLdap)
return true;

18

}
}
catch (Exception ex)
{
pError=ex.Message;
return false;
}
return false;
}
Fuente 2

metros usuarioLdap y pwdLdap. Esto es


debido a que en este mtodo se entiende que el usuario que estamos comprobando s tiene permisos de consulta de
Active Directory. Ver fuente 3.
Para este mtodo se ha creado la
entrada a Active Directory con el mismo usuario que estamos comprobando
si pertenece al grupo.
Una vez implementada la clase
AutenticacionLdap tan slo deberamos crear un WebForm con dos cajas
de texto y un botn que nos servir de
formulario para la validacin de usuarios. Para comprobar la validacin del
usuario crearemos un objeto de la clase
AutenticacionLdap, al que le pasaremos
las constantes de la cadena de conexin

Active Directory es
un servicio de directorio,
es decir, un conjunto
de elementos
(como por ejemplo PCs,
usuarios, grupos, impresoras,
etc.) que representan todo
lo que hay en una red

<< dnm.asp.net
public bool Pertenece(string grupoLdap,string usuario, string pwd)
{
string pathGrupo;
string grupoUsuario;
DirectoryEntry entrada;
DirectorySearcher buscador;
SearchResult resultado;
try
{
entrada = new DirectoryEntry(pPath,usuario,pwd);
buscador = new DirectorySearcher(entrada);
buscador.Filter = (SAMAccountName= + usuario + );
buscador.PropertiesToLoad.Add(memberOf);
resultado = buscador.FindOne();
for( int contador = 0; contador < resultado.Properties[memberOf].Count;
{
grupoLdap=grupoLdap.ToUpper() + ,;
pathGrupo = (String)resultado.Properties[memberOf][contador];
grupoUsuario = pathGrupo.ToUpper().Substring(3,grupoLdap.Length);
if (grupoUsuario==grupoLdap)
return true;
}
}
catch (Exception ex)
{
pError=ex.Message;
return false;
}
return false;
}

contador++)

Fuente 3

LDAP y el dominio, los cuales tenemos


en web.config como variables de configuracin de la aplicacin.

formas de autenticarse en una aplicacin


Web y cmo se amplan las posibilidades con respecto al antiguo ASP. Adems

El proyecto completo que corresponde a este artculo lo pondr encontrar en la pgina Web de la revista en

AutenticacionLdap usuario=new
AutenticacionLdap(ConfigurationSettings.AppSettings[pathLdap],ConfigurationSettings.AppSettings[dominioLda
p]);

hemos visto alguna de las facilidades que


ASP.NET nos ofrece para acceder a
Active Directory y por tanto a todos los
recursos de una red.

http://www.dotnetmania.com.

if (usuario.Existe(txtUsuario.Text,txtPwd.Text))
{
FormsAuthentication.SetAuthCookie(txtUsuario.Text,false);
if (usuario.Pertenece(GrupoAdministradores,txtUsuario.Text,txtPwd.Text))
Response.Redirect(InicioAdmin.aspx);
else if (usuario.Pertenece(GrupoUsuarios,txtUsuario.Text,txtPwd.Text))
Response.Redirect(InicioUsuario.aspx);
}
else
{
LblError.Text = usuario.Error;
}

<<dotNetMana

Se comprobar si se encuentra el
usuario en Active Directory llamando
al mtodo Existe y pasndole como parmetros el usuario y la password que se
han introducido a travs del WebForm.
Una vez que hemos comprobado
que el usuario existe creamos el token de
autenticacin. Este token servir para
identificar al usuario a travs de toda la
aplicacin Web.
Y, por ltimo, se utilizar el mtodo
Pertenece para comprobar en qu grupo
est incluido el usuario y redireccionarlo a donde le corresponda. Ver fuente 4.
En este artculo hemos podido comprobar como ASP.NET nos ofrece varias

19

<<
Por Guillermo Guille Som
Visual Basic MVP desde 1997
www.elguille.info

Equivalencia de instrucciones
de C# y VB .NET (II)
Cmo hacer las mismas cosas (o casi) en C# y Visual Basic .NET

<<dotNetMana

<<

20

Declaracin de variables,
mtodos, propiedades
e indizadores
La declaracin de las variables, mtodos, propiedades, etc. difieren bsicamente en la forma de realizar la declaracin. En C# se indicar el mbito, es
decir, si es pblico, privado, etc. seguido
del tipo de datos, seguido del nombre de
la variable. En VB se indicar el mbito
seguido del nombre y por ltimo la instruccin As seguida del tipo de datos.
Tanto en VB como en C# se pueden
definir constantes, en el caso de C# se
usar la instruccin const antes del tipo
de datos, en VB se usar Const en lugar
de Dim o Static cuando se declare una
constante dentro de un procedimiento.
Si esa declaracin se hace a nivel de tipo,
la instruccin Const se usar despus del
modificador de mbito. Las constantes
siempre se definen con un valor.
Las variables tambin se pueden definir y asignarle un valor predeterminado
al mismo tiempo que se declara. Si no se
indica de forma explcita, ese valor, en
Visual Basic siempre se asignar un valor
"cero", pero en C# ese valor predeterminado slo se asignar si la variable se
declara como miembro de un tipo (campo), si la variable se declara dentro de
una funcin, no se asigna ningn valor
predeterminado y habr que asignarle
algn valor antes de usarla.
Los mtodos sern las funciones y
procedimientos declarados en una clase.

En Visual Basic las funciones son


procedimientos que devuelven un valor
y se declaran usando la instruccin
Function, los mtodos que no devuelven

metro implcito llamado value que no se


indica en la declaracin. En VB .NET
siempre hay que indicar el parmetro en
el bloque Set, aunque ese parmetro

un valor, en Visual Basic se declaran


como procedimientos Sub.
En C# todos los mtodos son funciones, las que devuelven un valor se
declaran con el tipo de datos que devuelve y las que no devuelven un valor (las
equivalentes a los procedimientos de tipo
Sub de VB) el tipo se indica con la instruccin void.
En Visual Basic .NET las propiedades
pueden recibir parmetros. En C# las propiedades no pueden recibir parmetros.
En C#, cuando se asigna un valor a
una propiedad, (bloque set), el valor a
asignar estar representado por un par-

puede tener cualquier nombre, se recomienda usar value.


En VB .NET las propiedades de slo
lectura y slo escritura, adems de slo
indicar el bloque Get o Set, se debe indicar que la propiedad es ReadOnly (solo
lectura) o WriteOnly (solo escritura)
Los indizadores nos permiten usar
una clase como si fuese un array: indicando un valor entre corchetes en el caso
de C# o entre parntesis en el caso de
VB .NET. En C# los indizadores son
propiedades cuyo identificador (nombre) es la propia clase y se usa siempre
this. En Visual Basic .NET los indiza-

<< dnm.lenguajes.net
C#

VB .NET

Declarar una variable

int var;

Dim var As Integer

Declarar una constante

int const var = 10;

Const var As Integer = 10

Declarar un array (matriz)

int[ ] var;

Dim var() As Integer


o
Dim var As Integer()

Declarar e instanciar una variable

<mbito> <tipo> var


= new <tipo>();

<mbito> var As New


<tipo>()
o
<mbito> var As <tipo>
= New <tipo>()

Declarar un mtodo que


no devuelve un valor

void mtodo()
{}

Sub mtodo()
End Sub

Declarar un mtodo que


devuelve un valor

int mtodo()
{}

Function mtodo() As
Integer
End Function

Declarar una propiedad


de lectura y escritura

string Nombre{

roperty Nombre() As
String
<bloque Get>
<bloque Set>
End Property

<bloque get>
<bloque set>
}
Declarar una propiedad
de solo lectura

string Nombre{
<bloque get>}

Declarar una propiedad


de solo escritura

string Nombre{
<bloque set>}

ReadOnly Property
Nombre() As String
<bloque Get>
End Property
WriteOnly Property
Nombre() As String
<bloque Set>
End Property

Declarar un indizador
(o propiedad por defecto en VB)

string this[int index]{ Default Property


Item(index As Integer)
<bloque get>
As String
<bloque set>
<bloque Get>
}
<bloque Set>
End Property

Declarar un campo de solo lectura


con el valor asignado al declararlo

<mbito> const <tipo>


<identificador> =
<valor>;

Declarar un campo de solo lectura


cuyo valor se puede asignar en
tiempo de ejecucin.

<mbito> Const
<identificador> As
<tipo> = <valor>

<mbito> readonly
<mbito> ReadOnly
<tipo> <identificador> <identificador> As
[= <valor>];
<tipo> [= <valor>]

Dicha asignacin se puede


hacer al declarar el campo
o en el constructor.
Tabla 4. Declaracin de variables, mtodos, propiedades e indizadores

dores son propiedades predeterminadas y se puede usar cualquier identificador, de forma que se puede acceder
usando el identificador o no. Tanto en
C# como en VB, se debe indicar como
mnimo un parmetro.
Los mtodos, propiedades y otras
instrucciones se declaran seguidas de
un "bloque de cdigo", en C# los bloques de cdigo estn incluidos dentro
de un par de llaves { y }. En Visual Basic
NET el final de dicho bloque de cdigo suele terminar con la instruccin End
<tipo de bloque>, donde <tipo de bloque> ser el tipo de bloque que estamos
definiendo, por ejemplo si es un Sub, el
final del bloque se indicar con End Sub.
Los campos son las variables declaradas en las clases (tipos). Esos campos
sern los datos que la clase o tipo utilicen. Se pueden definir campos de slo
lectura de dos formas distintas: definindolo como una constante, lo cual
har que dicho campo sea realmente de
slo lectura, no permitir ninguna asignacin de un valor diferente al usado al
declararlo por cdigo; y por otro lado,
podemos definir campos de slo lectura a los que podemos asignar valores de
dos formas distintas: al definirlo, en este
caso actuarn "casi" como una constante, pero tambin podemos asignarle un valor slo y exclusivamente en el
constructor de la clase. De esta forma,
podemos hacer que durante la ejecucin sea de slo lectura, pero ese valor
se puede asignar en tiempo de ejecucin; aunque slo al crear la nueva instancia.
La tabla 4 muestra cmo realizar en
VB .NET y C# la declaracin de variables, mtodos, etc.

Parmetros de los mtodos


Los mtodos pueden recibir parmetros. Esos parmetros pueden ser por
valor o por referencia. Los parmetros
por valor son copias que se entregan a
los mtodos de los parmetros usados,
cualquier cambio realizado a dichos
valores no afectarn a los originalmente usados. Por otro lado, los parmetros
por referencia, si se modifican dentro
del mtodo, afectarn a los usados al llamar a dicho mtodo.

<<dotNetMana

Tarea a realizar

21

<< dnm.lenguajes.net
Por defecto los parmetros son por
valor, en el caso de C# no existe ninguna instruccin para indicar esa cualidad;
en Visual Basic .NET existe la instruccin ByVal para indicarlo expresamente, aunque ese modificador es opcional.
Visual Studio .NET siempre lo indicar usando ByVal.
Por otro lado, se pueden definir parmetros por referencia, en el caso de VB
.NET se indicarn mediante la instruccin ByRef. En C# existen dos tipos de
modificadores para los parmetros por
referencia: out y ref. La diferencia fundamental es que a los parmetros definidos con ref se les debe asignar un valor
antes de usarlo como parmetro del
mtodo, mientras que los parmetros
definidos con out no es necesario inicializarlos antes de usarlos, pero se debern
asignar un valor dentro del mtodo antes
de usarlo. Otra diferencia de los parmetros por referencia entre Visual Basic
y C#, es que en C# siempre habr que
usar el mismo modificador que se ha usado para definir el parmetro, pero en VB
no se usar dicho modificador.
Tambin se pueden definir arrays de
parmetros. En ese caso, se podr llamar al mtodo usando un nmero variable de parmetros, aunque todos esos
parmetros sern del mismo tipo y siempre sern por valor. Para declarar este
tipo de parmetros, en C# se usar la
instruccin params y en VB se usar
ParamArray . Si se utiliza este tipo de
parmetros, ser el ltimo de la lista de
parmetros del mtodo.
En Visual Basic .NET existe el concepto de parmetro opcional. Esos parmetros opcionales pueden ser por valor
o por referencia y siempre habr que
definirlos con un valor por defecto,
dicho valor se usar en el caso de que
no se especifiquen al llamar al mtodo.
La tabla 5 muestra la forma de declarar y usar los distintos tipos de parmetros de los mtodos.

<<dotNetMana

Declaracin de espacios de
nombres, clases, estructuras,
interfaces y enumeraciones

22

En nuestros programas podemos


crear nuestros propios tipos de datos,
incluso espacios de nombres.

Tarea a realizar

C#

VB .NET

Parmetros por valor

No se indica

Es el valor predeterminado, pero se puede usar la


instruccin ByVal

Definir parmetros por


referencia

<mtodo>(ref var)

<mtodo>(ByRef var As <tipo>)

{}

End <tipo mtodo>

C#: El valor debe estar inicializado antes de usarlo al llamar al mtodo


Llamar al mtodo que
define un parmetro
por referencia

<mtodo>(ref var);

<mtodo>(var)

Definir parmetros
por referencia

<mtodo>(out var)
{}

<mtodo>(ByRef var As <tipo>)


End <tipo mtodo>

C#: No es necesario que el parmetro est inicializado antes de llamar al mtodo.


Dentro del mtodo, hay que asignar un valor al parmetro out antes de usarlo
Llamar al mtodo que
define un parmetro
por referencia

<mtodo>(out var);

<mtodo>(var)

Debido a la forma que se tratan las variables en Visual Basic, que siempre son
inicializadas antes de usarlas, no hay esa diferencia en los parmetros
por referencia
Definir un array
de parmetros

<mtodo>(params
array[]){}

<mtodo>(ParamArray var)
End <tipo mtodo>

Llamar a un mtodo
que define un array
de parmetros

<mtodo>([param1][,
param2][, etc.])

<mtodo>([param1][, param2][,
etc.])

Definir parmetros
opcionales

No aplicable, usar
sobrecarga de mtodos

mtodo>([ByVal|ByRef]Optional
var As <tipo> = <valor>)

Slo VB puede definir parmetros opcionales. Se pueden definir tantos parmetros opcionales como necesitemos, pero los parmetros opcionales siempre habr
que indicarlos despus de los parmetros no opcionales y en caso de que se utilice
ParamArray, ste debe aparecer despus de todos los parmetros opcionales.
Tabla 5. Parmetros de los mtodos

Los tipos de datos y las interfaces las


podemos declarar dentro de otros tipos
de datos, pero lo habitual es que las
declaremos dentro de espacios de nombres o directamente en el fichero de
cdigo. En este ltimo caso, si estamos
trabajando con Visual Studio .NET, el
espacio de nombres que contendr nues-

tros tipos, de forma predeterminada ser


el nombre del proyecto. En el caso de
VB .NET ese espacio de nombres no se
muestra en el cdigo, estar "oculto" en
las propiedades del proyecto; por otro
lado, si estamos usando C#, el espacio
de nombres siempre se mostrar en el
cdigo.

<< dnm.lenguajes.net

Definir los miembros


de una interfaz y cmo
se deben implementar
en las clases que se deriven
de esas interfaces
En las interfaces slo se declaran los
miembros (mtodos, propiedades, indizadores y eventos), pero sin cdigo que
los haga operativos, ese cdigo tendr
que definirlo la clase que implemente
la interfaz.
Cuando una clase implementa una
interfaz, la clase est obligada a definir los miembros definidos en dicha
interfaz. En C# slo es necesario declarar un miembro que tenga el mismo
nombre que tiene en la interfaz. En
Visual Basic .NET el nombre del
miembro puede ser diferente al usado
en la interfaz, pero debe indicarse
explcitamente que ese miembro es el
que se utiliza para definir el indicado
por la interfaz.
En la tabla 7 vemos la forma de definir los miembros de una interfaz y cmo
se implementan en las clases derivadas
de esa interfaz.

Tarea a realizar

C#

VB .NET

Declarar un espacio de nombres

namespace
Guille.Pruebas
{}

Namespace
Guille.Pruebas
End Namespace

Declarar una clase (class)

class Prueba
{}

Class Prueba
End Class

Declarar una clase que


se deriva de otra

class Prueba2 : Prueba


{}

Class Prueba2
Inherits Prueba
End Class

Declarar una clase que implementa


una interfaz

class Prueba3 : IPrueba

Class Prueba3
Implements IPrueba
End Class

{}
Declarar una clase que se deriva
de una clase e implementa
una interfaz

class Prueba4 : Prueba,


IPrueba
{}

Declarar una clase que se deriva


de una clase e implementa
ms de una interfaz

class Prueba5 : Prueba,


IPrueba, IPruebaB
{}

Class Prueba4
Inherits Prueba
Implements IPrueba
End Class
Class Prueba5
Inherits Prueba
Implements IPrueba,
IPruebaB
End Class

La herencia de .NET slo permite la herencia simple, slo podemos derivar nuestras clases de una sola
clase. Pero se permite la implementacin de mltiples interfaces.En C#, no se indica explcitamente si
se deriva de una clase o se implementa una interfaz, el nico requisito es que la clase base se indique
antes que las interfaces.
En VB .NET hay que indicar siempre si se est derivando la clase de otra, mediante Inherits o si se
estn implementando interfaces, mediante Implements.
Siempre debe aparecer Inherits antes de Implements y ambas antes de cualquier otro cdigo que contenga la clase.
Declarar una clase de tipo
Module

No aplicable.
Module Pruebas
En C# sera como class,
End Module
pero todos los miembros
usarn el modificador static.

Declarar una estructura

struct MiEstructura
{}

Structure MiEstructura
End Structure

Declarar una estructura


que implementa una
o ms interfaces

struct MiEstructura2 :
IPrueba, IPrueba2
{}

Structure MiEstructura2
Implements IPrueba,
IPrueba2
End Structure

Declarar una interfaz

interface IPrueba
{}

Interface IPrueba
End Interface

Declarar una interfaz


que implemente otras interfaces

interface IPrueba2 :
IPrueba
{}

Interface IPrueba2
Implements IPrueba
End Interface

Declarar una enumeracin

enum MiEnumeracin {Lu,


Ma, Mi};

Enum MiEnumeracin
Lu : Ma
Mi
End Enum
En C# las constantes (miembros de la enumeracin) se separan con comas.En VB .NET cada una de
las constantes que forman parte de una enumeracin deben estar definidas en lneas independientes o
en instrucciones diferentes (separndolas con dos puntos).
Tabla 6. Declaracin de espacios de nombres, clases, estructuras, interfaces y enumeraciones

<<dotNetMana

Las clases se pueden derivar de


otras clases y tambin pueden implementar interfaces, as mismo las interfaces y estructuras pueden implementar otras interfaces. Aqu veremos
cmo realizar todas esas declaraciones
de tipos de datos.
Visual Basic .NET define un tipo
de clase especial en la que todos los
miembros de la clase son estticos
(estn compartidos), es el tipo Module.
En C# no existe un equivalente a un
tipo Module de VB .NET, lo ms parecido sera una clase en la que todos los
miembros (campos, mtodos, propiedades, etc.) estn compartidos (son
estticos).
Los miembros estticos pertenecen
al tipo que lo define y estn compartidos por todos los objetos (instancias)
que se hayan creado en memoria.
La tabla 6 muestra cmo declarar
espacios de nombres, clases, estructuras, interfaces y enumeraciones, as
como la forma de implementar una
interfaz o derivar una clase.

23

no sigas sumergido

en un mar de dudas,

diseo grfico
diseo pginas
web
itorial
diseo ed

acude a un servicio profesional

y que emerjan las ideas

que tu empresa merece.

servicio integral de diseo


avalado por ms de diez
aos de experiencia

ride diseo grfico


collado bajo,13
28053 madrid
Telf: 91 477 48 85
www.eride.net
eride@eride.net

netalia ediciones
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)
Telf: 91 666 74 77
Fax: 91 499 13 64
www.dotnetmania.com

Por Jos Manuel Alarcn


Krasis
krasis.com

Compilacin de cdigo al vuelo en .NET


En este artculo veremos la forma de compilar bajo demanda cdigo creado al vuelo o residente en archivos externos a nuestra propia aplicacin.
Como ejemplo prctico construiremos un evaluador de expresiones.

<< La plataforma .NET y cualquiera de sus lenguajes ofre-

cen infinidad de funcionalidades avanzadas para


el programador. Pocas son las caractersticas que,
desendolas para uno de nuestros programas, no
estn ya implementadas en alguna de las clases
que vienen con .NET. Sin embargo hay ciertas
cosas que no es posible hacer de manera directa
y cuya resolucin tampoco es fcil de deducir, en
parte debido a la carencia de una buena documentacin. Este artculo trata precisamente de
una de stas.

<<dotNetMana

Existen en .NET diversos espacios de nombres


relacionados con la compilacin de cdigo
(System.CodeDom). stos, combinados con las
clases para introspeccin (System.Reflection)
ofrecen al programador avanzado
una herramienta de incalculable valor

26

Aquellos programadores que provengan del


mundo ASP, acostumbrados a escribir cdigo
VBScript o JavaScript, es posible que hayan echado en falta al menos un par de facilidades que se

usan continuamente y que no estn disponibles


con C# o Visual Basic .NET. Una de ellas es la
posibilidad de evaluar expresiones contenidas en
cadenas de texto. En VBScript y JavaScript existen sendas funciones Eval() que permiten obtener el resultado de interpretar una expresin
cualquiera en el lenguaje correspondiente. Esta
caracterstica tiene mltiples aplicaciones ya que
permite evaluar expresiones introducidas por el
usuario, obtener el resultado de funciones matemticas e incluso crear nuestros propios sistemas de desarrollo basados en archivos personalizados que mezclan cdigo y etiquetas especiales. Ni C# ni Visual Basic .NET disponen de un
mtodo similar.
Otra de las cosas que los programadores clsicos de ASP solemos hacer es probar fragmentos de cdigo y algoritmos utilizando archivos
con extensin .vbs o .js de Windows Scripting
Host (WSH), el intrprete de comandos de
Windows. Si estamos trabajando en una funcin
rebelde y queremos probar rpidamente cambios
y ajustes de manera aislada al resto de la aplicacin, dado que, tanto JScript como VBScript, son
lenguajes soportados por WSH, slo tememos
que crear y depurar el cdigo usando esta herramienta y posteriormente copiarlo y pegarlo en la
aplicacin definitiva. La plataforma .NET no
ofrece forma de escribir y ejecutar cdigo automticamente con slo hacer doble-clic sobre un
archivo.
En este artculo vamos a ver la forma de conseguir suplir estas dos carencias de un modo sencillo
usando las clases de compilacin y de reflexin.

<< dnm.plataforma.net
Una solucin sencilla
aunque limitada para evaluar expresiones
Una solucin rpida y sencilla para obtener la
capacidad de evaluar expresiones simples en .NET
es usar la biblioteca de tiempo de ejecucin de
JScript.NET. Cree un nuevo proyecto de Visual
Studio y aada una referencia a la biblioteca
Microsoft.JScript. Si utiliza el examinador de objetos
(Ver figura 1) ver que JScript posee un objeto llamado GlobalObject que posee un miembro Eval. Este
mtodo sirve precisamente para nuestro propsito ya
que basta con pasarle una expresin en JScript para
que se interprete y obtengamos su valor. Este mtodo no se puede llamar directamente, pero si creamos
una DLL en JScript que encapsule el mtodo Eval
ser muy sencillo hacer uso de su funcionalidad desde otros lenguajes.

saria, expresiones propias de nuestro lenguaje preferido e incluso utilizar estructuras de control de flujo.
Existen en .NET diversos espacios de nombres
relacionados con la compilacin de cdigo
(System.CodeDom). stos, combinados con las clases
para introspeccin (System.Reflection) ofrecen al programador avanzado una herramienta de incalculable
valor, que supera con creces a las capacidades que ofrecan anteriormente funciones como Eval o Execute en
JScript y VBScript.
Muchas de las clases de System.CodeDom se utilizan para construir en el compilador elementos de cdigo que, ms tarde, podemos recuperar en formato de
cdigo fuente. Algunas aplicaciones utilizan esta caracterstica para generar cdigo fuente en un determinado lenguaje, como por ejemplo la estupenda utilidad WebService Studio (Figura 2) que genera dinmicamente cdigo cliente en C# para usar un servicio
Web definido a partir de su WSDL.
Lo que estamos buscando en este artculo, sin
embargo es justo lo contrario. Es decir, a partir de
un cdigo fuente preexistente o generado para la ocasin, queremos compilarlo y utilizarlo dinmicamente
sin abandonar nuestro programa, y por supuesto sin
usar herramientas externas (como los compiladores
de lnea de comandos) ni crear archivos temporales.
Como veremos a continuacin, los compiladores
de los lenguajes .NET ofrecen clases que permiten
controlar toda su funcionalidad de manera genrica
y sin salirnos de la plataforma.

Figura 1. La biblioteca de tiempo de ejecucin de JScript.Net


dispone de una funcin Eval que interpreta cualquier expresin
JScript que le pasemos como argumento.

Compilar cdigo al vuelo


Aparte de evaluar simples expresiones sera interesante obtener un control total sobre el proceso,
pudiendo adems utilizar cualquier clase que sea nece-

Figura 2. Algunas utilidades como WebService


Studio utilizan las clases de System.CodeDom
para generar cdigo fuente al vuelo.

Evaluador de expresiones multilenguaje


Como ejemplo prctico para explicar la tcnica de
compilacin al vuelo vamos a crear un evaluador que
permita obtener el resultado de cualquier expresin
escrita tanto en C# como en VB.NET. Es decir, replicaremos la funcionalidad del mtodo Eval de JScript

<<dotNetMana

Si bien esto puede ser una solucin en muchos


casos, ofrece varios problemas en otros:
Slo se puede interpretar cdigo JScript, con sus
particularidades de sintaxis.
No se puede acceder a clases contenidas en nuestra propia aplicacin (no JScript) o en otros
ensamblados, lo que en la prctica lo limita a la
evaluacin de expresiones muy simples como
expresiones matemticas o de cadena.
Carga ms la aplicacin puesto que se utilizan dos
compiladores: el de JScript y el del lenguaje en el
que estamos programando.

27

<< dnm.plataforma.net
pero para cada uno de estos otros lenguajes.
Hemos creado una clase llamada Evaluador dentro del espacio de nombres dotNetMania que tiene dos
mtodos llamados evalCS, para interpretar cdigo C#;
y evalVB, que evala expresiones escritas en Visual
Basic. En cdigo de ejemplo tambin hay un proyecto de WindowsForms que sirve para probar el mdulo
de evaluacin desarrollado. Aunque hemos escrito el
mdulo usando C#, pasarlo a Visual Basic sera cuestin de unos pocos minutos.
La tcnica del ejemplo consiste en usar el compilador de lenguaje deseado para crear un mdulo ejecutable que se compila directamente en memoria. Acto seguido, usando las clases de introspeccin de .NET, se llama a los mtodos de las clases contenidas en dicho mdulo de forma que obtengamos sus valores de retorno.
Por ejemplo, si tenemos la expresin en C#
siguiente:

(en este fragmento Expresion es la cadena con la expresin a evaluar):


StringBuilder sbComodin = new StringBuilder();
sbComodin.Append(using System;\n);
sbComodin.Append(namespace dotNetMania {\n);
sbComodin.Append( public class ClaseComodin {\n);
sbComodin.Append( public object MetodoComodin() {\n);
sbComodin.AppendFormat(return ({0}); , Expresion);
sbComodin.Append(}\n);
sbComodin.Append(}\n);
sbComodin.Append(});

Como vemos lo nico que se hace es construir una


cadena con el cdigo fuente de un archivo .CS. En el
caso de la expresin de ejemplo que hemos escogido
el cdigo resultante es:

El resultado es: + (int) ((5.2+4.17)*3)

Al evaluarla obtendramos una cadena con el nmero 28 al final ya que el resultado de la operacin matemtica se convierte en un entero y se concatena a una
cadena. Si quisisemos disponer de una funcin en nuestro programa que devolviese siempre este resultado
podramos crear una clase que definiese un mtodo conteniendo el cdigo de la lnea anterior, por ejemplo:

using System;
namespace dotNetMania
{
public class ClaseComodin
{
public object MetodoComodin()
{
return (El resultado es: + (int) ((5.2+4.17)*3));
}
}
}

public class Prueba


{
public string Resultado()
{
return (El resultado es: + (int) ((5.2+4.17)*3));
}
}

Si pudisemos compilar este cdigo slo habra que


escribir la instruccin Prueba.Resultado para obtener el
valor de la expresin anterior. Esto precisamente es lo
que vamos a hacer para conseguir nuestro objetivo.
En nuestra funcin evalCS lo primero que hacemos es crear una instancia de la clase de compilacin
de C#:

Si ahora compilamos este cdigo y llamamos al


miembro MetodoComodin de la clase ClaseComodin
obtendremos el resultado que estbamos buscando.
Antes de proceder a compilar cdigo alguno debemos establecer algunos parmetros de trabajo para el
compilador. El siguiente cdigo:

<<dotNetMana

ICodeCompiler compilador = (new CSharpCodeProvider().CreateCompiler());

28

Todos los compiladores de .NET implementan la


interfaz ICodeCompiler, por lo que una vez obtenida una
referencia a cualquiera de ellos se pueden utilizar indistintamente sin importar el lenguaje que procesen. Ahora
podemos utilizar el objeto obtenido para compilar el
cdigo que deseemos en nuestro lenguaje de eleccin,
en este caso C#. Utilizamos un objeto StringBuilder para
construir rpidamente el cdigo que se va a compilar

CompilerParameters cp = new
CompilerParameters();
cp.ReferencedAssemblies.Add(system.dll);
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;

Permite establecer las condiciones de la compilacin. Lo que se hace es aadir una referencia al ensam-

<< dnm.plataforma.net
blado base de .NET (SYSTEM.DLL), indicarle al
compilador que genere un ejecutable y, por fin, decirle que genere dicho ejecutable en memoria.

El evaluador de cdigo VB.NET es anlogo al que


acabamos de ver. La nica diferencia es que, adems
de aadir referencias al ensamblado System tendre-

CompilerResults res = compilador.CompileAssemblyFromSource(cp, sbComodin.ToString());

Con los parmetros ya establecidos slo es necesario compilar:


En la variable res obtenemos una referencia a un
objeto que refleja los resultados de la compilacin.
Con ste podemos, por ejemplo, comprobar si se han
producido errores al compilar:

mos que agregar una referencia al ensamblado de compatibilidad de Visual Basic, de forma que las expresiones puedan usar funciones heredadas de versiones
anteriores del lenguaje. Le recomiendo que eche un
vistazo al cdigo de ejemplo para comprobar cmo se
hace. Por lo dems, todo es exactamente igual. Por

if (res.Errors.HasErrors)
{
StringBuilder errores = new StringBuilder();
errores.Append(La compilacin ha producido los siguientes errores:\n);
foreach (CompilerError error in res.Errors)
{
errores.AppendFormat({0}\n, error.ErrorText);
}
throw new Exception(errores.ToString());
}

En este fragmento lo nico que se hace es recorrer los errores en caso de que se produzcan y transmitirlos al programa que est haciendo uso de nuestro mtodo.
Si no se han producido errores creamos un objeto de la clase que hemos definido en el cdigo que se
acaba de compilar:

supuesto, puede aadir otros ensamblados en los parmetros del compilador de forma que sus expresiones
tengan acceso a cualquier clase .NET, incluyendo sus
propias clases personalizadas.
He creado un pequeo programa de WindowsForms
para probar la clase. En la figura 3 se puede observar
en funcionamiento. El evaluador se puede utilizar tam-

object Comodin = res.CompiledAssembly.CreateInstance(dotNetMania.ClaseComodin);

Ya casi hemos llegado a la meta. Disponemos de


nuestro cdigo compilado en memoria y de una referencia a un objeto de la clase que se ha definido en el
cdigo generado al vuelo. Todava nos falta la capacidad de poder llamarlo y obtener el resultado que
buscbamos. Es aqu donde entra en juego la introspeccin. Gracias a ella podemos obtener una referencia a una representacin del mtodo que queremos llamar, y efectuar dicha llamada a travs de su
mtodo Invoke, as:

bin en aplicaciones ASP.NET.


Hay muchas expresiones que se pueden evaluar
indistintamente en C# y en VB.NET, como son las
numricas o las que usen la sintaxis correcta de los
objetos fundamentales de .NET. Una ventaja de usar
el evaluador de expresiones de VB es que el compilador no hace distincin entre maysculas y minsculas, por lo que, por ejemplo, esta expresin:

una frase.trim()

Devolvemos el resultado de MetodoComodin.


El cdigo total resultante para esta funcin de evaluacin es el reflejado en el Fuente 1.

Producira un error como el de la figura 4, al


evaluarla como cdigo C# (influye el hecho de que
Trim() no tenga la primera letra en mayscula),

<<dotNetMana

return Comodin.GetType().GetMethod(MetodoComodin).Invoke(Comodin, null);

29

<< dnm.plataforma.net
public static object evalCS(string Expresion)
{
//Si la expresin est vaca se devuelve un nulo y nos ahorramos la compilacin
if (Expresion.Trim() == ) return null;
//Se obtiene una referencia a un compilador de C#
ICodeCompiler compilador = (new CSharpCodeProvider().CreateCompiler());
//Asignamos parmetros de compilacin
CompilerParameters cp = new CompilerParameters();
//Se aaden las referencias mnimas
cp.ReferencedAssemblies.Add(system.dll);
//Se indica que se debe generar un ejecutable...
cp.GenerateExecutable = false;
//..y compilar en memoria, no a disco
cp.GenerateInMemory = true;
//Ahora se genera el cdigo de un ensamblado comodn al vuelo
StringBuilder sbComodin = new StringBuilder();
sbComodin.Append(using System;\n);
sbComodin.Append(namespace dotNetMania {\n);
//Se crea la clase comodn para evaluar la expresin
sbComodin.Append( public class ClaseComodin {\n);
//y se crea el mtodo comodn
sbComodin.Append( public object MetodoComodin() {\n);
//Esta es la expresin a evaluar
sbComodin.AppendFormat(return ({0}); , Expresion);
//Se cierra el mtodo
sbComodin.Append(}\n);
//Se cierra la clase
sbComodin.Append(}\n);
//y el espacio de nombres
sbComodin.Append(});
//Se compila el cdigo al vuelo
CompilerResults res = compilador.CompileAssemblyFromSource(cp, sbComodin.ToString());
//Se verifica si se han producido errores de compilacin o no
if (res.Errors.HasErrors)
{
//Se averigua qu errores ha habido
StringBuilder errores = new StringBuilder();
errores.Append(La compilacin ha producido los siguientes errores:\n);
foreach (CompilerError error in res.Errors)
{
errores.AppendFormat({0}\n, error.ErrorText);
}
//y se genera un error para informar de ello
throw new Exception(errores.ToString());
}

<<dotNetMana

// Si no ha habido errores de compilacin se obtiene


// una referencia a la clase comodn recin compilada
object Comodin = res.CompiledAssembly.CreateInstance(dotNetMania.ClaseComodin);

30

// y usando la instrospeccin se llama al mtodo


// comodn de ste devolviendo el valor obtenido como un objeto
return Comodin.GetType().GetMethod(MetodoComodin).Invoke(Comodin, null);
}

Fuente 1. El mtodo EvalCS completo

<< dnm.plataforma.net

Figura 3. En la figura se puede observar la clase evaluadora


en funcionamiento con el programa de ejemplo. Observe
como la misma expresin se ha escrito de manera diferente
para ser evaluada con C# y con VB.NET, aunque el resultado es
exactamente el mismo.

mientras que obtendramos el resultado esperado si lo evaluamos como


cdigo Visual Basic.

Ms ideas respecto
a la compilacin al vuelo
Este sencillo ejemplo nos ha servido para ilustrar grosso modo el funcionamiento de la tcnica propuesta,
pero las posibilidades son enormes.
Con ella es posible facilitar la definicin de extensiones para nuestros pro-

Figura 4. Los errores de compilacin al vuelo


los transmitimos artificialmente al cdigo que utiliza
la clase evaluadora, informando del problema ocurrido.

gramas, exponiendo al compilador


objetos propios de la aplicacin y compilando al vuelo cdigo que los usuarios escriban en archivos externos. El
intrprete de lnea de comandos estilo WSH, del que hablbamos al principio, es relativamente sencillo de crear, de forma que podramos utilizar
directamente cdigo VB.NET y C#
sin necesidad de compilarlo previamente, slo con un doble-clic sobre
un archivo.
En el cdigo de ejemplo de este
artculo se compila desde cero la

expresin cada vez que se evala, lo


cual es un proceso algo lento. Se puede optimizar la clase para que guarde
referencias a las expresiones compiladas previamente, de forma que en
sucesivas evaluaciones, en lugar de
volver a generar y compilar el cdigo,
llame directamente al cdigo precompilado. Este mismo mtodo puede facilitar grandes ganancias de rendimiento cuando las funciones que
definamos al vuelo no sean tan sencillas como las del ejemplo y, por ejemplo, dispongan de parmetros.

X-Omega o cmo combinar SQL y XML con C#


El que iba a ser X# y que luego se llam, en clave, Xen,
ahora sabemos que se probablemente se llamar X
Omega.
X Omega es, o mejor dicho, ser un lenguaje diseado para tender un puente entre los mundos de la programacin orientada a objeto (CLR), bases de datos relacionales (SQL) y los datos jerarquizados (XML), segn
cuenta Erik Meijer, Technical Lead del grupo Webdata de
Microsoft y uno de los padres del lenguaje, en su pgina de
Microsoft Research People en http://research.microsoft.com/~emeijer/
Los creadores de X Omega entre los que se encuentran, adems del propio Eric Meijer, el investigador de
Microsoft Research Wolfram Schulte, usan una metfora geomtrica para ilustrarlo: programar con crculos,
tringulos y rectngulos (similar a la antigua manera de
representar la POO). El crculo representa la programancin orientada a objetos, C# y el CLR. El CLR gestiona la ejecucin del cdigo; el tringulo representa los
datos en una estructura jerrquica, o sea, XML (con X
Omega, Microsoft se propone abarcar XML en C#); y el
rectngulo representa los datos almacenados en tablas de
bases de datos, incorporando construcciones para la manipulacin de datos relacionales directamente dentro del
lenguaje.
Junto con el soporte nativo de XML y SQL, X
Omega incluir la totalidad del lenguaje C#. Segn los
creadores, haberlo creado como una extensin de C# le
lleva a la programacin simplificada y al incremento de
la productividad.

Un poco de historia
Hace poco ms de dos aos, Schulte y Meijer empezaron un proyecto para buscar un camino para integrar
los datos directamente desde un lenguaje de programacin. Escribieron una propuesta para un nuevo lenguaje
llamado X# que enlazara SQL, XML y el modelo de programacin orientada a objetos.
En febrero de 2002, el equipo de Webdata de
Microsoft decidi tomar la especificacin del lenguaje y
desarrollarlo. El equipo complet un prototipo de investigacin del lenguaje en abril de 2003. Este prototipo
empez a fomentarse de dos formas dentro de Microsoft:
Por un lado, Microsoft Research en Cambridge, el
cual est trabajando en conjuncin con la Universidad
de Cambridge, est aadiendo un nuevo modelo de
comunicaciones para X Omega que har ms fcil
para los programadores escribir servicios Web y aplicaciones multihebra (la extensin multihebra viene
de Polyphonic C#, un derivado de C#, y tambin
una extensin de X Omega).
Dentro de seis meses, Microsoft Research Cambridge
planea una release de investigacin de Xen. Cuando
est operativa, el lenguaje probablemente se llamar
X Omega, pero no permitiremos el uso para desarrollar en aplicaciones reales, segn Schulte.
Por otro lado, varios equipos de productos internos
de Microsoft tendrn acceso a cdigo y conceptos de
X Omega, a travs del equipo de Webdata. El equipo
de Webdata de Microsoft es parte del equipo de pro-

ducto de SQL Server y est encargado de parir tecnologas de acceso a datos que se incorporan a varios
productos de Microsoft.
El equipo de Longhorn, el equipo de SQL y el equipo de Visual Studio estn en medio de stos muy probablemente para tomar elementos de X Omega y
encontrar caminos potenciales para incorporarlo, dijo
Schulte. Mientras que ninguno de estos equipos se
espera que incorporen ningn cdigo de X Omega
por ahora, la gente del subsistema de comunicaciones Indigo estn muy interesados en X Omega.
Fuentes principales Microsoft Watch, ExtremeTech
y las pginas de los principales desarrolladores. Vea informacin adicional en dotnetmania.com.

noticias.noticias.noticias.noticia

Por Alejandro Mezcua


.NET MVP
Zaltor

Acceso DAV a Microsoft Exchange Server


Microsoft Exchange Server, a partir de su versin 2000, pone a disposicin
del usuario todo su contenido mediante WebDAV. En este artculo se ver
qu es WebDAV y cmo usarlo para manipular informacin de Microsoft
Exchange Server y usarla en nuestras propias aplicaciones.

<<dotNetMana

<< Qu es WebDAV?

32

WebDAV significa literalmente Web Distributed


Authoring and Versioning o, usando una traduccin burda, Creacin y Versionado Web Distribuido. La idea detrs
de este protocolo es la de permitir la creacin, modificacin y borrado de elementos existentes en un servidor Web de manera remota.
Bsicamente es una extensin del protocolo
HTTP 1.1 en la que, adems de los conocidos mtodos GET y POST de HTTP (que permiten pedirle
archivos a un servidor Web y mandarle datos respectivamente), se aaden nuevos mtodos como
SEARCH, PROPPATCH y otros que permiten manipular de manera remota los distintos elementos que
residan en un servidor Web.
Adems de aportar nuevos mtodos al protocolo HTTP, WebDAV define que la comunicacin
entre la aplicacin y el servidor ha de realizarse utilizando XML como dialecto en aquellos mtodos
que requieran datos adicionales para poder ser procesados. Por ejemplo, si se quiere realizar una bsqueda de elementos habr que indicar qu se quiere buscar.
En este contexto, la aplicacin cliente lanza una
solicitud HTTP estableciendo un determinado
mtodo DAV y en el contenido de la solicitud incluye un determinado documento XML. El servidor
procesar la solicitud y responder devolviendo a su
vez otro documento XML que la aplicacin deber
interpretar.
WebDAV es una propuesta de estndar del IETF,
definida en la RFC 2518. Se puede obtener ms informacin en http://www.ietf.org/.

Exchange Web Store


A partir de la versin 2000 de Microsoft Exchange
Server todos los elementos almacenados en un determinado servidor, como mensajes de correo, contactos, citas, etc., se alojan en el denominado Exchange
Web Store.
El Web Store es una base de datos donde cualquier
elemento almacenado lleva asociada una URL nica
que se podr utilizar para referenciar ese elemento
individual.
Existen bases de datos que almacenarn buzones y
bases de datos que almacenarn carpetas pblicas.
Independientemente de la base de datos, el acceso a
los elementos se har mediante una URL. Por omisin, la URL base para los buzones tendr el formato
http://[servidor]/exchange/[buzon]/[carpeta]/ y para
las carpetas pblicas ser http://[servidor]/public/[carpeta]/.
Mediante Internet Information Services (IIS), se
puede acceder a los elementos almacenados utilizando HTTP (con la seguridad correspondiente que se
haya configurado). Este es bsicamente el funcionamiento que hay detrs de Outlook Web Access.
Por ejemplo, si en mi buzn de Exchange he recibido un mensaje de correo con el asunto Hola, podr
acceder desde Internet Explorer a ese elemento simplemente poniendo su URL, es decir, http://localhost/exchange/amezcua/ inbox/hola.eml, suponiendo que mi servidor de Exchange est instalado en mi
mquina (localhost) y que mi buzn de usuario es
amezcua. La solicitud HTTP que el servidor recibe es GET /exchange/amezcua/inbox/hola.eml.
Como se est accediendo a un directorio virtual con-

<< dnm.servidores.exchange

WebDAV y Exchange
Combinando las ideas de los apartados anteriores, si adems de permitir el acceso a los elementos del Store de Exchange mediante HTTP
bsico, se habilita tambin el acceso WebDAV, dispondremos de la capacidad de manipular cualquiera
de los objetos almacenados en Exchange de manera remota.
De esta forma se puede utilizar Exchange como
plataforma de aplicaciones que integre los elementos
comunes de colaboracin de una manera sencilla
(correo, citas, contactos, etc.).

Por otro lado, el store de Exchange es extensible.


Esto quiere decir que adems de los elementos comunes mencionados, se pueden crear nuevos tipos de elementos que sean nicos para nuestra aplicacin (por
ejemplo una cuenta de cliente), o ampliar y personalizar las caractersticas de los elementos ya existentes. Esto da pie a usar la base de datos de Exchange
por ejemplo como plataforma muy til para el desarrollo de aplicaciones tipo CRM, donde mantener la
informacin de contactos y de la relacin que se mantiene con ellos es muy importante.

A partir de la versin 2000 de Microsoft Exchange


Server todos los elementos almacenados
en un determinado servidor, como mensajes
de correo, contactos, citas, etc., se alojan
en el denominado Exchange Web Store

Finalmente, como se est manipulando la informacin directamente en la base de datos, Outlook reflejar automticamente los cambios realizados. Es decir, si
externamente se crea una cita, sta se ver en Outlook
como si se hubiese realizado desde la propia aplicacin.

Un ejemplo prctico
Junto a este artculo se incluye una pequea aplicacin de ejemplo que permite definir consultas DAV,
ejecutarlas en un servidor y ver el resultado devuelto
(XML). Se incluyen varias consultas predefinidas que
realizan operaciones habituales y que servirn como
punto de partida para realizar operaciones ms complejas y que se puedan adaptar a cualquier aplicacin.
El resto del artculo se centra en ver cmo funciona
este sencillo ejemplo.

Proceso de realizacin de una consulta con .NET


Recopilando lo comentado en los apartados anteriores, se ve que las tecnologas a utilizar para poder
trabajar con el servidor Exchange son bsicamente
HTTP y XML. Ambas tienen amplsimo soporte dentro de .NET Framework, con lo que la programacin
resultar muy sencilla una vez se conozca lo que se
quiere hacer.
Los pasos bsicos a realizar sern:
1 Definir las credenciales de red a utilizar para hacer

<<dotNetMana

trolado por Exchange (/exchange/), el servidor localizar el elemento solicitado en la base de datos y lo
mostrar. En este caso, por omisin mostrar los formularios HTML de Outlook Web Access, pero este
comportamiento se puede modificar, aunque este tema
queda fuera del mbito de este artculo.
Cuando se accede al buzn de un usuario, el nombre de la bandeja de entrada no es siempre inbox como
se ha mostrado (http://localhost/ exchange/amezcua/inbox/hola.eml), sino que puede ser Bandeja de
entrada (http://localhost/exchange/amezcua/bandeja de entrada/hola.eml). El que la carpeta aparezca en
un idioma u otro depende del idioma de la herramienta
que se utiliz para acceder al buzn del usuario la primera vez. Por ejemplo si se crea un nuevo buzn y la
primera vez se accede con Internet Explorer en espaol, se generar todo el rbol de carpetas del buzn
usando ese idioma.
Cada elemento de la base de datos, una vez identificado por su URL, dispone de una serie de propiedades que determinan su contenido. Por ejemplo, si
se quiere conocer el asunto de un determinado mensaje de correo, habr que acceder al elemento y obtener el valor de la propiedad urn:schemas:httpmail:subject o urn:schemas:mailheader:subject.
La idea final es entonces que cualquier elemento
dentro de Exchange est identificado de manera unvoca mediante una URL y que IIS permite el acceso a
cualquier elemento de la base de datos mediante HTTP.
La documentacin completa del esquema de definicin de objetos y propiedades est en el SDK de
Exchange. El SDK, adems de la documentacin, dispone de herramientas y utilidades para facilitar el desarrollo. En concreto una muy til es Exchange
Explorer. Este programa permite acceder al Web Store
y poder navegar por l de manera sencilla, viendo los
elementos que contiene y sus propiedades con sus
correspondientes valores.
El SDK de Exchange se puede conseguir en
http://msdn.microsoft.com/exchange/, donde hay adems interesantes artculos de desarrollo no slo sobre
este tema, sino sobre todo lo relacionado con
Exchange Server.

33

<< dnm.servidores.exchange
una peticin HTTP con la seguridad
correspondiente (usuario y contrasea). Para ello se usar la clase
System.Net.NetworkCredential.

2 Definir la solicitud HTTP mediante la clase System.Net.HttpWebRequest.


En esta clase se indica la URL a la
que se quiere acceder y se establecen
las cabeceras HTTP correspondientes (mtodo DAV, tipo de solicitud
text/xml, tamao del cuerpo del
mensaje a enviar, etc.).
3 Obtener acceso al stream de datos
que se vayan a mandar en la peticin HTTP (a travs del mtodo
GetRequestStream() de la clase
HttpWebRequest y escribir en este stream la solicitud XML deseada. Para
escribir en el stream se puede utilizar
la clase System.IO.StreamWriter.
4 Una vez definido esto, se enviar
la solicitud y se obtendr la respuesta del servidor mediante la llamada al mtodo GetResponse() de
la
clase
System.Net.HttpWebRequest , obteniendo un objeto de tipo
System.Net.HttpWebResponse.

5 Desde el objeto HttpWebResponse se


tiene acceso a un nuevo stream
mediante la llamada al mtodo
GetResponseStream(). Este stream
contiene la respuesta del servidor y
se puede cargar en una clase de tipo
System.Xml.XmlTextReader para acceder a su contenido y manipularlo de
la manera ms adecuada para la aplicacin (como un documento XML,
con XPath, etc.).
En el ejemplo adjunto, todos estos
pasos estn definidos en una funcin
llamada EjecutarConsulta(), definida
en la clase frmMain, que toma los datos
del formulario para realizar la solicitud. Se remite al lector al ejemplo para
ver el cdigo completo. Incluye
comentarios para seguirlo con claridad. El ejemplo est desarrollado usando el lenguaje C#.

<<dotNetMana

Leer el contenido de un buzn

34

Como primer ejemplo, se va a obtener la lista de elementos que existan en


la bandeja de entrada en un buzn de
Exchange. Estos sern normalmente

Figura 1:Aplicacin de ejemplo ejecutando la bsqueda de todos


los elementos de un buzn.

mensajes de correo. De cada mensaje de


correo se van a obtener los campos sendername, el asunto, la fecha de recepcin y si el mensaje est marcado como
ledo (en Outlook se vern en negrita si
no se han ledo). Para ello, la solicitud
XML a enviar al servidor ser:

Store a la que se quiere enfocar la consulta (la carpeta en la que estn los mensajes). Si se quieren obtener los mensajes del buzn amezcua del servidor
local, habr que sustituir [ServerUrl]
por http://localhost/exchange/amezcua/inbox/.

<?xml version=1.0?>
<D:searchrequest xmlns:D = DAV:>
<D:sql>
SELECT urn:schemas:httpmail:sendername, urn:schemas:httpmail:subject,
urn:schemas:httpmail:datereceived, urn:schemas:httpmail:read
FROM [ServerUrl] </D:sql>
</D:searchrequest>

Como se ve, la solicitud es muy sencilla. El primer paso es determinar el


namespace DAV: en la raz del documento (xmlns:D = DAV:). En
este ejemplo se le asigna el identificador D, que se utilizar en el resto de los
nodos del documento.
En la raz del documento se determina que el tipo de solicitud a realizar
es searchrequest, es decir, una bsqueda. El contenido del documento
indica que la consulta es de tipo SQL
(<D:sql>), y la bsqueda es una simple sentencia SELECT, donde los campos a obtener son las propiedades de los
mensajes y en el apartado FROM de la
sentencia se indicar la URL del Web

Una vez definida la consulta, hay que


enviarla al servidor mediante HTTP a
esta misma URL. En la aplicacin de
ejemplo, la URL a la que se enva la peticin hay que escribirla en la caja de texto URL. La aplicacin adems sustituir por comodidad en la consulta XML
el texto [ServerUrl] por lo que se escriba en la caja de texto URL, de manera
que no hay que escribirla dos veces.
Para obtener la lista de mensajes, el
mtodo DAV ser SEARCH.
Si se ejecuta esta consulta en la aplicacin de ejemplo, el formulario se ver
como aparece en la figura 1.
Como se ve en esta imagen, en la
respuesta del servidor (parte inferior de

<< dnm.servidores.exchange
la ventana) se definen varios namespaces que determinan el mbito de cada
uno de los campos en el nodo raz del
documento XML (<a:multistatus>).
Por ejemplo, el campo sendername
( <d:sendername> ) est definido en el
namespace urn:schemas:httpmail:
(xmlns:d=urn:schemas:httpmail:) y se
referencia en el ejemplo como d:.
La lista de namespaces completa se
puede encontrar en la documentacin
del SDK de Exchange.
Por cada elemento encontrado en
la consulta, se devolver un elemento <a:response> (namespace DAV:,
o, dicho de otro modo, respuesta
DAV). Por cada uno de ellos se
devuelve la URL completa del elemento en el nodo <a:href>, que habitualmente la aplicacin almacenar

para manipular cada uno de los elementos individuales.


A continuacin aparecen uno o varios
nodos de tipo <a:propstat>. Dentro de
cada elemento <a:propstat> aparece un
sub-apartado <a:prop> con los valores
de las propiedades solicitadas, como

Status, indicando que se devuelve una


respuesta que combina varias respuestas HTTP. Esto se puede examinar en
el cdigo, depurando la aplicacin. Se
ver que la propiedad StatusCode del
objeto HttpWebResponse contiene justamente 207, con la propiedad Status-

<d:sendername>Alejandro Mezcua</d:sendername>.

Description = Multi-Status.

Se puede apreciar en la respuesta tambin un nodo <a:status> como primer


sub-apartado del nodo <a:propstat>. En
este ejemplo, aparece el estado como
<a:status>HTTP/1.1 200 OK</a:status>,
indicando que todas las propiedades bajo
ese nodo propstat se han podido leer
correctamente. El estado se devuelve en
formato estndar de HTTP.
Realmente, la respuesta HTTP del
servidor devuelve un estado 207, Multi-

Si la consulta hubiese sido por ejemplo la que muestra el fuente 1, donde se


est solicitando un campo que no existe (marcado en negrita como sendernam, cuando debera ser sendername) la respuesta del servidor sera la
que muestra el fuente 2.
Sigue siendo una respuesta HTTP
207 (Multi-Status) y se ve que las propiedades que se han podido encontrar
aparecen en una seccin <a:propstat>
con un nodo hijo <a:status> con con-

<?xml version=1.0?>
<D:searchrequest xmlns:D = DAV:>
<D:sql>
SELECT urn:schemas:httpmail:sendernam, urn:schemas:httpmail:subject,
urn:schemas:httpmail:datereceived, urn:schemas:httpmail:read
FROM [ServerUrl] </D:sql>
</D:searchrequest>

<?xml version=1.0?>
<a:multistatus xmlns:b=urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/ xmlns:d=urn:schemas:httpmail: xmlns:c=xml: xmlns:e=urn:schemas-microsoft-com:office:office xmlns:a=DAV:>
<a:response>
<a:href>http://localhost/exchange/amezcua/Inbox/Prueba%20DAV2.EML</a:href>
<a:propstat>
<a:status>HTTP/1.1 200 OK</a:status>
<a:prop>
<d:subject>Prueba DAV2</d:subject>
<d:datereceived b:dt=dateTime.tz>2003-12-12T10:23:24.703Z</d:datereceived>
<d:read b:dt=boolean>1</d:read>
</a:prop>
</a:propstat>
<a:propstat>
<a:status>HTTP/1.1 404 Resource Not Found</a:status>
<a:prop>
<d:sendernam />
</a:prop>
</a:propstat>
</a:response>

Fuente 2

<<dotNetMana

Fuente 1

35

<< dnm.servidores.exchange

Figura 2:Aplicacin de ejemplo con la consulta para marcar un objeto


del servidor como no ledo.

tenido OK (HTTP 200) y otra seccin con un estado HTTP 404 (no encontrado). Bajo sta se indica
que la propiedad que no se ha encontrado es <d:sendernam /> (ya que la propiedad correcta es <d:sendername>). De esta forma, al examinar el documento XML se podr ver con claridad si la consulta realizada es correcta o no.
Todas estas combinaciones se pueden probar en la
aplicacin de ejemplo para que el lector se familiarice con el protocolo.

Modificacin de las propiedades


de un objeto del servidor

<<dotNetMana

Otra de las tareas habituales que se realizarn cuando se trabaje en este entorno, ser la de modificar los
valores de las propiedades de los distintos elementos
que estn alojados en el Web Store.
Para modificar un elemento, el mtodo DAV a utilizar es PROPPATCH.
En el ejemplo se proporciona una consulta que
modifica un elemento para marcarlo como no ledo.
La consulta realizada es:

36

En esta consulta se define que la operacin a ejecutar es DAV:propertyupdate y la propiedad que se


quiere modificar es urn:schemas:httpmail:read. El
valor que se quiere establecer en la propiedad es 0 (no
ledo, <h:read>0</h:read>).
En esta consulta se puede apreciar que no se incluye ninguna URL como se hizo en la sentencia SQL
del ejemplo anterior. Para ejecutar esta consulta en la
aplicacin de ejemplo es necesario conocer la URL
del elemento al que se desea establecer la propiedad.
Si tomamos la URL del primer elemento de la consulta anterior, la aplicacin de ejemplo quedara tal y
cmo puede verse en la figura 2.
Igual que en el ejemplo anterior, el servidor responde con un documento XML de tipo multistatus
(HTTP 207).
En este caso, la respuesta simplemente es una confirmacin de si se ha podido o no modificar la propiedad del objeto dado.
En algunos casos puede resultar til indicarle al servidor que no devuelva todo este documento XML, por
ejemplo para ahorrar ancho de banda, y que simplemente responda con el cdigo de estado HTTP y un
documento ms reducido. Para ello se puede establecer la cabecera Brief: t y el documento XML devuelto ser menor.
Una prueba interesante de este ejemplo es disponer de Outlook conectado al buzn de Exchange
mientras simultneamente se ejecuta esta consulta.
Outlook en unos segundos actualizar su vista mostrando el elemento como no ledo. Se comprueba as
que se puede disponer de n clientes dispares trabajando simultneamente con los elementos de la base
de datos. Se deja como ejercicio para el lector la creacin de una consulta que aada un elemento de calendario. Si al mismo tiempo Outlook est mostrando la
vista del calendario, la nueva entrada aparecer mgicamente al ser creada desde la aplicacin de ejemplo.

Restringir el nmero
de elementos devueltos
Otra cosa til es limitar el nmero de elementos
que se quieren obtener en la consulta. En el primer
ejemplo, se devuelven todos los mensajes que hay en
un determinado buzn, pero el protocolo permite

<?xml version=1.0?>
<d:propertyupdate xmlns:d=DAV: xmlns:h=urn:schemas:httpmail:>
<d:set>
<d:prop>
<h:read>0</h:read>
</d:prop>
</d:set>
</d:propertyupdate>

<< dnm.servidores.exchange

Notas sobre la aplicacin


de ejemplo
El proyecto que se facilita junto al artculo est
desarrollado en Visual Studio .NET 2003 usando el
lenguaje C#. Si el lector dispone slo de la versin
2002 de Visual Studio .NET no podr abrir el proyecto directamente, pero puede crear un nuevo proyecto de Windows Forms y aadir las clases que se
proporcionan (archivos con la extensin .cs) para poder
compilar la aplicacin.
La funcionalidad principal de este ejemplo est
en la funcin EjecutarConsulta de la clase frmMain.
Esta funcin realiza una consulta HTTP de manera
sncrona hacia la URL de destino. Esto implica que
la aplicacin completa permanecer bloqueada hasta que se reciba una respuesta del servidor o se agote el tiempo de espera de la solicitud HTTP. En una
aplicacin real esta operacin se realizara de manera asncrona para no bloquear el interface de usuario. En este caso se ha decidido no hacerlo facilitando as la lectura del cdigo para ver las operaciones
bsicas que se realizan.
Por otro lado, por la misma razn de legibilidad
del cdigo, la funcin EjecutarConsulta no tiene en
cuenta todas las posibles combinaciones de cabeceras HTTP y mtodos DAV disponibles, con lo que
ciertas consultas es posible que no funcionen como
se espera con el cdigo tal cul se presenta. Se remite al lector al SDK de Exchange para determinar las
posibles combinaciones y se le anima a realizar las
modificaciones pertinentes para conseguir el resultado deseado.

Figura 3:Aplicacin de ejemplo con la consulta para obtener


slo el primer elemento del buzn.

Finalmente, el lector ver que existen dos clases


en el proyecto llamadas DavQueryDef y DavQueryDefCollection. Estas clases permiten que se puedan guardar fcilmente las consultas al disco para poder recuperarlas posteriormente. Se guardan en el disco en un
archivo XML generado a partir de la serializacin de
esas clases.

Conclusiones
Como se ha visto en este artculo, Microsoft
Exchange Server pone a disposicin de los programadores un interface basado en HTTP y XML
(WebDAV) que permite manipular el contenido del
Web Store para beneficio de aplicaciones a medida.
Tanto HTTP como XML son tecnologas con un
gran soporte en .NET, con lo que desarrollar aplicaciones para esta plataforma resulta muy sencillo
tcnicamente hablando.
Se ha proporcionado una aplicacin de ejemplo que puede servir como base para la creacin
de aplicaciones de colaboracin sofisticadas. El
ejemplo permite crear manualmente consultas
WebDAV que se pueden probar rpidamente contra cualquier servidor Exchange al que se tenga
acceso.
El rango de posibles aplicaciones que se pueden
desarrollar es muy amplio. Junto al ejemplo se proporcionan algunas consultas bsicas para empezar a
trabajar, pero se deja como tarea para el lector definir consultas ms elaboradas que se podrn incorporar a esta aplicacin para su prueba.

<<dotNetMana

definir que se devuelva slo un nmero dado de elementos.


Todos los elementos de una determinada carpeta
estn numerados con un ndice empezando por cero.
Si se quisiera obtener nicamente el primer elemento del buzn, habr que aadir una nueva cabecera
HTTP a la solicitud indicando el rango de elementos
a obtener, en este caso del elemento 0 al elemento 0.
La cabecera se escribira como Range: rows=0-0. En
la aplicacin de ejemplo se incluye esta funcionalidad
si se marca la casilla Restringir resultados y se incluye en las cajas de texto el ndice menor y el mayor a
devolver. Si se ejecuta el ejemplo en la aplicacin el
resultado se ver tal y cmo aparece en la figura 3.
La cabecera Range se aade a la solicitud HTTP
con el mtodo AddRange de la clase HttpWebRequest.
Adems de permitir la obtencin de elementos individuales, o de elementos consecutivos (p.e. del 0 al 5)
se pueden crear rangos ms complejos que permitan
obtener varios elementos de la lista separados (del 0
al 5 y del 18 al 25). Este punto viene bien documentado en el SDK de Exchange.

37

Por Salvador Ramos


SQL Server MVP
HelpDNA.net

Cmo reducir el log de transacciones


de una base de datos de SQL Server
Esta es la pregunta que con ms frecuencia aparece en los grupos de noticias
de SQL Server (news://news.microsoft.com/microsoft.public.es.sqlserver).Aqu
vamos a dar diversas soluciones al problema y a explicar qu es el Transaction
Log, qu ocasiona su crecimiento y qu medidas hay para evitar que crezca
desmesuradamente.

<< Por cada base de datos de SQL Server hay, al menos,

<<dotNetMana

un archivo .LDF donde se van registrando en serie


todas las transacciones que se realizan en dicha base
de datos. Y en principio quedan almacenadas histricamente, lo que ocasiona que si no se toman
ciertas medidas acabe teniendo unos tamaos descomunales e incluso llenando el disco donde se
encuentra. Tambin es importante conocer que los
tamaos de los archivos de datos (.MDF y .NDF)
no tienen porqu tener ninguna relacin en cuanto al tamao con los archivos (.LDF).
Para evitar el crecimiento desmesurado del log
tenemos varias alternativas:

38

1) Poner la base de datos en modelo de recuperacin


sencillo. Ver figura 1.
Esta opcin implica que slo se almacenarn
en el log de transacciones, las que se estn ejecutando actualmente, y una vez finalizadas
desaparecen de dicho registro. Es una opcin
muy cmoda para evitar problemas con el crecimiento del log, pero por el contrario no dispondremos de informacin aqu almacenada
que nos puede ayudar enormemente en casos
de catstrofes en dicha base de datos, a la hora
de recuperar su informacin.

Figura 1. Poner la base de datos en modelo


de recuperacin sencillo

2) Poner la base de datos en modelo de recuperacin


completo (que es la opcin por defecto al crear una
base de datos).

<< dnm.servidores.sql

Para evitar que este archivo almacene de forma


indefinida todas las transacciones que se producen en dicha base de datos debemos implementar una poltica de copias de seguridad que
incluya tambin el backup de este log de transacciones, quedando esta informacin histrica
almacenada en los dispositivos de copia de seguridad. Para ello disponemos de la instruccin
BACKUP LOG (puede ampliar informacin
sobre ella en los Books On Line de SQL Server).
Tenga en cuenta que las copias de la base de
datos no truncan el registro de transacciones.
Adems con las copias de seguridad del registro
de transacciones puede recuperar la base de datos
hasta un momento determinado, lo que nos sera
de gran ayuda si a cierta hora se ha lanzado una
operacin no deseada, como el borrado de una
tabla completa. En ese caso podramos restaurar la informacin hasta el momento anterior a
la ejecucin de dicho borrado.
Es importante saber que podremos hacer copias
del registro de transacciones con mayor frecuencia que las copias de la base de datos, ya que
estas primeras consumen menos recursos.
Una buena poltica de copias de seguridad incluye copias del registro y de la base de datos. As
en caso de catstrofe, se restaurar la ltima
copia de la base de datos que tengamos disponible y posteriormente se irn restaurando las
copias del registro de transacciones que tengamos posteriores a la copia de seguridad de la
base de datos. Consiguiendo as una menor prdida de informacin. Cosa que con la solucin
dada en el punto 1 no sera posible, y slo podramos recuperar los datos de la ltima copia de
la base de datos, ya que no dispondramos de
informacin histrica del registro de transacciones.
Una vez vistas las alternativas para evitar este tipo
de problemas, siendo la mejor establecer el modo de
recuperacin completo y poner en marcha una buena poltica de copias de seguridad de la base de datos,
vamos a pasar a resolver los casos, ya sea el motivo
que fuese, nos encontramos con el log de transacciones con un tamao desmesurado o el disco lleno y
necesitamos reducir su tamao.
Tenga en cuenta que aun habiendo puesto en prctica las medidas vistas anteriormente, puede que en
un momento dado nos encontremos con un crecimiento desmesurado del fichero del log de transac-

ciones, por ejemplo, debido a la ejecucin de una transaccin que afecte a un gran nmero de registros. Ya
que el log de transacciones necesita una gran cantidad de espacio para registrar esta operacin. Para
detectar este tipo de actualizaciones masivas se puede utilizar el Profiler de SQL Server.
Tambin es importante tener en cuenta que no se
debe borrar el registro de transacciones, salvo causas
de fuerza mayor (principalmente falta de espacio en
disco). Lo que se debe hacer es disear una estrategia
de copia de seguridad adecuada.

Las transacciones quedan almacenadas


histricamente, lo que ocasiona que si no
se toman ciertas medidas acabe teniendo
unos tamaos descomunales
e incluso llenando el disco donde se encuentra

Vamos a dar dos soluciones rpidas al problema,


que en la mayora de los casos resuelven la situacin:
1) Hacer un backup del log y reducir el fichero.
Ejecutar dos o tres veces la instruccin CHECKPOINT. Esto asegura que todas las pginas de
memoria se han escrito en el fichero de datos.
En este punto es conveniente hacer una copia de
seguridad de la base de datos, ya que hemos eliminado la informacin del Transaction Log, y si
ocurriese un error slo podramos recuperar informacin desde la ltima copia de la base de datos.
Ejecutar la instruccin BACKUP LOG WITH
TRUNCATE_ONLY. Esta instruccin hace que
se trunque el registro de transacciones, eliminando la informacin histrica de transacciones
que haba en l.
Posteriormente ejecutar DBCC SHRINKFILE
indicando el nombre del fichero .LDF a reducir.

<<dotNetMana

Esta opcin implica que quedarn almacenadas


todas las transacciones, incluyendo las que hayan
finalizado. Se recomienda utilizar esta opcin.

39

<< dnm.servidores.sql
2) Eliminar el fichero para que se genere de nuevo.
Esta opcin es demasiado drstica, hay que emplearla slo si falla la anterior:
Poner la base de datos en modo Single User.
Ejecutar dos o tres veces la instruccin CHECKPOINT. Esto asegura que todas las pginas de
memoria se han escrito en el fichero de datos.
Asegurarse de que no hay transacciones abiertas a la base de datos, con lo que no puede haber
transacciones a medio ejecutar.
Separar la base de datos del servidor, bien desde el administrador corporativo o bien utilizando el procedimiento almacenado del sistema
sp_detach_db.
Eliminar el fichero (o ficheros) .LDF correspondiente a dicha base de datos.
Volver a adjuntar la base de datos al servidor,
bien desde el administrador corporativo o bien
utilizando el procedimiento almacenado del sistema sp_attach_db. SQL Server, al volver a conectar la base de datos y no encontrar el fichero del
transaction log, crea uno nuevo.
Importante! Si no se ejecuta el proceso completamente y en ese orden estricto, podra tener
problemas de inconsistencia de informacin en el
fichero de datos.

<<dotNetMana

Figura 2

40

Por ejemplo, si se apaga el equipo, sin ms, antes


de haber terminado todo el proceso, SQL Server no
ha tenido tiempo de volcar las pginas de datos de la
memoria al disco. Al reiniciar SQL Server, el problema ser corregido utilizando la informacin contenida en el registro de transacciones, pero si ste no est
presente, el archivo de datos se dar por bueno, y
podra estar realmente inconsistente debido a que
hubiese transacciones que no haban terminado en el
momento de apagar el equipo.
Otro detalle importante es que el log de transacciones nunca se limpia totalmente, ya que siempre hay
operaciones internas que SQL Server necesita mantener en l, aunque el tamao que stas ocupan es
mnimo.
A pesar de todo lo visto hasta ahora nos podemos
encontrar con problemas que impidan truncar el log
de transacciones, y puede que los pasos vistos hasta
ahora no sean tan obvios como puedan parecer tras su
lectura inicial.
A continuacin vamos a dar una explicacin ms
detallada sobre el registro de transacciones que nos
ayude a entender y poder resolver las situaciones en
las que no nos funcione lo visto anteriormente.
El registro de transacciones est compuesto por,
al menos, dos Registros Virtuales (VLF = Virtual Log
Files). El truncado del registro de transacciones se realiza VLF a VLF. Slo si tienes dos VLF y te ocupan
todo el fichero, no podrs truncarlo. Aunque dudo
que cada VLF llegue a ocupar mucho espacio.
En el log de transacciones siempre hay una parte
activa, y sta no se podr truncar nunca. Esta parte
est compuesta por todas las transacciones que an
estn incompletas, y si se truncase se produciran incoherencias en la base de datos. La primera entrada a la
parte activa del registro est identificada por el
MinLSN (n de secuencia de registro mnimo de recuperacin).
En la figura 2 se muestra un ejemplo con veinte
VLFs, en el cual nunca se ha realizado una operacin
que elimine informacin del log de transacciones.

<< dnm.servidores.sql

Figura 3

Al realizar el truncamiento, quedan truncadas las filas


que se encontraban en los VLFs anteriores al que contiene el MinLSN (siempre se truncan VLFs completos).
Esta operacin no reduce el tamao del archivo
en disco. Como se puede comprobar (ver figura 3)
sigue siendo igual, slo reduce el tamao del archivo
de registro lgico. Aunque ahora si que queda prepa-

rado para que pueda ser reducido con una operacin


BDCC SHIRINKFILE.
Al ejecutar una instruccin DBCC SHRINKFILE
slo se le indica a SQL Server que se quiere reducir
el tamao fsico del fichero .LDF, consiguiendo eliminar el espacio anteriormente truncado.
Existen una serie de instrucciones DBCC que nos
ayudan a comprobar la consistencia fsica y lgica de
la base de datos. Entre ellas tenemos DBCC LOGINFO, con ella se obtiene una lista de los VLF, y fijndonos en la columna Status podremos ver los que no
estn activos. stos son los que tienen el valor 2.
La puede probar ejecutando desde el Query
Analyzer: DBCC LOGINFO(NorthWind).
Tenga en cuenta que esta es una instruccin no
documentada.

Microsoft aade su propia herramienta de reporting


a SQL Server 2000
Microsoft ha anunciado la disponibilidad de SQL
Server 2000 Reporting Services. Con esto Microsoft
equipa a las compaas con una nueva herramienta
potente de generacin de informes que puede aumentar la perspectiva sobre su negocio aportando informacin en tiempo real desde cualquier fuente de datos
a cualquier dispositivo.
Como resultado, empleados de cualquier nivel
tendran mejor acceso a la informacin que incrementar la habilidad de tomar decisiones con ms
informacin y aporta ms valor al negocio de sus
compaas. Con el aadido de Reporting Services,
SQL Server, una parte de Microsoft Windows Server
System, aporta una plataforma nica, la ms completa gestin de datos y Business Intelligence (BI)
del mercado con analticas integradas que incluyen
procesos analticos online, data mining, data warehousing, herramientas para extraer, transformar y
cargar datos y funcionalidades de generacin de
informes.
Reporting Services es una solucin empresarial
ms asequible que otras soluciones de la competencia en el mercado de hoy en da. Se construye sobre
el xito de SQL Server 2000 para aportar una solucin integrada y escalable tanto si es usada para enviar
informes interactivos a cinco o 50.000 suscriptores,
dijo Paul Flessner, vicepresidente senior de Enterprise
Server en Microsoft. Con Reporting Services, nuestros clientes se beneficiarn de una solucin de informes rentable, fcil de usar que les permite mejorar la

influencia de los datos para la toma de decisiones


empresariales ms inteligentes.
Tom Rizzo, Product Manager de Microsoft SQL
Server, ha dicho que la decisin de aadir Reporting
Services a la familia SQL viene directamente de las
demandas de los clientes Posiblemente no a usuarios expertos, pero s para los usuarios comunes dentro de las compaas quienes necesitan ms y mejores accesos a los datos. Como comunic en el eADT
(en febrero de 2004), Microsoft tambin ha prometido continuar incluyendo el conjunto de herramientas de Crystal Decisions de Business Objects en
la actual versin de Visual Studio .NET y en
Whidbey.
El producto ha pasado ya los procesos de beta testing. La primera fase comenz en la primavera de
2003 y la segunda alrededor de octubre. En la beta
2 nosotros tuvimos 30.000 usuarios registrados. En
la primera semana 7.500 personas descargaron la
copia de evaluacin, dijo Tom Rizzo.
Puede enviar informes en formatos HTML, PDF,
TIFF, hojas de clculo Excel, ficheros delimitados
por comas y XML.
Los vendedores de servicios similares de informes incluyendo Crystal Decisions y Actuate tienen
un sistema a de licencias que pueden hacer irresistible al nuevo Microsoft Reporting Services que es
gratuito si tienes una licencia de SQL Server 2000.
Para ms informacin:
http://www.microsoft.com/sql/reporting/

noticias.noticias.noticias.noticia

Por Francisco Charte


Torre de Babel
www.fcharte.com

Acceso a bases de datos en Delphi 8 .NET


Adems de poder utilizar los proveedores ADO.NET integrados en la biblioteca de clases .NET, el nuevo Delphi 8 .NET nos ofrece otras alternativas entre
las que se encuentra el flexible BDP (Borland Data Provider).

<< Introduccin

<<dotNetMana

La plataforma .NET representa para los programadores el contexto en el que, en el futuro, debern
ejecutarse todas las aplicaciones escritas para Windows,
por lo que no es de extraar que la oferta de herramientas .NET vaya incrementndose paulatinamente. Una de las ltimas en aparecer, est disponible desde el pasado mes de enero, es Borland Delphi 8 for
Microsoft .NET Framework, analizada en el primer
nmero de sta nuestra revista.
Borland siempre ha sido conocida entre los programadores por sus magnficos entornos de desarrollo, desde los tiempos de Turbo Pascal, de los cuales
el ms importantes en la ltima dcada ha sido Delphi.
La octava versin de este producto est dirigida a la
generacin de soluciones .NET, aportando un entorno de trabajo totalmente nuevo, extensiones al lenguaje, nuevos componentes, etc.
Como lenguaje .NET de pleno derecho, el nuevo Delphi .NET puede acceder a todos los servicios
de la biblioteca de clases con que cuenta la plataforma: WinForms, ASP.NET, ADO.NET, etc. No tendra nada de particular, salvo la diferente sintaxis del
lenguaje, la construccin de un proyecto utilizando
los mismos recursos y clases que encontraramos en
Visual Studio .NET. Las diferencias comienzan en los
elementos exclusivos de Delphi .NET, entre los que
se encuentran sus mecanismos de acceso a datos.

42

Acceso a datos en la plataforma .NET


La llegada de la plataforma .NET supuso la introduccin de un nuevo mecanismo de acceso a datos,

las transiciones de un RDBMS a otro,


no implican la sustitucin
de componentes sino casi
exclusivamente una modificacin
en la cadena de conexin

evolucionado a partir de ADO (Active Data Objects),


al que se denomin ADO.NET. Este modelo tiene
dos pilares fundamentales: los proveedores de acceso
a datos y el conjunto de datos desconectado o DataSet.
Los proveedores ADO.NET son los responsables
de facilitar la conexin con la fuente donde se encuentran los datos, la recuperacin de los mismos y la transmisin de rdenes de modificacin, insercin o borrado. La primera versin de la plataforma incorporaba
dos proveedores: SqlClient y OleDb. El primero es
especfico para SQL Server, mientras que el segundo
abre las puertas, a travs de COM Interop, a la utilizacin de cualquier proveedor OLE DB clsico. La posterior revisin de la plataforma, coincidiendo con la presentacin de Visual Studio .NET 2003, introdujo dos
proveedores adicionales: Odbc y OracleClient que,
como es fcil imaginar, hacen posible el acceso a fuen-

<< dnm.laboratorio.net
tes ODBC (Open Database Connectivity) y
la conexin directa con Oracle a travs
de OCI (Oracle Call Interface).
La eleccin de un determinado origen de datos conlleva el uso de un conjunto de componentes u otro, cada uno
de ellos alojado en un namespace diferente. Si en principio nuestros datos
residen en un servidor SQL Server recurriramos al mbito System.Data.SqlClient y emplearamos las clases
SqlDataReader, SqlDataAdapter, etc.
Si, con posterioridad, necesitamos hacer
la transicin a un servidor Oracle, deberamos sustituir lo anterior por el mbito System.Data.OracleClient y las clases OracleDataReader, OracleDataAdapter, etc.

BDE (Borland Database Engine), IBX


(InterBase Express), dbExpress, dbGo,
etc. Delphi 8 .NET no iba a ser una
excepcin, aadiendo a todos los anteriores, y a la capacidad de utilizar los
proveedores ADO.NET de la plataforma .NET, el nuevo BDP .NET.

vamente una modificacin en la cadena


de conexin de BdpConnection.

Configuracin de la conexin
El entorno de Delphi 8 .NET dispone de una ventana, llamada Data
Explorer, similar al Explorador de servidores de Visual Studio .NET y desde
la que podemos servirnos de las conexiones ya definidas para examinar la
estructura de una base de datos: sus
tablas, columnas, procedimientos almacenados, etc. Una simple operacin de
arrastrar y soltar, desde esta ventana a
un contenedor, provoca la configuracin
automtica de los componentes de conexin y el adaptador de datos asociado.
Lgicamente, podemos definir tan-

Figura 2. Componentes BDP en la paleta


de herramientas de Delphi 8 .NET

A pesar de que sera posible codificar


los procesos con cierta independencia del
proveedor de datos, utilizando interfaces genricas como IDbConnection e
IDataReader, lo cierto es que cambiar
la fuente de los datos supone un trabajo
considerable.

El proveedor BDP
de Delphi 8 .NET
Delphi ha destacado siempre por su
flexibilidad a la hora de acceder a distintos RDBMS, utilizando para ello

Figura 3. El Explorador de datos


nos permite examinar las conexiones
ya definidas

tas conexiones como precisemos, apareciendo cada una de ellas en la ventana anterior como una hoja dentro de la
rama que corresponda al tipo de
RDBMS. Cada conexin es, en definitiva, una coleccin de parmetros que
se guarda bajo un determinado nombre
en un archivo local.
Al configurar un componente
BdpConnection hay que facilitar una
cadena de conexin, en la propiedad
ConnectionString, que, entre otros
datos, contiene el nombre del ensamblado correspondiente al RDBMS sobre
el que va a trabajarse. En la figura 4, por
ejemplo, puede apreciarse cmo adap-

<<dotNetMana

Figura 1. Los componentes de acceso a


datos existentes en Visual Studio .NET
2003

La diferencia fundamental entre el


proveedor de datos de Borland y los proveedores de Microsoft, antes citados, es
que el primero nos permite acceder a
diferentes orgenes de datos utilizando
el mismo conjunto de componentes.
Dicho con otras palabras: BDP no es un
proveedor especfico para un determinado RDBMS. Inicialmente podemos
usarlo para acceder de manera indistinta a Access, InterBase (el RDBMS de
Borland), Oracle, DB2 y SQL Server,
pudiendo extenderse para usar asimismo otras fuentes potenciales.
En lugar de los cuatro tros de componentes que encontramos en Visual
Studio .NET (vase figura 1), en la paleta de herramientas de Delphi 8 .NET
encontramos exclusivamente un componente de cada tipo (vase figura 2):
uno para conexin, otro que representa los comandos a ejecutar, un tercero
que acta como adaptador y el ltimo
encargado de generar los comandos.
Esta arquitectura, ms sencilla, tiene como consecuencia que las transiciones de un RDBMS a otro, en caso de
ser necesarias, no implican la sustitucin de componentes sino casi exclusi-

43

<< dnm.laboratorio.net
tamos el componente BdpConnection1 para acceder a una base de datos InterBase. Modificando este
parmetro, Borland.Data.InterBase, cambiaramos
el tipo de base de datos de origen por otra SQL Server,
Oracle, DB2 o Access, segn el ensamblado que indicsemos.

Figura 5. Editor de conexiones de Delphi 8 .NET

Figura 4. Configuramos un componente de conexin para


acceder a una base de datos InterBase

Preparada la conexin mediante este editor, la configuracin de un componente BdpConnection resulta tan sencilla como desplegar la lista adjunta a la propiedad ConnectionString y seleccionarla por su nombre. El diseador recuperar toda la informacin y
construir la cadena de conexin para nosotros.
La informacin que aparece en el Editor de conexiones se aloja localmente en un archivo llamado
BdpConnections.xml, siendo til exclusivamente
durante la fase de diseo. Lo que se incorpora al cdigo del proyecto, configurada la conexin, es la cadena con todos los parmetros y no el nombre que
hubisemos dado a dicha conexin.

La propiedad ConnectionString de un componente BdpConnection puede modificarse tanto en


la fase de diseo, definiendo una conexin o asignando la cadena de conexin equivalente, como en ejecucin. Esto nos permitira cambiar el tipo de base de
datos segn las necesidades se viesen alteradas durante el funcionamiento de la aplicacin.

<<dotNetMana

El Editor de conexiones

44

Aunque, como acaba de decirse, es posible configurar el contenido de la propiedad ConnectionString


manualmente, introduciendo el ensamblado del proveedor, el camino donde se encuentra la base de datos
y dems parmetros especficos, este trabajo resultar mucho ms sencillo si nos servimos del Editor de
conexiones con que cuenta Delphi 8 .NET. Gracias
a l podemos tanto crear nuevas conexiones como adecuar las ya existentes.
Este editor enumera, en el panel de la izquierda,
todas las conexiones existentes, mostrando los parmetros de la que tengamos seleccionada en cada
momento. Al aadir una nueva conexin podemos elegir el RDBMS asociado, configurndose automticamente el nombre del ensamblado que corresponda.

Figura 6. Contenido del archivo XML


que almacena las cadenas de conexin

Distribucin de una aplicacin


que usa el BDP
Al instalar una aplicacin sobre un sistema que ya
cuenta con la plataforma .NET puede asumirse la exis-

<< dnm.laboratorio.net

Otras opciones de acceso


a datos
Delphi 8 .NET es una herramienta basada en un
nuevo compilador, que cuenta con un entorno renovado respecto a Delphi 7 y utiliza una biblioteca de
clases diferente a la versin previa. Esto no significa,
sin embargo, que Borland haya olvidado ofrecer a los
desarrolladores caminos que faciliten la transicin de
sus proyectos desde la plataforma Win32 a .NET.
En este contexto es donde debemos incluir alternativas para el acceso a datos como BDE.NET, IBX.NET,
dbExpress. NET y DataSnap.NET, equivalentes a BDE,
IBX, dbExpress y DataSnap en Delphi 7. Esto significa
que podemos seguir utilizando los mismos componentes que hasta ahora, conectando con bases de datos
Paradox, dBase, InterBase, etc.
Otra novedad es el componente TADONETConnector, un derivado de TDataSet que hace muy
simple la conexin a travs de un proveedor
ADO.NET o BDP estableciendo un conjunto mnimo de propiedades, como en Delphi 7. Son todas
opciones enfocadas a suavizar tanto la conversin de
aplicaciones existentes como la evolucin al mundo
.NET en los nuevos proyectos.

Acceso independiente
del proveedor en ADO.NET 2.0
La posibilidad de implementar el acceso a una base
de datos de forma independiente del proveedor puede parecernos algo innecesario en un primer momento, pero sera realmente lo deseable tanto si tenemos
prevista la transicin futura como si no es as, ya que
el cambio puede producirse en cualquier ocasin por
circunstancias ajenas a nuestros planes. Por ello no es
de extraar que Microsoft haya previsto esta posibi-

lidad en la prxima versin de ADO.NET, la 2.0 conocida como Whidbey.


ADO.NET 2.0 define una serie de clases, en el
mbito System.Data.Common, que representan conexiones, comandos, adaptadores de datos y lectores independientes del proveedor. Sus nombres de clase son
DbConnection, DbCommand, DbDataAdapter y
DbDataReader. Funcionalmente seran equivalentes
a los componentes BdpXXX de Delphi 8 .NET.
En el mismo mbito, segn se aprecia en la figura 7, encontramos una clase llamada DbProvider
Factories con varios mtodos estticos que facilitan
la recuperacin de la factora de un proveedor dado.
La factora es una clase a travs de la cual crearamos
la conexin y, posteriormente, los comandos y adaptadores. Por ejemplo:

// Obtenemos la factora
DbProviderFactory factoria=DBProviderFactories.GetFactory(System.Data.Oledb
// Y la usamos para crear un componente de conexin
DbConnection conexion=factoria.CreateConnection();
// y un adaptador
DbAdapter adaptador=factori.CreateAdapter();

Figura 7. ADO.NET 2.0 cuenta con una clase genrica


para acceder a factoras de proveedores de datos

De esta manera, y simplemente modificando el


argumento System.Data.Oledb entregado como
cadena al mtodo GetFactory(), podramos cambiar
de un proveedor a otro sin necesidad de sustituir todos
los componentes relacionados.

<<dotNetMana

tencia de los proveedores de datos ADO.NET integrados en sta, pero obviamente no del BDP. Es necesario, por tanto, distribuir conjuntamente con cualquier aplicacin Delphi .NET que emplee este proveedor una serie de ensamblados.
Por una parte tenemos los ensamblados genricos:
Borland.Data.Common.dll y Borland.Data.
Provider.dll, necesarios indistintamente del RDBMS
al que accedamos. Adems tendramos un ensamblado adicional por cada tipo de base de datos:
Borland.Data. Msacc.dll, Borland.Data.Mssql.dll,
Borland.Data.Oracle.dll, Borland. Data.DB2.dll y
Borland.Data. Interbase.dll, segn conectemos con
Access, SQL Server, Oracle, DB2 o InterBase, respectivamente.
Todos estos ensamblados deben ser aadidos a la
GAC (Global Assembly Cache), estando a partir de ese
momento disponibles para cualquier aplicacin Delphi
8 .NET que pudiramos instalar.

45

Por Antonio Quirs


General Area Manager
Alhambra-Eidos

Las legiones del Csar


<< Hace ms de dos mil aos las legiones romanas se

pasearon por el mundo occidental de forma triunfante derrotando a cuantos ejrcitos enemigos se
ponan en su camino. Dnde estaba el secreto. Qu
haca invencible a un ejrcito de italianos morenos
y bajitos. Cmo pudieron derrotar a las numerosas
hordas germanas y galas con sus corpulentos y salvajes guerreros. Por qu impusieron la voluntad de
Roma desde una punta a otra del mundo conocido.
Hay dos respuestas para todas estas preguntas: el
legionario y la metodologa organizativa. Mientras los
millones de germanos que se desplazaban desde la
pennsula de Jutlandia constituan un impresionante
y desorganizado ejrcito donde la desesperacin por

<<dotNetMana

En un equipo MSF se produce una importante


red distribuida de funciones, responsabilidades
y confianza mutua

46

conseguir alimentos era el leit motiv fundamental,


el ejrcito del siete veces Cnsul Cayo Mario era
infinitamente ms pequeo pero estaba poderosamente motivado y organizado, Aqua Sextia es el
resultado de la lucha del orden y la motivacin frente al caos, all centenares de miles de germanos perecieron a manos de un ejrcito diez veces ms pequeo. Si Cayo Mario fue el gran sistematizador del
nuevo ejrcito republicano, Julio Csar, fue sin duda,
el genio militar ms importante de su poca. Su clave era la motivacin. Sus hombres lo adoraban y
abordaban cada batalla con tal nfasis y pundonor
que no haba enemigo que les resistiera. Palabras
como centuria, cohorte, tribuno, legado, praefectus
fabrum, centurin, etc. eran las claves del asunto; una

maquinaria perfectamente diseada y altamente


motivada que llevaba a cabo su labor de forma terrorficamente perfecta.
Y bien, sufrido lector, ya te estars preguntando
qu tiene que ver Csar con Bill Gates y Roma con
Microsoft. Bueno, pues s que tienen que ver y en
este artculo intentar demostrarlo. La multinacional americana es hoy al mundo del software lo que
las legiones romanas fueron al mundo de la milicia,
una poderosa maquinaria perfectamente organizada donde la conjuncin de los equipos de trabajo,
los mtodos seguidos y la motivacin de cada trabajador son piezas claves de su xito. Supongo que
todos nos hemos preguntado en alguna ocasin qu
mtodo siguen, por ejemplo, los desarrolladores del
equipo de Exchange Server o de Office para obtener productos tan complejos y perfectos constituyendo, adems, uno de los mejores ejemplos de rentabilidad empresarial que podemos tener hoy. La
respuesta es MSF de forma abreviada o, lo que es lo
mismo. Microsoft Solutions Framework, la metodologa de gestin de proyectos de desarrollo de software que usa el gigante de Redmon y que, desde
hace unos pocos aos, sistematiza y recomienda para
que quienes van a desarrollar software con herramientas Microsoft la use.
Conforme los proyectos que abordamos son ms
complejos, conforme tenemos que garantizar con
ms rigor los cumplimientos en tiempo, precios y
requerimientos de las soluciones que nuestros clientes nos piden, se hace ms necesario aplicar un mtodo al trabajo, seguir una norma clara y rigurosa que
nos permita garantizar el resultado a obtener fuera
de las tan a menudo improvisaciones del mundo del
desarrollo. MSF nos ayuda en esta labor. Lgicamente, MSF no es algo nico en el mundo ni superoriginal, las metodologas de desarrollo se vienen
usando desde hace aos y seguro que otras como
Merisse, SSADM, Mtrica, Xtreme Programming,
etc, suenan a nuestros odos. Lo que de llamativo tiene MSF para nosotros es que estamos ante la meto-

<< dnm.arquitectura

Hay mucho de que hablar,


Dnde pondremos el foco?
Realmente MSF consta de dos enfoques diferentes, en funcin del tipo de
proyecto que se lleva a cabo:
MSF (Microsoft Solutions Framework), propiamente dicha, que est
dirigida a planificar, disear, desarrollar, implementar, operar y mantener soluciones creadas a partir de
tecnologas Microsoft.
MOF (Microsoft Operations Framework) ofrece directrices tcnicas
que permiten a las organizaciones
lograr la confiabilidad, disponibilidad y compatibilidad de los sistemas y soluciones basados en tecnologas Microsoft.
En cualquier caso, hay que partir
siempre de la definicin operativa de
proyecto, entendiendo que ste es una
empresa temporal que cuenta con un
principio y un final definidos cuyo objetivo es crear un producto o servicio nico. Por otro lado, por administracin de
proyectos entendemos un rea de conocimiento, tcnicas y herramientas que
se utilizan para lograr los objetivos del
proyecto dentro de unos parmetros de
calidad, costes, plazos y lmites previamente acordados.
Con este punto de partida, el lector
comprender ya que la tarea es ardua.
Organizar de forma correcta un proyecto, supondr, segn las definiciones
que hemos anotado, conocer y practicar un amplio abanico de tcnicas econmicas, tecnolgicas, de recursos
humanos, de control de calidad, etc.,
todo ello de forma organizada y rigurosa, siguiendo un protocolo que nos
ayude a no olvidar nada de lo autnticamente importante y a serializar las
cosas de forma conveniente.
Un corto artculo no da para trazar
aunque sea una breve imagen de tan

ingente cantidad de cuestiones, por eso


mi propuesta al lector ser algo ms concisa; se trata de analizar uno de los factores claves de MSF que vuelven a acercarnos al asunto de las legiones.
Se ha resaltado antes la importancia
de la organizacin humana, de su motivacin, de la correcta imbricacin de
cada elemento para lograr el xito del
conjunto. Toda una parte de MSF se
ocupa de esto. Se trata del MSF Team
Model o lo que es lo mismo el modelo
para la organizacin de equipos de trabajo que MSF propugna y que en este
momento est plasmado en el documento denominado MSF Team Model
v. 3.1 que podemos encontrar en el rea
MSF del web de Microsoft. Al modelo
de equipo de MSF es a lo que dedicaremos el resto de este artculo.

El MSF Team Model v. 3.1


Una de mis tareas en los ltimos
tiempos ha sido la de estudiar e intentar aplicar las polticas de recursos
humanos basadas en el seguimiento de
valores corporativos. Me ha parecido
siempre de trascendental importancia
que cada empresa haga pblicos los
principios que subyacen a su actividad
empresarial, los valores que propugnan
para sus empleados y las bases en que

tratan de establecer la relacin con sus


clientes. Si todo esto est claro y es
publicado por la empresa y conocido
por todos, todos saben a qu atenerse,
cada miembro del equipo de trabajo sabe
qu espera de l la empresa, cmo espera que sea su comportamiento, cmo
desea que se conduzca en su accin laboral diaria, etc. Una empresa importante es aquella donde sus equipos de trabajo tienen un alto grado de conocimiento e identificacin de los valores
empresariales, teniendo esto como
resultado un impacto relevante en la
motivacin de los empleados.
Bien, pues de eso nos habla MSF
Team Model, de los principios subyacentes al factor humano en los proyectos.

Los Role Cluster o funciones


en un proyecto MSF
Vamos a comenzar por describir los
distintos roles que interaccionan en un
proyecto MSF. Para la metodologa de
Microsoft, los roles no tienen una clara
identificacin personal, es decir que un
rol puede estar siendo ostentado por
varias personas y tambin una persona
puede ostentar distintos roles. La definicin Role Cluster es la que usa MSF para
referirse a este tipo de perfiles o funciones. Los distintos Role Clusters que inte-

Conforme los proyectos que abordamos


son ms complejos se hace ms necesario aplicar
un mtodo al trabajo, que nos permita garantizar
el resultado a obtener fuera de las tan a menudo
improvisaciones del mundo del desarrollo
<<dotNetMana

dologa oficial de Microsoft y que, por


tanto, parece la causante del xito rotundo de todos aquellos productos desarrollados por la misma, as como de su
impresionante trayectoria empresarial.

47

<< dnm.arquitectura
raccionan en un proyecto, o funciones
como los llamaremos a partir de ahora,
pueden verse en la tabla siguiente.
La organizacin en funciones no
implica una visin jerrquica del proyecto. Este modelo organizativo tiene
ms que ver con la adecuacin de perfiles a objetivos a conseguir, dentro de
un esquema de funcionamiento donde
la responsabilidad se comparte plenamente entre todos los miembros del
equipo.

<<dotNetMana

Funciones Caractersticas

48

Product Management El objetivo de


esta funcin es satisfacer a los usuarios, por lo que quienes la realizan
deben actuar como abogados de los
usuarios en todo momento. Son los
responsables de manejar la visin
compartida del proyecto que se
difundir al resto del equipo. Son un
punto crucial en la relacin entre los
usuarios y el equipo del proyecto,
gestionan las expectativas de los
usuarios y las administran definiendo las funcionalidades que deben
tener los productos desarrollados.
Sus reas funcionales de referencia
son marketing, desarrollo de negocio, intereses de los usuarios y planificacin de producto.
Program Management Su objetivo es
obtener la solucin dentro de las restricciones determinadas para el proyecto. Se responsabilizan, pues, del
proceso de desarrollo con el fin de
obtener el producto a tiempo.
Mientras que la funcin de Product
Management tiene una mayor cercana conceptual con los usuarios, la
de ProgramManagement la debe
tener con el equipo que construye la
solucin; son, pues, quienes organizan los recursos humanos del proyecto. Sus reas funcionales son la
gestin de proyectos y la arquitectura de soluciones.
Development Son los encargados de
construir la solucin, desde las especificaciones al propio producto terminado. Aqu tenemos a los arquitectos, analistas y programadores de
toda la vida. Sus reas funcionales
son, pues, la consultora tecnolgica, la arquitectura y el diseo de soft-

ware y el desarrollo de soluciones.


Test Se responsabilizan de probar la
solucin y slo autorizar la liberacin de la misma cuando se han
pasado todas las correspondientes
pruebas y controles de calidad. Sus
reas funcionales de referencia son
todas las que tienen que ver con las
pruebas de las soluciones, tanto en
lo que a la planificacin como a la
ejecucin de las mismas, as como a
su reporte.
User Experience Son quienes mejor
conocen y manejan los requerimientos de los usuarios. Al igual que en la
funcin de Product Management
actan como abogados de los usuarios defendiendo su punto de vista.
Entre sus funciones primordiales se
encuentran las de ocuparse de los
aspectos de usabilidad, rendimiento,
etc, de las soluciones. Desarrollan,
igualmente, los procedimientos de
ayuda y los planes de formacin inherentes al proceso de despliegue de
cualquier solucin de software. Sus
reas funcionales son las comunicaciones tcnicas, la formacin, la usabilidad, el diseo grfico, la internacionalizacin y la accesibilidad.
Release Managemet Su objetivo es
lograr despliegues sin problemas de
las soluciones construidas. Se ocupan de los asuntos que tienen que ver
con las instalaciones y el soporte de
los sistemas. Normalmente proporcionan apoyo logstico al equipo del
proyecto. Sus reas funcionales son
las infraestructuras, el soporte y las
operaciones.

Los fundamentos del modelo


de equipo MSF
Ya hemos visto las distintas funciones con que todo proyecto MSF
debe contar. A continuacin vamos a
enumerar un conjunto de principios
que estn a la base de cmo el equipo
del proyecto aborda la realizacin del
mismo.

Responsabilidad clara y compartida


Cada miembro del equipo es responsable del xito general del proyecto
y de la calidad de la solucin, espern-

dose de l un nivel de colaboracin ms


all incluso de lo que pueden ser sus funciones dentro del proyecto.
Esto implica que existe una organizacin de las responsabilidades donde
se cruzan las personales en funcin de
la, valga la redundancia, funcin desarrollada en el proyecto, con las globales que el equipo debe mantener de cara
a los clientes del proyecto. Esto quiere
decir que cada miembro del equipo
debe tener claro cual es su entorno de
responsabilidad, pero debe actuar de
cara al proyecto como si toda la responsabilidad del xito del mismo recayera sobre l.

Equipos reforzados
Cada miembro del equipo del proyecto debe asumir sus propios compromisos. Las palabras clave a este respecto son autorizacin y compromiso. Los
miembros de un equipo MSF deben
tener la confianza de los administradores del proyecto, de forma que con la
autonoma suficiente deben ser capaces
de administrar sus tareas, gestionando
y reportando los retrasos que puedan
producirse. As, pues, en un equipo MSF
se produce una importante red distribuida de funciones, responsabilidades y
confianza mutua, todo ello con la idea
de cumplir los objetivos finales determinados para el proyecto.

El foco en el valor del negocio


Cada solucin a desarrollar tiene una
clara vertiente de negocio para los usuarios de la misma. Esta es la clave que
debe constituir el objetivo del equipo
de desarrollo. Muchos equipos olvidan,
o no tienen en cuenta de forma conveniente, que estn realizando un trabajo
crucial para el negocio de quienes lo
encargan. Slo una visin respetada y
comn de estas claves de negocio coadyuvar al xito del proyecto.

Permanecer gil y esperar los cambios


El dinamismo es factor crucial en
todo proyecto. Aunque muchos miembros de los equipos de un proyecto abominan de los cambios, stos son inherentes a todo desarrollo de software. Por

<< dnm.arquitectura

Fomentar las comunicaciones abiertas


El libre flujo de la informacin reduce los malos
entendidos. MSF propugna un entorno de comunicaciones honestas tanto entre los miembros del equipo como entre stos y los elementos externos al mismos. Este principio clave se ve constreido slo por
la confidencialidad a que determinados procesos
empresariales y tecnolgicos deben estar sometidos.

Conceptos clave
Existen un conjunto de conceptos clave para la
organizacin de todo equipo de trabajo que quiera
funcionar a travs de la metodologa MSF. El respeto y seguimiento de cada uno de estos conceptos no
es anecdtico, sino que constituyen el autntico ncleo
diferenciador frente a proyectos llevados a cabo a travs de otras dinmicas de equipo.

Equipo de individuos
Todas las funciones son importantes para un proyecto y tienen una igual vala conceptual. Esto incrementa la posibilidad de comunicaciones libres entre
la totalidad de los miembros del equipo as como su
nivel de responsabilidad tanto sobre su funcin como
sobre la totalidad del proyecto. Slo la conviccin de
que cualquiera de los objetivos perseguidos en el proyecto tienen una igual vala conceptual puede hacer
que se consiga el nivel de calidad necesario en el producto final que se desea obtener. No es ms importante la labor del arquitecto de software que la del
responsable del plan de implantacin. Un producto
de arquitectura ejemplar que se implanta de modo
poco sensato tendr tan poco xito como otro de
arquitectura mediocre y sus virtudes pasarn desapercibidas.
No hay que olvidar, en cualquier caso, que este
principio no supone que las decisiones sobre el proyecto deban tomarse siempre de forma consensuada.
Cada funcin posee un claro mbito de responsabilidad y eso debe ser respetado por cada uno de los
miembros del equipo.

Tendencia a la satisfaccin del cliente


La satisfaccin del cliente es la principal prioridad de todo equipo. En todo momento debe existir
un compromiso claro del equipo del proyecto para
ayudar a solventar los problemas de negocio que el

cliente espera abordar con la solucin a desarrollar.


Muchas veces los desarrolladores de software ven en
un proyecto la oportunidad de lucir sus conocimientos tecnolgicos, esto no es malo en s mismo siempre que no se olvide que hay un objetivo por encima
del mismo, resolver el problema de negocio del cliente que nos ha encargado la solucin.

Tendencia al producto
El resultado de la labor de todo proceso de desarrollo de software es la obtencin de un producto.
Hay muchos elementos que pueden ayudar a fomentar la identidad del producto a obtener, Microsoft hace
mucho hincapi en el uso de nombres clave para los
productos en desarrollo, rodendolos de elementos
de merchandising, tales como camisetas, tazas da caf,
etc. La relevancia que as se consigue del producto
redunda en la moral del equipo de desarrollo y, por
tanto, en el producto final desarrollado.
La tendencia al producto fue perfectamente descrita por Chris Peters, un jefe de proyecto de
Microsoft para el que la misin de todos y cada uno
de los miembros de un equipo es liberar un producto final, no hacer cdigo o testear o realizar el diseo
de clases o hacer el plan de formacin; todos tienen
una nica misin por encima de todas las dems: liberar un producto final.

Tendencia a productos libres de fallos


La calidad del producto final no debe ser delegada a un equipo que se ocupe de la misma, sino que debe
ser un objetivo de todos y cada uno de los miembros
del equipo. Todos debemos tender a que nuestro trabajo est libre de fallos. Todos los miembros del equipo deben ser abogados del cliente en la persecucin
de la calidad del producto desarrollado. Adems, si la
calidad no se persigue en todos y cada uno de los procesos de un proyecto estaremos delegando a un
momento final la persecucin de los mismos lo que
elevar sobremanera los costes finales del proyecto.

Buena voluntad para aprender


Cada miembro del equipo de un proyecto debe
mantener un permanente compromiso de autoaprendizaje y mejora permanente de su entorno de
competencias y conocimientos. Una de las cosas que
ha hecho grande a Microsoft es la creacin de una cultura que fomenta en todo momento tanto conseguir
el aprendizaje como compartir el mismo.

Los equipos motivados son efectivos


La desmotivacin es una de las grandes fuentes de
fracaso de los proyectos. Slo los equipos con un alto

<<dotNetMana

tanto, todos los miembros del equipo deben esperar


los cambios y saber reaccionar de forma positiva ante
los mismos, viendo en ellos una oportunidad de mejorar el proyecto y no un obstculo para su consecucin.

49

<< dnm.arquitectura
nivel de motivacin y de moral pueden
construir grandes soluciones. Algunas
tcnicas propugnadas por Microsoft
para conseguir esto son:
Clarificar la visin del equipo.
Trabajar en la construccin de la
identidad del equipo a travs de las
tcnicas de merchandising antes
mencionadas.
Fomentar los eventos sociales entre
los miembros del equipo para fortalecer el nexo entre colegas.
Planificar sesiones de construccin
del equipo en que los diferentes
miembros del mismo pueda experimentar con distintas vas de colaboracin e interaccin fuera incluso de
las del propio trabajo del proyecto.
Asegurarse de que los objetivos
individuales son respetados y
fomentados.
Atender las expectativas de mejora
de los miembros del equipo y escuchar siempre sus puntos de vista.
Celebrar los xitos.

Prcticas probadas
Existen un conjunto de prcticas
probadas que aseguran el xito de los
proyectos MSF. Microsoft las ha experimentado en sus desarrollos y, por tanto, parece que la demostracin del xito a que conducen est fuera de toda
duda.

Equipos pequeos y multidisciplinares


Los equipos pequeos y multidisciplinares poseen grandes ventajas, entre
las que destaca su mayor dinamismo y
capacidad de respuesta. La recomendacin para los grandes proyectos es crear un equipo de equipos donde cada una
de las pequeas piezas mantenga todo
el entorno de recomendaciones MSF
para su trozo de proyecto.

<<dotNetMana

Trabajar juntos

50

Uno de los grandes objetivos a perseguir en la organizacin de equipos


MSF es la eliminacin de los obstculos a la comunicacin, de forma que la
informacin pueda compartirse de la
forma ms limpia posible.

Tener a los equipos unidos en una


misma localizacin sera, pues, una de
las prcticas probadas elementales para
conseguir este objetivo. Sin embargo,
hoy existe una amplia experiencia en la
configuracin de equipos virtuales que
funcionan de forma unitaria aunque
estn ubicados en distintos lugares geogrficos. A pesar de esto, existe un
importante factor de riesgo en la puesta en funcionamiento de este tipo de
equipos. No todos los perfiles individuales se adecuan a esta modalidad organizativa y esto habr de tenerse en cuenta a la hora de determinar qu personas
son las ms adecuadas para formar un
equipo virtual. Las caractersticas que
Microsoft recomienda para las personas
que formarn parte de un equipo virtual son:
Que puedan trabajar de forma independiente
Que demuestren competencias de
liderazgo
Que posean las competencias especficas requeridas para la solucin
Que puedan compartir conocimiento con la organizacin
Que puedan ayudar a desarrollar
mtodos efectivos de trabajo

Participacin total en el diseo


Cada funcin dentro de un equipo
MSF debe participar en la creacin de
las especificaciones del producto, ya que
todos deben tener una perspectiva nica del diseo y de su relacin con cada
uno de sus objetivos individuales.
Por ello, la participacin total en el
diseo debe fomentar un clima en el
cual las buenas ideas de todos los
miembros del equipo afloren y cooperen en la obtencin del un producto
mejor.

Conclusiones
Dee Hook, fundador y CEO de
Visa Internacional, invent el termino
chaordic, mezcla de caos y orden (chaos
y order) para referirse a la naturaleza de
los proyectos de IT. Esto representa un
importante punto de partida para MSF,
ya que la metodologa de Microsoft
parte de respetar esa naturaleza. En el

mundo del desarrollo de software nos


encontramos con los proyectos claramente caticos donde entre los usuarios y los desarrolladores montan un
espectculo tal que para un observador
neutral resulta difcil entender lo que
all est pasando y tambin nos encontramos con los proyectos rigurosamente encorsetados en el mbito de
una metodologa compleja, donde el
autntico objetivo de hacer software
queda enmaraado en una enredada
malla de fases, hitos, documentos, reuniones, etc. Para MSF la inversin de
de este catico proceso, con el fin de
inyectar orden en el mismo pero sin
caer en estriles reglamentaciones, es
uno de los objetivos a conseguir y una
de las ventajas competitivas que le hace
estar posicionada como una de las
metodologas giles de que podemos
disponer hoy para hacer software con
solvencia.
Si a esto unimos que el aval con que
se nos presenta es que es la metodologa a travs de la que Microsoft ha conseguido sus xitos, poco ms necesitamos para comenzar a usarla en nuestros
proyectos. Un ltimo punto a su favor
es el pragmatismo con el que se abordan la totalidad de los principios tericos que subyacen al mtodo, lo probado, lo efectivo, lo que realmente funciona fuera de principios abstractos y
reglamentaciones tericas abstrusas.
Algo, sin duda, que nos incita a ponerla en prctica ya.
Para este artculo se ha usado la
documentacin de base de la metodologa, tal como est expuesta oficialmente por Microsoft. Un importante
apoyo ha sido la siguiente documentacin:
MSF Process Model 3.1 (1.1)
MSF Project Management Discipline
v. 1.1
MSF Readiness Management Discipline
v. 1.1
MSF Risk Management Discipline v.
1.1
MSF Team Model v. 3.1
MSF v. 3 Overview Whitepaper
El lector puede acceder a la misma
en el rea MSF del web de Microsoft:
www.microsoft.com/msf

<< dnm.biblioteca.net

dnm.biblioteca.net

Gua prctica para usuarios


Jos Manuel Alarcn
Editorial: Anaya Multimedia
N de pginas: 336
ISBN: 84-415-1631-6
Publicacin: 2004

<<

JavaScript en un pauelo! Imprescindible referencia del lenguaje JavaScript que


acaba de ser revisada y actualizada. Con este libro tenemos a mano la sintaxis y
uso del lenguaje, especialmente til cuando ya sabes cmo hacer las cosas pero
necesitas refrescar tu memoria, o incluso, si quieres aprender a travs de pequeos ejemplos y olvidarte de los "temibles" mazacotes.
A mi juicio, los libros pequeos cmo ste, centrados en lo que quieren ensear, y apoyndose continuamente con ejemplos, son los mejores para aprender.
Se centra en la programacin JavaScript y no en otra cosa, yendo directamente al grano desde el principio, sin captulos dedicados a otras tecnologas.

ASP.NET al descubierto
Stephen Walther
Editorial: Prentice Hall/SAMS
N de pginas: 1326
Tamao: 170x240
ISBN: 84-205-3472-2
Publicacin: 2002
Traduccin al espaol del estupendo ASP.NET Unleashed. Este libro es todo
un tratado de ASP.NET, dedicado a los programadores que necesiten crear aplicaciones Web. Si ya eres desarrollador de ASP, te vendr bien pues tiene continuas notas para lo que el autor llama el "ASP Clsico".

<<dotNetMana

En la ltima parte del libro hay dos aplicaciones de ejemplo. Un sitio de bsqueda de empleo, ASP.NET Jobs, y una tienda on-line, ASP.NET Unleashed
Sample Store.

52

Asume que sabemos HTML y que tenemos experiencia con algn lenguaje de
programacin, y ms vale as porque sino necesitaramos ruedas para moverlo,
que ya tiene 1360 pginas!

dnm.comunidad.net

<<

dnm.comunidad.net

Lexico POO

<< El proyecto Lexico surge en 1985 como respuesta a las

necesidades de un curso tipo taller destinado a iniciar en la algoritmia a estudiantes del programa
Ingeniera de Sistemas en la Universidad de Antioquia
situada en la ciudad de Medelln, Colombia. All, fruto de una evaluacin del curso, se encontr que los
alumnos tenan una mirada distorsionada del mismo
pues le consideraban abstracto, hipottico e irreal,
concepcin que generaba mucho ruido en el fomen-

Lexico es un lenguaje didctico


para programacin en espaol destinado
a facilitar el aprendizaje y la enseanza
de la programacin
orientada a objetos

to de las habilidades para el diseo de algoritmos. La


carencia de herramientas de apoyo para el proceso
que les permitiera ver funcionando los frutos de su
pensamiento produca desmotivacin y tensiones
innecesarias. Ante ese panorama se decidi disear
un lenguaje muy simple que ayudara a cambiar esa

mirada negativa y generara incentivos en el aprendizaje. En un proyecto posterior financiado por esa universidad se ampli el diseo inicial y se desarroll un
prototipo de controlador. El siguiente proyecto construy el primer compilador para DOS inscrito en el
paradigma procedimental-imperativo y estructurado. El proyecto sucesor de nuevo financiado por la
universidad evalu principalmente la influencia que
pudiese tener en los estudiantes obtenindose resultados que sorprendieron a los investigadores. Luego
se desarroll una versin para la web del lado del servidor y posteriormente la versin pura orientada a
objetos que corre sobre la plataforma .NET.
En un horizonte de cinco aos los proyectos futuros abordarn la ampliacin de facilidades para iniciar, la produccin de documentacin en papel y la
adicin de caractersticas internas que proporcionen
mayor flexibilidad. La aspiracin es que se convierta en un laboratorio disponible y ampliamente usado para el fomento de la disciplina de la programacin y con tal motivo se ha dispuesto un sitio de
encuentro en la web para el intercambio de experiencias y retos.
Lexico es un lenguaje didctico para programacin en espaol destinado a facilitar el aprendizaje y
la enseanza de la programacin orientada a objetos.
Pretende, y las investigaciones realizadas con l as lo
han comprobado, mejorar el desempeo de los estudiantes y motivarlos para avanzar en la generacin de
habilidades en lgica de programacin pues les permite experimentar con los algoritmos diseados sin
tener que dedicar meses a aprender un lenguaje de
produccin que les permita ver sus creaciones.
El compilador soporta las caractersticas exigidas
internacionalmente para considerarse puro respecto
al paradigma, corre sobre la plataforma distribuible

<<dotNetMana

Lexico POO es un compilador en castellano, producido por Laboratorios


RioSur.NET E.U., que corre sobre la plataforma .NET.
Laboratorios RioSur.net E.U. es una compaa creada para la investigacin, produccin y comercializacin de software y se orienta a facilitar la incorporacin
de tecnologas de la informacin en el sector acadmico. Ha trabajado, previamente a su presentacin ante la comunidad internacional, durante 15 aos en proyectos de investigacin relacionados con la educacin.

53

<< dnm.comunidad.net

/*Fibonacci http://fractus.mat.uson.mx/Papers/Varios/Articulo97.html*/
tarea:
{
los objetos i, n, primero, segundo, tercero son cantidades
muestre: Entre el nmero de trminos deseados:
entre: n
copie 0 en i, primero
copie 1 en segundo
mientras i<n haga:
{
copie i + 1 en i
muestre primero
copie primero + segundo en tercero
copie segundo en primero
copie tercero en segundo
}
}
Fuente 1

incluya System.Windows.Forms
clase ventana derivada_de System.Windows.Forms.Form
{
publicos:
mensajes:
ventana copie Este es el ttulo de mi primera ventana en ventana.text
}

Fuente 2

.NET de Microsoft y es descargable


desde su portal ubicado en http://riosur.net
Su estructura es sencilla y se han
retirado elementos de eficiencia innecesarios en un entrenamiento.

Permite la suficiente sencillez para


entrenarse desde los conceptos bsicos en
algoritmos por medio de la descripcin
del mensaje o comportamiento tarea
para que la persona practique las estructuras fundamentales en lgica (secuencia

con {....}, decisin con es ? y ciclo de repeticiones con mientras) y la clsica estructura de datos compuesta llamada arreglo, hasta en el paradigma de la programacin orientada a objetos puro, POO.
El centro medular es la orientacin
a objetos para lo cual posee el soporte
apropiado y se ha simplificado al mximo de manera que ayude a la inmersin
en los conceptos.
Los objetos pueden ser construidos
con base en las dos clases fundamentales, cantidad y caracteres, con base en
las clases establecidas por el programador y con base en las 7000 definiciones de la plataforma.net de Microsoft,
lo que permite desarrollar verdaderas
aplicaciones que incluyan controles y el
manejo de eventos.
Las clases pueden ser definidas dentro del archivo del programa central o
en archivos externos y por la va de la
herencia con base en la librera FCL
(Framework Class Library, librera de clases del marco de trabajo) de Microsoft.
Aquellas que no hayan sido definidas
dentro del archivo principal de trabajo
son incorporadas con la instruccin
incluya. Ver fuente 1.
Un ejemplo de descripcin de un
mensaje, algoritmo o comportamiento:
Fabin Ros Castrilln y Fabio Len
Ruiz Ruiz, profesor y estudiante respectivamente en la Universidad de
Antioquia en Medelln, Colombia, responsables del proyecto.
Un ejemplo OOP que utiliza una
clase profesional de .net y permite el uso
de eventos. Ver fuente 2.

n o t i c i a s b reve s
La nueva versin
de RoboHelp X5
ya est disponible
eHelp ha presentado RoboHelp X5 la nueva versin de la herramienta
para la creacin de ayudas y documentacin que ms nos gusta. Algunas
de las nuevas caractersticas son:
Soporte para multi-autor
Soporte para trabajo distribuido
Importacin, exportacin PDF y XML
Salida FlashHelp
Ms informacin en www.ehelp.com

La agenda
de Whidbey
Segn Scott Guthrie la beta pblica de
Whidbey estar disponible en junio de
este ao, mientras que se rumorea que
ser en el primer cuatrimestre de 2005
cuando se preve la aparicin de la versin definitiva, en lugar de finales de este
mismo ao.

<< dnm.opensource

DotNetNuke

Fernando Nogueras

Aunque disponemos de mltiples mdulos para ampliar su funcionalidad, DotNetNuke


es bsicamente un portal de contenido escrito enteramente en .NET y basado en la
implementacin de referencia IBuySpy de Microsoft. La aplicacin de ejemplo IBuySpy
de ASP.NET se cre con el fin de mostrar cmo se podan utilizar las nuevas tecnologas .NET Framework y ASP.NET para generar aplicaciones de comercio electrnico
con todas sus posibles caractersticas.

estar basado en dicha implementacin de Microsoft,


tiene un primo hermano suyo de algo ms de edad
llamado PHPNuke y escrito en el lenguaje que le da
su nombre.
DotNetNuke trata de poner a disposicin de la
comunidad de programadores una implementacin
de un portal de contenido que sirva para gestionar
los usuarios, news, artculos, fotos, banners, foros,
bsquedas, encuestas,. y todo ello pudiendo ser
gestionado al 100 % y de forma intuitiva a travs de
una interfaz de configuracin del sistema a la que solo
podra acceder el administrador del portal.
El funcionamiento de un portal DotNetNuke est
basado en mdulos que podemos activar o desactivar, as como configurar a travs de la zona de administracin. Siguiendo la idea de que la estructura sea
extensible, siempre se podrn agregar fcilmente
mdulos nuevos al portal.
Con esta sencilla insercin de nuevos mdulos
mejorar la funcionalidad de DotNetNuke y el desarrollo es mucho ms estructurado, permitiendo la participacin de programadores muy heterogneos repartidos por toda la geografa terrestre, dando como resultado un sistema ms rico, que nosotros mismos, como
desarrolladores, podremos modificar para satisfacer
un conjunto muy diverso de requisitos del cliente.
A parte de los mdulos tpicos de un portal hay
algunos ms de inters como:
Un calendario de eventos a modo grfico
Un lector de noticias en formato RSS
Informacin meteorolgica
Soporte para XML/XSL
Lo primero que podemos hacer para adentrarnos
en el mundo de DotNetNuke es echar un vistazo a
los ShowCases, que son distintos ejemplos en los cuales se ha utilizado esta implementacin para crear un
portal de contenido real y en funcionamiento.
En estos se puede apreciar la verdadera potencia
del producto y lo que podemos conseguir con su alta

capacidad de configuracin y personalizacin. La apariencia se configura de un modo muy fcil desde la


consola de administracin eligiendo el skin que queremos aplicar al portal. Adems hay numerosos skins
para bajar de la red.
Despus podemos echarle valor y bajarnos la ltima versin para proceder a instalarla en nuestro equipo y as juguetear un poco.
La instalacin no es demasiado compleja, a groso modo los pasos seran: primero habra que preparar la base de datos en blanco en SQL Server, luego
se descomprime el fichero de DotNetNuke y finalmente configuramos IIS a modo habitual para que
funcione un nuevo sitio Web. Ni que decir tiene que
tendramos que tener el Framework de .NET previamente instalado.
Para conectar DotNetNuke con la base de datos
podemos especificar la cadena de conexin en el archivo de configuracin web.config.
Espero que estas lneas sirvan como pequea introduccin del proyecto DotNetNuke o al menos para
saber que ste existe y emplazar al lector a conocer
ms a fondo su funcionamiento a travs de los enlaces que encontrar en la Web de nuestra revista.
Si participas en algn proyecto Open Source, utilizas algn cdigo libre en tus desarrollos o simplemente has encontrado algo interesante en la red
que sigue la filosofa Open Source y que est escrito
en alguno de los lenguajes de la plataforma .NET o
guarda alguna relacin con la misma, no dudes en
escribirnos a redaccion@dotnetmania.com para que
podamos hablar sobre l y darlo a conocer a la comunidad de desarrolladores .NET.

<<dotNetMana

<< La idea de DotNetNuke no es nueva, pues adems de

55

Suscripcin a dotNetMana
Deseo suscribirme a dotNetMana por un ao (11 ejemplares) y beneficiarme de la oferta del 10% de descuento por un importe
total de 60 para Espaa; o por 75 para el resto de Europa; o por 90 para el resto del mundo (IVA incluido).
La suscripcin se entiende a partir del nmero actual. Si desea suscribirse a partir de otro nmero, indquelo:
Si usa un nmero anterior al actual, los nmeros descatalogados no sern tenidos en cuenta.
IMPORTES VLIDOS HASTA NUEVA OFERTA
DATOS DE FACTURACIN
CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Poblacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Cdigo Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .
Telfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATOS DE ENVO (slo si son distintos de los datos de facturacin)
CIF/NIF . . . . . . . . . . . . . . . . . . . . .Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Poblacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Cdigo Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . .
Telfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . .

FORMA DE PAGO
Taln nominativo a nombre NETALIA, S.L.
Giro postal a nombre NETALIA, S.L.
Transferencia bancaria a nombre de NETALIA, S.L. a:
La Caixa
Nmero de cuenta 2100 4315 48 2200014696
(Indique su nombre en la transferencia)

Usted autoriza a la mecanizacin 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 sern cedidos en ninguna de las formas posibles a
terceras partes y no se utilizarn ms que para el buen funcionamiento de su suscripcin
a la revista dotNetMania y
para informarle de las actividades comerciales que realice
la editorial Netalia, S.L. Si no
desea recibir informacin
comercial de esta empresa
marque la casilla siguiente

Domiciliacin Bancaria
Indique su nmero de cuenta:
Tarjeta de crdito
VISA q MASTERCARD
Nmero de su tarjeta:
Fecha de caducidad:
/

AMERICAN EXPRESS
(Imprescindible)

Firma y sello (imprescindible)


a

N1

de

de 20

*
o
t
i
u
t
a
r
g
1
o
r
e
m
n
* Hasta el 15 de marzo o hasta agotar existencias

Enve este formulario por email a la direccin


suscriptores@dotnetmania.com, o al fax (34) 91 499 13 64
Tambin puede enviarlo por correo postal
a la siguiente direccin:

C/ Robledal, 135
28529- Rivas Vaciamadrid
Madrid (Espaa)

As se qued Juanita
Book esperando que
le publicaran su libro
(foto: Ramrez, 1893)

Hemos necesitado
que pase ms de un
siglo pero ahora, en el
2004, ya podemos
ofrecerte la solucin
+ rpida, econmica
y eficaz para que tu
libro (sea cual sea la
materia tratada) o tu
tesina vea la luz sin
necesidad de esperar
otros tantos aos.
Desde una tirada de
100 ejemplares la
solucin + profesional y econmica para
ediciones cortas y/o
personalizadas.

nuevosescritores

c/ Collado Bajo, 13 28053 Madrid 914 770 185 Fax: 914 773 152
autores@nuevosescritores.com
www.nuevosescritores.com

<< dnm.desvan

noticias.noticias.noticias.noticias

Marino Posadas

Algunos programas de prevencin contra


el spyware son, en realidad, agentes dobles
As lo denuncia John Borland, de CNET News
en el artculo Spyware cures may cause more harm
than good (http://news.com.com/2102-1032_35153485.html?tag=st_util_print). Bajo la promesa
de vigilar la ejecucin de programas de vigilancia
(spyware), en realidad, realizan la misma funcin
que los otros de forma silenciosa.

La prxima versin de Internet Explorer invalidar el uso de la @


As se evitara la inclusin de nombres de usuario en las URL y por tanto una posible vulnerabilidad. Parece se que la prxima versin del programa producir un mensaje del tipo invalid syntax error, si el smbolo @ aparece en la direccin
solicitada.

Cientificos de la Universidad de Colorado,


crean una nueva forma de materia
Los cientficos que aparecen
en la foto, Deborah Jin, Markus
Greiner y Cindy Regal, anunciaban hace unos das la creacin
de una nueva forma de materia llamada condensado ferminico,
que viene a aadirse a la lista de
cinco anteriores (slido, liquido,
gaseoso, plasma y los condensados Bose-Einstein, descubiertos en 1995). Este tipo de materia es un paso ms en la obtencin de materiales superconductores de uso cotidiano, de los que esta nueva forma se
encuentra, segn Jin, en un estado intermedio entre el superconductor y el Bose-Einstein. La forma de comportarse de
los tomos de Potasio super-enfriado, sugieren que podran
encontrarse formas de traducir ese comportamiento en slidos a temperatura ambiente.

Un empleado de Google, desarrolla una herramienta de redes sociales, como proyecto propio. Orkut
Buyukkokten, doctor en Informtica por la Universidad de Stanford, y empleado de Google que trabaja en el departamento de investigacin de interfaces de usuario, ha desarrollado una nueva herramienta de encuentro social
(www.orkut.com) como parte del trabajo que Google exige a sus ingenieros un da a la semana: elaborar un proyecto propio. Segn parece, sta es solo una de las iniciativas que Google piensa presentar en los prximos meses.

documentos en la red

Bitcoras
(Blogs relacionacionados con .NET)

Microsoft ACSP: (Universidad Politcnica de


Valencia): proyectos fin de carrera con tecnologa Microsoft:
http://www.upv.es/dalum/acsp/proyectos.htm

Microsoft ACSP: (Universidad de Deusto): sitio


de colaboracin Microsoft-U. Deusto:
http://www.acsp.deusto.es/

Sitio Web de David Salgado (MVP C#,


Universidad de Deusto): www.muxu.net

C# Help: un montn de informacin sobre el


lenguaje:
http://www.csharphelp.com/

HitMill: Amplia informacin sobre casi todos los

<<dotNetMana

lenguajes, con una buena seccin de C#:


http://www.hitmill.com/programming/dotNET
/csharp.html

58

OnlyForGurs: Informacin sobre diversas tecnologas Microsoft ordenado por categoras:


http://www.only4gurus.com/v2/index.asp.

Brad Adams: http://blogs.gotdotnet.com/brada/


Brian Jepson: http://www.jepstone.net/radio/2002/10/10.html
Chris Anderson (del equipo de desarrollo de VB.NET):
http://www.simplegeek.com/
Larry OBrien: http://www.thinkingin.net/
Simon Fell: http://www.pocketsoap.com/weblog/

Utilidades del mes


SWF Opener: pequeo ejecutable que permite abrir y ejecutar
ficheros flash sin necesidad de Internet Explorer. Puede
descargarse de http://www.geeknews.net
EF Comander Free 3.8.1: Utilidad similar al Windows Comander
de Norton, pero actualizada y gratis. Descargas en:
http://www.geeknews.net
HD Cleaner: Pequea utilidad que permite realizar un mantenimiento de los discos duros. Permite el borrado de ficheros
tipo BAK, CHK, GID, ~ * *, TMP, etc. Requiere la versin
4.71+ de Shell32.dll.
Para los enlaces exactos, visite nuestro sitio en la web,
dotnetmania.com

You might also like