  

<?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>Polar Geek</title>
	<atom:link href="http://www.polargeek.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.polargeek.net</link>
	<description>Desarrollo y diseño web a todos los niveles</description>
	<lastBuildDate>Tue, 09 Nov 2010 22:56:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2-alpha</generator>
		<item>
		<title>Google Instant Preview ya disponible</title>
		<link>http://www.polargeek.net/google-instant-preview-ya-disponible/</link>
		<comments>http://www.polargeek.net/google-instant-preview-ya-disponible/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 22:53:09 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[instant]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1882</guid>
		<description><![CDATA[Nueva característica de Google después de Google Instant, esta vez con un nombre parecido: Google Instant Preview, que permite ver una captura de la pantalla antes de entrar. Más detalles en el post.]]></description>
			<content:encoded><![CDATA[<h2>¿Qué es Google Instant Preview?</h2>
<p><img src="http://static.polargeek.net/uploads/news/google.jpg" alt="Google" /></p>
<p>Es un nuevo servicio de Google que permite ver una imagen de la web antes de salir de Google para ir a la página. Además esta imagen no será una simple captura, sino que incluirá ciertas anotaciones de Google como las keywords más representativas de la búsqueda.</p>
<h2>¿Quién tiene acceso?</h2>
<p>Pues de momento usuarios de Google de Estados Unidos, Francia, Alemania, Italia, Rusia y España. Evidentemente como pasa con casi todas las mejoras en Google se ampliará a todos los países. Tiempo al tiempo.</p>
<p>Además esta mejora sólo se puede ver si se está usando Chrome 5+, Firefox 3, Safari 5 (Mac) e IE 8+. Aprovecho para recordarte, querido lector, que si estás usando IE6 deberías actualizar ya! =)</p>
<p>De momento sólo está disponible para ordenadores, y no dispositivos móviles, pero como pasó con Instant la mejora no se tardará en llevar a estos medios.</p>
<h2>¿Quieres verlo en funcionamiento?</h2>
<p>Puedes acceder a la página de Google si estás en uno de los países antes listados o ver un vídeo que lo demuestra: </p>
<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="600" height="480" src="http://www.youtube.com/embed/3Kjisqj_9pg?rel=0" frameborder="0"></iframe></p>
<p>Ten en cuenta que no afectará al ránking de Google, así que los expertos en SEO que me estén leyendo pueden respirar tranquilos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/google-instant-preview-ya-disponible/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wireframes: Recursos y Herramientas</title>
		<link>http://www.polargeek.net/wireframes-recursos-y-herramientas/</link>
		<comments>http://www.polargeek.net/wireframes-recursos-y-herramientas/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 13:02:28 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[wireframes]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1791</guid>
		<description><![CDATA[Colección de recursos y herramientas, tanto web como de escritorio para realizar wireframes. Además se incluyen una serie de tutoriales y artículos para profundizar más en el tema.]]></description>
			<content:encoded><![CDATA[<p>Cómo comenté en el <a href="http://www.polargeek.net/mejora-tu-desarrollo-con-wireframes/">anterior post</a> sobre wireframes hay muchos recursos sobre este tema, así que en este post he reunido los más interesantes, para que todos aprendamos a usar esta simple pero potente herramienta que son los wireframes</p>
<h2>Tutoriales / Artículos</h2>
<ul>
<li>Completo tutorial sobre como hacer un wireframe, con una presentación y audio incluido: <a href="http://eng.designerbreak.com/2009/tutorial/wireframes-and-concept-planning-a-website/">Link</a>.</li>
<li>Artículo sobre cómo hacer un wireframe, pero desde una perspectiva más general: <a href="http://www.mojofat.com/tutorial/step4.html">Link</a>.</li>
<li>Ciertos puntos clave del uso de wireframes: <a href="http://www.webdesignerdepot.com/2009/07/using-wireframes-to-streamline-your-development-process/">Link</a>.</li>
<li>Reunión por Smashing Magazine de algunos artículos (y recursos) sobre los wireframes: <a href="http://www.smashingmagazine.com/2010/08/27/free-wireframing-kits-ui-design-kits-pdfs-and-resources/">Link</a>.</li>
<li>Colección de excelentes wireframes. <a href="http://blog.almacenplantillasweb.es/2010/07/coleccion-de-wireframes-para-diseno-web/">Link</a>.</li>
</ul>
<h2>Herramientas para hacer wireframes</h2>
<h3>Pencil (addon para Firefox)</h3>
<p><a href="http://pencil.evolus.vn/en-US/Home.aspx"><img src="http://static.polargeek.net/uploads/wireframes/1_pencil.jpg" alt="Pencil" title="Pencil"/></a>  </p>
<hr />
<h3>Mockflow (App Web)</h3>
<p><a href="http://www.mockflow.com/"><img src="http://static.polargeek.net/uploads/wireframes/2_mockflow.jpg" alt="MockFlow" title="MockFlow"/></a> </p>
<hr />
<h3>Cacoo (App Web)</h3>
<p><a href="http://cacoo.com/"><img src="http://static.polargeek.net/uploads/wireframes/3_cacoo.jpg" alt="Cacoo" title="Cacoo" /></a> </p>
<hr />
<h3>Omnigraffle (Mac)</h3>
<p><a href="http://www.omnigroup.com/products/omnigraffle/"><img src="http://static.polargeek.net/uploads/wireframes/4_omnigraffle.jpg" alt="Omnigraffle" title="Omnigraffle"/></a>  </p>
<hr />
<h3>Balsamiq Mockups (App Web y Escritorio)</h3>
<p><a href="http://balsamiq.com/products/mockups"><img src="http://static.polargeek.net/uploads/wireframes/5_balsamiq_mockups.jpg" alt="Balsamiq Mockups" title="Balsamiq Mockups" /></a>  </p>
<hr />
<h3>Mockingbird (App Web)</h3>
<p><a href="http://gomockingbird.com/"><img src="http://static.polargeek.net/uploads/wireframes/6_mocking_bird.jpg" alt="Mockingbird" title="Mockingbird" /></a></p>
<hr />
<h3>iPlotz (App Web y Escritorio)</h3>
<p><a href="http://iplotz.com/index.php"><img src="http://static.polargeek.net/uploads/wireframes/7_iplotz.jpg" alt="iPlotz" title="iPlotz" /></a></p>
<hr />
<h3>Protoshare (App Web)</h3>
<p><a href="http://www.protoshare.com/"><img src="http://static.polargeek.net/uploads/wireframes/8_protoshare.jpg" alt="Protoshare" title="Protoshare" /></a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/wireframes-recursos-y-herramientas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mejora tu desarrollo con wireframes</title>
		<link>http://www.polargeek.net/mejora-tu-desarrollo-con-wireframes/</link>
		<comments>http://www.polargeek.net/mejora-tu-desarrollo-con-wireframes/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 06:45:28 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[wireframes]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1758</guid>
		<description><![CDATA[En este post veremos qué son los wireframes y cómo nos pueden ayudar a mejorar nuestro desarrollo y diseño de nuevos proyectos. Además se incluyen varios ejemplos para hacernos una idea de cómo son.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gracesmith.co.uk/an-interview-with-sketchnote-king-mike-rohde/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframes_grande.jpg" alt="Wireframe Grande" /></a> </p>
<h2>Qué es un wireframe</h2>
<p>¿Sabes esos esquemas en formas de garabatos que sueles hacer antes de plantear un diseño o una idea? Pues tienen un nombre, wireframes.Un wireframe no es más que un esquema o croquis donde exponer de manera simplificada una serie de ideas, un diseño o una serie de datos que nos pueden ser útiles. Lo cierto es que dicho así puede sonar un poco rollo su uso es facilísimo y tiene una utilidad sorprendente. Veamos algunas de las más comunes:</p>
<ul>
<li>Distribución de elementos en un diseño</li>
<li>Jerarquía de un sitio web o aplicación</li>
<li>Representación de eventos en interfaces</li>
<li>Etc&#8230;</li>
</ul>
<p>Es cierto que de toda la vida existen los wireframes en papel pero con el uso de las nuevas tecnologías realmente podemos mejorar y agilizar su uso.</p>
<h2>Claves para hacer un buen wireframe</h2>
<h3>Capta lo simple</h3>
<p>El objetivo de un wireframe es esquematizar, hacernos una idea. No es un diseño que va a ser pasado a HTML, no es un PSD con un nivel de detalle suficiente para ser exportado o impreso en un trabajo final, es simplemente un esquema.</p>
<h3>Usa anotaciones</h3>
<p>Uses la herramienta que uses siempre podrás tener la posibilidad de añadir anotaciones, bien en post-its (si estás trabajando en papel) o bien en bocadillos al margen (si estás trabajando con un programa). En cualquier caso las anotaciones te ayudarán a explicar mejor la organización de lo realizado y a recordar ciertos puntos clave para el diseño.</p>
<h3>Divide en varios wireframes</h3>
<p>No hace falta que un mismo wireframe incluya toda la información o todas las partes del diseño que queremos representar, no hay problema en hacer varios y luego unirlos con un clip o componer un PDF con todos ellos. Seguro que te ayudará.</p>
<h3>Documenta</h3>
<p>Como pasa con el código es bueno documentar. En este caso se trata más bien de organizar los esquemas en carpetas físicas o digitales, pero tener un registro de cada parte del proyecto o de los diseños posibles para no perder ninguno y poder acceder a ellos si es necesario.</p>
<h3>Elige la herramienta adecuada</h3>
<p>Hay multitud de herramientas en el mercado para todos los gustos. La más barata y próxima es tu bolígrafo favorito y un folio, pero hay software realmente potente que nos puede ayudar mucho. En el próximo post sobre wireframes mostraré algunas alternativas y la que uso personalmente.</p>
<h2>Ejemplos gráficos de wireframes</h2>
<h3>Wireframes en papel</h3>
<p><a href="http://www.flickr.com/photos/charbelakhras/5122879987/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_papel_1.jpg" alt="Wireframe Papel 1" /></a></p>
<hr />
<a href="http://www.flickr.com/photos/quarkness/5123891320/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_papel_2.jpg" alt="Wireframe Papel 2" /></a></p>
<hr />
<a href="http://www.flickr.com/photos/42106294@N03/3895794923/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_papel_3.jpg" alt="Wireframe Papel 3" /></a></p>
<hr />
<a href="http://www.flickr.com/photos/quasarkitten/4756050295/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_papel_4.jpg" alt="Wireframe Papel 4" /></a>  </p>
<h3>Wireframes digitales</h3>
<p><a href="http://wireframes.linowski.ca/2010/02/tablet-illustrator-and-the-case-for-electronic-sketching/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_digital_1.png" alt="Wireframe Digital 1" /></a></p>
<hr />
<a href="http://wireframes.linowski.ca/2009/12/omnigraffle-wireflows/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_digital_2.png" alt="Wireframe Digital 2" /></a></p>
<hr />
<a href="http://wireframes.linowski.ca/2009/02/page-level-wireflows/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_digital_3.jpg" alt="Wireframe Digital 3" /></a></p>
<hr />
<a href="http://wireframes.linowski.ca/2009/08/state-annotations/" target="_blank"><img src="http://static.polargeek.net/uploads/wireframes/wireframe_digital_4.png" alt="Wireframe Digital 4" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/mejora-tu-desarrollo-con-wireframes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nota al margen: el futuro de Polar Geek</title>
		<link>http://www.polargeek.net/nota-al-margen-el-futuro-de-polar-geek/</link>
		<comments>http://www.polargeek.net/nota-al-margen-el-futuro-de-polar-geek/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 18:39:05 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[diacode]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1747</guid>
		<description><![CDATA[Nota al margen sobre el futuro de PolarGeek y el nuevo proyecto en el que me encuentro inmerso.]]></description>
			<content:encoded><![CDATA[<p>En primer lugar me gustaría aclarar que no se ha publicado nada en las últimas semanas porque personalmente he estado ocupado creando un proyecto que afectará de manera directa a PolarGeek:</p>
<h2>Diacode</h2>
<p><img width="612" src="http://static.polargeek.net/uploads/sunrise.jpg" alt="Sunrise" /></p>
<p>Diacode es el nombre de la start-up que he creado junto con un socio y a partir de ahora PolarGeek pertenece como un proyecto más a nuestra empresa. Eso significa que a partir de ahora tendréis 2 o 3 artículos semanales y un logo de la empresa en la página.</p>
<p>Espero que se ahora en adelante tanto PolarGeek como Diacode crezcan de la mano y todos salgamos beneficiados aprendiendo cada día más sobre desarrollo web. Podéis ver nuestra página en <a href="http://diacode.com">http://diacode.com</a> y nuestro Facebook en <a href="http://facebook.com/diacode">http://facebook.com/diacode</a>. Bienvenidos a la nueva etapa de PolarGeek.</p>
<p>Foto de <a href="http://www.flickr.com/photos/shinnygogo/192223329/">shinnygogo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/nota-al-margen-el-futuro-de-polar-geek/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP Principiantes: Instalación</title>
		<link>http://www.polargeek.net/php-principiantes-instalacion/</link>
		<comments>http://www.polargeek.net/php-principiantes-instalacion/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 05:45:41 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[principiantes]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1739</guid>
		<description><![CDATA[Primera parte de una serie de tutoriales para aprender PHP desde cero, paso a paso y con ejemplos de todo tipo. Hoy veremos como instalar PHP en nuestros equipos para empezar a programar.]]></description>
			<content:encoded><![CDATA[<p>Con este post inicio una serie de artículos sobre PHP, desde 0. Asumiré que se tiene un poco de idea de programación pero poco más, así que si no sabes programar en PHP y quieres aprender este es el camino, al menos el que he preparado para tí.</p>
<h2>PHP y su entorno</h2>
<h3>PHP y el servidor</h3>
<p>Lo primero que debemos aprender es qué es PHP y que papel tiene en el desarollo web. Pues bien, PHP es un lenguaje de programación de uso gratuito y del lado del servidor, esto significa que haremos programas para que se ejecuten en un servidor, cuando alguien, normalmente un navegador, nos pida o envíe datos.</p>
<p>Para entenderlo mejor echa un vistazo al siguiente esquema, que muestra una petición GET:</p>
<div class="img"><img src="http://static.polargeek.net/uploads/getpost/ejemplo_get.jpg" alt="Ejemplo GET" /></div>
<p>Pues bien, nuestros scripts estarán en el lado de la derecha, de tal forma que normalmente se pedirán a raíz de una petición, como he dicho antes.</p>
<h3>Influencias de PHP</h3>
<p>La sintaxis es muy similar a la C, así que si sabes este lenguaje tienes mucho ganado, por supuesto también si sabes Java, ya que también tiene la sintaxis similar a C.</p>
<p>Además de C, PHP tiene muchas influencias, una de ellas y la más notable desde el principio es que las variables tengan un símbolo de dólar ($) al principio, pues bien, esto viene de Perl. Otros que de los que deriva son Python o C++, pero no te preocupes porque iremos paso a paso sobre todo.</p>
<h3>Tipo de lenguaje</h3>
<p>Si sabes otros lenguajes probablemente te ayude a su aprendizaje saber que PHP es un lenguaje multiparadigma, soportando la orientación a objetos y la programación imperativa. Si no sabes lo que estos palabros significan no te preocupes por ahora, paso a paso irás entendiendo lo que esto implica para nosotros como desarrolladores.</p>
<h2>Instalación de PHP</h2>
<p>Bueno queremos programar en PHP pero primero tendremos que instalarlo. Para ello veamos distintos tipos de sistemas operativos y cómo instalarlo en cada uno de ellos.</p>
<h3>Windows</h3>
<p>Descargar el programa WAMP de <a href="http://www.wampserver.com/en/index.php">aquí</a>. Recuerda que no solo estás instalando PHP sino también Apache y MySQL, necesario el primero para PHP y el segundo necesario para el caso de que utilicemos bases de datos, que también lo haremos.</p>
<p>Si no te gusta esta opción y quieres instalarlo a mano, <a href="http://dotpress.wordpress.com/2007/03/22/wamp-guia-para-instalar-php-en-apache-sobre-windows/">aquí</a> tienes una excelente guía paso a paso que estoy seguro te ayudará.</p>
<h3>Mac</h3>
<p>Para Mac existe una solución similar a WAMP llamada MAMP (las siglas son Mac | Apache | MySQL | PHP). A modo de curiosidad cuando veas ofertas para programadores LAMP están pidiendo gente que sea capaz de majer Apache, Linux, MySQL y PHP o Python, aunque esto último es menos común.</p>
<p>Pero volviendo al asunto que nos ocupa, la aplicación la puedes descargar de la <a href="http://www.mamp.info/en/index.html">página oficial de MAMP</a>, cuenta con una versión gratuita y otra de pago, pero en general la gratuita suele ser suficiente.</p>
<h3>Linux y otros entornos Unix</h3>
<p>En estos entornos normalmente los documentos que servirá Apache estarán en /var/www, a diferencia de Windows y Mac que viene marcado por el programa de instalación que hayamos usado. En cualquier caso suele ser configurable así que no importa demasiado, pero debes tenerlo en cuenta para alojar tus scripts de PHP que haremos más adelante.</p>
<p>Para los usuarios de Ubuntu/Debian, que suelen ser la mayoría os dejo <a href="http://www.vensign.com/blog/instalar-un-servidor-lamp-en-ubuntulinux.html">este tutorial</a>, también genial explicado.</p>
<p>Y para los que no usáis una distribución basada en Debian, pues <a href="http://fried.wordpress.com/2009/07/11/instalar-apache-mysql-php-lamp-en-fedora-11/">aquí</a> tenís cómo instalarlo en Fedora.</p>
<h2>Haciendo nuestro primer script</h2>
<p>Hagamos ahora el script más sencillo del mundo, si, es un hola mundo. Para ello cremos un archivo vacío de texto normal y ponemos la etiqueta de inicio y de fin de PHP, quedando:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
  <span style="color: #666666; font-style: italic;">//Código</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Ahora mostramos un mensaje por pantalla, con echo, que saca el string que le demos por la salida estándar, en este caso el html que muestra el navegador.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
  <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Hola Mundo'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Pues con esto en un archivo, lo guardamos como index.php, por ejemplo y lo ponemos en el directorio que en Apache hayamos configurado, esto depende del sistema operativo y la forma de instalarlo así que no hay un sitio fijo para todos, pero seguro que en el programa que hayas usado te viene. En Mac, con MAMP suele estar en Sites, bajo la carpeta de usuario.</p>
<h2>Sólo es el comienzo</h2>
<p>Bien ya podemos hacer scripts en PHP y que funcionen y además no tendremos problemas para conectarnos con MySQL si has seguido las instrucciones de los posts. A partir de ahora aprenderemos PHP íntegramente sin preocuparnos demasiado por el entorno. Espero que te sea útil, y si es así házmelo saber en los comentarios, nos queda un largo camino por delante. Un saludo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/php-principiantes-instalacion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>20 demostraciones de HTML5, CSS3 y Canvas</title>
		<link>http://www.polargeek.net/20-demostraciones-de-html5-css3-canvas/</link>
		<comments>http://www.polargeek.net/20-demostraciones-de-html5-css3-canvas/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 06:30:41 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Recursos]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1730</guid>
		<description><![CDATA[HTML5, Canvas y CSS3 combinados con muchas imaginación. 20 demostraciones de efectos y aplicaciones usando las últimas tecnologías en desarrollo web.]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2>
<p>HTML5 y CSS3 han venido para quedarse, pero como una adopción se tarda un poco en el papeleo. Así que hasta que los navegadores no interpreten las etiquetas y estilos en su mayoría, casi no se puede desarrollar para el pequeño sector que tiene los últimos navegadores.</p>
<p>Aquí tenemos un listado de páginas y aplicaciones web diseñadas integramente con HTML5 y/o CSS3 (a veces también con javascript), así que es aconsejable que los veas con Chrome/Safari en su mayoría.</p>
<h3>Partículas (Liquid Particles)</h3>
<p>Efecto muy bueno con partículas, que se juntan y separan según movamos el ratón o hagamos click. Hace falta un poco de matemáticas para programar esto.</p>
<div class="img"><a href="http://spielzeugz.de/html5/liquid-particles.html"><img src="http://static.polargeek.net/uploads/html5/liquid-particles.jpg" alt="Liquid Particles"/></a></div>
<h3>Vinilos con CSS3</h3>
<p>Bonito efecto que saca el vinilo del sobre cuando pasamos el ratón por encima.</p>
<div class="img"><a href="http://www.zurb.com/playground/sliding-vinyl"><img src="http://static.polargeek.net/uploads/html5/vinyl.jpg" alt="Vinilo" /></a></div>
<h3>Mesa con Polaroids</h3>
<p>Demo interactivo con un conjunto de fotos que se pueden mover, ampliar y reducir.</p>
<div class="img"><a href="http://www.addyosmani.com/resources/canvasphoto/"><img src="http://static.polargeek.net/uploads/html5/polaroid.jpg" alt="Polaroid" /></a></div>
<h3>Spread</h3>
<p>Animación con extensiones partiendo de una raiz.</p>
<div class="img"><a href="http://tomtheisen.com/spread/"><img src="http://static.polargeek.net/uploads/html5/spread.jpg" alt="Spread" /></a></div>
<h3>Caja de Google</h3>
<p>Caja de búsqueda pero de verdad, con efecto 3D y si buscas la caja se abre para que veas los resultados.</p>
<div class="img"><a href="http://www.addyosmani.com/resources/googlebox/"><img src="http://static.polargeek.net/uploads/html5/google.jpg" alt="Google" /></a></div>
<h3>Etcha</h3>
<p>Juego basado en el famoso aparato para dibujar con el que más de uno se ha visto negro para dibujar líneas diagonales.</p>
<div class="img"><a href="http://www.mattpelham.com/etchaphysics/"><img src="http://static.polargeek.net/uploads/html5/etcha.jpg" alt="Etcha" /></a></div>
<h3>Árbol de plasma</h3>
<p>Efecto de plasma que se abriendo en forma de árbol. Haciendo click empiezan a crecer nuevos árboles.</p>
<div class="img"><a href="http://openrise.com/lab/PlasmaTree/"><img src="http://static.polargeek.net/uploads/html5/plasma.png" alt="Árbol Plasma"/></a></div>
<h3>Partículas Magnéticas</h3>
<p>Efecto usando canvas y JavaScript para crear un efecto de magnetismo con raíz en un núcleo.</p>
<div class="img"><a href="http://hakim.se/experiments/html5/magnetic/02/"><img src="http://static.polargeek.net/uploads/html5/magnetico.png" alt="Particulas Magenticas" /></a></div>
<h3>Conversión de Video a ASCII en tiempo real</h3>
<p>Efecto de conversión de vídeo a ASCII, usando HTML5 y canvas.</p>
<div class="img"><a href="http://www.chromeexperiments.com/detail/realtime-video-ascii-conversion/"><img src="http://static.polargeek.net/uploads/html5/ascii.png" alt="De Video a ASCII" /></a></div>
<h3>Acuario</h3>
<p>Acuario creado completamente con Javascript. ¡No pinchéis demasiado que asustaréis a los peces!</p>
<div class="img"><a href="http://calinmocanu.webs.com/the_canvas/fish.htm"><img src="http://static.polargeek.net/uploads/html5/aquarium.jpg" alt="Acuario" /></a></div>
<h3>Simulador de Ropa Tendida</h3>
<p>Probablemente el más impactante sin usar colores, por el detalle del comportamiento a nivel físico de la &#8220;ropa&#8221;.</p>
<div class="img"><a href="http://www.andrew-hoyer.com/experiments/cloth"><img src="http://static.polargeek.net/uploads/html5/ropa.jpg" alt="Ropa" /></a></div>
<h3>Juego Anigma</h3>
<p>Juego realizado con CSS3, también se usa la etiqueta audio para el sonido. Es bastante adictivo así que si estás ahora mismo trabajando no te lo recomiendo.</p>
<div class="img"><a href="http://icefox.net/anigma/"><img src="http://static.polargeek.net/uploads/html5/anigma.png" alt="Anigma" /></a></div>
<h3>Piscina de Bolas</h3>
<p>Original experimento con canvas para tener un conjunto de bolas que rebotan, se mueven e interactuan apartándose unas a otras</p>
<div class="img"><a href="http://www.chromeexperiments.com/detail/ball-pool/"><img src="http://static.polargeek.net/uploads/html5/bolas.jpg" alt="Piscina de Bolas" /></a></div>
<h3>Ola con Canvas</h3>
<p>Efecto ola con canvas, configurable con distintas opciones como la amplitud, la longitud, el ancho&#8230;etc.</p>
<div class="img"><a href="http://modern-carpentry.com/workshop/html5/waveform/"><img src="http://static.polargeek.net/uploads/html5/ola.jpg" alt="Ola Canvas" /></a></div>
<h3>Sistema Solar</h3>
<p>Emulación del sistema solar con explicaciones de cada planeta, ver en Chrome o Safari para disfrutar del efecto.</p>
<div class="img"><a href="http://neography.com/experiment/circles/solarsystem/"><img src="http://static.polargeek.net/uploads/html5/solarsystem.jpg" alt="Sistema Solar" /></a></div>
<h3>Tiempo Real</h3>
<p>Es la idea detrás de SmallTalk, donde la sobre un mapa de USA, se tienen los tweets relativos al tiempo en la zona.</p>
<div class="img"><a href="http://smalltalkapp.com/"><img src="http://static.polargeek.net/uploads/html5/tiempo.jpg" alt="Tiempo Real" /></a></div>
<h3>Parallax</h3>
<p>Efecto de movimiento con varias capas, utilizado a veces en las cabeceras de webs.</p>
<div class="img"><a href="http://webdev.stephband.info/parallax_demos.html"><img src="http://static.polargeek.net/uploads/html5/parallax.jpg" alt="Parallax" /></a></div>
<h3>Animación de texto con partículas</h3>
<p>Un efecto bastante chulo con un texto configurable usando canvas y javascript, por supuesto.</p>
<div class="img"><a href="http://www.feedtank.com/labs/html_canvas/"><img src="http://static.polargeek.net/uploads/html5/textoparticulas.jpg" alt="Texto Partículas" /></a></div>
<h3>Visualizador de moléculas</h3>
<p>Visualizador de moléculas usando también canvas principalmente, con efecto 3D. Puedes ver como está formada la cocaína o el colesterol, por poner un par de ejemplos famosos.</p>
<div class="img"><a href="http://alteredqualia.com/canvasmol/"><img src="http://static.polargeek.net/uploads/html5/moleculas.jpg" alt="Moléculas" /></a></div>
<h3>Reproductor hecho con CSS3</h3>
<p>Reproductor realizado con CSS3, no tiene funcionalidad, pero lo importante aquí es que no se utiliza una imagen sino propiedas CSS3.</p>
<div class="img"><a href="http://webstuffshare.com/demo/CSSMusicPlayer/"><img src="http://static.polargeek.net/uploads/html5/reproductor.png" alt="Reproductor" /></a></div>
<h2>Más aplicaciones</h2>
<ul>
<li><a href="http://www.chromeexperiments.com/">Chrome Experiments</a></li>
<li><a href="http://10k.aneventapart.com/">Aplicaciones en menos de 10K (concurso abierto)</a></li>
</ul>
<p>Si conoces algún sitio más coméntalo y lo añado a la lista.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/20-demostraciones-de-html5-css3-canvas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cómo crear un plugin en jQuery</title>
		<link>http://www.polargeek.net/como-crear-un-plugin-en-jquery/</link>
		<comments>http://www.polargeek.net/como-crear-un-plugin-en-jquery/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 06:00:21 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1705</guid>
		<description><![CDATA[Cómo crear un plugin en jQuery paso a paso, con detalle en cada método de jQuery o cada decisión de implementación. Este plugin expandirá o contraerá un div dependiendo de los parámetros que le pasemos.]]></description>
			<content:encoded><![CDATA[<p>Hoy construiremos un plugin en jQuery, por supuesto iremos paso a paso y si no has construido nunca ninguno al final del tutorial te aseguro que podrás. ¿Empezamos?</p>
<h2>¿Para qué sirve un plugin de jQuery?</h2>
<p>Antes que nada, tenemos que saber para qué nos sirve hacer un plugin y por qué tiene ventajas sobre hacer un par de funciones, por ejemplo. Lo primero que debemos recordar es que <strong>plug in</strong> significa <strong>conectar</strong>, es decir, haremos algo que luego podremos conectar a distintos sitios.</p>
<p>Teniendo esto en mente, nos podemos imaginar el plugin como una caja negra, que hará algo y nos devolverá el resultado (o realizará una acción simplemente).</p>
<div class="img"><img src="http://static.polargeek.net/uploads/jquery/pluginjquery.jpg" alt="Plugin jQuery" /></div>
<p>Por tanto un plugin tendrá la posibilidad de aceptar una entrada y producir un resultado, y esta &#8220;caja&#8221; que se ve en el esquema <strong>se podrá llevar a cualquier proyecto</strong>, sin ninguna modificación, aceptando allí otra salida. Esa es la clave de los plugin, que son reutilizables en cualquier sitio, sin tener que preocuparnos por cómo está hecho ni siquiera, simplemente &#8220;conectándolo&#8221; e invocándolo con datos de entrada.</p>
<p>Además, la invocación de este plugin será la misma que hacemos cuando usamos cualquier método de jQuery: </p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#caja'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">acortar</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//acortar será el nombre del plugin</span></pre></div></div>

<h2>Nuestro primer plugin</h2>
<h3>Qué vamos a hacer</h3>
<p>Este plugin reducirá el texto en una caja, y con un click en un enlace lo expandirá. Así de simple, aunque como veremos después la implementación va a ser un pelín más larga de lo que debería para ser nuestro primer plugin, pero sin problema, poco a poco lo haremos. Si te quedan dudas sobre qué vamos a hacer tienes un enlace al demo <a href="http://www.polargeek.net/wp-content/uploads/demos/plugin/index.html">aquí</a> y al final del post.</p>
<h3>Primeros pasos al construir un plugin</h3>
<p>Cuando se construye un plugin hay una serie de pasos generales, que se hacen para todos los plugin que construyamos y que son los siguientes:</p>
<h4>Declaración del plugin</h4>
<p>El primer paso al hacer un plugin es declararlo, extender la serie de métodos que tiene jQuery originalmente. Para ello escribimos lo siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">acortar</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Línea 1</strong>. Pasamos a nuestra declaración &#8220;jQuery&#8221;, el objeto, de tal forma que lo podemos usar como $, sin que interfiera con otras librerías.</p>
<p><strong>Línea 2</strong>. Extendemos el objeto jQuery con nuevo método llamado acortar.</p>
<p><strong>Línea 3</strong>. Recorremos todos los objetos que se le pasen a nuestro plugin. Recordemos que un selector puede seleccionar varios elementos, como todos los h1, por ejemplo. Aquí los recorremos y aplicamos la función que hagamos en nuestro plugin a cada uno de ellos.</p>
<p>Esto lo vamos a tener que hacer para todos los plugins que programemos, así que intenta entederlo bien. Lógicamente, cambiaremos el nombre dependiendo del plugin, en este caso lo llamaremos &#8220;acortar&#8221;.</p>
<h4>Parámetros que aceptaremos como opciones del plugin</h4>
<p>Casi todos los plugin tienen opciones, si estamos realizando un plugin que acorte el texto de una caja para que no se vea tan grande algunos parámetros que tenemos que permitir configurar al usuario pueden ser los siguientes:</p>
<ul>
<li>nCaracteres: Número de caracteres a mostrar. Ocultaremos el resto.</li>
<li>nExtra: Para evitar acortar un texto sólo por unos caracteres. El número exacto es este parámetro.</li>
<li>textoSuspense: String que se mostrará para hacer notar que hay más texto.</li>
<li>textoContraer: Texto mostrado como link para contraer.</li>
<li>linkExpandir: Texto mostrado como link para expandir</li>
</ul>
<p>Así el usuario podrá personalizar el plugin sin tener que preocuparse de cómo está hecho por dentro. Empecemos por procesar la entrada:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">acortar</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>opciones<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> parametrosPorDefecto <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	  nCaracteres<span style="color: #339933;">:</span> <span style="color: #CC0000;">300</span><span style="color: #339933;">,</span>
	  nExtra<span style="color: #339933;">:</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">,</span>
	  textoSuspense<span style="color: #339933;">:</span> <span style="color: #3366CC;">'...'</span><span style="color: #339933;">,</span>
	  textoContraer<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Contrae'</span><span style="color: #339933;">,</span>
	  linkExpandir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Click para Expandir'</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>                   
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> opciones <span style="color: #339933;">=</span> $.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>parametrosPorDefecto<span style="color: #339933;">,</span> opciones<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Por tanto cuando tengamos que acceder a uno de los parámetros de entrada haremos, por ejemplo,  opciones.nExtra, así de simple.</p>
<h4>Copiar el objeto que nos pasan a variable local</h4>
<p>Cuando nos metemos en el bucle each, que puedes ver en la última sección de código, estamos procesando todos los elementos que han sido seleccionados al llamar el plugin. En ese preciso momento, cuando empezamos el bucle con un objeto, el objeto seleccionado está en la palabra reservada <strong>this</strong>, así que debemos guardarlo para referirnos siempre a él y no liarla cuando cambiemos el contexto (<i>scope</i>).</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">acortar</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>opciones<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> parametrosPorDefecto <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	  nCaracteres<span style="color: #339933;">:</span> <span style="color: #CC0000;">300</span><span style="color: #339933;">,</span>
	  nExtra<span style="color: #339933;">:</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">,</span>
	  textoSuspense<span style="color: #339933;">:</span> <span style="color: #3366CC;">'...'</span><span style="color: #339933;">,</span>
	  textoContraer<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Contrae'</span><span style="color: #339933;">,</span>
	  linkExpandir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Click para Expandir'</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>                    
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> opciones <span style="color: #339933;">=</span> $.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>parametrosPorDefecto<span style="color: #339933;">,</span> opciones<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>         
	  objeto <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>Implementando nuestro plugin</h3>
<p>Bien, ya tenemos lo que queremos hacer, qué vamos a permitirle al usuario y cómo declarar el plugin. Empecemos ahora a implementar la funcionalidad en sí de éste. Esto por supuesto es propio de cada uno, así que intentaré no pararme demasiado en esta parte, porque, al fin y al cabo, ya sabemos crear un plugin genérico y la dificultad del resto dependerá de lo que queramos hacer.</p>
<h4>Procesar texto</h4>
<p>En este punto necesitamos ver si realmente tenemos que acortar el texto porque sobrepasa lo permitido (dado por el parámetro nCaracteres) y si es así ejecutamos toda la funcionalidad del plugin. A partir de aquí consideremos que estamos dentro del bucle que hemos mencionado antes (a partir de la línea 12 del último código). Veremos hasta los puntos suspensivos, dónde empezaremos en el siguiente punto.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> texto <span style="color: #339933;">=</span> objeto.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> longitudPermitida <span style="color: #339933;">=</span> opciones.<span style="color: #660066;">nCaracteres</span> <span style="color: #339933;">+</span> opciones.<span style="color: #660066;">nExtra</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//Si tenemos un texto más corto no tenemos que hacer nada</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>texto.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> longitudPermitida<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #003366; font-weight: bold;">var</span> lugarCorte <span style="color: #339933;">=</span> texto.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">' '</span><span style="color: #339933;">,</span> opciones.<span style="color: #660066;">nCaracteres</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>lugarCorte <span style="color: #339933;">!=</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//Sacamos el texto hasta el lugar de corte</span>
    <span style="color: #003366; font-weight: bold;">var</span> str1 <span style="color: #339933;">=</span> texto.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>lugarCorte<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
	<span style="color: #006600; font-style: italic;">//Sacamos el resto del texto, que vamos a esconder</span>
  	<span style="color: #003366; font-weight: bold;">var</span> str2 <span style="color: #339933;">=</span> texto.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span>lugarCorte<span style="color: #339933;">,</span>texto.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//Por último insertamos el enlace para ver más texto</span>
	objeto.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>str1 <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;a href=&quot;#&quot; class=&quot;textoSuspense&quot;&gt;'</span> <span style="color: #339933;">+</span> 
				opciones.<span style="color: #660066;">textoSuspense</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/a&gt;'</span> <span style="color: #339933;">+</span> 
				<span style="color: #3366CC;">'&lt;span class=&quot;oculto&quot;&gt;'</span> <span style="color: #339933;">+</span> str2 <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//Ocultamos el resto con el método hide de jQuery</span>
	$.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.oculto'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
	<span style="color: #006600; font-style: italic;">//Enlace para expandir o contraer el texto</span>
    objeto.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>
	  <span style="color: #3366CC;">'&lt;div class=&quot;clearboth&quot;&gt;'</span> <span style="color: #339933;">+</span>
	    <span style="color: #3366CC;">'&lt;a href=&quot;#&quot; class=&quot;anchorTexto&quot;&gt;'</span> <span style="color: #339933;">+</span> opciones.<span style="color: #660066;">linkExpandir</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/a&gt;'</span> <span style="color: #339933;">+</span>
	  <span style="color: #3366CC;">'&lt;/div&gt;'</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                                                                      
<span style="color: #006600; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ahora, sigamos en el siguiente apartado por donde están los puntos suspensivos (ya queda poco).</p>
<h4>Manejando el evento onClick para ampliar o reducir el texto</h4>
<p>Lo que falta por hacer es manejar que cuando se le da al link para ver más efectivamente se vea el resto del texto, además de que el texto se oculte. Hagamos esto entonces: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// ... Lo anterior ...</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> ControlLink <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.anchorTexto'</span><span style="color: #339933;">,</span> objeto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> restoTexto <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.oculto'</span><span style="color: #339933;">,</span> objeto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> suspense <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.textoSuspense'</span><span style="color: #339933;">,</span> objeto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
ControlLink.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>ControlLink.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> opciones.<span style="color: #660066;">linkExpandir</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    restoTexto.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'normal'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    ControlLink.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>opciones.<span style="color: #660066;">textoContraer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    suspense.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;display&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
    restoTexto.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'normal'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    ControlLink.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>opciones.<span style="color: #660066;">linkExpandir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    suspense.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;display&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;inline&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #006600; font-style: italic;">// ... Cierre de llaves abiertas antes....</span></pre></td></tr></table></div>

<p>En esta última parte vemos si tenemos el texto oculto o no. Y si está abierto cambiamos el texto al hacer click y lo ocultamos. Y viceveras si es al revés. Recuerda que estamos controlando el evento click en el enlace para expandir o contraer el texto, simplemento eso.</p>
<h3>Recapitulación</h3>
<p>Y eso es todo, hemos creado nuestro plugin que realmente funciona haciendo algo y además es configurable hasta cierto punto. Para llamarlo (puedes ver el código en el ejemplo) haremos lo siguiente, como hemos dicho al principio:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> language<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;Javascript&quot;</span><span style="color: #339933;">&gt;</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#1'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">acortar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
  	nCaracteres<span style="color: #339933;">:</span> <span style="color: #CC0000;">300</span><span style="color: #339933;">,</span>
  	nExtra<span style="color: #339933;">:</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">,</span>
  	textoSuspense<span style="color: #339933;">:</span> <span style="color: #3366CC;">'...'</span><span style="color: #339933;">,</span>
  	textoContraer<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Contrae'</span><span style="color: #339933;">,</span>
  	linkExpandir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Click para Expandir'</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Estos son los parámetros por defecto, por tanto si se los pasamos no pasa nada, pero es sólo un ejemplo, puedes pasarle otros.</p>
<div class="descarga">
<a href="http://static.polargeek.net/uploads/jquery/PrimerPlugin.zip" class="descargar"></a><a href="http://www.polargeek.net/wp-content/uploads/demos/plugin/index.html" class="demo"></a>
</div>
<h2>Conclusiones</h2>
<p>Por último destacar que lo más importante es que te quedes con cómo se construye cualquier plugin, más que con la implementación en concreto que hemos realizado. Aquí dejo los sitios que han ayudado a este post, sobre todo el de Jeremy Martin, de donde he sacado la idea del plugin y lo he modificada y separado para que sea más entendible. </p>
<ul>
<li><a href="http://blog.jeremymartin.name/2008/02/jtruncate-in-action.html">Blog de Jeremy Martin</a> | Plugin original.</li>
<li><a href="http://docs.jquery.com/Core">Explicación del Core de jQuery</a> | Documentación oficial.</li>
<li><a href="http://kamikaze00x.deviantart.com/art/Dropbox-FUSION-124352929">Autor de la &#8220;caja&#8221;</a> | DevianArt</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/como-crear-un-plugin-en-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>20 buenas prácticas en CSS</title>
		<link>http://www.polargeek.net/20-buenas-practicas-en-css/</link>
		<comments>http://www.polargeek.net/20-buenas-practicas-en-css/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 06:00:15 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[buenas prácticas]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1656</guid>
		<description><![CDATA[Buenas prácticas a la hora de usar CSS para nuestros diseños. Distintas técnicas útiles para el día a día en el diseño web.]]></description>
			<content:encoded><![CDATA[<p>CSS es algo inseparable del desarrollo y en concreto del diseño web. A día de hoy pocas páginas existen (no conozco ninguna) que no utilice al menos un archivo CSS para aplicar estilos. Así que veamos juntos un lista de buenas prácticas, que al final no son más que consejos aceptados por la comunidad y que suelen ayudar a mejorar nuestro código.</p>
<h2>1. Entender qué es CSS</h2>
<p>Lo más importante es entender la esencia de CSS (Cascading Style Sheets), hojas de estilo en cascada, y la palabra clave aquí es <strong>cascada</strong>. Esto implica que los estilos se aplican desde el elemento que lo definimos hacia todos los hijos: </p>
<div class="img"><img src="http://static.polargeek.net/uploads/css/dom.png" alt="DOM" /></div>
<p></p>
<p>Esta imagen de SitePoint representa una página web muy simple, pero muestra claramente lo que es para el navegador úna página web: un árbol. En concreto se llama DOM, aunque tiene muchos detalles, nos sirve para entender que cuando aplicamos un estilo a body, por ejemplo, tanto h1 como p se ven afectados si ese estilo es aplicable para esos elementos.</p>
<h2>2. Evita usar demasiadas clases</h2>
<p>Cuando estés diseñando probablemente solo veas clases y más clases posibles por todos lados, pero a veces no es necesario usando selectores más sencillos. Echemos un vistazo al siguiente HTML y CSS aplicado:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;principal&quot;</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;titulo&quot;</span>&gt;</span>Título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;parrafo&quot;</span>&gt;</span>Texto ejemplo<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#principal</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">960px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>	             
&nbsp;
<span style="color: #cc00cc;">#principal</span> <span style="color: #6666ff;">.titulo</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">16px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>                   
&nbsp;
<span style="color: #cc00cc;">#principal</span> <span style="color: #6666ff;">.parrafo</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>La primera tentación al dar estilos puede ser algo como eso, pues bien, si nos damos cuenta no es necesario el uso de clases, reduciendo así la complejidad de nuestro HTML. Quedaría algo más sencillo: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;principal&quot;</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Texto ejemplo<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#principal</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">960px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>	             
&nbsp;
<span style="color: #cc00cc;">#principal</span> h1 <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">16px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>                   
&nbsp;
<span style="color: #cc00cc;">#principal</span> p <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<h2>3. Primero estructura HTML, después CSS</h2>
<p>Es preferible empezar por crear la estructura HTML de las páginas que vayamos a maquetar, porque eso facilitará enormemente después el proceso de darle estilos. Una vez que se ha creado un esquema de cómo va a ser la página se puede identificar qué elementos tendrán un id, o una clase&#8230;etc.</p>
<h2>4. Usa Reset CSS</h2>
<p>Muchos navegadores modifican los estilos por defecto por distintas razones, como que cuando veas una imagen no se junte con la ventana, para evitarlo podemos usar una serie de propiedades CSS que hagan que todos los navegadores tengan los mismos estilos por defecto, en <a href="http://developer.yahoo.com/yui/reset/">esta página</a> puedes encontrar uno de ellos, aunque hay muchos más.</p>
<div class="img"><img src="http://static.polargeek.net/uploads/css/resetcss.jpg" alt="Reset CSS" /></div>
<h2>5. Da información al principio del CSS</h2>
<p>Puedes usar un comentario como plantilla para ponerlo en todos los archivos CSS, de tal forma que otros desarrolladores puedan ver lo que tenías en mente cuando lo estabas escribiendo. Algo como esto: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">/*---------------------------------------------------------------
- Nombre:				style.css
- Ultima actualización:			23/07/10
- Website:				www.polargeek.net
- Autor:				José
== ESTRUCTURA ===================================================
- Ancho mínimo:				980px
- Columnas:				2
- Posición cuerpo:			Centrado
---------------------------------------------------------------*/</pre></td></tr></table></div>

<p>Este es sólo un ejemplo, puedes incluir las secciones que consideres oportunas, si estás pensando ahora mismo en si esto haría que el archivo ocupara más y la carga de la página fuera más lenta te doy la enhorabuena porque es el primer paso para mejorar la carga. Vamos al siguiente punto.</p>
<h2>6. Los estándares promueven el desarrollo</h2>
<p>Seamos francos, IE es uno de los principales lastres para el desarrollo de la Web, pero nosotros, como desarrolladores, deberíamos validar nuestras páginas para saber que realmente estamos cumpliendo los estándares y usando apropiadamente este lenguaje de marcado.</p>
<p>Es cierto que a veces, por el simple hecho de usar CSS 3 no podemos validar, pero cuando no lo uses deberías hacerlo.</p>
<h2>7. No uses hacks de CSS</h2>
<p>Todos sabemos que hacer una página cross-browser es muy tedioso y solemos intentar terminarlo lo antes posible, pero usando hacks en CSS lo único que conseguimos es tener un código más difícil de mantener y que puede fallar en un futuro más próximo de lo que cabría esperar.</p>
<p>Si se quiere usar unos estilos en concreto para un navegador es mejor usar un CSS específico e incluirlo con un comentario condicional.</p>
<h2>8. Evita estilos en el HTML</h2>
<p>Prácticamente siempre edita los estilos en un archivo CSS aparte, así mantendremos nuestro HTML más limpio.</p>
<p>Existen excepciones como los correos en formato HTML, donde no puedes enlazar un CSS y todos los estilos se deben poner en el HTML, pero salvo este caso y pocos más nunca se deben usar.</p>
<h2>9. Combina selectores</h2>
<p>Si varios elementos comparten estilos júntalos en una sola línea con comas, algo como: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#principal</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">12px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#5D5D5D</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>                
&nbsp;
<span style="color: #cc00cc;">#comentario</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">12px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Se podría quedar en esto: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#principal</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#comentario</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">12px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>                
&nbsp;
<span style="color: #cc00cc;">#principal</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#5D5D5D</span><span style="color: #00AA00;">;</span>  
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Que se podría pensar que es trivial, pero nada más lejos de la realidad. Si tenemos 5 divs por toda nuestra página y en todos hemos decidido mantener un color naranja, cuando cambiemos el diseño y digamos que ahora estos divs van a ser negros, será mucho más fácil cambiarlo una vez que cinco.</p>
<h2>10. Usa minúsculas en todo el CSS</h2>
<p>Esta es una de las convenciones que se adoptan y que realmente favorecen a todos. Haciendo todo el CSS con minúsculas el archivo queda más limpio y unificado. Así que lo más acertado son las minúsculas, incluso para el nombre del archivo, pero esto ya va por gustos.</p>
<h2>11. La navaja de Ockham es tu amiga</h2>
<p>Para no liarnos con filosofía ahora, esto quiere decir que mientras más simple mejor. Siempre que quieras hacer algo que es común y no sepas cómo, busca por Google, porque probablemente haya un modo facil.</p>
<p>Por ejemplo, imaginemos que queremos centrar un div, pues con esta sencilla propiedad y definiendo el ancho quedaría centrado: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#principal</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">960px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>La razón es bien simple, le decimos al navegador que haga que en la izquierda y la derecha haya el mismo hueco, así que la única manera es poniéndolo en el centro (el 0 no es estrictamente necesario, sólo se refiere al margin-top y al margin-bottom a la vez).</p>
<h2>12. Comenta el CSS</h2>
<p>Como casi cada cosa que hagas en la vida (sobre todo profesional) se te olvidará los detalles al poco tiempo, así que es preferible comentar casi todo lo que no tengas claro en un principio y así te podrás acordar después cuando tengas que retocar el diseño.</p>
<h2>13. Usa los selectores justos y necesarios</h2>
<p>Intenta no abusar de los selectores, porque hacen que la renderización de la página sea más lenta, de hecho a partir de 3 selectores deberías empezar a replantearte hacerlo de otro modo. Echemos un vistazo a este código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">body div<span style="color: #6666ff;">.central</span> a span <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> orange<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Esto tarda mucho más que lo siguiente: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#link</span> span <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> orange<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Y si el anchor que contiene el span tiene el id &#8220;link&#8221; hará exáctamente lo mismo, pero mucho más rápido.</p>
<h2>14. Comprime tus archivos CSS</h2>
<p>Cuando trabajes en un diseño es mejor mantener una versión de desarrollo, local, y otra comprimida en el servidor. Esto ahorrará tiempo de carga y ancho de banda.</p>
<p>Hay muchas herramientas a día de hoy para hacer esta tarea, personalmente uso <a href="http://csscompressor.com/">Css Compressor</a>, aunque puedes buscar la que más se ajuste a las necesidades. Al fin y al cabo todas tienen un objetivo común, y es quitar espacios innecesarios, comentarios, e incluso algunos te reordenan el CSS (cuidado con esto último que se pude liar).</p>
<p>La única desventaja a mi parecer que puede tener esto es que hay que hacerlo a mano, es decir, que tienes que copiar el CSS, llevarlo a alguna aplicación que haga el trabajo y pegar en el archivo final el resultado. Esto <strong>va a tener una solución por parte de Google no dentro de mucho</strong>, que va a comprimir el CSS automáticamente en el servidor sin tener que hacerlo nosotros, informáré cuando esté.</p>
<h2>15. Los frameworks pueden ahorrarte mucho tiempo</h2>
<div class="img"><img src="http://static.polargeek.net/uploads/css/blueprint.png" alt="BluePrint" /></div>
<p>Hay muchísimos frameworks CSS que pueden ayudarte, sobre todo, a empezar un nuevo diseño. Hay multitud de frameworks, quizá dos de los más famosos sean <a href="http://www.blueprintcss.org/">Blueprint</a> y <a href="http://960.gs/">960 Grid System</a>. Vale la pena echarles un vistazo, aunque sólo sea por la cantidad de tiempo que pueden ahorrarte.</p>
<h2>16. Intenta hacer secciones dentro del CSS</h2>
<p>Para que la hoja de estilos quede aún más clara, suele ser bueno &#8220;separarla&#8221; con secciones, como: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*Reset CSS*/</span>
...
<span style="color: #808080; font-style: italic;">/*Header*/</span>
...
<span style="color: #808080; font-style: italic;">/*Body*/</span> 
...
<span style="color: #808080; font-style: italic;">/*Footer*/</span>
...</pre></td></tr></table></div>

<h2>17. Usa propiedades que agrupen varias</h2>
<p>También se suelen llamar &#8220;shorthand&#8221;, y nos permite reunir en una sola propiedad varias. Aquí puedes ver un ejemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#principal</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">12px</span><span style="color: #00AA00;">;</span>
	margin-rigth<span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">margin-bottom</span><span style="color: #00AA00;">:</span> <span style="color: #933;">8px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">12px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>	                  
&nbsp;
<span style="color: #808080; font-style: italic;">/*Lo mismo que: */</span>
&nbsp;
<span style="color: #cc00cc;">#principal</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">12px</span> <span style="color: #933;">10px</span> <span style="color: #933;">8px</span> <span style="color: #933;">12px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>También hay otras, como font, padding, border&#8230;etc</p>
<h2>18. El SEO está en el HTML no en el CSS</h2>
<p>Cuando pienses en optimizaciones SEO para una página, tienes que tener en cuenta que lo importante es el HTML, no como se vea. Si tienes 10 elementos h1 y a cada uno le das un estilo para que parezcan h1, h2, h3 lo estás haciendo mal. Google no tendrá en cuenta eso, sino que realmente tienes 10 &#8220;titulares&#8221; en una misma página, lo cual no es muy lógico.</p>
<p>En este línea, pasa algo parecido con muchos textos, que se ocultan con CSS, pero en realidad no se ven. Algo que no le suele gustar a Google y se considera spam, en la mayoría de los casos. Por tanto si usas CSS para ocultar algo que está en el HTML lo estás haciendo mal.</p>
<h2>19. Usa Sprites</h2>
<p>Los sprites en CSS son un conjunto de imágenes puestas juntas en una sola imagen más grande, y en vez de poner las imágenes directamente en HTML, se seleccionan con la propiedad de CSS background-position, de tal forma que solo se tiene que mandar una imagen y se ahorra ancho de banda.</p>
<p>Además ahorra un problema un poco tonto, pero que personalmente no me gusta nada. Cuando hacemos hover sobre una imagen y esta debe cambiar pasa un rato hasta que se recibe la imagen. Si se usa un sprite la imagen ya estará en el cliente y no se tendrá que esperar.</p>
<h2>20. Código sostenible = Código limpio</h2>
<p>Esto se puede aplicar a todos los lenguajes, pero hablando de estilos con CSS, tenemos que tener en cuenta que si creamos un archivo de 300 líneas, algo bastante común, al menos tenemos que hacerlo fácil de leer. Por ejemplo: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.caja</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#FFF</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">312px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Queda mucho más limpio que: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.caja</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#FFF</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>width<span style="color: #00AA00;">:</span> <span style="color: #933;">312px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Por supuesto que esto también va en gustos y que el segundo ocupa menos en bytes, pero como he dicho en el punto 14, es mejor comprimir el CSS en una versión y en otra tenerla sólo para nosotros donde trabajar y poner los comentarios que queramos sin preocuparnos de que después se verán.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/20-buenas-practicas-en-css/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Aptana Studio 3 beta ya disponible</title>
		<link>http://www.polargeek.net/aptana-studio-3-beta-ya-disponible/</link>
		<comments>http://www.polargeek.net/aptana-studio-3-beta-ya-disponible/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 22:09:21 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[beta]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1646</guid>
		<description><![CDATA[Repaso de las nuevas características de la versión 3 de Aptana Studio, desvelando las principales novedades que ayudarán mucho a los desarrolladores.]]></description>
			<content:encoded><![CDATA[<p>La beta de la versión 3 de Aptana basada en Eclipse Helios ya está disponible. Entre sus principales novedades contamos con: </p>
<h2>Soporte HTML5 y ayuda crossbrowser</h2>
<p>En esta versión contamos con ayuda en el editor de HTML para saber que navegadores soportan ciertas etiquetas salidas recientemente, además de la facilidad de sugerencia de tags con el que ya contábamos en versiones anteriores.</p>
<div class="img"><img src="http://static.polargeek.net/uploads/aptana/html5.png" alt="Aptana HTML 5" /></div>
<h2>Integración con Git</h2>
<p>Posibilidad de usar Git desde el propio Aptana, lo cual facilita bastante las cosas.</p>
<div class="img"><img src="http://static.polargeek.net/uploads/aptana/git.png" alt="Aptana Git" /></div>
<h2>Terminal integrado</h2>
<p>Acceso rápido a un terminal desde el que podemos hacer la mayoría de acciones que hacemos en un terminal normal, pero con la facilidad de que no tenemos que irnos a otra ventana, que al final es uno de los objetivos cuando se opta por un IDE para desarrollar.</p>
<div class="img"><img src="http://static.polargeek.net/uploads/aptana/terminal.png" alt="Aptana Terminal" /></div>
<h2>Personalización del IDE</h2>
<p>Posibilidad de crear scripts que facilitan ciertas acciones repetitivas como se ve en la imagen de la página oficial.</p>
<div class="img"><img src="http://static.polargeek.net/uploads/aptana/ide.png" alt="Aptana IDE" /></div>
<h2>Debugger integrado para Ruby On Rails</h2>
<p>Los desarrolladores que hacen uso de Ruby On Rails van a agradecer esta nueva característica que se equipara a los debuggers de PHP con los que contamos en casi todos los IDEs famosos a día de hoy.</p>
<div class="img"><img src="http://static.polargeek.net/uploads/aptana/debugger.png" alt="Aptana Debugger" /></div>
<h2>Eclipse</h2>
<p>No olvidemos que Aptana, como pasa con Zend Studio, se basa en Eclipse, por tanto también tenemos la posibilidad de usar las extensiones que existen para este IDE, que probablemente sea el más usado por todo tipo de desarrolladores de una forma u otra.</p>
<h2>Vídeo y descarga</h2>
<p>Sin más, os dejo con uno de los vídeos que nos desvelan más características de esta versión de Aptana.</p>
<p><object width="619" height="348"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8253946&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=8253946&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="619" height="348"></embed></object></p>
<p>Página Oficial de Aptana | <a href="http://aptana.com/products/studio3">Descarga de Aptana 3 (beta)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/aptana-studio-3-beta-ya-disponible/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Buenas prácticas de JavaScript por Google</title>
		<link>http://www.polargeek.net/buenas-practicas-de-javascript-por-google/</link>
		<comments>http://www.polargeek.net/buenas-practicas-de-javascript-por-google/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 04:00:35 +0000</pubDate>
		<dc:creator>José</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.polargeek.net/?p=1636</guid>
		<description><![CDATA[Conjunto de buenas prácticas y guía de estilo de Google, donde se destaca y se explica lo más importante detenidamente. También hay ejemplos de todo para que comprendamos más fácilmente cada cosa.]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Javascript, como quizá ya he dicho alguna vez, es el lenguaje con mayor relación de uso y desconocimiento del mismo, y cuando falla, la gente se sorprende, a pesar de que hayan empezado a programar en JavaScript sin tener ni idea del asunto.</p>
<div class="img"><img src="http://static.polargeek.net/uploads/javascript/google_logo.png" alt="Logo Google" /></div>
<p>Aquí vemos una serie de buenas prácticas traidas de Google, en su mayoría, que nos aclararán muchas ideas y nos ayudarán a mejorar nuestro código.</p>
<h2>Buenas prácticas</h2>
<h3>Uso de la palabra var</h3>
<p>A pesar de que se puede declarar una variable dentro de una función sin var, no es recomendable, porque no está claro en que contexto podemos acceder a ella. De tal forma, que no hay colisiones de nombres entre diferentes variables.</p>
<h3>Uso de punto y coma</h3>
<p>Quizá no sepas que JavaScript tiene por defecto lo que se llama <i>implicit insertion</i>, esto significa que por defecto inserta punto y coma el solito antes de cada salto de línea. Esto, que en principio podría parecer bueno y cómodo se convierte en un auténtico dolor de cabeza en ciertos casos, como este: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">MyClass.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">myMethod</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #CC0000;">42</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// Sin punto y coma</span>
&nbsp;
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">// Inicialización de variables aquí</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Declaramos un método (no nos paremos a lo de prototype, ya lo explicaré en otro post) y después usamos una función anónima, pues bien, a la función primera se le pasa la segunda como parámetro, ¿intuitivo al máximo verdad? Pues para evitarlo sólo tenemos que tener en mente que siempre tenemos que usar los puntos y comas cuando acabemos una línea.</p>
<h3>Usar objetos para tipos primitivos</h3>
<p>Si queremos tener una variable de tipo booleana, o de un tipo primitivo hacer esto puede liar bastante las cosas: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> x <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Boolean<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'hi'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Intuitivamente pensaríamos que no se va a imprimir nada, pero lo cierto es que si ejecutas el código, verás el alert con el texto &#8216;hi&#8217;.</p>
<p>Por tanto cuando queramos iniciar una variable de tipo primitivo, como &#8220;Boolean&#8221;, debemos usar la siguiente sintaxis: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> x <span style="color: #339933;">=</span> Boolean<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'hi'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y ahora no veremos el &#8216;hi&#8217;. De hecho si usamos el typeof para ver el tipo de datos que tenemos podemos comprobar que lo que estábamos creando antes no era un booleano, sino un objeto.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">typeof</span> Boolean<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'boolean'</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">typeof</span> <span style="color: #003366; font-weight: bold;">new</span> Boolean<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'object'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Ambas son true, así que tienes que tener claro cuando estás haciendo una variable de tipo objeto y cuando del tipo primitivo boolean.</p>
<h3>Los estándares se deben imponer</h3>
<p>Usa funciones o métodos estándar antes que otros que no lo son, porque favoreceran la compatibilidad entre navegadores y tu código se podrá integrar en otros más fácilmente, por ejemplo es preferible usar string.charAt(3) que string[3].</p>
<h2>Reglas de Estilo</h2>
<p>En todo lenguaje hay una serie de buenas prácticas, pero también un cierto estilo que nos ayuda a poder entender mejor el código y a adquirir una serie de reglas que hacen que el código sea igual en estilos en cualquier lugar.</p>
<h3>Nombres</h3>
<p>Siempre todo junto y cuando son varias palabras pues con mayúsculas a partir de la segunda.</p>
<ul>
<li>Funciones: estoEsUnaFuncion</li>
<li>Variables: estoEsUnaVariable</li>
<li>Clases: estoEsUnaClase</li>
<li>Enumerados: enumeradoTres</li>
<li>Métodos: estoEsUnMetodo</li>
<li>Constantes: ESTO_ES_UNA_CONSTANTE</li>
</ul>
<h3>Strings</h3>
<p>Preferiblemente con &#8221; (comillas simples) en vez con &#8220;&#8221; (comillas dobles), sobre todo de cara a que cuando escribimos HTML en un string, no tenemos que &#8220;escapar&#8221; las comillas.</p>
<h3>Paréntesis</h3>
<p>Solo cuando hagan falta, por ejemplo, no uses paréntesis en operadores como delete, typeof o void, o después de palabras reservadas como return, throw, case o new.</p>
<h3>Se consciente de lo que es true o false </h3>
<p>Uno de tantos problemas tontos con los que te encuentras cuando programas en JavaScript es asumir que ciertas cosas son verdaderas o falsas. Aquí tienes una lista: </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">null</span> <span style="color: #006600; font-style: italic;">//false</span>
undefined  <span style="color: #006600; font-style: italic;">//false</span>
<span style="color: #3366CC;">''</span> string vacío <span style="color: #006600; font-style: italic;">//false</span>
<span style="color: #CC0000;">0</span> como número <span style="color: #006600; font-style: italic;">//false</span>
&nbsp;
<span style="color: #3366CC;">'0'</span> cero como string  <span style="color: #006600; font-style: italic;">//true</span>
<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> array vacío  <span style="color: #006600; font-style: italic;">//true</span>
<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> objeto vacío  <span style="color: #006600; font-style: italic;">//true</span></pre></td></tr></table></div>

<h3>Comenta con estilo</h3>
<p>Cuando se comenta el código además de hacer la razón por la que hacemos algo tenemos la posibilidad de generar documentación a la vez de manera sencilla, siguiendo una serie de reglas. Google lo hace así, y muchos desarrolladores lo recomiendan, en concreto podemos usar <a href="http://code.google.com/p/jsdoc-toolkit/">JSDoc</a>, y si todos lo hiciéramos sería más sencillo leer el código de otros y entenderlo, así que adelante con ello.</p>
<h2>Más información</h2>
<p>Tienes más consejos y buenas prácticas <a href="http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml#Visibility__private_and_protected_fields_">aquí</a>, hay muchos más, solo he destacado los más importantes y relativamente fáciles de explicar para no irme mucho del tema.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.polargeek.net/buenas-practicas-de-javascript-por-google/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.427 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-01-21 16:54:59 -->
<!-- Compression = gzip -->