ReSharper para Visual Studio

Esta es una historia un tanto extraña porque ni en mis más locos sueños hubiera yo decidido usar este complemento en Visual Studio. No porque no me guste la empresa, ni porque piense que el producto sea malo.

Simplemente porque no soy yo mucho de añadir complementos a mi herramienta de trabajo más allá de las cosas imprescindibles, más que nada porque los tiempos de carga se alargan en extremo, y la estabilidad de Visual Studio decae en picado.

Por ejemplo, si ya la versión 2010 de VS anda algo inestable, con vahídos extraños, cuando le añades el SDK de Windows Phone la cosa empeora y te encuentras con que a veces el compilador se encuentra errores fantasma que sólo él ve, o simplemente el IDE se queda autista.

Añádele alguna herramienta más y eres un firme candidato a lanzar tu ordenador por la ventana y dedicarte a criar setas en el sótano de tu abuelo.

Sin embargo Visual Studio 2012 parece más estable, y he estado como dos semanas usándolo sin que hiciera cosas raras, incluso tras añadirle el citado SDK, que es imprescindible para mi en estos momentos.

De repente a un compañero que trabaja en la aplicación de Java de mi empresa le compraron el IntelliJ y comenzó a comentar las bondades del producto y cómo había pasado de desesperarse y tirarse de los pelos con la cosa esa del Eclipse a tener un IDE en condiciones.

Eso me llevó a recordar que cuando asisto a alguna charla virtual suelen regalar un ReSharper a los asistentes… y una cosa me llevó a la otra, y es que la envidia es tiñosa, y muy mala malosa, y yo soy el peor de todos. Por lo tanto entré en la web de JetBrains y me bajé el producto en su versión demo de treinta días y…

 

¡¡MADRE DEL AMOR HERMOSO!!

 

¡Como alguien me quite el producto me lo como con ropa y todo! ¿Cómo he podido vivir yo sin eso?

A ver, que no estoy exagerando ni mucho menos. El producto cuesta sus pelas, pero os aseguro que las vale. Ahora que estoy desarrollando en C# porque no tengo más cojones, se me ha hecho prácticamente indispensable y eso que lo llevo usando tan sólo unas dos semanas.

Os cuento lo que hace. Y ya me conocéis, que yo no me caso con nadie y no tengo pelos en la lengua.

***

ReSharper es una extensión a Visual Studio (creo que soportan todas las versiones del producto desde la 2003 menos las Express). En mi caso lo instalé en mi Visual Studio Ultimate de la MSDN.

Lo que hace el producto es ayudarte a teclear código, pero a todos los niveles. Hay que verlo para creerlo. Cuando está instalado lo que más llama la atención es que te coloca una tira vertical al lado derecho de la ventana de edición, similar a la de la derecha en donde pones los breakpoints, bookmarks y el IDE te marca el código modificado.

En esa columna te coloca una serie de rayitas horizontales de colorines. Rojo para los errores. Naranja para las mejoras (ahora os cuento), verde para las sugerencias. Creo que hay más colores, pero en este momento no me acuerdo (son las cosas de estar tirado en el sofá tecleando en mi MacBook). Arriba del todo hay una marca global que te dice el 

Cuando posas el ratón sobre la rayita, te dice de qué va la cosa, y si haces clic te lleva al código fuente en cuestión. 

Y aquí es donde viene lo interesante. Te ofrece la mejora o la solución, y si le dices que sí, te lo corrige. 

Pero os aseguro que es algo terrorífico. Hay cosas más o menos chorras, como cambiar un tipo por una variable automática, pero otras dan miedo.

Es capaz de cambiar tus bucles for o foreach por sentencias LINQ. Con eso ya os lo he dicho todo. A mi al menos eso me da mucho miedo. Del bueno, ojo. Que coja tres bucles anidados y te los convierta en una sentencia LINQ de una línea me deja embobado.

Peor hay más. Simplifica los operadores lambda, te transforma bloques de código en otros menos agresivos con la aplicación, te formatea el código, te ofrece lo que vas a escribir a continuación…

No sé, cada vez que hago algo nuevo me sorprendo por las posibilidades que te ofrece. Otra de las cosas que me trae loco es que es capaz de eliminar código redundante, como la creación de delegados o la eliminación de código redundante.

Os pongo un ejemplo que me dejó todo loco.

Yo solía poner sentencias del tipo:

 

Debug.WriteLine(String.Format(“bla bla {0} bla bla {1}”,a.Hola,a.Adios));

 

Pues bien, él me sugiere

 

Debug.WriteLine(“bla bla {0} bla bla {1}”,a.Hola,a.Adios);

 

Vale. Tú lo sabes. Yo no lo sabía hasta que no me lo ofreció ReSharper. Y así con muchas cosas más, pero lo que de verdad me admira son las transformaciones a LINQ y viceversa. No me canso de repetirlo. Bucles a LINQ. Bucles a LINQ.

También tiene soporte en XAML. Es decir, editar XAML pasa de ser una pesadilla a ser bastante mejor. Si tu usas Blend, mejor para ti. Yo la última vez que intenté hacer algo con el producto terminé hasta la coronilla. Entre excepciones y la puta manía de ponerle márgenes hasta a su madre… Pues bien, con ReSharper editar a mano XAML también mejora la cosa.

Refactoring. Todo lo que te puedas imaginar y más. Si añadimos las reglas para estilo de código, te detecta las variables y los métodos que no lo siguen, ofreciéndote cambiarlos si así lo deseas. Y es una cosa a la que vas a decir que sí, porque esas rayitas naranjas no molan nada, y que no te las vea el jefe… 😛

Lo dicho, en cuanto te sales de las guías de estilo el producto no solo te lo dice sino que te ofrece la posibilidad de cambiarlo. Por supuesto puedes definir las tuyas, no las que el programa quiera. 

Como abras la pantalla de opciones te vas a caer de culo, porque puedes configurar cualquier cosa. Por tener hasta tienes “juegos de configuración”, pudendo cargar la que quieras cuando quieras, por si tienes un proyecto con unas reglas y otro con otras.

También tiene algunas chorradillas (es un decir) interesantes, como que te pinta una raya de color debajo de un número que represente un código ARGB, por poner un ejemplo. Son cosas que no se echan en falta hasta que no las tienen y luego te las quitan.

Ya para terminar comentaros los Find Usages. Algo así como Find all references pero con muchos esteroides. Pones el cursor sobre un símbolo, le das a la opción con el botón derecho del ratón y goza. Así he encontrado un par de problemas serios de sincronización que me tenían todo loco, y encima en un rato de nada.

Opciones que no he probado han sido la de limpiar el código de toda la solución de una tacada y otras que seguro se me escapan.

Bueno, pues lo dicho, si quieres aumentar tu productividad de forma bastante seria, prueba el producto. Seguro que luego pasas por caja. Y si entráis en la Web de JetBrains podréis ver capturas de pantallas y algún vídeo enseñando lo que es capaz de hacer.

Yuliop y Windows Phone 7 SDK: Una introducción

Como ya comenté hace algo de tiempo, he realizado un cambio laboral bastante radical, dejando de lado el desarrollo de sistemas embebidos verticales escritos en C y C++ para subir un paso en el escalón del desarrollo en cuanto a tipos de proyecto. En otras palabras, ahora mi tarea principal es desarrollar con Windows Phone para una startup llamada Yuilop.

He pasado de ser un desarrollador más o menos versátil a estar no sólo centrado en una plataforma fija, sino en una única aplicación: su cliente de mensajería. Os contaré cómo funciona la cosa.

La aplicación está disponible para la mayoría de teléfonos Android y para iOS, y próximamente habrá una versión para Windows Phone 7.5, la que estoy haciendo yo. Olvidaros de Windows Phone 7.0 porque no tiene sockets y es prácticamente imposible hacer algo ahí. Se podría implementar con BOSH, pero no vale la pena.

Con la aplicación instalada en un teléfono se pueden enviar mensajes de texto, con emoticonos y emojis, de manera similar a como se realiza con otras aplicaciones similares. También puedes enviar fotos y localizaciones. Hasta aquí nada nuevo bajo el sol.

Lo novedoso está en que también puedes hacerlo a gente que no tenga la aplicación. Es decir, puedes chatear con prácticamente cualquier persona que tenga un móvil a través de SMS. Es decir, tu envías un mensaje de chat y la otra persona recibe un SMS, y justo al revés.

También puedes hablar por teléfono mediante VOIP. Siempre que la otra parte tenga Yuilop instalado podrás hablar con ella de forma gratuita a través de la WiFi o del 3G, sin gastar una llamada de voz tradicional…

No, espera, no. Eso también lo puedes hacer con cualquiera. Incluso con teléfonos fijos. O en otras palabras: no es necesario que la otra persona tenga la aplicación instalada para poder hablar con ella a través de Yuilop.

Todo ello con coste cero. O más bien, pagas la transferencia de datos, el Wifi o el 3G. No pagas ni SMS ni establecimiento de llamada ni a razón del tiempo que estés hablando o chateando o SMSseando.

¿Cómo puede funcionar algo así? Pues bastante fácil: la aplicación tiene publicidad, y el pulsar en ella, o instalarte aplicaciones recomendadas, o seguir ciertas indicaciones te dan energía, que es lo que gastas a la hora de hablar o chatear con gente no Yuilop.

Es decir, que cada vez que hagas algo con gente de fuera de la aplicación, gastas energía. Cada vez que instalas las aplicaciones recomendadas, o haces clic en la publicidad, o chateas con gente Yuilop, obtienes energía. También por invitar a amigos y que estos acepten la invitación.

***

Como veis resulta algo bastante interesante y más potente que las aplicaciones de la competencia (que no nos dejan nombrar).

Pues bien, el que esto suscribe tiene en un estado bastante avanzado la aplicación para Windows Phone. Dadas las características de este sistema operativo, hay algunas opciones que no van a estar disponibles, no porque no queramos, sino porque no podemos.

Y eso me lleva al tema técnico. Llevo dos meses desarrollando con Visual Studio 2010 y el SDK 7.1. Ha habido momento en los que he estado a punto de renunciar dadas no ya las enormes carencias de la plataforma, sino también la falta de documentación y las inconsistencias y bugs de todo ello.

Y de eso es de lo que voy a hablar próximamente aquí. Primero haré una lista de todos los problemas con los que me he encontrado y la forma que te tenido de solucionarlos cuando he podido hacerlo, que no siempre ha sido así.

Para adelantaros un poco el tema, el modelo MVVM es una mierda limitadísima que sólo permite realizar aplicaciones típicas y sencillas, el acceso a bases de datos es, más que pésimo, limitado e incoherente, y existen ciertas limitaciones incoherentes para realizar algunas tareas. Además, la gestión de eventos es mínima, la creación de controles personalizados deja mucho que desear, así como el API expuesto en relación a los componentes con los que podemos trabajar (y ahí incluyo también el Windows Phone Toolkit y sus amigos de Coding4Fun).

Y no, el modelo asíncrono de desarrollo es toda una gozada si no existieran las limitaciones arriba descritas. Los métodos asíncronos, los operadores lambda, los métodos de extensión (pese a ser aberraciones, ya os contaré) y demás zarandajas son una gozada.

Mejor no hablar de XAML, menuda porquería de implementación aunque la idea esté genial.

Y a todo ello añadimos el hecho de que apenas existe documentación. Mientras que para la explicación de una clase en .NET 3, 3.5 ó 4.0 tienes una explicaciones más que detalladas contándote todo, en Silverlight las páginas están más que peladas. Por no incluir ni siquiera ponen lo imprescindible. Parece que se hayan creado a partir del propio código fuente sin más. Y no, no vale aplicar las explicaciones de una a la otra: simplemente funcionan diferente o el comportamiento no existe.

Bueno, lo dicho, estad atentos que le voy a dar caña a Windows Phone 7.5 (Parece ser que la versión 8 ya es adulta y han añadido cosas muy interesantes. También os contaré dentro de unos meses, cuando empiece con ella).