﻿<?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, 25 Feb 2009 15:47:53 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>RSS.NET: http://www.rssdotnet.com/</generator>
    <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>