<?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/"
	>

<channel>
	<title>Indalcasa &#187; Programación</title>
	<atom:link href="http://www.indalcasa.com/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.indalcasa.com</link>
	<description>Un blog de tecnologia</description>
	<lastBuildDate>Tue, 03 Jan 2012 15:14:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Deploy de ASP.Net MVC en Apache con mod_mono</title>
		<link>http://www.indalcasa.com/programacion/deploy-de-asp-net-mvc-en-apache-con-mod_mono/</link>
		<comments>http://www.indalcasa.com/programacion/deploy-de-asp-net-mvc-en-apache-con-mod_mono/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 12:34:10 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[.Net (C#)]]></category>
		<category><![CDATA[Mono (C#)]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Visual Basic .Net]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[vb]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[visual basic]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=792</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/deploy-de-asp-net-mvc-en-apache-con-mod_mono/' addthis:title='Deploy de ASP.Net MVC en Apache con mod_mono ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>Lo que voy a escribir aquí no es una guía de como instalar Mono ASP.Net con MVC sobre apache con mod_mono, aunque la escribiré, sino como hacer el deploy de una aplicación. Cuando montamos un sistema Mono ASP.Net con MVC sobre apache con mod_mono, hay que tener 3 cosas en cuenta para su correcto funcionamiento, son [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/deploy-de-asp-net-mvc-en-apache-con-mod_mono/' addthis:title='Deploy de ASP.Net MVC en Apache con mod_mono ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/deploy-de-asp-net-mvc-en-apache-con-mod_mono/' addthis:title='Deploy de ASP.Net MVC en Apache con mod_mono ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>Lo que voy a escribir aquí no es una <strong>guía de como instalar Mono ASP.Net con MVC sobre apache con mod_mono</strong>, aunque la escribiré, sino como hacer el <strong>deploy de una aplicación</strong>. Cuando montamos un <strong>sistema Mono ASP.Net con MVC sobre apache con mod_mono</strong>, hay que tener 3 cosas en cuenta para su correcto funcionamiento, son pequeños detalles pero que te pueden dar algún que otro quebradero de cabeza. Las 3 cosas a tener en cuenta son:</p>
<ul>
<li><strong>Apache no entiende que tu app es MVC</strong>, por lo que hay que decirselo.</li>
<li><strong>Apache ni mod_mono son capaces de dictaminar tu index</strong></li>
<li>Siempre hay que tener algo para <strong>recompilar el backend en caso de cacheo o fallo</strong> (generalmente cuando desarrollamos).</li>
</ul>
<p>Bueno, expliquemos cada una, en primer lugar apache no sabe que tu <strong>app es un MVC de ASP.Net</strong>, por lo que cuando hagamos un <strong>deploy</strong> o creemos un proyecto nuevo de <strong>Mono ASP.Net con MVC</strong>, lo primero a crear es un <strong>.htaccess</strong> forzando a que es un <strong>MVC</strong>. El <strong>código del htaccess</strong> es:</p>
<pre class="brush: text; gutter: true">ForceType application/x-asp-net</pre>
<p>Con esto ya  podemos poner a funcionar nuestra <strong>aplicación web</strong>. El siguiente paso para hacer las cosas bien, sería <strong>crear un index</strong>, ¿Por qué? ¿Acaso no saben cual es mi <strong>index</strong>? Pues no, todas las pruebas, tanto en <strong>Linux</strong> como en <strong>Mac OS X</strong>, es que <strong>mod_mono</strong> no es capaz de entender cual es el <strong>index</strong> que definimos en el <strong>global.asax</strong>, por lo que lo mejor es crear un <strong>index.aspx</strong> que cargue nuestro <strong>HomeController</strong>, o el que queramos. El <strong>index</strong> estaría en el raiz del proyecto y su código sería:</p>
<pre class="brush: csharp; gutter: true">&lt;%@ Page Language=&quot;C#&quot; Inherits=&quot;System.Web.Mvc.ViewPage&quot; %&gt;
&lt;%
   this.Context.RewritePath(&quot;Home&quot;, false);

   IHttpHandler httpHandler = new MvcHttpHandler();
   httpHandler.ProcessRequest(this.Context);
%&gt;</pre>
<p>Lo que hacemos con este <strong>index.aspx</strong> es decirle que cuando cargue la <strong>home</strong> (el <strong>index</strong>) cargue automáticamente el <strong>HomeController</strong>. Ahora solo nos falta crear un sistema de <strong>reseteo de backend</strong> por si se queda en <strong>cache</strong> y queremos cambiar algo. Para ello creamos una carpeta, por ejemplo, <strong>reset-mono-backend</strong> y creamos un <strong>.htaccess</strong> dentro de esa carpeta. Cabe decir que al htaccess lo podemos otorgar de un sistema de <strong>autentificación</strong> y cosas por el estilo para acceder, pero como esto es un ejemplo, será lo más básico. El <strong>contenido del .htaccess</strong> será:</p>
<pre class="brush: text; gutter: true">ForceType None
SetHandler mono-ctrl</pre>
<p>Al entrar en /nuestroproyecto/reset-mono-backend, nos aparecerá una <strong>interfaz</strong> que nos permitirá entre otras cosas, <strong>resetear el backend</strong>. Otro día explicaré como se instala el sistema en si.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/deploy-de-asp-net-mvc-en-apache-con-mod_mono/' addthis:title='Deploy de ASP.Net MVC en Apache con mod_mono ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/deploy-de-asp-net-mvc-en-apache-con-mod_mono/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Buscar por tag, clase e id en jquery</title>
		<link>http://www.indalcasa.com/programacion/javascript/buscar-por-tag-clase-e-id-en-jquery/</link>
		<comments>http://www.indalcasa.com/programacion/javascript/buscar-por-tag-clase-e-id-en-jquery/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 11:32:16 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=780</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/buscar-por-tag-clase-e-id-en-jquery/' addthis:title='Buscar por tag, clase e id en jquery ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>Hace tiempo escribí un artículo hablando de rendimiento de jQuery y el uso de selectores dobles con jQuery, pero lo que no he hecho es explicar como funciona un selector de jQuery. La idea es que esto no sea "la guía definitiva de jQuery", ni nada por el estilo, sino un breve apunte para los [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/buscar-por-tag-clase-e-id-en-jquery/' addthis:title='Buscar por tag, clase e id en jquery ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/buscar-por-tag-clase-e-id-en-jquery/' addthis:title='Buscar por tag, clase e id en jquery ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>Hace tiempo escribí un artículo hablando de <strong><a title="Guía de buenas prácticas para aumentar el rendimiento de jQuery" href="http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/">rendimiento de jQuery</a></strong> y el <strong><a title="Selectores dobles con JQuery, aumentando el rendimiento de JQuery" href="http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/">uso de selectores dobles con jQuery</a></strong>, pero lo que no he hecho es explicar <strong>como funciona un selector de jQuery</strong>. La idea es que esto no sea <em><strong>"la guía definitiva de jQuery"</strong></em>, ni nada por el estilo, sino un breve apunte para los lectores, la <strong>visión mas básica del uso de jQuery</strong>.</p>
<p>En este artículo voy a exponer como <strong>seleccionar</strong> de forma mas que simple utilizando un <strong>tag</strong> (<strong>etiqueta de html</strong>), una <strong>clase de css</strong> y un <strong>id</strong>. <strong>jQuery</strong> es un ente muy inteligente y por tanto, sabrá si lo que le estamos pidiendo es que <strong>convierta una etiqueta a jQuery</strong> o que la busque.</p>
<ul>
<li><strong>Buscar por tag con jQuery</strong>: este junto con el de <strong>clase</strong>, son métodos de <strong>búsqueda de poco rendimiento</strong> y que pueden dar como resultado varios objetos (ya que un tag se puede repetir), se indicaría a <strong>jQuery el nombre del tag</strong>.</li>
<li><strong>Buscar por clase con jQuery</strong>: al igual que el anterior, es de <strong>bajo rendimiento</strong> y dará como resultado un <strong>array de objetos</strong>, ya que una <strong>clase</strong> se puede repetir.</li>
<li><strong>Buscar por id con jQuery</strong>: es el mas <strong>optimo</strong> y el que se ha de usar siempre que sea posible. Devolverá un <strong>único objeto</strong> ya que los <strong>id's</strong> en teoría no se repiten.</li>
</ul>
<p>Ahora vista un poco la teoría viene la practica. Lo primero es entender como se hace la <strong>llamada a jQuery</strong>, que tiene 2 formas, la original que es usando la función <strong>jQuery</strong> o la corta que es usando su alias a la <strong>función $</strong>. Veamos un ejemplo genérico de esto y luego uno por cada <strong>selector</strong>.</p>
<pre class="brush: javascript; gutter: true">var selectorjQuery = jQuery(&quot;#mi_id_a_seleccionar&quot;);
var selectorAlias = $(&quot;#mi_id_a_seleccionar&quot;);</pre>
<p>En el ejemplo anterior, el resultado sería el mismo, ya que es similar utilizar la <strong>función jQuery</strong> que la <strong>función $</strong>. Ahora veamos un <strong>ejemplo con los selectores</strong>, con un <strong>código en html</strong> y otro de <strong>código javascript</strong>.</p>
<pre class="brush: xhtml; gutter: true">&lt;p&gt;
   &lt;a href=&quot;#&quot;&gt;Mi link 1&lt;/a&gt;
   &lt;a href=&quot;#&quot; class=&quot;enlace&quot;&gt;Mi link 2&lt;/a&gt;
   &lt;a href=&quot;#&quot; class=&quot;enlace&quot; id=&quot;myLink&quot;&gt;Mi link 3&lt;/a&gt;
&lt;/p&gt;</pre>
<p>Ahora vamos a hacer lo siguiente, con estos enlaces, vamos a poner el color del enlace en negro para todos los enlaces, rojo para los enlaces que tienen una clase enlace y azul para el id myLink</p>
<pre class="brush: javascript; gutter: true">//ponemos todos los enlaces a negro
$(&quot;a&quot;).css(&quot;color&quot;, &quot;#000&quot;);
//los enlaces con la clase .enlace los dejamos en rojo
$(&quot;.enlace&quot;).css(&quot;color&quot;, &quot;#ff0000&quot;);
//el enlace con el id myLink lo ponemos azulado
$(&quot;#myLink&quot;).css(&quot;color&quot;, &quot;#336699&quot;);</pre>
<p>Como podemos observar, las etiquetas se indican con su nombre, las <strong>clases</strong> como si de <strong>css</strong> se tratase, con un punto delante, al igual que los <strong>ids</strong>, que al igual que <strong>css</strong> utilizan una <strong>almohadilla</strong>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/buscar-por-tag-clase-e-id-en-jquery/' addthis:title='Buscar por tag, clase e id en jquery ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/javascript/buscar-por-tag-clase-e-id-en-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Habilitar sesiones en un handler.ashx con IRequiresSessionState e IReadOnlySessionState</title>
		<link>http://www.indalcasa.com/programacion/dotnet-csharp/habilitar-sesiones-en-un-handler-ashx-con-irequiressessionstate-e-ireadonlysessionstate/</link>
		<comments>http://www.indalcasa.com/programacion/dotnet-csharp/habilitar-sesiones-en-un-handler-ashx-con-irequiressessionstate-e-ireadonlysessionstate/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 08:04:59 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[.Net (C#)]]></category>
		<category><![CDATA[Mono (C#)]]></category>
		<category><![CDATA[Visual Basic .Net]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[Handler]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[vb]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[visual basic]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=766</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/habilitar-sesiones-en-un-handler-ashx-con-irequiressessionstate-e-ireadonlysessionstate/' addthis:title='Habilitar sesiones en un handler.ashx con IRequiresSessionState e IReadOnlySessionState ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>En .Net, bien sea en C# o en VB.Net, hay un tipo de clases llamadas controladores genéricos que nos proveen de un nivel muy básico de controlador web. En ASP.Net, los handlers o  HttpHandler son un tipo de clases tan básicas, que no implementan entre otras cosas, las sesiones, por lo que tendremos que indicar [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/habilitar-sesiones-en-un-handler-ashx-con-irequiressessionstate-e-ireadonlysessionstate/' addthis:title='Habilitar sesiones en un handler.ashx con IRequiresSessionState e IReadOnlySessionState ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/habilitar-sesiones-en-un-handler-ashx-con-irequiressessionstate-e-ireadonlysessionstate/' addthis:title='Habilitar sesiones en un handler.ashx con IRequiresSessionState e IReadOnlySessionState ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>En <strong>.Net</strong>, bien sea en <strong>C#</strong> o en <strong>VB.Net</strong>, hay un tipo de clases llamadas <strong>controladores genéricos</strong> que nos proveen de un <strong>nivel muy básico de controlador web</strong>. En <strong>ASP.Net</strong>, los <strong>handlers</strong> o  <strong>HttpHandler</strong> son un tipo de clases tan básicas, que no implementan entre otras cosas, las <strong>sesiones</strong>, por lo que tendremos que indicar explícitamente en la clase que tipo de <strong>sesión vamos a implementar</strong>.</p>
<p>Me voy a centrar en explicar 3 casos que son los más comunes, a la hora de <strong>implementar un handler</strong>:</p>
<ul>
<li><strong>Sin sesión</strong>: para esto no hay que hacer nada, con la declaración por defecto nos es suficiente. <strong>No tendremos acceso a la sesión</strong>, que sera nula si hacemos un <strong>context.Session</strong></li>
<li><strong>Sesión de solo lectura</strong>: para esto debemos <strong>implementar la interfaz IReadOnlySessionState</strong>, de tal modo que al hacer <strong>context.Session</strong>, tenga los <strong>valores de la sesión</strong>, pero no podremos añadir o actualizar datos sobre la <strong>sesión</strong>.</li>
<li><strong>Sesión de lectura y escritura</strong>: para esto debemos <strong>implementar la interfaz IRequiresSessionState</strong>, que nos permitirá acceder a los <strong>datos de la sesión</strong>, así como añadir y actualizar los datos.</li>
</ul>
<div>A continuación dejo unos ejemplos en C# y en VB.Net para que os hagais una idea.</div>
<pre class="brush: csharp; title: Ejemplo de implementación de handlers en C#; notranslate">
//Este ejemplo devolverá un error ya que context.Session es Nothing
public class IndalcasaSessionHandler : System.Web.IHttpHandler {
    public void ProcessRequest(HttpContext context) {
        Object value;

		context.Session.Add(&quot;value&quot;, &quot;un valor&quot;);
		value = context.Session.Item(&quot;value&quot;);

		context.Response.Write(value);
    }
}

//Este ejemplo no devolverá un error ya que context.Session no es Nothing
//pero value tendrá el valor original que tuviera y no el valor &quot;nuevo valor&quot;
//ya que no se puede escribir en la sesión
public class IndalcasaSessionHandler : System.Web.IHttpHandler, System.Web.SessionState.IReadOnlySessionState {
    public void ProcessRequest(HttpContext context) {
        Object value;

		context.Session.Add(&quot;value&quot;, &quot;un valor&quot;);
		value = context.Session.Item(&quot;value&quot;);

		context.Response.Write(value);
    }
}

//Este ejemplo no devolverá un error ya que context.Session no es Nothing
//y actualizará el valor de la sesión correctamente
public class IndalcasaSessionHandler : System.Web.IHttpHandler, System.Web.SessionState.IRequiresSessionState {
    public void ProcessRequest(HttpContext context) {
        Object value;

		context.Session.Add(&quot;value&quot;, &quot;un valor&quot;);
		value = context.Session.Item(&quot;value&quot;);

		context.Response.Write(value);
    }
}
</pre>
<pre class="brush: vb; title: Ejemplo de implementación de handlers en VB.Net; notranslate">
'Este ejemplo devolverá un error ya que context.Session es Nothing
Public Class IndalcasaSessionHandler
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim value As Object

		context.Session.Add(&quot;value&quot;, &quot;un valor&quot;)
		value = context.Session.Item(&quot;value&quot;)

		context.Response.Write(value)
    End Sub
End Class

'Este ejemplo no devolverá un error ya que context.Session no es Nothing
'pero value tendrá el valor original que tuviera y no el valor &quot;nuevo valor&quot;
'ya que no se puede escribir en la sesión
Public Class IndalcasaSessionHandler
    Implements System.Web.IHttpHandler, System.Web.SessionState.IReadOnlySessionState

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim value As Object

		context.Session.Add(&quot;value&quot;, &quot;nuevo valor&quot;)
		value = context.Session.Item(&quot;value&quot;)

		context.Response.Write(value)
    End Sub
End Class

'Este ejemplo no devolverá un error ya que context.Session no es Nothing
'y actualizará el valor de la sesión correctamente
Public Class IndalcasaSessionHandler
    Implements System.Web.IHttpHandler, System.Web.SessionState.IRequiresSessionState

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim value As Object

		context.Session.Add(&quot;value&quot;, &quot;nuevo valor&quot;)
		value = context.Session.Item(&quot;value&quot;)

		context.Response.Write(value)
    End Sub
End Class
</pre>
<p>Espero que os saque de un apuro en el que alguna vez me he visto metido por no recordar las <strong>interfaces que hay que implementar para poder leer y/o escribir en la sesión en un controlador genérico de ASP.Net</strong>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/habilitar-sesiones-en-un-handler-ashx-con-irequiressessionstate-e-ireadonlysessionstate/' addthis:title='Habilitar sesiones en un handler.ashx con IRequiresSessionState e IReadOnlySessionState ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/dotnet-csharp/habilitar-sesiones-en-un-handler-ashx-con-irequiressessionstate-e-ireadonlysessionstate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Double.Parse y Decimal.Parse con símbolos de putuación</title>
		<link>http://www.indalcasa.com/programacion/dotnet-csharp/double-parse-y-decimal-parse-con-simbolos-de-putuacion/</link>
		<comments>http://www.indalcasa.com/programacion/dotnet-csharp/double-parse-y-decimal-parse-con-simbolos-de-putuacion/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 09:02:18 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[.Net (C#)]]></category>
		<category><![CDATA[Mono (C#)]]></category>
		<category><![CDATA[Visual Basic .Net]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[vb]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=758</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/double-parse-y-decimal-parse-con-simbolos-de-putuacion/' addthis:title='Double.Parse y Decimal.Parse con símbolos de putuación ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>Un problema que me encuentro a menudo en .Net por igual en Visual Basic o en C#, es cuando tengo que parsear un decimal o un double desde un string. Muchas veces, cuando parseas un double o un decimal, encontramos un error ya que en operaciones matemáticas, el símbolo de puntuación para la parte decimal [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/double-parse-y-decimal-parse-con-simbolos-de-putuacion/' addthis:title='Double.Parse y Decimal.Parse con símbolos de putuación ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/double-parse-y-decimal-parse-con-simbolos-de-putuacion/' addthis:title='Double.Parse y Decimal.Parse con símbolos de putuación ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>Un problema que me encuentro a menudo en <strong>.Net</strong> por igual en <strong>Visual Basic</strong> o en <strong>C#</strong>, es cuando tengo que <strong>parsear un decimal o un double desde un string</strong>. Muchas veces, cuando <strong>parseas un double o un decimal</strong>, encontramos un error ya que en <strong>operaciones matemáticas</strong>, el <strong>símbolo de puntuación para la parte decimal es el punto</strong>, por lo que al hacer un <strong>Double.Parse(number)</strong> o un <strong>Decimal.Parse(number)</strong>, lo que hace es ignorar el punto y por tanto tomar la <strong>parte decimal</strong> como si fuera <strong>parte entera</strong>. Para que esto no nos pase, tenemos que indicar que el <strong>sistema numérico utilizado es el matemático</strong>, aquel que no varia con la <strong>cultura</strong>. Con un ejemplo se verá mas claro.</p>
<p>Un ejemplo en <strong>C#</strong>:</p>
<pre class="brush: csharp; title: Ejemplo en C#; notranslate">
string number = &quot;15.3&quot;;
double doNumber;
decimal deNumber;

doNumber = double.Parse(number);
deNumber = decimal.Parse(number);

/*
Los valores son:
doNumber = 153
deNumber = 153
*/

doNumber = double.Parse(number, CultureInfo.InvariantCulture);
deNumber = decimal.Parse(number, CultureInfo.InvariantCulture);

/*
Los valores son:
doNumber = 15.3
deNumber = 15.3
*/
</pre>
<p>Un ejemplo en <strong>VB.Net</strong></p>
<pre class="brush: vb; title: Ejemplo en VB.Net; notranslate">
Dim number As String = &quot;15.3&quot;;
Dim doNumber As Double;
Dim deNumber As Decimal;

doNumber = double.Parse(number);
deNumber = decimal.Parse(number);

'Los valores son:
'doNumber = 153
'deNumber = 153

doNumber = double.Parse(number, CultureInfo.InvariantCulture);
deNumber = decimal.Parse(number, CultureInfo.InvariantCulture);

'Los valores son:
'doNumber = 15.3
'deNumber = 15.3
</pre>
<p><strong>CultureInfo</strong> es una clase que provee de información de las culturas y en concreto, la propiedad <strong>InvariantCulture</strong> o <strong>CultureInfo.InvariantCulture</strong>, es quien provee la información de la cultura que no varia por localizaciones, vease el <strong>simbolo de puntuación matemático</strong>. La clase <strong>CultureInfo</strong> se encuentra en el namespace <strong>System.Globalization</strong>, quedado la ruta así: <strong>System.Globalization.CultureInfo.InvariantCulture</strong>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/double-parse-y-decimal-parse-con-simbolos-de-putuacion/' addthis:title='Double.Parse y Decimal.Parse con símbolos de putuación ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/dotnet-csharp/double-parse-y-decimal-parse-con-simbolos-de-putuacion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Guía de buenas prácticas para aumentar el rendimiento de jQuery</title>
		<link>http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/</link>
		<comments>http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 08:29:58 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=750</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/' addthis:title='Guía de buenas prácticas para aumentar el rendimiento de jQuery ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>Llevo tiempo con ganas de escribir esta guía de buenas prácticas para aumentar el rendimiento de jQuery y de javascript en general. Uno de los principales problemas que nos encontramos por internet son que hasta hace un tiempo, cada javascript era de su padre y de su madre, por lo que perdía importancia dentro del [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/' addthis:title='Guía de buenas prácticas para aumentar el rendimiento de jQuery ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/' addthis:title='Guía de buenas prácticas para aumentar el rendimiento de jQuery ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p><a href="http://www.indalcasa.com/wp-content/uploads/2011/04/jquery.png"><img class="alignleft size-full wp-image-730" title="JQuery" src="http://www.indalcasa.com/wp-content/uploads/2011/04/jquery.png" alt="JQuery" width="256" height="256" /></a>Llevo tiempo con ganas de escribir esta <strong>guía de buenas prácticas para aumentar el rendimiento de jQuery y de javascript en general</strong>. Uno de los principales problemas que nos encontramos por internet son que hasta hace un tiempo, cada <strong>javascript </strong>era de su padre y de su madre, por lo que perdía importancia dentro del <strong>desarrollo web</strong> y no <strong>optimizando </strong>esta parte del <strong>código</strong>. Con la inclusión de nuevas ideas a la hora de <strong>desarrollar webs</strong> y la aparición de multitud de <strong>frameworks como jQuery</strong>, <strong>mootools</strong>, <strong>sproutcore</strong>, hacen que el <strong>código javascript</strong> que escriben los desarrolladores, funcione en todos o casi todos los navegadores, pero aún así, algo falla.</p>
<p>Aunque ya no es como pasaba antiguamente que al entrar en una web o tenías <strong>Internet Explorer</strong> o podías olvidarte del <strong>javascript</strong> y por tanto de una gran parte de <strong>funcionalidad en la web</strong>, hoy en día esto no pasa gracias a los <strong>frameworks de javascript</strong>, es cierto que hay un problema y es el <strong>rendimiento</strong>. En este artículo me quiero centrar en el <strong>framework</strong> mas extendido, que es <strong>jQuery</strong> y una <strong>breve guía de como aumentar el rendimiento de jQuery</strong> y por tanto aumentar el <strong>rendimiento de javascript</strong>.</p>
<p>A continuación, detallo un <strong>listado de buenas practicas para aumentar el rendimiento de jQuery</strong>.</p>
<p>&nbsp;</p>
<h2>1. Acceder a id's y no a clases</h2>
<p>Cuando vemos algun ejemplo de <strong>jQuery</strong>, siempre se nos muestra con <em>$(".clase").html("prueba")</em>, esto es un ejemplo que nos lleva a cometer grandes <strong>faltas de rendimiento</strong> cuando trabajamos con un proyecto muy grande. Aunque a veces no nos queda mas remedio que acceder a <strong>clases</strong>, su uso dentro de los <strong>selectores de jQuery</strong>, debemos de evitarlo siempre que podamos, ya que al <strong>acceder por clase</strong>, <strong>jQuery </strong>buscará en todo el código esa <strong>clase</strong>, todas las veces pueda, sin embargo, si utilizamos un <strong>id</strong>, al encontrar la <strong>primera coincidencia</strong>, la búsqueda parará y por tanto la ejecución será mas rápida.</p>
<blockquote>
<pre class="javascript">$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;.clase&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">html</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;prueba&quot;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #009900; font-style: italic;">//es mas lento</span>
$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#id&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">html</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;prueba&quot;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #009900; font-style: italic;">//es mas rápido</span></pre>
</blockquote>
<p>&nbsp;</p>
<h2>2. Utilizar selectores dobles en jQuery</h2>
<p>Hace poco tiempo escribí un artículo sobre el <strong><a href="http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/">uso de selectores dobles para aumentar el rendimiento en jQuery</a></strong>. Básicamente y sin entrar mucho en detalle, ya que para ello hay ya un articulo dedicado, un <strong>selector doble</strong> lo que hace es <strong>crear un contexto donde buscar el selector</strong>. Imaginemos que queremos cambiar el html  de un menú (si es un absurdo) para ello, en lugar de ejecutar:</p>
<blockquote>
<pre class="javascript">$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;.menu&quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">html</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;jodimos el menú&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre>
</blockquote>
<p>Lo ideal es usar un <strong>contexto con base a un id</strong>, donde <strong>jquery </strong>tenga que buscar menos cantidad de datos</p>
<blockquote>
<pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> header = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#header&quot;</span><span style="color: #66cc66;">&#41;</span>;
$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;.menu&quot;</span>, header<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">html</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;jodimos el menú&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre>
</blockquote>
<p>De esta forma, capturamos un contexto y le decimos a <strong>jQuery que busque solo en ese contexto</strong> en lugar de en toda la web, por lo que la ejecución de un <strong>selector de clase</strong>, será mas rápida.</p>
<p>&nbsp;</p>
<h2>3. Cachear variables que mas utilicemos y de contexto</h2>
<p>Cuando escribimos <strong>código de jQuery</strong>, es normal que recurrentemente accedamos a ciertas partes de la página, que como hemos visto en el ejemplo anterior, utilizaríamos variables de contexto. Para agilizar la carga, es recomendable <strong>cachear estas variables</strong>, para que no tengamos que buscarlas cada vez que vayamos a utilizarlas:</p>
<blockquote>
<pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> header = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#header&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #003366; font-weight: bold;">var</span> footer = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#footer&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
.....
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> bordemenu<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;.menu&quot;</span>, header<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">css</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;border&quot;</span>, <span style="color: #3366CC;">&quot;solid 1px #000000&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre>
</blockquote>
<p>De esta forma, no buscamos header, sino que accedemos a la misma variable que cargamos al cargar la página. Incluso, si ya sabemos de antemano que vamos a acceder muchas veces al menú, podríamos cachearlo también.</p>
<p>&nbsp;</p>
<h2>4. Evitar el uso de each</h2>
<p>En <strong>jQuery</strong>, la función each no es más que un <strong>foreach</strong> que nos devuelve los <strong>nodos</strong> que hemos seleccionado. Es por esto que debemos de intentar, en la medida de lo posible, no utilizar este <strong>método</strong> para no ejecutar un <strong>foreach</strong> e intentar recorrer los nodos con un <strong>for</strong>, que aunque un poco mas complejo, su <strong>ejecución será mas rápida</strong>.</p>
<p>&nbsp;</p>
<h2>5. Centralizar la carga de eventos</h2>
<p>Cuando hacemos una aplicación web muy muy grande y con mucho uso de <strong>ajax</strong>, nos damos cuenta de que cada vez tenemos mas y mas <strong>eventos </strong>y que como nos descuidemos, acabamos escribiendo casi los mismos <strong>eventos</strong> en multitud de sitios. Es por ello, que es recomendable tener una o varias funciones donde <strong>incialicemos los eventos</strong> para su <strong>carga y ejecución</strong>. Parece una tontería, pero a la larga, mas que en <strong>rendimiento</strong>, nos favorecerá en <strong>rendimiento a la hora de escalar nuestra aplicación</strong>, aunque también evitará la <strong>duplicidad de eventos</strong> sobre un mismo objeto y por tanto la <strong>ejecución será mas rápida</strong>.</p>
<p>&nbsp;</p>
<p>Estos son 5 sencillos casos en los que podemos <strong>aumentar considerablemente la velocidad de ejecución de una web utilizando jQuery</strong>. Quizás, haciendo sencillos ejemplos, no seamos coscientes de esa diferencia de velocidad, pero en una macroaplicación que mueve multitud de datos <strong>asíncronamente</strong>, nos daremos cuenta que estas practicas <strong>agilizarán la página en general y agilizarán jQuery</strong>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/' addthis:title='Guía de buenas prácticas para aumentar el rendimiento de jQuery ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/javascript/guia-de-buenas-practicas-para-aumentar-el-rendimiento-de-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Selectores dobles con JQuery, aumentando el rendimiento de JQuery</title>
		<link>http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/</link>
		<comments>http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 12:44:50 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=726</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/' addthis:title='Selectores dobles con JQuery, aumentando el rendimiento de JQuery ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>A menudo suele pasar que al comparar diferentes librerías de Javascript, se habla de JQuery como una librería de muy fácil manejo por utilizar selectores DOM y de CSS pero a la vez se dice que por esto es mas lenta que el resto. Mi objetivo con este artículo no es explicar los diferentes tipos [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/' addthis:title='Selectores dobles con JQuery, aumentando el rendimiento de JQuery ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/' addthis:title='Selectores dobles con JQuery, aumentando el rendimiento de JQuery ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p><a href="http://www.indalcasa.com/wp-content/uploads/2011/04/jquery.png"><img class="alignleft size-full wp-image-730" title="JQuery" src="http://www.indalcasa.com/wp-content/uploads/2011/04/jquery.png" alt="JQuery" width="256" height="256" /></a>A menudo suele pasar que al comparar <strong>diferentes librerías de Javascript</strong>, se habla de <strong>JQuery </strong>como una <strong>librería</strong> de muy fácil manejo por utilizar <strong>selectores DOM</strong> y de <strong>CSS </strong>pero a la vez se dice que por esto es mas lenta que el resto. Mi objetivo con este artículo no es explicar los <strong>diferentes tipos de selectores de JQuery</strong> sino como <strong>aumentar el rendimiento de JQuery utilizando selectores dobles de contexto</strong>.</p>
<p>En <strong>JQuery </strong>aparte de otras formas como <strong>objetos DOM</strong> y similares, lo normal es <strong>realizar un selector apuntando a una clase de CSS o un id</strong>. Antes de nada, comentar que el uso de <strong>clases en los selectores de JQuery</strong>, es recomendable omitirlo siempre que sea posible (no siempre se puede), ya que <strong>JQuery </strong>espera encontrar varios nodos y por tanto evaluará todo el código, por lo que es mas lento que utilizar <strong>ids</strong>, que una vez lo encuentre, dejará de buscar. Tras este miniconsejo de <strong>rendimiento de JQuery</strong>, me gustaría comentar como funcionan los <strong>selectores dobles de contexto de JQuery</strong>.</p>
<p>Normalmente  para hacer una <strong>selección en JQuery</strong>, hacemos algo tal que <em><strong>$("selector")</strong></em> y seleccionamos el <strong>objeto de JQuery</strong>. Un <strong>selector doble</strong> o <strong>selector de contexto</strong> es básicamente una especie de <strong>cache</strong>, un <strong>contexto </strong>donde buscar ese <strong>selector </strong>pero no en toda la página, sino en una parte de esta. Para utilizar un <strong>selector doble</strong> o <strong>selector de contexto</strong>, lo que hacemos es enviarle un parámetro extra a la consulta de selección. En mi caso me gusta enviar un <strong>objeto de JQuery</strong> que intento cargar en memoria al cargar la página, sacrificando tiempo de carga por <strong>velocidad </strong>a la hora de interactuar con la propia página. Para utilizar un <strong>selector doble</strong> o <strong>selector de conexto</strong> lo que hacemos es por ejemplo hacer <strong>$("selector", objetopreseleccionado)</strong>, de esta forma, <strong>JQuery </strong>no buscará el <strong>selector </strong>en toda la página, sino que se centrará en el <strong>contexto donde se encuentra lo preseleccionado</strong>.</p>
<p>Para que todo quede un poco mas claro, voy a poner un ejemplo, partamos de la idea que tenemos la <strong>página partida en 4 sectores</strong>, una cabecera, un contenido dividido en menú lateral y contenido en si, y un pie. Todas estas partes cambiarán dinámicamente, así que al realizar el <strong>document ready</strong> cargaremos en variables las <strong>diferentes secciones de la web</strong> con la idea de <strong>realizar operaciones de una forma mas rápida</strong> y <strong>consumiendo menos recursos de procesador</strong> al cliente, que ya sabemos que el <strong>javascript</strong> puede <strong>ralentizar mucho una página </strong>si no se hace con cuidado.</p>
<blockquote>
<pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> header, footer, menu, content;
&nbsp;
$<span style="color: #66cc66;">&#40;</span>document<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">ready</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>$<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  header = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#header&quot;</span><span style="color: #66cc66;">&#41;</span>;
  footer = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#footer&quot;</span><span style="color: #66cc66;">&#41;</span>;
  menu = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#menu&quot;</span><span style="color: #66cc66;">&#41;</span>;
  content = $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#content&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre>
</blockquote>
<p>Una vez que hemos cargado en memoria las diferentes secciones de la web, podremos trabajar con eventos, modificaciones y efectos de una manera mucho mas eficiente, realizando las llamadas utilizando en los <strong>selectores esas variables como contexto de JQuery</strong>.</p>
<blockquote>
<pre class="javascript">$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;#logo&quot;</span>, header<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">html</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;mi html&quot;</span><span style="color: #66cc66;">&#41;</span>;
$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;.article a&quot;</span>, content<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">click</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> .... <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</pre>
</blockquote>
<p>Si utilizamos los <strong>selectores de JQuery</strong> como en el ejemplo anterior, usando un <strong>contexto para la búsqueda</strong>, ahorraremos muchísimo <strong>tiempo de proceso</strong> porque <strong>JQuery </strong>no tendrá que <strong>buscar en todo el documento</strong>, sino que lo realizará en base al <strong>contexto </strong>que le indiquemos. Quiero aclarar que como todo, hay que estudiar cuando usar o no usar contextos, ya que si la página es muy pequeña no merece la pena <strong>cargar en memoria las diferentes secciones</strong>, pero si la página es bastante grande y con muchos datos, podemos <strong>acelerar el uso de JQuery y aumentar el rendimiento de JQuery en un 250%</strong>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/' addthis:title='Selectores dobles con JQuery, aumentando el rendimiento de JQuery ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/javascript/selectores-dobles-con-jquery-aumentando-el-rendimiento-de-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Por qué usar StringBuilder en lugar de concatenar Strings</title>
		<link>http://www.indalcasa.com/programacion/por-que-usar-stringbuilder-en-lugar-de-concatenar-strings/</link>
		<comments>http://www.indalcasa.com/programacion/por-que-usar-stringbuilder-en-lugar-de-concatenar-strings/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 01:36:16 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[.Net (C#)]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mono (C#)]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Visual Basic .Net]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[visual basic]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=703</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/por-que-usar-stringbuilder-en-lugar-de-concatenar-strings/' addthis:title='Por qué usar StringBuilder en lugar de concatenar Strings ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>Ando un poco liado y llevo una temporada sin escribir. Hay un apunte, que es común para varios lenguajes que son Java y por ejemplo .Net, tanto Visual Basic .Net y C#, así como el resto de lenguajes de la plataforma .Net que es la clase StringBuilder. Hay gente que no sabe por que o cuando utilizar la clase [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/por-que-usar-stringbuilder-en-lugar-de-concatenar-strings/' addthis:title='Por qué usar StringBuilder en lugar de concatenar Strings ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/por-que-usar-stringbuilder-en-lugar-de-concatenar-strings/' addthis:title='Por qué usar StringBuilder en lugar de concatenar Strings ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>Ando un poco liado y llevo una temporada sin escribir. Hay un apunte, que es común para varios lenguajes que son <strong>Java</strong> y por ejemplo <strong>.Net</strong>, tanto <strong>Visual Basic .Net</strong> y <strong>C#</strong>, así como el resto de lenguajes de la plataforma <strong>.Net</strong> que es la <strong>clase StringBuilder</strong>. Hay gente que no sabe por que o cuando utilizar la <strong>clase StringBuilder</strong> y realmente es uno de esos pequeños detalles de <strong>buenas prácticas</strong>, que a simple vista en un proyecto pequeño no se aprecian, pero cuando entre manos tenemos un gran proyecto que recibe millones de peticiones diarias, estas pequeñas nuevas practicas pueden suponer un gran referente de ahorro en el consumo de memoria y procesador de un servidor.</p>
<p>Tanto en <strong>Java</strong> como en <strong>.Net</strong>, cuando creamos un nuevo <strong>String</strong>, instanciamos un <strong>objeto String</strong> en una variable, cuando con la sentencia "+=" vamos concatenando mas texto, lo que hacen estas plataformas es crear una nueva instancia del <strong>objeto</strong> con la concatenación de las dos variables de texto. Por otro lado, cuando tenemos un <strong>StringBuilder</strong> instanciamos una <strong>clase StrringBuilder</strong>, llamando al método "<strong>append</strong>" en <strong>Java</strong> y "<strong>Append</strong>" en <strong>.Net</strong>, lo que hacemos es realizar una concatenación real de texto en el buffer de texto para luego instanciar un <strong>nuevo objeto String</strong> cuando llamemos al método "<strong>toString</strong>" en <strong>Java</strong> y "<strong>ToString</strong>" en <strong>.Net</strong>. A simple vista parece una tontería, cuando tenemos un texto que concatenamos 2 o 3 veces, realmente no merece la pena generar un <strong>StringBuilder</strong>, pero cuando concatenamos repetidamente texto varias veces el rendimiento es mayor si utilizamos <strong>StringBuilder</strong>, ya que si tenemos 20 concatenaciones seguidas, utilizando <strong>Strings</strong> normales concatenados, tendríamos 20 <strong>instancias de objetos</strong>, mientras que con <strong>StringBuilder</strong> solo 2. Como he dicho antes, en un pequeño proyecto, esto es prácticamente inapreciable, pero cuando tenemos un proyecto que recibe millones de peticiones diarias, algo tan tonto como utilizar <strong>concatenaciones de texto</strong> o <strong>StringBuilder</strong> puede suponer tener que añadir mas memoria al servidor para soportar tantas <strong>instancias de objetos</strong> e incluso un procesador mas potente para soportar el paso del recolector de basura para tantos <strong>objetos instanciados</strong>, esto en el mejor de los casos, si no llegamos al caso de tener que añadir un servidor al cluster para soportar todo esto.</p>
<p>Un cumulo de <strong>buenas practicas</strong> pueden suponer un gran ahorro de recursos, que se traducen en ahorro de dinero, cuando se trata de grandes proyectos.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/por-que-usar-stringbuilder-en-lugar-de-concatenar-strings/' addthis:title='Por qué usar StringBuilder en lugar de concatenar Strings ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/por-que-usar-stringbuilder-en-lugar-de-concatenar-strings/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Diferentes formas de seleccionar etiquetas hijas en css</title>
		<link>http://www.indalcasa.com/programacion/css/diferentes-formas-de-seleccionar-etiquetas-hijas-en-css/</link>
		<comments>http://www.indalcasa.com/programacion/css/diferentes-formas-de-seleccionar-etiquetas-hijas-en-css/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 20:29:58 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[maquetacion]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=674</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/css/diferentes-formas-de-seleccionar-etiquetas-hijas-en-css/' addthis:title='Diferentes formas de seleccionar etiquetas hijas en css ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>Cuando estamos maquetando una web, muchas veces nos vemos en la necesidad o en la comodidad de aplicar estilos a etiquetas o clases hijas directamente pero a veces esto puede convertirse en un problema. Normalmente cuando se maqueta se suele seleccionar directamente todas las etiquetas hija de un tipo por ejemplo, todos los p que [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/css/diferentes-formas-de-seleccionar-etiquetas-hijas-en-css/' addthis:title='Diferentes formas de seleccionar etiquetas hijas en css ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/css/diferentes-formas-de-seleccionar-etiquetas-hijas-en-css/' addthis:title='Diferentes formas de seleccionar etiquetas hijas en css ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>Cuando estamos <strong>maquetando</strong> una <strong>web</strong>, muchas veces nos vemos en la necesidad o en la comodidad de <strong>aplicar estilos a etiquetas o clases hijas</strong> directamente pero a veces esto puede convertirse en un problema. Normalmente cuando se <strong>maqueta</strong> se suele seleccionar directamente todas las <strong>etiquetas hija de un tipo</strong> por ejemplo, todos los <strong>p</strong> que haya dentro de un <strong>div</strong> con una <strong>clase</strong>, pero que pasa si tenemos una estructura un tanto compleja y no queremos que todas se comporten de una misma manera, como por ejemplo usando <strong>listas</strong> y <strong>sublistas</strong> y queremos que las <strong>sublistas</strong> tengan un margen que la lista normal no queremos que tenga.</p>
<p>En <strong>CSS</strong> hay varias formas de <strong>seleccionar etiquetas hija</strong>, la mas común es la de <strong>seleccionar todos los hijos de un tipo</strong>, como seria el ejemplo:</p>
<blockquote>
<pre class="css"><span style="color: #6666ff;">.clase</span> ul <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">margin</span>: <span style="color: #933;">0px</span>;
    <span style="color: #000000; font-weight: bold;">padding</span>: <span style="color: #933;">0px</span>;
    <span style="color: #000000; font-weight: bold;">list-style</span>: <span style="color: #993333;">none</span>;
<span style="color: #66cc66;">&#125;</span></pre>
</blockquote>
<p>Con esto decimos que todos los <strong>li</strong> contenidos dentro de un <strong>ul</strong>, tengan un estilo, pero ¿Y si queremos hacer un <strong>listado</strong> mas complejo, con <strong>sublistados</strong>? Lo que debemos de hacer es decirle que aunque los <strong>li</strong> dentro de <strong>ul</strong> se comporten de una forma concreta, los primeros <strong>li</strong> queremos que se comporten de otra forma. En el siguiente ejemplo se usa para formar un <strong>listado con li y ul</strong> donde queremos que los primeros <strong>li</strong> no tengan margen alguno, pero que el resto de <strong>li</strong> que haya tengan un margen a la izquierda para simular un <strong>sangrado automático</strong>:</p>
<blockquote>
<pre class="css"><span style="color: #6666ff;">.sidebarBox</span> ul &amp;gt; li &amp;gt; ul <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">margin-left</span>: <span style="color: #933;">25px</span>;
<span style="color: #66cc66;">&#125;</span></pre>
</blockquote>
<p>Y el html sería el siguiente:</p>
<blockquote>
<pre class="xml">&nbsp;
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;clase&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;ul<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;li<span style="font-weight: bold; color: black;">&gt;</span></span></span>lista1<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/li<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;li<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;ul<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;li<span style="font-weight: bold; color: black;">&gt;</span></span></span>lista2<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/li<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/ul<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/li<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/ul<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/div<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;</pre>
</blockquote>
<p>Con esto lista1 no tendra <strong>sangrado</strong> pero lista2 tendra un <strong>sangrado</strong> de 25px hacia la izquierda. Espero que os sirva de ayuda.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/css/diferentes-formas-de-seleccionar-etiquetas-hijas-en-css/' addthis:title='Diferentes formas de seleccionar etiquetas hijas en css ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/css/diferentes-formas-de-seleccionar-etiquetas-hijas-en-css/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Publicada la versión 0.2 de puntoengine</title>
		<link>http://www.indalcasa.com/programacion/php/publicada-la-version-0-2-de-puntoengine/</link>
		<comments>http://www.indalcasa.com/programacion/php/publicada-la-version-0-2-de-puntoengine/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 13:02:38 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[proyectos]]></category>
		<category><![CDATA[puntoengine]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=656</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/php/publicada-la-version-0-2-de-puntoengine/' addthis:title='Publicada la versión 0.2 de puntoengine ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>He publicado la nueva versión de Punto Engine PHP, o PEP en su versión 0.2. Esta versión trae importantes mejoras con respecto a la versión anterior, ya que administra mucho mejor el sistema de templates para poder hacer páginas dinámicas mucho mas fácil y rápido. Entre las mejoras cabe destacar: Añadido un archivo de changelog [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/php/publicada-la-version-0-2-de-puntoengine/' addthis:title='Publicada la versión 0.2 de puntoengine ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/php/publicada-la-version-0-2-de-puntoengine/' addthis:title='Publicada la versión 0.2 de puntoengine ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>He publicado la nueva versión de <strong>Punto Engine PHP</strong>, o <strong>PEP</strong> en su <strong>versión 0.2</strong>. Esta versión trae importantes mejoras con respecto a la versión anterior, ya que administra mucho mejor el <strong>sistema de templates</strong> para poder hacer <strong>páginas dinámicas</strong> mucho mas fácil y rápido. Entre las mejoras cabe destacar:</p>
<ul>
<li>Añadido un archivo de <strong>changelog</strong> para poder ver las modificaciones.</li>
<li>Ahora el <strong>Kernel</strong> permite recuperar la ruta virtual (la que accede desde el navegador) aparte de la ya implementada ruta física.</li>
<li>Los <strong>Servlet</strong> tienen ahora un atributo de url para poder realizar controles si fuera necesario.</li>
<li>En el web.xml se puede configurar el modo debug para poder tener una traza mas detalla del error que se produjo.</li>
<li>En el <strong>Servlet</strong> se ha añadido un atributo debug para en caso de desarrollo, poder realizar trazas si se desea.</li>
<li>El metodo <strong>SendRedirect</strong> para redireccionar la pagina hacia otra, ahora tiene una funcionalidad como <strong>.Net</strong> donde si añadimos la clave "~/" al principio de la url, esta sera sustituida por la url del proyecto.</li>
<li>Ahora los <strong>Servlets</strong> pueden tener una <strong>MasterPage</strong> para tener un template base desde el que cargar el contenido.</li>
<li>En los <strong>templates</strong>, si ponemos la clave "~/" en un enlace, css o similar, sustituira esta por la ruta del proyecto.</li>
<li>Se han cambiado los mensajes que aun aparecian en los errores de "IDCS Server" por <strong>"Punto Engine Server"</strong>.</li>
<li>Se ha cambiado el HomeController por TestController y se han añadido diferentes funcionalidades de <strong>MasterPage</strong> y diferentes ejemplos a mostrar para ver su funcionamiento.</li>
<li>Se ha corregido un error que provocaba que cuando se lanzaba una excepción no fatal, se seguian mostrando otros errores encadenados.</li>
<li>Se ha borrado temporalmente el acceso mediante web.xml al PepAdmin ya que es aun no es funcional.</li>
</ul>
<p>Las mejoras de esta versión son bastante importantes y permiten un desarrollo mas fluido de las páginas. Para quien quiera descargarlo puede hacerlo entrando en la web del <a href="puntoengine.googlecode.com">proyecto puntoengine</a>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/php/publicada-la-version-0-2-de-puntoengine/' addthis:title='Publicada la versión 0.2 de puntoengine ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/php/publicada-la-version-0-2-de-puntoengine/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Namespaces o espacios de nombre virtuales en javascript</title>
		<link>http://www.indalcasa.com/programacion/javascript/namespaces-o-espacios-de-nombre-virtuales-en-javascript/</link>
		<comments>http://www.indalcasa.com/programacion/javascript/namespaces-o-espacios-de-nombre-virtuales-en-javascript/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 20:17:28 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[namespace]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=653</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/namespaces-o-espacios-de-nombre-virtuales-en-javascript/' addthis:title='Namespaces o espacios de nombre virtuales en javascript ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>En la mayoría de lenguajes de programación relativamente maduros o potentes, existe lo que denominamos namespace o espacio de nombres. Los namespace no son otra cosa que unos contenedores de nombre donde podremos contener clases, funciones y variables que pueden repetirse con el mismo nombre en otros espacios de nombre o namespace sin que ello [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/namespaces-o-espacios-de-nombre-virtuales-en-javascript/' addthis:title='Namespaces o espacios de nombre virtuales en javascript ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/javascript/namespaces-o-espacios-de-nombre-virtuales-en-javascript/' addthis:title='Namespaces o espacios de nombre virtuales en javascript ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>En la mayoría de <strong>lenguajes de programación</strong> relativamente maduros o potentes, existe lo que denominamos <strong>namespace</strong> o <strong>espacio de nombres</strong>. Los <strong>namespace</strong> no son otra cosa que unos <strong>contenedores de nombre</strong> donde podremos contener <strong>clases</strong>, <strong>funciones</strong> y <strong>variables</strong> que pueden repetirse con el mismo <strong>nombre</strong> en otros <strong>espacios de nombre</strong> o <strong>namespace</strong> sin que ello suponga un error. Un <strong>ejemplo</strong> claro de cual es la verdadera utilidad organizadora de los <strong>namespace</strong> o <strong>espacios de nombres</strong> es en las <strong>librerías gráficas</strong> de los <strong>lenguajes de programación</strong>, ya que en estas <strong>librerías</strong> un elemento muy común suele ser la <strong>clase</strong> Window que hace referencia a una ventana pero que puede estar dentro de GTK, QT, <strong>.Net</strong>, API de Windows, etc. (esto no es muy correcto puesto que GTK seria GTKWindow pero es por poner un <strong>ejemplo</strong>). <strong>Javascript</strong>, como un <strong>lenguaje</strong> ya mas que maduro con el paso de los años y relativamente <strong>estandarizado</strong> por los <strong>navegadores</strong> modernos, pese a ser un <strong>lenguaje de programación multiparadigma</strong>, al igual que haga <strong>PHP</strong>, también tiene <strong>namespaces</strong> o <strong>espacios de nombre</strong>, aunque debido a la <strong>debilidad de las variables</strong> estos <strong>namespaces</strong> son mas <strong>virtuales</strong> que reales.</p>
<p>Entendiendo que es y para que sirve un <strong>namespace</strong>, para <strong>declararlo en javascript</strong>, lo que debemos de hacer es utilizar <strong>arrays para generarlo</strong>. Gracias a la <strong>debilidad y dinamismo de las variables en javascript</strong>, podemos <strong>asignar a una variable un array</strong> de posiciones por <strong>nombre</strong> y acceder a estas mediante un <strong>signo de puntuación</strong> "." y no por su clave común de <strong>array</strong> ["clave"], por lo que aquí es donde viene el truco. Básicamente lo que hacemos al <strong>declarar un namespace en javascript</strong> es asignar a un <strong>variable un array</strong> con las <strong>posiciones del namespace</strong> y luego ya dentro de estas posiciones, <strong>acceder</strong> como si desde <strong>.Net</strong> o <strong>Java</strong> se tratase. Con un <strong>ejemplo</strong> se ve mas <strong>sencillo</strong>.</p>
<blockquote>
<pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> Indalcasa = <span style="color: #66cc66;">&#123;</span> Utilidades : <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#125;</span>;
&nbsp;
Indalcasa.<span style="color: #006600;">Utilidades</span>.<span style="color: #006600;">MiClase</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">variable</span> = <span style="color: #3366CC;">&quot;valor&quot;</span>;
&nbsp;
  <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">metodo</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>parametros<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">variable</span> + <span style="color: #3366CC;">&quot; &quot;</span> + parametros;
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> iClase = <span style="color: #003366; font-weight: bold;">new</span> Indalcasa.<span style="color: #006600;">Utilidades</span>.<span style="color: #006600;">MiClase</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
iClase.<span style="color: #006600;">variable</span> = <span style="color: #3366CC;">&quot;nuevo valor&quot;</span>;
<span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>iClase.<span style="color: #006600;">metodo</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;prueba&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre>
</blockquote>
<p>El <strong>ejemplo</strong> anterior mostrará una ventana de alert con un mensaje tal que "nuevo valor prueba", ya que hemos <strong>instanciado la clase</strong>, le hemos cambiado el <strong>valor al atributo de la clase</strong> y en el <strong>método de la clase</strong>, concatenamos el <strong>valor del atributo de la clase</strong> al parámetros que hemos pasado. Esto es un <strong>pequeño y sencillo ejemplo</strong> de lo que se puede hacer con <strong>javascript, namespaces y clases</strong>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/javascript/namespaces-o-espacios-de-nombre-virtuales-en-javascript/' addthis:title='Namespaces o espacios de nombre virtuales en javascript ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/javascript/namespaces-o-espacios-de-nombre-virtuales-en-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

