30 mayo 2005

Otro test... debo... resistir... no....

What Video Game Character Are You? I am a Space-invader.
I am a Space-invader.
I will happily recruit the help of friends to aid me in getting what I want. I have no tolerance for people getting in my way, and I am completely relentless until any threats or opposition are removed. I try to be down-to-earth, but something always seems to get in the way.
What Video Game Character Are You?

26 mayo 2005

Monoppix

Si os pasa como a mi y tenéis curiosidad por ver cómo funciona lo de Mono (la implementación Linux del .NET Framework) pero no tenéis otro ordenador en el que hacer pruebas locas, o no tenéis ni puñetera idea de instalar y configurar un Linux (sí, sí, ya sé que es muy fácil) o sencillamente no os apetece, tengo la solución: Monoppix, o lo que es lo mismo Mono + Knoppix.



Editado: Acabo de enterarme de que hay otro live CD preparado para usar Mono. Este se basa en Ubuntu: Mono-Live.

20 mayo 2005

Se acabó

Ahora debería escribir lo que me ha parecido el Episodio III, pero otros y alo han hecho infinitamente mejor, y como buen programador, creo firmemente en no tener que reinventar la rueda...

18 mayo 2005

Synchronicity

Mañana es el día. Por fin. Mañana se cierra un ciclo que empezó allá en 1977, cuando una versión Beta temprana de este Picacódigos que os escribe se sentó en un cine de Talavera de la Reina a dejar que un señor llamado George Lucas le contagiase un virus: el virus de la fantasía y el amor por las historias. Y desde entonces todo cambió.

Hay ocasiones en las que he dicho que mi vida no hubiera sido igual, yo no hubiera sido la misma persona, si aquella tarde hubiese elegido hacer otra cosa en lugar de pedirle a mi padre que me llevara al cine. Solo muchos, muchos años después se atrevió el pobre hombre a confesarme que la película no le había gustado nada. Y cuando digo que mi vida no hubiera sido igual si no hubiera visto esa película la gente tiende a pensar que exagero. Yo no estoy tan seguro.

El caso es que llevo muchos años amando la historia, el mito, del señor Lucas y sus caballeros Jedi, su Imperio, sus malos y sus buenos. Recuerdo perfectamente haber asistido a los re-estrenos que se hicieron de las versiones retocadas hace algunos años, y el volver a disfrutar de esas películas en una sala de cine (el DVD no es ni será nunca lo mismo) fue para mi como el acto sacramental debe ser para un verdadero creyente. Debo confesar que se me llenaron los ojos de lágrimas al comenzar la película y ver esas inmortales letras perdiéndose en la lejanía, y escuchar la atronadora fanfarria inicial de John Williams, me emocioné al recordar cómo era yo cuando vi aquello por primera vez y lo mucho que el mundo se había movido, como diría cierto pistolero. Y al acabar la proyección, en medio de una atronadora ovación cerrada con el público en pie, debo confesar que realmente lloré de emoción al darme cuenta de que justo detrás de mí había un niño de unos 6 o 7 años que debía acabar de ver Star Wars en cine por primera vez en su vida y que debía tener la misma cara que tuve yo veinte años antes. Incluso me dio la impresión de que el niño se me parecía. Fue un momento mágico.

Y mañana, después de 28 años, se cerrará el ciclo y la historia estará completa. Habrá más Star Wars, claro, pero eso no resta valor a lo que ocurrirá mañana. Pienso sentarme a oscuras en una sala de cine, completamente rodeado de gente pero todo lo solo que pueda, y pienso convertirme en un niño de seis años. Quiero volver a verlo todo con los ojos de la inocencia, quiero dejar que la magia de la historia me empape, quiero acabar con los ojos como platos y quizás soltar una lagrimita, por qué no. No me avergüenza.

Viene todo esto a que durante todo el día de hoy, y algo me dice que mañana será peor, me han preguntado que cómo estaba, que cómo llevaba la emoción. Amigos, familiares, compañeros de trabajo. Como si mañana fuese a nacer mi primer hijo, en lugar de estrenarse una película. Pero es que me conocen y saben que para mí no es sólo una película: es mucho más.

El título del post, al que casi acabo por perder de vista enrollándome sobre mi droga favorita viene a cuento de lo siguiente: compré por internet a Star Wars Shop hace dos meses tres camisetas y un polo. Después de ver que pasaba mucho tiempo y no llegaban les pregunté por correo y me dijeron que estaban esperando a uno de los productos, que estaba fuera de stock, para poder enviarlo todo en el mismo paquete como yo había especificado. Pensé que no llegarían a tiempo para el estreno y cuando he entrado en casa tenía el paquete de FedEx en mi cuarto. ¿Casualidad? ¿Puntería?

No.

Magia.

Developer Days: Visual Studio 2005

Como lo prometido es deuda, he aquí un relato pormenorizado de mis andanzas de ayer. Como sabréis los dos o tres que leéis este blog (hola, mamá!) ayer se celebró el Developer Days 2005, en los cines Kinépolis de Madrid; para presentar las novedades ya disponibles en la beta 2 de VS 2005 y unas cuantas cosas más. Antes de nada, pedir disculpas por la ausencia de acentos: mi PDA no los tiene, y alguno se me escapará al revisar el documento. En fin, vamos a ello.


0700: Monto en la Continental, A.K.A. la Conti, el autobús interurbano que me llleva a Madrid, y al tajo, todos los dias. Pero en este caso el trayecto es cojonudo: de Alcalá a Canillejas (afueras de Madrid) en bus, metro linea 5 hasta Aluche (afueras de Madrid... al otro extremo) nada menos (27 estaciones) y luego otro autobús hasta Ciudad de la Imagen y los cines Kinepolis. Necesito un coche.

0905: Llego a Kinepolis. Al final he tenido que coger un tax, porque la cola para coger el autobús que me hubiera llevado a Ciudad de la Imagen era tremenda: no se hubiera vaciado ni con que llegaran cinco autobuses de golpe.

0930: Presentación del evento. En la pantalla del cine proyectan un fondo de pantalla con motivos Microsoft y circunscrito a ese fondo una pantalla en la que se muestran las presentaciones, como es costumbre. Pero lo que nos recibe es una especie de muñeco 3D, más hortera que Ágatha Ruiz de la Prada en Halloween, con un insoportable acento francés (supongo que culpa del animador que hablaba por el bicho, que intenta infructuosamente que lo aplaudemos o que le digamos a coro buenos días como el público subnormal de los Teletienda yankees. A ver cuando aprenden que esto es España, joer. El muñequito presenta a un alto cargo de Microsoft, que no recordé apuntar como se llamaba ni que cargo tenía, sorry. Empezamos bien. El caso es que el hombre nos dio una charla optimista acerca de cómo el negocio IT está despegando (otra vez) en España, pero esta vez de verdad, no como el espejismo punto com. Otra cosa que dijo, y que después me dio que pensar, es que España puede ser el destino de, y cito, proyectos complejos de deslocalización. ¿Y se supone que eso debe ser motivo de alegría? Para aquellos de vosotros que no llevéis corbata, la deslocalización es el proceso por el cual una empresa se da cuenta de que sus curritos cobran demasiado y de que en la India (por ejemplo) parece que les pueden hacer el mismo trabajo por mucho menos dinero. Quien dice la India dice Rumanía, Rusia, Huesca o Villacabras del Palancar. Cualquier sitio en el que el nivel de vida sea más bajo que el tuyo y los sueldos, también. Por lo tanto, lo que se hace es despedir a todos los trabajadores locales (que ya se sabe que cobran demasiado y encima son avariciosos y siempre quieren cobrar más) y deslocalizar los proyectos haciendo que los hagan hindúes que no sólo cobran menos sino que además no piden tantas zarandajas como seguros médicos, cobertura al desempleo, días de vacaciones remunerados y otros estorbos que hacen que la empresa no gane toda la pasta que debería; que es, sencillamente, toda. En fin, que me pierdo: que me resulta muy curioso que deba ser motivo de alegría el ser receptores de proyectos complejos de deslocalización. En lo obvio, sí, debemos alegrarnos: más curro para todos, lo que siempre es bueno. En lo no tan obvio, uno piensa que si se vienen aquí proyectos de otros lados sencillamente debe ser porque estamos mal, muy mal en materias de retribuciones, beneficios sociales y esas cosas comparados con los países que nos van a echar la mier... digo, a deslocalizar sus proyectos. Otra cosa es lo imaginativos que son los directivos de las empresas cuando se trata de abaratar costes: siempre parecen pensar vamos a joder a los de costumbre. Y cuando no son despidos masivos, son regulaciones de empleo y ahora las deslocalizaciones. Joer, os juro que el día que unos ejecutivos se reduzcan el sueldo a límites razonables para abaratar costes habrá que hacerles una estatua o algo.

En fín, que me pierdo. Otra cosa interesante que mencionó este hombre (de verdad que lamento no haber apuntado quién era) es la iniciativa DotNet Solidario, una iniciativa apadrinada por Microsoft mediante la cual se quiere proporcionar herramientas software gratuitas a las ONGs que lo deseen (y que no piensen que Linux es más alternativo y radi y más guays, y por lo tanto más adecuado a su ONG, claro). Aquellas ONGs que se apunten a la iniciativa (y ya hay unas cuantas) disponen de un Visual Studio NET 2003 gratis, amén de un hosting completito también por la patilla. No sólo eso: si eres desarrollador y quieres colaborar construyendo la página web de una ONG, puedes apuntarte.

1000: Presentacion de Compact Framework 2.0, por Alejandro Mezcua. Para mí, unas de las presentaciones más excitantes de la mañana, aunque vi a bastante gente dormida. Justo antes de que comenzara la presentación nos enseñaron un sistema novedoso en los Dev Days: para hacer que la gente pudiera preguntar, han copiado a programas estilo Salsa Rosa y han habilitado un número de teléfono para que la gente pudiera enviar preguntas por SMS (eso sí, a un teléfono normal). Montaron un servicio web conectado al teléfono móvil de destino que recogía los mensajes recibidos y los enviaba a un Windows Forms. Nos enseñaron por encima cómo hacerlo y parecía simple. Envié una pregunta, claro.
En general, podemos esperar un rendimiento y unas capacidades muy mejoradas en la nueva CF. Entre lo destacable, mencionar mejoras en el manejo de strings, XML y ADO .NET con SQL Mobile (la nueva versión de SQL CE, claro). Validación de Schemas para XML (pero no para DTD), soporte XPath y serialización genérica con XmlSerializer. Los controles, por fin, permitirán docking. Los formularios incluirán automáticamente un scroll cuando el formulario sobrepase las dimensiones de la pantalla. Eventos SuspendLayout y ResumeLayout. ChangeOrientation para cambiar la orientación de la pantalla, apaisado o vertical, incluida en el CF. Adaptación automática de los formularios y sus controles a los cambios de resolución, o de rotación. Controles nuevos: DateTimePicker, MonthCalendar, DocumentList, LinkLabel, Notification, Help, DataGrid, WebBrowser. Añadido soporte para el portapapeles. Eventos y propiedades para teclados. Intellisense mejorado: muestra solo los elementos relacionados con el tipo de dispositivo con el que estemos trabajando. Herramientas remotas, proyectos de instalacion mas conpletos que la simple generación de ficheros CAB que tenemos en el CF 1.1. SQL Mobile estara muy integrado con SQL Server 2005 y VS 2005, con soporte DTS y plan de ejecucion grafico. Se podrá realizar databinding mediante drag and drop. Nuevo cursor, SqlCeResultset, navegable y actualizable, y permite DataBinding. Mas de una conexion simultanea permitida con BDD. Compresion automatica de la BDD. Mejoras en la sincronización con SQL Server 2005. Rendimiento mejorado en la sincronización (update de datos, no de registros completos). Y una novedad muy curiosa: el diseñador de Forms viene ya con el skin del dispositivo de destino, para que sepamos de antemano cómo queda la aplicación visualmente. El skin es personalizable para que podamos incluir las características propias del dispositivo. En general, una muy buena presentación.

1100: El muñeco francés es un hortera, y no tiene ni puta gracia.

1100: Leonardo Diez nos presenta las novedades del Framework 2.0. Incluirá soporte para hardware de 64 bits, en el CLR y las librerías de clases para WinForms, ADO.NET, ASP.NET y servicios Web. No se podrán hacer llamadas a APIs nativas ni código no manejado. Permite desarrollar en plataformas 32 bits y depurar remotamente en plataformas 64 bits. Aparte de eso, se incluye el muy añorado por los programadores de VB6 Edit & Continue, soportado por el CLR y el compilador, en C# y en VB .NET, Win y Web Forms. Para aquél que no lo haya experimentado nunca, era la posibilidad de detener la ejecución en modo depuración y poder hacer cambios en tu código directamente, para poder continuar la ejecución después con el código nuevo. Personalmente, no lo hecho de menos: es una mala práctica.Se dará mucha más información al programador en modo debug: DataTips mejorados, inspección de objetos simplificada, visores de tipos para DataSet, XML y HTML. Esto de los visores de tipos es impresionante: imaginaos que tenéis un objeto XML que, a fin de cuentas, es un chorro tremendo en formato string. En modo debug, podremos abrir su datatip, expandirlo y elegir verlo en un visor: podremos ver los datos en modo jerárquico, con exactamente la misma presentación que hace IExplorer de XML. Si abrimos de esta manera un dataset en modo debug, nos abre un formulario con los datos que tiene nuestro dataset en formato rejilla. Es más, podremos crear visualizadores personalizados para nuestros objetos. A estas alturas yo ya estaba babeando. Mucho. Otra característica interesante: ObjectTestBench y la ventana de Inmediato nos permitirán ver el comportamiento de nuestros objetos antes de ejecutar la aplicación. Los ya mencionados genéricos, y tipos parciales que es la capacidad de definir nuestras clases en múltiples ficheros .CS para por ejemplo separar nuestro código del autogenerado o para mejorar la compartición de trabajo, simplemente declarando la clase como partial y respetando las sencillas restricciones que hay. Para VB .NET se añaden las clases My, que en Microsoft denominan clases de acceso directo: My.Application, My.Computer, My.Forms, My.User, My.Settings, y un largo etc. Es una simplificación de código pura y dura. No me emocionó la idea: parece ser que desde la misma Microsoft desprecian a VB haciendo el lenguaje de programación for dummies. Tendremos snippets de código incluidos, Intellisense mejorado, refactorización, corrector sintáctico mejorado, etc. Es decir, exactamente lo mismo que ahora hace ReSharper, pero incluido. En concreto, las capacidades de Refactoring incluyen el renombrado inteligente de variables, extracción automática de métodos e interfaces, quitar o reordenar parámetros, y convertir automáticamente variables en propiedades. Otra cosa que me gustó, porque recientemente me ha tocado de cerca, es que en C# se ha simplificado mucho la creación de enumeradores mediante la sentencia yield.

11:35 Descanso. Justo cuando pienso en lo coñazo que es venir a estos eventos solo, me encuentro con un antiguo compañero de curro y su novia. =)

1200: Pasan un anuncio del proximo TechEd, en Amsterdam. Cómo me gustaría ir. Pero los 2250 € no están, sencillamente, a mi alcance. Y eso es la inscripción en el evento, viaje y alojamiento no incluidos. Y aunque tuviera esa pasta la guardaría para comprarme una licencia de VSTS.

1205: Para mi sorpresa, y cuando creí que se habrían olvidado, me responden a la pregunta que hice por el móvil. En efecto, me dicen que las capacidades P/Invoke del CF 2.0 están muy mejoradas. Y que se han aplicado el cuento viendo a los de OpenNETCF (al fin y al cabo, son MVPs) y que la CF 2.0 incorporará bastantes clases wrapper para acceder a funcionalidad de la máquina a bajo nivel de forma cómoda. Bien, pero que muy bien. Por otro lado, nos comentan que por un problema logístico no han podido entregarnos el DVD con la beta 2 de VS en la bolsa de bienvenida (que pesa un quintal, y el 90% es morralla); pero que las mandarán por correo a todos los asistentes. Ya tengo dos. =)

1210: Pablo Peláez nos presenta VSTO 2.0: Visual Studio Tools for Office, basándose en el paradigma smart client que Microsoft lleva un tiempo defendiendo (y yo también, por modesta que sea mi aportación). VSTO es un modelo de código subyacente para desarrollar soluciones centradas en documentos Office, aunque de momento sólo funciona para Word y Excel, usando codigo manejado. VSTO, y esto lo recalcó bastante el ponente, no reemplaza de momento a Visual Basic for Applications o VBA, sino que lo complementa. En el propio IDE de VS se incluyen diseñadores para documentos Word y Excel, y dichos documentos incluyen soporte a controles .NET y un modelo de programación mejorado: de hecho es un modelo-vista-controlador, al estilo ASP .NET. Para hacer una distribución desconectada de nuestros documentos, y que podamos mostrar documentos Word o Excel sin tener que instanciarlos, podemos crear islas de datos, insertadas en el assembly. La demo fue bastante impresionante: Peláez cogió un típico documento Excel de cálculo de hipotecas y lo convirtió en un momento en un documento interactivo, que recibía fotos de un servicio Web, etc.

1230: WinForms, por el mismo ponente. Me doy cuenta al revisar mis notas que de esto he tomado muy pocas, pero es un detalle que se debe interpretar al revés. Escribir en la PDA es duro (o al menos yo no estoy acostumbrado) y si tomé pocas notas en esta charla fue precisamente porque me dejo impresionado, no por falta de novedades. Los ya mencionadas DataTips, smart tags, document outline y edición rápida de propiedades. Auto alineamiento de controles, y reglas para la alineación de los mismos. Nuevas fuentes de datos. ClickOnce para deployment inteligente de clientes via web (im-pre-si-o-nan-te). Mejoras en los procesos de instalación y desinstalación de nuestras aplicaciones Windows. Podemos seleccionar campos de una base de datos desde la vista de servidores y al arrastrarlos sobre el formulario se traducen en sus correspondientes controles TextBox o ComboBox o NumericUpDown. Controles Panel con layout interno invisible para posicionar controles. Redimensionado automático de controles al cambiar tamaños de pantalla. Autoscroll. Etc.

1245: César de la Torre nos presentó las novedades en ASP NET 2.0. Y son unas cuantas: las master pages, que permiten crear una plantilla fija para nuestro sitio web y que el resto de las páginas hagan uso de la herencia visual y hereden partes o todo el aspecto de las master pages. Temas, skins. Se introducen los profiles: almacenes de datos persistentes, fuertemente tipados, que no tienen nada que ver son los SessionState actuales. Controles nuevos para WebForms. Muchos controles nuevos. Pero muchos, muchos: unos cincuenta y pico. TreeView, SiteMap, controles de navegación, GridView mejorada, DetailsView, controles DataSource SqlDataSource para hacer databinding directamente con una base de datos y ObjectDataBinding para hacer databinding con nuestros propios objetos de lógica de negocio. Nuevos servicios base: membership para logins con interfaz multi-proveedor, controles web integrales de login y servicio web para gestión de roles. Y Web Parts. Web Parts, que es un marco de trabajo para construir aplicaciones tipo portales, que permite en tiempo de ejecución que un usuario con derechos de administrador pueda manejar a su antojo la distribución de las páginas mediante drag&drop, los contenidos, la conexión entre distintos Web Parts, etc.

1520: Por culpa de mi manía de comer con calma, llego muy tarde a la presentacion de SQL Server 2005, que empezaba a las 14:45. Llego a tiempo para ver al ponente hablar sobre índices sobre campos Xml y consultas XQuery. Lo lamento de veras porque tenía ganas de ver las capacidades nuevas del gestor.

1530: Presentacion de VS Team Suite (VSTS) y VS Foundation Server (VSFS). Quieren hacerla graciosa, y esta vez lo consiguen. Tres MVPs nos presentan una especie de obra de teatro improvisado, en la cual van interpretando los diversos papeles que componen la empresa ficticia Hinojo Software Factory y su crítico proyecto Hola Mundo. Y la verdad es que ambos productos darán mucho que hablar en los próximos meses: han conseguido juntar Visual Studio con Project con Visio para que todo el ciclo de vida de una aplicación vaya de la manita e integrado. Muy curioso el momento cuando uno de los MVPs pidió en la sala que levantásemos la mano los que hacíamos testeos unitarios,... y levantamos la mano dos personas.

1645: Comentario del programa colaborativo Desarrolla con MSDN, con presentación de la aplicación MSDN Video, con la que Microsoft quiere mostrar un ejemplo de best practices lo bastante grande como para que tenga miga. Y vaya si la tiene. El ponente crea una aplicación sencillita en respetuoso formato tres capas y explayándose en las explicaciones de cómo hacer las cosas bien utilizando las clases ya creadas de MSDN Video como ejemplo. Al final añade un servicio web (claro) como proxy de la lógica de negocio para disociar completamente las capas. Y al final, para babeo absoluto del personal (por lo menos, mío) y con la excusa de que hay que irse acostumbrando que viene Avalon, va y utiliza un interfaz manejado con código fuente DirectX 9 administrado: las portadas de las películas se veían en una especie de TV tridimensional que podía rotar, entre otras cosas. Una pasada. Al final, y utilizando como cobaya al invitado sorpresa, demostraron el uso de un cacharro hardware que es una especie de diapasón gigante que se supone que controla los movimientos del usuario y permite que éste maneje la interfaz con las manos, estilo Minority Report. Debido a la escasa luz ambiental del cine no funcionaba muy bien.

1740: Invitado final sorpresa y fin de fiesta. El invitado era Pablo Motos, que se marcó un acto de stand-up comedy (que por fin se ha puesto de moda en España, joer). Me gustó bastante, la verdad.

NOTA.- Arfs! Mi post más largo sin duda. Tenéis que ver la versión en inglés. ;-)

16 mayo 2005

Previo...

Mañana es la presentación en Madrid del Visual Studio 2005. Y al final, puedo, puedo ir. Así que en esta semana prometo post largo para contar las experiencias, a ser posible con fotos.

11 mayo 2005

Grupos de contactos en GMail

¡¡Por fin!!

Gracias a Will (que, a pesar de que dice que no tiene tiempo, podría hacer un blog sólo con los links que va encontrando que sería genial, me entero por el blog de GenBeta de cómo engañar a GMail y hacer listas de distribución. Atentos, que es realmente sencillo.

Imaginad que queréis hacer un grupo con tres contactos: a@a.com, b@b.com y c@c.com. Queréis que el grupo se llame Colegas, por ejemplo. Lo que tenéis que hacer es crear un nuevo contacto, como si estuviéseis añadiendo una nueva dirección de correo a vuestra lista de direcciones de GMail, y llamadla Colegas. En la caja de texto de la dirección de correo, tenéis que poner la siguiente cadena de caracteres:

a@a.com>,<b@b.com>,<c@c.com

Es decir, que cada dirección de correo que añadáis tiene que ir separada con una coma (,) de la siguiente y encerrada entre los símbolos de menor (<) y mayor (>), con la salvedad de que la primera dirección no lleva el carácter < al comienzo y la última dirección no lleva el carácter > al final. Esto se hace así porque GMail añade esos dos caracteres automáticamente a la cadena que introduzcamos como dirección de correo.

Una vez hecho esto, voilá! tenéis un contacto que contiene tres (en este caso) direcciones de correo. =)

I dislike iPod

La actitud chulesca de sus propietarios, el rollete ese fanático de "es Mac, por lo tanto es mejor", el tufillo (por no decir pestazo) insufriblemente snob y de diseño del cacharro y su horda de seguidores, y el im-pe-pi-na-ble hecho de que existen alternativas mejores y más baratas en el mercado (pero claro, no son Mac) hacen que un servidor se sume al movimiento:



I DISLIKE iPOD

09 mayo 2005

¿Sabéis navegación?

Pues id aprendiendo, para cuando nos toque.

Pero qué panda de esclavistas hijos de puta.

PS.- Gracias a Will por la info.

05 mayo 2005

Microsoft Developer Day 2005

Espero encontrarme con alguno por aquí.

VS Hacks: SmartPaster

Aprovechando que ayer me llegó el excelente libro de O'Reilly, Visual Studio Hacks, vamos a inaugurar una sección en el blog. En ella iré comentando los, para mi gusto, mejores hacks expuestos en el libro. Por lo poco que he podido leer hasta ahora, está repleto de información útil para aprovechar al máximo ese IDE de IDEs, el Visual Studio 2003. Incluso vienen trucos exclusivos para la futura versión 2005.

Y ya que sale el tema, os comento una novedad que va a tener la versión 2005: podremos elegir no guardar los proyectos nuevos de forma automática, evitando así lo que se ha venido en denominar el síndrome Windows21 application. Si queremos probar un snippet de código en VS 2005 podremos (además de seguir utilizando el muy recomendable Code Snippet Compiler) crear un nuevo proyecto que se guardará sólo de forma temporal (e invisible para nosotros) en un directorio asignado por el IDE. Después de probar nuestro código, cerramos la solución sin guardarla y santas y benditas pascuas. Pero a lo que vamos, que me pierdo.

Uno de los hacks que más me ha llamado la atención del libro, de momento, es en realidad un Add-In, no un hack propiamente dicho. Se trata de SmartPaster, una herramienta que nos permite copiar texto a la ventana de código del VS de forma inteligente. Hasta ahora, si uno creaba una query SQL, por ejemplo:

SELECT Cus.CompanyName, Cus.ContactName,
Ord.OrderDate, Ord.ShippedDate
FROM Customers AS Cus
INNER JOIN Orders Ord ON Cus.CustomerId = Ord.CustomerId

lo más normal es que se hiciera desde una herramienta externa para asegurarnos que la query funcionaba bien, entre otras cosas. El problema es que al pasar esa query a código fuente en Visual Studio teníamos que formatearla para el lenguaje que estuviéramos usando, y en queries largas es un auténtico coñazo. Para eso se ha inventado SmartPaster. Una vez instalado el add-in copiamos el texto que queramos introducir, seleccionamos con el BDR la opción "Paste as..." del SmartPaster y podemos elegir entre pegar como Comentario, String, Stringbuilder o Region. Por ejemplo, la query anterior pegada como String queda así:

@"SELECT Cus.CompanyName, Cus.ContactName," + "\n" +
@"Ord.OrderDate, Ord.ShippedDate" + "\n" +
@"FROM Customers AS Cus" + "\n" +
@"INNER JOIN Orders Ord ON Cus.CustomerId = Ord.CustomerId";

Y como StringBuilder así:

StringBuilder myStringBuilder = new StringBuilder(218);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}@""SELECT Cus.CompanyName, Cus.ContactName,"" + ""\n"" +{1}", \t, \n);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}{0}@""Ord.OrderDate, Ord.ShippedDate"" + ""\n"" +{1}", \t, \n);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}{0}@""FROM Customers AS Cus"" + ""\n"" +{1}", \t, \n);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}{0}@""INNER JOIN Orders Ord ON Cus.CustomerId = Ord.CustomerId"";{1}", \t, \n);

Por supuesto, siempre es conveniente usar StringBuilder en lugar de una simple concatenación de textos, por motivos de rendimiento obvios: StringBuilder no llama a nueva nueva instancia de la clase String ni al recolector de basura al terminar cada concatenación de texto, por ejemplo.

En fin, que podéis encontrar SmartPaster, en descarga directa, aquí. Por cierto, mencionar que SmartPaster está creado por un viejo conocido de este blog, Alex Papadimoulis, que tiene su propio blog y es el creador del excelso The Daily WTF.

NOTA.- Antes de que algún avispado denuncie a este post como un WTF en sí mismo, que sepáis que sí, que lo sé. Que usar queries in-line es pecado, hay que usar vistas o mejor aún procedimientos almacenados. Pero los que realmente trabajamos en esto y no nos dedicamos a contar cuántos ángeles bailan en la cabeza de un alfiler sabemos que a veces hay que hacer las cosas mal. Por lo menos sabemos que están mal hechas.