martes, 30 de noviembre de 2010

Tagging en Mongoid

He estado trabajando en “pet projects” como proceso de aprendizaje de Ruby on Rails, ultimamente he estado trabajando con base de datos MongoDB con el manejador Mongoid, es muy emocionante trabajar con MongoDB por que es orientado a documentos y es sin esquemas, por lo que puedes agregar campos nuevos a documentos sin grandes complicaciones, tampoco tienes que lidiar con migraciones de base de datos y cosas asi.

Lo próximo que estuve buscando es como agregarle etiquetas a un documento de MongoDB, tal como se le agregan palabras clave a una entrada de blog o a un video de youtube, para ActiveRecord existe un plugin que se llama acts_as_taggable_on y otro muy similar acts_as_taggable_on_steroids al parecer son los mas usados en Ruby/Rails pero desafortunadamente no funcionan con Mongoid ya que dependen de ActiveRecord.

Entonces estuve buscando como las personas que usan MongoDB llevan a cabo el etiquetado de sus documentos. Afortunadamente encontre una entrada de blog de jpemberthy  “Adding tags to Mongoid Documents” el cual el desarrolla su propia implementacion sencilla de un solo arreglo para etiquetado a documentos MongoDB en Mongoid, el código es pequeño se entiende bastante bien y de hecho es un gist de github.

Para hacer uso de esa implementación sólo tienes que agregar el código dentro del folder

[nombre_aplicacion]/config/initializers


con cualquier nombre, yo use mongoid_tags.rb , posteriormente en tu modelo debes incluir la implementacion.



class Article
include Mongoid::Document
include Mongoid::Document::Taggable


Con sólo eso es más que suficiente para que tu documento soporte asignarle etiquetas, ahora, para asignarle etiquetas tienes que hacerlo de esta forma



@articulo = Articulo.new(:name => "Mongoid rocks!")
@articulo.tag_list = "mongodb, mongoid, taggable"
@articulo.tags # => ["mongodb", "mongoid", "taggable"]
@articulo.save


Como vemos, para asignarle etiquetas a nuestro documento se lo asignamos a tag_list como una string donde las palabras que le queremos asignar estan separadas por comas, pero al regresar las etiquetas nos la regresa como un arreglo.



Al igual podemos hacer busquedas de documentos dependiendo de las etiquetas que queramos



Article.tagged_with("mongodb") # => @articulo
Article.tagged_with(["mongodb", "mongoid"]) # => @articulo

@articulo2 = Article.new(:name => "JQuery Rocks!")
@articulo2.tag_list = "taggable"
@articulo2.save

Article.tagged_with("taggable") # => [@articulo, @articulo2]


Ok, pues todo esto va bastante bien, pero como hacemos uso de esta característica en Rails3? hice otra busqueda de como hacer uso de etiquetas en JQuery, para lo cual encontre el plugin tagsinput no sabría decirles si es el mejor o de los mejores pero me gusto por su facilidad de uso, lo visual y además algo muy importante que buscaba en el plugin fue el hecho de que las etiquetas que vas agregando se van guardando separadas por comas en un text input que esta escondido, esto me facilito ligarlo a mi forma de Rails.



Ahora para hacer uso de este plugin en nuestra aplicación lo hacemos de esta manera



<%= f.label :tags %>
<%= f.text_field :tag_list %>


Y al inicializar la forma agregamos



$(document).ready(function(){
$('#article_tag_list').tagsInput();
});


Y listo! facil no? :-)

martes, 16 de junio de 2009

Agile CoffeeCamp Tijuana

AgileCoffeCamp1 

El día del hoy por medio de Twitter hice un Tweet preguntando si en un desarrollo ‘ágil’ se llevan a cabo pantallas como parte del análisis para un desarrollo de software, para esto rápidamente (o de una forma muy ágil) me contesta @mario_chavez “El uso de metodologías ágiles no implica que no hay análisis y diseño antes de iniciar el desarrollo”, y si tiene mucha razón.

Dentro de mi muy limitado (mas bien nulo) conocimiento de un desarrollo ‘ágil’ pense que dentro de esa metodología no habria cabida para dos semanas aproximadamente dedicadas a diseñar pantallas como es lo que estoy sufriendo actualmente en mi trabajo. Para esto me pongo a pensar, que no parte del desarrollo ágil y sus entregas cortas es para evitar el análisis excesivo y no llegar al famoso pero aterrador “Parálisis por análisis”?

Mi percepción por el momento es de que estas metodologias ‘ágiles’ para el desarrollo de software son conceptuales y a la vez basada en recomendaciones por lo tanto estan abiertas a discusión y quizas a interpretación.

Pero no tomen mis ideas como hecho, acompañenos este Sábado 4 de Julio al primer “Agile CoffeeCamp” en Tijuana, B.C. para poder dialogar sobre estas nuevas formas ‘ágiles’ y en ocasiones controversiales de desarrollar software.

Info:

Cafe D'Volada de Plaza Dorada

Sábado 4 de Julio, a partir de las 9:00am

Sin costo, solo el consumo del café

Mapa y mas info aqui con Mario Chávez

jueves, 23 de abril de 2009

Linq en GNU/Linux

Esta vez les voy a mostrar que Linq también nos funciona en GNU/Linux usando Mono, para eso vamos a usar MonoDevelop.

Para poder usar Linq en Mono necesitamos:

  • La version 2.0 de MonoDevelop
  • Mono 2.4
  • Hacer referencia a System.Data.Linq

Para iniciar vamos a crear un nuevo proyecto que sea de tipo Consola, despues vamos a crear una clase “Persona” que definimos aqui abajo:

Persona.cs

   1: namespace MonoLinq
   2: {    
   3:     public class Persona
   4:     {        
   5:         public string Nombre
   6:         {get;set;}
   7:         public string ApellidoPaterno
   8:         {get;set;}
   9:         public string ApellidoMaterno
  10:         {get;set;}
  11:     }
  12: }


Para hacer referencia a System.Data.Linq damos click derecho en “References” de nuestro proyecto y despues “Edit References…”

En la ventana que se nos presenta elegimos la ceja que dice “Packages” y buscamos el que dice System.Data.Linq, lo seleccionamos y presionamos OK:

Una vez que agregamos la referencia de Linq a nuestro proyecto podemos agregar las referencias de Linq y de Generic a nuestra clase Main.cs

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;

En la clase Main.cs vamos a crear instancias de nuestra clase Persona de esta forma:


   1: var persona1 = new Persona
   2:                  {
   3:                      Nombre = "Armando",
   4:                      ApellidoPaterno = "Castro",
   5:                      ApellidoMaterno = "Rodriguez"
   6:                  };


Seguido ya habiendo creado varias instancias de la clase las agregamos a un arreglo genérico:


1: var personas = new List<Persona> {persona1, persona2, persona3, persona4, persona5};

Una vez que tenemos creado el arreglo generico de tipo Persona podemos hacer uso de Linq para hacer busquedas sobre ese arreglo. La parte de Linq en si es la siguiente:





   1: var persona = (from p in personas where p.Nombre == "Roberto" select p).FirstOrDefault();




Una vez que hicimos una busqueda sobre nuestro arreglo y lo cargamos a una variable podemos imprimir sus valores:



   1: Console.WriteLine("Nombre : {0}", persona.Nombre);
   2:                 Console.WriteLine("Apellido Paterno : {0}", persona.ApellidoPaterno);
   3:                 Console.WriteLine("Apellido Materno : {0}", persona.ApellidoMaterno);

El resultado es el siguiente:

Esta fue una breve introducción de como usar Linq en C# bajo Mono y GNU/Linux.

Por cierto aqui esta el código!

Descargalo

Que comiencen los comentarios :-) !

martes, 14 de abril de 2009

ASP.Net MVC en GNU/Linux

En este blog que me estrena como "Bloguero" voy a explicarles cómo podemos hacer uso del reciente ASP.Net MVC (que se libero bajo MS-PL) en una plataforma GNU/Linux usando Mono y MonoDevelop.

Para poder desarrollar una aplicación ASP.Net MVC en MonoDevelop necesitamos:

  • La version 2.0 de MonoDevelop

  • Mono 2.4

  • Instalarle a MonoDevelop el Add-In para ASP.Net MVC


Para instalar el Add-In en MonoDevelop nos vamos a:

Tools -> Add-in Manager


Seleccionamos el Add-In de ASP.NET MVC Support 2.0.4 que está en la sección de "Web Development" para instalarlo.

Una vez instalado el Add-In podemos ir a:

File -> New –> Solution

Aquí podemos elegir el nombre del proyecto y la solución. Y si todo sale bien debemos ver algo como esto:


Siguiente, le damos click al botón "Run" y......


Que tal, funciono :D!!

Para los siguientes "post" iré agregando más cosas como hacer uso de LINQ, JQuery y claro otras cosas de ASP.Net MVC en MonoDevelop.

Otras entradas de blogs acerca de ASP.Net MVC en español:

ASP.Net MVC MyTwitter (Parte 0) / Mario Cornejo

Comparación del ciclo de vida de una página ASP.NET Webforms y ASP.NET MVC / Mario Chávez

ASP.NET MVC Series: Controladores, Acciones y Resultado de Acciones / Carlos Lone

Comentarios bienvenidos!