<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Indalcasa</title>
	
	<link>http://www.indalcasa.com</link>
	<description>Un blog de programación c#, aspnet mvc, jquery</description>
	<lastBuildDate>Thu, 14 Mar 2013 14:32:44 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Indalcasa" /><feedburner:info uri="indalcasa" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Software How-To</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Tech News</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Gadgets</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Games &amp; Hobbies/Video Games</media:category><itunes:explicit>no</itunes:explicit><itunes:subtitle>Un blog de programación c#, aspnet mvc, jquery</itunes:subtitle><itunes:category text="Technology"><itunes:category text="Software How-To" /></itunes:category><itunes:category text="Technology"><itunes:category text="Tech News" /></itunes:category><itunes:category text="Technology"><itunes:category text="Gadgets" /></itunes:category><itunes:category text="Games &amp; Hobbies"><itunes:category text="Video Games" /></itunes:category><item>
		<title>Publicada la versión 0.8.53 de w2s cloud ide</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/cHh1iA2je3k/</link>
		<comments>http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/publicada-la-version-0-8-53-de-w2s-cloud-ide/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 14:32:19 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[w2s]]></category>
		<category><![CDATA[altairstudios]]></category>
		<category><![CDATA[ide]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=1000</guid>
		<description><![CDATA[Os traigo buenas nuevas y es que hace poco se ha liberado la versión 0.8.53 de nuestro proyecto w2s cloud ide. En esta versión hemos trabajado para solucionar problemas, automatizar tareas, aunque aún no es suficiente y ofrecer algunas mejoras que suponen un importante avance en el desarrollo  de la herramienta. Cabe destacar en esta&#8230; <a href="http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/publicada-la-version-0-8-53-de-w2s-cloud-ide/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a class="thumbnail alignleft" href="http://www.indalcasa.com/wp-content/uploads/2013/02/w2s-1.png"><img class="size-medium wp-image-972" alt="w2s" src="http://www.indalcasa.com/wp-content/uploads/2013/02/w2s-1-300x166.png" width="300" height="166" /></a>Os traigo buenas nuevas y es que hace poco se ha liberado la <strong>versión 0.8.53</strong> de nuestro proyecto <a title="w2s cloud ide" href="http://www.w2s.me"><strong>w2s cloud ide</strong></a>. En esta versión hemos trabajado para solucionar problemas, automatizar tareas, aunque aún no es suficiente y ofrecer algunas mejoras que suponen un importante avance en el desarrollo  de la herramienta.</p>
<p>Cabe destacar en esta <strong>versión de w2s</strong> los avances que se han realizado sobre la <strong>configuración y compilación de proyectos de .Net</strong>, así como poder dar soporte a <strong>python</strong>, con <strong>django</strong> a la cabeza. También es importante el cambio de la forma de visualizar los errores, de una linea roja completa, para indicar el error, a un ligero subrayado al lugar del error, así como la posibilidad de cambiar el template de colores no solo del código, sino del ide completo, que ahora se puede oscurecer o clarecer y sigue todo una consonancia.</p>
<p>Os dejo la lista completa de con todos los cambios:</p>
<p>Correcciones</p>
<ul>
<li><span style="line-height: 13px;">Ahora el visor de imagenes siempre muestra las dimensiones de la imagen y no 0&#215;0 cuando la imagen no estaba cacheada.</span></li>
</ul>
<p>Mejoras</p>
<ul>
<li>Ahora se pueden crear nuevos proyectos con templates</li>
<li>Se añade un validador de css, que nos corrige y hace sugerencias acerca de nuestro código css</li>
<li>Se actualiza el editor con multiples mejoras, entre algunas, cabe destacar que ahora los errores no resaltan la linea completa, sino que muestra un subrayado rojo para los errores y amarillo para las advertencias.</li>
<li><span style="line-height: 13px;">Añadido soporte de django al ide en general</span></li>
<li>Al crear un nuevo template de proyecto, ya disponemos de uno para django</li>
<li>Se añaden al menu contextual una nueva sección django con las subopciones: runserver, stopserver, syncdb y collectstatics</li>
<li>Se recoloca la opción de compilar un proyecto de c# para que este dentro de csharp &gt; compile</li>
<li>Se añade soporte de jpeg al visor de imagenes</li>
<li>En c#, las referencias a otros proyectos ahora son copiadas directamente a nuestro proyecto cuando compilamos</li>
<li>Se añade soporte multicultural (multiidioma) a los proyectos de c#, permitiendo así crear librerias localizadas.</li>
<li>Se añade un generador de archivos de recursos para .Net, que compilan un xml de resx y lo convierten en recursos embebidos para los archivos neutrales y librerias compiladas satelite para las externas.</li>
<li>Añadido autocompletado de código en c# y python. Ahora el código se autocompleta en c#, python, javascript y html5.</li>
<li>Añadidos puntos de interrupción a c# aunque aún no se puede depurar.</li>
<li>Añadidos templates para el ide, al oscurecer el editor de codigo, nuestro ide (menu, navegación, consola, etc) también cambia de color.</li>
</ul>
<p>Planificadas</p>
<ul>
<li>Permitir la opción de manterner la sesión abierta permanentemente.</li>
<li>Añadir un contralador al ide para mostrar un login si nuestra sesión ha expirado.</li>
<li>Permitir borrar proyectos de forma segura.</li>
<li>Depurar proyectos de c#</li>
<li>Permitir mover carpetas y ficheros entre si</li>
<li>Permitir renombrar ficheros y directorios</li>
<li>Permitir autoocultar tanto la consola como el menú de navegación</li>
<li>Integración con GIT.</li>
<li>Publicación por FTP</li>
<li>Compartir proyectos entre usuarios</li>
<li>Añadir tareas a los proyectos</li>
</ul>
<p>Recordad que estamos abiertos a sugerencias y si las tenéis, podeis dejarnoslas en los comentarios y las estudiaremos para implementarlas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/publicada-la-version-0-8-53-de-w2s-cloud-ide/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/publicada-la-version-0-8-53-de-w2s-cloud-ide/</feedburner:origLink></item>
		<item>
		<title>Modas y versiones o como pasar no actualizar a sacar verisones como churros</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/ePjGGAgOpOY/</link>
		<comments>http://www.indalcasa.com/navegadores/modas-y-versiones-o-como-pasar-no-actualizar-a-sacar-verisones-como-churros/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 15:50:28 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[versiones]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=997</guid>
		<description><![CDATA[Hacia tiempo que no escribia un post incendiario y creo que hoy es un buen día para ello. Últimamente estoy viendo una moda en las versiones de las aplicaciones que yo clasificaría en la de &#8220;estamos todos locos&#8221; o como diría vayavoragine &#8220;vamos a morir todos&#8221; y es que últimamente aparecen versiones como churros. Pero&#8230; <a href="http://www.indalcasa.com/navegadores/modas-y-versiones-o-como-pasar-no-actualizar-a-sacar-verisones-como-churros/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a class="alignleft thumbnail" href="http://www.indalcasa.com/wp-content/uploads/2012/10/enter-key-apple.jpg"><img class="size-medium wp-image-891" alt="enter-key-apple" src="http://www.indalcasa.com/wp-content/uploads/2012/10/enter-key-apple-300x168.jpg" width="300" height="168" /></a>Hacia tiempo que no escribia un post incendiario y creo que hoy es un buen día para ello. Últimamente estoy viendo una moda en las <strong>versiones de las aplicaciones</strong> que yo clasificaría en la de &#8220;estamos todos locos&#8221; o como diría vayavoragine &#8220;vamos a morir todos&#8221; y es que últimamente aparecen versiones como churros. Pero voy a hacer un poco de abuelo cebolleta y os voy a contar como ha evolucionado la moda con el paso de los últimos 15 o 20 años en la industria del software para que os hagais un poco a la idea de este brutal cambio.</p>
<p>Cuando Adan y Eva andaban por el paraiso y cogiendo la manzana prohibida acabaron por NextStep, alla por los años 80 y 90, las versiones del software era como un buen artículo de la Wikipedia expondría y es que son numeradas con<strong> {version}.{subversion}.{revision}.{commit,fecha,codigoquequeramos</strong>}.</p>
<p>La idea es que nuestra <strong>versión</strong> solo se actualiza cuando sufre cambios importantes y que afectan tanto que podría significar que se trata de una <strong>version completamente nueva</strong>, aquí podemos poner como ejemplos: una reescritura del código, cambio de lenguajes o librerías, o un cojunto de tantos cambios de golpe que podamos considerar que es un nuevo programa y de ahi su salto de version. Muchas veces tambien se asocia a un cambio de diseño, sobre todo en <strong>versiones web</strong>.</p>
<p>La <strong>subversión</strong> (con confundir con SVN), hace referencia a cambios, que aunque también grandes, no varian brutalmente el diseño de la web, por ejemplo añadir una o varias nuevas funcionalides. Imaginemos que tenemos wordpress y de repente hay una <strong>nueva funcionalidad</strong> que añade un nuevo módulo de galeria de fotos, esto sería una <strong>subversión</strong>, pero si por el contrario, la funcionalidad fuera permitir (de forma nativa y sin plugins) un sistema de multidioma para los artículos que conlleva la reescritura de medio core de wordpress, entonces, se podría considerar una <strong>versión nueva</strong>.</p>
<p>De <strong>revisión</strong> hasta el final, es algo opcional y solo <strong>informativo</strong>, normalmente la revision suelen ser las releases oficiales, aunque no se hayan hecho públicas, por ejemplo, cada vez que compilamos para sacar una versión en producción o en <strong>entornos de desarrollo</strong>, podríamos considerarlo como <strong>revisión</strong> y puede tener pocos o ningún cambio. Igual pasa con los siguientes parámetros, que suelen hacer referencia, si es que se usan, a número de commit en el <strong>control de código</strong>, la fecha del día, un número aleatorio o algún código que haga referencia a la fecha y número de veces que hemos compilado.</p>
<p>Hasta aquí la explicación, ahora vamos con la historia. Hace años se respetaba esta teoría en mayor o menor medida, <strong>cada versión nueva era un software nuevo</strong>, cientos de <strong>funcionalidades</strong> nuevas, mejoras importantes, rediseños completos, algo grande y por tanto, las <strong>versiones de los software</strong> eran pequeñas y una buena muestra es el propio <strong>Microsoft Windows</strong> que en 30 años y <strong>14 versiones oficiales</strong>, realmente la v<strong>ersion de Windows 8 es la 6.2.9200</strong>. A veces se daba el caso en que algún <strong>software</strong>, para competir un poco, se saltaba alguna versión para dar mas apariencia de <strong>software maduro</strong>, como por ejemplo y sin salir del ejemplo de <strong>Microsoft</strong>, nos encontramos con <strong>SQL Server</strong>, que <strong>salto de la versión 1.1 a la 4.21</strong> haciendo un chasquido de dedos&#8230; y ¿Dónde quedaban la <strong>versión</strong> 2 y 3? Pues cuando le preguntaron esto, como si de guionistas de Lost se trataran, con otro chasquido de dedos, estabamos ante la <strong>versión</strong> 6 ¿Y la 5? y lo que sería la llegada a la normalidad en las <strong>versiones de SQL Server</strong>.</p>
<p>Algunos pensaran, que <strong>Microsoft</strong>, que malo es, vade retro, pero en realidad era una práctica común cuando un <strong>software</strong> se quedaba atras y es que por aquella época, Oracle con 15 años mas de desarrollo a sus espaldas, contaba con su versión 7 de base de datos, mientras que <strong>SQL Server</strong> solo la 1.1, por lo que se vieron obligados a saltar hasta una <strong>versión</strong> 6, indicando que eran inferiores a <strong>Oracle</strong> pero no estaban tan lejos. Caso así encontramos a <strong>Firefox</strong>, que el pobre, tuvo que optar por la moda del <strong>rapid release</strong> para poder competir con <strong>Chrome</strong> que saca <strong>versiones</strong> como churros.</p>
<p>¿Qué es eso del <strong>rapid release</strong>? Es cambiar la forma de <strong>obtener versiones</strong>, en lugar de tener varios <strong>branchs de desarrollo en versiones diferentes</strong>, las  versiones nacen y mueren rápidamente para centrar todo el esfuerzo en una funcionalidad, sacarla con una versión y pasar a la siguiente. Esto tiene cierta lógica en <strong>desarrollos en producción</strong> y que no necesite de excesivo testeo, por ejemplo, implementar en el caso de <strong>Firefox</strong>, ciertas <strong>funcionalidades experimentales de HTML5</strong> que pueden fallar pero que de entrada funcionan mas o menos.</p>
<p>De todos es conocido que <strong>Google Chrome</strong>, utiliza <strong>rapid release</strong>, que se puede ver como en cuestión de 3 años han sacado 25 <strong>versiones</strong> y para no quedar descolgado, <strong>Firefox</strong> se ha subido al carro del <strong>rapid release</strong>. Ya con esto nos podemos echar en cierta medida las manos a la cabeza, ya que cada mes o dos meses tenemos una <strong>nueva versión</strong>, pero el colmo ha sido <strong>Linux</strong>. Hace como un año, leia la noticia que la <strong>versión del Kernel</strong> de <strong>Linux</strong> iba a ser actualizada hasta la <strong>versión 3</strong>, no por los cambios que conllevaba, sino por pasar de la <strong>version 2.6</strong> en la que llevaba anclada prácticamente 6 años. Cual es mi sorpresa que ayer leia que se había publicado la <strong>versión 3.8 del Kernel de Linux</strong> y es que habían publicado <strong>8 subversiones</strong>.</p>
<p>Cada día hay mas proyecto/empresas que adoptan el rapid release y aunque cada uno pone las <strong>versiones</strong> que les da la gana, digo yo, si seguimos sacando versiones como churros, apareceran doodle por <strong>versión en Chrome</strong>, tal como desactivar el modo incognito en la <strong>version</strong> 69, o haciendo referencia al hombre el la luna. Lo curioso del caso es que, hace unos años, habia otra moda, la <strong>moda del &#8220;beta&#8221;</strong> y como recordar a tantos proyectos marcados como <strong>&#8220;beta&#8221;</strong>, sin ir mas lejos GMail o el <strong>&#8220;peta&#8221;</strong> de meneame.</p>
<p>¿Pasamos 5 años en <strong>modo beta</strong> y luego adoptamos un <strong>rapid release</strong> y sacamos 14 <strong>versiones</strong> en 2 años? Así que publico esto en mi WordPress 33, con mi OSX 21.37 y luego veo el post con mi iphone 11. Y como colofón, mencionar como Apple con la tontería, hace tiempo que su iPad3 es solamente iPad y el resto de <strong>versiones</strong>, son solo iPad, sin versión. Y es que el mundo se ha vuelto loco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/navegadores/modas-y-versiones-o-como-pasar-no-actualizar-a-sacar-verisones-como-churros/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/navegadores/modas-y-versiones-o-como-pasar-no-actualizar-a-sacar-verisones-como-churros/</feedburner:origLink></item>
		<item>
		<title>Tabla de codificaciones de caracteres entre ANSI, UTF-8, Javascript, HTML</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/zIRxQhHAs2c/</link>
		<comments>http://www.indalcasa.com/programacion/html/tabla-de-codificaciones-de-caracteres-entre-ansi-utf-8-javascript-html/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 21:37:11 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ansi]]></category>
		<category><![CDATA[codificación]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=983</guid>
		<description><![CDATA[Cuando hacemos una página web en utf8, al escribir una cadena de texto en javascript que contenga acentos, tildes, eñes, signos de interrogación y demás caracteres considerados especiales, se pintara de una forma extraña en el html. Esto es porque javascript tiene su propio sistema de codificación, al igual que el html. A continuación os&#8230; <a href="http://www.indalcasa.com/programacion/html/tabla-de-codificaciones-de-caracteres-entre-ansi-utf-8-javascript-html/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a class="thumbnail alignleft" href="http://www.indalcasa.com/wp-content/uploads/2012/11/ene-virguililla.png"><img class="size-medium wp-image-934" alt="ene-virguililla" src="http://www.indalcasa.com/wp-content/uploads/2012/11/ene-virguililla-300x187.png" width="300" height="187" /></a>Cuando hacemos una <strong>página web en utf8</strong>, al escribir una cadena de<strong> texto en javascript</strong> que contenga <strong>acentos, tildes, eñes, signos de interrogación</strong> y demás caracteres considerados especiales, se pintara de una forma extraña en el <strong>html</strong>. Esto es porque <strong>javascript</strong> tiene su propio <strong>sistema de codificación</strong>, al igual que el <strong>html</strong>. A continuación os dejo una tabla con los principales caracteres que se utilizan, ya que es útil tenerlos a mano para poder escribirlos:</p>
<table>
<thead>
<tr>
<th>ANSI</th>
<th>UTF-8</th>
<th>JAVASCRIPT</th>
<th>HTML</th>
</tr>
</thead>
<tbody>
<tr>
<td>Á</td>
<td>Ã</td>
<td>\u00c1</td>
<td>&amp;#193;</td>
</tr>
<tr>
<td>á</td>
<td>Ã¡</td>
<td>\u00e1</td>
<td>&amp;#225;</td>
</tr>
<tr>
<td>É</td>
<td>Ã‰</td>
<td>\u00c9</td>
<td>&amp;#201;</td>
</tr>
<tr>
<td>é</td>
<td>Ã©</td>
<td>\u00e9</td>
<td>&amp;#233;</td>
</tr>
<tr>
<td>Í</td>
<td>Ã</td>
<td>\u00cd</td>
<td>&amp;#205;</td>
</tr>
<tr>
<td>í</td>
<td>Ã­</td>
<td>\u00ed</td>
<td>&amp;#237;</td>
</tr>
<tr>
<td>Ó</td>
<td>Ã“</td>
<td>\u00d3</td>
<td>&amp;#211;</td>
</tr>
<tr>
<td>ó</td>
<td>Ã³</td>
<td>\u00f3</td>
<td>&amp;#243;</td>
</tr>
<tr>
<td>Ú</td>
<td>Ãš</td>
<td>\u00da</td>
<td>&amp;#218;</td>
</tr>
<tr>
<td>ú</td>
<td>Ãº</td>
<td>\u00fa</td>
<td>&amp;#250;</td>
</tr>
<tr>
<td>Ñ</td>
<td>Ã‘</td>
<td>\u00d1</td>
<td>&amp;#209;</td>
</tr>
<tr>
<td>ñ</td>
<td>Ã±</td>
<td>\u00f1</td>
<td>&amp;#241;</td>
</tr>
<tr>
<td>¿</td>
<td>Â¿</td>
<td>\u00bf</td>
<td>&amp;#191;</td>
</tr>
</tbody>
</table>
<p>Y después de esta tabla a modo de apunte, os dejo la <strong>tabla completa de codificación de caracteres como eñes, acentos, tildes y demás caracteres entre ANSI, UTF8, Javascript y HTML</strong>:</p>
<table>
<thead>
<tr>
<th>ANSI</th>
<th>UTF-8</th>
<th>JAVASCRIPT</th>
<th>HTML</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td>Â</td>
<td>\u00a0</td>
<td>&amp;#160;</td>
</tr>
<tr>
<td>¡</td>
<td>Â¡</td>
<td>\u00a1</td>
<td>&amp;#161;</td>
</tr>
<tr>
<td>¢</td>
<td>Â¢</td>
<td>\u00a2</td>
<td>&amp;#162;</td>
</tr>
<tr>
<td>£</td>
<td>Â£</td>
<td>\u00a3</td>
<td>&amp;#163;</td>
</tr>
<tr>
<td>¤</td>
<td>Â¤</td>
<td>\u00a4</td>
<td>&amp;#164;</td>
</tr>
<tr>
<td>¥</td>
<td>Â¥</td>
<td>\u00a5</td>
<td>&amp;#165;</td>
</tr>
<tr>
<td>¦</td>
<td>Â¦</td>
<td>\u00a6</td>
<td>&amp;#166;</td>
</tr>
<tr>
<td>§</td>
<td>Â§</td>
<td>\u00a7</td>
<td>&amp;#167;</td>
</tr>
<tr>
<td>¨</td>
<td>Â¨</td>
<td>\u00a8</td>
<td>&amp;#168;</td>
</tr>
<tr>
<td>©</td>
<td>Â©</td>
<td>\u00a9</td>
<td>&amp;#169;</td>
</tr>
<tr>
<td>ª</td>
<td>Âª</td>
<td>\u00aa</td>
<td>&amp;#170;</td>
</tr>
<tr>
<td>«</td>
<td>Â«</td>
<td>\u00ab</td>
<td>&amp;#171;</td>
</tr>
<tr>
<td>¬</td>
<td>Â¬</td>
<td>\u00ac</td>
<td>&amp;#172;</td>
</tr>
<tr>
<td>­</td>
<td>Â­</td>
<td>\u00ad</td>
<td>&amp;#173;</td>
</tr>
<tr>
<td>®</td>
<td>Â®</td>
<td>\u00ae</td>
<td>&amp;#174;</td>
</tr>
<tr>
<td>¯</td>
<td>Â¯</td>
<td>\u00af</td>
<td>&amp;#175;</td>
</tr>
<tr>
<td>°</td>
<td>Â°</td>
<td>\u00b0</td>
<td>&amp;#176;</td>
</tr>
<tr>
<td>±</td>
<td>Â±</td>
<td>\u00b1</td>
<td>&amp;#177;</td>
</tr>
<tr>
<td>²</td>
<td>Â²</td>
<td>\u00b2</td>
<td>&amp;#178;</td>
</tr>
<tr>
<td>³</td>
<td>Â³</td>
<td>\u00b3</td>
<td>&amp;#179;</td>
</tr>
<tr>
<td>´</td>
<td>Â´</td>
<td>\u00b4</td>
<td>&amp;#180;</td>
</tr>
<tr>
<td>µ</td>
<td>Âµ</td>
<td>\u00b5</td>
<td>&amp;#181;</td>
</tr>
<tr>
<td>¶</td>
<td>Â¶</td>
<td>\u00b6</td>
<td>&amp;#182;</td>
</tr>
<tr>
<td>·</td>
<td>Â·</td>
<td>\u00b7</td>
<td>&amp;#183;</td>
</tr>
<tr>
<td>¸</td>
<td>Â¸</td>
<td>\u00b8</td>
<td>&amp;#184;</td>
</tr>
<tr>
<td>¹</td>
<td>Â¹</td>
<td>\u00b9</td>
<td>&amp;#185;</td>
</tr>
<tr>
<td>º</td>
<td>Âº</td>
<td>\u00ba</td>
<td>&amp;#186;</td>
</tr>
<tr>
<td>»</td>
<td>Â»</td>
<td>\u00bb</td>
<td>&amp;#187;</td>
</tr>
<tr>
<td>¼</td>
<td>Â¼</td>
<td>\u00bc</td>
<td>&amp;#188;</td>
</tr>
<tr>
<td>½</td>
<td>Â½</td>
<td>\u00bd</td>
<td>&amp;#189;</td>
</tr>
<tr>
<td>¾</td>
<td>Â¾</td>
<td>\u00be</td>
<td>&amp;#190;</td>
</tr>
<tr>
<td>¿</td>
<td>Â¿</td>
<td>\u00bf</td>
<td>&amp;#191;</td>
</tr>
<tr>
<td>À</td>
<td>Ã€</td>
<td>\u00c0</td>
<td>&amp;#192;</td>
</tr>
<tr>
<td>Á</td>
<td>Ã</td>
<td>\u00c1</td>
<td>&amp;#193;</td>
</tr>
<tr>
<td>Â</td>
<td>Ã‚</td>
<td>\u00c2</td>
<td>&amp;#194;</td>
</tr>
<tr>
<td>Ã</td>
<td>Ãƒ</td>
<td>\u00c3</td>
<td>&amp;#195;</td>
</tr>
<tr>
<td>Ä</td>
<td>Ã„</td>
<td>\u00c4</td>
<td>&amp;#196;</td>
</tr>
<tr>
<td>Å</td>
<td>Ã…</td>
<td>\u00c5</td>
<td>&amp;#197;</td>
</tr>
<tr>
<td>Æ</td>
<td>Ã†</td>
<td>\u00c6</td>
<td>&amp;#198;</td>
</tr>
<tr>
<td>Ç</td>
<td>Ã‡</td>
<td>\u00c7</td>
<td>&amp;#199;</td>
</tr>
<tr>
<td>È</td>
<td>Ãˆ</td>
<td>\u00c8</td>
<td>&amp;#200;</td>
</tr>
<tr>
<td>É</td>
<td>Ã‰</td>
<td>\u00c9</td>
<td>&amp;#201;</td>
</tr>
<tr>
<td>Ê</td>
<td>ÃŠ</td>
<td>\u00ca</td>
<td>&amp;#202;</td>
</tr>
<tr>
<td>Ë</td>
<td>Ã‹</td>
<td>\u00cb</td>
<td>&amp;#203;</td>
</tr>
<tr>
<td>Ì</td>
<td>ÃŒ</td>
<td>\u00cc</td>
<td>&amp;#204;</td>
</tr>
<tr>
<td>Í</td>
<td>Ã</td>
<td>\u00cd</td>
<td>&amp;#205;</td>
</tr>
<tr>
<td>Î</td>
<td>ÃŽ</td>
<td>\u00ce</td>
<td>&amp;#206;</td>
</tr>
<tr>
<td>Ï</td>
<td>Ã</td>
<td>\u00cf</td>
<td>&amp;#207;</td>
</tr>
<tr>
<td>Ð</td>
<td>Ã</td>
<td>\u00d0</td>
<td>&amp;#208;</td>
</tr>
<tr>
<td>Ñ</td>
<td>Ã‘</td>
<td>\u00d1</td>
<td>&amp;#209;</td>
</tr>
<tr>
<td>Ò</td>
<td>Ã’</td>
<td>\u00d2</td>
<td>&amp;#210;</td>
</tr>
<tr>
<td>Ó</td>
<td>Ã“</td>
<td>\u00d3</td>
<td>&amp;#211;</td>
</tr>
<tr>
<td>Ô</td>
<td>Ã”</td>
<td>\u00d4</td>
<td>&amp;#212;</td>
</tr>
<tr>
<td>Õ</td>
<td>Ã•</td>
<td>\u00d5</td>
<td>&amp;#213;</td>
</tr>
<tr>
<td>Ö</td>
<td>Ã–</td>
<td>\u00d6</td>
<td>&amp;#214;</td>
</tr>
<tr>
<td>×</td>
<td>Ã—</td>
<td>\u00d7</td>
<td>&amp;#215;</td>
</tr>
<tr>
<td>Ø</td>
<td>Ã˜</td>
<td>\u00d8</td>
<td>&amp;#216;</td>
</tr>
<tr>
<td>Ù</td>
<td>Ã™</td>
<td>\u00d9</td>
<td>&amp;#217;</td>
</tr>
<tr>
<td>Ú</td>
<td>Ãš</td>
<td>\u00da</td>
<td>&amp;#218;</td>
</tr>
<tr>
<td>Û</td>
<td>Ã›</td>
<td>\u00db</td>
<td>&amp;#219;</td>
</tr>
<tr>
<td>Ü</td>
<td>Ãœ</td>
<td>\u00dc</td>
<td>&amp;#220;</td>
</tr>
<tr>
<td>Ý</td>
<td>Ã</td>
<td>\u00dd</td>
<td>&amp;#221;</td>
</tr>
<tr>
<td>Þ</td>
<td>Ãž</td>
<td>\u00de</td>
<td>&amp;#222;</td>
</tr>
<tr>
<td>ß</td>
<td>ÃŸ</td>
<td>\u00df</td>
<td>&amp;#223;</td>
</tr>
<tr>
<td>à</td>
<td>Ã</td>
<td>\u00e0</td>
<td>&amp;#224;</td>
</tr>
<tr>
<td>á</td>
<td>Ã¡</td>
<td>\u00e1</td>
<td>&amp;#225;</td>
</tr>
<tr>
<td>â</td>
<td>Ã¢</td>
<td>\u00e2</td>
<td>&amp;#226;</td>
</tr>
<tr>
<td>ã</td>
<td>Ã£</td>
<td>\u00e3</td>
<td>&amp;#227;</td>
</tr>
<tr>
<td>ä</td>
<td>Ã¤</td>
<td>\u00e4</td>
<td>&amp;#228;</td>
</tr>
<tr>
<td>å</td>
<td>Ã¥</td>
<td>\u00e5</td>
<td>&amp;#229;</td>
</tr>
<tr>
<td>æ</td>
<td>Ã¦</td>
<td>\u00e6</td>
<td>&amp;#230;</td>
</tr>
<tr>
<td>ç</td>
<td>Ã§</td>
<td>\u00e7</td>
<td>&amp;#231;</td>
</tr>
<tr>
<td>è</td>
<td>Ã¨</td>
<td>\u00e8</td>
<td>&amp;#232;</td>
</tr>
<tr>
<td>é</td>
<td>Ã©</td>
<td>\u00e9</td>
<td>&amp;#233;</td>
</tr>
<tr>
<td>ê</td>
<td>Ãª</td>
<td>\u00ea</td>
<td>&amp;#234;</td>
</tr>
<tr>
<td>ë</td>
<td>Ã«</td>
<td>\u00eb</td>
<td>&amp;#235;</td>
</tr>
<tr>
<td>ì</td>
<td>Ã¬</td>
<td>\u00ec</td>
<td>&amp;#236;</td>
</tr>
<tr>
<td>í</td>
<td>Ã­</td>
<td>\u00ed</td>
<td>&amp;#237;</td>
</tr>
<tr>
<td>î</td>
<td>Ã®</td>
<td>\u00ee</td>
<td>&amp;#238;</td>
</tr>
<tr>
<td>ï</td>
<td>Ã¯</td>
<td>\u00ef</td>
<td>&amp;#239;</td>
</tr>
<tr>
<td>ð</td>
<td>Ã°</td>
<td>\u00f0</td>
<td>&amp;#240;</td>
</tr>
<tr>
<td>ñ</td>
<td>Ã±</td>
<td>\u00f1</td>
<td>&amp;#241;</td>
</tr>
<tr>
<td>ò</td>
<td>Ã²</td>
<td>\u00f2</td>
<td>&amp;#242;</td>
</tr>
<tr>
<td>ó</td>
<td>Ã³</td>
<td>\u00f3</td>
<td>&amp;#243;</td>
</tr>
<tr>
<td>ô</td>
<td>Ã´</td>
<td>\u00f4</td>
<td>&amp;#244;</td>
</tr>
<tr>
<td>õ</td>
<td>Ãµ</td>
<td>\u00f5</td>
<td>&amp;#245;</td>
</tr>
<tr>
<td>ö</td>
<td>Ã¶</td>
<td>\u00f6</td>
<td>&amp;#246;</td>
</tr>
<tr>
<td>÷</td>
<td>Ã·</td>
<td>\u00f7</td>
<td>&amp;#247;</td>
</tr>
<tr>
<td>ø</td>
<td>Ã¸</td>
<td>\u00f8</td>
<td>&amp;#248;</td>
</tr>
<tr>
<td>ù</td>
<td>Ã¹</td>
<td>\u00f9</td>
<td>&amp;#249;</td>
</tr>
<tr>
<td>ú</td>
<td>Ãº</td>
<td>\u00fa</td>
<td>&amp;#250;</td>
</tr>
<tr>
<td>û</td>
<td>Ã»</td>
<td>\u00fb</td>
<td>&amp;#251;</td>
</tr>
<tr>
<td>ü</td>
<td>Ã¼</td>
<td>\u00fc</td>
<td>&amp;#252;</td>
</tr>
<tr>
<td>ý</td>
<td>Ã½</td>
<td>\u00fd</td>
<td>&amp;#253;</td>
</tr>
<tr>
<td>þ</td>
<td>Ã¾</td>
<td>\u00fe</td>
<td>&amp;#254;</td>
</tr>
<tr>
<td>ÿ</td>
<td>Ã¿</td>
<td>\u00ff</td>
<td>&amp;#255;</td>
</tr>
</tbody>
</table>
<p>Espero que os sirva de ayuda tanto como a mi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/html/tabla-de-codificaciones-de-caracteres-entre-ansi-utf-8-javascript-html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/programacion/html/tabla-de-codificaciones-de-caracteres-entre-ansi-utf-8-javascript-html/</feedburner:origLink></item>
		<item>
		<title>ASP.Net MVC Razor, la evolución desde apsx webforms hacia MVC y fundamentos básicos de ASP.Net MVC</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/k3Rm_zNH-nc/</link>
		<comments>http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-mvc-razor-la-evolucion-desde-apsx-webforms-hacia-mvc-y-fundamentos-basicos-de-asp-net-mvc/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 21:16:18 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[MVC]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[razor]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=977</guid>
		<description><![CDATA[Quienes hayan trabajado alguna vez con .Net, conocerán el sistema de plantillas de ASP.Net llamado webforms. Los webforms fueron un sistema de vistas con extensión aspx que podían ir o no acompañadas de un codebehind y controles. El objetivo de Microsoft cuando diseño esta parte del framework de .Net fue mover a los desarrolladores a&#8230; <a href="http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-mvc-razor-la-evolucion-desde-apsx-webforms-hacia-mvc-y-fundamentos-basicos-de-asp-net-mvc/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a class="thumbnail alignleft" href="http://www.indalcasa.com/wp-content/uploads/2012/11/aspnet.png"><img class="size-full wp-image-917" alt="aspnet" src="http://www.indalcasa.com/wp-content/uploads/2012/11/aspnet.png" width="100" height="100" /></a>Quienes hayan trabajado alguna vez con <strong>.Net</strong>, conocerán el sistema de plantillas de <strong>ASP.Net</strong> llamado <strong>webforms</strong>. Los webforms fueron un sistema de vistas con extensión <strong>aspx</strong> que podían ir o no acompañadas de un <strong>codebehind y controles</strong>. El objetivo de <strong>Microsoft</strong> cuando diseño esta parte del<strong> framework de .Net</strong> fue mover a los desarrolladores a crear aplicaciones en nube, que aunque ahora este tan de moda el termino nube, estamos en un contexto del año 2000. Los <strong>webforms</strong> permitían <strong>desarrollar una web</strong>, tal y como los desarrolladores del viejo <strong>Visual Basic</strong> hacían sus aplicaciones de escritorio, donde las páginas eran llamadas <strong>formularios</strong> (de ahí el término <strong>webform</strong>) y los elementos tales como<strong> inputs, botones, etc</strong>, se arrastraban con un <strong>editor wysiwyg</strong>. Los antiguos <strong>webforms</strong>, aunque simulaban un entorno de escritorio, en cuanto a <strong>formularios</strong>, no eran otra cosa que webs y como tales podías tocar el <strong>html</strong> desde el editor y no solo tener la opción de <strong>editor wysiwyg</strong>, encontrando bajo el capo una <strong>web de código espagueti</strong> tal y como siempre se habló de <strong>php</strong> por ejemplo, salvo que parte de la lógica estaba en el <strong>codebehind</strong>. Esta última parte era lo peor de todo, puesto que si el desarrollador era experto, el <strong>código espagueti</strong> era minúsculo, pero a medida que descendía la pericia del <strong>programador</strong>, aumentaba el tamaño tanto del <strong>codebehind</strong> como del propio <strong>espagueti html</strong> que era ese <strong>aspx webform</strong>.</p>
<p><strong>Microsoft</strong> publico todo esto en las <strong>primeras versiones del .Net framework</strong> y fue un bombazo, cualquiera podía hacer una <strong>web con muchos formularios</strong> en un tris, pero claro, ahí esta está el cliente para recordarnos que era muy feo y que lo querían mas bonito como habían visto por internet otras páginas. Es entonces cuando empiezan a verse los primeros problemas a la hora de <strong>realizar webs</strong> y es que aspnet 1 no tenia soporte para páginas maestras, por lo que los desarrolladores acababan en practicas comunes en otros lenguajes y que eran tan criticadas como copiar y pegar la misma estructura de página (controles, cabecera, menu, pie, etc) por todas y cada una de las páginas que tuviéramos en nuestro proyecto. Así que como novedad, <strong>Microsoft</strong> pensó que aparte de cambiar la forma de incluir los controles en una <strong>web</strong>, automatizando todo el proceso, penso que era hora de crear un concepto mas que necesario, una <strong>masterpage</strong>. Una <strong>masterpage</strong>, no es mas que como su nombre indica, una <strong>página maestra</strong>, digamos que todo ese contexto de <strong>cabeceras, menu, pie, etc</strong> que ibamos copiando de página a página pero que ahora se centraliza en un sitio, marcando en esa <strong>página maestra</strong>, donde queremos que se <strong>renderice el contenido de la página</strong>. Esto supuso un gran avance, ya que las <strong>páginas desarrolladas con ASP.Net</strong>, fueron mejorando en el punto que eran mas limpias. Aun y con todo, seguian los problemas, el auge de <strong>librerías de javascript dinámicas</strong>, con efectos y <strong>llamadas de ajax</strong>, dejaba en ridículo a controles muy cerrados tipo <strong>updatepanels</strong> y los desarrolladores pedían a gritos mas flexibilidad.</p>
<p>Cuando uno ha vivido toda la vida amamantado por la teta de <strong>Microsoft</strong>, no se percata de cierta rigidez a la hora de <strong>desarrollar una web con ASP.Net</strong>, pero quien tocara cualquier otro entorno, veia como en <strong>php y python</strong>, aparecian <strong>framework MVC</strong>, que permitian utilizar todas esas <strong>librerias de ajax</strong> pero sin montar un pipote (caos) de <strong>código</strong> para que funcionen bien. Es entonces cuando aparece <strong>MVC</strong>. El concepto de <strong>MVC</strong> es un concepto creado en 1979, no trae ninguna novedad como tal, pero si que introduce ese <strong>concepto en ASP.Net</strong> teniendo una serie de caracteristicas fundamentales (en un sistema normal sin mucha floritura):</p>
<ul>
<li><span style="line-height: 13px;">Los <strong>controladores</strong> son siempre los que reciben las peticiones, ya no hay<strong> controladores genéricos ashx</strong>, <strong>servicios asmx</strong>,<strong> paginas aspx</strong>, <strong>controles ascx</strong>, ni <strong>masterpages master</strong>. Los <strong>controles</strong> son clases donde por defecto, sus métodos serán <strong>aciones del controlador</strong>.</span></li>
<li>Las <strong>vistas</strong> son solo eso, <strong>vistas</strong>, con sintaxis <strong>webform en MVC 1 y 2</strong> y con <strong>Razor en MVC 3 y 4</strong>.</li>
<li>Los <strong>modelos</strong> son clases con propiedades multifunción, <strong>validar automáticamente datos</strong>, <strong>enviar y recibir formularios</strong>, <strong>sincronizar datos con la base de datos (Entity Framework Code First)</strong>.</li>
<li>El proyecto es un <strong>binario</strong> cerrado, como ocurría en la primera versión de <strong>ASP.Net</strong> y en el resto si lo cambiabas a proposito, ya no hay mas código abierto con el que dejar a <strong>IIS</strong> que compile el código, como si fuera <strong>php</strong>.</li>
</ul>
<p>Hasta aquí, una breve explicación de como surge <strong>MVC</strong>, pero ¿Y <strong>Razor</strong>? <strong>Razor es el nuevo sistema de templates de ASP.Net MVC</strong>. Quien haya programado con <strong>webforms</strong>, se habrá dado cuenta que en una página con un poco de lógica, acaba creciendo mucho y complicando la sintaxis con abre código <strong>&lt;%</strong>, mete código, cierra código <strong>%&gt;</strong>, haciendo que no solo crezca una página, sino que además, el código se vuelve mas y mas feo por momentos. <strong>Razor</strong> soluciona esto con 2 procedimientos, el primero es su <strong>cierre automático inteligente</strong>, es decir, la etiqueta de apertura será una <strong>arroba @</strong>, pero no tendrá cierre como tal. La segunda peculiaridad es que el código es mucho mas fluido puesto que se aprovecha del propio <strong>html</strong> para formar ciertas partes de la sintaxis. Ademas, <strong>Razor</strong> tiene algunas ventajas como son <strong>poder indicar un modelo</strong> que utiliza la página para hacer <strong>validaciones</strong>, <strong>formularios</strong> y pintar datos de una forma mas sencilla.</p>
<p>Veamos un par de <strong>ejemplos de código hecho con Razor</strong> frente al hecho con <strong>webform</strong>:</p>
<pre class="brush: csharp; gutter: true">@model Indacalsa.Models.LoginModel

@using (Html.BeginForm(&quot;Login&quot;, &quot;Account&quot;, FormMethod.Post)) {
  @Html.AntiForgeryToken()
  &lt;fieldset id=&quot;login&quot;&gt;
    &lt;legend&gt;Datos de acceso @ViewBag.Title&lt;/legend&gt;
    &lt;p&gt;
      &lt;label&gt;
        &lt;span class=&quot;title&quot;&gt;Usuario:&lt;/span&gt;
        @Html.TextBoxFor(m =&gt; m.UserName)
        @Html.ValidationMessageFor(m =&gt; m.UserName)
      &lt;/label&gt;
    &lt;/p&gt;
    &lt;p class=&quot;center&quot;&gt;
        &lt;input type=&quot;submit&quot; value=&quot;Acceder&quot; class=&quot;btn&quot; /&gt;
    &lt;/p&gt;
  &lt;/fieldset&gt;
}</pre>
<pre class="brush: csharp; gutter: true">&lt;form method=&quot;post&quot; action=&quot;/Login/Account.aspx&quot; runat=&quot;server&quot;&gt;
  &lt;fieldset id=&quot;login&quot;&gt;
    &lt;legend&gt;Datos de acceso &lt;%=this.Title%&gt;&lt;/legend&gt;
    &lt;p&gt;
      &lt;label&gt;
        &lt;span class=&quot;title&quot;&gt;Usuario:&lt;/span&gt;
        &lt;asp:TextBox name=&quot;UserName&quot; id=&quot;UserName&quot; runat=&quot;server&quot; /&gt;
        &lt;asp:RegularExpressionValidator ID=&quot;validatorUserName&quot; runat=&quot;server&quot; ControlToValidate=&quot;UserName&quot; ErrorMessage=&quot;La longitud mínima es de 5 caracteres&quot; ValidationExpression=&quot;.{5}.*&quot; /&gt;
      &lt;/label&gt;
    &lt;/p&gt;
    &lt;p class=&quot;center&quot;&gt;
        &lt;asp:Button value=&quot;Acceder&quot; class=&quot;btn&quot; runat=&quot;server&quot; /&gt;
    &lt;/p&gt;
  &lt;/fieldset&gt;
&lt;/form&gt;</pre>
<p>Lo he simplificado, primero en <strong>Razor</strong> y luego en <strong>ASP.Net webforms</strong>. La parte de <strong>webforms</strong> la he simplificado sin utilizar el tipico form que ocupa toda la página y sin mucha historia, para dar un acercamiento de como va el tema. Aparte de este ejemplo hay que sacar la mala experiencia de utilizar <strong>controles de webform</strong> y sus ids mágicos, si es que luego queremos dinamizar la página con <strong>ajax</strong> o <strong>javascript</strong>.</p>
<p>Y para los que vengan de atras, aquí van algunas <strong>similitudes entre webform y Razor</strong>:</p>
<ul>
<li><span style="line-height: 13px;">Las <strong>masterpage de webform</strong> ahora son llamadas <strong>Layouts</strong></span></li>
<li>Los <strong>controles de webform</strong> ahora son vistas parciales, pero con la salvedad de que no tendrán codebehind.</li>
<li>Para especificar <strong>código espagueti</strong> o en linea en webforms se hace con &lt;% codigo %&gt; y &lt;%=codigo%&gt;. Con <strong>Razor</strong> se hace con @micodigo o @(micodigo_muy_complejo).</li>
<li>Para ir renderizando texto dentro del <strong>código de Razor</strong> ya no es necesario abrir y cerrar las etiquetas de codigo &lt;% y %&gt;, sino que podemos usar &lt;text&gt;texto a renderizar&lt;/text&gt;</li>
<li>Los asp:content de las <strong>masterpages</strong> ahora son <strong>sections</strong>.</li>
</ul>
<p>Espero que os guste y os sirva un poco a aquellos rehacios a <strong>migrar a MVC</strong> o desde otros lenguajes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-mvc-razor-la-evolucion-desde-apsx-webforms-hacia-mvc-y-fundamentos-basicos-de-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-mvc-razor-la-evolucion-desde-apsx-webforms-hacia-mvc-y-fundamentos-basicos-de-asp-net-mvc/</feedburner:origLink></item>
		<item>
		<title>W2S web ide</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/6NrdJkSkOCs/</link>
		<comments>http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/w2s-web-ide/#comments</comments>
		<pubDate>Sun, 03 Feb 2013 21:05:29 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[w2s]]></category>
		<category><![CDATA[altairstudios]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=971</guid>
		<description><![CDATA[Llevo una temporada sin escribir en el blog. El motivo es porque he estado trabajando en un proyecto, que aún no está terminado. El proyecto en concreto se llama w2s y se trata de un ide de desarrollo web que esta ahora mismo en una fase alfa pero completamente funcional. w2s es un entorno de&#8230; <a href="http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/w2s-web-ide/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a class="thumbnail alignleft" href="http://www.indalcasa.com/wp-content/uploads/2013/02/w2s-1.png"><img class="size-medium wp-image-972" alt="w2s" src="http://www.indalcasa.com/wp-content/uploads/2013/02/w2s-1-300x166.png" width="300" height="166" /></a>Llevo una temporada sin escribir en el blog. El motivo es porque he estado trabajando en un proyecto, que aún no está terminado. El proyecto en concreto se llama <strong>w2s</strong> y se trata de un ide de desarrollo web que esta ahora mismo en una fase alfa pero completamente funcional. <strong>w2s es un entorno de trabajo</strong>, con el que poder desarrollar en multitud de lenguajes de <strong>programación</strong>. Actualmente aunque falta mucho por desarrollar, ya permite programar en <strong>c#, php, html, javascript y css</strong>.</p>
<p>¿Por qué crear un <strong>ide completo de desarrollo</strong>? Muy sencillo, porque no hay nada similar. En mi caso, programo en <strong>C#</strong>, pero utilizo <strong>OSX</strong>, a veces programo en <strong>PHP</strong> y otras veces en <strong>HTML</strong> y <strong>Javascript</strong> con <strong>Phonegap</strong>. El problema está en que para programar en <strong>C#</strong> para <strong>OSX</strong> solo se puede con <strong>Mono</strong>, que está muy retrasado con las nuevas versiones de <strong>.Net</strong>. En <strong>Windows</strong> ocurre lo mismo, para <strong>C#</strong> tienes el <strong>Visual Studio</strong>, que es muy bueno para <strong>C#</strong> pero no soporta <strong>PHP</strong> ni webs unicamente en <strong>HTML</strong> y <strong>Javascript</strong>. Luego existe el problema de trabajar en distintos sitios, el trabajo, en casa, el ordenador de mi mujer, incluso en el ipad. Es por estas cosas por las que un día decidí crear <strong>w2s</strong>, para tener un repositorio centralizado donde poder trabajar, con un <strong>ide de desarrollo online</strong> que me permitiese en una misma aplicación <strong>desarrollar en C#, PHP, Javascript, HTML5, CSS</strong> y poco a poco mas y mas lenguajes.</p>
<p>Cada día uso w2s en mas y mas desarrollos, entre los cuales cabe destacar el propio <strong>w2s</strong>. Entre las funcionalidades mas destacadas se encuentran:</p>
<ul>
<li><span style="line-height: 13px;">Editor de código en <strong>C#, PHP, Javascript, HTML5, CSS3</strong>.</span></li>
<li>Intellisense o autocompletado de código para <strong>HTML5</strong>, <strong>Javascript</strong> y estoy trabajando en <strong>CSS3</strong> y <strong>C#</strong>.</li>
<li>Avisador de errores en el <strong>código de Javascript</strong>.</li>
<li><strong>Compilador de C#</strong>.</li>
<li>Poder subir archivos arrastrandolos desde el escritorio</li>
<li>Poder descargar el proyecto completo en un zip.</li>
<li>Cuenta de ftp</li>
<li>Un giga de espacio ampliable para almacenar proyectos</li>
<li>Tester web para probar la web como un pc, ipad, iphone4, iphone5</li>
</ul>
<p>Ire publicando nuevas actualizaciones con cambios que vaya realizando. Y como siempre, quien quiera participar en la fase alfa o en posteriores versiones beta privada y beta publica, solo tiene que dejar un mensaje.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/w2s-web-ide/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/altair-studios-desarrollo-web/w2s/w2s-web-ide/</feedburner:origLink></item>
		<item>
		<title>Añadir usuarios para el ftp al servidor proftpd</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/uzfjjyx2eis/</link>
		<comments>http://www.indalcasa.com/linux/anadir-usuarios-para-el-ftp-al-servidor-proftpd/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 00:26:25 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=959</guid>
		<description><![CDATA[Proftpd es un servidor de ftp muy común en Linux que utiliza a los usuarios del sistema como listado de posibles usuarios a conectarse. Si intentamos conectarnos con un usuario del sistema a este servidor ftp, nos encontramos con que nos mostrará su carpeta home. Pongamos que tenemos un servidor web multidominio y queremos conectarnos&#8230; <a href="http://www.indalcasa.com/linux/anadir-usuarios-para-el-ftp-al-servidor-proftpd/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong><a class="thumbnail" href="http://www.indalcasa.com/wp-content/uploads/2012/11/descargas.jpg"><img class="alignleft  wp-image-925" title="Descargas" src="http://www.indalcasa.com/wp-content/uploads/2012/11/descargas-300x230.jpg" alt="" width="210" height="161" /></a>Proftpd</strong> es un <strong>servidor de ftp</strong> muy común en <strong>Linux</strong> que utiliza a los usuarios del sistema como listado de posibles <strong>usuarios a conectarse</strong>. Si intentamos conectarnos con un <strong>usuario del sistema</strong> a este <strong>servidor ftp</strong>, nos encontramos con que nos mostrará su <strong>carpeta home</strong>. Pongamos que tenemos un servidor web multidominio y queremos conectarnos con cada uno de estos <strong>usuarios a cada web</strong> sin que se mezclen las carpetas y para dar un poco de seguridad en este inseguro mundo de la informática ¿Como lo haríamos? La respuesta es bien sencilla y solo debemos seguir unos pequeños pasos para conseguirlo, debemos investigar para saber que grupos necesitamos, a que carpetas queremos acceder, crear los usuarios y establecer contraseñas de acceso.</p>
<ol>
<li>Lo primero que debemos averiguar es el <strong>usuario que utiliza nuestro servidor web</strong>. Esto es importante porque necesitamos saber a que grupo pertenece. Esto lo dejo un poco en el aire porque dependerá del <strong>servidor</strong> que ejecutemos, distribución que tengamos instalada, etc. Pero vamos a tomar como base <strong>www-data como usuario y grupo</strong>.</li>
<li>Una vez tenemos el <strong>grupo</strong>, debemos tener claro cuales van a ser las carpetas donde queremos que nuestro <strong>usuario</strong> acceda, por ejemplo /usr/share/nginx/www y /usr/share/nginx/blog</li>
<li>Creamos el usuario con el <strong>comando useradd</strong> con el siguiente formato: <strong>useradd -M -g grupo -d home_path nombre_usuario</strong></li>
<li>Estableceremos una <strong>contraseña</strong> a nuestro <strong>usuario con passwd usuario</strong></li>
</ol>
<div>Al final el resultado sería la ejecución de códigos similares a estos:</div>
<div>
<pre class="brush: bash; gutter: true">useradd -M -g www-data -d /usr/share/nginx/www usuario_www
useradd -M -g www-data -d /usr/share/nginx/blog usuario_blog
passwd usuario_www
passwd usuario_blog</pre>
</div>
<div>Con esto estaríamos creando 2 <strong>usuarios</strong>, uno para www y otro para blog. Ambos usurarios pertenecerán al <strong>grupo www-data</strong>. Con el flag -M indicaremos expresamente que no cree la <strong>carpeta home</strong>, solo la definimos. ¿Por qué es importante el grupo www-data o el que corresponda obtenido del paso 1? Porque sino deberemos de estar cambiando permisos si queremos que nuestro código se ejecute, mientras que al ser del mismo <strong>grupo</strong>, no tendría muchos problemas.</div>
<p>Ahora ya podemos conectarnos a <strong>nuestro servidor ftp</strong> con los <strong>usuarios</strong> usuario_www y usuario_blog con las contraseñas que les indicamos en el <strong>passwd</strong>. Importante que ejecuteis y pongáis <strong>contraseña con passwd</strong> porque sino podreis intentar contectaros pero siempre dará error&#8230; a mi me paso <img src='http://www.indalcasa.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/linux/anadir-usuarios-para-el-ftp-al-servidor-proftpd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/linux/anadir-usuarios-para-el-ftp-al-servidor-proftpd/</feedburner:origLink></item>
		<item>
		<title>Indalcasa + Bootstrap + Azure</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/1xAAoAL1Tws/</link>
		<comments>http://www.indalcasa.com/blog/indalcasa-bootstrap-azure/#comments</comments>
		<pubDate>Thu, 22 Nov 2012 23:57:37 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[El blog]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=946</guid>
		<description><![CDATA[Llevo tiempo queriendo cambiar el blog y finalmente me decidi. He migrado el blog de hosting, ahora se encuentra en nube con azure y a un precio que de momento parece ser bastante mas económico que los cálculos iniciales que hice. Ya aproveche para instalar un nuevo tema al blog, con una apariencia bootstrap, limpia&#8230; <a href="http://www.indalcasa.com/blog/indalcasa-bootstrap-azure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.indalcasa.com/wp-content/uploads/2012/11/windowsazure.png"><img class="alignleft size-medium wp-image-948" title="windowsazure" src="http://www.indalcasa.com/wp-content/uploads/2012/11/windowsazure-300x53.png" alt="Power by Windows Azure" width="300" height="53" /></a>Llevo tiempo queriendo cambiar el <strong>blog</strong> y finalmente me decidi. He <strong>migrado el blog de hosting</strong>, ahora se encuentra en <strong>nube con azure</strong> y a un precio que de momento parece ser bastante mas económico que los cálculos iniciales que hice. Ya aproveche para instalar un nuevo tema al blog, con una apariencia <strong>bootstrap</strong>, limpia y sencilla y hacer limpieza de plugins y configurar un buen cache.</p>
<p>¿Por qué me decante por <strong>Azure</strong> y no por <strong>Amazon Web Services</strong>? es motivo de un post aparte. De momento me quedo con <strong>Azure</strong>, montando una instancia extra pequeña con un <strong>Ubuntu</strong>, usando <strong>nginx</strong> como servidor web y <strong>MySQL 5.5</strong> como base de datos.</p>
<p>En sucesivos días ire contando las diferentes optimizaciones y configuraciones que he realizado sobre el servidor y el blog. <strong>Cómo instalar nginx</strong>, <strong>configurar php sobre nginx</strong>, <strong>optimizaciones de cache sobre php</strong> y sobre el blog y algunos truquillos que me he visto en la necesidad de sacarme de la manga.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/blog/indalcasa-bootstrap-azure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/blog/indalcasa-bootstrap-azure/</feedburner:origLink></item>
		<item>
		<title>ASP.Net y los errores de “La operación no es válida debido al estado actual del objeto” y como solucionarlo con MaxHttpCollectionKeys</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/EwQt4jtj89c/</link>
		<comments>http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-y-los-errores-de-la-operacion-no-es-valida-debido-al-estado-actual-del-objeto-y-como-solucionarlo-con-maxhttpcollectionkeys/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 21:46:33 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[MVC]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[aspnet]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=936</guid>
		<description><![CDATA[A veces en ASP.Net, se da el caso de que una página tiene un formulario inmenso, cuando por ejemplo queremos mandar un modelo gigantesco. Aunque de darse este caso, deberiamos plantearnos si no debemos cambiar nuestro código, puede que si lo ejecutamos nos de un error indicando &#8220;La operación no es válida debido al estado&#8230; <a href="http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-y-los-errores-de-la-operacion-no-es-valida-debido-al-estado-actual-del-objeto-y-como-solucionarlo-con-maxhttpcollectionkeys/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://webs2.me/wp-content/uploads/2012/11/aspnet.png"><img class="alignright size-full wp-image-917" title="aspnet" src="http://webs2.me/wp-content/uploads/2012/11/aspnet.png" alt="" width="100" height="100" /></a>A veces en <strong>ASP.Net</strong>, se da el caso de que una página tiene un <strong>formulario inmenso</strong>, cuando por ejemplo queremos mandar un modelo gigantesco. Aunque de darse este caso, deberiamos plantearnos si no debemos cambiar nuestro <strong>código</strong>, puede que si lo ejecutamos nos de un error indicando <strong>&#8220;La operación no es válida debido al estado actual del objeto&#8221;</strong> o en ingles <strong>&#8220;Operation is not valid due to the current state of the object&#8221;</strong>. Esto pasa porque hemos <strong>sobrepasado el límite máximo de parámetros</strong> que se pueden enviar.</p>
<p>La solución es bien sencilla, solo debemos modificar nuestro <strong>web.config</strong> para que admita mas <strong>parámetros</strong></p>
<pre class="brush: xml; gutter: true">&lt;configuration&gt;
  &lt;appSettings&gt;
    &lt;add key=&quot;aspnet:MaxHttpCollectionKeys&quot; value=&quot;5000&quot; /&gt;
  &lt;/appSettings&gt;
&lt;/configuration&gt;</pre>
<p>Añadiendo la <strong>key MaxHttpCollectionKeys</strong> y aumentandola hasta 5000, el problema se soluciona.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-y-los-errores-de-la-operacion-no-es-valida-debido-al-estado-actual-del-objeto-y-como-solucionarlo-con-maxhttpcollectionkeys/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/programacion/dotnet-csharp/aspnet-mvc/asp-net-y-los-errores-de-la-operacion-no-es-valida-debido-al-estado-actual-del-objeto-y-como-solucionarlo-con-maxhttpcollectionkeys/</feedburner:origLink></item>
		<item>
		<title>Problema de codificación UTF8, Internet Explorer 8 y PHP</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/MyNEBHWw9UY/</link>
		<comments>http://www.indalcasa.com/programacion/php/problema-de-codificacion-utf8-internet-explorer-8-y-php/#comments</comments>
		<pubDate>Fri, 16 Nov 2012 00:08:24 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=930</guid>
		<description><![CDATA[El otro día tuve que tocar una web antigua de un compañero que estaba hecha en PHP4. Al abrir los archivos para hacer unos cambios que me pidieron, estos estaban codificados en vete tu a saber que codificación, así que al hacer cambios se estaba autocodificando todo en UTF8. Al hacer pruebas, todo va bien,&#8230; <a href="http://www.indalcasa.com/programacion/php/problema-de-codificacion-utf8-internet-explorer-8-y-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.indalcasa.com/wp-content/uploads/2012/11/ene-virguililla.png"><img class="alignleft size-medium wp-image-934" title="ene-virguililla" src="http://www.indalcasa.com/wp-content/uploads/2012/11/ene-virguililla-300x187.png" alt="" width="300" height="187" /></a>El otro día tuve que tocar una web antigua de un compañero que estaba hecha en <strong>PHP4</strong>. Al abrir los archivos para hacer unos cambios que me pidieron, estos estaban codificados en vete tu a saber que <strong>codificación</strong>, así que al hacer cambios se estaba <strong>autocodificando todo en UTF8</strong>. Al hacer pruebas, todo va bien, en <strong>Chrome</strong>, <strong>Safari</strong> y <strong>Firefox</strong> se ve todo estupendamente, incluso en <strong>Internet Explorer 9</strong> se veia bien, eso si, no sin antes añadir en la página el meta indicando que está <strong>codificada en UTF8</strong>. El problema es que cuando abres la misma <strong>web en Internet Explorer 8</strong>, este no muestra bien la <strong>codificación</strong> y esto es porque <strong>Internet Explorer 8</strong> no lee bien el charset del <strong>meta de Content-Type</strong> y por tanto toma la <strong>codificación por defecto</strong>.</p>
<p>Una nota interesante es que <strong>Internet Explorer 8</strong>, aunque <strong>no reconoce el meta de Content-Type</strong>, si que <strong>reconoce el encabezado Content-Type</strong> que se envia desde el servidor en el <strong>protocolo http</strong>, por lo que, siguiendo unos sencillos pasos podemos paliar este problema y migrar esos proyectos antiguos que puedan haber por ahí a editores mas modernos.</p>
<ol>
<li>Recodificar el proyecto. Podemos utilizar un editor que guarde los <strong>archivos por defecto en UTF8</strong> o hacernos de algún script que lo haga por nosotros.</li>
<li>Añadir el <strong>meta de UTF8</strong>. En todas las páginas publicas, debemos añadir un <strong>meta de UTF8</strong> y si ya existiera con el típico <strong>ISO-8859-1</strong>, cambiarlo a <strong>UTF8</strong>. Algo como <strong>&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243; /&gt; </strong></li>
<li>Por último y no menos importante, devolver el encabezado de http con el<strong> Content-Type en UTF-8</strong>. Con algo como esto: <strong>header(&#8216;Content-type: text/html; charset=utf-8&#8242;);</strong></li>
</ol>
<p>El código resultante sería en nuestro html:</p>
<pre class="brush: html; gutter: true">&lt;html&gt;
  &lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
    &lt;title&gt; Indalcasa&lt;/title&gt;
...</pre>
<p>Y nuestro php, antes de devolver nada de texto, pintar la cabecera de http:</p>
<pre class="brush: php; gutter: true">&lt;?php
  header(&#039;Content-type: text/html; charset=utf-8&#039;);
?&gt;</pre>
<p>Por último comentaros que <strong>w3c</strong> recomienda en <strong>HTML5</strong> que el meta de <strong>Content-Type</strong> se ponga como el primer elemento dentro del <strong>head</strong> antes incluso que el title para que se pueda interpretar correctamente la página.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/php/problema-de-codificacion-utf8-internet-explorer-8-y-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/programacion/php/problema-de-codificacion-utf8-internet-explorer-8-y-php/</feedburner:origLink></item>
		<item>
		<title>Forzar la descarga de archivos en Apache con .htaccess e IIS con web.config</title>
		<link>http://feedproxy.google.com/~r/Indalcasa/~3/KkumS9HwQFw/</link>
		<comments>http://www.indalcasa.com/programacion/web-programacion/forzar-la-descarga-de-archivos-en-apache-con-htaccess-e-iis-con-web-config/#comments</comments>
		<pubDate>Thu, 15 Nov 2012 01:16:39 +0000</pubDate>
		<dc:creator>juan</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache server]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[mime]]></category>
		<category><![CDATA[servidor web]]></category>
		<category><![CDATA[servidores]]></category>

		<guid isPermaLink="false">http://www.indalcasa.com/?p=920</guid>
		<description><![CDATA[Cuando tenemos una página web, hay ocasiones en la que queremos que un fichero se descargue, por ejemplo si queremos hacer un sistema de almacenamiento tipo dropbox o simplemente unos pdf que tenemos en nuestra web. Normalmente cuando tenemos un archivo como un pdf, tradicionalmente este siempre se descargaba al abrirlo, pero con los avances&#8230; <a href="http://www.indalcasa.com/programacion/web-programacion/forzar-la-descarga-de-archivos-en-apache-con-htaccess-e-iis-con-web-config/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://webs2.me/wp-content/uploads/2012/11/descargas.jpg"><img class="alignleft size-medium wp-image-925" title="Descargas" src="http://webs2.me/wp-content/uploads/2012/11/descargas-300x230.jpg" alt="" width="300" height="230" /></a>Cuando tenemos una página web, hay ocasiones en la que queremos que un <strong>fichero se descargue</strong>, por ejemplo si queremos hacer un sistema de almacenamiento tipo dropbox o simplemente unos <strong>pdf</strong> que tenemos en nuestra web. Normalmente cuando tenemos un archivo como un <strong>pdf</strong>, tradicionalmente este siempre se descargaba al abrirlo, pero con los avances en los navegadores, cada día mas potentes, nos dan <strong>previsualizadores de pdf</strong>, por lo que ya por defecto no se <strong>descarga</strong> porque los vemos online.</p>
<p>En este ejemplo hablo de <strong>pdf</strong>, pero se puede llevar a cualquier tipo de archivo, incluso un .html. Un archivo <strong>pdf</strong> tiene como <strong>MIME application/pdf</strong>, pero ¿Qué es un <strong>MIME</strong>? Un <strong>MIME</strong> es un estándar que define <strong>tipos de ficheros en base a una categoría y una subcategoría</strong>, por ejemplo, un <strong>pdf</strong> de tipo <strong>application/pdf</strong> quiere decir que es un archivo de <strong>aplicación del tipo pdf</strong>. Otros ejemplos de <strong>MIME</strong> son de <strong>imágenes como el image/jpeg</strong> o de <strong>texto en html text/html</strong>. Cuando un navegador abre un <strong>pdf</strong>, el servidor tiene por defecto configurado indicar que el archivo es de tipo <strong>application/pdf</strong> que se indica en la <strong>cabecera de http Content-Type</strong>.</p>
<p>Tras esta breve explicación, a veces pasa, que no todos los navegadores tienen <strong>visores de pdf</strong>, por los que algunos como pasa con algunas versiones de Firefox o Internet Explorer se <strong>descarguen los archivos</strong>, mientras que Safari o Chrome los visualicen online. Pero claro, este comportamiento no es muy elegante ya que quizás sea necesario que se comporte igual en todos los navegadores y tengamos que hacer que <strong>siempre se descargue el archivo</strong> y esto ya depende del servidor.</p>
<p>Para forzar la <strong>descarga de archivos</strong>, como el ejemplo que tratamos, un <strong>.pdf</strong>, tendremos que <strong>redefinir un MIME asociado a una extensión</strong>, es este caso diremos que es un <strong>octet-stream</strong> o un <strong>stream de bytes</strong> (un <strong>archivo binario</strong>). Al entender el navegador, que el archivo se trata de <strong>un archivo binario</strong>, no intentara leerlo sino que lo <strong>descargará</strong> independientemente de la extensión que tenga.</p>
<p><strong>Forzar la descarga de archivos en Apache con .htaccess</strong></p>
<p>Tan solo tenemos que añadir una nueva entrada <strong>AddType</strong> donde definiremos que los archivos <strong>.pdf son binarios</strong> y por tanto el navegador los <strong>descargará</strong>:</p>
<pre class="brush: text; gutter: true">AddType application/octet-stream .pdf</pre>
<p><strong>Forzar la descarga de archivos en IIS con web.config</strong></p>
<p>Al igual que con <strong>apache</strong>, deberemos indicar al servidor que el tipo de archivo <strong>.pdf es un binario</strong>:</p>
<pre class="brush: xml; gutter: true">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;configuration&gt;
  &lt;system.webServer&gt;
    &lt;staticContent&gt;
      &lt;mimeMap fileExtension=&quot;.pdf&quot; mimeType=&quot;application/octet-stream&quot; /&gt;
    &lt;/staticContent&gt;
  &lt;/system.webServer&gt;
&lt;/configuration&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/web-programacion/forzar-la-descarga-de-archivos-en-apache-con-htaccess-e-iis-con-web-config/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.indalcasa.com/programacion/web-programacion/forzar-la-descarga-de-archivos-en-apache-con-htaccess-e-iis-con-web-config/</feedburner:origLink></item>
	<media:rating>nonadult</media:rating></channel>
</rss><!-- Dynamic page generated in 0.428 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-23 02:06:02 --><!-- Compression = gzip -->
