<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0MFRXc-cCp7ImA9WhBaFEo.&quot;"><id>tag:blogger.com,1999:blog-27752126</id><updated>2013-05-25T11:50:14.958+02:00</updated><category term="flash" /><category term="navidad" /><category term="2009" /><category term="closedxml" /><category term="vacaciones" /><category term="historias" /><category term="cadenas de conexión" /><category term="vs2008" /><category term="interfaces" /><category term="analytics" /><category term="signalr" /><category term="calidad" /><category term="curiosidades" /><category term="arquitectura" /><category term="opinión" /><category term="bytecode" /><category term="reflexiones" /><category term="webgrid" /><category term="spam" /><category term="inocentadas" /><category term="haloscan" /><category term="validadores" /><category term="eswebcamp" /><category term="xhtml" /><category term="errores" /><category term="connection strings" /><category term="antipatrones" /><category term="leyes" /><category term="scripting" /><category term="linq" /><category term="nupack" /><category term="xVal" /><category term="paranoias" /><category term="java" /><category term="árboles de expresión" /><category term="azure" /><category term="aniversario" /><category term="optimización" /><category term="liame" /><category term="summit" /><category term="niftydotnet" /><category term="rest" /><category term="nivel básico" /><category term="curso" /><category term="1337" /><category term="nivel medio" /><category term="proyectos" /><category term="nivel alto" /><category term="estándares" /><category term="2.0" /><category term="dsl" /><category term="viajes" /><category term="oscarsotorrio" /><category term="asp.net" /><category term="patrones" /><category term="blogging" /><category term="error" /><category term="dans" /><category term="depuración" /><category term="google" /><category term="unity" /><category term="trabajo" /><category term="knockout" /><category term="ensamblador" /><category term="fluent interfaces" /><category term="technorati" /><category term="webpages" /><category term="chuletas" /><category term="navegadores" /><category term="msdewey" /><category term="delegados" /><category term="emoticonos" /><category term="epónimos" /><category term="aspnetmvc" /><category term="escaneo de puertos" /><category term="mvp" /><category term="productos" /><category term="envidia" /><category term="buenas prácticas" /><category term="Spectrum" /><category term="frameworks" /><category term="frases célebres" /><category term="servicios on-line" /><category term="async" /><category term="equipos" /><category term="planetas" /><category term="redes" /><category term="troyanos" /><category term="vs" /><category term="técnicas de spam" /><category term="lambdas" /><category term="antispam" /><category term="silverlight" /><category term="chacha" /><category term="entrevistas" /><category term="leet speak" /><category term="ie" /><category term="charlas" /><category term="jquery" /><category term="historia" /><category term="jqGrid" /><category term="phishing" /><category term="ado.net" /><category term="scrum" /><category term="homenaje" /><category term="problema" /><category term="virus" /><category term="typescript" /><category term="entity framework" /><category term="webmatrix" /><category term="conquista del mundo" /><category term="consultas" /><category term="mobile" /><category term="nostalgia" /><category term="software libre" /><category term="ayuda" /><category term="web" /><category term="seguridad" /><category term="rendimiento" /><category term="desarrollo" /><category term="redes sociales" /><category term="interacción" /><category term="c#" /><category term="desastres" /><category term="css" /><category term="libros" /><category term="portales" /><category term="cultura" /><category term="creatividad" /><category term=".net" /><category term="radarc" /><category term="diseño" /><category term="visualstudio" /><category term="vb.net" /><category term="humor" /><category term="métodos anónimos" /><category term="productividad" /><category term="summit2012" /><category term="emuladores" /><category term="motores de física" /><category term="bases de datos" /><category term="auges" /><category term="interfaces fluidos" /><category term="webforms" /><category term="t4" /><category term="análisis" /><category term="programación" /><category term="frikadas" /><category term="componentes" /><category term="software" /><category term="sorteo" /><category term="html" /><category term="utilidades" /><category term="riqueza" /><category term="vs2012" /><category term="cartujadotnet" /><category term="comentarios" /><category term="msil" /><category term="enlaces" /><category term="webapi" /><category term="javascript" /><category term="autobombo" /><category term="localizacion" /><category term="communityday" /><category term="redondear esquinas" /><category term="trucos" /><category term="innovadores" /><category term="cms" /><category term="vs2010" /><category term="tecnología" /><category term="instalación" /><category term="resumen" /><category term="glimpse" /><category term="ttt" /><category term="vs2005" /><category term="recomendaciones" /><category term="linux" /><category term="office" /><category term="personal" /><category term="ajax" /><category term="empresa" /><category term="genios" /><category term="herramientas" /><category term="protocolos" /><category term="colaboraciones" /><category term="variablenotfound.com" /><category term="tags" /><category term="blogger" /><category term="SEO" /><category term="nuget" /><category term="buscadores" /><category term="noticias" /><category term="novedades" /><category term="ofuscación de emails" /><category term="orcas" /><category term="orm" /><category term="razor" /><category term="eventos" /><category term="microsoft" /><category term="quaere" /><category term="actualidad" /><category term="mono" /><category term="alegrías" /><category term="data" /><category term="fiddler" /><title>Variable not found</title><subtitle type="html">Artículos, noticias, curiosidades, reflexiones... sobre el mundo del desarrollo de software, internet, u otros temas relacionados con la tecnología.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.variablenotfound.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>613</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/vnf" /><feedburner:info uri="vnf" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>vnf</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fvnf" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/vnf" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fvnf" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fvnf" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fvnf" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fvnf" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/vnf" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><entry gd:etag="W/&quot;DkYASHo4cSp7ImA9WhBaEU8.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-4751664430753616347</id><published>2013-05-21T09:25:00.000+02:00</published><updated>2013-05-21T10:15:49.439+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-21T10:15:49.439+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="entity framework" /><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo" /><category scheme="http://www.blogger.com/atom/ns#" term="trucos" /><title>Eager loading en Entity Framework: mejora drástica del rendimiento en acceso a datos</title><content type="html">Sabemos que el uso descontrolado de la carga diferida o &lt;em&gt;lazy loading&lt;/em&gt; puede echar abajo el rendimiento de nuestra aplicación, puesto que se generan peticiones al motor de datos al intentar recuperar entidades relacionadas cuando intentamos acceder a ellas. Sin embargo, no son pocos los casos en los que me encuentro que no se está usando apropiadamente, provocando un rendimiento terrible en el acceso a datos de las aplicaciones.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Imaginemos, por ejemplo, la siguiente estructura de datos, que podríamos describir diciendo que un usuario puede tener un número indeterminado de blogs, y en cada uno de ellos existirán un número indeterminado de posts:&lt;br /&gt;
&lt;img alt="Estructura de datos" border="0" height="191" src="http://lh5.ggpht.com/-GlawcJNiL24/URayTy6z_rI/AAAAAAAACpI/_8FtPzstKo8/image3.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Estructura de datos" width="568" /&gt;&lt;br /&gt;
E imaginemos ahora el siguiente código, que realiza un recorrido en profundidad de estos datos para mostrar los posts de cada blog de cada uno de los usuarios,&amp;nbsp;generando la salida mostrada justo después:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;using (var ctx = new MyDataContext())
{
    var query = ctx.Users;
    foreach (var person in query)
    {
        Console.WriteLine("User " + person.Name + ":");
        foreach (var blog in person.Blogs)
        {
            Console.WriteLine("  Blog " + blog.Name + ":");
            foreach (var post in blog.Posts)
            {
                Console.WriteLine("      Post: " + post.Title);
            }
        }
    }
}&lt;/pre&gt;
&lt;br /&gt;
&lt;img alt="Salida por consola" border="0" height="167" src="http://lh4.ggpht.com/-lY_6YAMFBNc/URayZyN2x9I/AAAAAAAACpQ/JxrPCu8yjac/image6.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Salida por consola" width="438" /&gt;&lt;br /&gt;
&lt;br /&gt;
Por defecto, con lazy loading activado, la ejecución de esta pequeña porción de código habría generado seis consultas a la base de datos:&amp;nbsp; &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Obtener todos los usuarios. Se obtienen dos instancias de &lt;code&gt;User&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Obtener todos los blogs del primer usuario (jmaguilar). Se obtienen dos instancias de &lt;code&gt;Blog&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Obtener todos los posts del primer blog de jmaguilar. Se obtienen dos instancias de &lt;code&gt;Post&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Obtener todos los posts del segundo blog de jmaguilar. Se obtienen dos instancias de &lt;code&gt;Post&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Obtener todos los blogs del segundo usuario (johnresig). Se obtiene una instancia de &lt;code&gt;Blog&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Obtener todos los posts del único blog del usuario. Se obtiene una instancia de &lt;code&gt;Post&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
Este problema se denomina habitualmente el “&lt;strong&gt;efecto SELECT N+1&lt;/strong&gt;” dado que para recorrer una secuencia de tipo maestro-detalle se realiza una consulta para obtener las entidades principales y después N adicionales para obtener las entidades relacionadas con cada una de ellas. Además, el caso que hemos visto es especialmente grave, puesto que involucra una relación uno a muchos en dos niveles, lo cual puede ser terrible para el rendimiento cuando ataquemos colecciones de datos de cierto volumen.&lt;br /&gt;
&lt;br /&gt;
La solución más frecuente es adelantar la carga de las entidades relacionadas, es decir,&lt;strong&gt; utilizar eager loading&lt;/strong&gt; para traerse la estructura completa en una única consulta.&lt;br /&gt;
&lt;br /&gt;
En una estructura como la que hemos visto pero con dos únicos niveles, sería algo así:&lt;br /&gt;
&lt;pre class="brush: csharp; highlight: [3];"&gt;using (var ctx = new MyDataContext())
{
    var query = ctx.Users.Include(u =&amp;gt; u.Blogs);
    foreach (var person in query)
    {
       // Code omitted
    }
}&lt;/pre&gt;
La cláusula &lt;code&gt;Include()&lt;/code&gt; indicará a Entity Framework que cuando realice la consulta a la colección de usuarios debe traerse también la colección de blogs relacionados con cada uno de ellos. Si ejecutamos el ejemplo anterior, podremos comprobar que el número de consultas se ha reducido a cuatro:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Obtener todos los usuarios junto con sus blogs. &lt;/li&gt;
&lt;li&gt;Obtener todos los posts del primer blog del usuario. &lt;/li&gt;
&lt;li&gt;Obtener todos los posts del segundo blog del usuario jmaguilar. &lt;/li&gt;
&lt;li&gt;Obtener todos los posts del blog del usuario johnresig.&lt;/li&gt;
&lt;/ol&gt;
Es obvio que la mejora definitiva vendrá haciendo que en la primera consulta se obtengan también las instancias de &lt;code&gt;Post&lt;/code&gt; asociados con los blogs. Sin embargo, la forma de hacerlo no es tan obvia ni intuitiva como la anterior. No podemos especificarlo en el &lt;code&gt;Include()&lt;/code&gt;, puesto que no es posible referenciar la colección como &lt;code&gt;u.Blogs.Posts&lt;/code&gt;, dado que &lt;code&gt;Posts&lt;/code&gt; no es una propiedad de la colección &lt;code&gt;Blogs&lt;/code&gt; del usuario y&amp;nbsp;fallaría en compilación.&lt;br /&gt;
&lt;br /&gt;
La fórmula a emplear en este caso es la siguiente:&lt;br /&gt;
&lt;pre class="brush: csharp; highlight: [3];"&gt;using (var ctx = new MyDataContext())
{
    var query = ctx.Users.Include(u =&amp;gt; u.Blogs.Select(b =&amp;gt; b.Posts));
    foreach (var person in query)
    {
        // Code omitted
    }
}&lt;/pre&gt;
Y de esta forma tan simple estaremos obteniendo la estructura de datos completa realizando &lt;strong&gt;una única consulta a la base de datos&lt;/strong&gt;, con el beneficio de rendimiento que esto conlleva.&lt;br /&gt;
&lt;br /&gt;
Publicado en: &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tl5xIaKntsQ:19pimFMzAYA:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tl5xIaKntsQ:19pimFMzAYA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tl5xIaKntsQ:19pimFMzAYA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tl5xIaKntsQ:19pimFMzAYA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=tl5xIaKntsQ:19pimFMzAYA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tl5xIaKntsQ:19pimFMzAYA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=tl5xIaKntsQ:19pimFMzAYA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tl5xIaKntsQ:19pimFMzAYA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=tl5xIaKntsQ:19pimFMzAYA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tl5xIaKntsQ:19pimFMzAYA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/tl5xIaKntsQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/4751664430753616347/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=4751664430753616347" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/4751664430753616347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/4751664430753616347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/tl5xIaKntsQ/eager-loading-en-entity-framework.html" title="Eager loading en Entity Framework: mejora drástica del rendimiento en acceso a datos" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-GlawcJNiL24/URayTy6z_rI/AAAAAAAACpI/_8FtPzstKo8/s72-c/image3.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/eager-loading-en-entity-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcGRHkzfCp7ImA9WhBaEU8.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-8700778756217979441</id><published>2013-05-20T18:00:00.000+02:00</published><updated>2013-05-21T10:13:45.784+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-21T10:13:45.784+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cartujadotnet" /><category scheme="http://www.blogger.com/atom/ns#" term="eventos" /><title>Evento en Sevilla: desarrollo de videojuegos multiplataforma con Wave Engine</title><content type="html">&lt;img align="right" alt="Wave Engine" border="0" height="109" src="http://lh4.ggpht.com/-45NU5bgBt38/UZOtrBCQRqI/AAAAAAAAC58/U-b4-FRXpCM/image%25255B3%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Wave Engine" width="135" /&gt;Sin duda, el desarrollo de videojuegos es una de las áreas más atractivas e interesantes a las que podemos aspirar dedicarnos los desarrolladores. Y aunque hoy en día parece estar especialmente de moda, no es algo nuevo; muchos de nosotros empezamos a interesarnos por la programación intentando programar nuestros propios juegos.&lt;br /&gt;
&lt;br /&gt;
Por este motivo espero con especial impaciencia la próxima charla organizada por Cartuja.NET, que tratará sobre el desarrollo de videojuegos, pero con con un enfoque muy alineado con las necesidades actuales: crear &lt;strong&gt;videojuegos multiplataforma&lt;/strong&gt;, usando para ello el motor &lt;a href="http://waveengine.net/"&gt;Wave Engine&lt;/a&gt;.&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Será el próximo jueves 23 de mayo a las 19:30h, con una duración estimada de dos horas, en el &lt;a href="https://www.cloudingpoint.com/Inicio.aspx"&gt;Clouding Point/Centro demostrador TIC de Sevilla&lt;/a&gt;, que podéis encontrar en la &lt;a href="http://goo.gl/maps/izWMc"&gt;siguiente dirección&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 30px;"&gt;
C/Biología, 12, Edificio Vilamar 2, 3ª Planta    &lt;br /&gt;
Parque Empresarial Nuevo Torneo     &lt;br /&gt;
41015 Sevilla&lt;/div&gt;
&lt;br /&gt;
Como siempre, la asistencia es gratuita; &lt;strong&gt;lo único que tenéis que hacer es registraros&lt;/strong&gt; en el &lt;a href="http://cartujawaveengine.eventbrite.com/"&gt;sitio del evento en Eventbrite&lt;/a&gt; :-)&lt;br /&gt;
&lt;h3&gt;
Descripción del evento&lt;/h3&gt;
&lt;blockquote&gt;
El desarrollo de aplicaciones para dispositivos móviles es un área que gana adeptos y suma peso día a día. Entre las aplicaciones destacadas, más descargadas y que aportan grandes beneficios contamos con los &lt;strong&gt;juegos&lt;/strong&gt;. Dada la variedad de dispositivos, SDKs, herramientas y lenguajes a aprender, sacar el máximo partido a cada plataforma con eficacia y rapidez es una tarea complicada.&amp;nbsp; &lt;strong&gt;Wave Engine&lt;/strong&gt; es un motor multiplataforma en 3D para facilitar la adaptación de los juegos móviles a cualquier plataforma (Android, iOS, Windows Phone y Windows 8). Incluye multitud de herramientas que facilitan tareas importantes como la gestión de publicidad, analítica del juego, etc.&lt;br /&gt;
&lt;br /&gt;
En este evento se realizará una introducción al engine donde se mostrarán todas sus&amp;nbsp; posibilidades.&lt;/blockquote&gt;
&lt;h3&gt;
Ponentes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Marcos Cobeña (LIGHTYEAR)&lt;/strong&gt;: Developer Advisor en Plain Concepts. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;David Ávila (WOODY)&lt;/strong&gt;: Software Developer Advisor Plain Concepts.&lt;/li&gt;
&lt;/ul&gt;
Salvo catástrofe bíblica, u otros impedimientos de fuerza mayor, nos vemos por allí :)&lt;br /&gt;
&lt;br /&gt;
Publicado en: &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SNzuFqZqkos:HKU_8mUOJZA:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SNzuFqZqkos:HKU_8mUOJZA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SNzuFqZqkos:HKU_8mUOJZA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SNzuFqZqkos:HKU_8mUOJZA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=SNzuFqZqkos:HKU_8mUOJZA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SNzuFqZqkos:HKU_8mUOJZA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=SNzuFqZqkos:HKU_8mUOJZA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SNzuFqZqkos:HKU_8mUOJZA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=SNzuFqZqkos:HKU_8mUOJZA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SNzuFqZqkos:HKU_8mUOJZA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/SNzuFqZqkos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/8700778756217979441/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=8700778756217979441" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/8700778756217979441?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/8700778756217979441?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/SNzuFqZqkos/evento-en-sevilla-desarrollo-de.html" title="Evento en Sevilla: desarrollo de videojuegos multiplataforma con Wave Engine" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-45NU5bgBt38/UZOtrBCQRqI/AAAAAAAAC58/U-b4-FRXpCM/s72-c/image%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/evento-en-sevilla-desarrollo-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAEQXc5fyp7ImA9WhBaEE4.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-3739078368851120230</id><published>2013-05-20T09:25:00.000+02:00</published><updated>2013-05-20T09:25:00.927+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-20T09:25:00.927+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 118</title><content type="html">&lt;img align="right" alt="Enlaces Interesantes" border="0" height="129" src="http://lh5.ggpht.com/-qReBFY3RymQ/UZkoVk5pvKI/AAAAAAAAC6M/hqguQsvfAuI/image2342423333333333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces Interesantes" width="172" /&gt;Estos son los enlaces que he ido recopilando durante la semana del 13 al 17 de mayo de 2013. Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=895"&gt;Profiling your ASP.NET MVC Applications with MiniProfiler&lt;/a&gt;       &lt;br /&gt;Suprotim Agarwal &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2013/05/18/tips-exportar-string-a-pdf-en-asp-net-con-itextsharp.aspx"&gt;Exportar String a PDF en ASP.NET con iTextSharp&lt;/a&gt;       &lt;br /&gt;Gonzalo Pérez &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.devcurry.com/2013/05/adopting-aspnet-mvc-enhancements-in.html" title="Adopting ASP.NET MVC enhancements in an Existing Web Forms Project"&gt;Adopting ASP.NET MVC enhancements in an Existing Web Forms Project&lt;/a&gt;       &lt;br /&gt;Suprotim Argawal &lt;/li&gt;
&lt;li&gt;&lt;a href="http://westdiscgolf.blogspot.co.uk/2013/05/aspnet-mvc-output-caching-during.html"&gt;Asp.net MVC Output Caching During Development&lt;/a&gt;       &lt;br /&gt;Adam Storr &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/548549/Real-Time-Commenting-Using-SignalR-and-XSLT"&gt;Real Time Commenting Using SignalR and XSLT&lt;/a&gt;       &lt;br /&gt;Amir Jalilifard &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/565934/ASP-NET-MVC-plugin-framework"&gt;ASP.NET MVC plugin framework&lt;/a&gt;       &lt;br /&gt;Joey Zhao &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/RedirectingASPNETLegacyURLsToExtensionlessWithTheIISRewriteModule.aspx"&gt;Redirecting ASP.NET Legacy URLs to Extensionless with the IIS Rewrite Module&lt;/a&gt;       &lt;br /&gt;Scott Hanselman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/alexj/archive/2013/05/10/parsing-odata-paths-select-and-expand-using-the-odatauriparser.aspx"&gt;Parsing OData Paths, $select and $expand using the ODataUriParser&lt;/a&gt;       &lt;br /&gt;Alex D. James &lt;/li&gt;
&lt;li&gt;     &lt;a href="http://www.codeguru.com/csharp/.net/net_asp/using-cross-origin-resource-sharing-cors-in-asp.net-web-api.html"&gt;Using Cross Origin Resource Sharing (CORS) in ASP.NET Web API&lt;/a&gt;         &lt;br /&gt;Bipin Joshi&lt;a name='more'&gt;&lt;/a&gt; &lt;br /&gt;
   &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/ilanda/archive/2013/05/14/securizar-aplicaciones-web-usando-windows-azure-active-directory.aspx"&gt;Securizar aplicaciones web usando Windows Azure Active Directory&lt;/a&gt;       &lt;br /&gt;Ibón Landa&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.troyhunt.com/2013/05/clickjack-attack-hidden-threat-right-in.html"&gt;Clickjack attack – the hidden threat right in front of you&lt;/a&gt;       &lt;br /&gt;Troy Hunt &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/unai/archive/2013/05/15/ef-6-operaciones-de-migraciones-personalizadas.aspx"&gt;EF 6: Operaciones de migraciones personalizadas&lt;/a&gt;       &lt;br /&gt;Unai Zorrilla&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/slider-with-sliding-backgrounds/"&gt;Slider with Sliding Backgrounds&lt;/a&gt;       &lt;br /&gt;Chris Coyier &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tomasz.janczuk.org/2013/05/multi-line-strings-in-javascript-and.html"&gt;Multi-line strings in JavaScript and Node.js&lt;/a&gt;       &lt;br /&gt;Tomasz Janczuk &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/05/16/angularjs-abstractions-scope.aspx"&gt;AngularJS Abstractions: Scope&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/3801/Graceful-Handling-Of-JavaScript-Errors"&gt;Graceful Handling Of JavaScript Errors&lt;/a&gt;       &lt;br /&gt;Vasudevan Deepak Kumar &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jquery4u.com/ajax/jquery-1-9-ajax-promise-interface-advantages/" title="jQuery 1.9+ .Ajax() New Promise Interface Advantages"&gt;jQuery 1.9+ .Ajax() New Promise Interface Advantages&lt;/a&gt;       &lt;br /&gt;Sam Deering &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/05/13/angularjs-abstractions-controllers.aspx"&gt;AngularJS Abstractions: Controllers&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobile.smashingmagazine.com/2013/05/10/how-to-avoid-duplicate-downloads-in-responsive-images/" title="Read 'How To Avoid Duplicate Downloads In Responsive Images'"&gt;How To Avoid Duplicate Downloads In Responsive Images&lt;/a&gt;       &lt;br /&gt;David Newton &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.johnpapa.net/toastr-1-3-0-now-available"&gt;Toastr 1.3.0 Now Available&lt;/a&gt;       &lt;br /&gt;John Papa&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.genbetadev.com/herramientas/referencia-rapida-de-comandos-de-git"&gt;Referencia rápida de comandos de GIT&lt;/a&gt;       &lt;br /&gt;Juan Quijano &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/2013/05/resharper-8-eap-nuget-based-extension-manager/"&gt;ReSharper 8 EAP: NuGet based Extension Manager&lt;/a&gt;       &lt;br /&gt;Matt Ellis &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/05/servidor-de-integracion-continua-una-buena-inversion/"&gt;Servidor de Integración Continua, una buena inversión&lt;/a&gt;       &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.drdobbs.com/windows/working-with-typescript-in-visual-studio/240154792"&gt;Working with TypeScript in Visual Studio 2012&lt;/a&gt;       &lt;br /&gt;Gaston Hillar &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/elbruno/archive/2013/05/12/resharper-tip-introduce-variable-un-refactoring-interno-de-los-buenos-buenos.aspx"&gt;[#Resharper] Tip: Introduce Variable (un #refactoring interno de los buenos buenos)&lt;/a&gt;       &lt;br /&gt;Bruno Capuano &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/591797/Launching-ASP-NET-web-applications-on-multiple-bro"&gt;Launching ASP.NET web applications on multiple browsers at the same time from Visual Studio(2012)&lt;/a&gt;       &lt;br /&gt;RKT.Ashoka &lt;/li&gt;
&lt;li&gt;&lt;a href="http://byterot.blogspot.com.es/2013/05/superbenchmarker-ab.exe-sb.exe-apache-benchmark-load-performance-benchmark-asp-net-web-api.html"&gt;Performance series - Announcing SuperBenchmarker sb.exe for generating load on your API/Site&lt;/a&gt;       &lt;br /&gt;Aliostad &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/05/10/trying-out-redis-via-nuget.aspx"&gt;Trying Out Redis via NuGet&lt;/a&gt;       &lt;br /&gt;K. Scott&amp;nbsp; Allen&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/howardk/archive/2013/05/14/who-wrote-the-original-bsod-and-why-white-on-blue.aspx"&gt;Who wrote the original BSOD (and why white-on-blue)?&lt;/a&gt;       &lt;br /&gt;Howard Kapustein &lt;/li&gt;
&lt;li&gt;&lt;a href="http://jmalarcon.es/post/El-futuro-del-trabajo-innovacion-exponencial-y-polarizacion.aspx" title="El futuro del trabajo- innovación exponencial y polarización"&gt;El futuro del trabajo- innovación exponencial y polarización&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=h697U7hpF_Q:DT7K-j2UUeM:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=h697U7hpF_Q:DT7K-j2UUeM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=h697U7hpF_Q:DT7K-j2UUeM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=h697U7hpF_Q:DT7K-j2UUeM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=h697U7hpF_Q:DT7K-j2UUeM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=h697U7hpF_Q:DT7K-j2UUeM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=h697U7hpF_Q:DT7K-j2UUeM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=h697U7hpF_Q:DT7K-j2UUeM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=h697U7hpF_Q:DT7K-j2UUeM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=h697U7hpF_Q:DT7K-j2UUeM:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/h697U7hpF_Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/3739078368851120230/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=3739078368851120230" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/3739078368851120230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/3739078368851120230?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/h697U7hpF_Q/enlaces-interesantes-118.html" title="Enlaces interesantes 118" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-qReBFY3RymQ/UZkoVk5pvKI/AAAAAAAAC6M/hqguQsvfAuI/s72-c/image2342423333333333333.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/enlaces-interesantes-118.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YEQXY8eSp7ImA9WhBbFUw.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-234441557445741882</id><published>2013-05-14T09:05:00.000+02:00</published><updated>2013-05-14T09:05:00.871+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-14T09:05:00.871+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unity" /><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo" /><category scheme="http://www.blogger.com/atom/ns#" term="aspnetmvc" /><category scheme="http://www.blogger.com/atom/ns#" term="patrones" /><title>Unity 3.0, con soporte oficial para ASP.NET MVC</title><content type="html">&lt;img align="right" alt="ASP.NET MVC" border="0" height="77" src="http://lh3.ggpht.com/-kLlYeARBx84/UY_Vzc-i3ZI/AAAAAAAAC5k/godPx8pvy80/ASPNETMVC%25255B2%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="ASP.NET MVC" width="142" /&gt;Hasta ahora, los desarrolladores que queríamos usar Unity con ASP.NET MVC teníamos que recurrir a triquiñuelas o componentes no oficiales, como &lt;a href="http://unitymvc3.codeplex.com/"&gt;Unity.MVC3&lt;/a&gt;. No es que fuera especialmente incómodo ni que tuviera contraindicaciones, pero la verdad es que no dejaba de resultar curioso que no existieran adaptadores específicos “oficiales” para tecnologías tan difundidas como ASP.NET MVC, o WebAPI.&lt;br /&gt;
&lt;br /&gt;
Pues bien, desde hace unas semanas tenemos disponible la versión 3.0 de Unity, que ha venido acompañando también a la reluciente &lt;a href="https://entlib.codeplex.com/wikipage?title=EntLib6ReleaseNotes&amp;amp;"&gt;versión 6 de la Enterprise Library&lt;/a&gt;. Como sabemos, esta creación del equipo de &lt;a href="http://pnp.azurewebsites.net/en-us/"&gt;Patterns &amp;amp; Practices de Microsoft&lt;/a&gt; contiene un conjunto de componentes reutilizables llamados “application blocks” que resuelven problemáticas comunes en el desarrollo de sistemas, como logging, tracing, acceso a datos, gestión de excepciones y otras, incluyendo por supuesto inyección de dependencias e inversión de control.&lt;br /&gt;
&lt;br /&gt;
En este post vamos a ver cómo podemos usar fácilmente esta nueva versión de Unity en nuestras aplicaciones ASP.NET MVC y algunas de las novedades que ofrece para este tipo de sistemas.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;
1. Instalación&lt;/h3&gt;
Como es habitual, la instalación del componente la realizaremos usando Nuget:&lt;br /&gt;
&lt;pre&gt;PM&amp;gt; Install-Package unity.mvc&lt;/pre&gt;
&lt;img align="right" alt="image" border="0" height="200" src="http://lh3.ggpht.com/-0jo0uSlgtbo/UY_V0YcOp2I/AAAAAAAAC5s/2dBxtXYZDvE/image%25255B3%25255D.png?imgmax=800" style="margin: 0px 0px 10px 10px;" title="image" width="187" /&gt;Esta acción instalará varios paquetes dependientes y creará un par de archivos en la carpeta App_Start: UnityConfig.cs y UnityMvcActivator.cs.&lt;br /&gt;
&lt;br /&gt;
En el primero de ellos encontramos la configuración de contenedor, es decir, es el punto en el que registraremos nuestras clases e interfaces para posteriormente usarlas en la resolución de dependencias. En UnityMvcActivator.cs, en cambio, se encuentra el código de inicialización específico de la integración para ASP.NET MVC. Más adelante veremos para qué son útiles y qué tenemos que tocar en ambos archivos.&lt;br /&gt;
&lt;br /&gt;
Por comodidad, &lt;strong&gt;no tendremos que incluir en el global.asax.cs código para inicializar el contenedor&lt;/strong&gt;. El mismo paquete Unity.Mvc incluye automáticamente una llamada a &lt;code&gt;UnityWebActivator.Start()&lt;/code&gt; durante el proceso de inicialización utilizando el componente &lt;a href="http://nuget.org/packages/WebActivatorEx/2.0"&gt;WebActivatorEx&lt;/a&gt;, una útil herramienta que permite introducir módulos de forma dinámica, durante el arranque.&lt;br /&gt;
&lt;h3&gt;
2. Registro de componentes&lt;/h3&gt;
El registro de interfaces y clases la realizaremos como siempre, sobre el contenedor Unity. Para ello, sólo tenemos que dirigirnos hacia el archivo UnityConfig.cs e implementarlo de la misma forma que siempre:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;public static void RegisterTypes(IUnityContainer container)
{
    // NOTE: To load from web.config uncomment the line below. [...]
    // container.LoadConfiguration();

    // TODO: Register your types here
    // container.RegisterType&amp;lt;IProductRepository, ProductRepository&amp;gt;();

    container.RegisterType&amp;lt;IProductServices, ProductServices&amp;gt;();
}&lt;/pre&gt;
Por supuesto, podríamos incluir tantos pares interfaz-clase como sean necesarios para nuestros propósitos.&lt;br /&gt;
&lt;h3&gt;
3. Instancias per request&lt;/h3&gt;
Ya he comentado muchísimas veces por aquí la importancia de hacer que los componentes que implementen &lt;code&gt;IDisposable&lt;/code&gt; &lt;strong&gt;sean liberados al finalizar la misma&lt;/strong&gt;. De no ser así, estaríamos creando una bomba de relojería: si no se liberan componentes, en cada petición podemos estar perdiendo memoria o recursos, y eso, a la larga, ya os digo que no es una historia con final feliz ;-)&lt;br /&gt;
&lt;br /&gt;
La nueva versión de Unity y su componente de integración con MVC ha simplificado bastante la gestión del ciclo de vida de estas instancias y ha eliminado algunas de las &lt;em&gt;cosas feas&lt;/em&gt; que teníamos que hacer antes, como la creación de instancias usando &lt;code&gt;HierarchicalLifetimeManagers&lt;/code&gt; para vincularlas a un contenedor padre que era liberado al finalizar la petición. Ahora podemos ir bastante más al grano a la hora de registrar las clases, usando directamente un &lt;code&gt;PerRequestLifetimeManager&lt;/code&gt;:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterType&amp;lt;IProductServices, ProductServices&amp;gt;(
            new PerRequestLifetimeManager());
}&lt;/pre&gt;
Sólo con esto ya conseguimos que las instancias sean únicas por request, es decir, que si desde varios puntos del proceso de la petición se solicita un objeto de un tipo registrado, la instancia será única y compartida para todos ellos.&lt;br /&gt;
&lt;br /&gt;
Pero aún falta un detalle para que las instancias sean liberadas correctamente al finalizar la petición. La pista la encontramos en el archivo UnityMvcActivator.cs que Nuget ha dejado en la carpeta App_Start:&lt;br /&gt;
&lt;pre class="brush: csharp; highlight: [15,16, 17];"&gt;public static void Start() 
{
    var container = UnityConfig.GetConfiguredContainer();

    FilterProviders.Providers.Remove(
        FilterProviders.Providers
                       .OfType&amp;lt;FilterAttributeFilterProvider&amp;gt;()
                       .First());

    FilterProviders.Providers.Add(
        new UnityFilterAttributeFilterProvider(container));

    DependencyResolver.SetResolver(new UnityDependencyResolver(container));

    // TODO: Uncomment if you want to use PerRequestLifetimeManager
    // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility
    //          .RegisterModule(typeof(UnityPerRequestHttpModule));
}&lt;/pre&gt;
Simplemente &lt;strong&gt;descomentamos la llamada a &lt;/strong&gt;&lt;code&gt;&lt;strong&gt;RegisterModule()&lt;/strong&gt; &lt;/code&gt;del final y nuestras instancias serán liberadas al finalizar la petición de forma automática :-)&lt;br /&gt;
&lt;br /&gt;
Seguro que habréis observado también que al comienzo de este método se elimina el proveedor de filtros por defecto y se establece el de Unity. Efectivamente, ¡tenemos de serie &lt;strong&gt;inyección de dependencias en filtros&lt;/strong&gt;! En breve escribiré un post al respecto para que veamos cómo se implementan.&lt;br /&gt;
&lt;h3&gt;
4. Sorpresa final: ¡convenciones!&lt;/h3&gt;
Pues sí, esta es una de las grandes novedades que he podido descubrir hasta el momento de esta nueva versión. De la misma forma que ya se podía hacer con otros contenedores IoC, ahora Unity soporta el registro de componentes basado en convenciones, de forma que podemos ahorrarnos bastante trabajo a la hora de mantenerlo.&lt;br /&gt;
&lt;br /&gt;
¿Un ejemplo rápido de su utilidad? Pues por ejemplo que ya no tendremos que asociar mil interfaces del tipo &lt;code&gt;IMyComponent&lt;/code&gt; a la clase &lt;code&gt;MyComponent&lt;/code&gt;: simplemente indicaremos a Unity que debe usar la convención de nombrado para interfaces y clases con nombres equivalentes :-)&lt;br /&gt;
&lt;br /&gt;
Así, en una única línea en el método &lt;code&gt;RegisterTypes()&lt;/code&gt; de UnityConfig.cs podemos decirle que todas las clases pertenecientes al ensamblado de la aplicación MVC deben asociarse a interfaces cuyo nombre corresponda con ellas (es decir, sea igual pero comenzando por “I”), y siempre con tiempo de vida por petición:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterTypes(
       AllClasses.FromAssemblies(typeof(MvcApplication).Assembly),
       WithMappings.FromMatchingInterface,
       WithName.Default, 
       WithLifetime.Custom&amp;lt;PerRequestLifetimeManager&amp;gt;
    );
}&lt;/pre&gt;
Por supuesto, las convenciones son totalmente configurables, por lo que con mucha probabilidad podremos adaptarlas a nuestras necesidades. Otro día escribiré también algo más sobre esto ;)&lt;br /&gt;
&lt;br /&gt;
Enlaces: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://unity.codeplex.com/" target="_blank"&gt;Patterns &amp;amp; practices - Unity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unity.codeplex.com/wikipage?title=Unity3ReleaseNotes&amp;amp;referringTitle=Unity3" target="_blank"&gt;Microsoft Unity Container 3 –&amp;nbsp; Release notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=pXkBDnffhio:bfvm1NT6BGg:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=pXkBDnffhio:bfvm1NT6BGg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=pXkBDnffhio:bfvm1NT6BGg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=pXkBDnffhio:bfvm1NT6BGg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=pXkBDnffhio:bfvm1NT6BGg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=pXkBDnffhio:bfvm1NT6BGg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=pXkBDnffhio:bfvm1NT6BGg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=pXkBDnffhio:bfvm1NT6BGg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=pXkBDnffhio:bfvm1NT6BGg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=pXkBDnffhio:bfvm1NT6BGg:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/pXkBDnffhio" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/234441557445741882/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=234441557445741882" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/234441557445741882?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/234441557445741882?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/pXkBDnffhio/unity-30-con-soporte-oficial-para.html" title="Unity 3.0, con soporte oficial para ASP.NET MVC" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-kLlYeARBx84/UY_Vzc-i3ZI/AAAAAAAAC5k/godPx8pvy80/s72-c/ASPNETMVC%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/unity-30-con-soporte-oficial-para.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAEQXw_fCp7ImA9WhBbFE8.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-3496326980580707056</id><published>2013-05-13T09:05:00.000+02:00</published><updated>2013-05-13T09:05:00.244+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-13T09:05:00.244+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 117</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh5.ggpht.com/-tX0xkdJ-84U/UY5wVYA1cvI/AAAAAAAAC4k/jBZp6GUoeYM/image234242333333333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces que he ido recopilando durante la semana pasada. Espero que os resulten interesantes :-)&lt;br /&gt;
 &lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://scottksmith.com/blog/2013/05/08/getting-started-with-scriptcs/"&gt;Getting Started With ScriptCS&lt;/a&gt;       &lt;br /&gt;Scott Smith &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/590978/LINQ-Tutorial-for-Beginners"&gt;LINQ Tutorial for Beginners&lt;/a&gt;       &lt;br /&gt;D. Ban &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tech.pro/tutorial/1266/advanced-programming-with-c"&gt;Advanced programming with C#&lt;/a&gt;       &lt;br /&gt;Florian Rappl&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/590711/Include-JavaScript-Files-with-Automatic-Versioning"&gt;Include JavaScript Files with Automatic Versioning&lt;/a&gt;       &lt;br /&gt;Hernán Hegykozi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techbubbles.com/aspnet/validation-components-in-asp-net-mvc/" title="Validation Components in ASP.NET MVC"&gt;Validation Components in ASP.NET MVC&lt;/a&gt;       &lt;br /&gt;Kalyan Bandarupalli &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/507569/Bootstrap-HTML-Helpers"&gt;Bootstrap HTML Helpers&lt;/a&gt;       &lt;br /&gt;Gordon Matt &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-facebook-birthday-app"&gt;ASP.NET MVC Facebook Birthday App&lt;/a&gt;       &lt;br /&gt;Rick Anderson &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client"&gt;ASP.NET SignalR Hubs API Guide - JavaScript Client&lt;/a&gt;       &lt;br /&gt;Tom Dykstra &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server"&gt;ASP.NET SignalR Hubs API Guide&lt;/a&gt;       &lt;br /&gt;Tom Dykstra &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2013/05/06/comenzando-con-asp-net-web-api-y-odata-parte-2.aspx"&gt;Comenzando con ASP.NET Web API y Odata , Parte 2&lt;/a&gt;       &lt;br /&gt;Gonzalo Pérez &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/05/the-future-is-now-owin-and-multi-hosting-asp-net-web-applications/" title="Permalink to The future is now – OWIN and multi-hosting ASP.NET web applications"&gt;The future is now – OWIN and multi-hosting ASP.NET web applications&lt;/a&gt;       &lt;br /&gt;Filip W. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/OneASPNETNancyTemplatesForVisualStudio.aspx"&gt;One ASP.NET: Nancy.Templates for Visual Studio&lt;/a&gt;       &lt;br /&gt;Scott Hanselman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gregshackles.com/2013/05/building-a-real-time-photo-gallery-with-xamarin-signalr-azure-and-webapi/"&gt;Building a Real-Time Photo Gallery with Xamarin, SignalR, Azure, and WebAPI&lt;/a&gt;       &lt;br /&gt;Gregs Hackles &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/589206/ASP-NET-Globalization-and-Localization"&gt;ASP.NET Globalization and Localization&lt;/a&gt;       &lt;br /&gt;Marla Sukesh &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/292050/CheckBoxList-For-A-missing-MVC-extension"&gt;CheckBoxList(For) - A missing MVC extension&lt;/a&gt;       &lt;br /&gt;Mikhail Tsennykh &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/imranbaloch/archive/2013/04/30/a-small-but-crucial-point-about-app-start-folder.aspx"&gt;A small but crucial point about App_Start folder&lt;/a&gt;       &lt;br /&gt;Imran Balochs &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/ilanda/archive/2013/05/07/c-243-mo-securizar-servicios-webapi-usando-acs-y-tokens-jwt.aspx"&gt;Cómo securizar servicios WebAPI usando ACS y tokens JWT&lt;/a&gt;       &lt;br /&gt;Ibón Landa &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jasoft.org/Blog/post/Como-funcionan-las-cookies-y-porque-es-importante-saberlo.aspx" title="Cómo funcionan las cookies y por qué es importante saberlo"&gt;Cómo funcionan las cookies y por qué es importante saberlo&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/jeff/archive/2013/05/06/building-for-web-scale-is-a-different-skill.aspx"&gt;Building for Web scale is a different skill&lt;/a&gt;       &lt;br /&gt;Jess Putz &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/581487/Unit-of-Work-Design-Pattern"&gt;Unit of Work Design Pattern&lt;/a&gt;       &lt;br /&gt;Shivprasad koirala       &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/unai/archive/2013/05/10/ef-6-command-rewriters-i.aspx"&gt;EF 6: Command rewriters - I&lt;/a&gt;       &lt;br /&gt;Unai Zorrilla &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/unai/archive/2013/05/08/ef-6-interceptors-segunda-iteraci-243-n.aspx"&gt;EF 6: Interceptors, segunda iteración&lt;/a&gt;       &lt;br /&gt;Unai Zorrilla &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.developingthefuture.net/whats-new-in-entity-framework-5-0/"&gt;What’s New in Entity Framework 5.0?&lt;/a&gt;       &lt;br /&gt;Kosta Hristov &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/591062/How-to-add-JavaScript-and-CSS-f"&gt;How to add JavaScript and CSS files to a web page during runtime&lt;/a&gt;       &lt;br /&gt;Sisirp &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/589506/Comparing-JavaScript-OOP-to-NET"&gt;Comparing JavaScript OOP to .NET&lt;/a&gt;       &lt;br /&gt;Jon Woo &lt;/li&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/articles/news/ecmascript-6-today/"&gt;Use ECMAScript 6 Today&lt;/a&gt;       &lt;br /&gt;sayanee Basu &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jquery4u.com/testing/jquery-body-on-document-on/" title="jQuery $(‘body’).on() vs $(‘document’).on()"&gt;jQuery $(‘body’).on() vs $(‘document’).on()&lt;/a&gt;       &lt;br /&gt;Sam Deering &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nczonline.net/blog/2013/04/01/making-accessible-icon-buttons/"&gt;Making accessible icon buttons&lt;/a&gt;       &lt;br /&gt;Nicholas C. Zakas &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/05/07/angularjs-abstractions-organizing-modules.aspx"&gt;AngularJS Abstractions: Organizing Modules&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.genbetadev.com/herramientas/la-tercera-actualizacion-de-visual-studio-2012-entra-en-release-candidate"&gt;La tercera actualización de Visual Studio 2012 entra en Release Candidate&lt;/a&gt;       &lt;br /&gt;Juan Quijano&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;Eventos&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032553975&amp;amp;Culture=es-ES&amp;amp;community=0"&gt;Webcast: Novedades en Entity Framework 6&lt;/a&gt;       &lt;br /&gt;Jue 30 mayo | Diego Vega &amp;amp; Unai Zorrilla &lt;/li&gt;
&lt;li&gt;&lt;a href="https://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032554072"&gt;Tenerife: C# para dominarlos a todos, Xamarin es el anillo de poder&lt;/a&gt;       &lt;br /&gt;Vie 24 mayo | José Miguel Torres &amp;amp; Juan M. Gómez &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobilitydaywave.eventbrite.com/"&gt;Móstoles: Mobility Day - Workshop Juegos con WaveEngine&lt;/a&gt;       &lt;br /&gt;Mié 22 mayo | Javier Cantón &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.elpais.com/turing/2013/04/tony-hoare-doctor-honoris-causa-por-la-universidad-complutense.html"&gt;Tony Hoare Doctor Honoris Causa por la Universidad Complutense&lt;/a&gt;       &lt;br /&gt;David de Frutos &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/05/open-source-en-un-mundo-microsoft/"&gt;Open Source en un mundo Microsoft&lt;/a&gt;       &lt;br /&gt;Juan María Hernández       &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que normalmente podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=U9IWwm6Mrhc:VArTkxYRhtk:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=U9IWwm6Mrhc:VArTkxYRhtk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=U9IWwm6Mrhc:VArTkxYRhtk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=U9IWwm6Mrhc:VArTkxYRhtk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=U9IWwm6Mrhc:VArTkxYRhtk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=U9IWwm6Mrhc:VArTkxYRhtk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=U9IWwm6Mrhc:VArTkxYRhtk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=U9IWwm6Mrhc:VArTkxYRhtk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=U9IWwm6Mrhc:VArTkxYRhtk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=U9IWwm6Mrhc:VArTkxYRhtk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/U9IWwm6Mrhc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/3496326980580707056/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=3496326980580707056" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/3496326980580707056?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/3496326980580707056?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/U9IWwm6Mrhc/enlaces-interesantes-117.html" title="Enlaces interesantes 117" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-tX0xkdJ-84U/UY5wVYA1cvI/AAAAAAAAC4k/jBZp6GUoeYM/s72-c/image234242333333333333.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/enlaces-interesantes-117.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EEQ3g4fyp7ImA9WhBbEE8.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-6065531113666450376</id><published>2013-05-08T16:00:00.000+02:00</published><updated>2013-05-08T16:00:02.637+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-08T16:00:02.637+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="variablenotfound.com" /><category scheme="http://www.blogger.com/atom/ns#" term="autobombo" /><category scheme="http://www.blogger.com/atom/ns#" term="aniversario" /><title>Siete años ya, y esa variable que no aparece</title><content type="html">&lt;img align="right" alt="¡Siete años!" border="0" height="168" src="http://lh4.ggpht.com/-RAe4OB0BAps/UYaFIbn4FQI/AAAAAAAAC3M/0vSO8LO52jM/image%25255B20%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="¡Siete años!" width="248" /&gt;Recuerdo aquel lunes 8 de mayo de 2006 como si fuera ayer. Venga, va, no lo recuerdo, pero buscando un poco por la red he visto que en &lt;a href="http://goo.gl/maps/7hluQ"&gt;Sevilla&lt;/a&gt; teníamos un día &lt;a href="http://www.tutiempo.net/clima/Sevilla_San_Pablo/05-2006/83910.htm"&gt;soleado con una temperatura máxima rondando los 27 grados&lt;/a&gt; que seguro que invitaba a salir a pasear. Según se puede comprobar en los periódicos del día (&lt;a href="http://www.elmundo.es/papel/2006/05/08/"&gt;uno&lt;/a&gt;, &lt;a href="http://elpais.com/tag/fecha/20060508/"&gt;otro&lt;/a&gt;, &lt;a href="http://hemeroteca.abc.es/nav/Navigate.exe/hemeroteca/madrid/abc/2006/05/08/001.html"&gt;otro más&lt;/a&gt;…), el mundo estaba, como siempre, revuelto. Se celebraba el día de los &lt;a href="http://www.santopedia.com/santos/san-acacio-de-bizancio"&gt;Acacios&lt;/a&gt;, &lt;a href="http://www.santopedia.com/santos/san-gibriano"&gt;Gibrianos&lt;/a&gt;, y &lt;a href="http://www.santopedia.com/santos/san-metron"&gt;Metrones&lt;/a&gt;, entre otros nombres imposibles, y se cumplían &lt;a href="http://es.wikipedia.org/wiki/F%C3%B3rmula_de_la_Coca-Cola"&gt;120 años desde el nacimiento de la coca-cola&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Y por algún motivo debí pensar que era &lt;strong&gt;un buen día para comenzar un blog&lt;/strong&gt;. Fue uno de esos pequeños pasos que das sin otorgarle importancia alguna, pero que transcurrido el tiempo puedes comprobar que realmente fue &lt;strong&gt;decisivo para tu futuro&lt;/strong&gt;. Lo único que tenía a mi favor eran las &lt;strong&gt;ganas de hacerlo&lt;/strong&gt;, y la ventaja de tener&lt;strong&gt; poco que perder&lt;/strong&gt; por intentarlo. Nota: no sé si os habréis fijado, pero las negrillas de este párrafo componen un mensaje subliminal para todos aquellos que aún no os habéis lanzado a&amp;nbsp;crear vuestro propio blog&amp;nbsp;;)&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Una vez tomada la decisión, sólo faltaba elegir por una la plataforma que me proporcionara alojamiento gratuito, pues obviamente no pensaba gastar ni un céntimo en esta aventura. Opté por Blogger porque en aquél momento todo lo que tenía que ver con Google molaba mucho, y me parecía una herramienta que ofrecía justo lo que andaba buscando: simplicidad de uso, y no complicarme mucho la vida en los aspectos infraestructurales ni de diseño.&lt;br /&gt;
&lt;br /&gt;
&lt;img align="left" alt="¡Ah, el spectrum!" border="0" height="149" src="http://lh3.ggpht.com/-j4xqgdrxlrA/UYaFJN9c6iI/AAAAAAAAC3Q/JqSqBVUvSY8/image%25255B21%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: left; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="¡Ah, el spectrum!" width="192" /&gt;Como curiosidad, el nombre original que elegí para el blog era “Variable not found 0:1”, como homenaje a uno de los famosos errores que mostraba nuestro añorado &lt;a href="http://es.wikipedia.org/wiki/Sinclair_ZX_Spectrum"&gt;ZX Spectrum&lt;/a&gt; cuando hacíamos burradas con variables inexistentes. Más adelante eliminé el “0:1” final porque pensé que sólo unos cuantos frikis de mi generación podrían entenderlo, así que me centré en la parte textual del nombre, que me pareció bastante neutra y reconocible para los que nos dedicamos al desarrollo independientemente de nuestra trayectoria o tecnologías de cabecera.&lt;br /&gt;
&lt;br /&gt;
Tras un breve &lt;a href="http://www.variablenotfound.com/2006/05/paren-el-tren-que-me-subo.html"&gt;post de presentación&lt;/a&gt;, me puse a escribir sobre lo que se me ocurría. Y no tardaron en verse los resultados, perfectamente reflejados en la siguiente gráfica de visitas:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="No me visita ni el tato :-DD" border="0" height="147" src="http://lh3.ggpht.com/-aH1x0lZ293I/UYaFKMekPvI/AAAAAAAAC3c/0W0Sjsun7Wk/image%25255B16%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="No me visita ni el tato :-DD" width="634" /&gt;&lt;br /&gt;
&lt;br /&gt;
¡Nada! Exceptuando un pico provocado por un post afortunado sobre &lt;a href="http://www.variablenotfound.com/2006/09/google-image-labeler.html"&gt;Google Image Labeler&lt;/a&gt;, el número de visitas diarias durante los diez primeros meses rondaba entre &lt;strong&gt;cero y cinco &lt;/strong&gt;de media. Vaya desastre, ¿no? Pues no; me divertía lo que hacía, y cada visita o comentario los celebraba casi con champán ;)&lt;br /&gt;
&lt;br /&gt;
Ya cerca de cumplir el &lt;a href="http://www.variablenotfound.com/2007/05/un-ao-sin-encontrar-la-variable.html"&gt;primer año&lt;/a&gt; de vida empecé a dedicar algo de tiempo a &lt;strong&gt;incluir el blog en directorios y agregadores&lt;/strong&gt;, a hacer &lt;a href="http://geeks.ms/blogs/jmaguilar/"&gt;crossposting&lt;/a&gt; en sitios de primer nivel, a incluir feeds, y a obtener los primeros &lt;strong&gt;enlaces&lt;/strong&gt; de otros autores a los que parecía interesar algunas de las cosas que escribía. Las visitas comenzaron a subir.&lt;br /&gt;
&lt;br /&gt;
El &lt;a href="http://www.variablenotfound.com/2008/05/dos-aos-ya-y-la-variable-sigue-sin.html"&gt;segundo año&lt;/a&gt; fue el de mayor crecimiento de toda la historial del blog. Acabamos con una media de 10.000 visitas al mes, aunque algo artificial debido a picos brutales procedentes de avalanchas desde &lt;a href="http://www.meneame.net/"&gt;Menéame&lt;/a&gt;, &lt;a href="http://www.microsiervos.com/"&gt;Microsiervos&lt;/a&gt;, &lt;a href="http://www.genbeta.com/"&gt;Genbeta&lt;/a&gt; y otros. Dado que la cosa se estaba poniendo ya seria, a finales de 2007 comencé a usar el dominio actual y sustituí la plantilla de Blogger por un &lt;strong&gt;diseño propio&lt;/strong&gt;, bastante similar al actual (al que, por cierto, sé que se le notan ya los años ;-D).&lt;br /&gt;
&lt;br /&gt;
El &lt;a href="http://www.variablenotfound.com/2009/05/ya-van-tres-anos-sin-saber-nada-de-la.html"&gt;tercer&lt;/a&gt; y &lt;a href="http://www.variablenotfound.com/2010/05/cuatro-anos-desde-que-desaparecio-la.html"&gt;cuarto año&lt;/a&gt; podríamos considerarlos como de consolidación. &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt; siguió creciendo a buen ritmo, y se incluyeron otras vías para estar en contacto con los seguidores, principalmente a través de Facebook y Twitter. Llegaron algunos patrocinadores y tuve la oportunidad de probar y acceder a información temprana sobre algunos productos, por cortesía de sus fabricantes. Superábamos las 120.000 páginas vistas por 70.000 visitantes únicos al año sólo en variablenotfound.com, y cerca de 1.000 suscriptores al RSS, unas cifras que no podía haber imaginado en mis mejores sueños.&lt;br /&gt;
&lt;br /&gt;
El &lt;a href="http://www.variablenotfound.com/2011/05/cinco-anos-de-variable-not-found.html"&gt;quinto año&lt;/a&gt; (2010-2011), continuamos creciendo de forma considerable en visitantes, suscriptores al feed, y seguidores a través de redes sociales, pero lo más importante que se produjo fue el salto al mundo físico. Hasta entonces, toda mi relación con la comunidad de desarrolladores había sido a través del blog pero, gracias a una invitación de Microsoft, en este año tuve ocasión de asistir a algunos eventos, participar en charlas y, en definitiva, poner cara a decenas de personas que conocía sólo virtualmente y a hacer buenos amigos entre gente a la que admiraba y seguía desde hacía mucho tiempo.&lt;br /&gt;
&lt;br /&gt;
&lt;img align="right" alt="Microsoft MVP" border="0" height="121" src="http://lh4.ggpht.com/-r8Ql77F6MiI/UYaFK4q-3pI/AAAAAAAAC3k/oL2h5o43REo/image%25255B19%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Microsoft MVP" width="77" /&gt;Continuamos creciendo también el &lt;a href="http://www.variablenotfound.com/2012/05/6-anos-6-y-de-la-variable-ni-rastro.html"&gt;sexto año&lt;/a&gt; con unas cifras bastante importantes. Se consultaban 200.000 páginas al al año y se superaban los 1.300 suscriptores al RSS. Pero, sin duda, lo mejor de este año fue la grata e inesperada sorpresa de ser &lt;a href="http://www.variablenotfound.com/2011/07/microsoft-mvp-2011.html"&gt;nombrado Microsoft MVP&lt;/a&gt;, todo un lujazo que me dio la oportunidad de tratar con figuras de primer nivel o visitar el &lt;a href="http://www.variablenotfound.com/2012/03/experiencia-summit.html"&gt;campus de Microsoft&lt;/a&gt; en Redmond, entre otras grandes satisfacciones, y una auténtica revolución a nivel profesional.&lt;br /&gt;
&lt;br /&gt;
El séptimo año, el que ahora cerramos, ha sido también muy importante por varios motivos. Por un lado, llegó mi &lt;a href="http://www.variablenotfound.com/2012/07/microsoft-mvp-2012.html"&gt;segundo nombramiento como Microsoft MVP&lt;/a&gt;, que ha sido de nuevo una alegría inmensa y me ha dado la oportunidad de seguir estrechando lazos con auténticos fenómenos en lo personal y profesional, de &lt;a href="http://www.variablenotfound.com/2013/02/mvp-global-summit-2013.html"&gt;viajar de nuevo a Seattle&lt;/a&gt;, y pasármelo de fábula.&lt;br /&gt;
&lt;br /&gt;
&lt;img align="right" alt="Hey! Soy yo con David Fowler y Damian Edwards!!" height="191" src="http://lh5.ggpht.com/-H-w85m6BBek/USuiJhvjebI/AAAAAAAACvQ/ZoVKp_h48Wk/photo7.jpg?imgmax=800" style="margin: 0px 0px 10px 10px;" width="143" /&gt;El segundo gran acontecimiento de este año, y que marca la diferencia respecto a etapas anteriores, ha sido la publicación de mi primer libro, &lt;a href="http://www.variablenotfound.com/2013/03/mi-libro-introduccion-aspnet-signalr.html"&gt;Introducción a ASP.NET SignalR&lt;/a&gt;. La verdad es que es una experiencia que he disfrutado bastante porque me encanta esta tecnología; además,&amp;nbsp;aprovechando la asistencia al MVP Summit en Seattle tuvimos la ocasión de la ocasión de presentárselo y entregárselo en persona a los principales desarrolladores de este framework, que lo acogieron con gran entusiasmo al ser el primero publicado sobre su criatura. Incluso dejé algún ejemplar firmado y con dedicatoria, como la gente importante ;-)&lt;br /&gt;
&lt;br /&gt;
Bueno, ¿y qué tal fue la cosa en este séptimo año de vida del blog en cuanto a visitantes? Pues seguimos sin poder quejarnos… más bien todo lo contrario. En general sigue aumentando a muy buen ritmo el número de amigos de Variable not found a través de las distintas vías disponibles:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Sólo en variablenotfound.com, alcanzamos las 250.000 páginas vistas al año, realizadas por 126.000 visitantes únicos. ¡Uau!&lt;/li&gt;
&lt;li&gt;Superando en mucho los 1500 suscriptores al RSS. Impresionante.&lt;/li&gt;
&lt;li&gt;815 followers en Twitter. Brutal.&lt;/li&gt;
&lt;li&gt;Superando los 510 amigos en Facebook. Increíble.&lt;/li&gt;
&lt;/ul&gt;
Como suelo decir, es blog muy humilde y poco importante en general, pero con unas &lt;strong&gt;cifras bastante notables&lt;/strong&gt; teniendo en cuenta su temática tan específica.&lt;br /&gt;
&lt;br /&gt;
&lt;img align="right" alt="Uso de navegadores" border="0" height="130" src="http://lh3.ggpht.com/--DvI5nZhkKI/UYaFLw0BeyI/AAAAAAAAC3o/UazCYtL8KAQ/image%25255B28%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Uso de navegadores" width="235" /&gt;Os comento también algunos datos destacables sobre estas visitas del último año. El porcentaje de lectores que acceder al blog usando Internet Explorer ha descendido un 3%, mientras que Firefox lo ha hecho más de un 10%; esto podría explicar prácticamente el 14% de incremento de visitantes que usan Google Chrome, que son ya más de la mitad.&lt;br /&gt;
&lt;br /&gt;
En cuanto al origen de estas visitas, el principal sigue siendo España, aunque este año se ha producido un fuerte incremento de los amigos procedentes del lado de allá del Atlántico, donde destacan las comunidades de México, Argentina, Colombia, Perú y Chile.&lt;br /&gt;
&lt;br /&gt;
De verdad, &lt;strong&gt;no tengo palabras para agradeceros a todos&lt;/strong&gt; que la &lt;em&gt;comunidad de la variable&lt;/em&gt; continúe creciendo año tras año, y las alegrías que me sigue deparando. Personalmente, saber que estáis ahí es la mejor recompensa que puedo tener &lt;strike&gt;una vez descartado hacerme rico con Adsense ;-)&lt;/strike&gt;, y sigue haciendo que merezca la pena escribir cada post e intentar generar contenido útil con toda la frecuencia que mis compromisos profesionales me lo permiten.&lt;br /&gt;
&lt;br /&gt;
Sólo &lt;strong&gt;espero&lt;/strong&gt; &lt;strong&gt;seguir contando con vuestro apoyo y compañía&lt;/strong&gt; un año más, y que continuéis &lt;em&gt;ayudándome a encontrar esta escurridiza variable&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
¡Nos vemos por aquí!&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;. &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Zhi1C2DeGDc:6hD7IdwsevI:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Zhi1C2DeGDc:6hD7IdwsevI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Zhi1C2DeGDc:6hD7IdwsevI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Zhi1C2DeGDc:6hD7IdwsevI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=Zhi1C2DeGDc:6hD7IdwsevI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Zhi1C2DeGDc:6hD7IdwsevI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=Zhi1C2DeGDc:6hD7IdwsevI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Zhi1C2DeGDc:6hD7IdwsevI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=Zhi1C2DeGDc:6hD7IdwsevI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Zhi1C2DeGDc:6hD7IdwsevI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/Zhi1C2DeGDc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/6065531113666450376/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=6065531113666450376" title="5 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6065531113666450376?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6065531113666450376?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/Zhi1C2DeGDc/siete-anos-ya-y-esa-variable-que-no.html" title="Siete años ya, y esa variable que no aparece" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-RAe4OB0BAps/UYaFIbn4FQI/AAAAAAAAC3M/0vSO8LO52jM/s72-c/image%25255B20%25255D.png?imgmax=800" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/siete-anos-ya-y-esa-variable-que-no.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMDSXk_fyp7ImA9WhBUGUQ.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-5943986039447500584</id><published>2013-05-07T09:43:00.001+02:00</published><updated>2013-05-08T08:11:18.747+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-08T08:11:18.747+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cartujadotnet" /><category scheme="http://www.blogger.com/atom/ns#" term="knockout" /><category scheme="http://www.blogger.com/atom/ns#" term="eventos" /><title>Evento en Sevilla: Arquitectura con Javascript, ¡no más Google Copy Paste!</title><content type="html">&lt;img align="right" alt="Knockout" border="0" height="129" src="http://lh5.ggpht.com/-0ZlXw9DuJg8/UYgMwjHieJI/AAAAAAAAC38/KeNw_L5Y6Ck/image%25255B11%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Knockout" width="129" /&gt;El próximo jueves día 9 de mayo, desde &lt;a href="http://www.cartujadotnet.es/"&gt;CartujaDotNet&lt;/a&gt;, el grupo de usuarios .NET de Sevilla, tenemos el gusto de invitaros a un evento presencial del gran &lt;a href="http://mvp.microsoft.com/es-es/mvp/Braulio%20Diez%20Botella-4025478"&gt;Braulio Díez&lt;/a&gt; para tratar sobre un tema de gran actualidad: &lt;strong&gt;arquitectura de aplicaciones Javascript con Knockout&lt;/strong&gt; y otros frameworks interesantes.&lt;br /&gt;
&lt;br /&gt;
Será a las 19:30h, durará unas dos horas, y tendrá lugar en el &lt;a href="https://www.cloudingpoint.com/Inicio.aspx"&gt;Clouding Point/Centro demostrador TIC de Sevilla&lt;/a&gt;, que podéis encontrar en la &lt;a href="http://goo.gl/maps/izWMc"&gt;siguiente dirección&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 30px;"&gt;
C/Biología, 12, Edificio Vilamar 2, 3ª Planta&lt;br /&gt;
Parque Empresarial Nuevo Torneo&lt;br /&gt;
41015 Sevilla&lt;/div&gt;
&lt;div align="left"&gt;
&lt;br /&gt;
Por supuesto, como de costumbre, la asistencia es gratuita, y &lt;strong&gt;lo único que tenéis que hacer es registraros&lt;/strong&gt; en el &lt;a href="http://cartujaarquitecturajavascript.eventbrite.com/" target="_blank"&gt;sitio del evento en Eventbrite&lt;/a&gt; :-)&lt;/div&gt;
&lt;h4&gt;
Descripción oficial del evento&lt;/h4&gt;
&lt;blockquote&gt;
¿Se acumula desmesuradamente código cliente en tus proyectos?, ¿has oído hablar de MVVM?, ¿quizás de Knockout?. Desde&lt;strong&gt; CartujaDotNet&lt;/strong&gt; (@cartujadotnet), grupo de usuarios .NET de Sevilla, organizamos un evento sobre Arquitectura con Javascript.&lt;br /&gt;
Soluciones a problemas comunes: scripts/css, cache y tamaños, crear módulos y métodos&amp;nbsp; “privados/ públicos”, gestión de dependencias, servicios de datos, unit testing, mocking de datos, binding declarativo y más!&lt;br /&gt;
&lt;br /&gt;
Para ello se utilizarán en conjunto: Bundling, Amplify, RequireJS, Knockout y MockJSON.&lt;/blockquote&gt;
&lt;h4&gt;
Sobre Braulio Díez&lt;/h4&gt;
&lt;img align="left" alt="Braulio Díez" border="0" height="76" src="http://lh4.ggpht.com/-xKbA2FYqiMo/UYgMxskdpQI/AAAAAAAAC4E/M8mglxuXtz4/image%25255B10%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: left; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Braulio Díez" width="87" /&gt;Es un desarrollador de software especializado en Web y XAML. Lleva más de 15 años de experiencia trabajando en el sector en proyectos de ámbito internacional. Además, Braulio es MVP de Silverlight, escribe artículos técnicos relacionados con tecnologías .NET, es trainer y speaker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No os lo perdáis, que seguro que es interesantísimo. ¡Nos vemos por allí! :)&lt;br /&gt;
&lt;br /&gt;
Publicado en: &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=KL1In72wF6Y:fjtkT-mFce0:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=KL1In72wF6Y:fjtkT-mFce0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=KL1In72wF6Y:fjtkT-mFce0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=KL1In72wF6Y:fjtkT-mFce0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=KL1In72wF6Y:fjtkT-mFce0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=KL1In72wF6Y:fjtkT-mFce0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=KL1In72wF6Y:fjtkT-mFce0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=KL1In72wF6Y:fjtkT-mFce0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=KL1In72wF6Y:fjtkT-mFce0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=KL1In72wF6Y:fjtkT-mFce0:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/KL1In72wF6Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/5943986039447500584/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=5943986039447500584" title="6 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/5943986039447500584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/5943986039447500584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/KL1In72wF6Y/evento-en-sevilla-arquitectura-con.html" title="Evento en Sevilla: Arquitectura con Javascript, ¡no más Google Copy Paste!" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-0ZlXw9DuJg8/UYgMwjHieJI/AAAAAAAAC38/KeNw_L5Y6Ck/s72-c/image%25255B11%25255D.png?imgmax=800" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/evento-en-sevilla-arquitectura-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQEQXc8cSp7ImA9WhBUGUw.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-7491998570533529303</id><published>2013-05-07T09:05:00.000+02:00</published><updated>2013-05-07T09:05:00.979+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-07T09:05:00.979+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="radarc" /><category scheme="http://www.blogger.com/atom/ns#" term="sorteo" /><title>Habemus ganadores del sorteo Radarc</title><content type="html">&lt;img align="right" alt="Radarc" border="0" height="59" src="http://lh6.ggpht.com/-yPRBIvan-0c/UYVHKDcAGWI/AAAAAAAAC28/ybQvi48w7s4/image%25255B2%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Radarc" width="221" /&gt;Pues la suerte ha hablado, y ya tenemos ganadores para el sorteo de licencias de Radarc que &lt;a href="http://www.variablenotfound.com/2013/04/generacion-de-aplicaciones-mvc-4-con.html"&gt;anunciábamos hace unos días&lt;/a&gt;. Al final el notario no pudo estar presente por razones de agenda ;), pero os aseguro que ha sido un sorteo total y absolutamente limpio y aleatorio.&lt;br /&gt;
&lt;br /&gt;
Los afortunados, con los que ya me he puesto en contacto para indicarles cómo conseguir sus licencias, son:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Carlos Corral&lt;/li&gt;
&lt;li&gt;Julio Avellaneda&lt;/li&gt;
&lt;li&gt;José Ignacio Pérez&lt;/li&gt;
&lt;li&gt;Jorge Gil&lt;/li&gt;
&lt;li&gt;Betto Geldres&lt;/li&gt;
&lt;/ul&gt;
Al resto, agradecer vuestra participación, que la verdad es que ha superado con creces todas las expectativas que teníamos depositadas en esta iniciativa.&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=5aQZzWSd1PU:s2qBCZz3mM4:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=5aQZzWSd1PU:s2qBCZz3mM4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=5aQZzWSd1PU:s2qBCZz3mM4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=5aQZzWSd1PU:s2qBCZz3mM4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=5aQZzWSd1PU:s2qBCZz3mM4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=5aQZzWSd1PU:s2qBCZz3mM4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=5aQZzWSd1PU:s2qBCZz3mM4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=5aQZzWSd1PU:s2qBCZz3mM4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=5aQZzWSd1PU:s2qBCZz3mM4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=5aQZzWSd1PU:s2qBCZz3mM4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/5aQZzWSd1PU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/7491998570533529303/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=7491998570533529303" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/7491998570533529303?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/7491998570533529303?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/5aQZzWSd1PU/habemus-ganadores-del-sorteo-radarc.html" title="Habemus ganadores del sorteo Radarc" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-yPRBIvan-0c/UYVHKDcAGWI/AAAAAAAAC28/ybQvi48w7s4/s72-c/image%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/habemus-ganadores-del-sorteo-radarc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4EQXYzeSp7ImA9WhBUGE8.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-7999905496036222569</id><published>2013-05-06T09:05:00.000+02:00</published><updated>2013-05-06T09:05:00.881+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-06T09:05:00.881+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 116</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh4.ggpht.com/-28JVRb5WJ7o/UYT1VLZ_pcI/AAAAAAAAC2s/Q_3sQeio7bs/image23424233333333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces que he ido recopilando durante la semana pasada, del 29 de abril al 3 de mayo de 2013. &lt;br /&gt;
&lt;br /&gt;
Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/05/geolocalizando-direcciones-ip-con-csharp/"&gt;Geolocalizando direcciones IP con C#&lt;/a&gt;       &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeguru.com/csharp/.net/zip-and-unzip-files-programmatically-in-c.htm"&gt;Zip and Unzip Files Programmatically in C#&lt;/a&gt;       &lt;br /&gt;Bipin Joshi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/etomas/archive/2013/05/02/c-enumeraciones-y-corutinas.aspx"&gt;[C#]–Enumeraciones y corutinas&lt;/a&gt;       &lt;br /&gt;Eduard Tomás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/ricardoperes/archive/2013/04/28/unity-part-3-aspect-oriented-programming.aspx"&gt;Unity – Part 3: Aspect Oriented Programming&lt;/a&gt;       &lt;br /&gt;Ricardo Peres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/584720/ExpressionplusbasedplusPropertyplusGettersplusandp"&gt;Expression based Property Getters and Setters&lt;/a&gt;       &lt;br /&gt;Nick Polyak&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/587443/How-to-create-SSL-secure-server-HTTPS-in-local-IIS"&gt;How to create SSL secure server (HTTPS) in local IIS ?&lt;/a&gt;       &lt;br /&gt;Bikash Prakash Dash &lt;/li&gt;
&lt;li&gt;&lt;a href="http://midnightprogrammer.net/post/async-controller-in-mvc-4/" title="Async Controller In MVC 4"&gt;Async Controller In MVC 4&lt;/a&gt;       &lt;br /&gt;Prashant Khandelwal &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/dn198242.aspx"&gt;Leverage Multiple Code Frameworks with One ASP.NET&lt;/a&gt;       &lt;br /&gt;Jeff Fritz &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/585883/Classic-ASP-and-MVC"&gt;Classic ASP and MVC&lt;/a&gt;       &lt;br /&gt;Emmet M &lt;/li&gt;
&lt;li&gt;&lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2013/04/30/inheritance-issue-w-typescript-and-mvc-bundling-ordering.aspx"&gt;Inheritance issue w/ Typescript (JavaScript) and MVC Bundling Ordering&lt;/a&gt;       &lt;br /&gt;Derik Whittaker &lt;/li&gt;
&lt;li&gt;&lt;a href="http://trycatchfail.com/blog/post/A-View-Engine-for-ASPNET-MVC-Feature-Based-Organized.aspx" title="A View Engine for ASP.NET MVC Feature-Based Organized"&gt;A View Engine for ASP.NET MVC Feature-Based Organized&lt;/a&gt;       &lt;br /&gt;Matt Honeycutt &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/585496/ASP-NET-Razor-Helpers-Passing-in-Another-Helper-Tr"&gt;ASP.NET Razor @Helpers Passing in Another @Helper Trick!&lt;/a&gt;       &lt;br /&gt;Ben Scharbach &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=888"&gt;Lifecycle of an ASP.NET Web API Message&lt;/a&gt;       &lt;br /&gt;Suprotim Agarwal &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.alexonasp.net/post/2013/04/27/Zero-friction-parallel-self-hosting-of-ASPNET-Web-API-and-static-files-using-OWIN-and-Katana.aspx"&gt;Zero friction parallel self hosting of ASP.NET Web API and static files using OWIN and Katana&lt;/a&gt;       &lt;br /&gt;Alexander Zeitler &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/04/asp-net-web-api-and-greedy-query-string-parameter-binding/"&gt;ASP.NET Web API and greedy query string parameter binding&lt;/a&gt;       &lt;br /&gt;Filip W. &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/ilanda/archive/2013/05/02/desplegar-aplicaciones-web-en-windows-azure-websites-que-hagan-uso-de-wif.aspx"&gt;Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF&lt;/a&gt;       &lt;br /&gt;Ibón Landa &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2013/04/30/announcing-the-release-of-windows-azure-sdk-2-0-for-net.aspx"&gt;Announcing the release of Windows Azure SDK 2.0 for .NET&lt;/a&gt;       &lt;br /&gt;Scott Guthrie &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.davidebbo.com/2013/04/publishing-to-azure-web-sites-from-any.html"&gt;Publishing to Azure Web Sites from any git/hg repo&lt;/a&gt;       &lt;br /&gt;David Ebbo &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2013/04/26/windows-azure-improvements-to-virtual-networks-virtual-machines-cloud-services-and-a-new-ruby-sdk.aspx"&gt;Windows Azure: Improvements to Virtual Networks, Virtual Machines, Cloud Services and a new Ruby SDK&lt;/a&gt;       &lt;br /&gt;Scott Guthrie &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/tools-and-tips/http-the-protocol-every-web-developer-must-know-part-2"&gt;HTTP: The Protocol Every Web Developer Must Know – Part 2&lt;/a&gt;       &lt;br /&gt;Pavan Podila &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://panicoenlaxbox.blogspot.com.es/2013/05/rompiendo-el-hielo-con-code-first.html"&gt;Rompiendo el hielo con Code First Migrations&lt;/a&gt;       &lt;br /&gt;Sergio León &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/unai/archive/2013/05/03/ef-6-sorpresa-interceptors.aspx"&gt;EF 6: Sorpresa, interceptors&lt;/a&gt;       &lt;br /&gt;Unai zorrilla &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/ricardoperes/archive/2013/04/29/entity-framework-code-first-relations.aspx"&gt;Entity Framework Code First Relations&lt;/a&gt;       &lt;br /&gt;Ricardo Peres &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.jquery.com/2013/05/01/jquery-migrate-1-2-0-released/"&gt;jQuery Migrate 1.2.0 Released&lt;/a&gt;       &lt;br /&gt;Dave Methvin &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tympanus.net/codrops/2013/05/02/automatic-figure-numbering-with-css-counters/"&gt;Automatic Figure Numbering with CSS Counters&lt;/a&gt;       &lt;br /&gt;Hugo Giraudel &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/05/la-etiqueta-base-de-html/"&gt;La etiqueta base de HTML&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/05/01/angularjs-abstractions-modules.aspx"&gt;AngularJS Abstractions: Modules&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/585663/Communication-with-Cross-Domain-IFrame-A-Cross-Bro"&gt;Communication with Cross Domain IFrame - A Cross Browser Solution&lt;/a&gt;       &lt;br /&gt;Tadit Dash &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/04/30/angular-abstractions-the-application.aspx"&gt;Angular Abstractions: The Application&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/getting-into-ember-part-4/"&gt;Getting Into Ember: Part 4&lt;/a&gt;       &lt;br /&gt;Rey Bango &lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rwldrn/idiomatic.js/tree/master/translations/es_ES"&gt;Principios para escribir JavaScript consistente e idiomático&lt;/a&gt;       &lt;br /&gt;Idiomatic.js team &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/04/html-5-fullscreen-api/"&gt;HTML 5 Fullscreen API&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2013/05/01/announcing-the-release-of-webmatrix-3.aspx"&gt;Announcing the Release of WebMatrix 3&lt;/a&gt;       &lt;br /&gt;Scott Guthrie &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/568502/Scraping-Dynamic-WebSite-data-using-Watin"&gt;Scraping Dynamic WebSite data using Watin&lt;/a&gt;       &lt;br /&gt;Shah Vatsal &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Windows 8/WinRT/WP&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://javiersuarezruiz.wordpress.com/2013/04/30/tips-and-tricks-windows-phone-8-donde-esta-mi-splashscreen/"&gt;[Tips and Tricks] Windows Phone 8. ¿Donde esta mi SplashScreen?&lt;/a&gt;       &lt;br /&gt;Javier Suárez Ruiz &lt;/li&gt;
&lt;li&gt;&lt;a href="http://javiersuarezruiz.wordpress.com/2013/04/29/windows-phone-8-distribucion-empresarial/"&gt;Windows Phone 8. Distribución empresarial.&lt;/a&gt;       &lt;br /&gt;Javier Suárez Ruiz       &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que normalmente podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tQBlNKjllO8:bycJN9AedbY:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tQBlNKjllO8:bycJN9AedbY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tQBlNKjllO8:bycJN9AedbY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tQBlNKjllO8:bycJN9AedbY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=tQBlNKjllO8:bycJN9AedbY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tQBlNKjllO8:bycJN9AedbY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=tQBlNKjllO8:bycJN9AedbY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tQBlNKjllO8:bycJN9AedbY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=tQBlNKjllO8:bycJN9AedbY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=tQBlNKjllO8:bycJN9AedbY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/tQBlNKjllO8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/7999905496036222569/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=7999905496036222569" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/7999905496036222569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/7999905496036222569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/tQBlNKjllO8/enlaces-interesantes-116.html" title="Enlaces interesantes 116" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-28JVRb5WJ7o/UYT1VLZ_pcI/AAAAAAAAC2s/Q_3sQeio7bs/s72-c/image23424233333333333.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/05/enlaces-interesantes-116.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcARnc7fyp7ImA9WhBUEks.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-667544706172085666</id><published>2013-04-29T09:20:00.000+02:00</published><updated>2013-04-29T22:07:27.907+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-29T22:07:27.907+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 115</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh3.ggpht.com/-g6FHXz03hLU/UX14-BPpRII/AAAAAAAAC2U/SLIDvYEKkoc/image2342423333333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces recopilados del 22 al 26 de abril de 2013. Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/somasegar/archive/2013/04/25/enterprise-library-6-0.aspx"&gt;Enterprise Library 6.0&lt;/a&gt;       &lt;br /&gt;S. Somasegar &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/ProjectlessScriptedCWithScriptCSAndRoslyn.aspx"&gt;Project-less scripted C# with ScriptCS and Roslyn&lt;/a&gt;       &lt;br /&gt;Scott Hanselman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blackwasp.co.uk/ReflectAssemblyNamespaces.aspx"&gt;Identifying the Namespaces in an Assembly&lt;/a&gt;       &lt;br /&gt;Richard Carr &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tech.pro/tutorial/1229/asynchronous-programming-in-c-advanced-topics"&gt;Asynchronous Programming in C# - Advanced Topics&lt;/a&gt;       &lt;br /&gt;Motti Shaked &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/582450/Build-Where-clause-dynamically-in-Linq"&gt;Build Where clause dynamically in Linq&lt;/a&gt;       &lt;br /&gt;Fitim Skenderi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/480741/Concurrent-Object-Pool-the-Right-Way"&gt;Concurrent Object Pool, the Right Way&lt;/a&gt;       &lt;br /&gt;Roman Atachiants&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/etomas/archive/2013/04/25/combos-en-asp-net-mvc.aspx"&gt;Combos en ASP.NET MVC&lt;/a&gt;       &lt;br /&gt;Eduard Tomás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://qkview.com/techbrij/aspnet-mvc-4"&gt;Quick view of ASP.NET MVC&lt;/a&gt;       &lt;br /&gt;Brij &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/570762/TwitterBootstrapMvc"&gt;TwitterBootstrapMvc&lt;/a&gt;       &lt;br /&gt;Dmitry A. Efimenko &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx"&gt;Remove Unwanted HTTP Response Headers&lt;/a&gt;       &lt;br /&gt;Mathurvarun &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/582845/PreventplusRepeatedplusRequestsplususingplusAction"&gt;Prevent Repeated Requests using ActionFilters in ASP.NET MVC&lt;/a&gt;       &lt;br /&gt;Rion Williams &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/lruiz/archive/2013/04/24/asp-net-webapi-como-recibir-tipos-complejos-en-nuestros-controladores-por-url.aspx"&gt;[ASP.NET WebAPI] Como recibir tipos complejos en nuestros controladores por URL&lt;/a&gt;       &lt;br /&gt;Luis Ruiz Pavón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/581338/WebsiteplusPerformancepluswithplusASP-NETplus-plus"&gt;Website Performance with ASP.NET - Part4 - Use Cache Headers&lt;/a&gt;       &lt;br /&gt;Markus Greuel &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/hongmeig1/archive/2013/04/18/learning-signalr-unable-to-get-property-client-of-undefined-or-null-reference.aspx"&gt;Learning SignalR: Unable to get property 'client' of undefined or null reference&lt;/a&gt;       &lt;br /&gt;Hongmei Ge &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=883"&gt;Host ASP.NET MVC Apps on Azure WebSite Without Spending a Cent on Databases&lt;/a&gt;       &lt;br /&gt;Suprotim Agarwal &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2013/04/19/asp-net-web-api-cors-support-and-attribute-based-routing-improvements.aspx"&gt;ASP.NET Web API: CORS support and Attribute Based Routing Improvements&lt;/a&gt;       &lt;br /&gt;Scott Guthrie &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2013/04/24/deploying-windows-azure-cloud-services-apps.aspx"&gt;Deploying Windows Azure Cloud Services Apps&lt;/a&gt;       &lt;br /&gt;Shiju Varghese &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2013/04/22/building-windows-azure-cloud-services-app-with-web-role-worker-role-table-storage-and-service-bus.aspx"&gt;Building Windows Azure Cloud Services App with Web Role, Worker Role, Table Storage and Service Bus&lt;/a&gt;       &lt;br /&gt;Shiju Varghese &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;&lt;a href="http://blog.koalite.com/2013/04/diseno-de-modelos"&gt;Diseño de Modelos&lt;/a&gt;       &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/unai/archive/2013/04/25/ef-6-nuevas-peque-241-as-grandes-cosas.aspx"&gt;EF 6:Nuevas pequeñas grandes cosas...&lt;/a&gt;       &lt;br /&gt;Unai Zorrilla &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/582986/ConnectingplustoplusMongoDBplususingplusC-23"&gt;Connecting to MongoDB using C#&lt;/a&gt;       &lt;br /&gt;Ravindra T C &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jquery4u.com/jquery-functions/jquerys-closest-parents/"&gt;Use jQuery’s $.closest() vs $.parents()&lt;/a&gt;       &lt;br /&gt;Sam Deering &lt;/li&gt;
&lt;li&gt;&lt;a href="http://wekeroad.com/2013/04/25/models-and-services-in-angular"&gt;Models and Services in Angular&lt;/a&gt;       &lt;br /&gt;Rob Conery &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.thecssninja.com/javascript/stealing-history-api"&gt;Stealing the users back button with the History API&lt;/a&gt;       &lt;br /&gt;Ryan Seddon &lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/magic-numbers-in-css/"&gt;Magic Numbers in CSS&lt;/a&gt;       &lt;br /&gt;Chris Coyier &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.infragistics.com/community/blogs/nanil/archive/2013/04/20/less-a-dynamic-language-that-simplifies-your-css.aspx"&gt;‘LESS’– A dynamic language that simplifies your CSS&lt;/a&gt;       &lt;br /&gt;Nishanth Anil &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.simple-talk.com/blogs/2013/04/18/previewing-image-uploads-with-filereader-in-html5/"&gt;Previewing image uploads with FileReader in HTML5&lt;/a&gt;       &lt;br /&gt;Michael Williamson &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/580165/JavaScript-Best-Practices"&gt;JavaScript Best Practices&lt;/a&gt;       &lt;br /&gt;Tim Corey &lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/preventing-the-performance-hit-from-custom-fonts/"&gt;Preventing the Performance Hit from Custom Fonts&lt;/a&gt;       &lt;br /&gt;Chris Coyier &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.nuget.org/docs/release-notes/nuget-2.5"&gt;NuGet 2.5 Release Notes&lt;/a&gt;       &lt;br /&gt;Nuget team &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.genbetadev.com/sistemas-de-control-de-versiones/semanticmerge-una-forma-diferente-de-realizar-los-merges-en-nuestro-repositorio"&gt;SemanticMerge, una forma diferente de realizar los merges en nuestro repositorio&lt;/a&gt;       &lt;br /&gt;Juan Quijano &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/lruiz/archive/2013/04/19/fiddler-scratchpad-es-tu-aliado.aspx"&gt;[Fiddler] Scratchpad es tu aliado&lt;/a&gt;       &lt;br /&gt;Luis Ruiz Pavón&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/ExposedABlogCommentSpammersSourceTemplate.aspx"&gt;Exposed- A Blog Comment Spammer's Source Template&lt;/a&gt;       &lt;br /&gt;Scott Hanselman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://jmalarcon.es/post/La-segunda-mitad-del-tablero-de-ajedrez.aspx" title="La segunda mitad del tablero de ajedrez"&gt;La segunda mitad del tablero de ajedrez&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/jconesa/archive/2013/04/21/todos-los-eventos-de-second-nug.aspx"&gt;Todos los Eventos de Second Nug&lt;/a&gt;       &lt;br /&gt;Javier Conesa &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=xpNuLc3KAAM:79uWiRbKoyQ:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=xpNuLc3KAAM:79uWiRbKoyQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=xpNuLc3KAAM:79uWiRbKoyQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=xpNuLc3KAAM:79uWiRbKoyQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=xpNuLc3KAAM:79uWiRbKoyQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=xpNuLc3KAAM:79uWiRbKoyQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=xpNuLc3KAAM:79uWiRbKoyQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=xpNuLc3KAAM:79uWiRbKoyQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=xpNuLc3KAAM:79uWiRbKoyQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=xpNuLc3KAAM:79uWiRbKoyQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/xpNuLc3KAAM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/667544706172085666/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=667544706172085666" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/667544706172085666?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/667544706172085666?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/xpNuLc3KAAM/enlaces-interesantes-115.html" title="Enlaces interesantes 115" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-g6FHXz03hLU/UX14-BPpRII/AAAAAAAAC2U/SLIDvYEKkoc/s72-c/image2342423333333333.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/enlaces-interesantes-115.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcHRHw8fCp7ImA9WhBVGU8.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-4308189486504722613</id><published>2013-04-23T09:30:00.000+02:00</published><updated>2013-04-25T22:00:35.274+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-25T22:00:35.274+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="radarc" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="productividad" /><title>Generación de aplicaciones MVC 4 con Radarc (¡y sorteo de licencias!)</title><content type="html">Los que me conocéis desde hace tiempo sabéis que mi interés por las herramientas de generación de código se remonta al principio de los tiempos, allá por los años noventa. Y era simplemente &lt;strong&gt;cuestión de pereza&lt;/strong&gt;: siempre me aburría crear código repetitivo y me parecía bastante más interesante y divertido descubrir los patrones apropiados y diseñar herramientas capaces de liberarme de ese trabajo tedioso que muy frecuentemente acompaña a nuestra profesión.&lt;br /&gt;
&lt;br /&gt;
Ya posteriormente, cuando empecé a compartirlas con mis compañeros de trabajo, pude comprobar que su utilidad y valor iban más allá de evitar mi aburrimiento. Realmente, con el uso de este tipo de herramientas conseguíamos crear aplicaciones con arquitectura y base de código homogéneas, a la vez que disparábamos nuestra productividad, reducíamos errores, y nos permitía concentrarnos en funciones y desarrollos que realmente aportaban valor nuestros clientes, por citar sólo algunos de sus beneficios.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.radarc.net/"&gt;&lt;img align="right" alt="Radarc" border="0" height="59" src="http://lh4.ggpht.com/-XmmtgukJw9M/UWqON1vKzZI/AAAAAAAACz4/ekQLcAmPLJU/image4.png?imgmax=800" style="margin: 0px 0px 10px 10px;" title="Radarc" width="221" /&gt;&lt;/a&gt;Por esta razón, cuando los amigos de &lt;a href="http://www.icinetic.com/"&gt;Icinetic&lt;/a&gt; me ofrecieron la posibilidad de colaborar estrechamente en el desarrollo de fórmulas para Radarc, no pude negarme. Esta empresa, una spin-off de la Universidad de Sevilla y con sede en esta misma ciudad, está muy enfocada a la automatización de procesos de desarrollo de software mediante el uso de Ingeniería Guiada por Modelos (&lt;a href="http://es.wikipedia.org/wiki/Model_Driven_Engineering"&gt;MDE&lt;/a&gt;, Model-Driven Engineering) y con el objetivo final de crear software más rápidamente y con mayor calidad que usando los paradigmas tradicionales.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.radarc.net/"&gt;Radarc&lt;/a&gt;, su producto estrella, es una extensión de Visual Studio capaz de tomar un modelo conceptual del dominio de una aplicación y construir a partir de él una aplicación completa adaptada a distintas tecnologías y arquitecturas gracias a su flexibilidad.&lt;br /&gt;
&lt;br /&gt;
&lt;img align="right" alt="Radarc: Model + Formula = Application" border="0" height="394" src="http://lh4.ggpht.com/-JGwubowWq-U/UWqOOmsbPqI/AAAAAAAAC0A/JWHaLTNzdRQ/image42.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Radarc: Model + Formula = Application" width="338" /&gt;Conceptualmente, Radarc se apoya en dos elementos para generar las aplicaciones. Por un lado, tenemos el &lt;strong&gt;modelo conceptual&lt;/strong&gt; de la aplicación, que es en resumen un conjunto de entidades del dominio, relaciones entre ellas y metadatos que describen los requisitos y estructura del sistema sin entrar en detalles de implementación. &lt;br /&gt;
&lt;br /&gt;
Por otro, tenemos “&lt;strong&gt;fórmulas&lt;/strong&gt;”, que contienen la lógica de generación de aplicaciones para tecnologías y arquitecturas concretas, es decir, todos los detalles de implementación en el entorno elegido. Gracias a esta separación entre &lt;strong&gt;el qué&lt;/strong&gt; y &lt;strong&gt;el cómo&lt;/strong&gt;, es posible generar distintas aplicaciones partiendo del mismo modelo conceptual.&lt;br /&gt;
&lt;br /&gt;
Por último, indicar que se trata de un &lt;a href="http://www.radarc.net/pages/pricing"&gt;producto comercial&lt;/a&gt;, aunque es posible descargar una versión de evaluación para poder probarlo con toda tranquilidad. &lt;br /&gt;
&lt;br /&gt;
Ah, pero antes de que se me olvide: por cortesía de Icinetic, &lt;span style="background-color: yellow;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;se van a sortear 5 licencias de Radarc&lt;/strong&gt; &lt;span style="background-color: yellow;"&gt;&lt;/span&gt;entre los lectores de &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;. Al final del post encontraréis las instrucciones para participar :-) &lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;
1. Instalación y primeros pasos&lt;/h3&gt;
Para comenzar a utilizar Radarc, lo primero es &lt;a href="http://www.radarc.net/pages/download-radarc-for-visual-studio-2012"&gt;descargarlo desde el sitio oficial&lt;/a&gt; del producto, o bien instalarlo usando el administrador de extensiones de Visual Studio. Hay versiones disponibles para VS2010 y VS2012, aunque ésta última es la más recomendable por ser la versión más actualizada.&lt;br /&gt;
&lt;br /&gt;
Si optamos por descargar la versión para VS2012 obtendremos un archivo .zip en el que podemos encontrar varios elementos, como un modelo conceptual de ejemplo y documentación sobre el uso del producto (sí, esos documentos que después no solemos leer ;-)). Aparte, encontramos dos archivos .vsix (extensiones de Visual Studio) que son los que hay que instalar para introducir Radarc en nuestro IDE; primero RadarcVS2012.vsix, y después, opcionalmente, RadarcEDMXExtensions.vsix.&lt;br /&gt;
&lt;br /&gt;
A partir de ese momento, estará disponible en el entorno un nuevo tipo de proyecto, denominado Radarc Solution, que es la que tendremos que utilizar para crear aplicaciones con esta herramienta.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="Nueva solución Radarc" border="0" height="221" src="http://lh6.ggpht.com/-k9civslI4hk/UWqOPrGV0UI/AAAAAAAAC0I/8h0AxdcmH6U/image8.png?imgmax=800" title="Nueva solución Radarc" width="601" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://lh3.ggpht.com/-b1cPRVxUk-I/UWqOQaqnI8I/AAAAAAAAC0Q/OuA6a0hmfSo/image43.png?imgmax=800" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img align="right" alt="Selección de fórmula" border="0" height="150" src="http://lh3.ggpht.com/-b1cPRVxUk-I/UWqOQaqnI8I/AAAAAAAAC0Q/OuA6a0hmfSo/image43.png?imgmax=800" title="Selección de fórmula" width="295" /&gt;&lt;/a&gt;&lt;/div&gt;
Al crear una solución de este tipo, el siguiente paso consiste en &lt;strong&gt;seleccionar la “fórmula”&lt;/strong&gt;, o combinación de arquitectura y tecnología a usar, en nuestra nueva aplicación. La última versión de Radarc para Visual Studio 2012 soporta en la actualidad fórmulas para MVC 4, Windows Phone 8 y Windows 8. La separación entre el modelo conceptual y las fórmulas, una de las bases de la flexibilidad de Radarc, hace posible la extensión hasta el infinito de&amp;nbsp;la herramienta; por ejemplo, usando la fórmula apropiada es posible generar aplicaciones específicas para Azure, o basadas en la famosa arquitectura de referencia &lt;a href="http://microsoftnlayerapp.codeplex.com/"&gt;Domain Oriented N-Layer&lt;/a&gt;, o incluso crear fórmulas personalizadas para adaptar la generación de código de Radarc a nuestra propia arquitectura.&lt;br /&gt;
&lt;br /&gt;
&lt;img align="right" alt="Descargar evaluación de fórmulas" border="0" height="236" src="http://lh5.ggpht.com/-gMQ3iVnGwb8/UWqORKfu-AI/AAAAAAAAC0Y/_T3GNqnGUtk/image53.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Descargar evaluación de fórmulas" width="154" /&gt;Las fórmulas podemos adquirirlas directamente &lt;a href="http://www.radarc.net/pages/formulas"&gt;desde el sitio web de Radarc&lt;/a&gt;, aunque es posible &lt;strong&gt;descargar versiones de evaluación&lt;/strong&gt; de forma gratuita. Para ello, sólo tendremos que seleccionar el correspondiente tipo de licencia a la hora de añadir el producto a la cesta de la compra, como se aprecia en la captura de pantalla adjunta.&lt;br /&gt;
&lt;br /&gt;
Una vez finalizado el proceso de compra o registro (en caso de ser versión de evaluación), podremos descargar un archivo de fórmula (con extensión .rff) e instalarlo en Radarc usando la opción disponible en el cuadro de diálogo.&lt;br /&gt;
&lt;br /&gt;
Hecho esto, podemos seleccionar la fórmula en el cuadro de diálogo y continuar con la creación de nuestra aplicación. &lt;br /&gt;
&lt;blockquote&gt;
&lt;strong&gt;Nota&lt;/strong&gt;: &lt;em&gt;en este artículo vamos a continuar estudiando la fórmula MVC4, en cuyo desarrollo he participado, aunque conceptualmente el proceso y características son similares al resto de fórmulas.&lt;/em&gt;&lt;/blockquote&gt;
Justamente después, Radarc solicitará alguna información básica sobre la aplicación que deseamos generar, como el espacio de nombres por defecto, la denominación de la aplicación, información sobre la conexión al servidor de base de datos, e incluso podremos seleccionar el estilo visual (básicamente el juego de colores) a emplear:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="Configuración de la solución" border="0" height="335" src="http://lh6.ggpht.com/-kAR36LFe-zg/UWqOSNATOKI/AAAAAAAAC0g/ZrTdpR5Rvxo/image61.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Configuración de la solución" width="497" /&gt;&lt;br /&gt;
&lt;br /&gt;
Una vez completado el formulario, cuyos valores por defecto son correctos para hacer pruebas rápidas, basta con pulsar el botón Deploy, y Radarc comenzará a crear la estructura básica de nuestro proyecto. Tras esperar unos segundos tendremos el esqueleto del sistema creado, aunque aún no será de utilidad porque todavía no hemos indicado información sobre el dominio.&lt;br /&gt;
&lt;img align="right" alt="Solución Radarc con fórmula MVC 4" border="0" height="256" src="http://lh5.ggpht.com/-8sf_0mXhvyA/UWqOS_mHXiI/AAAAAAAAC0o/Eh_FTK7KdeI/image67.png?imgmax=800" style="background-image: none; border-width: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Solución Radarc con fórmula MVC 4" width="258" /&gt;&lt;br /&gt;
&lt;br /&gt;
Tras ese primer despliegue, la solución que encontramos en Visual Studio consta de cinco proyectos, prácticamente vacíos hasta que comencemos a definir el modelo, y que aparecen en el interior de carpetas de solución según las capas lógicas en las que se definen:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DomainModeling&lt;/strong&gt;, que guardará el modelo del dominio que describe la aplicación. No contendrá código ejecutable ni compilable, sólo lo usaremos para la definición conceptual del dominio. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mvc&lt;/strong&gt;, que es la implementación en ASP.NET MVC de la capa de presentación del sistema. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Services&lt;/strong&gt;, que contendrá todos los componentes propios de la capa de servicios (o aplicación, en este caso). &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Services.Tests&lt;/strong&gt;, donde encontraremos pruebas unitarias, también generadas, de los componentes de servicio. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entities&lt;/strong&gt;, donde se definirán las entidades y mecanismos de persistencia del sistema. &lt;/li&gt;
&lt;/ul&gt;
El siguiente paso será definir el dominio de nuestra aplicación&lt;br /&gt;
&lt;h3&gt;
2. Definición del modelo y generación de aplicación&lt;/h3&gt;
Radarc utiliza un &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;DSL&lt;/a&gt; (Domain Specific Language) para la definición de las entidades, relaciones entre ellas, e indicar metadatos de interés para reflejar el dominio de la aplicación. Para facilitar su uso y simplificar su adopción, la versión actual de Radarc utiliza para ello el mismo &lt;strong&gt;diseñador de modelos de Entity Framework&lt;/strong&gt;(archivos .EDMX); en el futuro está previsto sustituirlo por otro más potente y que permita mayor expresividad a la hora de plasmar el modelo.&lt;br /&gt;
&lt;br /&gt;
De esta forma, la definición del dominio la haremos con el editor de modelos conceptuales de Entity Framework, a base de arrastrar y soltar, y editar valores en la caja de propiedades. Algo realmente sencillo si ya habéis trabajado con EF en modo database-first o model-first. Es importante en cualquier caso tener en cuenta que el EDMX será usado &lt;strong&gt;exclusivamente como DSL para definir el modelo&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
El modelo a partir del cual será generada la aplicación se encuentra en el proyecto DomainModeling, carpeta Models. Radarc tomará de aquí el archivo .EDMX que haya (no importa el nombre), analizará el modelo y generará el código de la aplicación, como veremos más adelante. De momento, para continuar describiendo el proceso, lo haremos con el siguiente modelo, donde indicamos que nuestra aplicación gestionará &lt;strong&gt;amigos&lt;/strong&gt;, éstos viven en una &lt;strong&gt;ciudad&lt;/strong&gt; determinada, y pueden estar clasificados con múltiples &lt;strong&gt;etiquetas&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="Modelo conceptual" border="0" height="208" src="http://lh3.ggpht.com/-e5tZbKSReIY/UWqOT2M9UrI/AAAAAAAAC0w/4fO-c_GJwQs/image73.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Modelo conceptual" width="597" /&gt;&lt;br /&gt;
Por supuesto, además, de las entidades y relaciones podemos indicar información extra sobre las propiedades, como su obligatoriedad o tamaño (en el caso de tratarse de textos). Observad que en el modelo he incluido cardinalidades 1..* y *..* entre las entidades, para que veáis el tratamiento que da Radarc a las mismas.&lt;br /&gt;
&lt;br /&gt;
Hecho esto, estamos ya en disposición de &lt;strong&gt;generar nuestra aplicación&lt;/strong&gt;, proceso que podemos iniciar desde el menú principal de Visual Studio, o bien desde el panel Radarc, mostrado en la siguiente imagen, al que podremos acceder haciendo clic sobre la opción “Radarc” en el mismo menú.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="Panel Radarc" border="0" height="335" src="http://lh3.ggpht.com/-ZtbqXm8bTxU/UWqOUqkujWI/AAAAAAAAC04/Mtep3ak--jc/image76.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Panel Radarc" width="562" /&gt;&lt;br /&gt;
Desde este punto podríamos seleccionar qué elementos deseamos incluir en la generación de código, e incluso si queremos generar artefactos concretos. Dejándolo todo seleccionado, pulsamos “Generate” y la herramienta comenzará a analizar el modelo y aplicar las plantillas de la fórmula elegida, en este caso MVC 4, para crear en cada uno de los proyectos de la solución los componentes necesarios. Tras esperar unos segundos, tendremos nuestra aplicación lista… y si pulsamos F5 directamente, ¡hasta funciona! :-)&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="Aplicación en funcionamiento" border="0" height="527" src="http://lh5.ggpht.com/-6zeZLM_MiQQ/UWqOVYyNLfI/AAAAAAAAC1A/SqJCKVNyXu8/image41.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Aplicación en funcionamiento" width="683" /&gt;&lt;br /&gt;
&lt;h3&gt;
3. El resultado&lt;/h3&gt;
Desde el &lt;strong&gt;punto de vista funcional&lt;/strong&gt;, Radarc habrá generado una completa aplicación desde la que podremos gestionar todas las entidades definidas en el modelo, es decir, mantenimientos completos (consulta, altas, edición, eliminación) de las entidades teniendo en cuenta las particularidades de sus propiedades, y las relaciones entre ellas.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestran algunas capturas de pantalla que muestran la interpretación que ha hecho Radarc del modelo y cómo lo ha plasmado a nivel de aplicación.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Pantalla de gestión de ciudades:&lt;/strong&gt;&lt;br /&gt;
&lt;img alt="Pantalla de gestión de ciudades" border="0" height="479" src="http://lh6.ggpht.com/-D8HCvxeTEyI/UWqOWQZ-65I/AAAAAAAAC1I/Jw49J6_m0UM/image46.png?imgmax=800" style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Pantalla de gestión de ciudades" width="600" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Edición de amigo:&lt;/strong&gt;&lt;br /&gt;
&lt;img alt="Edición de amigo" border="0" height="517" src="http://lh5.ggpht.com/-M2HPT4lD2qQ/UWqOXNimJ-I/AAAAAAAAC1Q/B7j2238K1E4/image45.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Edición de amigo" width="600" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Asignación de etiquetas a amigo:&lt;/strong&gt;&lt;br /&gt;
&lt;img alt="Asignación de etiquetas a amigo:" border="0" height="517" src="http://lh6.ggpht.com/-Sk3FGl5XFFE/UWqOYGy39OI/AAAAAAAAC1Y/V2stcc6nvc8/image39.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Asignación de etiquetas a amigo:" width="600" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Edición de etiquetas y asignación de amigos&lt;/strong&gt; (ahora en inglés, la aplicación generada es multi-idioma!):&lt;br /&gt;
&lt;img alt="Edición de etiquetas y asignación de amigos" border="0" height="491" src="http://lh4.ggpht.com/-XJXkLyVa9fg/UWqOZBk5F7I/AAAAAAAAC1g/yjiYEN0ZdPg/image38.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Edición de etiquetas y asignación de amigos" width="600" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Edición de ciudades y asignación de nuevo amigo&lt;/strong&gt;:&lt;br /&gt;
&lt;img alt="Edición de ciudades y asignación de nuevo amigo" border="0" height="491" src="http://lh3.ggpht.com/-MpS-CdIZVBY/UWqOaNC85vI/AAAAAAAAC1o/kAEaFaelirY/image37.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Edición de ciudades y asignación de nuevo amigo" width="600" /&gt;&lt;br /&gt;
&lt;br /&gt;
Y, por supuesto, también podemos ejecutar los tests generados en la solución y comprobar que todo funciona correctamente:&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="Ejecución de Test" border="0" height="280" src="http://lh5.ggpht.com/-ic-frYm_S4U/UWqObDJOGDI/AAAAAAAAC1w/AJeyM7BBkOM/image81.png?imgmax=800" title="Ejecución de Test" width="611" /&gt;&lt;br /&gt;
&lt;br /&gt;
Si examinamos el proyecto generado, podremos observar que &lt;strong&gt;por cada una de las entidades&lt;/strong&gt; definidas en el modelo, Radarc ha creado resumidamente:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;En el proyecto Entities, un &lt;strong&gt;contexto de datos&lt;/strong&gt; de EF 5.0 dando acceso a las &lt;strong&gt;colecciones de datos&lt;/strong&gt; (DbSet), así como las correspondientes &lt;strong&gt;clases POCO&lt;/strong&gt; para las entidades y sus mapeos al mundo relacional. &lt;/li&gt;
&lt;li&gt;En el proyecto Services, una &lt;strong&gt;clase de servicios&lt;/strong&gt; (y su interfaz) con las principales operaciones a realizar sobre las entidades (creación, eliminación, búsqueda, etc.). &lt;/li&gt;
&lt;li&gt;En el proyecto Services.Tests las &lt;strong&gt;pruebas de integración&lt;/strong&gt; correspondientes a las operaciones definidas anteriormente. &lt;/li&gt;
&lt;li&gt;En el proyecto Mvc,      &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Controladores&lt;/strong&gt; con las operaciones disponibles desde el interfaz de usuario para cada entidad. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vistas&lt;/strong&gt; para cada una de estas operaciones. &lt;/li&gt;
&lt;li&gt;Clases &lt;strong&gt;view model&lt;/strong&gt; para estas vistas. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mapeos&lt;/strong&gt; entre view models y entidades del modelo, usando Automapper. &lt;/li&gt;
&lt;li&gt;Componentes de registro en el &lt;strong&gt;contenedor IoC&lt;/strong&gt; Unity. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
Para facilitar la propia evolución del software, el fuente generado incluye múltiples &lt;strong&gt;puntos de extensión&lt;/strong&gt; que posibilitan la introducción de código personalizado sin riesgo de que sea sobrescrito si por cualquier causa queremos regenerar el proyecto usando de nuevo la operativa descrita anteriormente.&lt;br /&gt;
&lt;br /&gt;
Lo mejor que os puedo recomendar para que os hagáis una idea del potencial de esta herramienta es que la descarguéis y probéis en vuestro entorno, y podáis ver en qué punto de vuestro proceso de desarrollo podría encajar. Cread vuestro propio modelo, generad la aplicación, probadlo, e intentar calcular mentalmente cuánto tiempo os habría costado desarrollar algo similar de forma manual ;-)&lt;br /&gt;
&lt;br /&gt;
Pero ojo, no penséis que Radarc es la panacea y va a solucionar todos vuestros problemas para siempre. Como todas las herramientas del mundo, tiene sus ámbitos de aplicación en los cuales es más útil, como entornos empresariales donde existe mucho &lt;strong&gt;código repetitivo&lt;/strong&gt; (por ejemplo, aplicaciones con cientos de &lt;strong&gt;mantenimientos de datos&lt;/strong&gt; o arquitecturas pesadas que obligan a mantener &lt;strong&gt;muchos archivos&lt;/strong&gt; con convenciones y patrones claros de estructura, nombrado y ubicación). También puede ser interesante desde el punto de vista de la &lt;strong&gt;formación&lt;/strong&gt;, pues el código generado muestra arquitecturas y buenas prácticas que pueden resultar enriquecedoras para aquellos que se están iniciando en una tecnología. Y desde luego, para crear &lt;strong&gt;prototipos rápidos&lt;/strong&gt; no tiene precio ;-)&lt;br /&gt;
&lt;h3&gt;
4. Vale, todo esto está muy bien, pero yo lo que quiero es mi licencia para probarlo con fundamento… ;-)&lt;/h3&gt;
Bueno, en realidad para probarlo podría bastar con la licencia de evaluación ;-), pero aún así, como adelanté al principio del post, &lt;span style="background-color: yellow;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;Icinetic ofrece 5 licencias premium de fórmulas Radarc&lt;/strong&gt;, valoradas en 400$ cada una&lt;span style="background-color: yellow;"&gt;&lt;/span&gt;,&lt;span style="background-color: white;"&gt; &lt;/span&gt;para sortear entre todos los lectores que &lt;strong&gt;durante los próximos siete días&lt;/strong&gt; manifiesten su interés en conseguirla a través de un &lt;span style="background-color: white;"&gt;comentario en este post&lt;/span&gt;, el &lt;a href="http://www.variablenotfound.com/p/formulario-de-contacto.html"&gt;formulario de contacto&lt;/a&gt;, &lt;a href="https://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;, &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, señales de humo, o como sea ;-) &lt;br /&gt;
&lt;br /&gt;
Simplemente decid en &lt;strong&gt;qué fórmula Radarc estaríais interesados&lt;/strong&gt; y dadme &lt;strong&gt;alguna&lt;/strong&gt; &lt;strong&gt;forma de contactaros&lt;/strong&gt; si sois los afortunados (aviso: no pongáis el mail en claro en un comentario, que luego os fríen a spam y me echáis la culpa; en ese caso, mejor podéis usar algo creativo pero legible como “soy manolito en h0tmail punt0 c0m” ;-))&lt;br /&gt;
&lt;br /&gt;
¡Rápido, que vuelan!&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=UPAch93nrJ0:Mp4vDF8UKbE:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=UPAch93nrJ0:Mp4vDF8UKbE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=UPAch93nrJ0:Mp4vDF8UKbE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=UPAch93nrJ0:Mp4vDF8UKbE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=UPAch93nrJ0:Mp4vDF8UKbE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=UPAch93nrJ0:Mp4vDF8UKbE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=UPAch93nrJ0:Mp4vDF8UKbE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=UPAch93nrJ0:Mp4vDF8UKbE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=UPAch93nrJ0:Mp4vDF8UKbE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=UPAch93nrJ0:Mp4vDF8UKbE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/UPAch93nrJ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/4308189486504722613/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=4308189486504722613" title="32 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/4308189486504722613?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/4308189486504722613?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/UPAch93nrJ0/generacion-de-aplicaciones-mvc-4-con.html" title="Generación de aplicaciones MVC 4 con Radarc (¡y sorteo de licencias!)" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-XmmtgukJw9M/UWqON1vKzZI/AAAAAAAACz4/ekQLcAmPLJU/s72-c/image4.png?imgmax=800" height="72" width="72" /><thr:total>32</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/generacion-de-aplicaciones-mvc-4-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4EQXk5fSp7ImA9WhBVFkw.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-6605072327421338277</id><published>2013-04-22T09:15:00.000+02:00</published><updated>2013-04-22T09:15:00.725+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-22T09:15:00.725+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 114</title><content type="html">&lt;img align="right" alt="image23424233333333" border="0" height="129" src="http://lh3.ggpht.com/-Aq3xgrAzKoA/UXQKOLZGsdI/AAAAAAAAC2E/KJGDNFqWFv0/image234242333333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image23424233333333" width="172" /&gt;Estos son los enlaces recopilados del 15 al 19 de abril de 2013. Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Eventos&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/es-es/eventos_msdn.aspx"&gt;Office Application Challenge&lt;/a&gt; (Valencia, Madrid, Barcelona)       &lt;br /&gt;26 y 27 de abril de 2013 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://globalwindowsazure.azurewebsites.net/"&gt;Global Windows Azure Bootcamp&lt;/a&gt;       &lt;br /&gt;27 de abril de 2013 &lt;/li&gt;
&lt;li&gt;&lt;a href="http://javiersuarezruiz.wordpress.com/2013/04/17/resumen-megathon-sevilla-2013/"&gt;Resumen Megathon Sevilla 2013&lt;/a&gt;       &lt;br /&gt;Javier Suárez Ruiz&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/ricardoperes/archive/2013/04/18/unity-part-2-dependency-injection.aspx"&gt;Unity – Part 2: Dependency Injection&lt;/a&gt;       &lt;br /&gt;Ricardo Peres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/etomas/archive/2013/04/15/objective-c-para-desarrolladores-de-c-ii-punteros.aspx"&gt;Objective-C para desarrolladores de C# (ii)–Punteros&lt;/a&gt;       &lt;br /&gt;Eduard Tomás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tech.pro/tutorial/1172/an-advanced-introduction-to-c"&gt;An advanced introduction to C#&lt;/a&gt;       &lt;br /&gt;Florian Rappl &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/503527/Reflection-optimization-techniques"&gt;Reflection optimization techniques&lt;/a&gt;       &lt;br /&gt;Jain, Ajay &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/579137/Division-By-Zero-Doesnt-Always-Raise-An-Exception"&gt;Division By Zero Doesn't Always Raise An Exception&lt;/a&gt;       &lt;br /&gt;Amogh Natu &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/04/tipos-fantasmas-en-c/"&gt;Tipos fantasmas en C#&lt;/a&gt;       &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/04/asp-net-web-api-parameter-binding-part-1-understanding-binding-from-uri/" title="Permalink to ASP.NET Web API parameter binding part 1 – Understanding binding from URI"&gt;ASP.NET Web API parameter binding part 1 – Understanding binding from URI&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Filip Woj &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter"&gt;A WebAPI Basic Authentication Authorization Filter&lt;/a&gt;       &lt;br /&gt;Rick Strahl &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/yaohuang1/archive/2013/04/05/try-out-asp.net-web-api-cors-support-using-the-nightly-builds.aspx"&gt;Try out ASP.NET Web API CORS support using the nightly builds&lt;/a&gt;       &lt;br /&gt;Yao &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.simple-talk.com/dotnet/asp.net/asp.net-mvc-annotated-for-input/"&gt;ASP.NET MVC: Annotated for Input&lt;/a&gt;       &lt;br /&gt;Dino Esposito &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/signalr/overview/getting-started/tutorial-high-frequency-realtime-with-signalr"&gt;High-Frequency Realtime with SignalR&lt;/a&gt;       &lt;br /&gt;Patrick Fletcher &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mathieu.fenniak.net/the-api-checklist/"&gt;The Web API Checklist — 43 Things To Think About When Designing, Testing, and Releasing your API&lt;/a&gt;       &lt;br /&gt;Mathieu Fenniak &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/576514/AplusBeginner-27splusTutorialplusonplusVariousplus"&gt;A Beginner's Tutorial on Various Ways of Passing Data in ASP.NET MVC Application&lt;/a&gt;       &lt;br /&gt;Rahul Rajat Singh &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geekswithblogs.net/nuri/archive/2013/04/11/mvc-model-state-validationndashdry-to-the-rescue.aspx"&gt;MVC Model State Validation–DRY to the rescue!&lt;/a&gt;       &lt;br /&gt;Nuri Halperin &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2013/04/16/windows-azure-general-availability-of-infrastructure-as-a-service-iaas.aspx"&gt;Windows Azure: General Availability of Infrastructure as a Service (IaaS)&lt;/a&gt;       &lt;br /&gt;Scott Guthrie &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/579593/How-to-find-the-top-most-expensive-cached-queries"&gt;How to find the top most expensive cached queries&lt;/a&gt;       &lt;br /&gt;Rohit Garg &lt;/li&gt;
&lt;li&gt;&lt;a href="http://panicoenlaxbox.blogspot.com.es/2013/04/romper-el-hielo-con-ef-code-first.html"&gt;Rompiendo el hielo con EF Code First&lt;/a&gt;       &lt;br /&gt;Sergio León&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jasoft.org/Blog/post/jQuery-20-ya-esta-disponible-pero-no-corras-a-descargarlo-todavia.aspx" title="jQuery 2.0 ya está disponible… pero no corras a descargarlo todavía"&gt;jQuery 2.0 ya está disponible… pero no corras a descargarlo todavía&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/etomas/archive/2013/04/19/html5-que-tus-usuarios-suban-su-foto-a-su-perfil-webrtc.aspx"&gt;HTML5 - Que tus usuarios suban su foto a su perfil (WebRTC)&lt;/a&gt;       &lt;br /&gt;Eduard Tomás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.jquery.com/2013/04/18/jquery-2-0-released/"&gt;jQuery 2.0 Released&lt;/a&gt;       &lt;br /&gt;Dave Methvin &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jasoft.org/Blog/post/Tu-estilo-gana-a-mi-estilo-Especificidad-en-reglas-CSS.aspx" title="Tu estilo gana a mi estilo- Especificidad en reglas CSS"&gt;Tu estilo gana a mi estilo- Especificidad en reglas CSS&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://henriquat.re/basics-of-angular/services-dependency-injection/services-and-dependency-injection-in-angularjs.html"&gt;Services and Dependency Injection in AngularJS&lt;/a&gt;       &lt;br /&gt;Ingo Rammer &amp;amp; Christian Weyer &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/04/trazar-la-carga-de-modulos-en-requirejs/"&gt;Trazar la carga de módulos en RequireJS&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/578827/Generate-Knockout-Viewmodels-using-T4-templates"&gt;Generate Knockout Viewmodels using T4 templates&lt;/a&gt;       &lt;br /&gt;Xavier Spileers &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.elavefenix.net/ejemplos/CSS3/starwars/GuerraEstandares.html"&gt;La guerra de los estándares&lt;/a&gt;       &lt;br /&gt;Marino Posadas &lt;/li&gt;
&lt;li&gt;&lt;a href="http://coding.smashingmagazine.com/2013/04/12/css-generated-content-counters/"&gt;How To Benefit From CSS Generated Content And Counters&lt;/a&gt;       &lt;br /&gt;Gabriele Romanato &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jquery4u.com/testing/jquery-speed-test-this-attrid-this-id/"&gt;jQuery Speed Test: $(this).attr(“id”); vs this.id&lt;/a&gt;       &lt;br /&gt;Sam Deering &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jasoft.org/Blog/post/Zen-Coding-escribiendo-HTML-a-la-velocidad-de-la-luz.aspx"&gt;Zen-Coding: escribiendo HTML a la velocidad de la luz&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/04/string-format-en-javascript/"&gt;String.Format en JavaScript&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2013/04/12/typescript-jquery-and-the-this-context-causing-issues.aspx"&gt;Typescript, jQuery and the ‘this’ context causing issues&lt;/a&gt;       &lt;br /&gt;Derik Whittaker &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.johnpapa.net/spajs04/"&gt;What Breeze can do for You&lt;/a&gt;       &lt;br /&gt;John Papa &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.getglimpse.com/2013/04/17/glimpse-1-3-released-with-a-new-glimpse-axd-page-n1/"&gt;Glimpse 1.3 released with a new glimpse.axd page &amp;amp; N+1 detection&lt;/a&gt;       &lt;br /&gt;Anthony van der Hoorn &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/2013/04/resharper-713-is-available-for-visual-studio-2012-update-2/"&gt;ReSharper 7.1.3 is Available for Visual Studio 2012 Update 2&lt;/a&gt;       &lt;br /&gt;Jura Gorohovsky &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://asiermarques.com/2013/lo-que-le-diria-a-mi-yo-del-pasado/"&gt;Lo que le diría a mi yo del pasado&lt;/a&gt;       &lt;br /&gt;Asier Marqués &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que normalmente podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=vuEP6EznDPQ:4QW0t8Gvlr4:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=vuEP6EznDPQ:4QW0t8Gvlr4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=vuEP6EznDPQ:4QW0t8Gvlr4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=vuEP6EznDPQ:4QW0t8Gvlr4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=vuEP6EznDPQ:4QW0t8Gvlr4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=vuEP6EznDPQ:4QW0t8Gvlr4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=vuEP6EznDPQ:4QW0t8Gvlr4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=vuEP6EznDPQ:4QW0t8Gvlr4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=vuEP6EznDPQ:4QW0t8Gvlr4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=vuEP6EznDPQ:4QW0t8Gvlr4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/vuEP6EznDPQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/6605072327421338277/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=6605072327421338277" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6605072327421338277?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6605072327421338277?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/vuEP6EznDPQ/enlaces-interesantes-114.html" title="Enlaces interesantes 114" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-Aq3xgrAzKoA/UXQKOLZGsdI/AAAAAAAAC2E/KJGDNFqWFv0/s72-c/image234242333333333.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/enlaces-interesantes-114.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIEQX44eip7ImA9WhBVEEQ.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-1170987217330767006</id><published>2013-04-16T09:15:00.000+02:00</published><updated>2013-04-16T09:15:00.032+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-16T09:15:00.032+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="recomendaciones" /><category scheme="http://www.blogger.com/atom/ns#" term="chuletas" /><category scheme="http://www.blogger.com/atom/ns#" term="webapi" /><title>Ciclo de vida de una petición WebAPI (póster)</title><content type="html">Muchos ya sabréis que hace unos meses publicaron desde Microsoft un póster que describe muy detalladamente el ciclo de vida de una petición en ASP.NET Web API. En su momento lo referencié desde &lt;a href="http://www.variablenotfound.com/2013/02/enlaces-interesantes-105.html"&gt;una entrada de la serie enlaces interesantes&lt;/a&gt;, pero últimamente he podido comprobar que aún no es lo suficientemente conocido, y desde luego bien vale la pena dedicarle un post en exclusiva.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-iau2_to6Wpc/UVA9wjm-YiI/AAAAAAAACys/4hjFlu9FHA4/s1600-h/image%25255B4%25255D.png"&gt;&lt;img alt="ASP.NET Web API message lifecycle" border="0" height="688" src="http://lh4.ggpht.com/-GcMzP96uc40/UVA93vbZuVI/AAAAAAAACy0/d9zPBSKd7nU/image_thumb.png?imgmax=800" style="background-image: none; border-width: 0px; display: block; float: none; margin: 0px auto 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="ASP.NET Web API message lifecycle" width="579" /&gt;&lt;/a&gt;&lt;br /&gt;
Se trata de un documento fundamental para comprender qué es lo que ocurre desde que llega al servidor una petición a un servicio Web API hasta que la respuesta es enviada de vuelta al cliente. En él encontraréis reflejados aspectos tan interesantes como la ubicación de los delegating handlers en el pipeline, la creación de controladores, selección de acciones, filtros de acción, binding, media type formatters, y otros muchos, conociendo qué puntos del framework son extensibles por diseño.&lt;br /&gt;
&lt;br /&gt;
Desde el sitio de descargas de Microsoft podéis &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=36476"&gt;obtenerlo en formato PDF&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Realmente imprescindible.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=AHZDs9tjIC0:I1ojZjBb3M4:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=AHZDs9tjIC0:I1ojZjBb3M4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=AHZDs9tjIC0:I1ojZjBb3M4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=AHZDs9tjIC0:I1ojZjBb3M4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=AHZDs9tjIC0:I1ojZjBb3M4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=AHZDs9tjIC0:I1ojZjBb3M4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=AHZDs9tjIC0:I1ojZjBb3M4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=AHZDs9tjIC0:I1ojZjBb3M4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=AHZDs9tjIC0:I1ojZjBb3M4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=AHZDs9tjIC0:I1ojZjBb3M4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/AHZDs9tjIC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/1170987217330767006/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=1170987217330767006" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1170987217330767006?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1170987217330767006?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/AHZDs9tjIC0/ciclo-de-vida-de-una-peticion-webapi.html" title="Ciclo de vida de una petición WebAPI (póster)" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-GcMzP96uc40/UVA93vbZuVI/AAAAAAAACy0/d9zPBSKd7nU/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/ciclo-de-vida-de-una-peticion-webapi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04DQX0yeCp7ImA9WhBVEEw.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-1231290647204745638</id><published>2013-04-15T09:32:00.000+02:00</published><updated>2013-04-15T11:59:30.390+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-15T11:59:30.390+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 113</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh3.ggpht.com/-u44AiAOe1mk/UWqLruCmQbI/AAAAAAAACzo/e6hm084x-ls/image23424233333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces publicados en &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt; y &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt; del 8 al 12 de abril de 2013. &lt;br /&gt;
&lt;br /&gt;
Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.diaryofaninja.com/blog/2013/04/10/make-testing-the-untestable-easy-with-visual-studio-2012-update-2-and-the-microsoft-fakes-framework"&gt;Testing the Untestable with Microsoft Fakes and Visual Studio 2012 Update 2&lt;/a&gt;      &lt;br /&gt;Doug Rathbone&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.anderson.geek.nz/2013/02/26/sorting-a-scriptbundle-based-on-reference-tags/"&gt;Sorting a ScriptBundle based on /// &amp;lt;reference /&amp;gt; tags&lt;/a&gt;      &lt;br /&gt;Shane S. Anderson&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SignalR/SignalR/blob/master/ReleaseNotes.md#110beta"&gt;SignalR 1.1 beta release notes&lt;/a&gt;      &lt;br /&gt;SignalR team&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/davidfowler/archive/2013/04/11/signalr-1-1-beta.aspx"&gt;SignalR 1.1 beta&lt;/a&gt;      &lt;br /&gt;David Fowler&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/576315/LocalizeplusyourplusMVCplusappplusbasedplusonplusa"&gt;Localize your MVC app based on a subdomain&lt;/a&gt;      &lt;br /&gt;Pollirrata&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/576989/Sharing-ASP-NET-Web-Applications-Session-State"&gt;Sharing ASP.NET Web Applications Session State&lt;/a&gt;      &lt;br /&gt;Hossein Shahpouri&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/ricardoperes/archive/2013/04/11/asp-net-web-forms-extensibility-handlers.aspx"&gt;ASP.NET Web Forms Extensibility: Handlers&lt;/a&gt;      &lt;br /&gt;Ricardo Peres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/576367/Runtime-customizable-model-attributes-in-ASP-NET-M"&gt;Runtime customizable model attributes in ASP.NET MVC3&lt;/a&gt;      &lt;br /&gt;Pollirata &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/owscott/archive/2013/04/06/why-is-the-iis-default-app-pool-recycle-set-to-1740-minutes.aspx"&gt;Why is the IIS default app pool recycle set to 1740 minutes?&lt;/a&gt;      &lt;br /&gt;Scott Forsyth &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/04/08/webapi-tip-8-working-with-tasks.aspx"&gt;WebAPI Tip #8: Working with Tasks&lt;/a&gt;      &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.piotrwalat.net/using-redis-with-asp-net-web-api/"&gt;Using Redis with ASP.NET Web API&lt;/a&gt;      &lt;br /&gt;Piotr Walat &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/574576/How-to-implement-a-custom-IPrincipal-in-ASP-NET-MV"&gt;How to implement a custom IPrincipal in ASP.NET MVC 4 internet project&lt;/a&gt;      &lt;br /&gt;Audungca &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2013/04/12/using-async-await-with-windows-azure-service-bus-client-sdk.aspx"&gt;Using async/await with Windows Azure Service Bus Client SDK&lt;/a&gt;      &lt;br /&gt;Shiju Varghese&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bigcompany/know-your-http"&gt;Know your HTTP&lt;/a&gt; – Series of PDF posters about the HTTP protocol      &lt;br /&gt;Jesus Abdullah&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.matthewjmiller.net/files/cc2e_checklists.pdf"&gt;Code complete checklist&lt;/a&gt;      &lt;br /&gt;Steven C. McConnell&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/" title="Permalink to Taming The Unicorn- Easing JavaScript Memory Profiling In Chrome DevTools"&gt;Taming The Unicorn- Easing JavaScript Memory Profiling In Chrome DevTools&lt;/a&gt;      &lt;br /&gt;Addy Osmani&lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/can-you-over-organize-javascript/"&gt;Can You “Over Organize” JavaScript?&lt;/a&gt;      &lt;br /&gt;Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.elijahmanor.com/2013/04/angry-birds-of-javascript-big-brother.html"&gt;Angry Birds of JavaScript: Big Brother Bird - Patterns&lt;/a&gt;      &lt;br /&gt;Elijah Manor &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sitepoint.com/get-loaded-with-the-file-api"&gt;Get Loaded with the File API&lt;/a&gt;      &lt;br /&gt;Andrew Dodson &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jayway.com/2013/04/07/javascript-conditionals/"&gt;Javascript Conditionals&lt;/a&gt;      &lt;br /&gt;Anders Janmyr &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.infragistics.com/community/blogs/anarain/archive/2013/04/05/understanding-html5-input-types.aspx"&gt;Deep dive into HTML5 Input types&lt;/a&gt;      &lt;br /&gt;Abhishek Narain &lt;/li&gt;
&lt;li&gt;&lt;a href="http://coding.smashingmagazine.com/2013/04/09/javascript-plugin-for-responsive-navigation/"&gt;Responsive Nav: A Simple JavaScript Plugin For Responsive Navigation&lt;/a&gt;      &lt;br /&gt;Viljami Salminen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/04/app-cache-y-los-navegadores/"&gt;App cache y los navegadores&lt;/a&gt;      &lt;br /&gt;Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.elijahmanor.com/2013/04/angry-birds-of-javascript-orange-bird.html"&gt;Angry Birds of JavaScript: Orange Bird - Templating&lt;/a&gt;      &lt;br /&gt;Elijah Manor &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/572466/How-to-print-a-particular-portion-of-a-webpage"&gt;How to print a particular portion of a webpage?&lt;/a&gt;      &lt;br /&gt;Himanshu Manjarawala &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/04/html-5-application-cache-aplicaciones-offline/"&gt;HTML 5 Application Cache: Aplicaciones Offline&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;li&gt;&lt;strike&gt;jQuery Best Practices&lt;/strike&gt;&amp;nbsp;&lt;span style="background-color: yellow;"&gt;(artículo eliminado del sitio web. Gracias, Ramón :-))&lt;/span&gt;&lt;br /&gt;&lt;strike&gt;S.Kaur&lt;/strike&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/04/lo-mejor-de-javascript/"&gt;Lo mejor de Javascript&lt;/a&gt;      &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jasoft.org/Blog/post/Deja-vu-Blink-es-IE56-y-Google-es-la-nueva-Microsoft.aspx"&gt;Déjà vu: Blink es IE5/6 y Google es la nueva Microsoft&lt;/a&gt;      &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=1tVOFp03IHM:XHjGAFsSAvw:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=1tVOFp03IHM:XHjGAFsSAvw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=1tVOFp03IHM:XHjGAFsSAvw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=1tVOFp03IHM:XHjGAFsSAvw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=1tVOFp03IHM:XHjGAFsSAvw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=1tVOFp03IHM:XHjGAFsSAvw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=1tVOFp03IHM:XHjGAFsSAvw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=1tVOFp03IHM:XHjGAFsSAvw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=1tVOFp03IHM:XHjGAFsSAvw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=1tVOFp03IHM:XHjGAFsSAvw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/1tVOFp03IHM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/1231290647204745638/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=1231290647204745638" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1231290647204745638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1231290647204745638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/1tVOFp03IHM/enlaces-interesantes-113.html" title="Enlaces interesantes 113" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-u44AiAOe1mk/UWqLruCmQbI/AAAAAAAACzo/e6hm084x-ls/s72-c/image23424233333333.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/enlaces-interesantes-113.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AEQXw-cCp7ImA9WhBWFEQ.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-9018097306813659118</id><published>2013-04-09T09:15:00.000+02:00</published><updated>2013-04-09T09:15:00.258+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-09T09:15:00.258+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo" /><category scheme="http://www.blogger.com/atom/ns#" term="trucos" /><category scheme="http://www.blogger.com/atom/ns#" term="signalr" /><title>Control de acceso a Hubs SignalR</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://lh3.ggpht.com/-6VP_ESr8gDo/URqW6gE2npI/AAAAAAAACqo/7ARPvPSN9-o/image2%25255B3%25255D.png?imgmax=800" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img align="right" alt="SignalR" border="0" height="121" src="http://lh3.ggpht.com/-6VP_ESr8gDo/URqW6gE2npI/AAAAAAAACqo/7ARPvPSN9-o/image2%25255B3%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; margin-top: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SignalR" width="91" /&gt;&lt;/a&gt;&lt;/div&gt;
SignalR permite controlar el acceso a los métodos del interior los Hubs de una forma muy similar a como hacemos en ASP.NET MVC o WebAPI. &lt;br /&gt;
&lt;br /&gt;
Y cuando digo muy similar no estoy exagerando en absoluto, como podéis observar en el siguiente código:&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;[Authorize]
public class AlertService : Hub
{
    public void Alert(string msg)
    {
        this.Clients.All.showAlert(msg);
    }
}&lt;/pre&gt;
&lt;img align="right" alt="image" border="0" height="233" src="http://lh6.ggpht.com/-VHP203PKGMk/URqW7QYaqNI/AAAAAAAACqw/rcJ7TFoMT5s/image%25255B2%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="293" /&gt;Pues sí, también tenemos disponible aquí el atributo &lt;code&gt;[Authorize]&lt;/code&gt;. O mejor dicho, &lt;strong&gt;otro atributo &lt;code&gt;[Authorize]&lt;/code&gt;&lt;/strong&gt;. Cuidado con esto, porque en un proyecto MVC4 con WebAPI y SignalR tendremos a nuestra disposición tres atributos con el mismo nombre, y si seleccionamos el namespace incorrecto será ignorado por completo, dejando libre el acceso al recurso que se intenta proteger. &lt;br /&gt;
&lt;br /&gt;
¿Recordáis el famoso &lt;em&gt;infierno de las DLL&lt;/em&gt; de antaño? Pues no va a ser nada comparado con el &lt;em&gt;namespace hell&lt;/em&gt; que se está cociendo ;-D&lt;br /&gt;
&lt;br /&gt;
Bueno, la cuestión es que aplicando este atributo a un Hub de la forma mostrada anteriormente impediremos el acceso a sus métodos a clientes que no hayan sido autenticados en el sistema. Si únicamente queremos efectuar este control en métodos concretos, bastará con decorarlos con &lt;code&gt;[Authorize]&lt;/code&gt; de forma individualizada:&lt;br /&gt;
&lt;pre class="brush: xml; highlight: [3];"&gt;public class AlertService: Hub
{
    [Authorize]
    public void Alert(string msg)
    {
        this.Clients.All.showAlert(msg);
    }

    // Other hub methods
}&lt;/pre&gt;
A la hora de introducir el atributo podemos ser aún más explícitos. Así, es posible permitir el acceso a un Hub o método a uno o varios usuarios separando su nombre por comas:&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;[Authorize(Users="fmercury,mjackson,fsinatra")]
public void Sing(string msg)
{
    // ...
}&lt;/pre&gt;
O también podemos hacerlo por roles dentro del sistema:&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;[Authorize(Roles= "greatsingers")]
public void Sing(string msg)
{
    // ...
}&lt;/pre&gt;
Por último, comentar que&amp;nbsp;a diferencia de los homónimos atributos usados en MVC y WebAPI, este nuevo &lt;code&gt;Authorize&lt;/code&gt; dispone de un parámetro booleano adicional llamado &lt;code&gt;RequireOutGoing&lt;/code&gt; que si establecemos a falso hará que las peticiones al método afectado sean ejecutadas sin necesidad de autenticación.&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=aLBdnnvILjY:vhQU3VBmK-w:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=aLBdnnvILjY:vhQU3VBmK-w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=aLBdnnvILjY:vhQU3VBmK-w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=aLBdnnvILjY:vhQU3VBmK-w:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=aLBdnnvILjY:vhQU3VBmK-w:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=aLBdnnvILjY:vhQU3VBmK-w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=aLBdnnvILjY:vhQU3VBmK-w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=aLBdnnvILjY:vhQU3VBmK-w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=aLBdnnvILjY:vhQU3VBmK-w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=aLBdnnvILjY:vhQU3VBmK-w:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/aLBdnnvILjY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/9018097306813659118/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=9018097306813659118" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/9018097306813659118?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/9018097306813659118?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/aLBdnnvILjY/control-de-acceso-hubs-signalr.html" title="Control de acceso a Hubs SignalR" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-6VP_ESr8gDo/URqW6gE2npI/AAAAAAAACqo/7ARPvPSN9-o/s72-c/image2%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/control-de-acceso-hubs-signalr.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cEQH45fyp7ImA9WhBWFE0.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-6507423785033394591</id><published>2013-04-08T09:10:00.000+02:00</published><updated>2013-04-08T09:10:01.027+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-08T09:10:01.027+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 112</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh6.ggpht.com/-p2geLwxWdVw/UWFUG8d9ueI/AAAAAAAACzY/SIeHUXTfN4o/image2342423333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces que he ido recopilando recopilados del 1 al 5 de abril de 2013. Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Eventos&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://gusenet.org/evento.html"&gt;Eventazo en Murcia: #TunodeYoxaml #YonodeTuxaml&lt;/a&gt;       &lt;br /&gt;Gusenet &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.thinqlinq.com/Post.aspx/Title/Beware-of-Async-Sub-or-Void"&gt;Beware of Async Sub or Void&lt;/a&gt;       &lt;br /&gt;Jim Wooley &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.telerik.com/justteam/posts/13-04-02/understanding-net-garbage-collection"&gt;Understanding .NET Garbage Collection&lt;/a&gt;       &lt;br /&gt;Just* team &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/pglavich/archive/2013/04/05/owin-katana-and-getting-started.aspx"&gt;Owin, Katana and getting started&lt;/a&gt;       &lt;br /&gt;Glav &lt;a name='more'&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://gregorsuttie.com/2013/04/03/elmahr-monitor-errors-in-your-app-using-a-dashboard/"&gt;ElmahR – monitor errors in your app using a dashboard&lt;/a&gt;       &lt;br /&gt;Gregor Suttie &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=877"&gt;Making your existing ASP.NET MVC Web Site Mobile Friendly&lt;/a&gt;       &lt;br /&gt;Suprotim Argwal &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/04/04/debugging-asp-net-web-api-with-route-debugger.aspx"&gt;Debugging ASP.NET Web API with Route Debugger&lt;/a&gt;       &lt;br /&gt;Rick Anderson &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/04/04/webapi-tip-7-beautiful-message-handlers.aspx"&gt;WebAPI Tip #7: Beautiful Message Handlers&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/04/hosting-asp-net-web-api-in-linqpad/" title="Permalink to Hosting ASP.NET Web API in LinqPad"&gt;Hosting ASP.NET Web API in LinqPad&lt;/a&gt;       &lt;br /&gt;Filip W. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/"&gt;Using jQuery to POST [FromBody] parameters to Web API&lt;/a&gt;       &lt;br /&gt;Dave Ward &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/dwahlin/archive/2013/04/02/asp-net-4-5-web-forms-features-model-binding.aspx"&gt;ASP.NET 4.5 Web Forms Features - Model Binding&lt;/a&gt;       &lt;br /&gt;Dan Wahlin &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.devcurry.com/2013/04/aspnet-mvc-creating-custom-view-engine.html"&gt;ASP.NET MVC- Creating Custom View Engine&lt;/a&gt;       &lt;br /&gt;Mahesh Sabnis &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/03/28/tutorial-series-on-model-binding-with-asp-net-web-forms.aspx"&gt;Tutorial Series on Model Binding with ASP.NET Web Forms&lt;/a&gt;       &lt;br /&gt;Tom FitzMacken &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/cibrax/archive/2013/03/01/asp-net-web-api-logging-and-troubleshooting.aspx"&gt;ASP.NET Web API Logging and Troubleshooting&lt;/a&gt;       &lt;br /&gt;Pablo M. Cibraro (aka Cibrax) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://byterot.blogspot.com.es/2013/04/Monitor-your-ASP-NET-Web-API-application-using-your-own-custom-counters.html"&gt;Monitor your ASP.NET Web API application using your own custom counters&lt;/a&gt;       &lt;br /&gt;Aliostad &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://thedatafarm.com/blog/data-access/a-notable-entity-framework-performance-eater-casting-nchar-to-nvarchar-under-the-covers/"&gt;A Notable Entity Framework Performance Eater: Casting nchar to nvarchar under the covers&lt;/a&gt;       &lt;br /&gt;Julie Lerman &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/body-border-rounded-inside/"&gt;Body Border, Rounded Inside&lt;/a&gt;       &lt;br /&gt;Chris Coyier &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/masking/adobe/"&gt;CSS Masking&lt;/a&gt;       &lt;br /&gt;Dirk Schulze &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jquery4u.com/speed/jquery-performance-dom-caching/" title="jQuery- The Performance of DOM caching"&gt;jQuery- The Performance of DOM caching&lt;/a&gt;       &lt;br /&gt;Sam Deering &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sitepoint.com/author/jzaytsev/"&gt;Introduction to Fabric.js&lt;/a&gt;       &lt;br /&gt;Juriy Zaytsev &lt;/li&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/building-large-maintainable-and-testable-knockout-js-applications"&gt;Building Large, Maintainable, and Testable Knockout.js Applications&lt;/a&gt;       &lt;br /&gt;Jonathan Creamer &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.elijahmanor.com/2013/04/angry-birds-of-javascript-black-bird.html"&gt;Angry Birds of JavaScript: Black Bird - Backbone&lt;/a&gt;       &lt;br /&gt;Elijah Manor &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/02/28/mapping-an-angular-resource-service-to-a-web-api.aspx"&gt;Mapping an Angular Resource Service to a Web API&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.adobe.com/devnet/html5/articles/getting-started-with-angularjs.html"&gt;Getting started with AngularJS&lt;/a&gt;       &lt;br /&gt;Kris Schultz &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/somasegar/archive/2013/04/04/visual-studio-2012-update-2-now-available.aspx"&gt;Visual Studio 2012 Update 2 Now Available&lt;/a&gt;       &lt;br /&gt;S. Somasegar &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Windows 8/WinRT/WP&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://javiersuarezruiz.wordpress.com/2013/04/04/windows-phone-tecnicas-para-compartir-codigo-2o-parte/"&gt;Windows Phone. Técnicas para compartir código. 2º Parte&lt;/a&gt;       &lt;br /&gt;Javier Suárez Ruiz &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2013/04/03/legal-guide-contract-samples-for-designers/"&gt;The Collective Legal Guide For Designers (Contract Samples)&lt;/a&gt;       &lt;br /&gt;Veronica Picciafuoco &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mrubino.net/2013/04/02/que-es-un-microsoft-mvp/"&gt;¿Qué es un Microsoft MVP?&lt;/a&gt;       &lt;br /&gt;Marc Rubiño &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=8dl_RQsHfCk:PTOc1c81YGA:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=8dl_RQsHfCk:PTOc1c81YGA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=8dl_RQsHfCk:PTOc1c81YGA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=8dl_RQsHfCk:PTOc1c81YGA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=8dl_RQsHfCk:PTOc1c81YGA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=8dl_RQsHfCk:PTOc1c81YGA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=8dl_RQsHfCk:PTOc1c81YGA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=8dl_RQsHfCk:PTOc1c81YGA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=8dl_RQsHfCk:PTOc1c81YGA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=8dl_RQsHfCk:PTOc1c81YGA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/8dl_RQsHfCk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/6507423785033394591/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=6507423785033394591" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6507423785033394591?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6507423785033394591?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/8dl_RQsHfCk/enlaces-interesantes-112.html" title="Enlaces interesantes 112" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-p2geLwxWdVw/UWFUG8d9ueI/AAAAAAAACzY/SIeHUXTfN4o/s72-c/image2342423333333.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/enlaces-interesantes-112.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EHR3c8fyp7ImA9WhBVEEw.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-1720967171692897284</id><published>2013-04-03T09:15:00.000+02:00</published><updated>2013-04-15T10:47:16.977+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-15T10:47:16.977+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="optimización" /><category scheme="http://www.blogger.com/atom/ns#" term="novedades" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="aspnetmvc" /><category scheme="http://www.blogger.com/atom/ns#" term="trucos" /><title>CDN con fallbacks en bundles</title><content type="html">&lt;img align="right" alt="ASP.NET" border="0" height="54" src="http://lh4.ggpht.com/-SUy6h09q1T0/UUR0BOA3nXI/AAAAAAAACyM/A2rFewxNN-A/image%25255B2%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="ASP.NET" width="166" /&gt;La nueva versión de &lt;code&gt;System.Web.Optimization&lt;/code&gt; traerá (aún está en beta) algunas novedades interesantes al sistema de bundling que se incluye de serie en los proyectos ASP.NET MVC y se distribuye a través de Nuget en el paquete Microsoft.AspNet.Web.Optimization.&lt;br /&gt;
&lt;br /&gt;
En particular, vamos a centrarnos en una característica muy práctica si queremos utilizar una Content Delivery Network (CDN) externa (como la de &lt;a href="http://www.asp.net/ajaxlibrary/cdn.ashx"&gt;Microsoft&lt;/a&gt;, &lt;a href="https://developers.google.com/speed/libraries/devguide"&gt;Google&lt;/a&gt; o incluso una propia) para delegar&amp;nbsp;a ella la carga de bibliotecas de script comunes, pero queremos a la vez&amp;nbsp;&lt;strong&gt;proporcionar una alternativa local&lt;/strong&gt; por si acaso ésta fallase debido a cualquier motivo.&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;
1. La situación actual&lt;/h3&gt;
El sistema de bundling ya nos permitía, al mismo tiempo que definíamos los bundles, especificar la dirección en la CDN a través de la cual el archivo podía ser obtenido. Esto lo hacíamos justo en el momento de la creación del bundle:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;bundles.Add(new ScriptBundle(
        "~/bundles/jquery", // Bundle virtual path
        "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js" // CDN Path
    )
    .Include("~/Scripts/jquery-{version}.js"));&lt;/pre&gt;
Este bundle podemos referenciarlo desde la vista usando la dirección virtual asignada como sigue:&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;      ...
      @Scripts.Render("~/bundles/jquery")
   &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
El código resultante de esta llamada depende del valor establecido en la propiedad booleana &lt;code&gt;BundleTable.Bundles.UseCdn&lt;/code&gt; . Si contiene &lt;code&gt;false&lt;/code&gt;, el valor por defecto, el tag &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; generado apunta a la dirección del servidor local a través de la cual es posible descargar el archivo comprimido:&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;script src="/bundles/jquery?v=UgyEMAYOuSB9Bb6HcOEVHpd6fIIp54yF086SRNVcdIY1"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
En cambio, si el valor de &lt;code&gt;BundleTable.Bundles.UseCdn &lt;/code&gt;es &lt;code&gt;true&lt;/code&gt;, la URL que aparecerá en el tag es la indicada como dirección del archivo en el CDN:&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;h3&gt;
2. Las novedades&lt;/h3&gt;
Lo anterior está bien pero, aunque puede resultar válido en muchos escenarios, hay casos en los que es claramente insuficiente y tenemos que hacer algunos apaños para que todo vaya bien. Sólo tenéis que imaginar que estamos desarrollando una aplicación con esas referencias en un ordenador sin internet…&lt;br /&gt;
&lt;br /&gt;
Pues para evitarnos trabajo, la nueva versión de System.Web.Optimization incluye un mecanismo automático de fallback que nos permite detectar cuándo ha habido problemas descargando nuestra biblioteca desde el CDN, y, en este caso, cargar el bundle local de forma automática.&lt;br /&gt;
&lt;br /&gt;
La forma de conseguirlo es idéntica a la de antes: definimos un bundle de un archivo especificando la dirección de la URL para obtenerlo desde la CDN, e indicamos en él una &lt;strong&gt;expresión de fallback&lt;/strong&gt;, es decir, una expresión que será &lt;strong&gt;evaluada en tiempo de script&lt;/strong&gt; y que debe &lt;strong&gt;determinar si la biblioteca ha sido cargada con éxito&lt;/strong&gt;. Por ejemplo, para saber si jQuery ha sido cargado con éxito sólo hay que observar si hay un objeto en &lt;code&gt;window.jQuery&lt;/code&gt;, ¿verdad? Pues esa sería la expresión de fallback.&lt;br /&gt;
&lt;br /&gt;
El siguiente ejemplo muestra cómo deberíamos crear el bundle y añadirlo a la tabla de bundles del sistema especificando la expresión de comprobación:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;var jquery = new ScriptBundle(
        "~/bundles/jquery", // Bundle virtual path
        "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js" // CDN Path
    )
    .Include("~/Scripts/jquery-{version}.js");

jquery.CdnFallbackExpression = "window.jQuery";
BundleTable.Bundles.Add(jquery);&lt;/pre&gt;
Una vez referenciado en la vista, el código de marcado generado será el siguiente:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;&amp;lt;script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;(window.jQuery)||document.write('&amp;lt;script src="/bundles/jquery"&amp;gt;&amp;lt;\/script&amp;gt;');&amp;lt;/script&amp;gt;&lt;/pre&gt;
Observad que lo único que se hace es introducir un bloque de script justo después de la referencia al CDN en el que se evalúa la expresión de fallback y, si no se cumple, se genera sobre la página una nueva referencia al bundle local. Si queréis comprobar su funcionamiento, sólo tenéis que introducir&amp;nbsp;una dirección incorrecta en&amp;nbsp;la&amp;nbsp;URL al CDN, y veréis cómo se utiliza el archivo local.&lt;br /&gt;
&lt;br /&gt;
Por último, indicar que podéis probar estas cosas descargando desde Nuget la versión prerelease del paquete. Ah, y&amp;nbsp;recordad que para que el bundling funcione correctamente es necesario &lt;strong&gt;desactivar el modo depuración&lt;/strong&gt; en el web.config, o bien &lt;strong&gt;habilitar manualmente&lt;/strong&gt; este mecanismo introduciendo la siguiente asignación en algún punto de la inicialización de la aplicación:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;BundleTable.EnableOptimizations = true;&lt;/pre&gt;
En definitiva, es algo que ya podíamos solucionar desde la primera versión de forma manual, pero que ahora lo tendremos más fácil al venir integrado en el producto :-)&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=crEiRNJRRo8:wGHGGryxvNE:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=crEiRNJRRo8:wGHGGryxvNE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=crEiRNJRRo8:wGHGGryxvNE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=crEiRNJRRo8:wGHGGryxvNE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=crEiRNJRRo8:wGHGGryxvNE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=crEiRNJRRo8:wGHGGryxvNE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=crEiRNJRRo8:wGHGGryxvNE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=crEiRNJRRo8:wGHGGryxvNE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=crEiRNJRRo8:wGHGGryxvNE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=crEiRNJRRo8:wGHGGryxvNE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/crEiRNJRRo8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/1720967171692897284/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=1720967171692897284" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1720967171692897284?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1720967171692897284?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/crEiRNJRRo8/cdn-con-fallbacks-en-bundles.html" title="CDN con fallbacks en bundles" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-SUy6h09q1T0/UUR0BOA3nXI/AAAAAAAACyM/A2rFewxNN-A/s72-c/image%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/cdn-con-fallbacks-en-bundles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4EQX0-fyp7ImA9WhBXGEU.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-1188975922879448697</id><published>2013-04-02T09:15:00.000+02:00</published><updated>2013-04-02T09:15:00.357+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T09:15:00.357+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 111</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh6.ggpht.com/-h0euDINoeWI/UVnj2p4W0QI/AAAAAAAACzI/fyiUNdWOq1c/image234242333333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son algunos enlaces recopilados la semana pasada, especialmente corta por los festivos. Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/03/27/webapi-tip-5-generating-links.aspx"&gt;WebAPI Tip #5: Generating Links&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/03/per-request-error-detail-policy-in-asp-net-web-api/" title="Permalink to Per request error detail policy in ASP.NET Web API"&gt;Per request error detail policy in ASP.NET Web API&lt;/a&gt;       &lt;br /&gt;Filip W. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/03/25/asp-net-webapi-tip-3-camelcasing-json.aspx"&gt;ASP.NET WebAPI Tip #3: camelCasing JSON&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-facebook-birthday-app"&gt;ASP.NET MVC Facebook Birthday App&lt;/a&gt;       &lt;br /&gt;Rick Anderson&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://ardalis.com/how-to-contribute-to-aspnet-yourself"&gt;How To Contribute to ASPNET Yourself&lt;/a&gt;       &lt;br /&gt;Steve Smith &lt;/li&gt;
&lt;li&gt;Website Performance with ASP.NET: &lt;a href="http://markusgreuel.net/blog/website-performance-with-asp-net-part1-measuring"&gt;measuring&lt;/a&gt;, &lt;a href="http://markusgreuel.net/blog/website-performance-with-asp-net-part2-reduce-time-to-first-byte"&gt;reduce time to first byte&lt;/a&gt;, &lt;a href="http://markusgreuel.net/blog/website-performance-with-asp-net-part3-make-fewer-http-requests"&gt;make fewer HTTP requests&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;Markus Greuel &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be"&gt;ASP.NET MVC Controller Dependency Injection for Beginners&lt;/a&gt;       &lt;br /&gt;S. M. Ahasan Habib &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages"&gt;XSRF/CSRF Prevention in ASP.NET MVC and Web Pages&lt;/a&gt;       &lt;br /&gt;Rick Anderson &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.simple-talk.com/dotnet/.net-framework/building-a-public-http-api-for-data/"&gt;Building a Public HTTP API for Data&lt;/a&gt;       &lt;br /&gt;Dino Esposito &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.troyhunt.com/2013/03/c-is-for-cookie-h-is-for-hacker.html"&gt;C is for cookie, H is for hacker – understanding HTTP only and Secure cookies&lt;/a&gt;       &lt;br /&gt;Troy Hunt &lt;/li&gt;
&lt;li&gt;&lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/97_Things_Every_Programmer_Should_Know"&gt;97 Things Every Programmer Should Know&lt;/a&gt;       &lt;br /&gt;O’Reilly &lt;/li&gt;
&lt;li&gt;&lt;a href="http://alexandrebrisebois.wordpress.com/2013/03/22/when-is-dependency-injection-too-much/"&gt;When is Dependency Injection too Much?&lt;/a&gt;       &lt;br /&gt;Alexandre Brisebois&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.west-wind.com/weblog/posts/2013/Mar/26/Firing-an-Entity-Framework-Database-Initializer-from-within-DbContext" title="Firing an Entity Framework Database Initializer from within DbContext"&gt;Firing an Entity Framework Database Initializer from within DbContext&lt;/a&gt;       &lt;br /&gt;Rick Strahl &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.thesoftwaresimpleton.com/blog/2013/03/23/client-side-mvc/"&gt;Ember.js - Client Side MVC Is Not Server Side MVC, Erase Your Brain&lt;/a&gt;       &lt;br /&gt;Paul Cowan &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.elijahmanor.com/2013/03/angry-birds-of-javascript-red-bird.html"&gt;Angry Birds of JavaScript: Red Bird&lt;/a&gt;       &lt;br /&gt;Elijah Manor &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jquery4u.com/plugins/10-jquery-sticky-scroll-plugins/" title="10+ jQuery Sticky Scroll Plugins"&gt;10+ jQuery Sticky Scroll Plugins&lt;/a&gt;       &lt;br /&gt;Sam Deering &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.johnpapa.net/howmanyistoomany/"&gt;Why All Those JavaScript Libraries?&lt;/a&gt;       &lt;br /&gt;John Papa &lt;/li&gt;
&lt;li&gt;&lt;a href="http://js1k.com/2013-spring/demos"&gt;JS1K competition: create a cool JavaScript "application" no larger than 1k&lt;/a&gt;       &lt;br /&gt;JS1K &lt;/li&gt;
&lt;li&gt;&lt;a href="http://elegantcode.com/2013/03/22/basic-javascript-prototypical-inheritance-vs-functional-inheritance/"&gt;Basic JavaScript: Prototypical Inheritance vs. Functional Inheritance&lt;/a&gt;       &lt;br /&gt;Jan Van Ryswyck &lt;/li&gt;
&lt;li&gt;&lt;a href="http://vgaltes.com/index.php/2013/03/14/testing-with-casperjs-part-1/"&gt;Testing with CasperJS&lt;/a&gt;       &lt;br /&gt;Vicenç García-Altés &lt;/li&gt;
&lt;li&gt;&lt;a href="http://updates.html5rocks.com/2013/03/What-s-the-CSS-scope-pseudo-class-for"&gt;What's the CSS :scope pseudo-class for?&lt;/a&gt;       &lt;br /&gt;Eric Bidelman &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/03/scriptcs-c-sin-visual-studio/"&gt;Scriptcs: C# sin Visual Studio&lt;/a&gt;       &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jmalarcon.es/post/El-secreto-de-la-productividad.aspx"&gt;El secreto de la productividad&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón&lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que normalmente podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=kKIPsZHH8Z4:1yhiHf_vdU8:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=kKIPsZHH8Z4:1yhiHf_vdU8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=kKIPsZHH8Z4:1yhiHf_vdU8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=kKIPsZHH8Z4:1yhiHf_vdU8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=kKIPsZHH8Z4:1yhiHf_vdU8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=kKIPsZHH8Z4:1yhiHf_vdU8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=kKIPsZHH8Z4:1yhiHf_vdU8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=kKIPsZHH8Z4:1yhiHf_vdU8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=kKIPsZHH8Z4:1yhiHf_vdU8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=kKIPsZHH8Z4:1yhiHf_vdU8:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/kKIPsZHH8Z4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/1188975922879448697/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=1188975922879448697" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1188975922879448697?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/1188975922879448697?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/kKIPsZHH8Z4/enlaces-interesantes-111.html" title="Enlaces interesantes 111" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-h0euDINoeWI/UVnj2p4W0QI/AAAAAAAACzI/fyiUNdWOq1c/s72-c/image234242333333.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/04/enlaces-interesantes-111.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFR3c6eCp7ImA9WhBXEk0.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-2330035564505076675</id><published>2013-03-25T10:01:00.000+01:00</published><updated>2013-03-25T10:01:56.910+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-25T10:01:56.910+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 110</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh6.ggpht.com/-e5E1iBwoZiE/UU2LQ50t8cI/AAAAAAAACyc/_SxroOksbRM/image23424233333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces publicados en &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt; y &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt; del 18 al 22 de marzo de 2013. &lt;br /&gt;
&lt;br /&gt;
Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
.Net&amp;nbsp;&amp;nbsp; &lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/5189/End-to-end-Email-Address-Verification-for-Applicat"&gt;End-to-end Email Address Verification for Applications&lt;/a&gt;       &lt;br /&gt;Vasudevan Deepak Kumar &lt;/li&gt;
&lt;li&gt;&lt;a href="http://typecastexception.com/post/2013/03/09/Splitting-and-Merging-Pdf-Files-in-C-Using-iTextSharp.aspx"&gt;Splitting and Merging Pdf Files in C# Using iTextSharp&lt;/a&gt;       &lt;br /&gt;John Atten &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/562021/Asynchronous-models-and-patterns"&gt;Asynchronous models and patterns&lt;/a&gt;       &lt;br /&gt;Florian Rappl&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://tech.pro/tutorial/1146/building-a-shopping-cart-with-signalr-aspnet-web-api-and-knockoutjs"&gt;Shopping cart with SignalR, ASP.NET Web API and Knockout.js&lt;/a&gt;       &lt;br /&gt;Filip Woj &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/MovingOldAppsFromIIS6ToIIS8AndWhyClassicModeExists.aspx"&gt;Moving old apps from IIS6 to IIS8 and why Classic Mode exists&lt;/a&gt;       &lt;br /&gt;Scott Hanselman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/03/21/webapi-tip-1-and-2-httpstatuscodes-and-overriding-conneg.aspx"&gt;WebAPI Tip #1 and #2: HttpStatusCodes and Overriding Conneg&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://httpstatus.es/"&gt;Database of HTTP status codes&lt;/a&gt;       &lt;br /&gt;Samuel Ryan &lt;/li&gt;
&lt;li&gt;&lt;a href="http://tech.pro/tutorial/1156/using-requirejs-in-an-aspnet-mvc-application"&gt;Using Require.js in an ASP.NET MVC application&lt;/a&gt;       &lt;br /&gt;Jonathan Creamer &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/peterblum/archive/2013/03/19/content-injector-for-asp-net-mvc.aspx"&gt;Content Injector for ASP.NET MVC&lt;/a&gt;       &lt;br /&gt;Peter Blum &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.getglimpse.com/2013/03/19/glimpse-1-1-released-with-support-for-mvc-4/"&gt;Glimpse 1.1 Released With Support for MVC 4&lt;/a&gt;       &lt;br /&gt;Glimpse Team &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mirajavora.com/content-negotiation-with-asp.net-web-api"&gt;Content Negotiation with ASP.NET Web API&lt;/a&gt;       &lt;br /&gt;Mira Javora &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/03/15/hacking-up-a-glimpse-plugin.aspx"&gt;Hacking Up A Glimpse Plugin&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/559728/An-Introduction-to-Disqus-Pluggable-Commenting-Sys"&gt;An Introduction to Disqus (Pluggable Commenting System) with ASP.Net MVC 3&lt;/a&gt;       &lt;br /&gt;Karthik A. &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2013/03/18/windows-azure-new-hadoop-service-html5-js-cors-phonegap-mercurial-and-dropbox-support.aspx"&gt;Windows Azure: New Hadoop service + HTML5/JS (CORS), PhoneGap, Mercurial and Dropbox support&lt;/a&gt;       &lt;br /&gt;Scott Guthrie &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2013/03/15/the-open-closed-principle-in-review.aspx"&gt;The Open-Closed Principle, in review&lt;/a&gt;       &lt;br /&gt;Jon Skeet &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://tech.pro/tutorial/1152/demystifying-linq"&gt;Demystifying LINQ&lt;/a&gt;       &lt;br /&gt;James Hare &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kianryan.co.uk/2013/03/orphaned-child/"&gt;Entity Framework Gotchas – Strategies for Orphaned Child Objects&lt;/a&gt;       &lt;br /&gt;Kian Ryan &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/388157/GUIDs-as-fast-primary-keys-under-multiple-database"&gt;GUIDs as fast primary keys under multiple databases&lt;/a&gt;       &lt;br /&gt;Jeremy Todd &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://superherojs.com/"&gt;Superhero.js: collection of the best articles, videos and presentations&lt;/a&gt;       &lt;br /&gt;SuperheroJs (vía @david_bonilla) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://wekeroad.com/2013/03/20/ember-baby-steps"&gt;Ember.js: Baby Steps&lt;/a&gt;       &lt;br /&gt;Rob Conery &lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/automatic-table-of-contents/"&gt;Automatic Table of Contents&lt;/a&gt;       &lt;br /&gt;Chris Coyier &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/03/less-preprocesador-css-con-soporte-en-visual-studio-2012/"&gt;LESS: Preprocesador CSS con soporte en Visual Studio 2012&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://stephenwalther.com/archive/2013/03/18/an-introduction-to-meteor.aspx"&gt;An Introduction to Meteor&lt;/a&gt;       &lt;br /&gt;Stephen Walther &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/03/18/a-quick-quiz-using-jquery-data.aspx"&gt;A Quick Quiz using jQuery .data()&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/getting-into-ember-js/"&gt;Getting Into Ember.js&lt;/a&gt;       &lt;br /&gt;Rey Bango &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.stevensanderson.com/2013/03/15/animating-lists-with-css-3-transitions/"&gt;Animating lists with CSS 3 transitions&lt;/a&gt;       &lt;br /&gt;Steve Sanderson &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Windows 8/WinRT/WP&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://javiersuarezruiz.wordpress.com/2013/03/18/windows-phone-tecnicas-para-compartir-codigo-1o-parte/"&gt;Windows Phone. Técnicas para compartir código. 1º Parte&lt;/a&gt;       &lt;br /&gt;Javier Suárez &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://hadihariri.com/2013/03/16/freedom-to-work/"&gt;Freedom to work&lt;/a&gt;       &lt;br /&gt;Hadi Hariri &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SHpGF66Lbns:xvum5ePGg7M:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SHpGF66Lbns:xvum5ePGg7M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SHpGF66Lbns:xvum5ePGg7M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SHpGF66Lbns:xvum5ePGg7M:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=SHpGF66Lbns:xvum5ePGg7M:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SHpGF66Lbns:xvum5ePGg7M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=SHpGF66Lbns:xvum5ePGg7M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SHpGF66Lbns:xvum5ePGg7M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=SHpGF66Lbns:xvum5ePGg7M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=SHpGF66Lbns:xvum5ePGg7M:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/SHpGF66Lbns" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/2330035564505076675/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=2330035564505076675" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/2330035564505076675?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/2330035564505076675?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/SHpGF66Lbns/enlaces-interesantes-110.html" title="Enlaces interesantes 110" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-e5E1iBwoZiE/UU2LQ50t8cI/AAAAAAAACyc/_SxroOksbRM/s72-c/image23424233333.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/03/enlaces-interesantes-110.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcEQH86fyp7ImA9WhBQF0s.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-2185885729433556458</id><published>2013-03-20T09:10:00.000+01:00</published><updated>2013-03-20T09:10:01.117+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-20T09:10:01.117+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="libros" /><category scheme="http://www.blogger.com/atom/ns#" term="autobombo" /><category scheme="http://www.blogger.com/atom/ns#" term="signalr" /><title>Mi libro: Introducción a ASP.NET SignalR</title><content type="html">Seguro que estaréis al tanto de que durante los últimos tiempos he estado trabajando junto con los amigos de &lt;a href="http://www.krasis.com/" target="_blank"&gt;Krasis/CampusMVP&lt;/a&gt; en la publicación de un libro sobre &lt;a href="http://signalr.net/" target="_blank"&gt;SignalR&lt;/a&gt;. De hecho, probablemente también sabréis que la versión en inglés del mismo se presentó y comenzó a &lt;a href="http://www.campusmvp.net/signalr-ebook/"&gt;distribuir para Estados Unidos&lt;/a&gt; (bueno, y para todo el mundo) hace unas semanas, cuando aún SignalR se encontraba en Release Candidate, y ha conseguido atraer a varios miles de lectores y muy buenas críticas durante este periodo.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.campusmvp.com/catalogo/Product-Introducci%C3%B3n-a-ASP.NET-SignalR-(PDF)_178.aspx"&gt;&lt;img align="right" alt="Introducción a ASP.NET SignalR" border="0" height="298" src="http://lh4.ggpht.com/-3GNruz-p_ks/UUNok-c9gMI/AAAAAAAACx8/SjxNDhIMNTw/image%25255B10%25255D.png?imgmax=800" style="margin: 0px 0px 10px 10px;" title="Introducción a ASP.NET SignalR" width="229" /&gt;&lt;/a&gt;Bueno, pues ya de forma oficial, me complace informaros de que desde hace unos días en la tienda de Krasis &lt;strong&gt;está disponible mi primer libro&lt;/strong&gt;, y el &lt;a href="https://twitter.com/davidfowl/status/303653561303187457"&gt;primero del mundo&lt;/a&gt; sobre este nuevo framework: &lt;a href="http://www.campusmvp.com/catalogo/Product-Introducci%C3%B3n-a-ASP.NET-SignalR-(PDF)_178.aspx"&gt;&lt;strong&gt;Introducción a ASP.NET SignalR&lt;/strong&gt;&lt;/a&gt;. Revisado, actualizado a la versión 1.0.1 de SignalR y, por supuesto, en español :-) &lt;br /&gt;
&lt;br /&gt;
Ante todo, agradecer a Krasis, y en concreto a José Manuel Alarcón, su continuo apoyo, colaboración&amp;nbsp;e imparable&amp;nbsp;empuje, sin los cuales no habría sido posible llegar a materializar este proyecto.&lt;br /&gt;
&lt;br /&gt;
Es un libro relativamente corto, unas ochenta páginas, que de momento va a ser distribuido exclusivamente en &lt;strong&gt;formato electrónico&lt;/strong&gt;. De esta forma, se evitan los costes asociados a la impresión, manipulación y logística, y se permite su comercialización a un precio creo que bastante razonable ;-)&lt;br /&gt;
&lt;br /&gt;
Y ya entrando en los contenidos, a lo largo del texto hace una introducción a los protocolos, tecnologías y técnicas que hay por detrás de las aplicaciones multiusuario en tiempo real, e introduce SignalR desde cero, mostrando mediante código y ejemplos cómo podemos sacarle partido a este impresionante marco de trabajo y construir increíbles aplicaciones web&amp;nbsp; (¡y no web!) de forma pasmosamente sencilla.&lt;br /&gt;
&lt;br /&gt;
A grandes rasgos, el recorrido que hacemos es el siguiente:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;En primer lugar, tras una breve introducción, explicamos detalladamente las &lt;strong&gt;limitaciones de HTTP&lt;/strong&gt; para la implementación de sistemas multiusuario en tiempo real, y estudiamos detalladamente los protocolos y técnicas que podemos usar para implementar &lt;strong&gt;escenarios Push&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A continuación, &lt;strong&gt;presentamos SignalR&lt;/strong&gt; y proporcionamos una visión de alto nivel del framework.&lt;/li&gt;
&lt;li&gt;Seguidamente, se describe la implementación de servidores y clientes javascript usando &lt;strong&gt;persistent connections&lt;/strong&gt;, el nivel más bajo de abstracción facilitado por SignalR.&lt;/li&gt;
&lt;li&gt;En el siguiente capítulo ascendemos de nivel de abstracción y comenzamos a &lt;strong&gt;desarrollar utilizando Hubs&lt;/strong&gt; en servidor y distintos enfoques para consumir los servicios desde javascript.&lt;/li&gt;
&lt;li&gt;A continuación estudiamos cómo enlazar aplicaciones más convencionales con servicios en tiempo real proporcionados por SignalR, gracias a la capacidad de consumirlos desde &lt;strong&gt;procesos externos&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Y por último, demostrando que este framework no sólo es utilizable en entornos web, aprenderemos a acceder a servicios SignalR desde &lt;strong&gt;clientes de todo tipo&lt;/strong&gt;, y a &lt;strong&gt;alojarlos en procesos no ASP.NET&lt;/strong&gt;, como podría ser una aplicación de consola o un servicio del sistema operativo.&lt;/li&gt;
&lt;/ul&gt;
Exceptuando los dos primeros bloques, que son de contenido más teórico, todo el texto está salpicado con mucho código, y los capítulos acaban con la implementación de un ejemplo completo para ilustrar los conceptos tratados a lo largo de los mismos. Estos ejemplos, por supuesto, &lt;a href="http://www.campusmvp.com/Catalogo/Product-Introducci%C3%B3n-a-ASP.NET-SignalR-(PDF)_178.aspx"&gt;pueden ser descargados&lt;/a&gt; para probarlos y juguetear con ellos directamente.&lt;br /&gt;
&lt;br /&gt;
Espero que lo disfrutéis y, sobre todo, os sea de utilidad para abriros a nuevas posibilidades e introducir en vuestras aplicaciones sorprendentes funcionalidades multiusuario en tiempo real. ¡Uau!&lt;br /&gt;
&lt;br /&gt;
El árbol, los hijos, el libro… creo que ya no me falta nada ;-)&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=FJguzHPyQs4:OQ7aWoH51mw:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=FJguzHPyQs4:OQ7aWoH51mw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=FJguzHPyQs4:OQ7aWoH51mw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=FJguzHPyQs4:OQ7aWoH51mw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=FJguzHPyQs4:OQ7aWoH51mw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=FJguzHPyQs4:OQ7aWoH51mw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=FJguzHPyQs4:OQ7aWoH51mw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=FJguzHPyQs4:OQ7aWoH51mw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=FJguzHPyQs4:OQ7aWoH51mw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=FJguzHPyQs4:OQ7aWoH51mw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/FJguzHPyQs4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/2185885729433556458/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=2185885729433556458" title="5 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/2185885729433556458?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/2185885729433556458?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/FJguzHPyQs4/mi-libro-introduccion-aspnet-signalr.html" title="Mi libro: Introducción a ASP.NET SignalR" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-3GNruz-p_ks/UUNok-c9gMI/AAAAAAAACx8/SjxNDhIMNTw/s72-c/image%25255B10%25255D.png?imgmax=800" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/03/mi-libro-introduccion-aspnet-signalr.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MCSXo8cCp7ImA9WhBQFUQ.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-3480348418488734340</id><published>2013-03-18T09:15:00.000+01:00</published><updated>2013-03-18T10:37:48.478+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-18T10:37:48.478+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 109</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh3.ggpht.com/-Ba0REBrzqGA/UTzf2lLAJQI/AAAAAAAACxs/H-Yc0Pkfp5E/image234242333%25255B3%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces publicados en &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt; y &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt; del 11 al 15 de marzo de 2013. &lt;br /&gt;
&lt;br /&gt;
Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/561129/Face-Detection-in-VB-NET"&gt;Face Detection in VB.NET&lt;/a&gt;       &lt;br /&gt;Dejan Mauer &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/544990/Understand-how-bitwise-operators-work-Csharp-and-V"&gt;Understand how bitwise operators work (C# and VB.NET examples)&lt;/a&gt;       &lt;br /&gt;ProgramFox&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/561490/ASP-NET-Response-Redirect-without-ThreadAbortExcep"&gt;ASP.NET Response.Redirect without ThreadAbortException&lt;/a&gt;       &lt;br /&gt;Essence &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/03/12/deploy-a-secure-asp-net-mvc-application-with-oauth-membership-and-sql-database.aspx"&gt;Deploy a Secure ASP.NET MVC application with OAuth, Membership and SQL Database&lt;/a&gt;       &lt;br /&gt;Rick Anderson &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.beabigrockstar.com/google-signin-for-asp-net-mvc/"&gt;Google+ Signin for ASP.NET MVC&lt;/a&gt;       &lt;br /&gt;Jerrie Pelser &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/03/adding-http-head-support-to-asp-net-web-api/"&gt;Adding HTTP HEAD support to ASP.NET Web API&lt;/a&gt;       &lt;br /&gt;Filip Woj &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/lruiz/archive/2013/03/12/asp-net-webapi-cuando-usar-un-message-handler-y-cuando-un-filter.aspx"&gt;[ASP.NET WebAPI] Cuando usar un Message Handler y cuando un Filter&lt;/a&gt;       &lt;br /&gt;Luis Ruiz Pavón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://icanmakethiswork.blogspot.co.uk/2013/03/decimalmodelbinder-for-nullable-decimals.html"&gt;DecimalModelBinder for nullable Decimals&lt;/a&gt;       &lt;br /&gt;John Reilly &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx"&gt;DropDownListFor with ASP.NET MVC&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/02/19/message-flow-in-asp-net-web-api-odata.aspx"&gt;A Message Flow in ASP.NET Web API OData&lt;/a&gt;       &lt;br /&gt;Hongmei Ge &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/03/asp-net-bundling-cdn-archivos-secuenciales-directorios-y-requirejs/"&gt;ASP.NET Bundling: CDN, archivos secuenciales, directorios y Requirejs&lt;/a&gt;       &lt;br /&gt;Gisela Torres&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/unai/archive/2013/03/13/ef-6-connection-resiliency-y-azure.aspx"&gt;EF 6: Connection resiliency y azure&lt;/a&gt;       &lt;br /&gt;Unai Zorrilla &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/jj991973.aspx"&gt;Playing with the EF6 Alpha&lt;/a&gt;       &lt;br /&gt;Julie Lerman &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/the-lengths-of-css/"&gt;The Lengths of CSS&lt;/a&gt;       &lt;br /&gt;Chris Coyier &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jquery4u.com/bootstraps/metro-bootstraps/"&gt;10 Popular Metro Bootstraps&lt;/a&gt;       &lt;br /&gt;Sam Deering &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/03/atributos-data-html5"&gt;Atributos data-*&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://programandonet.com/web/primeros-pasos-con-typescript/"&gt;Primeros pasos con TypeScript&lt;/a&gt;       &lt;br /&gt;Pablo Bouzada &lt;/li&gt;
&lt;li&gt;&lt;a href="http://coding.smashingmagazine.com/2013/03/08/tips-tricks-print-style-sheets/"&gt;Tips And Tricks For Print Style Sheets&lt;/a&gt;       &lt;br /&gt;Dudley Storey &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/03/requirejs-el-cargador-de-modulos-para-javascript/"&gt;Requirejs: El cargador de módulos para JavaScript&lt;/a&gt;       &lt;br /&gt;Gisela Torres&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/03/12/glimpse-1-0-1.aspx"&gt;Glimpse 1.0.1!&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.refactorthis.net/post/2013/03/07/Xamarin-20-Product-Review-Android-and-iOS-development-in-c-just-got-easier.aspx"&gt;Xamarin 2.0 Product Review - Android and iOS development in C# just got easier&lt;/a&gt;       &lt;br /&gt;Buddy James &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.overflowexception.es/2013/03/reinstalar-paquetes-de-nuget.html"&gt;Reinstalar paquetes de NuGet&lt;/a&gt;       &lt;br /&gt;Juan Manuel Fenoll &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://navegapolis.com/index.php/90-motivar-para-programar"&gt;¿Motivar a los programadores prara que programen?&lt;/a&gt;       &lt;br /&gt;Juan Palacio &lt;/li&gt;
&lt;li&gt;&lt;a href="http://jmalarcon.es/post/Pre-cualificacion-de-clientes-y-estafas-nigerianas.aspx"&gt;Pre-cualificación de clientes y estafas nigerianas&lt;/a&gt;       &lt;br /&gt;José Manuel Alarcón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.genbetadev.com/formacion/las-10-certificaciones-mejor-pagadas-en-los-usa"&gt;Las 10 certificaciones mejor pagadas en los USA&lt;/a&gt;       &lt;br /&gt;Juan Quijano &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=qoAhSW5q7dI:Kus1bYFfWfY:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=qoAhSW5q7dI:Kus1bYFfWfY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=qoAhSW5q7dI:Kus1bYFfWfY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=qoAhSW5q7dI:Kus1bYFfWfY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=qoAhSW5q7dI:Kus1bYFfWfY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=qoAhSW5q7dI:Kus1bYFfWfY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=qoAhSW5q7dI:Kus1bYFfWfY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=qoAhSW5q7dI:Kus1bYFfWfY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=qoAhSW5q7dI:Kus1bYFfWfY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=qoAhSW5q7dI:Kus1bYFfWfY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/qoAhSW5q7dI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/3480348418488734340/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=3480348418488734340" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/3480348418488734340?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/3480348418488734340?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/qoAhSW5q7dI/enlaces-interesantes-109.html" title="Enlaces interesantes 109" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-Ba0REBrzqGA/UTzf2lLAJQI/AAAAAAAACxs/H-Yc0Pkfp5E/s72-c/image234242333%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/03/enlaces-interesantes-109.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYEQX89cSp7ImA9WhBQEEo.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-6290415304590594570</id><published>2013-03-12T09:15:00.000+01:00</published><updated>2013-03-12T09:15:00.169+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-12T09:15:00.169+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo" /><category scheme="http://www.blogger.com/atom/ns#" term="trucos" /><category scheme="http://www.blogger.com/atom/ns#" term="signalr" /><title>Crear manualmente proxies de Hubs Signalr</title><content type="html">&lt;img align="right" alt="SignalR" border="0" height="121" src="http://lh6.ggpht.com/-zwlALGXNcI0/URpjJKOTl2I/AAAAAAAACp4/H6ytxfxN7EU/image%25255B2%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SignalR" width="91" /&gt;Cuando desde un cliente javascript consumimos los servicios suministrados por un Hub de SignalR, lo habitual es usemos los proxies generados automáticamente, para lo que solemos incluir en nuestra página una referencia al script “/Signalr/Hubs” según la ruta por defecto.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, puede haber casos en los que no nos interesa este comportamiento y preferimos generarlo de forma manual para, por ejemplo, incluirlo en un bundle o distribuir el archivo a través de una CDN. Veamos cómo conseguirlo.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Los desarrolladores de SignalR han creado una herramienta de línea de comandos que, entre otras cosas, nos facilitará mucho esta tarea, por lo que lo primero que tenemos que hacer es descargarla e instalarla a través de Nuget:&lt;br /&gt;
&lt;pre&gt;PM&amp;gt; Install-Package microsoft.aspnet.signalr.utils 
[...]
Successfully installed 'Microsoft.AspNet.SignalR.Utils 1.0.1'.&lt;/pre&gt;
&lt;br /&gt;
Por supuesto, este primer paso podrías hacerlo también usando el interfaz gráfico, pero mejor que lo hagas ya desde la consola Nuget porque de todas formas nos va a hacer falta en el siguiente paso.&lt;br /&gt;
&lt;br /&gt;
A continuación hay que ejecutar en la consola el siguiente comando:&lt;br /&gt;
&lt;pre&gt;PM&amp;gt; signalr.exe ghp /o:MyProject\scripts\hubs.js
SignalR Utility Version: 1.0.0.0
Creating temp directory 
  C:\Users\JmAguilar\AppData\Local\Temp\532fbeb3-55c9-44cb-ac94-3f831318ce89&lt;/pre&gt;
&lt;img align="right" alt="Incluir script en el proyecto" border="0" height="245" src="http://lh4.ggpht.com/-WjqMWFod3Rw/URpjKOxR07I/AAAAAAAACqA/VIZnLkiVYwU/image%25255B7%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Incluir script en el proyecto" width="350" /&gt;Como seguro podéis intuir, el parámetro /o permite indicar la ruta hacia el archivo que será generado. Es relativa a la solución, por esta razón hay que comenzarla desde la carpeta donde se encuentra el proyecto.&lt;br /&gt;
&lt;br /&gt;
El parámetro "ghp" simplemente viene de "Generate Hub Proxies".&lt;br /&gt;
&lt;br /&gt;
Al finalizar el proceso tendremos en la carpeta indicada el archivo, cuyo contenido será idéntico al obtenido al descargar desde la vista el script generado en /Signalr/Hubs. Eso sí, no aparecerá en Visual Studio hasta que lo incorporemos explícitamente al proyecto.&lt;br /&gt;
&lt;br /&gt;
Hecho esto, ya podemos referenciarlo desde nuestras páginas:&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;script src="Scripts/hubs.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
Podemos también introducir la generación de proxies en el proceso de build, asegurando así que el script siempre estará sincronizado con el resto de componentes. La única precaución a tener en cuenta es que la ruta del archivo generado, indicada en el parámetro /o, debe ser absoluta.&lt;br /&gt;
&lt;br /&gt;
Por último, comentar que también&amp;nbsp;es posible&amp;nbsp;&lt;strong&gt;desactivar del servidor SignalR la generación de proxies&lt;/strong&gt;, lo cual puede ser interesante si nuestros clientes estamos seguros de que no van a necesitarlo (por ejemplo, si tenemos sólo clientes .NET, o si hemos pregenerado los archivos de script), para evitar que usuarios del lado oscuro puedan obtener demasiada información sobre los Hubs y operaciones disponibles en servidor. En este caso, basta con indicar esta configuración en el momento de mapear los hubs, justo al arrancar la aplicación:&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;var hubConfiguration = new HubConfiguration();
hubConfiguration.EnableJavaScriptProxies = false;
RouteTable.Routes.MapHubs(hubConfiguration);&lt;/pre&gt;
A partir de este momento, el script descargado a través de la dirección Signalr/hubs simplemente lanzará una excepción indicando que esta característica ha sido deshabilitada.&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=o7O_UaTs78I:NeqKt8QWel4:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=o7O_UaTs78I:NeqKt8QWel4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=o7O_UaTs78I:NeqKt8QWel4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=o7O_UaTs78I:NeqKt8QWel4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=o7O_UaTs78I:NeqKt8QWel4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=o7O_UaTs78I:NeqKt8QWel4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=o7O_UaTs78I:NeqKt8QWel4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=o7O_UaTs78I:NeqKt8QWel4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=o7O_UaTs78I:NeqKt8QWel4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=o7O_UaTs78I:NeqKt8QWel4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/o7O_UaTs78I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/6290415304590594570/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=6290415304590594570" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6290415304590594570?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/6290415304590594570?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/o7O_UaTs78I/crear-manualmente-proxies-de-hubs.html" title="Crear manualmente proxies de Hubs Signalr" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-zwlALGXNcI0/URpjJKOTl2I/AAAAAAAACp4/H6ytxfxN7EU/s72-c/image%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/03/crear-manualmente-proxies-de-hubs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cFSX05eyp7ImA9WhBQFEk.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-5052961407978427301</id><published>2013-03-11T09:15:00.000+01:00</published><updated>2013-03-16T14:36:58.323+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-16T14:36:58.323+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 108</title><content type="html">&lt;img align="right" alt="Enlaces interesantes" border="0" height="129" src="http://lh4.ggpht.com/-WQXObtGAL_s/UTyCRL0z8NI/AAAAAAAACxc/KA4-0uGzxkU/image234242333.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces interesantes" width="172" /&gt;Estos son los enlaces publicados en &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt; y &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt; del 4 al 8 de marzo de 2013. &lt;br /&gt;
&lt;br /&gt;
Espero que os resulten interesantes :-)&amp;nbsp; &lt;br /&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.blackrabbitcoder.net/archive/2013/03/08/c.net-little-wonders-extension-methods-demystified.aspx"&gt;C#/.NET Little Wonders: Extension Methods Demystified&lt;/a&gt;       &lt;br /&gt;James Michael Hare&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.maartenballiauw.be/post/2013/03/08/Custom-media-types-for-ASPNET-Web-API-versioning.aspx" title="Custom media types for ASP.NET Web API versioning"&gt;Custom media types for ASP.NET Web API versioning&lt;/a&gt;       &lt;br /&gt;Maarten Balliauw &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeguru.com/csharp/.net/uploading-files-asynchronously-using-asp.net-web-api.htm"&gt;Uploading Files Asynchronously using ASP.NET Web API&lt;/a&gt;       &lt;br /&gt;Bipin Joshi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.west-wind.com/weblog/posts/2013/Mar/12/Using-plUpload-to-upload-Files-with-ASPNET"&gt;Using plUpload to upload Files with ASP.NET&lt;/a&gt;       &lt;br /&gt;Rick Strahl &lt;/li&gt;
&lt;li&gt;&lt;a href="http://markusgreuel.net/blog/website-performance-with-asp-net-part1-measuring"&gt;Website Performance with ASP.NET - Part1 - Measuring&lt;/a&gt;       &lt;br /&gt;Markus Greuel &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/03/08/using-namespaces-to-version-web-apis.aspx"&gt;ASP.NET Web API: Using Namespaces to Version Web APIs&lt;/a&gt;       &lt;br /&gt;Mike Watson &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/03/signalr-filters-and-servicestack/"&gt;SignalR, Filters and ServiceStack&lt;/a&gt;       &lt;br /&gt;Filip W. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/lruiz/archive/2013/03/06/asp-net-webapi-validaciones.aspx"&gt;[ASP.NET WebAPI] Validaciones: Evitar errores duplicados&lt;/a&gt;       &lt;br /&gt;Luis Ruiz Pavón &lt;/li&gt;
&lt;li&gt;&lt;a href="http://stephenwalther.com/archive/2013/03/05/security-issues-with-single-page-apps.aspx"&gt;Security Issues with Single Page Apps&lt;/a&gt;       &lt;br /&gt;Stephen Walther &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.piotrwalat.net/running-asp-net-web-api-services-under-linux-and-os-x/"&gt;Running ASP.NET Web API services under Linux and OS X&lt;/a&gt;       &lt;br /&gt;Piotr Walat &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/556995/Model-view-controller-MVC-Interview-questions-and"&gt;MVC Interview questions and answers&lt;/a&gt;       &lt;br /&gt;Shivprasad koirala &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bipinjoshi.net/articles/09bf16f8-ad91-4638-8fce-f2e286f6fe1d.aspx"&gt;Generating Short URLs using Google URL Shortener API&lt;/a&gt;       &lt;br /&gt;Bipin Joshi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/etomas/archive/2013/03/05/webapi-recibir-en-un-controlador-un-ienumerable-desde-url.aspx"&gt;WebApi–Recibir en un controlador un IEnumerable desde URL&lt;/a&gt;       &lt;br /&gt;Eduard Tomás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/etomas/archive/2013/03/04/webapi-devolver-tipos-an-243-nimos-en-xml.aspx"&gt;WebApi–Devolver tipos anónimos en XML&lt;/a&gt;       &lt;br /&gt;Eduard Tomás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/xavipaper/archive/2013/03/05/versionando-webapi-despu-233-s-del-uno-el-dos.aspx"&gt;Versionando WebApi - Después del uno, el dos&lt;/a&gt;       &lt;br /&gt;Xavier Jorge Cerdá &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/bsimser/archive/2013/03/01/convention-over-configuration-with-mvc-and-autofac.aspx"&gt;Convention over Configuration with MVC and Autofac&lt;/a&gt;       &lt;br /&gt;Bil Simser &lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/cibrax/archive/2013/03/01/asp-net-web-api-logging-and-troubleshooting.aspx"&gt;ASP.NET Web API Logging and Troubleshooting&lt;/a&gt;       &lt;br /&gt;Pablo M. Cibraro &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2013/03/04/windows-azure-updates-android-support-sql-reporting-services-active-directory-more.aspx"&gt;Windows Azure Updates: Android Support, SQL Reporting Services, Active Directory, More…&lt;/a&gt;       &lt;br /&gt;Scott Guthrie &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Conceptos/Patrones/Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/555855/Introduction-to-CQRS"&gt;Introduction to CQRS&lt;/a&gt;       &lt;br /&gt;Kanasz Robert &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.simple-talk.com/dotnet/.net-framework/dynamic-linq-queries-with-expression-trees/"&gt;Dynamic LINQ Queries with Expression Trees&lt;/a&gt;       &lt;br /&gt;Nick Harrison &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2013/03/06/knockout-js-and-mapping-from-json-to-a-custom-object-type.aspx"&gt;Knockout JS and mapping from Json to a custom object type&lt;/a&gt;       &lt;br /&gt;Derik Whittaker &lt;/li&gt;
&lt;li&gt;&lt;a href="http://wekeroad.com/2013/03/06/ember-confuses-me"&gt;EmberJS Confuses Me&lt;/a&gt;       &lt;br /&gt;Rob Conery &lt;/li&gt;
&lt;li&gt;&lt;a href="http://phpsblog.wordpress.com/2013/03/09/javascript-diferencia-entre-null-y-undefined/"&gt;Javascript: diferencia entre null y undefined&lt;/a&gt;       &lt;br /&gt;Agustín Villalba Casás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.ntotten.com/2013/02/19/building-amazing-apps-with-the-asp-net-emberjs-template/"&gt;Building Amazing Apps with the ASP.NET EmberJS Template&lt;/a&gt;       &lt;br /&gt;Nathan Totten &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobile.smashingmagazine.com/2013/03/05/building-a-better-responsive-website/"&gt;Building A Better Responsive Website&lt;/a&gt;       &lt;br /&gt;Jeremy Girard &lt;/li&gt;
&lt;li&gt;&lt;a href="http://lineadecodigo.com/html5/patrones-en-formularios-con-html5-pattern/"&gt;Patrones en formularios con HTML5 pattern&lt;/a&gt;       &lt;br /&gt;Dave Rndn &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/03/04/disabling-knockout-intellisense.aspx"&gt;Disabling Knockout Intellisense&lt;/a&gt;       &lt;br /&gt;V. Kickline &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/03/las-otras-aplicaciones/"&gt;Las otras aplicaciones&lt;/a&gt;       &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=bAckOCkIOPE:0fUcUinhrYE:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=bAckOCkIOPE:0fUcUinhrYE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=bAckOCkIOPE:0fUcUinhrYE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=bAckOCkIOPE:0fUcUinhrYE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=bAckOCkIOPE:0fUcUinhrYE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=bAckOCkIOPE:0fUcUinhrYE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=bAckOCkIOPE:0fUcUinhrYE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=bAckOCkIOPE:0fUcUinhrYE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=bAckOCkIOPE:0fUcUinhrYE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=bAckOCkIOPE:0fUcUinhrYE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/bAckOCkIOPE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/5052961407978427301/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=5052961407978427301" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/5052961407978427301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/5052961407978427301?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/bAckOCkIOPE/enlaces-interesantes-108.html" title="Enlaces interesantes 108" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-WQXObtGAL_s/UTyCRL0z8NI/AAAAAAAACxc/KA4-0uGzxkU/s72-c/image234242333.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/03/enlaces-interesantes-108.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFR3o_eSp7ImA9WhBRFEU.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-4332847971739989040</id><published>2013-03-05T09:15:00.000+01:00</published><updated>2013-03-05T13:28:36.441+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-05T13:28:36.441+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo" /><category scheme="http://www.blogger.com/atom/ns#" term="closedxml" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="componentes" /><title>Generar archivos Excel como un señor con ClosedXml</title><content type="html">&lt;img align="right" alt="Anónimo" border="0" height="112" src="http://lh5.ggpht.com/-KLgaZ2NOzPk/UR3_ooFJPxI/AAAAAAAACss/ywe-g-pYs7Y/image4%25255B1%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Anónimo" width="131" /&gt;&lt;br /&gt;
Venga, lo confieso: yo también he generado desde mis aplicaciones contenidos HTML y los he enviado al cliente en un archivo con extensión XLS, incluso modificando el content-type, para que pareciera un documento de hoja de cálculo. Durante años. Y también le he dicho a mis clientes que el molesto mensaje que aparece al abrirlo desde Excel, el que indica que el contenido del archivo no coincide con la extensión del mismo, es algo normal.&lt;br /&gt;
&lt;br /&gt;
Pero esto se acabó desde que descubrí &lt;a href="http://closedxml.codeplex.com/"&gt;ClosedXML&lt;/a&gt;, un magnífico componente para .NET basado en el &lt;a href="http://es.wikipedia.org/wiki/Office_Open_XML"&gt;estándar OpenXML&lt;/a&gt; que permite la generación de archivos Excel “de verdad”, con formato, estilos, fórmulas, rangos, filtros, y casi todo lo que se nos pueda ocurrir.&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img align="right" alt="ClosedXML" border="0" height="77" src="http://lh3.ggpht.com/-h7gw_v02P3Y/UR3_pasUCKI/AAAAAAAACs0/J8eFXPn24Vs/image8.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="ClosedXML" width="198" /&gt;ClosedXML, proyecto iniciado por &lt;a href="http://www.manueldeleon.com/"&gt;Manuel de León&lt;/a&gt; y distribuido bajo &lt;a href="http://closedxml.codeplex.com/license"&gt;licencia MIT&lt;/a&gt;, se aleja de la verbosidad y amplitud de alcance del &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=30425"&gt;Open XML SDK&lt;/a&gt; de Microsoft, ofreciendo un API mucho más natural e intuitivo exclusivamente diseñado para crear y manipular documentos Excel. De hecho, el nombre ClosedXML lo eligió después de conocer el SDK oficial y pensar “si es así como se trabaja con Open XML, preferiría utilizar algo que estuviera cerrado”, en referencia a la complejidad que el primero supone.&lt;br /&gt;
&lt;br /&gt;
Dado que se basa en Open XML, para abrir los archivos generados se necesita Excel 2007 o una versión posterior, aunque creo que ocho años después de su aparición ya podríamos considerar que es un mínimo bastante razonable ;-)&lt;br /&gt;
&lt;h3&gt;
Instalación del componente&lt;/h3&gt;
Como de costumbre, la instalación de ClosedXML la vamos a realizar a través de Nuget:&lt;br /&gt;
&lt;pre&gt;PM&amp;gt; Install-Package ClosedXML
Attempting to resolve dependency 'DocumentFormat.OpenXml (≥ 1.0)'.
Successfully installed 'ClosedXML 0.68.1'.
Successfully added 'DocumentFormat.OpenXml 1.0' to ClosedXmlDemo.Model.
Successfully added 'ClosedXML 0.68.1' to ClosedXmlDemo.Model.&lt;/pre&gt;
No me canso de repetirlo: Nuget, ¿dónde has estado todos estos años? ;-)&lt;br /&gt;
&lt;h3&gt;
Creación y salvado de un documento Excel básico (Desktop, Webforms, MVC)&lt;/h3&gt;
La creación y salvado a disco de un documento Excel es absolutamente trivial. Basta con instanciar un objeto de la clase &lt;code&gt;XLWorkBook&lt;/code&gt;, añadir una nueva hoja su colección de &lt;code&gt;Worksheets&lt;/code&gt;, e introducir valores en ella a través de su propiedad &lt;code&gt;Cell&lt;/code&gt;, como podemos observar en el código genérico mostrado a continuación:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sheet 1");
worksheet.Cell(1, 1).Value = "Hello, world!";
workbook.SaveAs("c:\\temp\\excel.xlsx");&lt;/pre&gt;
De esta forma tan simple, en &lt;em&gt;c:\temp\excel.xlsx&lt;/em&gt; tendremos lo siguiente:&lt;br /&gt;
&lt;img alt="Hoja de cálculo generada con ClosedXML" border="0" height="307" src="http://lh6.ggpht.com/-6uUiEyFKemg/UR3_qDpc1eI/AAAAAAAACs8/pU6ZzRcfq9o/image15.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Hoja de cálculo generada con ClosedXML" width="341" /&gt;&lt;br /&gt;
Si estamos desarrollando una aplicación web, cuando generamos un archivo Excel lo habitual es que lo enviemos al usuario como documento adjunto para que lo descargue y guarde en su equipo, lo que implica modificar el &lt;code&gt;content-type&lt;/code&gt; y añadir un encabezado &lt;code&gt;content-disposition&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
En este caso de usar &lt;strong&gt;WebForms&lt;/strong&gt;, el código a emplear es, poco más o menos, el siguiente:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;Response.Clear();
Response.ContentType =
     "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=\"Demo.xlsx\"");

using (var memoryStream = new MemoryStream())
{
    workbook.SaveAs(memoryStream);
    memoryStream.WriteTo(Response.OutputStream);
}
Response.End();&lt;/pre&gt;
Observad que no estamos salvando el &lt;code&gt;workbook&lt;/code&gt;&amp;nbsp; sobre un &lt;code&gt;MemoryStream&lt;/code&gt;, que luego volcamos al stream de salida para que viaje al cliente. Este doble paso, en cualquier caso bastante sencillo de implementar, se debe a que ClosedXML requiere para guardar el archivo que el stream de salida sea de avance y retroceso, y es algo que &lt;code&gt;OutputStream&lt;/code&gt; no cumple.&lt;br /&gt;
&lt;br /&gt;
En caso de tratarse de &lt;strong&gt;ASP.NET MVC&lt;/strong&gt;, el código es prácticamente el mismo, aunque lo correcto sería implementarlo en un &lt;code&gt;ActionResult&lt;/code&gt; personalizado:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;public class ExcelResult: ActionResult
{
    private readonly XLWorkbook _workbook;
    private readonly string _fileName;

    public ExcelResult(XLWorkbook workbook, string fileName)
    {
        _workbook = workbook;
        _fileName = fileName;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var response = context.HttpContext.Response;
        response.Clear();
        response.ContentType = "application/vnd.openxmlformats-officedocument." 
                             + "spreadsheetml.sheet";
        response.AddHeader("content-disposition", 
                           "attachment;filename=\""+ _fileName +".xlsx\"");

        using (var memoryStream = new MemoryStream())
        {
            _workbook.SaveAs(memoryStream);
            memoryStream.WriteTo(response.OutputStream);
        }
        response.End();
    }
}&lt;/pre&gt;
Y ya podríamos usarlo directamente desde un controlador:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;public ActionResult GenerateExcel()
{
    // Generate the workbook...
    var workbook = ClosedXmlDemoGenerator.GenerateWorkBook();

    // ... and return it to the client
    return new ExcelResult(workbook, "demo");
}&amp;nbsp;&lt;/pre&gt;
&lt;h3&gt;
Establecer valores en las celdas&lt;/h3&gt;
Las celdas podemos referenciarlas utilizando la propiedad &lt;code&gt;Cell&lt;/code&gt; de los objetos &lt;code&gt;IXLWorksheet&lt;/code&gt;, y podemos hacerlo indicando su número de fila y columna o mediante el nombre usado normalmente en el mismo Excel:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell(1, 1).Value = "Hello, world!";
worksheet.Cell("A2").Value = "How are you?";&lt;/pre&gt;
&lt;br /&gt;
&lt;img alt="Establecer valores de celdas con ClosedXML" border="0" height="103" src="http://lh5.ggpht.com/-tQJ3PBdn-XU/UR3_qp1FNoI/AAAAAAAACtE/kltWk1ZRlO8/image18.png?imgmax=800" title="Establecer valores de celdas con ClosedXML" width="156" /&gt;&lt;br /&gt;
Por supuesto, &lt;strong&gt;los valores pueden ser de todo tipo&lt;/strong&gt;, de hecho la propiedad &lt;code&gt;Value&lt;/code&gt; que establecemos es de tipo &lt;code&gt;object&lt;/code&gt;, aunque obviamente sólo serán reconocidos los tipos habituales de Excel:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell("A2").Value = "Text";
worksheet.Cell("B2").Value = "Hi!!";
worksheet.Cell("A3").Value = "Integer";
worksheet.Cell("B3").Value = 3;
worksheet.Cell("A4").Value = "Decimal";
worksheet.Cell("B4").Value = 3.5;
worksheet.Cell("A5").Value = "Boolean";
worksheet.Cell("B5").Value = true;
worksheet.Cell("A6").Value = "DateTime";
worksheet.Cell("B6").Value = DateTime.Now;
worksheet.Cell("A7").Value = "Object";
worksheet.Cell("B7").Value = new InvoiceDetails();&lt;/pre&gt;
&lt;img alt="Tipos de datos en ClosedXML" border="0" height="160" src="http://lh5.ggpht.com/-_BC2es6FmaY/UR3_rXzS__I/AAAAAAAACtM/UtDRIIDmHiE/image21.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Tipos de datos en ClosedXML" width="336" /&gt;&lt;br /&gt;
También podemos &lt;strong&gt;crear rangos y establecerles valores &lt;/strong&gt;de forma directa:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Range("A1:D5").Value = "Hi!";&lt;/pre&gt;
&lt;img alt="Valores de rangos en ClosedXML" border="0" height="121" src="http://lh4.ggpht.com/-Glu-Gekp6TE/UR3_r7qnI4I/AAAAAAAACtU/4Nn2Q8zLJ88/image24.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Valores de rangos en ClosedXML" width="282" /&gt;&lt;br /&gt;
E incluso podemos &lt;strong&gt;asignar directamente colecciones de datos&lt;/strong&gt; como objetos de tipo &lt;code&gt;DataTable&lt;/code&gt; o &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell("A1").Value = new[]
             {
                  new { Id=1, Name="John", Age = 42},
                  new { Id=2, Name="Peter", Age = 23},
                  new { Id=3, Name="Mary", Age = 32},
             };&lt;/pre&gt;
&lt;img alt="Uso de conjuntos de datos en ClosedXML" border="0" height="100" src="http://lh4.ggpht.com/-nYDa_trqIXM/UR3_sllsh0I/AAAAAAAACtc/wVG93AWsRBo/image27.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Uso de conjuntos de datos en ClosedXML" width="282" /&gt;&lt;br /&gt;
&lt;h3&gt;
Formato de celdas&lt;/h3&gt;
ClosedXML pone a nuestra disposición un rico conjunto de propiedades y métodos para dar formato a las celdas o a rangos de ellas. La sintaxis fluida que podemos utilizar facilita mucho el descubrimiento de las posibilidades de formateo, y la implementación de un código muy limpio y comprensible:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Range("B2:E5")
         .SetValue("Hi!")
         .Style.Border.SetOutsideBorder(XLBorderStyleValues.Dotted);

worksheet.Range("B3:E5").Style
         .Font.SetFontSize(10)
         .Font.SetFontColor(XLColor.Gray)
         .Font.SetItalic(true);

worksheet.Range("B2:E2").Style
         .Font.SetFontSize(13)
         .Font.SetBold(true)
         .Font.SetFontColor(XLColor.White)
         .Fill.SetBackgroundColor(XLColor.Gray);&lt;/pre&gt;
&lt;img alt="Formateo de celdas con ClosedXML" border="0" height="145" src="http://lh4.ggpht.com/-bHvGJvq_ac8/UR3_tWFtyZI/AAAAAAAACtk/GEqowv0ALgE/image30.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Formateo de celdas con ClosedXML" width="408" /&gt;&lt;br /&gt;
También podemos, por supuesto, establecer la &lt;strong&gt;alineación&lt;/strong&gt; de celdas o rangos, &lt;strong&gt;unir celdas&lt;/strong&gt;, o establecer el &lt;strong&gt;formato de visualización&lt;/strong&gt; de sus valores. Vemos también, de paso, una forma más fluida de establecer los valores, usando &lt;code&gt;SetValue()&lt;/code&gt;:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell("A1")
         .SetValue(1234.56789)
         .Style.NumberFormat.SetFormat("#,##0.#0");

worksheet.Cell("A2")
         .SetValue(DateTime.Now)
         .Style.DateFormat.SetFormat("dd-mm-yyyy")
               .Alignment.SetVertical(XLAlignmentVerticalValues.Center);

worksheet.Range("A3:B4")
         .Merge()
         .SetValue("Merged cells")
         .Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
               .Alignment.TextRotation = 15; // Degrees&lt;/pre&gt;
&lt;img alt="Formateo de celdas con ClosedXML" border="0" height="152" src="http://lh5.ggpht.com/-L4dzpAka0g0/UR3_t5t4Q0I/AAAAAAAACts/-7VsC97T2_g/image36.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Formateo de celdas con ClosedXML" width="215" /&gt;&lt;br /&gt;
&lt;h3&gt;
Uso de fórmulas&lt;/h3&gt;
Esto es especialmente interesante, pues no había forma de conseguirlo cuando exportábamos archivos HTML, CSV o similares, en los que sólo importaba el valor de las celdas. Con ClosedXML tenemos total libertad para &lt;strong&gt;introducir fórmulas&lt;/strong&gt; en las celdas; de esta forma, no sólo estaremos enviando al usuario un conjunto estático de datos, sino una completa hoja Excel que puede modificar (si nos interesa, claro) y usar para su trabajo:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell("B2")
    .SetValue("Number")
    .Style.Font.SetBold(true);

for (int i = 1; i &amp;lt;= 5; i++)
{
    worksheet.Cell(3+i, 2).Value = i;
}

worksheet.Cell("A9").SetValue("Total");
worksheet.Cell("B9")
    .SetFormulaA1("=SUM(B3:B8)")
    .Style.Border.SetTopBorder(XLBorderStyleValues.Medium);&lt;/pre&gt;
&lt;br /&gt;
&lt;img alt="Fórmulas en ClosedXML" border="0" height="221" src="http://lh6.ggpht.com/-17y2yRo5X5k/UR3_uh3mNbI/AAAAAAAACt0/zy7wk1jMQ2E/image39.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Fórmulas en ClosedXML" width="215" /&gt;&lt;br /&gt;
&lt;h3&gt;
Otras características interesantes&lt;/h3&gt;
ClosedXML soporta muchísimas funcionalidades adicionales a las descritas hasta el momento. Voy a citar algunas más que me han llamado la atención.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, tenemos la posibilidad de &lt;strong&gt;añadir filtros y ordenación por columna a los datos&lt;/strong&gt;, de manera que el usuario pueda realizar una selección de la información recibida:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell("A1").Value = "Id";
worksheet.Cell("B1").Value = "Name";
worksheet.Cell("C1").Value = "Age";
worksheet.Cell("A2").Value = new[]
     {
          new { Id=1, Name="John", Age = 42},
          new { Id=2, Name="Peter", Age = 23},
          new { Id=3, Name="Mary", Age = 32},
          new { Id=4, Name="John", Age = 45},
     };
worksheet.RangeUsed().SetAutoFilter();&lt;/pre&gt;
&lt;img alt="Filtros de datos con ClosedXML" border="0" height="141" src="http://lh4.ggpht.com/-YZwvE1WF6Pw/UR3_vS8hZaI/AAAAAAAACt8/r5wb2ReXt2o/image42.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Filtros de datos con ClosedXML" width="281" /&gt;&lt;br /&gt;
Otro aspecto que puede ser interesante es la &lt;strong&gt;protección de celdas&lt;/strong&gt; para que el usuario no pueda modificar sus valores. En el siguiente ejemplo, se protege la hoja completa con un password, de forma que no podrá ser editada, excepto las tres primeras columnas de la primera fila, que el usuario podrá editar con total libertad:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Protect("1234"); // Locks the worksheet and sets the password
worksheet.Range("A1:C1")
    .Style.Protection.SetLocked(false); // Unlocks the range&lt;/pre&gt;
&lt;img alt="Protección de hojas con ClosedXML" border="0" height="153" src="http://lh6.ggpht.com/-HfOLiaoI_08/UR3_v-adCfI/AAAAAAAACuE/VVRdbqh6zjA/image4.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Protección de hojas con ClosedXML" width="662" /&gt;&lt;br /&gt;
También, si nos interesa que el usuario edite valores de las celdas, es posible especificar restricciones en los datos de entrada, como su tipo, rango de valores permitidos, selección de valores desde desde un desplegable, etc.:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell("A1").Value = "Digit 0-9:";
worksheet.Cell("B1").DataValidation.WholeNumber.Between(0, 9);

worksheet.Cell("A2").Value = "Two:";
worksheet.Cell("B2").DataValidation.WholeNumber.EqualTo(2);

worksheet.Cell("A3").Value = "Date:";
worksheet.Cell("B3").DataValidation.AllowedValues = XLAllowedValues.Date; // Only dates
worksheet.Cell("B3").DataValidation.ErrorMessage = "Only dates, please";&lt;/pre&gt;
&lt;img alt="Validación de datos de entrada con ClosedXML" border="0" height="242" src="http://lh3.ggpht.com/-ZL9__hd6gLg/UR3_whgL86I/AAAAAAAACuM/eUHVh7K9Z6Q/image%25255B3%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 10px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Validación de datos de entrada con ClosedXML" width="472" /&gt;&lt;br /&gt;
Incluso podemos &lt;strong&gt;añadir comentarios&lt;/strong&gt; a celdas:&lt;br /&gt;
&lt;pre class="brush: csharp;"&gt;worksheet.Cell("B2").SetValue("TOTAL:")
    .Style.Font.SetBold(true)
          .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Right);

worksheet.Cell("C2").Style.NumberFormat.SetFormat("#,##0.#0");
worksheet.Cell("C2").SetValue(9876543.21)
    .Comment.SetAuthor("jmaguilar")
    .AddText("Danger: this number seems odd!");&lt;/pre&gt;
&lt;img alt="Añadir comentarios con ClosedXML" border="0" height="175" src="http://lh6.ggpht.com/-fzzwdVZ-kt0/UR3_xd3_DPI/AAAAAAAACuU/dQjAaLsdMMk/image%25255B6%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Añadir comentarios con ClosedXML" width="407" /&gt;&lt;br /&gt;
&lt;h3&gt;
… y vamos a dejarlo aquí ;-)&lt;/h3&gt;
Bueno, pues tras este largo post espero que más o menos os haya quedado claro el uso y posibilidades de este magnífico componente, y que os hayan entrado muchas ganas de probarlo. Seguro cambiará la forma en que generáis los archivos Excel desde vuestras aplicaciones y abrirá nuevas posibilidades, hasta ahora difícilmente implementables usando otras alternativas.&lt;br /&gt;
&lt;br /&gt;
También, recomendaros que no dejéis de leer &lt;a href="http://closedxml.codeplex.com/documentation"&gt;la documentación&lt;/a&gt;, que es bastante extensa y detallada, donde podréis ver muchas más características que no he comentado para no hacer un post más interminable de lo que ya es ;-)&lt;br /&gt;
&lt;br /&gt;
Podéis descargar un &lt;a href="https://skydrive.live.com/?cid=c251c4580abb8105&amp;amp;id=C251C4580ABB8105%21572" target="_blank"&gt;proyecto de prueba desde mi Skydrive&lt;/a&gt;, donde veréis en funcionamiento la generación de archivos Excel desde una aplicación de&lt;strong&gt; consola, ASP.NET Webforms, y MVC.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Qzwf7woFck0:x01mDtfi2fI:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Qzwf7woFck0:x01mDtfi2fI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Qzwf7woFck0:x01mDtfi2fI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Qzwf7woFck0:x01mDtfi2fI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=Qzwf7woFck0:x01mDtfi2fI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Qzwf7woFck0:x01mDtfi2fI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=Qzwf7woFck0:x01mDtfi2fI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Qzwf7woFck0:x01mDtfi2fI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=Qzwf7woFck0:x01mDtfi2fI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=Qzwf7woFck0:x01mDtfi2fI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/Qzwf7woFck0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/4332847971739989040/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=4332847971739989040" title="6 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/4332847971739989040?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/4332847971739989040?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/Qzwf7woFck0/generar-archivos-excel-como-un-senor.html" title="Generar archivos Excel como un señor con ClosedXml" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-KLgaZ2NOzPk/UR3_ooFJPxI/AAAAAAAACss/ywe-g-pYs7Y/s72-c/image4%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/03/generar-archivos-excel-como-un-senor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAGQXs7eyp7ImA9WhBRE0U.&quot;"><id>tag:blogger.com,1999:blog-27752126.post-344638057761802326</id><published>2013-03-04T09:12:00.000+01:00</published><updated>2013-03-04T09:12:00.503+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-04T09:12:00.503+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enlaces" /><title>Enlaces interesantes 107</title><content type="html">&lt;img align="right" alt="Enlaces" border="0" height="129" src="http://lh6.ggpht.com/-gRUNH0c7ZLM/UTOSJX7lOyI/AAAAAAAACxM/qF2FzOtceMY/image23424233.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Enlaces" width="172" /&gt;Estos son los enlaces que he recopilado del 25 de febrero al 1 de marzo de 2013. Espero que os resulten interesantes :-)&lt;br /&gt;
&lt;h4&gt;
.Net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.newmodifier.com/2013/02/6-simple-newer-cnet-features-you-may.html"&gt;6 Simple New(er) C#/.Net features you may have missed&lt;/a&gt;       &lt;br /&gt;Brian Rosamilia &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/blogs/peterritchie/archive/2013/02/13/async-await-gotchas.aspx"&gt;async/await Tips&lt;/a&gt;       &lt;br /&gt;Peter Ritchie &lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/02/12/you-want-to-build-web-software-with-c.aspx"&gt;You Want To Build Web Software with C#?&lt;/a&gt;       &lt;br /&gt;K. Scott Allen &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blackwasp.co.uk/PriorityQueue.aspx"&gt;A Generic Priority Queue&lt;/a&gt;       &lt;br /&gt;Richard Carr&lt;a name='more'&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Asp.net&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.piotrwalat.net/hmac-authentication-in-asp-net-web-api/" title="HMAC authentication in ASP.NET Web API"&gt;HMAC authentication in ASP.NET Web API&lt;/a&gt;       &lt;br /&gt;Piotr Walat &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/02/25/translating-odata-queries-to-hql.aspx"&gt;Translating OData queries to HQL&lt;/a&gt;       &lt;br /&gt;Raghuram N. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/ranw/archive/2013/02/26/logging-with-signalr.aspx"&gt;Logging with SignalR&lt;/a&gt;       &lt;br /&gt;Ran Wahle &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/02/asp-net-web-api-and-protocol-buffers/"&gt;ASP.NET Web API and Protocol Buffers&lt;/a&gt;       &lt;br /&gt;Filip W. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/02/20/pre-release-of-asp-net-scaffolding-with-a-web-forms-scaffold-generator.aspx"&gt;Pre-release of ASP.NET Scaffolding with a Web Forms scaffold generator&lt;/a&gt;       &lt;br /&gt;Anton Babadjanov &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/etomas/archive/2013/02/20/como-hacer-seguros-tus-servicios-webapi.aspx"&gt;Como hacer seguros tus servicios WebApi&lt;/a&gt;       &lt;br /&gt;Eduard Tomás &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mrubino.net/2013/02/25/webapi-odata-queries/"&gt;WebApi &amp;amp; oData Queries&lt;/a&gt;       &lt;br /&gt;Marc Rubiño &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.johnpapa.net/asp-net-spa-templates/"&gt;ASP.NET SPA Templates Released&lt;/a&gt;       &lt;br /&gt;John Papa &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/02/21/mvc-single-page-application-template-for-asp-net-and-web-tools-2012-2.aspx"&gt;MVC Single Page Application Template for ASP.NET and Web Tools 2012.2&lt;/a&gt;       &lt;br /&gt;Xinyang Qiu &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/ReleasedASPNETAndWebTools20122InContext.aspx"&gt;Released: ASP.NET and Web Tools 2012.2 in Context&lt;/a&gt;       &lt;br /&gt;Scott Hanselman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.returngis.net/2013/02/cross-origin-resource-sharing"&gt;Cross-Origin Resource Sharing&lt;/a&gt;       &lt;br /&gt;Gisela Torres &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.strathweb.com/2013/02/but-i-dont-want-to-call-web-api-controllers-controller/"&gt;But I don’t want to call Web Api controllers “Controller”!&lt;/a&gt;       &lt;br /&gt;Philip W.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Data access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2013/03/03/generating-entity-data-model-diagram-from-ef-code-first-dbcontext.aspx"&gt;Generating Entity Data Model Diagram from EF Code First DbContext&lt;/a&gt;       &lt;br /&gt;Shiju Varghese&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.newmodifier.com/2013/03/a-brief-entity-framework-codebase.html"&gt;A brief Entity Framework Codebase Overview&lt;/a&gt;       &lt;br /&gt;Brian Rosamilia&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/adonet/archive/2013/02/27/ef6-alpha-3-available-on-nuget.aspx"&gt;EF6 Alpha 3 Available on NuGet&lt;/a&gt;       &lt;br /&gt;Rowan Miller &lt;/li&gt;
&lt;li&gt;&lt;a href="http://geeks.ms/blogs/unai/archive/2013/02/27/ef-6-snack-preview-de-maptostoreprocedures-en-ef-6.aspx"&gt;EF 6: Snack Preview de MapToStoreProcedures en EF 6&lt;/a&gt;       &lt;br /&gt;Unai Zorrilla &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/Articles/545395/A-Beginners-Tutorial-on-Understanding-Table-Per-Ty"&gt;A Beginner's Tutorial on Understanding Table Per Type(TPH) Inheritance in Entity Framework&lt;/a&gt;       &lt;br /&gt;Rahul Rajat Singh &lt;/li&gt;
&lt;li&gt;&lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2013/02/12/entity-frame-performance-gotcha.aspx"&gt;Entity Framework Performance Gotcha&lt;/a&gt;       &lt;br /&gt;Derik Whittaker &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/rickandy/archive/2013/02/12/seeding-and-debugging-entity-framework-ef-dbs.aspx"&gt;Seeding and Debugging Entity Framework (EF) DBs&lt;/a&gt;       &lt;br /&gt;Rick Anderson &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Html/Css/Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://css.dzone.com/articles/templating-javascript"&gt;Templating in Javascript&lt;/a&gt;       &lt;br /&gt;Karl Agius &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.html5rocks.com/en/tutorials/webcomponents/template/"&gt;HTML5’s new Template tag. Standarizing client-side templating&lt;/a&gt;       &lt;br /&gt;Eric Bidelman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://html5doctor.com/html5-forms-input-types/"&gt;HTML5 forms input types&lt;/a&gt;       &lt;br /&gt;Richard Clark &lt;/li&gt;
&lt;li&gt;&lt;a href="http://html5doctor.com/html5-forms-introduction-and-new-attributes/"&gt;HTML5 forms introduction and new attributes&lt;/a&gt;       &lt;br /&gt;Richard Clark &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.developer.com/lang/top-10-things-to-know-about-typescript.html"&gt;Top 10 Things to Know about TypeScript&lt;/a&gt;       &lt;br /&gt;Bipin Joshi &lt;/li&gt;
&lt;li&gt;&lt;a href="http://html5doctor.com/the-progress-element/"&gt;The progress element&lt;/a&gt;       &lt;br /&gt;Ian Devlin &lt;/li&gt;
&lt;li&gt;&lt;a href="http://alistapart.com/article/environmental-design-with-the-device-api"&gt;Environmental Design with the Device API&lt;/a&gt;       &lt;br /&gt;Tim Wright &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.senky.me/en/development/lazy-parsing-in-javascript.html"&gt;Lazy parsing in javascript&lt;/a&gt;       &lt;br /&gt;Jakub Senko &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Visual Studio/Complementos/Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/articles/general/team-collaboration-with-github/"&gt;Team Collaboration With Github&lt;/a&gt;       &lt;br /&gt;Sayanee Basu &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/typescript/archive/2013/02/27/announcing-typescript-0-8-3.aspx"&gt;Announcing TypeScript 0.8.3&lt;/a&gt;       &lt;br /&gt;Jonathan Turner &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/BeingARemoteWorkerSucksLongLiveTheRemoteWorker.aspx"&gt;Being a Remote Worker Sucks - Long Live the Remote Worker&lt;/a&gt;       &lt;br /&gt;Scott Hanselman &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.koalite.com/2013/02/es-peligroso-duplicar-conceptos-no-codigo/"&gt;Es peligro duplicar conceptos, no código&lt;/a&gt;       &lt;br /&gt;Juan María Hernández &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.genbeta.com/navegadores/opera-cede-y-se-pasa-a-webkit-tanto-en-movil-como-en-escritorio"&gt;Opera cede y se pasa a WebKit tanto en móvil como en escritorio&lt;/a&gt;       &lt;br /&gt;Guillermo Julián &lt;/li&gt;
&lt;li&gt;&lt;a href="http://unabrevehistoria.blogspot.com.es/2013/02/mapas-superpuestos-proyecciones-cartograficas.html" title="Mapas Superpuestos II"&gt;Mapas Superpuestos II&lt;/a&gt;       &lt;br /&gt;David Piñeiro &lt;/li&gt;
&lt;/ul&gt;
Y no olvidéis que normalmente podéis seguir esta información en vivo y en directo desde &lt;a href="http://www.facebook.com/variablenotfound"&gt;Variable not found en Facebook&lt;/a&gt;, o a través de &lt;a href="http://twitter.com/jmaguilar"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Publicado en &lt;a href="http://www.variablenotfound.com/"&gt;Variable not found&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/vnf?a=2rYjI2jCXGI:-5Ny8LgBD1M:ecdYMiMMAMM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=ecdYMiMMAMM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=2rYjI2jCXGI:-5Ny8LgBD1M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=2rYjI2jCXGI:-5Ny8LgBD1M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=2rYjI2jCXGI:-5Ny8LgBD1M:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=2rYjI2jCXGI:-5Ny8LgBD1M:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=2rYjI2jCXGI:-5Ny8LgBD1M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=2rYjI2jCXGI:-5Ny8LgBD1M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=2rYjI2jCXGI:-5Ny8LgBD1M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?i=2rYjI2jCXGI:-5Ny8LgBD1M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/vnf?a=2rYjI2jCXGI:-5Ny8LgBD1M:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/vnf?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/vnf/~4/2rYjI2jCXGI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.variablenotfound.com/feeds/344638057761802326/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=27752126&amp;postID=344638057761802326" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/344638057761802326?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/27752126/posts/default/344638057761802326?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/vnf/~3/2rYjI2jCXGI/enlaces-interesantes-107.html" title="Enlaces interesantes 107" /><author><name>José M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_O9D62hXq-ng/S6Hfc0RM0YI/AAAAAAAABOg/bEEA3DZ7Uac/S220/fb1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-gRUNH0c7ZLM/UTOSJX7lOyI/AAAAAAAACxM/qF2FzOtceMY/s72-c/image23424233.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.variablenotfound.com/2013/03/enlaces-interesantes-107.html</feedburner:origLink></entry></feed>
