<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Guiabreve</title>
	<atom:link href="http://guiabreve.com/feed" rel="self" type="application/rss+xml" />
	<link>http://guiabreve.com</link>
	<description>Red Bull-based programming</description>
	<lastBuildDate>Wed, 16 May 2012 13:47:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Sticky Footer, mantener el footer siempre abajo</title>
		<link>http://guiabreve.com/sticky-footer-mantener-el-footer-siempre-abajo.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sticky-footer-mantener-el-footer-siempre-abajo</link>
		<comments>http://guiabreve.com/sticky-footer-mantener-el-footer-siempre-abajo.html#comments</comments>
		<pubDate>Wed, 16 May 2012 13:47:33 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mantener Footer abajo]]></category>
		<category><![CDATA[Sticky Footer]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1838</guid>
		<description><![CDATA[El footer, siempre debe de estar abajo. Esto es algo sencillo en un principio. Pero, si el visitante tiene una pantalla grande y el contenido de nuestra página no se extiende lo suficiente puede provocar que el footer quede a mitad de la pantalla. Para evitar esto existe una técnica llamada Sticky Footer de la <a href="http://guiabreve.com/sticky-footer-mantener-el-footer-siempre-abajo.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>El footer, siempre debe de estar abajo. Esto es algo sencillo en un principio. Pero, si el visitante tiene una pantalla grande y el contenido de nuestra página no se extiende lo suficiente puede provocar que el footer quede a mitad de la pantalla.</p>
<p>Para evitar esto existe una técnica llamada <em>Sticky Footer</em> de la que ya <a href="http://guiabreve.com/como-mantener-el-footer-siempre-abajo.html" title="Como mantener el Footer siempre abajo">hablé aqui</a> entradas atrás.</p>
<p>Esta versión es algo más sencilla que la anterior, y como es un tema que interesa bastante, por lo menos eso de muestran las entradas del blog, quería dejarla aqui.</p>
<p>Están sencillo como estructurar nuestra página de la siguiente forma:</p>
<pre class="brush:html">
<div id="wrap">
<div id="main"></div>
</div>
<div id="footer"></div>
</pre>
<p>Y aplicar el siguiente CSS:</p>
<pre class="brush:css">html, body {height: 100%;}

#wrap {min-height: 100%;}

#main {overflow:auto;
	padding-bottom: 180px;}  /* must be same height as the footer */

#footer {position: relative;
	margin-top: -180px; /* negative value of footer height */
	height: 180px;
	clear:both;} </pre>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/sticky-footer-mantener-el-footer-siempre-abajo.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>3 Fuentes a tener en cuenta</title>
		<link>http://guiabreve.com/3-fuentes-a-tener-en-cuenta.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=3-fuentes-a-tener-en-cuenta</link>
		<comments>http://guiabreve.com/3-fuentes-a-tener-en-cuenta.html#comments</comments>
		<pubDate>Mon, 30 Apr 2012 11:15:56 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Favorítas]]></category>
		<category><![CDATA[Google Fonts]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Tipografia]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1794</guid>
		<description><![CDATA[A la hora de diseñar una web, un cartel, un envoltorio, etc. tenemos que prestar atención a las tipografías que usamos. No todas están destinadas para el mismo uso, algunas son informales, otras están hechas para usar en medios impresos, webs, etc. Por ello, como diseñador, siempre hay que estar al tanto de nuestra librería <a href="http://guiabreve.com/3-fuentes-a-tener-en-cuenta.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>A la hora de diseñar una web, un cartel, un envoltorio, etc. tenemos que prestar atención a las <a href="http://guiabreve.com/tag/tipografia">tipografías</a> que usamos. No todas están destinadas para el mismo uso, algunas son informales, otras están hechas para usar en medios impresos, webs, etc.</p>
<p>Por ello, como diseñador, siempre hay que estar al tanto de nuestra librería de tipografías y buscar la que más se adapte al medio donde vayamos a usarla y la que más nos guste para que el resultado, además de funcional sea estéticamente bonito. A continuación una lista de mis tres fuentes favoritas. Las tres me encantan y suelo tenerlas muy en cuenta. </p>
<h2>1. Museo</h2>
<p><img src="http://guiabreve.com/wp-content/uploads/Museo500.png" alt="" title="Museo500" width="330" class="alignnone size-full wp-image-1795 semifull" />Esta es mi fuente favorita y salta a la vista. La podéis encontrar en el logo de este blog, titulares y algunos textos destacados. ¡Me encanta!</p>
<p>Personalmente me encanta, sobre todo en mayúsculas. Al parecer el autor empezó diseñando la letra &#8220;U&#8221; en mayúsculas y a partir de ahí continuó con el resto de letras mayúsculas. De hecho, en un principio su intención erá crear una tipografía solo en letras mayúsculas aunque finalmente cambió de opinión. Puede que sea esta la razón por la que luce tan bien en mayúsculas.</p>
<p><a href="http://www.myfonts.com/fonts/exljbris/museo/">Museo</a> está disponible en 5 formatos dependiendo de su grosor: 100, 300, 500, 700 y 900. Y cada una de ellas en cursiva o normal. <strong>Las versiones de 300, 500 y 700 en normal son gratuitas, el resto de pago.</strong></p>
<h2>2. Trocchi</h2>
<p><img src="http://guiabreve.com/wp-content/uploads/Trocchi.png" alt="" title="Trocchi" width="330" class="alignnone size-full wp-image-1805 semifull" />Trocchi es una fuente derivada de English typecutter Vincent Figgins (1766-1844). Deriva de estos diseños anteriores para generar una <em>&#8220;slab serif&#8221;</em> algo más informal. Esta fuente se puede usar tanto para diseños como para textos ya que es legible y bonita. Su nombre es en honor del escritor escocés Alexander Trocch. </p>
<p>Esta fuente es completamente gratuita y la tenemos en <a href="http://www.google.com/webfonts/specimen/Trocchi">Google Fonts</a> con lo cual podremos usarla fácilmente en web usando <a href="http://guiabreve.com/tag/font-face">@font-face</a>.</p>
<h2>3. Inconsolata</h2>
<p><img src="http://guiabreve.com/wp-content/uploads/Inconsolata1.png" alt="" title="Inconsolata" width="330" class="semifull alignnone size-full wp-image-1814" />Esta, es mi fuente favorita de ancho fijo. La tengo configurada por defecto en <a href="http://guiabreve.com/opinion-por-que-me-encanta-sublime-text-2.html" title="Opinión: ¿Por qué me encanta Sublime Text 2?">Sublime Text 2</a> (mi editor de texto favorito) y en el Terminal de mac. Aunque este diseñada para usarse en editores de código luce muy bien en cualquier tamaño ya que cuida los detalles al máximo. A pesar de ser una fuente de ancho fijo es muy legible, por eso, es mi preferida para este uso.</p>
<p>Al igual que la anterior, también está <a href="http://www.google.com/webfonts/specimen/Inconsolata">disponible en Google Font</a> y es completamente gratuita.</p>
<p>Me gusta mucho ir viendo <a href="http://guiabreve.com/tag/tipografia">fuentes</a> nuevas pero por ahora, estas 3 son mis imprescindibles, mis favoritas.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/3-fuentes-a-tener-en-cuenta.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Imprimir un solo Div con Javascript</title>
		<link>http://guiabreve.com/imprimir-un-solo-div-con-javascript.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=imprimir-un-solo-div-con-javascript</link>
		<comments>http://guiabreve.com/imprimir-un-solo-div-con-javascript.html#comments</comments>
		<pubDate>Fri, 20 Apr 2012 11:13:21 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Imprimir]]></category>
		<category><![CDATA[Imprimir Div]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1758</guid>
		<description><![CDATA[Hace poco tenía la necesidad de imprimir un sección especifica de una página web. Concretamente quería imprimir un solo div que contenía unas imagenes. Navegando por la red me encontre con varios plugins para jQuery que trataban de hacer esto, desgraciadamente ninguno me funcionó. Como no me funcionó nada, cree este pequeño código javascript que <a href="http://guiabreve.com/imprimir-un-solo-div-con-javascript.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>Hace poco tenía la necesidad de imprimir un sección especifica de una página web. Concretamente quería imprimir un solo div que contenía unas imagenes. Navegando por la red me encontre con varios plugins para <a href="http://guiabreve.com/tag/jquery" title="jQuery en Guiabreve">jQuery</a> que trataban de hacer esto, desgraciadamente ninguno me funcionó.</p>
<p>Como no me funcionó nada, cree este pequeño código <a href="http://guiabreve.com/tag/javascript" title="Javascript en Guiabreve">javascript</a> que hace lo mismo que trataban de hacer esos plugins.</p>
<pre class="brush:js"><script type="text/javascript">
			function imprimir() {
			var bName = navigator.appName;
			var bVer = parseFloat(navigator.appVersion);

			var contenido = document.getElementById("fotos").innerHTML;
			ventana=window.open("/print.php","ventana","width=280,height=411");
			ventana.document.open();
			ventana.document.write('<html><head>
<link rel="stylesheet" type="text/css" media="all" href="http://localhost:8888/trajesguzman/wp-content/themes/trajesguzman/style.css" /></head><body style="background-color: #FFFFFF" id="print">
<div class="page-id-533">');
			ventana.document.write(contenido);
			ventana.document.write('</div>

</body></html>');
			ventana.document.close();
			ventana.print();
			ventana.focus();
		}</script></pre>
<p>Como podéis ver, simplemente agarra el contenido del div que le indiquemos, abre un popup con él y lo imprime. Sencillo y funcional.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/imprimir-un-solo-div-con-javascript.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>No me gusta Prestashop</title>
		<link>http://guiabreve.com/no-me-gusta-prestashop.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=no-me-gusta-prestashop</link>
		<comments>http://guiabreve.com/no-me-gusta-prestashop.html#comments</comments>
		<pubDate>Tue, 17 Apr 2012 10:53:46 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Opinión]]></category>
		<category><![CDATA[Prestashop]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1760</guid>
		<description><![CDATA[Logo de Prestashop Los CMS de tiendas online están todos, por lo general, muy verdes. Las opciones principales que podemos encontrar hoy son Magento y Prestashop. Sobre Magento, no tengo mucho que decir ya que prácticamente no lo he probado pero leyendo opiniones por la red se comenta que el rendimiento es muy malo, y <a href="http://guiabreve.com/no-me-gusta-prestashop.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://guiabreve.com/wp-content/uploads/Captura-de-pantalla-2012-04-17-a-las-10.01.17.png" alt="" title="Captura de pantalla 2012-04-17 a las 10.01.17" width="263" height="251" class="alignnone size-full wp-image-1779 izquierda noborder" />
<div class="izquierda"><center>Logo de <a href="http://guiabreve.com/tag/prestashop">Prestashop</a></center></div>
<p>Los <a href="http://guiabreve.com/tag/cms" title="CMS en Guiabreve">CMS</a> de tiendas online están todos, por lo general, muy verdes. Las opciones principales que podemos encontrar hoy son <a href="http://www.magentocommerce.com/">Magento</a> y <a href="http://www.prestashop.com/es/">Prestashop</a>.</p>
<p>Sobre <strong>Magento</strong>, no tengo mucho que decir ya que prácticamente no lo he probado pero leyendo opiniones por la red se comenta que el rendimiento es muy malo, y que además es demasiado complejo, tiene muchas opciones, es muy lioso y la curva de aprendizaje es lenta, muy lenta. Al parecer está más pensado para grandes empresas no para pequeñas tiendas de PYMES.</p>
<p>En cambio, <strong>Prestashop</strong>, si lo he probado y tampoco me gusta. Parece ser la mejor opción de las disponibles pero:</p>
<ul>
<li>El panel de control, apesta. Tal cual, la usabilidad es mínima. Por ejemplo:</li>
<ul>
<li>Hay cosas que se configuran en <em>Tools</em> como el idioma y otras en <em>Preferences</em> como la Geolocalización.</li>
<li>Las pestañas son un menú en si mismas.</li>
<li>Si queremos editar una categoría estando dentro de ella tenemos que hacer click en un icono situado en el <em>breadcumb</em>.</li>
<li>Hay opciones “ocultas”. Cosas como cambiar el email de destino del formulario de contacto te puede llevar varios minutos las primeras veces.</li>
</ul>
<li>Errores, muchos errores. He tenido todo tipo de problemas, el carro ajax da problemas, el proceso de compras en un solo paso, la función para recuperar la contraseña nunca me ha funcionado (he tenido que recurrir a <a href="http://vhspiceros.blogspot.com.es/2009/09/recuperar-clave-de-usuarios-en.html">“trucos” para recuperarla</a>) , etc.</li>
<li>No es posible, por defecto, exportar listas de productos, categorías, etc. Podemos importar estos desde un CSV sin muchos problemas, pero si queremos luego exportarlos para realizar cualquier cambio tendremos que recurrir a modulos externos en su mayoría, de pago.</li>
</ul>
<p>Aún así, una vez superados estos problemas y una vez que consigues acostumbrarte al panel de control tiene cosas muy buenas, como por ejemplo, la opción de crear productos configurables o con atributos además del generador de estos es bastante bueno.</p>
<p>Supongo que es cuestión de que vaya evolucionando y corrigiendo estás cosas. Tengo ganas de que hagan un rediseño del panel de control simplificándolo y organizándolo, se me hace muy incomodo de usar.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/no-me-gusta-prestashop.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>TOC, genera tablas de contenido automáticamente</title>
		<link>http://guiabreve.com/toc-genera-tablas-de-contenido-automaticamente.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=toc-genera-tablas-de-contenido-automaticamente</link>
		<comments>http://guiabreve.com/toc-genera-tablas-de-contenido-automaticamente.html#comments</comments>
		<pubDate>Tue, 10 Apr 2012 13:35:37 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[TOC]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1748</guid>
		<description><![CDATA[TOC es un pequeño plugin jQuery que nos permite generar tablas de contenido automáticamente. El plugin automáticamente recorrera todo el contenido de nuestra página buscando las cabeceras (h1, h2, h3 …) y creando una lista de enlaces con sus anclas o anchors. Además nos añade un efecto de desplazamiento suave al hacer clic sobre estás <a href="http://guiabreve.com/toc-genera-tablas-de-contenido-automaticamente.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://projects.jga.me/toc" title="Toc jQuery Plugin">TOC</a></strong> es un pequeño plugin <a href="http://guiabreve.com/tag/jquery" title="jQuery en Guiabreve">jQuery</a> que nos permite generar tablas de contenido automáticamente.</p>
<p>El plugin automáticamente recorrera todo el contenido de nuestra página buscando las cabeceras (h1, h2, h3 …) y creando una lista de enlaces con sus anclas o <em>anchors</em>. Además nos añade un efecto de desplazamiento suave al hacer clic sobre estás anclas y también destacará en el menú la posición actual donde nos encontremos.</p>
<p>Un plugin sencillo, ideal para crear páginas de documentación, para <em>faq&#8217;s</em> o para contenido muy largo en general.</p>
<p>Para integrar el plugin en nuestra página simplemente bastará con incluir la librería de jQuery además del archivo <code>jquery.toc.js</code> e iniciar el plugin.</p>
<div class="izquierda">Con <code>$('#toc').toc();</code> bastaría para iniciar el plugin. Arriba se muestra todas las opciones de personalización disponibles.</div>
<pre class="brush:js">$('#toc').toc({
    'selectors': 'h1,h2,h3', //elements to use as headings
    'container': 'body', //element to find all selectors in
    'smoothScrolling': true, //enable or disable smooth scrolling on click
    'prefix': 'toc', //prefix for anchor tags and class names
    'highlightOnScroll': true, //add class to heading that is currently in focus
    'highlightOffset': 100, //offset to trigger the next headline
    'anchorName': function(i, heading, prefix) { //custom function for anchor name
        return prefix+i;
    }
});</pre>
<p>A continuación solo nos queda darle algo de CSS al menú. Por ejemplo, para dejarlo tal y como se muestra en la documentación bastaría con:</p>
<pre class="brush:css">#toc {
    top: 0px;
    left: 0px;
    height: 100%;
    position: fixed;
    background: #333;
    box-shadow: inset -5px 0 5px 0px #000;
    width: 150px;
    padding-top: 20px;
    color: #fff;
}

#toc ul {
    margin: 0;
    padding: 0;
    list-style: none;
}

#toc li {
    padding: 5px 10px;
}

#toc a {
    color: #fff;
    text-decoration: none;
    display: block;
}

#toc .toc-h2 {
    padding-left: 10px;
}

#toc .toc-h3 {
    padding-left: 20px;
}

#toc .toc-active {
    background: #336699;
    box-shadow: inset -5px 0px 10px -5px #000;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/toc-genera-tablas-de-contenido-automaticamente.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mover una instalación de WordPress de dominio</title>
		<link>http://guiabreve.com/mover-una-instalacion-de-wordpress-de-dominio.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mover-una-instalacion-de-wordpress-de-dominio</link>
		<comments>http://guiabreve.com/mover-una-instalacion-de-wordpress-de-dominio.html#comments</comments>
		<pubDate>Wed, 28 Mar 2012 13:23:02 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Dominio]]></category>
		<category><![CDATA[Hosting]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1731</guid>
		<description><![CDATA[Muchas veces he necesitado cambiar una instalación de WordPress de hosting y/o dominio. Para cambiarlo de hosting, manteniendo el mismo dominio no suele haber problemas. Movemos los archivos, exportamos e importamos la base de datos y configuramos el archivo wp-config.php y listo. Si el dominio también cambia además de hacer estos cambios, tenemos el problema <a href="http://guiabreve.com/mover-una-instalacion-de-wordpress-de-dominio.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://guiabreve.com/tag/wordpress"><img src="http://guiabreve.com/wp-content/uploads/wordpress-logo-notext-rgb-300x300.png" alt="Wordpress" title="Wordpress" class="izquierda alignnone size-medium wp-image-1740 noborder" /></a>Muchas veces he necesitado cambiar una instalación de WordPress de hosting y/o dominio. Para cambiarlo de hosting, manteniendo el mismo dominio no suele haber problemas. Movemos los archivos, exportamos e importamos la base de datos y configuramos el archivo <code>wp-config.php</code> y listo.</p>
<p>Si el dominio también cambia además de hacer estos cambios, tenemos el problema de que los enlaces internos dejarán de funcionar y además, las imágenes que tenemos incrustadas, también dejarán de funcionar por el cambio de dominio. Soluciones para esto hay muchas, la más fácil, la que he encontrado en el blog de <a href="http://www.anieto2k.com/2007/04/18/cambiar-enlaces-al-cambiar-de-dominio/">Andrés</a>.</p>
<p>Simplemente entramos a PHPMyAdmin o cualquier otro y ejecutamos la siguiente consulta SQL:</p>
<pre class="brush:sql">update wp_posts set post_content = replace(post_content,'http://www.antiguo.com','http://www.nuevo.com');</pre>
<p>Esta consulta lo que hará es buscar en el contenido de nuestras entradas toda las apariciones en enlaces del dominio antiguo replazandolo por el nuevo. Así de fácil.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/mover-una-instalacion-de-wordpress-de-dominio.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevos selectores de CSS3</title>
		<link>http://guiabreve.com/nuevos-selectores-de-css3.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nuevos-selectores-de-css3</link>
		<comments>http://guiabreve.com/nuevos-selectores-de-css3.html#comments</comments>
		<pubDate>Mon, 26 Mar 2012 12:42:48 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[new]]></category>
		<category><![CDATA[nuevos]]></category>
		<category><![CDATA[Pseudo selectores]]></category>
		<category><![CDATA[Pseudo selectors]]></category>
		<category><![CDATA[selectores]]></category>
		<category><![CDATA[Selectors]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1708</guid>
		<description><![CDATA[La API de selectores describen el modo de seleccionar elementos dentro de la página con el proposito de aplicarles estilo. Esta API esta compuesta por los selectores que ya existían en las versiones 1 y 2 de CSS y ahora con la llegada de la nueva versión se añaden más a la lista. Los selectores <a href="http://guiabreve.com/nuevos-selectores-de-css3.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://guiabreve.com/tag/css3"><img class="alignnone size-full wp-image-1712 izquierda noborder" title="CSS3 Logo" src="http://guiabreve.com/wp-content/uploads/HTML5_Styling_512.png" alt="CSS3 Logo" width="512" height="512" /></a>La API de selectores describen el modo de seleccionar elementos dentro de la página con el proposito de aplicarles estilo. Esta API esta compuesta por los selectores que ya existían en las versiones 1 y 2 de CSS y ahora con la llegada de la nueva versión se añaden más a la lista.</p>
<p>Los selectores podemos organizarlos en varias categorías.</p>
<h3>1. Pseudo-clases estructurales</h3>
<p>Permiten seleccionar elementos basándose en información extra del árbol del documento. Es decir, además de las clases e id podemos seleccionar elementos basándonos en su posición en el documento:</p>
<ul>
<li><strong>:root</strong>: selecciona la raíz del documento.</li>
<li><strong>:nth-child(n)</strong>: selecciona elementos que son el n-ésimo hijo de sus padres.</li>
<li><strong>:nth-last-child(n)</strong>: selecciona elementos que son el n-ésimo hijo de sus padres, empezando a contar por el final.</li>
<li><strong>:nth-of-type(n)</strong>: selecciona elementos que son el n-ésimo hermano de un tipo.</li>
<li><strong>:nth-last-of-type(n)</strong>: igual que el anterior, pero contando desde el final.</li>
<li><strong>:last-child</strong>: selecciona elementos que son el último hijo de sus padres.</li>
<li><strong>:first-of-type</strong>: selecciona elementos que son el último hermano de su tipo.</li>
<li><strong>:last-of-type</strong>: selecciona elementos que son el último hermano de su tipo.</li>
<li><strong>:only-of-type: </strong>selecciona elementos que son el único hermano de su tipo.</li>
<li><strong>:only-child</strong>: selecciona elementos que son el único hijo de sus padres.</li>
<li><strong>:empty</strong>: selecciona elementos que no tienen hijos.</li>
</ul>
<h3>2. Pseudo-clases de estado del elemento</h3>
<p>Estos seleccionan elementos dependiendo de l estado de este:</p>
<ul>
<li><strong>:enabled/<strong>:disabled</strong></strong>: selecciona elementos que están activados/desactivados.</li>
<li><strong>:checked</strong>: selecciona elementos marcados.</li>
<li><strong>:indetermined</strong>: selecciona elementos cuyo estado no está determinado.</li>
</ul>
<h3>3. Elementos desclasificados</h3>
<p>Finalmente, tenemos 3 elementos que no pueden ser añadidos a ninguna de las categorías anteriores.</p>
<ul>
<li><strong>:target</strong>: selecciona un elemento que se corresponde con un enlace con nombre (named archor) dentro de la página.</li>
<li><strong>:not(s)</strong>: selecciona los elementos que no cumplen un selector simple pasado como parámetro.</li>
<li><strong>:selection</strong>: selecciona cualquier parte de la página que haya sido resaltada por el usuario.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/nuevos-selectores-de-css3.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>W3C: Vendors Prefixes, para qué son y por que se recomienda su uso</title>
		<link>http://guiabreve.com/w3c-vendors-prefixes-para-que-son-y-por-que-se-recomienda-su-uso.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=w3c-vendors-prefixes-para-que-son-y-por-que-se-recomienda-su-uso</link>
		<comments>http://guiabreve.com/w3c-vendors-prefixes-para-que-son-y-por-que-se-recomienda-su-uso.html#comments</comments>
		<pubDate>Fri, 23 Mar 2012 13:42:38 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Estandares]]></category>
		<category><![CDATA[Prefijos de fabricantes]]></category>
		<category><![CDATA[Prefijos de vendedores]]></category>
		<category><![CDATA[Vendors Prefixes]]></category>
		<category><![CDATA[W3C]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1693</guid>
		<description><![CDATA[Los vendors prefixes hacen referencia a prefijos que colocan los fabricantes de navegadores delante de ciertas propiedades. Normalmente pensamos que estos prefijos están para molestar, para obligarnos a escribir una misma propiedad varias veces para que funcione en los distintos navegadores. Por desconocimiento, se piensa que es algo que existe para fragmentar la Web y <a href="http://guiabreve.com/w3c-vendors-prefixes-para-que-son-y-por-que-se-recomienda-su-uso.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>Los vendors prefixes hacen referencia a prefijos que colocan los fabricantes de navegadores delante de ciertas propiedades.</p>
<p>Normalmente pensamos que estos prefijos están para molestar, para obligarnos a escribir una misma propiedad varias veces para que funcione en los distintos navegadores. <strong>Por desconocimiento, se piensa que es algo que existe para fragmentar la Web</strong> y obligar a los desarrolladores a realizar modificaciones especificas para los distintos navegadores.</p>
<p>Esto es un error, lo cierto, es que los prefijos están precisamente para lo contrario. Las propiedades con estos prefijos nos indican que aún no han llegado a ser un estándar aprobado por la W3C o que están en fase experimental.</p>
<p>Un propiedad debe pasar varias etapas hasta su estandarización. El ciclo habitual de aprobación de un estándar en la W3C comprende los siguientes niveles:</p>
<ul>
<li><strong>Working draft:</strong> borradores. Son versiones muy verdes, aún se está recogiendo <em>feedback</em> de la comunidad y son muy susceptibles a cambios e incluso las características del estándar pueden cambiar.</li>
<li><strong>Candidate Recommendation:</strong> ya se considera un elemento maduro por la W3C.</li>
<li><strong>Proposed Recommendation:</strong> se ha comprobado que la especificación se puede desarrollar con almenos dos versiones independientes e interoperables.</li>
<li>Por último, <strong>W3C Recommendaiton</strong>. Ya es un estandar como tal.</li>
</ul>
<p>Por lo tanto, la W3C recomienda el uso de prefijos mientras la propiedad no sea un <em>W3C Recommendation</em>, es decir, un estándar como tal.</p>
<p>De esta forma se evita que los desarrolladores ignoren la inmadurez de la propiedad en cuestión y además aceptan que la propiedad es susceptible a cambios.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/w3c-vendors-prefixes-para-que-son-y-por-que-se-recomienda-su-uso.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Responsinator, herramienta, perfecta, para testear diseños sensibles</title>
		<link>http://guiabreve.com/responsinator-herramienta-perfecta-para-testear-disenos-sensibles.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=responsinator-herramienta-perfecta-para-testear-disenos-sensibles</link>
		<comments>http://guiabreve.com/responsinator-herramienta-perfecta-para-testear-disenos-sensibles.html#comments</comments>
		<pubDate>Tue, 20 Mar 2012 13:18:34 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Diseños sensibles]]></category>
		<category><![CDATA[Herramienta]]></category>
		<category><![CDATA[Responsinator]]></category>
		<category><![CDATA[Responsive Design]]></category>
		<category><![CDATA[Sensitive Design]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1682</guid>
		<description><![CDATA[Los diseños sensibles o responsive design, son la gran novedad, lo que todos quieren  y de lo que todos hablan. Hacer que una misma web con el mismo contenido se vea a la perfección en distintos dispositivos solo detectando el tamaño de la pantalla es muy atractivo y cómodo tanto para el usuario y el <a href="http://guiabreve.com/responsinator-herramienta-perfecta-para-testear-disenos-sensibles.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone semifull noborder size-full wp-image-1684" title="Captura de pantalla 2012-03-17 a la(s) 17.34.45" src="http://guiabreve.com/wp-content/uploads/Captura-de-pantalla-2012-03-17-a-las-17.34.45.png" alt="" width="400" />Los diseños sensibles o responsive design, son la gran novedad, lo que todos quieren  y de lo que todos hablan. Hacer que una misma web con el mismo contenido se vea a la perfección en distintos dispositivos solo detectando el tamaño de la pantalla es muy atractivo y cómodo tanto para el usuario y el desarrollador.</p>
<p>El problema a la hora de crear y sobre todo testear un diseño de este tipo es que no disponemos de distintos dispositivos ni pantallas. Tampoco sabemos la resolución de la mayoría de smartphones o <em>tablets</em> del mercado, etc.</p>
<p>Con <strong><a title="The Responsinator" href="http://www.responsinator.com/">The Responsinator</a></strong> podemos ver de un solo vistazo como se vería nuestra web en la mayoría de dispositivos disponible en el mercado de forma que rápidamente nos haremos una idea y podremos ver los errores, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/responsinator-herramienta-perfecta-para-testear-disenos-sensibles.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ToolBox Theme, el theme perfecto para usar de base</title>
		<link>http://guiabreve.com/toolbox-theme-el-theme-perfecto-para-usar-de-base.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=toolbox-theme-el-theme-perfecto-para-usar-de-base</link>
		<comments>http://guiabreve.com/toolbox-theme-el-theme-perfecto-para-usar-de-base.html#comments</comments>
		<pubDate>Tue, 06 Mar 2012 10:38:11 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Automattic]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Toolbox]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1652</guid>
		<description><![CDATA[ToolBox es un theme creado por la misma gente de Automattic. El theme esta pensado para usarse como base o framework para desarrollar nuestros propios themes. He probado otros theme frameworks pero ninguno me ha gustado. Este, al contrario me ha ido muy bien, con el he conseguido maquetar diseños muy rápida ya que la <a href="http://guiabreve.com/toolbox-theme-el-theme-perfecto-para-usar-de-base.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img class="semifull" title="toolbox" src="http://guiabreve.com/wp-content/uploads/toolbox.jpeg" alt="" width="280" /><a href="http://wordpress.org/extend/themes/toolbox"><strong>ToolBox</strong></a> es un theme creado por la misma gente de <a href="http://automattic.com/">Automattic</a>. El theme esta pensado para usarse como base o <em>framework</em> para desarrollar nuestros propios themes.</p>
<p>He probado otros <em>theme frameworks</em> pero ninguno me ha gustado.</p>
<p>Este, al contrario me ha ido muy bien, con el he conseguido maquetar diseños muy rápida ya que la mayoría de el código base ya está, simplemente tienes que centrarte en el diseño.</p>
<p>Estas son algunas de las ventajas que obtenemos con Toolbox son:</p>
<ul>
<li><strong>CSS minimo:</strong> el theme viene con los estilos css mínimos para que el theme mantenga minimamente la forma (header arriba, sidebar a la derecha y footer abajo) con lo cual no habrá estilos que nos molesten a la hora de personalizarlo, ni cientos de lineas por los que movernos buscando la clase adecuada.</li>
<li><strong>Definir nuevos sidebar es cosa de niños.</strong> Todo está preparado de tal forma que podemos definir un nuevo sidebar en segundos.</li>
<li><strong>Menús.</strong> Al igual que con los <em>sidebars</em> añadir menús es coser y cantar.</li>
<li>Esta <strong>escrito en HTML5</strong></li>
<li>Y lo mejor de todo. Esta echo por los chicos de Automattic, creadores de WordPress. Quien mejores que ellos para crear un buen código, compatible y que haga que nuestro <em>theme</em> pase los controles de calidad cuando queramos, por ejemplo, darlo de alto en el directorio.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/toolbox-theme-el-theme-perfecto-para-usar-de-base.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevo trabajo, nueva vida</title>
		<link>http://guiabreve.com/nuevo-trabajo-nueva-vida.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nuevo-trabajo-nueva-vida</link>
		<comments>http://guiabreve.com/nuevo-trabajo-nueva-vida.html#comments</comments>
		<pubDate>Thu, 01 Mar 2012 20:24:07 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Guiabreve]]></category>
		<category><![CDATA[Madrid]]></category>
		<category><![CDATA[Tiempo]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1645</guid>
		<description><![CDATA[Como algunos sabréis, si leéis mi Twitter, me he mudado a Madrid por cuestiones de trabajo. Llevo tres semanas en Madrid, con un nuevo trabajo en Clever Consulting y la verdad que todo va bastante bien, y a pesar de que trabajo las mismas horas de siempre y hago más o menos las mismas cosas <a href="http://guiabreve.com/nuevo-trabajo-nueva-vida.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>Como algunos sabréis, si leéis mi <a href="http://twitter.com/victoor" title="Twitter: @victoor">Twitter</a>, me he mudado a Madrid por cuestiones de trabajo.</p>
<p>Llevo tres semanas en Madrid, con un nuevo trabajo en <a href="http://cleverconsulting.net">Clever Consulting</a> y la verdad que todo va bastante bien, y a pesar de que trabajo las mismas horas de siempre y hago más o menos las mismas cosas de siempre no consigo llegar a casa antes de las 21/22 h. y llego rendido.</p>
<p>Mi intención es seguir publicando con la regularidad normal, dos o tres entradas a la semana, e incluso tengo una pequeña modificación del diseño del blog, aunque aún esta a medias.</p>
<p>Os pido disculpas y en las próximas semanas esto volverá a la normalidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/nuevo-trabajo-nueva-vida.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opinión: ¿Por qué me encanta Sublime Text 2?</title>
		<link>http://guiabreve.com/opinion-por-que-me-encanta-sublime-text-2.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=opinion-por-que-me-encanta-sublime-text-2</link>
		<comments>http://guiabreve.com/opinion-por-que-me-encanta-sublime-text-2.html#comments</comments>
		<pubDate>Fri, 10 Feb 2012 08:53:19 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Editor de texto]]></category>
		<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[Sublime Text 2]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1598</guid>
		<description><![CDATA[Llevo usando este editor desde hace meses y desde el primer momento me encantó. He dejado de usar Coda, editor que me era imprescindible hasta ahora. El editor, desgraciadamente no es perfecto, tiene algunas carencias como por ejemplo un buen FTP como el de Coda para conectar con el servidor, editar archivos en linea, subir <a href="http://guiabreve.com/opinion-por-que-me-encanta-sublime-text-2.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p>Llevo usando este editor desde hace meses y desde el primer momento me encantó. He dejado de usar Coda, editor que me era imprescindible hasta ahora.</p>
<p>El editor, desgraciadamente no es perfecto, tiene algunas carencias como por ejemplo un buen FTP como el de Coda para conectar con el servidor, editar archivos en linea, subir archivos locales, etc. Pero, tiene otras características que lo hacen muy comodo y útil a la hora de programar.</p>
<h3>1. Selección multiple</h3>
<p><img class="izquierda" title="Captura de pantalla 2012-02-08 a la(s) 21.08.15" src="http://guiabreve.com/wp-content/uploads/Captura-de-pantalla-2012-02-08-a-las-21.08.15.png" alt="" width="173" height="156" />Esta es una de esas características que una vez te acostumbras a usarlas no puedes vivir sin ellas.</p>
<ul>
<li>Pulsando <code>⌘ + D</code> seleccionamos la siguiente ocurrencia según el texto que tengamos seleccionado.</li>
<li>Con <code>⌘ + L</code> seleccionamos la siguiente linea.</li>
<li>Y con <code>⌘ + ratón</code> podremos seleccionar lo que queramos manualmente.</li>
</ul>
<h3>2. Minimapa</h3>
<p>Consiste en una pequeña barra lateral derecha en la que podremos ver nuestro código en pequeño y así ir de un solo clic a cualquier sitio del código que queramos.</p>
<p>Resulta útil para ver todo el código de un solo vistazo y movernos por el cómodamente.</p>
<h3>3. Control de paquetes</h3>
<p>O <em>Package Control</em> en ingles nos permite instalar plugins y configurar a nuestro gusto el editor. Para instalarlo tenemos que abrir la consola de Sublime ( View » Show Console ) y pegar lo siguiente:</p>
<pre>import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())</pre>
<p>Tenemos todo tipo de <em>plugins</em> o paquetes estos son mis favoritos:</p>
<ul>
<li><strong><a href="http://code.google.com/p/zen-coding/">ZenCoding</a></strong>, es mi favorito con diferencia. Para los que no lo conozcáis, nos permite escribir código de forma más sencilla y rápida, por ejemplo:
<pre class="brush:html">.caja&gt;ol&gt;li*5</pre>
<p>Pasaría a ser:</p>
<pre class="brush:html">&lt;div class="caja"&gt;
	&lt;ol&gt;
		&lt;li&gt;&lt;/li&gt;
		&lt;li&gt;&lt;/li&gt;
		&lt;li&gt;&lt;/li&gt;
		&lt;li&gt;&lt;/li&gt;
		&lt;li&gt;&lt;/li&gt;
	&lt;/ol&gt;
&lt;/div&gt;</pre>
</li>
<li><a href="http://prefixr.com/">Prefixr</a> nos permite hacer más compatible nuestro código CSS con todos los navegadores. Seleccionamos el código CSS que queramos procesar, pulsamos <code>Ctrl+⌘+X</code> y nos transformará el código automáticamente.</li>
</ul>
<h3>4. Personalización</h3>
<p><img src="http://guiabreve.com/wp-content/uploads/Captura-de-pantalla-2012-02-08-a-las-23.52.08.png" alt="" title="Captura de pantalla 2012-02-08 a la(s) 23.52.08" width="1085" class="full noborder" /><br />
Junto a los plugins, podemos personalizar la apariencia por medio de themes.</p>
<p>Personalmente el diseño que trae Sublime Text 2 me parece demasiado oscuro. Me gusta más un diseño claro ya que se me cansa menos la vista después de unas horas usandolo. <strong><a href="https://github.com/buymeasoda/soda-theme">Soda</a></strong> es un theme que me encanta. Clarito, elegante y encaja a la perfección en Mac OS.</p>
<h3>5. Navegación por teclado</h3>
<p>La he dejado para el final, pero es de las mejores. <abbr title="Sublime Text 2">ST2</abbr> incorpora una serie de accesos de teclado que nos permite movernos por nuestro archivo de texto de forma rápida y directa sin tener que usar el ratón.</p>
<p>Para acceder a esta función tenemos que pulsar <code>Ctrl/⌘ + P</code> y nos aparecerá un cuadro de texto donde podremos:</p>
<ol>
<li>Ir a cualquier función del código escribiendo<code>@ + Nombre de la función</code></li>
<li>Con <code>#</code> nos moveremos por las distintas etiquetas HTML del documento.</li>
<li>Escribiendo <code>: + Número</code> iremos directamente a la linea en cuestión.</li>
<li>Y, si no ponemos ningún caracter especial podremos abrir cualquier archivo simplemente tecleando el nombre de este.</li>
</ol>
<p>Puede parecer algo complejo, pero desde que te acostumbras a usarlo se convierte en una herramienta fundamental.</p>
<p><strong>Estas son las 5 razones que a mi me convencieron. Te aconsejo que lo pruebas, ya que no pierdes nada y tomes tu propia decisión. ¿Cual es tu editor favorito?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/opinion-por-que-me-encanta-sublime-text-2.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Usando las expresiones regulares (III)</title>
		<link>http://guiabreve.com/usando-las-expresiones-regulares-iii.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usando-las-expresiones-regulares-iii</link>
		<comments>http://guiabreve.com/usando-las-expresiones-regulares-iii.html#comments</comments>
		<pubDate>Wed, 25 Jan 2012 10:58:37 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Expresiones Regulares]]></category>
		<category><![CDATA[Comprobar]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Usar]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1559</guid>
		<description><![CDATA[Indice de la serie: Creando y entendiendo expresiones regulares Expresiones regulares comunes Usando las expresiones regulares Este es el último artículo de esta Guia de Expresiones Regulares. En el primer capítulo vimos las palabras reservadas para crear nuestras propias expresiones regulares. En el segundo, vimos y explicamos algunas de las expresiones más comunes. Por último, <a href="http://guiabreve.com/usando-las-expresiones-regulares-iii.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<div class="izquierda indice" style="text-align:left;">
<h3>Indice de la serie:</h3>
<ol>
<li><a href="http://guiabreve.com/creando-y-entendiendo-las-expresiones-regulares-i.html" title="Creando y entendiendo las Expresiones regulares (I)">Creando y entendiendo expresiones regulares</a></li>
<li><a href="http://guiabreve.com/expresiones-regulares-mas-comunes-ii.html" title="Expresiones regulares más comunes (II)">Expresiones regulares comunes</a></li>
<li><a href="http://guiabreve.com/usando-las-expresiones-regulares.html" title="Usando las expresiones regulares">Usando las expresiones regulares</a></li>
</ol>
</div>
<p>Este es el último artículo de esta <strong><a href="http://guiabreve.com/categoria/guias/expresiones-regulares" title="Guia de Expresiones Regulares">Guia de Expresiones Regulares</a></strong>. En el primer capítulo vimos las palabras reservadas para <a href="http://guiabreve.com/creando-y-entendiendo-las-expresiones-regulares-i.html" title="Creando y entendiendo las Expresiones regulares (I)">crear nuestras propias expresiones regulares</a>. En el segundo, <a href="http://guiabreve.com/expresiones-regulares-mas-comunes-ii.html" title="Expresiones regulares más comunes (II)">vimos y explicamos algunas de las expresiones más comunes</a>.</p>
<p>Por último, en este tercer capítulo, aprenderemos a usar las expresiones regulares que hemos aprendido a crear o hemos visto anteriormente.</p>
<h4>Usar expresiones en PHP</h4>
<p>En PHP disponemos de la función <a href="http://www.php.net/preg_match">preg_match</a>:</p>
<pre class="brush:php">preg_match ( string $pattern , string $subject [, array &#038;$matches [, int $flags = 0 [, int $offset = 0 ]]] )</pre>
<p>Esta función dispone de 2 parámetros obligatorios y tres opcionales, pero, por lo general con los tres primeros nos será más que suficiente:</p>
<ol>
<li><strong>pattern</strong>, aqui irá nuestra expresión regular.</li>
<li><strong>subject</strong>, será un <code>string</code> en donde se buscará la expresión regular.</li>
<li><strong>matches</strong>, nos devolverá las coincidencias. En <code>matches[0]</code> contendrá el texto completo coincidente con la expresión. En <code>matches[1]</code> la primera parte de la expresión, etc.</li>
</ol>
<p>También podemos usar <a href="http://php.net/manual/en/function.preg-replace.php"><code>preg_replace</code></a> en caso de que queramos buscar y remplazar algo.</p>
<h4>En Javascript</h4>
<p>En javascript usamos <code>match</code>. Como podemos ver en el siguiente código:</p>
<ol>
<li>Definimos la expresión regular (en este caso comprobaremos un email).</li>
<li>Creamos la variable que queremos comprobar.</li>
<li>Y usando <code>email.match(RegExPattern)</code> devolverá true o false dependiendo si coincide o no y entrará a la sección del <em>if</em> correspondiente.</li>
</ol>
<pre class="brush:js">    var RegExPattern = /[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/;
    var email = 'victoor89@gmail.com';

    if ((email.match(RegExPattern))) {
        alert('Email correcto');
    } else {
        alert('Incorrecto');
    } </pre>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/usando-las-expresiones-regulares-iii.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducción a la programación para iPhone (II): UITableView</title>
		<link>http://guiabreve.com/introduccion-a-la-programacion-para-iphone-ii-uitableview.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introduccion-a-la-programacion-para-iphone-ii-uitableview</link>
		<comments>http://guiabreve.com/introduccion-a-la-programacion-para-iphone-ii-uitableview.html#comments</comments>
		<pubDate>Wed, 18 Jan 2012 09:56:53 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Programando para iOS con xCode 4]]></category>
		<category><![CDATA[Guia]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objetive-C]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[xCode 4]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1509</guid>
		<description><![CDATA[Indice de la guia: Introducción UITableView &#8230; Hoy continuamos con esta guia de programación para iPhone. En el primer capítulo aprendimos a crear una aplicación sencilla que tras pulsar un botón nos muestre en un label el mensaje &#8220;Hola Mundo!&#8221;. Erá una aplicación sencilla pero con ella aprendimos a relacionar elementos del StoryBoard con el <a href="http://guiabreve.com/introduccion-a-la-programacion-para-iphone-ii-uitableview.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<div class="izquierda indice" style="text-align:left;">
<h3>Indice de la guia:</h3>
<ol>
<li><a href="http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html" title="Introduccion a la programación para iOS con xCode 4 (I)">Introducción</a></li>
<li><a href="http://guiabreve.com/introduccion-a…para-iphone-ii.html" title="Expresiones regulares más comunes (II)">UITableView</a></li>
<li>&#8230;</li>
</ol>
</div>
<p>Hoy continuamos con esta guia de <a href="http://guiabreve.com/categoria/guias/programando-para-ios-con-xcode-4" title="Guia: Programación para iPhone con xCode 4">programación para iPhone</a>.</p>
<p>En el <a href="http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html" title="Introduccion a la programación para iOS con xCode 4 (I)">primer capítulo</a> aprendimos a crear una aplicación sencilla que tras pulsar un botón nos muestre en un label el mensaje &#8220;Hola Mundo!&#8221;. Erá una aplicación sencilla pero con ella aprendimos a relacionar elementos del StoryBoard con el código y a crear acciones que se ejecutan al pulsar sobre botones.</p>
<p><strong>En este capitulo</strong>, el segundo, aprenderemos a manejar los <strong>UITableView</strong> que son uno de los elementos más útiles que nos encontraremos a la hora de crear una app. Para empezar simplemente crearemos una tabla y añadiremos celdas a partir de un array que crearemos también.</p>
<h3>Vamos, paso a paso</h3>
<p>Para empezar, como siempre, creamos un nuevo proyecto (No voy a explicar como crear un nuevo proyecto, en el capítulo uno de esta guia ya se explica). En este caso, crearemos una &#8220;<em>Empty Application</em>&#8220;.</p>
<p>Como podemos ver, este proyecto comienza solo con los archivos <strong>AppDelegate.h</strong> y <strong>AppDelegate.m</strong>. </p>
<p>Necesitamos un archivo StoryBoard. Para crearlo vamos a <em>File » New » New File…</em> y en la categoría <em>UserInterface</em> elegimos StoryBoard y lo creamos.</p>
<h3>Ahora pasamos con el archivo StoryBoard</h3>
<p><img src="http://guiabreve.com/wp-content/uploads/iphone-xcode4-1.png" alt="" title="iphone-xcode4-1" width="755" height="314" class="full" /><br />
Para empezar tenemos que arrastrar una <em>Table View Controler</em> al <em>StoryBoard</em>. Este nos creará la primera vista con el <em>TableView</em> incluido. </p>
<p><img src="http://guiabreve.com/wp-content/uploads/iphone-xcode4-2.png" alt="" title="iphone-xcode4-2" class="izquierda" />
<div class="izquierda">Seleccionando el &#8220;Table View Cell&#8221; definimos el estilo como Basic.</div>
<p>Por defecto, la <em>TableView</em> viene configurada con las celdas en estilo &#8220;Custom&#8221;. Este estilo es para personalizar las celdas a nuestro gusto añadiendo elementos dentro de esta tal y como queramos, pero empezaremos con algo más sencillo.</p>
<p>Definiremos el tipo de celda como &#8220;Basic&#8221; que nos generará celdas sencillas con un unico <em>Label</em> dentro y nos será suficiente para empezar.</p>
<p>Si ejecutamos ahora el código nos saldrá una pantalla en blanco. Esto se debe ya que al poner <em>Empty Application</em> no nos carga la vista por defecto. Para que cargue nuestra tabla debemos de hacer dos cosas:<br />
<img src="http://guiabreve.com/wp-content/uploads/iphone-xcode4-3.png" alt="" title="iphone-xcode4-3" class="full" /></p>
<div class="izquierda">Definimos StoryBoard como la interfaz del proyecto</div>
<ol>
<li>Primero debemos de dirigirnos al proyecto y definir StoryBoard como la interfaz que usará la aplicación tal y como indica la imagen. (Se explica mejor con una imagen que con mil palabras)</li>
<li>Y por último modificamos en el archivo <strong><em>AppDelegate.m</em></strong> la función <code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions</code> así:
<pre class="brush:csharp">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}</pre>
</li>
</ol>
<p>Ahora al ejecutar nuestra app veremos la lista aunque por ahora sigue vacía.</p>
<h4>Rellenando la lista</h4>
<p>Primero necesitamos el controlador para la vista. Para ello vamos a <em>File » New » New File…</em> y creamos un archivo del tipo &#8220;<em>UIViewControllersubclass</em>&#8220;. En class ponemos el nombre que queramos y en &#8220;subclass of&#8221; tenemos que poner <code>UITableViewController</code> (Controlador de una table view).</p>
<p>Tenemos que relacionar el controlador con la vista. Para ello en el StoryBoard seleccionamos el &#8220;<em>Table View Controller</em>&#8221; y le ponemos de Class el archivo que acabamos de crear. (Imagen).<br />
<img src="http://guiabreve.com/wp-content/uploads/iphone-xcode4-4.png" alt="" title="iphone-xcode4-4" class="full" /></p>
<p><img src="http://guiabreve.com/wp-content/uploads/iphone-xcode4-5.png" alt="" title="iphone-xcode4-5" width="254" height="91" class="semifull" />Y a la celda debemos de ponerle el &#8220;identifier&#8221; como Cell (Es el que se usa por defecto en el código). (Imagen izquierda)</p>
<div class="clear"></div>
<h4>Por último, el código</h4>
<p>Tenemos que modificar el archivo <code>.h</code> y <code>.m</code> que creamos anteriormente. </p>
<h4>Cabecera (Archivo .h)</h4>
<p>Solo tenemos que definir aqui el array que vamos a usar para rellenar la lista. Quedará así.</p>
<pre class="brush:csharp">#import <UIKit/UIKit.h>

@interface TableViewController : UITableViewController {
    NSArray *tabla; // Array
}

@end</pre>
<h4>Implementación (Archivo .m)</h4>
<p>En este archivo son varias cosas las que debemos de hacer.</p>
<h5>1. Debemos de definir el número de secciones y filas que tendrá nuestra tabla</h5>
<pre class="brush:csharp">- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [tabla count];
}</pre>
<h5>2. Debemos añadir elementos de la lista al Array</h5>
<pre class="brush:csharp">- (void)viewDidLoad
{
    [super viewDidLoad];

    tabla = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}</pre>
<h5>3. Debemos escribir el label de cada celda</h5>
<pre class="brush:csharp">- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    cell.textLabel.text = [tabla objectAtIndex:indexPath.row];

    return cell;
}</pre>
<h3>¡Terminamos!</h3>
<p>Con esto ya esta todo hecho. Como resultado tendremos una lista de 5 celdas con números del 1 al 5 como definimos en el array.</p>
<p>Esta vez ha sido un poco más complicado que el <a href="http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html" title="Introduccion a la programación para iOS con xCode 4 (I)">primer capítulo</a> y puede que no haya quedado tan claro.</p>
<p>Como este proyecto es algo más complicado he subido todo el proyecto.<br />
<embed src="http://www.box.com/embed/f0umfapoipn7gyg.swf" width="520" height="290" wmode="opaque" type="application/x-shockwave-flash" allowFullScreen="true" allowScriptAccess="always"></p>
<p><strong>Como siempre, cualquier duda, usar los comentarios y si te ha gustado comparte el enlace en Twitter, Facebook o Google Plus. Gracias.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/introduccion-a-la-programacion-para-iphone-ii-uitableview.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visitors.js, personaliza tu página para cada usuario</title>
		<link>http://guiabreve.com/visitors-js-personaliza-tu-pagina-para-cada-usuario.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=visitors-js-personaliza-tu-pagina-para-cada-usuario</link>
		<comments>http://guiabreve.com/visitors-js-personaliza-tu-pagina-para-cada-usuario.html#comments</comments>
		<pubDate>Sat, 14 Jan 2012 14:10:47 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[visitors.js]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1496</guid>
		<description><![CDATA[Visitors.js es un pequeño javascript que nos da información del usuario y así podremos personalizar nuestra página dependiendo de este. De esta forma conseguiremos hacer nuestra página más personal y puede que así consigamos mejorar las ventas. Imaginaos que entrais a una tienda online y esta os avisa de los gastos de envio a vuestra <a href="http://guiabreve.com/visitors-js-personaliza-tu-pagina-para-cada-usuario.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://guiabreve.com/wp-content/uploads/visitorsjs.png" alt="" title="visitorsjs" width="298" height="98" class="noborder semifull" /><a href="http://www.visitorjs.com/details" title="visitors.js">Visitors.js</a> es un pequeño <a href="http://guiabreve.com/tag/javascript" title="Javascript en Guiabreve">javascript</a> que nos da información del usuario y así podremos personalizar nuestra página dependiendo de este.</p>
<p>De esta forma conseguiremos hacer nuestra página más personal y puede que así consigamos mejorar las ventas. Imaginaos que entrais a una tienda online y esta os avisa de los gastos de envio a vuestra casa gracias a la información que obtiene. Esta es solo una de las posibilidades que se me ocurren.</p>
<p>Algunos de los datos que obtendremos son:</p>
<ol>
<li>País y ciudad</li>
<li>Fecha de la última visita</li>
<li>Si viene de un buscador, sabremos desde cual y que ha buscado para llegar.</li>
<li>Tiempo que pasa en la web</li>
<li>Navegador y sistema operativo</li>
<li>Si viene desde un dispositivo móvil sabremos desde cual.</li>
<li><a href="http://www.visitorjs.com/details/api/variables">Y mucho más…</a></li>
</ol>
<h3>El uso no puede ser más sencillo.</h3>
<p>Después de registrarnos, es necesario para obtener una clave, agregamos la librería a nuestra página con la clave que nos den:</p>
<pre class="brush:js"><script type="text/javascript" src="http://www.visitorjs.com/visitor.js?key=TU_CLAVE"></script>
</pre>
<p>Hecho esto, ya podremos obtener datos de los usuarios con las <a href="http://www.visitorjs.com/details/api/variables">variables que podemos ver en la documentación</a>. Por ejemplo, de esta forma escribimos en la caja <code>#visitor-locale-countryCode</code> el país al que pertenece el visitante:</p>
<pre class="brush:js">$('#visitor-locale-countryCode').text(getValueText(visitor.locale.countryCode));</pre>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/visitors-js-personaliza-tu-pagina-para-cada-usuario.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expresiones regulares más comunes (II)</title>
		<link>http://guiabreve.com/expresiones-regulares-mas-comunes-ii.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=expresiones-regulares-mas-comunes-ii</link>
		<comments>http://guiabreve.com/expresiones-regulares-mas-comunes-ii.html#comments</comments>
		<pubDate>Tue, 10 Jan 2012 16:03:56 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Expresiones Regulares]]></category>
		<category><![CDATA[Programación y Diseño]]></category>
		<category><![CDATA[Comunes]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1472</guid>
		<description><![CDATA[Indice de la serie: Creando y entendiendo expresiones regulares Expresiones regulares comunes Usando las expresiones regulares En un primer artículo sobre las expresiones regulares aprendimos como crearlas y las diferentes palabras reservadas que podíamos usar. En este segundo artículo de la serie mostraré algunas de las expresiones regulares más comunes. Mirando las palabras reservadas de <a href="http://guiabreve.com/expresiones-regulares-mas-comunes-ii.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<div class="izquierda indice" style="text-align:left;">
<h3>Indice de la serie:</h3>
<ol>
<li><a href="http://guiabreve.com/creando-y-entendiendo-las-expresiones-regulares-i.html" title="Creando y entendiendo las Expresiones regulares (I)">Creando y entendiendo expresiones regulares</a></li>
<li><a href="http://guiabreve.com/expresiones-regulares-mas-comunes-ii.html" title="Expresiones regulares más comunes (II)">Expresiones regulares comunes</a></li>
<li><a href="http://guiabreve.com/usando-las-expresiones-regulares.html" title="Usando las expresiones regulares">Usando las expresiones regulares</a></li>
</ol>
</div>
<p>En un <a title="Creando y entendiendo las Expresiones regulares (I)" href="http://guiabreve.com/creando-y-entendiendo-las-expresiones-regulares-i.html">primer artículo sobre las expresiones regulares</a> aprendimos como crearlas y las diferentes palabras reservadas que podíamos usar.</p>
<p>En este segundo artículo de la serie mostraré algunas de las expresiones regulares más comunes. Mirando las palabras reservadas de la noticia anterior junto a estas expresiones comunes las lograremos entender mejor.</p>
<h3>Expresiones regulares comunes:</h3>
<ol>
<li><strong>Fechas:</strong>
<pre class="brush:php">'/^\d{2}\/\d{2}\/\d{4}$/'</pre>
<p>Este expresión nos validará una fecha del tipo DD/MM/YYYY. Es muy sencillo, hay tres grupos separados por un &#8216;/&#8217;.</p>
<ul>
<li>Los dos primeros grupos son <code>d{2}</code>. Es decir, dos digitos seguidos.</li>
<li>El último grupo en vez de un dos tiene un 4 ya que son cuatro números para el año.</li>
</ul>
</li>
<li><strong>Hora:</strong>
<pre class="brush:php">^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$</pre>
<p>Con esta expresión validamos una hora del tipo 10:45.33.</li>
<li><strong>Email:</strong>
<pre class="brush:php">^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$</pre>
<p>Nos aseguramos de que haya carcateres, más un arroba. Más caracteres y por último un punto y un dominio de dos o tres caracteres como mucho.</li>
<li><strong>URL:</strong>
<pre class="brush:php">^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$</pre>
<p>Con esta expresión validamos una URL. Permitimos dos protocoles, el http y el ftp.</li>
</ol>
<h3>Más expresiones regulares:</h3>
<p>Bueno, estas son solo unas pocas de las que podemos crear y encontrar por la red. Aqui os dejo algunas entradas donde encontrareis más:</p>
<ul>
<li><a href="http://www.webintenta.com/validacion-con-expresiones-regulares-y-javascript.html">Validación con expresiones regulares y Javascript</a></li>
<li><a href="http://www.virtuosimedia.com/dev/php/37-tested-php-perl-and-javascript-regular-expressions">37 Tested PHP, Perl, and JavaScript Regular Expressions</a></li>
</ul>
<p>Y en Google, ¡hay muchas más!</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/expresiones-regulares-mas-comunes-ii.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introduccion a la programación para iOS con xCode 4 (I)</title>
		<link>http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introduccion-a-la-programacion-para-ios-con-xcode-4-i</link>
		<comments>http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html#comments</comments>
		<pubDate>Thu, 05 Jan 2012 09:52:04 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Programando para iOS con xCode 4]]></category>
		<category><![CDATA[Cocoa Touch]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objetive-C]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[xCode 4]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1417</guid>
		<description><![CDATA[Indice de la guia: Introducción UITableView &#8230; No soy ningún profesional en lo que al desarrollo de aplicaciones se para iPhone se refiere. Mas bien estoy aprendiendo. Mientras tanto, trataré de enseñar algunos conceptos básicos para aquellos que quieran iniciarse en este mundillo. Aprender no me esta resultando nada fácil. La mayoría de libros que <a href="http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<div class="izquierda indice" style="text-align:left;">
<h3>Indice de la guia:</h3>
<ol>
<li><a href="http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html" title="Introduccion a la programación para iOS con xCode 4 (I)">Introducción</a></li>
<li><a href="http://guiabreve.com/introduccion-a…para-iphone-ii.html" title="Expresiones regulares más comunes (II)">UITableView</a></li>
<li>&#8230;</li>
</ol>
</div>
<p>No soy ningún profesional en lo que al desarrollo de aplicaciones se para iPhone se refiere. Mas bien estoy aprendiendo. Mientras tanto, trataré de enseñar algunos conceptos básicos para aquellos que quieran iniciarse en este mundillo.</p>
<p>Aprender no me esta resultando nada fácil. La mayoría de libros que encuentro son de versiones anteriores de xCode y no de la actual (la 4.2) y el problema es que muchas cosas han cambiado entre la versión anterior y la actual.</p>
<p>Este manual, y todos los que le precedan estarán hechos con <strong>xCode 4.x</strong>. Espero que os sea de ayuda y os guste la guia.</p>
<h3>Comenzamos</h3>
<p>Para empezar, comenzaremos por una aplicación sencilla que tras presionar un botón, nos mostrará el clásico mensaje de &#8220;Hola mundo&#8221;.</p>
<h4>1. Creamos el proyecto</h4>
<p><img class="full" title="Creacion del proyecto 1" src="http://guiabreve.com/wp-content/uploads/Creacion-del-proyecto-1.png" alt="" /><br />
Para ello, abrimos xCode y creamos un nuevo proyecto. Para este primer programa usaremos una &#8220;<em>Single View Application</em>&#8220;. Le ponemos de nombre, por ejemplo, <code>holaMundo</code> y marcamos las dos primeras opciones [<a title="Imagen de Creación del proyecto (Segundo paso)" href="http://guiabreve.com/wp-content/uploads/Creacion-del-proyecto-2.png" target="_blank">img</a>]: &#8220;Use StoryBoard&#8221; y &#8220;Use Automatic Reference Counting&#8221;.<span id="more-1417"></span></p>
<p>Por último, lo guardamos donde queramos.</p>
<h4>2. Ventana de xCode</h4>
<p><img class="full" title="holaMundo 1" src="http://guiabreve.com/wp-content/uploads/holaMundo-1.png" alt="" /><br />
La imagen superior representa a la ventana que nos encontraremos una vez hayamos creado el proyecto. En esta ventana tenemos todo lo necesario para crear nuestro programa.</p>
<p>Lo que nos interesa, por ahora, son los archivos en la barra izquierda, concretamente tres:</p>
<ol>
<li><strong>Mainstoryboard.storyboard</strong> en este archivo diseñaremos toda la parte visual del programa. Diseñaremos las distintas ventanas, con los distintos controles, botones, labels (etiquetas), etc.</li>
</ol>
<p>Por otra parte, el <code>ViewController</code> gestiona las interacciones que tu código tiene con el display, y también gestiona las interacciones del usuario con tu código. Esta clase esta compuesta por dos archivos.</p>
<ol start="2">
<li><strong>ViewController.h</strong> que contiene la cabecera</li>
<li>Y, <strong>ViewController.m</strong> que contiene la implementación</li>
</ol>
<p>Es decir, en la cabecera definimos aquellas cosas que vayamos a hacer en la implementación.</p>
<h4>3. Es hora de programar</h4>
<p>Tendremos que trabajar en los tres archivos para esta aplicación. Vayamos uno por uno comenzando por la cabecera.</p>
<h5>ViewController.h</h5>
<p>Esta es la vista inicial del archivo sin los comentarios.</p>
<pre class="brush:csharp">#import &lt;UIKit/UIKit.h&gt;

@interface ViewController : UIViewController

@end</pre>
<p>Lo que tenemos que hacer, en la cabecera, es definir los elementos y acciones que nos hacen falta. Para el programa necesitamos definir una <em>Label</em> y una acción que se ejecutará al pulsar el botón.</p>
<p>El archivo quedará así:</p>
<pre class="brush:csharp">#import &lt;UIKit/UIKit.h&gt;

@interface ViewController : UIViewController {

    // Etiqueta
    IBOutlet UILabel *etiqueta;
}

// Accion
-(IBAction)mostrarMensaje:(id)sender;

@end</pre>
<ul>
<li>En la linea 6: Definimos el label que estará en la interfaz. <code>IBOutlet</code> por que es un elemento de <em>StoryBoard</em> del tipo <code>UILabel</code> con el nombre &#8220;etiqueta&#8221;.</li>
<li>En la linea 10: definimos la acción. Esta tiene que estar fuera del <code>@interface</code> ya que no pertenece a ella. El nombre de la acción es &#8220;mostrarMensaje&#8221;.</li>
</ul>
<p>Guardamos.</p>
<h5>ViewController.m</h5>
<p>En el archivo de implementación tenemos que desarrollar la acción mostrarMensaje que definimos en la cabecera.</p>
<p>Esta acción tiene como unica función definir el texto de la &#8220;etiqueta&#8221; para mostrar el mensaje &#8220;Hola mundo&#8221;.</p>
<p>Dentro de la <code>@implementation</code> tendremos que añadir los siguiente:</p>
<pre class="brush:csharp">-(IBAction)mostrarMensaje:(id)sender {
    etiqueta.text = @&quot;Hola Mundo&quot;;
}</pre>
<p>Como vemos, solamente cambia la propiedad text de la etiqueta.</p>
<p>Guardamos.</p>
<h5>MainStoryBoard.storyboard</h5>
<p>Aqui, tenemos que definir el botón y el label. Además tenemos que indicar que el label equivale a &#8220;etiqueta&#8221; en nuestro código y que el botón ejecutará la acción &#8220;mostrarMensaje&#8221;.</p>
<p>Vamos paso a paso. Primero diseñamos la aplicación añadiendo los elementos. Simplemente arrastramos un <em>Label</em> y un <em>Round Rect Button</em> a la aplicación para que nos quede más o menos así.<br />
<img src="http://guiabreve.com/wp-content/uploads/holaMundo-2.png" alt="" title="holaMundo 2" class="full" /></p>
<p><img src="http://guiabreve.com/wp-content/uploads/holaMundo-3.png" alt="" title="holaMundo 3" width="242" height="105" class="semifull" />Para terminar solo nos queda relacionar los elementos. Primero hacemos click derecho sobre el label y arrastramos el circulo a la derecha de &#8220;New Referencing Outlet&#8221; a la vista y seleccionamos &#8220;etiqueta&#8221;.</p>
<div class="clear"></div>
<p><img src="http://guiabreve.com/wp-content/uploads/holaMundo-4.png" alt="" title="holaMundo 4" width="424" height="321" class="semifull" />Con el botón es parecido. Pero en vez de &#8220;New Referencing Outlet&#8221; tenemos que arrastrar el circulo de &#8220;Touch Up Inside&#8221; y luego seleccionar &#8220;mostrarMensaje:&#8221;.</p>
<div class="clear"></div>
<h4>4. Terminamos</h4>
<p>Nuestra aplicación esta lista. Ya podemos ejecutarla pulsando el play en la parte superior izquierda y comprobar que todo funciona bien.</p>
<p><strong>Espero que os haya gustado y este todo bien explicado. Cualquier duda, usar los comentarios y como siempre se agradece compartir el enlace en Twitter, Facebook o Google Plus.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/introduccion-a-la-programacion-para-ios-con-xcode-4-i.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Menú de subscripción con jQuery y CSS</title>
		<link>http://guiabreve.com/menu-de-subscripcion-con-jquery-y-css.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=menu-de-subscripcion-con-jquery-y-css</link>
		<comments>http://guiabreve.com/menu-de-subscripcion-con-jquery-y-css.html#comments</comments>
		<pubDate>Tue, 03 Jan 2012 08:23:44 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desplegable]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Menu subscripción]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1376</guid>
		<description><![CDATA[Menú desplegado. Demo Usando jQuery y CSS he creado este pequeño menú desplegable de subscripción donde podemos ofrecer a nuestros usuarios los enlaces a los distintos feeds rss de nuestra página. El menú es realmente sencillo, no es nada complicado ni nada del otro mundo. Pero, gracias a él podemos darnos cuenta de que con <a href="http://guiabreve.com/menu-de-subscripcion-con-jquery-y-css.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://guiabreve.com/wp-content/uploads/Menu-de-subscripcion-jQuery.png" alt="" title="Menu de subscripcion jQuery" width="156" height="126" class="izquierda" />
<div class="izquierda">Menú desplegado. <a href="http://guiabreve.com/demo/jQuery%20Subscribe%20Menu/" title="Demostración de "jQuery Subscribe Menu"">Demo</a></div>
<p>Usando <a href="http://guiabreve.com/tag/jquery" title="jQuery en WordPress">jQuery</a> y <a href="http://guiabreve.com/tag/CSS">CSS</a> he creado este pequeño menú desplegable de subscripción donde podemos ofrecer a nuestros usuarios los enlaces a los distintos <em>feeds rss</em> de nuestra página.</p>
<p>El menú es realmente sencillo, no es nada complicado ni nada del otro mundo. Pero, gracias a él podemos darnos cuenta de que con 6 lineas de jQuery y un poco de CSS podemos lograr cosas alucinantes.</p>
<p>Si sabéis jQuery, esto os parecerá muy sencillo y no os enseñará nada. Si por el contrario no sabéis, este código os podrá servir de introducción y os dareis cuenta de que es realmente sencillo hacer cosas con el sabiendo muy poco.<span id="more-1376"></span></p>
<h3>Veamos el código</h3>
<h4>HTML</h4>
<p>Nada que destacar por aqui. Una caja con dos mas dentro, una de ellas es la que se muestra y se oculta que contiene, además, la lista de enlaces y la otra es para la flecha que indica el estado de la caja.</p>
<pre class="brush:html">&lt;div id=&quot;caja_rss&quot;&gt;
	Subscribete
	&lt;div class=&quot;flecha cerrado&quot;&gt;&amp;nbsp;&lt;/div&gt;
		&lt;div class=&quot;caja&quot; style=&quot;display:none&quot;&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Feed RSS&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Comentarios&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;</pre>
<h4>CSS</h4>
<p>Lo mismo que lo anterior. Si estamos familiarizados con CSS este código no tiene nada de especial. Unos bordes redondeados por aqui, fondo naranja por allí, algunas sombras y poco más.</p>
<pre class="brush:css">#caja_rss {
	width: 120px;
	margin: auto;
	text-align: left;
	font-size: 16px;
	padding: 8px 14px 9px;
	color: #fff;
	text-decoration: none;

	-webkit-border-radius: 5px;
	-moz-border-radius: 5px;
	border-radius: 5px;

	-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
	-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
	box-shadow: 0 1px 3px rgba(0,0,0,0.5);
	text-shadow: 0 -1px 1px rgba(0,0,0,0.25);
	border-bottom: 1px solid rgba(0,0,0,0.25);

	cursor: pointer;
	background-color: #ff5c00;
}

.flecha {
	background: url('flechas.png') no-repeat;
	float: right;
	width: 20px;
	height: 20px;
}
.flecha.cerrado {	background-position: 0px -10px;	margin-top: -13px;	margin-bottom: -10px;}
.flecha.abierto {	background-position: 0px 10px;	margin-top: -23px;}

.caja {
	background: #EEE;
	margin: 10px -10px -6px;

	-webkit-border-radius: 5px;
	-moz-border-radius: 5px;
	border-radius: 5px;
}
.caja ul {	padding: 5px 10px;	list-style: none;	margin: 0;}
.caja li {	padding: 2px 0;}
.caja a {
	color: #444;
	font-size: 12px;
	text-transform: uppercase;
	text-decoration: none;
	border-bottom: 1px dotted #888;
}
.caja a:hover {	border-bottom: 1px solid #666;	color: #222;}</pre>
<h4>La magia, jQuery</h4>
<p>Aqui es donde pasa todo.</p>
<p>Como vemos el código jQuery, como siempre va contenido dentro del <code>$(document).ready</code> para evitar que se ejecute antes de terminar la carga.</p>
<p>Luego tenemos un <code>toggle</code> que se ejecuta al hacer clic sobre el elemento <code>#caja_rss</code>. Vemos como dentro de este elemento tenemos dos funciones, cada una de ellas se ejecutará una vez cada una.</p>
<ol>
<li>La primera función sirve para desplegar el menú y eliminar y añadir la clase cerrado y abierto respectivamente</li>
<li>La segunda función hace lo contrario para dejar el menu como al principio</li>
</ol>
<pre class="brush:js">$(document).ready(function(){
	$('#caja_rss').toggle(
		function(){
			$('.caja').slideDown();
			$('.flecha').removeClass('cerrado');
			$('.flecha').addClass('abierto');
		},
		function(){
			$('.caja').slideUp();
			$('.flecha').removeClass('abierto');
			$('.flecha').addClass('cerrado');
		}
	);
});</pre>
<p>Y esto es todo. Como siempre, dudas y preguntas en los comentarios y si te ha servido de ayuda o te ha gustado comparte la para ayudar a cuantos más mejor.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/menu-de-subscripcion-con-jquery-y-css.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SwipeJS, slider pensado para dispositivos táctiles</title>
		<link>http://guiabreve.com/swipejs-slider-pensado-para-dispositivos-tactiles.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=swipejs-slider-pensado-para-dispositivos-tactiles</link>
		<comments>http://guiabreve.com/swipejs-slider-pensado-para-dispositivos-tactiles.html#comments</comments>
		<pubDate>Mon, 02 Jan 2012 10:52:24 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[slide]]></category>
		<category><![CDATA[SwipeJs]]></category>
		<category><![CDATA[Touch]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1358</guid>
		<description><![CDATA[Img de la demo de Swipe. Página oficial Swipe JS es una slider pero se caracteriza por estar pensado para pantallas táctiles. Es perfecto para dispositivos como iPhone, iPads y demás aunque también es completamente funcional con ratón. Por lo tanto, el uso de este plugin para webs móviles es perfecto y es ahí donde <a href="http://guiabreve.com/swipejs-slider-pensado-para-dispositivos-tactiles.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://guiabreve.com/wp-content/uploads/Swipe-e1325261504459.png" alt="" title="Swipe-e1325261504459" class="alignnone semifull wp-image-1360" width="400" />
<div class="izquierda">Img de la demo de Swipe. Página oficial</div>
<p><a href="http://swipejs.com/">Swipe JS</a> es una slider pero se caracteriza por estar pensado para pantallas táctiles. Es perfecto para dispositivos como iPhone, iPads y demás aunque también es completamente funcional con ratón.</p>
<p>Por lo tanto, el uso de este <em>plugin</em> para webs móviles es perfecto y es ahí donde veremos el plugin en su máximo esplendor.</p>
<p>Las características que lo hacen especial son:</p>
<ul>
<li><strong>Desplazamiento 1:1</strong> Las cajas se desplazaran junto a nuestro dedo de forma identica a como lo hacen, por ejemplo, los escritorios del iPhone.</li>
<li><strong>Resistencia en los bordes</strong> Cuando llegamos al final o al principio y intentamos arrastrar este se nos resistirá al igual que cuando llegamos al final de una lista en el iPhone.</li>
<li>También <strong>ajusta el ancho automáticamente a la pantalla al rotar el dispositivo</strong>.</li>
</ul>
<p>Estas características hacen que su comportamiento sea prácticamente identico a una aplicación del sistema por lo que se vuelve algo completamente intuitivo.</p>
<h3>Uso</h3>
<p>Para implementarlo solamente necesitamos el HTML que como vemos es una simple lista dentro de un contenedor:</p>
<pre class="brush:html">
<div id='slider'>
<ul>
<li style='display:block'></li>
<li style='display:none'></li>
<li style='display:none'></li>
</ul>
</div>
</pre>
<p>Y el Javascript que indica que caja será nuestro <em>slider</em>:</p>
<pre class="brush:js">window.mySwipe = new Swipe(
  document.getElementById('slider')
);</pre>
<p>Nada más, ni otras librerías ni nada por el estilo.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/swipejs-slider-pensado-para-dispositivos-tactiles.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nuevo año, nuevo diseño</title>
		<link>http://guiabreve.com/nuevo-ano-nuevo-diseno.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nuevo-ano-nuevo-diseno</link>
		<comments>http://guiabreve.com/nuevo-ano-nuevo-diseno.html#comments</comments>
		<pubDate>Sun, 01 Jan 2012 23:22:12 +0000</pubDate>
		<dc:creator>Víctor Falcón Ruiz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[Guiabreve]]></category>
		<category><![CDATA[Logo]]></category>

		<guid isPermaLink="false">http://guiabreve.com/?p=1351</guid>
		<description><![CDATA[Llega un nuevo año y ya tenía ganas de rediseñar el blog. Diseño anterior (2010/2011) Con este nuevo rediseño sigo la idea del anterior, un diseño sencillo en el que destaquen las entradas y los enlaces interesantes, las dos secciones de contenido del blog. Como veis la estructura es muy similar al diseño anterior aunque <a href="http://guiabreve.com/nuevo-ano-nuevo-diseno.html">Continuar &#8594;</a>]]></description>
			<content:encoded><![CDATA[<p><strong>Llega un nuevo año y ya tenía ganas de rediseñar el blog.</strong></p>
<p><img src="http://guiabreve.com/wp-content/uploads/Captura-de-pantalla-2011-12-30-a-las-17.36.png" alt="" title="Captura-de-pantalla-2011-12-30-a-las-17.36" class="alignnone full wp-image-1355" /></p>
<div class="izquierda">Diseño anterior (2010/2011)</div>
<p>Con este nuevo rediseño sigo la idea del anterior, un diseño sencillo en el que destaquen las entradas y los enlaces interesantes, las dos secciones de contenido del blog. Como veis la estructura es muy similar al diseño anterior aunque visualmente, no se parece en nada.</p>
<p>El menú superior esta ahora oculto y lo podremos desplegar haciendo click en la flecha negra de la parte superior derecha. Solo lo veremos cuando queramos acceder a él, el resto del tiempo solo nos distraerá de lo importante.</p>
<h3>El logo</h3>
<p>Como podeis ver sigo usando la fuente Museo (mi favorita, sin duda) pero ahora le he incluido un logo que espero os guste.</p>
<p>El logo sale de la idea de juntar los símbolos <code><</code> y <code>></code> (usados en programación) en uno solo.</p>
<h3>Más social</h3>
<p>Ultimamente el blog estaba ganando visitas y la mayoría provenían de redes sociales como Facebook o Twitter principalmente, por ello, e decido agregar los botones correspondientes para compartir los artículos con un solo clic. Veremos que tal funcionan y si consiguen incrementar el tráfico del blog y llegar a más gente.</p>
<h3>Comentarios</h3>
<p>Ahora los comentarios son del propio WordPress. Me he artado de Disqus.</p>
<h3>Enlaces interesantes</h3>
<p>Al igual que antes siguen a la derecha en un segundo plano pero ahora no se importan automáticamente de Delicious como antes, si no que son un tipo de entrada personalizado que he añadido a WordPress.</p>
<p>El funcionamiento es el mismo, al picar en el titulo vamos al enlace y debajo tenemos una pequeña descripción.</p>
<h3>Y por último...</h3>
<p>El contenido. Ahora, que dispongo de más tiempo, quiero elaborar artículos más completos y profundizar más en los temas. Tengo ganas de preparar algunas guias sobre frameworks, por ejemplo.</p>
<p>Aún así, no prometo nada, ya veremos.</p>
<p><strong>¡Feliz año a todos!</strong>, espero que os guste y por supuesto, me encantaría leer vuestras opiniones en forma de comentario.</p>
]]></content:encoded>
			<wfw:commentRss>http://guiabreve.com/nuevo-ano-nuevo-diseno.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

