visual basic.net • c# • delphi • asp.net • ado.net … · desde microsoft ibérica se ha...

60
dotNetManía nº9 noviembre 2004 • Precio: 6,00 (España) Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System Héroes con contrato eventual opinión CLM.NET: El nacimiento de una comunidad .net en la tierra de don Quijote. Algunos tipos de arquitecturas Novedades en Delphi 2005 Sobrecarga de operadores y conversiones personalizadas Entrevista a Steven Godfrey Informes y trazado de gráficas 3D en ASPNET Introducción a las pruebas de carga y stress de aplicaciones Web con Application Center Test • Optimización de memoria en aplicaciones .NET• Seguridad de Internet Information Server (y IV) Comunidad Arquitectura Laboratorio dotNetManía www.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Upload: vudien

Post on 19-Sep-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

dotNetManíanº9 noviembre 2004 • Precio: 6,00 € (España)

Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System

Héroes con contrato eventualopinión

CLM.NET: El nacimiento de una comunidad .net en la tierra de don Quijote.

Algunos tipos de arquitecturas

Novedades en Delphi 2005

Sobrecarga de operadores y conversiones personalizadas

Entrevista a Steven Godfrey

Informes y trazado de gráficas 3D en ASPNET •Introducción a las pruebas de carga

y stress de aplicaciones Web conApplication Center Test •Optimización de memoria en

aplicaciones .NET• Seguridad deInternet Information Server (y IV)

Comunidad

Arquitectura

Laboratorio

dotNetManíawww.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Desde Microsoft Ibérica se ha apoyadoa la comunidad de desarrolladores a travésde MSDN Comunidades desde su creaciónhace ya seis años, bien con artículos técni-cos, eventos por distintas ciudades, apor-tando información sobre otras comunida-des de desarrolladores, revistas, libros, foros,etc. Pero esta vez es la primera que se va ahacer con un “plan preconcebido”. Desdeel 5 de octubre está en marcha “Desarrollacon MSDN” un proyecto que durará un añolectivo y que guiará a quien quiera aprender.NET, a través de webcasts y/o alrededor de100 eventos presenciales por 24 ciudadesespañolas, con una inversión mareante denada menos que dos millones de euros. Setrata de hacer una aplicación para la gestiónde una franquicia de tiendas de venta y alqui-ler de DVDs, donde todos los desarrolla-dores que lo deseen pueden participar consu propio código fuente, en los foros, web-casts y eventos presenciales. Asimismo habráartículos, manuales y tutoriales gratuitos ydescuentos de un 40% en libros cuya mate-ria tenga que ver con los módulos.

Le remito al artículo que publicamosel mes pasado, donde se presentaba en pri-micia esta iniciativa de la mano de DavidCarmona, responsable técnico de esteinvento, o a la web oficial en desarrolla-conmsdn.com.

En cuanto al contenido de este mes,tenemos un colaborador especial, es PeterVarhol Product Manager de Devpartner enCompuware. Os recomiendo su artículosobre la gestión de la memoria en .NET.

En cuanto al “no cotenido”, si el mes pasa-do dábamos entrada a una nueva sección,dnm.mvp.online y en este número toca una des-pedida, concretamente de dnm.opensource. Paranosotros era y es un tema de bastante interés,especialmente las pequeñas utilidades que nosólo nos servirán en nuestro trabajo, sino quetambién cumplen un claro objetivo pedagógi-co al entragar sus fuentes y poder aprender lamanera de hacer ciertas cosas. A pesar de locual hemos decido cerrarla como una secciónindependiente y englobarla en la seccióndnm.laboratorio que nos permitirá evaluar herra-mientas sin importar el tipo de licencia.

Por último, y aunque con retraso, permi-táme que le presente a Indexer que a partir deahora será la mascota de dotNetManía. Eseste perro tan listo y paciente del jersey rojoque tiene abajo; y también a sus compañerosde trabajo Ernesto y Eduardo (de izquierdaa derecha), menos listos pero le ponen volun-tad. De la mano de Jorge Crespo Cano espe-ramos añadir una pizca de humor a cada núme-ro (no va a ser nada fácil porque esto de .NETes muy serio ¿no?). Puede ver más informa-ción en dotnetmania.com sobre la tira y su autor.

dotN

etM

anía

<<

3

Desarrolla con MSDNdotNetManía

Dedicada a los profesionales de la plataforma .NET

Año I •Número 9 • Noviembre 2004Precio: 6€ (España)

EditorPaco Marín

([email protected])

AdministraciónPilar Pérez

([email protected])

Asesor Técnico/CoordinaciónMarino Posadas

([email protected])

RedactoresAntonio Quiros, Guillermo 'guille' Som, Jorge

Serrano Pérez, José Manuel Alarcón Aguín,Luis Miguel blanco y Manuel Imaz.

Colaboradores habitualesÁngel Esteban, Braulio Díez, Eladio Rincón,

Erich Bühler, Fernando Nogueras, JorgeCrespo Cano, José Miguel Torres, Miguel

Egea, Miguel Katrib Mora (Grupo Weboo),Octavio Hernández, Pablo Abbate, Pedro Pozo,

Pepe Hevia y Salvador Ramos.

Además colaboran en este númeroDavid López y Peter Varhol

Edición y Suscripciones.netalia

c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)

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

PublicidadMediadev

Sophie Mancini ([email protected])Tf. 93 426 22 57 - 670 99 74 64

Fax. 93 423 11 40

ImprimeGráficas Vallehermoso

www.graficasvallehermoso.com

ISSN 1698-5451

Depósito LegalM-3.075-2004

<<

dnm.editorial

9dnm.sumario

Héroes con contrato eventual 9-10¡Qué difícil es ser héroe por obra o servicio o a tiempo parcial! El mundo tecnológicoha encumbrado hasta lo inexplicable a muchos de sus protagonistas para dejarlos caersin red en un abismo tenebroso donde sólo los más fuertes logran superar la pérdidade autoestima en la que se ven inmersos...

Entrevista a Steven Godfrey 11-12Steven Godfrey es un veterano profesional de las TI, que ha participado en proyectosde todo tipo desde sus tiempos en Digital hasta su posición actual como Secure SolutionsBusiness Manager de Hewlett-Packard.

Informes y trazado de gráficas 3D en ASPNET 14-20No más de 10 minutos y la utilización de algunas técnicas ingeniosas pueden hacerque los gráficos de barra y tarta se vuelvan tridimensionales en ASP.NET.

Sobrecarga de operadores y conversiones personalizadas (con C#) 21-29Una de las características que tiene el lenguaje C# desde su aparición es la posibilidad decrear sobrecargas de operadores, tanto aritméticos como lógicos, en nuestros propios tipos.En este artículo veremos algunos consejos que nos serán útiles a la hora de implementaresta característica.

Introducción a las pruebas de carga y stress de aplicaciones Web con Application Center Test 30-33

Al desarrollar una aplicación Web suelen surgir dudas sobre su rendimiento y sobresi proporcionará todo lo que se espera de ella. Application Center Test puede ayudarnosa despejarlas siempre que planifiquemos adecuadamente nuestras pruebas.

Optimización de memoria en aplicaciones .NET 34-38Microsoft .NET Framework y el Common Language Runtime (CLR) marcan un cambiosignificativo en cómo los desarrolladores construyen aplicaciones para la plataformaWindows. El programador se libera de la tediosa tarea del manejo de la memoria usandocaracterísticas de .NET que lo gestionan automáticamente: para ello, .NET Frameworkubica memoria a petición y la reclama al sistema una vez que está libre.

Seguridad de Internet Information Server (y IV) 39-42En las anteriores entregas de esta serie de artículos hemos tocado los grandes grupostemáticos relacionados con la seguridad de IIS. Todavía nos quedan por ver, sinembargo, algunos que no se pueden clasificar de forma tan clara y que vamos a tratarahora para terminar.

Algunos tipos de arquitecturas 43-45Después de habernos detenido en nuestros dos artículos anteriores en los fundamentosdel concepto de arquitectura de software (ver números de agosto y septiembre) podemosir viendo algunos tipos de arquitectura, tratando de agrupar esos tipos en conjuntosa los que podamos asignar cierto nivel de generalización como los que muestran MaryShaw y David Garlan en su clásico libro Software Architecture (1996).

Novedades en Delphi 2005 46-50Lo primero que salta a la vista de Delphi 2005 es su voluntad integradora, pues incluyebajo un único entorno de desarrollo la posibilidad de crear software tanto para Win32como para .NET Framework, utilizando como lenguajes de programación Delphi o C#.

dnm.mvp.online 51-53

dnm.trucos 54

dnm.comunidad.net 55CLM.NET: el nacimiento de una comunidad .net en la tierra de don Quijote.

dnm.biblioteca.net 57ASP.NET 2.0 (Dino Esposito).Microsoft .NET Framework Class Library Reference (Microsoft).

dnm.desvan 58dnm

.sum

ario

Microsoft ha presentado la iniciativa “Desarrollacon MSDN” con la que la espera formar gratuitamenteen las últimas tecnologías con la plataforma .NET atodos aquellos desarrolladores que lo deseen.

Este plan cuenta con una inversión de dos millo-nes de euros y durará diez meses a contar desde el pasa-do mes de octubre. Durante este tiempo habrá unaserie de módulos cuyo hilo conductor será el desa-rrollo de una aplicación para la gestión de una supues-ta franquicia de tiendas de venta y alquiler de DVDsllamada MSDN Vídeo, en la que se aplicarán las últi-mas tecnologías. Dichos módulos y el calendario pue-de verse en la figura.

Para la compresión de cada módulo se imparti-rán, a lo largo del año, alrededor de 100 eventos en24 ciudades españolas, así como webcasts en direc-to para el que no pueda o quiera asistir. Los web-

casts quedan grabados para poder verlos cuandoquiera.

Si vemos la parte teórica en los eventos, la partepráctica se debate en los foros y chats; aquí es dondelas personas que lo sigan pueden ayudarse entre sí uobtener ayuda de personal técnico de Microsoft eincluso de algunos MVPs. También se podrá recibirsoporte vía email.

Habrá también descuentos de hasta un 40% paralibros relacionados con los módulos y tutoriales,manuales de referencia y artículos técnicos gratuitoscomo material didáctico.

Para quien lo desee existe la sección de concursodonde puede desarrollar un cliente para losservicios web ofrecidos por MSDN Vídeo encualquiera de estas categorías: Aplicación web,Aplicación Smart Client o Aplicación VisualStudio 2005. Puede ganar un viaje al PDC del

próximo año. Más información en: www.desarrolla-conmsdn.com o puede leer el artículo de DavidCarmona, responsable técnico de este proyecto, delmes pasado en dotNetManía.

dotN

etM

anía

<<

6

dnm.noticias<<dnm.noticias

Desarrolla con MSDNn

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s

El Bonus Pack para VisualStudio .NET incluye:

• El libro “Así es Microsoft.NET”, de David S. Platteditado por MS Press/McGraw-Hill en español.

• Cupón 20% de descuentopara el curso oficial MOC

2373 “Programación con VisualBasic .NET” de cinco días a realizar en uno delos centros de formación colaboradores.

• Vale canjeable por una suscripción gratuita de6 números a dotNetManía.

• Cupón de 40% de descuento en la adquisi-ción de libros en inglés sobre .NET de MSPress.

• Kit de recursos ASP.NET v2 en español inclu-yendo: documentación y guías, starter kits, víde-

os y presentaciones, componentes gratuitos yartículos técnicos.

• Cupón 15% de descuento en la adquisiciónde la suite “Infragistics NetAdvantage 2004vol. 3” y 20% de descuento en servicios deconsultoría.

• Cupón válido para una prueba gratuita de 90días de alojamiento web en tecnología ASP.NET.

Y si además la compra ha sido a través de OpenMultilicencia y a nombre de la misma empresa e inclu-ye cinco o más licencias de cualquier versión de VisualStudio .NET* se añade un curso gratuito a medida detres días de duración (15 horas) sobre desarrollo enplataforma .NET (el tema que más les interese o con-venga: Introducción a .NET, migración de Visual Basic6.0 a Visual Basic .NET, desarrollo Web con ASP.NET,etc). Más información en: www.microsoft.com/spa-nish/msdn/vstudio/se.

Desde el 2 de noviembre de 2004 hasta el 31 de enero de 2005,por cada licencia deVisual Studio .NET* adquirida en caja o por Open Multilicencia se entregará sin costeadicional un Bonus Pack para Visual Studio .NET

Promoción Bonus Pack Visual Studio .NET

Microsoft presenta un ambicioso programa de apoyo a lacomunidad de desarrolladores de la plataforma .NET

* Versiones Professional Special Edition, Enterprise Developer o Enterprise Architect en la edición 2003.

dnm.noticias<<

dnm.noticias

dotN

etM

anía

<<

7

Altova ha anunciado que aña-dirá soporte de XSLT 2.0, XPath2.0, así como soporte nativo deXQuery 1.0 en las nuevas versio-nes 2005 de sus productosXMLSpy, MapForce, Style-Vision y Authentic, cuya salidadefinitiva se espera para el 1 denoviembre de 2004.

Entre las novedades de XMLSpy 2005 se encuentra:• Soporte de XSLT 2.0. Ofrece edición completa, transfor-

mación visual, diseño de hojas de estilo y capacidades dedepuración del nuevo y potente estandar XSLT 2.0 paratransformar y formatear contenido XML.

• Cumplimiento de estándares avanzados.• Soporte XPath 2.0. Facilidades para construir, testar y eva-

luar expresiones XPath 2.0 que son usadas para localizar yprocesar contenidos dentro de una jerarquía lógica de undocumento XML.

• Soporte de XQuery. Proporciona soporte nativo de la nueva espe-cificación XQuery 1.0 para extraer información de documen-tos XML y bases de datos. Proporciona capacidades de desa-rrollo, edición, depuración y ejecución.

• SchemaAgent. Contiene un convincente nuevo paradigma paramodelado y administración de esquemas complejos y sus com-ponentes en grupos de trabajo a través de una potente herra-mienta visual basada en cliente servidor.

Más información en: http://www.altova.com.

Altova anuncia soporte para los nuevos estándares XSLT2.0, XPath 2.0 y XQuery en las versiones 2005

Compuware desvela su estrategia para elentorno de desarrollo de MicrosoftLa empresa asegura la ausencia de errores en el proceso de integración denuevas tecnologías en infraestructuras ya existentes para entorno Microsoft

Compuware ha anunciado sus planes estratégicos de desa-rrollo de su línea de productos DevPartner diseñada para el entor-no de desarrollo basado en Microsoft. Concretamente la empre-sa ha desvelado que integrará a lo largo de los próximos docemeses las herramientas de su familia DevPartner con VisualStudio de Microsoft, y con el claro objetivo de dar soporte y solu-cionar los problemas que surgen en los procesos de migración yde desarrollo de nuevas aplicaciones que necesitan convivir coninfraestructuras tecnológicas ya existentes o integrar códigoslegados.

Con ello, Compuware soluciona uno de los mayores pro-blemas que tienen las empresas cuando tienen que abordar esteproceso, que es asegurar una alta fiabilidad y rendimiento de lasmismas. Los fallos en este proceso pueden traducirse en gran-des costes adicionales, retrasos e incluso perdidas de ingresos.Con las nuevas herramientas de DevPartner, Compuware per-mite a las empresas que esta transición se haga de manera sen-cilla con productos y servicios que ayudan a los desarrolladoresa emplear las mejores prácticas en el proceso de producir apli-caciones de alta calidad.

Con su familia de soluciones DevPartner, Compuware pro-porciona análisis detallados de la calidad y rendimiento de lasaplicaciones y enriquece a nivel de consejos técnicos para resol-ver cualquier problema que se le puedan plantear a los desarro-lladores. Compuware ha recopilado información detallada dediversas fuentes, tales como Microsoft Developer Network, y haembebido esta información dentro de las capacidades de análi-

sis de Devpartner, proporcionando a los desarrolladores un exper-to automatizado capaz de advertirles, localizar y corregir pro-blemas de las aplicaciones. Esta innovadora aproximación per-mite a los desarrolladores centrarse en un mayor conocimientodel negocio y poder desarrollar aplicaciones más lógicas para elmismo.

Compuware ampliará la línea de productos DevPartner connuevas herramientas de mayor valor para los desarrolladores ylos equipos de pruebas usando tecnología de Microsoft. La empre-sa comercializará dos nuevos productos en los próximos mesese inmediatamente después de que Microsoft Visual Studio 2005esté disponible.

Entre las novedades de estos nuevos productos, destaca lacapacidad de análisis de seguridad y vulnerabilidad de las apli-caciones que permitirá localizar rápidamente y fijar posibles vul-nerabilidades potenciales de seguridad de las aplicacionesASP.NET. Con ello las empresas podrán desarrollar, probar yponer en producción aplicaciones que sean capaces de rechazarataques o pérdidas de información.

La segunda novedad de DevPartner es la de proporcionar alos equipos de desarrollo y calidad una única forma de asegurarla calidad de las aplicaciones ante errores de código. Para ello,la nueva herramienta será capaz de emular fallos y con igual inci-dencia que si la aplicación estuviera ya funcionando de manerareal. Con ello, los desarrolladores también tendrán capacidad depredicción y de análisis pudiendo así depurar las aplicacionesante sus reacciones a los errores.

Recientemente Microsoft ha infor-mado sobre una vulnerabilidad de laseguridad que afecta a todas las versio-nes de ASP.NET -pero no de ASP- bajoMicrosoft Windows 2000, Windows2000 Server, Windows XP Professionaly Windows Server 2003, por la cual unintruso podría acceder a páginas prote-gidas con contraseña simplemente alte-rando la URL debido a que la rutina decreación de nombres canónicos no la ana-liza correctamente. Se recomiendaponerle remedio cuanto antes y para ellopuede leerse el artículo “Lo que deberíasaber sobre una vulnerabilidad registra-da en Microsoft ASP.NET” enhttp://www.microsoft.com/spain/seguri-dad/content/incident/aspnet.mspx o el artí-culo de la KB 887459 “Comprobarmediante programación la existencia deproblemas de creación de nombres canó-nicos con ASP.NET” en http://sup-port.microsoft.com/?kbid=887459. Existetambién un módulo HTTP para insta-lar que está documentado en la KB887289 “El módulo HTTP compruebala existencia de problemas de creación denombres canónicos con ASP.NET” enhttp://support.microsoft.com/?kbid=887289.Si lo desea, también puede encontrarinformación referente a esto en otrossitios de terceros como en las newslettersde Wintellect en http://wintellect.com/resources/newsletters.

dotN

etM

anía

<<

8

dnm.noticias<<

Compuware IT Governance en EspañaCompuware, tras adquirir ChangePoint en mayo pasado,introduce en España Compuware IT Governance

Compuware ha comenzado a comerciali-zar en nuestro país la solución Compuware ITGovernance de ChangePoint. Esta solución,a grandes rasgos, capacita a las empresas parapoder racionalizar sus inversiones en TI yconocer el impacto real de las mismas en laorganización, con lo que permite controlar loscostes y gestionar con rigor la distribución delos esfuerzos y presupuestos de los departa-mentos de TI.

Cabe destacar que Compuware ITGovernance es la única que está disponible encastellano y es multidivisa. Va dirigida tanto aPymes como a grandes empresas.

La preocupación por los responsables detecnologías de la información por elegir losmodelos necesarios para reducir los riesgos yaumentar la productividad es una constantecasi desde los inicios de esta industria. SegúnAyman Gabarin, vicepresidente deChangePoint para Europa, “los CIO´s nece-sitan ser capaces de medir claramente y demos-trar el valor que aportan a su empresa. Conesta nueva solución podemos ofrecerles unavisión y una comprensión incomparables desu personal, proyectos, recursos y sistemas”.

A grandes rasgos, esta solución permite alas organizaciones de TI:

• Ajustarse a las prioridades de negocio apli-cando una disciplina en la gestión de activosa todas las inversiones en TI, incluidos pro-yectos, aplicaciones e infraestructura.

• Automatizar los principales procesos de nego-cio y aplicar métodos destinados a reducircostes, al tiempo que se aumenta la eficien-cia y la calidad de los trabajos informáticos.

• Mejorar y acelerar la toma de decisiones entiempo real y con mayor visibilidad sobre elrendimiento operacional.

• Alinear las actividades de los empleados conlos objetivos de la empresa para mejorar elrendimiento de la organización.

• Mejorar la eficiencia de los recursos, inclu-yendo un análisis de los perfiles de los usua-rios, de la demanda y la capacidad, así comode la gestión de la planificación y esfuerzo.

• Reducir tareas administrativas, eliminandolos errores redundantes en la gestión manualde procesos.

• Incrementar la satisfacción de los clientes alobtener información valiosa de estos y retro-alimentarla online.

• Asegurar la correcta implantación de los pro-cesos y la implantación de software pormedio de informes y seguimiento diario delos usuarios.

NOTICIAS BREVES

C# tendrá “editar y continuar” enVisual Studio 2005, tal y como ya se anun-ció para el nuevo Visual Basic .NET. Unade las cosas más demandadas, primero porlos programadores de Visual Basic, quelo echaban en falta en la nueva versión (esalgo que ya tenía Visual Basic 6 y que notuvo Visual Basic .NET), y ahora tam-bién por los desarrolladores de C#.

La característica “editar y continuar”sirve para poder modificar nuestro códi-go mientras estamos en modo de depu-ración y continuar con la ejecución. Veren: msdn.microsoft.com/library/en-us/dnvs05/html/edit_continue.asp

Solución a la vulnerabilidaddescubierta de ASP.NET

Microsoft pone en marcha el UniversityTour para 2004-2005

Desde el año 2002, Microsoft Ibérica vie-ne celebrando lo que se ha dado en llamarUniversity Tour, consistente en una seriede eventos a lo largo del año académico através de algunas de las universidades espa-ñolas. Dichos eventos tienen una doblemisión: por un lado, la de adquirir cono-cimientos y experiencia práctica en .NETFramework, desarrollo Web y aplicacio-nes de movilidad; y por otro, la de dar aconocer y promover los programas aca-démicos de Microsoft.

El University Tour comenzó enoctubre de 2004 y por el momento hay

confirmadas 27 universidades hasta abrilde 2005.

La lista de sesiones propuesta es:• Introducción a .NET Framework.• XML y servicios Web.• Desarrollo .NET para dispositivos

móviles.• Desarrollo Web con ASP .NET.• Bases de Datos con SQL Server

2005.

Si desea más información sobre lasuniversidades que se vistarán o ver lastransparencias y ejercicios que se propondrán, puede consultar en:h t t p : / / w w w . m i c r o s o f t . c o m /spanish/msdn/estudiantes/eventos/uni-versitytour.asp.

C# también tendrá “editar ycontinuar”

dnm.noticias

dotN

etM

anía

<<

9

de software fueron los héroesdel mito tecnológico durante los años noventa. Nuestrasociedad, al igual que la griega o la romana, desarrollóun velo de creencias y valores adecuado para engañara las personas y curarlas de su vacío esencial. En esaépoca fue el mito tecnológico y, al igual que los argo-nautas o los que tomaron la sagrada Ilion, los desarro-lladores de entonces se convirtieron en héroes capacesde destilar ideas geniales que les hacían ricos casi enplena adolescencia. Fundaban empresas en los garajesde sus casas y las vendían por decenas de millones dedólares a los pocos meses. Quien no se hacía rico antesde los veinticinco era un desecho social, alguien queprofesionalmente no valía nada. Pero al mithos siemprele sustituye el logos. La razón termina imperando y todosaquellos héroes terminaron cayendo en la red del sen-tido común. Los héroes del pasado quedaron comoejemplos poco fáciles de seguir para los que en el pre-sente pretendían imitarlos. El nuevo siglo trajo el cre-púsculo de los dioses del silicio. El mercado se hundió.Todo se atropellaba y la máquina que daba trabajo ydinero se paró en seco de forma que los recién titula-dos se amontonaban chocando unos con otros antes laspuertas cerradas de las empresas.

Con el tiempo se comenzaron a oír los chirridos delos oxidados goznes y algunas puertas mostraron sus tími-das rendijas.

• Tú puedes pasar pero con un contrato a tiempoparcial y cuatro duros de salario -es lo que hay, decíael empleador de turno, si lo quieres bien y si no yasabes-.

• Tengo un contrato por obra o servicio para tresmeses ¿te interesa? -ofrecían los arruinados ejecu-

tivos de las empresas subcontratadas por las sub-contratas de las multinacionales que a la vez tení-an una contratación con la administración pública.

Mientras tanto los chavales miraban al pasado míti-co, a sus antiguos héroes, y se maldecían mil y milveces por haber nacido unos años más tarde o por nohaber sabido llegar en tiempo y forma al periodo debonanza. Saltando de contrato eventual en contratoeventual, sorteando proyectos por obra o servicio; eter-nos becarios condenados a no poder hacer ni casa nifamilia, con la autoestima por los suelos y el bolsillovacío, pasando diez entrevistas a la semana para ter-minar por no encontrar nada o nada mejor de lo quese tenía previamente.

El modelo laboral americano se impone así por lapuerta falsa en nuestro mundo. Aunque la ordenaciónlaboral europea se tilde a sí misma de proteccionistapara el trabajador, la verdad es que luego la realidad deun mercado debilitado lleva las cosas a situaciones dis-tintas a las previstas en el modelo. Nos echamos lasmanos a la cabeza cuando los empresarios piden la fle-xibilización del despido, pero hay sectores donde dichaflexibilización es un hecho traído de facto por la situa-ción del mercado.

Héroes con contrato eventual

Por Antonio QuirósGeneral Area ManagerAlhambra-Eidos

¡Qué difícil es ser héroe por obra o servicio o a tiempo parcial! El mundo tecnológicoha encumbrado hasta lo inexplicable a muchos de sus protagonistas para dejarlos caersin red en un abismo tenebroso donde sólo los más fuertes logran superar la pérdida deautoestima en la que se ven inmersos.

Los desarrolladores<<

Los desarrolladores de software fueron los héroes del mito tecnológico

durante los años noventa

Como responsable de un área empresarial donde sedesarrolla software y desde la que me veo obligado aseleccionar personal, tengo que participar en este juegocada día. Y no se crean que me gusta. Quizá alguna gen-te de la que trabaja conmigo pueda pensarlo, pero la rea-lidad es que no es así. No lo era tampoco cuanto me veíaobligado a sustituir continuamente a los profesionalesque se me marchaban de la empresa ganando el doblede lo que nosotros les pagábamos cuando tenían sólo doso tres meses de experiencia laboral desde que salieronde la facultad. Ni pasados míticos, ni presentes lamen-tables, como siempre un razonable término medio sue-le ser más gratificante para todo el mundo.

Los clientes contratan poco y los costes se ajustancada vez más por lo que las empresas tienen que serrigurosamente conservadoras respecto a los niveles sala-riales. No hablo ya de la mayor madurez de las com-pañías en el entorno legal de la contratación: Acuerdosde Nivel de Servicio leoninos, exigencias de cumpli-miento más que rigurosas, etc. Únase a esto que la ines-tabilidad del mercado es todavía patente lo que haceque todo el mundo se cuide de ofrecer amores para todala vida. La obra o servicio y el divorcio caminan para-lelos en nuestra sociedad, ya nada es para siempre, nila pareja, ni el puesto de trabajo. Sólo la hipoteca espara siempre, esa hipoteca que, además, sólo nos dansin tenemos un trabajo fijo. Además, el asunto termi-na siendo una cuestión de políticas más o menos acer-tadas o de gestores con más o menos rigor financiero.Como responden muchos futbolistas cuando les pre-guntan porqué la defensa fue un coladero o los bri-llantes delanteros no rascaron bola, habrá que decir

aquello de “El fútbol es así”. Qué cómodo sería acusarde explotadores a los empresarios que sólo quierenganar más y más dinero y arruinar a los pobrecitos tra-bajadores o, por el contrario, tachar de vagos y male-antes a los empleados que no dan ni palo al agua y arrui-nan a las empresas. Un modelo de mercado poco madu-ro aún, falto de equilibrio y de experiencia histórica,un marco de relaciones económicas alucinado con elmodelo de la nueva economía que se pensaba trans-formador de la realidad social a unos niveles inusita-dos, en fin, un utopismo tecnológico generalizado quesólo ha traído desequilibrio. La madurez vendrá aho-ra, como siempre, tras la superación de la crisis. Yo soyoptimista moderado. Pienso que de lo negativo siem-pre se extraen experiencias positivas y que se aprendemás de lo difícil que de lo fácil. Entre todos, empresasy trabajadores, tenemos que reflexionar sobre lo ocu-rrido y arrimar el hombro para que la circunstancia novuelva a darse, o al menos que no vuelva a darse con lamisma crudeza.

En fin, no hay que deprimirse, al fin y al cabo cuan-do Agamenón contrató a Ulises sólo le estaba ofre-ciendo un contrato por el claro servicio de meter sucaballo en Troya y finiquitar a los habitantes de la patriade Príamo. Terminado el proyecto, le dio los precep-tivos ocho días de despido y lo lanzó a la mar contrasirenas, cíclopes, vientos traidores y demás peligros sinparangón con aquellos que hoy tenemos que sortear.Ulises tardó en volver a encontrar trabajo y éste fuevencer a los pretendientes de su señora que tejía un veloeterno para matizar su aburrimiento. Y ahí los tene-mos a todos, contratantes y contratados han quedadoen la historia. Quién puede decirnos que nosotros, quepracticamos el noble arte de ofrecer y aceptar o decli-nar la realización de obras algo menos míticas que lasde Homero, no quedaremos también como ejemplo ymodelo para generaciones venideras. Quizá algún rap-soda ciego esté ya escribiendo en Word las primeraspalabras de nuestra epopeya: “Canta, ¡Oh Musa! la cóle-ra de aquel analista que tras sacar adelante varias dece-nas de proyectos fue despedido de su empresa y erródurante años de contrato de obra en contrato de obrabuscando su esperada Itaca”.

dotN

etM

anía

<<

10

dnm.opinion<<

La obra o servicio y el divorcio caminan para-lelos en nuestra sociedad, ya nada es para

siempre, ni la pareja, ni el puesto de trabajo

dotN

etM

anía

<<

11

gracias por concederesta entrevista a dotNetManía .Sabemos que tu tiempo es escasísimo.Al objeto de centrar la charla de cara anuestros lectores, ¿puedes concretar-nos tu actividad actual dentro deHewllett-Packard?

Es un placer. Actualmente, soy elencargado de seguridad en la línea denegocio de servidores HP en el ReinoUnido. Pero es un momento coyuntu-ral, ya que Microsoft ha decidido quelos productos que nosotros tenemos enInglaterra se conviertan en productosa nivel mundial asociados con la segu-ridad. Creo que hemos abierto puertaspara Microsoft que les permite estar ensitios donde ellos no estaban con anterioridad. Lahistoria, en realidad, comenzó hace 7 años cuandoel Ministro de Defensa británico, visitó Digital ynos preguntó si podríamos poner los mecanismosde seguridad nuestros dentro de Windows NT 3.51.En la actualidad tenemos cerca de medio millón deusuarios en el Reino Unido.

En realidad tenemos un conjunto de cinco pro-ductos relacionados con la seguridad. La marcacomercial es HP Protect Tools, y cubrimos desdela seguridad añadida en Windows tradicional oWindows Mobile, hasta la administración de con-traseñas y otros temas afines. Por darte un ejemplo,con la mayoría de los sistemas, tú puedes tener un

puerto USB activado o desactivado, pero con nues-tro Gestor de Dispositivos (Device Manager), conse-guimos que una salida de este tipo pueda estar dis-ponible para ciertas labores solamente, como porejemplo, conectarlo a una impresora o un ratón,pero impidiendo que se active para un dispositivode almacenamiento masivo.

Nosotros pensamos que en realidad, la seguri-dad consiste en añadir un tipo de valor al softwareexistente.

La segunda pregunta que quería hacerte es acercade lo que consideras los más importantes “agujeros” deseguridad en los sistemas informáticos actuales, y enconcreto, respecto al adware y el spyware.

Entrevista a Steven Godfrey

Por Marino PosadasMVP Visual Developer C#Alhambra-Eidos www.elavefenix.net

<<

Steven Godfrey es un veterano profesional de las TI, que ha participado en proyectos de todotipo desde sus tiempos en Digital hasta su posición actual como Secure Solutions Business Managerde Hewlett-Packard.Tuvimos ocasión de abordarlo en el pasado Tech-Ed para que nos comen-tara el estado actual de las soluciones de seguridad corporativa que aporta la solución HP ProtectTools, y que -de paso- nos comentara sus opiniones acerca de la seguridad en nuestros días.

Antes de nada,

dotN

etM

anía

<<

12

dnm.directo.entrevistas<<

Sin duda, el correo electrónico esel más importante. Es el gran temapendiente de resolución. Pero estosque citas son igualmente una amena-za. De hecho en nuestra propia orga-nización, tenemos un sistema que nosmantiene al día de las últimas nove-dades respecto al “malware” de formaautomática.

Parece que siempre te refieres a lainformática corporativa. ¿Existe algunasolución de las que mencionas pensadapara PC's individuales?

No, no tenemos ninguna. Son todoaplicaciones corporativas.

Hablando un poco del futuro, haceun par de meses Rafal Luckawieckicomentaba acerca de las posibilidades dela criptografía cuántica en la seguridad.¿Crees que esa es la línea a seguir? Locomento, porque una empresa de Bostonya ha empezado a utilizarla en la prácti-ca en conexiones con M.I.T…

No conozco la tecnología, y es difí-cil de decir. Pero el problema, es que,una cosa es que las cosas estén listas anivel experimental, y otro muy distintoque estén disponibles para el usuario dea pie. Y creo que son soluciones quepodrían llevar probablemente 7 ó 10años hasta que todo el mundo las use.Por eso, nosotros nos centramos prin-cipalmente en el día a día, en potenciaraplicaciones que se encuentran enamplia difusión en este momento. Enotras palabras, pensamos que, con lasaplicaciones actuales, pueden todavíarealizarse muchas cosas que son poten-cialmente peligrosas o inseguras, o noacordes con ciertas políticas empresa-riales. Nuestras soluciones atacan esefrente, para garantizar una informática

más controlada y fiable, y esto puedeincluso llegar a incluir soluciones quete permitan encriptar tu disco durocompleto.

Existen iniciativas de potenciaciónde la seguridad, como Trustworthy com-puting, a la que recientemente se incor-poró Microsoft. ¿Quiénes pertenecen ala iniciativa?

El nombre actual ha cambiado aTrusted Computing Group, (https://www.trustedcomputinggroup.org), yaparte de Microsoft y HP, están Intel,IBM, Oracle y otras compañías quedesarrollan sistemas de seguridad paralos PC.

Un inconveniente que muchosusuarios aprecian desde el punto de vis-ta del uso de software de seguridad(especialmente los antivirus), es queenlentecen la máquina de tal forma, quea veces hacen casi inviable su utilización,y cuando menos, consiguen que unhardware potente pierda mucho de surendimiento…

El límite entre seguridad y usabili-dad es siempre el mayor de los retos. Si

tú haces algo tan seguro que no sea uti-lizable, el usuario siempre hará algo parasaltarse esta barrera. Así que, lo quehemos hecho, es abordar el problemacon dos posiciones distintas: cerrar lapuerta completamente, bloquearla, quees una solución que la mayor parte dela gente no va a aceptar por las conse-cuencias que implica, o bien manteneruna puerta cerrada, pero no bloqueada,de forma que produzca los efectos disua-sorios que deseamos. Esto suele ser lomás aceptable.

Soy consciente que una de las res-puestas a esto que voy a comentar es“utiliza Protect Tools”, pero, hablandoen general, ¿cuál sería tu decálogo deseguridad de cara a la empresa media?

(risas) Claro, por supuesto, pero nohablando en general, creo que deberí-an cuidarse los sistemas, tanto desde elpunto de vista interno como externo.Por ejemplo, una persona que no per-tenezca a tu organización, ya no debe-ría tener acceso al sistema (esta es unade las grandes debilidades). Y a estohabría que añadir el control de la infor-mación que pueda salir de la empresavía CD's o dispositivos portátiles dealmacenamiento, y por supuesto el con-trol del correo. Lo que plantea otro

curioso problema: si la gente no saberealmente que ha sido atacada, piensaque no lo ha sido. No debemos asumir“a priori” que la seguridad está bien esta-blecida hasta que no sepamos con totalfiabilidad que -de veras- lo está.

Bien, Steven, pues muchas graciaspor tu tiempo y por tus consejos, queahí quedan para todos los lectores de larevista.

Gracias a vosotros, por supuesto.

Tenemos un conjunto de cinco productos relacionadoscon la seguridad. La marca comercial es HP Protect Tools,

y cubrimos desde la seguridad añadida en Windows tradicional o Windows Mobile, hasta la

administración de contraseñas y otros temas afines

Del 28 al 30 de septiembre se llevó a cabo en Frankfurt,Alemania, la Décima Conferencia Europea de DesarrolladoresBorland, evento al que pude asistir en representación deDanysoft, socio principal de Borland para España y Portugal.Durante esos tres días pudimos conocer de primera mano lasnovedades que sacará la compañía al mercado en los próximosmeses, ver en funcionamiento versiones preliminares de dichosproductos y oír decenas de conferencias muy interesantes,impartidas por personalidades mundialmente conocidas comoLino Tadros y Ray Konopka (USA), Marco Cantú (Italia),Bob Swart (Holanda), Brian Long (Reino Unido) o mi com-patriota Hadi Hariri, uno de los principales cerebros detrásde librerías tan familiares a los desarrolladores Delphi comoIntraWeb e Indy.

La presentación oficial

La inauguración oficial de la Conferencia corrió a cargodel presidente de Borland, Dale Fuller, y del carismático direc-tor de relaciones con los desarrolladores, David Intersimone(conocido mundialmente como David I.).

En su discurso de bienvenida, Dale Fuller recalcó la saludy solidez financiera de la empresa, que lleva ya 18 trimestresconsecutivos obteniendo beneficios, y cómo Borland continuarádedicando todos sus esfuerzos a ofrecer cada vez mejores pro-ductos a desarrolladores, analistas y gestores de proyectos.

A continuación, disertó sobre la nueva filosofía que estácomenzando a promover la empresa y que responde a las siglasSDO (Software Delivery Optimization, u Optimización de laEntrega del Software). Se trata de una extensión lógica y natu-ral, dijo Fuller, de la estrategia que viene desarrollando Borlandalrededor de ALM (Application Lifetime Management, o Gestióndel Ciclo de Vida de las Aplicaciones), que tiene como objetivofundamental hacer más predecible la entrega en tiempo y for-ma del software (algo en lo que no se han logrado grandes pro-gresos a pesar de todos los avances en áreas como el diseñoorientado a objetos o los propios lenguajes de programación),haciendo más fácil a los gestores de empresas el estado real delos proyectos y evaluar los costes asociados a cambios en losrequisitos, en los equipos de desarrollo y otros factores.

A ese respecto, David I. anunció que se está trabajando enun proyecto cuyo nombre en código es Themis, que integra-rá al resto de las herramientas de gestión de ciclo de vida(Caliber RM, Together, StarTeam) la más reciente adquisi-ción de la empresa, Estimate Pro, producto para la planifica-ción de proyectos y la simulación de escenarios “what-if”.Otros productos de más largo alcance, ahora mismo conoci-dos como Hyperion y Prometheus, integrarán a la suite aún másherramientas de alto nivel actualmente en desarrollo.

La presentación técnica

Para la presentación técnica, que se realizó el miércoles29, David I. hizo subir al escenario a los directores EMEA de

las diferentes líneas de producto, que contaron las principalesnovedades relacionadas con los productos a su cargo.

Corne Human, responsable de la línea de productospara el análisis de requisitos, disertó sobre las nuevas posi-bilidades que abre a los jefes de proyecto Estimate Pro,principalmente como herramienta de negociación. Tambiénpresentó las novedades fundamentales que incorporará lanueva versión de Caliber RM, de próxima aparición.

En lo referente al área de análisis y diseño orientado aobjetos, Paul Kuzan comentó las novedades presentes enla nueva versión de los productos Together, relacionadascon la implementación de patrones (GoF y otros) y la incor-poración de recursos para el análisis de calidad del códigofuente, como las métricas y las auditorías. También anun-ció nuevas versiones de Together para Visual Studio .NETy para el entorno Eclipse.

Y entonces llegó el momento de presentar los productosrelacionados con el desarrollo y pruebas. Inicialmente, JonHarrison, responsable de JBuilder, presentó los nuevosJBuilder 2005 y OptimizeIt Server Trace. Entre las noveda-des más importantes de JBuilder 2005 están el soporte para elpróximo J2SE 1.5 (primer entorno en el mundo que lo ofre-ce) y el soporte para el desarrollo visual de páginas web utili-zando Java Server Faces, en lo que también es pionero.

El plato fuerte estuvo a cargo de Jason Vokes, que des-veló las principales características que incluirá la próxima ver-sión de Delphi, conocida hasta ahora bajo el nombre en códi-go Diamondback. El producto fue calurosamente recibido porlos desarrolladores de Delphi, que constituían clara mayoríaentre los asistentes al evento. Jason tuvo aún que hacer otrapresentación más detallada al día siguiente, y la mayoría de losponentes sobre temas relacionados con Delphi adaptaron suspresentaciones para utilizar la versión beta distribuida entrelos asistentes. Las novedades fundamentales que incorporaráDelphi 2005 se describen en un artículo independiente en estenúmero de la revista.

En las próximas semanas tendremos más noticias relacio-nadas con esta nueva versión. Manténgase al tanto la páginaweb, www.danysoft.com al tf 902123146 o al [email protected]

dotN

etM

anía

<<

13

dnm.directo.eventos<<dnm.directo.eventos

Conferencia Europea de Desarrolladores Borland 2004even

tos.

even

tos.

even

tos.

even

tos.

even

tos

dnm.eventos

Jason Vokes y Jon Harrison

dotN

etM

anía

<<

14

Más allá del mundo 2DA nivel de aplicaciones informáticas, el mundo en

tres dimensiones se ve muchas veces restringido a vide-ojuegos y a algunas aplicaciones sofisticadas cierta-mente lejanas a un desarrollador que busque esto enun gráfico de tarta o barras. Las bibliotecas para tra-zado en 3 dimensiones son en general confusas, com-plejas de entender y por si esto fuera poco se necesitauna gran inversión de tiempo y esfuerzo para llegar aconstruir algo de relativa utilidad. Es por ello que noes sencillo integrar las funcionalidades en el softwaresin tener por delante un verdadero quebradero de cabe-za. En esta primera entrega ofreceré algunas técnicassencillas para brindar excelentes efectos de volumen yespesor empleando GDI+, así como también la formade hacer uso de esta tecnología en ASP.NET. Muchode lo que aprenderemos nos será de utilidad en lasegunda parte donde conoceremos ASP.NET ReportsStarter Kit, un conjunto de tecnologías gratuitas pararealizar gráficos e informes en la Web. Vamos enton-ces a comenzar viendo un resumen de las característi-cas de GDI+ para luego abordar la integración con laWeb y especialmente con ASP.NET.

Breve introducción a GDI+GDI+ se especializa en el trazado de dibujos 2D

aunque se pueden lograr excelentes resultados 3D. Elser parte intrínseca de la infraestructura nos aseguraque las versiones .NET de otros dispositivos (PocketPC,teléfonos inteligentes, etc.) contarán también con estabiblioteca. Sin embargo en dispositivos móviles de mano

se emplea la edición compacta de la infraestructura.NET (.NET Compact Framework), la que brindaen realidad un sub-conjunto de la totalidad de las fun-cionalidades. La tabla 1 nos muestra los espacios denombre donde se localizan las clases de GDI+.

Informes y trazado de gráficas 3D en ASP.NET (I)

No más de 10 minutos y la utilización de algunas técnicas ingeniosas pueden hacerque los gráficos de barra y tarta se vuelvan tridimensionales en ASP.NET.

<<

Por Erich Bühler.NET Framework y VB.NET MVPwww.VBLibros.com

Tabla1. Resumen de espacios en GDI+

Espacio de nombres Descripción

System.DrawingHace posible realizar trazados simples,aunque no por ello deja de resolver granparte de los casos.

System.Drawing.Design

Ofrece clases para personalizar el cua-dro de herramientas y el editor de cla-ses. Se utiliza para extender la interfazgráfica en tiempo de diseño.

System.Drawing.Drawing2DSe utiliza para dibujar trazados avanzadosen dos dimensiones y vectoriales.

System.Drawing.ImagingPermite una gestión muy avanzada deimágenes y meta-archivos.

System.Drawing.PrintingHace posible controlar todo lo relacio-nado con la impresión.tiempo de dise-ño.

System.Drawing.TextSi necesita crear, modificar, o utilizar fuen-tes entonces las clases de este espacio sonlas que deberá emplear.

Aquellos que se encuentran destacados son losque normalmente se emplean y el resto se hanincluido a modo informativo debido a que rara-mente se usan. Si se quiere pintar sobre un objetolo primero que hay que tener es una buena dosis depintura, un poco de inventiva y por supuesto acce-so al objeto que se desea colorear. Al igual que enla vida real la regla de oro en GDI+ es que siempreque se quiera pintar sobre algo primero hay queganar su acceso. Esto se logra en todos los casosmediante el objeto de contexto gráfico. La mayor par-te de los controles (botones, ventanas, etc.) cuen-tan con uno, lo que posibilita su acceso y posteriortrazado sobre el mismo. Si de un elemento no sepuede obtener el objeto de contexto gráfico enton-ces no se podrá modificar su aspecto.

//Obtiene el contexto gráfico.

Graphics Superficie = this.CreateGraphics();

Cuando se trabaja en formularios de Windows nor-malmente el código que dibuja escribe dentro del even-to Paint, ya que ante cualquier necesidad de repinta-do se re-ejecutará el mismo automáticamente (verfuente 1).

El objeto de contexto gráfico tiene varios méto-dos que hacen posible de forma sencilla trazar diver-sas formas. La tabla 2 nos muestra alguna de las alter-nativas.

También se cuenta con una contrapartida paracada método de dibujo llamado Fill<tipo de dibujo>

para la mayor parte de los miembros de trazado(FillPie, FillPolygon, etc.), con el fin que sea senci-llo rellenar una figura. A su vez se ofrecen variasestructuras independientes que pueden ser utiliza-das en los métodos de dibujo o relleno para, por ejem-plo, suministrar un conjunto de coordenadas, el tipode trama para un relleno, un tipo de brocha o lápiz,etc. La tabla 3 nos muestra algunas de las estructu-ras comúnmente utilizadas.

El ejemplo del fuente 2 trata de consolidar lo quehemos visto hasta el momento, en él se hace uso deuna imagen para rellenar una elipse y una textura endegradé para rellenar un cuadrado.

Al dibujar un trazado también debe tener encuenta que las estructuras de rectángulo (Rectangle)tienen un valor agregado, ya que muchos dibujostienen necesariamente que estar contenidos por unode éstos.

Espero que hasta este momento todo le haya resul-tado intuitivo, en el próximo apartado veremos cómoaplicar estas técnicas cuando se trabaja en proyectosWeb, esto es, ASP.NET.

dotN

etM

anía

<<

15

dnm.asp.net<<

Tabla 2. Resumen de métodos de dibujo

Método Utilidad

DrawArc Plasma una línea en forma de arco.

DrawBezier,

DrawBeziers,

DrawCurve

Dibuja líneas curvas o de Bezier (estoúltimo lo veremos más adelante).

DrawEllipse Traza un círculo o elipse.

DrawImage Plasma una imagen.

DrawLine Dibuja una línea.

DrawPathAlmacena la definición de líneas, cur-vas y rellenos.

DrawPieDibuja una sección de un gráfico detarta.

DrawPolygon Traza un polígono.

DrawRectangle Dibuja un rectángulo.

DrawString Plasma una cadena de caracteres.

Fuente 1

private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgs e)

{//Obtiene el contexto gráfico, el argumento E contiene //la referencia al objeto de contexto gráfico.Graphics Superficie = e.Graphics;

//Crea el lápiz a utilizar.Pen Lápiz = new Pen(Color.Red,10);

//Rectángulo que comienza en la posición 30,30//y tendrá un ancho y alto de 100, 100 píxelesSuperficie.DrawRectangle(Lápiz,30,30,100,100);

}

Tabla 3. Resumen de estructuras adicionales

Método Utilidad

SolidBrush Define un relleno sólido.

HatchBrush Define un relleno con textura.

Bitmap Representa un mapa de bits.

LinearGradientBrush Relleno multicolor.

PointRepresenta un punto en lascoordenadas del eje horizontaly vertical.

Size Define un ancho y alto.

Rectangle Representa un área rectangular.

Cómo dibujar en ASP.NETUn problema común con el que se

encuentran los desarrolladores cuandoquieren dibujar sobre un formularioWeb ASP.NET utilizando las caracte-rísticas de GDI+ es que éstos no cuen-tan con un objeto de contexto gráfico.La siguiente línea no es válida en apli-caciones Web, esto quiere decir que seproducirá un error durante la compila-ción.

//Obtiene el contexto gráfico.Graphics Superficie = this.CreateGraphics();

Pese a los esfuerzos de Microsoft porhacer parecer un formulario Web a unode Windows, no debemos olvidarnosque el primero no es más que una pági-na de conteniendo HTML con seccio-nes dinámica, mientras queel segundo es un gráficoreal. Afortunadamente losarquitectos de .NET fra-mework pensaron tambiénen este problema y aunquese requiere un poco más deingenio, el resultado finales el mismo que se tiene enformularios de Windows.Básicamente la solución sebasa en crear mediante códi-go una estructura en memo-ria del servidor Web querepresente un mapa de bits.

De aquí se obtendrá posteriormen-te el objeto de contexto gráfico.Una vezhecho esto será posible dibujar sobreesta superficie utilizando los mismosmétodos de GDI+ vistos anteriormen-te. Como último paso se deberá enviarel resultado -la imagen- al explorador,el que creerá que está mostrando unarchivo gráfico similar a uno almacena-do en una carpeta del servidor, aunque

en realidad éste haya sido creado diná-micamente. Veamos entonces paso apaso cómo llevar adelante esta tarea.

//Indica al cliente que se va a enviar un JPGResponse.ContentType = “image/jpeg”;

//Crea una mágen de Bitmap de 600x300 puntosconst int ancho = 600, alto = 300;Bitmap objBitmap = new Bitmap(ancho, alto);

La primera línea indica al explora-dor que absolutamente todo el conte-nido del formulario Web será una ima-gen JPG. Si se desea que la página ade-más muestre contenidos de texto o grá-ficos en otros formatos entonces es reco-mendable hacer uso de marcos o de unoo más IFRAME que apunten a otros for-mularios Web, con el fin que se exhibantodos los tipos agrupados dentro de unamisma página. Ahora bien, si solamen-te se desea mostrar el gráfico no tomeen cuenta esto último.

La tercera línea configura el anchoy alto en píxeles de la imagen virtual cre-ándose así un objeto de tipo Bitmap, elque contendrá al mapa de bit (por aho-ra en memoria). Se debe tener presen-te que este objeto hace referencia al con-junto de bits que representan a la ima-gen pero no al formato final que se uti-lizará para guardar o enviar a la misma.

Tenemos entonces el espacio dondedibujar, el siguiente paso será obtener elobjeto de contexto gráfico pero en estecaso de la imagen previamente creada.

// Obtiene el objeto de contexto // gráfico de la imágen.Graphics objGráfico =

Graphics.FromImage(objBitmap);

La clase Graphics contiene la superfi-cie donde dibujar aunque también provee

dotN

etM

anía

<<

16

dnm.asp.net<<

Fuente 2

// Obtiene el contexto gráfico.Graphics Superficie = e.Graphics;

// Crea el objeto y carga la imagen.Bitmap Imagen = new Bitmap(“imagen.bmp”);

// Locación y tamaño del dibujo.Point ÁnguloSuperior1 = new Point(5,5);Point ÁnguloSuperior2 = new Point(85,110);Size Tamaño = new Size(200,150);

// Estructura de rectángulos.Rectangle Rectángulo1 = new Rectangle(ÁnguloSuperior1, Tamaño);Rectangle Rectángulo2 = new Rectangle(ÁnguloSuperior2, Tamaño);

// Crea la brochas a utilizar, Wrap.TileY indica que se debe// repetir la imagen hacia abajoTextureBrush Brocha1 = new TextureBrush(Imagen, WrapMode.TileFlipY);

LinearGradientBrush Brocha2 = new LinearGradientBrush(Rectángulo1,Color.Blue, Color.White, LinearGradientMode.Vertical);

//Dibuja los rectángulos que contendrán a las figuras.Superficie.FillRectangle(Brocha2, Rectángulo1);Superficie.FillEllipse(Brocha1, Rectángulo2);

Figura 1. Resultado del trazado GDI+

Figura 2. Resultado del trazado GDI+

varios métodos estáticos (que se puedeninvocar directamente) para extraer el con-texto gráfico de un objeto. En este casoFromImage consigue el contexto de la ima-gen, lo que nos permitirá dibujar en ella.

Ya es posible utilizar las caracterís-ticas de trazado que vimos en el aparta-do anterior, aunque aquí se dibujará enel mapa de bits en memoria en vez deser directamente sobre la superficie delformulario. Por último es necesarioenviar la imagen al explorador; esto sehace mediante el método Save del mapade bits, tal como si se estuviese almace-nando la misma en un archivo local.

//Envía la imagen como JPG al navegador.objBitmap.Save(Response.OutputStream,

System.Drawing.Imaging.ImageFormat.Jpeg);

En el primer parámetro se debe indi-car a dónde enviar la imagen, en este casoOutputStream representa una referenciaal cuerpo del mensaje de respuestaHTTP. Cualquier dato escrito aquí seráfinalmente transferido al navegador. Porsu parte, el segundo parámetro especifi-ca el formato en el que se desea guardaro enviar la información; he seleccionadoJPG por ser el mejor candidato en rela-ción de tamaño/visualización.

Otra opción al envío dinámico podríaser guardar el archivo en el disco del ser-vidor y luego poner una etiqueta de ima-gen en el formulario Web que apunte allugar donde el archivo ha sido almace-nado. Sin embargo la opción más senci-lla es siempre crear la imagen dinámica-mente y enviarla al explorador.

Así cualquier trazado GDI+ puedeser adaptado fácilmente para ser mos-trado en la Web.

Es importante recordar que cuandose utiliza esta técnica es necesario esta-blecer un color de fondo a la imagen, yaque de lo contrario el valor predeter-minado será en todos los casos el negro.

// Establece color de fondo blanco // para la imágen.objGráfico.FillRectangle(new

SolidBrush(Color.White),0, 0, ancho, alto);

La primera ilusión… barras 3D

La gráfica de la figura 3 fue creadautilizando rellenos y formas de GDI+,sin embargo no resulta demasiado sofis-ticada ya que se remite únicamente a 2dimensiones. Pese a ello será nuestropunto de partida para comprender comolograr las 3 dimensiones utilizando algu-nas técnicas sencillas.

Lo primero que debemos hacer esdotar de perspectiva a la imagen; para estovamos a comenzar por lo más fácil. Unpequeño cambio a la línea base dará la sen-sación de profundidad. Lógicamente estaaproximación es correcta ya que se trata

de figuras rectangulares; en otro tipo detrazados esta técnica no será válida, aun-que existe un truco para cada forma.

El código superior define un conjun-to de puntos, los que forman un polígo-no romboidal que será trazado mediantela invocación al método FillPolygon, asícomo rellenado con el color y la texturade objBrush. Es posible también emplearesta técnica con las barras que componenla gráfica, sin embargo suele llevar bas-tante código y ser una tarea engorrosa elcálculo de cada uno de los puntos delrombo para cada una de las barras del grá-fico. Para resolver este inconveniente exis-te una técnica conocida como de repeticiónque ofrece una manera sencillísima deabordar este tema en pocas líneas.Básicamente la idea consiste en dibujarsolamente el rombo inicial, esto es, la for-ma de perspectiva que queramos que ten-ga nuestra barra pero sin altura. Luego sedeberá repetir la misma, una sobre la otra,tantas veces como se quiera que tenga dealtura la barra.

dotN

etM

anía

<<

17

dnm.asp.net<<

Tabla 4. Resumen los pasos necesarios para convertir un trazado sobre unformulario de Windows a un formulario Web ASP.NET

Convertir trazados de formularios de Windows a formularios Web ASP.NET

1. Indicar el tipo de imagen que se enviará al cliente Web mediante el tipo de con-tenido (MIME).

2. Crear un objeto de mapa de bit de las dimensiones deseadas

3. Obtener el objeto de contexto gráfico

4. Realizar los trazados deseados o copiar el código que dibujaba sobre un for-mulario de Windows

5. Guardar la imagen indicando su formato y el destino, que será en todos los casosel cuerpo del mensaje http.

Figura 3 Figura 4

Fuente 3

//Crea los puntos para una línea de //base con efecto 3DPoint punto1 = new Point(70, 245);Point punto2 = new Point(440, 245);Point punto3 = new Point(460, 265);Point punto4 = new Point(80, 265);Point[] puntos = {punto1, punto2,

punto3, punto4};

//Lo rellena de color grisobjBrush = new

SolidBrush(Color.LightGray);

//Lo dibuja en el objeto de //contexto gráfico.objGráfico.FillPolygon( objBrush,

puntos);

El primer bucle se encarga de repetirel polígono tantas veces como la alturaindicada, mientras que el segundo mue-ve la coordenada Y de todos los puntos dela forma a un valor inferior (realiza el des-plazamiento hacia arriba). La textura derelleno utilizada es de color al 50 por cien-to ya que como veremos en breve esto nospermitirá aplicar un efecto adicional a labarra. El resultado final obtenido es el dela figura 5.

Por último es necesario dar algo deluminosidad para mejorar el aspecto deprofundidad y afortunadamente conse-guir esto es muy simple, solamente hayque indicar mediante la estructura con-dicional IF que el rombo superior (elúltimo trazado) se dibuje empleandocolor al 100%.

El efecto final es el que muestra lafigura 6, como podrá apreciar es aúnmás impactante que las versiones ante-riores. Me he tomado también el atre-vimiento de agregar un panel con lasdistintas referencias a colores y su des-cripción. Recuerde que todos los fuen-tes aquí mencionados están disponibleen la Web de dotnetManía.

La segunda ilusión… gráficode tarta 3D

La superficie de un gráfico de tar-ta representa el 100% de lo que sedesea representar. En GDI+ se puedelograr este tipo de trazados medianteel método DrawPie del objeto de con-texto gráfico. Básicamente se debedefinir un área rectangular que será la

encargada de contener al gráfico en sutotalidad o a un segmento de la mis-ma. La figura 7 se obtiene como resul-tado del fuente 6.

He incluido la versión en VisualBasic ya que sé que muchos de ustedesno trabajan en C#, y de esta formapodremos apreciar que el funciona-miento de GDI+ es exactamente el mis-mo sin importar el lenguaje en el que seesté trabajando.

Siendo 0 grados la horizontal, cadauno de los trozos comienza en el pun-

dotN

etM

anía

<<

18

dnm.asp.net<<

Figura 5

Figura 6

Fuente 4

for(int Contador = 0; Contador < Altura; Contador++){//Dibuja un rombo con textura de rejilla.objGráfico.FillPolygon(new HatchBrush( HatchStyle.Percent50,

objBrush.Color), puntosRombo);

//Le quita uno a la posición de dibujo del rombo para dibujar el//próximo más arriba.for(int iLoop = 0; iLoop < puntosRombo.Length; iLoop++)

puntosRombo[iLoop].Y -= 1;}

Fuente 5

if(Contador == Altura - 1){

//Pone el rombo superior sin rejilla para dar el efecto 3D.objGráfico.FillPolygon(objBrush, puntosRombo);

}else{

//Dibuja un rombo sobre el otro con textura de rejilla.objGráfico.FillPolygon(new HatchBrush(HatchStyle.Percent50, objBrush.Color),

puntosRombo);}

Figura 7

Fuente 6

Lápiz = New Pen(Color.Black)

‘Crea el rectángulo que contendrá ‘al gráfico de torta.Rectángulo = New Rectangle( 10, 10,

200, 200)

‘Define el relleno.Brocha = New SolidBrush(Color.Blue)

‘Dibuja los trozos.superficie.DrawPie( Lápiz, Rectángulo,

0, 90)superficie.DrawPie( Lápiz, Rectángulo,

90, 90)superficie.DrawPie( Lápiz, Rectángulo,

180, 90)superficie.DrawPie( Lápiz, Rectángulo,

270, 90)

‘Rellena un trozo.superficie.FillPie( Brocha, Rectángulo2,

0, 90)

to indicado por el tercer argumento yse extienden o barren en sentido hora-rio la distancia en grados expresada enel último parámetro.

Para brindar perspectiva a un dibujode este tipo se debe estirar hacia sus lados,o lo que es igual, contenerse dentro deuna figura de menor alto que ancho. Sinembargo si bien la mejora es notoria,solamente este punto no será convin-cente, o por lo menos no podremos decirque se trate de una forma 3D. Para resal-tar aún más el resultado es necesariohacer uso de un segundo truco para aña-dirle grosor a la tarta. Para ello se debeemplear una vieja técnica que consiste entrazar, algunos píxeles por debajo, unaelipse con los mismos atributos de tama-ño que la tarta inicial (ver fuente 7). Éstarepresentará en breve su sombra o espe-sor, y por ello se debe rellenar de colorgris. Posteriormente se tiene que dibu-jar un rectángulo que pase por el mediode esta elipse, para por último trazar cadauno de los trozos de la tarta comenzan-do en el punto medio del lado superiordel rectángulo. Si ya le he mareado, lerecomiendo ver la figura 8.

A la izquierda en la figura 8 tenemosel esqueleto, mientras que a la derechapodemos ver la tarta resultante. Lo obte-nido es bastante bueno tomando encuenta lo sencillo que resulta, sin embar-go hay una técnica con la que se puedelograr un efecto aún más impactante, elque veremos en el próximo apartado.

Gráfico de tarta 3D mediantedeformación

La técnica de deformación es unpoco más compleja de programar perocon ella se obtiene un resultado desta-

cable. La figura 9 nos muestra lo que sepuede construir, como verá es un resul-tado más que destacable.

Básicamente la deformación consisteen dibujar primero cada uno de los frag-

mentos de la tarta en uncolor más oscuro al que sehará finalmente, esto es asíya que representarán la som-bra o espesor del dibujo.Luego es necesario impri-mir nuevamente cada trozopero ahora un píxel más aba-jo y repetir esta acción unas15 veces por cada uno de loselementos; cada iteracióndeberá imprimir el trozo enuna nueva posición del ejevertical pero manteniendo el

mismo eje horizontal. El resultado finalcomo podrá apreciar en la figura 10 no esdemasiado atractivo pero será la base denuestro futuro dibujo.

He abreviado el código fuente (verfuente 8 en la siguiente página) y qui-tado unas pocas líneas que no sonimportantes para comprender el fun-cionamiento. Básicamente el bucle ite-ra por los elementos de la matriz quecontienen los valores a “graficar”. Paracalcular la totalidad de elementos sedebe dividir el número retornado porla propiedad Length entre 2, ya que esuna matriz de 2 dimensiones (valor y

descripción de cada elemento). A con-tinuación se invoca la rutinaObtenerColor que retorna un color deacuerdo al valor de índice pasadocomo argumento. Esta sencilla rutinaasegura que cada fragmento de la tar-ta tendrá un color diferente. El bucle

dotN

etM

anía

<<

19

dnm.asp.net<<

Figura 8

Fuente 7

‘Crea las coordenadas del rectángulo que contendrá‘los trozos de la tarta.RectánguloSuperior = New Rectangle(40, 40, 200, 100)

‘Crea las coordenadas del rectángulo que contendrá‘la sombra o grosor.RectánguloInferior = New Rectangle(40, 70, 200, 100)

‘Indica el tamaño del rectángulo y lo dibuja.Rectángulo = New Rectangle(40, 90, 200, 30)Superficie.FillRectangle(Relleno, Rectángulo)

‘Dibuja la elipse inferiorSuperficie.FillEllipse(Relleno, RectánguloInferior)

‘Rellena los trozos con diferentes coloresRelleno.Color = Color.BlueSuperficie.FillPie(Relleno, RectánguloSuperior, 0, 45)

‘Dibuja los demás segmentos...

Figura 9

Figura 10

interior imprime cada trozo 15 veces, desplazan-do a éste 1 píxel hacia abajo en cada nueva impre-sión. Si se desea un espesor diferente entonces setendrá que configurar un valor distinto para lavariable PosiciónY. Como último paso es necesa-rio dibujar la tarta en la posición inicial pero aho-ra empleando los colores originales, con el fin deque se destaque de la sombra creada anteriormen-te. Esto dará un resultado similar al de la figura 9,aunque todavía sin el trozo extraido.

No entraré en mayores detalles, pero comoconsejo y con el fin de que la sombra sea dibujadacorrectamente es siempre recomendable aplicarprimero el desplazamiento a los trozos de la dere-cha en sentido horario para luego hacer lo mismocon los de la izquierda, esta vez en sentido anti-horario.

Quitando un segmento de la tarta

Quitar un trozo de la tarta es la parte más senci-lla ya que simplemente se necesita alejar el segmen-to deseado del centro de la tarta, esto es, moviendoel rectángulo que lo contiene a otra posición de X eY. Por ejemplo, el fuente 9 aleja el trazado de la som-bra del segundo segmento.

Recuerde que se debe escribir un IF similar paradibujar los segmentos superiores, esto es, los que no

son sombra. El resultado final ahora sí será el de lafigura 9.

Espero que este artículo le haya sido de utilidadpara conocer por una parte cómo utilizar GDI+ enformularios Web ASP.NET mientras que por la otrahaya aprendido cómo aplicar varios trucos sencillospara dotar efecto 3D a distintos tipos de gráficas. Enla próxima parte conoceremos ASP.NET ReportsStarter Kit, lo que nos ayudará aún más para cum-plir nuestro objetivo de explotar al máximo las carac-terísticas de .NET framework.

dotN

etM

anía

<<

20

dnm.asp.net<<

Fuente 8

//dibuja los trozos de acuerdo a los valores de la matriz.for(int númeroColumna = 0; númeroColumna<(arrayMesesGraficar.Length/2) ; númeroColumna++){

SolidBrush Relleno = new SolidBrush(ObtenerColor(númeroColumna));

for(int PosiciónY = 0; PosiciónY < 15; PosiciónY++){objGráfico.FillPie( new HatchBrush(HatchStyle.Percent50, Relleno.Color),40,20 + iLoop2, 200, 100,

gradoComienzo, gradoBarrido);}gradoComienzo += gradoBarrido;

}

Fuente 9

if (númeroColumna==2){//Quita el trozo.objGráfico.FillPie( new HatchBrush( HatchStyle.Percent50, Relleno.Color ), 10,50 + PosiciónY,200,100,

gradoComienzo, gradoBarrido );} else{//El resto de los trozos se dibujan en el lugar correcto.objGráfico.FillPie( new HatchBrush( HatchStyle.Percent50, Relleno.Color), 40,20 + PosiciónY,200,100,

gradoComienzo, gradoBarrido );}

dotN

etM

anía

<<

21

Todos usamos de forma habitual operadores ennuestros proyectos. Si queremos sumar dos enterosusamos el operador de la suma (+), que queremoscomprobar si un valor es menor que otro, usamos eloperador menor que (<). En principio podríamos pen-sar que esto es así porque sí, porque el compilador esinteligente y sabe cómo realizar esas operaciones.Bueno, sí, podría ser, pero realmente el compilador,o mejor dicho el motor en tiempo de ejecución, másconocido como CLR (Common Language Runtime),sabe cómo realizar esas operaciones porque se handefinido, es decir, existe código que las realiza. Paratodos, o casi todos, los tipos definidos en el .NETFramework existen funciones que le indica al com-pilador y al CLR cómo realizar dichas operacionesde suma, resta, etc.

Pero si queremos usar esos operadores en nuestrospropios tipos (clases o estructuras), el compilador nosabrá cómo realizar dichas operaciones, por la sencillarazón de que no le hemos indicado cómo hacerlo.

Teniendo la definición de la estructura Punto delfuente 1, si hacemos una operación aparentementesencilla como la suma de dos objetos de ese tipo, talcomo se muestra en el siguiente trozo de código:

Punto p1 = new Punto(10, 25);Punto p2 = new Punto(100, 22);Punto p3 = p1 + p2;

El compilador se quejará y nos indicará que: “Eloperador '+' no se puede aplicar a operandos del tipo

'Punto' y 'Punto'”. Y esto es así porque realmente elcompilador no sabe qué hacer para sumar dos obje-tos del tipo Punto.

Si estás pensando que el compilador podría ser unpoco más perspicaz y deducir cómo hacer esa opera-ción; imaginemos que en lugar de sumar dos objetosdel tipo Punto, quisiéramos sumar dos objetos de tipoCliente... salvo que le enseñemos al compilador cómomanejar las probetas... tan solo la naturaleza será capazde sumar dos clientes para obtener uno nuevo...

Por tanto, lo que tenemos que hacer es enseñaral compilador a sumar dos objetos del tipo que hemosdefinido, para que sea capaz de generar el código IL(Intermediate Language) correspondiente y de esta for-ma el CLR sepa también qué es lo que tiene que hacer

<<

Sobrecarga de operadores y conversiones personalizadas (con C#)

Por Guillermo ‘Guille’ SomVisual Basic MVP desde 1997www.elguille.info

Una de las características que tiene el lenguaje C# desde su aparición es la posi-bilidad de crear sobrecargas de operadores, tanto aritméticos como lógicos, ennuestros propios tipos. En este artículo veremos algunos consejos que nos seránútiles a la hora de implementar esta característica.

Sobrecarga de operadores public struct Punto{

public int X;public int Y;//public Punto(int x, int y){

X = x;Y = y;

}//public override string ToString(){

return X.ToString() + “, “ +Y.ToString();

}}

Fuente 1. La estructura Punto

dotN

etM

anía

<<

22

dnm.lenguajes.net<<

cuando se encuentre con esa operaciónde suma.

Cómo funciona la sobrecargade operadores

Para entender mejor cómo funcio-nan las sobrecargas de los operadores,podemos comparar una sobrecarga conun método que realice la misma opera-ción que el operador que queremossobrecargar. Por ejemplo, si queremoscrear un método que simule el opera-dor de suma (+) podríamos escribir elmétodo mostrado en el fuente 2.

Como podemos comprobar, estemétodo recibe por parámetro dos obje-tos del tipo Punto y devuelve un nuevoobjeto de ese mismo tipo en el quehemos hecho la operación que estime-mos oportuna para la suma de dosPuntos. También hemos declarado elmétodo como estático, de forma quepertenezca al propio tipo y no a una ins-tancia particular. Esto último no es uncapricho, ya que es un requisito que losoperadores sobrecargados sean méto-dos estáticos, por la sencilla razón deque los operadores se usarán de formaindependiente, sin que haya ningunainstancia de por medio. Algo que es has-ta lógico, porque dicha suma no se rea-

lizará sobre ninguna instancia en parti-cular, sino que se hará sobre dos obje-tos cualesquiera del tipo en el que esta-mos definiendo el operador.

Al estar declarado el método Addcomo un método estático, para usarlotendremos que indicar el nombre deltipo y el resultado asignarlo a una varia-ble de ese mismo tipo, tal como se mues-tra en el fuente 3.

Si ejecutamos dicho código obten-dremos la siguiente salida:

Punto p1 = 10, 25Punto p2 = 100, 22Punto p3 = 110, 37

Una vez que sabemos cómo sumardos objetos del tipo Punto, vamos a defi-nir el operador + (suma) para nuestrotipo, el cual quedaría tal y como semuestra en el fuente 4.

NOTA

A lo largo de este artículo usaremos una estructura (aunque tambiénpodría ser una clase) en la que implementaremos las sobrecargas y con-versiones personalizadas; dicha estructura, llamada Punto, tendrá doscampos públicos X e Y los cuales representarán las coordenadas de unpunto, la definición inicial es la mostrada en el fuente 1. ][

Si bien todo el código y la forma de declarar la sobrecarga de operadores ylas conversiones personalizadas entre nuestros tipos y otros tipos (incluso del pro-pio .NET Framework) están centradas en el lenguaje C#, todo lo aquí explica-do también nos será de utilidad para aplicarlo a la nueva versión de Visual Basic2005, la cual también nos permitirá sobrecargar operadores y realizar nuestraspropias conversiones de tipos, pero eso será seguramente tema de otro artículo.

public static Punto Add( Punto p1, Punto p2)

{return new Punto( p1.X + p2.X,

p1.Y + p2.Y );}

Fuente 2.Un método para sumar dos objetos de tipo Punto

NOTASi quisiéramos usar el método Add como un método de instancia, (per-teneciente al objeto creado en la memoria), lo recomendable es quesólo reciba un parámetro, el cual se usaría para incrementar el conte-nido del objeto actual, ese método de instancia tampoco debería devol-ver nada. La definición mostrada en el fuente 2 sería el código equi-valente al operador sobrecargado para la suma, el cual nos servirá paracomprender mejor cómo funcionan las sobrecargas de los operado-res. De todas formas, en algunas ocasiones, sería recomendable queexistiesen ciertos métodos estáticos, pertenecientes al propio tipo, quetuviesen su contrapartida con métodos de instancia.

][Punto p1 = new Punto(10, 25);Punto p2 = new Punto(100, 22);Punto p3 = Punto.Add(p1, p2);Console.WriteLine(“Punto p1 = {0}”, p1);Console.WriteLine(“Punto p2 = {0}”, p2);Console.WriteLine(“Punto p3 = {0}”, p3);

Fuente 3.Cómo usar el método Add de la estructura Punto

// operador +public static Punto operator +( Punto p1,

Punto p2){

return new Punto( p1.X + p2.X, p1.Y + p2.Y);

}

Fuente 4. La definición del operador suma

dotN

etM

anía

<<

23

dnm.lenguajes.net<<

Como podemos comprobar, el código interno esel mismo que el del método Add, pero ahora al indi-carle al compilador de C# qué es lo que tiene quehacer para sumar dos objetos de nuestro tipo, pode-mos usar el código del fuente 5, el cual, sin lugar adudas, es mucho más intuitivo que el anterior, en elque usábamos el método Add y el resultado obtenidoes el mismo que el del fuente 3.

Tal como hemos podido comprobar es fácil defi-nir nuestras propias sobrecargas de operadores, portanto, ya estamos preparados para definir los opera-dores de nuestras clases y estructuras. La forma dedeclarar una sobrecarga de un operador siempre esla misma:

public static <valor devuelto>

operator <operador>( <valor a la izquierda del operador>,

<valor a la derecha del operador>)

Esta sería la forma de definir los operadoresbinarios, es decir, los que operan con dos valores,uno de ellos, el que indicamos primero, es el queaparece en la parte izquierda del operado y el otro,el que indicamos segundo, es el que aparece en laparte derecha del operador, en cualquier caso,ambos parámetros deben ser por valor, es decir, nose permiten parámetros out o ref. Y, por supuesto,el valor devuelto por la función será el usado paraindicar el resultado de dicha operación.

Algunos detalles a tener en cuenta

Antes de ver otras formas de definir los operado-res de nuestros propios tipos, debemos conocer otrosaspectos y efectos colaterales que se nos pueden pre-sentar.

Por ejemplo, supongamos que queremos sumar-le a un tipo Punto un valor entero, de forma que incre-mentemos el valor interno de X; podríamos definir eloperador + (suma) de forma que reciba un paráme-tro del tipo Punto y un entero, tal como se muestraen el fuente 6.

Esta sobrecarga permitiría escribir algo como:

Punto p1 = new Punto(100, 25);Punto p2 = p1 + 15;

Pero si intentamos hacer esta otra operación:

Punto p2 = 15 + p1;

El compilador producirá un error, indicándonosque no hay ninguna sobrecarga que reciba esos pará-metros. Y, en parte, es hasta lógico ya que el compi-lador no sabe cómo sumar un tipo entero y un tipoPunto, ¿verdad?

Podrías pensar que sí, que sí lo sabe, ya que lohemos definido. Pero realmente, lo que hemos defi-nido es cómo sumar un Punto y un entero, no al revés,y en este caso, el orden de los sumandos sí altera elvalor de la suma.

Para comprender mejor porqué se produce esteerror, volvamos al código del método Add, el cual lohabíamos declarado como:

public static Punto Add(Punto p1, Punto p2)

Por tanto sabemos que sólo admitirá como pará-metros dos valores de tipo Punto.

Ahora escribamos otra sobrecarga del métodoAdd para que sea similar a la sobrecarga del opera-dor + que acabamos de definir, el código sería eldel fuente 7.

Viendo esta definición tenemos claro que la úni-ca forma de usarla sería pasándole un valor de tipoPunto y otro de tipo int, en este mismo orden, perono al revés.

Punto p1 = new Punto(10, 25);Punto p2 = new Punto(100, 22);Punto p3 = p1 + p2;Console.WriteLine("Punto p1 = {0}", p1);Console.WriteLine("Punto p2 = {0}", p2);Console.WriteLine("Punto p3 = {0}", p3);

Fuente 5.Cómo usar el operador suma (+) de la estructura Punto

En estos ejemplos estamos usando una estructura para defi-nir los operadores sobrecargados. Pero realmente no hay ningu-na razón especial para usar una estructura en lugar de una clasea la hora de decidir cual es mejor para crear nuestros tipos consobrecargas de operadores. Lo que ocurre es que generalmentevamos a definir nuestros propios operadores en tipos que de algu-na forma están pensados para manejar datos numéricos, y en estoscasos es posible que el uso de una estructura sea más eficiente eintuitivo que el de una clase. Por supuesto, ya sabemos quién esel que finalmente decide que tipo de datos crear: nosotros mis-mos después de haber evaluado cual rinde mejor.

Crear sobrecargas en clases o en estructuras

public static Punto operator +(Punto p1, int x){

return new Punto(p1.X + x, p1.Y);}

Fuente 6.Definición de la suma para un tipo Punto y un entero

dotN

etM

anía

<<

24

dnm.lenguajes.net<<

Si quisiéramos pasar primero un valor de tipoentero y después el de tipo Punto, tendríamos quedeclarar el método Add tal y como se muestra en elfuente 8.

Está más claro de esta forma, ¿verdad?, ya queahora hemos definido una sobrecarga del método Addque acepte un entero como primer parámetro y unPunto como segundo. Por tanto ahora tendríamostres sobrecargas del método Add que acepta lossiguientes tipos de datos:

1-Dos valores de tipo Punto.2-Un valor de tipo Punto y otro de tipo int.3-Un valor de tipo int y otro de tipo Punto.

Pues lo mismo ocurre con las sobrecargas de ope-radores, el compilador sólo sabrá usar los que haya-mos definido y cuando se encuentre uno para el queno tiene una definición, se quejará y nos mostrará unerror. Por tanto, si queremos que nuestra estructurapueda sumar un valor de tipo Punto y un valor int sinimportar el orden que se use, tendríamos que defi-nir la sobrecarga correspondiente, tal como se mues-tra en el fuente 9.

Algunas cosas que el compilador hacepor nosotros

Pero, (sí, en las sobrecargas también hay peros),esta forma de actuar del compilador puede cambiaro puede funcionar con otros tipos para los que nohemos definido de forma explícita una sobrecarga.

¿Cómo es posible?. Por la sencilla razón de quesi el compilador sabe cómo hacer ciertas conversio-nes entre tipos, intentará hacerlas en el caso de queno se encuentre con una conversión específica. Porejemplo, si queremos hacer la suma mostrada en elfuente 10, podríamos pensar que se producirá unerror, ya que no hemos definido ninguna sobrecar-

public static Punto Add(Punto p1, int x){

return new Punto(p1.X + x, p1.Y);}

Fuente 7. El método Add para sumar un Punto y un entero

public static Punto Add(int x, Punto p1){

return new Punto(p1.X + x, p1.Y);}

Fuente 8. El método Add para sumar un entero y un Punto

public static Punto operator +(int x, Punto p1){

return new Punto(p1.X + x, p1.Y);}

Fuente 9. La sobrecarga para sumar un entero y un Punto

NOTA

Cuando definamos operadores sobrecargados,debemos tener en cuenta que al menos uno de losparámetros debe ser del mismo tipo en el que loestamos definiendo.

De igual forma, sólo podremos sobrecargar ope-radores existentes, es decir, si en C# no existe unoperador para elevar un valor a una potencia, nopodríamos "inventarlo". En la tabla 1, extraída dela documentación de Visual Studio .NET, se mues-tran tanto los operadores que podemos sobrecargarcomo los que no.

][

Tabla1. Los operadores de C#

Operadores Posibilidad de sobrecarga

+, -, !, ~, ++, --, true, falseEstos operadores unarios sí se pue-den sobrecargar.

+, -, *, /, %, &, |, ^, <<, >>Estos operadores binarios sí se pue-den sobrecargar.

==, !=, <, >, <=, >=Los operadores de comparación sí sepueden sobrecargar, pero siempre seharán por parejas.

&&, ||Los operadores lógicos no se puedensob recargar, pero se evalúan con & y|, que pueden sobrecargarse.

[]El operador de indización de matri-ces no se puede sobrecargar, perose pueden definir indizadores.

()

El operador de conversión explíci-ta de tipos no se puede sobrecar-gar, pero se pueden definir nuevosoperadores de conversión.

+=, -=, *=, /=, %=, &=, |=, ̂ =,

<<=, >>=

Los operadores de asignación no sepueden sobrecargar, pero +=, porejemplo, se evalúa con +, el cual síse puede sobrecargar.

=, ., ?:, ->, new, is, sizeof,

typeofEstos operadores no se puedensobrecargar.

dotN

etM

anía

<<

25

dnm.lenguajes.net<<

ga del operador suma que reciba comosegundo operando un valor de tiposhort.

El compilador buscará en la lista desobrecargas del operador + uno que seadecue a esos tipos de datos, y realmenteno encontrará una sobrecarga que coin-cida, pero sí que encontrará la del tipoint, y como resulta que el compiladorsabe perfectamente cómo convertir deshort a int, (esto se conoce como pro-moción de short a int), pues no habráproblemas, ya que hará la conversión deshort a int y después usará el resultadode esa conversión con la sobrecarga quehemos definido en la que el segundoparámetro es un valor de tipo int.

Pero si en lugar de un short usamosun valor de tipo long, en este caso seproducirá una excepción, ya que el com-pilador no puede convertir (promocio-nar) un valor long en uno de tipo int deforma implícita. Aunque siempre nosqueda el recurso de hacer una conver-sión (cast) para convertir el valor longen un valor int y así poder hacer lasuma, tal como podemos ver en el códi-go mostrado en el fuente 11.

Este código es válido, al menos parael compilador, si bien en tiempo de eje-cución si el contenido de la variable n esdemasiado grande, se truncará a un valorentero. Por ejemplo, el código del fuen-te 12 asignará el valor 2112455033 a lapropiedad X de la variable p2.

Conversiones personalizadasSabiendo que el compilador inten-

tará hacer conversiones para usar las

sobrecargas que tengamos definidas, nosencontramos con otra forma de crearsobrecargas automáticas de operadores:creando nuestras propias conversionesentre otros tipos y el que nosotros esta-mos creando.

Tipos de conversiones

Como sabemos, existen dos tipos deconversiones: las implícitas y las explíci-tas, es decir, si no necesitan un cast o sílo necesitan. Por ejemplo, el compila-dor de C# sabe convertir un int en long(promoción) y como sabe que esa con-versión no produce pérdida de infor-mación, porque un entero de 64 bits(long) puede contener sin problemas unentero de 32 bits (int), por tanto lo hacede forma implícita. Sin embargo, lo con-trario no es algo “natural”, (convertirun long en un int), por la sencilla razónde que al ser la capacidad de un longmuy superior a la de un int, es posibleque algunos valores de un long no “que-pan” en un int, porque, como acabamosde ver, un int se almacena en 32 bits deespacio, mientras que para almacenarun long necesitamos el doble: 64 bits;en estos casos, la conversión la haremosde forma explícita, es decir, tenemos que

indicarle al compilador que sabemos quees posible que haya pérdida de infor-mación, pero aún así queremos hacerdicha conversión.

En nuestras clases (tipos) tambiénpodemos definir conversiones tantoimplícitas como explícitas, por ejemplo,si queremos convertir un entero en unPunto, podríamos definir una conver-sión implícita de forma que el valorentero lo asignemos al campo X de nues-tro tipo. La declaración sería la mos-trada en el fuente 13.

Sin embargo la conversión de unobjeto de tipo Punto a un entero sí queproducirá pérdida de información, portanto la conversión la deberíamos decla-rar como explícita, de forma que un usua-rio de nuestro tipo sea consciente de queposiblemente se pueda producir pérdi-da de información. La declaración de laconversión de Punto a int sería la mos-trada en el fuente 14.

Esta sobrecarga la usaríamos de estaforma:

Punto p1 = new Punto(100, 25);int x = (int)p1;

short s = 15;Punto p1 = new Punto(100, 25);Punto p2 = p1 + s;

Fuente 10. Sumar un Puntocon un valor short

long n = 15;Punto p1 = new Punto(100, 25);Punto p2 = p1 + (int)n;

Fuente 11. Para sumar un Punto con un long, debemos convertirlo a entero

long n = 1234567890123456789L;Punto p1 = new Punto(100, 25);Punto p2 = p1 + (int)n;

Fuente 12.C# sabe cómo manejar losoverflows de números enteros

NOTA

Las conversiones personalizadas se definen de la siguiente forma:

public static <tipo de conversión>operator <tipo devuelto>(<tipo a convertir>)

Que podría servir para realizar una conversión (cast) de esta forma:

(<tipo devuelto>)<tipo a convertir>

Por tanto, siempre se ven involucrados dos tipos de datos, uno de loscuales debe ser del mismo tipo que define la conversión y el otro debeser un tipo diferente, ya que no tendría mucho sentido convertir, porejemplo, un tipo Punto en otro tipo Punto.

][public static implicit operator

Punto(int x){

return new Punto(x, 0);}

Fuente 13.Conversión implícita de entero a Punto

dotN

etM

anía

<<

26

dnm.lenguajes.net<<

Con estas dos conversiones perso-nalizadas, ya hemos “enseñado” alcompilador de C# cómo convertir unPunto en un entero y viceversa, si bienal ser la última (la de entero a Punto)la que se usa de forma implícita, (sinconversión o cast), podemos aprove-char ese conocimiento del compiladorpara ahorrarnos algunas sobrecargas,por ejemplo las dos sobrecargas deloperador + en las que se usa un valorint ya no serían necesarias, porquecuando el compilador se encuentrecon un código como este:

Punto p2 = p1 + 10;

Buscará una sobrecarga del opera-dor + en el que se utilice un Punto y unentero; al no encontrarla, comproba-rá si hay alguna otra forma de usar eseoperador y se encontrará con la sobre-carga que suma dos valores de tipoPunto, y como ahora sabe cómo con-vertir de forma implícita un entero enun Punto, usará esa conversión perso-nalizada para realizar la suma usandola sobrecarga que opera con dos valo-res de tipo Punto.

Estos pequeños detalles debemostenerlos en cuenta cuando vayamos acrear sobrecargas de operadores yconversiones personalizadas en nues-tros tipos.

Sobrecarga de operadoresunarios

La sobrecarga del operador + quehemos visto, es la sobrecarga de un ope-rador binario, es decir, un operador queutiliza (u opera con) dos valores, uno elque está a la izquierda del operador y elotro el que está a la derecha. Pero tam-bién podemos sobrecargar operadoresunarios, como por ejemplo el operadorde incremento (++) o de decremento (--); en estos casos sólo se usa un valory éste debe ser del mismo tipo que eltipo que lo define, por tanto, el valordevuelto y el parámetro deben ser delmismo tipo en el que están definidos,en nuestro caso, del tipo Punto. En elfuente 15 podemos ver el código de lasobrecarga del operador ++ de nuestraestructura.

Esta sobrecarga nos servirá tantocuando usemos el operador ++ comoprefijo o sufijo: p++ o ++p, tal como pode-mos ver en el fuente 16.

Este código producirá el siguienteresultado:

p1++ = 100, 25++p1 = 102, 27

La primera línea nos muestra el mis-mo valor que originalmente hemos asig-nado a la variable p1, pero como pode-mos comprobar en la segunda línea,dicho incremento se ha realizado. Para"comprender" el resultado, realmentehay que saber cómo funciona el opera-dor ++, ya que cuando se usa como sufi-jo, se usa el valor que contiene y des-pués se incrementa, sin embargo cuan-do se usa como prefijo (delante de lavariable), primero se incrementa el valory después se usa dicho valor.

¿Qué sentido tiene sobrecargartrue o false?

Tal como pudimos comprobar enla tabla 1, tanto true como false seconsideran operadores unarios, ade-más de que se pueden sobrecargar. Laprimera impresión podría ser quepodemos cambiar el valor que devuel-ven estos operadores, pero no es así,lo que sí podemos cambiar es el com-portamiento de los mismos, es decir,cuando se considera que nuestro tipodevuelve un valor verdadero o uno fal-so. Por ejemplo, supongamos quenuestra estructura Punto la quisiéra-mos usar en una comparación o comoresultado de una operación lógica, elcompilador producirá un error si nodefinimos el comportamiento de estosoperadores con respecto al contenidode nuestra clase o estructura.

Supongamos que en la estructuraPunto queremos considerar que debedevolver un valor verdadero si cual-quiera de los valores de los dos campos

public static explicit operator int(Punto p)

{return p.X;

}

Fuente 14.Conversión explícita de Punto a entero.

TRUCO

Sabiendo que el compilador siempre que sea necesario promociona-rá, (convertirá un tipo de menor capacidad en otro que tenga mayorcapacidad de almacenamiento), podemos ahorrarnos algunas sobre-cargas y conversiones personalizadas. Por ejemplo, si definimos unaconversión de long a Punto, no será necesario crear las conversionespara sbyte, byte, short, int y uint; de igual forma, si definimos unaconversión de un valor double a Punto, no será necesario crear unapara float. Todo esto, siempre y cuando no necesitemos hacer com-probaciones extras en la forma en que se harán las conversiones.

][

public static Punto operator ++(Punto p){

return new Punto(p.X + 1, p.Y + 1);}

Fuente 15. Sobrecarga del operador ++

Punto p1 = new Punto(100, 25);Console.WriteLine(“p1++ = {0}”, p1++);Console.WriteLine(“++p1 = {0}”, ++p1);

Fuente 16.Uso del operador de incremento

Los parámetros usados en las sobrecargas de

operadores deben ser siempre por valor

dotN

etM

anía

<<

27

dnm.lenguajes.net<<

X e Y contiene un valor distinto de cero; la declara-ción de la sobrecarga del operador true quedaría talcomo se muestra en el fuente 17.

Pero si sobrecargamos el operador true, tambiéntendremos que sobrecargar el operador false, ya queestos, al igual que los operadores de comparación,deben sobrecargarse por pares, con idea de que elcompilador sepa lo que debe hacer cuando se quieracomprobar si el contenido de un Punto es falso. Portanto, la definición de la sobrecarga de false podríaquedar tal y como se muestra en el fuente 18.

Sobrecarga de operadores de comparación

Otros operadores que podemos sobrecargar sonlos operadores usados para realizar comparaciones,aunque en estos casos las sobrecargas hay que hacer-las por pares, por tanto, si sobrecargamos el opera-dor mayor que (>) también debemos sobrecargar eloperador menor que (<).

El caso del operador de igualdad (==) sigue estamisma regla, y también debemos sobrecargar eloperador de desigualdad (!=), pero como todos lostipos de .NET se derivan de Object, y ese tipo inclu-ye un método relacionado con la igualdad de obje-tos: el método Equals, que sirve para comprobar sila instancia actual es igual al objeto pasado comoparámetro, también deberíamos escribir nuestraversión de ese método. Aunque si no lo declara-mos, no pasará nada, el código compilará, aunquerecibiremos una advertencia indicándonos quedeberíamos hacerlo:

Punto define el operador == o el operador !=pero no reemplaza a Object.Equals(object o)

Pero si lo hacemos, las recomendaciones son deno llamar directamente al operador == desde el códi-go de Equals, ya que el parámetro pasado a ese méto-do puede ser un valor nulo y se produciría una excep-ción, aunque realmente no se llamaría a nuestra sobre-carga, por la sencilla razón de que al ser un valor nulo,la excepción se produciría antes. Lo importante esque deberíamos reemplazar ese método de forma queproduzca el mismo resultado que si usáramos el ope-

rador de igualdad, si bien es cierto que en la mayo-ría de las ocasiones la implementación de Equals pro-ducirá el mismo resultado. Además, siguiendo conlas recomendaciones de diseño, nunca debería pro-ducirse una excepción en este método ni en los ope-radores sobrecargados.

En el código fuente 19 vemos cómo deberíamossobrecargar el método Equals, es decir, comproba-

NOTA

A pesar de que pueda parecer lógico (así era, sino recuerdo mal, en la beta de .NET Framework1.0), que si hemos sobrecargado el operador +(suma), no sería necesario sobrecargar el operadorde incremento (++), ya que la operación a realizarsería sumar uno al valor de la variable, pero el com-pilador de C# sólo usará las sobrecargas de ++ y --si lo hemos definido en nuestro código, de no serasí se producirá un error de compilación indicán-donos que no existe una sobrecarga para el opera-dor ++ o --.

][public static bool operator

true(Punto p1){

return (p1.X != 0 || p1.Y != 0);}

Fuente 17.Definición de la sobrecarga de true

public static bool operator false(Punto p1){

return (p1.X == 0 && p1.Y == 0);}

Fuente 18.Definición de la sobrecarga de false

public override bool Equals(object obj){

if(obj is Punto)return this == (Punto)obj;

elsereturn false;

}

Fuente 19.Definición del método Equals

dotN

etM

anía

<<

28

dnm.lenguajes.net<<

mos que el parámetro sea un valor de tipo Punto y locomparamos usando nuestra sobrecarga del opera-dor de igualdad, en caso de que no lo sea, devolve-mos un valor falso.

Además, el método GetHashCode se utiliza paraidentificar de forma única a un objeto, y como elpropio .NET lo utiliza para sus propias comproba-ciones, también deberíamos crear nuestra propiaversión de dicho método, sobre todo si nuestro tipoformará parte de colecciones tipo Dictionary, ya que.NET usará el valor devuelto por el métodoGetHashCode para crear valores únicos en las clavesde los elementos de la colección. En el caso de queno sepamos cómo definir este método, la recomen-dación es usar el valor GetHashCode del métodoToString que hayamos definido en nuestro tipo, elcual en la mayoría de los casos será más eficienteque el devuelto de forma predeterminada(base.GetHashCode()). Por ejemplo, si dos variablesde tipo Punto contienen los mismos valores en loscampos X e Y, el valor de GetHashCode será el mismohayamos o no definido ese método, pero si los con-tenidos de esos campos son diferentes, al usar laimplementación predeterminada, se devolverá siem-pre el mismo valor, sin embargo, si lo definimos taly como se muestra en el fuente 20, el valor devuel-to será distinto, tal como podemos comprobar siejecutamos el código mostrado en el fuente 21.

Operadores que no se sobrecargan,perousan las sobrecargas definidas

Algunos operadores no se pueden sobrecargar,como por ejemplo el operador de asignación (=), niotros compuestos como la asignación y la suma (+=),y similares, sin embargo, estos últimos no será nece-sario sobrecargarlos si ya tenemos la sobrecarga deloperador que interviene junto con el de asignación;en el código de la clase Punto, hemos sobrecargado

el operador para sumar, y como resulta que el com-pilador de C# siempre sabe cómo hacer una asigna-ción, también sabrá cómo usar el operador +=, ya queesto es lo mismo que sumarle al objeto de la derechalo que haya a la izquierda y después volver a almace-narlo en el que esté a la izquierda del operador, portanto, si hacemos esto:

p1 += p2;

El compilador hará esta otra operación:

p1 = p1 + p2;

Y como resulta que existe una sobrecarga parasumar dos objetos de tipo Punto, el compilador notendrá problemas para efectuar esa operación, otracosa bien distinta sería que no tuviésemos una sobre-carga adecuada, en cuyo caso nos mostrará el típicomensaje de error indicándonos que no existe unasobrecarga para la operación que queremos realizar.

Interoperabilidad con otros lenguajesde .NET

Hay que tener en cuenta que la sobrecarga deoperadores sólo se podrán usar con lenguajes que lasoporten, por ejemplo, si definimos una librería quecontiene algún tipo en el que se han definido sobre-cargas de operadores y conversiones personalizadasy dicha librería la queremos usar por ejemplo con

public override int GetHashCode(){

return this.ToString().GetHashCode();}

Fuente 20.Definición del método GetHashCode

Punto p1 = new Punto(100, 25);Punto p2 = p1 + 2;Console.WriteLine(“p1.GetHashCode {0}”,

p1.GetHashCode());Console.WriteLine(“p2.GetHashCode {0}”,

p2.GetHashCode());

Fuente 21.Prueba para determinar el valor devuelto por GetHashCode

NOTA

Según las recomendaciones de diseño de .NET, eloperador de igualdad (==) no debería reemplazarse enlos tipos por referencia (clases). Por otra parte, si sesobrecargua algún operador aritmético es recomen-dable definir el operador de igualdad, sea un tipo porreferencia o por valor. ][

No todos los lenguajes de .NET soportan la sobrecarga de

operadores, en esos lenguajes habrá que usar unos métodos equivalentes que el compilador

crea de forma automática

dotN

etM

anía

<<

29

dnm.lenguajes.net<<

Visual Basic .NET, éste lenguaje no podrá aprove-charse de esas sobrecargas, por tanto deberíamostener presente esta posibilidad y definir métodos equi-valentes a las sobrecargas y conversiones que hemosdefinido. En la tabla 2, también extraída de la docu-mentación de Visual Studio .NET, se muestran losoperadores sobrecargables además de los métodosque deberíamos definir como alternativos y los méto-dos que crea el compilador para realizar esas opera-ciones, los cuales también podemos usar en esos len-guajes que no soporten la sobrecarga de operadoresni las conversiones personalizadas.

Por ejemplo, si creamos una librería de clases conla estructura Punto y la usamos desde un proyecto deVisual Basic .NET, para usar el operador suma ten-

dríamos que usar un código parecido al mostrado enel fuente 22.

Pero como la estructura Punto también tiene unmétodo Add para realizar las mismas operaciones, elcódigo de Visual Basic quedaría mejor tal como vemosen el fuente 23.

Por supuesto, también podremos usar el resto deoperadores sobrecargados, pero siempre usando losmétodos creados por el compilador, cuya nomencla-tura vemos en la tercera columna de la tabla 2.

ConclusionesLa sobrecarga de operadores y las conversio-

nes personalizadas nos permiten dar una nueva fun-cionalidad a los tipos creados por nosotros, perocomo hemos comentado, algunos de los lenguajesde .NET no soportan esta característica, por tan-to deberíamos proporcionar una funcionalidadparalela a la sobrecarga, al menos para evitar usarmétodos poco amigables.

También debemos saber que a pesar de que enC# (y los lenguajes que soporten la sobrecarga deoperadores y las conversiones personalizadas) pode-mos aprovechar las conversiones personalizadas parano tener que definir sobrecargas extras, en los len-guajes que no soporten las sobrecargas de operado-res no podrán aprovecharse de ellas y para poder usar-las, tendremos que definirlas de forma explícita.

Espero que ahora tengas una idea más clara decómo crear sobrecargas de operadores así como lasconversiones personalizadas en C#, en otra ocasiónveremos cómo utilizar estas características usando lanueva versión 2005 de Visual Basic.NET.

El código fuente con la definición de la estructu-ra Punto así como los ejemplos de cómo usarla tantodesde C# como desde Visual Basic. lo puede bajar dewww.dotnetmania.com.

Dim p1 As New Punto(100, 25)Dim p2 As Punto = Punto.Add(p1, 10)‘Console.WriteLine(“p1= {0}, p2 = {1}”, p1, p2)

Fuente 23.Código de VB usando el método Add

Tabla2. Los operadores, los métodos alternativos y los métodos internos

Operador Método alternativo Método creado porel compilador

No está definido ToXxx o FromXxx op_Implicit

No está definido ToXxx o FromXxx op_Explicit

+ (binario) Add op_Addition

- (binario) Subtract op_Subtraction

* (binario) Multiply op_Multiply

/ Divide op_Division

% Mod op_Modulus

^ Xor op_ExclusiveOr

& (binario) BitwiseAnd op_BitwiseAnd

| BitwiseOr op_BitwiseOr

<< LeftShift op_LeftShift

>> RightShift op_RightShift

== Equals op_Equality

> Compare op_GreaterThan

< Compare op_LessThan

!= Compare op_Inequality

>= Compare op_GreaterThanOrEqual

<= Compare op_LessThanOrEqual

-- Decrement op_Decrement

++ Increment op_Increment

- (unario) Negate op_UnaryNegation

+ (unario) Plus op_UnaryPlus

~ OnesComplement op_OnesComplement

NOTA

La próxima versión de Visual Basic.NET soportará la sobrecarga de ope-radores y las conversiones personali-zadas, por tanto con esa versión si sepodrán utilizar las sobrecargas defini-

das en una librería creada con C#.][

Dim p1 As New Punto(100, 25)Dim p2 As Punto = Punto.op_Addition(p1, 10)‘Console.WriteLine(“p1= {0}, p2 = {1}”, p1, p2)

Fuente 22.Código de VB usando el método equivalente a la sobrecarga de la suma

dotN

etM

anía

<<

30

Para responder a estas dudas disponemos deApplication Center Test (ACT). ACT es una herra-mienta de Microsoft incluida en Visual Studio .NETEnterprise Developer y Enterprise Architect dise-ñada especialmente para realizar pruebas de carga ystress, que permite obtener información para detec-tar problemas de rendimiento y escalabilidad.

A pesar de estar especializada en este tipo de prue-bas ACT también permite realizar pruebas funcio-nales gracias a los test dinámicos, lo que puede resul-tar útil para aplicaciones de complejidad media-baja.Si necesitamos test funcionales más sofisticados exis-ten otras herramientas en el mercado que posible-mente harán mejor esta labor.

Bien, ¿pero qué son las pruebas de carga y stress?En una prueba de carga se prueba la aplicación bajocondiciones normales y de pico, lo que permite veri-ficar que se cumplirán los objetivos deseados. En laspruebas de stress se fuerza a la aplicación a funcionarmás allá de las condiciones para las que fue diseñada.

Con estos tipos de pruebas podemos calcular cier-tas características de nuestra aplicación, entre ellas:

• Punto de ruptura del servidor, a partir del cualdeja de servir peticiones.

• Problemas de sincronización.• Pérdida de datos por congestión de la red.• Errores producidos por condiciones de carrera.• Número máximo de usuarios concurrentes.• Uso de los recursos.

• Tiempo de respuesta• Peticiones atendidas por segundo

Se puede considerar que el predecesor directo deACT es Web Application Stress Tool (WAST). Si hasusado previamente WAST te alegrará descubrir las mejo-ras que aporta ACT, entre ellas la grabación de macros.

El funcionamiento de ACT reside en simular ungran número de usuarios abriendo múltiples conexio-nes al servidor y enviando peticiones HTTP. Algunasde las características más interesantes de ACT son:

• Se integra con Visual Studio .NET.• Permite probar cualquier página Web que res-

ponda a una petición HTTP (.asp, .aspx, .php...).

Introducción a las pruebas de carga y stress deaplicaciones Web con Application Center Test

Al desarrollar una aplicación Web suelen surgir dudas sobre su rendimiento y sobre siproporcionará todo lo que se espera de ella.Application Center Test puede ayudarnosa despejarlas siempre que planifiquemos adecuadamente nuestras pruebas.

<<

Por David LópezAnalistaSinergia Tecnológica

¿Qué es el Application Center Test?

Realizar pruebas de carga y stress contra un servidor web es impres-cindible para saber que cuando esté en producción será capaz de atendertodas las peticiones que le lleguen,

o al menos para conocer el umbral apartir del cual dejará de hacerlo

• Graba scripts de pruebas desde unasesión de Internet Explorer.

• Soporta SSL.• Acumula los resultados de los test

para su análisis.• Gestiona cookies.• Soporta diferentes tipos de esque-

mas de autentificación.• Y lo mejor de todo: ¡ya lo tenemos

en Visual Studio .NET!

Cómo encaja ACT en el ciclode vida de la aplicación

La interpretación de los resultadosde ACT dependerá de los objetivos derendimiento que nos hayamos marcadopara nuestra aplicación, así que esimprescindible establecer estos objeti-vos muy pronto dentro del ciclo de vida,dentro de la fase de diseño. Estos obje-tivos tienen que ser establecidos, docu-mentados y acordados por las partesinvolucradas en la implementación,implantación y uso de la aplicación.

Una vez establecidos estos objetivoses aconsejable utilizar ACT en cada nue-va versión de la aplicación, para saber sinos estamos alejando o acercando a losobjetivos establecidos. De esta manerapodremos establecer medidas correcto-ras cuando el coste de éstas es todavíapequeño.

Configuración del entorno depruebas

Antes de comenzar a crear nuestrostest debemos asegurarnos de disponer deun buen entorno de pruebas. Nuestroobjetivo tiene que ser disponer de unentorno que permita extrapolar los datosal de producción. Para ello ambos entor-nos (pruebas y producción) han de pare-cerse al máximo a nivel hardware y soft-ware. Es cierto que esto puede ser enmuchas ocasiones costoso, pero es la úni-ca manera de asegurar que los datos queobtengamos nos permitirán emitir jui-cios adecuados sobre nuestro sitio Web.

En algunas empresas la propia máqui-na de pruebas es la que más tarde pasa aser la máquina de producción. Es eviden-te que de esta manera aseguramos que elhardware y software es el mismo, peroperdemos una máquina sobre la que seguirprobando posteriores versiones del site.

Sería, por lo tanto, aconsejable disponerde dos entornos idénticos para simulta-near producción y pruebas.

Por otro lado hay que tener en cuen-ta que disponer de unas máquinas parapruebas que sean una réplica exacta nogarantiza el resultado de los test si el entor-no no está perfectamente controlado. Sitenemos tráfico en la red ajeno a la prue-ba, aplicaciones funcionando no deseadas,etc... estaremos falseando los datos.Tenemos que asegurarnos de estar pro-bando lo que deseamos y no una mezclavariada de configuraciones y circunstan-cias. El mero hecho de estar simulandolas peticiones HTTP desde la mismamáquina cliente introduce cierto factor dedistorsión en las pruebas que es inevita-ble, de ahí la necesidad de controlar per-fectamente el resto de variables (hardwa-re y software) del entorno.

Hasta ahora hemos hablado de lamáquina que alojará la aplicación bajopruebas, pero otra pieza fundamentalde ACT es la máquina cliente que lan-za las peticiones HTTP. ACT es unaaplicación muy intensiva en procesador,lo que puede hacer que se sature rápi-damente. Es importante que a lo largode la prueba vigilemos que la máquinacliente no es el factor limitador, es decir,la saturación debe encontrarse siempreen la máquina servidor y no en la máqui-na cliente. En ocasiones la potencia deun servidor implica tener que disponerde varias máquinas cliente para poderllegar a saturarlo. Esto ocurre especial-mente en las pruebas de stress, en lasque se debe intentar mantener el pro-cesador del servidor por encima de un80% de uso, algo que raramente se con-sigue con una única máquina cliente.

Configuración y uso deApplication Center Test

Hay dos formas de usar ACT: des-de el IDE de Visual Studio .NET ocomo una aplicación independiente. Siescogemos utilizarlo desde el IDE suuso se simplifica, permitiéndonos edi-tar y lanzar los scripts, pero si deseamossacar todo el jugo a ACT es preferibleusarlo como aplicación independiente.Podemos encontrar la aplicación en lacarpeta “Microsoft Visual Studio .NET2003 - Características empresariales deVisual Studio .NET - MicrosoftApplication Center Test” del menú deinicio de Windows.

Vamos a comenzar por crear un testsencillo. En nuestro caso la página Webque hemos creado simplemente mues-tra la cabecera de nuestra revista y untitular obtenido de un fichero .XML. Esevidente que el acceso a dicho archivosupone una penalización en cada peti-ción HTTP que hagamos.

El asistente de ACT nos permitecrear un test vacío o a partir de unasesión de Internet Explorer, que esnuestro caso.

Al pulsar en “Iniciar grabación” seabrirá una ventana de Internet Explorer

dotN

etM

anía

<<

31

dnm.plataforma.net<<

Escatimar en el entorno de pruebas o no controlarlo

adecuadamente puede acarrearnos desagradablesconsecuencias al poner laaplicación en producción

Figura 2

Figura 1

y comenzará la grabación de la prueba.Cuando hayamos finalizado la navega-ción necesaria para la generación denuestro test no tenemos más que pulsar“Detener” en la misma ventana y ACTcreará el script que nos permitirá repro-ducir la prueba. En ocasiones será nece-sario retocar dicho script para adaptar-lo a nuestras necesidades, pero esta tareaes sencilla con ciertos conocimientos deVBScript.

Una vez creada la prueba vamos aproceder a lanzarla contra nuestro ser-vidor, pero antes configuraremos losparámetros para simular las conexionesHTTP según nuestros deseos.

Es importante que la duración de laprueba sea lo suficientemente grandecomo para permitir que el rendimientode la máquina se estabilice. Desde elmomento en el que pulsemos “Iniciarprueba” y hasta que demos por buenoslos resultados obtenidos es extremada-mente importante no manipular elentorno con el fin de adulterar al míni-mo el fruto de nuestro trabajo.Recordemos que el mero hecho deintroducir un programa de pruebas yaestá modificando los resultados en cier-ta medida (¿alguien recuerda el princi-pio de indeterminación de Heisenbergen clase de física?)

Supongamos que esperamos muypoco tráfico hacia nuestra Web, queestará colgada en una intranet, así queponemos un servidor poco potente. Paracomenzar a evaluar el rendimiento denuestra aplicación vamos a simular 10usuarios simultáneos con una duracióndel test de 5 minutos.

Además de los informes ACT dis-pone de otra herramienta útil en nues-tra búsqueda de información: los con-

tadores de rendimiento. Estos conta-dores de rendimiento nos permitenmonitorizar los valores que alcanza undeterminado componente del ordena-dor a lo largo de la prueba y ver en quémomento cada uno de ellos ha llegadoal pico de rendimiento.

Para comprobar que el ordenadorcliente no está limitando el resultado delas pruebas añadiremos un contador derendimiento que nos indique el porcen-taje de procesador en uso a lo largo de laprueba. Sería deseable un porcentaje deuso de procesador en el ordenador clien-te inferior al 85% para asegurarnos deno tener la máquina saturada. A la horade colocar un contador de rendimientopodemos especificar el intervalo ensegundos entre mediciones. Hay quetener en cuenta que un valor muy altohará que las medidas de los contadoressean irrelevantes, mientras que un valorbajo sobrecargará el ordenador cliente,pudiendo alterar el resultado.

Ahora nos preguntamos qué ocurri-ría si un día tenemos el doble de usua-rios accediendo a nuestra página, así quepara contestar a esta duda vamos adoblar el número de usuarios simultá-neos (20) y repetimos la prueba.

Cómo analizar los resultadosTan importante o más que saber cre-

ar los test es saber interpretarlos de la for-ma adecuada. Un buen análisis de losresultados de las pruebas puede permitirextraer conclusiones interesantes sobrecómo optimizar nuestra aplicación.

Ahora que hemos ejecutado nuestrasdos pruebas tendremos almacenado un

informe por cada una de ellas listo paraser interpretado. Para ver los resultadosno tenemos más que hacer doble clickencima de cada informe. Si queremosvisualizar simultáneamente varios infor-mes podemos seleccionarlos todos. Aquíse muestran las gráficas de las dos prue-bas realizadas, mostrando en azul oscu-ro el número de peticiones totales y enazul claro el número de ellas que fueronerróneas. El gráfico de la figura 6 repre-senta la prueba con 10 conexiones simul-táneas, mientras que el de la figura 7 esel resultado de la prueba con 20 cone-xiones simultáneas.

En la primera de las pruebas hemosobtenido un promedio de 161'42 soli-citudes por segundo, mientras que en lasegunda ellas hemos obtenido 224'69.¿Es nuestro servidor capaz de soportarese número de peticiones? Me temo queno. En el caso de los 10 usuarios simul-táneos el 100% de las peticiones fueronatendidas correctamente, mientras quecon 20 usuarios sólo lo fueron el46'03%. El uso de procesador en elordenador cliente no ha excedido del70%, así que el límite se encuentra enel servidor, no en el ordenador de prue-bas. Con estos datos podemos contes-tar a la pregunta planteada anterior-

dotN

etM

anía

<<

32

dnm.plataforma.net<<

Figura 3

Figura 4

Figura 5

Figura 6

Figura 7

mente: nuestro servidor no sería capazde soportar 20 conexiones simultáneas.

Ahora bien, incluso con 10 cone-xiones, ¿cómo fue la experiencia delusuario? Este parámetro aparentemen-te tan subjetivo se puede medir median-te el tiempo medio hasta el último byte(TTLB), que es el tiempo que el usua-rio espera hasta recibir la petición porcompleto. Idealmente este parámetrose tendría que decidir antes de terminarla aplicación como una medida de laposible aceptación de la velocidad denavegación. En el caso de la primeraprueba, el valor promedio obtenido esde 4'84 milisegundos.

Otro parámetro interesante paraanalizar podría ser el tiempo medio has-ta el primer byte (TTFB), que es eltiempo entre la petición y el momentoen el que comienza a llegar la informa-ción solicitada. Esto incluye, por ejem-plo el tiempo que necesita el servidorWeb para ejecutar la página.

La diferencia entre el TTLB y elTTFB es el tiempo que tardó el servi-dor en ejecutar la página y el tiempo realde transmisión.

Existen otros parámetros que pode-mos controlar desde ACT, como usode memoria, red, disco... que podemosañadir según las variables que desee-mos analizar.

A nivel de costes podría interesarnosconocer el precio que estamos pagandopor cada una de esas conexiones. MattOdhner plantea en su estupenda presen-tación “Web services testing usingApplication Center Test” del Teched 2002una fórmula de cálculo del coste por MHz:

Donde:

En nuestro caso hemos utilizado unservidor con 1 procesador a 1.200MHz,

obteniendo 161 RPS con 10 conexio-nes simultáneas y un uso de CPU fuedel 90%, así que:

Hasta aquí hemos lanzado nuestrabatería de pruebas, hemos analizado losresultados para ver la carga que podíasoportar nuestro servidor e inclusohemos calculado el coste por MHz decada petición HTTP que atendemos.Bien, pero ¿cómo podríamos mejorar elrendimiento de nuestra aplicación? ¿laoptimización propuesta como afectaríaal rendimiento? Para contestar a estaspreguntas vamos a introducir una modi-ficación en nuestra página Web para queuse la caché de ASP.NET. Colocaremosla siguiente directiva:

De forma que la salida de la páginase almacene en caché durante 60 segun-dos. Después de esto repetimos laspruebas obteniendo los siguientes resul-tados para 10 y 20 conexiones simultá-neas respectivamente:

El número de RPS en el primercaso fue de 235'09 y de 264'10 en el

segundo, pero mientras que con 10conexiones se atendieron el 100% depeticiones en el segundo caso se aten-dieron sólo el 46'45%. El TTLB con10 conexiones fue de 8'61 mseg. Eluso de procesador se mantuvo sobreel 90%.

¿Cómo interpretamos estos resul-tados? Si nuestro objetivo es atenderel 100% de las peticiones (10 conexio-nes simultáneas) entonces el uso decaché nos ha proporcionado un aumen-to del 45% en el número de peticionesatendidas por segundo, con una ciertapenalización en TTLB. En cuanto a larelación coste de petición por MHz esahora de:

ConclusionesApplication Center Test es una

herramienta extremadamente útil paraconocer el rendimiento que propor-cionan nuestras aplicaciones Web ypara proponer y medir posibles opti-mizaciones en ellas. Si queremosextraer todo el jugo de las pruebasdebemos hacer hincapié en la defini-ción de los objetivos que hemos deperseguir. Una vez establecidos estosobjetivos disponer de un entorno ade-cuado y controlarlo durante el proce-so de test son las garantías para obte-ner medidas veraces que permitanadoptar las medidas correctoras ade-cuadas.

dotN

etM

anía

<<

33

dnm.plataforma.net<<

N Número de procesadoresS Velocidad de los procesadores

Media CPU Porcentaje medio de uso de laCPU

Media RPS Promedio de peticiones porsegundo

Coste = ( N * S * media(CPU) ) / media(RPS)

Coste = (1 * 1200 * 0'9 ) / 161 ~ 6'7 MHz

por petición HTTP

<%@ OutputCache Duration="60" Location="Server"VaryByParam="none" %>

Figura 8

Figura 9

Coste = (1 * 1200 * 0'9 ) / 235 ~ 4'6 MHz

por petición HTTP

Comparar los resultados de varias pruebas permitiráafinar el rendimiento del servidor y conocer sus

limitaciones para anticipar-nos a los problemas futuros

dotN

etM

anía

<<

34

de aplicaciones no hay nada gratui-to. Lleva tiempo averiguar qué memoria está dispo-nible, recuperarla, y devolverla al heap para su usoposterior. Las aplicaciones que utilizan adecuada-mente la memoria, aumentan el problema, forzandoal sistema a trabajar más y más frecuentemente pararecuperar memoria. Con el tiempo, este tipo de com-portamiento se traduce en debilidades y comporta-mientos incorrectos, a veces sutiles y difíciles deencontrar, que perjudican el rendimiento, y reducenla escalabilidad y la fiabilidad.

Pero hay soluciones y es cuestión de averiguar dón-de se manifiestan los problemas y por qué ocurren.Incluso en un mundo de código administrado, los desa-rrolladores pueden ayudar a evitar las dificultades y mejo-rar el rendimiento de sus aplicaciones, si comprendenlos mecanismos de gestión de memoria en .NET y cómousan la memoria las aplicaciones.

Trabajando con el garbage collectorEl garbage collector (recolector de basura), funcio-

na comenzando con las raíces, con aquellos objetosque no están embebidos dentro de ningún otro. Porejemplo, los punteros estáticos y globales son ele-mentos básicos. El garbage collector comienza por ahí,y traza referencias a otros objetos del heap, creando

un grafo de todos los objetos que son accesibles a par-tir de estos objetos base.

Cualquier objeto que no se encuentre en este gra-fo, es considerado como no utilizado y es devuelto alheap. El garbage collector realiza esta labor recorrien-do el heap e identificando los objetos que no formanparte de esos grafos; marca estas direcciones de memo-ria, y hace un seguimiento hasta que ha terminado de

Optimización de memoria en aplicaciones .NET

Microsoft .NET Framework y el Common Language Runtime (CLR) marcan un cam-bio significativo en cómo los desarrolladores construyen aplicaciones para la platafor-ma Windows. El programador se libera de la tediosa tarea del manejo de la memoriausando características de .NET que lo gestionan automáticamente: para ello, .NETFramework ubica memoria a petición y la reclama al sistema una vez que está libre.

<<

Por Peter VarholDevPartner Product ManagerCompuware Corporation

Pero en la escritura

Lleva tiempo averiguar qué memoriaestá disponible, recuperarla, y devolverla al heap para su uso

posterior. Las aplicaciones que utilizanadecuadamente la memoria, aumentan

el problema, forzando al sistema a trabajar más y más frecuentemente

para recuperar memoria.

recorrer el heap o la parte seleccionadadel mismo. Durante ese proceso, el gar-bage collector compacta el heap, de formaque la fragmentación de memoria noimpida nuevas ubicaciones de objetosdebido a la falta de espacio en bloquesde memoria grandes.

Como consecuencia, esta compac-tación deja espacio libre al comienzo delheap, donde puede ser reubicada sim-plemente moviendo el puntero del heap.De esa forma, el garbage collector no tie-ne que recorrer una lista enlazada paraencontrar bloques de memoria, de for-ma que la asignación de memoria resul-ta un proceso rápida comparado conotros lenguajes.

Por razones de eficiencia, el garbagecollector también usa un concepto llama-do generaciones (generations) para recla-mar la memoria. Hay un total de 3 gene-raciones denominadas 0, 1 y 2. Cuandolos objetos se ubican en memoria alcomienzo de la ejecución de un pro-grama, el garbage collector se refiere a estaparte del heap como generación 0. Losobjetos de reciente creación, tambiénvan a parar a esta generación 0. Estosobjetos recientes, todavía no han sidoexaminados por el garbage collector.

De forma que, lo primero que haceel garbage collector, es recorrer esta gene-ración para comprobar si puede recla-mar más memoria, y de forma más rápi-da que su tuviese que recorrer todo elheap. Si hay referencias al objeto cuan-do tiene lugar la siguiente recolección,el objeto es movido a otra zona llama-da generación 1. De esta forma, sólo unaparte del heap -aquella que es más sus-ceptible de liberar memoria- necesitaser comprobada cada vez en una estra-

tegia que mejoraenormemente elrendimiento delas recoleccionesindividuales.

A medida queel heap recibe másobjetos, se va lle-nando hastanecesitar unarecolección debasura. Cuandoel garbage collectoranaliza el heap,construye un gra-fo de los objetos

activos, y recolecta el resto. Los obje-tos que sobreviven a la recolección sonahora más antiguos y se considerancomo generación 1. El garbage collectormantiene una tabla de los objetos y decuándo fueron accedidos, para identifi-car qué objetos no han sido modifica-dos y son, por tanto, candidatos para larecolección.

Según los nuevos objetos van sien-do añadidos al montón, van pasando,como vimos a la generación 0. Cuandollega el momento de una nueva reco-lección, el garbage collector determinaqué objetos viejos han sido añadidos des-de la última recolección y compruebalas referencias a estos objetos para veri-ficar si apuntan a algún objeto nuevo.Si una raíz u objeto apunta a otro de lavieja generación, el garbage collector pue-de ignorar cualquier referencia másinterna de los objetos viejos, reducien-do así gran parte del tiempo requeridopara construir el grafo de objetos acce-sibles. Recolectar los objetos nuevos pri-mero, reduce los fallos de páginas ymejora el rendimiento por que los obje-tos nuevos se almacenan de forma con-tigua en el heap.

De la misma forma, si un objetosobrevive a la recolección de la gene-ración 1, es promovido a la generación2. Cuando tiene lugar la recolección secomprueban sucesivamente las 3 gene-raciones. Si la comprobación de gene-ración 1 libera suficiente memoria, elproceso termina. Si no, el garbagecollector continúa con la generación 1 y-a continuación, si se sigue necesitan-do- con la 2.

En la práctica, los objetos de la gene-ración 2 son los más longevos, y a menu-do no se recolectan y destruyen hastaque la aplicación no termina.

También es posible trabajar con elgarbage collector para optimizar el usode memoria mediante “referenciassutiles” (weak references). Al contrariode lo que sucede con las “referenciasfuertes” (strong references), .NETFramework puede recolectar referen-cias sutiles si la memoria es baja. Seestablece una referencia fuerte sub-clasificando e inicializando un objeto

y posteriormente aplicando una refe-rencia sutil mediante la llamada ade-cuada al Framework. Si el uso dememoria no se incrementa significa-tivamente, la referencia sutil es sufi-ciente para evitar que el objeto searecolectado. Cuando la memoria esca-see, el garbage collector puede realizarsu labor y solicitar el espacio necesa-rio.

Optimización y recolección debasura

Como puede imaginarse, el proce-so de recolección de basura requiererecursos de CPU. Tiene la ventaja demejorar significativamente la velocidadde las asignaciones de memoria respec-to a los lenguajes no administrados, ya do

tNet

Man

ía<<

35

dnm.plataforma.net<<

Por razones de eficiencia, el garbage collector tambiénusa un concepto llamado generaciones (generations)

para reclamar la memoria. Hay un total de 3 generaciones denominadas 0, 1 y 2

que simplemente tiene que asignar unbloque al comienzo del heap, y mover elpuntero de memoria a la siguiente direc-ción libre. Sin embargo, el procesopotencialmente penaliza algunas de lasventajas. Hacer el seguimiento de refe-rencias de objetos y compactar la memo-

ria lleva más tiempo que la liberaciónmanual.

Además, las aplicaciones multi-proceso complican aún más esta situa-ción. Cuando el garbage collectorcomienza a reclamar memoria, recu-pera objetos liberados y mueve el pun-tero del heap. Cuando un subprocesoinicia una recolección de basura, nin-gún otro subproceso puede acceder aobjetos. De hecho todos ellos se detie-nen hasta que concluye el proceso derecolección.

Como puede imaginarse, la reco-lección automática de memoria y elpapel del CLR modifican fundamen-talmente la manera de escribir aplica-ciones. En el pasado, el desarrolloimplicaba el movimiento de bloquesde datos en diferentes ubicaciones,manipulando sus punteros. Hoy, eldesarrollo significa procesar datos uti-lizando la creación y personalizaciónde objetos utilizando métodos paraactuar sobre los datos que esos obje-tos representan. La auténtica mani-pulación de datos en memoria (aun-que existe) está oculta al desarrolla-dor, en varias formas.

Esto quiere decir que los desarro-lladores todavía tendrán que preocu-parse acerca de la gestión de memoria,pero en formas muy distintas. En lugarde preocuparse por los detalles particu-lares de ubicación de zonas de memo-ria, se centrarán más bien en las correc-tas estrategias para su utilización.

Problemas en la gestión dememoria

Una vez que se las analiza, las activi-dades del garbage collector parecen bastan-te lógicas, pero pueden surgir varios pro-blemas al analizar los detalles. Por ejem-

plo, pequeños cambios en la implemen-tación de una solución, pueden originartremendos cambios en el rendimiento dela aplicación. A continuación analizamosalgunos de los casos más significativos.

Uno de los más típicos consiste enla creación de demasiados objetos.Como ubicar nueva memoria resultasimple en .NET, podemos olvidar queuna sencilla línea de código puede impli-car un montón de asignaciones, cosa queno será observada hasta que se requie-ra su recolección.

Algunos de estos problemas estánasociados a la creación de objetos tem-porales para la resolución de procesosde cómputo, como la creación de cade-nas temporales (para la construcciónde nuevas cadenas por adición, por

ejemplo, o para la manipulación deenumeradores).

Incluso con la estrategia del gar-bage collector pueden darse ciertos pro-

blemas. Por ejemplo, un problema quepuede darse es el de los objetos “huér-fanos”, lo que sucede con referenciasinadecuadas o con objetos que no sonborrados adecuadamente. Si uno deestos objetos está -de alguna forma-vinculado a una estructura raíz, noserá recolectado, incluso si la aplica-ción ya no lo necesita. Un ejemplo deeste tipo es cuando se coloca en cachéuna referencia a un objeto en unavariable miembro estática, y se nosolvida liberarla.

El número de objetos ubicados enel montón seguirá creciendo a medi-da que la aplicación sigue en funcio-namiento. Lo que significa dos cosas:primero, que el tiempo necesario pararealizar la recolección crecerá; segun-do, que -eventualmente- podría copartoda la memoria disponible.

Si se crea un objeto que apunta amuchos otros, se forzara al garbage collec-tor a seguir todos los punteros a esosobjetos, alargando el tiempo de la reco-lección. Esto es especialmente negati-vo en estructuras de larga duración, porque el garbage collector realizará su pro-ceso cada vez que el objeto se modifi-que.

Estrategias para la gestión dememoria

Esto significa que la gestión dememoria requiere un buen nivel decomprensión de los procesos de laaplicación, así como de la forma enque .NET Framework manipula lamemoria. Así que la construcción de

aplicaciones se convierte en una laborde balance entre los pros y contras deciertas implementaciones y la mane-ra en que afectan a la facilidad dedo

tNet

Man

ía<<

36

dnm.plataforma.net<<

También es posible trabajar con el garbage collector paraoptimizar el uso de memoria mediante “referencias sutiles”

(weak references).Al contrario de lo que sucede con las“referencias fuertes” (strong references), .NET Framework puede recolectar referencias sutiles si la memoria es baja

Los desarrolladores todavía tendrán que preocuparse acercade la gestión de memoria, pero en formas muy distintas. En

lugar de preocuparse por los detalles particulares de ubicación de zonas de memoria, se centrarán más bien

en las correctas estrategias para su utilización

manipulación, la eficiencia y la facili-dad de implementación.

¿Qué tipos de estrategias están dispo-nibles? Desde el punto de vista más sim-ple, uno siempre puede llamar al métodoCollect() de System.garbage collector,cada vez que piense que necesita realizaruna recolección de objetos. Esto sumi-nistra un método básico.

Esta estrategia es simple aunquemuchas veces no resulta óptima. Deacuerdo con el MSDN, “se debería evi-tar la llamada directa a métodos de reco-lección”, porque hacerlo así, podría ori-ginar efectos colaterales inesperados. Porejemplo, podríamos forzar una recolec-ción en un proceso que, de por sí, ya fue-se lento. Esto significa que se requiereun buen conocimiento de las técnicas yun cierto nivel de experimentación paradilucidar el momento adecuado para unarecolección manual.

La mejor estrategia es doble: com-prender cómo .NET Framework ges-tiona la memoria y tener una imagenprecisa de cómo su aplicación la usa.Puede aplicar estos dos tipos de infor-mación para diseñar, implementar ymodificar su aplicación para optimizarel uso de la memoria.

Aplicación del análisis dememoria

El problema es que se necesita cono-cer cómo se usa la memoria y cómo eseuso varía cuando se modifica el códigofuente. .NET, suministra parte de esainformación y podemos acceder a ellamediante los denominados perfmon coun-ters (contadores de rendimiento).

Los perfmon counters son útiles paraevaluar la gestión de memoria, inclu-yendo el porcentaje de tiempo quenecesita el garbage collector, los tama-ños de las generaciones, y el tamañototal del heap. Esto puede ayudar a lahora de determinar cuáles son los obje-tos de tamaño más inadecuado o lacantidad de información que se pro-cesa en las generaciones y el tamañodel propio heap.

Sin embargo, los perfmon countersa veces resultan inadecuados. Carecendel nivel de detalle que se necesita ala hora de la toma de decisiones. Nodan indicaciones del porqué el gar-bage collector toma el tiempo que toma

para realizar sus tareas, así como tam-poco indican qué objetos son tempo-rales y cuáles son de larga duración,ya que la información que suministranes sumaria, y detalla los niveles indi-viduales de utilización.

Lo que podemos utilizar en sulugar es una herramienta que puedallevar a cabo tareas de análisis con con-trol de objetos individuales en el tiem-po. Una de esas herramientas esCompuware DevPartner Studio,que incorpora todas esas capacidades,permitiendo un análisis individual ydetallado en el tiempo del comporta-miento de las aplicaciones.

Devpartner Studio, suministra tresvistas fundamentales de la memoria:RAM (memory) footprint (huellas bási-

cas en la RAM), objetos temporales, einconsistencias de memoria (memoryleaks). El primer mecanismo nosmuestra quién asignó la memoria, dequé objetos se compone, y qué com-ponentes mantienen referencias aellos. En el gráfico de la figura 1, senos muestra cómo la memoria estásiendo utilizada fundamentalmentepor objetos String. Esta situaciónpodría hacernos revisar la utilizaciónde cadenas en una aplicación, porejemplo.

Pero estas huellas básicas, tambiénsuministran información adicional.Puede observarse como la aplicación usacada vez más memoria a medida quesigue su funcionamiento. Por un sim-ple proceso de observación de la memo-

dotN

etM

anía

<<

37

dnm.plataforma.net<<

Figura 1. La vista RAM footprint nuestra dinámicamente cuánta memoria seasigna y por quién. La figura muestra el conjunto de memoria

de trabajo asignada al lanzar la aplicación.

El problema es que se necesita conocer cómo se usa lamemoria y cómo ese uso varía cuando se modifica el códi-

go fuente. .NET, suministra parte de esa información ypodemos acceder a ella mediante los denominados perf-

mon counters (contadores de rendimiento)

ria, podemos determinar qué objetosson potencialmente peligrosos. Paraello, es posible lanzar y detener ese aná-lisis de forma que podamos tomar ins-tantáneas de la situación en diferentesocasiones.

Puede utilizarse el análisis de obje-tos temporales, para hacer el seguimientode objetos temporales inusuales, o quepermanecen demasiado tiempo en lamemoria. Esos problemas son fáciles deresolver, mediante sencillos cambios enel código como cambios en la construc-ción que los origina, o el momento de sucreación.

Incluso podemos ver cuáles son losobjetos que asignan o que utilizan másmemoria, descender a un análisis demétodos y de cuántas veces son llama-dos a lo largo de un proceso, averiguardesde dónde son llamados y quién les lla-ma (ver figura 2). El gráfico de llamadassuministra una información visual de estasituación, ofreciendo una visión muy pre-cisa de la situación.

La tercera de las vistas que se ofre-cen, tiene que ver con los memory leaks,antes citados. Cuando se carga, examinadonde están ubicados tales objetos, y ave-rigua cuáles mantienen referencias, y portanto no están siendo tratados por el gar-bage collector. DevPartner Studio sigue

tales objetos y determina los que no estánsiendo liberados adecuadamente. Estainformación también puede llevarnos amodificaciones en el modo de diseño,gracias a esta ayuda.

Obteniendo lo mejor de lamemoria .NET

La migración a .NET no significaque no tengamos que preocuparnos porla memoria en absoluto. El problema esque el tipo de situaciones que se plan-tean son extrañas para la mayoría de losdesarrolladores, haciendo difícil queéstos puedan hacer el seguimiento ade-cuado de los posibles fallos que tenganlugar en las aplicaciones, a pesar delmodelo de memoria utilizado.

Hasta que no se puedan aplicar losprincipios de gestión de memoria ensu propio beneficio, las aplicacionescorren el riesgo de tener bajo rendi-miento, falta de escalabilidad y erro-res de memoria.

Pero comprenderlo no es suficien-te. Una estrategia buena para una apli-cación puede no serlo para las demás.Tiene una importancia crítica com-prender cómo se usa la memoria, tantoa nivel individual como global. Tambiénresulta esencial el estudio del uso de lamemoria y el garbage collector en el ciclode ejecución de la aplicación observan-do los cambios dinámicos y los efectosque esto tiene en el tiempo.

dotN

etM

anía

<<

38

dnm.plataforma.net<<

Figura 3. La vista de Memory Leaks muestra los objetos que son asignados así como elnúmero de instancias creadas y liberadas, permitiendo hacer

un seguimiento de los que no se liberan adecuadamente.

Figura 2. El análisis detallado de los objetos temporales permiten ver como se llama a objetos y métodos y desde dónde.

Atículo traducido por Marino Posadas

hemos tenido la oportunidad de analizar diver-sos conjuntos de funcionalidad relacionados con laseguridad de aplicaciones Web en InternetInformation Server. En las dos primeras entregashablamos de autenticación y autorización, los dos con-ceptos fundamentales de cualquier sistema de seguri-dad. Así, se explicaron los diferentes métodos de auten-ticación ofrecidos por IIS y aprendimos a limitar elacceso a los recursos del servidor Web para que sólolos usuarios autorizados pudieran hacer uso de las zonasprotegidas. Se analizó la manera de fortalecer la segu-ridad utilizando los permisos de acceso en dos puntosclave: el propio IIS y el sistema de archivos NTFS que,en última instancia, es el que decide si las aplicacionesy usuarios tienen acceso a los recursos solicitados. Unaadecuada política en este sentido es el primer paso paraconseguir un buen nivel de protección.

Por fin, en la tercera parte, se analizaron algu-nas herramientas gratuitas que elevan la seguridadde IIS, bien configurándolo mejor (IISLockdownTool, plantillas de seguridad personalizadas), bienaumentando sus capacidades de bloqueo de ataquescon una capa intermedia (URLScan).

Entretanto, algunas otras técnicas o consejosde protección de IIS que no encajaban bien enestos grupos se han quedado en el tintero, por loque trataremos de repasar las más interesantes eneste último texto.

Menos es másEste tópico alcanza su máxima validez al hablar

de la protección de sistemas informáticos. Y es quees obvio: cuántos menos elementos tengamos queproteger menores serán las posibilidades de ata-que y mayores las probabilidades de permanecerseguros.

La primera regla en este sentido es tambiénbastante obvia, pero no por ello huelga enunciar-la: “siempre que sea posible utilice los servidoresexclusivamente para una tarea”. En nuestro caso,si podemos permitírnoslo, lo único que deberíaestar funcionando en el equipo servidor deberíaser IIS y los servicios de sistema imprescindibles.Con las grandes capacidades que ofrecen los sis-temas operativos de servidor de Microsoft y alprecio que está el hardware “se ponen los peloscomo escarpias” sólo de pensarlo, pero desde elpunto de vista de la seguridad es lo más indica-do. Siempre será más fácil proteger un equipo asíque otro que además ejecute Exchange, SQLServer, sirva archivos e impresoras a la red local,etc…, con su multitud de puertos abiertos, pro-tocolos, programas que pueden fallar o tener agu-jeros de seguridad desconocidos.

Por ejemplo, IIS ofrece algunas extensiones ytipos de archivo que apenas se utilizan en las apli-caciones Web pero que siguen estando disponibles

Seguridad de Internet Information Server (y IV)

Por José Manuel Alarcón AguínASP y ASP.NET MVPkrasis.com

En las anteriores entregas de esta serie de artículos hemos tocado los grandes grupos temáticosrelacionados con la seguridad de IIS.Todavía nos quedan por ver,sin embargo,algunos que no se pue-den clasificar de forma tan clara y que vamos a tratar ahora para terminar.

dotN

etM

anía

<<

39

Hasta la fecha <<

dotN

etM

anía

para ser invocados a través de HTTP.Si hemos utilizado la utilidad IISLockdown Tool vista en la parte prece-dente, ya estarán en su mayoría desac-tivadas. En cualquier caso es convenien-te que lo verifiquemos. En concreto hayalgunas como la .HTR que apenas seutilizan en aplicaciones modernas peroson fuente de conocidos métodos de ata-que a servidores IIS y es bueno desacti-varlas. Para ello acceda a las propieda-des del servicio WWW de IIS y en lapestaña Directorio Particular, acceda a laconfiguración (Figura 1). Desde la pale-ta de asignaciones podrá retirar lasextensiones que no utilice:

• Si no utiliza la inicialización de cla-ves vía Web, elimine la asignaciónpara archivos .HTR.

• Si no usa las plantillas del conec-tor de datos de Internet (IDC, unatecnología muy primitiva más anti-gua incluso que ASP y que nadieutiliza ya), quite IDC.

• Si no emplea archivos de inclusióndel lado del servidor puede retirarlas asignaciones siguientes: .STM,.SHTM y .SHTML.

• La impresión por Internet se uti-liza en pocas ocasiones. Si este essu caso elimine la asignación para.PRINTER.

• Si tiene instalado Index Serverpara búsqueda de documentos víaWeb, y no lo va a utilizar, desins-tálelo y/o elimine las asignacionespara los archivos .HTW, .IDA e.IDQ.

Los subsistemas de Windows

Como seguramente le resultaráconocido Windows NT/2000/2003ofrece varios subsistemas que permitenemular diferentes entornos de ejecuciónpara los procesos. El subsistema másimportante es Win32, ya que es en elque se ejecutan todas las aplicacionesescritas específicamente para Windows.Sin embargo existen otros, como VirtualDos Machine (VDM) para emular MS-DOS, WOW (Windows On Windows,para ejecutar aplicaciones antiguas deWindows de 16 bits), OS/2 y tambiénPOSIX (Portable Operating SystemInterface for Computing Environments, unconjunto de interfaces estándar mante-nidas por el IEEE e influenciadas enor-memente por las premisas de los siste-mas operativos UNIX). Los dos últimoses casi seguro que no los va a utilizarnunca, así que puede proceder a elimi-narlos y restar así un punto débil másde su sistema servidor.

Hacerlo no es una tarea directa perose puede conseguir con unos pocospasos que implican tocar el registro yeliminar algunos archivos si tiene estossubsistemas instalados (tenga cuidado alrealizar este tipo de operaciones):

• Elimine los archivos os2.exe,os2ss.exe y os2srv.exe ubicados enlos directorios %systemroot%\sys-tem32\dllcache y %systemroot%\sys-tem32.

• Elimine la carpeta %systemroot%\system32\os2.

• Para el subsistema POSIX borrelos archivos psxss.exe, psxdll.dlly posis.exe dentro de system32.

• Elimine las siguientes claves delregistro de configuraciones conregedit.exe:

Si estamos seguros de no necesitartampoco los subsistemas WOW oVDM, podemos eliminarlos de lasiguente manera:

• WOW: suprima ntvdm.exe ykrnl386.exe. Borre la clave delregistro HKLM\System\Current-ControlSet\Control\WOW.

• VDM: basta con eliminar losarchivos ntio.sys, ntdos.sys ycommand.com.

Cuidado con esto último no vaya aser necesario el uso de algún programaantiguo.

Es posible que actúe el sistema pro-tector de archivos del sistema, restau-rando los archivos que se hayan borra-do. Si es así inténtelo desde el modoVGA (o modo a prueba de fallos) odesde la consola de recuperación.

Retoques en el registro queayudan a la seguridad

La mayoría de los ataques a servido-res, independientemente de su sistemaoperativo, comienzan por la recopila-ción de toda la información posiblesobre el objetivo, un trabajo éste bas-tante laborioso que implica el uso dediversas técnicas de interrogación de sis-temas y enumeración. Un dato muyinteresante a la hora de planificar el ata-que a un sistema Windows es, sin duda,la lista de cuentas de usuario, con susnombres, veces que se han utilizado ydemás. Esta información es sencilla deconseguir con herramientas automati-zadas al alcance de cualquiera, y si nosvemos necesitados, incluso usando la

<<

40

dnm.servidores.iis<<

Figura 1.Conviene eliminar todas aquellas asignaciones de ejecuciónrelacionadas con extensiones que no vamos a utilizar.

HKLM\System\CurrentControlSet\Control\Session Manager\Environment\OS2LibPath

HKLM\System\CurrentControlSet\Control\Session Manager\Subsystem\Optional

HKLM\System\CurrentControlSet\Control\Session Manager\Subsystem\OS2

HKLM\System\CurrentControlSet\Control\Session Manager\Subsystem\Posix

línea de comandos. Si disponemos deNetBIOS habilitado sobre TCP/IP y elcortafuegos no limita el acceso a travésde este medio la información se consi-gue en pocos segundos. Esto es hastacierto punto frecuente encontrárselo enalgunas empresas que tienen un servi-dor conectado directamente a Internet,y de todos modos siempre existe la posi-bilidad de sufrir un ataque interno porlo que todo lo que podamos poner denuestra parte para que esto sea inviable,mejor que mejor.

La técnica favorita para enumerareste tipo de información consiste en uti-lizar la archiconocida sesión nula deadministración de Windows. Se puedeeliminar la posibilidad de establecersesiones nulas estableciendo la siguien-te clave del registro: HKLM\System\CurrentControlSet\Services\LanManServ

er\Parameters\RestrictNullSessAccess

para que tome el valor 1. Si se estable-ce el mismo valor en la clave: HKLM\System\CurrentControlSet\Control\

LSA\RestrictAnonymous se impedirá laenumeración de cuentas de usuario aúnsin haber restringido el establecimien-to de sesiones nulas. Ambos ajustes sonmuy recomendables en servidores deproducción.

Otra fuente posible de problemas deseguridad son los recursos compartidospara administración que Windows creapor defecto. Éstos tienen el mismo nom-bre que las unidades de disco disponiblesen el sistema seguidas por el símbolo deldólar (C$, D$, etc…). Al modificar una cla-ve del registro se pueden eliminar auto-máticamente sin necesidad de ir hacién-dolo uno a uno, evitando además que sur-jan nuevos recursos de este tipo si mástarde se agregan nuevas unidades. La cla-ve a tocar es HKLM\SYSTEM\Current-ControlSet\Services\lanmanserver\para

meters\AutoShareServer, y el valor ade-cuado que elimina los recursos compar-tidos del sistema es 0.

Otro punto conflictivo que ya secomentó es la impresión a través deInternet. Aunque la desactivemos usan-do la herramienta de administración deIIS, es posible que al reiniciar el equi-po tras una tarea de mantenimiento oalgo similar, de forma inadvertida sevuelva a activar el servicio. Esto puededeberse a una política de grupo mal con-

figurada por defecto. Para asegurarnosde que no ocurre y de que la impresiónpor Internet no se vuelve a activar demanera inadvertida podemos establecerla clave HKLM\Software\Policies\

Microsoft\Windows NT\Printers\Di-

sableWebPrinting\DisableWebPrinting

para que contenga el valor 1.

Ataques DoS y el registroSaltarse la seguridad no se refiere

exclusivamente a entrar sin permiso enun sistema. Si un atacante fuese capaz deimpedir de algún modo que el servidorhaga su función estará dañando grave-mente nuestros intereses y para ello nor-malmente no es necesario saltarse losmecanismos de autenticación y autori-zación. A este tipo de ataques se les deno-mina DoS (Deny of Service), o ataques dedenegación de servicio. Normalmente serealizan utilizando dos técnicas:• Ataque por inundación con SYN:

se envían multitud de peticiones SYNal servidor que luego no se contestan,dejando a éste con los recursos reser-vados en espera de una respuesta quenunca llegará. Si se consigue que elservidor reserve los recursos suficien-tes a base de peticiones engañosasmasivas de este estilo, llegará un pun-to en el que se quede sin recursos paraatender a las peticiones legítimas,obteniendo el estado de denegaciónde servicio buscado.

• Ataque distribuido para denegaciónde servicio (DDOS): esta técnicaconsiste, grosso modo, en un refina-miento de la anterior que utiliza amiles de ordenadores de Internetcomo espejos en los que reflejar peti-ciones SYN hacia un único servidorobjetivo, amplificando enormementeel efecto del ataque. En este caso ade-más es más difícil parar el ataque yaque se magnifica mucho su capacidady además es casi imposible detectarquién es el verdadero instigador delmismo, puesto que no lo realiza direc-tamente sino a través de ordenadores“zombies”.

La implementación de TCP/IP deWindows trata de proteger al sistemade este tipo de ataques disminuyendo eltiempo que es necesario que transcurraentre una petición y su correspondien-

te respuesta para darla por inválida y porlo tanto liberar los recursos asociados.La clave del registro de configuracionesque controla este comportamiento es:HKLM\System\CurrentControlSet\Service

s\Tcpip\Parameters\SynAttackProtect.Su valor por defecto 0, es adecuado paracondiciones normales. Si le asignamosel valor 1 las conexiones se liberan antestodavía y la protección ante ataquesSYN es mejor. El valor 2 refuerza másaún la protección porque, aparte de dis-minuir más el tiempo de liberación,limita ciertas opciones de los sockets.

Seguridad concerniente a lasaplicaciones

En ciertos ámbitos técnicos existeuna gran obsesión con la seguridad delas comunicaciones y de los sistemas deterceros, pero al mismo tiempo se olvi-da por completo la seguridad del pro-pio código. En demasiadas ocasiones setiende a pensar que por tener un carísi-mo cortafuegos, sistemas de detecciónde intrusos, etc… se está muy bien pro-tegido. Aunque desde luego es funda-mental tener controlados estos aspec-tos, igual de crucial es escribir códigocon las garantías suficientes de calidadque eviten que la seguridad, finalmen-te, se vea comprometida en la propiaaplicación que con tanto esmero está-bamos protegiendo debido a técnicas deprogramación pobres e inadecuadas. Alo largo de mi vida profesional me heencontrado (y me seguiré encontrandosin duda) con aplicaciones que utilizanInternet como medio de comunicación

dotN

etM

anía

<<

41

dnm.servidores.iis<<

Figura 2.N-Stealh (nstalker.com) contemplamás de 20.000 ataques y vulnerabilidades de

los servidores Web más importantes, eincluso nos ayudará a probar nuestros

cortafuegos e IDS.

y que son gravemente vulnerables, apesar de la encomiable labor de losadministradores de sistemas que ha pro-tegido las comunicaciones y los servi-dores a la perfección. He de confesarque yo mismo he cometido errores deesta índole en aplicaciones desarrolla-das hace años, con menos experiencia amis espaldas. Aparte de una buena edu-cación en seguridad de aplicaciones yun código pensado desde el inicio conla seguridad en mente y revisado des-pués desde esta misma perspectiva, noestá de más que los administradores dered echen una mano por si, aún así, sele escapa alguna verificación a los pro-gramadores.

Existen multitud de aspectos que sedeben controlar dependiendo del tipo de

aplicación que estemos escribiendo: des-de desbordamientos de buffer hasta posi-bles problemas de canonización de cade-nas, pasando por los tan manidos ataquesde inyección SQL o Cross Site Scripting.

Aparte de estas técnicas fundamenta-les que es preciso conocer, siempre hayque estar al tanto de cuestiones que nospuedan afectar en el código indirectamen-te. Por ejemplo, la mayor parte de las apli-caciones deben hacer uso de un sistemagestor de bases de datos. Muchas veces elmétodo utilizado para comunicarse conestos sistemas es usando un controladorODBC. Esto es especialmente frecuentecuando no hay un verdadero gestor dedatos detrás, sino que se utiliza una basede datos Access o similar. Lo que muchosprogramadores no saben es que es posi-ble encadenar comandos de MS-DOSdentro de consultas enviadas a través de

ODBC a Access. Ello se debe a que el con-trolador JET para ODBC contiene unintérprete de expresiones VBA que faci-lita mucho ciertos trabajos de programa-ción con los datos, pero que es un peligrode seguridad si no verificamos desde elcódigo las consultas que se envían.

Por fortuna el controlador ODBCpara Jet tiene un modo de ejecución segu-ro que evita que los comandos peligrosostengan efecto (este tipo de modos de ais-lamiento se suelen denominar genérica-mente Sandboxes, “patios de juegos”). Paraentrar en este modo basta con asignar elvalor 3 a la clave del registro: HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\eng

ines\SandboxMode puede sustituir el valor“4.0” por la versión del controladorODBC que tenga instalado. Si dispone devarias versiones instaladas es suficiente conque ajuste la mayor de ellas. Si no existela clave Sandbox puede crearla manual-mente.

En el artículo de la Knowledge Basede Microsoft, Q239104 - Jet ExpressionCan Execute Unsafe Visual Basic forApplications Functions, accesible en:http://support.microsoft.com/default.aspx?scid=KB;en-us;q239104, se muestran ejem-plos de este comportamiento y se dainformación mucho más detallada de losposibles valores de esta clave del regis-tro y de sus efectos. Es una lectura muyrecomendable si trabajamos con JETsobre ODBC.

Huelga decir a estas alturas que cual-quier cambio que haga en el registro esnecesario que lo compruebe suficiente-mente en un servidor de pruebas antesde decidirse a hacerlo en la máquina deproducción. A veces estos ajustes pue-den tener implicaciones secundarias queno se evidencian en primera instancia.

Compruebe su propia seguridadPor fin, tras estos cuatro meses de

estudio sobre seguridad de IIS, sólo nosresta verificar que todo el trabajo realiza-do no ha sido en vano. Si de veras le pre-ocupa la seguridad y ha seguido las técni-cas y consejos explicados en estos artícu-los le resultará interesante ponerse en lapiel de un posible atacante e intentar com-prometer usted mismo sus propios siste-mas. Es un ejercicio interesante y muydidáctico, que ayuda a fijar los conceptos

aprendidos. Existe en el mercado unaamplia bibliografía sobre seguridad y ata-ques a sistemas que vale la pena leer.También se pueden encontrar en Internetcantidad de herramientas (gratuitas ycomerciales) de ataque de sistemas que, aligual que están accesibles para usted tam-bién están al alcance de cualquier crackeraburrido. Conviene que se haga con algu-nas de ellas y las utilice para atacar sus pro-pias máquinas y verificar así que las estáprotegiendo como es debido. En las figu-ras que ilustran este texto puede ver algu-nas de ellas en acción.

Por fin, aunque su trabajo sea exclu-sivamente de programador, no está demás que se suscriba a listas de correoelectrónico sobre seguridad y sistemas.Son una herramienta de inestimableayuda a la hora de mantenerse al día eneste cambiante mundo. No se duermaen los laureles: cada día parecen nuevosagujeros de seguridad y técnicas de asal-to a sistemas. Le conviene conocerlaspara poder protegerse de ellas.

En resumenEn estos cuatro capítulos hemos inten-

tado proporcionar la información másinteresante relacionada con la protecciónde Internet Information Server. Para ellohemos tocado las facetas teórica y prácti-ca de la configuración segura del servidor,y hemos repasado algunas de las herra-mientas que complementan en este sen-tido a las propias características de segu-ridad del producto. Esperamos que lehayan resultado de interés y que, sobretodo, le ayuden en su trabajo, que es loque al final cuenta.

dotN

etM

anía

<<

42

dnm.servidores.iis<<

Figura 3.X-Scan (xfocus.org) no es tan potentecomo N-Stealh pero tiene gran interés, porquecomplementa los análisis del servidor Web con

otro tipo de informes:NetBIOS, rastreo depuertos, vulnerabilidades de servidores de

correo y de SQL Server, etc…

Figura 4.A través del análisis de los registros deacceso (logs) de IIS es posible detectar intentosde ataque mediante peticiones HTTP e incluso

detectar ataques exitosos que habían pasadoinadvertidos.Herramientas como

Logs2Intrusions (trsecurity.net) o Cyclops(nstalker.com) pueden resultar de mucha utilidad.

dotN

etM

anía

<<

43

Al generalizar los tipos en estilos podremos ver ele-mentos comunes entre los primeros, que es una de lasactividades a la que se aplica cualquier disciplina cuan-do quiere sacar conclusiones un poco más genéricas quelas que podría deducir al analizar sólo casos particulares.

Para comenzar, los autores aclaran que utilizan trestérminos como equivalentes: patrón de arquitectura, modis-mo arquitectónico (architectural idiom) y estilo arquitectóni-co, y presentan 5 de estos estilos:

De esta forma, es evidente que un estilo arquitectó-nico define una familia de sistemas en términos de unpatrón de organización estructural. En particular, deacuerdo a los autores, un estilo arquitectónico definetanto un vocabulario de tipos de componentes y conec-tores -como en el caso de filtros y tubos- como un con-junto de restricciones sobre cómo combinar esos compo-nentes y conectores. Veamos algunos de estos estilos:

Una de las metáforas utilizadas para el nombre -fil-tro- no es quizás muy adecuada, porque sugiere que losque ocurre dentro del proceso es retener algunos de losdatos y dejar pasar a otros, cuando lo que pasa en rea-lidad es una verdadera transformación de los datos deentrada. La descripción realizada para este tipo de esti-lo es que cada componente tiene un conjunto de entra-das y un conjunto de salidas; cada componente leecorrientes de datos en sus entradas y produce corrien-tes de datos en las salidas. Normalmente esto se pro-duce aplicando una transformación local a las corrientes

Algunos tipos de arquitecturas

Por Manuel ImazConsultor [email protected]

Estilos arquitectónicos<<

Después de habernos detenido en nuestros dos artículos anteriores en los funda-mentos del concepto de arquitectura de software (ver números de agosto y septiem-bre) podemos ir viendo algunos tipos de arquitectura, tratando de agrupar esos tiposen conjuntos a los que podamos asignar cierto nivel de generalización como los quemuestran Mary Shaw y David Garlan en su clásico libro Software Architecture (1996).

Sistemas de flujo dedatos Máquinas virtuales

Secuencial en lote Intérpretes

Tubos y filtros Sistemas basados en reglas

Sistemas de llamada yretorno

Sistemas centrados enlos datos

Programa principal ysubrutina Bases de Datos

Sistemas orientados alobjeto Sistemas de hipertexto

Capas jerárquicas Pizarras

Componentes independientes

Procesos comunicativos

Sistemas de eventos

Figura 1. Estilo de tubos y filtros

dotN

etM

anía

<<

44

dnm.arquitectura<<

de entrada y realizando una computaciónincremental, de tal manera que la salidacomienza antes de haberse consumidotoda la entrada.

Esto en cuanto a la organización, perosi consideramos las restricciones -en par-ticular las invariantes- del estilo, es que losfiltros deben ser entidades independien-tes, es decir ninguna depende del estadoo condiciones de ninguna otra. Otra inva-riante importante es que los filtros noconocen la identidad de los otros, ya seananteriores o posteriores en la cadena detransformaciones. Las especificaciones serestringen a lo que aparece en las corrien-tes de entrada, o a garantizar lo que se pro-ducirá como corrientes de salida, peronunca podrán identificar lo que hay al finalde estos tubos de entrada y salida.

Otro estilo importante es el de abs-tracción de datos u orientación al objeto,dentro del grupo de los denominados dellamada y retorno. Los componentes deeste estilo arquitectónico son los objetos-también considerados originalmentecomo instancias de tipos abstractos dedatos, aunque ahora diríamos clases-. Losobjetos son ejemplos de un tipo de com-ponentes que algunos llaman gestor por-que es responsable de preservar la inte-gridad de un recurso, es decir la repre-sentación. Los objetos interactúan a tra-vés de invocaciones de funciones y pro-cedimientos.

Hay dos aspectos importantes en rela-ción con este estilo: 1) Un objeto es res-ponsable de preservar la integridad de surepresentación (normalmente, mante-niendo algún invariante de la misma) y 2)La representación permanece oculta res-pecto de los demás objetos.

Patrones arquitectónicosYa se habrá percibido a lo largo de

estos artículos la variedad de denomina-

ciones y -sobre todo- la dificultad paracompartir las definiciones sobre arqui-tectura. En la sección anterior vemos lapropuesta de llamar a los estilos patrones,pero optaremos por reservar este térmi-no a algo que está en un nivel distinto delo que llamamos estilos. Si tuviéramos querelacionar el estilo con algo, podríamosdecir que está vinculado a la forma másgeneral en que está organizado un siste-ma de software, independientemente deconsideraciones más específicas (los tiposde objeto que estamos considerando, porejemplo). En el ejemplos anterior, pode-mos describir el estilo mostrando entida-des genéricas llamadas objetos, y no nosinteresa saber a qué tipos de datos abs-tractos o clases pertenecen.

De esta manera, el estilo está asocia-do a formas generales de organización -sistemas orientados al objeto- mientrasque los patrones estarán asociados a for-mas más concretas, que tienen que ver conla especialización que adoptan los objetosy clases de acuerdo al tipo de aplicación oentorno tecnológico, a técnicas conocidaspor su eficiencia para resolver ciertos pro-blemas, etc.

Por ejemplo, pensando que el entor-no de ejecución de una aplicación pue-de estar distribuido en distintos elemen-tos -nodos- es aconsejable y beneficiosodescomponer la aplicación en capas,correspondientes a los nodos dondepodría tener que ejecutarse. Los benefi-cios de dicha descomposición son varios,entre los cuales se mencionan: 1) Se pue-de comprender una capa como un todocoherente, sin necesidad de conocer lasrestantes; 2) Se puede sustituir una capacon implementaciones alternativas de losmismos servicios básicos; 3) Se minimi-zan las dependencias entre las capas; 4)Las capas son un buen sitio para la estan-darización y 5) Una vez implementadauna capa, se la puede utilizar para muchosservicios de alto nivel.

La descomposición más habitual -esdecir el patrón usualmente empleado- esdividir la aplicación en tres capas: 1)Lógica de presentación, que se ocupa detoda la interacción entre el usuario y elsoftware, pudiendo tratarse de un siste-ma de menús muy simple o una interfazgráfica de usuario relativamente com-pleja; 2) La lógica del dominio, tambiénconocida como la lógica de negocio, que

es todo lo que necesita conocer la apli-cación para poder trabajar con el domi-nio en cuestión. Implica realizar cálcu-los basados en datos de entrada o alma-cenados, validación de cualquier datoproveniente de la capa de presentación yla ejecución de algoritmos específicos enfunción de los comandos de la presenta-ción; y 3) La lógica de fuente de datos, quese ocupa de comunicarse con otros sis-temas que se encargan de tareas en repre-sentación de la aplicación. Estos puedenser monitores de transacciones, otras apli-caciones, sistemas de mensajes, etc.

Otro ejemplo de patrón arquitectóni-co podría ser el de Módulo Tabla, uno delos múltiples patrones presentado porMartin Fowler en “Patterns of EnterpriseApplication Architecture” (2003). El enfo-que tradicional de la orientación al obje-to está basado en objetos que tienen unaidentidad. Es decir que si tenemos unaclase Empleado, cualquier instancia de lamisma corresponde a un empleado parti-cular. Este esquema funciona bien porqueuna vez que tenemos una referencia a unempleado, podemos ejecutar operaciones,seguir relaciones y recoger informaciónsobre el mismo.

Pero uno de los problemas con estemodelo es la interfaz con las bases de datosrelacionales. En muchos casos este enfo-que se asemeja al del pariente loco, quevive encerrado en un ático y del cual nadiequiere hablar: con frecuencia este enfo-que requiere un trabajo considerable deprogramación para llevar los datos y extra-erlos de la base de datos y transformarlosa otro tipo diferente de representación.

La ventaja de este patrón es que orga-nizamos la lógica del dominio con sólouna clase por tabla de la base de datos, yaque una única instancia de la clase con-tiene los diversos procedimientos que seaplicarán a los datos. La diferencia fun-damental con un esquema clásico -llama-do también Modelo de Dominio- es que, sitenemos varios pedidos, este último mode-lo empleará un objeto por cada pedido,mientras que el Módulo Tabla tendrá sóloun objeto para manejar todos los pedidos,con lo cual aumentamos la granularidadde los objetos de la aplicación.

Como hemos podido ver, la diferen-cia entre los estilos y patrones arquitec-tónicos está en el nivel de abstracción enel que nos movemos. Los estilos se apli-

Figura 2.Tipos abstractos de datos y objetos

dotN

etM

anía

<<

45

dnm.arquitectura<<

can a un nivel muy alto de abstracción, enel cual no interesa saber cuál es la semán-tica de los elementos que estamos utili-zando, sólo hablamos de filtros, tubos uobjetos sin interesarnos por lo que estánrepresentando. En el caso de los patrones,tenemos en cuenta el significado de losfiltros, tubos u objetos, tal como hemosvisto en los patrones de descomposiciónen capas -en el que se habla de presenta-ción, dominio de aplicación y de datos- oen el de Módulo Tabla, que diferencia entreun objeto que representa un elemento -una línea de una tabla o registro- u otroobjeto que representa la totalidad de latabla.

Otro aspecto importante que men-ciona Fowler -pero que adjudica aRalph Johnson- es que la arquitecturaes algo subjetivo, una comprensión com-partida del diseño de un sistema por par-te de los desarrolladores de un sistema.En general, esta comprensión compar-tida está expresada en términos de losprincipales componentes del sistema yde sus interacciones. Pero es tambiénsobre las decisiones, en especial aque-llas que deben tomar correctamente alprincipio del proyecto porque se las con-sidera difíciles de cambiar. Este com-ponentes de subjetividad se debe alhecho de que si algo resulta más fácil decambiar de lo que imaginábamos alcomienzo, deja de ser una decisiónarquitectónica o sobre la arquitectura.

Arquitecturas orientadas aservicios

Hasta ahora nos hemos centrado enla aplicación, considerándola como unaunidad de ejecución de un procesadoro -cuando la visión se amplía y la dis-tribuimos entre nodos- un grupo deprocesadores. Por eso también tenemosque considerar patrones arquitectónicospara que esa descomposición sea ade-cuada y eficiente en función de los fac-tores considerados.

Pero el concepto de aplicación sigueampliándose, ya no se reduce a un grupohumano que interactúa con el softwaredentro de los límites de la empresa u orga-nización. La Web nos ha conducido ageneralizar lo que en un origen estaba enalgún nodo corporativo y a pensar quealgunos de los componentes de la aplica-

ción pueden estar donde sea más rentableo adecuado que estén. Si necesitamos acce-der a algún sitio de la Web para poder eje-cutar nuestra aplicación, diremos que esta-mos utilizando un servicio de Web.

Algunas definiciones genéricas queencontramos en la Web nos plantean queun servicio de Web puede ser incluso elFTP (File Transfer Protocol), que se podíaacceder en los 1990 sólo desde un coman-do Unix, pero que desde 1995 podía acce-derse desde un navegador Web. Esto sedenominaba una “evolución” de los ser-vicios Web y todavía no tenían nada quever con el uso de XML.

Si nos obligaran a resumir este con-cepto, podríamos decir que un servicioWeb es “una función de negocio auto-contenida que opera en Internet”. Enalgunos sitio de la Web (http://www.servi-ce-architecture.com) se considera que los ser-vicios son lo que conectamos utilizando losservicios Web, Un servicio es el puntofinal de una conexión. Además, un servi-cio tiene algún tipo de sistema de com-putación subyacente que soporta la cone-xión ofrecida. La combinación de servi-cios -internos y externos a la organiza-ción- configura una arquitectura orientadaa servicios.

Al ser más compleja la coordinaciónde todos estos servicios para obtener comoresultado una aplicación, también es nece-sario apelar a conceptos -metáforas- uti-lizados en actividades de coordinación deconjuntos: coreografía y orquestación. Ytambién es cierto que aparecieron es eseorden.

El W3C creó un grupo de trabajo conla intención de desarrollar un estándarpara describir los vínculos y patrones deuso entre los servicios de Web. El grupoconsidera a la coreografía un equivalentede los conceptos de orquestación, de cola-boración, coordinación, etc.

Por otro lado, la orquestación es consi-derada como la coordinación de eventosde un proceso, también superponiéndo-se con el concepto de coreografía. La orques-tación dirige y gestiona el ensambladosobre demanda de múltiples servicioscomponentes para crear una aplicación oproceso de negocio compuesto. Laorquestación tiende a ser consideradacomo una única fuerza coordinadora,mientras que la coreografía también seaplica a una coordinación compartida através de múltiples sistemas autónomos.

La tendencia actual -después de haber-se evaluado varias especificaciones en com-

petición- está convergiendo en conside-rar la propuesta conjunta de IBM-Microsoft-Bea como especificaciónBPEL4WS (Business Process ExecutionLanguage for Web Services) como el están-dar principal para la orquestación de losservicios Web.

Es decir que no sólo se trata de laorganización en componentes y sus vin-culaciones, de añadir incluso las deci-siones más importantes, sino que a par-tir de ahora se trata de una coordina-ción compleja de eventos para lograr unresultado en el que se integran serviciosque están distribuidos en diversos sitiosde la Web (la propia instalación de laempresa, la de sus clientes, proveedoresy partenaires) junto a las propias inter-venciones de los usuarios en un todo -proceso de negocio genérico- que com-bina servicios de software y accioneshumanas.

En el nuevo modelo de empresa ágily eficiente, el software deberá imple-mentarse como componentes para unafácil reutilización y adaptación a las arqui-tecturas orientadas a servicios. La orques-tación es una lógica de negocio quesecuencia, coordina y gestiona conver-saciones entre servicios Web.

El estilo está asociado a formas generales de organización -sistemas orientados al objeto- mientras que

los patrones estarán asociados a formas más concretas

de desarrolladores Borland celebrada amediados de septiembre en San José, California, sehabló por primera vez oficialmente en sociedad deDelphi 2005, la nueva versión de Delphi que esta-rá en el mercado a partir de noviembre o diciembrede este año y que pretende ser una versión revolu-cionaria del producto (la versión definitiva, a decirde sus creadores), pues integra dentro de sí toda unaserie de características que anteriormente formabanparte de productos diferentes, y además incluye unagran cantidad de novedades que sin duda serán bienrecibidas por la fiel comunidad de programadoresde Borland.

Con esta versión se pone broche de oro a unadécada durante la que se han venido sucediendo ver-siones cada vez más potentes del producto, desdeque la primera versión (aún para Windows 3.1) apa-reció en el mercado en 1995. De lo que ha signifi-cado Delphi para el mundo del desarrollo del soft-ware habla claramente el hecho de que los princi-pios fundamentales en los que se basaba ya aquellaversión -un lenguaje orientado a objetos y una filo-sofía de desarrollo visual basado en componentesreutilizables- constituyen hoy los pilares en los quese apoyan los sistemas de programación más popu-lares, incluyendo Visual Studio .NET.

Este artículo describe las principales caracterís-ticas que incorporará el nuevo producto, según loque hemos podido comprobar personalmente “jugan-do” con la versión de evaluación que ha llegado anuestras manos y escuchar de primera mano de suscreadores.

Presentación del productoLo primero que salta a la vista de Delphi 2005 es

su voluntad integradora, pues incluye bajo un únicoentorno de desarrollo la posibilidad de crear softwaretanto para Win32 (dando así continuidad a Delphi 7)como para .NET Framework, utilizando en este últi-mo caso como lenguajes de programación el tradicio-nal Delphi (extendiendo la herencia de Delphi 8 para.NET) o C# (lo que antes se ofrecía como un produc-to independiente, Borland C# Builder). O sea, que elproducto al que nos enfrentamos es la materializaciónde la idea de un único Borland Developer Studio (BDS)a la que ya apuntaba la estructura de directorios de lasversiones actuales de los productos para .NETFramework. Cabe esperar que en un futuro no lejanose incorporen a ese entorno unificado más lenguajes,como C++ Builder (versión VCL) o el mismísimoVisual Basic .NET.

dotN

etM

anía

<<

46

Novedades en Delphi 2005

En la conferencia <<

Lo primero que salta a la vista de Delphi 2005 es su voluntad integradora, pues incluyebajo un único entorno de desarrollo la posibilidad de crear software tanto para Win32como para .NET Framework,utilizando como lenguajes de programación Delphi o C#.

Por Octavio HernándezC# .NET MVPGrupo Danysoft

Figura 1. Las personalidades de Delphi 2005

dotN

etM

anía

<<

47

dnm.laboratorio.net<<

Durante la instalación de Diamond-back (el nombre de guerra bajo el que seha conocido el producto hasta ahora), elusuario tiene la posibilidad de elegir una omás personalidades o perfiles de trabajo,según muestra la figura 1.

La instalación del producto, basada enla tecnología MSI, es bastante similar a lade las versiones anteriores de los produc-tos de desarrollo de Borland, si bien aho-ra es obligatoria la instalación previa dediversos prerrequisitos externos, entre losque se encuentra el .NET Framework 1.1,puesto que el nuevo entorno integrado sebasa en código manejado.

La apariencia inicial del entorno dedesarrollo una vez instalado el producto semuestra en la figura 3. Se trata de un entor-no altamente configurable, repleto de carac-terísticas que permiten elevar la producti-vidad, y que al mismo tiempo respeta lascombinaciones de teclas, estructuras demenú, etc. de versiones anteriores, de modoque los usuarios puedan adaptarse a él fácil-mente y adecuarlo a sus preferencias.

¿Qué tipos de proyectos se puedendesarrollar con Delphi 2005? Práctica-mente todos los tipos de proyectos quepodían crearse con las versiones prece-dentes de los productos incorporados a lasuite, tanto en el caso de proyectos paraWin32 como para .NET Framework, apli-caciones de escritorio como aplicaciones oservicios web, o componentes reutilizables.Un vistazo al nuevo Almacén de Objetos(figura 4) nos convencerá de ello.

A continuación, comentaremos bre-vemente las principales novedades queincluirá Delphi 2005, que hemos agrupa-do en categorías relacionadas. Los usua-rios actuales de Delphi 7 y 8 encontraránaquí materializadas muchas de las suge-rencias que han venido haciendo duran-te los últimos dos años al fabricante.

Novedades en el entorno de desarrollo

Bajo este punto hemos clasificado adiversas características que se han aña-dido al entorno de desarrollo y que engeneral son aplicables a todas las perso-nalidades incluidas en Delphi 2005.

Refactorización y otras posibi-lidades de mejoramiento delcódigo fuente

La refactorización es uno de los términosmás populares en el mundo del desarrollo

en la actualidad. Bajo este término se aglu-tina a todo un conjunto de técnicas dirigi-das a modificar de un modo automático osemiautomático el código fuente de un pro-yecto para mejorar su calidad (arquitectu-ra, estructura, claridad). Delphi 2005 ofre-ce varios tipos de refactorización, entre losque se encuentran:• Extraer método. Este asistente permite

convertir un conjunto de líneas de códi-go fuente seleccionadas en un métodoindependiente, mejorando así la estruc-tura del código. Un sofisticado análisisde flujo permite al asistente determinarqué parámetros de entrada o salida debe-rán asociarse al método.

• Declarar variable. El análisis sintáctico “alvuelo” del código fuente permite ahoradetectar el uso de variables no declara-das, y seleccionando la opción corres-pondiente, Delphi 2005 nos sugerirá elnombre y tipo de la variable a declarar einsertará para nosotros la declaración enel lugar correspondiente.

• Extraer cadena de recursos. Este asistentepermite extraer las cadenas de caracteres“cableadas” en el código fuente hacia unfichero de recursos para simplificar laposterior internacionalización o locali-zación del código.

• Renombrar. La capacidad de renombrarun identificador a lo largo de todo unproyecto (que puede incluir módulosescritos en diferentes lenguajes) es otraposibilidad que ayuda a mejorar la legi-bilidad y mantenibilidad del código. Otranueva característica relacionada con éstaes la conocida como edición síncrona: alcambiar el nombre de una variable, auto-máticamente cambian todas las apari-ciones de ese identificador en el bloquede código seleccionado.

Mejoras generales en el entorno

Entre las numerosas mejoras, destaca-remos que varias ventanas del entorno inte-grado (por ejemplo, el Gestor de Proyectos,la Paleta de Componentes, el Diseñador VCL,

Figura 2.La instalación deDiamondback

Figura 3.El entorno de desarrollo(apariencia inicial)

Figura 4.El Almacén de Objetos deDelphi 2005

el Panel de Estructura) han mejorado nota-blemente en apariencia y funcionalidad conrelación a Delphi 8. La tecnología ErrorInsight permite subrayar instantáneamen-te los errores en el código fuente, mientrasque Help Insight permite que al posar elratón sobre un identificador cualquiera semuestre una pequeña ventana emergentecon información asociada al símbolo encuestión.

Histórico de versiones delcódigo fuente

Delphi 2005 mantiene ahora un his-tórico de los cambios realizados a los fiche-ros fuente, a la manera de un sistema decontrol de versiones local, y nos permitecomparar versiones de ficheros, volver aversiones anteriores, etc. Este mecanismoestá disponible en todas las ediciones deDelphi 2005; en el caso de las edicionessuperiores, funciona en perfecta coordina-ción con StarTeam, la herramienta de con-trol de versiones de Borland.

Mejoras en el depurador

El depurador de Delphi 2005 inclu-ye varias nuevas posibilidades:• Depuración simultánea de proyectos

Win32 y .NET. Ambos depuradoreshan sido compatibilizados para haceresto posible.

• Vistas más detalladas de puntos de interrup-ción, variables locales y marcos de pila.

• Visualización simultánea de código MSIL ycódigo nativo para procesos .NET. En el caso

de los módulos de código manejado, eldepurador no sólo muestra el códigointermedio (MSIL), sino también el códi-go nativo resultante de la compilaciónJIT de éste.

Herramientas para pruebas unitarias(unit testing)

Delphi 2005 incluye mecanismospara la creación y ejecución de pruebasunitarias, recurso muy en boga actual-mente gracias en gran medida al impul-so que le ha proporcionado la teoría dela Programación Extrema de Kent Beck.Estas técnicas podrán ser aplicadas tan-to a proyectos Win32 (DUnit) como.NET (NUnit).

Mejoras para el desarrollo web

Entre las nuevas facilidades que ofre-ce el entorno integrado para el desarro-llo Web cabría destacar las siguientes:• En primer lugar, el editor HTML

incluido en Delphi 2005 ha sido mejo-rado sensiblemente para facilitar eldiseño visual de páginas web, tanto paraWin32 como para ASP.NET.

• Como ya sucedió con Delphi 8 para.NET, el entorno permite desarrollary depurar las aplicaciones Web utili-zando Cassini, un servidor web muyligero que hace posible agilizar y sim-plificar nuestro trabajo.

• Delphi 2005 incluye un nuevo Gestorde Despliegue para automatizar la tareade desplegar los sitios Web median-te diferentes métodos (XCOPY,FTP).

Posibilidad de utilización de C#

Por supuesto, para los desarrollado-res de Delphi constituye una gran ven-taja la incorporación de C# como len-guaje de desarrollo en Delphi 2005. No

sólo tendrán a su alcance la posibilidadde estudiar el lenguaje por excelencia de.NET Framework y de crear desde cerotodo tipo de proyectos con él, sino queademás podrán importar todo tipo deproyectos desarrollados, por ejemplo,con Visual Studio .NET e incluso incor-porar módulos creados con C# a sus pro-yectos .NET (¡el Motor Común deLenguajes en acción!).

Novedades en el lenguajey el compilador deDelphi

Ya en Delphi 8 para .NET, el lengua-je Delphi fue extendido con nuevas cons-trucciones para dar cabida a los nuevos con-ceptos de programación incorporados porMicrosoft a .NET Framework. ConDelphi 2005, las adiciones al lenguaje deprogramación (siempre respetando escru-pulosamente la compatibilidad hacia atrás)aparecen para cumplir uno de los dossiguientes objetivos:a)Mantener en la medida de lo posible la

compatibilidad 100% a nivel de códigofuente entre Delphi para Win32 y Delphipara .NET; ahora prácticamente todaslas construcciones añadidas en Delphi 8(con contadas excepciones, como los atri-butos) están disponibles también bajoWin32. Entre ellas podemos mencionar:

dotN

etM

anía

<<

48

dnm.laboratorio.net<<

Figura 5.La pestaña Historia posibilitauna mejor gestión de cambios

Delphi 2005 mantiene ahora un histórico de los cambiosrealizados a los ficheros fuente y nos permite compararversiones de ficheros, volver a versiones anteriores, etc.

• Campos y propiedades de clase. En Delphi7 sólo era posible definir métodos declase (estáticos, en terminología C#).

• Especificadores de visibilidad de miembrosde clases. Delphi 8 añadió los especifi-cadores de visibilidad strict private ystrict protected a las ya tradicionales pri-vate y protected, que permitían la refe-rencia desde otros elementos de códi-go situados en la misma unidad (perofuera de la clase).

b)Seguir dotando al lenguaje de nuevosrecursos que lo mantengan al nivel dela “competencia” (léase C# o Java). Enesta categoría podemos mencionar:• Uso de Unicode en identificadores.

¡Ahora podremos utilizar la 'ñ' y lasletras acentuadas en nuestros iden-tificadores!

• Espacios de nombres compuestos pormúltiples unidades. Las unidades aho-ra podrán tener nombres del tipoMiEspacioDeNombres.MiUnidad; deeste modo se hace posible aprove-char en Delphi todas las ventajas delos espacios de nombres.

• Bucle for…in. Delphi 2005 incluyeahora (tanto para Win32 como para.NET) un nuevo tipo de bucle simi-lar al foreach de C# para iterar porlos elementos de un array, conjun-to o colección.

• Comentarios de documentación. Unasintaxis especial de comentarios, muysimilar a la definida por Microsoftpara C#, facilitará la generación dedocumentación XML para las uni-dades de Delphi.

Los compiladores para Win32 y.NET también han sido unificados enla medida de lo posible e incluyen algu-nas nuevas posibilidades, como la expan-sión en línea de llamadas a funcionespara aumentar el rendimiento.

Por último, en los nuevos compila-dores para .NET se han resuelto lasincompatibilidades que impedían enversiones anteriores generar aplicacio-nes para .NET Compact Framework,

por lo que con Delphi 2005 se podráncompilar aplicaciones para SmartPhoney Pocket PC, si bien éstas no se podrándepurar dentro del entorno.

Novedades en las librerías

Para hacer aún más atractivo el pro-ducto, se han incorporado varias nuevaslibrerías:• En lo que respecta a la VCL y la

VCL.NET, se han incorporado a estasúltimas algunos componentes que noestaban presentes en Delphi 8 paraaumentar la compatibilidad entre ambas.

• Delphi 2005 incluye ahora DBGo, lapágina de componentes para el acceso adatos a través de ADO, tanto para el desa-rrollo de aplicaciones Win32 como.NET. Esta es una de las peticiones quemás hemos escuchado de los desarrolla-dores con relación a Delphi 8.

• Para la generación de informes, Delphi2005 no sólo incluye Rave Reports (tan-to Win32 como .NET), sino que ade-más incluye Crystal Reports .NET,estándar mundial en el desarrollo de

informes y presente en Visual Studio.NET.

• Para el desarrollo Web simultáneo bajoWin32 y .NET, se incluyen en Delphi2005 ambas versiones de IntraWeb (edi-ción Borland).

• En lo que respecta al desarrollo WebASP.NET, los controles DBWeb han sidomejorados y ampliados, incluyendo aho-ra los nuevos controles DBWebVideo yDBWebSound para el uso de recursos mul-timedia en aplicaciones web.

Novedades en el acceso adatos

Con la incorporación de DBGo a laVCL.NET comentada anteriormente, lascuatro tecnologías de acceso a datos dis-ponibles en Delphi 7 (BDE, DBExpress,DBGo - anteriormente ADOExpress - eIBExpress) quedan a disposición de losdesarrolladores para ser utilizadas tantode cara a la migración de proyectos Win32hacia .NET como a la creación y poste-rior mantenimiento de aplicaciones “por-tables”, capaces de ser compiladas paraambas plataformas a partir de un mismocódigo fuente.

En lo relativo al acceso a datos des-de aplicaciones 100% .NET, resultaobligado mencionar varias novedadesinteresantes:

Nuevos componentes para el acceso adatos

El Proveedor de Datos de Borland (BDP)ha sido mejorado, y ahora adicionalmen-te ofrece acceso nativo de alto rendimiento(como en el caso de InterBase, Oracle,DB2, SQL Server y Access) a bases dedatos Sybase.

Adicionalmente, la página de com-ponentes del BDP incluye varios nue-vos componentes muy interesantes queen principio no están limitados a utili-zar conexiones BDP, comoRemoteConnection y RemoteServer (des-

dotN

etM

anía

<<

49

dnm.laboratorio.net<<

Delphi 2005 es un fiel exponente de la filosofía de Borland,orientada a ofrecer al cliente no sólo la herramienta de

desarrollo, sino toda una gama de productos para una com-pleta gestión del ciclo de vida de las aplicaciones

tinados a simplificar el acceso a con-juntos de datos remotos a través de.NET Remoting), así como DataHub yDataSync, cuyo objetivo es permitir laintegración de datos provenientes dediferentes bases de datos a un únicoconjunto de datos en memoria y resol-ver las actualizaciones correspondien-tes. Por último, se incluye un nuevocomponente, llamado BdpCopyTable,para simplificar las tareas de migraciónde datos en tiempo de ejecución.

Mejoras en el Explorador de Datos y losasistentes de acceso a datos

El Explorador de Datos de Delphi 2005ha sido potenciado, y desde él es ahoraposible realizar diversas tareas, como cre-ar tablas y vistas, consultar o migrar datos,visualizar los parámetros de procedi-mientos almacenados y otras.Adicionalmente, se incluyen en el entor-no algunos asistentes que estaban ausen-tes en Delphi 8 y que causaban pequeñasincomodidades a la hora de programar elacceso a datos, por ejemplo a la hora decrear cadenas de conexión para bases dedatos accedidas a través de proveedoresdistintos del BDP, o al rellenar los pará-metros de procedimientos almacenados.

Novedades en la ediciónArchitect

Hemos dejado para el final las carac-

terísticas que sólo están presentes en laedición Architect, la más potente detodas, ideal para arquitectos y diseña-dores de software.

Integración con herramientas deGestión del Ciclo de Vida

Es de destacar aquí que Delphi2005 es un fiel exponente de la filo-sofía de Borland, orientada a ofreceral cliente no sólo la herramienta de

desarrollo, sino toda una gama de pro-ductos para una completa Gestión delCiclo de Vida de las Aplicaciones (ALM- Application Lifetime Management).Como tal, el producto incluye la posi-bilidad de integración con Caliber

RM, la herramienta para la gestión derequisitos de la compañía; StarTeam,herramienta de gestión de configura-

ciones y control de versiones; yOptimizeIt para .NET, una herra-mienta muy útil de cara al perfilado yoptimización del rendimiento de lasaplicaciones.

Versión 2 de la tecnología ECO

En lo que respecta a la fase del aná-lisis y diseño del software, Borlandapuesta en el caso de Delphi y C#Builder por la tecnología ECO(Enterprise Core Objects), una tecnolo-gía que, en nuestra modesta opinión,ha alcanzado su madurez con la ver-sión 2.0, que estará disponible enDelphi 2005.

Con ECO, la productividad se ele-va a nuevas alturas gracias al desarro-llo guiado por los modelos. Al haceruso de esta tecnología, una gran par-te del código fuente (Delphi o C#),desde la capa de acceso a datos hastala interfaz de usuario (ya sea basadaen formularios Windows o formula-rios Web), puede ser generada y man-tenida automáticamente a partir de losdiseños UML. La persistencia de losobjetos la garantiza la tecnologíaObjeto/Relacional de ECO, que permi-te mapear los modelos a bases de datosde cualquiera de los SGBD soporta-dos.

Integración con aplicaciones J2EE yCORBA a través de Janeva

Por último, la edición superior delproducto incluye una licencia de desa-rrollo de Janeva, una librería de cla-ses .NET desarrollada por Borlandpara facilitar la comunicación con apli-caciones y componentes J2EE y COR-BA. Adicionalmente, el entorno dedesarrollo incorpora diferentes asis-tentes de integración que generan lapráctica totalidad del código fuentenecesario para gestionar esa comuni-cación.

dotN

etM

anía

<<

50

dnm.laboratorio.net<<

Figura 6.El Explorador de Datos mejorado

Figura 7.La página de componentesECO en acción

dotN

etM

anía

<<

51

<< rendimiento esta nueva sección, no sinantes recordar el esfuerzo y dedicación que los MVPstienen en todo el mundo, y que gracias a él, dan unsoporte adicional y un valor añadido a otros usuariosde tecnologías Microsoft. Sus contribuciones en laComunidad son en algunas ocasiones, sobresalien-tes. Muchas veces, los usuarios plantean sus proble-mas, dudas y consideraciones sobre los productosMicrosoft en diferentes lugares, Internet, news-groups, blogs, páginas web, etc., que son respondi-das a diario por cientos de MVPs. Sin embargo, hayocasiones en que las preguntas y dudas superan cier-to nivel y es ahí dónde aparecen en escena algunosMVPs ofreciendo explicaciones o soluciones muyinteresantes no sólo para quien plantea su pregunta,sino para otra amplio grupo de profesionales que qui-zás nunca se planteó determinadas cosas.

De esta forma, en muchísimas ocasiones una dudao pregunta genera al MVP una inquietud muchomayor. La inquietud lleva casi siempre a un procesode investigación específico que da como resultadouna serie de explicaciones muy útiles para el usua-rio. Explicaciones que muchas veces no se encuen-tra ni siquiera en ninguna página de Microsoft.

Esto es justamente lo que en esta ocasión quieroponer de relieve, los comentarios basados en la expe-riencia de uno de los MVPs hispanos sobre una infor-mación que apareció en Internet con relación al SP2de Windows XP y que levantó cierta intranquilidadentre los usuarios de este extendido sistema opera-tivo. Además, aprovecharemos el artículo paracomentar un interesante truco para que el adminis-trador elimine aquellas aplicaciones prohibidas oincómodas que se ejecutan en una red.

Windows XP SP2, su extraña puesta enescena

Con la salida de Microsoft Windows XP SP2,son muchos los comentarios que se han escucha-do en diferentes medios escritos y digitales a favory en contra de esta nueva actualización del siste-ma operativo más utilizado en el mundo, sinembargo, muchas de las voces contrarias, se hanformulado bajo el desconocimiento en algunosmomentos, y bajo la batuta orquestada de quienprefiere desinformar o quien tiene el prejuicio dehablar mal sobre un tema sin tener pruebas clari-videntes.

Por esa razón, José Manuel Tella Llop (MVPDTS), decidió aportar a la Comunidad sus comen-tarios y estudios acerca del sistema operativoWindows XP SP2 funcionando en redes P2P. Elobjetivo era claro, olvidar el mito surrealista acer-ca de los comentarios y problemas técnicos del usode redes P2P en sistemas operativos Windows XPSP2, y acercar al usuario a la realidad absoluta delo que hay por detrás.

Windows XP SP2 y las redes P2P,mitosy realidades

José Manuel reconoció su preocupación sobre lasinformaciones que estaban circulando por Internet,especialmente en las que se decía que en WindowsXP SP2, existía una limitación clara sobre el núme-ro de conexiones TCP/IP, impidiendo el normal fun-cionamiento en diferentes aplicaciones como porejemplo las aplicaciones P2P. Ante estas afirmacio-

Comenzamos a pleno

Jorge Serrano

dnm.mvp.online<<

Figura 1. Pantalla general del Centro de Seguridad de Windows XP SP2

Con la salida de Microsoft Windows XPSP2, son muchos los comentarios que se

han escuchado en diferentes medios escritos y digitales a favor y en contra de

esta nueva actualización del sistema operativo más utilizado en el mundo

nes, José Manuel nos comenta lo siguiente, lo cuáltranscribo para no perder ni un ápice la forma y con-tenido del mismo:

A pesar de que yo no soy par-tidario del uso que se da a los pro-gramas P2P y nunca doy soportea los mensajes sobre ellos, creoque merece la pena aclarar el pun-to de la limitación de las conexio-nes del SP2 y su posible influen-cia en los programas P2P.

La noticia que circula por la red es mentira, sim-plemente porque, o bien a propósito, o bien por des-conocimiento de lo que hablan, es incompleta:Windows XP SP2, por motivos de seguridad y para impe-dir o limitar la reproducción de gusanos estilo Blaster ySasser, efectivamente limita a 10 el número de conexio-nes salientes TCP/IP.

Veamos un poco la frase anterior: cualquier técni-co en redes y TCP/IP, ante esa frase, simplemente diría:Windows XP no puede navegar en Internet. No pue-de funcionar en redes. 10 conexiones es un número ridí-culo para cualquier cosa. No es posible que Microsoft,ni nadie, haya puesto esa limitación.

Realmente la noticia anterior es mentira: la fra-se exacta (que no la he visto todavía en ninguna deesas páginas de la red) es: Windows XP SP2 limita a10 el número de apertura de sockets salientes PORSEGUNDO siempre y cuando sean además AL MISMOPUERTO DESTINO.

Ligera matización sin duda, que cambia totalmen-te el panorama. Es decir, por ejemplo. Impide que ungusano que use las maneras de reproducirse del Blastery Sasser, que en la actualidad abren miles de conexionespor segundo al mismo puerto destino (puertos RPC),sea capaz de reproducirse con la celeridad con que lohicieron los gusanos anteriores en su día.

Esto no limita en absoluto los programas P2P.Veamos el por qué: los programas P2P abren cone-xiones normalmente al mismo puerto destino, ya quelos usuarios no suelen tocar el número de puerto queusan (es configurable), por lo que normalmente pode-mos afirmar que un 99% de las máquinas tienen elpuerto por defecto (4662 TCP). Los usuarios puedenconfigurar cualquier puerto del 1024 al 65535, por loque puede haber una distribución del rango de puer-tos que haría improbable el conectarse siempre al MIS-MO puerto.

Pero, lo más importante: el propio eMule sólo per-mite 20 conexiones cada 5 segundos (4 por segundo) -configurable también, pero este es el valor por defec-to-, por lo que el SP2 permite incluso 2.5 veces más deconexiones que lo que necesita el propio programa P2P.La limitación de las conexiones por segundo es muynormal en todos los programas TCP/IP, sean o no pro-gramas P2P, ya que en otro caso, se corre el peligro de

saturar las conexiones en la pila TCP, debido precisa-mente a los time-out de las conexiones finalizadas y queexisten tal y como está definido en las RFC del TCP/IP(las normas TCP) que respetan al pie de la letra todoslos sistemas operativos, sean o no de Microsoft.

Las conclusiones ante esto son evidentes. Noticiatergiversada a propósito, bien por mala fe, o bien porincultura de los que publican dichos artículos.Meditad sobre la calidad de las páginas web que difun-den dichas afirmaciones.

Por otra parte, este parámetro del número deconexiones por segundo, está hardcoded. Es decir,está implementado en el driver TCP/IP y no puedeconfigurarse en el registro de Windows (otra infor-mación incorrecta de algunas webs).

Igualmente en otras páginas, se ha difundido unfix para parchear el driver tcpip.sys de Windows.

Por ejemplo: http://www.lvllord.deEvidentemente el tocar a pelo un driver del pro-

pio sistema operativo implica quedarse sin soportedel producto. Esto puede que no haga meditar a laspersonas que lo instalan, pero que se planteen igual-mente un par de cuestiones:

• ¿Por qué montar una cosa que no es necesariaya que el programa P2P necesita por segundola cuarta parte de conexiones por segundo queel SP2 le permite?.

• ¿Por qué usar un fix de procedencia dudosa quepuede meternos cualquier otro regalo en nues-tra máquina?. Recordemos, que si únicamenteel fix hace lo que dice hacer, también podemoshacerlo nosotros a mano con un editor hexa-decimal sobre el propio driver -un proceso total-mente elemental-.

dotN

etM

anía

<<

52

dnm.mvp.online<<

La noticia que circula por la red es mentira, simplemente porque, o bien

a propósito, o bien por desconocimiento de lo que hablan, es incompleta:

Windows XP SP2, por motivos de seguridad y para impedir o limitar la reproducción

de gusanos estilo Blaster y Sasser,efectivamente limita a 10 el número

de conexiones salientes TCP/IP

José Manuel Tella

Hablando de las redes P2P,esos progra-mas incómodos para el administrador

Aprovecando el tema que hemos tratado sobreel Windows XP SP2 y las redes P2P, he creído inte-resante tratar también un tema que el mismo JoséManuel ha tratado alguna vez en relación con lapregunta de algún usuario de Windows. ¿Cómopodemos hacer para matar los programas P2P quese pueden estar ejecutando en nuestras redes enWindows XP Profesional y Windows 2003?. Unainteresante pregunta que es devuelta con un nomenos interesante truco que José Manuel nos pre-senta.

El primer requisito que necesitaremos, es estardefinidos como administradores de las máquinasremotas.

En segundo lugar, crearemos un fichero de tex-to en el que pondremos el nombre de los progra-mas que queremos eliminar o matar en las máqui-nas remotas. Un ejemplo de este fichero sería elcontenido de progs.txt:

eMule.exeNotepad.exe

En tercer lugar, deberíamos crear un fichero detexto para indicar las máquinas sobre las que quere-mos actuar, ya sea el nombre de las máquinas o ladirección IP de ellas. Un ejemplo de este fichero seríael contenido de pcs.txt:

\\maq01\\192.168.120.23

Finalmente, crearemos un conjunto de instruc-ciones o batería de comandos con el nombre que que-ramos darle, por ejemplo, kill_process.cmd.

En este fichero, añadiremos el siguiente con-tenido del fuente 1.

Para finalizar, podemos crear una tarea pro-gramada, o podemos ejecutar el programa desdela línea de comandos MS-DOS de la formakill_process administrador siendo administrador,el nombre del usuario administrador en las máqui-nas remotas. Acto seguido a ejecutar el comando,se nos solicitará la contraseña del administradorque será legible en pantalla, y acto seguido se eje-cutarán las instrucciones del script eliminando losprogramas ejecutados, como podemos ver en lafigura 2 en la que se ha eliminado el programaNotepad.exe.

José Manuel Tella Llop es MVP DTS, reside enEspaña y posee una página web en el sitio http://www.mul-tingles.net/jmt.htm dónde encontrarás no sólo informa-ciones como las que hemos comentado en este artículo, sinotambién más artículos muy interesantes todos ellos.

Podrás contactar con él en la dirección de e-mail [email protected].

dotN

etM

anía

<<

53

dnm.mvp.online<<

@echo off

if {%1} EQU {} (echo Falta usuario&goto :EOF)

setlocal enabledelayedexpansion

set user=%1set /p pass="password del usuario %1 : "cls

for /f %%f in (pcs.txt) do call :proc00 %%f

endlocalgoto :EOF

:proc00for /f "skip=2 tokens=1,2,* delims= " %%g in ('tasklist /S %1 /U %user%

/P %pass%') do call :proc01 %1 %%g %%hgoto :EOF

:proc01for /f %%i in (progs.txt) do if {%2} EQU {%%i} taskkill /S %1 /U %user%

/P %pass% /PID %3goto:EOF

Figura 2. Script de eliminación de procesos después dehaber sido ejecutado

Realmente la noticia anterior es mentira:la frase exacta (que no la he visto todavía en ninguna de esas páginas de la red) es:

Windows XP SP2 limita a 10 el número de apertura de sockets salientes POR SEGUNDO

siempre y cuando sean además AL MISMO PUERTO DESTINO

Fuente 1

Consultar texto en todos los procedimientos almacenados

Denegar a un usuario acceso a una página web

dotN

etM

anía

<<

54

dnm.trucos<<dnm.trucos

tru

co

s.tr

uco

s.tr

uco

s.tr

uco

s.tr

uco

s.tr

uco

s.tr

uco

s.tr

uco

s

Llamar a un web service a través de POST ó GETPor Pedro Pozo (clikear.com)

Cuando creamos un servicio web, el método quetenemos para ejecutarlo por defecto es a través deSOAP, sin embargo si intentamos ejecutar ese ser-vicio web a través de POST o GET se produce unerror.

La solución es muy sencilla, para conseguir que fun-cionen los servicios web con POST o GET tan solo debe-mos descomentar unas líneas de código del fichero machi-ne.config, este fichero podemos encontrarlo en C:\WIN-

DOWS\Microsoft.NET\Framework\<numero de versión fra-

mework .net>\CONFIG.

Por tanto debemos abrir el fichero machine.con-fig con el bloc de notas, por ejemplo, y descomentarlas líneas:

<add name="HttpGet"/>

<add name="HttpPost"/>

Guardaremos el fichero y ya estarán listos nuestrosservicios web para poderlos ejecutar con POST o GET.

Cómo saber que versión de Office tenemos instaladaPor Pedro Pozo (clikear.com)

Si estamos desarrollando una aplicación que nece-sita saber qué versión de Office tenemos instalada ennuestro ordenador, podemos utilizar dos formas paraaveriguarlo:1) Añadir una referencia COM a “Microsoft Excel xx

Object Library” o “Microsoft word xx ObjectLibrary” y luego añadiremos el siguiente código:

Excel.Application appOffice;appOffice = new Excel.Application();MessageBox.Show(appOffice.Version);appOffice.Quit();

2) Otra solución más eficiente y más elegante es con-sultar el registro Windows. Deberemos incluir unareferencia a Microsoft.Win32 y consultar el regis-tro de windows como se muestra en el ejemplo:

RegistryKey regVersion;string keyValue;string version=string.Empty;keyValue = "SOFTWARE\\Microsoft\\Office\\

11.0\\Common\\ProductVersion";regVersion = Registry.LocalMachine.

OpenSubKey(keyValue,false);if (regVersion!=null){

version = (string)regVersion.GetValue("LastProduct", 0);

regVersion.Close();}MessageBox.Show(version);

Algunas curiosidades sobre SQL Server 2000Por Pedro Pozo (clikear.com)

El número máximo de usuarios de SQL Serveres 16.379 y el número máximo de roles es 16.367,el número máximo de bases de datos por servidor

de SQL Server es de 32.767, el número máximo deforeign key por tabla es de 253, el número máximode parametros de un procedimiento almacenado es1.024, el número máximo de tablas de una SELECTes 256.

Por Pedro Pozo (clikear.com)

Si deseas que un usuario no tenga acceso a unapágina en concreto, puedes hacerlo poniéndolo enel fichero webconfig, como en el ejemplo siguien-te:

<location path="mipagina.aspx"><system.web><authorization><deny users="lista_de_usuarios_separados_por_comas" /></authorization></system.web></location>

Por Pedro Pozo (clikear.com)

Cuando en nuestra base de datos SQL SERVERtenemos muchos procedimientos almacenados puederesultar una labor muy tediosa tenerlos controlados.

Aquí podemos ver una consulta que nos permitelocalizar cualquier texto dentro de los procedimien-to almacenados de nuestra base de datos.

SELECTso.name,sc.text

FROMsysobjects soINNER JOIN syscomments sc ON so.id = sc.id

WHEREso.type = 'P' ANDsc.text LIKE '%cadena%'

dotN

etM

anía

<<

55

dnm.comunidad.net<<dnm.comunidad.net

CLM.NET:el nacimiento de una comunidad.net en la tierra de don Quijote

este fragmento delQuijote para comenzar este relato brevesobre la primera comunidad de usuariosde .NET de Castilla - La Mancha es sig-nificativo, primero porque el Quijote esun referente literario internacional, y esta-nuestra comunidad- nace con el humil-de propósito de ser referente regional paralos desarrolladores .NET; segundo, por-que en una tierra como la nuestra, dondeya existen otras comunidades y que, enmuchas ocasiones, se apuesta por otrasplataformas para el desarrollo de aplica-ciones y servicios, la aventura es poner enmarcha una comunidad de usuarios entecnología .NET; y tercero, y último, por-que al igual que el ingenioso hidalgo, nosconsideramos aventureros y emprende-dores y queremos tener un espacio enInternet donde el desarrollo con .NETsea un acicate para la construcción de soft-ware con “denominación de origen” LaMancha.

Nos alienta el gran grupo de segui-dores que esta tecnología está desper-tando a nuestro alrededor, la rapidez enel desarrollo de aplicaciones y el knowhow que vamos adquiriendo con lasconstantes iniciativas formativas, inves-tigadoras y profesionales en las que esta-mos envueltos.

Nuestra historia comienza con uncurso de postgrado universitario que elaño pasado se denominó CTEDAPI(Curso Título Universitario en Desarrollode Aplicaciones Para Internet) organizadoy coordinado desde el grupo LoUISE(Laboratory of User Interaction and SoftwareEngineering) del Instituto deInvestigación en Informática de Albacete(Universidad de Castilla - La Mancha).Comenzamos a hacer nuestros pinitoscon .NET y con LibroNET, la tienda

virtual de libros en Internet, un caso prác-tico que guiaba los ejercicios y servíacomo buenas prácticas aplicado a un casode eCommerce en un entorno BusinessTo Consumer (B2C). Esta experiencia tam-bién sirvió para que los alumnos deIngeniería del Software de quinto deinformática hicieran sus prácticas comoingenieros Web y analistas de sistemas ylos alumnos de programación visual, detercero de informática, hicieran las vecesde ávidos desarrolladores de la soluciónpropuesta por los candidatos a ingenie-ros. En consecuencia surgió de estasexperiencias un grupo bastante grandede potenciales desarrolladores .NET quenecesitaban encarecidamente conocer laplataforma de desarrollo, la arquitectu-ra (framework) y las técnicas de progra-mación Web con ASP.NET y con C#.

De aquí surgieron los foros de alum-nos de la asignatura, que congeniaban conlos alumnos del CTEDAPI y que com-partían conocimientos, fatigas y debatessobre el desarrollo de software con .NETfrente a otras opciones.

Ahí surgió la idea -hacía falta, y habíacaldo de cultivo, una comunidad de desa-rrolladores .NET propia-. Y tras este plan-teamiento y observando que en nuestroentorno más cercano había posibilidadesde comenzar a desarrollar con esta tec-nología aplicaciones para Internet, tantoen la Universidad como en las empresasde tecnologías de la información de laregión, decidimos dotar de un soporteWeb a esta comunidad, creando el portalCLM.NET, para desarrolladores .NETtanto de la región como de aquellos quequieran participar en esta iniciativa caste-llano manchega.

Este año el curso de postgrado CTE-DAPI se ha hecho mayor y se ha conver-

tido en el I master en tecnologías Web:Desarrollo de aplicaciones y servicios para lasociedad de la información, con tecnología yherramientas .NET, que quiere formar aingenieros y arquitectos Web, especiali-zados en el desarrollo y la implantaciónrápida de proyectos Web (RAD) y en eldiseño y puesta en marcha de solucionesde empresa adaptadas a las necesidadesreales de las mismas respectivamente.

Y por eso este año también queremosque CLM.NET, el portal de la comuni-dad de desarrolladores de Castilla - LaMancha, sea de nuevo un punto deencuentro entre profesionales, estudiosos,investigadores y desarrolladores de apli-caciones Web con la tecnología .NET y,por supuesto os invitamos a participar enesta iniciativa que desde un principio vie-ne apoyando Microsoft Ibérica, tanto consu colaboración directa en el curso, comocon la participación de ingenieros y MVPsde renombre en esta -vuestra comunidad-

Información de interésMaster en tecnologías Web: http://

ctedapi.uclm.es.CLM.NET, comunidad de desarro-

llo .NET: http://161.67.15.167/?alias=clmnet (dirección provisional).

Miguel López Director técnico de proyectos del grupoLoUISE, Instituto de Investigación enInformática de Albacete, Universidad deCastilla - La Mancha.

Prado MoralesDesarrolladora de soluciones Web, grupoLoUISE, Instituto de Investigación enInformática de Albacete, Universidad deCastilla - La Mancha.

<< Que haya elegido

“En esto, descubrieron treinta o cuarenta molinos de viento que hay en aquel campo; y, así comodon Quijote los vio, dijo a su escudero: La ventura va guiando nuestras cosas mejor de lo que

acertáramos a desear, porque ves allí, amigo Sancho Panza, donde se descubren treinta, o pocosmás, desaforados gigantes, con quien pienso hacer batalla”

IMPORTES VÁLIDOS HASTA NUEVA OFERTA

DATOS DE FACTURACIÓN

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

DATOS DE ENVÍO (sólo si son distintos de los datos de facturación)

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

FORMA DE PAGO

❑ Talón nominativo a nombre NETALIA, S.L.❑ 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 ❑ MASTERCARD

Número de su tarjeta: Fecha de caducidad: / (imprescindible)

Firma y/o sello (imprescindible)

a de de 20

Suscripción a dotNetManía

Usted autoriza a la mecanizaciónde estos datos. El responsable ydestinatario de éstos es Netalia,S.L. Usted tiene derecho a accedera sus datos, modificarlos y cance-larlos cuando lo desee. Sus datosno serán cedidos en ninguna de lasformas posibles a terceras partes yno se utilizarán más que para elbuen funcionamiento de su sus-cripción a la revista dotNetManíay para informarle de las activida-des comerciales que realice la edi-torial Netalia, S.L. Si no desea reci-bir información comercial dedotNetManía marque la casillasiguiente ❑

❑ Nº2 ❑ Nº3 ❑ Nº4 ❑ Nº5

Puede enviar los datos al email [email protected],al FAX (34) 91 499 13 64 o al teléfono (34) 91 666 74 77.También puede enviarlo por correo postal a la siguiente dirección:

C/ Robledal, 13528529- Rivas VaciamadridMadrid (España)

❑ Deseo suscribirme a dotNetManía por un año (11 ejemplares) y beneficiarme de la oferta del 10% de descuento por unimporte total de 60 € para España; o por 75 € para el resto de Europa; o por 90 € para el resto del mundo (IVA incluido).

❑ Deseo suscribirme a dotNetManía por un año (11 ejemplares) por un importe de 45 € por ser estudiante (IVA incluido).Aporto fotocopia del carné de estudiante o sello del centro académico (IMPRESCINDIBLE). OFERTA VÁLIDA SÓLOPARA ESTUDIANTES RESIDENTES EN ESPAÑA.

❑ Nº6 ❑ Nº7 ❑ Nº8

Si desea algún otro número indíquelo

dotN

etM

anía

<<

57

<<

ASP.NET 2.0Dino Esposito

Editorial: Microsoft PressISBN: 0735620245 Páginas: 448Publicado: Agosto-2004

Ya comentamos en su momento otra obra de este prolífico autor italiano (verdotNetManía, nº4), que para muchos es ya una referencia en lo tocante al acce-so de datos y construcción de sitios Web. Se trata de un compendio totalmen-te exhaustivo de las novedades que incluye la versión 2.0 de ASP.NET sin limi-tarse a un repaso superficial, sino profundizando en las implicaciones que cadanuevo aspecto tiene en el desarrollo.

El análisis, no sólo cubre las novedades, sino los cambios estructurales, mejo-ras en el acceso a datos, nuevos controles ASP.NET de servidor, y un montónde consejos prácticos para la implantación de aplicaciones en el mundo real,con consideraciones de rendimiento, seguridad, distribución, y un largo etcé-tera. Y todo esto con un buen conjunto de ejemplos que el lector puede des-cargar. Totalmente recomendable.

Microsoft .NET Framework Class Library ReferenceMicrosoft

Editorial: Microsoft PressISBN: 0735615551 Páginas: Variable (una media de 2000 páginas por volumen)Volúmenes: 10Publicado: Febrero-2003

Como el lector puede imaginar, es sencillamente, la obra de referencia. Su utilidaddepende de los gustos, tal y como reflejan los comentarios de los lectores de Amazon yotras distribuidoras on-line.

Se trata de toda la documentación impresa que está disponible en el MSDN incluyen-do ejemplos de cada clase, cada objeto, etc. Si se prefiere tener la documentación enpapel, y poder abarcar de un vistazo amplias zonas de los namespaces de .NET es reco-mendable. Aunque no se encontrará nada que no esté ya en el MSDN.

dnm.biblioteca.net<<

dnm.biblioteca.net

dotN

etM

anía

<<

58

Bill Gates predice cambios radi-cales en el mundo del entreteni-miento

En una entrevista concedida aThe Hollywood Reporter (www.cnn.com/2004/TECH/ptech/10/14/industry.gates.reut/index.html), publicada por la CNN, la principal cabeza visiblede Microsoft, afirmaba que “la Televisión tradicional seencuentra en una encrucijada, debida principalmente ala cada vez menor importancia de los canales y las horasde emisión, que no se adaptan a los deseos del público,más deseoso de obtener contenidos en cualquier momen-to y de cualquier naturaleza”. Gates, aprovechaba paraanunciar que un factor importante de este cambio esta-rá vinculado a la aparición del nuevo Microsoft WindowsXP Media Center Edition 2005, que permitirá más opcio-nes y más flexibilidad, tanto a los autores, como a lasaudiencias potenciales. Esta noticia, se complementa conlo publicado en eWeek (www.eweek.com/arti-cle2/0,1759,1675158,00.asp), referente a las característi-cas que tendrá el nuevo Media Center, incluyendo laposibilidad de extender este entretenimiento digital den-tro de la iniciativa Digital Entertainment Anywhere, con-sistente en una solución wireless, capaz de extender atoda la casa la fuente digital de entretenimiento conec-tada, mediante un dispositivo llamado Media CenterExpander Device.

Pero éste no es ni mucho menos el principal caba-llo de batalla del Chief Software Architect de Microsoft.Hace unos días en otra entrevista, declaraba que -enla actualidad- pasa dos terceras partes de su tiempo tra-

bajando en los departamentos de software (buena par-te de las ideas del nuevo Longhorn fueron directamen-te promovidas por él) y una tercera parte vinculado ala fundación que lidera junto a su esposa Melinda, que-curiosamente- se fundó cuando el traspaso de pode-res administrativos a Steve Ballmer estuvo completa-do a principios de 2000.

Microsoft podría estar desarrollando versiones de ser-vidor de Excel, Visio e InfoPath,como parte deMicrosoft Office System

Según Mary Jo Foley, del popular sitio Microsoft Watch,esta compañía podría estar desarrollando nuevas versio-nes de estos populares productos, pero en esta ocasión,pensados para la gama de servidores. En principio, sehabló de versiones de Excel y Visio para servidores, peroposteriormente (ver www.crn.com/sections/news/top_news.jhtml?articleId=49900500), la noticia se haampliado a InfoPath, dentro de lo que se ha dado en lla-mar Information Bridge Framework, una forma de acer-car los datos a las aplicaciones cliente, aglutinando infor-mación ahora dispersa en aplicaciones como Outlook,Word, Excel y otras aplicaciones cliente de Office. Estanueva versión de Office (Office 12 en nombre de códigointerno), esperada para 2006+, promete además, una inte-gración sin precedentes con la nueva versión de VisualStudio Tools for Office que se distribuirá junto a VisualStudio 2005, y al nuevo Visual Studio Team System, el sis-tema de modelado y diseño de aplicaciones que se va aconstituir en una de las más importantes novedades dela “suite”.

no

ticia

s.n

oti

cia

s

Uno de los más curiosos documentos asociados aMicrosoft es el Funny Microsoft Q Articles (http://jill.jazz-keyboard.com/qarticles.html), referente a publicacionesde la KB (Knowledge Base), sobre distintas peculiarida-des del software de MS y sus soluciones. Algunas resul-tan bastante evidentes, como “Q147373: Remove AllDoes Not Remove Everything”, o “Snow White & theSeven Dwarves DVD issue” (literalmente, “problemacon el vídeo de Blancanieves y los siete enanitos”).

Utilidades del mes

A destacar este mes la nueva herramienta de búsqueda que promueveGoogle dentro de su política de extensio-nes del navegador. La nueva Google DesktopSearch (http://www.desktop.google.com), pre-tende ofrecer una búsqueda más avanza-da en el ordenador personal, si bien toda-

vía se encuentra en fase beta, y tiene algunas incompatibilidadesque deberían de comprobarse antes de su instalación.

Faber Toys: Conjunto de interesantes utilidades gratuitas, que ayu-dan al usuario exigente que quiere saber en todo momento loque está pasando en su ordenador. Controla todos los proce-sos en ejecución, permite monitorizarlos, y saber qué DLL'sse cargan en memoria y mucho más. Accesible enhttp://www.faberbox.com/fabertoys.asp?action=download

dnm.desvan<<

documentos en la red

Marino Posadas

>>