﻿<?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>El Blog de Fox</title>
	<atom:link href="http://blog.foxandxss.net/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.foxandxss.net</link>
	<description>Fomentando el desarrollo y el software libre bajo .NET</description>
	<lastBuildDate>Thu, 12 Aug 2010 12:22:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Cambio hecho</title>
		<link>http://blog.foxandxss.net/index.php/cambio-hecho/</link>
		<comments>http://blog.foxandxss.net/index.php/cambio-hecho/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 11:48:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.foxandxss.net/blog/?p=428</guid>
		<description><![CDATA[Buenas! Ya está el blog vivito y coleando, eso sí, tengo que ir post por post corrigiendo tags html puesto que el exportador / importador de wordpress es un poco basurita. Si a partir del Lunes (dadme unos días para ir corrigiendo ) seguís viendo fallos, dejad un comentario en este post y los corregiré. [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas!</p>
<p>Ya está el blog vivito y coleando, eso sí, tengo que ir post por post corrigiendo tags html puesto que el exportador / importador de wordpress es un poco basurita.</p>
<p>Si a partir del Lunes (dadme unos días para ir corrigiendo <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) seguís viendo fallos, dejad un comentario en este post y los corregiré.</p>
<p>Ahora estoy en <a href="https://www.arvixe.com/">Arvixe</a> y la verdad, mucho más rápido, muchas más features y mucho más todo <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Un saludín.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/cambio-hecho/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Me cambio de hosting</title>
		<link>http://blog.foxandxss.net/index.php/me-cambio-de-hosting/</link>
		<comments>http://blog.foxandxss.net/index.php/me-cambio-de-hosting/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 18:32:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=421</guid>
		<description><![CDATA[Hola! Voy a hacer un cambio de hosting a uno en mejores condiciones para mi blog y mis pruebas alternativas. En un principio la URL no va a cambiar en absoluto, simplemente estará una tarde o así sin funcionar, así que si veis porno o algo raro mientras está de mantenimiento, no es culpa mia.]]></description>
			<content:encoded><![CDATA[<p>Hola!</p>
<p>Voy a hacer un cambio de hosting a uno en mejores condiciones para mi blog y mis pruebas alternativas.</p>
<p>En un principio la URL no va a cambiar en absoluto, simplemente estará una tarde o así sin funcionar, así que si veis porno o algo raro mientras está de mantenimiento, no es culpa mia.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/me-cambio-de-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrón Repository</title>
		<link>http://blog.foxandxss.net/index.php/patron-repository/</link>
		<comments>http://blog.foxandxss.net/index.php/patron-repository/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 17:58:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[patrones]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=411</guid>
		<description><![CDATA[Hoy os traigo un patrón de diseño, en concreto el patrón Repository Antes de explicar en qué consiste dicho patrón y de meternos en faena voy a explicar el por qué es útil. Todos sabemos que nuestra aplicación ideal es aquella donde cada parte de la misma está bien separada de las otras, donde la [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy os traigo un patrón de diseño, en concreto el patrón <b>Repository</b></p>
<p>Antes de explicar en qué consiste dicho patrón y de meternos en faena voy a explicar el por qué es útil.</p>
<p>Todos sabemos que nuestra aplicación ideal es aquella donde cada parte de la misma está bien separada de las otras, donde la mantenibilidad sea máxima, donde podamos ampliar por donde queramos sin bloquearnos en partes donde la arquitectura no puede crecer más, aquella que nos permita cambiar una parte de la aplicacion sin efectos secundarios&#8230;</p>
<p>Un mundo color de rosa, ¿Verdad? Sin duda.</p>
<p>¿Cuál es el problema? Pues que no podemos hacer algo en plan:<br />
<span id="more-411"></span></p>
<pre class="brush: csharp;">
application.AplicacionIdealMode();
</pre>
<p>Necesitamos cuidar trozo de código que escribamos, debemos organizar bien las clases, desacoplarlas lo máximo posible&#8230; Se que es mucho, pero granito a granito hacemos la playa, quiero decir, la aplicación ideal.</p>
<p>Hoy vengo a contaros uno de esos granitos.</p>
<p>Como sabéis, algo que ayuda mucho es dividir la aplicación en capas, por ejemplo en una aplicación <b>WPF</b> pues lo ideal es la <i>vista</i>, el <i>viewmodel</i>, <i>el modelo</i> y&#8230; la <i>lógica del negocio</i>.</p>
<p>Lo mismo para una aplicación web, <i>vista</i>, <i>controlador</i>, <i>modelo</i> y la <i>lógica del negocio</i>.</p>
<p>Para este artículo en cuestión lo que nos interesa es la lógica del negocio.</p>
<p>Imaginad que tenéis 15 clases que contienen información que será almacenada en &#8220;lo que sea&#8221;, una base de datos, a un servidor mail, a un fichero de texto plano&#8230; Si hoy decides que todo eso va a texto plano y cada clase se encarga de guardar su información en un .txt, pues será una real gracia cuando mañana tu aplicación crezca y necesites una base de datos para que esto siga avanzando. ¿Qué harás? ¿Cambiar media aplicación para que deje de usar un .txt y ahora use una base de datos? ¿Qué pasa si pasado ya no quieres bases de datos? ¿Y si X clase necesita además enviar datos por email? Suena a mucho lio que te hará perder mucho tiempo.</p>
<p>¿Qué hacemos en este caso? Pues colocar todo lo que sea el acceso a datos, o sea, la persistencia en otro sitio y así desacoplar la aplicación lo máximo posible.</p>
<p>¿Empezamos?</p>
<p>Creamos una nueva solución vacía en Visual Studio (solución en blanco)</p>
<p>Le ponemos de nombre pues: <i>TutoRepositorios</i></p>
<p>Ahi creamos una nueva libreria de clases llamada: <i>TutoRepositorios.Dominio</i></p>
<p>Borramos el fichero <i>Class1.cs</i> y creamos un directorio llamado <i>Entidades</i>, dentro de dicho directorio creamos una clase llamada <i>Libro</i>, el código de dicha clase será:</p>
<pre class="brush: csharp;">
namespace TutoRepositorios.Dominio.Entidades
{
    public class Libro
    {
        public int Id { get; set; }
        public string Nombre { get; set; }
        public string Autor { get; set; }
    }

	public override string ToString()
	{
		return string.Format(&quot;Nombre: {0}\nAutor: {1}&quot;, Nombre, Autor);
	}
}
</pre>
<p>Algo sencillito para nuestro ejemplo <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Vamos a crear una aplicación que muestre un listado de libros, para ello vamos a crear crear un repositorio para los libros.</p>
<p>Pero&#8230; ¿Qué es un repositorio? Un repositorio es una clase que servirá como intermediario entre nuestra aplicación y nuestros datos, dicho con otras palabras, será una clase que nos ofrecerá una interfaz CRUD (Crear, Obtener, Actualizar, Borrar (Create, Retrieve, Update, Delete en inglés)).</p>
<p>Vamos a implementarla para entenderlo mejor.</p>
<p>¿Cómo lo hacemos? ¿Creamos una clase llamada no sé <i>LibroRepositorio</i> y ahi metemos todo el código? Sí y no, si bien es una forma correcta de hacerlo, por muy poco esfuerzo más podemos añadir unos cuantos granos más a nuestra playa, errr aplicación.</p>
<p>Para ello vamos a crear una interfaz para nuestro repositorio, para ello creamos una nueva carpeta en nuestro dominio llamada: <i>Repositorios</i>, dentro creamos una interfaz llamada: <i>ILibrosRepositorio</i></p>
<pre class="brush: csharp;">
namespace TutoRepositorios.Dominio.Repositorios
{
    public interface ILibrosRepositorio
    {
        void Insertar(Libro libro);
        void Borrar(Libro libro);
        Libro Obtener(int id);
		IList&lt;Libro&gt; ObtenerTodos();
        void GuardarCambios();
    }
}
</pre>
<p>Una interfaz muy sencillita.</p>
<p>Ahora bien, ¿No es esto repetir código? Quiero decir, ¿Para qué una interfaz y luego una clase que la implemente? Fácil, si tienes un repositorio que usa un .txt para persistencia y luego quieres uno para guardar en bases de datos, pues ya tienes una interfaz que declara el cómo ha de ser un repositorio de libros, solo tienes que implementar dicha interfaz y ya está.</p>
<p>No solo eso, para hacer pruebas unitarias esto es un requerimiento.</p>
<p>Imagina que la clase que quieres testear usa el repositorio de libros el cual consulta a una base de datos. ¿No sería contraprudecente testear dicha clase y que ésta a la vez tenga que acceder a la base de datos? Imagina que para la prueba de dicha clase has de crear 10 elementos en el repositorio y luego borrar 3, eso se queda guardado en la base de datos&#8230; ¿La solución? Crear un repositorio de mentira para las pruebas, así podrás probar la clase sin depender de la base de datos, y no generarás basura en tus pruebas.</p>
<p>Uhm, interesante&#8230; Vamos a crear un repositorio de mentira a ver&#8230;</p>
<p>Crea una nueva clase llamada: <i>FakeLibrosRepositorio</i> en la carpeta de repositorios:</p>
<pre class="brush: csharp;">
namespace TutoRepositorios.Dominio.Repositorios
{
    public class FakeLibrosRepositorio : ILibrosRepositorio
    {
        private IList&lt;Libro&gt; _libros = new List&lt;Libro&gt;();

        public void Insertar(Libro libro)
        {
            _libros.Add(libro);
        }

        public void Borrar(Libro libro)
        {
            _libros.Remove(libro);
        }

        public Libro Obtener(int id)
        {
            return _libros.SingleOrDefault(l =&gt; l.Id == id);
        }

        public IList&lt;Libro&gt; ObtenerTodos()
        {
            return _libros.ToList();
        }

        public void GuardarCambios()
        {
            // No necesitamos guardar nada en este repo fake.
        }
    }
}
</pre>
<p>Como veis, un repositorio muy básico donde realmente no persiste los datos, solo los almacena en una lista.</p>
<p>¿Lo probamos?</p>
<p>Añadimos un nuevo proyecto a nuestra solución, concretamente una aplicación de consola (Que para el caso nos da igual), vamos a llamarla: <i>TutoRepositorios.Consola</i></p>
<p>Añadimos una referencia del proyecto <i>TutoRpositorios.Dominio</i> para poder usar nuestro repositorio, añadimos el siguiente código de prueba en la clase <i>program.cs</i></p>
<pre class="brush: csharp;">
namespace TutoRepositorios.Consola
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creamos un repositorio fake
            ILibrosRepositorio repo = new FakeLibrosRepositorio();

            // Insertamos 3 libros
            repo.Insertar(new Libro {Id = 1, Autor = &quot;Jesus&quot;, Nombre = &quot;Operadores de Linq&quot;});
            repo.Insertar(new Libro {Id = 2, Autor = &quot;Alvaro&quot;, Nombre = &quot;Php para todos&quot;});
            repo.Insertar(new Libro {Id = 3, Autor = &quot;Manolo&quot;, Nombre = &quot;Java Avanzado&quot;});

            // Vamos a impromir el libro con el Id == 1
            Console.WriteLine(&quot;Libro Id == 1&quot;);
            Console.WriteLine(repo.Obtener(1).ToString() + &quot;\n&quot;);

            // Ya no queremos el libro primero, vamos a borrarlo
            var libro = repo.Obtener(1);

            if (libro != null)
                repo.Borrar(libro);

            // Vamos a crear una lista con los libros de nuestro repo
            var libros = repo.ObtenerTodos();

            // Vamos a imprimirlos
            Console.WriteLine(&quot;Todos los libros:&quot;);
            foreach (var lib in libros)
                Console.WriteLine(lib.ToString() + &quot;\n&quot;);
        }
    }
}
</pre>
<p>Sencillo de usar nuestro repositorio, ¿No? Hemos añadido 3 libros, hemos imprimido uno, borrado otro&#8230; La interfaz de nuestro repositorio es muy muy clarita y eso nos facilita el trabajo.</p>
<p><a href="http://www.foxandxss.net/CosasBlog/Repositorios/consola.PNG"><img alt="" src="http://www.foxandxss.net/CosasBlog/Repositorios/consola.PNG" class="alignnone" width="477" height="275" /></a></p>
<p>He aquí el patrón repositorio, nada más.</p>
<p><a href="http://www.foxandxss.net/CosasBlog/Repositorios/cuentanosmas.jpg"><img alt="" src="http://www.foxandxss.net/CosasBlog/Repositorios/cuentanosmas.jpg" class="alignnone" width="523" height="334" /></a></p>
<p>Bueeno, os contaré más, y así verle más la gracia a esto de los repositorios.</p>
<p>Nuestro <i>FakeLibrosRepositorio</i> es un poco basura, ¿Verdad? Si bien funciona, no hay persistencia&#8230;</p>
<p>Vaaale vaaale, vamos a persistir los datos en un <b>SQL Server</b>. Para ello nos vamos al explorador de servidores -> Nueva conexión, seeleccinamos SQL Server, colocamos el nombre de nuestro servidor, en mi caso: <i>.\SQLEXPRESS</i> le damos un nombre, por ejemplo: <i>TutoRepositorio</i>.</p>
<p>Ahora creamos una tabla de la siguiente manera:</p>
<p><a href="http://www.foxandxss.net/CosasBlog/Repositorios/tabla.PNG"><img alt="" src="http://www.foxandxss.net/CosasBlog/Repositorios/tabla.PNG" class="alignnone" width="404" height="159" /></a></p>
<p>Acordaros de añadir en la columna &#8220;Id&#8221; que sea identity, para ello os vais a las propiedades de la columna, buscáis la parte de la especificación de identidad, lo expandís y le dais a que sí en lo de si es identidad (no sé muy bien como estará en castellano).</p>
<p>Vamos a añadir algunos datos de prueba:</p>
<p><a href="http://www.foxandxss.net/CosasBlog/Repositorios/datostabla.PNG"><img alt="" src="http://www.foxandxss.net/CosasBlog/Repositorios/datostabla.PNG" class="alignnone" width="363" height="142" /></a></p>
<p>Recordad que el Id se pone solo <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Vale, ya tenemos la base de datos y algunos datos&#8230;</p>
<p>Como esto es un ejemplo, vamos por lo fácil, vamos a tirar de <b>Linq To Sql</b> y vamos a mapear manualmente nuestra clase <i>Libro</i> para que corresponda con la tabla de la base de datos. (En un futuro quiero enseñar como usar la técnica <i>code-first</i> para hacer esto más bonito)</p>
<p>La clase <i>Libro</i> quedaría así:</p>
<pre class="brush: csharp;">
namespace TutoRepositorios.Dominio.Entidades
{
    [Table(Name = &quot;Libros&quot;)]
    public class Libro
    {
        [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync=AutoSync.OnInsert)]
        public int Id { get; set; }

        [Column] public string Nombre { get; set; }
        [Column] public string Autor { get; set; }

        public override string ToString()
        {
            return string.Format(&quot;Nombre: {0}\nAutor: {1}&quot;, Nombre, Autor);
        }
    }
}
</pre>
<p>[blockquote]<br />
NOTA: Necesitais agregar una referencia de <i>System.Data.Linq</i> al proyecto para poder usar dichos atributos<br />
[/blockquote]</p>
<p>Hecho, ya está eso listo.</p>
<p>Ahora nos toca el repositorio para esto. Como habéis deducido es tan sencillo como crear una clase que implemente nuestra interfaz y ya está. Creamos <i>SqlLibrosRepositorio</i> en la carpeta de repositorios:</p>
<pre class="brush: csharp;">
namespace TutoRepositorios.Dominio.Repositorios
{
    public class SqlLibrosRepositorio : ILibrosRepositorio
    {
        private DataContext _db;
        private Table&lt;Libro&gt; _libros;

        public SqlLibrosRepositorio(string cadenaConexion)
        {
            _db = new DataContext(cadenaConexion);
            _libros = _db.GetTable&lt;Libro&gt;();
        }

        public void Insertar(Libro libro)
        {
            _libros.InsertOnSubmit(libro);
        }

        public void Borrar(Libro libro)
        {
            _libros.DeleteOnSubmit(libro);
        }

        public Libro Obtener(int id)
        {
            return _libros.SingleOrDefault(l =&gt; l.Id == id);
        }

        public IList&lt;Libro&gt; ObtenerTodos()
        {
            return _libros.ToList();
        }

        public void GuardarCambios()
        {
            _db.SubmitChanges();
        }
    }
}
</pre>
<p>¿Queda muy claro verdad? Te preguntarás el por qué el constructor del repositorio recibe la cadena de conexión en vez de asignarsela directamente dentro del repositorio. Es otro granito de arena más, si injectamos la cadena de conexión en el constructor, podremos reusar este repositorio con cualquier base de datos que queramos <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Vale, vamos ahora a usar este repo en nuestra aplicación de consola:</p>
<pre class="brush: csharp;">
namespace TutoRepositorios.Consola
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creamos un repositorio
            ILibrosRepositorio repo = new SqlLibrosRepositorio(@&quot;Data Source=.\SQLEXPRESS;Initial Catalog=TutoRepositorio;Integrated Security=True&quot;);

            // Vamos a impromir el libro con el Id == 1
            Console.WriteLine(&quot;Libro Id == 1&quot;);
            Console.WriteLine(repo.Obtener(1).ToString() + &quot;\n&quot;);

            // Ya no queremos el libro primero, vamos a borrarlo
            var libro = repo.Obtener(1);

            if (libro != null)
                repo.Borrar(libro);

            // Vamos a crear un nuevo libro
            libro = new Libro {Autor = &quot;Pco&quot;, Nombre = &quot;Patrones de diseño&quot;};
            repo.Insertar(libro);

            // Ouch, puse Pco en vez de Paco, vamos a actualizarlo
            libro.Autor = &quot;Paco&quot;;

            repo.GuardarCambios();

            // Vamos a crear una lista con los libros de nuestro repo
            var libros = repo.ObtenerTodos();

            // Vamos a imprimirlos
            Console.WriteLine(&quot;Todos los libros:&quot;);
            foreach (var lib in libros)
                Console.WriteLine(lib.ToString() + &quot;\n&quot;);
        }
    }
}
</pre>
<p><a href="http://www.foxandxss.net/CosasBlog/Repositorios/consola2.PNG"><img alt="" src="http://www.foxandxss.net/CosasBlog/Repositorios/consola2.PNG" class="alignnone" width="533" height="263" /></a></p>
<p>Como veis, la forma de usar el repositorio no ha cambiado en absoluto, insertamos y obtenemos libros de la misma forma, usando la misma interfaz. La unica diferencia es que ahora tenemos la posibilidad de persistir nuestros datos <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Otra ventaja de esto es que si ahora queremos usar este dominio en no sé, una aplicación <b>ASP.NET MVC</b> pues no tendríamos que cambiar nada, solo usar el repositorio como hemos hecho aquí.</p>
<p>No voy a detallar los pasos, mostraré lo relevante y el resultado:</p>
<p>El controlador que con la acción de mostrar los datos:</p>
<pre class="brush: csharp;">
namespace TutoRepositorios.WebUi.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        private ILibrosRepositorio _repo =
            new SqlLibrosRepositorio(
                @&quot;Data Source=.\SQLEXPRESS;Initial Catalog=TutoRepositorio;Integrated Security=True&quot;);

        public ActionResult Index()
        {
            var libros = _repo.ObtenerTodos();
            return View(libros);
        }

    }
}
</pre>
<p>Simplemente creamos el repo, creamos una lista de libros y la enviamos a la vista que la imprime:</p>
<p><a href="http://www.foxandxss.net/CosasBlog/Repositorios/web.PNG"><img alt="" src="http://www.foxandxss.net/CosasBlog/Repositorios/web.PNG" class="alignnone" width="466" height="382" /></a></p>
<p>¿Habeis visto? ¡Hemos creado una capa de acceso a datos independiente del resto, la hemos usado en una aplicación de consola, en una web y no hay que cambiarla!</p>
<h3>Consideraciones finales</h3>
<p>El método de guardar los cambios&#8230; Es lógico que tenemos que guardar nuestros datos pero&#8230; ¿No es un poco pesado tener que ir llamando al dichoso método cada vez que hagamos cambios?</p>
<p>Tenemos dos opciones y las dos perfectamente válidas:</p>
<p>Crear un método que llamaremos explicitamente cuando lo necesitemos (Como hemos hecho aquí). La ventaja que tiene es que nos permite hacer varios cambios al repositorio sin guardar los cambios, lo que nos da flexibilidad, por contra es eso, tenemos que ir llamandolo muchas veces.</p>
<p>No crearlo, guardar implicitamente los cambios en cada método del repositorio que haga cambios a la base de datos. Esto es útil si realmente necesitamos guardar los cambios cada vez que toquemos algo, así nos ahorramos código <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Todavía hay más granitos de arena, pero esos ya se salen fuera de este tutorial.</p>
<p>Por ejemplo, todavía se puede desacoplar lo que hemos visto algo más. Echandole un ojo al controlador de este último ejemplo&#8230; Estamos instanciando el repositorio ahi a mano, lo que nos quita flexibilidad&#8230;. Si queremos testear dicho controlador, nos vamos a tener que tragar ese repositorio, y si queremos cambiarlo por uno Fake como el que ya tenemos, necesitariamos reasignar el repositorio al Fake y bueno, eso no es flexible para nada&#8230;</p>
<p>¿La solución? Injección de dependencias, ¿La explicación? En otro artículo <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ahora sí que está esto terminado.</p>
<p>Os dejo el proyecto aquí (.NET 4)</p>
<p>Hasta otra.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/patron-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parón y problema con el blog</title>
		<link>http://blog.foxandxss.net/index.php/paron-y-problema-con-el-blog/</link>
		<comments>http://blog.foxandxss.net/index.php/paron-y-problema-con-el-blog/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 17:48:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=409</guid>
		<description><![CDATA[Hola, sé que hace tiempo que no escribo nada, pero entre las vacaciones y que estoy dandole caña a la web, y todavía no tengo muchos conocimientos para escribir sobre ello, ahora he vuelto a retomar WPF (el cual pausé para darle caña a la web). En resumen, volveré a escribir artículos, no 20 al [...]]]></description>
			<content:encoded><![CDATA[<p>Hola, sé que hace tiempo que no escribo nada, pero entre las vacaciones y que estoy dandole caña a la web, y todavía no tengo muchos conocimientos para escribir sobre ello, ahora he vuelto a retomar WPF (el cual pausé para darle caña a la web).</p>
<p>En resumen, volveré a escribir artículos, no 20 al mes, pero intentaré escribir todas las cosas interesantes que vaya aprendiendo <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Por otro lado, no sé que pasa que si intentas acceder a mi blog en plan:</p>
<p>http://blog.foxandxss.net</p>
<p>o</p>
<p>http://www.foxandxss.net/blog</p>
<p>Te dice que la página no existe, eso si, si ya pones el index.php ya funciona. No sé por qué pasa, pero pasa <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/paron-y-problema-con-el-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo publicar tu obra en Lulu</title>
		<link>http://blog.foxandxss.net/index.php/como-publicar-tu-obra-en-lulu/</link>
		<comments>http://blog.foxandxss.net/index.php/como-publicar-tu-obra-en-lulu/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 15:08:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Offtopic]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=405</guid>
		<description><![CDATA[Hola! Siento no haber escrito mucho últimamente, ya sabéis, exámenes y bueno, estoy dandole caña a la programación web pero nada lo suficientemente interesante por ahora como para escribir un artículo. Por otro lado, tengo un viaje inminente, así que estaré ausente un poco más. Bueno, a lo que iba&#8230; Este post quizás es algo [...]]]></description>
			<content:encoded><![CDATA[<p>Hola!</p>
<p>Siento no haber escrito mucho últimamente, ya sabéis, exámenes y bueno, estoy dandole caña a la programación web pero nada lo suficientemente interesante por ahora como para escribir un artículo. Por otro lado, tengo un viaje inminente, así que estaré ausente un poco más.</p>
<p>Bueno, a lo que iba&#8230; Este post quizás es algo offtopic para lo que es el blog en sí, pero quizá muchos teneis la idea de publicar vuestro libro / proyecto / tesis / &#8230;<br />
<span id="more-405"></span><br />
En mi dia yo tuve muchas dudas sobre el proceso de pasasr de tener mi .doc listo a tener mi libro publicado, así que este post os diré los pasos a seguir además de daros algún consejo para que no cometáis los mismos errores de novato que yo tuve <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Preferiblemente antes de empezar tu obra es elegir el tamaño del papel (para evitar reestructurar luego todo el documento). Para ello os dirigís a la siguiente página:</p>
<p><a href="http://www.lulu.com/publish/books/">Formatos de libros</a></p>
<p>Aquí tenéis los formatos de los libros además de plantillas de Microsoft Word para cada formato.</p>
<p>Por ejemplo el típico libro de informática usa el formato <b>Crown Quarto</b>, así que si queréis usar ese, os bajáis la plantilla y escribís vuestra obra ahí.</p>
<p>Vamos a suponer que habéis completado la obra, habéis creado el índice (recordad que Word lo genera automáticamente si queréis).</p>
<p>Importante decir que aunque sea vuestra obra, tenéis que cumplir unos requisitos especificados en ésta página:</p>
<p><a href="https://support.lulu.com/View.jsp?procId=0177c87f892ab2ff814ae6a83a8b365b&#038;authToken=1ce56cb38ed2d2bc77144aef72e2ee3e&#038;forceLogout=true&#038;locale=es_ES">Requsitos</a></p>
<p>A modo de resumen:</p>
<ul>
<li>Márgenes correctos (cosa que no os preocupará si usais las plantillas)</li>
<li>Última página en blanco</li>
<li>La primera página es la página del título</li>
<li>La segunda página contendrá el copyright y el ISBN(Lo explico luego)</li>
</ul>
<p>Vale, ya tenéis el <i>.doc / .docx</i> terminado con los requisitos, la tabla de contenidos y&#8230; vuestra obra claro.</p>
<blockquote><p>
NOTA: Tened en cuenta si usais encabezados, que el libro imprimido tendrá la página par a la izquierda y la impar a la derecha, para que luego no os salgan al revés.
</p></blockquote>
<blockquote><p>
NOTA 2: Recordad que tal como lo véis en vuestro documento, será igual en el libro, así que cuidad los margenes, sangrados, etc.
</p></blockquote>
<p><b>Lulu</b> acepta tanto el <i>.doc / .docx</i> como un <i>.pdf</i>. Eso sí, el <i>.pdf</i> lo tenéis que crear usando <i>Adobe Acrobat</i> puesto que no acepta otra cosa.</p>
<p>Si decidís tirar por el <i>.doc / .docx</i> pues os generará automáticamente el <i>.pdf</i> y además os dejará bajarlo luego para revisar que todo sigue en su sitio.<br />
Si por otro lado decidís crear vosotros el <i>.pdf</i>, tenéis que incrustrar todas las fuentes en el documento, ¿Cómo? Así:</p>
<p><a href="http://athleticaid.com/yaquinapress/postscript/XPPro_EmbedFonts.html">Tutorial para embeber fuentes (En inglés, pero es 90% imágenes <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</a></p>
<p>Vale, ya tenéis vuestra obra lista en cualquiera de los dos formatos.</p>
<p>Ahora toca ir a la página de Lulu, registraros y en vuestro perfil, le dais a nuevo proyecto. Ahora seleccionais el tipo de proyecto a crear, por ejemplo <i>Libro de tapa blanda</i>.</p>
<p>Os pedirá el nombre de la obra y vuestro nombre. Además os dá 3 opciones:</p>
<ul>
<li>Mantenerlo privado</li>
<li>Hacerlo público</li>
<li>Hacerlo público además de asignarnos un <b>ISBN</b> de forma gratuita.</li>
</ul>
<p>La opción interesante es la tercera.</p>
<p>En el siguiente paso tenéis que elegir el tipo de papel a usar, el tipo de portada, tamaño de la obra, blanco y negro, color&#8230; (Todo esto a vuestra elección).</p>
<p>Luego nos generará un <b>ISBN</b> además de un código de barras. El <b>ISBN</b> como bien dicen los requisitos, ha de aparecer en la segunda página de la obra (Yo metí la imagen del código de barras que ya trae el ISBN colocado).</p>
<p>Una vez llegamos a este paso, es hora de completar nuestra obra. Vamos a la segunda página y colocamos el <b>ISBN</b> y como Copyright, pues también a vuestro gusto, yo personalmente registré mi obra en:</p>
<p><a href="http://www.safecreative.org/">Safe Creative</a></p>
<p>Así que coloqué tambien el sello que me dan los de <b>Safe Creative</b> junto al <b>ISBN</b> que me dió <b>Lulu</b>.</p>
<blockquote><p>
NOTA: La obra si vais a registrarla, hacedla cuando no le vayáis a meter más cambios, o sea, con el ISBN introducido y tal.
</p></blockquote>
<p>Vale, ya tenemos nuestro ultimismo fichero con el <b>Copyright</b> y el <b>ISBN</b>.</p>
<p><b>Lulu</b> nos pide ahora que subamos nuestro fichero, aquí comprobará que las fuentes están incrustadas (en el caso de los <b>.pdf</b>) y que no hay nada extraño en el documento.</p>
<p>Toca la portada. <b>Lulu</b> tiene un hermoso editor de portadas que no está nada nada mal, os permitirá elegir entre varios diseños de portada y personalizarlos un poco. Además podéis retocar el lomo a vuestro gusto.</p>
<p>¿Que no os gusta ninguna de las portadas que os ofrece <b>Lulu</b>? Pues nada, os creáis vuestra propia portada (en una sola pieza, o sea, portada + lomo + contraportada en un solo documento).</p>
<p>Hay que tener en cuenta que si creáis la portada, ha de aparecer el nombre de la obra + autor en la portada, el código de barra + isbn en la contraportada&#8230;</p>
<p>Bueno, portada lista.</p>
<p>Ahora nos toca escribir la descripción de nuestra obra, esto ya depende de vosotros <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Precio&#8230; La parte más importante&#8230;</p>
<p><b>Lulu</b> trabaja de la siguiente forma:</p>
<p>Te dan el precio de fabricación de la obra, por ejemplo 7 euros. A ese precio ellos le añaden un pequeño plus para tener una mínima ganancia en el caso de que decidas venderlo a precio de costo. Así que finalmente podría ser algo en plan: 7€ fabricación + 2€ ganancia = 9€ es el precio minimo de la obra. A partir de aquí tu ya le pones las ganancias que tu quieras. De dichas ganancias, el 80% va para ti y el 20% va para <b>Lulu</b>.</p>
<p>Si decides poner un precio de 19€ a tu obra, le restamos los 9€ que es el precio minimo, quedarían 10€, de aquí 8€ van para ti y 2€ van para <b>Lulu</b>. Vamos, ganarías 8€ por unidad vendida.</p>
<p>Por último solo nos queda revisar la obra, ver que todo está en orden y finalmente&#8230;. ¡Publicarlo!</p>
<p>Ya está, ya está listo, ya tenéis vuestra obra a la venta y con su bonito <b>ISBN</b>.</p>
<p>¿Último paso? Comprar vuestra propia copia (a precio de coste claro).</p>
<p>Luego <b>Lulu</b> se porta y te regala vales de descuento para que terceras personas aprovechen cosas como 15% de descuento o gasto de envío gratis.</p>
<p>Bueno, espero ver vuestras obras en <b>Lulu</b> algún día <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Un saludo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/como-publicar-tu-obra-en-lulu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# 4.0: Parámetros opcionales y con nombre</title>
		<link>http://blog.foxandxss.net/index.php/c-4-0-parametros-opcionales-y-con-nombre/</link>
		<comments>http://blog.foxandxss.net/index.php/c-4-0-parametros-opcionales-y-con-nombre/#comments</comments>
		<pubDate>Sun, 23 May 2010 11:22:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=402</guid>
		<description><![CDATA[Con la salida de C# 4.0, se incluyeron varias novedades en el lenguaje como las que voy a presentar hoy. Empecemos con los parámetros con nombre. Vamos a imaginar un sencillo método: void Saludo(string nombre, int edad, string ciudad) { Console.WriteLine(&#34;Hola me llamo {0} tengo {1} años y vivo en {2}&#34;, nombre, edad, ciudad); } [...]]]></description>
			<content:encoded><![CDATA[<p>Con la salida de C# 4.0, se incluyeron varias novedades en el lenguaje como las que voy a presentar hoy.<br />
<span id="more-402"></span><br />
Empecemos con los parámetros con nombre.</p>
<p>Vamos a imaginar un sencillo método:</p>
<pre class="brush: csharp;">
void Saludo(string nombre, int edad, string ciudad)
{
    Console.WriteLine(&quot;Hola me llamo {0} tengo {1} años y vivo en {2}&quot;, nombre, edad, ciudad);
}
</pre>
<p>¿Cómo se puede usar este método? Es una respuesta obvia ¿Verdad?:</p>
<pre class="brush: csharp;">
Saludo(&quot;Jesus&quot;, 24, &quot;Cádiz&quot;);
</pre>
<p>El problema es que quizá no te acuerdes de si primero pedia la edad o la ciudad&#8230; Eso si, sabes como se llaman los parámetros, entonces puedes hacer:</p>
<pre class="brush: csharp;">
Saludo(nombre: &quot;Jesus&quot;, edad: 24, ciudad: &quot;Cádiz&quot;);
</pre>
<p>El resultado es sin duda más legible (aunque más redundante), también podemos hacer algo así:</p>
<pre class="brush: csharp;">
Saludo(ciudad: &quot;Cádiz&quot;, edad: 24, nombre: &quot;Jesus&quot;);
</pre>
<p>Hemos variado el orden de los parámetros, pero como le hemos dado un nombre pues no hay problema en ello.</p>
<p>Ahora bien, por otro lado están los parámetros opcionales.</p>
<p>Por ejemplo, tenemos un método para insertar un elemento a una base de datos, por defecto los elementos van a la categoría <i>Sin Categoría</i> a menos que especifiquemos lo contrario:</p>
<pre class="brush: csharp;">
static void InsertarElemento(string nombre, string categoria = &quot;Sin Categoria&quot;, bool debug = false)
{
    if (debug)
        Console.WriteLine(&quot;Nombre: {0}\nCategoria: {1}&quot;, nombre, categoria);

    // Insertar en base de datos
}
</pre>
<p>Fijamos en la sintaxis del método, le hemos asignado un valor a un par de parámetros. Con esto queremos decirle que esos parámetros son opcionales, no tenemos por qué darles un valor al llamar al método, y en caso de no hacerlo usará esos valores asignados (el nombre sin embargo si es obligatorio), por ejemplo:</p>
<pre class="brush: csharp;">
InsertarElemento(&quot;Canasta&quot;);
</pre>
<p>Con esto asignamos a la base de datos un elemento con el nombre <i>Canasta</i> y como categoría <i>Sin Categoría</i>.</p>
<p>¿Que queremos darle una categoria nosotros y ademas activar el modo debug?:</p>
<pre class="brush: csharp;">
InsertarElemento(&quot;Canasta&quot;, &quot;Mimbre&quot;, true);
</pre>
<p>Hemos asignado un valor nuevo a los dos parámetros opcionales, al estar el modo debug activado, antes de insertar el elemento en la base de datos, lo imprimirá:</p>
<p><code>Nombre: Canasta<br />
Categoria: Mimbre</code></p>
<p>Lo bueno de esto es que podemos usar los parámetros opcionales y con nombre a la vez, por ejemplo, ¿Cómo podríamos activar el modo debug sin cambiar la categoría por defecto?</p>
<p>Tenemos que hacer uso de los parámetros con nombre, o sea:</p>
<pre class="brush: csharp;">
InsertarElemento(&quot;Canasta&quot;, debug: true);
</pre>
<p>Nos hemos &#8220;saltado&#8221; el parámetro de la categoría gracias a los parámetros con nombre.</p>
<p>Esto imprimiría:</p>
<p><code>Nombre: Canasta<br />
Categoria: Sin Categoria</code></p>
<p>Los parámetros opcionales y con nombre son muy útiles a la hora de trabajar con <i>COM</i> ya que estos métodos suelen recibir hasta una docena de parámetros opcionales y quizá solo uno importante&#8230; Antes teníamos que especificarlos todos, ahora simplemente podemos especificar el importante e ignorar el resto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/c-4-0-parametros-opcionales-y-con-nombre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¡Ya está mi libro publicado!</title>
		<link>http://blog.foxandxss.net/index.php/ya-esta-mi-libro-publicado/</link>
		<comments>http://blog.foxandxss.net/index.php/ya-esta-mi-libro-publicado/#comments</comments>
		<pubDate>Wed, 12 May 2010 22:02:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=398</guid>
		<description><![CDATA[Hola a todos, Hoy es un dia feliz para mí, despues de muchas horas de trabajo, he conseguido terminar, pasar a limpio, y en fin, crear el libro de los operadores de Linq. Ya está listro para la compra en Lulu una página que recomiendo a todo el mundo sin duda. Espero que sea del [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos,</p>
<p>Hoy es un dia feliz para mí, despues de muchas horas de trabajo, he conseguido terminar, pasar a limpio, y en fin, crear el libro de los operadores de Linq.</p>
<p>Ya está listro para la compra en <a href="http://www.lulu.com">Lulu</a> una página que recomiendo a todo el mundo sin duda.</p>
<p><a href="http://www.lulu.com/product/tapa-blanda/operadores-de-linq/10980019"><img alt="" src="http://static.lulu.com/product/item/operadores-de-linq/10980019/thumbnail/320" class="alignnone" width="244" height="320" /></a></p>
<p>Espero que sea del agrado de todo el mundo y que os sirva de ayuda en vuestros desarrollos.</p>
<p>Sin más, hasta el próximo artículo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/ya-esta-mi-libro-publicado/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reseña: WPF Unleashed</title>
		<link>http://blog.foxandxss.net/index.php/resena-wpf-unleashed/</link>
		<comments>http://blog.foxandxss.net/index.php/resena-wpf-unleashed/#comments</comments>
		<pubDate>Mon, 10 May 2010 13:33:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Reseñas]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=393</guid>
		<description><![CDATA[¿Te cuesta entender los artículos de WPF del blog? ¿Crees que necesitas aprender lo básico de WPF primero? Para eso está &#8220;Windows Presentation Foundation Unleashed&#8221; de Sams. Windows Presentation Foundation Unleashed (WPF-U a partir de ahora) ha sido aclamado como el mejor libro de WPF que había en el mercado. Ya han pasado 4 años [...]]]></description>
			<content:encoded><![CDATA[<p>¿Te cuesta entender los artículos de WPF del blog? ¿Crees que necesitas aprender lo básico de WPF primero?</p>
<p>Para eso está &#8220;Windows Presentation Foundation Unleashed&#8221; de Sams.</p>
<p><a href="http://www.informit.com/ShowCover.aspx?isbn=0672328917&#038;type=f"><img alt="" src="http://www.informit.com/ShowCover.aspx?isbn=0672328917&#038;type=f" class="alignnone" width="160" height="209" /></a><br />
<span id="more-393"></span><br />
Windows Presentation Foundation Unleashed (WPF-U a partir de ahora) ha sido aclamado como el mejor libro de WPF que había en el mercado. Ya han pasado 4 años del lanzamiento (2006) pero sigue siendo igual de util a dia de hoy.</p>
<p>Nada mas abrir el libro, te enamoras de el, pues está a todo color, lleno de imagenes con colores vivos, el código tal y como lo verás en Visual Studio y lleno de recuadros con información. Precioso sin duda.</p>
<p>Ya hablando del libro en si, está muy bien como la gente aclama aunque yo le veo algunos fallitos.</p>
<p>Tiene un comienzo muy muy duro, los 3 primeros temas volverán loco a cualquiera que se quiera meter con WPF, ya que te cuenta TODO lo que ofrece WPF y claro, empiezas a leer sobre <i>Dependency properties</i>, <i>Commands</i>, <i>Routed events</i>, <i>Markup extensions</i> y claro lo más lógico es decir algo en plan: ¿Pero que carajo es todo esto? Si apenas hemos visto 3 líneas de XAML&#8230;</p>
<p>La verdad, esta primera parte es un trago complicado, pero ya luego empieza a explicar las cosas paso a paso y empieza lo bueno.</p>
<p>Tiene una buena parte explicando los controles que WPF nos ofrece, como cambiarles el tamaño, aplicarles transformaciones tales como rotaciones&#8230; Sigue explicandos como estructurar una aplicación visualmente usando los <i>Layouts</i> que WPF nos pone a nuestra disposición. Incluso nos dice como hacer ventanas tipo Vista o Win 7, con sus bordes de cristal y tal.</p>
<p>Despues de la introducción a WPF ya se mete a temas más avanzados como los <i>Data Bindings</i>, estilos, temas&#8230;</p>
<p>Luego continua hablandonos de graficos en 2D y 3D, animaciones, meter audio y video en nuestras aplicaciones&#8230;</p>
<p>Termina hablandonos un poco de como funciona la interoperabilidad con <i>Win32</i>, <i>Windows Forms</i> y <i>ActiveX</i> además de darnos una pequeña explicación de qué es un control de usuario y como crear controles personalizados (de una forma muy muy básica).</p>
<p>En resumen, es un libro bueno, toca casi todo lo que WPF ofrece, aunque algunos temas pecan de ser simplones y otros quizás menos interesantes los explica a fondo&#8230;</p>
<p>El problema que yo le veo al libro, es que se escribió cuando WPF era bastante nuevo, y a dia de hoy algunas de las cosas que el libro explica pues ya no se hacen de esa forma o incluso he visto un par de cosas que ya no eran ni válidas.</p>
<p>Aún así sigue siendo una de las mejores opciones para aprender WPF, hay alternativas, pero dan sueño.</p>
<p><b>Cosas positivas:</b></p>
<ul>
<li>Buenísisisima presentación</li>
<li>Te muestra casi todo lo que WPF ofrece</li>
<li>Muchos de los temas están muy bien explicados</li>
<li>La parte de interoperabilidad está bastante bien</li>
</ul>
<p><b>Cosas negativas:</b></p>
<ul>
<li>Algunas cosas que explica ya no son validas</li>
<li>Tiene algún fallito que otro</li>
<li>La introducción da miedo de verdad</li>
<li>Algun tema es bastante simplón y hasta sobraría</li>
</ul>
<p>Yo le doy un <b>8</b> a este libro.</p>
<p>Como nota final, yo para los que se quieren iniciar en WPF, aparte de leer mi blog a diario, les recomiendo primero leer el libro <a href="http://blog.foxandxss.net/index.php/resena-teach-yourself-wpf-in-24-hours/">WPF in 24 Hours</a> y luego leer WPF-U.</p>
<p>Una pena que ambos estén solo en inglés, pero es lo que tiene la informática y concretamente WPF que no tiene tanto impacto (por ahora) en el mundo hispano.</p>
<p>Hasta otra.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/resena-wpf-unleashed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¡Nuevo diseño!</title>
		<link>http://blog.foxandxss.net/index.php/nuevo-diseno/</link>
		<comments>http://blog.foxandxss.net/index.php/nuevo-diseno/#comments</comments>
		<pubDate>Sat, 08 May 2010 19:11:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=388</guid>
		<description><![CDATA[Hola! Hace tiempo que tenia ganas de cambiar el diseño del blog, no sé, estaba harto del azul que tenía (que no era feo, cuidado). Quería uno fluid porque la verdad, el código a veces quedaba muy apretado y no era cómodo de ver. Me puse en busca y captura de un tema fluid que [...]]]></description>
			<content:encoded><![CDATA[<p>Hola!</p>
<p>Hace tiempo que tenia ganas de cambiar el diseño del blog, no sé, estaba harto del azul que tenía (que no era feo, cuidado).</p>
<p>Quería uno fluid porque la verdad, el código a veces quedaba muy apretado y no era cómodo de ver.</p>
<p>Me puse en busca y captura de un tema fluid que me gustara pero no veía ninguno así molón. Así que intenté convertir el mio en fluid (no tuve cojones jeje).</p>
<p>Así que bueno, me he creado mi propio tema desde 0.</p>
<p>Si encontrais fallos no me peguéis, es la primera vez que toco css y puede o bien tener redundancia en el css o petar haciendo algo raro jeje.</p>
<p>Si encontráis fallos ponedme un comentario aquí e iré arreglando los que vayan saliendo.</p>
<p>Por otro lado a ver si termino el pdf del libro de linq para que le echéis un ojo y estos días escribiré una reseña de un libro de WPF para no dejaros aquí solitos <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/nuevo-diseno/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operadores de LINQ: Palabras finales</title>
		<link>http://blog.foxandxss.net/index.php/operadores-de-linq-palabras-finales/</link>
		<comments>http://blog.foxandxss.net/index.php/operadores-de-linq-palabras-finales/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 11:51:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.foxandxss.net/?p=380</guid>
		<description><![CDATA[Afú, no tengo otra palabra que defina mejor lo que siento ahora jeje. El día que le dije a mi amigo Ilgrim, oye, me voy a currar una referencia de los operadores de LINQ, no pensaba en su día que me iba a llevar tantísimas horas, cada post tiene sus 2-3-4 horas de trabajo, y [...]]]></description>
			<content:encoded><![CDATA[<p>Afú, no tengo otra palabra que defina mejor lo que siento ahora jeje.</p>
<p>El día que le dije a mi amigo Ilgrim, oye, me voy a currar una referencia de los operadores de LINQ, no pensaba en su día que me iba a llevar tantísimas horas, cada post tiene sus 2-3-4 horas de trabajo, y son 14 familias&#8230; <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Bueno, ya está terminada, ahi tenéis todos los operadores con todas sus sobrecargas.</p>
<p>Ahora lo pasaré a pdf y lo mandaré a imprimir para los que queráis tener una copia impresa.</p>
<p>El pdf lo publicaré bajo licencia CC y me gustaría que todos le echarais un vistazo para comentar que cosas podría mejorar o cambiar de cara a enviarlo a imprimir. Aunque esto ya podéis hacerlo dejando un comentario en los posts de cada familia de opreadores.</p>
<p>Y bueno, estaré unos días sin escribir nada en el blog, voy a descansar un poco, dedicarme a otras tareas atrasadas y a buscar nuevas ideas para el blog, ya que realmente no sé de que escribir ahora, tanto LINQ tanto LINQ que ya ni me acuerdo de que era WPF <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Bueno, pues hasta el siguiente post <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Ah, y gracias por leerme aunque luego os cueste dejar comentarios y feedback <img src='http://blog.foxandxss.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.foxandxss.net/index.php/operadores-de-linq-palabras-finales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
