Snippet Compiler

Published 31 weeks, 2 days ago
Wed Nov 28 2007

Creo que ya he hablado en alguna ocasión de Snippet Compiler, que es una de mis herramientas favoritas para C#. Desarrollada por Jeff Key, su página web tiene otro buen montón de utilidades.

Como se define en su página, Snippet Compiler compila snippets. Es decir, que mediante esta utilidad podemos crear pequeños bloques de código (snippets) y ejecutarlos... sin necesidad de Visual Studio.

Es perfecta para cuando quieres probar una pequeña funcionalidad y no quieres tener que meter líneas de prueba en tu solución actual o, peor aún, arrancar una nueva instancia de Visual Studio y crear una nueva solución para ese bloque de código. Por ejemplo, a mí siempre se me olvidan los formatos que se le pueden dar a las cadenas en String.Format(): tiramos de Snippet Compiler y hacemos las pruebas que hagan falta. O cuando tengo dudas al realizar funciones de manipulación de cadenas, lo mismo. O con cualquier método que desconozco, para probar.

Tiene IntelliSense, aunque por desgracia sólo funciona con las clases del .NET Framework, ventana de errores, posibilidad de importar proyectos de Visual Studio, y la posibilidad de crear templates. Por ejemplo, en el template por defecto incluye las funciones WL() y RL(), wrappers de Console.WriteLine y Console.ReadLine respectivamente, lo que nos evita tener que teclear demasiado al usar estas funciones frecuentemente.

Syntax Highlighter y dasBlog

Published 33 weeks, 2 days ago
Wed Nov 14 2007

Syntax Highlighter son un conjunto de librerías en Javascript desarrolladas por Alex Gorbatchev, gratuitas y disponibles en Google Code. Gracias a ellas, podemos escribir bloques de código fuente en blogs o páginas Web con un formato realmente elegante, y con sintaxis preparada para C#, VB, Delphi, C++, Java, JScript, Python, Ruby, PHP y unos cuantos lenguajes más. Se instala y se configura en pocos minutos y es sencilla de usar. En concreto, vamos a ver cómo podemos usarla en un blog que utilice dasBlog como motor.

Configuración Inicial

Si te descargas el código de Syntax Highlighter, verás que tiene una serie de ficheros JavaScript comprimidos y sin comprimir, más un fichero Flash y un fichero de CSS. Subimos los scripts que vayamos a usar (o todos, que nunca se sabe), junto con el fichero Flash, a la carpeta que deseemos de nuestra estructura de directorios, pero recordando la ruta. Lo mismo para el fichero de estilos CSS. En mi caso he subido los scripts a la carpeta /scripts y el CSS a la ruta donde se aloja el tema de la página, /themes/dandelion/.
Después tenemos que preparar nuestro blog para que admita bloques de texto y los prepare como código fuente. Para ello modificaremos el fichero homeTemplate.blogtemplate, que es el fichero que utiliza dasBlog como maestro, y que contiene las distintas partes de nuestro blog: capas para dividir menús de entradas, cabeceras, etc. En el homeTemplate.blogtemplate, antes de la etiqueta </head>, incluimos el siguiente código:
<!-- Syntax Highlighter by Alex Gorbatchev -->
<link type="text/css" rel="stylesheet" href="themes/dandelion/SyntaxHighlighter.css"></link>
<script type="text/javascript" language="javascript" src="scripts/shCore.js"></script>
<script type="text/javascript" language="javascript" src="scripts/shBrushCSharp.js"></script>
<script type="text/javascript" language="javascript" src="scripts/shBrushXml.js"></script>
<script type="text/javascript" language="javascript">
window.onload = function () {
    dp.SyntaxHighlighter.ClipboardSwf = 'Scripts/clipboard.swf';
    dp.SyntaxHighlighter.HighlightAll('code');
}
</script>

Y ya está, ya tenemos preparado nuestro dasBlog para usar Syntax Highlighter.

Modo de empleo

Hay dos maneras principalmente de usar Syntax Highlighter. Mediante las etiquetas <pre> y <textarea>.
Mediante la etiqueta <pre> el uso es como sigue:
<pre name="code" class="codigoLenguaje">
...
Y aquí vendría el código, teniendo en cuenta que
codigoLenguaje hay que sustituirlo por el alias 
del lenguaje que estemos usando
...
</pre>
También puede usarse así:
<textarea name="codigoLenguaje" class="c#" cols="60" rows="10">
...
Y aquí vendría el código, teniendo en cuenta que
codigoLenguaje hay que sustituirlo por el alias 
del lenguaje que estemos usando
...
</textarea>
Estos son los alias disponibles:
Lenguaje Alias
C++ cpp, c, c++
C# c#, c-sharp, csharp
CSS css
Delphi delphi, pascal
Java java
JavaScript js, jscript, javascript
PHP php
Python py, python
Ruby rb, ruby, rails, ror
SQL sql
VB vb, vb.net
XML/HTML xml, html, xhtml, xslt

Hay que tener muy en cuenta una precaución: para que el código funcione correctamente debemos cambiar todos los signos < y > por sus equivalentes en HTML, es decir & lt ; y & gt ;.

Y como podéis comprobar, el código queda así de bien:
/// <summary>
/// Código para la búsqueda de empresas. Este código lo usé en el proyect (fallido) de 
/// Intranet de mi antigua empresa, Axco Consulting. Usa SubSonic, pero no lo
/// hagáis ni p*to caso, que no explica nada. Está cogido a modo de ejemplo.
/// </summary>
/// <param name="empresa">El nombre de la empresa que queremos encontrar</param>
/// <param name="FIni">Fecha de Inicio</param>
/// <param name="FFin">Fecha de Fin</param>
public void SearchEmpresas(string empresa, string FIni, string FFin)
{
CATEMPRGRUPOCollection col = new CATEMPRGRUPOCollection();
Query qry = new Query(CATEMPRGRUPO.Schema);
qry.AddWhere(CATEMPRGRUPO.Columns.IDBAJA, false);
//Validamos los criterios de búsqueda introducidos,
//para ver si los añadimos a la query o no
if (empresa != "") 
    qry.AddWhere(CATEMPRGRUPO.Columns.DSEMPRESA, 
        Comparison.Like, "%" + empresa + "%");
DateTime dFIni, dFFin;
if (ControllerUtils.IsDate(FIni) && 
    ControllerUtils.IsDate(FFin))
{
    dFIni = DateTime.Parse(FIni);
    dFFin = DateTime.Parse(FFin);
    if(dFIni <= dFFin)
    {
        qry.AddBetweenAnd(CATEMPRGRUPO.Columns.FEALTA, 
            dFIni, dFFin);
    }
}
else if (ControllerUtils.IsDate(FIni))
{
    dFIni = DateTime.Parse(FIni);
    qry.AddWhere(CATEMPRGRUPO.Columns.FEALTA, 
        Comparison.GreaterOrEquals, dFIni);
}
else if (ControllerUtils.IsDate(FFin))
{
    dFFin = DateTime.Parse(FFin);
    qry.AddWhere(CATEMPRGRUPO.Columns.FEALTA, 
        Comparison.LessOrEquals, dFFin);
}
//qry.OrderBy = OrderBy.Asc(CATEMPRGRUPO.Columns.DSEMPRESA);
col.Load(CATEMPRGRUPO.FetchByQuery(qry));
if (col.Count > 0) LlenarColeccion(col);
else _empresasList.Clear();
}
y además trae de serie la posibilidad de abrir el código en una ventana externa en texto plano, copiarlo al portapapeles e imprimirlo.

Otro, otro!

Published 36 weeks, 8 hours ago
Sat Oct 27 2007
Rob Conery, el padre de Subsonic ha sido contratado por Microsoft. Y creo que esto es otra gran noticia.

¿Por qué?

Sencillamente, porque Rob ha sido contratado para seguir haciendo lo que más le gusta: trabajar en Subsonic, ya que (y ésta es la gran noticia) Subsonic va a formar parte oficialmente de MVC.NET, la implementación MVC que Microsoft presentará el año que viene.

Lo que viene a confirmar lo que Jon Galloway ya dijo en su día y yo estuve inmediatamente de acuerdo nada más probar Subsonic: esta herramienta debería estar al alcance de todo el mundo, incluidos esos programadores 501, que no leen libros, ni blogs ni usan Open Source ni nada que no venga empaquetado directamente en Visual Studio.

¡Enhorabuena, Rob!

Posteando desde el movil

Published 42 weeks, 2 days ago
Wed Sep 12 2007
Este post ha sido realizado desde mi HTC, usando Diarist 2; un software para Windows Mobile 5 en adelante, hecho con .NET Compact Framework. Funciona muy bien con dasBlog, permitiendo la insercion de imagenes desde el propio dispositivo movil. Ejemplo: IMAG0076.jpg
El software se encarga de subir automaticamente la foto a la carpeta por defecto para las imagenes en dasBlog, aunque por desgracia yo las tengo alojadas en un directorio diferente. En definitiva, un buen comienzo para una aplicacion que espero que Kevin pueda pulir un poco mas. Eso si, es agotador escribir desde aqui.

Editado 22:10: Al final he tenido que editar la entrada desde el interfaz web. Me ha cargado la imagen, lógicamente, tal y como se ha tomado: a una resolución insana y un tamaño inmenso. He retocado la imagen, la he colocado al directorio deseado y ya está.
En definitiva la impresión que me llevo del software es buena: tiene lo justo para poder crear una entrada y actualizar el blog en situaciones de emergencia, que es para lo que sirve la aplicación.

ReSharper: dos nuevas ventanas

Published 52 weeks, 2 days ago
Thu Jul 05 2007

Entrada rapidita para glosar dos características nuevas del fabuloso ReSharper 3.0: el To-Do Explorer y File Structure.

To-Do Explorer (Explorador de Tareas Pendientes, podría traducirse) es una ventana que hace exactamente eso: mantener una lista de las notas que vamos creando según escribimos código. VS2005 ya puede hacerlo, mediante la ventana Lista de Tareas, pero con una limitación importante: sólo se ven las tareas pendientes del fichero que tengamos abierto. Me parece bastante más útil tener abierta una ventana que me muestra la lista de tareas pendientes, hacks, bugs etc. de toda la solución, para comprobarla y navegar por sus elementos cuando quiera. Ved un ejemplo:

Dentro de ReSharper podemos definir cómo vamos a diferenciar una tarea pendiente de un comentario normal mediante expresiones regulares (por ejemplo, si empieza mediante //TODO o //HACK es una tarea pendiente o una chapuza que hay que refactorizar), agruparlos por categorías, asignarlos colores para verlos en la ventana del Explorador de To-Dos, etc...

La otra ventana digna de mención es la ventana de Estructura de Archivo. Esta ventana nos muestra la estructura completa de la clase que tengamos abierta, véase el ejemplo:

Esta ventana nos va a permitir la navegación rápida a cualquier parte de la clase mediante doble-click en cualquiera de sus elementos. Además, detecta automáticamente las regiones, si tenéis la (buena) costumbre de dividir vuestro código mediante las mismas. También nos permite seleccionar un elemento o grupo de ellos y encerrarlos en una nueva región, o subir o bajar las declaraciones para tener nuestro código ordenado lo mejor posible.

Definivamente, con cada nueva versión ReSharper sigue afianzándose como el mejor add-in de productividad para Visual Studio.

SQLDbx

Published 70 weeks, 2 days ago
Thu Mar 01 2007

Una entrada corta para comentaros rápidamente una herramienta que acabo de descubrir (vía el newsletter de Download.com): SQLDbx. Completamente gratuita en su edición personal, SQLDbx es un IDE para bases de datos: nos permite conectarnos con Oracle, SQL Server, DB2, Sybase y fuentes de datos ODBC. El IDE incluye Intellisense, un comparador visual de datos, remarcado de sintaxis, scripts de SQL, exportación de datos a varios formatos, visualizador de esquemas y un montón de características más. Por cierto, no tiene procedimiento de instalación porque no tiene absolutamente ninguna dependencia externa: el ZIP de descarga contiene un fichero ejecutable y un fichero con la ayuda, y ya está. Lo llevo probando un rato y es francamente recomendable.

Actualización 07/03/2007.- Es una auténtica gozada. Hay que acostumbrarse un poco porque el IntelliSense no es exactamente igual que el de Visual Studio, pero es impresionante para un producto completamente gratuito. Por ejemplo, se puede invocar el IntelliSense mediante F7 para listar las tablas, F8 para listar los procedimientos almacenados y F9 para listar las funciones del sistema. El comparador visual de datos (como un WinDiff pero para tablas) es un ahorro de tiempo espectacular en ciertas tareas. Tiene una característica de Speed typing, mediante la cual podemos establecer (por ejemplo) la tecla S como un atajo de la expresión 'SELECT * FROM '. Mediante F5 o CTRL+E ejecutamos todas las queries de la ventana, mientras que con CTRL+ENTER ejecutamos solamente la query sobre la que tengamos el cursor. Y lo mejor para el final: guarda un historial de todas las queries que hemos ejecutado en la sesión actual, recuperable mediante Mayús+Ctrl+H.

Definitivamente, tengo que echarle un vistazo a la versión profesional.

En otro orden de cosas menos agradables, tengo que hacer algo que no me gusta nada, pero a lo que me habéis obligado: a partir de ya los comentarios de este blog están moderados. Estoy completamente a favor del debate y el intercambio de ideas, nunca de insultos.

MS Virtual PC 2007

Published 71 weeks, 3 days ago
Tue Feb 20 2007
Y ya que hablábamos el otro día de programas de virtualización, una grata noticia: Microsoft Virtual PC 2007 está disponible de forma gratuita para su descarga, tal que aquí.

Cajón de herramientas

Published 71 weeks, 4 days ago
Mon Feb 19 2007
Respondiendo a los comentarios de hace algunas entradas, lo prometido es deuda. Aquí tenéis la lista de mis herramientas favoritas para .NET. salvo que se indique lo contrario, todas las herramientas que menciono son gratuitas y la mayoría son Open Source.
  • Resharper.- Tuvo su propia entrada no hace mucho, así que no voy a añadir nada más. Sólo que, si sois usuarios de este fantástica herramienta, os interesará saber que Joe White ha iniciado una serie-tutorial al respecto que está francamente interesante. No, por desgracia no es gratis.
  • Data Dictionary Creator.- Creado por Jon Galloway y esponsorizado por la compañía en la que trabaja (Veloc-IT, cómo molaría trabajar en una empresa que no sólo alentase sino que promoviese los pet projects, eh? Pero esto es España, muchachos! Que investiguen otros!!). Se trata de un documentador de bases de datos, simple pero funcional. Open Source.
  • Reflector.- Sigue siendo EL visor de clases por excelencia de .NET.
  • WinMerge.- No es estrictamente una herramienta .NET, pero más de una vez me ha venido de perlas para comparar diferencias entre ficheros web.config, por ejemplo. Open source.
  • Inno Setup.- Desde 1997, uno de los mejores programas para crear procedimientos de instalación para aplicaciones Windows de escritorio. Los instaladores son creados mediante el uso de un sencillo lenguaje de script, pero si no queréis ni siquiera esa mínima complicación siempre podéis usar ISTool, una herramienta también gratuita que nos permite crear y modificar scripts de Inno Setup.
  • Xml Notepad 2007.- Para la creación y modificación de ficheros XML, permitiendo especificar esquemas XSD o transformaciones XSLT. De Microsoft y gratuito, para pasmo de algunos.
  • SlickEdit gadgets.- Colección de plugins para Visual Studio, que incluyen el Command Spy, fantástica utilidad que cuando la activas puede decirte qué atajos de teclado se corresponden a las acciones que vas realizando con el ratón; el un analizador de objetos, un explorador de archivos integrado, un analizador de SLOC que te dice el total de líneas tiradas en la solución, desglosándolas por líneas en blanco, líneas de código y comentarios, y unas cuantas utilidades más para la ventana de edición de código de VS 2005, incluyendo la posibilidad de poner una imagen de fondo a nuestra ventana de código, lo que siempre queda muy bien :)
  • SmartPaster.- Simplemente, una idea fantástica: un plugin para VS que nos permite pegar el texto previamente copiado en el portapales como texto normal, o texto comentado, o como un string builder, o como una región. Sencillamente genial.
  • TimeSnapper.- Aunque en esencia no es una herramienta de programación, TimeSnapper permite controlar lo que hacemos al cabo del día y optimizar nuestro rendimiento, quedándose residente en memoria y haciendo capturas de pantalla de nuestro escritorio a intervalos configurables, para después reproducirlos todos y ver en qué nos ha cundido (o no) el día. Versión lite gratuita, existe una versión profesional por $39.95.
  • CodeColorizer, la herramienta que uso para poner colores al código fuente que copio y pego en este mismo blog. Por cierto, debo ser el único que lo usa (o que respeta sus reglas), porque si buscáis en Google "CarlosAG.CodeColorizer" salgo justo detrás de la web correcta, y varias veces. =)
  • Snippet Compiler, de Jeff Key. Impresionante herramienta para testear pequeños fragmentos de código .NET, sin necesidad de tener que crear una solución completamente nueva cada vez que se te ocurre una idea.
  • StickyNotes. No confundir con Sticky-Notes, que es otro programa para lo mismo, pero no es el mismo programa. Hay muchos más programas de este estilo, pero éste es mi favorito: lo uso para guardar copypasteos, para apuntarme recordatorios, poner alarmas, etc... La verdad, no podría vivir sin él, al margen de la programación.

Y ya está. He probado otros muchos, pero estos son los que uso prácticamente todos los días. Si tenéis alguna sugerencia, me he olvidado de alguno o queréis publicitar vuestra herramienta entre mis cuatro o cinco lectores :), vuestros comentarios son bienvenidos.

Actualización 23/02/2007.- Corregida la entrada para añadir las StickyNotes, y enmendar así una gran injusticia...

I Love ReSharper

Published 75 weeks, 3 days ago
Wed Jan 24 2007
Ésta iba a ser una entrada sobre los distintos plugins de VS 2005 que uso, y otros programas útiles para mi día a día (la mayoría Open Source, por cierto); pero mientras lo estaba escribiendo se ha ido convirtiendo progresivamente en una carta de amor a Resharper. No puedo más que decir cosas buenas de este plugin de aumento de productividad.

Éstas son sólo algunas de sus características:
  • Chequeo de errores y avisos según escribes código; al estilo de la revisión automática de ortografía de Office pero bastante más inteligente.
  • Intellisense mejorado. De lejos, lo que más me gusta y más se nota después de recién instalado. Si lo deseas, ReSharper puede reemplazar el Intellisense de VS2005 con el suyo propio, que es más rápido y completo. Posibilidad de establecer en Intellisense la misma fuente que en el entorno de desarrollo, posibilidad de reemplazar los iconos de Intellisense con los de ReSharper, añade un pop-up con la firma del método completo al resaltarlo en Intellisense y se activa desde que escribes los primeros tres caracteres (por defecto) de cualquier cosa.
  • Auto-completado de código, escribes las tres primeras letras de cualquier cosa y ReSharper ya te está mostrando alternativas. Si además lo que estás escribiendo es un método, pulsando TAB te inserta el nombre completo del método más los paréntesis y el punto y coma necesario.
  • Templates.
  • Refactorización: extracción de propiedades desde variables, extracción de métodos desde código: seleccionas un bloque de código, eliges extraerlo como método, le das un nombre y opciones, entre las que se incluyen los parámetros de entrada del método que ReSharper detecta automáticamente y método extraído.
  • Búsqueda avanzada de usos de métodos.
  • Vista de jerarquías de tipos.
  • Lanzamiento de testeos unitarios con NUnit o csUnit desde el propio IDE.
  • Acciones contextuales. En ciertas secciones del código puede aparecer una pequeña ventana flotante con un icono de una bombilla. ReSharper te quiere ayudar: extendiendo esa ventana con el ratón (o mejor, ALT+Enter) ReSharper te mostrará una lista de las posibles acciones a realizar según el contexto del código: chequear valores nulos, reorganizar sentencias if, reorganizar cadenas con un StringBuilder, eliminar referencias using que no se están usando.
  • Detección automática de variables, métodos o referencias no usadas. Declaras una variable al principio del código y luego no la usas para nada: ReSharper la resalta en color gris, para que sepas que no se está usando en ningún sitio, ningún método hace referencia a ella.
  • Salto directo a la definición de un método o variable: con CTRL+Click encima del nombre de un método saltamos directamente al fichero de código que contiene ese método, si está disponible.
Y estos son sólo las partes de la herramienta que utilizo todos los días. Definitivamente, es la mejor compra que he hecho jamás para un complemento de Visual Studio; sobre todo teniendo en cuenta que me acogí a la oferta de $99 de estas navidades (de la que ya avisé por aquí), porque ha vuelto a su precio normal de $249. Los programadores de JetBrains hacen con su producto que Visual Studio 2005 sea un IDE aún mejor de lo que ya es. La lástima es que la perenne noticia de que están desarrollando su propio IDE para .NET es, al parecer, antigua (mirad en los comentarios), ya que al parecer el proyecto se ha abandonado. Una pena.

VirtualBox

Published 76 weeks, 4 days ago
Mon Jan 15 2007
Cuando empezaba en esto del desarrollo, trabajaba para una empresa que (entre otras cosas) vendía una solución de software para la personalización de tarjetas de plástico. Dicha solución era genérica (lo que los anglosajones llaman off-the-shelf software o shrinkwrap. Vamos, un programa genérico que los clientes compraban tal cual, como podrían comprarse un Office, por ejemplo; en lugar de una solución específica para cada cliente.

Como podréis imaginar, dicho software debía instalarse de forma fácil y sencilla y no requerir componentes adicionales. Para asegurarnos de ello, cada vez que se compilaba una nueva versión se hacían pruebas de compatibilidad: en mi mesa tenía cuatro ordenadores, uno para desarrollo y otras tres máquinas un poco más viejas para pruebas. Una de las máquinas tenía un Windows 95, otra un Windows 98 y otra un Windows NT; y cada una de ellas no tenía nada más que el sistema operativo y los drivers correspondientes instalados. Nuestro software debía funcionar en máquinas desnudas, y cada nueva versión que realizábamos teníamos que formatear las máquinas de prueba y reinstalar el sistema operativo, para asegurarnos de un funcionamiento perfecto. El proceso se repetía tanto que llegué a saberme de memoria los números de serie de cada uno de los SOs.

Conseguimos agilizar bastante el proceso gracias a Norton Ghost: se hacía una imagen del SO "desnudo" por cada máquina y después de las pruebas de instalación de nuestro software, se reinstalaba desde la imagen de Ghost.

Pero seguía siendo un coñazo.

Lo que no hubiera dado en aquellos días por software de máquinas virtuales: por aquél entonces o no existía o yo no lo conocía. Para los que no sepáis de lo que hablo, las máquinas virtuales son programas que crean un entorno virtual entre tu hardware físico y el sistema operativo instalado en dicho hardware; y en ese espacio virtual puedes instalar un sistema operativo completamente distinto al instalado físicamente, en un entorno completamente cerrado. Puedes tener un Windows Server 2003 dentro de un Windows XP, por ejemplo.

Sencillamente, se asigna dentro del disco duro de tu equipo un fichero que va a funcionar como disco duro de la máquina virtual; y se le asigna a la máquina virtual una cantidad de memoria RAM (que saldrá del total de la memoria RAM física del equipo, por lo que cuanta más RAM tengamos, mejor). Pueden también montarse unidades de CD y floppy virtuales, permitir que la máquina virtual tenga o no acceso a la red, etc. Para instalar un sistema operativo basta con montar un fichero ISO de auto-arraque en el CD virtual y arrancar la máquina virtual. A partir de ahí, podremos seguir las instrucciones de instalación como si tuviéramos, en efecto, un ordenador dentro de nuestro ordenador.

He usado principalmente dos entornos de virtualización: Microsoft Virtual PC, que en su versión 2004 es completamente gratuito (la 2007 es de pago) y que es un muy buen entorno de virtualización, de hecho es el que ahora utilizo en el trabajo.

Y el que acabo de probar en casa es InnoTek VirtualBox, que es Open Source y gratuito, para un entorno personal. Al menos en mi caso, lo importante es lo segundo: francamente no me veo con nivel como para entender, y mucho menos modificar, el código fuente de una de estas cosas.

De hecho, estoy escribiendo esta entrada desde una máquina virtual montada con VirtualBox y que está corriendo un Ubuntu Dapper Drake. No, no vuelvo a las andadas: es lo que tenía a mano para probar VirtualBox. En realidad, el objetivo en los próximos días es instalar Vista. =)

Así que si no conocíais el software de virtualización, mi consejo es que probéis cualquiera de los dos reseñados: ambos son sencillos e intuitivos de manejar, y mediante la virtualización disponemos de un entorno en el cual probar y cacharrear sin peligro.

Hotfixes

Published 80 weeks, 4 days ago
Tue Dec 19 2006
Como ya sabréis si estáis mínimamente atentos a la blogocosa, el primer Service Pack para Visual Studio 2005 está disponible para su descarga aquí.
Habiéndolo descargado (toooodos sus inmensos 431 megas) e instalado, permitidme un par de consejos:
  • Antes de comenzar la instalación del SP aseguraos de haber desinstalado el VS 2005 Web Application Project, si lo teníais; ya que su funcionalidad se incluye en el SP1 y éste protesta e impide la instalación si detecta que el Web Application Project está instalado en el sistema.
  • Tened en cuenta, en general, que el SP1 tardará más cuantas más opciones de VS y más lenguajes tengáis instalados; ya que realiza la actualización para todos y cada uno de ellos.
  • En general, un buen consejo a tener en cuenta es que no instaléis el SP1 hasta que no tengáis un buen rato libre, preferiblemente un par de horas. He instalado el SP1 en tres sistemas en los últimos dos días y en ningún caso he bajado de la hora y media.
Por otro lado, esto no es únicamente problema del SP1. Cualquier hotfix para Visual Studio tarda una eternidad en instalarse. Ayer recibí mi licencia para el extraordinario ReSharper 2.5, (que por cierto está de oferta), y procedí a instalarlo. Resulta que requiere que un par de hotfixes estén presentes en el sistema y si el usuario responde afirmativamente, procede automáticamente a instalarlo. Este pequeño e inocente paso aumenta el tiempo necesario para instalar ReSharper desde los 2 minutos hasta los tres cuartos de hora.
¿Alguien sabe por qué son tan rematadamente lentos?

Actualización 14:23.- Vía Jon Galloway me entero de una forma de acelerar la instalación del SP1: deshabilitando la caché de parches. Más información sobre cómo hacerlo en el blog de Heath Stewart.

XNA Game Studio

Published 96 weeks, 1 day ago
Fri Sep 01 2006
Microsoft ha puesto a nuestra disposición la beta de XNA Game Studio Express, un conjunto de utilidades gratuitas para desarrollar juegos para Windows y XBox. Incluye el XNA Framework, que no es ni más ni menos que librerías administradas para simplificar (y falta hacía) el acceso a DirectX.

El lanzamiento está orientado a estudiantes y programadores aficionados (aunque nos ha llegado al alma a todos1) y, de momento, XNA Game Studio sólo es compatible con Visual C# 2005 Express.

Ya hay una página (que yo haya visto) que recopila todos los links de descarga de todas las herramientas necesarias (y sí, son todas gratis); además de tener unos cuantos tutoriales publicados: XNA Development.

Qué poquito voy a salir este fin de semana...

Actualización.- Por cierto, que si eres como yo y prefieres las instalaciones desconectadas, es decir bajarte el producto íntegro para poder instalarlo en equipos sin conexión, aquí tienes todas las ediciones definitivas de las Ediciones Express de Microsoft, en formato ISO o IMG para tostar a CD.
1.- Venga, ¿qué programador no ha soñado alguna vez con programar juegos? ¡Es el Top Gun de la programación!

SubSonic

Published 96 weeks, 2 days ago
Wed Aug 30 2006
Acabo de hacerme daño: he visto el webcast de Rob Conery sobre la pequeña librería que ha creado para .NET 2.0 y la mandíbula se me ha abierto tanto (y no precisamente de sueño) que ha golpeado contra la mesa de mi escritorio.

Como el propio Conery admite, se ha basado en Ruby on Rails para crear SubSonic (anteriormente conocido como Action Pack). SubSonic se publicita como Zero Code DAL, o en cristiano una Capa de Acceso a Datos sin Código. Como en Ruby. Con scaffolding y todo.

Ojo, SubSonic no es la implementación en .NET de Ruby on Rails. Para eso tenemos MonoRail. Ni siquiera una adaptación, ya que RoR es un framework completo que implementa el Modelo-Vista-Controlador, incluye el acceso a datos y todo lo demás. SubSonic es sólo una excelente capa de acceso a datos.

No he tenido tiempo de jugar con ella, pero si queréis dejar de pasar envidia cochina cada vez que veis un webcast o una presentación de Rails, echadle un vistazo al webcast de introducción a SubSonic.

Eso sí, cuidado con la mandíbula.

Actualización.- Me olvidé de linkar esta excelente introducción de Jon Galloway al respecto. Opino exactamente igual que él: Microsoft debería subcontratar por tres meses a Conery e incluir el ActionPack.dll como parte del paquete Atlas. O dotar a SubSonic de capacidades MVC. O hacer algo con esto. Antes de que, como siempre, se le adelanten.

Microsoft goodies

Published 100 weeks, 1 day ago
Thu Aug 03 2006
Aquí tenéis una lista de 150 programas de Microsoft completamente gratuitos. Hay de todo.

Actualización: Hoy la cosa va de freebies. Aquí tenéis un libro en PDF, descargable gratuitamente, llamado Visual Studio Tips and Tricks. No es tan bueno como el Visual Studio Hacks, pero está bastante completo, y cubre un área bastante dejada de la mano de Dios en la mayoría de cursos y seminarios: el IDE. Por cierto, descargarse el libro requiere registrarse gratuitamente en InfoQ, pero para eso está Bug Me Not, ¿verdad?

Google Code

Published 100 weeks, 5 days ago
Mon Jul 31 2006
O de cómo Google hizo su propio SourceForge.

Google ha abierto, disponible para todos aquellos con una cuenta de correo GMail, Google Code Hosting, un repositorio para proyectos Open Source alojado por Google. Usa Subversion como control de código fuente, y permite a los administradores de proyectos manejar un tracker de incidencias, administrar los colaboradores del proyecto, añadir vínculos a las posibles páginas Web externas de un proyecto, etc.

Seguiré contando cosas según vaya probándolo.

SharpDevelop 2

Published 101 weeks, 4 days ago
Mon Jul 24 2006
Sí, lo sé. Comparado con el ritmo de actualizaciones real de este blog, la actividad de hoy está resultando frenética. A ver si ahora os vais a quejar también por eso. ;)

Dos muy buenas noticias para este post. La primera es la reciente actualización de nuestro IDE Open Source favorito para C#, SharpDevelop, a la versión 2.0 del Framework. Lo sé, esto no es ni mucho menos una noticia en tanto en cuanto no es reciente (¡y qué difícil es dar noticias en este medio!): fue el pasado 17 de Julio cuando hizo su aparición oficial la versión definitiva de SharpDevelop 2 2.0.

Pero ahora vamos a por la segunda noticia. Después de descargarlo (4.2 Mbs) e instalarlo (cinco minutos escasos) me dispongo a probarlo. Al crear una nueva solución de prueba (el enésimo Hola, mundo!) se me forma un nudo en la garganta: problemas de compatibilidad a la vista.

SharpDevelop 1 usaba los combines, ficheros con extensión .cmbx, como eje central: los combinados de SharpDevelop eran equivalentes a las soluciones de VS .NET. Por lo tanto, cuando veías en tu disco duro un fichero con extensión .cmbx sabías que era un fichero de SharpDevelop, y estaba por defecto asociado en el Explorador de Windows a dicha aplicación. Los ficheros .cs, .resx, etc. podías decidir con qué asociarlos.

Los combinados han desaparecido (al menos, hasta donde yo he probado) en SharpDevelop y han sido sustituidos por soluciones, como en Visual Studio. Y su extensión es la misma: .sln.

Horror. Ya me estaba imaginando teniendo que crear una carpeta para los proyectos VS y otra para los proyectos SharpDevelop, ya me estaba imaginando a los dos IDEs peleándose por la asociación con mis ficheros como dos web browsers en celo, ya me estaba imaginando el corromper sin remedio una solución de un tipo al abrirla con el IDE que no era, etc., etc.

Pues no ha habido tal. He creado una solución muy tonta, con dos controles DateTimePicker y un botón en VS 2005. Lo he compilado, y lo he probado. Después lo he abierto en SharpDevelop 2 (eso sí, habiendo cerrado previamente VS 2005) y me he preparado para lo peor. Sin problema: SharpDevelop no me ha dicho absolutamente nada sobre la solución, y la ha compilado y ejecutado como si fuera hija natural suya. Hago algún cambio en SharpDevelop 2, compilo y ejecuto. Guardo y cierro. Abro la solución en VS 2005, convencido de que ahora sí que voy a tener problemas: los desarrolladores de SharpDevelop 2 habrán tenido cuidado de que su IDE pueda abrir soluciones hechas en otros IDEs, pero los de Microsoft no creo que lo hayan hecho.

De nuevo me decepciono: VS 2005 ha recogido los cambios realizados sobre la solución en SharpDevelop 2 como si los hubiera hecho él mismo. Compilo, ejecuto. Sin problemas.

A falta de pruebas más serias, como sería por ejemplo una aplicación ASP .NET, o incluir en el proyecto una batería de tests de NUnit, me alegra comprobar que de momento SharpDevelop 2 y VS 2005 son absolutamente compatibles.

BumpTop, nuevo paradigma de escritorio

Published 101 weeks, 4 days ago
Mon Jul 24 2006

Mientras que algunos, entre los que me incluyo, nos vemos a veces tentados por los cantos de sirena de la Web 2.0 y damos al escritorio de toda la vida prácticamente por difunto, otros se empeñan en demostrarnos que de muerto, nada.

Lo que podéis ver en el vídeo de arriba es una demostración de un prototipo de escritorio 3D, que utiliza datos físicos reales para emular un escritorio de verdad en el escritorio virtual de nuestro ordenador. Con él podremos ordenar los iconos en pilas, tirarlos, arrugarlos, hacerlos más grandes o más pequeños, ordenarlos, colocarlos en estanterías, etc... Habida cuenta la entusiasta respuesta que ha tenido el sistema, están pensando en pasar de prototipo a producto y para ello están buscando expertos en C++ y OpenGL. Más info, en su página, de donde también podréis descargaros el vídeo de demo en mejor calidad.

Me reservo mi opinión sobre la utilidad real de este nuevo sistema de escritorio, principalmente por mi forma particular de utilizar mi escritorio. Mientras que otras personas tienen literalmente atiborrado el escritorio con cientos de iconos y documentos, yo lo mantengo lo más limpio que puedo: generalmente el icono de Mi PC y la Papelera de Reciclaje. En mi caso el escritorio no es un lugar de trabajo: sólo lo veo cuando acabo de encender el monitor y justo antes de ponerme a invocar ventanas. Por lo tanto, para mí no sería de demasiada utilidad. Curiosamente, el orden espartano que mantengo en el escritorio de mi sistema no tiene absolutamente nada que ver con el desorden de mis mesas de trabajo, tanto en casa como en el trabajo remunerado. La primera desventaja de BumpTop sería, por tanto, lo fácil que resultaría emular el desorden real en el desorden virtual. Imagino entonces que el tiempo que uno tarda en reorganizar un escritorio real, y el tiempo que tarda el caos en volver a adueñarse de él, tendrían su fiel contrapartida virtual.

El segundo pero es que es algo tan, tan bonito que ya no necesitaríamos la web para hacer el vago: podríamos hacerlo directamente en el escritorio.

Donde menos te lo esperas...

Published 108 weeks, 4 days ago
Mon Jun 05 2006
... salta la liebre. Mirando las estadísticas de Google Analyzer de la versión en inglés de este blog, me he encontrado con el blog de un ex-maquero y me he puesto a leer la historia de su desengaño amoroso con la marca de la manzana. Y me he encontrado, donde menos lo esperaba, con algo que llevo mucho, mucho tiempo buscando:

A real fucking keyboard!
El servicio de Flickr me obliga a linkar la imagen contra Flickr.

Efectivamente, es un teclado. Pero, ¿es un teclado cualquiera? Noooo... es uno de aquellos teclados antiguos, de metal en lugar de la membranita, aquellos que cuando uno se ponía a picar furiosamente parecía que se iba a caer la casa encima de uno con el klackety-klackety-klack; lo que se llegó a conocer como Teclado IBM. Sí, señor, un teclado de los de antes. Un teclado de verdad, joder, no las mierdecillas que hacen ahora.

Inmediatamente he tirado de tarjeta y he pedido uno de 105 teclas con el keyboard layout en español. Si queréis más info, están disponibles en Pc Keyboard.

Planeando el futuro

Published 112 weeks, 4 days ago
Mon May 08 2006
En este excelente artículo, Mark Pilgrim nos habla de sus actuales necesidades de backup de datos y de las que prevee en un futuro. Y considera que la solución va a ser, como mínimo, difícil.

Aunque no tengo sus mismos problemas de espacio, empezaba yo a plantearme lo mismo, así que este artículo me ha venido realmente bien. Sobre todo cuando en los comentarios he visto recomendados los ReadyNAS de Infrant, de los que Amazon es un reseller. A 2,199 dóllares el NAS de 2 Tb en X-RAID me parece muy, pero que muy apetecible. Creo que ya sé en qué me fundo mi próxima paga extra.



Además, es bonito que te cagas.

Web 2.0 y eso...

Published 116 weeks, 4 days ago
Mon Apr 10 2006
Via Mike Gunderloy (otra vez... si no estáis suscritos ya, no sé a qué estáis esperando) me encuentro con dos librerías estupendas para ASP .NET.

Una, el BusyBoxDotNet, es un control de servidor que muestra un mensaje de espera en la página cliente cuando el servidor esté realizando alguna operación que consuma mucho tiempo. El mensaje aparece en una capa que se mueve automáticamente al hacer scroll, permite difuminar y bloquear el fondo (es decir, el resto) de la página mientras se está realizando la tarea y desaparece sin problemas al terminar. Podéis probar una demo aquí. Muy, muy útil.

Y por otro lado, siguiendo con la moda del Web 2.01, tenemos MagicAjax.NET. Permite introducir técnicas AJAX en controles de servidor ASP .NET normales y corrientes, por lo que se suponen óptimos para introducir AJAX en una aplicación ya hecha o en proceso. También tienen una demo disponible.


1 Que no, no consiste únicamente en poner bordes redondeados a los cuadrados. O en poner un feed RSS en tus páginas, ni en utilizar palabros como sinergia, comunidad, colaborativo o tags. Ni siquiera consiste en poner un Beta al lado del nombre de tu aplicación Web. Además de todo eso, hay que hacer que sea más intuitiva, más ágil en la respuestas que proporciona al usuario. Menos viajes al servidor para cargar información, al menos aparentemente. Vamos, que se parezca lo más posible a una aplicación de escritorio, incluso llegando a imitarlas por completo. Lo que hay que ver.

Bug en Peeker

Published 117 weeks, 4 days ago
Mon Apr 03 2006
Acabo de darme cuenta de la existencia de un bug en Peeker, mi aplicación para la pre-visualización de imágenes desde el Explorador de Windows.

Para comprobarlo, haced click con el botón derecho del ratón en cualquier imagen de vuestro disco duro, y pinchad la previsualización de la imagen en el menú contextual de Peeker. Se os abrirá, como de costumbre, una nueva ventana con la imagen cargada a tamaño completo. Cerrad esa ventana. Ahora, intentad borrar el archivo de imagen desde el Explorador de Windows. Exacto, no funciona. Dice que no se puede borrar el archivo porque está siendo usado por otro proceso.

Sencillamente lo que ocurre es que al cerrar el formulario de visualización de la imagen a tamaño completo no libero específicamente la imagen cargada, por lo tanto Windows no encuentra el fichero libre cuando intentamos eliminarlo. No es un bug importante, de hecho ya está corregido, pero esto me ha dado que pensar.

Quiero añadir más funcionalidades a Peeker, amén de corregir este y cualquier otro error que pudiera producirse; y no quiero estar cada dos por tres añadiendo una entrada avisando de que hay una nueva versión disponible. Y tengo mucha curiosidad por implementar un sistema de actualización automática de una aplicación Windows, así que espero que muy pronto podáis descargar una nueva y definitiva versión de Peeker que se auto actualizará, para que no tengamos que estar atentos a esta clase de cosas.

Sky Software y la publicidad

Published 119 weeks, 2 days ago
Wed Mar 22 2006
Me entero, a través del valiosísimo blog de Mike Gunderloy The Daily Grind, de una iniciativa promocional de lo más curiosa.

La compañía Sky Software está promocionando sus productos de forma muy original: promete una copia licenciada y gratuita del componente deseado a cada blogger o escritor técnico que hable de los mismos en su blog o en la revista en la que colabore. Detalles.

El caso es que, habida cuenta de que uno de los controles que publican, el EzShellExtensions .Net me resulta de lo más interesante para un proyecto que tengo en mente, me apunto a la iniciativa con gusto.

El EzShellExtensions .Net es un conjunto de componentes para desarrollar extensiones de shell de Windows. Aunque el tema está ampliamente cubierto en la Red (sin ir más lejos, Dino Esposito tiene un artículo al respecto aquí, el programar una extensión no es una tarea sencilla.

EzShellExtensions .Net (que, de momento, necesita un nombre más comercial como el comer) promete solucionar este problema: compatible con todos los Visual Studio, y por lo tanto todos los framework .NET, el conjunto de componentes agrega un nuevo tipo de proyecto al wizard inicial. Si seleccionamos como nuevo proyecto una extensión de shell, EzShellExtensions nos crea un proyecto con el código fuente básico pregenerado. Como podéis ver, el código generado nos crea automáticamente una GUID, hace que el código sea visible para COM, e incluso podemos indicar que la extensión del menú contextual de Windows Explorer reaccione ante ciertas extensiones de ficheros.

Habida cuenta de que llevo un tiempo queriendo crear una alternativa al desaparecido y llorado (al menos por mí) Picaview, ya que ACD Systems no sólo lo ha descontinuado, es que además es incompatible con las versiones modernas de ACDSee; éste EZShellExtensions .Net me puede venir de perlas.

Ya contaré más detalles cuando lo pruebe.

Unleash it

Published 125 weeks, 2 days ago
Thu Feb 09 2006
La mayoría de las veces las herramientas más simples son las más adecuadas. Es el caso de Unleash it, antes conocida como Web Deploy, que lo que hace es exactamente eso: copiar ficheros y carpetas a un servidor remoto para facilitarnos el trabajo de subir al servidor una nueva versión de nuestra aplicación Web.

El uso de la aplicación es francamente sencillo: se trabaja mediante perfiles de instalación, o deployment profiles. Lo principal a definir en cada perfil son las rutas, tanto la ruta de origen (presumiblemente la ruta donde tengamos nuestra versión local de desarrollo del sitio web) como la ruta de destino, que será la ruta del servidor donde alojamos dicha web.



Como podéis ver por la captura, podemos también seleccionar un proyecto de Visual Studio como origen, y un perfil FTP o un fichero ZIP como destino. aquí vendría uno de los peros del programa: sólo se puede elegir proyectos de Visual Studio, no soluciones. En la lista de la derecha marcamos los ficheros que queremos incluir en la subida y los directorios que queremos excluir de la subida y listo. Esta sería la configuración básica.

Por supuesto, podemos complicar las cosas. Pinchando en la opción de configuración de perfil, accedemos a este cuadro de diálogo:



en el que podemos realizar varias acciones para afinar nuestro perfil. Entre otras:
  • Mostrar un cuadro de diálogo en cada deployment para especificar exactamente qué ficheros y qué carpetas queremos subir al servidor. Muy útil cuando sólo queremos subir algo en concreto, pero su uso continuado invalidaría el objetivo principal de esta herramienta, que es precisamente el poder subir una solución web con un sólo click.
  • Guardar un log de las acciones realizadas por el perfil.
  • Comandos de pre y post deployment. En mi caso concreto voy a tener que usar esto: resulta que uno de los ficheros que en mi caso concreto debo ignorar al subir la aplicación es el web.config, ya que las opciones de configuración en local y en servidor son distintas y no quiero machacarlo. Sin embargo, en el web.config se guardan también las opciones de navegación de UIProcess que utiliza la aplicación, y ésas de momento tengo que acutalizarlas a mano.
  • Posibilidad de hacer backup
  • Uso de plugins. Una de las opciones más interesantes, ya que nos permite el uso de aplicaciones externas desde Unleash It. Los plugins que vienen incluidos con la aplicación son una conexión con NAnt, la posibilidad de conectarse previamente con Visual SourceSafe o con Vault, de Sourcegear, y la posibilidad de excluir del deployment ficheros concretos por nombre, en lugar de por máscara.


Por último, podemos combinar varios perfiles de deployment y usarlos juntos en una sola acción mediante la solapa Multiple Profile Deployment, como se puede ver:



En resumidas cuentas, existen herramientas más potentes y complejas, como también existen proyectos más complicados y con mayores necesidades que en el que trabajo actualmente. Para mis necesidades actuales, Unleash It es una herramienta perfecta, que me permite subir una nueva versión de mi aplicación al servidor con un sólo click. Y para eso sirven las herramientas, para ganar productividad.