﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>JuanCri.com Blog / mono</title>
    <description>Blog de Juan C. Olivares / mono</description>
    <link>http://www.juancri.com/tags/mono</link>
    <lastBuildDate>Wed, 17 Feb 2010 08:36:23 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>RSS.NET: http://www.rssdotnet.com/</generator>
    <item>
      <title>jQuery + JSon (Parte 1): La búsqueda</title>
      <description>&lt;p&gt;
Hace algunas semanas, comenzamos un experimento para definir la arquitectura
básica de las aplicaciones web que desarrollaremos en CxNet de aquí en adelante.
&lt;/p&gt;
&lt;p&gt;
Aunque uno de los lenguajes que más utilizado es PHP (principalmente entre 2001 y 2004),
no me siento cómo desarrollando "web". Comparado a la satisfacción de programar software
sin interfaz de usuario, que sólo debe cumplir con los protocolos de los sistemas a los
cuales se conecta, la web tiene un sin fin de complejidades.
&lt;/p&gt;
&lt;p&gt;
Ésta es mi historia:
&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
  &lt;li&gt;HTML: Aprendí gracias a Mosaic y algunas páginas de muestra que venían en el CD
  de mi primer módem. Luego, cuando por fin pude usarlo para conectarme a internet,
  seguí experimentando y creé algunas páginas, pero nada de lo que me sienta muy
  orgulloso.&lt;/li&gt;
  &lt;li&gt;Perl: Hace unos 11 años, alguien me pidió investigar una forma de listar
  información sobre empresas en un sitio web. Hice pruebas con Perl, el lenguaje
  más utilizado para desarrollar CGI en la época, y logré buenos resultados.
  Perl se convertiría en mi segundo lenguaje de programación (después de BASIC...
  aunque pasando por alto algunas pruebas con JavaScript).&lt;/li&gt;
  &lt;li&gt;PHP: Ya el 2001, cuando comencé a trabajar (semi) formalmente, PHP resonaba
  como la &lt;i&gt;maravilla&lt;/i&gt; del desarrollo web. Me tomé algunos días y, utilizando
  unas mil hojas tamaño carta y varios cartuchos recargables de tinta, imprimí
  la documentación de la, entonces nueva, versión 4 de PHP. Éste sería uno de
  los lenguajes que utilizaría por más tiempo. Si bien no habían frameworks en
  la época, y todas las variables se importaban mágicamente (nada de $_POST o
  similares), hace algunos años comencé a buscar alternativas como PRADO Framework.&lt;/li&gt;
  &lt;li&gt;ASP.NET:&lt;/li&gt; Durante la búsqueda de un lenguaje y plataforma más poderosos que
  me permitieran desarrollar para web y para escritorio, y luego de probar Java y
  Delphi, encontré el proyecto Mono (allá por la versión 0.16). De inmediato me sentí
  muy atraido por el lenguaje principal, C#. Luego, descubriría ASP.NET y su
  revolucionaria arquitectura de controles y estados. Ha sido mi principal plataforma
  de desarrollo web desde 2003 hasta 2009.&lt;/li&gt;
  &lt;li&gt;Java Struts: Este conocido motor MVC para Java me fue impuesto por el cruel
  mercado. Nunca me sentí cómodo con él y, después de menos de seis meses de práctica,
  renuncié a mi trabajo y decidí enfocarme en .NET/Mono, lo que incluía ASP.NET.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Si bien el modelo de ASP.NET, también ocupado en JSF, PRADO Framework y otros, es cómodo
y ordenado, uno de los problemas que tiene es el uso de servicios Ajax o JSON y la
interacción con JavaScript, nada de natural. Hay varios intentos de amalgamar estas
tecnologías que parecen haber sido diseñadas para lo mismo pero que, sin embargo,
tienen arquitecturas totalmente opuestas. Un intento es ASP.NET Ajax, el cual incluye
un "update panel", en el cual se pueden insertar otros controles que utilizar AJAX
por debajo. Otro intento, muy bueno, es Gaia Ajax Widgets. En este caso, sus desarrolladores
crearon toda una gama de controles "ajaxosos", extendiendo la funcionalidad de los controles
originales. Incluso llegué a comprar una licencia durante una oferta. El viewstate se seguía
ocupando, pero no todo era color de rosas. Hay que saber muchos detalles de cómo funcionan
estos sistemas, a bajo nivel, para poder resolver problemas que seguramente ocurrirán tarde
o temprano, síntomas de una relación ilícita entre dos mundos que se niegan a convivir.
&lt;/p&gt;
&lt;p&gt;
Como todo cambia, especialmente en este mundillo de la computación, siempre hay que
replantearse las cosas. En el caso de las plataformas web, esto me ha ocurrido varias
veces.
&lt;/p&gt;
&lt;p&gt;
Hay dos criterios muy importantes que deben ser tomados en cuenta cuando se elige una
plataforma: el usuario y el desarrollador. GMail es tal vez el gran ejemplo de AJAX.
La primera aplicación masiva donde no había que esperar por un &lt;i&gt;refresh&lt;/i&gt; o
&lt;i&gt;postback&lt;/i&gt; y donde el usuario es complacido con una interfaz intuitiva y simple.
En el caso del desarrollador, hay un gran problema en el típico framework web mezclado
con AJAX (o JSON, etc). Cierto contenido es &lt;i&gt;rendereado&lt;/i&gt; en el servidor mientras
otro contenido es generado dinámicamente al cargarse datos a través de un request AJAX.
&lt;/p&gt;
&lt;p&gt;
Luego de la popularidad alcanzada por JQuery y la facilidad de uso de JSON en ASP.NET MVC,
decidí probar esta combinación. En los próximos posts, les contaré cómo.
&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/jquery_json_parte_1_la_busqueda</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/jquery_json_parte_1_la_busqueda</guid>
      <pubDate>Wed, 17 Feb 2010 08:36:23 GMT</pubDate>
    </item>
    <item>
      <title>Dependencias de GDI+</title>
      <description>&lt;p&gt;Supongamos una aplicaci&amp;oacute;n ASP.NET simple, con una p&amp;aacute;gina como &amp;eacute;sta:&lt;/p&gt;
&lt;pre name="code" class="xml"&gt;
&amp;lt;% @Page %&amp;gt;

&amp;lt;form runat="server"&amp;gt;
        &amp;lt;asp:textbox runat="server" id="textBox1" /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:button runat="server" id="button1" /&amp;gt;&amp;lt;br /&amp;gt;
        &amp;lt;asp:label runat="server" id="label1"/&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;
&lt;p&gt;En un servidor Ubuntu Server Hardy 8.04 (LTS), necesitaremos haber compilado mono y xsp, sin otros requerimientos que los necesarios para compilar.&lt;/p&gt;
&lt;p&gt;Ahora, agreguemos un validador de campo requerido:&lt;/p&gt;
&lt;pre name="code" class="xml"&gt;
&amp;lt;asp:requiredfieldvalidator runat="server" errormessage="*" controltovalidate="textBox1" &amp;gt;&gt;
&lt;/pre&gt;
&lt;p&gt;Aqu&amp;iacute; vamos a tener un problema. El validador RequiredFieldValidator llamar&amp;aacute; al constructur de su padre BaseValidator, el que a su vez asignar&amp;aacute; el color rojo (Color.Red) a su label. La propiedad est&amp;aacute;tica Color.Red llamar&amp;aacute; a KnownColors.FromKnownColor, cuyo constructor est&amp;aacute;tico invocar&amp;aacute; a GDIPlus.RunningOnWindows () y as&amp;iacute; las referencias terminar&amp;aacute;n intentando llamar a libgdiplus (biblioteca nativa). SI creen que eso no es un problema, esperen a intentar compilar libgdiplus, que depende de xlib (desarrollo) y sus decenas de dependencias.&lt;/p&gt;
&lt;p&gt;Una posible soluci&amp;oacute;n es desvincular libgdiplus de xlib y hay una &lt;a href="http://lists.ximian.com/pipermail/mono-devel-list/2006-May/018707.html"&gt;soluci&amp;oacute;n aparente&lt;/a&gt;, pero mientras esto no sea oficial, seguiremos sufriendo la dependencia....&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/dependencias_de_gdi</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/dependencias_de_gdi</guid>
      <pubDate>Wed, 25 Feb 2009 15:47:53 GMT</pubDate>
    </item>
    <item>
      <title>MonoMerge</title>
      <description>&lt;p&gt;Hay diferentes utilidades distribu&amp;iacute;das con &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt;, las cuales permitenrealizar operaciones sobre assemblies (como mkbundle y el &lt;a href="http://www.mono-project.com/Linker"&gt;linker&lt;/a&gt;). Sin embargo, hay una que siempre me ha gustado mucho: &lt;a href="http://evain.net/blog/articles/trackback/278"&gt;MonoMerge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;MonoMerge utiliza Cecil para unir dos o m&amp;aacute;s assemblies en uno solo.&lt;/p&gt;
&lt;p&gt;Hoy necesitaba hacer esto dentro de un peque&amp;ntilde;o programa en boo. Aqu&amp;iacute; est&amp;aacute; el c&amp;oacute;digo:&lt;/p&gt;
&lt;pre class="c-sharp" name="code"&gt;
// Importar monomerge
import Mono.Merge from "monomerge.exe"

// Algunas variables
rutaOrigen1 = "origenPrincipal.exe"
rutaOrigen2 = "origenSegundario.exe"
rutaDestino = "final.exe"

// Generar
print "Generando ejecutable..."
mergeContext = MergeContext ()
mergeContext.OutputPath = rutaDestino
mergeContext.Assemblies.Add (rutaOrigen1)
mergeContext.Assemblies.Add (rutaOrigen2)
primaryAssembly = AssemblyFactory.GetAssembly (rutaOrigen1)
secondaryAssembly = AssemblyFactory.GetAssembly (rutaOrigen2)
fix = FixReflectionAfterMerge (mergeContext, primaryAssembly, primaryAssembly)
fix.Process ()
AssemblyFactory.SaveAssembly (primaryAssembly, rutaDestino)
&lt;/pre&gt;
&lt;p&gt;
Ser&amp;iacute;a bueno tener otra forma m&amp;aacute;s simple de hacer esto, pero es mucho m&amp;aacute;s simple que utilizar Cecil directamente ;)&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/monomerge</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/monomerge</guid>
      <pubDate>Thu, 08 Jan 2009 18:13:02 GMT</pubDate>
    </item>
    <item>
      <title>Lambda simplificado 2</title>
      <description>&lt;p&gt;Hace algunos meses &lt;a href="http://www.juancri.com/blog/lambda_simplificado"&gt;escrib&amp;iacute;&lt;/a&gt; sobre la notaci&amp;oacute;n que podr&amp;iacute;a tener c# para tener lambda simplificado. En ese momento todavía desconoc&amp;iacute;a que C# ya tiene soporte para lambda mucho m&amp;aacute;s simple en su versión 3. Entonces, podemos escribri algo como&lt;/p&gt;
&lt;pre class="c-sharp" name="code"&gt;
using System;

delegate string CrearString ();

public class Test
{
	public static void Main ()
	{
		Escribir (() =&gt; DateTime.Now.ToString ());
	}
	
	private static void Escribir (CrearString crear)
	{
		Console.WriteLine (crear ());
	}
}
&lt;/pre&gt;
&lt;p&gt;Esto nos permitiría, en el caso de Log4net, escribir esto:&lt;/p&gt;
&lt;pre class="c-sharp" name="code"&gt;
logger.Debug (() =&gt; "Ejecutando función de " + nombreX + " con parámetro " + z);
&lt;/pre&gt;
&lt;p&gt;Lamentablemente, para que esto fuera posible, ILog tendría que soportar los esta sobrecarga. Pero podemos extender ILog, así:&lt;/p&gt;
&lt;pre class="c-sharp" name="code"&gt;
using System;
using log4net;
using log4net.Config;

public delegate string CrearString ();

public static class ILogExtensions
{
	public static void Debug (this ILog log, CrearString crear)
	{
		if (!log.IsDebugEnabled)
			return;
		
		log.Debug (crear ());
	}
	
	public static void Main ()
	{
		BasicConfigurator.Configure();
		ILog log = LogManager.GetLogger (typeof (ILogExtensions));
		log.Debug (() =&gt; "Prueba a las " + DateTime.Now);
	}
}
&lt;/pre&gt;
&lt;p&gt;:D&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/lambda_simplificado_2</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/lambda_simplificado_2</guid>
      <pubDate>Tue, 18 Nov 2008 04:34:41 GMT</pubDate>
    </item>
    <item>
      <title>Presentando FacturaSharp</title>
      <description>&lt;p&gt;Hace algunos d&amp;iacute;as, en la &lt;a href="http://www.mono-hispano.org/wiki/Listas_de_correo"&gt;lista de correo&lt;/a&gt; de &lt;a href="http://www.mono-hispano.org/"&gt;Mono Hispano&lt;/a&gt;, comenzamos a &lt;a href="https://listas.hispalinux.es/pipermail/mono-hispano/2008-November/009773.html"&gt;discutir&lt;/a&gt; sobre el desarrollo de una plataforma abierta de &lt;a href="http://es.wikipedia.org/wiki/Factura_electr%C3%B3nica"&gt;facturaci&amp;oacute;n electr&amp;oacute;nica&lt;/a&gt; sobre &lt;a href="http://mono-project.com/"&gt;Mono&lt;/a&gt;. Luego de algunos d&amp;iacute;as, hoy se ha &lt;a href="https://listas.hispalinux.es/pipermail/mono-hispano/2008-November/009795.html"&gt;anunciado oficialmente&lt;/a&gt; FacturaSharp.&lt;/p&gt;
&lt;p&gt;Con este puntapi&amp;eacute;, comenzamos la etapa de discusi&amp;oacute;n de licenciamiento, arquitectura y otros temas de planificaci&amp;oacute;n. Si est&amp;aacute;s interesado, puedes visitar:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://code.google.com/p/factura-sharp/"&gt;Factura Sharp en Google Code&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://groups.google.com/group/factura-sharp-desarrollo"&gt;Grupo de discusi&amp;oacute;n de desarrollo en espa&amp;ntilde;ol&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/presentando_facturasharp</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/presentando_facturasharp</guid>
      <pubDate>Fri, 14 Nov 2008 19:44:56 GMT</pubDate>
    </item>
    <item>
      <title>Nombres, datos, metadatos, tags...</title>
      <description>&lt;p&gt;Hay informaci&amp;oacute;n en muchas partes, y no solo informaci&amp;oacute;n diferente; tambi&amp;eacute;n vivimos con informaci&amp;oacute;n replicada en distintos formatos y lugares.&lt;/p&gt;
&lt;p&gt;Un ejemplo claro es el reproductor de M&amp;uacute;sica.&lt;/p&gt;
&lt;p&gt;&lt;img width="150" height="83" src="http://www.juancri.com/imagenes/posts/metadatos1.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Si tenemos archivos en la base de un reproductor como &lt;a href="http://banshee-project.org/"&gt;Banshee&lt;/a&gt;, podemos cambiar la informaci&amp;oacute;n sobre un track (t&amp;iacute;tulo, &amp;aacute;lbum o artista). Esta informaci&amp;oacute;n entonces se actualiza en la base de datos interna. Opcionalmente, los metadatos tambi&amp;eacute;n se escriben de vuelta al archivo (en formatos como el &lt;a href="http://www.id3.org/"&gt;ID3&lt;/a&gt; tag). Aunque as&amp;iacute; fuera, hay otro lugar donde estos datos se almacenan y es el sistema de archivos. Generalmente, tenemos nuestra biblioteca ordenada en la forma artista/&amp;aacute;lbum/canci&amp;oacute;n.extensi&amp;oacute;n (por ejemplo: The Corrs/The Corrs Unplugged/Runaway.mp3), incluso, s&amp;oacute;lo el nombre del archivo podr&amp;iacute;a tener esta informaci&amp;oacute;n (sin contar a los directorio)&lt;/p&gt;
&lt;p&gt;&lt;img width="659" height="83" src="http://www.juancri.com/imagenes/posts/metadatos2.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Todo funciona a la perfecci&amp;oacute;n hasta que una de estas fuentes de datos cambia, sin que el resto se sincronice. Esto no es un problema para un usuario avanzado, pero imaginen a su madre (o abuela) sentada frente a la pantalla &amp;iquest;le interesa saber la diferencia entre los metadatos de un archivo y el nombre del mismo? &amp;iquest;o podr&amp;aacute; darse cuenta de que cuando cambia el nombre del archivo, estos datos no se ven reflejados en el reproductor de audio?. Este es un gran desaf&amp;iacute;o para el ambiente de escritorio. Incluso, si&amp;nbsp; tenemos dos reproductores de audio (Rythmbox y Banshee), sus bases de datos son distintas y, por lo tanto, ya tenemos la informaci&amp;oacute;n en 4 o 5 lugares distintos.&lt;/p&gt;
&lt;p&gt;Los amigos de Microsoft anunciaron con bombos y platillos &lt;a href="http://www.youtube.com/watch?v=HcfLONH_Yrk"&gt;WinFS&lt;/a&gt;, ya hace varios a&amp;ntilde;os. WinFS, junto a Avalon e &amp;Iacute;ndigo eran los pilares de lo que hasta entonces se conoc&amp;iacute;a como Longhorn, hoy Windows Vista (tambi&amp;eacute;n conocido como Windows &lt;a href="http://es.wikipedia.org/wiki/Bosta"&gt;Bosta&lt;/a&gt;). Finalmente, result&amp;oacute; ser un &lt;a href="http://es.wikipedia.org/wiki/Vaporware"&gt;vaporware&lt;/a&gt;, y de los grandes, ya que caus&amp;oacute; mucha expectaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Al otro lado de la calle, imagino a GNOME con su propia base de datos de multimedia (tal vez puede ser una API con distintas implementaciones). Las aplicaciones de audio entonces, utilizan esta base de datos com&amp;uacute;n. As&amp;iacute;, el escritorio adem&amp;aacute;s puede proveer una forma simple de navegar estos archivos, en Nautilus, mostrando los metadatos y no necesariamente los nombres reales. Cuando los archivos son copiados a otras unidades, el entorno puede renombrarlos para reflejar el contenido y guardar en ellos el ID3 para mantener compatibilidad con otros dispositivos y ambientes.&lt;/p&gt;
&lt;p&gt;&lt;img width="223" height="250" src="http://www.juancri.com/imagenes/posts/metadatos3.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Banshee, hasta ahora, permite sincronizar los cambios en metadatos hacia los archivos (ID3) y hacia los nombres (disponible en SVN trunk).&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/nombres_datos_metadatos_tags</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/nombres_datos_metadatos_tags</guid>
      <pubDate>Fri, 07 Nov 2008 03:42:02 GMT</pubDate>
    </item>
    <item>
      <title>Mono en Encuentro Linux 2008</title>
      <description>&lt;p&gt;Como ya cont&amp;eacute; antes, este a&amp;ntilde;o, Mono estuvo presente por primera vez en el Encuentro Linux a trav&amp;eacute;s de Mono Hispano.&lt;/p&gt;
&lt;p&gt;En la clausura, quisimos hacer algo diferente y regalamos bananas a todos los asistentes.&lt;/p&gt;
&lt;p&gt;&lt;img width="640" height="480" src="http://fotos.juancri.com/d/1438-1/DSC04845.JPG" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Cada banana iba acompa&amp;ntilde;ada de un peque&amp;ntilde;o logo de Mono y, para los desarrolladores, se entreg&amp;oacute; toda la informaci&amp;oacute;n que nos fue posible. Nuestra principal misi&amp;oacute;n era integrar m&amp;aacute;s desarrolladores a la lista de Mono Hispano. Recuerden que pueden inscribirse y tambi&amp;eacute;n visitarnos en IRC (#mono-hispano en GIMPNet).&lt;/p&gt;
&lt;p&gt;Como una plataforma moderna, ofrecimos nuestro propio garbage collector:&lt;/p&gt;
&lt;p&gt;&lt;img width="640" height="480" src="http://fotos.juancri.com/d/1336-1/DSC04808.JPG" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;M&amp;aacute;s fotos:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04845.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1437-2/DSC04845.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/d/1449-2/DSC04849.JPG"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1449-2/DSC04849.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04846.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1440-2/DSC04846.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04847.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1443-2/DSC04847.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04810.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1341-2/DSC04810.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04811.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1344-2/DSC04811.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04808.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1335-2/DSC04808.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04798.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1305-2/DSC04798.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04855.JPG.html"&gt;&lt;img width="113" height="150" border="0" src="http://fotos.juancri.com/d/1467-5/DSC04855.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04859.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1479-2/DSC04859.JPG" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/24/DSC04857.JPG.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1473-2/DSC04857.JPG" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;El resto en &lt;a href="http://fotos.juancri.com/v/elinux2008/"&gt;http://fotos.juancri.com/v/elinux2008/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/mono_en_encuentro_linux_2008</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/mono_en_encuentro_linux_2008</guid>
      <pubDate>Sun, 26 Oct 2008 04:35:27 GMT</pubDate>
    </item>
    <item>
      <title>Encuentro Linux 2008</title>
      <description>&lt;p&gt;Desde el mi&amp;eacute;rcoles 22 hasta hoy, viernes 24, hemos estado participando del &lt;a href="http://2008.encuentrolinux.cl/"&gt;Noveno Encuentro Linux&lt;/a&gt;, en la &lt;a href="http://www.udec.cl"&gt;Universidad de Concepci&amp;oacute;n&lt;/a&gt;. Durante este evento, &lt;a href="http://www.mono-hispano.org/"&gt;Mono Hispano&lt;/a&gt; ha estado presente con un peque&amp;ntilde;o stand donde hemos mostrado aplicaciones ya desarrolladas en mono y a la vez invitar a los desarrolladores a unirse a la comunidad, incorpor&amp;aacute;ndose a la lista de correo e IRC. Muchas personas tienen dudas sobre qu&amp;eacute; es mono y cu&amp;aacute;les son sus caracter&amp;iacute;sticas. Invitamos a todos aquellos que necesiten m&amp;aacute;s informaci&amp;oacute;n y ayuda espec&amp;iacute;fica a que nos contacten.&lt;/p&gt;
&lt;p&gt;Como parte de las actividades, ma&amp;ntilde;ana estaremos repartiendo pl&amp;aacute;tanos gratis (free de free banana) a los asistentes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fotos.juancri.com/v/elinux2008/mono22/1.jpg.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1174-2/1.jpg" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://fotos.juancri.com/v/elinux2008/mono22/DSC04751_JPG.jpg.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1179-2/DSC04751_JPG.jpg" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/mono22/DSC04752_JPG.jpg.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1182-2/DSC04752_JPG.jpg" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/mono22/DSC04758_JPG.jpg.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1185-2/DSC04758_JPG.jpg" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/mono22/DSC04759_JPG.jpg.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1188-2/DSC04759_JPG.jpg" alt="" /&gt;&lt;/a&gt; &lt;a href="http://fotos.juancri.com/v/elinux2008/mono22/DSC04760_JPG.jpg.html"&gt;&lt;img width="150" height="113" border="0" src="http://fotos.juancri.com/d/1191-2/DSC04760_JPG.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pueden ver m&amp;aacute;s fotos del encuentro en &lt;a href="http://fotos.juancri.com/v/elinux2008"&gt;http://fotos.juancri.com/v/elinux2008&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/encuentro_linux_2008</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/encuentro_linux_2008</guid>
      <pubDate>Fri, 24 Oct 2008 04:34:10 GMT</pubDate>
    </item>
    <item>
      <title>Charlas Mono</title>
      <description>&lt;p&gt;La pr&amp;oacute;xima semana, &lt;a href="http://es.wikipedia.org/wiki/Concepci%C3%B3n_(Chile)"&gt;Concepci&amp;oacute;n&lt;/a&gt; se convertir&amp;aacute; en la capital del software libre gracias a la realizaci&amp;oacute;n del &lt;a href="http://2008.encuentrolinux.cl/"&gt;Encuentro Linux&lt;/a&gt;. El mi&amp;eacute;rcoles 22, durante el &lt;a href="http://2008.encuentrolinux.cl/index.php?option=com_content&amp;amp;task=view&amp;amp;id=34"&gt;OpenDay&lt;/a&gt;, &lt;a href="http://www.joil.cl"&gt;Jos&amp;eacute; Pino (aka Joil)&lt;/a&gt; dar&amp;aacute; una charla sobre &lt;a href="http://www.juancri.com/tags/mono"&gt;Mono&lt;/a&gt;. Adem&amp;aacute;s, estaremos presentes durante todo el encuentro como parte de &lt;a href="http://www.mono-hispano.org/"&gt;Mono Hispano&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Un d&amp;iacute;a antes, el martes 21, dar&amp;eacute; una charla titulada &amp;quot;&lt;a href="http://www.facebook.com/event.php?eid=31397777822"&gt;Mono en la jungla del software&lt;/a&gt;&amp;quot;, en la &lt;a href="http://www.ubb.cl"&gt;Universidad del B&amp;iacute;o-B&amp;iacute;o&lt;/a&gt; a las 5pm. Esta actividad es organizada por &lt;a href="http://www.facebook.com/profile.php?id=604174215"&gt;Gabriel (aka DrStein)&lt;/a&gt;, quien prometi&amp;oacute; jugo y galletitas.&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/charlas_mono</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/charlas_mono</guid>
      <pubDate>Wed, 15 Oct 2008 22:05:45 GMT</pubDate>
    </item>
    <item>
      <title>Mono 2.0!</title>
      <description>&lt;p&gt;Se ha &lt;a href="http://www.mono-project.com/news/archive/2008/Oct-06.html"&gt;lanzado oficialmente&lt;/a&gt; &lt;a href="http://mono-project.com"&gt;Mono&lt;/a&gt; 2.0.&lt;/p&gt;
&lt;p&gt;Las novedades m&amp;aacute;s importantes:&lt;/p&gt;
&lt;p&gt;Incluye APIs de acceso a datos (ADO.NET), Windows Forms, Linq y otras, adem&amp;aacute;s de bibliotecas espec&amp;iacute;ficas de Mono como Cecil y Mono.Posix.&lt;/p&gt;
&lt;p&gt;El compilador de C# incluye soporte para Linq. Adem&amp;aacute;s se incluyen otras utilidades como el esperado debugger, Gendarme, Mono Linker y otros.&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Felicidades a todos quienes colaboraron para sacar adelante este release tan esperado!&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/mono_2_0</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/mono_2_0</guid>
      <pubDate>Mon, 06 Oct 2008 06:23:57 GMT</pubDate>
    </item>
    <item>
      <title>Lanzado Npgsql2</title>
      <description>&lt;p&gt;Reci&amp;eacute;n ha sido &lt;a href="http://lists.ximian.com/pipermail/mono-list/2008-October/039799.html"&gt;lanzado&lt;/a&gt; &lt;a href="http://npgsql.projects.postgresql.org/"&gt;Npgsql2&lt;/a&gt;. Esta biblioteca escrita totalmente en C# permite conectar a &lt;a href="http://www.postgresql.org"&gt;PostgreSQL&lt;/a&gt; sobre &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Common_Language_Infrastructure"&gt;CLI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Esta versi&amp;oacute;n es la estable para la versi&amp;oacute;n 2.0 y 3.5 del framework. Entre los logros de Npgsql se encuentra el ser un componente imprescindible de JuanCri.com ;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/lanzado_npgsql2</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/lanzado_npgsql2</guid>
      <pubDate>Mon, 06 Oct 2008 05:32:35 GMT</pubDate>
    </item>
    <item>
      <title>Reunión Mono</title>
      <description>&lt;p&gt;Ma&amp;ntilde;ana, martes 9, a las 19:30 Hrs. nos reuniremos los usuarios de &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt; en Chile. El lugar ser&amp;aacute; el Pizza Hut de Guardia Vieja, en providencia:&lt;/p&gt;
&lt;p&gt;&lt;iframe height="350" frameborder="0" width="425" scrolling="no" src="http://maps.google.com/maps?f=q&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=guardia+vieja+105,+providencia,+chile&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=47.301626,79.101563&amp;amp;ie=UTF8&amp;amp;z=14&amp;amp;ll=-33.415037,-70.606127&amp;amp;output=embed&amp;amp;s=AARTsJolZD7Z9wmjgJ8Pr_4BkTuLTF6BMA" marginwidth="0" marginheight="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;small&gt;&lt;a style="color: rgb(0, 0, 255); text-align: left;" href="http://maps.google.com/maps?f=q&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=guardia+vieja+105,+providencia,+chile&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=47.301626,79.101563&amp;amp;ie=UTF8&amp;amp;z=14&amp;amp;ll=-33.415037,-70.606127&amp;amp;source=embed"&gt;Ver mapa m&amp;aacute;s grande&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Los esperamos!&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/reunion_mono</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/reunion_mono</guid>
      <pubDate>Mon, 08 Sep 2008 15:09:19 GMT</pubDate>
    </item>
    <item>
      <title>Cambio de API en Service Pack</title>
      <description>&lt;p&gt;El problema es el siguiente: Instalamos una aplicaci&amp;oacute;n ASP.NET 2.0 y todo funciona de maravillas. Movemos la aplicaci&amp;oacute;n a otro PC y &amp;iexcl;bang!, ya no corre. La raz&amp;oacute;n es que no encuentra una propiedad de &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.typename.aspx"&gt;SqlParameter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Al ver la &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.typename.aspx"&gt;documentaci&amp;oacute;n&lt;/a&gt;, descubro que una propiedad est&amp;aacute; disponible desde .NET 2.0 SP1 en adelante... es decir, &amp;iexcl;se agregan elementos a la API en un service pack!&lt;/p&gt;
&lt;p&gt;Tenemos dos soluciones: No utilizamos la propiedad o subimos los requerimientos m&amp;iacute;nimos a .NET 2.0 SP1... &amp;iexcl;plop! (voto por la primera)&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/cambio_de_api_en_service_pack</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/cambio_de_api_en_service_pack</guid>
      <pubDate>Tue, 27 May 2008 13:44:06 GMT</pubDate>
    </item>
    <item>
      <title>Lambda simplificado</title>
      <description>&lt;p&gt;Hoy estaba agregando &lt;a href="http://logging.apache.org/log4net/"&gt;Log4net&lt;/a&gt; a un proyecto y, por primera vez, decid&amp;iacute; comprobar cada llamada al logger con IsDebugEnabled, IsInfoEnabled, etc. Esto es muy &amp;uacute;til para optimizar el c&amp;oacute;digo y no construir strings innecesarios. Por ejemplo, esta expresi&amp;oacute;n:&lt;/p&gt;
&lt;pre name="code" class="c-sharp"&gt;logger.Debug (&amp;quot;Ejecutando funci&amp;oacute;n de &amp;quot; + nombreX + &amp;quot; con par&amp;aacute;metro &amp;quot; + z);&lt;/pre&gt;
&lt;p&gt;En este caso, la concatenaci&amp;oacute;n de strings se realizar&amp;aacute; antes de llamar al m&amp;eacute;todo. Si el debug est&amp;aacute; desactivado, estaremos concatenando strings por las puras. Para corregir esto, podemos comprobar antes que el debug est&amp;eacute; activado, as&amp;iacute;:&lt;/p&gt;
&lt;pre name="code" class="c-sharp"&gt;if (logger.IsDebugEnabled) logger.Debug (&amp;quot;Ejecutando funci&amp;oacute;n de &amp;quot; + nombreX + &amp;quot; con par&amp;aacute;metro &amp;quot; + z);&lt;/pre&gt;
&lt;p&gt;Pero es bastante tedioso y repetitivo. Una soluci&amp;oacute;n ser&amp;iacute;a que en vez de enviar strings concatenados, envi&amp;aacute;ramos la expresi&amp;oacute;n. Esto se puede hacer con expresiones &lt;a href="http://en.wikipedia.org/wiki/Closure_(computer_science)"&gt;lambda (closures o m&amp;eacute;todos an&amp;oacute;nimos)&lt;/a&gt;. Podr&amp;iacute;amos definir ILog.Debug as&amp;iacute;:&lt;/p&gt;
&lt;pre name="code" class="c-sharp"&gt;
public delegate string CreateString ();
void Debug (CreateString create);
&lt;/pre&gt;
&lt;p&gt;De este modo, el m&amp;eacute;todo Debug ser&amp;iacute;a el encargado de verificar si el debug est&amp;aacute; habilitado y, s&amp;oacute;lo en ese caso, llamar&amp;iacute;a a la expresi&amp;oacute;n para concatenar el texto. Podr&amp;iacute;amos llamar a este m&amp;eacute;todo de esta forma:&lt;/p&gt;
&lt;pre name="code" class="c-sharp"&gt;logger.Debug (delegate { return &amp;quot;Ejecutando funci&amp;oacute;n de &amp;quot; + nombreX + &amp;quot; con par&amp;aacute;metro &amp;quot; + z; });&lt;/pre&gt;
&lt;p&gt;El problema es que aqu&amp;iacute; tambi&amp;eacute;n agregamos demasiado c&amp;oacute;digo para ser una expresi&amp;oacute;n simple. Lo ideal, para m&amp;iacute;, ser&amp;iacute;a hacer una llamada como esta:&lt;/p&gt;
&lt;pre name="code" class="c-sharp"&gt;logger.Debug ( { &amp;quot;Ejecutando funci&amp;oacute;n de &amp;quot; + nombreX + &amp;quot; con par&amp;aacute;metro &amp;quot; + z); } );&lt;/pre&gt;
&lt;p&gt;Ser&amp;iacute;a lo m&amp;aacute;s simple. Al agregar las llaves &amp;quot;{ }&amp;quot;, estar&amp;iacute;amos dici&amp;eacute;ndole al compilador que queremos usar un m&amp;eacute;todo an&amp;oacute;nimo. Aqu&amp;iacute; nos evitar&amp;iacute;amos usar tanto &amp;quot;delegate&amp;quot; como &amp;quot;return&amp;quot;, que son palabras clave obvias en este caso.&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/lambda_simplificado</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/lambda_simplificado</guid>
      <pubDate>Tue, 06 May 2008 21:10:59 GMT</pubDate>
    </item>
    <item>
      <title>Hola Monos</title>
      <description>&lt;p&gt;Esta es una prueba y a la vez una bienvenida a los lectores de &lt;a href="http://planeta.mono-hispano.org/"&gt;Planeta Mono Hispano&lt;/a&gt;. Una menci&amp;oacute;n especial a &lt;a href="http://www.joil.cl/"&gt;Joil&lt;/a&gt; que finalmente configur&amp;oacute; el sitio y los feeds. Para obtener m&amp;aacute;s informaci&amp;oacute;n pueden visitar:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.mono-hispano.org"&gt;Mono Hispano&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://planeta.mono-hispano.org/"&gt;Planeta&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.mono-hispano.org/index.php?title=Listas_de_correo"&gt;Lista de correo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://www.juancri.com/blog/hola_monos</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/hola_monos</guid>
      <pubDate>Mon, 31 Mar 2008 15:52:15 GMT</pubDate>
    </item>
    <item>
      <title>Weak references</title>
      <description>&lt;p&gt;La clase &lt;a href="http://msdn2.microsoft.com/en-us/library/system.weakreference.aspx"&gt;System.WeakReference&lt;/a&gt; permite almacenar informaci&amp;oacute;n prescindible. En palabras sencillas, podemos guardar una referencia a informaci&amp;oacute;n que no es tan valiosa. Un ejemplo muy com&amp;uacute;n es el uso de cach&amp;eacute;. Si queremos usar cache, podemos hacerlo utilizando esta clase, as&amp;iacute; permitiremos que el garbage collector pueda liberar la memoria utilizada por nuetros datos si es que fuese necesario.&lt;/p&gt;
&lt;p&gt;En la &lt;a href="http://anonsvn.mono-project.com/viewcvs/trunk/mcs/class/corlib/System.Runtime.InteropServices/GCHandle.cs?view=markup"&gt;implementaci&amp;oacute;n&lt;/a&gt; en &lt;a href="http://mono-project.com/"&gt;Mono&lt;/a&gt;, se utiliza internamente la estructura &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.gchandle.aspx"&gt;GCHandle&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://www.juancri.com/blog/weak_references</link>
      <guid isPermaLink="True">http://www.juancri.com/blog/weak_references</guid>
      <pubDate>Thu, 07 Feb 2008 01:48:13 GMT</pubDate>
    </item>
  </channel>
</rss>