sábado, abril 30, 2011

Nuget, o cómo simplificar la gestión de librerías de código de terceros en nuestras aplicaciones

Durante el desarrollo de proyectos de software, ya sea para Internet o aplicaciones de escritorio, es práctica habitual la utilización de librerías externas, ya sean propias o de terceros, que encapsulan funcionalidades comunes, o simplemente reutilizan código ya desarrollado.

El problema

Hasta ahora, teníamos dos opciones:

  • Librerías de terceros: descargar la librería del autor (o el código fuente y compilarlo) y copiarla en una carpeta local desde la que se referenciaba en el proyecto.
En este caso, además de la posible configuración manual que cada librería puede llevar, y de sus propias dependencias (NHibernate, por ejemplo), la reutilización de la misma en diversos proyectos solía llevar en una duplicidad de librerías, que además dificultaba la actualización posterior a nuevas versiones.

  • Librerías propias: las primeras veces, empiezas como con una librería de terceros, pero al final, acabábamos incluyendo el proyecto de la librería en la solución de .Net del proyecto completo para facilitar las actualizaciones.
En este caso, el problema lo encontramos por un lado en el control de versiones, ya que cada librería suele tener su propio repositorio de Subversion diferente al del proyecto final, en el gran número de proyectos que componen la solución y en la mezcla de tareas de diferentes programadores que trabajan en diferentes librerías, pero que se interfieren en la misma solución.

La solución

Para solucionar estos problemas, Microsoft está desarrollando Nuget, un gestor de paquetes de código abierto que pretende simplificar la incorporación y mantenimiento de librerías de terceros, o propias en una aplicación .Net. 

Básicamente Nuget se compone de 3 piezas:
  1. El repositorio de paquetes: lugar centralizado donde se localizan las librerías y sus actualizaciones para su instalación en los proyectos. El repositorio público está en http://www.nuget.org/List/Packages
  2. Los paquetes: mediante un archivo XML podemos definir el contenido de nuestro paquete, e incluso, modificar los archivos de configuración de la solución o ejecutar scripts de Powershell durante la instalación. Dispone de una herramienta para la creación automatizada tanto del archivo de especificación a partir del proyecto, como del paquete en sí: nuget.exe.
  3. El gestor de paquetes: es la extensión de Visual Studio que nos permitirá navegar por el repositorio de paquetes, instalarlos, actualizarlos o desinstalarlos. Para instalarla: http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
Adicionalmente, se acaba de publicar una aplicación que nos permite explorar el contenido de un paquete, local o remoto: Nuget Package Explorer

Su utilización

La utilización principal de Nuget es para instalar librerías de terceros que se encuentren en el repositorio público. El site de desarrollo del proyecto cuenta con una documentación muy buena (en inglés) para explicar:
También se incluye en la documentación los pasos para crear nuestros propios paquetes, o para utilizar un repositorio local para nuestros propios paquetes, sin necesidad de publicarlos en el repositorio público.

Además de la propia documentación, son sitios de referencia también los blogs de los propios desarrolladores involucrados en Nuget:


Conclusiones

Nuget nos simplifica la tarea de instalar y mantener actualizadas las librerías de terceros que usamos en nuestras aplicaciones, automatizando el proceso y manteniendo un repositorio centralizado de las mismas.

Además, nos permite crear nuestros propios paquetes, que pueden incluir las librerías propiamente dichas, contenido estático, código fuente, transformaciones para archivos de configuración o ejecutar scripts de powershell que realicen tareas sobre la solución.

En futuros posts, veremos un ejemplo de cómo montar un repositorio local de Nuget, y publicaremos en él un paquete de ejemplo que usaremos en otro proyecto.

lunes, abril 18, 2011

ASP.NET MVC 3: Buenas prácticas y técnicas para optimizar tu aplicación

Desde hace más de diez años, venimos desarrollando aplicaciones web utilizando tecnologías de Microsoft, por lo que hemos pasado por ASP classic, ASP.NET 2 con Web Forms y Rest Services con WCF y .NET 3.5.

Recientemente, hemos empezado a desarrollar un proyecto de tamaño considerable y con poco tiempo de desarrollo, por lo que nos planteamos la mejor tecnología a utilizar, teniendo en mente el objetivo de maximizar la reutilización de componentes de código, y la separación entre el desarrollo del backend y el frontend, para aprovechar la especialización de los miembros del equipo.

Estas premisas iniciales nos llevaron a probar el framework MVC de ASP.NET, justo recién salida la versión 3. Como con toda tecnología o framework que se utiliza por primera vez, existe una curva de aprendizaje y de adopción de buenas prácticas que tienes que asumir como inversión, si quieres que el medio plazo la productividad del desarrollo se dispare.

Después de casi 2 meses de investigaciones, pruebas varias, discusiones y marcha atrás en algunos aspectos del diseño de la aplicación, os dejo una recopilación de enlaces que nos han servido para adoptar buenas prácticas y para implementar técnicas que han mejorado, o lo harán, el desarrollo de cualquier aplicación web.

Formación MVC

Por supuesto, empezamos por el principio, la formación:
Blogs de referencia:

Desarrollando con MVC


Una vez hemos pasado el periodo inicial de formación, o si bien ya teníamos experiencia con MVC, aquí comparto una serie de herramientas que se han vuelto imprescindibles en el desarrollo del día a día y que mejoran notablemente la productividad y mantenimiento de la aplicación:

  1. T4MVC: Esta librería nos crea automáticamente clases tipadas que eliminan la necesidad de utilizar literales de cadena para acceder a nuestras vistas, controladores, acciones y recursos estáticos.

    Por ejemplo, en lugar de
    Html.RenderPartial("DinnerForm");
    podemos utilizar
    Html.RenderPartial(MVC.Dinners.Views.DinnerForm);
    Lo que además significa que tenemos IntelliSense incluido, con lo que la productividad se incrementa. La lista completa de funcionalidades la podemos encontrar en http://mvccontrib.codeplex.com/wikipage?title=T4MVC_doc&referringTitle=T4MVC

  2. Con T4MVC tenemos acceso a nuestros recursos con IntelliSense, pero cada vez que añadimos un nuevo elemento, tenemos que volver a ejecutar la plantilla para que genere las nuevas clases que añamos incluido. Para evitar esto y que se generen automáticamente, instalamos una extensión para Visual Studio llamada Chirpy.

    Este plugin (que sirve para otras cosas interesantes, que no usamos, pero que merece la pena que investiguéis) se integra directamente con T4MVC y permite que se ejecute automáticamente en cada build que hagamos. Además, permite ejecutar cualquier template T4 propio que podamos tener.

Optimizando la aplicación web MVC

Normalmente, las aplicaciones se suelen desarrollar sin tener en cuenta desde el inicio las posibles optimizaciones que se deben realizar para aumentar el rendimiento de la misma, teniendo que ir modificándola a posteriori conforme van apareciendo los problemas.

El mejor resumen de técnicas de optimización para sitios web podría ser el elaborado por Yahoo: http://developer.yahoo.com/performance/rules.html, que además viene acompañado por una utilidad que nos permitirá comprobar estas reglas en nuestro sitio web: http://developer.yahoo.com/yslow/

También es interesante echarle un ojo a PageSpeed de Google, que también nos proporciona una herramienta para mejorar el rendimiento de nuestra aplicación.

A continuación os muestro algunas librerías que utilizamos para optimizar nuestras aplicaciones y aplicar las reglas anteriores, y que se integran muy bien con el desarrollo de MVC desde el inicio, por lo que es muy recomendable tenerlas en cuenta.

  1. Utiliza CDNs para acceder a frameworks generalistas (como JQuery).

    Tanto Google como Microsoft disponen de un CDN que aloja algunos de los frameworks de javascript más comunes. Se recomienda utilizarlos para liberar peticiones HTTP de nuestro servidor y porque si el usuario ha visitado otra web que también use el CDN, ya tendrá el archivo cacheado en el navegador.

  2. Combres: Esta librería integra minimización, compresión, combinación y cacheo de archivos JS y CSS. Permite, por tanto, reducir el ancho de banda utilizado por nuestros archivos de script y css, y reducir las peticiones HTTP que recibe nuestro servidor. Más detalles en http://www.codeproject.com/KB/aspnet/combres2.aspx.

    Otra ventaja incluida indirectamente es que, al centralizar las referencias a librerías de JS y de CSS, nos permite cambiar un archivo por otro en un único punto de la aplicación (p. ej. cambiar la versión de JQuery), y no tener que modificar todas las páginas que lo referencian.

    Combres también permite utilizar recursos externos, por lo que podemos (y debemos) cargar los scripts del CDN y que Combres los minimice y combine con los nuestros propios.

  3. ASP.NET Sprite and Image Optimization: Utilizar Sprites para servir las imágenes de la aplicación. Esta librería se encarga de generar automáticamente archivos de Sprites de imágenes a partir de las imágenes de nuestra aplicación, y decide, en función del navegador del usuario, cuál es la mejor manera de servir cada imagen.

Optimizaciones en el servidor IIS


A nivel de IIS, lo más importante es configurarlo correctamente  para habilitar la compresión de las respuestas y la caché en nuestra aplicación.
  1. Configuración de la compresión de la respuesta con Gzip: http://www.iis.net/ConfigReference/system.webServer/httpCompression
  2. Configuración de la caché de respuesta: http://www.iis.net/ConfigReference/system.webServer/caching

sábado, febrero 26, 2011

Google Cloud Connect, o la integración de Google Docs con Office

Google ha anunciado el lanzamiento de Google Cloud Connect  (GCC en adelante), un plugin para Microsoft Office que permite que "dos o más personas trabajen en el mismo archivo al mismo tiempo con Office 2003, 2007 o 2010 para Windows".


Después de anunciar su lanzamiento en beta cerrada para testers allá por noviembre de 2010, ahora se puede descargar de manera gratuita este plugin que nos permite integrar lo mejor de ambos mundos: La potente edición de archivos de MS Office, con el almacenamiento y las opciones de trabajo colaborativo de Google Docs.

El plugin se instala como una barra más en Office y se encarga, básicamente, de almacenar una copia del documento con el que estemos trabajando en la cuenta de Google Docs con la que lo configuremos al inicio. Además del respaldo, el documento se sincronizará automáticamente con la copia "en la nube" cada vez que lo guardemos. El archivo se almacenará en Google Docs con el formato de Office, por lo que no será editable directamente desde allí, a menos que hagamos una copia y lo convirtamos al formato nativo de Docs.

Si además, a través de Google Docs, hemos compartido ese archivo con algún colaborador, podremos trabajar simultáneamente ambos en el mismo documento, y GCC se encargará de ir sincronizando los cambios con la copia local.

Al almacenarse una copia en Google Docs, siempre tendremos nuestros documentos accesibles desde cualquier ordenador conectado a Internet y podremos consultarlos y modificarlos. Eso sí, para mantener la sincronización es necesario que el equipo con el que lo editemos tenga instalado el plugin de GCC en Office y utilicemos nuestra cuenta de Google.

Hay que resaltar que los documentos ya almacenados previamente en Google Docs con formato nativo no se pueden utilizar con este plugin, sino que tendremos que descargarlos como documento de Office y volver a sincronizarlos. Lo mismo con los documentos de Office previamente almacenados, que también será necesario descargar y editar en local para activar la sincronización. Para el resto de documentos de nueva creación con Office, tendremos disponible desde el principio la sincronización con la nube.

Resumiendo, desde ya podemos tener nuestra carpeta en disco con nuestros documentos de Office (Word, Excel y Powerpoint) relacionados con un mismo proyecto, sincronizados en la nube, compartidos con nuestros compañeros de trabajo, con edición simultánea, y accesibles desde cualquier dispositivo conectado a Internet. Si esto lo combinamos con un sistema de backup de archivos "en la nube", con opciones como Dropbox o SugarSync, nos podemos olvidar para siempre de perder archivos por fallos en el disco duro de nuestro equipo.

Sencillamente genial...

lunes, febrero 22, 2010

Cómo aprovechar las redes sociales para aumentar el tráfico de nuestra web

Con el constante crecimiento de las redes sociales, como Facebook o Twitter, está cambiando la manera con la que los usuarios acceden a las fuentes de información que les interesan, y empiezan a ser fuentes de tráfico más relevantes que los propios buscadores o agregadores de noticias (Google Reader). Antonio Ortiz lo explica mejor que yo.

Alrededor de estas redes sociales está creciendo un gran ecosistema de aplicaciones que podemos utilizar para publicar automáticamente en éstas los contenidos generados en nuestro sitio web o blog, generando tráfico a través de nuestros contactos, amigos y/o seguidores. En este post explicaré con el ejemplo de este mismo blog cómo podemos hacerlo, aunque hay varias maneras de llegar al mismo objetivo.

push_rss
Imagen by: www.twitterfeed.com

Primero, pongo el esquema de los pasos que seguiremos para configurar la integración entre nuestro blog, Facebook y Twitter, junto con las aplicaciones que intervienen, y a continuación iremos detallando cada paso concreto:

DiagramaWeb2.0

Paso 1: Publicación del artículo

paso1

En primer lugar, escribiremos el artículo o crearemos la nueva página en nuestra web. En nuestro caso, es un artículo de un blog en Blogger, pero nos vale cualquier otro gestor de blogs (Wordpress, etc.). Lo importante es que podamos generar un feed RSS a partir de nuestros contenidos.


Paso 2: Generación de un feed RSS

paso2

Si estamos escribiendo un blog, nuestro gestor seguramente ya dispondrá de un feed RSS automáticamente de nuestros artículos. Este feed será la base que utilizaremos para actualizar los contenidos de Facebook y Twitter.

Con el propio feed generado por el gestor sería suficiente, y podemos seguir con el paso 3, pero yo prefiero pasar antes por Feedburner para optimizar el feed generado y aprovechar otras ventajas que nos ofrece (estadísticas de suscriptores, integración con AdSense, p.ej). Además, Feedburner es propiedad de Google y eso siempre nos ayudará con nuestro posicionamiento en el buscador. Crear un feed es muy sencillo y os lo dejo para que lo probéis por vuestra cuenta.

Por cierto, Feedburner también permite integrar con Twitter directamente, pero yo prefiero centralizar la integración en la siguiente herramienta que ahora veremos, y luego explicaré el por qué.

Paso 3: integración con Facebook y Twitter

paso3

Twitterfeed es la herramienta que se encargará de enviar las actualizaciones de nuestra página, a través del feed, a las redes sociales que queramos, en este caso Facebook y Twitter. El registro es gratuito y es muy sencilla de utilizar. Este paso lo explicaremos con más detalle puesto que es el objetivo final del artículo.

Una vez nos hemos registrado, crearemos un nuevo feed. En el primer paso tenemos las opciones básicas, donde le daremos un nombre y pondremos la URL de nuestro feed RSS (ya sea el original o el de feedburner, como es mi caso):

tf1

Es muy interesante también desplegar las opciones avanzadas, donde destaca la posibilidad de utilizar Bit.ly como utilidad gratuita para acortar los links que se generen a nuestro blog, y de la que luego hablaremos con un poco más de detalle. Requiere disponer de un usuario y una clave del API de Bit.ly, con lo que es conveniente registrarnos ahora antes de seguir con el tutorial (una vez registrado, la clave del API aparece aquí):

tf2

En el paso 2, configuraremos los servicios a los que deseemos postear nuestro feed, donde principalmente encontramos a Facebook y Twitter, donde enlazaremos Twitterfeed con nuestras cuentas, y opcionalmente podremos configurar los UTM tags que nos permitirán distinguir el tráfico desde Google Analytics entre el proveniente de Facebook y el de Twitter. Con ello, ya tendremos conectados nuestros posts con estas redes sociales:

tf3

Opcionalmente, Twitterfeed también permite el envío del feed a otros servicios como hellotxt o ping.fm, que nos permitirán llegar a muchos más servicios y aplicaciones, de entre los que podría destacar LinkedIn, como red social de contactos profesionales, aunque esto ya dependerá de la temática y alcance de nuestro blog o página que estemos promocionando.

tf4 Por cierto, a través de cualquiera de estos servicios también se puede publicar tanto en Twitter como en Facebook, y hay que tener cuidado de no duplicar las publicaciones entre varios servicios, pero yo prefiero centralizarlo en Twitterfeed por el uso integrado que hace de Bit.ly y las estadísticas adicionales que nos proporciona y que ahora comentaremos.

Paso 4: Comprobación de los resultados

Una vez configurado Twitterfeed, empezarán a aparecer nuestros posts en ambas redes sociales, y por tanto, en Bit.ly aparecerán las estadísticas de los enlaces generados:

bitly

Y ahora explico por qué prefiero concentrar la generación de los enlaces en Twitterfeed y descartar las opciones de Feedburner (para Twitter) o ping.fm, y es porque de esta manera tengo centralizadas las estadísticas de los clicks que se generan a través de este sistema, además de que proporciona integración con los UTM tags de Google Analytics, ya para usuarios avanzados en esta aplicación de Google. Como ejemplo, muestro las estadísticas de los enlaces a uno de los posts de mi blog (sin demasiado éxito, por cierto):

clicks
Estadísticas en Twitterfeed


bitlystats
Estadísticas en Bit.ly

Como detalle, comentar que por cada post, en bit.ly y en Twitterfeed, nos aparecerán dos enlaces: uno para Facebook y otro para Twitter, y esto es porque por defecto, Twitterfeed utiliza el UTM tag “medium” para indicar dónde se publica el post, lo que nos genera urls diferentes. Si no vamos a utilizar UTM tags podemos unificar este valor en la configuración de Twitterfeed tanto para Facebook como para Twitter y así sólo tendremos un único link en Bit.ly.

Resumen

Cada día se están utilizando más las redes sociales para estar informados de las últimas publicaciones que nos interesan (sobretodo Twitter para acceder a las últimas noticias). Prácticamente todos los medios de comunicación y blogs especializados utilizan estos medios para generar tráfico a sus webs, utilizando el sistema que expongo en este post, o con alguna variación.

Con estos sencillos y gratuitos pasos podemos conseguir que nuestra publicación llegue directamente a nuestra red de contactos y recibir más tráfico a través de ella, generando backlinks hacia nuestra página desde éstas.

Si todo funciona bien, podréis encontrar un enlace a este post en mi cuenta de Twitter, en Facebook si somos amigos y finalmente, como novedad, en mi Buzz.

Etiquetas : , ,

viernes, febrero 05, 2010

Mi mala experiencia con iBanesto.com o cómo perder un cliente antes de empezar

Aunque éste pretenda ser un blog sobre tecnología y desarrollo, no puedo dejar de compartir mi reciente mala experiencia como nuevo cliente de iBanesto.com, sobre cómo hacer que un nuevo cliente se arrepienta rápidamente y vuelva con su banco anterior desde el mismo proceso de alta.

Publico a continuación la carta de queja que he enviado a la entidad, con fecha 03/02/2010, exponiendo mi caso:

Habiendo conocido su producto "Cuenta Azul", con un interés del 3,10% hasta el 1 de junio, procedo a solicitar su contratación, y por tanto, a darme de alta como cliente de su entidad, el pasado 5 de enero. Finalmente, después de recibir los contratos y devolverlos firmados a través de una oficina física de Banesto (por agilizar los trámites) recibo la confirmación de la activación de la cuenta el 18 de enero. En este punto empieza mi primera desilusión: 2 semanas para contratar un producto me parece excesivo, más si cabe que la fecha límite de la promoción es fija. Por lo tanto, ya llevamos 2 semanas perdidas de rentabilidad.

Si bien esta demora me causa cierta insatisfacción, puedo llegar a comprender sus motivaciones, porque el envío de los contratos lleva su tiempo. Lo que realmente me molesta, y provoca esta carta de queja, es el siguiente paso:

Una vez recibida la activación de la cuenta, les solicito me indiquen las claves de acceso a la misma, puesto que en ningún momento se me indicó que no iba a disponer de ellas a la vez que se activaba la cuenta. Como podrán comprender, no voy a realizar el traspaso de mis fondos a una cuenta a la que no tengo acceso. Es de sentido común. De momento, los 100€ de la OTE no están disponibles para mi sin las claves de acceso.

En respuesta a mi solicitud recibo un correo el mismo día 18 de enero que cito textualmente:

"En relación al correo electrónico recibido, informarle que sus claves se le emiten al domicilio por correo ordinario automáticamente a los 2-3 días de la activación de la cuenta, por lo que en unos 5-6 días hábiles le llegarán a su domicilio por correo ordinario 3 sobres en días distintos por seguridad con el Código de Usuario, Clave Personal y Clave de Firma."

De acuerdo, 5 o 6 días adicionales. Las 2 semanas iniciales de demora se convertirán en 3. Decido esperar unos días a recibir las claves, pero éstas no han llegado a fecha de hoy a mi domicilio. Ayer, 2 de febrero, casi 1 mes después de iniciar el proceso de alta, me decido a llamar al número de atención al cliente para obtener alguna respuesta, y mi desazón alcanzó su cota máxima. Una amable señorita me indica que:

"La información que le dieron es incorrecta. NO SON 5 o 6 DÍAS. LAS CLAVES TARDAN UNAS DOS SEMANAS DESDE LA ACTIVACIÓN DE LA CUENTA. SEGÚN LOS DATOS QUE FIGURAN, SE ENVIARON EL 21 DE ENERO, ASÍ QUE USTED LAS RECIBIRÁ A LO LARGO DE ESTA SEMANA".

Es decir, que ya llevo 4 semanas de demora, y ahora se le añade el tiempo que tarde en recibir las claves en esta semana, más el tiempo que se tarda en traspasar fondos de una entidad a otra. Total: 5 semanas perdidas de rentabilidad.

Finalmente, mi incredulidad fue superada cuando la misma señorita me indicó que "usted puede ir a una oficina física de Banesto y le darán las claves al instante". Y yo respondo "¿y eso no me lo podían haber indicado el mismo día que me activaron la cuenta??!!!!" Todo esto me ha supuesto una demora final de unas 5 semanas, que haciendo cuentas suponen una pérdida del 20% de la rentabilidad esperada que no voy a recuperar.

Resumiendo:

- El proceso de alta es lento, engorroso y hace perder rentabilidad a los nuevos clientes, sobretodo al contratar un producto con fecha límite.
- No proporcionan información clara ni suficiente sobre el envío de las claves de acceso, y además es errónea.
- He perdido 5 semanas potenciales de rentabilidad, que con un producto de tan corta vida (unas 19 semanas) me supone una pérdida de un 20% en la rentabilidad, que no es lo que uno espera de su entidad financiera.
- Por todo esto, mi confianza en su entidad es muy baja y será muy difícil que continúe con ustedes a partir del 1 de junio.

Aún no he recibido respuesta, pero creo que tengo bastante claro que a partir del 1 de junio, mis ahorros cambiarán de entidad, y habrá que ver quién es el mejor postor de aquí a entonces. Eso sí, empezaré la migración con un mes de antelación, por si las moscas…

Actualizaré el post si obtengo respuesta y es digna de mención.

Etiquetas :

jueves, octubre 30, 2008

Generación de documentación para .Net

En mi trabajo actual en Virtua como analista de aplicaciones y programador, estamos trabajando intensamente con Visual Studio 2008 para el desarrollo de una aplicación web en el ámbito del eLearning.

Uno de los requisitos que siempre nos ha exigido nuestro cliente era el de disponer de una buena documentación del código fuente (que en este caso les pertenece). En los viejos tiempos, cuando la tecnología era ASP, esto era, cuanto menos, imposible. Sin embargo, la migración a tecnología .NET nos pone las cosas un poco más fáciles, al disponer de comentarios XML mediante los que podemos documentar casi cualquier cosa, incluyendo su semántica (método, parámetro, evento, etc.), como en el siguiente ejemplo:

/// summary>
/// Dispara el evento see cref="E:PagerChanged" />.
/// /summary>
/// param name="e">The see cref="System.EventArgs"/> instance containing the event data.
protected virtual void OnPagerChanged(EventArgs e)

donde estamos documentando el método que dispara un evento y el parámetro que recibe (faltan los "<" de apertura de tags, pero blogger interpreta el html y no los muestra :-( ). Una herramienta imprescindible para que la introducción de los comentarios XML no sea tan costosa es GhostDoc. Un add-in para Visual Studio totalmente recomendable. GhostDoc amplía la funcionalidad de VS mediante el comando "Document this..." (Ctrl+Shift+D en la configuración por defecto), que nos añadirá automáticamente el comentario al miembro de la clase donde estemos y será capaz de introducir parte de la documentación, como los parámetros y sus tipos, a partir de unas reglas configurables de que dispone.

El único "pero" que se le podría poner es que está enfocado a generar documentación en inglés, y muchos de los textos que genera están "hard-coded" en el idioma de Shakespeare, cosa por otro lado lógica por el análisis que realiza de los nombres de los miembros que documentamos para inferir la documentación a partir de estos. Ah, y el soporte para VB es todavía experimental.

Sin embargo, otra parte de los textos se colocan directamente a través de las reglas que se definen en la configuración, y que hemos podido traducir nosotros mismos al castellano. Así sólo tenemos que modificar unos pocos textos de los que genera.

El archivo de configuración traducido al castellano se encuentra disponible aquí (renombrar a "ghostDoc_esp.gdc"). Se incluyen también las modificaciones que publicó Roland en su blog para la documentación de los métodos override (toString, Equals y GetHashCode), también en castellano.

Cuando instaláis GhostDoc por primera vez, podéis importar este archivo de configuración en el mismo proceso de instalación.

Una vez tenemos todo nuestro código bien comentado, el siguiente proceso es generar la documentación... pero eso otra historia, y merece ser contada en otra ocasión. Pista: SandCastle

miércoles, agosto 06, 2008

Cómo crear una nube de tags con Rails

Hace poco tuve la necesidad de crear una nube de tags con Rails, y la manera más sencilla que encontré está explicada en esta entrada en Juixe TechKnow.

Si seguís el Post, lo primero que hace es añadir un método al modelo Tag para acceder a los datos. En mi caso, como prefiero no acceder a los datos desde el modelo, sino desde un controlador, o un helper, lo modifiqué para que el helper que elige el tamaño del tag, fuera el que directamente cargara el listado, liberando al modelo de esa carga:

app/helpers/application_helper.rb:

def tag_cloud(classes)
tags = Tag.find(:all,
:order => "count DESC, name",
:limit => 100).sort_by { |tag| tag.name.downcase }

max, min = 0, 0
tags.each { |t|
max = t.count.to_i if t.count.to_i > max
min = t.count.to_i if t.count.to_i < min
}
divisor = ((max - min) / classes.size) + 1
tags.each { |t|
yield t.name, classes[(t.count.to_i - min) / divisor]
}
end


Por lo demás, es una manera sencilla de crear una nube de tags, y con pequeñas modificaciones, no tiene por qué ser necesariamente de "Tags", sino que la podemos crear de cualquier entidad que tengamos.



Etiquetas de Technorati: ,,,