dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a...

60
dedicada a los profesionales de la plataforma .NET Opinión Hay vida después de la muerte TodotNet@QA Extrañas cosas sobre C#,pero de software Comunidad.net navarraDotNet Grupo de usuarios de .NET de Navarra dotNetManía www.dotnetmania.com entrevista John O’Rourke General Manager, Product Management Mobile and Embedded Devices Marketing de Microsoft dotNetManía Clonación total de objetos . NET en C# 3.0 nº 36 abril 2007 6,50 Visual Basic • C# • ASP.NET • ADO.NET • SQL Server • Windows System Combinando ensamblados de .NET en un único ensamblado utilizando ILMerge • Lo que nos traerá Orcas:LINQ to SQL • Métricas para la gestión de proyectos con Team Foundation Server • Directorio Activo de Windows.Las páginas amarillas de la red

Transcript of dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a...

Page 1: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dedicada a los profesionales de la plataforma .NET

OpiniónHay vida después de la muerte

TodotNet@QAExtrañas cosas sobre C#, pero de software

Comunidad.netnavarraDotNet Grupo de usuarios de .NET de Navarra

dotNetManíawww.

dotne

tman

ia.co

m

entrevistaJohn O’Rourke

General Manager, Product Management Mobile and Embedded Devices Marketing de Microsoft

dotNetManíaClonación total de objetos . NET en C# 3.0

nº 36 abril 2007 6,50 € Visual Basic • C# • ASP.NET • ADO.NET • SQL Server • Windows System

Combinando ensamblados de .NET en un único ensambladoutilizando ILMerge • Lo que nos traerá Orcas:LINQ to SQL • Métricaspara la gestión de proyectos con Team Foundation Server •Directorio Activo de Windows. Las páginas amarillas de la red

Page 2: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server
Page 3: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Bienvenido al número 36, de abril de2007, de dotNetManía.

En el VSLive! celebrado en San Fran-cisco, Prashant Sridharan, senior productmanager de Visual Studio, entre otrosanuncios de los que damos cuenta en nues-tra sección de actualidad, recordó al mun-do que Visual Studio cumplía 10 años.Viendo la CTP de Orcas de marzo reciénliberada y recordando aquel Visual Studio97, o comparando Visual Basic 5 con elnuevo Visual Basic 9, hay que reconocerque los cambios tienen tintes revolucio-narios. Un diez para la evolución en estostantos años.

Nuevamente, y gracias al patrociniode Microsoft, podemos regalarle -comosuscriptor de esta revista- un nuevo Cua-derno Técnico: “Windows PresentationFoundation” de M. Katrib, M. del Valle,I. Sierra y Y. Hernández del grupoWeboo de la Universidad de La Haba-na. Próximamente se publicará en la Webde MSDN un curso online gratuito delmismo tema y autores. Estén atentos.

Este mes entrevistamos a JohnO’Rourke, general manager, productmanagement en la división Mobile andEmbedded Devices Marketing deMicrosoft, con el que charlamos sobrelas novedades de Windows Mobile 6, enocasión del 3GSM celebrado reciente-mente en Barcelona.

Le contamos lo ocurrido en algunosde los más destacados eventos a nivelmundial: Basta!, desde Frankfurt,Developers Week y SQL Server Dev-con, desde Londres y MVP Summit,desde Redmond, evento éste al que, porcierto, muchos MVP españoles han asis-tido por cortesía de Microsoft.

Jorge Serrano aporta su granito dearena colocando su artículo “Combinan-do ensamblados de .NET en un únicoensamblado utilizando ILMerge” en lasección Firma Solidaria, aportando a lafundación Juan Bonal el importe corres-pondiente a sus derechos de autor.

Este mes hemos prestado especialatención a C# 3.0 -que no queda tantopara la versión final- con los artículos“Lo que nos traerá Orcas: LINQ toSQL” de Octavio Hernández y el artí-culo de portada de este mes “Clonacióntotal de objetos .NET en C# 3.0”, un“divertimento” de Miguel Katrib yMario del Valle.

Rodrigo Corral, al que nos gusta-ría ver más por aquí, escribe junto conIbón Landa, de Artalde.net, al que doyla bienvenida por su primera colabora-ción, “Métricas para la gestión de pro-yectos con Team Foundation Server”.

Espero que lo presentado y lo que lequeda por leer sea de su agrado.

dotN

etM

anía

<<

3

Diez para Visual Studio

editorialDedicada a los profesionales de la plataforma .NET

Vol. III •Número 36 • Abril 2007Precio: 6,50€

EditorPaco Marín ([email protected])

Redactor jefeMarino Posadas([email protected])

Editor técnicoOctavio Hernández([email protected])

RedacciónAntonio Quirós, Dino Esposito, Guillermo'Guille' Som, José Manuel Alarcón, LorenzoPonte y Miguel Katrib (Grupo Weboo)

Corresponal para América LatinaPablo Tilotta

Colaboradores habitualesBraulio Díez, Carlos Quintero, Eladio Rincón,Jorge Serrano, José Miguel Torres, LuisMiguel Blanco, Pepe Hevia, Salvador Ramos ySergio Vázquez

Empresas Colaboradoras

Alhambra-Eidos

Plain Concepts

Raona

Solid Quality Learning

Además colaboran en este númeroEduard Tomás, Hadi Hariri, Ibón Landa, JuanBlázquez, Mario del Valle y Rodrigo Corral.

Atención al suscriptorPilar Pérez ([email protected])

IlustracionesYamil Hernández

Edición, suscripciones y publicidad.netalia

c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)

www.dotnetmania.com

Tf. (34) 91 666 74 77Fax (34) 91 499 13 64

ImprimeGráficas MARTE

ISSN1698-5451

Depósito LegalM-3.075-2004

dotNetManíadotNetManía

Paco Marín

Page 4: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

sumario 36Hay vida después de la muerte 10-11

Siempre pensamos en los proyectos mientras estamos dentro de alguna de las fases de su ciclo devida. Pero los proyectos también terminan. Al menos, terminan la fase de desarrollo parapasar a la de mantenimiento. Cuando se produce este hecho, es el momento de reflexionar sobrelo acontecido en el proyecto y de registrar todo aquello que pueda considerarse significativo. Estolo hacemos en lo que denominamos el análisis post mortem.

Entrevista a John O’Rourke 12-14General Manager, Product Management, Mobile and Embedded Devices Marketing.

Eventos 16-17Basta! 2007, MVP Summit 2007, Developers Week 2007 y SQL Server Devcon 2007

Combinando ensamblados de .NET en un único ensamblado utilizando ILMerge 18-21ILMerge es una herramienta de línea de comandos que permite combinar varios ensambladosen uno solo.

Lo que nos traerá Orcas: LINQ to SQL 22-28En este artículo haremos una presentación práctica de las características fundamentales deLINQ To SQL, la tecnología derivada de LINQ que proveerá la infraestructura necesariapara, entre otras cosas, hacer posible las consultas integradas en el lenguaje sobre bases de datosrelacionales.

Clonación total de objetos . NET en C# 3.0 30-39Este artículo es un divertimento que nos muestra cómo se pueden combinar atractivos recursosde .NET y C# 3.0 como los atributos, la reflexión, la genericidad, los métodos extensores y lacapacidad de consulta de LINQ para implementar un método que pueda hacer la clonacióncompleta de objetos .NET.

Métricas para la gestión de proyectos con Team Foundation Server 40-44En este artículo se describe el enfoque con que se utilizan las métricas en Microsoft SolutionsFramework y se presentan algunas de las métricas para esta metodología de las que se puededisponer cuando se utiliza Team Foundation Server para la gestión de los proyectos.

Directorio Activo de Windows. Las páginas amarillas de la red 45-48Dentro de una red informática, normalmente se prima la conexión sobre cualquier otraconsideración. Que los usuarios puedan acceder a los ficheros, servidores Web, a su correo obases de datos es lo que importa. Sin embargo, cómo se organizan los recursos y cómo se accede aellos también influye en el rendimiento, disponibilidad y facilidad de uso. Un aspectoimportante y muchas veces olvidado. Para organizar los recursos de la red, en las redesWindows el Directorio Activo resulta vital.

dnm.todotnet.qa 49-51Extrañas cosas sobre C#, pero de software

dnm.laboratorio.net 52-53ILMerge, BackgroundWorker Component y XML Notepad 2007

dnm.comunidad.net 54-56navarraDotNet. Grupo de usuarios de .NET de Navarra

dnm.biblioteca.net 57Pro .NET Extreme Programing Windows Presentation Foundation Unleashed

dnm.desvan 58

Page 5: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server
Page 6: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

A principios del pasado mes fueliberada la versión CTP de Orcascorrespondiente al mes de marzo. Lalista de cambios es muy extensa; deellas destacamos éstas: • Esta CTP constituye uno de los

principales hitos en el LINQ Pro-ject, incluyendo nuevas caracterís-ticas en los lenguajes C# y VB 9.

• API de datos extendidas y máspotentes con el ADO.NETEntity Framework.

• Microsoft Synchronization Ser-vices for ADO.NET, una APIpara sincronizar datos entre ser-vicios de datos un almacén local.

• Diseñador para WPF.• Soporte para control de versiones.• Diseñador y depurador de WF

integrados en Visual Studio.• Integración WF y WCF.• Integración Atlas para construir

aplicaciones Web de estilo Ajaxusando servicios WCF.

• Por primera vez se incluyen nue-vas características requeridas porlos clientes de Team FoundationServer.

La lista completa de novedadespuede consultarla en el mismolugar desde el que puede descargarla CTP en http://www.microsoft.com/downloads. Si lo desea puede enviarsu feedback a través de http://con-nect.microsoft.com.

dotN

etM

anía

<<

6

noticias

Visual Studio 2005 SP1 Update for Windows VistaMicrosoft ha liberado VS 2005 SP1 Update for Windows Vista, que des-

pués de arreglar unos pocos bugs, asegura, por fin, la compatibilidad con WindowsVista. Puede ver una lista de bugs corregidos en el blog de Brian Harry enhttp://blogs.msdn.com/bharry/archive/2007/03/07/visual-studio-sp1-refresh-rele-ases.aspx. Para descargarla: http://www.microsoft.com/downloads/details.aspx?famil-yid=90e2942d-3ad1-4873-a2ee-4acc0aace5b6&displaylang=en.

Visual Studio 2005 SDK 4.0 RTM disponibleEl SDK de Visual Studio 2005 versión 4.0 incluye herramientas, docu-

mentación y ejemplos para que los desarrolladores escriban, construyan,prueben y desplieguen las extensiones para Visual Studio 2005.

Este SDK permite a los desarrolladores integrar herramientas, edito-res, diseñadores, lenguajes y más, dentro de Visual Studio 2005. Añade lassiguientes características: VS SDK Browser, Package Load Analyzer, Tool-box Control Installer junto con un ejemplo, una nueva herramienta paragenerar documentación de librerías de clases gestionadas (Sandcastle), unnuevo ejemplo de combo en barras de herramientas, y más… Para descar-garlo: http://www.microsoft.com/downloads/details.aspx?FamilyID=51a5c65b-c020-4e08-8ac0-3eb9c06996f4&displaylang=en.

Compact Framework 2.0 SP2 liberadoIncluye nuevas características en el Monitor de Rendimiento Remoto

orientadas a encontrar “goteos” de memoria en el montículo manejado.Estas características hacen posible en cualquier momento obtener una ins-tantánea del estado del montículo gestionado por el recolector de basuray examinar las relaciones entre las instancias de objetos “vivas”. Tambiénes posible comparar múltiples instantáneas obtenidas en distintos momen-tos de tiempo, con el objetivo de detectar las tendencias de utilización dela memoria durante la ejecución de una aplicación.

Actualizaciones

n no ot ti ic ci ia as s

n no ot ti ic ci ia as s

n no ot ti ic ci ia as s

n no ot ti ic ci ia as s

CTP de Orcas de marzo de 2007

Microsoft ha anunciado la adquisiciónde DevBiz Business Solutions, la com-pañía fabricante de TeamPlain WebAccess for Team System. TeamPlain esuna aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoríade las funcionalidades de Team Founda-tion Server desde un explorador Web, per-mitiendo, por ejemplo, acceder desde cual-quier máquina, tenga o no instalado VisualStudio o incluso desde otras plataformas.

Muchos clientes de Microsoft veníanreclamando una interfaz Web para VSTS.Después de un largo proceso de selección,TeamPlain, que lleva en el mercado alre-dedor de un año de manera muy exitosa,ha sido la herramienta elegida por Micro-soft para aportar esta funcionalidad.

TeamPlain está disponible de formagratuita a los usuarios que tengan unalicencia CAL de TFS en: http://www.dev-biz.com/downloads.aspx. El soporte conti-nuará siendo ofrecido por el equipoactual vía los foros on line de DevBiz en:http://dev.devbiz.com/forums.

En los próximos meses, Microsoftrenombrará TeamPlain y será licenciadocomo una VSTS Power Tool, pasando elsoporte a los foros de Microsoft y telefó-nico. Para cuando aparezca Orcas, serálicenciado como Team System WebAccess como un componente oficial,documentado, localizado y oficialmentesoportado de TFS.

Microsoft adquiere DevBiz

Page 7: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

7

dnm.directo.noticias<<

El pasado mes de febrero,Visual Studio cumplió la friolerade 10 años. Viendo la evoluciónde aquél Visual Studio 97 a lanueva era en el desarrollo de soft-ware que comenzó con VisualStudio .NET, resulta difícil ima-ginar a dónde nos llevarán lospróximos 10. Esperemos que dot-NetManía siga aquí para tenerun medio donde contarlo.

Según las palabras de “Soma”Somasegar, corporate vicepresident,de la developer division de MicrosoftCorporation, “Visual Studio haayudado a nuestros desarrollado-res, clientes y socios a ser exitososen sus negocios y crear magníficasaplicaciones –muchos de ellos hanestado con Visual Studio los diezaños completos-”. Además, Soma-segar añade: “Cuando miro atrássobre cómo Visual Studio ha evo-lucionado en los diez últimos años,me siento muy orgulloso de lo quehemos sido capaces de dar a nues-tros clientes. Hemos creado unanueva era en el desarrollo de soft-ware con .NET”.

Si quiere conocer sus palabras alrespecto, en inglés, puede leerlas ensu blog en http://blogs.msdn.com/soma-segar. También puede conocer algu-nas opiniones de clientes y socios deMicrosoft con respecto a este ani-versario en http://www.microsoft.com/presspass/features/2007/mar07/03-26VisualStudioQuoteSheet.mspx.

Microsoft celebró este décimoaniversario de Visual Studio el 26de marzo en el VSLive! de SanFrancisco, el mismo día que anun-ció la adquisición de DevBiz Busi-ness Solutions. Este mismo día seanunció la publicación del libro deruta de Orcas Wave (Orcas +Rosario), que puede ver en detalleen http://msdn2.microsoft.com/de-de/teamsystem/bb407307.aspx. Resu-midamente, durante este segundotrimestre tendremos la primerabeta, hacia mediados del año ten-dremos la segunda y, posiblemen-te, a finales de este mismo año, laversión RTM.

Enhorabuena a todos losmiembros del equipo de desarro-llo de Visual Studio.

Visual Studio cumple 10 añosAclaración sobre la campaña publicitaria de Alham-bra-Eidos “Buscamos talento, te buscamos a ti”

En números anteriores insertamos en dotNetManía anunciosde una campaña publicitaria cuya finalidad era la búsqueda de per-sonal para el área de arquitectura de software, y que remarcaba elhecho de la promoción profesional que se produce entre las opera-ciones de “picar código” y diseñar sistemas.

La inserción de dicha campaña produjo un vivaz e interesantedebate entre muchos programadores que consideraban que se menos-preciaba la labor de “picar código” frente a otras dentro del ámbitodel desarrollo de software.

Como nada había más lejos de nuestra intención que el hechode que se llegara a dicha conclusión de menoscabo del rol del pro-gramador frente a otros, hemos decidido cambiar la mencionadacampaña y pedir disculpas a quienes pudieran haberse sentido heri-dos por la misma.

La base de esta compañía es su personal técnico en cualquierade sus ámbitos (sistemas, redes, desarrollo de software, comunica-ciones, etc.) y, por tanto, los programadores son uno de nuestrosmás fuertes puntales. Respetamos profundamente su trabajo y con-sideramos que sin ellos esta compañía no sería lo que es. Solo nosgustaría aclarar que nuestro mensaje iba dirigido únicamente a lacaptura de profesionales de diferente perfil y que resaltamos la opor-tunidad de desarrollo de carrera que ello podía suponer. No encon-tramos el mensaje adecuado y prueba de ello es el debate produci-do. Esperemos que las nuevas versiones de la campaña sean capacesde transmitir el mensaje deseado sin herir la sensibilidad de nadie.

Antonio QuirósDirector de operaciones de Alhambra-Eidos

Durante la celebración del primerWindows Server TechDay que hacelebrado Microsoft Ibérica, bajo ellema “Ampliando las fronteras tecnoló-gicas de Windows Server”, y en el queha reunido a más de 1.500 clientes ypartners, la compañía ha desvelado algu-nas de las novedades que incluirá el sis-tema operativo para servidores de pró-xima generación, Windows Server“Longhorn”, así como su estrategia de

virtualización, presentando sus nuevastecnologías Windows Hypervisor ySystem Center Virtual MachineManager.

Microsoft ha aprovechado este pri-mer Windows Server TechDay para rea-lizar la primera preview técnica de Win-dows Server Longhorn. Basado en Win-dows Server 2003, Longhorn incluye unaserie de mejoras y nuevas funcionalida-des relacionadas con networking, seguri-

dad, acceso remoto a aplicaciones, ges-tión centralizada de roles de servidor,herramientas de monitorización del ren-dimiento y la fiabilidad, failover clustering,opciones de instalación y sistema deficheros.

Para más información y obtener infor-mación técnica y recursos de WindowsServer Longhorn y las tecnologías de vir-tualización visitar: http://www.micro-soft.es/technet.

Microsoft desvela algunas de las características deWindows Server LonghornDurante su primer Windows Server TechDay, la compañía ha desvelado también suestrategia en virtualización y ha presentado las nuevas tecnologías Windows Hypervisory System Center Virtual Machine Manager.

Page 8: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

❑ Deseo suscribirme a dotNetManía por un año (11 números) por un precio de 65,00€ IVA incluido y recibir gratuitamente elcuaderno técnio número 7 Windows Presentation Foundation. Si su dirección está fuera de España consulte los detalles enwww.dotnetmania.com.

❑ Deseo que me envíen los números atrasados marcados según el precio de portada. Otros:

FORMA DE PAGO❑ Talón nominativo a nombre NETALIA, S.L.❑ Transferencia bancaria a nombre de NETALIA, S.L. a:

La Caixa - Número de cuenta 2100 4315 48 2200014696 (Indique su nombre en la transferencia)

❑ Domiciliación Bancaria (con renovación automática, previo aviso)Indique su número de cuenta:

❑ Tarjeta de crédito❑ VISA ❑ MASTERCARDNúmero de su tarjeta: Fecha de caducidad: / (imprescindible)

Firma y/o sello

a de de 2007

DATOS DE ENVÍO

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DATOS DE FACTURACIÓN (sólo si son distintos a los datos de envío)

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Usted autoriza a la mecanizaciónde estos datos. El responsable ydestinatario de éstos es Netalia,S.L. Usted tiene derecho a acce-der a sus datos, modificarlos ycancelarlos cuando lo desee. Susdatos no serán cedidos en ningu-na de las formas posibles a terce-ras partes y no se utilizarán másque para el buen funcionamien-to de su suscripción a la revistadotNetManía y para informar-le de las actividades comercialesque realice la editorial Netalia,S.L. Si no desea recibir informa-ción comercial de dotNetManíamarque la casilla siguiente ❑Puede enviar sus datos por Fax al 91 499 13 64, o por teléfono al 91 666 74 77,

o por email a la dirección [email protected], o también puedeenviarlos por correo postal a la siguiente dirección:

Netalia, S.L.C/ Robledal, 13528529- Rivas Vaciamadrid (Madrid)

Oferta válida hasta el 30 de abril de 2007 o hasta agotar existencias

❑ Nº22 (6,50€) ❑ Nº23 (6,50€) ❑ Nº24 (6,50€) ❑ Nº25 (6,50€) ❑ Nº26 (6,50€) ❑ Nº27 (6,50€) ❑ Nº28 (6,50€)

❑ Nº29 (6,50€) ❑ Nº30 (6,50€) ❑ Nº31 (6,50€) ❑ Nº32 (6,50€) ❑ Nº33 (6,50€) ❑ Nº34 (6,50€) ❑ Nº35 (6,50€)

Page 9: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server
Page 10: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

de los proyectos es una documenta-ción altamente eficaz que sirve para recoger los datos básicos delproyecto en cuanto a la estimación que originariamente hicimos delmismo, contrastándola después con la realidad de lo ocurrido. Eneste tipo de análisis siempre recogemos dos áreas fundamentales:

• Métricas del proyecto. En ellas evaluamos cómo han aconteci-do las cosas respecto al cumplimiento de plazos, fiabilidad delas estimaciones, datos de rentabilidad, ratios de estabilidadde recursos, etc.

• Prácticas. Aquí deberían recogerse tanto aquellas prácticas que,por haber resultado positivas, convenga seguir en el futuro ensituaciones similares, como las negativas que convenga elu-dir. El análisis permanente de las prácticas que se ponen enuso en los proyectos es una de las más altas garantías de éxi-to futuro.

Aprendemos de lo hecho, y esto nos garantiza la repetibilidadde los éxitos. A través de esta repetibilidad se alcanza la madurezen el desarrollo de software, según acreditan CMMI u otros mar-cos parecidos. Así funcionamos los humanos en general. Nuestroproceso de aprendizaje se produce a través de un modelo en el cualcada vez que hacemos algo nuevo estamos asistiendo a una especiede entrenamiento, que conforme lo repetimos suele funcionar mejo-rando nuestra habilidad y garantizando que podremos repetir lohecho con un alto porcentaje de posibilidades de hacerlo, por lomenos, igual de bien que la vez anterior.

Cuando no hablamos de una persona individual sino de unequipo o una empresa, el asunto cambia: el aprendizaje ya no seconcentra en un único receptáculo, sino que descansa en distintaspersonas que, cuando el equipo vaya a repetir lo hecho, probable-mente no sean las mismas. Por ello hay que garantizar que la infor-mación que nos ayuda a mejorar se confecciona, registra y difun-de entre cualquier miembro de la organización que deba enfren-tarse de nuevo a problemas similares. Para que esto se dé necesi-

Hay vida después de la muerte

<< El análisis post mortem

AAnnttoonniioo QQuuiirróóss escolaborador habitual

de ddoottNNeettMMaannííaa. Co-fundador de las revis-

tas clippeRManía, FOX-Manía y Algoritmo.

Actualmente es direc-tor de operaciones en

AAllhhaammbbrraa--EEiiddooss.

Siempre pensamos en losproyectos mientrasestamos dentro de algunade las fases de su ciclo devida. Pero los proyectostambién terminan.Almenos, terminan la fasede desarrollo para pasar ala de mantenimiento.Cuando se produce estehecho, es el momento dereflexionar sobre loacontecido en elproyecto y de registrartodo aquello que puedaconsiderarse significativo.Esto lo hacemos en loque denominamos elanálisis post mortem.

opinión

Antonio Quirós

Page 11: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

tamos de dos elementos clave. El pri-mero de ellos es un entorno cultural enla compañía que facilite este tipo de prác-ticas; es decir, que fomente el análisis delos resultados con la finalidad de tenerelementos de juicio para mejorar en elfuturo, y que además fomente el regis-tro de dichos análisis, la difusión de losmismos y la continua política de mejo-ra basada en el aprendizaje. El segundoelemento es la existencia de un reposi-

torio de información de proyectos, don-de pueda organizarse toda la informa-ción asociada a los mismos. Las herra-mientas de gestión de configuración deltipo SourceSafe pueden servir para esto;también Sharepoint u otros gestoresdocumentales. En cualquiera de loscasos, el documento de análisis post mor-tem debe estar entre la documentacióndel proyecto para que cualquiera pueda,de forma rápida, acceder a dicho resu-

men para hacerse una idea global de loacontecido en el mismo.

El análisis post mortem se vincula conotra figura clave en el proceso de recogi-da de feedback en los proyectos: la comi-sión de buenas prácticas. En este tipode comisión suelen reunirse los arquitec-tos, jefes de proyecto, etc. de la compañíapara analizar las prácticas usadas en losproyectos y sacar conclusiones de ellas. Eldocumento del análisis post mortem esuna herramienta de trabajo fundamentalpara esta comisión, ya que normalmentelos jefes de cada proyecto suelen presen-tar a la comisión las conclusiones de sutrabajo, y lo hacen apoyándose en estedocumento que previamente han elabo-rado ellos mismos. Mi recomendación esque se den varias de estas reuniones cadaaño (por ejemplo, con carácter bimestralo trimestral) y que sirvan de foro de par-ticipación para todos los responsables téc-nicos de la compañía, así como de análi-sis permanente de prácticas y determina-ción de acciones de mejora.

Generalmente, cuando hablamos deeste tipo de herramientas abstractas y quizácon matices de burocratización del día adía tecnológico, los desarrolladores sue-len torcer el gesto y pensar que se estáentorpeciendo el correcto quehacer dia-rio, que en muchos casos sólo concibencomo mejora técnica permanente sin unoscanales adecuados para la formalizaciónde la misma. En la compañía para la quetrabajo pensamos que estas figuras cana-lizan y organizan realmente la mejora;pensamos que si no existen, solo el canaldel voluntarismo individual es el que dapie a la misma; y éste suele ser desorgani-zado, poco planificable y, en muchas oca-siones, altamente inoperante. Solo si cre-amos cauces para el fomento, la expresióny la organización de dicha mejora estare-mos ayudando a que sus incrementos rea-les sean concretos y mensurables.

La existencia de análisis post mortemy de una comisión de buenas prácticas sonsignos esenciales para diagnosticar lamadurez de una empresa de desarrollo desoftware. Ambos son hitos cruciales en elcamino hacia la excelencia y la mejorapermanente por el que las empresas dedesarrollo de software están pasando eneste momento.

dotN

etM

anía

<<

11

dnm.opinión<<

Proyecto: XXXXX

Fecha inicio prevista/Fecha inicio real 14/02/05/15/02/05

Fecha finalización prevista/Fecha finalización real 14/02/06/15/05/06

Importe presupuestado inicial/Importe presupuestado final XXXXX/XXXXX

Recursos estables/Recursos totales 9/9

Carga de trabajo en horas presupuestadas para DP/Carga de trabajo en horas realizadas para DP

104/104

Carga de trabajo en horas presupuestadas para JP/Carga de trabajo en horas realizadas para JP

192/305

Carga de trabajo en horas presupuestadas para AT/Carga de trabajo en horas realizadas para AT

0/0

Carga de trabajo en horas presupuestadas para AF/Carga de trabajo en horas realizadas para AF

0/0

Carga de trabajo en horas presupuestadas para AP/Carga de trabajo en horas realizadas para AP

408/358

Carga de trabajo en horas presupuestadas para PS/Carga de trabajo en horas realizadas para PS

1.128/1.132

Carga de trabajo en horas presupuestadas para OTROS/Carga de trabajo en horas realizadas para OTROS

0/25

Recursos del proyecto detallando funciones XXXXX: Director de proyecto

XXXXX:Analista técnico, Jefe de proyecto

XXXXX:Analista programador

XXXXX: Programador

XXXXX: Programador

XXXXX: Programador

XXXXX: Documentación

Solo para análisis

Horas previstas de análisis/Horas realizadas de análisis XXXXX/XXXXX

Solo para construcción

Incidencias reportadas en pruebas de aceptación/horas del proyecto

5/1832

Errores reportados en pruebas de aceptación/horas del proyecto

80/1832

Formulario técnico de análisis post mortem de proyectos, tal como lo usamos en Alhambra-Eidos (no incluye un apartado de prácticas)

Page 12: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Eduard Tomás

EEdduuaarrdd TToommááss tienemás de 8 años de

experiencia en análisisy desarrollo de

aplicaciones.Actualmente trabaja

como director deproyectos y arquitectode software en rraaoonnaa.

Es MCSD.NET ytechnology specialist en

clientes Web con .NET2.0, además de

certificado en UML ySCWCD en Java

entrevista

entrevista a John O’RourkeGeneral Manager, Product Management, Mobile and Embedded Devices Marketing

Page 13: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

¿Cuáles son las novedades másimportantes de Windows Mobile 6?

Creo que las mayores novedades deWM6 se centran en las siguientes áreas:

Primero, hemos simplificado lo quele cuesta al usuario llevar a cabo las tare-as más comunes que la gente realiza. ¿Yésas cuáles son? Pues realizar llamadas,encontrar contactos, enviar (o respon-der a) emails, buscar emails o gestionar elcalendario. Hemos conseguido que seacceda a esas tareas con un solo clic.

Segundo, hemos hecho que la expe-riencia con el dispositivo móvil sea “demás alta fidelidad”. Por ejemplo, los emailsahora pueden tener letras en distintoscolores y tamaños, tablas, hiper-enlacese imágenes porque soportamos emails enformato HTML, siendo el primer dis-positivo móvil que los soporta. Tambiéntenemos Office Mobile para ambas ver-siones de Windows Mobile 6. Hasta aho-ra teníamos la plataforma SmartPhone yla plataforma Pocket PC. En WindowsMobile 6 mantenemos ambas platafor-mas, pero les hemos cambiado el nom-bre a Standard y Professional. Standardes la evolución de la plataforma Smartp-hone, mientras que Professional es la evo-lución de Pocket PC. El cambio de nom-bre se ha decidido para orientar al clien-te a entender las diferencias entre lossmartphones y los pocket PC. Tambiénhemos mejorado la gestión del calenda-rio: es mucho más fácil encontrar y ges-tionar las reuniones; gracias a las nuevasvistas del calendario y a la integración conContacts, el usuario puede hacer muchascosas que antes no eran posibles.

La tercera gran novedad es la inte-gración con los servicios Windows Live.Existe una aplicación (Windows LiveMobile) que se puede integrar en el sis-tema: desde la home screen puedes bus-car en la Web, gestionar tu correo Livey ver el estado de tus contactos de Win-dows Live, y si están online puedes cha-tear con ellos.

Yo pienso que esas tres grandes áre-as contienen las mayores novedades deWindows Mobile 6.

¿Se espera una localización de losservicios Live para fuera de USA? Es

decir, que un usuario español acceda alos servicios Live de España.

Sí. Windows Live Mobile (que for-ma parte de Windows Mobile 6) se dis-tribuye en los mismos idiomas que Win-dows Mobile 6. Por otro lado LiveSearch, que es una aplicación que accedea los servicios Live y que permite bús-quedas categorizadas, direcciones y mapasestá disponible actualmente para EstadosUunidos y el Reino Unido, pero en unfuturo se extenderá a más y más países.

¿Es Live Search parecido aYahoo! One Search?

No conozco muy a fondo el produc-to de Yahoo!, pero te puedo decir que lagente que ha probado nuestro productonos ha devuelto feedbacks muy buenos, porsu velocidad, por su diseño y además tam-bién está disponible una versión en for-ma de cliente Java. Nosotros pensamosque el enfoque de Live Search es distin-to al de empresas como Google o Yahoo!

¿Existe una API para que lasempresas puedan integrar sus apli-caciones con los servicios Live?

Windows Live tiene un programa dedesarrollo para 3rd parties. No conozcomuy a fondo los detalles de este progra-ma, pero te puedo decir que en él hayempresas desarrollando aplicaciones quese integran con los servicios Live.

Con Windows Mobile 6 me pue-do conectar a un servidor Sharepointpara descargar un documento y edi-tarlo con Office Mobile. Pero, ¿se pue-de subir luego el documento modifi-cado de nuevo al servidor Sharepoint?

Actualmente sólo puedes des-cargártelo y guardarlo en local. Nopuedes salvar de nuevo en un servidorSharepoint.

¿Cuáles son los requisitos dehardware para Windows Mobile 6?

Los requisitos de hardware paraWindows Mobile 6 son los mismos quepara Windows Mobile 5: si un disposi-tivo puede ejecutar Windows Mobile 5,podrá ejecutar sin problemas WindowsMobile 6. Ésta ha sido una regla claveen el diseño del sistema. De la mismamanera, el sistema se ha diseñado paraque tenga un nivel de compatibilidad al

dotN

etM

anía

<<

13

dnm.directo.entrevista<<

Como director generalde marketing deWindows Mobile, JohnO´Rourke se encargade la gestión deproducto de la divisiónde Windows Mobile.

Anteriormente, de2003 a 2006, John fueel director senior de ladivisión de Consumode Microsoft y fue elresponsable de darforma a las estrategiasde marketing y negocioen el área de consumo.Lleva en Microsoftdesde enero de 1992,cuando se unió a lacompañía comoproduct manager paraMicrosoft Publisher.

John es licenciado enEmpresariales y poseeun M.B.A. concedidopor la Universidad deWashington.

Page 14: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

14

dnm.directo.entrevista<<

100% con las aplicaciones de WindowsMobile 5, así que todas las aplicacionesexistentes para Windows Mobile 5 fun-cionarán bien en la nueva versión.

Centrándonos en la programa-ción con .NET, ¿qué novedadesaporta Windows Mobile 6?

La novedad más importante es quetanto el Compact Framework comoSQL Server Mobile están en ROM, deforma que los desarrolladores ya no tie-nen que pensar en distribuir el runtimede CF con su aplicación: si desarrollaspara Windows Mobile 6, ya sabes queel CF está disponible siempre.

El negocio de los juegos para dis-positivos móviles está experimen-tando un gran auge. ¿Cuál puede serel futuro de la programación de vide-ojuegos para Windows Mobile 6?¿XNA quizás?

¡XNA, espero! Al menos esa es nues-tra visión. Pero todavía está todo pordefinir.

¿Significa Mobile Device Centerla muerte de ActiveSync?

No. Windows Mobile 6 viene conuna nueva versión de Active Sync (4.5).Si se conecta el dispositivo móvil a unamáquina con Vista se usa Mobile Devi-ce Center, mientras que si se conecta auna máquina XP ó 2000 se usará Acti-veSync. Ambos productos tienen la mis-ma funcionalidad, la diferencia es a nivelde experiencia de usuario: Mobile Devi-ce Center es más consistente con Win-dows Vista y permite hacer las cosas demanera más fácil.

¿Tiene previsto Microsoft atacarel mercado de telefonía móvil masi-vo (como teléfonos móviles destina-dos a jóvenes)? O ¿prefiere centrar-se en el mercado profesional?

Nuestro foco de atención es el mer-cado para profesionales, ya sea trabaja-dores de pequeñas, medianas o grandesempresas. Es por ello que se ha diseñadoWindows Mobile 6 para permitir que sususuarios sean el máximo de productivoscuando no están en su oficina. Dicho esto,nosotros sabemos que estos profesiona-les también tienen una vida personal: tie-

nen familia, amigos, seguramente tienenotras cuentas de correo además del correoprofesional. Es por ello que hemos tra-bajado para estar seguros de que Win-dows Mobile 6 también sirve para esteaspecto personal. Por ejemplo, WindowsMedia Player ofrece una gran experien-cia multimedia. Así que si bien nuestrofoco principal es el usuario profesional,sabemos que también debemos satisfacersus necesidades personales.

¿Crees que en el futuro la gentetendrá un sólo dispositivo móvil paratodo, o bien varios dispositivos paratareas distintas?

Mi punto de vista es que no hay undispositivo que satisfaga todas las nece-sidades. Gente diferente tiene necesi-dades diferentes, y algunas personaspueden necesitar tener más de un dis-positivo móvil. Personalmente meencanta mi dispositivo Windows Mobi-le 6: es un gran teléfono, un buen repro-ductor de música y me permite gestio-nar mi agenda y mi música, que son misnecesidades principales. Pero otras per-sonas con distintas necesidades puedenrequerir dispositivos distintos. Porejemplo, alguien muy aficionado alvídeo puede pedir que su dispositivoesté optimizado para visionar vídeos:pantalla más grande, batería más dura-dera, mientras que el funcionamientocomo teléfono puede importarle pocoo nada. Así que pienso que si bien lamayoría de dispositivos van a ir agru-pando funcionalidades, seguirán exis-tiendo dispositivos enfocados a solu-cionar básicamente una necesidad.

¿Y vamos a ver Windows Mobile6 en estos dispositivos específicos?

Ya hoy día se ve Windows Mobileen dispositivos específicos y queremosque siga siendo así. Gente distinta tie-ne necesidades distintas y pensamos queWindows Mobile 6 puede satisfacer lagran mayoría de ellas.

¿Se espera alguna versión nuevade Windows CE? ¿Son Windows CEy Windows Mobile dos productoscompletamente separados o se desa-rrollan a la par?

Bien, Windows Mobile está cons-truido sobre Windows CE: el núcleode Windows Mobile es Windows CE.Ambos productos se desarrollan y lle-gan al mercado de forma separada y estoseguirá así, ya que el mercado que ata-can es distinto. Por ejemplo, hace pocohemos lanzado la nueva versión deWindows CE: Windows CE 6. PeroWindows Mobile 6 no está basado enWindows CE 6 sino que está basado enWindows CE 5.

¿Existe alguna certificación paradesarrolladores de dispositivosmóviles?

La verdad es que no sé si existe algúnMCP específico para desarrolladores dedispositivos móviles. Lo que si puedodecirte es que hay una gran cantidad derecursos para estos desarrolladores: des-de una conferencia específica (MEDC),hasta materiales específicos y una secciónpropia en MSDN.

¿Qué podemos esperar de Win-dows Mobile 6 como desarrolladores?

Puedes esperar mejoras en Visual Stu-dio para permitir desarrollar mejores apli-caciones más rapidamente, soporte ydocumentación de patrones y prácticascomunes, documentos sobre cómo crearlas mejores aplicaciones para dispositivosmóviles, y cómo adaptarlas para que fun-cionen en un amplio abanico de disposi-tivos distintos. Y puedes estar seguro deque seguiremos trabajando para mejorarmás y más todas las herramientas, paraque desarrollar aplicaciones para dispo-sitivos móviles sea consistente con el res-to de herramientas para otras platafor-mas.

Entiendo que las aplicacionessmart client seguirán siendo impor-tantes en un futuro.

Sí. Absolutamente. Y también pre-veo un aumento de aplicaciones AJAXpara dispositivos móviles.

¿Está AJAX soportado en Win-dows Mobile 6?

Sí. La gran mayoría de aspectos queun desarrollador espera al crear aplica-ciones AJAX están disponibles en Win-dows Mobile 6.

Page 15: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server
Page 16: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Del 12 al 15 de marzo de 2007 tuvolugar en el Centro de Convencionesdel estado de Washington y luego enlas instalaciones de Microsoft en Red-mond, Seattle, la reunión mundial deMVP de Microsoft correspondienteal año 2007. En el evento se dieroncita, convocados por el fabricante,más de 1700 delegados provenientesde 90 países, entre ellos 29 españo-les. Divididos en nueve áreas dife-

rentes según los productos en los que se especializan,los asistentes pudieron conocer, directamente de losresponsables de la creación de los productos, las nove-dades que incorporarán las próximas versiones de éstosy sobre las que actualmente se está trabajando.

Los MVP son profesionales independientes dereconocida pasión por la tecnología y que destacanpor sus aportes a las comunidades de usuarios delos productos Microsoft.

TEXTO: OCTAVIO HERNÁNDEZ.

MVP Summit 2007

eventos

<<

Uno de los principales atractivos del MVP Summit 2007 fue laconferencia de apertura, que estuvo a cargo de Bill Gates, en laque supone fue una de sus últimas apariciones públicas en even-tos oficiales de Microsoft.Durante más de una hora,Gates disertósobre algunos de los temas de mayor actualidad en el mundo dela informática, como la necesidad de seguir extendiendo el alcan-ce de la banda ancha para llevar adelante la revolución del vídeo(que definió como “la última frontera de Internet”) o la de dedi-car más esfuerzos de investigación a la explotación de la concu-rrencia en máquinas con múltiples procesadores, algo que serácada vez más común en el futuro.

Para finalizar, Gates respondió a preguntas de los asistentessobre temas tan diversos como los inicios de Microsoft, su opi-nión sobre las dificultades con las que se topa la enseñanza de lainformática en la enseñanza primaria y secundaria o sus planespara el futuro.

La conferencia de Bill Gates

Page 17: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Del 26 de febrero al 2 de marzo pasa-dos, tuvieron lugar en Londres (Lon-don Business Design Center) las últi-mas ediciones de los eventos para desa-rrolladores más importantes que secelebran anualmente en el Reino Uni-do. dotNetManía estuvo allí, y comen-tamos a continuación algunos de loshechos más sobresalientes a los quetuvimos ocasión de asistir.

Aunque las conferencias propia-mente dichas comenzaban el martes 27y terminaban el jueves 1, tal y como seestá poniendo de moda en la actualidadse celebraron también los dos días de pre-y post-conferencia, dedicados principal-mente a aspectos prácticos, muy focali-zados en el día a día del desarrollo. Laasistencia batió todos los records ante-

riores, y los contenidos fueron un anti-cipo de lo que veremos en el Tech-Ed deEE.UU en el próximo mes de junio. Osea: profundización de los aspectos deldesarrollo en el servidor y utilización cor-porativa de los nuevos servicios ofreci-dos por SQL Server 2005, y anticipos delo que nos traerá Orcas, programaciónWinFX, y programación avanzadaASP.NET 2.0 (con muchas referencias aAJAX) en el caso del desarrollo.

Y ¿quiénes hablaron? Pues muchosde los conocidos de nuestros lectores:desde Jeff Prosise, Ingo Rammer yDominique Baier, hasta mis com-pañeros de Solid Quality Learning:Fernando Guerrero, Itzik Ben-Gan,Dino Esposito, Randy Dyess, JavierLoria y muchos otros. Por cierto, Itzik

Ben-Gan salió elegido por la audien-cia como el mejor ponente de las dosconvenciones, y Fernando y Dino lesiguieron muy de cerca. Itzik se marcóuna auténtica “pasada”, jugando conconsultas sobre Amazon y Google, yexplicando (en función de los paráme-tros que usaba en la consulta) por quéambos sitios respondían lo que res-pondían. Tuvimos ocasión de hablarun rato con él y el lector podrá acce-der a la entrevista en el próximo núme-ro, donde también comentaremos algode lo sucedido en el recentísimo Tech-Days 07 de Lisboa, donde tuvimosocasión de ver el alto grado de desa-rrollo tecnológico de la comunidadportuguesa actual.

TEXTO: MARINO POSADAS.

dotN

etM

anía

<<

17

dnm.directo.eventos<<

Developers Week 2007 y SQL Server Devcon 2007

Del 26 de febrero al 2 de marzo tuvo lugaren Frankfurt la edición Primavera deBASTA! (http://www.basta.net), la confe-rencia dedicada exclusivamente a la tec-nología .NET. Durante los cinco días queduró la conferencia, incluyendo el primerdía enfocado más hacia arquitectura y ges-tión de proyectos, se pudo disfrutar deuna infinidad de charlas sobre .NET y lasherramientas asociadas.

Con más de 60 ponentes, entre loscuales se incluía nuestro compañero DinoEsposito, Richard Hundhausen (RD yMVP de Team System), o ChristianGross de devspace.com, se abarcó unamplio espectro de charlas para todos losgustos. Durante las presentaciones key-note estuvo presente Jay Schmelzer, pro-gram manager para Visual Basic. Jay noshabló sobre la nueva versión de VisualBasic (9) que formará parte de Orcas.Como una de las grandes novedades,mostró LINQ para Visual Basic, enseñan-do cómo se puede utilizarse para consul-tar bien objetos, XML o el clásico SQL.

Además, mencionó que Orcas tieneprevisto lanzarse para finales de este año,y estará basado sobre .NET 3.5, lo cualserá otra capa sobre .NET 2.0, es decir,el runtime no sufrirá cambio alguno.

Durante el Visual Basic CodeCamp,al que tuvo la amabilidad de asistir Jay, yen un ambiente informal, respondió aalgunas de las preguntas de los asistentes.Dijo que uno de los objetivos que se per-sigue siempre con Visual Basic es hacerque sea un lenguaje más dinámico. Asi-mismo, dijo que estaban esforzándosepara hacer que el compilador en segun-do plano fuera más rápido y que algunasprimeras pruebas mostraban un incre-mento de un factor 10 sobre la velocidadactual. A nuestra pregunta sobre cuántaspersonas estaban dedicados a Visual Basicen Redmond, dijo que unas 100.

En otra de las keynotes sobre Win-dows Vista estuvo presente David Inter-simone, el evangelista por excelencia deCodeGear. David I. no solo mostró lasmejoras que va a tener Delphi 2007,

como por ejemplo el soporte directo paraGlass en Vista, sino otras característicasdel producto, como el nuevo “VCL forthe Web Framework” con soporte paraAjax. VCL for the Web es la nueva ver-sión de Intraweb de Atozed Software.Además, mostró una primera versiónbeta de Delphi for PHP, que permite uti-lizar todas las herramientas que nos ofre-ce Galileo (IDE de Delphi, C++ Buil-der, etc.) para programar aplicacionesWeb en PHP. Está basado en un pro-ducto de Qadram, una empresa españo-la ubicada en Alicante.

Entre los expositores se encontrabanlos chicos de Developer Express, que esta-ban mostrando su última herramienta derefactoring para ASP.NET, algo bastanterecomendable. Además, su productoCodeRush, que es un plug-in para VisualStudio para incrementar la productivi-dad, desarrollado por Mark Miller, unveterano del mundo Borland, tambiénhizo las delicias del público.

TEXTO: HADI HARIRI.

Edición de primavera de Basta!

Page 18: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

18

Microsoft ha liberado reciente-mente la versión 2.0.7.0112 de su herra-mienta llamada ILMerge, la cual hapasado desapercibida para muchísimagente de la comunidad informática yaque se distribuye por separado y nodentro del SDK de Microsoft .NETFramework, como podría hacerse sinningún tipo de problema.

Como su propio nombre indica,esta herramienta tiene por objetivomezclar en un único ensamblado variosensamblados creados de forma inde-pendiente.

En concreto, con esta herramientapodemos mezclar los ensamblados deMicrosoft .NET Framework 2.0,propósito de este artículo. No obstan-te, existe otra versión de ILMerge paraensamblados de .NET Framework 1.1.

Imaginemos un ejemplo teóricocomo el que se muestra en la imagenque aparece en la figura 1.

Para nuestro ejemplo teórico-prác-tico, hemos diseñado un fichero ejecu-table (ensamblado 1) que consume unafunción que se encuentra en una libreríao clase (ensamblado 2). A la hora de dis-tribuir nuestra aplicación, distribuire-

mos nuestro ejecutable y los ensambla-dos correspondientes, como es obvio.Sin embargo, ILMerge mezclará ambosensamblados para crear un únicoensamblado que contiene a los dos. Así,y siguiendo nuestro pequeño ejemplo

FFuunnddaacciióónn JJuuaann BBoonnaallJorge Serrano ha cedido los de-rechos de autor de este artículoa la ONG Fundación JuanBonal,una organización con másde 200 años de experiencia, cuyo objetivo es servir como cauce yexpresión de la solidaridad y la cooperación en cualquiera de susformas. Entre ellas, el programa de apadrinamientos, que cuenta yacon más de 7.000 niños apadrinados. Si quiere colaborar con estaorganización, pase por http://www.padrinos.org.

<< Introducción

Jorge Serranofirma solidaria

Combinando ensamblados de .NETen un único ensamblado utilizando ILMerge

ILMerge es una herramienta de línea de comandos que permite combinar varios ensambladosen uno solo.

Jorge Serrano es colaborador habitual de ddoottNNeettMMaannííaa. Es Ingeniero Informático y

MVP de VB y de .NET.Es Webmaster de PPoorrttaallVVBB..ccoomm y

autor de diferentes libros y artículos técnicos. .

Figura 1. Diagrama general de un ejemplo en .NET

Page 19: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

teórico, podemos crear un ensambladode tipo ejecutable que contendrá den-tro el ensamblado correspondiente a lalibrería o clase con la función que cre-amos por separado.

Esta técnica tiene sus ventajas y des-ventajas, como es lógico, pero mostrarque existe ILMerge y cómo usarlo es elpropósito de este artículo.

Programando nuestrosensamblados

Vamos a seguir al pie de la letra elejemplo que hemos comentado en laintroducción, para que nos sirva depatrón y guía de cómo funcionaILMerge.

Crearemos un proyecto de tipoAplicación Windows, y dentro de lasolución agregaremos otro proyecto detipo Librería de clases. Así, nuestrasolución tendrá dos ensamblados.

La clase de la librería de clasestendrá entonces una función públicamuy sencilla, que es la que se indica acontinuación:

Compilaremos la librería de clasespara comprobar que todo está bien.Una vez hecho esto, acudiremos al pro-yecto de aplicación Windows y en con-creto a nuestro formulario, y agregare-mos un control de tipo Button. Lo pri-mero y fundamental será agregar unareferencia a la librería de clases quehemos creado anteriormente, así queincluiremos esa referencia en nuestroproyecto.

Una vez hecho esto, tan sólo debe-remos escribir el código de nuestra apli-cación, como por ejemplo el que seindica a continuación:

Una vez que tenemos lista nuestraaplicación, pasaremos a compilar el pro-yecto de aplicación Windows. En estepunto, observaremos que todo está enorden y que no tenemos ningún error.

Estudiando los ensambladoscon ILDASM

Nuestro ensamblado ejecutablenecesita del ensamblado de la clase parapoder subsistir. Si éste no se encuentra,se generará un error de ejecución.

Estudiando los ensamblados con laherramienta de descompilación ILDASM,observaremos que nuestros ensambladosposeen las partes típicas de todo ensam-blado, como se ve en la figura 2.

Ambos ensamblados son de tipoEjecutable y Clase, respectivamente.Cada uno de los ensamblados posee sumanifiesto, su constructor y las dife-rentes partes que conforman un ensam-blado. Es decir, son dos ensambladosindependientes, si bien el ejecutable ins-tanciará y cargará en memoria el segun-do ensamblado en un momento dado.

Mezclando los ensambladoscon ILMerge

Y ahora, ha llegado el turno deILMerge.

Nuestro deseo no es el de distribuirel ensamblado ejecutable y el ensam-blado clase al mismo tiempo, sino dis-tribuir –por las razones que sean– unúnico ensamblado que contenga más deun ensamblado dentro. Es decir, ennuestro caso lo que queremos es distri-buir el ensamblado ejecutable, que con-tendrá dentro de él el ensamblado cla-se que hemos programado.

ILMerge hace esto por nosotros, ylo veremos con un pequeño ejemplo.

dotN

etM

anía

<<

19

dnm.firma.solidaria<<

Public Class Clase

Public Function Funcion(ByVal param As String) As StringReturn param.ToUpper.ToString()

End Function

End Class

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles MyBase.Load

Dim miclase As New Clase.ClaseMessageBox.Show(miclase.Funcion(“Prueba”))

End Sub

End Class

Figura 2. Estructura de los ensamblados con ILDASM

Page 20: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

20

dnm.firma.solidaria<<

Para ejecutar este ejemplo y hacerlo más sencillo, pon-dremos en un directorio la herramienta ILMerge, quepuede ser descargada e instalada de la dirección Webde Microsoft (http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-

b14ae6a939b0&DisplayLang=en) y los ensamblados, elensamblado ejecutable y el ensamblado clase.

ILMerge es una herramienta de tipo consola, ydeberemos ejecutarla desde la línea de comandos, porlo que a continuación nos situaremos en la línea decomandos abriendo una ventana MS-DOS y escribi-remos el comando ilmerge /target:winexe /out:Ejem-plo.exe Ejecutable.exe Clase.dll.

Este comando indica a ILMerge que vamos a cre-ar un ensamblado ejecutable (winexe) de nombre Ejem-plo.exe, que contendrá los ensamblados Ejecuta-

ble.exe y Clase.dll. Si todo ha ido como se espera, noobtendremos ningún error y el ensamblado Ejem-plo.exe será creado correctamente.

Estudiando el nuevo ensamblado conILDASM

Nuestro siguiente propósito será entonces estu-diar el nuevo ensamblado ejecutable creado conILMerge. Este ensamblado en ILDASM es el que semuestra en la figura 3.

Como podemos observar, el nuevo ensambladoposee su manifiesto y propiedades correspondien-tes, y la clase ejecutable y la clase del ensambladoque hemos agregado con ILMerge. Es decir, tene-mos un único ensamblado resultado de mezclar dosensamblados.

En este punto, la distribución de nuestra aplica-ción se simplifica enormemente, ya que con distribuirel nuevo ensamblado ejecutable, estaremos distribu-yendo nuestra aplicación entera.

Si estudiamos nuestros diferentes ensambladoscon una herramienta como .NET Reflector, obser-varemos aún más esta mezcla de ensamblados. Estoes lo que se muestra en la figura 4.

Analizando los ensambladosPero claro, alguien que hace esto tiene siempre

presente varios aspectos. El primero de ellos y quesiempre sale a la palestra tiene que ver con el tamañode nuestros ensamblados.

Si nos fijamos en los ensamblados independientes,observaremos que el ensamblado ejecutable tiene untamaño de 28 Kb, y el ensamblado de tipo clase untamaño de 24 Kb. Lo cual hace un tamaño conjuntode 52 Kb. Pero si vemos el ensamblado creado conILMerge, éste no tiene un tamaño de 52 Kb, sino de18 Kb.

Figura 3. Nuevo ensamblado creado con ILMerge

Figura 4. Ensamblados en .NET Reflector

Page 21: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

21

dnm.firma.solidaria<<

Pero hay más. Si ejecutamos el ensam-blado Ejecutable.exe, el tamaño enmemoria después de cargar los ensam-blados referenciados, los ensamblados dela GAC (Global Assembly Cache) y otrasinformaciones es de 10.808 Kb. Si mira-mos el tamaño del nuevo ensambladoEjemplo.exe, observaremos que su tamañoes de 10.396 Kb. Ligeramente inferior.

Pero los estudios que he realizadosobre ILMerge no terminan aquí. Ciertoes que deberíamos realizar pruebas másconcienzudas y rigurosas, pero de momen-to, he notado que un ensamblado unidoo mezclado con ILMerge, comparado condos ensamblados separados como en elcaso del ejemplo realizado en este artícu-lo, es ligeramente más rápido en ejecu-ción. Posiblemente sea por la disposiciónen memoria consecutiva del ensambladoevitando hacer saltos o redirecciones, perono deja de ser una curiosidad más sobrela cual podemos sacar determinadas con-clusiones. Lo que no he podido compro-bar es si este rendimiento mejorado seproduce así también en el caso de tenerensamblados grandes unidos en un únicoensamblado o no.

No obstante, el monitor de rendi-miento puede permitirnos realizar unestudio más exhaustivo de la ejecuciónde un determinado ensamblado para ana-lizar su comportamiento e idoneidad.

Truco para usar ILMerge des-de Visual Studio 2005

Si lo que queremos es crear un únicoejecutable con el correspondiente ensam-blado o ensamblados utilizando VisualStudio 2005 y evitando el uso de la con-sola de línea de comandos ILMerge, loprimero que deberemos hacer es ponerILMerge en el directorio C:\Windows.

Una vez hecho esto, deberemos hacerclic con el botón derecho del ratón sobreel proyecto de la aplicación Windows yseleccionar la opción “Propiedades” delmenú emergente. Aparecerá una ventanadentro de la cual deberemos seleccionarla solapa “Compilar”. En la parte inferiorde esta solapa encontraremos un botón de

nombre “Generar eventos”. Al hacer clicsobre ese botón, aparecerá una ventanadentro de la cual y en la sección “Líneade comandos” del evento posterior a lageneración, deberemos escribir el texto“ilmerge /out:$(TargetDir)Ejemplo.exe$(TargetPath) Clase.dll”.

De esta manera, habremos creadoun ensamblado de tipo ejecutable quecontendrá los ensamblados que quere-mos mezclar, en este caso, el ensambla-do de nuestra clase de ejemplo.

Adicionalmente, existe una herra-mienta gráfica que nos facilita el trabajocon la consola de línea de comandosILMerge. Encontrará esta herramientaen (http://www.genetibase.com/nugenu-nify.php), si bien no puedo indicarle nin-guna impresión de la misma, ya que nola he utilizado.

Conclusiones sobre ILMergeLo mejor de ILMerge es que permi-

te mezclar ensamblados en un únicoensamblado. Esto significa que podemosmezclar ensamblados sin necesidad detener el código fuente disponible, e inclu-so que podemos mezclar ensambladosnuestros con ensamblados de terceros.

Pero además esto tiene otra conclu-sión adicional, y es que, lógicamente,podemos unir o mezclar ensambladoscreados en diferentes lenguajes de pro-gramación.

Respecto a la distribución, ésta sesimplifica enormemente, y el peligro deque un ensamblado no esté incluido oque esté dañado queda reducida.

Por el contrario, una vez que hemosmezclado ensamblados, no tenemos for-ma alguna, al menos de momento y queyo sepa, de separar los ensamblados nue-vamente.

Conclusiones generalesDesde la línea de comandos de los

compiladores de .NET podemos mez-clar en un ensamblado las diferentesporciones de código de nuestra aplica-ción. Lógicamente, en este caso nece-sitaremos tener accesibilidad al códigofuente para poder generar un únicoensamblado.

Desde la línea de comandos de loscompiladores de .NET, podemos tam-bién generar módulos para cada partede nuestro ensamblado. También en estecaso necesitaremos tener accesibilidadal código fuente de nuestros ensambla-dos. Si esto es así, luego utilizaremos laherramienta al o Assembly Linker, parapoder unir las partes de los módulos enun único ensamblado.

También podemos usar reflection(reflexión) para hacer esta mezcla, peroesto resultaría muy costoso ya no sóloen cuanto a trabajo, sino en cuanto arendimiento, por lo que ésta es una ideaque podríamos descartar casi a priori.

En estas tres opciones, no hemoshablado aún de unir ensamblados (yacompilados) o de unir un ensambladonuestro con una librería de terceros, oensamblados escritos en diferentes len-guajes. Ahí es donde entra realmenteILMerge y a donde no llegan las otrasopciones que hemos visto teóricamente.

ILMerge permite, por lo tanto,muchas más opciones. La distribución deaplicaciones es mucho más simple, suensamblado final ocupa menor tamaño eincluso puede llegar a ser más rápido ensu ejecución. Recoja, no obstante, todasestas premisas con la cautela que merece.

Por el contrario, no siempre debe serrecomendado el uso de esta técnica, ysimplemente debemos ser nosotros mis-mos los que valoremos si nos parece ade-cuada o no en un momento dado.

Con ILMerge podemosmezclar ensamblados

sin disponer del códigofuente de éstos

Page 22: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

A lo largo de diferentes artículos anterioreshemos venido presentando los fundamentos deLINQ (acrónimo de Language INtegrated Query)y los avances lingüísticos en C# 3.0 y VB 9.0sobre los que esta tecnología se apoya. En par-ticular, hemos mostrado cómo uno de los ele-mentos clave del proyecto LINQ es su arqui-tectura abierta, e indicado que la propia Micro-soft pondrá a nuestra disposición como parte deél varias tecnologías “derivadas”, incluyendoLINQ to XML, para la interacción con docu-mentos XML, LINQ to DataSet, que permiteoperar sobre conjuntos de datos en memoria(DataSet) tanto tipados como no tipados, yLINQ to SQL, para el acceso desde el propiolenguaje de programación a la informaciónalmacenada en bases de datos relacionales. Pre-cisamente a esta última tecnología, que más queuna librería destinada únicamente a permitir laejecución de consultas contra bases de datosrelacionales constituye un potente marco de tra-bajo para interactuar con éstas que estamos segu-ros cambiará la manera en que desarrollamosactualmente las aplicaciones, dedicaremos lapresente entrega.

Requisitos preliminares

Este artículo se apoya necesariamente en suspredecesores, cuya lectura previa se recomienda,al igual que la de otros documentos de referenciaque se enumeran agrupados para comodidad dellector en un recuadro al final de este artículo.

Para probar los ejemplos de código, se deberádescargar e instalar la CTP de Orcas de marzode 2007, disponible en http://www.microsoft.com/download. En aras de reafirmar cómo todas lasposibilidades que ofrece LINQ (y por extensión,LINQ to SQL) son independientes del lengua-je de programación utilizado, hemos implemen-tado el código de ejemplo tanto en C# como enVB. Puede descargar ambas versiones desde elsitio Web de la revista, http://www.dotnetma-nia.com.

Por último, los ejemplos de código presupo-nen la existencia de una sencilla base de datos deSQL Server 2005 llamada LINQ_DNM. La estructu-ra de las tablas de esa base de datos se muestra enla figura 1; adicionalmente, la base de datos con-tiene un procedimiento almacenado llamado Pais-ConMasPersonas, que utilizaremos para mostrar las

Lo que nos traerá Orcas:

LINQ to SQL

plataforma.net

OOccttaavviioo HHeerrnnáánnddeezz esdevelopment advisor dePlain Concepts y editor

técnico de ddoottNNeettMMaannííaa.Ingeniero en Informática

de sistemas, posee lascertificaciones MCAD,

MCSD y MCT y esMicrosoft MVP de C#.

En este artículo haremos una presentación práctica de lascaracterísticas fundamentales de LINQ To SQL, la tecnología derivadade LINQ que proveerá la infraestructura necesaria para, entre otrascosas, hacer posible las consultas integradas en el lenguaje sobre basesde datos relacionales.

Octavio Hernández

Page 23: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

posibilidades que ofrece LINQ to SQL para accedera este tipo de objetos programáticos, disponibles enla gran mayoría de los sistemas de bases de datos. Elcódigo que acompaña al artículo incluye un script parala creación de la base de datos.

Presentación general de LINQ toSQL

Mucho se viene hablando desde hace tiempo delfenómeno conocido como “desajuste de impedan-cia” (impedance mismatch) que provocan las diferen-cias entre los modelos de programación que propo-nen los lenguajes de propósito general y los lengua-jes de consulta sobre bases de datos relacionales, eltipo de almacén persistente más común que utilizanlas aplicaciones de hoy día. Si bien el desarrolladorpiensa en términos de clases y objetos, propiedades,métodos y eventos (la POO basada en componenteses, desde hace ya bastante, el paradigma de progra-mación predominante), a la hora de almacenar orecuperar esa información en una base de datos rela-

cional debe traducir esos conceptos a tablas, filas ycolumnas, y utilizar un lenguaje “foráneo”, SQL,para expresar las órdenes que desea enviar al motorde bases de datos. Adicionalmente, estas sentencias(casi siempre dinámicas o parametrizadas, y depen-

dientes de valores de propiedades de objetos o devariables de la aplicación) se generan dentro del códi-go como cadenas de caracteres para las que el entor-no de desarrollo no puede ofrecer validación en tiem-po de compilación, y que por tanto pueden pasar ala fase de ejecución con errores que será necesariodepurar y que conspiran contra la productividad delprogramador.

Para saltar la barrera que separa el mundo de laprogramación orientada a objetos del mundo de laprogramación de bases de datos relacionales se hanexplorado varios caminos. Las bases de datos orien-tadas a objetos (POET, Versant, por mencionar algu-nas) realmente nunca llegaron a despegar para el granpúblico; tampoco lo hicieron API “puras” como los

bindings del ODMG. Un enfoque quesí ha alcanzado una mayor cuota deéxito es el de los mapeadores obje-to-relacional (Object-Relational Map-pers, ORM); en esta categoría pode-mos encuadrar herramientas comonHibernate, LLBLGen o TierDe-veloper (todas ellas disponibles para.NET Framework). Se trata de mar-cos de trabajo (generalmente APIacompañadas de herramientas más omenos visuales de generación de códi-go) que hacen posible en tiempo deejecución mapear, o sea, estableceruna correspondencia, entre objetos

dotN

etM

anía

<<

23

dnm.plataforma.net<<

Figura 1. Estructura de la base de datos de ejemplo

LINQ to SQL constituye un potente marco de trabajo para interactuar con bases de datos relacionales desde los

lenguajes de programación .NET

Page 24: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

24

dnm.plataforma.net<<

disponibles desde el lenguaje de pro-gramación OO y las filas de las dife-rentes tablas y vistas que componen labase de datos contra la que la aplicacióntrabajará.

Este último enfoque es el queincorpora LINQ to SQL puesto que,como decíamos antes, ofrece una APIcompleta para la manipulación dedatos relacionales, y no solamente lasclases estáticas con los métodos exten-sores necesarios para implementar lasexpresiones de consulta. Como partede LINQ to SQL se incluye un ORMligero (lightweight ORM) que, si bienno incorpora todas las facilidades quepueden encontrarse en sistemas ORMcomerciales como los antes mencio-nados, es en sí mismo más que sufi-ciente para acometer las principalestareas comunes de recuperación y

actualización de los datos relaciona-les. La figura 2 muestra el mapeadoque se hace en LINQ to SQL entrelos conceptos de la programaciónorientada a objetos y los conceptos delas bases de datos relacionales.

Algo que es muy importante des-tacar es que todo este mecanismo semonta por encima de ADO.NET(figura 3). Esto hace posible, por unaparte, la “coexistencia pacífica” delnuevo código con el códigoADO.NET creado para versionesanteriores; por otra, que podamosdesde código LINQ to SQL obtenerlas referencias necesarias a los obje-tos ADO.NET correspondientes paraactuar “a la vieja usanza” (por ejem-plo, emitiendo directamente una sen-tencia SQL contra el almacén dedatos) cuando cualquier razón (por

ejemplo, el rendimiento) así lo acon-seje; por último, facilitará extenderLINQ to SQL a otras bases de datospara las que se disponga de provee-dor ADO.NET (actualmente, LINQto SQL solo funciona para SQL Ser-ver 2000 y 2005).

Contextos de datos y clasesde entidad

El primer paso a dar para represen-tar mediante objetos los datos almace-nados en una base de datos es reflejarsu estructura (metadatos) en un mode-lo de clases. El núcleo de este modelolo componen las clases de entidad(entity classes): clases que permiten repre-sentar como objetos las filas de las tablasde la base de datos.

La creación de este modelo puederealizarse de dos maneras diferentes:mediante una herramienta de líneacomandos llamada SQLMetal omediante un diseñador visual que estará

Figura 2. Mapeado de conceptos LINQ / bases de datos

Figura 3.Arquitectura deLINQ to SQLComo parte de LINQ to SQL se incluye un

ORM ligero con capacidad suficiente para acometer las tareas comunes de recuperación

y actualización de datos relacionales

Page 25: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

25

dnm.plataforma.net<<

incluido en Orcas. Para nuestro ejemplo utilizaremosel diseñador visual, que se despliega utilizando laopción del proyecto “Agregar nuevo elemento” |“Fichero de LINQ to SQL”. Entonces aparecerá unlienzo de diseño en blanco, sobre el que podremosarrastrar las tablas de nuestra base de datos desde elexplorador de servidores. Adicionalmente, arrastra-remos el procedimiento almacenado, PaisConMasPer-sonas (figura 4).

Por supuesto, el objetivo final de este diseñadorvisual es el de generar código, de manera similar acomo sucede, por ejemplo, con el diseñador de con-juntos de datos de Visual Studio 2003 y 2005. Es inte-resante analizar el código fuente que se obtiene paranuestra base de datos (listado 1).

En primer lugar, observe que en el ámbito externose define una clase, DNMDataContext, que hereda de Sys-tem.Data.Linq.DataContext. Se trata de un contexto dedatos tipado, especializado para nuestra base de datosde ejemplo. El contexto de datos es el canal a través delcual se interactúa con la base de datos. De hecho inclu-ye una propiedad Connection, de tipo IDbConnection,asociada a la conexión ADO.NET subyacente. Adicio-nalmente, el contexto de datos se encarga de otras tare-as esenciales como el seguimiento de la identidad y esta-do actual de los objetos y de la aplicación de las actua-lizaciones sobre el almacén relacional, como veremosmás adelante. Del análisis del código fuente de la clasese desprenden otros dos hechos adicionales:

• El contexto de datos sirve como “puerta deentrada” para la ejecución de las consultas inte-gradas en el lenguaje, al ofrecer las propieda-

des Paises y Personas, que devuelven los obje-tos que implementan IEnumerable<T> que nece-sita el mecanismo de consultas.

• El contexto de datos ofrece un método quepodremos utilizar para llamar al procedi-miento almacenado de la base de datos. Laasociación del método con el procedimientoalmacenado concreto se realiza a través delatributo StoredProcedure, mientras que losparámetros se asocian mediante atributosParameter.

A continuación, el código generado define las cla-ses de entidad, que reciben los nombre Paises y Per-sonas, respectivamente (estos nombres se pueden per-sonalizar). En el listado 1 se muestra un fragmentode la implementación de la clase Paises, en el que sepuede observar lo siguiente:

• La clase incluye una propiedad del tipo CLRadecuado para cada una de las columnas de latabla.

• El mapeado de la clase y de cada una de las pro-piedades generadas a las entidades correspon-dientes de la base de datos se realiza medianteatributos.

• La navegación a través de las relaciones dispo-nibles en la base de datos se implementa demanera natural mediante propiedades de tipocolección. Si deseamos recorrer las personas deun país determinado, bastará con recorrer lacolección asociada a la propiedad Personas delobjeto correspondiente al país.

Figura 4. Diseñador visual de LINQ to SQL

Page 26: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

26

dnm.plataforma.net<<

• Las propiedades que permiten lanavegación de las relaciones se

“marcan” mediante el atributoAssociation.

Ejecución de consultas integradas

Una vez generado el código nece-sario, podemos comenzar a utilizar lasclases obtenidas tanto para ejecutarconsultas contra la base de datos comopara aplicar las actualizaciones que serealicen a los objetos que representana las filas de las tablas de la base dedatos.

La utilización de las consultas inte-gradas en el lenguaje para acceder abases de datos relacionales se hace posi-ble gracias a una implementación espe-cializada del patrón LINQ que hemospresentado en artículos anteriores. Ellistado 2 muestra un ejemplo de unaexpresión de consulta sencilla sobrenuestra base de datos de ejemplo, asícomo su “traducción” en llamadas a losmétodos que implementan el patrónLINQ. También se muestra un meca-nismo sencillo para examinar la sen-tencia SQL generada por LINQ toSQL y que se enviará al motor de basesde datos.

La implementación del conjuntode operadores básicos que conformael patrón LINQ, así como del resto delos operadores de consulta estándarpara LINQ to SQL se ha realizado enel ensamblado System.Data.Linq.dll yutiliza, por razones de eficiencia, unmecanismo interno algo diferente ala de la implementación “básica” deLINQ to Objects. Básicamente, losoperadores de consulta de LINQ toSQL no implementan IEnumerable<T>a secas, sino una interfaz más espe-cializada heredera de la anterior,IQueryable<T>, cuyos métodos mani-pulan árboles de expresiones quese van transformando sucesivamen-te, de modo que solo al final de lacadena de llamadas se genera la sen-tencia SQL a enviar al almacén dedatos. En cualquier caso, este meca-nismo es totalmente transparentepara el programador, que con soloimportar el espacio de nombres Sys-tem.Data.Linq ya podrá comenzar autilizar expresiones de consulta.

// CONTEXTO DE DATOSpublic partial class DNMDataContext : DataContext {

// constructores...

public global::System.Data.Linq.Table<Paises> Paises {get {

return this.GetTable<Paises>();}

}

public global::System.Data.Linq.Table<Persona> Personas {get {

return this.GetTable<Persona>();}

}

[StoredProcedure(Name=”dbo.PaisConMasPersonas”)]public int PaisConMasPersonas() {

Parameter(Name=”@Nombre”)] ref string Nombre,Parameter(Name=”@Cantidad”)] ref Nullable<int> Cantidad) {// ...

}}

// CLASES DE ENTIDAD[Table(Name=”dbo.Paises”)]public partial class Paises {

// campos privados...// constructor...

[Column(Storage=”_ID”, Name=”ID”, DBType=”Char(2) NOT NULL”,IsPrimaryKey=true, CanBeNull=false)]

public string ID {// ...

}

[Column(Storage=”_Nombre”, Name=”Nombre”, DBType=”VarChar(50) NOT NULL”, CanBeNull=false)]

public string Nombre {// ...

}

[Association(Name=”FK_Personas_Paises”, Storage=”_Personas”,OtherKey=”ID_Pais”, ThisKey=”ID”)]

public EntitySet<Personas> Personas {// ...

}}

Listado 1. Código generado por el diseñador visual

Page 27: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

27

dnm.plataforma.net<<

Gestión de identidad y carga en memoria

Apoyándose en los metadatos dispo-nibles, el contexto de base de datos escapaz de hacer un seguimiento de la iden-tidad de los objetos bajo su control. Estoes, si dentro de un mismo contexto se eje-cutan dos consultas diferentes que recu-peran como parte de sus conjuntos deresultados una fila común, LINQ to SQLreconocerá correctamente que se trata deuna misma fila y asignará un único obje-to en memoria para ella. Este mecanis-mo, esencial para cualquier gestor ORM,a partir de la CTP de marzo puede des-conectarse asignando false a la propie-dad de tiempo de ejecución ObjectTrac-kingEnabled, cuyo valor por defecto estrue. Esto podría utilizarse para aumen-tar el rendimiento en situaciones, porejemplo, de acceso de solo lectura a unabase de datos.

De manera similar, otra nueva pro-piedad lógica, DeferredLoadingEnabled,con valor verdadero de manera prede-terminada, permite ahora controlarmediante código si la carga de las filasasociadas a las propiedades que se gene-

ran para las relaciones entre tablas se debeproducir de manera diferida (segúndemanda) o de manera inmediata. Noobstante, la recuperación de las filas dela tabla “principal” siempre se producesegún demanda; hay que recordar que,en general, todo el comportamiento deLINQ se basa en la utilización de itera-dores, de modo que la especificación deuna consulta es 100% “gratuita” hasta elmomento en que se itera sobre ella.

Gestión de actualizacionesEl contexto de datos no solo es capaz

de crear y gestionar los objetos asocia-dos a las filas recuperadas de la base dedatos; también ofrece los mecanismosnecesarios para “memorizar” los cam-bios que se vayan efectuando sobre estosobjetos y generar las sentencias SQLnecesarias para aplicar esos cambios a labase de datos cuando se llame al méto-

static void Consulta(){

DNMDataContext ctx = new DNMDataContext();ctx.Log = Console.Out;

var lista1 =from p in ctx.Personaswhere p.FechaNacimiento > new DateTime(1995, 1, 1)orderby p.Sexoselect p.Apellidos_Nombre;

// equivalente con métodos extensoresvar lista1b =

ctx.Personas.Where((p) => p.FechaNacimiento > new DateTime(1995, 1, 1)).OrderBy((p) => p.Sexo).Select((p) => p.Apellidos_Nombre);

foreach (var p in lista1b)Console.WriteLine(p);

Console.ReadLine();}

Listado 2. Ejemplo de expresión de consulta

static void Actualizacion(){

DNMDataContext ctx = new DNMDataContext();ctx.Log = Console.Out;

// localizar una personaPersonas p3 = (from p in ctx.Personas select p).

First(x => x.ID == 3);

if (p3 != null)// actualizar (en memoria)(p3 as Personas).Nombre = “XXX”;

// insertar un paísctx.Paises.Add(new Paises { ID = “PT”, Nombre = “PORTUGAL” });

try{

// aplicar cambios a la base de datosctx.SubmitChanges();

}catch (Exception x){

Console.WriteLine(“ERROR: “ + x.Message);}Console.ReadLine();

}

Listado 3.Actualización de la base de datos

Page 28: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

28

dnm.plataforma.net<<

do SubmitChanges(). Las particularidades asociadas conel orden de aplicación de los cambios en el almacén,las posibilidades de personalización de las sentenciasSQL y de actuación en caso de errores de concurren-cia están a la altura de lo que cabría esperar de unatecnología como ésta y se describen con detalle en ladocumentación.

El listado 3 muestra un ejemplo de actualizacióne inserción de filas sobre la base de datos de ejemplo.

Procedimientos almacenados

Como hemos dejado entrever anteriormente,LINQ to SQL ofrece la posibilidad de realizar llama-das a los procedimientos almacenados de la base dedatos, tanto si simplemente se comunican con el mun-do exterior a través de sus parámetros como si devuel-ven un conjunto de resultados. Para facilitar esta labor,los procedimientos almacenados se mapean a métodosdel contexto de datos (figura 3).

El listado 4 muestra un ejemplo de llamada al pro-cedimiento almacenado la base de datos de ejemplo.

ConclusiónEn este artículo hemos presentado a través de un

ejemplo los fundamentos de LINQ to SQL, quecon su aparición hará posible acceder a los datos

almacenados en bases de datos relacionales (tantopara consulta como actualización) sin necesidad decodificar explícitamente sentencias SQL en el códi-go de nuestras aplicaciones. LINQ to SQL debe ver-se como una parte integral de la tecnología LINQ,pero a la vez como un componente importante dela próxima versión de ADO.NET, que tiene comoobjetivo fundamental elevar sustancialmente el nivelde la programación del acceso a datos mediante ladefinición de modelos conceptuales basados en elconcepto de entidad. A ello dedicaremos una pró-xima columna.

static void LlamadaAProcedimiento(){

DNMDataContext ctx = new DNMDataContext();ctx.Log = Console.Out;

string pais = null;int? cantidad = 0;ctx.PaisConMasPersonas(ref pais, ref cantidad);Console.WriteLine(“País con más personas: “ + pais +

“ (“ + cantidad.ToString() + “)”);Console.ReadLine();

}

Listado 4. Llamada a procedimientos almacenados en LINQ to SQL.

Es opinión de este autor que la vía óptima para llegar a comprender a cabalidad la tecnología LINQpasa por el estudio bottom up de los fundamentos lingüísticos y operacionales en los que ésta se apoya. Enesa línea, dotNetManía ha venido ofreciendo una serie de artículos en un orden cercano al óptimo:

• “Lo que nos traerá Orcas. Novedades en C# 3.0”, en Nº 24, marzo de 2006.• “Lo que nos traerá Orcas. La tecnología LINQ”, en Nº 25, abril de 2006.• “Lo que nos traerá Orcas. VB 9.0 y LINQ”, en Nº 27, junio de 2006.• “Lo que nos traerá Orcas. LINQ to XML”, en Nº 29, septiembre de 2006.• “Lo que nos traerá Orcas. LINQ to DataSet”, en Nº 32, diciembre de 2006.• “Lo que nos traerá Orcas. LINQ to SQL”, en Nº 36, abril de 2007 (este ejemplar).

Asimismo, el autor ha traducido para MSDN diversos documentos oficiales (preliminares) relacio-nados con LINQ:

• Especificación de C# 3.0 • El proyecto LINQ • Los operadores de consulta estándar de LINQ• El marco de entidades de ADO.NET

Estos documentos están disponibles aquí: http://www.microsoft.com/spanish/msdn/articulos/architec/fecha/enero.mspx

Referencias

Page 29: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server
Page 30: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Qué es clonar en el mundo de la pro-gramación y los objetos

Pudiéramos decir que clonar es hacer un dupli-cado de un objeto de tal modo que el duplicado oclon tenga los mismos valores y que, al menosinmediatamente después de la clonación, reaccio-ne a su uso de la misma forma que el original.

Pero esta definición no es precisa. ¿Hasta quénivel se lleva la tal duplicación? Si de humanos setratase, ¿hacerle un clon a un humano significahacerle también un clon al cónyuge, a los hijos, ala casa y a la cuenta bancaria? En un mundo dedatos por valor y datos por referencia, como lo esel mundo de los objetos y como lo es en especial.NET, ¿qué es un clon? Cuando un objeto a su veztiene una referencia a otro objeto, ¿clonar la refe-rencia es también clonar el objeto referenciado?No hay una respuesta única; diferentes lenguajesde programación han asumido posturas diferen-tes y otros no se han pronunciado sobre esto.

Tal vez quizás sea Eiffel [1] el lenguaje que hayallegado más lejos en esto de la clonación. En Eif-fel, la clase raíz ANY de la jerarquía de tipos (lo quesería el System.Object de .NET) tiene dos méto-dos: clone y deepclone. El método clone hace unacopia superficial de todas las variables de instancia(lo que se conoce en inglés como shallow copy), mien-tras que el método deepclone hace una copia en pro-fundidad (deep copy); es decir, si un componente delobjeto original es una referencia, hace a su vez recur-

sivamente una copia en profundidad del objeto refe-renciado. Usted puede perspicazmente darse cuen-ta de que esto deja abiertas algunas interrogantes¿Por qué siempre ir a los extremos? Es decir, ¿nopuede suceder que algunos campos queramos dupli-carlos en profundidad y otros no? ¿Qué pasa si enlas referencias hay ciclos? Por ejemplo, si un mis-mo objeto x se refiere en más de un lugar a unsegundo objeto y entonces ¿el clon de x tendrá unoo más de un clon de y?

En este artículo vamos a ver lo que hay actual-mente en .NET sobre clonación y lo que podemoshacer para ampliar y mejorar estas capacidades.

Tipos por valor y tipos por referencia en.NET

La capacidad de definir tipos por valor o por refe-rencia que nos ofrece .NET nos da de partida unaposibilidad de lograr efectos de clonación. Conside-re las clases Fecha y FechaPorValor del listado 1.

Si trabajamos con Fecha, que ha sido definidapor referencia, y hacemos:

Fecha nuevoAño = new Fecha(1,1,2007);

Fecha nuevoAño1 = nuevoAño;

Entonces nuevoAño y nuevoAño1 se estarán refi-riendo al mismo objeto, como nos muestra lafigura 1.

Clonación totalde objetos . NET en C# 3.0

plataforma.net

MMiigguueell KKaattrriibb es doctor yprofesor jefe de progra-

mación del departamentode Ciencia de la Compu-tación de la Universidadde La Habana. Miguel es

líder del grupo WEBOO,dedicado a la orientacióna objetos y la programa-ción en la Web. Es entu-

siasta de .NET y redactorde dotNetManía.

MMaarriioo ddeell VVaallllee es instruc-tor de Programación en

C# de la cátedra de Pro-gramación e Ingeniería de

Software del departa-mento de Ciencia de la

Computación de la Uni-versidad de La Habana. Es

desarrollador del grupoWEBOO dedicado a la

tecnología .NET

Este artículo es un divertimento que nos muestra cómo se pueden combinaratractivos recursos de .NET y C# 3.0 como los atributos, la reflexión, la gene-ricidad, los métodos extensores y la capacidad de consulta de LINQ para imple-mentar un método que pueda hacer la clonación completa de objetos .NET.

Mario del Valle,Miguel Katrib

Page 31: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server
Page 32: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

32

Pero si trabajamos con FechaPorValor, definidacomo struct, y hacemos:

FechaPorValor nuevoAño = new FechaPorValor(1,1,2007);

FechaPorValor nuevoAño1 = nuevoAño;

Entonces lo que estamos haciendo es copiar losvalores de los componentes del objeto nuevoAño en loscomponentes respectivos del objeto nuevoAño1. A talefecto, es como si en nuevoAño1 tuviésemos un dupli-cado de nuevoAño (figura 2).

La clonación en .NET

Consideremos ahora el tipo Persona definido enel listado 2. Si hacemos:

Persona clint = new Persona(“Clint Eastwood”, new FechaPorValor(31,5,1930));

Persona clintActor = clint;

Tenemos que ambas variables clint y clintActorse refieren a la misma persona.

Pero, ¿y si queremos tener un clon del mismoobjeto en cada variable? .NET ofrece en la claseraíz System.Object el método MemberwiseClone, quenos hace una copia de primer nivel (superficial) deun objeto. Es decir, MemberwiseClone crea una nuevainstancia del mismo tipo que el original y copia cadauno de los campos del objeto original en el corres-

class Fecha{int d,m,a;public Fecha(int dia, int mes, int año){

d=dia; m=mes; a=año;}public int Dia{ get { return d; }set { d = value; }

}//...}

struct FechaPorValor{int d,m,a;public FechaPorValor(int dia, int mes, int año){

d=dia; m=mes; a=año;}

public int Dia{ get { return d; }set { d = value; }

}//...

}

Listado 1 Definición de Fecha por valor y por referencia

class Persona{string nombre;Fecha fechaNac;public Persona(string nombre, Fecha fechaNac){this.nombre = nombre; this.fechaNac = fechaNac;

}

public string Nombre{get { return nombre; }set { nombre = value; }

}

public Fecha Cumpleaños{get { return fechaNacimiento; }set { fechaNacimiento = value; }

}}

Listado 2 Definición de clase Persona

Figura 1

Figura 2

Page 33: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

33

pondiente campo de la nueva instancia. Si un cam-po es de un tipo por valor, copia el valor bit a bit;si es de un tipo por referencia, copia la referencia,es decir, no hace a su vez una copia del objeto refe-renciado; en este caso el objeto original y la copiaquedarán refiriéndose al mismo objeto.

Si se hiciera por ejemplo:

Persona doble = clint.MemberwiseClone();

Suponemos que debería obtenerse el resultadoque se muestra en la figura 3.

Pero si Persona estuviese definido usando el tipoFechaPorValor en lugar de Fecha, entonces al hacer:

Persona doble = clint.MemberwiseClone();

Suponemos que debería obtenerse el resultadoque se muestra en la figura 4.

Sin embargo, en ambos casos hacer clint.Mem-berwiseClone() provoca un error de compilación,porque el método MemberwiseClone es protected.

Parece ser que en términos genéticos .NET es cui-dadoso para que no hagamos clonaciones a la ligera. Esdecir, .NET no nos lo pone fácil para que un códigocliente haga clonaciones de un objeto. Al ser protected,solo desde una clase heredera podemos usar Memberwi-seClone; de modo que si queremos aprovecharnos de laexistencia de este método es quien define un tipo quiendebe definir su propio método de clonación, el cualentonces es quien podrá auxiliarse de MemberwiseClone.

De este modo, debería ser la clase Persona la encar-gada de ofertar un método para hacer clones de per-sonas, siguiendo por ejemplo un patrón como elsiguiente:

Figura 3

Figura 4

Page 34: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

34

class Persona{

//...public Persona Clone(){return (Persona) MemberwiseClone();

}//...

}

De este modo, ahora sí podemos obtener un doblehaciendo:

Persona doble = clint.Clone();

La interfaz ICloneable

Con ICloneable, .NET nos ofrece un protocolocomún que deben implementar todos aquellos tiposque deseen indicar que de ellos se puede hacer un clon.Esta interfaz tiene un único miembro, el método:

object Clone()

La clase Persona puede entonces definirse en laforma:

class Persona: ICloneable{//...public object Clone(){//...implementación de Clone...//Por ejemplo return MemberwiseClone();

}//...

}

El inconveniente aquí es que para poder ser gene-ral, el método Clone devuelve un objeto de tipo object,cuando lo que queremos es que devuelva un objeto deltipo de la clase que lo está implementando. Es por esoque es el código cliente el que debe hacer la correspon-diente conversión explícita:

Persona doble = (Persona)clint.Clone();

Esto fuerza al código cliente a llenarse de casts e impli-ca pasar a detectar en tiempo de ejecución errores quepodrían detectarse tempranamente. Si se hiciese

Fecha f = (Fecha) clint.Clone();

Se produciría una excepción en ejecución, perono error en compilación.

Veremos en la sección siguiente cómo haciendouso de la genericidad de .NET 2.0 podemos obviareste inconveniente.

Clone con genericidad

Podemos obviar la necesidad de hacer conversio-nes si usamos un recurso como la genericidad, yaexistente desde .NET 2.0 (para información sobregenericidad, ver otros trabajos de dotNetManía [2,3]).Podemos hacer:

interface ICloneable<T>{T Clone();

}

Y entonces definir Persona siguiendo el patrón:

class Persona: ICloneable<Persona>{//...public Persona Clone(){//...

}}

Ahora puede hacerse:

Persona doble = clint.Clone();

Sin necesidad de cast, y ahora entonces el intentode hacer algo como:

Fecha f = (Fecha) clint.Clone();

Daría error de compilación.

Page 35: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

35

Una clonación en profundidad

¿Cómo implementar una clonación en profundi-dad para la clase Persona? Una solución podría basar-se en hacer primero una copia de primer nivel usan-do MemberwiseClone y luego para cada campo que seade tipo ICloneable sustituir el valor del campo por elresultado de hacerle Clone. Este proceso se aplicaríarecursivamente para todos los campos que a su vezimplementen ICloneable. Así por ejemplo, el Clone dePersona haría un MemberwiseClone y luego a su vez apli-caría Clone para el campo fechaNacimiento (listado 3).

Generalizar una solución como ésta tiene el incon-veniente de que habría que programar un algoritmo simi-lar por cada tipo que queramos implemente ICloneable.

Nos interesa obtener una implementación generaldel método Clone que sirva para cualquier tipo. Paraello nos basaremos en la genericidad, la reflexión y lasnuevas capacidades de C# 3.0 y LINQ. Por otra parte,queremos que sea quien define un tipo el que decidacuáles de sus campos desea que a su vez sean clonadosen profundidad. Para ello, como veremos en la secciónsiguiente, nos basaremos en el uso de atributos.

Cómo indicar qué campos de un objeto deben ser clonados

Para indicar que queremos que un campo de unobjeto sea a su vez duplicado cuando se haga un dupli-cado de dicho objeto definimos el atributo1 DeepClo-

ne, como se muestra a continuación.

[AttributeUsage(AttributeTargets.Field,AllowMultiple=false)]class DeepCloneAttribute : System.Attribute { }

Note que a la propia definición del atributo se le haindicado a su vez un atributo AttributeUsage, con el cualespecificamos que el atributo DeepClone solo se podráasociar a campos (variables de instancia). De este modo,si queremos indicar que el tipo Persona pueda ser dupli-cado en profundidad duplicando a su vez el campo fecha-Nacimiento, se podría haber definido entonces en la for-ma que se muestra en el listado 4.

Falta ahora definir un método Clone que tenga encuenta este atributo.

Un método extensor como métodogeneral de clonación

Para colocar un método que sirva de clonacióngeneral, nos valdremos del recurso de los métodosextensores que introduce C#3.0 [5].

Definimos entonces:

static class DesignPatterns{public static T Clone<T>(this T x){//...

}}

La existencia de tal clase en nuestro proyecto nospermite entonces escribir:

Persona doble = clint.Clone();

Esta llamada al método Clone será interpretadapor el compilador de C# 3.0 como:

Persona doble = DesignPatterns.Clone<Persona>(clint)

class Persona{string nombre;[DeepClone]Fecha fechaNac;public Persona(string nombre, Fecha fechaNac){this.nombre = nombre; this.fechaNac = fechaNac;

}//...

}

Listado 4 Definición de Persona usando atributo DeepClone

1 Los atributos son un importante aporte de .NET del que ya se ha hablado en otros trabajos de dotNetManía (ver [4]).

class Persona: ICloneable<Persona>{string nombre;Fecha fechaNac;public Persona(string nombre, Fecha fechaNac){this.nombre = nombre; this.fechaNac = fechaNac;

}//...public Persona Clone(){Persona clon = (Persona) MemberwiseClone();clon.fechaNac = fechaNac.Clone();

}}

Listado 3 Definición de Clone en Persona

Page 36: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

36

Note que no ha habido necesidad de usar ningúncast ni indicar en cada tipo que implementa IClonea-ble. La definición genérica del método Clone nos pre-viene de cometer errores como:

Fecha f = clint.Clone();

Porque la definición genérica del método Clonenos dice que devuelve un objeto del mismo tipo queel de su parámetro (clint en este caso).

Para hacer el clon en profundidad, lo primero quequeremos hacer es una copia de primer nivel (superfi-cial) del objeto; para ello tenemos el método Memberwi-seClone en la clase object, pero no podemos aplicar ésteporque no estamos dentro de un método de instancia, yno podemos hacer x.MemberwiseClone() porque estemétodo es protected. Usando reflexión vamos a lograrinvocar al método:

Type t = x.GetType();MethodInfo method = t.GetMethod(“MemberwiseClone”,

BindingFlags.NonPublic | BindingFlags.Instance);T result = (T) method.Invoke(x, null);

Note cómo utilizamos el parámetro genérico T

para hacer la conversión explícita sin que esto tras-cienda al cliente del método Clone. Cuando se llameclint.Clone(), el compilador resolverá que el pará-metro de tipo genérico es en este caso Persona.

Ahora queremos clonar a su vez a aquellos cam-pos que hemos copiado y que tienen especificado elatributo DeepClone. Estos campos los extraemos porreflexión usando la siguiente sentencia LINQ2:

var fields = from field in t.GetFields(BindingFlags.NonPublic |BindingFlags.Public |BindingFlags.Instance ),

attrs in field.GetCustomAttributes(typeof(DeepCloneAttribute), false)

where !field.FieldType.IsValueTypeselect field;

Esto nos hace la selección de aquellos campos que sonde instancia y están “marcados” con el atributo DeepClo-ne y que no son de tipo por valor. A estos campos se lesaplica ahora a su vez recursivamente el método Clone:

foreach (FieldInfo field in fields){field.SetValue(result, field.GetValue(x).Clone());//...

}

Un campo puede a su vez ser un array. En tal caso,el Clone ejecutado por el segmento de código ante-rior aplicará el MemberWiseClone del array, el cual bas-taría en el caso de que los elementos del array seande un tipo por valor. Pero cuando los elementos delarray son de un tipo por referencia, hay que aplicar-le a su vez el método Clone a cada elemento:

if (field.FieldType.IsArray){if (!field.FieldType.GetElementType().IsValueType){object[] items = (object[])field.GetValue(result);items = (object[]) items.Clone();for (int k=0; k<items.Length; k++)

items[k] = items[k].Clone();field.SetValue(result, items);

} }

El código completo del método se muestra en el lis-tado 5. Solo hemos tenido en cuenta aquí el caso de arraysunidimensionales; dejamos al lector interesado que com-plete esta implementación con toda la casuística asocia-da a los tipos de arrays.

Cómo clonar un objetoque tiene varias referencias a un mismo objeto

Cuando hacemos un clon de un objeto que tienevarias referencias a un mismo objeto, queremos que enel clon el objeto referido aparezca duplicado una solavez; es decir, queremos que el clon mantenga la mis-ma estructura de enlaces que el original.

2 LINQ es una de las nuevas maravillas que ofrecerán .NET y C#. Puede ver más sobre las consultas de LINQ en la serie que havenido publicando en dotNetManía el colega Octavio Hernández (ver [6]).

Para obtener una implementación general del métodoClone nos basaremos en la genericidad, la reflexión

y las nuevas capacidades de C# 3.0 y LINQ

Page 37: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

37

Consideremos el tipo Film del listado 6. Note que alas variables director y actores le hemos puesto el atri-buto DeepClone para indicar que al clonar un film losvalores de estos campos deben ser a su vez clonados.

Si construimos ahora el film “Los Puentes deMadison”, en el que Clint Eastwood es director y asu vez actor:

Persona clint = new Persona(“Clint Eastwood”,

new Fecha(31, 5, 1930));

Persona meryl = new Persona(“Meryl Streep”,

new Fecha(22, 6, 1949));

Film puentesMadison =

new Film(“Los Puentes de Madison”,

clint, 200, clint, meryl);

Observe que el mismo objeto clint de tipo Per-sona aparece dos veces referido (figura 5). Si ahorahiciéramos:

copiapuentesMadison = puentesMadison.Clone();

Y aplicáramos el código del listado 4, se repetiríael clon del objeto clint y nos quedaría como resulta-do lo que nos muestra la figura 6. Esto no es exacta-mente una réplica del objeto puentesMadison que nosmuestra la figura 5.

Peor aún, si un objeto incluyese una referencia así mismo (figura 7), ¡el intento de hacer un clon nosllevaría a un proceso infinito!

La solución para esto se muestra en el listado 7.Lo que hemos hecho es registrar cada original y suclon, para no repetir la clonación si el original apare-ciese repetido.

ConclusionesClaro que lo deseable para algunos tal vez sería

que .NET hubiese incluido también un métodoDeepClone en la raíz object. De todos modos, elobjetivo fundamental de este artículo no ha sidodecir la última palabra sobre cómo debe entender-se la clonación de un objeto y cuándo hacerla. Posi-blemente sobre esto siempre habrá puntos de vis-ta diferentes. Lo interesante ha sido mostrar el usocombinado de atributos, reflexión, genericidad,métodos extensores y expresiones de consultaLINQ para la solución simple de un mismo pro-blema, lo que nos confirma una vez más el poderexpresivo de .NET y C#.

Puede descargarse el código completo de la clo-nación en el site de dotNetManía.

class Film{string titulo;[DeepClone]Persona director;int duracion; [DeepClone]Persona[] actores;public Film(string titulo, Persona director,

int duración, params Persona[] actores){

this.director=director; this.titulo=titulo;this.actores=actores;

}//...

}

Listado 6 Definición de una clase Film

static class DesignPatterns{public static T Clone<T>(this T x){Type t = x.GetType();MethodInfo method = t.GetMethod("MemberwiseClone",

BindingFlags.NonPublic |BindingFlags.Instance);

T result = (T) method.Invoke(x, null);//Clonando en profundidadvar fields =from field in t.GetFields(BindingFlags.NonPublic |

BindingFlags.Public |BindingFlags.Instance),

attrs in field.GetCustomAttributes(typeof(DeepCloneAttribute), false)

where !field.FieldType.IsValueTypeselect field;

foreach (FieldInfo field in fields){if (field.FieldType.IsArray){object[] items = (object[])field.GetValue(result);items = (object[])items.Clone();if (!field.FieldType.GetElementType().IsValueType){for (int k = 0; k < items.Length; k++)items[k] = Clone(items[k]);

}field.SetValue(result, items);

}else{field.SetValue(result, Clone(field.GetValue(x)));

}}return result;}}

Listado 5 Definición del método Clone

Page 38: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

38

Figura 6

Figura 7

Figura 5

Page 39: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.plataforma.net<<

dotN

etM

anía

<<

39

ReferenciasMeyer, Bertrand “Eiffel: The Language”, Prentice-Hall, 1992.

Som, Guillermo “Generics y Visual Basic .NET”, en dotNetManía Nº 8, octubre de 2004Del Valle, Mario y Katrib, Miguel “Reflexionando y haciendo reflexión sobre la genericidad en C#2.0”, en dotNetManía Nº 20, diciembre de 2005Hernández, Yamil y Katrib, Miguel “Aspectos e intercepción de métodos en .NET”, en dotNetManía Nº 10,diciembre de 2004C#3.0 Specification, http://msdn2.microsoft.com/en-us/vcsharp/aa336745.aspxHernández, Octavio “Lo que nos traerá ORCAS: la tecnología LINQ”, en dotNetManía Nº 25, abril de 2006

[1]

[2][3]

[4]

[5][6]

static class DesignPatterns{public static T Clone<T>(this T x){Hashtable references = new Hashtable();T result = TrueClone(x, references);references.Clear();return result;

}private static T TrueClone<T>(this T x, Hashtable references){if (references.Contains(x)) return (T)references[x];Type t = x.GetType();MethodInfo method = t.GetMethod("MemberwiseClone",

BindingFlags.NonPublic |BindingFlags.Instance);

T result = (T) method.Invoke(x, null);references.Add(x,result);//Clonando en profundidadvar fields =from field in t.GetFields(BindingFlags.NonPublic |

BindingFlags.Public |BindingFlags.Instance),

attrs in field.GetCustomAttributes(typeof(DeepCloneAttribute), false)

where !field.FieldType.IsValueTypeselect field;

foreach (FieldInfo field in fields){if (field.FieldType.IsArray){object[] items = (object[])field.GetValue(result);items = (object[])items.Clone();if (!field.FieldType.GetElementType().IsValueType){for (int k = 0; k < items.Length; k++)items[k] = TrueClone(items[k], references);

}field.SetValue(result, items);

}else{field.SetValue(result, TrueClone(field.GetValue(x),references));

}}return result;

}}

Listado 7 Definición del método Clone para no clonar dos veces a un mismo objeto

Page 40: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

A lo largo del desarrollo siempre nos surgen lasmismas dudas y preguntas: ¿cómo vamos?, ¿la cali-dad de lo que estamos generando es buena?, ¿cuán-do vamos a poder tener una versión disponible?,¿la velocidad de desarrollo es la correcta?

Para poder responder a este tipo de pregun-tas, el responsable de proyecto necesita saber entodo momento cuál es el estado del mismo. Lasmétricas nos ayudarán a disponer de la informa-ción necesaria para poder conocer el estado en elque nos encontramos y será la base para la tomade decisiones dentro del proyecto.

Entendiendo las métricasComo veremos a continuación, hay diferen-

tes enfoques sobre qué métricas debemos usar ycómo usarlas.

Lo primero que debemos tener claro es quelas métricas nunca deben servir para evaluar. Noson una manera de evaluar si los desarrolladoreso los testers hacen bien su trabajo. Las métricasson un elemento vital para gestionar los proyec-tos y poder reaccionar antes los problemas, peronunca una manera de evaluar el trabajo o el ren-dimiento, a no ser que queramos invalidar las

métricas como arma de gestión. Comenzamosaclarando este punto, porque es uno de los erro-res que más habitualmente se repiten.

Para aplicar métricas con éxito debemos acep-tar que los desarrolladores intentarán imple-mentar sus módulos en el menor tiempo posibley con la mayor calidad, los testers intentarán pasarel mayor número de pruebas posibles y encon-trar el mayor número de errores…, es decir, cadamiembro de equipo debe preocuparse de hacersu trabajo lo mejor posible, dado el entorno y losconocimientos con los que cuentan, y no preo-cuparse de que se les está evaluando.

Tomando un ejemplo simple, si evaluamos eltrabajo de un desarrollador en función de las líne-as de código implementadas en un día, ¿qué leimpide dedicarse a copiar y pegar código?, ¿porqué va a intentar modularizar su código o utili-zar frameworks? El resultado de esto serían unosdesarrollos de muy baja calidad y muy poco man-tenibles, pero aún así, la métrica de evaluaciónsería correcta. Además, con la cantidad de herra-mientas que generan código ¿cómo sería posibleevaluar este factor?

Utilizar las métricas de una manera prescrip-tiva tampoco es un enfoque muy acertado. “Si xmayor que y, entonces la eficiencia de nuestrosdesarrolladores es buena”.

Métricas para la gestión de proyectos con Team Foundation Server

metodologías

En este artículo se describe el enfoque con que se utilizan las métricasen Microsoft Solutions Framework y se presentan algunas de lasmétricas para esta metodología de las que se puede disponer cuandose utiliza Team Foundation Server para la gestión de los proyectos.

Ibon LandaRodrigo Corral

IIbbóónn LLaannddaa es ingenieroinformático y trabaja

como jefe de proyectoen Panda Software, don-

de ha desarrollado lamayor parte de su carre-

ra profesional. Ademáses un activo miembro de

Artalde.net.

RRooddrriiggoo CCoorrrraall es MVP yMCPD y uno de los fun-

dadores de Plain Con-cepts, donde colabora

como arquitecto de soft-ware.Además trabaja en

Sisteplant como líder téc-nico en un proyecto desa-

rrollado sobre .NET 3.0utilizando Scrum como

metodología de desarro-llo.También administraGeeks.ms. Su blog es

http://geeks.ms/blog/rcorral.

Page 41: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Del mismo modo que el caso anterior, las métri-cas preescritas lo único que consiguen es demostrarque las personas son mucho más inteligentes que lasmétricas y que las personas, ya sea consciente o incons-cientemente, tienen a sesgar las métricas cuando laevaluación de su trabajo depende ellas. El problemade este sesgo es que perdemos la posibilidad de reco-lectar información realmente fidedigna que nos ayu-de a guiar el proyecto y actuar sobre aquellos puntosque necesitan nuestra atención.

Por ejemplo, si una determinada métrica se cal-cula en función de las horas trabajadas, podría ser muyfácil de sesgar, simplemente reportando menos horasde las realmente trabajadas.

Para poder conocer el estado real del proyecto ypoder tomar decisiones con una base, es necesario ele-gir otro enfoque en las métricas. Un enfoque que noha sido el típicamente utilizado hasta ahora, pero quees el que MSF y Team Foundation Server propugna.

Métricas descriptivas

Un posible enfoque más adecuado sería usar métri-cas descriptivas. Este tipo de métricas recogen infor-mación de muchos aspectos del proyecto y la presen-tan de una manera gráfica y multidimensional.

Las gráficas en sí no suelen decir cuál es el esta-do del proyecto, sino que es el responsable del pro-yecto el que más debe conocer sobre el proyecto y lasituación que atraviesa, el que debe revisar y analizarla información que se le presenta para tomar las deci-siones correctas que lleven al éxito del proyecto.

Este tipo de métricas no sirven para evaluar y noson tan cómodas con las métricas preescritas, pero síson más ágiles, evitan que se sesguen y permiten detec-tar los problemas al poco tiempo de aparecer.

Las múltiples dimensiones de un proyecto

Es importante conocer las diferentes dimensionesque tiene un proyecto y disponer de información sobreellas para poder descubrir los problemas en fases tem-pranas y conseguir que el proyecto llegue con éxito asu fin.

Los informes de Team Foundation Server nos per-miten de una manera sencilla disponer de métricasque engloban las diferentes dimensiones que tiene unproyecto. Team Foundation Server a través de lasherramientas que incluye (gestor de fuentes, gestorde elementos de trabajo, construcciones automáticas,pruebas…) es capaz de recoger la información que senecesita de manera automática y relacionarla a travésde un data warehouse, para poder ofrecer las métricas

que son necesarias para poder conocer el estado realdel proyecto y tomar decisiones sobre el mismo.

• ¿Cuánto trabajo queda pendiente y cuándo sehará?

• ¿Cómo de productivo es el equipo?• ¿Cuánto trabajo no planificado tenemos que

hacer?• ¿Qué calidad tiene el software desarrollado?• ¿Cómo de efectivos somos encontrando, corri-

giendo y cerrando errores?• ¿Cuántas tareas o errores se cierran en falso?• ¿Estamos encontrando y priorizando los errores?• ¿Cuánto trabajo somos capaces de realizar sin

que afecte a la calidad?

El principal problema a la hora de contestar a todasestas preguntas, y cualquier otra que sea de utilidad ala hora de guiar nuestros proyectos, es haber reco-lectado la información suficiente para poder contes-tarlas en base a una mirada a datos fiables.

Métricas en Team Foundation Server yMicrosoft Solution Framework

Hasta ahora, recolectar todos esos datos era unalabor difícil de llevar a cabo sin añadir mucha buro-cracia adicional al trabajo de los desarrolladores. Aho-ra, gracias a Team Foundation Server y Visual StudioTeam System, la recolección de todos estos datos esmucho más sencilla y se realiza de manera cuasi-trans-parente para el desarrollador. Además, la extracciónde conclusiones valiosas es mucho más sencilla gra-cias a la gran cantidad de informes ya elaborados conlos que contamos.

A continuación vamos a ver ejemplos de algunasmétricas que podemos tener con Team FoundationServer, utilizando alguna de las metodologías delMicrosoft Solution Framework.

dotN

etM

anía

<<

41

dnm.metodologías<<

Las métricas descriptivas recogen información demuchos aspectos del proyecto y la presentan de unamanera gráfica y multidimensional, pero en nuestra

mano queda concluir cuál es el significado concreto de esas métricas

Page 42: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

42

dnm.metodologías<<

Calidad frente a velocidad

¿Cuántos escenarios puede terminar el equipo dedesarrollo sin que la calidad deje de ser aceptable? Esel responsable del proyecto el que debe encontrar elequilibrio entre el progreso del proyecto y la calidadde los desarrollos.

En la figura 1 lo que se ve es que de iteración eniteración se ha bajado el número de escenarios y lacalidad ha mejorado, por lo que a priori nuestro núme-ro de escenarios por iteración se acerca más a cincoque a 35.

Tasa de errores

La tasa de errores es un indicador importantesobre la calidad de los desarrollos. ¿Cómo de efecti-vo soy encontrando, corrigiendo y cerrando errores?

Como hemos comentado, las métricas descripti-vas requieren interpretación. En este caso, un altoratio de errores encontrados puede ser un síntoma deun código de baja calidad o de que tenemos unas prue-bas unitarias muy buenas. Un ratio bajo de erroresencontrados puede ser un síntoma de un código demuy buena calidad o de que tenemos unas pruebasunitarias malas.

En este caso, para poder tomar una decisióndeberíamos acompañar estos datos con otros valores,por ejemplo, con la cobertura de código que tienennuestras pruebas unitarias con el fin de poder deter-minar en cuál de las situaciones planteadas nos encon-tramos.

En la figura 2 se muestra una gráfica que pode-mos llamar “sana”, de la que podríamos llegar a extra-

polar cuándo estaremos en disposición de sacar unaversión release, ya que el número de errores está bajan-do de manera progresiva.

En la otra gráfica se ve que el número de erroresen lugar de bajar sube de manera constante, siendoun síntoma de que algo no va bien. El responsable deproyecto debería revisar las posibles causas.

Errores por prioridad

La correcta priorización de los bugs es una claveimportantísima para poder finalizar correctamente elproyecto. Priorizarlos y corregirlos en función de estaprioridad debe ser una de las tareas de las que debeasegurarse el responsable del proyecto.

Para poder priorizar convenientemente es básicoestablecer qué factores deben ser tomados en cuentaa la hora de priorizar. Por ejemplo, siempre se debetener en cuenta la visión del cliente. No tenerle encuenta puede implicar asumir un riesgo muy alto, yaque aunque se corrigiesen muchos bugs, si éstos noson los que al cliente le producen mayor desconten-to ello podría provocar que el grado de insatisfaccióndel cliente aumente.

En la figura 3 se puede ver un ejemplo de una grá-fica sana, donde se puede observar cómo los erroresmás prioritarios se van resolviendo a medida que pasael tiempo.

Trabajo pendiente

¿Cuánto trabajo queda pendiente y cuándo secompletará? Esta es una pregunta frecuente en el díaa día de los proyectos y que esta gráfica nos ayuda a

responder, ya que a partir de los datos que ofrece sepuede extrapolar cuándo un desarrollo se resolverá ycerrará.

La figura 4 nos permite ver cómo, en función deltiempo, los escenarios se van resolviendo y cerran-

Figura 1. Calidad frente a velocidad

La extracción de conclusiones valiosas a partir de las métricas es

mucho más sencilla con Team Foundation Server gracias a la grancantidad de informes ya elaborados

con los que contamos

Page 43: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

43

dnm.metodologías<<

do. A medida que pasa el tiempo, los escenarios acti-vos deberían pasar a resueltos y los resueltos ir pasan-do a cerrados, para que una vez cerrados todos losescenarios se de por concluida la iteración. Cuandotodos los escenarios estén resueltos se habrá termi-nado el desarrollo, y cuando todos los escenarios secierren (hayan pasado su correspondiente test deaceptación) la iteración habrá terminado. Hay quedestacar que, gracias a la potencia de tener los infor-mes respaldados por un data warehouse, tenemos laposibilidad de obtener el trabajo necesario para com-pletar diferentes tipos de elementos de trabajo (esce-narios, pruebas, errores, tareas, etc.), lo que una vezmás nos permite lanzar una mirada multidimensio-nal al proyecto.

Velocidad

¿Cómo de rápido termina las tareas el equipode desarrollo?, ¿cómo varía el trabajo realizado dedía a día, de iteración a iteración?, ¿cuál es el tiem-po medio que se tarda en corregir un bug?

Disponer de esta información es un factor clavepara poder realizar una correcta planificación de las

siguientes iteraciones, ya que nos da información parasaber con qué rapidez se realizan las tareas, cuál es lacapacidad de nuestro equipo de desarrollo.

Figura 3. Errores por prioridad

Figura 2.Tasa de errores

Page 44: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

44

dnm.metodologías<<

ConclusiónEn este artículo hemos pretendido presentar una

visión sobre lo que las métricas, tal y como se entien-

den en Team Foundation Server y las metodologíasque lo acompañan, pueden aportar a nuestro pro-yecto. No era nuestro afán ver todas las métricasdisponibles, sino guiar al lector en cómo debe apro-ximarse a las métricas y en concreto a las que acom-pañan a Team Foundation Server, para que estassean una ayuda en la difícil tarea de gestionar pro-yectos.

El uso de métricas en nuestro proyecto puede serun factor determinante para el éxito del mismo, yaque nos ayudará a recoger información muy valiosasobre el estado del mismo y podremos tomar deci-siones basándonos en la información que nos pro-porciona.

Al inicio del artículo veíamos los diferentes enfo-ques que hay en el uso de las métricas, y cómo usarlas métricas como medida de evaluación puede con-llevar múltiples problemas.

Team Foundation Server es una herramientaque nos proporciona, sin esfuerzo extra, una seriede métricas descriptivas que pueden ser de granutilidad y que pueden ayudarnos en la toma dedecisiones.

Figura 4.Trabajo pendiente

Figura 5.Velocidad

Page 45: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

45

dnm.sistemas<<

Cada sistema, cada fabricante tiene completa liber-tad para establecer la identificación de los elemen-tos que lo componen, así como las propiedades quehay que definir para que queden registrados y dis-ponibles en su red, con la única cortapisa de que seauna identidad exclusiva, lógicamente. Dentro de unaempresa, se trata de homogeneizar los sistemas, lasestrategias de nombres y la forma de acceder a loselementos disponibles, pero con la llegada de Inter-net y la promiscuidad de las conexiones que impli-ca, la uniformidad de los sistemas desaparece y laexclusividad de los nombres peligra.

La función de los organismos rectores de Inter-net, como IANA (Internet Addresing and NumberAssignement) y otros organismos con la misión deencargarse de la asignación de las direcciones IP yel Sistema de Nombres de Dominio (DNS), suponemás un arbitraje que una norma de conexión. Laposibilidad de intercambiar información de los ele-mentos entre distintos sistemas, incluso de distin-tos fabricantes, no queda resuelta y puede ser unverdadero quebradero de cabeza para cualquieradministrador que quiera facilitar a sus usuarios surelación con otras entidades. Poder consultar nom-bres de servidores para obtener servicios o ficheros,disponer de información sobre teléfonos y cargosde usuarios para una relación más efectiva entre lasempresas, o en la misma empresa, en muchas oca-siones sólo se consigue recurriendo a programas de

bases de datos que mantengan la información quese considera útil y pertinente, teniendo que plani-ficar, además, el acceso y mantenimiento de esosdatos. Para resolver esta situación, se hace impres-cindible una plataforma común entre sistemas queunifique la forma de identificar elementos y facili-te su mantenimiento, publicación e intercambio.Esta necesidad manifiesta en las comunicacionesinformáticas fue el punto de partida de los trabajosde la Universidad de Michigan para desarrollar unabase “universal” en la que pudieran registrarse todoslos elementos que se conectaran a “la red”. La sín-tesis de esos trabajos es lo que se conoce hoy comoespecificaciones X.500.

Estas especificaciones son, en realidad, un con-junto de recomendaciones que se agrupan bajo estenombre. X.500, X.501, X.511, X.519, X.520 y X.521,son las normas encaminadas a regir el desarrollo deun servicio que facilite la comunicación entre enti-dades de software y personas, permitiendo la bús-queda de elementos basándose en la coincidenciade unos atributos. Además de estas facilidades parala comunicación, este tipo de servicio también estátomando cierto auge en la actualidad por las posi-bilidades que ofrece como depósito de los certifi-cados que son empleados para enlaces y transaccio-nes seguras.

Este servicio se apoya en una base de datos dis-tribuida y consta de varios elementos. Por una par-

Directorio Activo de WindowsLas páginas amarillas de la red

sistemas

JJuuaann BBlláázzqquueezztiene una amplia

experiencia comoinstructor certificado

de los principalesfabricantes y como

colaborador habitualen publicaciones pro-fesionales del sector.

Cuenta con las certifi-caciones MCSE y

MCT de Microsoft,CNE y CNI de

Novell y CLP deLotus.Actualmenteejerce como arqui-

tecto de sistemas enAAllhhaammbbrraa--EEiiddooss.

Dentro de una red informática, normalmente se prima la conexión sobre cualquier otraconsideración. Que los usuarios puedan acceder a los ficheros, servidores Web, a sucorreo o bases de datos es lo que importa. Sin embargo, cómo se organizan los recur-sos y cómo se accede a ellos también influye en el rendimiento, disponibilidad y facilidadde uso. Un aspecto importante y muchas veces olvidado. Para organizar los recursos dela red, en las redes Windows el Directorio Activo resulta vital.

Juan Blázquez Martín

Page 46: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

46

dnm.sistemas<<

te se encuentra la Base de Información delDirectorio (BID), donde reside la infor-mación relevante de los elementos dela red, usuarios, máquinas o programas.Por otra están los Agentes del Sistema deDirectorio (ASD), que es el programaque se encarga de mantener la parte dis-tribuida de la BID. Por último, estánlos Agentes de Usuario para Directorio(AUD), que son los programas que per-miten comunicarse con el Directorio.Con estos elementos, si un usuario oaplicación quiere obtener alguna infor-mación sobre las propiedades definidasde otro elemento que esté registrado enla BID, debe utilizar un AUD, que seencarga de traducir la petición al Direc-torio utilizando el protocolo DAP(Directory Access Protocol). Como elDirectorio es distribuido, objetivo quese consigue mediante los ASD, cuan-do se hace una consulta en local y lainformación no está reflejada en esabase el propio ASD se encarga de soli-citar la información a otros ASD,mediante el protocolo DSP (DirectorySystem Protocol).

Estos componentes manejan unainformación estructurada de forma jerár-quica o por niveles, cuya representaciónlógica se denomina Árbol de Informaciónde Directorio. Los elementos registradosen estas especificaciones, denominadosobjetos hoja o nodos, se inscriben con unnombre, representado por la abreviatu-ra “CN” (Common Name), dentro deotros objetos que actúan como agrupa-dores lógicos y que establecen la jerar-quía. Así, habrá inicialmente una raíz des-de la que cuelgan los contenedores delprimer nivel, el país, representado por laabreviatura “C” (Country), utilizado para

representar un área geográfica de ámbi-to nacional. A continuación, y dentro deeste nivel, se localiza la organización, “O”(Organization), empleada para represen-tar una entidad y en donde se ubican loscontenedores de tercer nivel, las Unida-des Organizativas, “OU” (OrganizationUnit), usadas para representar grupos detrabajo, departamentos, proyectos, etc.Con esta estructura se puede represen-tar en el ordenador el organigrama decualquier organización con todo nivel dedetalle.

De esta forma, el nombre de un ele-mento estará formado por su denomi-nación más la estructura jerárquica en laque está inscrito, formando lo que seconoce como Nombre Distinguido de eseelemento. Así, el usuario Pmarin, inscri-to en el contenedor de Programadores dela empresa DotNetMania en la división deEspaña, será conocido en la red comoCN=Pmarin,OU=Programadores,O=DotNetMa-

nia,C=Es. A nivel de programa se mane-jaría esta nomenclatura, pero a nivel deusuario ésta puede abreviarse omitien-do las siglas que identifican los tipos de

los objetos: Pmarin, Programadores, Dot-NetMania, Es, en lo que se llama NombreDistinguido Abreviado. La raíz de esteárbol siempre se presupone y normal-mente se omite, quedando representa-da por “.”, en caso de mencionarla. Laventaja inmediata de este sistema es lafacilidad con la que pueden resolverselas duplicidades de nombres de usuariodentro de la red. Con esta estructurapuede haber definido en el sistema másde un Pmarin, aunque no en el mismocontenedor.

Aunque a primera vista este trata-miento de los elementos de la red pare-

ce ser estrictamente lógico y parejo a loque es el organigrama de la empresa, locierto es que permite, en la práctica, unacompleta estructuración de la red a todoslos niveles. Si en el ámbito lógico seencarga de agrupar elementos, reflejarlas dependencias organizativas, etc., alnivel físico ayuda a planificar y estable-cer aspectos importantes como puedenser las conexiones, el tráfico de red o ladistribución de recursos. Además, la filo-sofía de funcionamiento de este modode operar en la red ofrece una serie deventajas que refuerzan la operatividaddel sistema, ya que le dota de una tole-rancia a fallos añadida que resulta vitalen redes que se encuentran desplegadasen distintas ubicaciones físicas. Tambiénconsigue una gran flexibilidad, nada des-deñable, para contemplar el soporte alos clientes que tienen una alta movili-dad entre distintas ubicaciones.

Así, disponiendo de una réplica dela BID en cada ubicación, los usuariosde una red no necesitan tener queconectar con otra para registrar susesión y podrán trabajar con indepen-dencia del estado operativo de los ser-vidores del resto de localizaciones.Igualmente, los usuarios de una ubica-ción que se desplacen a otra no necesi-tan tener que conectar directamentecon su delegación para poder trabajaren la red: los servidores disponen de lainformación necesaria para validar orechazar las sesiones de usuario. Inclu-so si en alguna de las ubicaciones caenlos servidores, los usuarios afectados,disponiendo de la conexión adecuada,pueden seguir utilizando los serviciosdisponibles de la red, conectando con-tra los servidores de otra ubicación enla que sí hay operatividad.

Todo esto redunda en una más cómo-da y flexible administración en la que tie-nen cabida tanto los modelos centraliza-dos como los descentralizados, aco-modándose perfectamente a cualquierred con independencia de su envergadu-ra. La red resulta más fácil y rápida decomprender para su mejor utilización,permitiendo implementar medidas detolerancia a fallos acordes con modestasexpectativas de disponibilidad sin costo-sas y complejas soluciones.

La promiscuidad de conexiones que implica Internet hace quedesaparezca la uniformidad de los sistemas y peligre

la exclusividad de los nombres, lo que se intenta remediar con las especificaciones X.500

Page 47: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

47

dnm.sistemas<<

Active Directory

Para Microsoft, las especificacio-nes X.500 se implementan a partir deWindows 2000 con el famoso Direc-torio Activo, piedra angular en laque se apoya el nuevo concepto dered de este fabricante, en donde laSAM de Windows NT se sustituyepor la DIT (Directory InformationTree). Esta es la base de informacióndel Directorio para Windows 2000,una base implementada partiendo delmotor Microsoft Jet, ya empleado enMicrosoft Exchange Server, produc-to éste cuya tecnología ha inspiradomuchas de las funciones contempla-das en este Directorio.

En esta base, DIT, se almacena lainformación que definen los elementosde la red, objetos hoja, que estarán aso-ciados a un objeto contenedor quepodrán ser un Dominio, “DC”, en unprimer nivel, o una Unidad Organizati-va, “OU”, para niveles inferiores. LosDominios se agrupan jerárquicamente,formando espacios de nombres conti-guos que se denominan Árboles, un con-junto de dominios que confían entre síy que comparten una misma raíz denombre. En una red pueden existir dis-tintos Árboles, formando Bosques, lo quepermite cubrir las distintas necesidadesde nombres que pueda requerir unaorganización. Ahora la red Windowsestará formada por un Bosque que con-tendrá uno o varios Árboles.

La BID de Microsoft es completa-mente distribuida, puesto que cada con-trolador de dominio se ocupa de soste-ner los elementos registrados en sudominio. El nexo entre los distintosdominios lo proporciona el Catálogo

Global, que actúa como un índice detodos los objetos del Bosque, mante-niendo sólo un extracto de los atribu-tos de éstos. Este Catálogo Global actúacomo “caché” para acelerar y simplifi-car la localización de objetos a travésdel Bosque, sin necesidad de tener queacudir a los controladores de dominioa recabar la información solicitada.

El Agente de Servicio de Directorio seresuelve ejecutando un servicio en losservidores que son controladores dedominio. Es decir, la promoción de unservidor a controlador de dominio lle-va implícita la creación de la estructu-ra de archivos en la que se alojan losservicios de directorio y la ejecucióndel agente encargado de su manejo.Este agente se apoya en otros que seencargan de diversas tareas relaciona-das con el sostenimiento del servicio,como Kerberos, para la seguridad deacceso; KDCC, para el descubrimien-to de rutas de sincronización oNTFRS, para la sincronización dearchivos.

Para los clientes, el agente encar-gado de comunicar con este directoriose obtiene de distinta manera. A partirde Windows 2000, los sistemas opera-tivos de cliente lo incorporan de serie,integrado en el sistema operativo. Noocurre lo mismo con los clientes ante-riores. Windows 9X, Millenium y NTno conocen la nueva estructura dedominio y para que puedan integrarseen igualdad de condiciones es impres-cindible instalar el agente que les per-mita participar en el Directorio Activo.Este programa, DS Client, se puedeencontrar en el CDROM de las edi-ciones de servidor, junto a otras herra-mientas complementarias.

La situación ideal, lógicamente, esque todos los controladores de dominioexistentes en la red sean de Windows200X y los clientes Windows 2000/XP,lo que no siempre se da. En aquellos esce-narios en los que deben convivir contro-ladores de dominio de NT y del Direc-torio Activo, éste último opera en modomixto, que es el modo en que promue-ven los controladores del Directorio Acti-vo por defecto. En oposición al modonativo, en el que todos los controladoresson Windows 200X y todos ellos sabenmanejar perfectamente las particularida-des de este directorio. El paso de modomixto a nativo es inmediato, mientras queel paso contrario no está permitido. Enmodo mixto, los controladores de NTsólo pueden desempeñar el rol de BDC,puesto que el PDC se reserva para uncontrolador Windows 200X, el que ten-

Aunque el tratamiento de los elementos de la red en X.500parece ser estrictamente lógico, parejo a lo que es el organigrama de la empresa, lo cierto es que permite,

en la práctica, una completa estructuración de la red a todos los niveles

Figura 1. Propiedades del objeto usuarioen el Directorio Activo de Microsoft

El DA de Windows no sólo sirve pararegistrar los elementos que compo-nen la red Microsoft.También puedeutilizarse como punto de gestión paraconfigurar puestos y el entorno deusuario y como herramienta de dis-tribución de software, a través de losPaquetes de Directivas GPO.Una GPOes un conjunto de parámetros de con-figuración que se pueden aplicar aequipos y usuarios, selectivamente,cuando el ordenador arranca o elusuario inicia sesión.

Page 48: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

48

dnm.sistemas<<

ga asignado el rol de PDC Emulator. Loscontroladores de NT sincronizarán sudominio tomando como referencia a éste,y replican la información tal y como ellosla manejan. La posibilidad de manteneresta convivencia entre familias permiteque la transición de NT a Windows200X no resulte traumática.

Otra novedad importante que intro-duce el dominio Windows vigente es laobligatoriedad de disponer de un servi-dor DNS en el que apoyarlo. La estruc-tura de bosques y árboles comentadaresulta, en la práctica, similar al espaciode nombres utilizado en Internet, lo queevidencia, por otro lado, la vocación deMicrosoft por mantener una coherentelínea de compatibilidad con el resto dela industria. El mecanismo que utilizaInternet para resolver los nombres dehosts y servicios no es otro que DNS. Laresolución de nombres que implemen-ta Microsoft es totalmente compatiblecon las especificaciones estándar paraeste servicio, y se puede implementar elDA con servidores DNS que no seanWindows. Sin embargo, en la práctica,lo más acertado para evitar complica-ciones es montar el dominio Windowscon servidores DNS de este fabricante,opción que se ofrece directamente y deforma automatizada cuando se funda eldominio.

Exchange,SQL y todos los demás

La función del Directorio Windowsdentro de la red es importante. Otros ser-vicios y aplicaciones, como pueden serDCHP, el acceso remoto vía RAS, Ter-minal Server, la autenticación RADIUSde IAS y un largo etcétera, tienen comobase de operación al DA. Pero para losprogramas de producción el DA tambiénofrece un punto de apoyo crucial, tantopara aplicaciones comerciales como paralos desarrollos a medida.

Si se toma la mensajería, un servi-cio crítico donde los haya, el soportedel DA en las nuevas versiones deExchange es tan fuerte que no es posi-ble montar una organización con esteprograma si no existe desplegado y fun-

cionando un Dominio Windows 200X.No podía ser de otra manera. Imple-mentado como un sistema basado enX.500, el servicio LDAP presente en elDA permite que la agenda pública dedirecciones de usuarios tome una nue-va dimensión, sin que represente un tra-bajo extra para los administradores delsistema. Ya no hay por qué tener quemantener una base con los usuarios dela red y otra base con sus direccionesde email, en el servidor de correo. Sóloexiste una base de datos con esta infor-mación, que se gestiona utilizando unaúnica herramienta. Como tampoco hayque mantener dos bases de datos deconfiguración. La configuración de latopología del correo de Exchange yalgunos de los parámetros de funcio-namiento de los servidores tambiénestán en el DA. Una dependencia y apo-yo que es extensible al resto de progra-mas del catálogo Microsoft y que sehace más fuerte a medida que van apa-reciendo versiones y novedades.

Pero estas facilidades no son coto pri-vado de Microsoft, y los beneficios queaporta el Directorio de Windows 200Xtambién pueden ser aprovechados porotros programas. Con los permisos per-

tinentes y, lógicamente, utilizando lasfunciones adecuadas, cualquier progra-ma puede utilizar los atributos de losobjetos registrados en el DA en su fun-cionamiento. E incluso modificar laspropiedades de los objetos existentes,añadir nuevas características o, ¿por quéno?, definir nuevos objetos no contem-plados de serie por el fabricante. Apro-vechar esta posibilidad permite construirprogramas más compatibles y homogé-neos, evitando la dispersión de datos y,lo más interesante, ahorrar trabajo deprogramación.

Dim objOU, objUser, objFSO, objTextFileDim TxtIn, TxtFile, strNextLineDim i

TxtFile = “C:\Usuarios.txt”Const ForReading = 1Set objFSO = CreateObject(“Scripting.FileSystemObject”)Set objTextFile = objFSO.OpenTextFile(TxtFile, ForReading)Do Until objTextFile.AtEndOfStreamstrNextLine = objTextFile.ReadlineTxtIn = Split(strNextLine , “,”)Set objOU = GetObject(“LDAP://OU=Nuevos,OU= MisUsuarios,dc=DotNetMania,dc=es”)Set objUser = objOU.Create(“User”, “cn=”& TxtIn(0))objUser.Put “sAMAccountName”, TxtIn(0)objUser.Put “profilePath”,”C:\MisUsuarios\perfiles\”& TxtIn(0)objUser.SetInfoSet objUser= GetObject (“LDAP://cn=” & TxtIn(0) & _

“,OU=MisUsuarios,dc=DotNetMania,dc=es”)objUser.AccountDisabled = FalseobjUser.SetInfoSet objFSO = CreateObject(“Scripting.FileSystemObject”)Set objFolder = objFSO.CreateFolder(“\\server\perfiles$\”& TxtIn(0))

LoopWScript.Echo(“Registrados todos los usuarios”)

Fuente 1. Ejemplo para manejar el DA. Script para el alta de usuarios en el dominio según una lista dada en un archivo de texto.

Figura 2. Mediante GPO es posible configurarcómodamente el entorno de usuario y equipo

Page 49: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

49

Imagino cómo te sientes. Yo vi una vez algoparecido (una secuencia de números y letrasdesordenados) que no tenía ningún sentido paramí, y resultó ser –según alguien me explicó mástarde– una ecuación de las usadas en Física pararesolver un montón de problemas del mundoreal. Pero no había Internet en aquel entonces,ni una especie de revista FisicaManía. Me llevóaños entenderlo del todo. Supongo que tú tie-nes más suerte.

Estoy bastante seguro de que te refieres a losmétodos anónimos disponibles en C#. Dentro dela versión 2.0, los métodos anónimos son una for-ma especial de delegados. Un delegado es el ele-mento sintáctico de C# encargado de encapsularuna llamada a una función. Cuando creas un dele-gado, es como si envolvieses una función dentrode un objeto, digámoslo así. En realidad, un dele-gado es una forma segura y orientada a objetosde crear un puntero a función. Hasta la versión2.0, solo se podían asociar a métodos con nom-bre. A partir de ahora, también es posible aso-ciarlo a un método anónimo1.

¿Cuál es la diferencia entre métodos anó-nimos y métodos con nombre? Más o menos,lo que sugieren sus adjetivos. El método con

nombre es la típica función, y el método anó-nimo - uno que se define directamente en lasintaxis del delegado para ahorrar líneas decódigo. Un lenguaje popular que soporta méto-dos anónimos es Javascript. Por ejemplo, lasclases de Javascript que operan en ASP.NETAJAX como proxy de servicios Web están lle-nas de métodos anónimos.

Un delegado es un tipo por referencia quepuede usarse para encapsular métodos connombre o anónimos. Esta es la típica sintaxiscuando se emplea un método con nombre:

public delegate void MyDelegate(string msg);

La sentencia indica que MyDelegate es un tipodelegado. Cualquier variable del tipo MyDelegatees una función con la signatura indicada: méto-dos void que aceptan un argumento tipo string.

MyDelegate func = new MyDelegate(SampleMethod);

SampleMethod es en este ejemplo un métodocon nombre administrado mediante el delega-do. La signatura del método SampleMethod hade ser la misma que la del delegado:

Extrañas cosas sobre C#,pero de software

Dino Esposito

DDiinnoo EEssppoossiittooes mentor de SSoolliiddQQuuaalliittyy LLeeaarrnniinngg.. Esponente habitual en

los eventos de laindustria a nivel

mundial.Visite sublog en: hhttttpp::////wweebbllooggss..

aasspp..nneett//ddeessppooss.(ttooddoottNNeett..QQAA@@

ddoottnneettmmaanniiaa..ccoomm)

Recientemente, he tenido que revisar código escrito en C# por una empresa colaboradora.He encontrado una forma sintáctica que me sorprendió al principio y después picó mi curio-sidad.Todavía me cuesta más trabajo describirla. Básicamente, parecía como el cuerpo de unafunción colocado en el medio de otra.Y se usaba para definir un manejador de evento. Si midescripción le ayuda a darse cuenta de lo que es, ¿puede explicármelo?

todonet@qa

Este mes hablaremos acerca de algunos elementos peculiares de la sintaxis de C# que han asus-tado a algunos lectores. En particular, hablaremos acerca de los métodos anónimos y los des-tructores, comparándolos con otras técnicas tradicionales de .NET, tales como los delegados ylos métodos Dispose.

t to od d

o ot tN N

e et t. .q q

a a@ @

d do ot t

n ne et tm m

a an ni ia a. .c c

o om m

1 Nota del traductor: sin nombre, del que solo tenemos el cuerpo funcional.

Page 50: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

50

Tod

otN

et.q

a@

dot

netm

ania

.com

Tod

otN

et.q

a@

dot

netm

ania

.com

dnm.todonet@qa<<

void SampleMethod(string msg){

// ...}

Los delegados con nombre son los que se hanusado hasta la versión 2.0 de .NET Framework. Apartir de esta versión, en situaciones donde la cre-ación de un método es una sobrecarga innecesariade código se pueden utilizar los métodos anóni-mos. Un buen ejemplo sería cuando es necesarioel lanzamiento de un nuevo subproceso (thread).

delegate void ExecTask(int x);:ExecTask func = delegate(int x) { ... };Thread t = new Thread(func);t.Start();

Primero, declaramos un tipo delegate para elprototipo de función ExecTask. A continuación, en

lugar de instanciar el tipo delegado basándonos enuna función existente, asignamos el cuerpo de la fun-ción al tipo delegado. De esta forma, no hay necesi-dad de crear un método adicional para el delegado.

Otra situación interesante y un escenario útilpara el uso de métodos anónimos es el manejo deeventos:

Button1.Click += delegate(Object o, EventArgs e){

// ...};

El ámbito de los parámetros de un método anó-nimo se circunscribe al propio método. En el blo-que de un método anónimo se puede saltar de unaparte a otra utilizando las sentencias goto y break.En esencia, los métodos anónimos son simplementeuna forma de pasar un bloque de código comoargumento.

¿Qué sucede con los destructores en C#? ¿Hay alguna diferencia con el método Finalize?¿Cómo pode-mos compararlos con la interfaz IDisposable?

En general, C# no requiere tanta gestión de lamemoria como se necesita en otros lenguajes y entor-nos donde no existe un recolector de basura implí-cito. En .NET Framework, el recolector de basuragestiona por defecto la ubicación de la memoria paralos objetos administrados (ubicados en el montón oheap). Sin embargo, para aplicaciones que encapsu-lan recursos no administrados, tales como conexio-nes a redes o a bases de datos, o que manejan obje-tos tipo GDI+, debería utilizarse un destructor paragarantizar que esos recursos son liberados de formaregular.

Los destructores solo pueden ser definidos den-tro de clases, y no en construcciones similares comolas estructuras. No pueden ser heredados ni sobre-cargados, y cada clase puede tener solamente un des-tructor. El destructor, además, es invocado automá-ticamente por el sistema y no puede ser llamado direc-tamente. A continuación se muestra el destructor deuna clase:

class Animal{

~ Animal() {

// El código de limpieza va aquí}

}

Téngase en cuenta que deben evitarse los des-tructores vacíos, a causa del impacto que pueden teneren el rendimiento. Para explicarlo: no es una pérdidadramática, pero sí que se pierde rendimiento. Unainstancia de una clase que contiene un destructor seañade a la lista de objetos que el recolector de basu-ra de .NET Framework tiene que comprobar. Si eldestructor está vacío, esto simplemente resulta unaoperación inútil, repetida frecuentemente. El códigodel destructor se expande de forma implícita en elsiguiente:

protected override void Finalize(){

try{

// El código de limpieza va aquí}finally{

base.Finalize();}

}

Como desarrollador, no tienes control de cuán-do se llama al destructor, ya que eso lo determina elrecolector de basura. Si éste considera que un obje-to es candidato a ser destruido, llama a su destruc-tor, si lo hubiera. Los destructores son llamados tam-

Page 51: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

51

Tod

otN

et.q

a@

dot

netm

ania

.com

Tod

otN

et.q

a@

dot

netm

ania

.com

dnm.todonet@qa<<

Desde Windows 95, el sistema operativo suministraun motor de notificación para archivos que puede serextremadamente útil si se necesita controlar lo que suce-de en una cierta ubicación de archivos. A menudo igno-rada, esta característica consiste en la capacidad del sis-tema para notificar mediante eventos varias clases decambios que afectan a ficheros y carpetas dentro de undirectorio determinado. En .NET Framework, la claseFileSystemWatcher encapsula las API de bajo nivel deWin32 detrás de este mecanismo de notificación.

Esta clase monitoriza el sistema de ficheros de unordenador local o de una unidad de red, con la únicay obvia excepción de las de CD y DVD, ya que nadapuede cambiarse dentro de estas unidades.

Configurar un FileSystemWatcher es una operaciónen 3 pasos. Primero, se define el directorio raíz a moni-torizar y los ficheros que deben ser observados. Segun-do, se establecen los eventos que resulten de interés: cam-biado, borrado y/o añadido, y se enlaza el objeto con losmanejadores de evento apropiados. Finalmente, se acti-va el objeto y con ello, la vigilancia. El fragmento decódigo adjunto configura un objeto de esta clase paravigilar los ficheros .BAT en el directorio raíz del disco C.Cuando cualquier fichero con esta extensión sea escritoo creado, se lanzará el evento Changed, que es manejadopor el método FileChanged.

FileSystemWatcher fsw = new FileSystemWatcher();fsw.Path = @”c:\”;fsw.Filter = “*.bat”;fsw.NotifyFilter = NotifyFilters.LastWrite;fsw.Changed +=

new FileSystemEventHandler(File Changed);fsw.EnableRaisingEvents = true;

Se termina la recepción de eventos deshabilitando lapropiedad EnableRaisingEvents. Para eliminar cierto tipode notificaciones, se puede especificar un criterio de bús-queda para ficheros y directorios. Esto se realiza median-te la propiedad Filter. El valor por defecto es *.*, lo quesignifica que no se detectarán cambios en ficheros sinextensión. Hay que asignar a la propiedad Filter una

cadena vacía si queremos capturar los cambios para cual-quier tipo de fichero. La tabla 1 lista los tipos de cam-bios que pueden detectarse mediante esta clase:

Para empezar a recibir notificaciones sobre cambios,se activa la propiedad EnableRaisingEvents, si se quieretrabajar de forma asíncrona. Si el código necesita dete-nerse y esperar de forma indefinida hasta que ocurraalgún cambio, podemos usar el método WaitForChanged.Una sobrecarga de este método acepta el número demilisegundos a esperar. Una propiedad crítica de la cla-se FileSystemWatcher es InternalBufferSize. La clasenecesita ubicar un búfer de memoria y pasarlo a la APIsubyacente para capturar la información. FileSystem-Watcher dispone de la posibilidad de manejar un enor-me número de eventos que pueden sobrepasar el búfer.Es extremadamente importante establecer el tamaño delbúfer de forma adecuada al número aproximado de even-tos que se pretende recibir. Si este número no se cono-ce con antelación, entonces se recomienda doblar el valorpredeterminado de la propiedad InternalBufferSize.

Algunas veces, he observado que Windows Explorer refresca automáticamente su vista de carpe-tas cuando se cambia, crea o borra el nombre de un fichero o un directorio. ¿Es esto correcto? Ysi es así, ¿cuál es la característica y cómo funciona todo eso por debajo?

bién cuando el programa termina. Se puede forzarla recolección de basura llamando explícitamente almétodo GC.Collect, pero en la mayoría de los casosesto debe evitarse, debido a problemas de rendi-miento potenciales. En clases personalizadas, laimplementación del patrón Dispose es una buena for-ma de suministrar un mecanismo determinista delimpieza de memoria.

Si la aplicación utiliza un recurso no administrado dealto costo, se recomienda la implementación de la inter-faz IDisposable y ejecutar la limpieza necesaria del obje-to en el método Dispose. ¿Es IDisposable un medio dereemplazar los destructores? No realmente: suministraun control explícito sobre los recursos, pero el destruc-tor permanece como una garantía de limpieza de recur-sos en caso de que no se realice la llamada a Dispose.

Traducido al castellano por Marino Posadas

Miembro CambioAttributes Los atributos del fichero/directorio

se han modificado.

CreationTime El fichero/directorio ha sido creado.

DirectoryName El directorio ha cambiado de nombre.

FileName El fichero ha cambiado de nombre.LastAccess El fichero/directorio ha sido abierto

para lectura.

LastWrite El contenido del fichero/directorio hacambiado.

Security Se ha modificado la configuraciónde seguridad del fichero/directorio.

Size El tamaño del fichero/directorio hacambiado.

Tabla 1: Cambios detectables en ficheros o directorios

Page 52: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Desde el laboratorio destacamos esta herramien-ta, cuyos usos pueden aplicarse a seguridad de apli-caciones, ofuscación de código, etc.Este mes destacamos uno de los componentes queviene incluido en la versión 2005 de Visual Studio.NET. Se trata de BackgroundWorker, creado parael desarrollo de componentes inteligentes con Win-dows Forms 2.0.

Su utilidad reside en que permite lanzar variossubprocesos a la vez, cada uno de ellos en un hilo dife-rente, de forma muy intuitiva y sencilla de programar,algo que no ocurría con Visual Studio 2003.

BackgroundWorker se basa en una gestión deeventos:

• DoWork. Al dispararse este evento comienza la eje-cución de una tarea que deseamos realizar en unsegundo plano. Dentro del event handler asocia-do a este evento debe encontrarse el código aejecutar. Éste correrá en otro hilo al ser invoca-do el método RunWorkerAsync.

• ProgressChanged. Este evento se utiliza para cono-cer el porcentaje de ejecución del proceso lanzado.

• RunWorkerCompleted. Este evento se ejecuta cuan-do finaliza la ejecución del proceso. Proporcio-

na información del estado del proceso, si se hacompletado satisfactoriamente o si por el con-trario se ha cancelado.

A continuación se muestra un pequeño ejemplode utilización del componente en C#:

private void backgroundWorker1_DoWork(

object sender, DoWorkEventArgs e)

{

BackgroundWorker worker =

sender as BackgroundWorker;

e.Result = ComputeFibonacci((int)e.Argument,

worker, e);

}

ILMerge es una utilidad que le permitirá fusionar mul-titud de ensamblados en uno solo. No solo trabaja conlibrerías DLL; también los ejecutables pueden formarparte de ese único ensamblado.

El proceso que ILMerge utiliza se basa en una agru-pación mediante prioridades. Al primer ensambladode la lista de añadidos se le denomina como ensam-blado primario. Cuando el ensamblado primario es unejecutable, ILMerge crea un ejecutable con el mismopunto de entrada que el ensamblado primario. Si elensamblado primario tiene un strong name se propor-ciona un archivo .snk; como consecuencia el ensam-blado destino se vuelve a firmar con la clave especifi-cada, de modo que también tenga un strong name.

ILMerge está preparado para ejecutarse como unaaplicación de consola, aunque incluye la posibilidad deser utilizado en entornos de programación. En estemismo ejemplar encontrará un artículo de nuestro

columnista Jorge Serrano en el que se indica cómo uti-lizar ILMerge desde dentro de Visual Studio 2005.

A continuación se muestra un ejemplo de cómoejecutar ILMerge desde la línea de comandos:

ilmerge /target:winexe /out:Program1.exe Program2.exe VBClassLibrary.dll

CSharpClassLibrary.dll

Actualmente ILMerge se encuentra en la versión2.0 funcionando bajo el Framework 2.0, aunque tam-bién puede utilizarse para fusionar ensamblados crea-dos con Framework 1.0 y posteriores.

ILMerge

BackgroundWorker Component

Laboratorio.netLorenzo Ponte

LLoorreennzzoo PPoonnttee esredactor de ddoottNNeett--

MMaannííaa. Es arquitecto desistemas y aplicaciones.NET. Experto en datawarehousing y businessintelligence, marketing

intelligence y CRManalítico.Actualmente

es consultor de laempresa MMaattcchhmmiinndd y

webmaster decclliikkeeaarr..ccoomm

Nombre: BackgroundWorker Component

Versión: 1Fabricante: Microsoft

WEB: http://msdn2.microsoft.com/en-

us/library/8xs8549b.aspx

Categoría: Programación

Precio: Gratis

Dificultad:***

Ficha técnica

Nombre: ILMerge

Versión: 2.0.7.0228

Fabricante: Microsoft

WEB: http://research.microsoft.com/~mbarnett/ILMerge.aspx

Categoría: Utilidades

Precio: Gratis

Dificultad:**

Ficha técnica

Page 53: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dnm.laboratorio.net<<

La manipulación de archivos XML es algo tan habi-tual en las aplicaciones de hoy en día, que es nece-sario tener una herramienta rápida y sencilla quepermita hacer todo tipo de operaciones con estosarchivos.

Microsoft ha creado XML Notepad 2007, una herra-mienta capaz de reconocer archivos y esquemas XML.Mediante una estructura de árbol sincronizada, permi-te modificar rápidamente tanto los nombres de los nodoscomo los valores que contienen.

Ofrece la posibilidad de realizar búsquedas incre-mentales (Ctrl+I) sobre los nodos del XML o sobre eltexto. Igualmente ofrece todas las posibilidades de un

procesador de textos para deshacer/copiar/pegar e inclu-so arrastrar entre los elementos del árbol para modifi-car su estructura.

Está dotado de Intellisense, ofreciendo todas las posi-bilidades existentes en ese aspecto. También incluye laposibilidad de validar esquemas, resaltando errores deconcordancia si existen.

Por último, debemos resaltar que XML Notepadpermite cargar archivos de gran tamaño en un espaciode tiempo muy corto.

En definitiva, es una herramienta muy ágil para rea-lizar operaciones con archivos XML.

XML Notepad 2007

Nombre: XML Notepad 2007

Versión: 2007

Fabricante: Microsoft

WEB:

http://www.microsoft.com/downloads/details.aspx?familyid=72

D6AA49-787D-4118-BA5F-4F30FE913628&displaylang=en

Categoría: Utilidades

Precio: Gratis

Dificultad:**

Ficha técnica

Page 54: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

54

Como analista .NET, casado y residente en… Pam-plona (no, no es el famoso concurso de la tele), una demis mayores inquietudes ha sido siempre promoveren Navarra una comunidad de desarrollo dinámica,para tratar de traer actividad tecnológica diferente,más creativa y, a poder ser (y esto ya es un interés per-sonal), relacionada con la realidad virtual, la simula-ción o similares. Ese fue desde el principio el princi-pal objetivo del proyecto Simax (http://www.simax.es),en el que llevo trabajando más de cuatro años.

Curiosamente, hace unos tres meses, me topé conun cartel en una pared de la universidad que anun-ciaba una charla de Chema Alonso con el título “Losprogramadores y la seguridad”, para el día 19 dediciembre de 2006. Desde el primer momento atra-jo mi interés, no sólo por el flamante ponente, sinoporque me pareció una iniciativa de esas que uno lle-va tiempo esperando. No dudé en registrarme y asis-tir al evento, que resultó excepcional.

Lo sorprendente fue comprobar que era el primerencuentro organizado por un grupo de reciente creaciónllamado navarraDotNet. “¿Un grupo de usuarios .NETen mi comunidad? ¡Yo tengo que participar en esto!”

Inmediatamente me puse en contacto con las per-sonas del grupo que rondaban por allí. Entre otros,Ander Muñoz, Sergio Jiménez, Ana Rodrigo,Alberto Esparza y la presidenta del grupo, la encan-tadora Elena Santacana, me recibieron con los bra-zos abiertos. Me comentaron que habían pasado unpar de meses desde que Carlos Segura fundara elgrupo con su colaboración, y que estaba teniendo unagran aceptación. Algo totalmente cierto, porque yasomos 157 miembros y contamos con una agendarepleta de eventos.

Tras la charla de Chema Alonso, vino el segundoevento organizado por el grupo, el 25 de enero. DavidSalgado (evangelista de Microsoft) desafió al frío y ala nieve que cubría Pamplona para enseñarnos unmontón sobre ASP.NET, AJAX, WPF y WCF en laUniversidad Pública de Navarra. Yo contribuí modes-tamente con una sesión sobre desarrollo de juegos conDirectX y XNA, y Carlos Segura nos habló de Work-flow Foundation. Lo pasamos muy bien, la verdad.

Pocos días después, aprovechando la reunión quemantiene el grupo periódicamente, tuvimos una ter-tulia sobre refactoring, guiada por Carlos Segura ySergio Jiménez.

El 27 de febrero volvió Chema Alonso, a quien sele ha nombrado padrino del grupo, para realizar unTraining Day, sobre seguridad para aplicaciones Web.La charla se realizó en el Centro de Excelencia deSoftware y las sesiones prácticas de la tarde en EGAInformática. Según las encuestas y las críticas, Che-ma dejó a la gente con la boca abierta en una sesiónque bordó desde la mañana.

Para continuar, quién mejor que varios de los pro-pios fundadores del grupo para contarnos las moti-vaciones que les guiaron a dar este paso y qué visióntienen para el futuro:

¿Cuál fue la primera y principal motivaciónpara embarcaros en la fundación de un grupo deusuarios .NET?

Carlos: “Este grupo de usuarios surge de la ilu-sión, de las ganas de aprender y enseñar, y de la posi-bilidad de disponer en Navarra de un grupo de gentecon un punto de interés común alrededor del softwa-re y, en especial, de la tecnología .NET de Microsoft.”

navarraDotNetGrupo de usuarios de .NET de Navarra

comunidad.net

nnaavvaarrrraaDDoottNNeett• Ubicación:Navarra• Fecha de fundación: 19/10/2006• Fundador:Carlos Segura Sanz

(Sharepoint MVP)• Número de miembros: 157• Página web: www.navarradotnet.com• Email de contacto:

[email protected]

Page 55: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

¿Cuáles han sido los principalesproblemas que os habéis topado, eigualmente, qué ayudas o apoyoshabéis recibido?

Elena: “El principal problema es eltiempo. Cómo compatibilizar mi vidafamiliar con mi trabajo ya era bien com-plicado antes de navarraDotNET. Aho-ra es una locura, llevo cuatro meses abdu-cida con esta historia que tantas y tan bue-nas posibilidades tiene. Además, a vecesresulta difícil entender las motivacionesque nos llevan a participar en el grupo.Incluso hay gente que llega a pensar quelo hacemos por interés, económico o deltipo que sea. ¡Qué gracia! El últimopequeño escollo al que nos enfrentamoses tratar de lidiar con los intereses quenuestra actividad va generando en cier-tas empresas y entidades.

En cuanto a los apoyos quiero des-tacar varios. En primer lugar el de nues-tro padrino, Chema Alonso, que nosmima mucho. También el de JesúsVilladangos, de la Universidad Púbicade Navarra. Él ha entendido a la per-fección la esencia del grupo. Su apoyoincondicional, su discreción y entusias-mo con nosotros es fantástico. Jesús esuno de los motores de este grupo, y creoque su secreto reside en que él tambiénse divierte mucho con esto. Por supues-to, el de Alfonso Rodríguez, de Micro-soft, al que fusilamos a correos con peti-ciones de todo tipo.

Por último, y no menos importante,el del Centro de Excelencia de Softwa-re fundado en Pamplona, cuyo naci-miento prácticamente coincidió con elnuestro. De nuestra relación con elloshan surgido varios de los eventos quehemos coorganizado y muchos de losque tenemos en mente”.

¿Cuál es el objetivo primordialdel grupo?

Ander: “La difusión de los cono-cimientos, aprender y enseñar. La pro-pia definición de NavarraDotNet lopone muy claro: «Nuestro objetivoprincipal es enseñar, aprender y com-partir los conocimientos en tecno-logías de desarrollo de software».Nadie nace enseñado, por lo que debeaprender de los demás, pero pensamosque una vez adquieres un conoci-miento, ese conocimiento hay quecompartirlo con el resto de la comu-nidad”.

¿Qué perspectivas tenéis de caraal futuro?

Ander: “Alguna cosica hay en men-te, pero por el momento seguir divir-tiéndonos trabajando en esto”.

Carlos: “Aprender, enseñar, cono-cer gente y pasarlo lo mejor posible.”

Para terminar, no me queda más queagradecer a Alfonso Rodríguez y DavidCarmona (Microsoft), Miguel Jiménez(Ilitia), Rafael Flores y Carlos Urtasun(CES), Jesús Villadangos (UPNA), EGAInformática, Asesoría ESAN, por supues-to a dotNetManía y a todas las personasque colaboran y dan apoyo al grupo.

Muchas gracias a todos.

dnm.comunidad.net<<

Íñaki Ayucar

Centrifuga tus aplicaciones ASP.NET con AJAX

Este ya es el tercer evento organizado porArtalde.net y en el que el grupo se ha con-solidado. Ya contamos con más de cincuen-ta personas asiduas a nuestros eventos.

Esta vez hemos contado con la partici-pación de Iván González, MVP de IIS y granconocedor de los entresijos de ASP.NETAJAX.

Iván llevó a cabo una charla un tantodistinta. Ya el título sugería una orientacióndiferente: “Centrifuga tus aplicacionesASP.NET con AJAX”. Comenzó la charladándonos una introducción al mundo de AJAX, pero en cuanto tuvo la oportunidad se hizo conun buen becario para realizar el trabajo sucio (Rodrigo, no se puede entrar tarde).

Todas las demos fueron realizadas por el becario guiado por Iván. El becario se lo puso un pocodifícil, pero ayudó a dinamizar las explicaciones. Los asistentes quedaron asombrados de cómosiguiendo unos sencillos pasos alguien sin ningún conocimiento en AJAX puede ser capaz de rea-lizar una simple aplicación Web AJAX-enabled con el framework desarrollado por Microsoft.

Los 64 asistentes aprendieron que una charla puede llegar a ser divertida y amena a la vezque instructiva, y por eso prometieron volver al siguiente evento.

Íñigo Herrero

eventos.eventos.eventos.eventos

Nuestro objetivo principal esenseñar, aprender y compartir

los conocimientos en tecnologías de desarrollo de

software

Page 56: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

56

dnm.comunidad.net<<

Curso MOSS 2007de OnobaNET

Office SharePoint Server 2007 es una plataforma robusta y estable con la cual pode-mos construir aplicaciones Web, colaborar con colegas en importantes proyectos o,por ejemplo, disponer de un lugar donde encontrar la información que demandanlos usuarios. MOSS 2007 está montado sobre .NET Framework 3.0 y WindowsWorkflow Foundation (WF) y trabaja con WebParts de ASP.NET 1.1 y 2.0. Corresobre IIS 6.0 o posterior y usa como base de datos SQL Server 2000 o SQL Server2005 (necesario si usamos inteligencia de negocio).

En este curso se realiza una introducción a la tecnología SharePoint; se comen-tan las diferentes versiones por las que ha ido pasando estas herramientas desde elaño 2001 hasta la fecha del curso; se introduce Windows SharePoint Services 3.0como los servicios base para MOSS y se muestran las áreas de inversión y funcio-nalidades de MOSS; asimismo, se estudia la arquitectura necesaria para instalarMOSS y se procede a la instalación.

Se trabaja con algunas de las funcionalidades nuevas de MOSS en lo que a por-tal se refiere; vemos qué características nuevas tenemos en cuanto a plantillas paralos sitios, RSS, workflow, blogs, wiki, etc.

Finalmente, respecto a la administración, se analizan las tres capas de adminis-tración de MOSS 2007, a saber: Administración central, Administración de con-tenido compartido y Administración de sitios.

Se trata de un curso de 20 horas que se ha impartido de forma presencial para20 alumnos en el Hospital Juan Ramón Jiménez de Huelva, pero que, como enocasiones anteriores, se ha publicado en la Web del grupo de usuarios OnobaNET(www.onobanet.com) toda la documentación y actividades dadas en el curso, si bienno se trata de un curso pensado para impartirlo en la Web.

NavarraDotNET: Introducción a Microsoft Office SharePoint Server 2007

Agenda (borrador)Demostraciones de las novedades más relevantes: • Tipos de contenido (demo).• Columnas.• Trabajo offline.• Blogs y wikis (demo).• Alertas y RSS.• Perfiles de usuario.• Búsquedas.• Páginas maestras.• Gestor de contenidos.• Workflow SharePoint Designer (demo).• Catálogo de datos empresariales (demo).

Horario19:00 a 21:00

Día19 de abril

PonenteCarlos Segura Sanz, MVP Microsoft Office Share-Point Server y miembro de NavarraDotNET

LugarCES, Centro de Excelencia SoftwarePolígono industrial MocholiPlaza CEIN • Noain

eventos.eventos.eventos.eventos.eventos.eventos

Gusenet:VS2005 Day

Agenda• Bienvenida y registro.• Ventajas e inconvenientes (y

soluciones) de usar VS2005.• Implementar un componente

de datos optimizado (y cómogenerar procedimientos alma-cenados acordes al mismoautomáticamente).

• Agenda próximos eventos, ofer-tas de empleo, y otros.

Horario16:00 a 19:30

Día20 de abril

PonenteDaniel Seara de Solid QualityLearning

LugarCampus de Espinardo Universidad de MurciaMurcia

VB-MUNDO ha lanzado su exclusivo programa de TV online dedicado a los desarrolladores hispanosApoyado por la demanda de sus 40.600 usuarios registrados y gracias al soporte de Microsoft y otros sitios amigos,VB-MUNDO hasacado al aire un programa que se asemeja más a un programa de TV habitual que a un programa estrictamente técnico.Es por eso quesu formato permite aprender de manera amena y no tan rígida como ocurre con otros formatos disponibles. Este programa pro-mete dar cobertura durante el 2007/2008 a todo lo relacionado con Visual Studio Orcas.

Page 57: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

Pro .NET Extreme ProgramingGreg Pearman y James Goodwill

Editorial: APressPáginas: 344Publicado: junio, 2006ISBN: 1590594800Idioma: inglés

Los autores han puesto el dedo en la llaga de la ausencia aunando dos ideas de creciente actua-lidad: la de la programación extrema y las nuevas herramientas de construcción de aplicacio-nes para .NET. Todo ello, dentro de una obra muy bien valorada por la audiencia (Amazonla recoge como una de las mejores en su género), que pretende aclarar –a través de un enfo-que práctico– las mil sugerencias que las obras teóricas sobre estos tema recogen habitual-mente, con diferente grado de acierto.

Los autores, además, son arquitectos experimentados en varias plataformas de desarrollo, eincluyen excelentes ejemplos, en diversos escenarios de desarrollo, llegando a las fases de prue-bas, y comentando el uso correcto de herramientas como NUnit, NAnt y otras. El conjuntocompleto de ejemplos y recomendaciones a lo largo de todo el ciclo de vida hace que merez-ca la pena su lectura, incluso si no se usan éstas técnicas en el desarrollo.

Windows Presentation Foundation UnleashedAdam Nathan

Editorial: SAMSPáginas: 656Publicado: diciembre, 2006ISBN: 0672328917Idioma: inglés

Tampoco resulta Nathan un novato en esto de la autoría de libros, ya que le conocíamos porotra obra muy bien recibida por la audiencia: “NET and COM: The Complete Interopera-bility Guide”. Además, es ingeniero senior de desarrollo en Microsoft Redmond. En esta oca-sión, Nathan recorre todos los aspectos vinculados con el lenguaje XAML, de forma gradualen dificultad, y –sin llegar a ser una obra tan exhaustiva como la de Charles Petzold sobre elmismo tema, que ya comentamos en esta columna– no olvida ningún elemento fundamental.

Es, por otra parte, una obra elegantemente ilustrada, con abundancia de imágenes y color,que da una sensación realista de los resultados a obtener, y ayuda a la comprensión de losobjetivos propuestos. Incluso ha contado con la colaboración de uno de los jefes de desa-rrollo de WPF (Daniel Lehenbauer, a quien le corresponde la autoría del capítulo dedi-cado a imágenes tridimensionales, en las que es un maestro consumado, y cuyo blog,http://blogs.msdn.com/danlehen, recomendamos vivamente a los interesados por estos temas).

biblioteca.net

nove

dad

es Programación Web con Visual Studio y ASP.NET 2.0

José Manuel Alarcón Aguín. Editorial Krasis Press. Págs.: 235. Publicado: marzo, 2007.

ISBN: 9788493548902.

Programming WCF Services Juval Löwy. Editorial: O’Reilly. Pág.: 634. Publicado: febrero, 2007. ISBN: 9780596526993.

TEXTO: MARINO POSADAS

Page 58: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server

dotN

etM

anía

<<

58

desvánUn paso más en la óptica cuántica:

científicos franceses observan por primera vez el nacimiento,vida y muerte de un fotón

noticias.noticias.noticias

Michel Brune y sus colegasde la École Normale Supé-rieur de París han consegui-do, utilizando el aparato queaparece en la imagen adjun-ta, y en cuyo interior se habíanconseguido temperaturas cer-canas al cero absoluto (enconcreto 0,8 ºK), observar la aparición “espontánea” de un fotón, subrevísima vida y su desaparición posterior. Esto lo han realizado a travésde una “Medida no destructiva” (QND) del fotón individual, que per-mite que su observación no suponga su aniquilación, como estableceel Principio de Incertidumbre de Heisenberg. Los investigadores cre-en que este hallazgo puede ser explotado en sistemas de informacióncuántica. Aunque el fenómeno había sido predicho hace más de 100años, es la primera vez que se consigue su observación. Es curioso queeste experimento entronque con la siguiente noticia.

Realizan con seis fotones el experimento del gato de Schrödinger

Yaiza Martínez explica en “Ten-dencias Científicas” cómo un equi-po internacional de físicos ha con-seguido generar en laboratorio laintricación cuántica de seis fotones,realizando así el experimento depensamiento conocido como gatode Schrödinger. Este resultado,que constituye todo un récord de la física de partículas, abre las puer-tas a una futura experimentación con los llamados qubits (unidadescuánticas de información), que son la base de los pretendidos ordena-dores cuánticos. El científico Chao-Yang Lu y sus colegas de la Uni-versity of Science and Technology en China, han trabajado en cola-boración con universidades austriacas y alemanas en el citado experi-mento. Para más datos en castellano, ver la página citada http://www.ten-dencias21.net/Realizan-con-seis-fotones-el-experimento-del-gato-de-Schro-dinger_a1368.html.

Marino Posadas

Libros descargables sobre Office System 2007: Daniel Matey,MVP, recomienda varios libros descargables sobre Office System 2007,que incluyen textos sobre el kit de recursos, Office SharePoint Ser-ver, Office Project Server y Windows SharePoint Services. Los enla-ces se encuentran en su blog “Cosas interesantes” (también reco-mendable): http://geeks.ms/blogs/dmatey/archive/2007/03/21/cosas-inte-resantes-21-03-2007.aspx.

10 Artículos sobre Windows Vis-ta: Otro “blogger” habitual, CarlosFouz, nos sugiere igualmente unconjunto de artículos publicados en“The Inquirer” –en castellano, porJavier Pastor–, en los que se haceun recorrido por lo más sobresalientedel sistema operativo, desde la ins-talación hasta las características másavanzadas para usuarios. Para ver lalista completa y otra informacióninteresante, hay que visitar su blog:http://geeks.ms/blogs/cfouz/archive/2007/03/22/windows-vista-a-fondo-10-art-culos.aspx.

Fernando Guerrero nos ilustracon los consejos de su experien-cia en esta columna gratuitapublicada en MSDN dentro delproyecto de emprendedores:http://www.microsoft.com/spa-nish/msdn/enterprising/aprende/columna.mspx.

Cómo depurar JavaScript de cliente en VS2005. Ya, ya, imagi-no que muchos de los lectores lo conocen de sobra, pero en unaestadística observé que esta característica aparecía como una de laspoco conocidas para el desarrollador medio, y al ver la explicaciónen este artículo (http://www.developerfusion.co.uk/show/5918/) medecidí a incluirlo como truco del mes. Espero que sea de utilidada más de uno. Además, DeveloperFusion (el sitio Web de publi-cación) es también digno de una visita.

Sitio Web de “El Bruno”Una larga lista de entradas acumula ya este blog, totalmentededicado al desarrollo en .NET por un desarrollador del “díaa día” con .NET, según el mismo se declara. Aquí encontrarásde todo: desde anotaciones puras de desarrollo, hasta estadís-ticas de la cantidad de bebidas que la compañía (MicrosoftRedmond) regala a sus empleados cada año. Como dice élmismo, “datos totalmente prescindibles”, pero “del corazón”(http://geeks.ms/blogs/elbruno/default.aspx).

Bloggers de .NET Framework 3.0

Los contenidos y los que los producen: todos de equipos de desa-rrollo de .NET 3.0. Artículos, código fuente, herramientas, con-troles (WPF y otros), fórums, noticias y un poco de todo conestas API como elemento común denominador. La lista de blog-gers es impresionante: Cris Han, Daniel Lehenbauer, Rob Rylea,Tim Sneath, Karsten Januszewski y hasta Lutz Roeder (el innom-brable –en alemán, claro–). Se puede empezar por aquí:http://wpf.netfx3.com/roller/default.aspx.

truco del mes

documentos en la red

sitios del mes

noticias.noticias.noticias

Page 59: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server
Page 60: dotNetManía · Access for Team System. TeamPlain es una aplicación Web para VSTS que per-mite a los usuarios acceder a la mayoría de las funcionalidades de Team Founda-tion Server