<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8017598242467606943</id><updated>2011-08-28T07:13:17.206-07:00</updated><category term='JQuery'/><category term='Ruby'/><category term='Linq'/><category term='Linux'/><category term='Mono Develop'/><category term='Rails'/><category term='.Net'/><category term='Mono'/><category term='Mongoid'/><category term='Rails3'/><category term='Tutorial'/><category term='ASP.Net MVC'/><category term='NoSQL'/><title type='text'>Desarrollo de Software</title><subtitle type='html'>... y mas cosas divertidas.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fernando-castellanos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fernando-castellanos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Fernando</name><uri>http://www.blogger.com/profile/18421197884160345107</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_eLu_hPWw6Js/Sch7nerQ0OI/AAAAAAAADlA/YJyiSyNseMc/S220/Avatar_01.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8017598242467606943.post-6930634368831599638</id><published>2010-11-30T20:19:00.002-08:00</published><updated>2010-12-04T21:39:02.849-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails3'/><category scheme='http://www.blogger.com/atom/ns#' term='Mongoid'/><category scheme='http://www.blogger.com/atom/ns#' term='JQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Tagging en Mongoid</title><content type='html'>&lt;p align="justify"&gt;He estado trabajando en “&lt;a href="http://en.wiktionary.org/wiki/pet_project" target="_blank"&gt;pet projects&lt;/a&gt;” como proceso de aprendizaje de &lt;a href="http://rubyonrails.org/" target="_blank"&gt;Ruby on Rails&lt;/a&gt;, ultimamente he estado trabajando con base de datos &lt;a href="http://www.mongodb.org/" target="_blank"&gt;MongoDB&lt;/a&gt; con el manejador &lt;a href="http://mongoid.org/" target="_blank"&gt;Mongoid&lt;/a&gt;, 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.&lt;/p&gt;  &lt;p align="justify"&gt;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 &lt;a href="https://github.com/mbleigh/acts-as-taggable-on" target="_blank"&gt;acts_as_taggable_on&lt;/a&gt; y otro muy similar &lt;a href="https://github.com/jviney/acts_as_taggable_on_steroids" target="_blank"&gt;acts_as_taggable_on_steroids&lt;/a&gt; al parecer son los mas usados en Ruby/Rails pero desafortunadamente no funcionan con Mongoid ya que dependen de ActiveRecord. &lt;/p&gt;  &lt;p align="justify"&gt;Entonces estuve buscando como las personas que usan MongoDB llevan a cabo el etiquetado de sus documentos. Afortunadamente encontre una entrada de blog de &lt;a href="http://www.blogger.com/profile/00820314355443948994"&gt;jpemberthy&lt;/a&gt;&amp;#160; “&lt;a href="http://pemberthy.blogspot.com/2010/03/adding-tags-to-mongoid-documents.html" target="_blank"&gt;Adding tags to Mongoid Documents&lt;/a&gt;” 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.&lt;/p&gt;  &lt;p align="justify"&gt;Para hacer uso de esa implementación sólo tienes que agregar el código dentro del folder &lt;/p&gt;  &lt;pre class="brush: shell; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;[nombre_aplicacion]/config/initializers&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;con cualquier nombre, yo use mongoid_tags.rb , posteriormente en tu modelo debes incluir la implementacion.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: rails; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;class Article&lt;br /&gt;  include Mongoid::Document&lt;br /&gt;  include Mongoid::Document::Taggable&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: rails; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;@articulo = Articulo.new(:name =&amp;gt; &amp;quot;Mongoid rocks!&amp;quot;)&lt;br /&gt;@articulo.tag_list = &amp;quot;mongodb, mongoid, taggable&amp;quot;&lt;br /&gt;@articulo.tags  # =&amp;gt; [&amp;quot;mongodb&amp;quot;, &amp;quot;mongoid&amp;quot;, &amp;quot;taggable&amp;quot;]&lt;br /&gt;@articulo.save&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;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.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Al igual podemos hacer busquedas de documentos dependiendo de las etiquetas que queramos&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: rails; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;Article.tagged_with(&amp;quot;mongodb&amp;quot;) # =&amp;gt; @articulo&lt;br /&gt;Article.tagged_with([&amp;quot;mongodb&amp;quot;, &amp;quot;mongoid&amp;quot;]) # =&amp;gt; @articulo&lt;br /&gt;&lt;br /&gt;@articulo2 = Article.new(:name =&amp;gt; &amp;quot;JQuery Rocks!&amp;quot;)&lt;br /&gt;@articulo2.tag_list = &amp;quot;taggable&amp;quot;&lt;br /&gt;@articulo2.save&lt;br /&gt;&lt;br /&gt;Article.tagged_with(&amp;quot;taggable&amp;quot;) # =&amp;gt; [@articulo, @articulo2]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;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 &lt;a href="http://xoxco.com/clickable/jquery-tags-input" target="_blank"&gt;tagsinput&lt;/a&gt; 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.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Ahora para hacer uso de este plugin en nuestra aplicación lo hacemos de esta manera&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: rails; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&amp;lt;%= f.label :tags %&amp;gt;&lt;br /&gt;&amp;lt;%= f.text_field :tag_list %&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Y al inicializar la forma agregamos&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;$(document).ready(function(){&lt;br /&gt;  $('#article_tag_list').tagsInput();&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Y listo! facil no? :-) &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8017598242467606943-6930634368831599638?l=fernando-castellanos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fernando-castellanos.blogspot.com/feeds/6930634368831599638/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fernando-castellanos.blogspot.com/2010/11/tagging-en-mongoid.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/6930634368831599638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/6930634368831599638'/><link rel='alternate' type='text/html' href='http://fernando-castellanos.blogspot.com/2010/11/tagging-en-mongoid.html' title='Tagging en Mongoid'/><author><name>Fernando</name><uri>http://www.blogger.com/profile/18421197884160345107</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_eLu_hPWw6Js/Sch7nerQ0OI/AAAAAAAADlA/YJyiSyNseMc/S220/Avatar_01.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8017598242467606943.post-6422819667240984201</id><published>2009-06-16T18:03:00.001-07:00</published><updated>2009-06-16T18:40:06.196-07:00</updated><title type='text'>Agile CoffeeCamp Tijuana</title><content type='html'>&lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/_eLu_hPWw6Js/SjhHql9G1bI/AAAAAAAADoo/_2xPq_88G-s/s1600-h/AgileCoffeCamp1%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="AgileCoffeCamp1" border="0" alt="AgileCoffeCamp1" src="http://lh6.ggpht.com/_eLu_hPWw6Js/SjhHri7nPAI/AAAAAAAADos/y3DrXlPnn20/AgileCoffeCamp1_thumb%5B1%5D.png?imgmax=800" width="240" height="120" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;El día del hoy por medio de &lt;a href="http://twitter.com/" target="_blank"&gt;Twitter&lt;/a&gt; hice un &lt;a href="http://twitter.com/FCastellanos/statuses/2195406961" target="_blank"&gt;Tweet&lt;/a&gt; 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 &lt;a href="http://twitter.com/mario_chavez/" target="_blank"&gt;@mario_chavez&lt;/a&gt; “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.&lt;/p&gt;  &lt;p align="justify"&gt;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”?&lt;/p&gt;  &lt;p align="justify"&gt;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.&lt;/p&gt;  &lt;p align="justify"&gt;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.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Info:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Cafe D'Volada de Plaza Dorada&lt;/p&gt;  &lt;p align="justify"&gt;Sábado 4 de Julio, a partir de las 9:00am&lt;/p&gt;  &lt;p align="justify"&gt;Sin costo, solo el consumo del café&lt;/p&gt;  &lt;p align="justify"&gt;Mapa y mas info &lt;a href="http://mario-chavez.blogspot.com/2009/06/agile-coffecamp-tijuana.html" target="_blank"&gt;aqui&lt;/a&gt; con &lt;a href="http://mario-chavez.blogspot.com" target="_blank"&gt;Mario Chávez&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8017598242467606943-6422819667240984201?l=fernando-castellanos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fernando-castellanos.blogspot.com/feeds/6422819667240984201/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fernando-castellanos.blogspot.com/2009/06/agile-coffeecamp-tijuana.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/6422819667240984201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/6422819667240984201'/><link rel='alternate' type='text/html' href='http://fernando-castellanos.blogspot.com/2009/06/agile-coffeecamp-tijuana.html' title='Agile CoffeeCamp Tijuana'/><author><name>Fernando</name><uri>http://www.blogger.com/profile/18421197884160345107</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_eLu_hPWw6Js/Sch7nerQ0OI/AAAAAAAADlA/YJyiSyNseMc/S220/Avatar_01.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_eLu_hPWw6Js/SjhHri7nPAI/AAAAAAAADos/y3DrXlPnn20/s72-c/AgileCoffeCamp1_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8017598242467606943.post-3553669679322114102</id><published>2009-04-23T22:15:00.004-07:00</published><updated>2009-06-11T22:35:34.698-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Linq'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Linq en GNU/Linux</title><content type='html'>Esta vez les voy a mostrar que &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" target="_blank"&gt;Linq&lt;/a&gt; también nos funciona en GNU/Linux usando Mono, para eso vamos a usar MonoDevelop.   &lt;p&gt;Para poder usar Linq en Mono necesitamos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;La version 2.0 de MonoDevelop &lt;/li&gt;    &lt;li&gt;Mono 2.4 &lt;/li&gt;    &lt;li&gt;Hacer referencia a System.Data.Linq &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Para iniciar vamos a crear un nuevo proyecto que sea de tipo Consola, despues vamos a crear una clase “Persona” que definimos aqui abajo:&lt;/p&gt;  &lt;p&gt;Persona.cs&lt;/p&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 102.89%; padding-right: 4px;  direction: ltr; height: 235px; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;   &lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;     &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; MonoLinq&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; {    &lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Persona&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt;     {        &lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum5"  style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Nombre&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum6"  style="color:#606060;"&gt;   6:&lt;/span&gt;         {get;set;}&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum7"  style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ApellidoPaterno&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum8"  style="color:#606060;"&gt;   8:&lt;/span&gt;         {get;set;}&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum9"  style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ApellidoMaterno&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum10"  style="color:#606060;"&gt;  10:&lt;/span&gt;         {get;set;}&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum11"  style="color:#606060;"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum12"  style="color:#606060;"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Para hacer referencia a System.Data.Linq damos click derecho en “References” de nuestro proyecto y despues “Edit References…”&lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:51CF81A4-8F44-4a2c-8837-198C090B9994:562a8184-0fda-4ced-99db-c2f659ef71fd" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_eLu_hPWw6Js/SfE-WlqYFdI/AAAAAAAADoA/WA23GM39wSY/s800/MonoLinq%20-%20References%20-%20MonoDevelop.png" atomicselection="true"&gt;&lt;img style="border-right: 2px; border-top: 2px; border-left: 2px; border-bottom: 2px" height="288" src="http://lh4.ggpht.com/_eLu_hPWw6Js/SfE-WlqYFdI/AAAAAAAADoA/WA23GM39wSY/s288/MonoLinq%20-%20References%20-%20MonoDevelop.png" width="275" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;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:&lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:51CF81A4-8F44-4a2c-8837-198C090B9994:2cbb1231-89c4-4366-a887-4ffff712a4e0" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_eLu_hPWw6Js/SfE1iuIT24I/AAAAAAAADnU/9BIUcYIWZkA/s800/MonoLinq%20-%20Edit%20References.png" atomicselection="true"&gt;&lt;img style="border-right: 2px; border-top: 2px; border-left: 2px; border-bottom: 2px" height="266" src="http://lh3.ggpht.com/_eLu_hPWw6Js/SfE1iuIT24I/AAAAAAAADnU/9BIUcYIWZkA/s288/MonoLinq%20-%20Edit%20References.png" width="288" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;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&lt;/p&gt;&lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 101.77%; padding-right: 4px;  direction: ltr; height: 58px; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;En la clase Main.cs vamos a crear instancias de nuestra clase Persona de esta forma:&lt;/p&gt;&lt;br /&gt;&lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px;  direction: ltr; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; var persona1 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Persona&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt;                  {&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;                      Nombre = &lt;span style="color:#006080;"&gt;"Armando"&lt;/span&gt;,&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum4"  style="color:#606060;"&gt;   4:&lt;/span&gt;                      ApellidoPaterno = &lt;span style="color:#006080;"&gt;"Castro"&lt;/span&gt;,&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum5"  style="color:#606060;"&gt;   5:&lt;/span&gt;                      ApellidoMaterno = &lt;span style="color:#006080;"&gt;"Rodriguez"&lt;/span&gt;&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum6"  style="color:#606060;"&gt;   6:&lt;/span&gt;                  };&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Seguido ya habiendo creado varias instancias de la clase las agregamos a un arreglo genérico:&lt;/p&gt;&lt;br /&gt;&lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 101.97%; padding-right: 4px;  direction: ltr; height: 70px; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;1:&lt;/span&gt; var personas = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Persona&amp;gt; {persona1, persona2, persona3, persona4, persona5};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;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:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 103.13%; padding-right: 4px;  direction: ltr; height: 63px; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;br /&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; var persona = (from p &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; personas &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; p.Nombre == &lt;span style="color:#006080;"&gt;"Roberto"&lt;/span&gt; select p).FirstOrDefault();&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Una vez que hicimos una busqueda sobre nuestro arreglo y lo cargamos a una variable podemos imprimir sus valores:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div    style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background- margin: 20px 0px 10px; padding-left: 4px; width: 102%; padding-right: 4px;  direction: ltr; height: 118px; max-height: 200px;  overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"&gt;&lt;div    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum1"  style="color:#606060;"&gt;   1:&lt;/span&gt; Console.WriteLine(&lt;span style="color:#006080;"&gt;"Nombre : {0}"&lt;/span&gt;, persona.Nombre);&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum2"  style="color:#606060;"&gt;   2:&lt;/span&gt;                 Console.WriteLine(&lt;span style="color:#006080;"&gt;"Apellido Paterno : {0}"&lt;/span&gt;, persona.ApellidoPaterno);&lt;/pre&gt;    &lt;pre    style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px;  direction: ltr; border-top-style: none;   border-left-style: none; overflow: visible; padding-top: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;"&gt;&lt;span id="lnum3"  style="color:#606060;"&gt;   3:&lt;/span&gt;                 Console.WriteLine(&lt;span style="color:#006080;"&gt;"Apellido Materno : {0}"&lt;/span&gt;, persona.ApellidoMaterno);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;El resultado es el siguiente:&lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:51CF81A4-8F44-4a2c-8837-198C090B9994:21060a6c-665d-4288-ab86-0ac6fe769594" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_eLu_hPWw6Js/SfE-WvohNVI/AAAAAAAADn4/KfRcYpMCV4I/s800/MonoLinq%20-%20Output%20-%20MonoDevelop.png" atomicselection="true"&gt;&lt;img style="border-right: 2px; border-top: 2px; border-left: 2px; border-bottom: 2px" height="224" src="http://lh5.ggpht.com/_eLu_hPWw6Js/SfE-WvohNVI/AAAAAAAADn4/KfRcYpMCV4I/s288/MonoLinq%20-%20Output%20-%20MonoDevelop.png" width="288" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Esta fue una breve introducción de como usar Linq en C# bajo Mono y GNU/Linux.&lt;/p&gt;&lt;p&gt;Por cierto aqui esta el código!&lt;/p&gt;&lt;p&gt;&lt;a href="http://cid-8f28cd9b88f94d90.skydrive.live.com/self.aspx/Public/Codigos/MonoLinq.tar.gz" target="_blank"&gt;Descargalo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Que comiencen los comentarios :-) !&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8017598242467606943-3553669679322114102?l=fernando-castellanos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fernando-castellanos.blogspot.com/feeds/3553669679322114102/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fernando-castellanos.blogspot.com/2009/04/linq-en-gnulinux.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/3553669679322114102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/3553669679322114102'/><link rel='alternate' type='text/html' href='http://fernando-castellanos.blogspot.com/2009/04/linq-en-gnulinux.html' title='Linq en GNU/Linux'/><author><name>Fernando</name><uri>http://www.blogger.com/profile/18421197884160345107</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_eLu_hPWw6Js/Sch7nerQ0OI/AAAAAAAADlA/YJyiSyNseMc/S220/Avatar_01.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_eLu_hPWw6Js/SfE-WlqYFdI/AAAAAAAADoA/WA23GM39wSY/s72-c/MonoLinq%20-%20References%20-%20MonoDevelop.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8017598242467606943.post-5078042826426815936</id><published>2009-04-14T20:21:00.002-07:00</published><updated>2009-04-23T22:14:30.891-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono Develop'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net MVC'/><title type='text'>ASP.Net MVC en GNU/Linux</title><content type='html'>&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE" /&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 3.0  (Linux)" /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 	&lt;!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 		A:link { so-language: zxx } 	--&gt; 	&lt;/style&gt;  &lt;p style="margin-bottom: 0.2in"&gt;En este blog que me estrena como &amp;quot;Bloguero&amp;quot; voy a explicarles cómo podemos hacer uso del reciente &lt;a href="http://www.asp.net/mvc" target="_blank"&gt;ASP.Net MVC&lt;/a&gt; (que se libero bajo &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/04/01/asp-net-mvc-1-0.aspx" target="_blank"&gt;MS-PL&lt;/a&gt;) en una plataforma GNU/Linux usando Mono y MonoDevelop.     &lt;br /&gt;    &lt;br /&gt;Para poder desarrollar una aplicación ASP.Net MVC en &lt;a href="http://monodevelop.com/" target="_blank"&gt;MonoDevelop&lt;/a&gt; necesitamos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p style="margin-bottom: 0in"&gt;La version 2.0 de MonoDevelop &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p style="margin-bottom: 0in"&gt;Mono 2.4&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Instalarle a MonoDevelop el Add-In para ASP.Net MVC &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;   &lt;br /&gt;Para instalar el Add-In en MonoDevelop nos vamos a:     &lt;br /&gt;    &lt;br /&gt;Tools -&amp;gt; Add-in &lt;span id="0" class="transl_class" title="Click to correct"&gt;Manager&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:51CF81A4-8F44-4a2c-8837-198C090B9994:792d50eb-df07-4fa0-93a9-d87e8891542e" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_eLu_hPWw6Js/SeVHuDpQn7I/AAAAAAAADl8/k9wxF4SBEXs/s800/%5BUNSET%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 2px; border-top: 2px; border-left: 2px; border-bottom: 2px" height="235" src="http://lh6.ggpht.com/_eLu_hPWw6Js/SeVHuDpQn7I/AAAAAAAADl8/k9wxF4SBEXs/s288/%5BUNSET%5D.png" width="288"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;  &lt;br /&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE" /&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 3.0  (Linux)" /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 	&lt;!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 	--&gt; 	&lt;/style&gt;&lt;/p&gt;  &lt;p&gt;Seleccionamos el Add-In de ASP.NET MVC Support 2.0.4 que está en la sección de &amp;quot;Web Development&amp;quot; para instalarlo.    &lt;br /&gt;    &lt;br /&gt;Una vez instalado el Add-In podemos ir a:     &lt;br /&gt;    &lt;br /&gt;File -&amp;gt; New –&amp;gt; &lt;span id="1" class="transl_class" title="Click to correct"&gt;Solution&lt;/span&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:51CF81A4-8F44-4a2c-8837-198C090B9994:b4bfd5f3-5dd4-40fe-ae63-a14916638266" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_eLu_hPWw6Js/SeVJNXCCesI/AAAAAAAADmA/BKpl1lCFeQo/s800/%5BUNSET%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 2px; border-top: 2px; border-left: 2px; border-bottom: 2px" height="218" src="http://lh5.ggpht.com/_eLu_hPWw6Js/SeVJNXCCesI/AAAAAAAADmA/BKpl1lCFeQo/s288/%5BUNSET%5D.png" width="288"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE" /&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 3.0  (Linux)" /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 	&lt;!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 	--&gt; 	&lt;/style&gt;&lt;/p&gt;  &lt;p&gt;Aquí podemos elegir el nombre del proyecto y la solución. Y si todo sale bien debemos ver algo como esto:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:51CF81A4-8F44-4a2c-8837-198C090B9994:36c05092-7fd0-415e-b97d-999a36efa1dd" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_eLu_hPWw6Js/SeVKaPs-HOI/AAAAAAAADmE/chVEeCySx1o/s800/%5BUNSET%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 2px; border-top: 2px; border-left: 2px; border-bottom: 2px" height="180" src="http://lh4.ggpht.com/_eLu_hPWw6Js/SeVKaPs-HOI/AAAAAAAADmE/chVEeCySx1o/s288/%5BUNSET%5D.png" width="288"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;  &lt;br /&gt;&lt;span id="2" class="transl_class" title="Click to correct"&gt;&lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE" /&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 3.0  (Linux)" /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 	&lt;!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 	--&gt; 	&lt;/style&gt;&lt;/p&gt;  &lt;p&gt;Siguiente, le damos click al botón &amp;quot;Run&amp;quot; y......&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:51CF81A4-8F44-4a2c-8837-198C090B9994:d6cbddb5-17ac-439a-a7ec-2d008c5b7c19" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_eLu_hPWw6Js/SeVNJn6iieI/AAAAAAAADmI/9odNMHFpIpg/s800/%5BUNSET%5D.png" atomicselection="true"&gt;&lt;img style="border-right: 2px; border-top: 2px; border-left: 2px; border-bottom: 2px" height="153" src="http://lh6.ggpht.com/_eLu_hPWw6Js/SeVNJn6iieI/AAAAAAAADmI/9odNMHFpIpg/s288/%5BUNSET%5D.png" width="288"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;  &lt;br /&gt;  &lt;p&gt;&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE" /&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 3.0  (Linux)" /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 	&lt;!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 	--&gt; 	&lt;/style&gt;&lt;/p&gt;  &lt;p&gt;Que tal, funciono :D!!    &lt;br /&gt;    &lt;br /&gt;Para los siguientes &amp;quot;post&amp;quot; iré agregando más cosas como hacer uso de LINQ, JQuery y claro otras cosas de ASP.Net MVC en MonoDevelop.&lt;/p&gt;  &lt;p&gt;Otras entradas de blogs acerca de ASP.Net MVC en español:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.developeando.com/2009/04/mytwitter-aspnet-mvc-parte-0.html" target="_blank"&gt;ASP.Net MVC MyTwitter (Parte 0)&lt;/a&gt; / &lt;a href="http://www.developeando.com" target="_blank"&gt;Mario Cornejo&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://mario-chavez.blogspot.com/2009/03/comparacion-del-ciclo-de-vida-de-una.html"&gt;Comparación del ciclo de vida de una página ASP.NET Webforms y ASP.NET MVC&lt;/a&gt; / &lt;a href="http://mario-chavez.blogspot.com/" target="_blank"&gt;Mario Chávez&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/carloslone/archive/2009/04/12/asp-net-mvc-series-controladores-acciones-y-resultado-de-acciones.aspx" target="_blank"&gt;ASP.NET MVC Series: Controladores, Acciones y Resultado de Acciones&lt;/a&gt; / &lt;a href="http://weblogs.asp.net/carloslone/" target="_blank"&gt;Carlos Lone&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Comentarios bienvenidos!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8017598242467606943-5078042826426815936?l=fernando-castellanos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fernando-castellanos.blogspot.com/feeds/5078042826426815936/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fernando-castellanos.blogspot.com/2009/04/aspnet-mvc-en-gnulinux.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/5078042826426815936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8017598242467606943/posts/default/5078042826426815936'/><link rel='alternate' type='text/html' href='http://fernando-castellanos.blogspot.com/2009/04/aspnet-mvc-en-gnulinux.html' title='ASP.Net MVC en GNU/Linux'/><author><name>Fernando</name><uri>http://www.blogger.com/profile/18421197884160345107</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_eLu_hPWw6Js/Sch7nerQ0OI/AAAAAAAADlA/YJyiSyNseMc/S220/Avatar_01.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_eLu_hPWw6Js/SeVHuDpQn7I/AAAAAAAADl8/k9wxF4SBEXs/s72-c/%5BUNSET%5D.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
