<?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>José Jorge Márquez Gómez</title>
	<atom:link href="http://jorge.queideas.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://jorge.queideas.com</link>
	<description>Experiencias de un ingeniero!</description>
	<lastBuildDate>Thu, 17 Nov 2011 11:49:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Arquitectura MVC</title>
		<link>http://jorge.queideas.com/index.php/2011/11/17/arquitectura-mvc/</link>
		<comments>http://jorge.queideas.com/index.php/2011/11/17/arquitectura-mvc/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 11:48:39 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[capas]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[ingenieria del software]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[patron]]></category>
		<category><![CDATA[teoria]]></category>

		<guid isPermaLink="false">http://jorge.queideas.com/?p=80</guid>
		<description><![CDATA[Os dejo una presentación que hice sobre arquitectura MVC, es una explicación muy conceptual y por encima pero lo suficiente a mi entender para que se entienda dicha arquitectura. ¡Que la disfruteis! Arquitectura MVC]]></description>
			<content:encoded><![CDATA[<p>Os dejo una presentación que hice sobre arquitectura MVC, es una explicación muy conceptual y por encima pero lo suficiente a mi entender<br />
para que se entienda dicha arquitectura.<br />
¡Que la disfruteis!</p>
<p><a href='http://jorge.queideas.com/wp-content/uploads/2011/11/Arquitectura-MVC.pdf'>Arquitectura MVC</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2011/11/17/arquitectura-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sin sentido</title>
		<link>http://jorge.queideas.com/index.php/2010/12/06/sin-sentido/</link>
		<comments>http://jorge.queideas.com/index.php/2010/12/06/sin-sentido/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 00:57:24 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[pensadores]]></category>
		<category><![CDATA[Pensamientos]]></category>
		<category><![CDATA[universidad]]></category>

		<guid isPermaLink="false">http://jorge.queideas.com/?p=78</guid>
		<description><![CDATA[Bueno, no estoy acostumbrado a contar cosas que me suelan ocurrir, pero es que ultimamente solo vivo para la universidad. No hago nada más que entregar un trabajo por alli, hacer una entrega por allá, joder&#8230; esto es demasiado. Pero bueno espero que todo esto de un fruto en el futuro porque la verdá no [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, no estoy acostumbrado a contar cosas que me suelan ocurrir, pero es que ultimamente solo vivo para la universidad. No hago nada más que entregar un trabajo por alli, hacer una entrega por allá, joder&#8230; esto es demasiado. Pero bueno espero que todo esto de un fruto en el futuro porque la verdá no veo nada de futuro en esto.<br />
Si miramos bien en el mundo de la informática los que triunfan son los que presentan un documento que ni siquiera saben lo que es o bien hacen una presentación en powerpoint que es la repera (y encima no lo han hecho ellos)&#8230;. no creo que sea la primera vez que esto ocurre en alguna empresa, ocurre en todas.</p>
<p>El que he me haya decidido a hacer la carrera es meramente porque en este país hay titulitis, si <em>TITULITIS</em>. A lo largo de lo que llevo trabajado (no es mucho, pero lo suficiente para ver las cosas que he visto) me he dado cuenta de que las personas no saben por lo que han estudiado, sencillamentente se preocupan de transmitir lo que han aprendido en su enseñanza&#8230; ¿dónde quedaron lo ideales de la curiosidad y la intriga? es decir, por qué las personas no se preocupa ahora de averiguar porqué ocurre tal cosa. Parecemos <strong>máquinas</strong> aplicando teoremas, algoritmos, ideales aprendidos.</p>
<p>Como dijo Einstein:</p>
<blockquote><p>Nunca consideres el estudio como una obligación, sino como una oportunidad para penetrar en el bello y maravilloso mundo del saber.</p></blockquote>
<p>Esto ya no es así, pues la gente se preocupa de estudiar para encontrar un trabajo (que no está mal por otro lado), pero perdemos mucho. Perdemos los ideales por lo que nuestros antepasados estuvieron sobre la tierra, Albert Einstein, Max Planck, Isaac Newton, Aristóteles&#8230; etc.. esto si eran verdaderos pensadores y no lo que tenemos hoy día.</p>
<p>Cuando uno está en la empresa se da cuenta de este tipo de cosas,siendo analista se da cuenta de muchos detalles más de este tipo, jefes que no tienen ni idea de lo que hablan, reuniones que no se le encuentran fin, productos que nuncan se terminan de definir (y encima te dicen que lo definas tu!!!). En fin, y cuando pones un poco de orden y cordura en el asunto te das cuenta de que no sirve de nada, pues lo que manda es la mano &#8220;divina&#8221;.</p>
<p>Pero todo esto forma parte de la vida&#8230; vida que nos ha tocado vivir&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2010/12/06/sin-sentido/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nuevo blog</title>
		<link>http://jorge.queideas.com/index.php/2010/11/27/nuevo-blog/</link>
		<comments>http://jorge.queideas.com/index.php/2010/11/27/nuevo-blog/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 18:52:34 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jorge.queideas.com/?p=75</guid>
		<description><![CDATA[He fusionado el blog de donet y dojava, además de ampliar la temática para poder así ayudar más en el blog. Espero así alimentarlo mucho más.]]></description>
			<content:encoded><![CDATA[<p>He fusionado el blog de donet y dojava, además de ampliar la temática para poder así ayudar más en el blog. Espero así alimentarlo mucho más.</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2010/11/27/nuevo-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrón Factoría (Factory)</title>
		<link>http://jorge.queideas.com/index.php/2010/08/27/patron-factoria-factory/</link>
		<comments>http://jorge.queideas.com/index.php/2010/08/27/patron-factoria-factory/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 11:41:40 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[DoNet]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Patrones]]></category>

		<guid isPermaLink="false">http://donet.queideas.com/?p=43</guid>
		<description><![CDATA[Un patrón factoría nos sirve para canalizar todas las creaciones de objetos en un solo punto. Esto es útil para un diseño robusto de nuestro sistema y ágil al cambio. El patrón factoría se puede combinar con el patrón singleton ya que es más cómodo su uso y útil su forma de usar. En este [...]]]></description>
			<content:encoded><![CDATA[<p>Un patrón factoría nos sirve para canalizar todas las creaciones de objetos en un solo punto. Esto es útil para un diseño robusto de nuestro sistema y ágil al cambio.</p>
<p>El patrón factoría se puede combinar con el patrón singleton ya que es más cómodo su uso y útil su forma de usar. En este ejemplo pondremos un factoría sin singleton.</p>
<p>Decir que el patrón factoría es del tipo patrones creacionales, que este tipo de patrón abstrae la forma de crear objetos concretos, dando así un soporte para crear objetos de forma abstracta.</p>
<p>Para empezar un patrón factoría debe cumplir:<br />
- Una función o método el cual se encarga de crear objetos de un tipo dado.<br />
- No es obligatorio pero si recomendable que dicha función o método devuelva una abstracción (interfaz o clase abstracta).</p>
<p>Imaginemos que una tienda de pizzas requiere de un software que necesita que tengan una serie de productos (pizzas variadas). Como buenos diseñadores que somos, la creación de objetos de pizzas se podrá hacer desde cualquier parte el proyecto, pero el problema es que hay muchos tipos de pizzas. El crear cada pizza de cada tipo en distintos puntos del programa sería lo primero que pensaríamos, pero&#8230; ¿si en vez de eso usamos sentido común y aplicamos el factoría?, esto nos permitiría que dado un nuevo producto o un cambio en alguno de ellos, que solo cambiemos en un solo lugar, teniendo más controlado dicho código. Incluso si os dais cuenta la agilidad al cambio es mucho mayor que ir cambiando todas las posibles apariciones de nuestras pizzas por el código.<br />
Pues bien, el factoría se encargaría de crear todo tipo de pizzas y las ofrecería a todos los posibles puntos del programa.</p>
<p>Nuestro ejemplo sería el siguiente:</p>
<p>- La interfaz IPizza:</p>
<div class="example-code">
<pre>
    interface IPizza
    {
        void quienSoy();
    }
</pre>
</div>
<p>- Las pizzas concretas:</p>
<div class="example-code">
<pre>
    public class PizzaBarbacoa: IPizza
    {
        #region Miembros de IPizza

        public void quienSoy()
        {
            Console.WriteLine("Soy una pizza de Barbacoa");
        }

        #endregion
    }
</pre>
</div>
<div class="example-code">
<pre>
    public class PizzaMargarita: IPizza
    {
        #region Miembros de IPizza

        public void quienSoy()
        {
            Console.WriteLine("Soy una pizza de Margarita");
        }

        #endregion
    }
</pre>
</div>
<div class="example-code">
<pre>
    public class PizzaPepperoni: IPizza
    {
        #region Miembros de IPizza

        public void quienSoy()
        {
            Console.WriteLine("Soy una pizza de Pepperoni");
        }

        #endregion
    }
</pre>
</div>
<p>- La factoría en cuestión:</p>
<div class="example-code">
<pre>
    public class PizzaFactory
    {
        public enum tipoPizza
        {
            Pepperoni,Margarita,Barbacoa
        }

        public IPizza getPizza(tipoPizza tipo)
        {
            switch (tipo)
            {
                case tipoPizza.Barbacoa:
                    return new PizzaBarbacoa();
                    break;
                case tipoPizza.Margarita:
                    return new PizzaMargarita();
                    break;
                case tipoPizza.Pepperoni:
                    return new PizzaPepperoni();
                    break;
                default:
                    return new PizzaBarbacoa();
            }
        }
    }
</pre>
</div>
<p>- Un pequeño test:</p>
<div class="example-code">
<pre>
    public class Test
    {
        public void testPizza()
        {
            //ejemplo no usando factoría
            IPizza pizza1 = new PizzaBarbacoa();
            pizza1.quienSoy();
            IPizza pizza2 = new PizzaMargarita();
            pizza2.quienSoy();
            IPizza pizza3 = new PizzaPepperoni();
            pizza3.quienSoy();
            IPizza pizza4 = new PizzaBarbacoa();
            pizza4.quienSoy();
            IPizza pizza5 = new PizzaMargarita();
            pizza5.quienSoy();

            //ejemplo usando factoría
            PizzaFactory factory = new PizzaFactory();
            IPizza pizza6 = factory.getPizza(PizzaFactory.tipoPizza.Barbacoa);
            pizza6.quienSoy();
            IPizza pizza7 = factory.getPizza(PizzaFactory.tipoPizza.Margarita);
            pizza7.quienSoy();
            IPizza pizza8 = factory.getPizza(PizzaFactory.tipoPizza.Pepperoni);
            pizza8.quienSoy();
        }
    }
</pre>
</div>
<p>Como veis la forma de uso y sus ventajas son mejores. Espero que os sirva!!. Hasta luego!</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2010/08/27/patron-factoria-factory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log4Net para C#</title>
		<link>http://jorge.queideas.com/index.php/2010/08/25/log4net-para-c/</link>
		<comments>http://jorge.queideas.com/index.php/2010/08/25/log4net-para-c/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 09:09:09 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[DoNet]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Log4NET]]></category>
		<category><![CDATA[Logging]]></category>

		<guid isPermaLink="false">http://donet.queideas.com/?p=50</guid>
		<description><![CDATA[Bueno hoy os voy a contar un poco como configurar log4net para c#. Pero antes deciros que es log4net. Log4Net es un framework portado de la librería log4java, el cual te ofrece todas las herramientas posibles para poder hacer un logging, control de errores, monitorización de aplicaciones para todas tus aplicaciones posibles. A mi modo [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno hoy os voy a contar un poco como configurar log4net para c#. Pero antes deciros que es log4net.</p>
<p>Log4Net es un framework portado de la librería log4java, el cual te ofrece todas las herramientas posibles para poder hacer un logging, control de errores, monitorización de aplicaciones para todas tus aplicaciones posibles. A mi modo de ver, es el log más bueno que he probado hasta ahora y es bastante fácil de configurar. Ofrece bastantes modos de monitorización e incluso el crearte los tuyos propios. Dicha librería la podeis obtener de <a href="http://logging.apache.org/log4net/index.html">http://logging.apache.org/log4net/index.html</a>.</p>
<p>Explicaremos algunos conceptos referentes al log4net.</p>
<p>Log4NET ofrece distintos niveles de monitorización predefinidos como son:</p>
<p>1. Debug: Se suele usar para líneas de debug.<br />
2. Info: Se suele usar para dar información relativa de vuestra aplicación.<br />
3. Warn: Son posibles puntos de ruptura de vuestro software, osea, posibles alertas importantes.<br />
4. Error: Se usa para detectar errores de vuestro software.<br />
5. Fatal: Se usa para detectar posibles errores importantes de software, es decir, que impidan el funcionamiento del mismo por ejemplo.</p>
<p>Estos niveles son los que trae predefinidos log4net, pero se pueden crear niveles personalizados.</p>
<p>Otro punto a destacar son los Appenders, esto no es sino el modo en que los distintos niveles del log4net van a ser monitorizados/logeados, en log4net existen estos entre otros:</p>
<p>1. FileAppender: Logea el nivel definido en la configuración en fichero.<br />
2. RollingFileAppender: Logea el nivel definido en la configuración en un fichero que va rotando dependiendo de su peso.<br />
3. SmtpAppender: Logea el nivel definido en la configuracion y es enviado a un destinatario de correo.</p>
<p>Más adelante en un ejemplo de configuración veréis estos niveles configurados. Para más detalles de todas sus propiedades de los appenders podéis ver la web que tenéis a continuación.</p>
<p>Todos los podéis ver detallados en esta web <a href="http://logging.apache.org/log4net/release/config-examples.html">http://logging.apache.org/log4net/release/config-examples.html</a>.</p>
<p>Comencemos.</p>
<p>El primer paso es descargaros la librería de la web anterior, una vez descargada dicha librería debéis agregarla a las referencias de vuestro proyecto. Seguidamente vamos a configurar el log4net en el fichero de configuración de vuestra aplicación, en caso de una aplicación web será el web.config, en caso de una aplicación consola el app.config, etc&#8230;</p>
<p>En el tag &#8220;configuration&#8221; &#8211;&gt; &#8220;ConfigSection&#8221; &#8211;&gt; agregad la siguiente línea:</p>
<div class="example-code">
<pre>&lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"/&gt;</pre>
</div>
<p>A continuación en un tag nuevo que creemos llamado &#8220;&lt;log4net&gt;&#8221; se configuran allí los appenders. Cada uno tiene su propia configuración en la web anterior se pueden ver todas. Adjunto <a href="http://jorge.queideas.com/wp-content/uploads/2010/08/Ficheroconfiguracion.txt">Ejemplo log4net</a></p>
<p>Una vez tenemos esto configurado ya podemos hacer uso de nuestro log4net en nuestra aplicación. Un requisito que debe cumplir es que cada clase debe inicializar el log4net en su constructor tal que quede como pone en el siguiente código:</p>
<div class="example-code">
<pre>class test
{
private ILog log;
public test()
{
log4net.Config.XmlConfigurator.Configure();
log = LogManager.GetLogger(this.GetType()); //aquí procedemos a inicializar el objeto log.
}</pre>
</div>
<p>Para hacer uso de nuestro log es simple, solo deberemos llamar a los distintos niveles de alerta que posee a través del objeto log.</p>
<p>Espero que os sirva como inicialización con el log4net.</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2010/08/25/log4net-para-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrones de diseño Singular (Singleton) y Decorador (Abstract o Decorator) en .NET</title>
		<link>http://jorge.queideas.com/index.php/2009/11/24/patrones-de-diseno-singular-singleton-y-decorador-abstract-o-decorator-en-net/</link>
		<comments>http://jorge.queideas.com/index.php/2009/11/24/patrones-de-diseno-singular-singleton-y-decorador-abstract-o-decorator-en-net/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 08:41:57 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[DoNet]]></category>
		<category><![CDATA[Decorator]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Patrones]]></category>
		<category><![CDATA[Singleton]]></category>
		<category><![CDATA[Visual Studio.NET]]></category>

		<guid isPermaLink="false">http://donet.queideas.com/?p=32</guid>
		<description><![CDATA[Bueno, después de mi letargo (siento mucho no postear antes, pero la universidad me tenia tiene agobiado), voy a hablar de algunos patrones de diseño sobre .NET. Pero antes un poco de &#8220;historia&#8221;: Los patrones de diseño sirven para varias cosas, (extraído de wikipedia): * Proporcionar catálogos de elementos reusables en el diseño de sistemas [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, después de mi letargo (siento mucho no postear antes, pero la universidad me <del datetime="2009-11-24T08:45:31+00:00">tenia</del> tiene agobiado), voy a hablar de algunos patrones de diseño sobre .NET.</p>
<p>Pero antes un poco de &#8220;historia&#8221;:</p>
<p>Los patrones de diseño sirven para varias cosas, (extraído de wikipedia):<br />
* Proporcionar catálogos de elementos reusables en el diseño de sistemas software.<br />
* Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos y solucionados anteriormente.<br />
* Formalizar un vocabulario común entre diseñadores.<br />
* Estandarizar el modo en que se realiza el diseño.<br />
* Facilitar el aprendizaje de las nuevas generaciones de diseñadores condensando conocimiento ya existente.</p>
<p>Y como bien dicen en wikipedia no pretenden imponer nada y abusar de los mismos puede ser un error.</p>
<p>Bien veamos algunos patrones en .NET.</p>
<p><strong>Patron Singular (Singleton):</strong><br />
Este patrón nos asegura que solo haya una instancia por clase evitando así consumos excesivos de recursos o accesos inconsistentes. Sus usos pueden ser varios, entre ellos el acceso a configuraciones globales, de logging, etc..<br />
El esquema general sería:</p>
<div class="example-code">
<pre>Public Class PatronSingular
 Private Shared instanciaUnica As PatronSingular

 Private Sub New()
 'constructor privado para generar la instancia la propia clase
 End Sub

 Public Shared Function getInstance() As PatronSingular
 'controlamos la creacion de objetos desde la propia clase.
 If instanciaUnica Is Nothing Then
 instanciaUnica = New PatronSingular()
 End If
 Return instanciaUnica
 End Function
End Class</pre>
</div>
<p>Un patrón Singleton su constructor debe ser privado para que sea la clase la  controle su propia creación y sea responsable de la misma.  Debemos crear un método, que normalmente se llama &#8220;getInstance()&#8221; que nos devuelve dicha instancia de clase para su uso.</p>
<p><strong>Patrón decorador (Decorator):</strong><br />
Nos hace de &#8220;envoltura&#8221; de objetos, en una definición formal lo que hace es definir una funcionalidad a los objetos que se hereden de este y asignarles  así una responsabilidad. En resumen, nos da la posibilidad de generar clases con  funciones que se generen dinámicamente. Hay muchos ejemplos de este tipo en .NET, entre ellos los de manejo de ficheros (FileStream su decorador es Stream). En  comparación con JAVA, esto correspondería a las clases abstractas. Ejemplo:</p>
<div class="example-code">
<pre>Public MustInherit Class PatronDecorador
 'Ofrece una funcionalidad base para todos sus hijos pero
 'que funcionen de manera distinta:
 'por ejemplo:
 'Chocolate tendrá un precio y una descripción distinta que
 'la mantequilla, pero ambos se pueden derretir!.
 Public MustOverride Function Precio() As Double
 Public MustOverride Function Descripcion() As Double

 Public Function Derretir() As Boolean
 'Derretir
 Return True
 End Function

 'Obliga que sus hijos se deban instanciar de una forma concreta
 Public Sub New(ByVal ModificadorAcceso As String)
 End Sub
End Class

Public Class Chocolate
 Inherits PatronDecorador

 Public Overrides Function Descripcion() As Double
 Return "Chocolate"
 End Function

 Public Overrides Function Precio() As Double
 Return 10.2
 End Function

 Public Sub New(ByVal param As String)
 MyBase.New(param)
 End Sub
End Class

Public Class Mantequilla
 Inherits PatronDecorador

 Public Overrides Function Descripcion() As Double
 Return "Mantequilla"
 End Function

 Public Overrides Function Precio() As Double
 Return 3.6
 End Function

 Public Sub New(ByVal param As String)
 MyBase.New(param)
 End Sub
End Class</pre>
</div>
<p>Bueno, espero escribir más a menudo, pero el tiempo me tiene ahogado!!,  en otro artículo intentaré describir los patrones estrategia, adaptadores y observadores.  Saludos!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2009/11/24/patrones-de-diseno-singular-singleton-y-decorador-abstract-o-decorator-en-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Forzar cambio de idioma en ASP.NET</title>
		<link>http://jorge.queideas.com/index.php/2009/04/28/forzar-cambio-de-idioma-en-aspnet/</link>
		<comments>http://jorge.queideas.com/index.php/2009/04/28/forzar-cambio-de-idioma-en-aspnet/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 06:33:39 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[DoNet]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Cultura]]></category>
		<category><![CDATA[Idioma]]></category>
		<category><![CDATA[Net Framework]]></category>
		<category><![CDATA[Thread]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio.NET]]></category>

		<guid isPermaLink="false">http://donet.queideas.com/?p=30</guid>
		<description><![CDATA[Bueno, para comenzar diremos que los estándares admitidos por .NET para los idiomas los podéis ver en la MSDN http://msdn.microsoft.com/es-es/library/system.globalization.cultureinfo(VS.80).aspx, deciros tambíen que la cultura en un WebForm se establece automáticamente por cada sesión de usuario que se inice en el web, dependiendo del idioma que esté configurado en el navegador del cliente. Ahora nos [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, para comenzar diremos que los estándares admitidos por .NET para los idiomas los podéis ver en la MSDN <a href="http://msdn.microsoft.com/es-es/library/system.globalization.cultureinfo(VS.80).aspx">http://msdn.microsoft.com/es-es/library/system.globalization.cultureinfo(VS.80).aspx</a>, deciros tambíen que la cultura en un WebForm se establece automáticamente por cada sesión de usuario que se inice en el web, dependiendo del idioma que esté configurado en el navegador del cliente.</p>
<p>Ahora nos surge el problema de forzar el idioma a escoger, bien porque nuestra página permite otros idiomas o bien por necesidad intrínseca del funcionamiento de nuestra página. Teniendo en cuenta los estándares mencionados arriba, podemos variar la cultura de nuestra página de la siguiente manera:</p>
<div class="example-code">
<pre>Thread.CurrentThread.CurrentCulture = New CultureInfo("es-ES")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("es-ES")</pre>
</div>
<p>Bien, explico un poco esto, en las lineas podemos ver que vamos a variar la cultura actual del sitio web y la cultura de la interfaz, esto se hace con CurrentCulture y CurrentUICulture, en primera instancia debemos de establecer la cultura principal del programa a través del hilo principal de ejecución del mismo, esto se hace cogiendo este hilo principal, Thread.CurrentThread, y estableciendo la cultura en ese instante.</p>
<p>Otro problema que nos encontramos es que en el momento de cambiar la cultura, podríamos establecer esta cultura en el hilo en el instante que nos apetezca, pero ocurre que la página Webform ya ha establecido su cultura previamente a nosotros cambiarla, ya que hay un procedimiento en un nivel superior de la jerarquia de clases de la Webform que ha hecho este trabajo y ha escogido el idioma previamente. Pues bien, para solventar este problema y que el cambio de idioma lo veamos reflejado en nuestra web en el momento del cambio, hay otra solución, sobrecargar el método &#8220;<span style="font-size: x-small;">InitializeCulture&#8221; de la clase padre &#8220;System.Web.UI.Page&#8221; de nuestro WebForm, y ahí colocar el código del cambio de cultura, ya que este procedimiento es el que se encarga de inicializar la cultura de nuestra página antes de ser mostrada en el cliente. Esto quedaría así:</span></p>
<div class="example-code">
<pre>    Protected Overrides Sub InitializeCulture()
        Thread.CurrentThread.CurrentCulture = New CultureInfo("es-ES")
        Thread.CurrentThread.CurrentUICulture = New CultureInfo("es-ES")
    End Sub</pre>
</div>
<p>Bueno, y esto abre a la imaginación tanto como os apetezca, por cierto en el valor &#8220;es-ES&#8221; se pueden poner todos los valores aceptados por este método descrito en la web de arriba. Así que ya podeís cambiar el idioma de vuestra web &#8220;cuando os apetezca&#8221; <img src='http://jorge.queideas.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2009/04/28/forzar-cambio-de-idioma-en-aspnet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CLR (Common Languaje Runtime)</title>
		<link>http://jorge.queideas.com/index.php/2009/04/13/clr-common-languaje-runtime/</link>
		<comments>http://jorge.queideas.com/index.php/2009/04/13/clr-common-languaje-runtime/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 08:25:17 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[DoNet]]></category>
		<category><![CDATA[CLR]]></category>
		<category><![CDATA[MSIL]]></category>
		<category><![CDATA[Net Framework]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio.NET]]></category>

		<guid isPermaLink="false">http://donet.queideas.com/?p=19</guid>
		<description><![CDATA[Bien, en este post voy a intentar explicar que es el CLR de NET Framework, para mí, y para mi opinión personal el CLR es una maquina virtual al mismo estilo que JVM para java, es la máquina virtual donde se ejecuta el bytecode de los ensambladores generados en .NET. Los compiladores de lenguajes .NET [...]]]></description>
			<content:encoded><![CDATA[<p>Bien, en este post voy a intentar explicar que es el CLR de NET Framework, para mí, y para mi opinión personal el CLR es una maquina virtual al mismo estilo que JVM para java, es la máquina virtual donde se ejecuta el bytecode de los ensambladores generados en .NET. Los compiladores de lenguajes .NET se encargan de compilar el código a bytecode MSIL (Microsoft Intermediate Languaje), que es el interpretado por el CLR.</p>
<p>El CLR compila por bloques el código MSIL en tiempo real, es decir, conforme se vayan usando las funcionalidades del ensamblado, el CLR generará un código nativo que es el que finalmente se ejecutará en la máquinal, así se intenta abstraer el código creado en la máquina bajo cualquiera de los lenguajes usados en .NET del código máquina.</p>
<p>CLR se divide por capas en su núcleo, para dar más interoperabilidad con el sistema y los desarrolladores. Estos son:<br />
- Niveles de seguridad.<br />
- Manejo de excepciones.<br />
- Administración de hilos.<br />
- Administración de memoria.<br />
- Recolector de basura (GAC)</p>
<p>Destacar que a pesar que es una &#8220;maquina virtual&#8221; el CLR solo se ejecuta en entornos Windows.</p>
<p>Adjunto una pequeña imagen explicativa del CLR (Autor: <a title="User:Lastorset" href="http://commons.wikimedia.org/wiki/User:Lastorset">Leif Arne Storset</a>, Fuente: Wikipedia):</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-22" style="background-color: white;" title="CLR" src="http://jorge.queideas.com/wp-content/uploads/2009/04/800px-common_language_runtime_diagramsvg.png" alt="CLR" width="384" height="205" /></p>
<p>Es un post pequeño pero creo que explicativo a pequeños rasgos. Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2009/04/13/clr-common-languaje-runtime/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uso de nomenclatura Using</title>
		<link>http://jorge.queideas.com/index.php/2009/04/01/uso-de-nomenclatura-using/</link>
		<comments>http://jorge.queideas.com/index.php/2009/04/01/uso-de-nomenclatura-using/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 19:57:41 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[DoNet]]></category>
		<category><![CDATA[Net Framework]]></category>
		<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio.NET]]></category>

		<guid isPermaLink="false">http://donet.queideas.com/?p=17</guid>
		<description><![CDATA[Deciros que la nomenclatura using es muy útil usarla cuando usamos recursos que debemos liberar forzosamente (acceso a fichero, aperturas de registro en bd&#8217;s, manipulación de imágenes&#8230;etc) para no tener problemas despúes. Como nomenclatura de visual studio es muy usada para el acceso a ficheros, pero es posible usarse con cualquier clase que implemente la [...]]]></description>
			<content:encoded><![CDATA[<p>Deciros que la nomenclatura using es muy útil usarla cuando usamos recursos que debemos liberar forzosamente (acceso a fichero, aperturas de registro en bd&#8217;s, manipulación de imágenes&#8230;etc) para no tener problemas despúes.</p>
<p>Como nomenclatura de visual studio es muy usada para el acceso a ficheros, pero es posible usarse con cualquier clase que implemente la interfaz IDisposable, asegurándonos que la clase usada en el estamento using liberará &#8220;SI o SI&#8221; (como dice un presidente de un club de futbol <img src='http://jorge.queideas.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) los recursos que esté usando, dé error en el bloque de código o no, ya que es el Garbage Collector del visual studio el que se encarga de llamar a el método dispose de la clase que implementa la interfaz.</p>
<p>Para este ejemplo usaremos el acceso a un fichero.</p>
<p>El ejemplo es sencillo, ya que lo único que debemos hacer es usar la nomenclatura de este modo:</p>
<div class="example-code">
<pre>Using fich As New FileStream("C:\pruebas.txt", FileMode.Open)
       'CODIGO A ESCRIBIR PARA MANEJAR EL FICHERO
End Using</pre>
</div>
<p>De este modo nos estamos asegurando que  el fichero pruebas.txt será liberado cuando termine el bloque using, sin provocar problemas en posteriores accesos al fichero.</p>
<p>Hay casos, como por ejemplo, el acceso a datos que al declarar el bloque nos obliga a abrir dicha conexión dentro del bloque, con esto quiero decir, que no por crear el bloque using ya damos por hecho que el recurso se abre y se cerrará solo (esto último sí es cierto). Lo que damos por hecho es que en el caso del ejemplo anterior si se abrirá el archivo porque la clase FileStream en su constructor ya abre el recurso, pero en el caso de una conexion de datos el constructor de dicho conector de datos no abre la conexion en su constructor, con lo cual debemos abrirlo una vez asignado el recurso.</p>
<p>Ejemplo:</p>
<div class="example-code">
<pre>'ESTA DECLARACIÓN NO IMPLICA LA APERTURA DE LA CONEXIÓN SOLO LA INICIALIZACION DEL OBJETO
Using conn As New SqlConnection("CadenaConexion")
           conn.Open() 'Esto si nos asegura su apertura, ya el bloque using se encargará de liberarlo (cerrar la conexión)
          'CODIGO A ESCRIBIR
End Using</pre>
</div>
<p>Resumiendo,</p>
<p>Lo que si nos aseguramos con un bloque using es la liberación de recursos, pero no la apertura de esos recursos, esto dependerá de la clase usada en el using.</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2009/04/01/uso-de-nomenclatura-using/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crear blibliotecas de clases que se registren en el COM de Windows</title>
		<link>http://jorge.queideas.com/index.php/2009/03/30/crear-blibliotecas-de-clases-que-se-registren-en-el-com-de-windows/</link>
		<comments>http://jorge.queideas.com/index.php/2009/03/30/crear-blibliotecas-de-clases-que-se-registren-en-el-com-de-windows/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 21:06:36 +0000</pubDate>
		<dc:creator>José Jorge Márquez Gómez</dc:creator>
				<category><![CDATA[DoNet]]></category>
		<category><![CDATA[Assembly]]></category>
		<category><![CDATA[COM Windows]]></category>
		<category><![CDATA[DLL]]></category>
		<category><![CDATA[Net Framework]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio.NET]]></category>

		<guid isPermaLink="false">http://donet.queideas.com/?p=8</guid>
		<description><![CDATA[Yo estuve un tiempo buscando como registrar una DLL en el COM para la interoperabilidad con ASP 3.0, PHP, etc.. bueno despues de buscar y buscar, investigar, romperme los ojos&#8230; etc&#8230; era más simple de lo que pensaba. Para poder registrar una dll en el COM de windows primero debemos definir la clase como visible [...]]]></description>
			<content:encoded><![CDATA[<p>Yo estuve un tiempo buscando como registrar una DLL en el COM para la interoperabilidad con ASP 3.0, PHP, etc.. bueno despues de buscar y buscar, investigar, romperme los ojos&#8230; etc&#8230; era más simple de lo que pensaba. Para poder registrar una dll en el COM de windows primero debemos definir la clase como visible desde el COM y definirle una key o firma del ensamblado. Se hace de la siguiente manera:</p>
<p>1.- Indicamos al proyecto que sea visible desde el COM.</p>
<p style="text-align: center;"><img class="aligncenter size-large wp-image-11" title="COM register" src="http://jorge.queideas.com/wp-content/uploads/2009/03/paso12-1024x610.jpg" alt="COM register" width="520" height="309" /></p>
<p>2.- Creamos la key del proyecto.</p>
<p style="text-align: left;"><img class="aligncenter size-large wp-image-12" title="paso2" src="http://jorge.queideas.com/wp-content/uploads/2009/03/paso2-1024x582.jpg" alt="paso2" width="522" height="303" /></p>
<p style="text-align: left;">Hay que tener en cuenta que a la hora de compilar el ensamblado debemos hacer funciones (procedimientos) que sean &#8220;entendibles&#8221; por cualquier lenguaje de programación no .net, esto es, usar si se puede, funciones, procedimientos, propiedades, etc.. que devuelvan tipos de datos nativos, así será más facil entender por ASP3.0 por ejemplo, php o cualquier otro. Si un momento dado tu ensamblado posee funciones no compatibles con COM el registro del COM avisará cuando se registre en la máquina (solo si necesita registro para aplicaciones no .NET). Si estos ensamblados se van a usar en .NET solo hay que añadirlos al assembly de windows, esto se hace:</p>
<p style="text-align: left;">1.- Abrimos una aplicacion consola desde el path de Visual Studio.</p>
<p style="text-align: left;">2.- Escribimos en la linea de comandos: gacutil -I RUTAENSAMBLADO (Ej. gacutil -I c:\midll.dll)</p>
<p style="text-align: left;">Si necesitamos interoperabilidad con COM hay que registrar el ensamblado en windows. Se hace: regasm /tlb /codebase RUTAENSAMBLADO (Ej. regasm /tlb /codebase c:\rutadll.dll)</p>
<p style="text-align: left;">Esto debe mostrarte un mensaje de finalización en ingles como que se ha procedido al registro correctamente, en el caso que hubiera alguna incompatibilidad (como hemos comentado antes) de tipos de datos no compatibles con COM, se verá como en este paso la aplicación regasm lo mostrará.</p>
<p style="text-align: left;">Bueno, después de escribir este tocho &#8220;como mi primr HOLA MUNDO&#8221; <img src='http://jorge.queideas.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  del blog. Espero que lo veáis util y hagamos de esto un blog con bastantes post para ayudar&#8230;. un saludo!!</p>
]]></content:encoded>
			<wfw:commentRss>http://jorge.queideas.com/index.php/2009/03/30/crear-blibliotecas-de-clases-que-se-registren-en-el-com-de-windows/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

