Documentos de Académico
Documentos de Profesional
Documentos de Cultura
dotNetManía
www.dotnetmania.com
DataGridView y estilos
Presentaciones de datos visualmente atractivas
eventos
Cuando el diseño conoció a Media Center
Arquitecturas distribuidas con Service Broker (y II) ReMIX 2007
Referencias débiles en .NET Framework Madrid
Ayuda en las aplicaciones .NET
Laboratorio
Guidance Application Toolkit
entrevista TodotNet@QA
Charlie Calvert El propósito de algunas características de .NET
Community Program Manager de C# Comunidad .NET
Microsoft Corporation Baleares on .NET
dotNetManía editorial
Dedicada a los profesionales de la plataforma .NET
Vol. III •Número 39 • Julio-Agosto 2007
Precio: 6,50 €
Editor
Paco Marín
Adiós a Orcas y a Katmai
(paco.marin@netalia.es)
Redactor jefe
Marino Posadas
(marino.posadas@netalia.es)
Editor técnico Bienvenido al número 39, de julio y agos- Este mes entrevistamos a un viejo ami-
Octavio Hernández to de 2007, de dotNetManía. go de Octavio Hernández: Charlie Cal-
(octavio.hernandez@netalia.es)
El pasado mes de junio se celebró en vert, Community Program Manager de
Redacción
Dino Esposito, Guillermo 'Guille' Som, José
Orlando el Tech-Ed 2007, donde como C# de Microsoft Corporation. Es una
Manuel Alarcón, Luis Miguel Blanco y Miguel siempre surgieron muchas noticias. A des- entrevista muy personal; léasela si tiene
Katrib (Grupo Weboo) tacar —por su repercusión mediática, más tiempo, y descubra cómo pasar de perio-
que por su importancia real—, la asigna- dista a compañero de los mejores arqui-
Empresas Colaboradoras
ción de nombres comerciales a los próxi- tectos de software del momento.
Alhambra-Eidos mos Visual Studio y SQL Server. Final- Cristian Manteiga —uno de los
Plain Concepts mente, Orcas pasa a llamarse Visual Stu- nuevos de este mes, ¡bienvenido Cris-
Raona dio 2008 y Katmai se llamará SQL Ser- tian!— publica su trabajo “Cuando el
ver 2008. ¡Ohhh, qué sorpresón...! Des- diseño conoció a Media Center. Desa-
Solid Quality Learning
pués de que el mes anterior perdiéramos rrollo de aplicaciones para Windows
Además colaboran en este número otro clásico como Longhorn, sustituido Media Center con WPF”. Precisa-
Cristian Manteiga, José Francisco Bonnín, por Windows Server 2008, la verdad es mente el desarrollo para Windows
Miguel Egea y Rodrigo Corral.
que se lo esperaba hasta el más pintado. Media Center fue uno de los temas que
Corresponsal para América Latina
Pablo Tilotta
Lamento que no hayamos podido asis- se tocaron en el CodeCamp de Huelva,
tir este año al Tech-Ed americano, aun- como tema innovador y que tiene
Ilustraciones
Mascota: Yamil Hernández
que le hemos traído las crónicas de dos muchas particularidades a estudiar.
Portada: Javier Roldán eventos locales, pero muy especiales: El artículo de portada “DataGridView
Fotografía REMIX 2007, celebrado en un lugar y estilos. Presentaciones de datos visual-
Roberto Mariscal entrañable, el Círculo de Bellas Artes de mente atractivas”, que creo que será del
Madrid, muy propio para presentar algo agrado de la mayoría de los lectores por
Atención al suscriptor tan artístico como los productos que con- su orientación práctica, es de Luis Miguel
Pilar Pérez forman la nueva suite Expression; y Blanco. Luis Miguel seguirá escribiendo
(pilar.perez@netalia.es)
CodeCamp, más campero, sí, pero un sobre esto en algunos números más, así
ejemplo más de por qué los que estamos que será cuestión de acostumbrarse.
trabajando bajo esta plataforma de desa- Por último, tenemos otro estreno, el
Edición, suscripciones y publicidad rrollo podemos estar contentos por nues- de José Francisco Bonnín, que además
.netalia tra elección (y no lo digo por las gambas de presentarnos el grupo de usuarios Bale-
c/ Robledal, 135 de Huelva, ni por el jamón de Jabugo, a ares on .NET, nos escribe un pequeño
28529 Rivas-Vaciamadrid (Madrid)
www.dotnetmania.com
los que Microsoft nos invitó generosa- pero muy interesante artículo, que le reco-
mente, no se vaya a pensar). Vea la infor- miendo: “Referencias débiles en .NET
Tf. (34) 91 666 74 77
mación en estos artículos y comprobará a Framework”. Sé bienvenido también, José.
Fax (34) 91 499 13 64
lo que tenemos la suerte de asistir por Esto parece el camarote de los Hermanos
Imprime haber elegido estar aquí. Quizá es por esto Marx, pero aún hay sitio para otro más.
Gráficas MARTE
por lo que no necesitan ser muy origina- Espero que le guste este ejemplar y que
ISSN
1698-5451
les al poner el nombre a sus productos disfrute de unas merecidas vacaciones; y,
para que éstos tengan éxito. por favor, siga leyéndonos a la vuelta.
Depósito Legal
M-3.075-2004
Paco Marín
<< dotNetManía
3
sumario 39
Eventos: REMIX 2007 de Madrid y CodeCamp 2007 de Huelva 8-10
Entrevista a Charlie Calvert 12-15
Durante el pasado MVP Summit tuvimos la oportunidad de reencontrarnos con un viejo
amigo, Charlie Calvert, Community Program Manager de C#.
dnm.todotnet.qa 48-50
El propósito de algunas características de .NET
dnm.laboratorio.net 52-55
Guidance Application Toolkit
dnm.biblioteca.net 57
Essential Windows Presentation Foundation
Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries
dnm.comunidad.net 57
Baleares on .NET. .NET Users Group de las Islas Baleares
dnm.desvan 58
noticias noticias noticias noticias noticias
Noticias desde Tech-Ed 2007 de Orlando
Microsoft desveló la estrategia de la compañía para el futuro próximo en lo referente
a las herramientas de desarrollo y para profesionales TI en el pasado Tech-Ed USA,
celebrado del 4 al 8 de junio en el Orange County Convention Center en Orlando,
Florida.
Bob Muglia, vicepresidente Talk Service y el anuncio de BizTalk Server 2006 R2
senior de Server and Tools Busi- para el tercer trimestre de 2007, que aportará infraes-
ness en Microsoft Corporation tructura RFID, soporte nativo para intercambio de datos
fue el encargado de presentar la electrónicos (EDI) y nuevas tecnologías para integrar
keynote inicial en Tech-Ed 2007, .NET Framework 3.0, el 2007 Microsoft Office System
donde detalló la estrategia de la y Windows Vista (la beta 2 del producto ya está disponi-
compañía para el próximo año. ble); y, por último, el SDK para Open XML, que ha sido
Entre las novedades que más pue- diseñado para ayudar a los desarrolladores a crear aplica-
den interesar al desarrollador están: la asignación de nom- ciones de negocio para Office que aprovechen este for-
bre comercial a Orcas por Visual Studio 2008, y el anun- mato estándar de ECMA.
cio para el verano de la beta 2, que incluirá Visual Stu- Puede ver un vídeo espectacular y divertido de esta
dio Shell; la asignación de nombre comercial a Katmai keynote en: http://www.microsoft.com/winme/0706/29992/
por SQL Server 2008, el anuncio de la compra de herra- teched_.asx y la transcripción de ésta en: http://www.micro-
mientas de Dundas Data Visualization Inc. para SQL soft.com/presspass/exec/bobmuglia/06-04-2007TechEd.mspx.
Server Reporting Services y la presentación de la CTP de Más información en el sitio del Tech-Ed Virtual en:
junio de 2007; los lanzamientos de la primera beta públi- http://www.virtualteched.com o en el sitio oficial en:
ca de Microsoft NET Framework 3.5, una CTP de Biz- http://www.microsoft.com/events/teched2007.
6
<< dnm.directo.noticias
Orcas ya tiene nombre: Visual Studio 2008 Altova anuncia soporte para
Open XML en XML Spy
Servirá a quienes desarrollen otros len-
guajes de programación u otras herra- Altova acaba de anunciar soporte com-
Otro de los recientes anuncios de Micro- mientas especializadas, que podrán inte- pleto para el formato Open XML introduci-
soft en el Tech-Ed de Orlando es el nom- grar dentro del mismo Visual Studio o eje- do con Office 2007 en su producto estrella,
bre comercial de Orcas, la nueva versión cutar de manera asilada. El modo inte- XMLSpy. XMLSpy 2007 Release 3 ofrece
de Visual Studio, que se llamará Visual grado está pensado fundamentalmente validación completa de documentos Open
Studio 2008 (los de marketing no se han para lenguajes de programación, por XML, ayuda inteligente en la edición de esos
estrujado el cerebro, ciertamente). Tam- ejemplo, Iron Python o uno que desarro- documentos, y soporte para el desarrollo de
bién se ha hecho público lo que ya sabía- llemos nosotros y que se unirá al resto de transformaciones XSLT y XQuery sobre
mos todos, que el próximo Framework se lenguajes de Visual Studio; el modo ais- datos en formato Open XML.
llamará .NET Framework 3.5 e irá lado está más bien pensado para herra- XMLSpy es el editor XML líder de la
incluido con Visual Studio 2008, si bien mientas especializadas desarrolladas por industria, y ofrece una vasta funcionalidad
esta versión, por primera vez, soportará nosotros, que pueden ejecutarse como basada en los estándares W3C relacionados
también versiones anteriores como .NET herramientas independientes, sin los len- con XML, incluyendo XSLT, XQuery,
Framework 2.0 y .NET Framework 3.0 guajes ni proyectos estándar, y se puede XPath, XML Schema y otros. Asimismo,
(aunque no las versiones 1.x, ya que entre desplegar -si procede- otra instancia de ofrece una perfecta integración con el entor-
éstas y las posteriores hay cambios en el un Visual Studio estándar. no integrado de Visual Studio 2005. Para más
CLR de importancia que lo impiden). No El SDK de Visual Studio 2008 con- información, visite http://www.altova.com.
obstante, Visual Studio 2008 se podrá eje- tendrá documentación y ejemplos para
cutar en la misma máquina que versiones ayudarle a comenzar a integrar sus herra- Novell hace una presentación
anteriores. mientas o lenguajes. de Silverlight 1.1 sobre Linux
La beta 2 de Visual Studio 2008 y Puede encontrar más información
Recientemente, Miguel de Icaza, vice-
.NET Framework 3.5 se esperan para este sobre Visual Studio 2008 Shell en la
presidente de desarrollo de Novell, presentó
mismo verano. Ésta soportará la licencia página http://msdn2.microsoft.com/en-
en el marco del REMIX 2007 que tuvo lugar
go-live, lo que quiere decir que ya pueden us/vstudio/bb510103.aspx o en el blog
en París una versión preliminar de Silverlight
ponerse aplicaciones en producción con del equipo de desarrollo de Visual
1.1 (a la que han denominado Moonlight)
esta versión previa. Studio Extensibility (VSX) en:
basada en los recursos del proyecto Mono,
Una de las novedades presentadas es http://blogs.msdn.com/vsxteam.
una alternativa de software libre de .NET,
Visual Studio 2008 Shell, que se incluirá Más información sobre Visual Studio
corriendo sobre un sistema Linux. Según de
de forma gratuita como parte del SDK de 2008 en: http://msdn2.microsoft.com/es-
Icaza, el equipo de desarrollo de Mono (dis-
Visual Studio 2008 a partir de la beta 2. es/vstudio.
tribuido por todo lo largo y ancho del plane-
ta) implementó la versión en 21 días de tra-
bajo continuo. Más información en el sitio
Primera CTP de Acropolis Web del producto, http://www.mono-
project.com/Moonlight.
Microsoft ha anunciado la primera CTP módulos reusables y conectables que le
de Acropolis, code name de un conjunto de permitirán crear fácilmente aplicacio-
componentes y herramientas que hacen nes complejas y basadas en el negocio
eScrum 1.0
más fácil para los desarrolladores la cons- en menos tiempo. Según publica Somasegar en su blog,
trucción y gestión de aplicaciones cliente • Integrar y alojar sus módulos en aplica- muchos equipos de desarrollo de Microsoft
.NET modulares y enfocadas al negocio. ciones tales como Microsoft Office o están usando metodologías ágiles para el desa-
Acropolis es parte de la ola de versiones construir rápidamente interfaces cliente. rrollo de software. Un equipo de desarrollo
“.NET Client Futures”, una vista previa de • Cambiar rápidamente el aspecto de sus de Microsoft ha construido para este propó-
la tecnología de Microsoft que está por venir aplicaciones usando temas incorpora- sito una herramienta basada en Web y cons-
para las aplicaciones cliente Windows. dos o diseños personalizados usando truida bajo VS TFS. Viendo la aceptación que
Acropolis se basa en WPF, propor- XAML. ha tenido internamente en los equipos de
cionando herramientas y componentes • Añadir características tales como nave- desarrollo, han decidido ponerla a disposi-
precompilados que ayudan a los desarro- gación de workflow y vistas específicas ción de los clientes en MSDN en http://www.
lladores a ensamblar aplicaciones. Con del usuario con un código mínimo. microsoft.com/downloads/details.aspx?Famil-
<<dotNetManía
Acropolis usted será capaz de: • Gestionar, actualizar y desplegar sus yID=55a4bde6-10a7-4c41-9938-
• Crear rápidamente experiencias de usua- módulos rápida y fácilmente. f388c1ed15e9&displaylang=en.
rio WPF para sus aplicaciones cliente. Más información en: http://windows- Más información en el blog de Somase-
• Construir aplicaciones cliente desde client.net/Acropolis. gar: http://blogs.msdn.com/somasegar.
7
eventos
REMIX 2007 en Madrid
eventos
<< Con la presencia de unos 700 diseñadores y desarro- sión de Desarrollo y Plataforma. Debió haber sido
lladores venidos de toda España, los pasados 4 y 5 de presentada por Forest Key, Development Tools Pro-
junio se celebró en el Círculo de Bellas Artes de duct Management Director (recientemente entrevis-
Madrid el REMIX 2007, evento que resumió lo mejor tado en dotNetManía), pero una inoportuna varice-
de lo sucedido el mes pasado durante el MIX de Las la le impidió hacer el viaje. Enrique Fernández hizo
Vegas, a la vez que sirvió para hacer la presentación énfasis en la aparente contradicción Alcance vs. Rique-
oficial en España de los productos que conforman la za (una frase que pierde necesariamente cuando se
nueva suite Expression, dirigida principalmente a los traduce el juego de palabras original, Reach vs. Rich, y
diseñadores. El evento contó con la presencia de des- que alude a la disponibilidad universal de las aplica-
tacadas personalidades llegadas desde Redmond espe- ciones Web frente a las mayores posibilidades gráfi-
cialmente para el evento, como Arturo Toledo (User cas de presentación de las aplicaciones locales), y en
Experience Technical Product Manager), Tim Sne- el conjunto de tecnologías y herramientas que sumi-
ath (Group Manager Client Platform Evangelism), nistra Microsoft para ofrecer a los diseñadores y desa-
Steve Marx, Katherine Heller y Jason Suess (Tech- rrolladores lo mejor de ambos mundos. Destacó ade-
nical Evangelists), así como de otros ponentes de reco- más la cada vez más amplia gama de dispositivos para
nocida fama internacional, como Tom Raftery los que los creadores de software actuales deben desa-
(www.tomrafteryit.net). rrollar aplicaciones, y cómo la estrategia de Micro-
La jornada del lunes 4 comenzó con la keynote de soft, centrada en .NET Framework, permite “atacar”
apertura, a cargo de Enrique Fernández Laguilho- todas esas plataformas con una inversión y curva de
at, Director de Desarrollo de Microsoft Ibérica, y aprendizaje mínimas. Por último, hizo la presenta-
David Carmona, Development Advisor de la divi- ción de Silverlight, un plug-in compatible con los
<< dnm.directo.eventos
vamente; mientras que la tercera (presentada con- Se espera que en el futuro REMIX se convierta en un
juntamente con Iván González, Cristian Man- evento periódico para la comunidad de desarrolladores
teiga y Octavio Hernández, de Plain Concepts) que utilicen las nuevas tecnologías presentadas este año.
Durante los días 2 al 3 de junio Micro- Ludópatas anónimos. Desarrollo de tores principiantes y profesionales com-
soft Ibérica celebró en el camping La juegos con XNA. Donde Javi Cantón puesto por una pantalla y un salpicadero
Aldea en El Rocío (Huelva) el último e Iñaki Ayúcar nos hicieron revivir aque- de coche real, desarrollado íntegramen-
CodeCamp, que reunió aproximada- llos viejos juegos con el lema “Un vista- te en C# y ManagedDirectX 9.0c. Más
mente a 200 emprendedores y apasiona- zo rápido a los últimos 30 años para enten- detalles de este proyecto en www.simax.es.
dos de la tecnología (o al revés). der los próximos 10”. El Rock ha muerto. Web 2.0. Chema
Los asistentes no eran, ni mucho El tunante y el tunero. Movilidad. Don- Alonso y Ricardo Varela.
menos, empresarios al uso, ávidos de de Alejandro Mezcua y Unai Zorrilla nos Ask the Experts.
hacer negocios y nuevos contactos con el dieron una larga lista de consejos para mejo-
dinero como único fin. Como en otros Reconocimiento de voz. Pilar Man-
rar el rendimiento de nuestro código.
CodeCamp, la gran mayoría eran apa- chón, de la empresa Intelligent Dialo-
Tetris empresarial. Cómo montar una gue Systems (INDISYS), presentó su
sionados de la tecnología, que lo único
empresa. “Ni un solo proyecto sin asis- asombroso proyecto que une al recono-
que pretenden es vivir de sus ideas, per-
tencia” por la Fundación Red Andalu- cimiento de voz el procesamiento del len-
sonas creativas que no aspiran a hacerse
cía Emprende, que es una entidad sin guaje natural, aportando un sistema de
ricos –aunque si cuela…–, pero sí a ganar-
ánimo de lucro dedicada a la promoción diálogo inteligente enfocado a la domó-
se la vida sin la presión de un jefe que les
de la actividad emprendedora en la tica, especialmente indicado para perso-
guíe, realizando trabajos repetitivos y poco
Comunidad Autónoma Andaluza (www.a- nas con problemas de movilidad, aunque
motivantes. La cantera está clara: los clu-
emprende.net). con otros posibles usos en la industria.
bes de .NET, creados en la universidad y
formados por estudiantes de este perfil. ShowCase Emprendedores. Alberto Permite hacer consultas al sistema en len-
El programa de ayuda permanente es Resco Pérez y Rubén Pérez Estévez guaje natural, del tipo “Ambrosio, ¿está
Emprendia (www.msdnemprendia.com), de la Universidad de Deusto presentaron todo apagado y la alarma conectada?”.
desde donde se ofrecen recursos técnicos, el proyecto ubiClassRoom, que es una Según sus creadores: “La voz y el lenguaje
licencias y promoción, así como recursos plataforma multicanal para el seguimien- natural son el futuro de las comunicacio-
de negocio y económicos a través de los to y reproducción de clases tanto en tiem- nes”. Y que lo digan, ¡yo quiero uno! Más
socios del programa. po real como en modo off-line desde cual- detalles en www.indisys.es.
En este evento intervinieron empren- quier localización. ShowCase Emprendedores.
dedores consagrados que vienen consi- ShowCase Emprendedores. “Ponemos Robocop .NET. Robótica. Cómo hacer
guiendo vivir de sus ideas hasta la fecha, voz a tus sentimientos”, por Óscar Pino una aplicación para robots con Microsoft
aunque ninguno rico, o eso creo, y técni- Morillas, José Luis González Sánchez Robotics Studio, por parte de Miguel
cos de renombre en el ámbito académico y Cristóbal Espinosa Morente, ganado- Ángel Ramos, MVP de ASP.NET y uno
y profesional. res de la edición española de la Imagine de los ganadores de una edición anterior
La agenda no fue únicamente sobre Cup 2007, presentaron su proyecto Sc@ut, de la Imagine Cup española con la Uni-
la filosofía del “emprendedor freekie” un software comunicativo aumentativo versidad de Sevilla.
(dicho cariñosamente), ni mucho menos; diseñado para favorecer el uso de sistemas
Programando la tele. Media Center.
hubo mucho de tecnología puntera y de interacción sonoro-pictográficos de los
Por Pedro J. Gómez y Nuno Sima-
ejemplos de pequeñas empresas que han niños autistas (http://scaut.ugr.es).
ria de la empresa Hoplite Software
salido adelante -o están en ello- con sus La Web se vuelve sexy. Silverlight. Isa- (www.hoplite.es), que han desarrollado una
ideas, como por ejemplo con el recono- bel Gómez y José Murillo, ambos ISV versión del servicio de revelado de foto-
cimiento de voz, desarrollo de simulado- Developer Evangelists en el departamento grafías on-line revelaonline.com para Media
res y juegos, robótica, programación para DPE de Microsoft Ibérica, dieron un Center y que han conseguido que Micro-
Media Center, etc.; ejemplos de que es repaso a las características de las futuras soft presente esta aplicación en el lanza-
posible hacerse un hueco en este merca- versiones 1.0 y 1.1 de Silverlight (http://sil- miento público del Media Center y que
do si se tiene una buena idea y el empu- verlight.net). la incluya en el Online Spotlight.
je necesario. ShowCase Emprendedores. Iñaki Ayú-
agenda
<<dotNetManía
10
Octavio Hernández
entrevista
para un lingüista que nunca antes pensó aproximadamente. día, después de unos seis meses, una edi-
que tendría que hacer algo más técnico Entonces llegó el momento de bus- torial llamó a la dirección de la empresa
que instalar un equipo de música. car un trabajo adecuado. Seguía intere- diciendo que estaban buscando un autor
1
Ver http://en.wikipedia.org/wiki/Osborne_1.
13
<< dnm.directo.entrevista
que escribiera un libro sobre Turbo Pas- hace ya muchos años), valían 30 centavos Muchos de mis viejos amigos de Bor-
cal. Alguien recordó que yo había sido cada una. land han terminado trabajando en Micro-
periodista: “Ese tío nuevo de soporte téc- Tuve la fortuna, no obstante, de soft. La mayoría de ellos vino hace ya
nico se ganaba la vida escribiendo, ¿por encontrar trabajo rápidamente en Fala- años, y yo me siento como el último reza-
qué no le preguntan si quiere escribir el fel, una empresa creada por algunos vie- gado que finalmente ha encontrado el
libro?”. Así que escribí en unos tres meses jos amigos de Borland. Allí empecé a camino de Scotts Valley a Redmond.
mi primer libro, “El 101 de programación programar en C#, y esa fue mi puerta Por supuesto, es emocionante volver
en Turbo Pascal”; eso me introdujo en el de entrada al mundo del desarrollo para a estar en un mismo equipo con Anders
mundo de la escritura de libros técnicos. .NET Framework. Hejlsberg. Es un desarrollador de gran
Después de publicado el libro, ¿Cómo es que viniste a trabajar a talento, y una persona fascinante a la que
alguien llamado David Intersimone, Microsoft? es un placer conocer. A Chuck Jazd-
del departamento de Relaciones con los En el momento en que empecé a tra- zewski también lo veo frecuentemente.
desarrolladores, me hizo una visita. Esta- bajar en Falafel, era un entusiasta de De hecho, un par de veces he pasado por
Linux y Java, y realmente no esperaba delante del despacho de Anders y los he
que la plataforma .NET me interesara visto hablando como si fuera en los vie-
mucho. Sabía que Anders Hejlsberg, jos tiempos, cuando planificaban la
el gran arquitecto que creó Turbo Pas- siguiente versión de Delphi. Hay muchos
cal y Delphi, estaba involucrado en el otros viejos amigos de Borland por aquí,
desarrollo de C#, pero no podía imagi- y verlos es siempre un placer.
narme que aquello me entusiasmaría Por supuesto, trabajar con Anders es
mucho. Estaba equivocado. C# y Visual un privilegio muy especial. Él tiene
Studio me sedujeron desde el principio. muchas cualidades, pero creo que su
El lenguaje estaba muy bien diseñado, y mayor talento está en su habilidad para
el entorno era fácil de usar y estaba reple- analizar un problema complejo y descu-
to de las características que hacen el desa- brir una solución simple e intuitiva. Su
rrollo fácil y productivo. mente filtra automáticamente las solu-
ba trabajando en un vídeo técnico para Luego Steve Teixeira, uno de mis ciones confusas o demasiado complejas.
el aprendizaje de C++ y necesitaba ayu- compañeros en Falafel se fue a trabajar Siente una aversión natural hacia las solu-
da con el guión. Antes de darme cuen- a Microsoft. Seguí su carrera desde la ciones enredadas. Esta es una opinión
ta, estaba en un estudio de grabación. El distancia, y me decía que estaba muy muy subjetiva mía, pero creo que parte
vídeo tuvo mucho éxito, y aunque lue- contento en Seattle. Steve y yo nos de su genio también está simplemente
go no trabajé en ninguno más, sí escribí conocemos desde hace mucho tiempo, en saber cuándo eliminar una caracterís-
nueve libros más de los que en total se y sus experiencias en Microsoft tuvie- tica que aún no se puede implementar
han vendido más de 100.000 copias. ron su influencia en mí. limpiamente. Para él es mejor no hacer
En cierto momento, David Intersi- Mi propia fascinación con C# con- algo antes que hacerlo mal. Por supues-
mone me llevó con él al departamento tinuó creciendo, y como sin darme to, él generalmente encuentra solucio-
de Relaciones con los desarrolladores, cuenta empecé a buscar trabajo en nes a problemas que se resisten a otros
y empecé a viajar por todo el mundo a Redmond. Al poco tiempo volaba a desarrolladores; pero si no logra encon-
presentar Delphi, C++ Builder y JBuil- Seattle para una entrevista, y unas trarla, sabe cuándo retroceder. Otros
der a audiencias técnicas. Fueron tiem- semanas después aceptaba la oferta. arquitectos hacen mucho énfasis en la
pos maravillosos, y aún sigo siendo buen Fue otro de esos cambios contunden- completitud, y a veces terminan ofre-
amigo de David. tes que parecen ocurrir sin que uno se ciendo soluciones difíciles de usar. Por
¿Cuándo dejaste Borland? dé bien cuenta de cómo han sucedido. último, puede que a él no le guste que yo
Dejé Borland en 2000. Como casi Quince años atrás me mudé del esta- diga esto, pero creo que otra parte más
todo el mundo (al menos, eso parece), me do de Washington a California para de su genio está en saber cuándo hay que
fui a trabajar a una empresa “.com” de trabajar en Borland; ahora volvía a crear algo nuevo y cuándo utilizar algo
nueva creación en el Silicon Valley. Elegí Washington para trabajar en Micro- que otro ha desarrollado. Las personas
muy mal momento, porque la debacle de soft. Había dado una vuelta en círcu- creativas frecuentemente quieren hacer-
las “.com” se produjo solo algunos meses lo para volver al sitio del que partí; lo todo por sí mismas. Pero Anders reco-
después. Cierto día tenía miles de accio- pero ahora todo era diferente. noce rápidamente una buena solución
<<dotNetManía
nes a 130 dólares cada una, y un mes des- ¿Qué se siente al volver a trabajar cuando la ve. Él la sopesa contra las otras
pués habían perdido todo su valor. La últi- con viejos amigos como Anders, opciones, y la utiliza si piensa que es la
ma vez que comprobé su valor (de esto Chuck y otros? mejor alternativa.
14
<< dnm.directo.entrevista
aplazada. En el futuro, estas técnicas de
programación funcional nos darán una
oportunidad de hacer un procesamien-
to paralelo que es difícil de lograr con el
código tradicional.
LINQ y la base de código basado en la programación LINQ es también flexible y confi-
funcional que lo acompaña son pasos de avance gurable. Ya se han desarrollado pro-
veedores LINQ personalizados, como
gigantescos para la comunidad de desarrolladores LINQ to Amazon. Los programado-
res con talento podrán crear otras
herramientas similares, que luego
serán utilizadas por toda la comunidad
para mejorar sus oportunidades de
desarrollo. LINQ, los genéricos, las
¿Cómo es tu interacción con el res- ¿Cuál es tu opinión respecto a las expresiones lambda, los árboles de
to del equipo de C#? nuevas características que se incluirán expresiones y otras innovaciones en el
En el equipo de C# hay una cantidad en C# 3.0, y especialmente LINQ? lenguaje C# hacen posible que las tare-
de talento increíble. Yo he sido bendeci- LINQ y la base de código basado en as de desarrollo sean mucho más sim-
do con la oportunidad de trabajar en dos la programación funcional que lo acom- ples de lo que eran anteriormente.
empresas de software de talla mundial. paña son pasos de avance gigantescos para LINQ y la programación funcional
Cuando empecé a trabajar allí, Borland la comunidad de desarrolladores. El bene- representan un cambio significativo en la
tenía más desarrolladores de primera línea ficio principal y obvio es la introducción manera en que los desarrolladores escri-
por metro cuadrado que ninguna otra de capacidades de consultas nativas para ben el código. No obstante, las tecnologías
empresa de software en aquel momento. el lenguaje C#. Llevamos años desarro- fundamentales de LINQ, como LINQ
Aquello era un imán para el talento, y el llando aplicaciones corporativas en las que to SQL o LINQ to Objects, no son difí-
entusiasmo y energía con el que los desa- la mitad de la aplicación está escrita en ciles de entender. Éste es un momento
rrolladores de Borland perseguían sus SQL y la otra mitad en un lenguaje de apasionante para los desarrolladores que
objetivos era inspiradora. programación estándar como C#, VB, quieran expandir su arsenal de habilida-
La cantera de talento y la atmósfera Java o Delphi. LINQ to SQL es un gran des para escribir código más fácilmente y
de trabajo aquí en Microsoft son muy paso hacia el fin de ese cuadro esqui- con resultados más potentes.
parecidas a las que había en Borland zofrénico. Vamos a disponer de una sin- Charlie, tus libros han sido recono-
durante los 90. Igual que Phillip Kahn, taxis única, basada en un fuerte control cidos siempre por su gran valor
Bill Gates y Steve Ballmer tienen tanto de tipos y dotada de ayuda Intellisense didáctico. ¿Podemos esperar en un
grandes habilidades técnicas como de ges- que utilizaremos para crear aplicaciones futuro cercano algún libro tuyo, por
tión. Microsoft ha desarrollado una cul- de bases de datos. La capacidad de desa- ejemplo, sobre estas nuevas carac-
tura muy sofisticada centrada en la tec- rrollar y depurar nuestras aplicaciones de terísticas de C#?
nología. Cuando se combinan esas capa- bases de datos sobre una base de código Estoy trabajando duro para sacar
cidades de gestión con el extraordinario única es un paso enorme en la dirección tiempo para escribir un libro sobre
potencial intelectual de la empresa... bue- correcta. LINQ es un hito muy signifi- LINQ. Creo que podré tener algo para
no, realmente no hay nada similar en el cativo en la historia de los lenguajes de principios del año próximo, pero no todas
mundo. Con esto no estoy diciendo que programación. las piezas han sido encajadas aún.
la empresa es perfecta; pero en términos Y si se mira por detrás de LINQ se Sin duda alguna, escribir y trabajar
de habilidades técnicas y potencial inte- verán los fundamentos de programación con la comunidad son mis grandes pasio-
lectual es indudablemente extraordinaria. funcional y declarativa sobre los que está nes. No hay nada que yo preferiría hacer
Microsoft es una empresa guiada creado. Ahí encontraremos toda una aquí en Microsoft que escribir sobre tec-
por métricas. El equipo de gestión es serie de características (notablemente, nología y conocer a los miembros de esta
muy práctico, y tiene un enfoque muy los árboles de expresiones) que añaden extraordinaria comunidad.
serio en su trabajo. Estoy aprendiendo una gran potencia al arsenal de herra- Por favor, unas palabras finales…
muchísimo de la interacción con un mientas de un programador. A diferen- Simplemente agradeceros la opor-
equipo que hace énfasis en la impor- cia del código imperativo, un árbol de tunidad de participar en esta entrevis-
<<dotNetManía
tancia de unos objetivos de desarrollo expresión no está atado a la lógica que ta, y el gran trabajo que hacéis para la
claros, y de trabajar luego sistemática- lo rodea –es válido de manera indepen- comunidad. Espero que algún día nos
mente para alcanzarlos. diente–. Más aún, su ejecución puede ser veamos en España.
15
opinión
Rodrigo Corral
Personas o bits
Los desarrolladores de << Pensemos en las típicas estadísticas que a menudo leemos
software, yo el primero, sobre los motivos por los que los proyectos fallan. Nunca cuestiones o
tendemos a centrarnos en dificultades técnicas ocupan los primeros lugares. Otro síntoma claro
de que la tecnología no es el factor clave es el hecho evidente de que
cuestiones técnicas, a existen proyectos exitosos y sonoros fracasos desarrollados en todas la
pensar que este tipo de tecnologías y lenguajes de programación.
cuestiones son las de Uno de los autoengaños en los que solemos caer los desarrollado-
mayor importancia en la res, yo el primero, es preocuparnos demasiado por las herramientas o
vida de los proyectos de las tecnologías, sobre todo por las nuevas. A menudo se encuentra a los
desarrolladores discutiendo sobre tal o cual herramienta o nuevo len-
desarrollo. Pero esto no es guaje… Es normal, los fabricantes de esas herramientas promueven ese
cierto. Voy a dedicar esta debate prometiendo mejoras en la productividad que debemos reco-
columna a argumentar el nocer rara vez son tales y que, si se producen, nunca llegan a lo pro-
porqué. La cuestión es metido. ¿Alguien puede citar alguna herramienta que mejorase radi-
muy interesante en mi calmente su productividad? No hablo de usar un potente IDE frente a
usar simple editor de texto, sino de usar la versión actual de un poten-
opinión, porque quizás los te IDE frente a usar la versión anterior. Pensándolo en frío, creo que
desarrolladores y la es evidente que, si bien es cierto que las herramientas mejoran nuestra
Rodrigo Corral es MVP industria del software han productividad, estas mejoras no son radicales, sino que se producen de
y MCPD y uno de los manera muy distribuida en el tiempo. En resumen: las herramientas
fundadores de Plain
estado equivocando dónde
deben poner su foco de evolucionan, pero no revolucionan de manera puntual nuestra mane-
Concepts, donde cola-
bora como arquitecto ra de hacer software. Esto no quiere decir que debamos desdeñar las
atención. mejoras que puedan surgir de utilizar las mejores herramientas, sino
de software. Además
trabaja en Sisteplant que las mejoras que debemos esperar en este aspecto del desarrollo de
como líder técnico en software son pequeñas. Lo aquí comentado se aplica, punto por pun-
un proyecto desarrolla- to, también a las tecnologías. ¿Alguien piensa que es mucho más fácil
do sobre .NET 3.0 utili- desarrollar una aplicación distribuida con WCF que con Remoting o
zando Scrum como Web Services, o incluso que con DCOM? No, la dificultad no está rela-
metodología de desa- cionada con las herramientas a usar sino con la complejidad del pro-
rrollo. También adminis-
blema a resolver.
tra Geeks.ms. Su blog es
http://geeks.ms/blog/ Otro punto que tendemos a olvidar es que las tecnologías y herra-
rcorral. mientas, antes de que tengamos la oportunidad de que nos ayuden,
tenemos que aprender a utilizarlas y este proceso, a menudo, minimi-
za las mejoras que podemos esperar.
<< dnm.opinión
Con lo que he comentado anteriormente no quiero decir y la maestría de los desarrolladores. Es curioso cómo cuando
que no haya que buscar y seleccionar nuevas herramientas se habla de este tema todo el mundo asiente, pero sin embar-
o tecnologías y aprender a utilizarlas, sino que no debemos go luego todo el mundo lo olvida con facilidad. A menudo se
creer que vayan a cambiar radicalmente nuestra capacidad trata a los desarrolladores como piezas intercambiables, o meto-
o la de nuestro equipo a la hora de crear software y sacar dologías con amplia aceptación como CMMI se olvidan de
adelante nuestros proyectos. incluir el factor humano en la ecuación, centrándose única-
Las metodologías son otra de las áreas que prometen gran- mente en el proceso. Como si un excelente proceso permitie-
des mejoras en el desarrollo de software, y en este caso creo se realizar desarrollos excelentes sin desarrolladores excelen-
que, bien implementadas, las metodologías (sobre todo aque- tes. La realidad es que desarrolladores excelentes pueden lle-
llas centradas en ayudar al desarrollador) producen grandes var a cabo desarrollos excelentes con metodologías mediocre-
resultados. El problema es que implementar bien una meto- mente implantadas o incluso sin metodología explícita algu-
dología es un proceso extremadamente difícil, complejo, cos- na. Si todos asentimos cuando alguien clama que las personas
toso y largo en el que muchas empresas o equipos de desarro- son el factor principal, ¿por qué nos olvidamos de este factor
llo fallan en repetidas ocasiones. ¿Cuántos de vosotros habéis con tanta facilidad? Quizá sea porque es el factor sobre el que
sufrido un intento fallido de implementar una metodología? es más difícil actuar. Pero no por eso debemos dejar de actuar.
Estoy seguro que muchos. ¿Cuántos de vosotros tenéis teóri- Un hecho que la industria del software lleva obviando
camente una metodología y realmente lucháis para que nos os durante gran parte de su historia es que los buenos desarro-
entorpezca? Pocos equipos de desarrollo tienen una metodo- lladores son extremadamente baratos. Existen numerosísimos
logía y entre los que la tienen, pocos están plenamente satis- estudios que “demuestran” que la diferencia de rendimiento,
fechos con ella. Resumiendo, usar una metodología adecua- se mida como se mida, entre los mejores y los peores progra-
da puede mejorar en mucho nuestra productividad, pero es madores es de alrededor de ¡treinta veces! Ahora os propon-
muy difícil cerrar el triángulo mágico de encontrar una meto- go un juego: pensad en el mejor y el peor desarrollador con
dología adecuada, implantarla con éxito y lograr que ayude a quienes hayáis trabajado. Pensad en su rendimiento, y decid-
los desarrolladores. Esta última es condición necesaria para me si no se cumple lo anterior. Ahora pensad en su sueldo,
que perdure y se extienda a otros proyectos de nuestra empre- ¿alguien cree que la diferencia era de alrededor de treinta veces?
sa. Solo una metodología que ayude a los desarrolladores y que La conclusión es clara: la relación rendimiento/sueldo no es
mejore su vida profesional día a día tiene alguna oportunidad lineal; luego proporcionalmente los desarrolladores, cuanto
de perdurar. El motivo es claro: todos somos reacios al cam- mejores y más experimentados son, más baratos resultan.
bio, y mucho más reacios a aquellos que no se revelan rápida Entonces, ¿por qué sigue habiendo proyectos plagados de gen-
y claramente como ayudas. Es también evidente que el rol más te sin experiencia?
numeroso en los proyectos de desarrollo es el de desarrolla- Las personas cuentan mucho, pero aún cuentan más
dor, mucho más que el de jefe de proyecto, gerente y demás cuando juntamos varias. Cuando lo que se comparan son
puestos “de responsabilidad”, y por tanto cualitativamente de equipos y no personas individuales, la diferencia es todavía
quien más resistencia encontramos cuando una metodología más apabullante. El rendimiento que puede alcanzar un
no ayuda es, precisamente de los desarrolladores. No deja de equipo bien engrasado es espectacular. El problema es que
ser paradójico, además, que a menudo se escuche poco o nada solo quien ha estado en alguna ocasión en uno de esos equi-
la opinión de los desarrolladores a la hora de seleccionar e pos puede saber de lo que hablo. Pero creedme, nada pue-
implantar una metodología. de impulsar más vuestros desarrollos que lograr que el equi-
Bien, hemos comentado que a pesar de lo que tende- po de desarrollo funcione como un reloj. De hecho, nues-
mos a pensar, las herramientas, las tecnologías y las meto- tro principal cometido como gestores de proyectos es, sin
dologías no tienen un impacto radical en mejorar cómo duda, construir el ambiente en el que nuestro equipo pue-
hacemos software. Aunque tienen su importancia. También da realizar su trabajo en condiciones óptimas. El resto, aun-
es claro que en el mundo competitivo en el que nos move- que es importante, es menos importante.
mos, cuando hablamos de desarrollo de software necesita- Supongo que más de uno os estaréis preguntando por qué
mos mejorar día a día. Ahora os preguntaréis: si lo esencial os cuento todo esto. La idea que tengo es dedicar algunas entre-
en el desarrollo de software no son, según defiendo en este gas de este espacio que tan amablemente me ha cedido dot-
artículo, las herramientas, las tecnologías y las metodologías, NetManía a desgranar lo que se esconde bajo cada uno de los
¿qué es lo esencial?: las personas y sus interacciones. puntos que constituyen el Manifiesto Ágil, cimiento sobre el
El factor más importante en el desarrollo de software es que se fundamentan todas las metodologías ágiles. Todo lo que
la calidad de los desarrolladores que llevan a cabo el trabajo. os he contado en esta entrega se corresponde con el principio
Nada puede suplir este factor. A pesar de los muchos intentos que dice: “Individuos e interacciones sobre procesos y herra-
que en la industria del software se han hecho por hacernos cre- mientas”. ¿No os parece que todo lo dicho tiene sentido y que
<<dotNetManía
er lo contario. Un equipo de “juniors” es un equipo poco capaz, sin embargo es algo que llevamos obviando mucho tiempo?
lo dirija quien lo dirija, use las herramientas que use y aplique ¿De qué pensáis vosotros que va el desarrollo de software, de
la metodología que aplique. Nada puede suplir la experiencia personas o de bits?
17
Cristian Manteiga
plataforma.net
Cuando el diseño conoció
a Media Center
Desarrollo de aplicaciones para Windows Media Center con WPF
tes de la resolución real; pero este no es el único fac- do se pueden aplicar de una forma muy ágil y poten-
tor que nos puede hacer optar por usarlo para el desa- te haciendo uso de Expression Blend, la herramienta
rrollo de nuestra aplicación. de diseño de interfaces para WPF, pero también des-
19
<< dnm.plataforma.net
de Visual Studio 2005, así como en la Hacer hincapié también en el archi- El servicio de navegación de nues-
futura versión de éste, que se espera vo MediaCenterTheme.xaml, ya que nos tra aplicación nos proporciona todo lo
para finales de año. hace accesible un diccionario de recur- necesario para poder navegar entre las
sos, con un ámbito a nivel de aplicación, distintas páginas que la componen; sus
Desarrollando para que contiene plantillas de los principa- miembros más relevantes son los que
les controles, modificando su aspecto podemos ver en la tabla 1.
Windows Media Center para adaptarlo a los requisitos de usa- Otro de los aspectos relevantes
Para poner en práctica lo expuesto, bilidad de Media Center (listado 1). para el desarrollo de nuestras aplica-
vamos a presentar una sencilla aplica-
ción de prueba que nos permitirá ver
qué ventajas nos proporciona utilizar
WPF en nuestros desarrollos. Tenien- <Application x:Class=”MediaCenterDNM.App”
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
do en cuenta que el objetivo que persi-
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
gue este artículo no es el de mostrar StartupUri=”Page1.xaml”>
cómo desarrollar aplicaciones XBAP <Application.Resources>
con WPF, nos centraremos en los <ResourceDictionary>
aspectos más relevantes, aquellos que <ResourceDictionary.MergedDictionaries>
son comunes a todos los desarrollos. <ResourceDictionary Source=”MediaCenterTheme.xaml” />
Prerrequisitos: </ResourceDictionary.MergedDictionaries>
• Microsoft Windows Vista Home, </ResourceDictionary>
Premium o Ultimate. </Application.Resources>
</Application>
• Microsoft Visual Studio 2005.
• Microsoft Windows Media Cen-
ter SDK 5.1 (5.0 Update).
Listado 1. Código del archivo App.xaml que hace referencia al diccionario de recursos
• Microsoft Expression Blend 1.0.
Especial atención nos merecen las Una vez llevado a cabo el diseño de ciones es el hecho de poder mostrar
referencias a los ensamblados Micro- la primera página de nuestra aplicación, mensajes al usuario a través de venta-
soft.MediaCenter y Microsoft.MediaCen- la primera duda que se nos plantea es nas. Tal y como comentamos ante-
ter.UI, que nos proporcionan acceso al cómo llevar a cabo la navegación entre riormente, las aplicaciones XBAP no
modelo de objetos de Media Center, las distintas páginas que la componen. admiten la instanciación de nuevas
tanto a nivel de entorno como a nivel Esta tarea se lleva a cabo con bastante ventanas, por lo que se hace necesario
de los elementos de la interfaz, respec- simplicidad usando el servicio de nave- el uso de las API de Windows Media
tivamente (figura 2). gación de WPF, que se encuentra acce- Center para llevar a cabo esta tarea.
sible a través del espacio de nombres Accediendo al entorno actual de eje-
System.Windows.Navigation. cución de nuestra aplicación, podre-
Tabla 1
Figura 2
20
<< dnm.plataforma.net
mos hacer uso de alguno de los dos siguientes méto- ción final. Para ejecutar la aplicación, no basta con
dos (tabla 2): iniciar la depuración, tal y como haríamos con una
aplicación normal: debe-
mos abrir el archivo
Tipo Descripción
$(OutputPath)\MediaCen-
DialogNotification Muestra una ventana de diálogo de notifica- terDNM.mcl para ejecutar
ción al usuario la aplicación y así poder
depurarla.
Dialog Muestra una ventana modal al usuario
Como buena prácti-
Tabla 2 ca en las tareas de depu-
ración, se deben dar
Conclusión
Figura 3. Página de introducción de la aplicación
WPF nos permite desarrollar aplica-
ciones para Windows Media Center
haciendo uso de las mejores herramientas para el
Ejecución y depuración diseño de interfaces, y al mismo tiempo sacar par-
tido de toda la potencia que nos ofrece .NET Fra-
<<dotNetManía
Visual Studio 2005 nos proporciona la posibilidad de mework 3.0 dentro del marco del hogar multime-
depurar nuestra aplicación dentro de Media Center, dia, sin menoscabar los servicios que Media Cen-
lo que nos permite probarla en su entorno de ejecu- ter nos expone mediante sus API.
21
<< dnm.plataforma.net
<Page
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
x:Class=”MediaCenterDNM.Intro”
Title=”Intro”
Width=”Auto” Height=”Auto”
xmlns:d=”http://schemas.microsoft.com/expression/blend/2006”
xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006”
mc:Ignorable=”d”
>
<Grid Background=”{DynamicResource PageGlassyBackground}”>
<!—Código correspondiente a la mascota de dotNetManía—>
<TextBlock HorizontalAlignment=”Left” Margin=”390,-300,0,0” VerticalAlignment=”Center”
Width=”Auto” Height=”Auto” FontSize=”72” TextWrapping=”Wrap”>
<Run FontSize=”60”>dot</Run>
<Run FontSize=”60” FontWeight=”Bold” Foreground=”#FFFF0000”>Net</Run>
<Run FontSize=”60”>Manía</Run>
</TextBlock>
<TextBlock HorizontalAlignment=”Left” Margin=”390,-120,0,0” VerticalAlignment=”Center”
Width=”400” Height=”Auto” FontSize=”24” Foreground=”#FFFFFFFF” TextWrapping=”Wrap”>
<Run Language=”es-es”>Desarrollo de aplicaciones para Windows Media Center con</Run>
<LineBreak/>
<Run Language=”es-es”>Windows Presentation Foundation</Run>
</TextBlock>
<Button d:LayoutOverrides=”Height” HorizontalAlignment=”Left” Margin=”390,110,120,0”
VerticalAlignment=”Center” Width=”250” Content=”Entrar” Click=”Entrar_Click”/>
</Grid>
</Page>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MediaCenterDNM
{
/// <summary>
/// Interaction logic for Intro.xaml
/// </summary>
}
}
22
<< dnm.plataforma.net
<Page
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
x:Class=”MediaCenterDNM.Main”
Title=”Main”
Width=”Auto” Height=”Auto”
>
<Grid Background=”{DynamicResource PageGlassyBackground}”>
<StackPanel HorizontalAlignment=”Center” Margin=”0,0,0,0” VerticalAlignment=”Center”>
<Button Content=”Mostrar PopUp” Click=”PopUp_Click”/>
<Button Content=”Volver atrás” Click=”GoBack_Click”/>
<Button Content=”Ir al Inicio” Click=”Inicio_Click”/>
</StackPanel>
</Grid>
</Page>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MediaCenterDNM
{
/// <summary>
/// Interaction logic for Main.xaml
/// </summary>
public partial class Main : System.Windows.Controls.Page
{
public Main()
{
InitializeComponent();
}
private void PopUp_Click(object sender, RoutedEventArgs e)
{
Microsoft.MediaCenter.Hosting.AddInHost.Current.MediaCenterEnvironment.Dialog(
“Esto es una ventana modal”, “Advertencia”,
Microsoft.MediaCenter.DialogButtons.Ok, 10, true);
}
private void GoBack_Click(object sender, RoutedEventArgs e)
{
if (NavigationService.CanGoBack)
NavigationService.GoBack();
}
private void Inicio_Click(object sender, RoutedEventArgs e)
{
Microsoft.MediaCenter.Hosting.AddInHost.Current.MediaCenterEnvironment.
NavigateToPage(Microsoft.MediaCenter.PageId.Start, null);
}
}
}
Referencias
<<dotNetManía
23
Luis Miguel Blanco
plataforma.net
DataGridView y estilos.
Presentaciones de datos visualmente atractivas
Mostrar datos en formato tabular es una funcionalidad necesaria en la inmen-
sa mayoría de las aplicaciones que se desarrollan. Es por ello que Visual Studio
2005 incorpora, para las aplicaciones orientadas al entorno Windows, un nue-
vo control de cuadrícula: DataGridView, evolución del anterior DataGrid, dota-
do de un excelente conjunto de funcionalidades que le confieren una gran
potencia y flexibilidad. En el presente artículo haremos un repaso de los esti-
los, una de las características que este control proporciona, con la finalidad de
conseguir que la información visualizada en nuestras aplicaciones tenga un
toque más sugestivo para los usuarios.
Propiedad Descripción
// establecer la fuente de datos
BackColor Color de fondo para la celda. // para el DataGridView
ForeColor Color de primer plano para la celda. this.dgvGrid.DataSource=dsAdvWorks;
this.dgvGrid.DataMember=“DimProduct”;
SelectionBackColor Color de fondo para la celda en estado seleccionado
SelectionForeColor Color de primer plano para la celda en estado selec- // creación de estilo para el
cionado. // control DataGridView
DataGridViewCellStyle styEstilo;
Format Cadena de formato para personalizar la presentación
de datos numéricos, fechas, etc. styEstilo =
Alignment Valor de la enumeración DataGridViewContentAlignment, new DataGridViewCellStyle();
que utilizaremos para establecer la alineación del con- styEstilo.BackColor =
tenido de la celda. Color.LightYellow;
styEstilo.ForeColor=
Font Tipo de letra con el que se mostrará el texto de la celda. Color.DarkViolet;
styEstilo.Alignment=
WrapMode En celdas con texto extenso, esta propiedad permite DataGridViewContentAlignment.TopRight;
dividir dicho texto en varias líneas o truncarlo. styEstilo.NullValue =
“Sin asignar”;
NullValue Tipo Object que utilizaremos para mostrar el valor de
styEstilo.SelectionBackColor=
la celda cuando el campo original del origen de datos Color.DarkGreen;
sea nulo. styEstilo.SelectionForeColor =
Padding Establece el espacio de relleno para los márgenes de Color.LightSkyBlue;
la celda. styEstilo.WrapMode =
DataGridViewTriState.True;
Tabla 1. Propiedades de la clase DataGridViewCellStyle
this.dgvGrid.DefaultCellStyle =
las celdas, existen algunos aspectos adi- styEstilo;
cionales dignos de mención, como sería
// obtención de datos el tratamiento del texto mostrado. Por
SqlConnection cnConexion;
cnConexion = new SqlConnection(); defecto, el contenido de las celdas queda Listado 2
cnConexion.ConnectionString = alineado a la izquierda, pero en esta oca-
“Data Source=localhost;” + sión, utilizando la enumeración Data- Respecto a la columna SpanishPro-
“Initial Catalog=AdventureWorksDW;”+
“Integrated Security=True”; GridViewContentAlignment, logramos que ductName, habremos notado que es un
se sitúe en la parte superior derecha. campo con valores de longitud superior
string sSQL;
sSQL=“SELECT ProductKey, ” +
“SpanishProductName, ListPrice, ”+
“EndDate, ProductLine ”;
sSQL+=“FROM DimProduct “;
sSQL+=“WHERE ListPrice IS NOT NULL”;
SqlCommand cmdComando;
cmdComando = new
SqlCommand(sSQL, cnConexion);
SqlDataAdapter daAdaptador;
daAdaptador = new
SqlDataAdapter(cmdComando);
DataSet dsAdvWorks;
dsAdvWorks = new DataSet();
daAdaptador.Fill( dsAdvWorks,
“DimProduct”);
<<dotNetManía
25
<< dnm.plataforma.net
al resto. Gracias a la propiedad WrapMo- // creación de estilo para las cabeceras del DataGridView
de del estilo, conseguimos que su texto DataGridViewCellStyle styEstilo;
se divida en varias líneas, de forma que styEstilo = new DataGridViewCellStyle();
encaje adecuadamente en la celda. Esto styEstilo.BackColor = Color.LightBlue;
podemos comprobarlo aumentando styEstilo.ForeColor = Color.DarkOliveGreen;
manualmente la altura de algunas filas styEstilo.Font = new Font(“Bradley Hand ITC”, 10, FontStyle.Bold);
en la cuadrícula. styEstilo.Alignment = DataGridViewContentAlignment.BottomRight;
Finalmente, nos encontramos con
// asignar estilo a las cabeceras del control
el caso de registros conteniendo cam-
this.dgvGrid.ColumnHeadersDefaultCellStyle = styEstilo;
pos con valores nulos, como ocurre en
la columna EndDate, para la que utiliza- Listado 3
mos una cadena con un literal infor-
mativo de tal situación en la propiedad
NullValue del estilo. bleHeadersVi- //....
Como puede comprobar el lector, sualStyles , la // establecer altura para las
establecer un estilo básico en un con- cual tiene por // cabeceras de columna
trol DataGridView resulta una operación defecto el valor this.dgvGrid.ColumnHeadersHeightSizeMode =
muy sencilla de realizar. true, significando DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
esto que las cabe- this.dgvGrid.ColumnHeadersHeight = 75;
ceras del control
Aplicación de estilos utilizarán la com- // deshabilitar el uso de estilos
// del tema actual
binación de colo-
por regiones res del tema
this.dgvGrid.EnableHeadersVisualStyles = false;
26
<< dnm.plataforma.net
27
<< dnm.plataforma.net
Modificación dinámica
de estilos durante
la navegación
Cuando manipulamos un control Data-
GridView, existen situaciones en las que
resultaría deseable que al efectuar una
interacción determinada sobre el con-
trol, este respondiera mediante algún
cambio en su estado visual.
Pongamos como ejemplo un
requerimiento bastante típico: cuan-
do el usuario desplaza el cursor del
ratón sobre las celdas del control,
debemos cambiar las propiedades de
presentación de la celda sobre la que
se encuentre el cursor, o bien la fila
<<dotNetManía
entera.
Tal funcionalidad la lograremos
utilizando los eventos CellMouseEn-
28
<< dnm.plataforma.net
// crear un estilo para cada tipo de datos de las columnas del grid
DataGridViewCellStyle styTexto = new DataGridViewCellStyle();
styTexto.BackColor = Color.SeaShell;
styTexto.ForeColor = Color.DarkMagenta;
styTexto.SelectionBackColor = Color.Lime;
styTexto.SelectionForeColor = Color.MediumBlue;
styTexto.Alignment = DataGridViewContentAlignment.TopCenter;
styTexto.Font = new Font(“Century Gothic”, 10, FontStyle.Italic |
Gracias a la propiedad
FontStyle.Bold);
styTexto.WrapMode = DataGridViewTriState.True; WrapMode del estilo, con-
DataGridViewCellStyle styFecha = new DataGridViewCellStyle();
styFecha.BackColor = Color.LightYellow;
seguimos que su texto se
styFecha.ForeColor = Color.Olive;
styFecha.SelectionBackColor = Color.Lime; divida en varias líneas, de
styFecha.SelectionForeColor = Color.MediumBlue;
styFecha.Format = “dddd, dd \\de MMMM \\de yyyy”;
styFecha.NullValue = “SIN FECHA”;
forma que encaje adecuada-
DataGridViewCellStyle styInt = new DataGridViewCellStyle();
mente en la celda
styInt.BackColor = Color.PowderBlue;
styInt.ForeColor = Color.Navy;
styInt.SelectionBackColor = Color.Lime;
styInt.SelectionForeColor = Color.MediumBlue;
styInt.Alignment = DataGridViewContentAlignment.MiddleRight;
29
<< dnm.plataforma.net
}
} La propiedad Format de
}
DataGridViewCellStyle
// al salir el cursor del ratón en la celda
private void dgvGrid_CellMouseLeave( object sender, permite adaptar la
DataGridViewCellEventArgs e)
{ presentación de las
// si el cursor está en una celda de datos
if (e.RowIndex >= 0) columnas que contienen
{
// devolver el estilo de la celda a su valor original
this.dgvGrid.Rows[e.RowIndex].Cells[sNombreColumna].Style =
valores de fecha y
}
this.dgvGrid.DefaultCellStyle; numéricos
}
}
<<dotNetManía
Listado 7
30
<< dnm.plataforma.net
Listado 8
Articulo.Style.Estado =
Terminando;
debemos aplicar formato hacemos uso de la pro- cas sirvan para allanar el camino a los lectores que
piedad DataGridViewCell.OwningColumn , que nos necesiten desarrollar aplicaciones utilizando este
devuelve un objeto DataGridViewColumn, mediante control.
32
<< dnm.servidores.sql
Miguel Egea
servidores.sql
Arquitecturas distribuidas
con Service Broker (y II)
Introducción
BEGIN DIALOG [ CONVERSATION ] @dialog_handle
En la primera entrega sobre Service Broker mos- FROM SERVICE initiator_service_name
tramos cómo usar los nuevos mecanismos de asin- TO SERVICE 'target_service_name'
cronía dentro de SQL Server. Si nos paramos a pen- [ , { 'service_broker_guid' |
sar, estamos ante una arquitectura muy desacopla- 'CURRENT DATABASE' } ]
da: cada pieza de código se encarga de su tarea o del [ ON CONTRACT contract_name ]
servicio que tiene que ofrecer y eso es bueno, muy [ WITH
bueno, puesto que nos permite una versatilidad enor- [ { RELATED_CONVERSATION =
related_conversation_handle |
me a la hora de enviar y procesar mensajes de for-
RELATED_CONVERSATION_GROUP =
ma asíncrona. related_conversation_group_id } ]
Sin embargo, en la entrega anterior no vimos [ [ , ] LIFETIME = dialog_lifetime ]
nada sobre la distribución de la información basada [ [ , ] ENCRYPTION = { ON | OFF } ] ]
en Service Broker. ¿Acaso éste solamente propor- [ ; ]
Miguel Egea ciona mensajes asíncronos que han de ser entrega-
es un Mentor Asocia-
dos y consumidos en la misma máquina? La res-
do de Solid Quality Listado 1
Learning Iberoameri-
puesta es, obviamente, no.
cana, Ingeniero Técni- La clave para enviar mensajes que puedan ser
co en Informática de consumidos en otro servidor y otra base de datos la
Sistemas con más de tenemos en la sintaxis de la instrucción BEGIN DIA- rar cuanto sea necesario para que esos servidores
16 años de experien- LOG, que podemos ver en el listado 1. estén accesibles; es decir, tendremos que construir
cia. MVP en SQL Ser- El servicio de destino viene entrecomillado, y toda la estrategia de enrutado y seguridad para que
ver, ejerce como eso es simplemente porque ese servicio no tiene los mensajes puedan ser entregados.
DBA para importan- por qué estar en la base de datos actual, sino que
tes empresas del Sec-
puede estar en cualquier base de datos de cualquier
tor. Miguel es, además,
ponente asiduo en
servidor que esté conectado a nuestro servidor SQL Service Broker y las comunicaciones
eventos relacionadas Server 2005.
<<dotNetManía
con tecnologías Pero vayamos por partes: antes de poder enviar El proceso de comunicación se basará en TCP, y
Microsoft. mensajes a otros servidores, habremos de configu- básicamente podremos, mediante endpoints, con-
33
<< dnm.servidores.sql
darnos a administrarlos, aunque naturalmente SQL entrega de los mensajes. La vista del sistema
Server Management Studio nos será también de ayu- sys.conversation_endpoints nos muestra la infor-
da en esta labor. mación que maneja esta capa.
34
<< dnm.servidores.sql
Tabla 1
Tabla 2
35
<< dnm.servidores.sql
bará de comprender por qué sin poner ni una sola balance de carga no supondría ningún problema; sin
ruta el código que publicamos simplemente fun- embargo, una vez comenzada una conversación, en el
ciona. Nada como las cosas “por defecto” para que mensaje ACK viene la información de destino, y en
todo funcione mágicamente. adelante el resto de conversación irá al mismo servi-
dor de destino.
Además, puede configurarse un servicio para que
simplemente ejerza tareas de forwarding; es decir, que
cuando llegue un mensaje a su dirección, simplemente
La seguridad basada en certificados envíe ese mensaje al servidor de destino real. El ser-
vidor estará en este caso haciendo meramente de
permite garantizar la seguridad sin puente entre el servidor de origen y el servidor de
destino. Esto es muy útil, por ejemplo, para no expo-
necesidad de que los intervinientes ner un servidor de front-end a Internet. La forma de
implementar esto es incluir esa ruta en la tabla MSDB.
pertenezcan a ningún dominio, tengan La base de datos MSDB tiene, por tanto, un rol espe-
cial en el enrutado de Service Broker.
Un servidor que se encarga de las tareas de for-
entre sí una relación de confianza warding de mensajes no tiene la necesidad de alma-
cenar ningún mensaje en disco. Esto es debido a que
ni nada que se le parezca el único ACK válido para el mensaje será el del ser-
vidor de destino, esté éste en el dominio en que esté,
y el servidor de forwarding únicamente hará de puen-
te entre origen y destino para mensajes normales y
Sin embargo, este mecanismo de rutas da una mensajes ACK generados automáticamente.
impresionante versatilidad, como vamos a ver con La sintaxis completa de la instrucción para crear
algunos ejemplos. una ruta es la que puede verse en el listado 3.
En la tabla 2 podemos ver una entrada cuya direc-
ción ya no es local; ya no se estará buscando en la pro-
pia base de datos, sino que se irá a buscar una instan- CREATE ROUTE route_name
cia específica de Service Broker en el servidor de des- [ AUTHORIZATION owner_name ]
tino; aquella cuyo código de instancia se correspon- WITH
da con el GUID que ahí figura. [ SERVICE_NAME = ‘service_name’, ]
Ese GUID se buscará en la tabla sys.databases [ BROKER_INSTANCE =
que existe en master. Uno de los nuevos campos incor- ‘broker_instance_identifier’,]
[ LIFETIME = route_lifetime , ]
porados en SQL Server 2005 es el identificador de la
ADDRESS = ‘next_hop_address’
base de datos para Service Broker. Este identificador [ ,MIRROR_ADDRESS = ‘next_hop_mirror_address’]
puede cambiarse con la instrucción ALTER DATABASE xxx [ ; ]
SET NEW_BROKER, comando, que obviamente, habrá de
ser usado con mucho cuidado, puesto que hará que
todas las conversaciones a medias acaben sin mandar Listado 3
el mensaje de tipo END DIALOG. La dirección
Mirror_Address se utiliza para escenarios de mirroring;
en este caso, Service Broker será capaz de enviar datos
a la dirección de la base de datos que esté activa en En algunas ocasiones puede resultar interesan-
cada momento. te implementar enrutado dinámico — hasta el
Basado en el mismo mecanismo podremos inclu- momento solo hemos visto enrutado estático—, es
so gestionar escenarios de balance de carga (load balan- decir, un enrutado en el que la ruta de destino está
cing). La forma de implementarlo es insertando una escrita en la tabla sys.routes. La forma de escribir
nueva ruta a otra dirección para un mismo nombre rutas dinámicas es leer un mensaje de tipo Missin-
de servicio remoto. Cuando se envíe un mensaje a un gRoute de la cola y reaccionar creando en ese
servicio, Service Broker buscará en la tabla de rutas y momento la ruta adecuada. En el mensaje Missin-
aleatoriamente enviará datos a una u otra dirección. gRoute viene la información del nombre del servi-
<<dotNetManía
Si estuviésemos utilizando una estrategia “dispara y cio para el que no se conoce ruta, y sería posible por
olvida”, es decir, de enviar un mensaje y simplemen- tanto preguntar a una aplicación externa o a una
te tener garantizada su entrega, esta forma de hacer tabla de configuración la dirección actual válida para
36
<< dnm.servidores.sql
SELECT @brokIns=service_broker_guid
FROM [SERVIDOR CON SERVICE BROKER DE DESTINO].master.sys.databases where name=’pruebas’
set @sql = ’use pruebas CREATE ROUTE RutaEnvio WITH SERVICE_NAME=’’SrvPeticion’’, BROKER_INSTANCE = ‘’’ +
cast(@brokIns as nvarchar(50)) +
‘’’,ADDRESS = ‘’TCP://server5.sqlint.com:4025’’’
EXEC (@sql);
<<dotNetManía
Listado 4
37
<< dnm.servidores.sql
Listado 6
El crear la clave maestra es una necesidad a la hora La tabla 3 nos indica también cuándo la conver-
de poder crear un certificado, de ahí que incluyamos sación fluye en texto claro por la red y cuándo está
el comando en el listado anterior. cifrada. Las conversaciones diferidas lo que indican
es que los mensajes quedarán en las tablas de
sys.transmission_queue, es decir, en el estado de listas
para ser transportadas, hasta que la encriptación pue-
da ser garantizada.
Tabla 3
38
José Francisco Bonnín
plataforma.net
Referencias débiles
en .NET Framework
Seguramente en alguna ocasión se le ha presentado una situación en la que tiene
que crear un objeto que ocupa bastante memoria y que tarda en crearse. En tales
casos, lo primero sería revisar el diseño de ese objeto para ver cómo optimizarlo,
pero si no podemos hacerlo es común que nos asalte la duda de qué hacer: ¿hace-
mos Dispose() del objeto al acabar de utilizarlo para liberar memoria? ¿o lo man-
tenemos para evitar los costes de construcción en un futuro?
41
dnm.inicio.taller
Agregar ayuda a nuestras aplicaciones es HTML; es decir, se crean como páginas Web,
se le añaden algunos aditivos, se compilan y tene-
En la mayoría de las aplicaciones actuales, salvo excep- mos nuestro fichero de ayuda con la extensión .chm.
ciones, el formato de ayuda utilizado es el conocido Una vez que hemos creado un fichero de este tipo,
como ayuda HTML 1.0 o también ayuda CHM, por lo podemos asociar con nuestra aplicación y usar-
la extensión que tienen estos ficheros de ayuda (.chm). lo por medio de las clases definidas en .NET Fra-
El aspecto de este tipo de ayuda es el que podemos mework. El mayor problema seguramente se pue-
ver en la figura 1. de presentar a la hora de crear este tipo de ayuda,
aunque eso no será un inconve-
niente, ya que en este mismo artí-
culo veremos cómo crear este tipo
de ayudas usando la utilidad HTML
Help Workshop que se incluye con
Visual Studio.
Básicamente, hay dos formas de
usar este tipo de ayuda desde nues-
tras aplicaciones de Visual Studio
2005. Por un lado, tenemos la cla-
Guillermo “Guille” se Help, que expone ciertos méto-
Som es Microsoft MVP dos estáticos (compartidos) que nos
de Visual Basic desde permiten mostrar la ayuda conteni-
1997. Es redactor de da en un fichero CHM. También
dotNetManía, mentor existe un componente llamado Help-
de Solid Quality Iberoa- Provider el cual, además de pro-
mericana, tutor de cam- porcionar una forma de acceder a
pusMVP, miembro de
esos tipos de ficheros de ayuda, nos
Ineta Speakers Bureau
Latin America, y autor Figura 1. Aspecto de la ayuda HTML permite agregar ayuda emergente a
de los libros “Manual cualquier control que tengamos en
Imprescindible de Visual nuestro formulario. Veamos cómo
Basic .NET” y “Visual Como podemos suponer, el formato de los usar estas dos clases para proporcionar ayuda en
Basic 2005”. documentos usados para crear este tipo de ayuda nuestras aplicaciones.
http://www.elguille.info
<< dnm.inicio.taller
Añadir ayuda con HelpProvider que nuestros usuarios desearían ver cuando pulsaran
la tecla [F1] en la aplicación.
El componente HelpProvider nos ofrece una forma
muy sencilla de añadir ayuda a nuestras aplicacio-
nes. Cuando agregamos un componente de este tipo Mejorar la ayuda proporcionada
a nuestro formulario, se añaden unas propiedades
con HelpProvider
adicionales a cada control que tenga dicho formula-
rio. Dos de esas propiedades sirven para acceder al Una forma de mejorar la ayuda mostrada por nues-
contenido de un fichero de ayuda compilada (.chm); tra aplicación es mostrar un fichero HTML en lugar
otra simplemente sirve para indicar si se debe mos- del texto emergente proporcionado por la propiedad
trar o no la ayuda proporcionada por este compo- HelpString.
nente ( ShowHelp), y la cuarta propiedad agregada Para indicar qué fichero HTML queremos usar
(HelpString) sirve para mostrar una ayuda emergente como ayuda, tenemos que indicar el path (la ruta com-
cuando el usuario pulse la tecla [F1] mientras el con- pleta, incluyendo el nombre del fichero) a la propie-
trol tenga el foco. Sabiendo esto, podemos utilizar dad HelpNamespace del componente HelpProvider.
esa propiedad (HelpString) para que nuestras apli- Cuando asignamos un valor a esa propiedad, lo que
caciones muestren ayuda a los usuarios. La ventaja hayamos asignado a la propiedad HelpString no se tie-
de usar la propiedad HelpString es que el texto de ne en cuenta, y lo que ocurre cuando el usuario pul-
ayuda que queremos mostrar no es necesario que sa la tecla [F1] es que se muestra el contenido del fiche-
esté en un fichero de ayuda, sino que lo indicamos ro HTML que hemos indicado en la propiedad Help-
nosotros de forma directa en cada uno de los con- Namespace. Esto es un “adelanto” con respecto al tex-
troles que queremos que ofrezcan esa funcionalidad
cada vez que se pulse la tecla [F1].
Como podemos imaginar, esa forma de mostrar
ayudas no es la que el usuario preferirá, pero a falta
de otra cosa mejor, al menos nuestra aplicación reac-
cionará al pulsar esa tecla, lo que nos puede sacar de
apuros en algún momento en el que no tenemos muy
claro qué es lo que debemos hacer en nuestra aplica-
ción o queremos saber para qué sirven ciertas opcio-
nes que la aplicación nos muestra.
En la figura 2 podemos ver cómo usar el texto asig-
nado a la propiedad HelpString y qué es lo que vería
el usuario si pulsara la tecla de ayuda al estar posicio-
nado en la primera caja de textos del formulario.
43
<< dnm.inicio.taller
edor” de ayuda que hemos decidido Cuando decidimos usar un fichero dro “Creación de un fichero de ayuda
usar con ese control. En la figura 3 de ayuda HTML, el nombre de ese HTML”, los valores que podemos usar
podemos ver cómo el control seleccio- fichero CHM será el que indiquemos en la propiedad TopicId son valores
nado utiliza la ayuda de uno de los com- en la propiedad HelpNamespace del com- numéricos que previamente hemos aso-
ponentes HelpProvider que tenemos en ponente HelpProvider. De forma prede- ciado en la ayuda HTML con páginas
el formulario. terminada, al pulsar [F1] en uno de los de contenido de ese fichero de ayuda,
Como podemos suponer, esto sería controles del formulario, se mostrará el aunque también podemos asociar esos
bastante tedioso de hacer en una apli- fichero de ayuda que hemos indicado. tópicos con marcadores dentro de una
cación con muchos controles, al menos Aunque al hacerlo, lo que se muestra es página; todo dependerá de cómo haya-
si para cada uno de esos controles que- la “página” predeterminada de dicho mos creado el fichero de ayuda.
remos usar un fichero de ayuda dife- fichero de ayuda. Lo deseado no es pre-
cisamente que siempre se muestre la Mostrar ayuda usando la clase
misma página, sino que según el con-
trol en el que el usuario pulse [F1] se
Help
muestre la información referente a ese Además del componente HelpProvider,
“tópico”. Esto último es lo más intere- .NET Framework también proporciona
sante y es también lo deseado, pero para la clase Help para mostrar el contenido
La clase Help no es que eso sea posible, debemos tener pre- de un fichero de ayuda compilado o bien
parado el fichero de ayuda, ahora vere- de páginas HTML independientes.
instanciable, por tanto, la mos cómo, aunque antes de continuar La clase Help no es instanciable,
leyendo, es necesario saber las distintas por tanto, la ayuda la mostraremos
ayuda la mostraremos opciones que podemos configurar en un
fichero de ayuda HTML, y eso es lo que
usando los métodos estáticos (o com-
partidos) que expone. Estos métodos
usando los métodos explico en los recuadros “Estructura de
un fichero de ayuda HTML” y “Creación
son ShowHelpIndex , que muestra el
índice de la ayuda, ShowPopup , que
estáticos (o comparti- de un fichero de ayuda HTML”.
Para utilizar de forma más eficiente
muestra un texto emergente y Show-
Help, que permite indicar el fichero de
el fichero de ayuda HTML que tenemos ayuda compilada o una página
dos) que expone asociado al componente HelpProvider, HTML. En el caso de usar un fiche-
tendremos que usar la propiedad Help- ro CHM, podemos indicar si quere-
Navigator que el componente agrega a mos mostrar la ficha de contenido, del
cada control del formulario. Según el índice o de la búsqueda, además de
valor que indiquemos en esa propiedad, poder indicar el valor del tópico a
podremos acceder a las diferentes par- mostrar; esos valores los indicaremos
tes de que se compone un fichero de ayu- por medio de la enumeración HelpNa-
da HTML. Por ejemplo, si al pulsar [F1] vigator. En todos estos métodos, el
rente, sin contar que tendríamos que en un control queremos que se muestre
agregar tantos componentes del tipo la ficha de contenido de la ayuda, el valor
HelpProvider como ficheros HTML de la propiedad HelpNavigator debe ser
[ ]
diferentes queramos utilizar. TableOfContents. De la misma forma, al
Una mejor solución es usar un fiche- asignar un valor Index se mostrará la ayu- NOTA
ro de ayuda compilada. Veamos cómo da con la ficha del índice seleccionada,
la podríamos usar por medio del com- y si asignamos Find, la ficha que se mos- Como podemos comprobar, al
ponente HelpProvider. trará será la de búsqueda. tener que indicar el nombre del
Pero, como comentaba antes, la fichero al llamar a cada méto-
opción que más usaremos es asignando do de la clase Help, con esta
el valor TopicId. En este caso, debemos clase podemos crear un siste-
Una solución más elegante ma de ayuda para nuestras apli-
asignar a la propiedad HelpKeyword el
Si tenemos creado un fichero de valor del “tópico” que queremos mos- caciones de una forma muy
ayuda HTML, podemos asociarlo con trar. Ese valor debe estar asociado con fácil, ya que podemos usar
un componente HelpProvider de forma un elemento del fichero de ayuda; por varios ficheros con la extensión
que sea ese fichero de ayuda el que se tanto, es importante crear de forma ade- .htm, sin necesidad de crear un
<<dotNetManía
utilice en lugar del texto proporciona- cuada el fichero de ayuda para poder fichero de ayuda compilada.
do por la propiedad HelpString o de un usarlo correctamente en nuestras apli-
fichero HTML. caciones. Tal como comento en el recua-
44
<< dnm.inicio.taller
[ ]
primer parámetro será la ventana propietaria (normalmente
usaremos una referencia a la instancia actual del formula- NOTA
rio, Me en Visual Basic o this en C#), y en caso de los méto-
dos ShowHelp y ShowHelpIndex , en el segundo parámetro El evento HelpRequested se produce tanto al pulsar la
indicaremos el fichero de ayuda a utilizar, que puede ser tecla [F1] como al usar el botón de ayuda (indicado en
de tipo .chm o .htm; en el último caso, solo será aplicable el formulario con una interrogación) y pulsar con el
al método ShowHelp y, por supuesto, no tendrá sentido mos- cursor sobre un control.
trar el contenido, el índice ni ningún otro valor que solo Para mostrar el botón de la interrogación en un for-
es aplicable a los ficheros de ayuda compilada. mulario, debemos asignar un valor verdadero a la pro-
Por ejemplo, si queremos mostrar el contenido de la ayu- piedad HelpButton del formulario, además de que tan-
da de un fichero indicado en la variable hlp, usaremos el méto- to MaximizeBox como MinimizeBox deben tener un
do ShowHelp de la siguiente forma: valor falso (para que no se muestren). El aspecto del
formulario sería el mostrado en la siguiente figura:
Help.ShowHelp(Me, hlp, HelpNavigator.TableOfContents)
‘ también así:
Help.ShowHelpIndex(Me, hlp)
ted. Este evento se produce cuando se pulsa la tecla [F1] , y es lo están los proyectos tanto para Visual Basic como para C#, en
aplicable a cualquier control (incluso el formulario); por lo tan- los que se muestra cómo usar las dos clases con todas las combi-
to, podemos crear un evento en cada uno de los controles en los naciones explicadas en el artículo.
45
<< dnm.inicio.taller
46
<< dnm.inicio.taller
En el panel de la derecha se mostrará el elemen- ten navegar entre los distintos tópicos mostrados,
to que hemos seleccionado. Este panel es configura- ir a la página de inicio, ocultar el panel de la
ble en cuanto al aspecto y tamaño, incluso podemos izquierda, imprimir, etc. Todos estos botones, así
crear diferentes “ventanas” para poder mostrar los como las diferentes fichas del panel de la izquier-
tópicos de forma diferente, con idea de poder llamar da son configurables desde el compilador de ayu-
la atención del usuario o bien para que distintos ele- da HTML, pudiendo indicar los que queremos
mentos de la ayuda se muestren en ventanas diferen- mostrar.
tes o con un aspecto y tamaño diferente. En el recuadro “Creación de un fichero de ayuda
Además de estos dos paneles, en la parte supe- HTML” explico los conceptos más importantes para
rior tenemos una serie de botones que nos permi- crear un fichero de ayuda.
La creación de ayuda HTML la haremos con la uti- rio tendremos que asignar un valor TopicId a la propie-
lidad hhw.exe (HTML Help Workshop). Esta herra- dad HelpNavigator, y a la propiedad HelpKeyword asocia-
mienta se incluye con Visual Studio 2005, además de mos el valor numérico; de esa forma, al pulsar la tecla de
que está disponible para descarga desde el centro de ayuda se mostrará la parte de la ayuda que está asociada
descargas de Microsoft. a ese tópico.
Antes de utilizar esta utilidad, tendremos que cre- Para crear los tópicos debemos hacer lo siguiente
ar los ficheros HTML que queremos usar como “tópi- en la utilidad HTML Help Workshop: en la barra de
cos” de nuestra ayuda; es decir, debemos crear los dife- botones de la derecha de la utilidad debemos pulsar
rentes apartados como si se tratara de un sitio Web en el cuarto botón (“HmlHelp API Information”), lo
basado en HTML. Podemos agregar imágenes, docu- que nos mostrará un cuadro de diálogo con varias
mentos para descargar, poner enlaces entre las distin- fichas; seleccionamos la segunda (“Alias”) y pulsamos
tas secciones o tópicos, etc. en el botón “Add”. Nos pedirá que indiquemos una
Una vez que tenemos creado el contenido en for- constante o un número, que se usará para hacer refe-
mato HTML es cuando usamos el compilador de ayu- rencia a una página HTML de las que tenemos agre-
das, ya que básicamente eso es lo que hace la utilidad gadas al proyecto. Además de una página, podemos
hhw.exe, compilar todo ese contenido HTML en un indicar un marcador dentro de una página, lo cual nos
fichero con la extensión .chm. permite tener varias asociaciones dentro de una mis-
Para no hacer demasiado extenso este artículo, los ma página HTML.
pasos para crear un fichero de ayuda HTML lo puede Una vez que hemos agregado las palabras y las
descargar desde el sitio Web de dotNetManía, donde hemos asociado con ficheros HTML, tenemos que
explico, con todo lujo de detalles, cómo crear el propio crear un fichero include (sí, al estilo de los ficheros de
fichero de ayuda con la explicación, incluyendo cómo cabecera de C/C++; de hecho, ese fichero deberá tener
agregar el contenido, el índice, cómo definir las venta- la extensión .h, que es la que la utilidad usará para bus-
nas, cómo seleccionar las diferentes fichas que queremos car el fichero cuando lo queramos agregar). En ese
mostrar, etc. Lo que sí explicaré aquí es cómo agregar fichero definiremos constantes numéricas que estarán
cierta funcionalidad para que la podamos asociar a los asociadas a las constantes o palabras que hemos defi-
diferentes controles o apartados de nuestra aplicación. nido en el paso anterior.
El contenido de ese fichero estará formado por
Asociar contenido de la ayuda a valores líneas que usan el formato:
utilizables desde las aplicaciones #define <constante> <valor numérico>
Si queremos mostrar cierto contenido de la ayuda
HTML cuando el usuario pulse la tecla [F1], ese conte- Siendo <constante> la constante que hemos agre-
nido lo tenemos que asociar a lo que se conoce como un gado en la ficha “Alias” y <valor numérico> un valor
tópico de la ayuda. En realidad, consiste en asociar cual- que usaremos en la propiedad HelpKeyword.
quier parte de la ayuda con un valor numérico; ese valor Una vez hemos creado ese fichero include, tene-
<<dotNetManía
numérico será el que se utilice desde la aplicación. En el mos que agregarlo al proyecto de ayuda HTML por
caso del componente HelpProvider, en las propiedades medio de la ficha “Map” del cuadro de diálogo mos-
que ese componente agrega a los controles del formula- trado por la opción “HtmlHelp API Information”.
47
todotNet.qa@dotnetmania.com
Dino Esposito
todonet@qa
El propósito de algunas
características de .NET
Las tecnologías del software se renuevan constantemente, y algunas veces el pobre desarrollador
no llega a captar ciertos aspectos. En otros casos, podemos tardar más de lo deseado intentan-
do comprender algunas características. No es, por tanto, casual que este mes abordemos varias
de las preguntas que empiezan con la frase “Cuál es el propósito”. Trataremos de mostrar cuál
fue la idea central en cada uno de los casos.
¿Cuál es el propósito de la sobrecarga de operadores en Visual Basic 2005? Tengo un colega que
sabe un montón de C++, y que continuamente está alabando las virtudes de esta característica. De
cualquier forma, no veo una gran diferencia entre un operador personalizado y la llamada a un
método.
La sobrecarga de operadores es un viejo concep- nes en las que las sobrecargas están definidas por
to de la programación y nació, primero, y cobró el lenguaje. En otros casos, el programador imple-
importancia después, debido a la programación menta el soporte para nuevos operadores con nue-
orientada a objetos (POO). En sí misma, la sobre- vos tipos.
carga de operadores, es sencillamente una varian- Visual Basic 2005 soporta operadores per-
te del polimorfismo; uno de los tres pilares de la sonalizados, lo que significa que puedes sobre-
POO junto con la herencia y la encapsulación. cargar un operador existente para especializar
¿Pero qué es realmente el polimorfismo? su comportamiento. Al mismo tiempo, es posi-
El polimorfismo indica la capacidad de un ble definir nuevos operadores que pueden ope-
método para suministrar distintos comporta- rar sobre nuevos tipos de datos. En general, los
mientos cuando es llamado por clases distintas. El operadores sobrecargados simplifican el traba-
método tiene el mismo nombre y requiere la mis- jo con tipos complejos y permiten especificar
ma signatura, pero la implementación interna es tu propia implementación para operaciones fun-
diferente para clases diferentes. El ejemplo canó- damentales.
nico comienza con la clase base Persona, de la que Como, por ejemplo, restar dos fechas, o sumar
puedes heredar clases como Español o Inglés. La una hora dada a una fecha. Cualquier framework que
clase base tiene un método Hablar() cuya imple- soporte fechas como tipo nativo ofrecerá métodos
mentación produce las salidas “Hola” y “Hi” res- en la clase Date para ejecutar esas operaciones. Diga-
Dino Esposito pectivamente. mos que quieres restar dos fechas. Tendrás que recu-
es mentor de Solid Hablando lógicamente, un operador como +, rrir a un código como el siguiente:
Quality Learning. Es
= o == no es más que un método. En este sentido,
ponente habitual en
los eventos de la están sujetos al polimorfismo. Tú estableces que Date d1, d2;
industria a nivel tales operadores tienen diferentes implementa- int diff = Date.Subtract(d1, d2);
mundial.Visite su ciones dependiendo de los tipos de sus argumen-
blog en: http://weblogs. tos. Sumar dos enteros es distinto de sumar dos ¿No sería más natural y más claro escribir, en
asp.net/despos. decimales o dos fechas. En general, hay situacio- su lugar, éste código?
(todotNet.QA@
dotnetmania.com)
<< dnm.todonet@qa
TodotNet.qa@dotnetmania.com TodotNet.qa@dotnetmania.com
Date d1, d2; La misma sintaxis se requiere para sobrecargar ope-
int diff = d1 – d2; radores estándar de forma que trabajen con tipos per-
sonalizados. Se vincula un método existente o fragmen-
Sin embargo, para poder hacerlo, se necesita to de código a un símbolo. La definición de un opera-
sobrecarga de operadores. .NET Framework sumi- dor no es diferente de la definición de un método excep-
nistra exactamente este tipo de soporte mediante el to por el empleo de una sintaxis ligeramente diferente.
tipo System.DateTime. Puedes sumar y restar fechas ¿Deberías usar operadores en lugar de crear méto-
usando los operadores matemáticos clásicos. Es algo dos? Pues es una cuestión de preferencias, pero, en
incluido por defecto. El siguiente código muestra un general, los operadores hacen que el código sea nota-
fragmento de la implementación real del operador + blemente más claro cuando se utilizan tipos persona-
para la clase System.DateTime. lizados. Ahora bien, no cualquier tipo personalizado,
sino aquellos cuya lógica y comportamiento encajen
public static DateTime operator +(DateTime d,TimeSpan t) con la semántica del operador. La claridad y legibili-
{ dad del código es el mejor valor añadido que yo veo
long internalTicks = d.InternalTicks; en los operadores personalizados. No depende de nin-
long toAdd = t._ticks; guna otra cosa. Es una característica presente en los
lenguajes .NET, y la usas si te sientes confortable con
return new DateTime( (ulong) (internalTicks+toAdd) ); ella. Y punto.
}
¿Cuál es el propósito de las páginas no compiladas en ASP.NET? Si no quieres ningún código ASP.NET
compilado, ¿por qué no usar HTML plano?
En ASP.NET 2.0, las páginas no compiladas son límite, el rendimiento del sistema se degrada signifi-
páginas especiales que no se compilan nunca. Se cativamente. En otras palabras, para un sitio Web con-
crea una página no compilada estableciendo el atri- siderable en tamaño, las páginas no compiladas habi-
buto CompilationMode de la directiva @Page a su valor litan un sistema adecuado para descargar de la memo-
“Never”. Alternativamente, si no se sabe bien qué ria páginas concretas. Si se compilan regularmente en
hacer, este valor puede dejarse como “Auto” en la un ensamblado, no podrían ser descargadas sin des-
sección <pages> del fichero de configuración. En cargar el propio dominio de aplicación (AppDomain).
ese caso, ASP.NET deducirá si la página debe de Después de todo, un sitio web no compilado puede
compilarse o no. servir un número infinito de páginas, sin necesidad de
¿Cuál es el propósito, entonces, de las páginas no reiniciar el dominio de aplicación. Las páginas no com-
compiladas? Y, más importante aún, ¿cuál es la dife- piladas son una característica de escalabilidad y no
rencia entre las páginas no compiladas y las páginas específicamente de rendimiento. Entonces, ¿por qué
HTML estáticas? no usar páginas HTML planas?
Mi abuela solía decir que no porque algo pueda Una página no compilada se escribe como cual-
hacerse tú tienes que hacerlo. De forma similar, las quier otra página ASP.NET y está, realmente, hecha
páginas no compiladas, no son para todas las aplica- de controles de servidor. No obstante, no pueden con-
ciones. Si tienes un sitio Web pequeño con unas pocas tener código. Pero, en una página no compilada pue-
páginas, ¿qué sentido tiene complicarse con páginas des utilizar numerosos controles ricos de ASP.NET
no compiladas? 2.0 y otras características, como Páginas Maestras
Las páginas no compiladas están diseñadas para (Master Pages), controles Login, Gridview y DataSour-
mejorar la escalabilidad de sitios Web de gran tamaño, ce. Todas las maravillas que puedes haber oído res-
digamos de varios miles de páginas. En ese tipo de pecto a las páginas no compiladas en ASP.NET 2.0
sitios, las páginas no compiladas evitan la necesidad son ciertas, y es una página de ese tipo la que marca
de compilar miles de páginas. ¿Es esto un problema? claramente la diferencia entre las páginas ASP.NET
¿Y cuándo? no compiladas y las páginas estáticas HTML.
<<dotNetManía
El sistema operativo Windows impone un límite Pero una página no compilada no puede enla-
al número de DLLs que pueden ser cargadas simultá- zarse a un fichero de código, y no puede contener
neamente por una aplicación. Cuando se alcanza ese un bloque <script> de servidor. La única parte de
49
<< dnm.todonet@qa
<<dotNetManía T o d o t N e t . q a @ d o t n e t m a n i a . c o m T o d o t N e t . q a @ d o t n e t m a n i a . c o m
código ejecutable admitida en una página así, es una disminuir el número de ensamblados guardados en
expresión $. memoria.
Desde el punto de vista del rendimiento, no Así que la clave consiste en que no hay ensamblados
deberías esperar un beneficio tangible por la utiliza- guardados ni almacenados en disco. En su lugar, el cons-
ción de páginas no compiladas. De hecho, probable- tructor de la página se guarda en memoria y se reutili-
mente es algo más lento. Como ya he mencionado, za para crear la página para cada petición. Este caché es
las páginas no compiladas tienen sentido para aliviar actualizado siempre que, por cualquier razón, se reini-
el trabajo de compilación en sitios de gran tamaño, y cia la aplicación.
Necesito suministrar un recurso grande desde un sitio Web. Obviamente, me encantaría poder
enviar una versión comprimida. ¿Qué opciones hay disponibles en ASP.NET?
técnico de
dotNetManía y tutor cutan de forma manual y realizar de una manera con- muestra en la figura 1. Se apoya directamente en una
de campusMVP. sistente labores repetitivas o propensas a error; obje- librería llamada GAX (Guidance Automation Exten-
Es MVP de C# desde tivos que redundan en definitiva en un incremento sions), que se descarga e instala independientemente.
2004, MCSD y MCT. de la productividad y calidad del desarrollo. GAX es el motor de ejecución de GAT, y deberá ins-
51
<< dnm.laboratorio.net
le envía la receta que la llama o sobre mos a un paquete de orientación completa, define elementos de práctica-
el resultado de una acción ejecuta- se añadirán a los que ya tenga defi- mente todos los tipos posibles, de modo
da con anterioridad. nidos Visual Studio. que podamos utilizarlos como ejemplos
52
<< dnm.laboratorio.net
lo fundamental, son técnicas familiares accesos directos para que los desarrolla-
de orientación a objetos; por ejemplo, dores tengan a mano las recetas, accio-
las acciones se programan como clases nes y plantillas. Figura 5
53
<< dnm.laboratorio.net
using System;
using System.Windows.Forms.Design;
using Microsoft.Practices.RecipeFramework;
namespace PlainConcepts.GAT.Actions
{
public class HelloWorldAction : Action
{
[Input(Required = true)]
public string HelloMessage
{
Figura 6. Registrando un paquete get
{
return helloMessage;
}
set
{
helloMessage = value;
}
}
#endregion
tos, aspectos y cómo entretejer códi- tion Toolkit, http://msdn2.micro- [1] Descarga de GAT y GAX, http://
go desde Visual Studio para hacer soft.com/en-us/teamsystem/ msdn2.microsoft.com/en-us/team
AOP en .NET” (partes I y II), en aa718950.aspx system/bb229214.aspx.
54
biblioteca.net
Essential Windows Presentation Foundation
Chris Anderson
Editorial: Addison-Wesley Professional
Páginas: 512
Publicado: 2007
ISBN: 978-0321374479
Idioma: inglés
El hecho de que Don Box y Chris Sells sean los prologuistas de esta obra no la hace
mejor, pero sí que avala su contenido, a pesar que los 3 trabajen para la misma empresa:
Microsoft. Chris Anderson trabaja en la actualidad en la Connected Systems Division,
en Redmond, pero desde 2002 fue el arquitecto principal del equipo de desarrollo de
WPF, así que algo debe saber sobre el tema. Para más detalles sobre Chris, recomenda-
mos una visita a su blog: www.simplegeek.com.
El libro es –junto a los de Petzold y Nathan, ya recomendados en esta columna– de los
mejor valorados por sus lectores en este tema y se lo recomendaría a los que –como yo- nos
gusta ver las “tripas” de las cosas. Su funcionamiento interno. E, incluso, el porqué de cier-
tas decisiones tomadas a la hora de su diseño e implementación. De hecho, la organización
del libro es excelente, y, en vez de repetir, completa de forma notable a los dos anteriores.
Todo el recorrido por el amplio espacio de WPF se hace a través de ejemplos muy bien selec-
cionados, y que ilustran con precisión la materia a la que sirven de ejemplo.
Donald Thompson, Rob S. Miles. Editorial Microsoft Press. Páginas: 288. Publicado: junio,
2007. ISBN: 978-0735623651.
baleares on.Net
• Ubicación: Palma de Mallorca
• Fecha de fundación: 24-01-2007
minante. Estos mismos problemas impiden que los
• Fundador: José Francisco Bonnín desarrolladores de Baleares puedan asistir a eventos
• Número de miembros: 57 de otras ciudades.
• Página Web: www.baleareson.net Al conocer que el grupo de usuarios de Madrid
estaba compuesto por voluntarios, me empezó a sur-
• Email de contacto: gir la idea de que modestamente podía contribuir a
jfbonnin@baleareson.net que la situación de Mallorca mejorase un poco, aun-
que fue un post en el blog de David Carmona, el que
realmente me dio la energía que necesitaba para deci-
dirme a moverlo todo.
Lo primero que hice fue contactar con Javier
Jofre, al cual le entusiasmó la idea desde el primer
momento y cedió a la comunidad el aula de forma-
ción de su empresa Innova Desarrollos Informá-
ticos. Lo más difícil estaba hecho, ya teníamos la
sala donde realizar los eventos; así que hablamos con
“Baleares on .NET, comunidad surgida de la ilusión Miguel Jiménez que a su vez nos presentó a Alfon-
de un grupo de apasionados a la tecnología .NET de so Rodríguez, gracias al cual pudimos encaminar
Microsoft, que colaboran voluntariamente en difun- mejor nuestros esfuerzos aclarándonos tantas cosas
dir dicha tecnología y a compartir sus conocimientos y proporcionándonos el apoyo necesario para el
y experiencias a los desarrolladores .NET de las Islas registro a eventos y publicidad del grupo.
Baleares”. El siguiente paso era crear el portal
Con este mensaje damos la bienvenida a los inter- http://www.baleareson.net, que pudimos poner en
nautas que visitan nuestra Web y ahora también a los marcha muy rápido a través de la colaboración desin-
lectores de dotNetManía gracias a la oportunidad teresada de varias empresas para las licencias y hos-
que nos ha brindado Paco Marín. ting necesarios. Encontrar ponentes para las charlas
La historia de Baleares on .NET no es muy dis- fue sencillísimo, tan solo hubo que hablar con otros
tinta de la de otros grupos, tal vez la principal parti- dos grandes amigos, Salvador de la Rosa y Juan
cularidad radica en que uno de sus coordinadores, un Manuel Servera, los cuales al igual que Javier Jofre
servidor, no reside en la misma provincia que el gru- se ofrecieron de inmediato a preparar alguna de las
po sino en Madrid. Fue en esta ciudad donde me acer- charlas. Eso fue todo, con el entusiasmo de unos
qué por primera vez a los grupos de usuarios .NET. pocos teníamos creado el grupo y cubierto cuatro
Cuando vivía en Mallorca veía con gran envidia meses con eventos.
como en otros lugares de España y del mundo se rea- No sabíamos muy bien la acogida que iba a tener el
lizaban eventos de todo tipo con muchísima fre- primer evento, tan solo se había publicitado a través del
<<dotNetManía
cuencia, algo que en Baleares no sucede. Los costes boletín MSDN Flash y de nuestro sitio web, además
adicionales que suponen para las empresas los pro- nos encontrábamos con el hándicap de que en Mallor-
blemas de insularidad son, sin duda, un aspecto deter- ca el .NET Framework, al igual que otros productos
56
<< dnm.comunidad.net
de Microsoft, no se utiliza tanto como más sencillo de lo que parece. En mi caso • Desarrollo con Sharepoint 2007,
ciertas tecnologías de otras empresas. lo más difícil fue lanzarme a dar el pri- Juan Manuel Servera.
El primer evento fue el 30 de mar- mer paso, superar la barrera psicológi-
zo y el tema “Novedades en C# 3.0”, ca de aquellos que no comprendían que Y sobre todo informar que los even-
que realicé yo mismo. Increíblemente fuera a invertir tanto dinero en viajes y tos siempre los realizamos los viernes
tuvo una respuesta fantástica: a las dos no obtener otro beneficio que la satis- de 19:00 a 21:00, así que todos aquellos
semanas de abrir el registro el aforo facción personal de ver que lo que hacía- que se animen a viajar a Mallorca como
estaba completo. Sin duda, fue algo mos era útil para los demás. ponentes, podrán aprovechar para que-
totalmente inesperado y nos sirvió para Para finalizar, tan solo invitaros a darse el fin de semana y conocer la isla
darnos la fuerza necesaria para seguir que asistáis a alguno de los próximos con guía incluido. Miguel Jiménez, al
adelante. La segunda charla acerca de eventos que vamos a realizar: cual estamos enormemente agradeci-
WCF la realizó Salvador de la Rosa y dos, será el pionero en aventurarse con
una vez más tuvimos que colgar el car- • Aplicaciones de la Web 2.0 con Baleares on .NET.
tel de aforo completo. Debido al éxito Microsoft AJAX Extensions,
de las dos primeras charlas decidimos Miguel Jiménez.
José Francisco Bonnín
probar con una sala más grande para el
evento realizado por Javier Jofre sobre
la Web 2.0, la gente no defraudó. Evento CatDotNet de Manresa
El número de usuarios registrados,
aunque poco a poco, no para de crecer
en la Web y, debido a la estupenda par-
ticipación que estamos teniendo en cada El pasado 14 de junio tuvo lugar en la sala de conferencias del
evento, tras varias gestiones finalmen- Centro Microsoft de Innovación en Productividad de Manre-
te hemos conseguido una nueva sala con sa la segunda reunión de CatDotNet, un mes después de hacer
muchísima más capacidad, gracias a la lo propio en Igualada.
colaboración de la empresa SM2 Bale- De entrada, y después de una pequeña presentación del gru-
ares, de manera que podremos dar cabi- po, Diego Gómez, Business Advisor del Centro, nos mostró las
da a toda la gente que hasta ahora no características de la tecnología Unified Communications, con las
ha podido asistir. nuevas propuestas en el campo como son MS Office Communi-
Todavía tenemos grandes retos por cator 2007, MS Office Communications Server 2007 y Outlook
delante, como poder formar parte de 2007, finalizando con una demostración en directo de las capa-
Ineta o conseguir que ponentes con más cidades de reconocimiento de voz a través de clientes móviles.
experiencia que nosotros vengan a Por otro lado, contamos también con la colaboración de Benjamín Adell, de grupo de usua-
Mallorca a realizar alguna charla. Sin rios BCN.DEV, que nos explicó las novedades relacionadas con LINQ en todas sus vertientes y
embargo, creo que hasta ahora hemos nos deleitó con una batería de ejemplos de aplicaciones.
avanzado mucho en nuestro sueño de Como punto final, además de recomendar unos libros y en nuestro ya habitual apartado, “Herra-
crear Baleares on .NET. mientas indispensables”, mostramos la utilización de Microsoft SandCastle con un ejemplo en vivo.
Desde estas líneas me gustaría dar En definitiva, que pese a que la asistencia fue menor que en Igualada, nos fuimos con un buen
ánimos a todos aquellos que hayáis pen- sabor de boca; una reunión más realizada y otra nueva en preparación, para el mes que viene.
sado en crear un grupo de usuarios,
veréis que la gente estupenda que rodea Santi Balboa y José Miguel Torres
este mundo hace que todo sea mucho eventos.eventos.eventos.eventos
Marino Posadas
desván
Aparatos sin cables y con un menor documentos en la red
gasto en baterías Trucos para acelerar Windows Vista. Deb Shinder, en el
sitio Web de ZDNet en Australia, publica sus hallazgos
Ese es el anuncio que un grupo de científicos de una de mis ins- sobre varias formas en las que podemos conseguir que el ren-
tituciones de investigación favoritas (Instituto Tecnológico de dimiento de Vista sea similar al de XP. Disponible en
Massachusetts o M.I.T.), ha realizado recientemente. Se trata de http://www.zdnet.com.au/insight/software/soa/Tips-to-boost-Vis-
transmitir potencia eléctrica a varios metros de distancia sin una ta-performance/0,139023769,339278888,00.htm?feed=rss, rea-
conexión física entre la fuente de potencia y el aparato de que se mente merece la pena, abarcando desde pistas para la moni-
trate, y ya se han inventado el término witricity, para describirla. torización del rendimiento, hasta políticas de mantenimien-
El fenómeno, bien usado to de discos o indexación de archivos.
y conocido desde hace tiem- Por otra parte, parece que ya es oficial la aparición –para
po, tiene la característica de finales del presente año– del primer service pack para Vista,
que –en vez de dispersar la que parece que incluirá varios cambios específicos: primero,
energía en todas direcciones– tanto usuarios como OEM tendrán la posibilidad de selec-
focaliza la transmisión a un cionar por defecto un motor de búsqueda diferente, y en
destino y permite alcanzar más segundo término, parece que la funcionalidad deberá ser
de dos metros de distancia en extendida en los otros buscadores/indexadores de igual for-
las primeras pruebas. Los ma a como funciona actualmente, para lo cual Microsoft
investigadores liderados por Marin Soljacic (a la izquierda, en la deberá informar a los ISV y OEM sobre la forma correcta de
foto adjunta) utilizan principios de resonancia magnética, y tal realizarlo.
como reza la noticia original: “podría iluminar bombillas, hacer
funcionar radios y tocadiscos, e incluso dispositivos médicos
implantados. De hecho, ni siquiera sería necesaria una batería para
que funcionaran dentro de una habitación dotada de este siste- sitios del mes
ma", comenta Peter Fisher, uno de los autores de los experi-
mentos, en los que se ha logrado encender una bombilla de 60 Blogs de los gurús de Silverlight. En la página
vatios desde una distancia de dos metros, y que han sido publica- http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx, se encuen-
dos en la prestigiosa revista Science. La financiación ha corrido tran referencias a algunos de los blogs más interesantes relacio-
por parte del Ejército, el Ministerio de Energía y la Fundación nados con Silverlight que se encuentran disponibles en la actua-
Nacional de Ciencia de Estados Unidos. lidad, y muy especialmente, los de Scott Guthrie, Mike Harsh,
En el proceso, la informática ha tenido un papel crucial, ya Joe Stegman y Lawrence Moroney. En el mismo sitio, tam-
que ha sido necesario un gran número de simulaciones por orde- bién podemos encontrar varios vídeos con charlas sobre el tema
nador para poder afinar los experimentos y abandonar opciones de algunos de los integrantes del equipo de desarrollo de este
inviables. Los experimentadores esperan tener en la calle el des- producto.
cubrimiento en menos de cinco años, y podría sustituir a los múl-
tiples enchufes de los hogares de hoy, ya que bastaría con un cen- Moreplus. Otro sitio Web dedicado a la programación
tro de emisión de energía por cada habitación de la casa, por ejem- con .NET Framework. En él participa un grupo muy acti-
plo. “Los usos industriales en la alimentación de robots para plan- vo de desarrolladores, y ofrecen –de momento– noticias y
tas de producción y similares también podrían estar disponibles artículos relacionados. Visitarlo en http://www.moreplus.es/
en cuanto los materiales nos permitan un control todavía más fino index.aspx.
del fenómeno”, afirmaba Soljacic en una conferencia impartida
en el Instituto Americano de Física.
noticias.noticias.noticias
procesos. Es gratuita y se encuentra dis- apuntado otras utilidades en esta revista. 2043b665cb53&DisplayLang=en. Ocupa
ponible en (http://www.innovative- (http://www.freewarefiles.com/pro- solamente 2,5 Mb, y está disponible para
sol.com/drivermax/index.htm). gram_9_104_32751.html) . versiones de 32 y 64 bits.
58