<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Can you hear the bits?</title>
	<atom:link href="http://canyouhearthebits.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://canyouhearthebits.wordpress.com</link>
	<description>Este es mi blog sobre tecnologías de información, especialmente mi fuerte, la programación en .Net</description>
	<lastBuildDate>Fri, 12 Dec 2008 14:56:03 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='canyouhearthebits.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Can you hear the bits?</title>
		<link>http://canyouhearthebits.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://canyouhearthebits.wordpress.com/osd.xml" title="Can you hear the bits?" />
	<atom:link rel='hub' href='http://canyouhearthebits.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Evolución de .Net Framework&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/12/12/evolucion-de-net-framework/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/12/12/evolucion-de-net-framework/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 14:56:03 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[.Net Fwk]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=248</guid>
		<description><![CDATA[Con este post hago la introducción para poder empezar a hablar de algunos temas relacionados con el .Net Framework 3.5 y .Net Framework 3.5 SP1. Para hacerlo más directo, veamos la siguiente imagen: En la imagen podemos ver las diferentes versiones del .Net Framework (empezando desde la 2.0) y las características que agregan a la programación. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=248&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Con este post hago la introducción para poder empezar a hablar de algunos temas relacionados con el .Net Framework 3.5 y .Net Framework 3.5 SP1.</p>
<p>Para hacerlo más directo, veamos la siguiente imagen:</p>
<div id="attachment_249" class="wp-caption aligncenter" style="width: 287px"><img class="size-medium wp-image-249" title="Versiones .Net Framewrok" src="http://canyouhearthebits.files.wordpress.com/2008/12/versionesnetframewrok.jpg?w=277&#038;h=300" alt="Las diferentes versiones del Fwk, con sus caracteristicas agregadas." width="277" height="300" /><p class="wp-caption-text">Las diferentes versiones del Fwk, con sus características agregadas.</p></div>
<p>En la imagen podemos ver las diferentes versiones del .Net Framework (empezando desde la 2.0) y las características que agregan a la programación.</p>
<p>Como ya sabemos, con el <strong>Fwk 2.0</strong>, con fecha de salida 07/11/2005, tenemos características como:</p>
<ul>
<li><strong>Common Language Runtime (CLR</strong>): entorno en tiempo de ejecución que ejecuta el código y proporciona servicios que facilitan el proceso de desarrollo.</li>
<li><strong>WinForms</strong>: es una API incluida en el Fwk que se encarga de brindar aplicaciones clientes nativas de Windows.</li>
<li> <strong>Web Services:</strong> el Fwk contiene un conjunto de clases para poder desarrollar Servicios Web seguros e interoperables basados en especificaciones abiertas. Un Web Service es un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones utilizando redes (como Internet).</li>
<li><strong>ASP.Net:</strong> es una tecnología libre que permite a los programadores crear aplicaciones Web dinámicas. El  Fwk 2.0 incorpora significativas mejoras en todas las áreas de ASP.NET, agrega controles nuevos, posibilidad de SKINs, Master Page, WebParts, manejo de perfiles, etc.</li>
<li><strong>ADO.Net:</strong> se incorporaron mejoras en ADO.Net, sobretodo compatibilidad con UDT (tipos definidos por el usuario) y la posibilidad de tener varios MARS (conjuntos de resultados activos).</li>
<li>etc. (<a title="Lo nuevo de .Net Framework 2.0" href="http://msdn.microsoft.com/es-es/library/t357fb32.aspx" target="_blank">ver msdn</a>)</li>
</ul>
<p>Lo interesante viene de la mano del Fwk 3.0 y 3.5.</p>
<p>El <strong>Fwk 3.0</strong>, con fecha de salida 06/11/2006, incluye las siguientes agregados:</p>
<ul>
<li><strong>Windows Communication Foundation (WCF):</strong>  <em>modelo de programación unificado para generar aplicaciones orientadas a servicios. Permite a los programadores generar soluciones con transacción seguras y de confianza, que se integren en diferentes plataformas y que interoperen con las inversiones existentes.</em> Lo más importante de WCF es que permite unificar las distintas tecnologías de servicios, haciendo posible mantener el Servicio de Aplicación, más allá de la implementación &#8220;física&#8221; del mismo (configurable).</li>
<li><strong>Windows Presentation Foundation (WPF):</strong> <em>proporciona a los programadores un modelo de programación unificado con el que generar experiencias de cliente inteligentes de Windows, en las que se incorpora la interfaz de usuario, multimedia y documentos. </em>WPF a diferencia de Windows Forms nos permite crear apliaciones más ricas en contenido y presentación para el usuario.</li>
<li><strong>Windows Workflow Foundation (WF)</strong>: <em>es un componente del Fwk 3.0 que provee un modelo de programación para construir aplicaciones basadas en Workflows o Flujos de Trabajos. Un Workflow es una serie de actividades discretas involucrado en el proceso de negocio.</em></li>
<li><strong>CardSpace:</strong> <em>es la implementación de Microsoft de un metasistema de identidad que permite a los usuarios elegir una de una serie de identidades que les pertenecen, y utilizarla en contextos en que son aceptadas, independientemente de los sistemas de identidad subyacentes donde las identidades se originan y utilizan.</em> O sea, es una implementación integrada que permite hacer que los usuarios se identifiquen en distintos sistemas, sin la necesidad de mantener un usuario y contraseña en cada uno de ellos.</li>
</ul>
<p>Como último tomamos lo más nuevo, el <strong>Fwk 3.5</strong>, con fecha de salida 19/11/2007, incluye los siguientes agregados:</p>
<ul>
<li><strong>LINQ: </strong><em> incorpora eficaces capacidades de consulta a la sintaxis de los lenguajes C# y Visual Basic en forma de patrones de consulta estándar fáciles de aprender. Esta tecnología se puede extender para que sea compatible con cualquier tipo de almacén de datos. .NET Framework 3.5 incluye ensamblados de proveedor de LINQ que habilitan el uso de LINQ para consultar colecciones de .NET Framework (LINQ to Objects), bases de datos de SQL Server (LINQ to SQL), conjuntos de datos ADO.NET (LINQ to DataSet) y documentos XML (LINQ to XML). </em>Este es un tema muy interesante por explorar, asique lo estaré retomando en próximos posts.</li>
<li><strong>AJAX: </strong><em>ASP.NET agrega compatibilidad con el desarrollo de AJAX centrado en el servidor mediante un conjunto de nuevos controles de servidor y nuevas API. Puede habilitar una página ASP.NET 2.0 existente en AJAX agregando un control ScriptManager y un control UpdatePanel, de modo que la página pueda actualizarse sin que sea necesario realizar una actualización de la página completa.</em></li>
<li><strong>REST:</strong> integración de REST en WCF.</li>
<li>además modificaciones importantes en WCF, WPF y WF.</li>
<li>etc. (<a title="Lo nuevo de .Net Framework 3.5" href="http://msdn.microsoft.com/es-es/library/bb332048.aspx" target="_blank">ver msdn</a>)</li>
</ul>
<p>Vale la pena destacar que actualmente se encuentra disponible el <strong>Fwk 3.5 SP1</strong>, con fecha de salida 11/08/2008, dicho Service Pack además de arreglar errores provee nuevas características:</p>
<ul>
<li><strong>ADO.NET Entity Framework:</strong><em> es una biblioteca de datos de alto nivel que aumenta el nivel de abstracción que los desarrolladores necesitamos para trabajar con los datos en las bases de datos relacionales.</em> Brinda todas las clases y herramientas necesarias para poder trabajar en nuestras aplicaciones con objetos, a partir de un modelo de datos subyacente en Base de Datos relacionales. A diferencia de LINQ to SQL, ADO.Net EF no limita sus capacidades de Bases de Datos Sql Server. (ya lo retomaremos)</li>
<li><strong>ADO.NET Data Services:</strong> <em>servicio de publicación y federación de datos con una </em><span lang="ES-AR"><em>interface estándar usando REST.</em> Expone un modelo de objetos (no una base de datos) sobre la web.</span></li>
<li><strong>ASP.NET Dynamic Data: <span style="font-weight:normal;">un<em>a característica que permite la creación rápida de aplicaciones web dirigidas por datos (aplicaciones con ABMs). </em> Permite la creación de aplicaciones web basándose en ASP.NET WebForms y ASP.NET MVC.</span></strong></li>
<li><strong>ASP.NET Routing:</strong> <em>define puntos de entrada a la application.</em> Genera URLs basado en una tabla de ruteo. Es aprovechado por ASP.NET.</li>
<li>se mejoró ASP.NET AJAX, WCF, WPF, WinForms.</li>
</ul>
<p>Saludos!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=248&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/12/12/evolucion-de-net-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>

		<media:content url="http://canyouhearthebits.files.wordpress.com/2008/12/versionesnetframewrok.jpg?w=277" medium="image">
			<media:title type="html">Versiones .Net Framewrok</media:title>
		</media:content>
	</item>
		<item>
		<title>Error: The command copy exited with code 1&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/09/23/error-the-command-copy-exited-with-code-1-en-el-pre-build-o-post-build/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/09/23/error-the-command-copy-exited-with-code-1-en-el-pre-build-o-post-build/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 17:41:30 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[Errores]]></category>
		<category><![CDATA[Error]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=241</guid>
		<description><![CDATA[Problema: Al compilar una librería de clases o ejecutable, aparece un error del tipo &#8220;The command copy &#8230; exited with code 1&#8243;. Solución: Es un error que surge debido a que la librería o ejecutable ejecuta algún comando en los eventos Pre-Build o Post-Build (accesible desde las propiedades del proyecto actual), que en este caso es [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=241&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><em><span style="color:#3366ff;">Problema:</span></em></strong></p>
<p>Al compilar una librería de clases o ejecutable, aparece un error del tipo <em>&#8220;The command copy &#8230; exited with code 1&#8243;</em>.</p>
<p><em><span style="color:#3366ff;"><strong>Solución:</strong></span></em></p>
<p>Es un error que surge debido a que la librería o ejecutable ejecuta algún comando en los eventos Pre-Build o Post-Build (accesible desde las propiedades del proyecto actual), que en este caso es un <em>copy</em>&#8230; Deberíamos estar verificando la correcta sintaxis de los comandos que se ejecutan.</p>
<div id="attachment_242" class="wp-caption aligncenter" style="width: 514px"><a href="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_21.jpg"><img class="size-full wp-image-242" title="PrePostBuild" src="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_21.jpg?w=504&#038;h=276" alt="Configuración Pre-Build y Post-Build" width="504" height="276" /></a><p class="wp-caption-text">Configuración Pre-Build y Post-Build</p></div>
<p><em>En mi caso me surgió este error debido a que una de las carpetas a la cual copiaba la dll no existía.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/241/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=241&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/09/23/error-the-command-copy-exited-with-code-1-en-el-pre-build-o-post-build/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>

		<media:content url="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_21.jpg" medium="image">
			<media:title type="html">PrePostBuild</media:title>
		</media:content>
	</item>
		<item>
		<title>Error: Unhandled exception en WinForms&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/09/10/error-unhandled-exception-en-winforms/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/09/10/error-unhandled-exception-en-winforms/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 20:04:04 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Aplicacion]]></category>
		<category><![CDATA[Error]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=218</guid>
		<description><![CDATA[Como desarrolladores una de las cosas que debemos tener siempre en cuenta es la posibilidad de que una instrucción ocasionalmente produzca una excepción. Para capturar excepciones y manipularlas, lo hacemos con la ayuda de nuestros queridísimos try{}catch{}finally{}. Sin embargo hay veces en que se nos pueden pasar de largo y terminar en lo que se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=218&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Como desarrolladores una de las cosas que debemos tener siempre en cuenta es la posibilidad de que una instrucción ocasionalmente produzca una excepción. Para capturar excepciones y manipularlas, lo hacemos con la ayuda de nuestros queridísimos <em>try{}catch{}finally{}</em>.</p>
<p>Sin embargo hay veces en que se nos pueden pasar de largo y terminar en  lo que se denomina una excepción no manejada o unhandled exception. En esos casos, el resultado es un <del datetime="00">hermoso</del> mensaje del framework como el que se muestra a continuación:</p>
<div id="attachment_227" class="wp-caption aligncenter" style="width: 456px"><a href="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_2.jpg"><img src="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_2.jpg?w=446&#038;h=319" alt="Mensaje de excepción no manejada de WinForm" title="Mensaje de excepción no manejada de WinForm" width="446" height="319" class="size-full wp-image-227" /></a><p class="wp-caption-text">Mensaje de excepción no manejada de WinForm</p></div>
<p>En casos como este, existe la posibilidad de reemplazar este mensaje por uno personalizado, quizás un poco mas amigable que el que nos brinda el framework.<br />
Para personalizar el mensaje, podemos hacer uso del evento <a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.application.threadexception.aspx">Application.ThreadException</a>.</p>
<p><em>Ejemplo:</em></p>
<pre class="brush: csharp;">
static class Program {

    [STAThread]
    static void Main() {
        //Manejamos excepciones no controladas
        Application.ThreadException += App_ThreadException;

        Application.Run(new Form1());
    }

    static void App_ThreadException(object sender, ThreadExceptionEventArgs e) {
        //El usuario desea continuar?
        StringBuilder msg = new StringBuilder();

        msg.AppendLine(&quot;Ooops! ha ocurrido un problema en la aplicación:&quot;);
        msg.AppendLine(e.Exception.Message);
        msg.Append(&quot;¿Desea continuar la ejecución de la aplicación?&quot;);

        DialogResult res = MessageBox.Show(msg.ToString(), &quot;Error inesperado&quot;,
            MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

        if (res == DialogResult.Yes) {
            //Si desea continuar, no hacemos nada
            return;
        }
        else {
            //Si desea salir de la aplicación, la cerramos
            Application.Exit();
        }
    }
}
</pre>
<p>como resultado obtenemos el siguiente mensaje cuando ocurre una excepción no manejada:<br />
<div id="attachment_228" class="wp-caption aligncenter" style="width: 320px"><a href="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_6.jpg"><img src="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_6.jpg?w=310&#038;h=134" alt="Mensaje excepción no manejada personalizado" title="Mensaje excepción no manejada personalizado" width="310" height="134" class="size-full wp-image-228" /></a><p class="wp-caption-text">Mensaje excepción no manejada personalizado</p></div></p>
<p>Obviamente este no es más que un simple ejemplo. Además, cuando ocurre un error de este tipo, podriamos brindar más información o incluso permitirle al usuario enviar un mail que nos notifique que ocurrió un error, junto con la información del mismo, como ser StackTrace, Source, InnerException, etc. O simplemente no hacer nada&#8230;.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/218/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/218/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/218/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=218&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/09/10/error-unhandled-exception-en-winforms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>

		<media:content url="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_2.jpg" medium="image">
			<media:title type="html">Mensaje de excepción no manejada de WinForm</media:title>
		</media:content>

		<media:content url="http://canyouhearthebits.files.wordpress.com/2008/09/screenhunter_6.jpg" medium="image">
			<media:title type="html">Mensaje excepción no manejada personalizado</media:title>
		</media:content>
	</item>
		<item>
		<title>REFLECTION: Invocar un método a partir de un String…</title>
		<link>http://canyouhearthebits.wordpress.com/2008/09/05/reflection-invocar-un-metodo-a-partir-de-un-string%e2%80%a6/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/09/05/reflection-invocar-un-metodo-a-partir-de-un-string%e2%80%a6/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 18:15:07 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Clases e Interfaces]]></category>
		<category><![CDATA[Reflection]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=197</guid>
		<description><![CDATA[En esta segunda entrega les voy a mostrar como hacer para invocar un método, a partir de una cadena de String, la cual contiene simplemente el nombre del método. Si inspeccionamos un poco la clase Type del framework podemos ver que tiene un método llamado Type.GetMethod(), el cual obtiene información de un método. Lo que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=197&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En esta segunda entrega les voy a mostrar como hacer para invocar un método, a partir de una cadena de String, la cual contiene simplemente el nombre del método.</p>
<p>Si inspeccionamos un poco la clase <a href="http://msdn.microsoft.com/es-es/library/system.type(VS.80).aspx">Type</a> del framework podemos ver que tiene un método llamado <a href="http://msdn.microsoft.com/es-es/library/system.type.getmethod(VS.80).aspx">Type.GetMethod()</a>, el cual obtiene información de un método.<br />
Lo que necesitamos saber de este método es que recibe como párametros el <em>nombre del método</em> y opcionalmente un Array con los <em>tipos de los parámetros</em> (para el caso de que exista sobrecargas de método), siendo que nos devuelve el <a href="http://msdn.microsoft.com/es-es/library/system.reflection.methodinfo.aspx">MethodInfo</a> relacionado.<br />
Este <a href="http://msdn.microsoft.com/es-es/library/system.reflection.methodinfo.aspx">MethodInfo</a> tiene una gran cantidad de <a href="http://msdn.microsoft.com/es-es/library/system.reflection.methodinfo_members.aspx">miembros</a>, entre los cuales, los que se destacan son:</p>
<ul>
<li><strong>GetParameters():</strong> obtiene los parámetros del método o constructor especificado.</li>
<li><strong>GetType()</strong>: obtiene el objeto Type de la instancia actual.</li>
<li><strong>Invoke():</strong> realiza la llamada al método.</li>
<li><strong>Attributes:</strong> obtiene los atributos asociados a este método.</li>
<li><strong>IsConstructor.</strong></li>
<li><strong>IsAbstract, IsPrivate, IsPublic, IsStatic, IsVirtual.</strong></li>
<li><strong>ReturnType:</strong> obtiene el tipo de valor devuelto por este método.</li>
<li><strong>Otros.</strong></li>
</ul>
<p>Lo que necesitamos utilizar entonces es el método <a href="http://msdn.microsoft.com/es-es/library/a89hcwhh.aspx">Invoke()</a>. La firma más común de este método es la <em><strong>Invoke(Object obj, Object[] parameters)</strong></em>, donde:</p>
<ul>
<li><strong>obj</strong>: objeto en el que debe invocarse el miembro o constructor. Si el método o constructor es de clase o estático, se pasa <strong>null</strong>. Si, en cambio es un método o constructor de instancia, se debe pasar el objeto en el cual queremos ejecutar ese método.</li>
<li><strong>parameters</strong>: lista de argumentos del método o constructor invocado. Este array debe tener el mismo número, orden y tipo que los parámetros del método o constructor que se va a invocar. Si no hay ningún parámetro, parameters debe ser <strong>null</strong>.</li>
</ul>
<p>Les muestro un ejemplo, en el cual realizo una llamada a un método de clase o estático:</p>
<pre class="brush: csharp;">
//obtengo el tipo
Type tipo = Type.GetType(namespaceTipo);

//obtengo la información del método, sé que no tiene sobrecargas
MethodInfo metodo = tipo.GetMethod(nombreMetodoEstatico);

DataSet ds = new DataSet();

//objeto que devuelve el método de clase
object objVuelta;

//tiene parámetros y sé que es un objeto de tipo DataSet
objVuelta = metodo.Invoke(null, new object[] { ds });
</pre>
<p>otro ejemplo, pero con llamada a método de instancia:</p>
<pre class="brush: csharp;">
//tengo una instancia
MiClase miInstancia = new MiClase();

//obtengo el tipo
Type tipo = miInstancia.GetType();

//Array de tipos
Type[] tiposParametros = new Type[] { typeof(Int32) };

//obtengo la información del método de instancia de la clase MiClase, sobrecarga de Int32
MethodInfo metodo = tipo.GetMethod(nombreMetodoInstancia, tiposParametros);

Int32 parametro = 3;

//invoco el método, con parámetro igual a 3
Object objVuelta = metodo.Invoke(miInstancia, new object[] { parametro });
</pre>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/197/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/197/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=197&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/09/05/reflection-invocar-un-metodo-a-partir-de-un-string%e2%80%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>
	</item>
		<item>
		<title>REFLECTION: Crear una instancia a partir de un String con el nombre de la clase&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/09/02/reflection-crear-una-instancia-a-partir-de-un-string-con-el-nombre-de-la-clase/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/09/02/reflection-crear-una-instancia-a-partir-de-un-string-con-el-nombre-de-la-clase/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 15:00:46 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Clases e Interfaces]]></category>
		<category><![CDATA[Reflection]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=168</guid>
		<description><![CDATA[Hay muchas situaciones en las que se nos hace necesario crear una instancia de una clase a partir de una cadena de caracteres que tenemos almacenada, ya sea para utilizarla en una Factory o para mantener cierta abstracción en el tipo de datos que se maneja. Cualquiera sea el caso, deberíamos tener un String con [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=168&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hay muchas situaciones en las que se nos hace necesario crear una instancia de una clase a partir de una cadena de caracteres que tenemos almacenada, ya sea para utilizarla en una Factory o para mantener cierta abstracción en el tipo de datos que se maneja.<br />
Cualquiera sea el caso, deberíamos tener un String con formato <a href="http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx">&#8220;assembly-qualified name&#8221;</a>.<br />
Comunmente se utiliza el siguiente formato:<br />
<strong><em>&#8220;namespace+NombreClase, assembly&#8221;</em></strong><br />
(Es importante aclarar que la utilización de este String va a ser case-sensitive).</p>
<p><em>Ejemplos de assembly-qualified names: </em></p>
<ul>
<li>&#8220;System.Int32&#8243;</li>
<li>&#8220;Configuracion.General.ClaseGeneral, Configuracion.General&#8221;</li>
<li>&#8220;TopNamespace.SubNameSpace.ClaseContenedora+ClaseAnidada, MiAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089&#8243;</li>
</ul>
<p>Lo primero que debemos hacer es obtener el tipo a partir de la cadena de caracteres:</p>
<pre class="brush: csharp;">
Type tipo = Type.GetType(namespaceControlador);
</pre>
<p>Una vez que tenemos el tipo, debemos obtener el constructor e invocarlo (en el siguiente ejemplo el constructor que se usa es el vacío):</p>
<pre class="brush: csharp;">
IControlador controlador = (IControlador)tipo.GetConstructor(Type.EmptyTypes).Invoke(null);
</pre>
<p>Notar que es necesario tener una interface definida para ese tipo de datos o una clase abstracta de la cual herede, de lo contrario se nos haría casi imposible manejarlo (digo casi porque también podemos ejecutar un método a partir de un String).</p>
<p><strong>GetConstructor(Type.EmptyTypes):</strong> obtiene el constructor a partir de los tipos de los parámetros que el mismo acepta. En este caso obtenemos el constructor que no tiene parámetros, en otros casos deberíamos pasarle un array con los tipos.<br />
<strong>Invoke(null):</strong> invocamos el método (en este caso el constructor) pasandole los parámetros como un array, si le pasamos null es que ejecutamos el método sin parámetros.</p>
<p><em><strong>¿Donde lo podemos utilizar?</strong></em><br />
En el proyecto en que trabajo necesitaba mantener cierta abstracción en cuanto a los controladores para los distintos tipos de tiqueteras fiscales y no fiscales. Entonces, lo que hice es crear una Factory la cual cuando se le especifica un tipo de tiquetera, va a un almacén de datos (Base de Datos o xml) en busca de un String con el nombre del controlador específico. Una vez teniendo ese String, creo el controlador usando reflection y lo uso&#8230; Así logro que el día de mañana si se agrega un nuevo tipo de tiquetera o un nuevo controlador, lo único que debo hacer es redefinir el String del controlador.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/168/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/168/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=168&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/09/02/reflection-crear-una-instancia-a-partir-de-un-string-con-el-nombre-de-la-clase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>
	</item>
		<item>
		<title>Enumeraciones + manipulación de bits = FLAGS&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/08/25/enumeraciones-manipulacion-de-bits-flags/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/08/25/enumeraciones-manipulacion-de-bits-flags/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 15:21:41 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Clases e Interfaces]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=152</guid>
		<description><![CDATA[Primero, lo primero&#8230; qué son las enumeraciones? Una enumeración (enum) es una forma especial de tipo de valor, que deriva de System.Enum y proporciona nombres alternos para los valores de un tipo primitivo subyacente. Un tipo de enumeración tiene un nombre, un tipo subyacente y un conjunto de campos. (corrección) Ejemplo: public enum MessageBoxButtons { [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=152&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Primero, lo primero&#8230; qué son las <strong>enumeraciones</strong>?<br />
Una <a title="Enumeraciones en MSDN" href="http://msdn.microsoft.com/es-es/library/6e3t9w21(VS.80).aspx" target="_blank">enumeración</a> (enum) es una forma especial de tipo de valor, que deriva de <a id="ctl00_rs1_mainContentContainer_ctl01" href="http://msdn.microsoft.com/es-es/library/system.enum%28VS.80%29.aspx">System.Enum</a> y proporciona nombres alternos para los valores de un tipo primitivo subyacente. Un tipo de enumeración tiene un nombre, un tipo subyacente y un conjunto de campos.<em> (corrección)<br />
</em></p>
<p><em>Ejemplo:</em></p>
<pre class="brush: csharp;">
public enum MessageBoxButtons {
    OK,
    OKCancel,
    AbortRetryIgnore,
    YesNoCancel,
    YesNo,
    RetryCancel
}

MessageBoxButtons boton = MessageBoxButtons.YesNo;

if (boton == MessageBoxButtons.YesNo) {
    //comportamiento propio de YesNo
}
else if (boton == MessageBoxButtons.YesNoCancel) {
    //comportamiento propio de YesNoCancel
}
</pre>
<p>En el ejemplo muestro la enumeración de <strong>MessageBoxButtons</strong>, que se utiliza en MessageBox, esta enumeración hace que cada cadena toma un valor (en este caso implícito) empezando por 0. Cada uno de los valores tiene un funcionamiento individual.</p>
<p><em><strong>Si lo que necesitamos es permitir ingresar combinaciones de valores de la enumeración, lo que debemos usar es una enumeración del tipo Flags.</strong></em><br />
Las enumeraciones Flags se basan en la utilización de operaciones entre bits de sus valores. En las operaciones de manipulación de bits se utilizan muy frecuentemente los operadores &amp; (AND), | (OR), ^ (XOR) y ~ (NOT). Si no saben como utilizar estos operadores, en <a href="http://weblogs.asp.net/alessandro/archive/2007/10/02/bitwise-operators-in-c-or-xor-and-amp-amp-not.aspx">este link</a> pueden encontrar una guía en inglés muy interesante.<br />
<em>De antemano les puedo ir diciendo que las combinaciones se hacen (para estos casos) con el operador | y la evaluación de las condiciones con &amp;.</em></p>
<p>La declaración de una enumeración Flags se hace de la siguiente manera:</p>
<pre class="brush: csharp;">
[Flags]
public enum NombreEnumeracion {
    Cadena0 = 0, //opcional
    Cadena1 = 1,
    Cadena2 = 2,
    Cadena3 = 4,
    Cadena4 = 8,
    //...
}
</pre>
<p>Los valores que toman las cadenas son potencias enteras de 2, de ahí el tratamiento de bits.<br />
Nada mejor que un ejemplo para comprender como utlizarlo:</p>
<pre class="brush: csharp;">
[Flags]
public enum TipoLimpieza {
   Ninguna = 0,
   Cliente = 1,
   Servicio = 2,
   Todo = Cliente | Servicio
}
</pre>
<p>esta enumeración la utilicé en una tarea que tuve en la cual debía limpiar el caché de datos en el cliente, en el servidor, o en ambos&#8230;<br />
Acá va la implementación:</p>
<pre class="brush: csharp;">
TipoLimpieza tipo = (TipoLimpieza)objetoTipoLimpieza;

if (tipo == TipoLimpieza.Cliente) {
    //1. limpieza SOLO en cliente
}
if ((tipo &amp; TipoLimpieza.Cliente) == TipoLimpieza.Cliente) {
   //2. limpieza en cliente, ya sea Cliente sólo o Cliente y Servicio
}
if ((tipo &amp; TipoLimpieza.Servicio) == TipoLimpieza.Servicio) {
   //3. limpieza en servicio, ya sea servicio sólo o Servicio y Cliente
}
//notar que por la enumeración 0 (Ninguno) no se hace nada
</pre>
<p>entonces, al utilizarlo con los distintos valores:</p>
<pre class="brush: csharp;">
//cuando:
tipo = TipoLimpieza.Ninguna;
//no se realiza nunguna operación.

//cuando:
tipo = TipoLimpieza.Cliente;
//se ejecuta el código de las condiciones: 1 y 2.

//cuando:
tipo = TipoLimpieza.Servicio;
//se ejecuta el código de la condición: 3.

//cuando:
tipo = TipoLimpieza.Cliente | TipoLimpieza.Servicio;
//se ejecuta el código de la condición: 2 y 3.
</pre>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/152/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/152/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/152/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=152&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/08/25/enumeraciones-manipulacion-de-bits-flags/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>
	</item>
		<item>
		<title>Expresiones Regulares (Regex)&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/08/13/expresiones-regulares-regex/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/08/13/expresiones-regulares-regex/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 16:04:32 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Regex]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=121</guid>
		<description><![CDATA[Es común trabajar con expresiones regulares en los casos en que necesitamos saber si una cadena específica de caracteres cumple un patrón específico (lo que sería un expresión) y realizar alguna acción en base a ello. Si no tienes conocimientos sobre expresiones regulares puedes comenzar aquí. Un ejemplo en el que utilizaríamos expresiones regulares sería [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=121&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Es común trabajar con expresiones regulares en los casos en que necesitamos saber si una cadena específica de caracteres cumple un patrón específico (lo que sería un expresión) y realizar alguna acción en base a ello.<br />
Si no tienes conocimientos sobre expresiones regulares puedes comenzar <a href="http://es.wikipedia.org/wiki/Expresión_regular">aquí</a>.</p>
<p>Un ejemplo en el que utilizaríamos expresiones regulares sería si necesitamos validar que una cadena ingresada por el usuario es un mail válido (cumpliendo con el formato común). También puede utilizarse para reemplazar partes de un texto que cumplen expresiones regulares.</p>
<p>En .Net, contamos con la clase <a href="http://msdn.microsoft.com/es-es/library/system.text.regularexpressions.regex(VS.80).aspx">Regex</a>, la cual nos brinda varios métodos para manejar expresiones regulares.</p>
<pre class="brush: csharp;">
[SerializableAttribute]
public class Regex : ISerializable
</pre>
<p>Les muestro dos ejemplos de la utilización de Regex:<br />
1. Validar los mails ingresados:</p>
<pre class="brush: csharp;">
private const String PATRON_MAIL = @&quot;^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$&quot;;

private void ValidarMails() {
    String[] mails = new String[3];
    mails[0] = &quot;mimail@mail.com&quot;;
    mails[1] = &quot;mimailmail.com&quot;;
    mails[2] = &quot;mimail@mailcom&quot;;

    Regex reg = new Regex(PATRON_MAIL, RegexOptions.Singleline);

    foreach (String mail in mails) {
        if (reg.IsMatch(mail)) {
            Console.WriteLine(&quot;Mail: {0} es válido&quot;, mail);
        }
        else {
            Console.WriteLine(&quot;Mail: {0} es inválido&quot;, mail);
        }
    }
}
</pre>
<p>si es una llamada simple podemos utilizar el método estático:</p>
<pre class="brush: csharp;">
Regex.IsMatch(textoAValidar, patron);
</pre>
<p><em>Resultado:</em><br />
    Mail: mimail@mail.com es válido<br />
    Mail: mimailmail.com es inválido<br />
    Mail: mimail@mailcom es inválido</p>
<p>2. Reemplazar una cadena a través de una expresión regular:</p>
<pre class="brush: csharp;">
private const String PATRON_MAYOR = &quot;[^&gt;]&gt;[^&gt;]&quot;;

private void ReemplazarTexto() {
    String textoACambiar = &quot;numero1&gt;numero2&gt;numero3&quot;;

    Regex rexMayores = new Regex(PATRON_MAYOR, RegexOptions.Singleline);

    String textoNuevo = rexMayores.Replace(textoACambiar,
        delegate(Match m) {
            return String.Format(&quot;{0}&lt;{1}&quot;, m.Value[0], m.Value[2]);
        }
        );

    Console.WriteLine(&quot;Antes {0} ahora {1}&quot;, textoACambiar, textoNuevo);
}
</pre>
<p><em>Resultado</em><br />
    Antes numero1&gt;numero2&gt;numero3 ahora numero1&lt;numero2&lt;numero3</p>
<p>En el ejemplo hicimos uso de un método anónimo el cual recibe como párametro un objeto Match, este método es el encargado de devolver el texto por el cual se reemplazará la cadena que coincide con la expresión regular. El método anónimo será ejecutado dos veces, una vez por cada fragmento de texto que cumpla con la expresión regular.</p>
<p>Ejemplos y más información sobre expresiones regulares: <a href="http://www.regular-expressions.info/">http://www.regular-expressions.info/</a>.<br />
Más ejemplos en .Net: <a href="http://msdn.microsoft.com/es-es/library/kweb790z(VS.80).aspx">http://msdn.microsoft.com/es-es/library/kweb790z(VS.80).aspx</a>.<br />
Una herramienta muy útil para crear y probar expresiones regulares es Rad Software Regular Expression Designer: <a href="http://www.radsoftware.com.au/regexdesigner/">http://www.radsoftware.com.au/regexdesigner/</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/121/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/121/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/121/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=121&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/08/13/expresiones-regulares-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>
	</item>
		<item>
		<title>Código fuente en WordPress!&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/08/11/codigo-fuente-en-wordpress/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/08/11/codigo-fuente-en-wordpress/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 12:57:04 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=87</guid>
		<description><![CDATA[Para darle formato a un código fuente que subas a WordPress sólo tienes que encerrar el código fuente con los tags: &#8230;Código fuente&#8230; donde lenguajeCodigoFuente es alguno de los siguientes: cpp csharp css delphi html java jscript php python ruby sql vb xml Como resultado obtenemos: Es por demás de estético.. Gracias WordPress por incluirlo! [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=87&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para darle formato a un código fuente que subas a WordPress sólo tienes que encerrar el código fuente con los tags:</p>
<p><strong><span style="color:#3366ff;"><br />
&#8230;Código fuente&#8230;<br />
</span></strong></p>
<p>donde lenguajeCodigoFuente es alguno de los siguientes:</p>
<ul>
<li>cpp</li>
<li>csharp</li>
<li>css</li>
<li>delphi</li>
<li>html</li>
<li>java</li>
<li>jscript</li>
<li>php</li>
<li>python</li>
<li>ruby</li>
<li>sql</li>
<li>vb</li>
<li>xml</li>
</ul>
<p>Como resultado obtenemos:</p>
<p><a href="http://canyouhearthebits.files.wordpress.com/2008/08/screenhunter_11.jpg"><img class="aligncenter size-full wp-image-94" src="http://canyouhearthebits.files.wordpress.com/2008/08/screenhunter_11.jpg?w=636&#038;h=121" alt="" width="636" height="121" /></a></p>
<p>Es por demás de estético..<br />
Gracias WordPress por incluirlo!<br />
Más que gracias  SyntaxHighlighter por darnos la funcionalidad&#8230;</p>
<p>Para más información en WordPress vea el <a title="How do I post source code" href="http://faq.wordpress.com/2007/09/03/how-do-i-post-source-code/" target="_blank">how to&#8230;</a></p>
<p>Para más información sobre SyntaxHighlighter y para aplicarlo sobre páginas propias u otros blogs, <a title="SyntaxHighlighter" href="http://code.google.com/p/syntaxhighlighter/" target="_blank">visitelo aquí</a>.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/87/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/87/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/87/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=87&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/08/11/codigo-fuente-en-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>

		<media:content url="http://canyouhearthebits.files.wordpress.com/2008/08/screenhunter_11.jpg" medium="image" />
	</item>
		<item>
		<title>Como implementar correctamente IDisposable&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/08/08/como-implementar-correctamente-idisposable/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/08/08/como-implementar-correctamente-idisposable/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 13:43:37 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Clases e Interfaces]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=68</guid>
		<description><![CDATA[En este post vemos como se implementa correctamente IDisposable.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=68&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Primero lo primero&#8230; La interface IDisposable define un método &#8220;personalizado&#8221; para liberar los recursos administrados y no administrados.<br />
IDisposable se usa principalmente para liberar los recursos no administrados, ya que el recolector de elementos no utilizados (GC: Garbage Collector) libera automáticamente la memoria asignada a un objeto administrado cuando ya no se utiliza, pero no se puede prever cuándo se producirá la recolección de elementos no utilizados. Además, el GC no reconoce recursos no administrados, como ser objetos de tipos File y Font.</p>
<p>A continuación, les muestro el código de ejemplo y aclaraciones sobre la implementación de una clase IDisposable:</p>
<pre class="brush: csharp;">
public class ClaseDisposable : IDisposable {
    // Recursos manejados
    private Component componentes = new Component();
    private DataSet dataSetDisposable = new DataSet();

    // Indica si ya se llamo al método Dispose. (default = false)
    private Boolean disposed;

    /// &lt;summary&gt;
    /// Implementación de IDisposable. No se sobreescribe.
    /// &lt;/summary&gt;
    public void Dispose() {
        this.Dispose(true);
        // GC.SupressFinalize quita de la cola de finalización al objeto.
        GC.SuppressFinalize(this);
    }

    /// &lt;summary&gt;
    /// Limpia los recursos manejados y no manejados.
    /// &lt;/summary&gt;
    /// &lt;param name=&quot;disposing&quot;&gt;
    /// Si es true, el método es llamado directamente o indirectamente
    /// desde el código del usuario.
    /// Si es false, el método es llamado por el finalizador
    /// y sólo los recursos no manejados son finalizados.
    /// &lt;/param&gt;
    protected virtual void Dispose(bool disposing) {
        // Preguntamos si Dispose ya fue llamado.
        if (!this.disposed) {
            if (disposing) {
                // Llamamos al Dispose de todos los RECURSOS MANEJADOS.
                this.componentes.Dispose();
                this.dataSetDisposable.Dispose();
            }

            // Acá finalizamos correctamente los RECURSOS NO MANEJADOS
            // ...

        }
        this.disposed = true;
    }

    /// &lt;summary&gt;
    /// Destructor de la instancia
    /// &lt;/summary&gt;
    ~ClaseDisposable() {
        this.Dispose(false);
    }
}
</pre>
<p>Podemos agregar que el método <strong>Dispose(bool disposing)</strong> es <strong>virtual</strong>, por lo que podemos redefinirlo en clases que hereden de esta, por lo cual en dichas clases no necesitamos implementar nuevamente <strong>IDisposable</strong>. Un ejemplo de este comportamiento es un Formulario que hereda (obviamente) de <strong>Form</strong>, como vemos a continuación, en Designer tenemos el siguiente código:</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Clean up any resources being used.
/// &lt;/summary&gt;
/// &lt;param name=&quot;disposing&quot;&gt;true if managed resources should be disposed; otherwise, false.&lt;/param&gt;
protected override void Dispose(bool disposing) {
     if (disposing &amp;&amp; (components != null)) {
          components.Dispose();
     }
     base.Dispose(disposing);
}
</pre>
<p>También podemos ver como sería la <strong>llamada a Dispose</strong>. Hay dos tipos de llamadas, la <strong>directa</strong> y la <strong>indirecta</strong>:<br />
<em>Llamada Directa:</em></p>
<pre class="brush: csharp;">
ClaseDisposable objetoDisposable = new ClaseDisposable();
// utilizamos el objetoDisposable
// ...
// y lo finalizamos:
objetoDisposable.Dispose();
</pre>
<p><em>Llamada Indirecta:</em></p>
<pre class="brush: csharp;">
using (ClaseDisposable objetoDisposable = new ClaseDisposable()) {
    // utilizamos el objetoDisposable
    // ...
}
//se finaliza automáticamente al salir del using
</pre>
<p><a href="http://msdn.microsoft.com/es-es/library/yh598w02.aspx">Más información sobre using&#8230;</a></p>
<p>Espero que les sea útil.<br />
(FxCop nos sugiere la implementación de IDisposable de esta manera cuando nuestra clase trabaja con recursos administrados y que implementan el método Dispose&#8230; Es bueno hacerle caso, implementando IDisposable como corresponde <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  )</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/68/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/68/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=68&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/08/08/como-implementar-correctamente-idisposable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>
	</item>
		<item>
		<title>Necesitas ayuda?&#8230;</title>
		<link>http://canyouhearthebits.wordpress.com/2008/08/07/necesitas-ayuda/</link>
		<comments>http://canyouhearthebits.wordpress.com/2008/08/07/necesitas-ayuda/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 20:55:34 +0000</pubDate>
		<dc:creator>Fernando</dc:creator>
				<category><![CDATA[No categorizada]]></category>

		<guid isPermaLink="false">http://canyouhearthebits.wordpress.com/?p=63</guid>
		<description><![CDATA[Si necesitas ayuda sobre algún tema relacionado con la programación, si tenés preguntas o si simplemente te gustaría saber un tema en particular, el momento es este, realiza tu comentario en este post o en cualquier otro y veré de contestarlo. Por mi parte pondré el mayor de los empeños, pero si es un tema que me supera, veremos de solucionarlo en [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=63&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Si necesitas ayuda sobre algún tema relacionado con la programación, si tenés preguntas o si simplemente te gustaría saber un tema en particular, el momento es este, realiza tu comentario en este post o en cualquier otro y veré de contestarlo.</p>
<p>Por mi parte pondré el mayor de los empeños, pero si es un tema que me supera, veremos de solucionarlo en equipo (conjuntamente con los lectores y/o blogs amigos)&#8230;</p>
<p> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/canyouhearthebits.wordpress.com/63/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/canyouhearthebits.wordpress.com/63/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/canyouhearthebits.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/canyouhearthebits.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/canyouhearthebits.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/canyouhearthebits.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/canyouhearthebits.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/canyouhearthebits.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/canyouhearthebits.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/canyouhearthebits.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/canyouhearthebits.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/canyouhearthebits.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/canyouhearthebits.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/canyouhearthebits.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/canyouhearthebits.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/canyouhearthebits.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=canyouhearthebits.wordpress.com&amp;blog=4421956&amp;post=63&amp;subd=canyouhearthebits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://canyouhearthebits.wordpress.com/2008/08/07/necesitas-ayuda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">fernandofrey</media:title>
		</media:content>
	</item>
	</channel>
</rss>
